January 2008 - Artículos

Buenas,

si te has peleado con los builds de Team Foundation Server sabrás que esta tarea es interesante, pero que al no poseer todavía las herramientas adecuadas puede un poco tediosa. No hay mucha información al respecto, y algunas acciones que pueden parecer muy simples, se complican más de lo necesario.

Es por esto, que una iniciativa como www.tfsbuild.com me parece excelente. Este site propone abordar el mundo de los builds de Team Foundation Server con un formato Wiki (que está de moda, pero que además es muy práctico).

Pues bien será cuestión de ver como evoluciona, ya veo que han tratado algunos temas tan dispares como la compilación de soluciones para el .Net framework 1.1 y para Java !!!

 

Saludos @ Home

El Bruno

 

Share this post :
Crossposting from ElBruno.com

Buenas

Después de los recientes estrenos de los grupos de usuarios .NET de Valencia y Tarragona, le toca el turno de empezar a rodar Second Nug con su evento inaugural "Primeros pasos con CSLA.NET", con Marçal Serrate como ponente de lujo.

Second Nug te invitra a conocer de forma fácil y accesible como crear objetos de negocio profesionales y a crear infraestructuras distribuidas para que tu aplicación jamás se quede pequeña. Ya seas desarrollador de escritorio, de dispositivos móviles o de web, CSLA.NET te puede ser de gran ayuda.

El evento se retransmitirá vía Microsoft Live Meeting de forma totalmente interactiva, con lo que todos podremos participar e interactuar los unos con los otros.

Vente el próximo día 5 de Febrero de 2008, desde las 19:00h hasta las 21:00h (GMT+1), a conocer las posibilidades que te ofrece el Framework CSLA.NET, y si te quedas con ganas de más pásate después del evento por la sala de actos de Microsoft en Second Life para charlar un poco y conocernos entre todos.

Podéis descargar Microsoft Live Meeting 2007 desde el siguiente enlace.

Para el encuentro de después del evento en Second Life tan solo teneis que crearos un avatar y descargar el software gratuito en: http://secondlife.com/

El enlace del registro del evento es:

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032367020&EventCategory=4&culture=es-ES&CountryCode=ES

 

Saludos @ La Finca

El Bruno

 

Share this post :
Crossposting from ElBruno.com
Publicado 30/1/2008 19:54 por El Bruno | 3 comment(s)
Archivado en: ,

Buenas

otro pequeño post para completar el post que inicialmente mostraba cómo crear menus personalizados para nuestros diagramas creados con las Domain Specific Language Tools.

Un detalle que no comenté en su día es que, en el archivo de creación de menús (.ctc), una de las opciones que podemos especificar son una serie de FLAGS que determinarán el comportamiento del menú. Por ejemplo, en la siguiente definición, la línea 9 determina que este menú por defecto aparecerá en modo no visible y que será posible cambiar la propiedad Visible del mismo.

1 // Add additional button definitions here. 2 // Command, Parent Group, Priority, Image, Type, Visibility, Text; 3 //guidCmdSet:duplicate, guidCmdSet:grpidContextMain, 0x0100, OI_NOID, BUTTON, DIS_DEF, "&Display Selected Item Information"; 4 guidCmdSet:duplicate, // Command ID 5 guidCmdSet:grpidContextMain, // Group ID 6 0x0100, // Priority 7 IconDuplicate, // Icon ID 8 BUTTON, // Button Type 9 DEFAULTINVISIBLE | DYNAMICVISIBILITY, // Flags 10 "&Duplicate", // Command Text 11 "&Duplicate", // Menu Text 12 "Duplicate", // ToolTip Text 13 "Duplicate", // Command Well Text 14 "Duplicate", // English Command Name 15 "Duplicate"; // Localized Command Name

El listado completo de opciones con las que podemos los componentes de un menú lo podemos encontrar en http://msdn2.microsoft.com/en-us/library/bb166581(VS.80).aspx.

Luego en la implementación de la función que se encarga de evaluar si se debe mostrar o no, un elemento del menú; implemento una pequeña función que por defecto deja invisible el elemento del menú, a menos que el elemento selecccionado sea un Shape del tipo UserShape.

1 /// <summary> 2 /// Called when [duplicate menu display action]. 3 /// </summary> 4 /// <param name="sender">The sender.</param> 5 /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> 6 internal void OnDuplicateMenuDisplayAction(object sender, EventArgs e) 7 { 8 MenuCommand command = sender as MenuCommand; 9 10 // The popmenu command is by default disabled 11 command.Visible = false; 12 command.Enabled = false; 13 14 foreach (object selectedObject in this.CurrentSelection) 15 { 16 // validate if the selected element is a User Shape 17 if (selectedObject is ElBruno.Dsl15.UserShape) 18 { 19 command.Visible = true; 20 command.Enabled = true; 21 break; 22 } 23 } 24 }

De esta forma logramos que en el menú contextual que tenemos disponible sobre nuestro diagrama; la opción Duplicate sólo este visible cuando despleguemos el menú contextual sobre un Usuario. En el siguiente video la demo:


Video: DSL Tools - Menu

 

Descarga de codigo fuente: http://geeks.ms/files/folders/elbruno/entry67773.aspx

 

Saludos @ La Finca

El Bruno

 

Share this post :
Crossposting from ElBruno.com

Buenas,

periódicamente alguien me pregunta qué software utilizó para grabar los videos/demos que luego incrusto en mis post. La respuesta es simple: Windows Media Encoder.

Personalmente, me gusta WME porque utilizarlo es tan simple como en este pequeño video de 50 segundos. Simplemente seguimos el asistente inicial y listo, tendremos nuestro video (wmv) disponible para subir a cualquier sitio para alojar videos.


Video: Windows Media Encoder Demo

 

Podemos seleccionar la grabación de un video sobre una ventana, sobre una selección de coordenadas o directamente en modo full screen. Además, tenemos la opción de seleccionar la calidad del video a grabar y otras cosillas más. El asistente es muy simple, pero si quieres cambiar alguna opción a un detalle más bajo, puedes modificar estos valores en la configuración de la sesión de grabación.

 

Sin embargo, si necesitas opciones, existen otras herramientas que también sirven para grabar demos. Sobre algunas de éstas herramientas han comentado en los foros de Avanade y realmente algunas me han tentado para probarlas (como al clásico y popular Camtasia)

Por ahora seguiré con Windows Media Encoder y probaré algún trial (Camtasia Studio por ej.). Y, si me decido a cambiar (porque no creo que me decida a desembolsar unos €€€) postearé sobre la nueva herramienta.

 

Saludos @ Valentino's Home

El Bruno

 

Share this post :
Crossposting from ElBruno.com

Buenas

una pregunta recursiva que suelo escuchar de proyecto en proyecto, es cómo se pueden gestionar los requerimientos con Visual Studio Team System. Es cierto que este tipo de tarea depende mucho del esquema de trabajo que se quiera utilizar, y sobre esa base trato de explicar las posibilidades que brinda Visual Studio Team System y cómo podemos adaptarnos a ellas.

Hoy me he encontrado con una serie de 4 posts de Steve Lange donde explica un poco más en detalle el tema y según mi punto de vista lo aborda de una forma muy natural.

  • Part 1:  RM in TFS - Overview
  • Part 2:  RM in TFS - Out of the Box
  • Part 3:  RM in TFS - Partner Integrations
  • Part 4:  RM in TFS - Summary
  •  

    Les recomiendo echarle un vistazo y thanks Steve !!!

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Volvió Led Zeppelin, y si te gusta la música, seguramente admirarás a Jimmy Page como guitarrista. Cuando era pequeño y llegaron a mis manos los primeros vinilos de Led Zeppelin, comprendí donde había nacido toda la música que escuchaba. Fue por esos días donde comencé a aprender a tocar la guitarra.

    Esta habilidad, profesión, o hobby en mi caso requiere una serie de capacidades mínimas, como son la capacidad de comprender los conceptos de básicos de una estructura musical, una cierta habilidad en ambas manos y cierta coordinación entre los componentes previos que nos permitan arrancar una melodia a una guitarra. Personalmente creo que cualquier persona con un poco de práctica es capaz de disfrutar con una guitarra en sus manos.

    Sin embargo existen algunas personas que nacen con un "don" particular que los distingue de las demás. Estas personas se diferencias de las demás cuando tocan la guitarra a través de su swing particular.

    Tengo la suerte de tener muchos amigos, que son excelentes músicos, poseen una destreza manual que les permite interpretar riffs imposibles, pero carecen de ese don que los llevaría a un nivel superior. Es por eso que, no importa dónde lo escuche, siempre identificaré el estilo especial de Carlos Santana, o las tristes melodías de Jimmy Hendrix seres superiores.

    En la informática pasa algo similar; existen personas con una gran capacidad analítica, con grandes conocimientos y que son excelentes profesionales; pero también existe un grupo reducido de personas que además de tener estas características, despiertan una pasión sana por el trabajo que realizan. Cuando trabajas, asistes a un evento o compartes una cerveza con el 2do grupo de personas, usualmente te sientes motivado a enfrentar nuevos retos, a probar nuevas tecnologías.

    He estado viendo parte de la agenda del evento para el lanzamiento de Microsoft Visual Studio 2008, SQL Server 2008 y Windows Server 2008, ahora conocido como Microsoft TechDays y estoy seguro que saldré de allí con más ganas que nunca de acercarme a un teclado. Si a esto le sumo, otro evento interno de Avanade (en una línea muy parecida al anterior) y el desembarco de Joe Satriani en Barcelona, los próximos meses serán moviditos e interesantes.

     

    Saludos @ Home (con la Gibson en la mano)

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas,

    más sobre escenarios especiales cuando trabajamos con las Domain Specific Language Tools; en este caso cómo hacer para que en un Shape gráfico, se cambie el aspecto del mismo dependiendo del valor de una propiedad.

    Sobre el ejemplo que trabajo diariamente, en el elemento UserElement he agregado una nueva propiedad booleana llamada UserState. La idea es que dentro del diagrama visual, se cambie la apariencia del mismo, cuando el valor cambie de True -> False -> True.

     

    Para representar el estado, he modificado el Shape que representa al usuario y le he agregado un nuevo "decorator" llamado IconState que mostrará el estado de la propiedad UserState. Cuando la propiedad sea True, se visualizará una imagen y en caso contrario no se visualizará nada.

     

    Para lograr el efecto de mostrar/ocultar la imagen, podemos realizar la siguiente configuración dentro del panel DSL Details. En primer lugar debemos seleccionar la relación entre el elemento UserElement y UserShape. A continuación dentro de la pestaña Decorator Tabs, seleccionamos el decorator IconState y lo asociamos como muestra la siguiente imagen, asociamos su visibilidad a la propiedad UserState.

     

     

    Internamente la definición del DSL ha generado el siguiente código, donde asocia la visualización del decorator IconState al valor de la propiedad UserState utilizando la función ShapeField.AssociateVisibilityWith(), como podemos ver en las líneas 20 y 21.

    1 /// <summary> 2 /// Class containing decorator path traversal methods for UserShape. 3 /// </summary> 4 internal static partial class UserShapeDecoratorMap 5 { 6 /// <summary> 7 /// Event handler called when decorator initialization is complete for UserShape. Adds decorator mappings for this shape or connector. 8 /// </summary> 9 public static void OnDecoratorsInitialized(object sender, global::System.EventArgs e) 10 { 11 DslDiagrams::ShapeElement shape = (DslDiagrams::ShapeElement)sender; 12 DslDiagrams::AssociatedPropertyInfo propertyInfo; 13 14 propertyInfo = new DslDiagrams::AssociatedPropertyInfo(global::ElBruno.Dsl15.UserElement.NameDomainPropertyId); 15 DslDiagrams::ShapeElement.FindDecorator(shape.Decorators, "NameDecorator").AssociateValueWith(shape.Store, propertyInfo); 16 17 propertyInfo = new DslDiagrams::AssociatedPropertyInfo(global::ElBruno.Dsl15.UserElement.EMailDomainPropertyId); 18 DslDiagrams::ShapeElement.FindDecorator(shape.Decorators, "EMail").AssociateValueWith(shape.Store, propertyInfo); 19 20 propertyInfo = new DslDiagrams::AssociatedPropertyInfo(global::ElBruno.Dsl15.UserElement.UserStateDomainPropertyId); 21 DslDiagrams::ShapeElement.FindDecorator(shape.Decorators, "IconState").AssociateVisibilityWith(shape.Store, propertyInfo); 22 } 23 } 24

    Luego en ejecución nuestro diagrama mostrará u ocultará la imagen, para completar un poco más el ejemplo he agregado una nueva opción a través de un menú contextual que cambia el valor de UserState desde otra ubicación. Y un video vale más que mil imágenes:


    Video: DSL Tools - Custom Visibility Demo

     

    Descarga:

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    n Crossposting from ElBruno.com

    Buenas,

    una de las grandes ventajas del modelado se basa en las capacidades gráficas del mismo; es por eso que de la personalización que le brindemos a nuestros modelos dependerá el exito de los mismos. Existen pequeños detalles que hacen que una aplicación sea de fácil utilización, uno de ellos es la correcta utilización de los Tooltips.

    Nota: Antes de mostrar como se pueden personalizar los Tooltips, me gustaría comentar que el contenido de los mismos, es algo que también tenemos que evaluar. A nadie le gustan esos Tooltips que tienen 1287 caracteres y que nunca podemos terminar de leer; cómo dijo el Negro Fontanarrosa "Una palabra puede herir. Pero un martillazo es feroz"

     

    Utilizando las Domain Specific Language Tools, tenemos la capacidad de personalizar el contenido de los Tooltips de los shapes de una forma muy simple. Por ejemplo, si en un GeometryShape cambiamos la propiedad ToolTip a Variable, como muestro en la figura siguiente, nos obliga a implementar la funcion GetVariableTooltipText.

     

    A esta función la he implementado en una clase parcial y dentro de la misma, he creado una cadena que incluye el nombre y la dirección de mail del usuario seleccionado y a partir de este contenido, arma el tooltip (string) para retornar.

    1 public partial class UserShapeBase 2 { 3 /// <summary> 4 /// Gets the variable tooltip text. 5 /// Creates a tooltip with the name and the email of the user 6 /// </summary> 7 /// <param name="item">The item.</param> 8 /// <returns></returns> 9 private string GetVariableTooltipText(DiagramItem item) 10 { 11 UserShape ueS = item.Shape as UserShape; 12 UserElement ue = ueS.ModelElement as UserElement; 13 string tooltip = string.Format("The user {0} email address is {1}", ue.Name, ue.EMail); 14 return tooltip; 15 } 16 }

    En ejecución, podremos ver cómo el tooltip es una ayuda un poco más humana para nuestros queridos usuarios.

     

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

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com
    Publicado 27/1/2008 20:32 por El Bruno | con no comments

    Buenas

    hace unos días escribí un pequeño post donde comentaba como "limpiar un poco" las bases de datos de Team Foundation Server 2005. Hoy me encuentro con un post donde se animan a todo y en 4 líneas realizan el shrink para todas las bases de datos de un server.

    Interesante el llamado de atención que realiza Mark antes del script, donde advierte una vez más que esto al igual que las peleas de la WWF sólo debe ser realizado por profesionales altamente entrenados:

    declare @sqlstring nvarchar(1024) SET @sqlstring='use ?;DBCC SHRINKFILE (?, TRUNCATEONLY);DBCC SHRINKFILE (?_log, TRUNCATEONLY);BACKUP LOG ? WITH TRUNCATE_ONLY;DBCC SHRINKFILE (?_log, TRUNCATEONLY);'; SELECT @sqlstring; exec master.dbo.sp_MSforeachDB @command1=@sqlstring

    Thanks Mark !!!

    Fuente: http://blogs.msdn.com/mab/archive/2008/01/26/how-to-backup-and-truncate-all-log-files-in-a-database.aspx

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com
    Publicado 26/1/2008 19:36 por El Bruno | con no comments
    Archivado en:

    Buenas,

    he aquí una buena noticia para cerrar la semana, por fin la popular Team Foundation Server Administration Tool se ha actualizado para poder trabajar con Team Foundation Server 2008. Esta herramienta centraliza en un único entorno la administración de usuarios para Team Foundation Server 2008, Reporting Services y Sharepoint Services; de esta forma la administración de nuestros servidores TFS se torna mucho más amigable.

    La versión oficial 1.3 se puede descargar desde http://www.codeplex.com/TFSAdmin/Wiki/View.aspx?title=Home

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas,

    esta semana he tratado de dejar de lado a Microsoft Visual Studio 2008 y he dedicado gran parte de mi tiempo a trabajar con la familia de productos de Microsoft Expression. Ojo que esto no es tan grave, como dijo Oscar Wilde "Bigamia es tener una esposa de más. Monogamia es lo mismo"

    Hace un par de días, y como medida de soporte, han llegado a mis manos un par de libros de Microsoft Expression Blend, he tratado de cambiar el chip y además estoy intentando acomodarme a esta nueva forma de pensar. Una de las cosas que más me ha llamado la atención, es que Microsoft Expression Blend ha quedado en el 1er puesto de mis aplicaciones más utilizadas en Vista, desplazando al clásico y popular IrfanView. Esto sirve de medida para evaluar el nivel de utilización que le estoy dando.

     

     

    Miedo me da seguir por este camino, pero realmente estoy impresionado con la herramienta (después de escribir código para Windows Presentation Foundation siempre con el Notepad, esto es el paraíso). Independientemente del diseño, y tratando de no pensar como un desarrollador, he tratado de dejar "bien definidas" las líneas donde termina el alcance de un diseñador y donde comienza el trabajo de un developer.

    Lamentablemente, cuando se tocan estas líneas, alguna de las herramientas dejar de funcionar correctamente (una pena, si uno no comienza a conocer todos los truquitos necesarios).

    Asi que, dependiendo los tiempo y el trabajo, dejaré un poco de lado a Visual Studio Team System y me pegaré un poco más con la familia de Microsoft Expression.

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas,

    cuando los escenarios de trabajo sobre los que se apoyan nuestros DSLs necesitan interactuar con elementos externos, seguramente deberemos enfrentarnos a la tarea de crear elementos dinámicamente dentro de nuestros diagramas. Esta tarea, es mucho más simple de lo que parece a simple vista, pero lamentablemente no hay mucha información al respecto.

    Este post muestra un pequeño ejemplo de utilización que me ha costado varias noches de cervecitas e insomnio, y seguramente después de leerlo verán que como dijo Tito Einstein «Cada día sabemos más y entendemos menos»

     

    Tutorial

    Sobre la base de ejemplos anteriores, en especial sobre el post en el que mostraba cómo agregar un menú personalizado, crearemos un nuevo menú para duplicar los elementos del tipo User dentro de nuestro diagrama. Este tipo de comportamiento, sumado con los clásicos menúes Cut/Copy/Paste/Duplicate, suele ser muy común de fácil implementación en diagramas creados con las Domain Specific Language Tools.

    Una vez creado el menú Duplicate, y aplicado el filtro para que solo aparezca en los elementos del tipo UserElement, nuestro diagrama quedaría como la siguiente imagen:

     

    A continuación debemos implementar la lógica para nuestro menú Duplicate, el siguiente fragmento de código es un ejemplo de una opción para lograrlo. Entre las líneas 11 y 19, validamos el elemento seleccionado y a partir de la línea 22 creamos un nuevo elemento con los datos del elemento seleccionado. El único cambio significativo es que al nombre del UserElement, le agregaremos el prefijo "Copy of " (línea 29).

    1 /// <summary> 2 /// Called when [duplicate menu click]. 3 /// </summary> 4 /// <param name="sender">The sender.</param> 5 /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> 6 internal void OnDuplicateMenuClick(object sender, EventArgs e) 7 { 8 // valida la seleccion 9 if (this.CurrentSelection.Count > 0) 10 { 11 // get selected object, cast to UserShape and validate 12 object selectedObject = null; 13 IEnumerator enumCS = this.CurrentSelection.GetEnumerator(); 14 while (enumCS.MoveNext()) 15 { 16 selectedObject = enumCS.Current; 17 } 18 UserShape selectedUserShape = selectedObject as UserShape; 19 if (selectedUserShape == null) return; 20 21 // All updates must be done inside a transaction 22 using (Transaction t = selectedUserShape.Store.TransactionManager.BeginTransaction()) 23 { 24 UserElement selectedUserElement = (UserElement)selectedUserShape.ModelElement; 25 26 // create new User Element 27 UserElement us = new UserElement(selectedUserShape.Store, null); 28 us.EMail = "bcapuano@gmail.com"; 29 us.Name = "Copy of " + selectedUserElement.Name; 30 31 // add them to the tree 32 ExampleModel em = (ExampleModel)this.CurrentDocData.RootElement; 33 us.ExampleModel = em; 34 35 // commit changes 36 t.Commit(); 37 } 38 } 39 }

    Un detalle interesante a remarcar, es que TODOS los cambios que realicemos sobre elementos de un diagrama DSL deben ser realizados dentro de una transacción del tipo Microsoft.VisualStudio.Modeling.Transaction. Este punto es muy importante, ya que cada vez que creemos un nuevo elemento, que modifiquemos una propiedad de un elemento, etc. SIEMPRE necesitamos realizarlo dentro de una transacción.

     

    Conclusión

    Una vez compilado y con el proyecto de prueba en marcha, podremos ver que el menú Duplicate crea un nuevo elemento del tipo USerElement y lo agrega al diagrama. Con un poco más de código, podremos agregar funcionalidades extras cómo por ejemplo, setear la posición del nuevo elemento a agregar, agregar además los links que posee el elemento "copiado", etc.

     

     

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

     

    Saludos @ <Fight vs Expression Blend>

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com
    Publicado 22/1/2008 12:58 por El Bruno | con no comments

    Buenas,

    desde hace unos días un servidorcito de Team Foundation Server estaba dando algunos problemas y lanzando Warnings que nadie acusaba.

    Como dice el dicho "en casa de herrero, cuchillo de palo", y es por eso que cuando llegué al server me encontré con casi nada de espacio en el disco ya que los logs de las bases de datos de Team Foundation Server 2005 estaban por las nubes.

     

    Las tareas de mantenimiento de las bases de datos de TFS, no funcionaban correctamente desde hace tiempo y por eso este problema. Parte de la responsabilidad era mía, y como dijo el negro Fontanarrosa: "yo no soy vago, sólo un poco tímido para el esfuerzo"; y además de tímido con menos memoria que un pez globo. No recordaba el par de líneas para "truncar" el log y así ahorrar un poco de espacio.

    Por suerte, el amigo Jesus, acudio a mi rescate con

    1 -- Database_XXX 2 BACKUP LOG Database_XXX WITH TRUNCATE_ONLY 3 DBCC SHRINKDATABASE (Database_XXX)

    donde con el comando BACKUP LOG realizamos una copia de seguridad del log y además especificamos que no queremos un resguardo del Log con TRUNCATE_ONLY. (ojo, que esto no es recomendado por nuestros amigos de Microsoft ya que se pierde el histórico !!!). Finalmente, utilizamos BBCC SHRINKDATABASE para reducir el tamaño de los archivos de datos y de log de la base de datos especificada.

    A partir del ejemplo anterior, el script completo para procesar los datos de los logs de las bases de datos de Team Foundation Server 2005, sería el siguiente:

    1 -- STS_Config_TFS 2 BACKUP LOG STS_Config_TFS WITH TRUNCATE_ONLY 3 DBCC SHRINKDATABASE (STS_Config_TFS) 4 -- STS_Content_TFS 5 BACKUP LOG STS_Content_TFS WITH TRUNCATE_ONLY 6 DBCC SHRINKDATABASE (STS_Content_TFS) 7 -- TFSActivityLogging 8 BACKUP LOG TFSActivityLogging WITH TRUNCATE_ONLY 9 DBCC SHRINKDATABASE (TFSActivityLogging) 10 -- TFSBuild 11 BACKUP LOG TFSBuild WITH TRUNCATE_ONLY 12 DBCC SHRINKDATABASE (TFSBuild) 13 -- TFSIntegration 14 BACKUP LOG TFSIntegration WITH TRUNCATE_ONLY 15 DBCC SHRINKDATABASE (TFSIntegration) 16 -- TFSVersionControl 17 BACKUP LOG TFSVersionControl WITH TRUNCATE_ONLY 18 DBCC SHRINKDATABASE (TFSVersionControl) 19 -- TFSWareHouse 20 BACKUP LOG TFSWareHouse WITH TRUNCATE_ONLY 21 DBCC SHRINKDATABASE (TFSWareHouse) 22 -- TFSWorkItemTracking 23 BACKUP LOG TFSWorkItemTracking WITH TRUNCATE_ONLY 24 DBCC SHRINKDATABASE (TFSWorkItemTracking) 25 -- TFSWorkItemTrackingAttachments 26 BACKUP LOG TFSWorkItemTrackingAttachments WITH TRUNCATE_ONLY 27 DBCC SHRINKDATABASE (TFSWorkItemTrackingAttachments) 28

    Obviamente, con un poco de trabajo se puede realizar un JOB super poderoso, o un script que lo haga automáticamente recorriendo las DBs de todo el server, etc. Pero a mi, este post me sirve de recuerdo de la sentencia SQL y de advertencia para revisar los warnings.

    Descarga del Script SQL.

     

    Saludos @ La Finca

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas,

    hace unos días comenté que ya podíamos navegar por las entrañas del .Net Framework. Además de ver como funcionan internamente algunos componentes, podemos aprender un poco de programación (algo que siempre viene bien para las noches de insomnio con el bebé en brazos).

    Recién leo una noticia en los blogs de MSDN y cual ha sido mi alegría al darme cuenta que además del source code de .Net Fwk, el código fuente del runtime de VB también se liberó (Microsoft.VisualBasic.dll) !!! (el combo más completo es el más interesante :D)

    Después de seguir los pasos del post y de escribir el siguiente código:

    1 Module Module1 2 Sub Main() 3 Dim v As Object = New Valentino() 4 v.ShowMessage() 5 End Sub 6 End Module 7 Public Class Valentino 8 Public Sub ShowMessage() 9 Console.WriteLine("Esta noche no duermo nada") 10 End Sub 11 End Class

     

    veo que en el call stack, la línea número 3, obliga la utilización de Microsoft.VisualBasic.CompilerServices.Symbols (esto de castear un object directamente es una de las tantas virtudes de VB.Net). Después de esperar los 5 segundos obligatorios para que se descargue el pdb y el archivo de código fuente correspondiente, puedo ver la siguiente imagen:

     

    No puedo dejar de caer en la tentación de revisar los *.vb que se descargaron en la siguiente ubicación (lectura para rato)

    c:\Symbols\src\source\.net\8.0\DEVDIV\depot\DevDiv\releases\whidbey\REDBITS\vb\runtime\msvbalib\helpers\Symbols.vb\1\

    Nota: interesante que las 2 últimas líneas del archivo son los siguientes comentarios no válidos para Visual Basic .Net.

    // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
    // Copyright (c) Microsoft Corporation. All rights reserved.

    Ahora si, todo el mundo contento :D

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas

    una de las máquinas virtuales que utilizo frecuentemente me comenzó a acusar problemas de espacio en disco. Si bien siempre existe la posibilidad de agregar un nuevo disco virtual para tener más espacio, traté de incrementar el tamaño del disco de la VM.

    Afortunadamente después de la primera búsqueda en Google Live Search me encontré con una utilidad excelente VHD Resizer de la gente de vmToolkit.com. Esta aplicación además de ser gratis es tan intuitiva como podemos ver en su UI

     

    Simplemente seleccionamos el disco de origen, la ubicación del disco que queremos crear y el nuevo tamaño. Mas simple imposible. Pero, si conoces un poco de Windows, verás que después de cambiar el tamaño o el tipo de disco utilizando esta aplicación, cuando inicies tu VM (Virtual Machine) todavía seguirás viendo el tamaño original del disco.

    Para reclamar el espacio creado en el disco, deberemos utilizar una utilidad de windows: DiskPart. Esta utilidad permite realizar bastantes operaciones con los discos desde windows, y entre ellas podemos extender el tamaño de un disco para aprovechar el espacio no utilizado.

    Sin embargo, si sobre la VM en la que estamos trabajando nuestro disco es el principal, no podremos ejecutar DiskPart desde la misma. La solución es abrir otra máquina virtual y agregar el disco al que le hemos extendido el tamaño con VHD Resizer como secundario. Luego desde esta VM seguiremos los siguientes pasos:

    1. Desde la linea de comandos tecleamos DiskPart
    2. A continuación pedimos la lista de volumenes con LIST VOLUMES
    3. Seleccionamos el volumen sobre el que queremos trabajar con SELECT VOLUME XXX
    4. Finalmente introducimos la opcion para extender el tamaño EXTEND
    5. Listo !!! si abrimos la máquina virtual original, veremos que ya tenemos un Bigger Disk !!!

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas

    este tipo de noticia se reproduce como un politono de los malos. Anoche a altas horas de la madrugada, en aproximadamente 10 minutos me llegaron desde 20 fuente diferentes la noticia:

    Microsoft Visual Studio 2008 está disponible desde hace un tiempo, pero esta característica que se había promocionado hace bastante, no estaba presente. Ahora por fin podemos utilizarla.

    Setup

    La instalación y configuración es muy simple.

    1. Instalar el siguiente HotFix Visual Studio 2008 QFE.  Este Hotfix actualiza un assembly que es parte del Debugger de Visual Studio.

    2. Dentro de Microsoft Visual Studio 2008  ir al menú Tools // Options // Debugging // General, debemos configurar las siguientes opciones

    • Deshabilitar la opción "Enable Just My Code"
    • Habilitar la opción "Enable Source Server Support"

     

    3.  Dentro de la opcion Symbos, debemos especificar la ubicación de la url desde donde se descargarán los elementos para poder acceder al código fuente del .Net Framework. La url de la descarga es http://referencesource.microsoft.com/symbols y a continuación debemos especificar la ubicación para la descarga de los archivos locales; personalmente yo utilizo C:\Symbols.

    4. Finalmente debemos activar la opción "Search the above locations only when symbols are loaded manually".

    5. Listo !!!

    Demo

    Para comenzar a ver un poco las entrañas de .Net, podemos crear un pequeño proyecto Winforms en VB.Net y escribir el siguiente código dentro del mismo.

    1 Public Class Form1 2 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 3 MsgBox("Hola Valentino !!!") 4 End Sub 5 End Class 6

    1. En la línea 3 agregamos un punto de interrupción y lanzamos la aplicación en modo debug.

    2. Una vez que ejecutamos la aplicación en modo Debug y llegamos al punto de interrupción, debemos activar el panel Call Stack (Att+Ctrl+C) para poder ver la pila de llamadas dentro del mismo.

    3. En este punto seleccionamos, por ejemplo XXX, desplegamos el menú contextual y seleccionamos la opción Load Symbols. En este momento, comenzaremos a descargar desde http://referencesource.microsoft.com/symbols toda la información necesaria para poder depurar el Fwk. En este punto hay que tener un poco de paciencia, ya que la descarga suele tardar un poco.

    4. En este punto, podremos navegar el código fuente del Framework y por ejemplo encontrarnos con código tan interesante como el siguiente: el código fuente del evento Load() de un Windows Forms !!!

     

    Si alguien tiene algún tipo de problema o pregunta, Shawn Burke ha escrito un completísimo paso a paso y FAQ al respecto, les recomiendo ehcarle un vistazo http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx

     

    Saludos y Happy Research !!!

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas

    dicen que las 2das partes no son buenas, pero aunque todavía no la he visto, no creo que Alien vs Predator 2 me decepcione (que más se puede pedir, que bestias asesinas llenas de ácido peleando mano a mano contra asesinos superentrenados con los gadgets más cools que existen)

    Sin embargo, tengo que completar cierta información que publiqué hace un tiempo donde comentaba como limpiar un entorno de desarrollo "sucio" de Dsls.

    Además de la información que comenté en el post anterior, el amigo Sebastian completa el paso a paso recomendando además limpiar los archivos de los siguientes directorios:

    Visual Studio 2005

    • C:\Users\<vos>\Documents\Visual Studio 2005\My Exported Templates
    • C:\Users\<vos>\Documents\Visual Studio 2005\Templates\ItemTemplates\CSharp\1033
    • C:\Users\<vos>\Documents\Visual Studio 2005\Templates\ItemTemplates\VisualBasic\1033

    Visual Studio 2008

    • C:\Users\<vos>\Documents\Visual Studio 2008\My Exported Templates
    • C:\Users\<vos>\Documents\Visual Studio 2008\Templates\ItemTemplates\CSharp\1033
    • C:\Users\<vos>\Documents\Visual Studio 2008\Templates\ItemTemplates\VisualBasic\1033

    Gracias por el tip !!!

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com
    Publicado 16/1/2008 22:13 por El Bruno | con no comments

    Buenas

    pequeño tip no relacionado al desarrollo, pero útil para aquel que no lo conozca. Hoy durante una presentación de Avanade en el Foro de Arquitectos, donde mostrábamos parte de la suite Avanade Modeling Tools, tuvismo un problema un tanto extraño. Cada un período de aprox. 5 min, el portátil Dell de mi jefe, se desconectaba del proyector.

    Inicialmente pensamos que era algún problema del cable del proyector, pero después la gente de servicio técnico nos presentó al poco conocido TMM (Microsoft Transient Multi-Monitor Manager).

    Resulta que el cabroncete de TMM intenta automatizar la configuración de pantallas en equipos portátiles. TMM puede cambiar a modo presentación en un equipo portátil cuando se detecta un nuevo monitor. Pero para lograr esto, algunos fabricantes de hardware deben seguir una serie de estandares que hoy no estaban presentes.

    La solución a este problema, es simplemente deshabilitar esta tarea desde el panel de Task Scheduler, dentro de Task Scheduler Library // Microsoft // Windows // MobilePC

     

     

    Saludos @ La Finca

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com
    Publicado 16/1/2008 18:36 por El Bruno | 3 comment(s)
    Archivado en:

    Buenas,

    existen ocasiones donde es necesario realizar algunas tareas que no son para nada agradables (sin embargo lo mejor del día es lejos la Macbook Air). En este caso debía buscar una aguja en un pajar dentro del servidor source control en un servidor Team Foundation Server 2005 con varios años de trabajo sobre el mismo, y muchas más lineas de código aún.

    Recordé que en algún lado existía una herramienta para realizar esta tarea, pero directamente abrí Microsoft Visual Studio 2008, me conecté al servidor y aproveché una de las características que brindan las Visual Studio Team System 2008 Team Foundation Server Power Tools.

    Nota: recordad que ambos entornos se ven completamente, una vez más agradezco la compatibilidad entre Microsoft Visual Studio 2008 y Team Foundation Server 2005. 

    Desde el panel para el control de código fuente, simplemente seleccionamos la posición inicial desde donde queremos comenzar la búsqueda y seleccionamos el tipo de búsqueda desde el menú contextual; es posible realizar búsquedas por estado, por Wildcars y por ChangeSet:

     

    En la siguiente imagen, he realizado una búsqueda de changesets filtrando por mis usuario y ademas, por un rango de fechas entre octubre y noviembre del 2007 (que es más o menos donde estaba lo que estoy buscando). Una vez encontrado el ChangeSet correspondiente, simplemente con Detailes podremos acceder a los detalles (valga la redundancia) del mismo:

     

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com

    Buenas,

    interesante add-in desde MSDN Israel que nos permite crear WorkItems directamente desde Outlook 2007. Especial para aquellas personas que al momento de realizar peticiones, o informar algun tipo de novedad lo hacen en un mail, en lugar de utilizar Team Foundation Server.

    Básicamente se trata de asociar a determinados tipos de elementos, de diferentes proyectos en un servidor Team Foundation Server, las opciones de mapeo para los campos principales de un mail de Outlook.

     

    A continuación veremos que dentro del formulario para la creación y visualizacion de mails en Outlook 2007, tenemos una nueva opción en la ribbon que nos permite crear WorkItems y configurar en Add-In.

     

    Si seleccionamos la opción para crear un nuevo WorkItem, el mismo se crea con el contenido que hemos mapeado de nuestro mail. En este caso no se porqué no resuelve bien el contenido Html del mail al momento de insertarlo en el campo Description del WorkItem.

     

    Realmente curioso y supongo que también útil como ejemplo de integración. Si lo comienzo a utilizar y lo encuentro productivo, lo recomendaré nuevamente.

    Descarga: http://blogs.microsoft.co.il/files/folders/leon/entry9509.aspx

     

    Saludos @ Home

    El Bruno

     

    Share this post :
    Crossposting from ElBruno.com
    Más artículos Página siguiente >