October 2007 - Artículos

 

Buenas

SandCastle sigue evolucionando, y este mes tenemos un nuevo CTP que no arregla todos los bugs que posee presenta las siguientes novedades:

  • Reflection data files
    The reflection files (generated from .net framework 3.5, vs2005 style) are included in the installer. After installation, they can be found under “%DxRoot%\Data\reflection”. In build_sandcastle.bat and build.proj, we have commented out the call to fxReflection.proj.
  • Conceptual example
    A conceptual example is located at “DxRoot\Examples\conceptual”. To build it, please run the following command line commands.
    Cd c:\program files\sandcastle\examples\conceptual
    Build_conceptual.bat
  • Conceptual configs
    conceptual.config is added for conceptual build in each presentation style. The path is “Vs2005(/hana/prototype)\configuration\conceptual.config”.
  • VS 2005 style sheet
    The old Whidbey style sheet is now available at “DxRoot\presentation\vs2005\style\whidby\presentation.css”. To use it, please copy it to “DxRoot\presentation\vs2005\style” and overwrite the existing css. Before doing this, you may want to backup that css file first.
  • Conceptual Authoring schemas
    The schema files under “DxRoot\schemas\Authoring” are schemas for conceptual authoring. The root schema is developer.xsd. The conceptual sample xml can be found at “DxRoot\Examples\conceptual\dduexml”.
  • Reflection schema
    The MrefBuilder reflection schema file is available under “DxRoot\schemas\Reflection” folder.
  • Firefox support
    we fixed many bugs to make the produced html files compatible with  the latest firefox browser.

 

Descarga: http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en

Update: si quieres una interfaz gráfica para la generación y configuracion de SandCastle, puedes echarle un vistazo a http://www.codeproject.com/dotnet/SandcastleBuilder.asp

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Publicado 30/10/2007 8:46 por El Bruno | 1 comment(s)
Archivado en: ,

Buenas

si trabajas mucho con Team Foundation Server seguramente el error TF10128 será familiar.

TF10128: The path {0} contains more than the allowed 260 characters. Type or select a shorter path.

La primera vez que me encontré con este error, fué en la configuración de unos builds automáticos que tenían un path extremadamente complejo. Después de esto aprendí la lección y comencé a guiarme por la regla del <= 260.

Nota: en Microsoft Visual Studio 2008 y el nuevo Build Server las cosas han mejorado mucho, con los diferentes Workspaces que podemos configurar para cada proyecto de Build. Mas información aquí.

 

Hace unos días me volví a encontrar con el mismo error pero esta vez utilizando Team System Web Access cuando trataba de acceder a un documento almacenado en un Team Project.

 

Team System Web Access utiliza un path temporal para almacenar en un caché el contenido de los documentos. La ubicación de este path se puede modificar desde el archivo de configuración de Team System Web Access, usualmente ubicado en:

..\Program Files\Microsoft Visual Studio 2005 Team System Web Access\Web\web.config

Dentro del mismo la configuración por defecto para el directorio de cache suele ser dentro del mismo path de instalacion de Team System Web Access:

<webAccessSettings> <!-- Directory path where cache is stored. --> <localCache path="C:\Program Files\Microsoft Visual Studio 2005 Team System Web Access\Cache" /> ... </webAccessSettings>

Por lo que si queremos "ganar" un poco de espacio lo podemos cambiar por un path más corto:

<webAccessSettings> <!-- Directory path where cache is stored. --> <localCache path="D:\TSWACache" /> ... </webAccessSettings>

asignamos los permisos necesarios sobre la nueva ubicación, reiniciamos el IIS y listo !!!

 

 

Saludos

El Bruno

Crossposting from ElBruno.com

Microsoft Visual Studio 2008 Beta 2

 

Buenas

hace un par de días comenté que las máquinas virtuales de Microsoft Visual Studio 2008 disponibles para descargar desde MSDN expiran el 1ro de Noviembre y para los que estamos probando con las mismas esto puede suponer un problema.

Nuevamente Jeff en su blog, nos comenta la solución para este "problema" (http://blogs.msdn.com/jeffbe/archive/2007/10/27/update-on-expiring-vs2008-beta2-vpcs.aspx)

Básicamente consiste en actualizar la licencia de Windows 2003 Server que posee la máquina virtual con una licencia válida. Si tienes una suscripción MSDN, y dispones de licencias disponibles puedes solucionar este problema rápidamente :D

Otra opción es esperar durante la semana, ya que nuestros amigos de MSDN tienen pensado liberar nuevas versiones de las VPCs con Microsoft Visual Studio 2008.

Fuente: http://blogs.msdn.com/jeffbe/archive/2007/10/27/update-on-expiring-vs2008-beta2-vpcs.aspx

 

Saludos

El Bruno

Crossposting from ElBruno.com

Buenas

¿cuantas veces has tenido que invertir tiempo, en generar informes para justificar el tiempo que has invertido en un proyecto?; en mi caso, esta situación se repite constantemente; y yo estoy en contra de la generación de status reports (aka: informes de estado)

Más de uno se preguntará ¿porqué?; pues porque creo que si para gestionar un proyecto utilizamos las herramientas adecuadas, no es necesario invertir tiempo en crear informes de estado, éstos se deben crear "automáticamente".

 

Si utilizas Visual Studio Team System y Team Foundation Server, puedes aprovechar las diferentes herramientas que posee internamente para agilizar la gestión del proyecto:

Además si instalas Team System Web Access Power Tool, le explicas a los usuarios como utilizarlo; todos los usuarios (que posean los permisos necesarios) podrán conocer en todo momento el estado de cada una de las tareas del proyecto y además podrán tener una visión general del mismo.

 

Asi que, si tu jefe te obliga a invertir eternas horas en cerrar estados de situación para un proyecto; tomate una hora y explícale que existen herramientas que además de permitir generar automáticamente los Status Reports, le ayudarán a poder controlar el ciclo de vida de un proyecto.

Nota: explícale además que como a los informes los puede exportar a Microsoft Excel, luego los puede modificar y pintar como mejor le parezca. Ya sé que esto no es lo mas aconsejable, ya que miente un poco con respecto a la realidad; pero parece que es un requisito INDISPENSABLE para que los jefes de proyecto se animen con Team System ... cosas de la relacion cliente - consultor que no apoyo para nada.

 

 

Saludos cerrando el finde @ Madrid

El Bruno

Crossposting from ElBruno.com

Microsoft Visual Studio 2008 Beta 2

 

Buenas

si como yo, utilizas las VPC con Microsoft Visual Studio 2008 Beta 2 que están disponibles para su descarga en el MSDN, debes tener cuidado. Las mismas quedarán INHABILITADAS A PARTIR DEL 1 DE NOVIEMBRE.

Esto nos comenta Jeff en su blog y obviamente la recomendación es comenzar a sacar de las mismas toda la información que necesitemos resguardar.

Una vez más: fecha de desactivación 1ro Noviembre.

Fuente: http://blogs.msdn.com/jeffbe/archive/2007/10/25/vs2008-beta2-vpcs-expiring-prematurely.aspx

 

Saludos @ Madrid

El Bruno

Crossposting from ElBruno.com

Buenas

hace un tiempo comenté como forzar la actualización de los datos de la base de datos de DataWareHouse de Team Foundation Server a través de uno de los WebServices que expone TFS. Si bien el proceso de actualización puede ser configurado para que sea manejado por uno de los servicios de Team Foundation Server, existen ocasiones donde es necesario forzar la actualización de estos datos.

Si like me estás cansado de invocar manualmente este WebService, puedes crear una pequeña aplicación de Consola que se encargue de este trabajo. He aquí el código de la misma:

Module1.vb

1 Module Module1 2 3 Sub Main() 4 5 Try 6 7 ' define TFS webservice url 8 DefineTfsWebServiceUrl() 9 10 Dim svc As New TFS01.ControllerService 11 12 ' use current credential for webservice calls 13 svc.UseDefaultCredentials = True 14 15 ' start update process 16 Console.WriteLine(String.Empty) : Console.WriteLine(String.Empty) 17 Console.WriteLine("{0} Start Datawarehouse update Process", Now.ToString()) 18 If svc.Run() Then 19 ' get tfs warehouse status until datawarehouse is processed 20 GetWareHouseStatus(svc) 21 Console.WriteLine(String.Empty) : Console.WriteLine(String.Empty) 22 Console.WriteLine("{0} Datawarehouse updated !!!", Now.ToString()) 23 End If 24 25 Catch ex As Exception 26 Console.WriteLine(ex.ToString) 27 End Try 28 29 ' close program 30 Console.WriteLine("Press RETURN to close this program") 31 Console.ReadLine() 32 33 End Sub 34 35 36 ''' <summary> 37 ''' Defines the TFS web service URL. 38 ''' </summary> 39 Private Sub DefineTfsWebServiceUrl() 40 Dim url As String = My.MySettings.Default.TFS01_WareHouseControllerRun_tfs01_ControllerService 41 42 ' define TFS Url 43 Dim msg As String = String.Format("Use the following Url: {0} [Y/N]?", url) 44 Console.WriteLine(msg) 45 46 Dim k As ConsoleKeyInfo = Console.ReadKey() 47 If k.Key = ConsoleKey.N Then 48 Console.WriteLine("Enter TFS App Webservices Url:") 49 url = Console.ReadLine() 50 My.Settings.TFS01_WareHouseControllerRun_tfs01_ControllerService = url 51 My.Settings.Save() 52 End If 53 End Sub 54 55 ''' <summary> 56 ''' Gets the ware house status. 57 ''' </summary> 58 ''' <param name="svc">The SVC.</param> 59 Private Sub GetWareHouseStatus(ByVal svc As TFS01.ControllerService) ' DO NOT DO THIS !!! 60 System.Threading.Thread.Sleep(1000) 61 62 Dim res As TFS01.WarehouseStatus 63 res = svc.GetWarehouseStatus() 64 Do Until res = TFS01.WarehouseStatus.Idle 65 Console.WriteLine("{0} status: {1}", Now.ToString(), res) 66 ' DO NOT DO THIS !!!! 67 System.Threading.Thread.Sleep(1000) 68 res = svc.GetWarehouseStatus() 69 Loop 70 End Sub 71 72 End Module 73

Esta app posee una pequeña función para configurar la url del servidor (línea 39) y otra función para refrescar el estado del proceso de actualización (línea 59) y de esta manera conocer cuando se ha terminado de actualizar los datos en el servidor de Team Foundation Server. Un ejemplo de la salida de la consola es el siguiente:

 

y entre refresco y refresco, podremos ver la evolución de nuestros productos como en la siguiente imagen:

 

 

 

Proyecto de ejemplo: http://geeks.ms/files/folders/elbruno/entry45030.aspx

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

 

Buenas

un post un post un poco espeso sobre un error más espeso aún con el que tuve que lidiar durante un par de semanas.

Introducción

Resulta que cuando realizas operaciones dentro del IDE de Visual Studio 2005 que necesiten trabajar con un IsolatedStorage te encuentras con una excepción del tipo IsolatedStorageException:

System.IO.IsolatedStorage.IsolatedStorageException occurred Message="Unable to determine the identity of domain." Source="mscorlib" StackTrace: at System.IO.IsolatedStorage.IsolatedStorage._GetAccountingInfo(Evidence evidence, Type evidenceType, IsolatedStorageScope fAssmDomApp, Object& oNormalized) at System.IO.IsolatedStorage.IsolatedStorage.GetAccountingInfo(Evidence evidence, Type evidenceType, IsolatedStorageScope fAssmDomApp, String& typeName, String& instanceName) at System.IO.IsolatedStorage.IsolatedStorage._InitStore(IsolatedStorageScope scope, Evidence domainEv, Type domainEvidenceType, Evidence assemEv, Type assemblyEvidenceType, Evidence appEv, Type appEvidenceType) at System.IO.IsolatedStorage.IsolatedStorage.InitStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) at System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) at System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForDomain() at ElBruno.Dsl20.IsolatedStorageHelper.GetIsolatedStorageMaxiumSixe()

Y seguramente, más de uno se preguntará ¿para que quiero trabajar con un IsolatedStorage?; pues un ejemplo puede ser el tratamiento de strings con un StreamWriter, porque cuando el tamaño del mismo en memoria sobrepasa cierto tamaño comienza a "bajar a disco" para realizar algunas operaciones. Es en este momento, cuando internamente el Framework solicita permisos para la creación de un IsolatedStorageFile y las operaciones se realizan en el ámbito del mismo.

 

Problema

Pero desde el IDE de Visual Studio, el escenario se complica un poco. Porque, por ejemplo, cuando ejecutas tu aplicacion en el Visual Studio Experimental Hive, el System.AppDomain principal del IDE no tiene identidad. Ya se que esto parece imposible, pero la siguiente imagen vale mas que mil cervezas lo muestra clarito:

 

Es por esto que frente a cualquier tipo de acción utilizando un IsolatedStorage, la exception "Unable to determine the identity of domain." es lanzada.

 

Solución

Hace un tiempo, posteé este problema en los foros de Extensibilidad ed Visual Studio, pero después de verlo con la gente de Microsoft, no tuve respuesta. Así que me puse a estudiar un poco y encontré un workaround más que obvio para solucionar este problema:

¡¡¡ Ejecuta tus acciones en otro AppDomain con los permisos y evidencias necesarios !!!

He aquí un ejemplo para demostrar como solucionarlo. El siguiente DSL posee una validación en la clase ExampleModel.partial.cs; que cuando es invocada, muestra el tamaño por defecto para un IsolatedStorage para el usuario actual. Para esto se vale de una clase IsolatedStorageHelper con el siguiente código dentro de la misma.

Nota: sobre las validaciones y las Domain Specific Language Tools pueden leer mi anterior post aquí

IsolatedStorageHelper.cs

1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO.IsolatedStorage; 5 using System.IO; 6 7 namespace ElBruno.Dsl20 8 { 9 public class IsolatedStorageHelper : MarshalByRefObject 10 { 11 /// <summary> 12 /// Gets the isolated storage maxium sixe. 13 /// </summary> 14 /// <returns></returns> 15 public double GetIsolatedStorageMaxiumSixe() 16 { 17 IsolatedStorageFile isoFile; 18 isoFile = IsolatedStorageFile.GetUserStoreForDomain(); 19 20 // Open or create a writable file. 21 IsolatedStorageFileStream isoStream = 22 new IsolatedStorageFileStream(GetTemporalFileName(), 23 FileMode.OpenOrCreate, 24 FileAccess.Write, 25 isoFile); 26 27 StreamWriter writer = new StreamWriter(isoStream); 28 writer.WriteLine(Guid.NewGuid().ToString()); 29 30 // Calculate the amount of space used to record the user's preferences. 31 double d = isoFile.CurrentSize / isoFile.MaximumSize; 32 Console.WriteLine("CurrentSize = " + isoFile.CurrentSize.ToString()); 33 Console.WriteLine("MaximumSize = " + isoFile.MaximumSize.ToString()); 34 35 // StreamWriter.Close implicitly closes isoStream. 36 writer.Close(); 37 isoFile.Dispose(); 38 isoFile.Close(); 39 return d; 40 } 41 42 /// <summary> 43 /// Gets the name of the temporal file. 44 /// </summary> 45 /// <returns></returns> 46 private static string GetTemporalFileName() 47 { 48 string tempFile = string.Format("temp{0}.xml", Guid.NewGuid().ToString()); 49 RemoveFileIfExists(tempFile); 50 return tempFile; 51 } 52 53 /// <summary> 54 /// Removes the file if exists. 55 /// </summary> 56 /// <param name="outputFile">The output file.</param> 57 private static void RemoveFileIfExists(string outputFile) 58 { 59 if (System.IO.File.Exists(outputFile)) 60 { 61 System.IO.File.Delete(outputFile); 62 } 63 } 64 } 65 } 66

Dentro de una clase personalizada que he agregado a mi proyecto DSL, ejecuto la función GetIsolatedStorageMaxiumSixe() y muestro el resultado al usuario. Sin embargo si creo la clase IsolatedStorageHelper  de manera convencional, obtengo la excepcion mencionada.

helper = new IsolatedStorageHelper(); isolatedStorageMaxiumSixe = helper.GetIsolatedStorageMaxiumSixe();

Es por esto que he implementado la creación de la clase en un nuevo System.AppDomain como muestran las líneas 43 a 74 en el código de la clase que implementa la validación para el diagrama creado con las Domain Specific Language Tools:

ExampleModel.partial.cs

1 using Microsoft.VisualStudio.Modeling.Validation; 2 using System.IO.IsolatedStorage; 3 using System.IO; 4 using System; 5 using System.Threading; 6 using System.Security.Principal; 7 using System.Security.Permissions; 8 using System.Runtime.InteropServices; 9 using System.Reflection; 10 using System.Security.Policy; 11 using System.Security; 12 using System.Windows.Forms; 13 14 namespace ElBruno.Dsl20 15 { 16 17 [ValidationState(ValidationState.Enabled)] 18 public partial class ExampleModel 19 { 20 21 /// <summary> 22 /// Validates the duplicated users E mail. 23 /// </summary> 24 /// <param name="context">The context.</param> 25 [ValidationMethod(ValidationCategories.Menu | ValidationCategories.Save)] 26 [System.Security.SecurityTreatAsSafe()] 27 [System.Security.SuppressUnmanagedCodeSecurity()] 28 private void ValidateDuplicatedUsersEMail(ValidationContext context) 29 { 30 try 31 { 32 // defines the name and type for the assembly creation 33 string assemblyName = Assembly.GetExecutingAssembly().FullName; 34 string typeName = "ElBruno.Dsl20.IsolatedStorageHelper"; 35 36 // validate user preferences 37 DialogResult res = System.Windows.Forms.MessageBox.Show("Execute IsolatedStorage in new AppDomain ??", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 38 IsolatedStorageHelper helper = null; 39 double isolatedStorageMaxiumSixe = 0; 40 41 if (res == DialogResult.Yes) 42 { 43 // --------------------------------------------------------------- 44 // Create and execute assembly in new AppDomain 45 // --------------------------------------------------------------- 46 47 // Set up the AppDomainSetup 48 AppDomainSetup setup = new AppDomainSetup(); 49 setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory.ToString(); 50 SecurityZone zone = SecurityZone.MyComputer; 51 52 // Set up the Evidence 53 Evidence baseEvidence = AppDomain.CurrentDomain.Evidence; 54 Evidence evidence = new Evidence(baseEvidence); 55 evidence.AddAssembly(assemblyName); 56 evidence.AddHost(new Zone(zone)); 57 58 AppDomain app = AppDomain.CreateDomain("Processor AppDomain", evidence, setup); 59 60 try 61 { 62 63 helper = (IsolatedStorageHelper)app.CreateInstanceAndUnwrap(assemblyName, typeName); 64 isolatedStorageMaxiumSixe = helper.GetIsolatedStorageMaxiumSixe(); 65 66 } 67 catch 68 { 69 throw; 70 } 71 finally 72 { 73 AppDomain.Unload(app); 74 } 75 } 76 else 77 { 78 // --------------------------------------------------------------- 79 // Create and execute assembly in Visual Studio IDE AppDomain 80 // --------------------------------------------------------------- 81 helper = new IsolatedStorageHelper(); 82 isolatedStorageMaxiumSixe = helper.GetIsolatedStorageMaxiumSixe(); 83 } 84 85 // display result 86 MessageBox.Show(string.Format("Isolated Storage Maxium Sixe: {0}", isolatedStorageMaxiumSixe.ToString())); 87 88 } 89 catch (Exception ex) 90 { 91 System.Windows.Forms.MessageBox.Show(ex.ToString()); 92 } 93 } 94 } 95 }

Cuando ejecutamos el DSL y presionamos la opción Validate sobre el menú contextual en nuestro diagrama, veremos el siguiente diálogo de confirmación:

 

Si seleccionamos NO y nuestra clase se instancia dentro del mismo System.AppDomain que el que esta utilizando Visual Studio, veremos que se dispara la excepción IsolatedStorageException:

 

Si en cambio, instanciamos nuestra clase dentro de un nuevo System.AppDomain con los privilegios necesarios, la ejecución irá de maravillas y podremos festejar con unas cañas:

 

Si alguien está interesado en adentrarse un poco más en el tema, puede bajar el proyecto de ejemplo desde aquí (gracias Geeks.ms) y si encuentra algun otro workaround o más información al respecto y quiere compartirla, me avisa :D

Descarga: http://geeks.ms/files/folders/elbruno/entry44654.aspx

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Publicado 23/10/2007 11:58 por El Bruno | con no comments

Buenas,

MsBuild Profiler es una herramienta que permite medir el rendimiento para las secuencias de comandos de un proyecto MSBuild. El analizador de MSBuild muestra un resultado en forma gráfica de rendimiento para todas las secuencias de comandos de MSBuild, esto permite optimizar y ajustar los tiempos de las secuencias internas para un proyecto de Build.

Página Principal: http://www.codeplex.com/msbuildprofiler

Descarga: http://www.codeplex.com/msbuildprofiler/Release/ProjectReleases.aspx?ReleaseId=7848

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas,

mi país es un territorio donde la principal pasión es el futbol. Sin embargo cada tanto, surge un grupo de personas que se destacan en otro deporte, y nos brindan una alegría que es muy díficil de explicar.

La selección Argentina de Rugby (Los Pumas) es un claro ejemplo de trabajo como un equipo ha trabajado y madurado durante casi 8 años, y ha cerrado este ciclo con un resultado impresionante; un 3er puesto en el mundial de Rugby; algo que hace sólo un par de años hubiese sido un insulto para las grandes potencias mundiales de Rugby.

No muchos pueden decir, que han quedado en un escalafon superior a los All Blacks, o a los Wallabys, o que han ganado 2 veces a la selección "de casa". Pero lo que más valoro (como rescató el amigo Martín) es que este equipo siempre fue fiel a sus principios, siempre se mantuvo unido y destacó por la garra y por el corazon con el que jugaron cada partido.

Para muchos argentinos, ayer terminó el mundial de Rugby (aunque hoy se juegue la final Sudáfrica-Inglaterra); pero al igual que paso hace unos años con la selección de basquet, fue el comienzo de una nueva generación y una nueva pasión para disfrutar.

Gracias Pumas por un mes INOLVIDABLE :D

 

Saludos @ Paris

El Bruno

Crossposting from ElBruno.com
Publicado 20/10/2007 16:47 por El Bruno | con no comments
Archivado en:

Buenas

siguiendo con la linea de posts para analizar datos almacenados en Team Foundation Server, hoy como es viernes crearé un Excel con el que puedes competir con tus compañeros para verificar quien:

  • es el que más líneas de código ha agregado
  • es el que más líneas de código ha modificado
  • es el que más líneas de código ha eliminado

Este informe es muy simple, y tomando de base los pasos iniciales para conectarse desde Excel 2007 a nuestro servidor de datos Team Foundation Server DataWarehouse (como comenté aquí), agregaremos los siguientes fields:

  • Seccion Values
    • Code Churn // Lines Added
    • Code Churn // Lines Deleted
    • Code Churn // Lines Modified
  • Row Labels
    • Checked In By // Person
  • Column Labels
    • Team Project // Team Project

como muestra la siguiente imagen

 

A partir de este momento podremos ver, la cantidad de líneas de código agregadas, eliminadas y modificadas por developer y por Team Project; además de los totales generales (que son los que valen para el concurso por un par de cañas).

 

Si además deseas agregar un filtro por fecha, simplemente debemos agregar el field Date // Date a la seccion Column Labels y ya tendremos un gráfico por día o por período para controlar estos valores.

 

 

Saludos @ La Finca

El Bruno

 

PD: la diferencia de cantidad de líneas de código a "mi nombre" se debe a que este servidor de Team Foundation Server ha sido alimentado a partir de una base de datos de Visual Source Safe y todos los items e históricos se han agregado a mi nombre.

Crossposting from ElBruno.com

Buenas

Maxime ha creado y publicado un stencil para Microsoft Visio 2007 con todos los componentes necesarios para diagramas soluciones de Sharepoint 2007. El mismo se publica aquí y se puede descargar desde aquí.

 

Saludos @ La Finca

El Bruno

 

PD: se nota que estoy con modelos y diagramas .... muchos diagramas ... :D

Crossposting from ElBruno.com
Publicado 18/10/2007 16:53 por El Bruno | 2 comment(s)
Archivado en:

Buenas

simplemente había probado con un par de lineas el login con mi passport utilizando VB.Net, pero gracias a este post me encuentro con una cantidad impresionante de controles para diferentes plataformas soportados por Live. Si has leido o te interesan conceptos como SaaS, seguramente verás como Live puede cambiar el concepto de "proyectos de desarrollo" que manejamos actualmente. (nuestros amigos de infraestructura ya lo estan viviendo ...)

 

Windows Live Contacts Control

image001

  1. The Contacts Control allows a web site to benefit from Windows Live contacts, but leaves control of the contact data with the user:
    • It allows the user of a web site to select and approve their contact lists data for transfer to that web site
    • It allows me to contact others
  2. This is a control that appears on a web page with no end-user install needed, but the user does need to login.
  3. It displays your contact lists with IM presence embedded into web sites
  4. It provides the ability to launch an IM conversation (web visitor to IM or e-mail his contacts)
  5. See http://dev.live.com/contacts/

Windows Live Contacts API

image001

  1. Similar to the Contacts Control, but there is no UI. The web site developer can create their own UI without needing to display the Contacts Control on their web site.
  2. It allows third party servers to access user’s WL data without mandatory UI or user confirmation on each use. 
  3. The user must initially approve the third party to have ongoing access to their data, which issues an authorization token to the third party site that the third party site must include in future requests for the user’s data.
  4. See http://dev.live.com/contacts/

Windows Live Spaces Photo Control

image003

  1. The Spaces Control allows a web site to benefit from millions of photos hosted on Windows Live Spaces, but leaves the control of the photo with the user:
    • It allows the user of a web site to send selected photos from the private or public Spaces photo albums to the hosting web site.
    • It allows access to the photo for a limited time. It makes private photos temporarily available to a third party using a time-limited encrypted URL.  
  2. See http://dev.live.com/spacescontrol/

RSS Feeds from Windows Live Spaces

image004

  1. Each Spaces site provides an RSS feed, which can be programmatically filtered and pulled into your web site, thus acting as a content management solution. Get feeds based on:
    • Blogs (by tag or entire list)
    • Lists (custom, Movie, Book, etc.)
    • Photo albums
  2. RSS feeds can be consumed by a mashup and applications, but:
    • It takes some effort to get around domain restrictions in the browser, so it is best to do the work on the server side. 
    • Your web server needs to fetch the RSS data and relay it down to the browser.
  3. See http://dev.live.com/spaces/

Windows Live Agents(for Messenger)

image005

  1. There are two main types of Agents:
    • Natural language (interactive) agents to create an automated online personality. Build a personality for consumers to interact with and possibly tie it to a branded Custom Domains URL
    • Menu driven agents for quick access to data
  2. Agents can have a dynamic display picture in Messenger, launch Messenger Activities, use RSS feeds, have a Windows Live Space for blogs and photos, and be regularly updated to expand its vocabulary.
  3. See http://dev.live.com/agents/

Windows Live Messenger Activities

image006

  1. Activities run within Messenger and they are:
    • Engaging peer-to-peer activities, such as Games, MusicMix and PhotoSwap
    • Additions that improve Messenger for a single user, such as Mimic and Search)
  2. Silverlight applications can run within the Activity window
  3. You can think of an Activity window as a small web browser
  4. Messenger’s Options dialog box can be opened (think of educating the user, helping reset the Today page, etc.)
  5. See http://dev.live.com/messenger/

Windows Live Messenger Add-In

image007

  1. Users can designate an add-in as their “local agent." The agent add-in acts on behalf of the local user, responding to messages from other users without intervention from the local user.
  2. The add-in may also change the local user's status, user tile (photo), personal status message, and friendly name.
  3. See http://msdn2.microsoft.com/en-us/library/aa905655.aspx

Windows Live Spaces Gadgets

image008

  1. A gadget is a mini web-based application that runs on a personal Spaces site
  2. A Gadget Can:
    • Pull data from a web service
    • Pull data from an RSS feed
    • Save user preferences, such as a city name or stock symbol
    • Display different text based on the browser’s language
  3. See http://dev.live.com/gadgets/

Windows Live Writer
Plug-Ins

image009

There are two topics for Writer:

  1. Application API: For launching Writer from other applications, such as a browser Toolbar’s "Blog This" feature so Links, Snippets, Images, or Feed Items can be posted (blogged) on your Spaces site
    • Content Source Plug-ins: For extending the capabilities of Writer to insert, edit, and publish new types of content from within Writer, for example:
    • Images from online photo publishing sites
    • Embedded video or audio players
    • Product thumbnails and/or links from e-commerce sites
    • Tags from tagging services
  2. See http://dev.live.com/writer/

Windows Live Alerts SDK

image010

  1. You can enable Alerts from any RSS feed with  zero development by following the instructions at http://signup.alerts.live.com
  2. With the Alerts SDK, you get more control versus the above signup.alerts site, such as:
    • Alert specific groups of subscribers
    • Redirect URL when user clicks alert
  3. Control the entire subscription process
  4. See http://dev.live.com/alerts/

Windows Live Toolbar

image011

  1. You can create buttons for users to add to the Windows Live Toolbar that:
    • Link to a web site
    • Run a specific search
    • Display a list of links
    • Display information in the button’s menu
    • Display information in an HTML window that drops down from the button.
  2. See http://msdn2.microsoft.com/en-us/library/aa336231.aspx

Windows Live Custom Domains

image012

  1. With Custom Domains, you can build an entire experience and community around a branded URL and co-branded web page header. The co-branded products include:
  2. The Custom Domains SDK can help you automate the management of your Custom Domain user IDs and other aspects related to your Custom Domain. It provides methods to programmatically manage your Custom Domain via a web service.
  3. See http://dev.live.com/customdomains/

Windows Live ID

image013

  1. This allows you to integrate with the Live ID authentication system so the user doesn’t need yet another username and password. Existing 3rd party member username/password can be synced with Live ID. There are two options:
    • Windows Live ID Web Authentication: provides single sign on to Microsoft's online properties and also allows third party developers to leverage the Windows Live ID authentication system for their own website.
    • Windows Live ID Client SDK: allows rich client (desktop) applications authenticate users using their Windows Live ID credentials.
  2. See http://dev.live.com/liveid/

Live Search Web Service API

image014

  1. With the Live Search API you can:
    • Create a custom search engine with our search query language, allowing your web site to have its own search feature
    • Enhance your existing site search with spelling suggestions, images, news articles, feeds.
    • Add images to your mashup from a Live image search
  2. See http://dev.live.com/livesearch/

Live Search Macros

image014

  1. Search Macros help narrow a search to any topic area you prefer. Building one also creates a unique home page for your macro, which makes it easy to use, bookmark and share.
  2. You can integrate these macros into your site, to offer a search box that only searches your site or only searches specific sites on the Internet, just as two examples.
  3. See http://search.live.com/macros/

Live Search Box
for Site Owners

image014

  1. Add a search box to your site that can appear in two ways:
    • Basic Live Search box: Displays results on the Live Search website. Searches a single site that you specify, or the entire Web.
    • Advanced Live Search box: Displays results on your site. Searches multiple sites you specify, the entire Web, or applies a Live Search Macro.
  2. The Live Search box provides a fast, customisable search solution for your website or blog and visitors to your site can search entire web, just your site, or any sites that you choose based on Live Search Macros.
  3. See http://search.live.com/siteowner/

Virtual Earth

image015

  1. The Virtual Earth platform is an integrated set of services that combines unique bird’s eye, aerial, and 3-D imagery with best-of-breed mapping, location and search functionality.
  2. The Virtual Earth map control API provides developers with an API need to develop new 3D applications or update their existing 2D projects to the 3D platform.
  3. See http://dev.live.com/virtualearth/

Microsoft® Silverlight™ Streaming by Windows Live™

image016

  1. Silverlight Streaming is a companion service for Silverlight (a small, on-demand, easy-to-install plug-in that works with all leading browsers) that makes it easier for developers and designers to deliver and scale rich media as part of their Silverlight-based applications.
  2. It is a convenient solution for hosting and streaming cross-platform, cross-browser media experiences and rich interactive applications.
  3. Silverlight Streaming is designed to host two types of content:
    • Rich interactive applications for the Web that can incorporate video, animation, interactivity, and stunning user interfaces.
    • Media such as video (including High-Definition video), audio and images
  4. See http://dev.live.com/silverlight/

 

Fuente: http://blogs.msdn.com/modonovan/archive/2007/10/18/development-features-for-the-windows-live-platform.aspx

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Publicado 18/10/2007 12:48 por El Bruno | 2 comment(s)
Archivado en:

 

Buenas

post rápido mientras termina el partido de Argentina para responder a una de las preguntas del día;

¿cómo puedo conocer las horas trabajadas y pendientes de mi equipo de trabajo?

Pues bien, toda la información que se registra en Team Foundation Server se procesa a una base de datos de DataWareHouse llamada TeamFoudation Data WareHouse. Esta db posee toda la información relacionada con nuestros Team Projects, como horas trabajadas, cantidad de líneas de código, resultados de los builds, etc.; y es el principal repositorio contra el que debemos atacar para realizar consultas.

En este caso y para responder la pregunta que dió origen a este post, utilizaré la mejor y más popular herramienta de Business Intelligence: Excel 2007. Utilizando Excel 2007 nos conectaremos a la base de Analysis Services y consultaremos la información que necesitamos.

 

Tutorial

1. Creamos un nuevo documento en Excel 2007, y desde la pestaña de datos creamos una nueva conexión contra nuestro servidor de datos de Team Foundation Server.

 

2. Seleccionamos la base de datos TFSWarehouse. Antes de finalizar el asistente seleccionamos la opcion para un Chart y una Tabla con los datos.

 

 

3. Desde la lista de valores, seleccionamos WorkItem History // Microsoft_VSTS_Scheduling_RemainingWork y WorkItem History // Microsoft_VSTS_Scheduling_RemainingWork y los arrastramos a la sección Values. Agregamos Date // Date a la sección Column Labels y Person a la sección Row Labels.

 

4. Nuestro gráfico y nuestra tabla de datos ya están configurados y podremos ver información en los mismos como la siguiente imagen. En este caso, asumimos que estamos en el start up de un proyecto y que solamente hemos asignado trabajo a 2 developers Bruno Capuano y Administrator, el único valor que podemos analizar es el de trabajo pendiente.

 

 

5. Cuando se comienza a completar el trabajo y se actualizan las tareas del proyecto, podremos ver que la carga de trabajo se ha distribuido entre trabajo pendiente y trabajo realizado. E inclusive podemos detectar sobrecargas de trabajo si definimos límites por developer.

 

Pues bien, en 5 minutos podemos crear un informe para analizar parte de la información de Team Foundation Server utilizando Excel 2007. Mañana si tengo tiempo, creo un pequeño informe para demostrar como cambia la cantidad de código día a día en un servidor de TFS.

 

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas

he aquí una herramienta muy útil, si necesitas documentar la topología existente de un dominio. Se trata de Microsoft Active Directory Topology Diagrammer: esta herramienta lee una configuración de Active Directory utilizando ActiveX Data Objects (ADO) y, a continuación, genera un diagrama de Visio de los Directorios Activo, además puede agregar la topología de Exchange Server 2003 automáticamente. Los diagramms incluyen dominios, sitios, servidores, los grupos administrativos, grupos de enrutamiento y conectores y puede cambiarse manualmente en Visio si es necesario.

Estos son algunos de los ejemplos que genera (para un dominio un poco grande como el mio :D)

  

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas

nuestros amigos de Live nos prometen para los próximos meses un nuevo SDK para el desarrollo de aplicaciones para Live con Visual Studio (o eso supongo yo ;).

Pueden ver el informe casi oficial en

http://dev.live.com/blogs/devlive/archive/2007/09/21/134.aspx 

o un poco más de detalle en

http://www.infoworld.com/article/07/09/17/Microsoft-to-integrate-Windows-Live-tools-into-Visual-Studio_1.html

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com
Publicado 16/10/2007 10:19 por El Bruno | con no comments
Archivado en: ,,

 

Buenas

cómo comenté hace poco, el equipo de desarrollo de Visual Studio encargado de las Domain Specific Language Tools se ha cambiado de equipo. Uno de los primeros efectos collaterales es que el foro de MSDN de las Domain Specific Language Tools ahora es parte del foro de Visual Studio eXtensibility (VSX).

Asi que si alguien tiene dudas sobre la utilización de las DSLs puede darse una vuelta por http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=57&SiteID=1 

o enviarme un mail, cruzar los dedos y prometerme una cerveza por la respuesta.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Publicado 15/10/2007 19:57 por El Bruno | con no comments
Archivado en: ,

Buenas

si trabajas con Visual Studio 2005 y Team Foundation Server; no puedes dejar de agregar a tu entorno de trabajo Team System Web Access. La conexión a servidores Team Foundation Server en ubicaciones remotas puede ser complicado, además requerimos Visual Studio y Team Explorer como clientes para poder trabajar con los mismos. Team System Web Access nos facilita ese proceso ya que simplemente con un navegador reemplazamos casi completamente a Visual Studio.

Por ejemplo, la capacidad para comparar diferentes versiones de un archivo dentro del Source Control Server es muy útil para detectar cambios entre diferentes versiones. Si poseemos acceso a un servidor con Team System Web Access podremos probarlo muy fácilmente siguiendo estos pasos.

 

1. Dentro de un Team Project, navegamos la pestaña Source y seleccionamos un element dentro de la misma. Para este ejemplo utilizaremos el archivo ImageHelper.cs.

 

2. Sobre la ventana que muestra el contenido del archivo, desplegamos el combo con las opciones y seleccionamos la opcion Version History.

 

Nota: lamentablemente supongo que por las prisas en publicar esta versión de Team System Web Access, la misma no incluye un formateador de texto para la visualización del mismo. Una pena porque ver el código con "colores" mejora mucho la presentación del mismo.

 

3. Dentro del histórico de versiones del archivo, seleccionamos 2 changeset para comparar el contenido de los archivos y presionamos Compare.

 

4. La ventana de comparación que si incluye colores nos muestra los cambios y las diferencias entre las 2 versiones, de la misma manera que lo have VS.

 

 

A partir de este momento si trabajas con TFS y un build falla, simplemente revisando con Team System Web Access los changeset relacionados del build puedes verificar que cambios se han realizado y realizar una sana competición dentro del equipo de desarrollo para ver quien soluciona el bug :D

 

Saludos

El Bruno

Crossposting from ElBruno.com

 

Buenas

hace casi 2 años me enteré de la existencia de Lorem Ipsum; como no podía ser de otra manera posteé al respecto en my space de MSN que utilizaba por allí. Desde ese momento LIpsum se ha convertido en una herramienta indispensable cuando tienes que realizar alguna maqueta con información dummy dentro de la misma (los ejemplos que realizo con Domain Specific Language Tools los completo con LIpsum).

Un paréntesis; Loren Ipsum, posee un generador automatico de palabras / párrafos, donde se puede especificar la cantidad de creacion para los párrafos, palabras, bytes o listas. El resultado generado no es texto simplemente al azar. Tiene raíces en la literatura latina clásica del 45 AC. Por ejemplo, un párrafo generado, podria ser el siguiente:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras congue convallis tortor. Curabitur iaculis pretium erat. Pellentesque dictum pharetra lacus. Fusce hendrerit mattis odio. Quisque luctus bibendum arcu. Nunc vulputate iaculis est. Nullam viverra nisl vitae ligula. Morbi pellentesque libero. Aenean tempor porttitor elit. Vivamus augue. Nulla nec metus at metus dictum ultricies. Morbi luctus, nisi in laoreet interdum, felis eros viverra metus, ac convallis nibh nibh a diam. Cras hendrerit justo suscipit tellus. Sed quis erat. Pellentesque turpis sapien, ultricies vitae, posuere sed, ultricies eu, ipsum. Ut orci pede, accumsan nec, ultricies vulputate, semper sit amet, urna. Sed ac nunc a arcu luctus adipiscing. Curabitur mollis cursus sem. Nulla eget felis.

Lo que no sabía y me enteré de rebote es que dentro de Word 2007, podemos generar información aleatoria de manera muy simple basada en los esquemas de Lorem Ipsum. Simplemente escribiendo la linea =lorem() y presionando enter, generaremos un set de palabras aleatorias.

 

Adicionalmente podemos especificar algunas opciones, como la cantidad de párrafos, cantidad de palabras, etc. en los parámetros de la función: =lorem(10;4)

 

interesante :D

 

Saludos

El Bruno

Crossposting from ElBruno.com
Publicado 12/10/2007 21:00 por El Bruno | 2 comment(s)
Archivado en:

Buenas,

pues es muy simple, solo 2 líneas utilizando la propiedad WindowsIdentity.User:

Module Module1 Sub Main() Dim user As String user = System.Security.Principal.WindowsIdentity.GetCurrent().User.ToString() Console.WriteLine("User SID: {0}", user) Console.Read() End Sub End Module

y además el código de ejemplo para descargar desde aquí.

 

Saludos @ La Finca

El Bruno

PD: pequeños problemas del día a día que si no lo posteo no me acuerdo después :D

Crossposting from ElBruno.com
Publicado 11/10/2007 13:12 por El Bruno | 1 comment(s)
Archivado en:

Buenas

el amigo ppino me envío este joke, supongo que para darme ideas sobre nombres alternativos para Valentino.

No creo que cambie Valentino, porque hay que ser bastante cabroncete ... :P jeje

 

Saludos @ La Finca

El Bruno

PD: para información un poco más seria al respecto, pasen por lo de Chema Alonso :D

Crossposting from ElBruno.com
Más artículos Página siguiente >