July 2011 - Artículos

image47dd1de4

Buenas,

después de una hora intensa dando un repaso a Visual Studio 2010 y Team Foundation Server 2010, aquí dejo la presentación y los links con los materiales que he utilizando en el evento.

Links:

 

Saludos @ Madrid (aunque más cerca de Cadiz)

El Bruno

   

image47dd1de4

Buenas,

desde hace unos días están publicados una serie de retos, que dicho de forma común son problemitas con ganas de romperte la cabeza y sacarte de las casillas, para que te mantengas al días con las últimas tecnologías que están promoviendo los chicos de Microsoft. La idea es que una vez que se publiquen los retos, a la semana se publicará la solucín de los mismos, pero bueno en esa semana podrás tener una excusa para juguetear con estas tecnologías.

Por ahora tenemos los siguientes temas planteados y en el hashtag #RetosMSDN hay más info Open-mouthed smile

 

Saludos @ Benidorm, house of guiris

El Bruno

   

Fuente: http://blogs.msdn.com/b/esmsdn/archive/2011/07/05/los-retos-del-verano.aspx

Publicado 23/7/2011 9:59 por El Bruno | con no comments
Archivado en:

image47dd1de4

Buenas,

eliminar un WorkItem no es una tarea que sea de las más recomendadas. Principalmente porque si has creado un WI que no es útil, es decir te has equivocado, pues quien te dice que no te equivoques y elimines un WI que no es el correcto. Asi que sobre estas bases, nuestros amigos de Redmond habían escondido esta opción muy dentro de las tripas de TFS y hasta las power tools de TFS2008, no teníamos opción de eliminar un WI.

En Team Foundation Server 2010 se ha incorporado una nueva herramienta llamada WitAdmin que entre otras cosas nos permite eliminar un WorkItem desde la línea de comandos con la siguiente sintaxis:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE>witadmin.exe destroywi /collection:http://<tfs>:8080/tfs/<tpc> /id:<WorkItemId>

donde <tfs> es el nombre de nuestro server, <tpc> es la Team Project Collection sobre la que trabajaremos y finalmente <WorkItemId> es el id del WI que se desea eliminar.

Además de poder eliminar un WI, estas son otras opciones que provee la herramienta:

  • changefield

      Changes properties of the field.

      Usage: witadmin changefield /s server /n typename [/name newname]
      [/syncnamechanges true|false] [/noprompt]

      /s                               Specifies the Team Foundation application-tier server. Either use the application-tier server name, or a fully
                                         specified URL such as http://tfs:8080.
      /n                              The reference name of the field.
      /name                        The new name of the field.
      /syncnamechanges    Indicates whether or not the field's values should be
                                        updated in response to identity name changes.
      /noprompt                Turns off the confirmation message.

  • deactivatelinktype

      Deactivates the specified link type.  Users will no longer be able to create
      new links with this type. Existing links of this type will continue to function
      correctly.

      Usage: witadmin deactivatelinktype /s server /n typename

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /n    Specifies the link type to deactivate using either the link type name
             or reference name.

  • deletefield

      Deletes the specified field using the reference name.

      Usage: witadmin deletefield /s server /n typename [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /n           Specifies the reference name of the field to be deleted.
      /noprompt    Turns off the confirmation message.

  • deletelinktype

      Deletes the specified link type from the specified server.

      Usage: witadmin deletelinktype /s server /n typename [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /n           Specifies the link type to delete. The link type name or
                    reference name can be used.
      /noprompt    Turns off the confirmation message.

  • destroygloballist

      Destroys a global list.

      Usage: witadmin destroygloballist /s server /n typename [/noprompt] [/force]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /n           Specifies the name of the global list to destroy.
      /noprompt    Turns off the confirmation message.
      /force       Turns off validation that the an item is not in use before being
                    destroyed.

  • destroywi

      Destroys a work item or work items.  Currently, work items can only be
      destroyed.  Destroying a work item means the work item is physically deleted
      and cannot be restored.  The system does not support logical (and thus
      recoverable) deletion of work items.

      Usage: witadmin destroywi /s server /id id [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /id          Specifies the ID of the work item to destroy.  Supports multiple
                    IDs delimited by commas such as 12,15,23 (with no whitespace).
      /noprompt    Turns off the confirmation message.

  • destroywitd

      Destroys a work item type.  Currently, work item types can only be destroyed.
      Destroying a work item type means that work items of that type are physically
      deleted and cannot be restored.  It does not support logical (and thus
      recoverable) delete of work item types.

      Usage: witadmin destroywitd /s server /p project /n typename [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /p           Specifies the name of the team project.
      /n           Specifies the name of the work item type to destroy.
      /noprompt    Turns off the confirmation message.

  • exportcategories

      Exports the XML definition of a project's work item type categories.

      Usage: witadmin exportcategories /s server /p project [/f filename] [/e
      encoding]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /p    Specifies the name of the team project.
      /f    Specifies the destination file for exporting the work item type
             category XML. If not specified, the XML is output to the display.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.

  • exportgloballist

      Exports the XML definition of global lists defined on a Team Foundation
      Server.

      Usage: witadmin exportgloballist /s server [/f filename] [/e encoding]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /f    Specifies the destination file for exporting the global list XML. When
             it is not specified, the XML is output to the display.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.

  • exportlinktype

      Exports the XML definition of a link type.

      Usage: witadmin exportlinktype /s server [/n typename] [/f filename] [/e
      encoding]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /n    Specifies the name of the work item link type that is to be exported.
      /f    Specifies the destination file for exporting the link type XML. When it
             is not specified, the XML is output to the display.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.

  • exportwitd

      Exports the XML definition of a work item type.

      Usage: witadmin exportwitd /s server /p project /n typename [/f filename] [/e
      encoding] [/exportgloballists]

      /s                    Specifies the Team Foundation application-tier server.
                             Either use the application-tier server name, or a fully
                             specified URL such as http://tfs:8080.
      /p                    Specifies the name of the team project.
      /n                    Specifies the name of the work item type to export.
      /f                    Specifies the destination file for exporting the work
                             item type XML. If not specified, the XML is output to
                             the display.
      /e                    Specifies the name of the .NET Framework 2.0 encoding
                             used to import the XML.  For example, /e utf-7 will use
                             Unicode (UTF-7) encoding.  By default, encoding is
                             automatically detected when it is possible.  If the
                             encoding can not be detected automatically, UTF-8 is
                             used.
      /exportgloballists    Exports the definitions of referenced global lists.  If
                             not specified, global list definitions are omitted.

  • importcategories

      This command imports a work item type category XML file into a team project on
      a Team Foundation Server.  If a category with the same name already exists, the
      new category definition will overwrite the existing definition.  If the work
      item type does not already exist, a new category will be created.

      Usage: witadmin importcategories /s server /p project /f filename [/e
      encoding]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /p    Specifies the team project in which the categories are imported. 
      /f    Specifies the work item type category XML file to import.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.

  • importgloballist

      Imports global lists from an XML definition file onto a Team Foundation
      Server. If a global list that has the same name already exists, the imported
      definition will overwrite the existing definition.  If a global list does not
      already exist, a new one will be created.

      Usage: witadmin importgloballist /s server /f filename [/e encoding]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /f    Specifies the global list XML definition file to be imported.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.

  • importlinktype

      Imports a link type XML definition file into Team Foundation Server. If a link
      type with the same reference name already exists, it will be updated to match
      the imported link type. If the link type does not already exist, a new link
      type will be created.

      Usage: witadmin importlinktype /s server /f filename [/e encoding] [/v]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /f    Specifies the file that contains the link type XML to import.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.
      /v    Validates the work item type or link type XML without importing it.

  • importwitd

      This command imports a work item type XML definition file into a team project
      on a Team Foundation Server.  If a work item type with the same name already
      exists, the new work item type definition will overwrite the existing
      definition. If the work item type does not already exist, a new work item type
      will be created.

      Usage: witadmin importwitd /s server [/p project] /f filename [/e encoding]
      [/v]

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /p    Specifies the team project in which the new work item type is imported.
             This is required, except when the validation-only option is used.
      /f    Specifies the work item type XML definition file to import.
      /e    Specifies the name of the .NET Framework 2.0 encoding used to import
             the XML.  For example, /e utf-7 will use Unicode (UTF-7) encoding.  By
             default, encoding is automatically detected when it is possible.  If the
             encoding can not be detected automatically, UTF-8 is used.
      /v    Validates the work item type or link type XML without importing it.

  • indexfield

      This command turns indexing for a field on or off.

      Usage: witadmin indexfield /s server /n name /index on|off

      /s        Specifies the Team Foundation application-tier server. Either use
                 the application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /n        The reference name of the field whose indexing information will be
                 updated.
      /index    Specifies whether the field should be indexed.

  • listfields

      Shows field information. By default, this lists all fields on the Team
      Foundation Server. Optional parameters can be used to list only specific
      fields.

      Usage: witadmin listfields /s server [/n typename] [/unused]

      /s         Specifies the Team Foundation application-tier server. Either use
                  the application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /n         The reference name of the field to display.
      /unused    Shows all fields that are not being used on the Team Foundation
                  Server.

  • listgloballist

      Lists the names of the global lists on a server.

      Usage: witadmin listgloballist /s server

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
             http://tfs:8080.

  • listlinktypes

      Lists the available set of link types on a server.

      Usage: witadmin listlinktypes /s server

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
             http://tfs:8080.

  • listwitd

      Lists the names of the work item types in the given project.

      Usage: witadmin listwitd /s server /p project

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /p    Specifies the name of the team project.

  • reactivatelinktype

      Activates the specified link type.  Users will be able to create new links
      with this type.

      Usage: witadmin reactivatelinktype /s server /n typename

      /s    Specifies the Team Foundation application-tier server. Either use the
             application-tier server name, or a fully specified URL such as
      http://tfs:8080.
      /n    Specifies the link type to activate using either the name or reference
             name.

  • rebuildcache

      This command invalidates cached data about work item types on all clients.
      Each client will refresh its cache the next time that it connects to the
      server. To avoid server performance issues, you should not run this command
      during typical operating hours.

      Usage: witadmin rebuildcache /s server [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /noprompt    Turns off the confirmation message.

  • renamewitd

      Renames an existing work item type.  Changes the display name of a work item
      type within a specific project.  Also, the work items of that type are updated
      to reflect the new work item type name.

      Usage: witadmin renamewitd /s server /p project /n typename /new newname
      [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /p           Specifies the name of the team project.
      /n           Specifies the name of the work item type to rename.
      /new         Specifies the new name for the work item type.
      /noprompt    Turns off the confirmation message.

  • reportfield

      Specifies whether and how the field is included in the data warehouse for
      reporting. For more information about how to use fields for reporting, see
      http://go.microsoft.com/fwlink/?LinkId=78060.

      Usage: witadmin reportfield /s server /n typename /t type [/formula formula]
      [/noprompt]

      /s           Specifies the Team Foundation application-tier server. Either
                    use the application-tier server name, or a fully specified URL
                    such as http://tfs:8080.
      /n           Reference name of the field.
      /t           Specifies how the field is used in the warehouse for reporting
                    (dimension, detail, measure, disable).
      /formula     Specifies a formula when the field is reported as a measure. The
                    only supported formula is sum.
      /noprompt    Turns off the confirmation message.

Saludos @ Alicante

El Bruno

   

Referencias WitAdmin: http://blogs.microsoft.co.il/blogs/shair/archive/2009/05/20/visual-studio-2010-witadmin-command-line-utility-commands.aspx

image47dd1de4

Buenas,

antes de empezar unas bien merecidas vacaciones vamos a terminar los posts que tengo en modo draft desde hace un tiempo. En primer lugar toca revisar el paso a paso para trabajar con el proveedor de MSSCCI para Team Foundation Server 2010 desde Visual Basic 6.

El punto más importante a tener en cuenta es el orden de instalación de los productos, siempre teniendo en cuenta que los service packs de los mismos son bienvenidos.

1. Visual Basic 6 Enterprise Edition

2. Visual Source Safe, en este caso instalé la versión 2005 > Visual Source Safe 2005.

En este punto, si creamos un nuevo proyecto en Visual Basic 6, veremos que tenemos la opción de conectar el mismo a Visual Source Safe desde el menú Tools

image

Además tenemos la clásica ventana de checkin propia de VB6 + VSS

image

3. Team Explorer 2010, o Visual Studio 2010. Una de las versiones del IDE que nos permita conectarnos a Team Foundation Server 2010.

4. Team Foundation Server MSSCCI Provider 2010.

En este punto vemos que la configuración por defecto de VB6 + VSS ha cambiado y ya podemos trabajar con Team Foundation Server.

image

Y al momento de proteger nuestros cambios, ya veremos el formulario de CheckIn de Team Foundation Server.

image

 

Hasta aquí el detalle más simple, pero lo importante es tener en cuenta el orden de instalación, ya que sin tener instalado Visual Source Safe, yo no he conseguido que MSSCCI me tome los cambios. En Visual Studio 2010 es más simple, ya que las entradas de los Source Control Providers se encuentran en el registro en [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0_Config\SourceControlProviders]

image

pero con Visual Basic 6, no he tenido tanta suerte Open-mouthed smile

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

quick post aunque seguro que ya lo sabés porque el amigo Luis Fraile, ya lo comentó por aquí hace unos días. Resulta que después de Visual Studio 2010 y de cara a la nueva versión de Visual Studio llamada vNext, los amiguetes de Redmond han decidido lanzar una encuesta pública para que cada uno pueda aportar su granito de arena.

Obviamente lo que más hay son quejas sobre el funcionamiento de Visual Studio 2010, recordemos que quejarse es un deporte muy popular y gratuito en internet, pero después hay algunos muy interesantes como por ejemplo:

  • Crear una herramienta única de administración para TFS, Reporting Services y Sharepoint. Algo parecido a lo que hace TFS Admin Tool en CodePlex. http://bit.ly/qdhlaq
  • NuGet everywhere, lo pueden ver aquí y aquí.
  • Búsquedas en la información que almacena TFS. Es increíble que todavía no tengamos eso, pero bueno hay un par de elementos abiertos, por ejemplo: http://bit.ly/reYx3H

Y muchos más, so … si tienes algo que te gustaría en vNext, pues a solicitarlo Open-mouthed smile

Saludos @ Here

El Bruno

   

Publicado 19/7/2011 10:17 por El Bruno | con no comments
Archivado en:

image47dd1de4

Buenas,

hace unos días, en los foros de MSDN en Español, Angel preguntaba sobre como crear un informe con información sobre el detalle de las Builds que procesa Team Foundation Server 2010. Yo comenté que una opción era crear un informe en Excel a partir de los datos del cubo de Team Foundation Server y para eso los siguientes pasos demuestran como crear este informe.

Tutorial

1. Abrir Excel (obvio no?)

2. Acceder a la Ribbon [Data] y a la opción [From Analysis Services]

3. Ingresar los datos de la conexión al cubo de Tem Foundation Server.

4. En el panel de PivotTable seleccionar [Build Details]

5. Seleccionar

Build Details Count

Build Details Duration

6.  Seleccionar

Build // Build Definition Name

Build Status // Build Status

7. Las opciones deberían quedar similar a la siguiente imagen

image

8. Y el informe queda de la siguiente manera, donde podemos ver la duración de cada Build y el estado de las mismas

image

9. Agregando un par de fechas al informe, podemos ver, por ejemplo el resultado de la ejecución de las builds para las fechas de Marzo del 2010.

image

En el próximo post, más información al respecto Open-mouthed smile

 

Saludos @ Home

El Bruno

   

imageBuenas,

en estos días estoy teniendo conversaciones de las buenas con el Valentino (mi enano de 3 años) relacionados con “el rayo de la muerte”. Hasta donde hemos definido los conceptos, el rayo de la muerte es el arma más poderosa del mundo y puede destruir una avispa que nos molesta en la piscina, descacharrar un coche amigo de Rayo McQueen, o destruir un planeta donde viven muchos malos. Sin ir más lejos, hace un par de días, cuando estábamos jugando en la piscina, y vimos una avispa que nos molestaba, pues yo le pregunté que como podíamos sacarnos a la pesada de encima, y teniendo a mano 20 cosas que podríamos haber utilizado, la respuesta del Valentino fue: “la quemamos con con el rayo de la muerte !!!”, vamos que el Valentino no se anda con chiquitas.

Yo intenté explicarle que si tuviésemos un rayo de la muerte a mano, podríamos hacer cosas más divertidas que matar a una simple avispa; como por ejemplo, hacer un hueco en el océano Atlántico para que se arme el remolino de agua más grande del mundo y esas cosas. Que para espantar a una avispa, con una revista alcanza. Y claro, por un lado el Valentino entendió la idea, pero por otro se quedó decepcionado por no usar el rayo de la muerte. Eso sí, cuando nos pusimos a tirarle cosas a la avispa para que se vaya, le dimos al panal de avispas y nos empezaró a perseguir un enjambre de los buenos, la diversión estuvo asegurada. Además de de la posterior charla que nos dió la mamá relacionada con jugar con avispas.

Sin tener que recurrir al ejemplo del rayo de la muerte, a mi cada tanto me toca dar este tipo de charlas en el trabajo; charlas relacionadas con elegir la herramienta o el grupo de herramientas correctas para cada problema que tengamos que encarar.

Cuando me encuentro a un fanático que piensa que puede gestionar cualquier proyecto completamente con PostIts y Story Walls, pues le cuento que para trabajar en conjunto con 3 grupos de trabajo en diferentes zonas horarias, con un seguimiento del budget bastante estricto, por ejemplo; pues además del “tablero” tendremos que recurrir a algún tipo de herramienta más. Es necesario elegir algún sistema de video comunicación muy ágil, definir horarios coherentes para los daily scrums, seleccionar una herramienta para la gestión de incurridos, algo para coordinarnos con el área comercial, etc.  Vamos que esto que he comentado es lo primero que pondríamos en el tablero para ir dando los primeros pasos, pero luego deberíamos comenzar a crear una dinámica de trabajo que integre todas estas herramientas. La frase “solo con PostIts y un tablero me las arreglo”, pues no es cierta.

Del mismo modo, cuando para un desarrollo rápido me encuentro con un consultor de turno que quiere montar un gestor de incidencias en un entorno de alta disponibilidad, quiere montar toda la aplicación en la nube porque está de moda y obviamente hacer que la aplicación sea compatible con iPods, iPads, iPhones, Androids, Windows Phone 7 y con el teléfono de mi tía, pues le explico que para una prueba de concepto de un proceso asíncrono de transformación de datos bancarios, pues solo hace falta un par de informes (htmls) con el resultado del proceso y poco más.

Y ni hablar de los que quieren hacer de todo con una única herramienta !!! En el caso de las metodologías Waterfall, pues he visto como la combinación de Word + Excel ha reemplazado completamente a la esencia de un producto de software … pero claro, seguir es enrollarme y demasiado.

Con el Valentino lo tenemos claro:

A las avispas le tiramos lo que tengamos a mano para espantarlas, ahora bien; si alguna vez llega una nave espacial llena de marcianos malhumorados, ahi sacamos el rayo de la muerte y nos hacemos una fiesta liquidando marcianos.

Es una pena, que muchas veces sea más simple explicarle esto a mi hijo de 3 años que a algún compañero informático.

 

Saludos @ Home

El Bruno

   

PD: antes que me digan de todo, eso que se ve en la foto es un tablerito en mi nevera/heladera con el que gestionamos las tareitas y los pendientes en mi casa con mi chica y el Valentino. Las happy faces Open-mouthed smileobviamente son del Valentinoy la Martina empezará a sumar alguna cuando comienza a tener eso que llamamos sentido común.

Publicado 16/7/2011 19:30 por El Bruno | 2 comment(s)
Archivado en:

image

Buenas,

si cuando el Valentino daba sus primeros pasos mi juguete preferido era el Lego Nxt para jugar con Microsoft Robotics Studio, pues con la Martina el juegue fué el Kinect. Al que tengo bastante abandonad por ahora para alegría de mi mujer pero para tristeza del Valentino.

Pues bien, ahora gracias a los amigos de Microsoft Research ya podemos descargar un paquete de servicios para Robotics Studio que utilizando el SDK de Kinect, nos permite interactuar con la misma.

El siguiente video muestra un ejemplo de las capacidades de este paquete:

Saludos @ Somewhere

El Bruno

   

Fuente: http://blogs.msdn.com/b/msroboticsstudio/archive/2011/07/13/announcing-kinect-services-for-rds-2008-r3.aspx

Download: http://research.microsoft.com/en-us/downloads/f8cda115-e9ec-44d1-abcd-3dfdd09d2e77/

image47dd1de4

Buenas,

aquí va un truco de esos que pueden ahorrarte una mañana fea de trabajo, cuando tu jefe te pide que le envies un informe con los usuarios y permisos que existen en un servidor Team Foundation Server 2010 sobre el que han pasado más manos que en la vecina mía de barrio esa que era muy cariñosa.

Entonces, en lugar de recorrer por separado, Team Foundation Server, Reporting Services y SharePoint, pues lo mejor es descargar TFS Administration Tool desde CodePlex y en la misma nos conectamos a uno o más Team Projects.

image

 

Una vez conectados, seleccionamos todo el listado de usuarios, lo copiamos y …. paf !!!! paste en Excel, donde después de un poco de formato, ya tenemos el listado solicitado.

image

 

Saludos @ Majadahonda

El Bruno

   

image47dd1de4

Buenas,

basado en el post que escribí hace unos días sobre como crear una definición de Build para realizar análisis de código utilizando StyleCop para Team Build 2010 utilizando las Tfs Build Extensions, hoy toca un post similar pero para incorporar el análisis de métricas de código dentro de la ejecución de una build.

Para esto nos basaremos en el post anterior, pero a partir del punto 9 crearemos una nueva definición de Team Build, y seguiremos los siguientes pasos:

1. Una vez agregadas las referencias para poder utilizar Tfs Build Extensions, podremos ver que en la toolbox poseemos una actividad llamada [Code Metrics]. Esta actividad es la que utilizaremos para realizar el análisis de código.

image

2. Dentro de la opcion

Secuence > Run on Agent > Try Compile, Test, and Associate Changesets and Work Items > Secuence > Compile, Test, and Associate Changesets and Work Items > Try Compile and Test > Compile and Test > For Each Configuration in BuildSettings.PlatformConfigurations > Compile and Test for Configuration > If BuildSettings.HasProjectsToBuild > For Each Project in BuildSettings.ProjectsToBuild > Try to Compile the Project > Compile the Project

luego de la actividad [Run MSBuild for Project], agregaremos una Secuence a la que llamaremos [Run Code Metrics Analysis]

image

3. Dentro de la secuencia agregaremos 2 actividades de tipo [WriteBuildMessage] para mostrar el inicio y fin del proceso de análisis con Code Metrics.

  • Start Activity
    • DisplayName = Start Code Metrics Analysis
    • Message = “Start Code Metrics Analysis”
  • Finish Activity
    • DisplayName = Finish Code Metrics Analysis
    • Message = “Finish Code Metrics Analysis”

4. Entre ambas actividades agregaremos una nueva actividad de tipo [Code Metrics] con las siguientes propiedades definidas

  • DisplayName = Run Code Metrics Analysis
  • BinariesDirectory = BinariesDirectory
  • CyclomaticComplexityErrorThreshold = 40
  • CyclomaticComplexityWarningThreshold = 15
  • MaintanabilityIndexErrorThreshold = 10
  • MaintanabilityIndexWarningThreshold = 90
  • FilesToProcess = New List(Of String)(New String() {"ElBruno.StyleCopBuild.Demo.dll"})

Aclaración: si ponemos el filtro en “*.dll”, el proceso de Code Metrics intentará analizr también la dll de pruebas unitarias y para la carga de la misma es necesario contar con varios ensamblados del IDE de Visual Studio 2010.

5. Protegemos nuestros cambios en el servidor de Source Control y ya podremos crear una nueva definición de Build para utilizar este proceso.

6. Partiendo de la definición de build que cree hace 2 días, hago un clonado de la misma, desplegando el menú contextual y seleccionando la opción [Clone Build Definition]

image

7. En la nueva definición de build que se ha creado, cambio el nombre de la misma, para este ejemplo será [Team Build.Code Metrics] y a continuación deberé cambiar la plantilla de ejecucíón de la build.

8. Para cambiar la plantilla, selecciono la sección [Process] y despliego los detalles de la plantilla.

image

9. El combo de plantillas por defecto no debería mostrar mi nueva plantilla, por lo que selecciono la opción [New] y luego la opcion [Select an existing XAML file].

10. Realizando un [Browse] sobre el Source Control, seleciono la plantilla que he creado en los primeros pasos [BuildTemplateWithCodeMetrics.xaml] y la asigno como plantilla de ejecución.

image

11. Guardo la definición de la build y al momento de lanzar la misma, me encuentro con que en el resultado de la build hay un par de datos a tener en cuenta:

image

Como no hemos cumplido “los límites” definidos para el análisis de Code Metrics, pues la build no se da como Sucess, sino que nos aparece como Partially succeded. Y entre la lista de errores y warnings podemos ver el porqué de este estado.

12. Finalmente comentar que en el log de ejecución podremos ver el detalle por cada elemento de nuestros ensamblados del análisis de Code Metrics.

image

El código del ejemplo se puede descargar desde:

 

Saludos @ Algún sitio entre Caudete y Madrid

El Bruno

   

image47dd1de4

Buenas,

quick tip para cerrar el día. Si cuando editas definiciones de Team Build 2010 con Visual Studio 2010, comienzas a tener errores extraños, como que se cierra Visual Studio 2010, hay problemas de performance, etc.; o inclusive ves un mensaje como el siguiente:

---------------------------
Microsoft Visual Studio
---------------------------
Team Foundation Error

Access to the path 'C:\Users\<user>\AppData\Local\Temp\VSTFSBuild\05c59aa7-5b4b-4287-9eaf-d3ac8851314c\Microsoft.StyleCop.CSharp.dll' is denied.
---------------------------
OK  
---------------------------

pues es recomendable que limpies la caché local de ensamblados de Team Build con los que está trabajando Visual Studio 2010. Para esto, cierra VS2010 y elimina todo el contenido del directorio [C:\Users\<user>\AppData\Local\Temp\VSTFSBuild]

Done Open-mouthed smile!!!!

 

Saludos @ Alicante

El Bruno

   

image47dd1de4

Buenas,

hoy toca dar un poco de detalle sobre una de los cambios que nos facilitan la vida con Team Build 2010: 

la capacidad de configurar un directorio del Source Control desde el cual se cargarán ensamblados con actividades personalizadas para la ejecución de los procesos de Team Build.

Para esto accedemos a la configuración de un Build Controller y en el mismo, seleccionamos un directorio del Source Control en la propiedad [Version control path to custom assemblies:]

image

A la configuración del Build Controller podemos acceder desde la consola de administración de Team Foundation Server 2010

image

o desde Visual  Studio 2010, desde el panel Team Explorer, seleccionando el Team Project, el nodo Builds, desplegando el menú contextual y seleccionando la opción [Manage Build Controllers]

image

y luego seleccionando el Build Controller correspondiente y accediendo a las propidades del mismo.

image

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

después de comentar el lanzamiento de la primera versión de las Tfs Build Extensions para Team build 2010, pues hoy toca detallar el paso a paso para incorporar una de las actividades custom que se han liberado, a una definición de Team Build. En este caso, realizar un análisis de código con StyleCop luego de compilar un proyecto o solución.

Tutorial

1. Descargar e instalar StyleCop, desde su site de proyecto en CodePlex: http://stylecop.codeplex.com/. Además descargar y descomprimir la versión actual de Tfs Build Extensions desde su site de CodePlex: http://tfsbuildextensions.codeplex.com/

2. Para este ejemplo, utilizaremos un proyecto del tipo biblioteca de clases, con una única clase con el siguiente código:

   1: using System;
   2: namespace ElBruno.StyleCopBuild.Demo
   3: {
   4:     public class Valentino
   5:     {
   6:         public Valentino(int edad)
   7:         {
   8:             if(edad > 100)
   9:             {
  10:  
  11:                 throw  new ArgumentException("la edad no puede ser mayor que 100", "edad");
  12:             }
  13:         }
  14:     }
  15: }

Con estas pocas líneas de código ya podemos lanzar un par de warnings de StyleCop. Si realizamos un análisis del proyecto, nos encontraremos con lo siguiente:

image

3. Protegemos este código en nuestro servidor Team Foundation Server 2010 y creamos una definición de Team Build 2010 para compilar y validar este proyecto. Obviamente, el resultado esperado es el siguiente:

image

una Build con estado Sucess, donde se ha compilado y se han ejecutado las pruebas de forma correcta.

4. A continuación organizaremos un poco la estructura de directorios para de esta forma, poder tener los ensamblados requeridos para la definición personalizada de Team Build que se encargue de aplicar las reglas de análisis de código con StyleCop. Para esto, he creado dentro del SCC una estructura con varias carpetas:

  • build
    En este folder se almacenarán los ensamblados propios que se utilizan durante el proceso de build. Por ejemplo, las dlls que se distribuyen con Tfs Build Extensions. Además en esta carpeta copiaremos una template de Team Build (por ejemplo desde $/BuildProcessTemplates/DefaultTemplate.xaml) y sobre la misma realizaremos las modificaciones en el proceso de build.
  • src
    En este folder se almacena el código fuente de la solución

image

5. Modificaremos la definición del Build Controller, para que utilice el directorio que configuramos en el paso anterior como repositorio de custom assemblies para la ejecución de la Build.

image

Nota: si quieres ver un ejemplo completo sobre este tema, este post puede ayudar > http://elbruno.com/2011/03/22/teambuild2010-howto-crear-una-custom-activity-para-team-build-2010/

6. A continuación creamos un nuevo proyecto de tipo Class Library en Visual Studio 2010, en la ubicación del directorio con los ensamblados y templates de Builds. Este proyecto lo utilizaremos para poder editar la definición de build.

7. Eliminamos la clase (Class1.cs) del proyecto y agregamos una referencia al fichero xaml utilizando un Add As Link al proyecto. El proyecto se crea en su propia carpeta dentro del SCC, con lo que tendremos que subir un par de niveles hasta llegar al fichero BuildTemplateWithStyleCop.xaml.

image

8. Agregamos las referencias a todos los ensamblados que están en el folder Build, que son los que hemos descargado desde Tfs Build Extensions.

image

9. Editamos el archivo BuildTemplateWithStyleCop.xaml y en la ToolBox de herramientas, agregamos una nueva sección llamada [Tfs Build Extensions]. Dentro de la misma agregamos las actividades  de los ensamblados que hemos almacenado en el directorio build. La sección debería quedar similar a la siguiente:

image

10. Accedemos hasta la compilación de cada proyecto y luego de la actividad [Run MSBuild for Project] agregamos una nueva secuencia a la que llamaremos [Run StyleCop Analysis]. En la secuencia agregamos las siguientes variables, con el scope propio de la secuencia

  • StyleCopFiles – iEmumerable<string>
  • StyleCopSettingsFile – string
  • StyleCopResults – bool
  • StyleCopViolations - int32

11. Dentro de la secuencia agregamos 2 actividades del tipo [WriteBuildMessage] para indicar el inicio y el fin del proceso de análisis con StyleCop. Llamaremos a las mismas “Start StyleCop Analysis” y “Finish StyleCop Analysis”, y mostraremos un mensaje con el mismo nombre de cada actividad.

image

12. Luego del primer mensaje, agregamos una actividad del tipo [FindMatchingFile] para identificar los archivos .cs sobre los que se realizará el análisis. En la misma configuramos:

  • Display Name > Find CS files for source analysis
  • Result > StyleCopFiles
  • MatchPattern > String.Format("{0}\**\*.cs", BuildDirectory)

image

13. A continuación agregamos una actividad del tipo [Assign] para ubicar el archivo de settings de stylecop. En la misma configuramos:

  • Display Name > Assign StyleCop Settings File
  • To > StyleCopSettingsFile
  • Value > String.Format("{0}\Settings.StyleCop", localProject.Substring(0, localProject.LastIndexOf("\")))

image

14. A continuación agregamos una actividad del tipo [WriteBuildMessage]. En la misma configuramos:

  • Display Name > Start StyleCop Analysis using settings file
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format("About to run Stylecop with [{0}]", StyleCopSettingsFile)

15. A continuación agregamos una actividad del tipo [StyleCop] que es la que realiza el análisis de código. En la misma configuramos:

  • Display Name > Run StyleCop Analysis
  • SettingsFile > StyleCopSettingsFile
  • SourceFiles > StyleCopFiles.ToArray()
  • Succeeded > StyleCopResults
  • TreatViolationsErrorASWarnings > True 
  • ViolationCount > StyleCopViolations

Un detalle importante es poner en True la propiedad [TreatViolationsErrorASWarnings] para que los errores que se encuentren en el proceso de análisis de código se muestren en el log como Warnings.

16. A continuación agregamos una actividad del tipo [WriteBuildMessage]. En la misma configuramos:

  • Display Name > Display StyleCop Analysis Results
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format("StyleCop Successed:{0} with {1} violations", StyleCopResults, StyleCopViolations)

17. Protegemos el archivos modificado en TFS. El proceso debería quedar similar al siguiente:

image

18. Cambiamos la definición de la build para que utilice el proceso que hemos modificado en los pasos anteriores.

image

19. Lanzamos la build y ya podremos ver como en el resultado de la misma se incluye la ejecución del proceso de análisis de código con StyleCop.

image

 

A tener en cuenta

Si por el camino, cuando lanzas una nueva build te encuentras con el siguiente error:

Error: Could not load file or assembly 'Microsoft.StyleCop, Version=4.4.0.14, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.. Stack Trace:    at TfsBuildExtensions.Activities.CodeQuality.StyleCop.Scan()    at TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext context) in D:\Projects\teambuild2010contrib\MAIN\Source\Common\BaseCodeActivity.cs:line 66.
Could not load file or assembly 'Microsoft.StyleCop, Version=4.4.0.14, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

image

Es muy probable que no tengas instalada la versión correcta de StyleCop. La versión que debes descargar e instalar es http://stylecop.codeplex.com/releases/view/44839

Otra opción es que no se puedan cargar los ensamblados de StyleCop para la ejecución de la build, en este caso deberías copiar los ensamblados desde el path de instalación de StyleCop [C:\Program Files (x86)\Microsoft StyleCop 4.4.0.14] y agregarlos en el directorio Build.

image

 

Puedes bajar el ejemplo completo desde:

 

Saludos @ Home

El Bruno

   

Resources:

image

Buenas,

hace unos años en mi barrio hicimos el siguiente experimento:

Metimos dentro de un cuarto de 4 metros por 4 metros a 4 personas, con 3 condiciones:

  • debían estar descalzos todo el tiempo
  • no podían hablar entre si
  • cada uno llevaba un palo de goma

Dentro del cuarto, había una escalera de 2 metros de alto que permitía acercarse a un botón rojo muy grande y llamativo. Cuando todos estuvieron dentro, una de las personas de la prueba (lo llamaremos el “sujeto A”) se animó a subir por la escalera y tocar el botón rojo con el palo de goma; lo que ésta persona no sabía es que cuando se tocaba el botón rojo, el piso del cuarto daba una descarga eléctrica que asustaba hasta a los más valientes. Es por esto que cuando esta persona, bajó de la escalera con la satisfacción de haber tocado el botón con el palo, sus compañeros estaban haciendole gestos para explicarle que el “tocar el dichoso botoncito” no era una buena idea.

No sé si alguna vez lo has intentado, pero explicar con gestos el concepto de “descarga eléctrica” no es muy simple que digamos. Es por esto que la persona que había tocado el botón no entendía muy bien lo que le querían decir sus compañeros, y decidió subir de nuevo a tocar el botón. Lo siguiente es previsible: sus compañeros lo molieron a palazos antes que pusiese un pié en el segundo escalón.

Así que, el sujeto A, se encontró completamente dolorido en el piso del cuarto sin entender muy bien que había pasado. En ese momento, se decidió cambiar a una de las personas que participaban del experimento por otra persona externa que no había visto nada de esto. Cuando este nuevo participante (sujeto B") entró con el palo de goma en la mano, lo primero que hizo fué saludar a sus compañeros y esperar a ver que pasaba. Al rato de estar viendo con ganas ese brillante botón rojo al final de la escalera, pues se decidió a subir. Lo que el sujeto B no sabía es que estaba a punto de sufrir una de las palizas de su vida a cargo de los demás integrantes del grupo, incluido el sujeto A, que no entendía muy bien el porqué pero había captado la idea: “al que toca el botón pues lo molemos a palazos”.

Pasado un tiempo, se volvieron a cambiar los participantes del equipo y llegó un momento en el que no había quedado ninguno de los participantes originales. Pero una cosa habían aprendido todos los nuevos integrantes: “al que intenta subir la escalera hay que darle palazos en el lomo hasta que aprenda”.

Después de explicarle a la policía y a los asistentes sociales que esto era solo un experimento, pudimos ver como en muchas ocasiones, la propia inercia de un equipo hace que el mismo funcione de una forma determinada. Sin saber el porqué de esta forma de trabajo, ni tampoco si es la mejor forma de hacerlo.

En los proyectos de desarrollo pasa algo parecido. Muchas veces me he encontrado con escenarios donde al llegar y ver una determinada forma de trabajar, mi pregunta es: “¿porqué se hace esto de esta forma?”. Y la respuesta es: “Cuando llegué ya estaba así” o “Dave me dijo”. Varias formas de descargar la responsabilidad en un ente externo, en lugar de preguntarse si existe una forma mejor o el porqué de una situación.

Yo he tenido la suerte de trabajar en muchos proyectos diferentes, cada uno de ellos con diferentes formas de hacer las cosas; y siempre he tenido un alma de niño donde cuestiono todo lo que hacemos desde un punto de vista en el que trato de entender y luego proponer para mejorar.

Tampoco me sirve la gente que cuestiona todo, por el solo hecho de cuestionar; pero que nunca aportan una solución creativa al respecto. Ni mucho menos aquellos que piensan que para cada pregunta hay una única respuesta correcta.

Si por ejemplo, llego a un proyecto donde el problema del mismo es la gestión que se le está dando al proyecto. Pero al momento de preguntar: “¿Han evaluado cambiar la forma de trabajo?” o “¿Han pensado en implantar una solución integral como Team Foundation Server?”; la respuesta es: “Es que no tenemos tiempo ahora mismo”, pues veo que es un proyecto en el que se sabe que las cosas están mal, pero nadie se anima a romper una dinámica de trabajo que, si bien es conocida por todos, tiene muchos problemas.

Asi que .. animate a preguntar, animate a pensar diferente y obviamente pregúntate 20 veces si puedes hacer algo diferente y mejor Open-mouthed smile

Saludos @ Home

El Bruno

   

PD: Como veo que no puedo terminar el libro de gestión de proyectos porque me está costando horrores cerrarlo, pues iré posteando estas secciones para darme un gusto cada tanto.

PD2: estoy seguro que a este experimento lo he leído en algún lado, ¿alguién se anima a tirarme un poco de información al respecto? thanks Open-mouthed smile

Publicado 8/7/2011 1:14 por El Bruno | 9 comment(s)
Archivado en: ,,

 image

Buenas,

me lo apunto para no perdermelo: el lanzamiento del mejor generador de código para aplicaciones de negocio o de una de las herramientas que más ruido ha hecho entre los developers Visual Studio 2010 LightSwitch está previsto para el próximo 26 de Julio.

Inspirandome en el post original, dejo estos links que pueden ayudar

 

Saludos @ Barajas

El Bruno

   

Fuente: http://blogs.msdn.com/b/lightswitch/archive/2011/07/05/visual-studio-lightswitch-2011-is-launching-july-26th.aspx

image47dd1de4

Buenas,

si estás pensando en extender las capacidades de Build de Team Foundation Server 2010, seguramente te encontrarás con algunos problemillas en el camino (siendo políticamente correcto al momento de decirlo, ya que es una pila de problemas como mínimo).

Pues bien, las TFS Build Extensions han llegado para tratar de solucionar este tipo de problemas. Por ejemplo, ya existen actividades para ejecutar las métricas de código (Code Metrics), crear archivos ZIP, ejecutar comandos de RoboCopy, etc.; vamos que hay de todo como en Botica.

Altamente recomendado darle una vuelta y un vistazo para poder acceder y dar feedback en el site oficial de CodePlex: http://tfsbuildextensions.codeplex.com

Saludos @ Home

El Bruno

   

Descarga: http://tfsbuildextensions.codeplex.com

image47dd1de4

Buenas,

en Team Foundation Server 2010 se cambió radicalmente la arquitectura de servidor de Team Foundation. Se introdujo el concepto de Team Project Collection, como elemento para organizar y agrupar Team Project, además de brindar la capacidad de aislar contenidos y facilitar el proceso de backup y mantenimiento general de Team Foundation Server. Otra de las grandes apariciones estuvo relacionada con Team Build 2010, el concepto de Build Controller y Build Agents, nos brinda una posiblidad muy amplia cuando tenemos que configurar entornos de compilación.

Perooooo (lo siento hay un pero y uno muy feo), existe una limitación asociada a un servicio de Build:

UN SERVICIO DE BUILD SOLO PUEDE ESTAR ASOCIADO A UN TEAM PROJECT COLLECTION

Esto significa que si tenemos 3 Team Project Collections, como muestra la siguiente imagen,

image

en el mismo servidor solo podremos tener nuestro servicio de build apuntando a uno de las 3 Team Project Collections. Es más, si desde un Team Project queremos configurar una definición de build en una TPC que no esté configurada con el servicio de Build, pues tendremos un error similar a este:

image

   1: ---------------------------
   2: Microsoft Visual Studio
   3: ---------------------------
   4: TF225001: Creating a build definition requires a build controller be defined 
   5: for this team project collection. There may not be any controllers configured 
   6: or you may not have permissions to view them. 
   7: Contact your Team Foundation Server administrator.
   8: ---------------------------
   9: OK   
  10: ---------------------------

El siguiente tutorial describe los pasos NO OFICIALES para configurar un nuevo servicio de Build apuntando al TPC [TPCBuild], y asumiendo que la configuración del servicio por defecto apunta al TPC [ALMBook]. Repito, esto no está soportado por el equipo de producto, asi que te recomiendo estudiar otras alternativas antes de tomarlo como una solución de soporte oficial.

 

Tutorial

1. Abrir una ventana de comandos con permisos de administrador.

2. A continuación crearemos un nuevo servicio de Windows para Team Build. Para esto ejecutamos el siguiente comando:

sc.exe create [%Nombre del Servicio%] binpath= "[%Path de TFSBuildServiceHost.exe%] /NamedInstance:[%TFSServerInstance%]" DisplayName= "[%Display Name del Servicio%]"

Donde para mi ejemplo, los valores quedarían de la siguiente forma

sc.exe create "TeamBuildTPCBuild" binpath= "C:\Program Files\Microsoft Team Foundation Server 2010\Tools\TfsBuildServiceHost.exe /NamedInstance:TeamBuildTPCBuild" DisplayName= "Visual Studio Team Foundation Build Service Host (TPCBuild)"

3. Una vez ejecutado el comando, podremos ver en el listado de servicios de Windows, el nuevo servicio con el nombre y descripción definidos en el paso anterior:

image

4. A continuación, para poder administrar el servicio de Build desde la Consola de administración de Team Foundation, modificaremos la variable de entorno TFSBUILDSERVICEHOST con el valor que utilizamos en [%TFSServerInstance%], por ejemplo:

SET TFSBUILDSERVICEHOST=TeamBuildTPCBuild

5. Una vez seteado este valor, ya podemos abrir la consola de administración de Team Foundation, pero teniendo en cuenta que debemos abrirla desde la misma consola de comandos en la que estamos trabajando. Dependiendo de la ubicación donde se haya instalado TFS, el siguiente comando puede ser diferente, pero en la instalación por defecto la consola se lanza con:

"C:\Program Files\Microsoft Team Foundation Server 2010\Tools\tfsmgmt.exe"

6. Como podemos ver en la siguiente imagen, la información que veremos para el servicio de Build está asociada con el TPC [ALMBook], debemos detener el servicio y desregistrar (Unregister) el mismo para actualizar la información para este servicio.

image

7. Una vez detenido y eliminado el registro, podremos ver como la configuración de Team Build está limpia y lista para ser configurada.

image

8. Configuramos el servicio apuntando al TPC [TPCBuild] y cambiamos el puerto por defecto de 9191, a otro puerto. Este punto es muy importante ya que si lo registramos en el mismo puerto que el otro servicio de Build, pues  … no funciona.

image

9. Creamos un Build Controller y un Build Agent, teniendo en cuenta que los mismos estarán asociados al servicio de Windows que creamos en el paso anterior.

image

10. Finalmente comentar, como bien dice Jim Lamb en su blog, es importante cambiar el path por defecto donde apunta el workspace de trabajo del Team Agent, ya que como por defecto se utiliza el número del AgentId, pues es probable que se corresponda con el mismo path del “otro agente”.

image

11. Ya podemos comenzar a utilizar este nuevo servicio de build.

 

 

Saludos @ Home

El Bruno

   

Referencia: http://blogs.msdn.com/b/jimlamb/archive/2010/04/13/configuring-multiple-tfs-build-services-on-one-machine.aspx

logoBWBuenas,

parece que fué ayer cuando Braulio me comentaba su idea para la creación de un Master 100% dedicado a tecnologías Microsoft, pues mirá varios meses después ya vamos por la segunda edición y esta vez, con las lecciones aprendidas las sorpresas serán mucho mejores. Para seguir con la tradición del Master anterior, y actualizando a 2011/2012 las tecnologías y productos que se verán en el Master van desde Silverlight 4 (o 5), HTML 5, un poco de Visual Studio for Architects, obviamente algo de Visual Studio 2010 ALM, PRISM, Testing, etc.; y esta vez han agregado en la sección de los IDEs unos puntos que llaman la atención (todo el detalle en http://riatec.lcc.uma.es/tecnologias.html).

Vamos que esto da para escribir bastante, pero el temario completo lo pueden ver en http://riatec.lcc.uma.es/Files/TemarioMasterRIAtec.pdf y obviomente toda la información del Master en http://riatec.lcc.uma.es/index.html.

Ahh y casi me olvido, el profesorado es 50% de la universidad y el otro 50% son MVPs, MCTs, y el que suscribe (no pongo nombres porque seguro que me olvido a alguien).

Saludos @ Home

El Bruno

   

Referencia; http://riatec.lcc.uma.es/index.html

image47dd1de4

Buenas,

hoy me pasó una de esas cosas curiosas, pues alguien me preguntó como se podía volver a convertir a un folder un Branch trabajando con Visual Studio 2010 y Team Foundation Server 2010. Para que quede claro repasemos el estado del que partimos:

- Hemos creado un directorio dentro de nuestro Source Control, por ejemplo en [$/AgileLabs/Blog/TestBranchToFolder]

- Seleccionamos el mismo, desplegamos el menú contextual y lo convertimos a Branch seleccionado la opción [Branching y Merging // Convert To Branch]

- En este momento  nuestro folder ya se muestra diferente y permite ser tratado como un Branch

image

 

Ahora bien, después de pensarlo un buen rato, nos damos cuenta que esta carpeta [TestBranchToFolder] no debería ser un Branch, sino que debería ser una carpeta común y silvestre. Pues la opción natural o el instinto nos lleva a seleccionar la misma, desplegar el menú contextual y …

 

image

 

Vemos que no hay Rollback !!! que esta opción no se puede deshacer !!! Aquí tal vez a alguno de Redmond le estén pitando las orejas, ya que estas acciones sin posibilidad de volver atrás son infrecuentes en Visual Studio + Team Foundation, pero cuando aparecen, nos dan un dolor de cabeza de los feos. Sin embargo, si existe la posibilidad de convertir un Branch a un Folder, solo que está un poco escondida.

Para esto, seleccionamos la carpeta y desde el menú de Visual Studio 2010 seleccionamos la opción [File // Source Control // Branching y Merging // Convert To Folder]

image

Esto volverá atrás el cambio inicial y marcará a la carpeta como un Folder

image

 

 

Saludos @ Tren desde Alicante >> Madrid

El Bruno