[#VS11] Algunos puntos a tener en cuenta cuando trabajamos con el nuevo Team Build para Team Foundation Service

image

Buenas,

hace unos días Brian Harry hizo pública la noticia donde comentaba que ya podemos contar con un servidor Team Build en nuestro servicio de Team Foundation Service. Dicho de otro modo, esto significa que tenemos a nuestra disposición un servidor Team Build en TFS en la nube. Just great !!! (El amigo Vincenc también ha escrito un post al respecto)

Esto tiene muchas grandes ventajas, pero también tenemos que tener en cuenta varias cosas para trabajar con este modelo.

image

Importante: No tenemos acceso a la máquina física de Team Build

Esto significa que no podemos modificar nada en la misma para que nuestros proyectos compilen, ejecuten pruebas unitarias, etc. en este servidor. Personalmente pienso que esto es genial, un proyecto de software debe poder ser compilado y empaquetado solo a partir de los contenidos que se encuentren en el repositorio de Source Control.

Si utilizas componentes COM, o trabajas con un entorno de compilación que te requiera instalar algo en el mismo para poder compilar, pues tendrás que revisar tu modelo de desarrollo para poder utilizar Team Build en Team Foundation Service.

Inicialmente la VM de Team Build solo tendrá instalado

– Visual Studio 2010 SP1

Visual Studio 11 Beta

Java por ahora nada de nada … aunque claro, estará en el paquete final, ya que los clientes de ECLIPSE con Maven 2 y Maven 3 lo necesitan.

Yo he hecho la prueba del “Hola Mundo” para Team Build en 10 minutos y funciona genial, aunque si en lugar de MSTests utilizas XUnit o NUnit, pues tienes que dedicarles unos minutos a la configuración.

Finalmente, un detalle interesante. Cuando definimos el directorio de salida de nuestra Build, usualmente lo solemos hacer en un share con formato \SERVERSHAREBUILD.

En este caso, también tenemos esa opción, aunque no creo que nadie abra esta puerta al mundo. Lo mejor parece ser que si configuramos el output de la Build directamente en el Source Control, consumiremos espacio a cholón en el SC, pero bueno … para eso está.

image

¿Qué pasa con mis plantillas de build personalizadas?

Como el concepto de Build Controller y Build Agent sigue siendo igual, pues tampoco es que nos cambie mucho la forma en la que trabajamos si hemos personalizado nuestras plantillas de Build. Simplemente accedemos a la configuración de los Build Controllers y ya podremos seguir trabajando como antes.

image

¿Hay trampa?

Pues sí, aunque en realidad no es trampa. Por ejemplo, te puedes hacer una plantilla de Build que se encargue de montar un entorno específico para poder compilar una solución (por ejemplo registrando componentes COM, previos a la compilación). Pero claro, como las VMs de AZURE “no tienen estado”, pues perderás estos cambios cuando se refresquen las mismas.

Aunque como la build se ejecuta siempre que lo necesitemos, pues podremos volver a tener este estado en cuando lo necesitemos … Risa

Este punto está por verse porque entiendo que será un entorno mucho más parecido a un Sandbox al que podremos tener acceso desde la versión final.

 

Ahora a migrar un par de plantillas personalizadas de Avanade Spain a TFS AZURE, perdón a Team Foundation Service y a preparar el próximo post.

 

Saludos @ Home

El Bruno

image image image

Fuentes:

http://blogs.msdn.com/b/bharry/archive/2012/03/27/announcing-a-build-service-for-team-foundation-service.aspx

http://geeks.ms/blogs/devnettips/archive/2012/03/29/creaci-243-n-de-una-build-con-el-nuevo-servicio-de-builds-para-tfs-service.aspx

http://blogs.msdn.com/b/visualstudioalm/archive/2012/03/27/build-on-the-team-foundation-service.aspx

[#KINECTSDK] El futuro del SDK para Kinect

image

Buenas,

desde el blog oficial de Kinect for Windows, comentan un par de detalles interesantes sobre la nueva versión del SDK de Kinect.

Vamos con los puntos más interesantes

  • La próxima versión será 1.5, con lo que no es un Major Release sino una evolución desde la versión 1.0.
  • La fecha de salida será a final de mayo.
  • Se incorporan nuevos lenguajes para el reconocimiento de voz, French, Spanish, etc. …
  • Lo más interesante es que se detectarán skeleton parciales con 10 puntos o más, que nos permitirán detectar la parte superior de un cuerpo.

Supongo que será parte de algo más grande, pero tiene buena pinta.

 

Saludos @ Home

El Bruno

image image image

Fuente: http://blogs.msdn.com/b/kinectforwindows/archive/2012/03/26/what-s-ahead-a-sneak-peek.aspx

[#VS2010] Nueva fecha de vencimiento para las maquinas virtuales de Visual Studio 2010 ALM

image

Buenas,

los que seguimos utilizando la máquina virtual de Visual Studio 2010 ALM para demos y pruebas, sabemos que dentro de unos días se nos acaba el período de prueba.

Por suerte el gran Brian Keller, nos confirma en un post que que la fecha de expiración de la misma se ha extendido desde el 9 de Abril del 2012 al 10 de Septiembre de 2012. Risa

Los datos de descarga se pueden ver desde http://elbruno.com/2012/03/02/vs1-maquinas-virtuales-para-probar-visual-studio-11-alm-y-visual-studio-2010-alm/

 

Saludos @ Home

El Bruno

image image image

Fuente: http://blogs.msdn.com/b/briankel/archive/2012/03/27/updated-visual-studio-2010-alm-virtual-machine.aspx

[#ALM] Como 30 minutos al día pueden cambiar tu vida

ALM 03

Buenas,

hoy toca post de autoayuda. Siempre he pensado que los libros de autoayuda están creados para personas que no encajan o que no están muy felices con lo que tienen. Luego estos libros describen una serie de problemas que es muy probable que nadie tenga, pero claro la gente los hace suyos y … pum! bombazo editorial, tienes a millones de personas comprando un libro que básicamente te repite las lecciones que te dieron tus padres cuando eras un adolescente.

Aunque claro, es mejor parar €10 por un libro que te ayude, que aprovechar la sabiduría que te brindan gratis por allí.

En mi caso, lo de los 30 minutos es algo que me ha costado 35 años en aprender. Hace un tiempo, comenté como había personalizado mi propia versión de GTD, trabajando con pomodoros de 25 minutos y gestionando mis ToDos con OneNote (link). Con el tiempo, el hecho de dedicar períodos de 25 o 30 minutos con un foco exclusivo hacia un solo tema, me ha ayudado a sacar adelante cosas que antes no podía.

Pero lo más importante que he aprendido, es que en estos pequeños bloques de tiempo, puedo lograr mucho, si aprendo a separar en bloques pequeños las tareas que me voy agregando. Esto que se escribe tan fácilmente en 3 líneas, luego es bastante más complicado de implementar cuando lo llevas a la realidad. Pero con el tiempo, aprendes a distinguir las piedras grandes de las piedras pequeñas; y finalmente consigues que sean todas piedras pequeñas.

Nota: ¿no conoces la historia de las piedras y el lago de Toyota? pues deberías (link)

Esto viene a cuento de que mi padre de chico, siempre me decía que la mejor forma de emprender un viaje es dando un primer paso. O que si tengo delante mío un problema muy grande, pues lo mejor es separarlo en problemas pequeños. Y luego ir solucionando uno a uno. Vamos que era información gratuita que podía tener gratis y después de estudiar sobre ALM durante más de 10 años, le voy captando la idea.

Nota 2: Mi padre es ingeniero y es un crack por si no lo sabías (link). En la siguiente foto ves como la siguiente generación de Capuanos ha entendido que las cosas mejor entran a martillazos en la cabeza Risa

image

Entonces, ¿qué hago con esto para mejorar el ciclo de vida de mis desarrollos?. Pues aplicar el sentido común y dedicar 30 minutos diarios a encontrar respuestas a las siguientes preguntas:

  • ¿Estoy desarrollando software de calidad?
  • ¿Qué puedo hacer para mejorar la calidad de mi proceso de desarrollo?
  • ¿Estoy trabajando con las mejores herramientas?
  • ¿Conozco cómo trabajar con estas herramientas para ser lo más productivo posible?
  • ¿Estoy aportando valor a mi negocio?
  • etc.

Estas preguntan parecen triviales, pero por ejemplo la última es uno de los puntos que más abandonamos los informáticos. Muchas veces pensamos que la solución tecnológica de la muerte es lo mejor que podemos hacer, cuando en realidad con algo simple y concreto estamos aportando más valor del que necesitamos. Eso sí, sin dejar de olvidar que "la deuda técnica” (link) puede destruir un proyecto poco a poco.

Para resumir:

Dedica 30 minutos un día a pensar cómo mejorar tu forma de trabajo.

Luego aplica otros 30 minutos en aplicar estas mejoras.

Finalmente tienes una sesión de 30 minutos para evaluar si estas mejoras realmente se reflejan en tu día a día.

Cuidado, esto no es una tarea de 90 minutos en un día, es repartir y pensar en como mejorar con el tiempo … pero PENSANDO !!!

Yo lo hago, y también dedico un pomodoro diario a

  • Hacer un CodeKata, para no olvidarme de las bases de la programación
  • Leer un poco sobre tecnología, tendencias, etc., para no perder el tren

 

 

Saludos @ La Finca

El Bruno

image image image

[#VS11] DemoMates para presentaciones de ALM disponibles para descargar

image

Buenas,

los que usualmente hacemos presentaciones de ALM con herramientas de Microsoft conocemos la potencia de DemoMate. Demomate es un cliente en Silverlight que nos permite reproducir paso a paso, un escenario concreto grabado a partir de la interacción con un ordenador.

Es decir, es como un video pero mucho más interactivo y donde sabes que las demos no fallarán. Lo único que hay que tener en cuenta es que DemoMate es de pago, con lo que si queremos grabar demos por nuestra cuenta deberemos comprar primero la licencia.

Pues bien, el gran Brian Keller, sale al paso con una solución ya que nos deja pregrabadas varias demos de Visual Studio 11 y Team Foundation 11 para mostrar las principales capacidades de ambos productos.

Puedes descargar las demos desde aquí, y obviamente para las demostraciones en vivo, la máquina virtual desde aquí.

Si las quieres ver online

 

Saludos @ Home

El Bruno

image image image

Referencias: http://blogs.msdn.com/b/briankel/archive/2012/03/15/visual-studio-11-beta-alm-demomates-now-available.aspx

http://blogs.msdn.com/b/briankel/archive/2011/10/16/demomates-for-visual-studio-11-alm-demos.aspx

[#CODEMOTION] Materiales del evento de #KinectSdk y mi paso por el CodeMotion.es

image

Buenas,

ayer tuve la suerte de participar en el primer CodeMotion de España en una ponencia junto con @vgaltes. El evento en general fue genial, se juntó mucha gente, hubo mucho networking, muchas caras conocidas y obviamente con la suerte de poder desvirtualizar a más de uno.

Además fue la excusa ideal para conocer un poco herramientas y tecnologías fuera de mi scope, donde tengo que admitir que Groovy y Grails, han sido una gran sorpresa para mis.

Finalmente en la última sesión tenía la opción de ir a ver a Luis Fraile o a David Bonilla. Como a Luis lo tengo conocido a @David_Bonilla no lo había visto en vivo pero sí conocía su fama, me metí en su sesión. La verdad es que fue un crack, por un lado un despliegue de recursos como hacía mucho que no lo veía y por otro, una persona cercana pero con las ideas bien puestas en la cabeza.

Volviendo a la sesión de Kinect que hicimos con Vincenc, pues nos lo pasamos bien. Tiramos un par de líneas de código y nos pusimos a mostrar ejemplos de aplicaciones Kinect donde lo que mejor se nos dio fue sacar un par de sonrisas. El pobre Vicenc tuvo que sufrir la labia de un argentino y además un portátil al que no no estaba acostumbrado pero salió al paso como un crack!

Me quedo con la anécdota de que la sala de nuestro evento estaba tan llena que al momento de forcejear para entrar a la misma tuve la siguiente conversación con un flaco que estaba delante mío:

Bruno – me dejas pasar?

Flaco – no hay más sitio

Bruno – pero es que con @vgaltes somos los ponentes

Flaco – ahh entonces SI pueden pasar Risa

casi no entramos !!!

image

image

Y el código fuente con los ejemplos se puede descargar desde https://skydrive.live.com/redir.aspx?cid=bef06dffdb192125&resid=BEF06DFFDB192125!3904&parid=BEF06DFFDB192125!3842&authkey=!AHlC-AoSBzrGWnA

Saludos @ Home

El Bruno

image image image

[#CODEPLEX] Ahora con soporte a GIT

image

Buenas,

si bien ya lo han comentado en varios sitios, es importante destacar la noticia.

Ahora Codeplex soporta la creación de proyectos basados en GIT. 

image

Visto desde afuera no parece algo tan importante, pero si leemos entre líneas hay 2 cosas interesantes a destacar.

En primer lugar que este cambio no esté basado en una decisión estratégica de MS sino que viene impulsado por la gran cantidad de peticiones que realiza la comunicada. Cuidado, no seamos ingenuos; esto no significa que ahora MS comience a hacer todo lo que diga la comunidad, ni tampoco que no piensen ganar nada con este cambio. Pero si es importante tener en cuenta que incluir un software de este tipo, dentro de la plataforma de gestión de código para las comunidades de Microsoft es un punto que abre muchas posibilidades.

Por una parte, ayudar a mejorar los productos de la familia de Visual Studio. VS11 y TFS11 están muy bien, pero si comparamos la fluidez de trabajo que da un DCVS como GIT, pues no hay color. Es por esto, que detrás de esta decisión hay un deseo de formar a los developers orientándolos a nueva forma de trabajo (que ya se incluirá en VS).

Además con este cambio, se pretende incluir en Codeplex a un gran conjunto de developers que actualmente utilizan GIT para sus desarrollos.

En segundo lugar, no perdamos de vista que MS está incorporando un software OpenSource dentro de su plataforma. Esto no es la primera vez, ni tampoco será la última, pero sirve de referencia para dar una idea de lo poderosa que es la idea de OpenSource para los equipos de MS. Algo que desde afuera no se ve mucho, ya sólo se tiene en cuenta la faceta de vender software enlatado que posee Microsoft.

A la larga veremos si termina siendo una copia de GitHub o de otros sitios más avanzados basados en GIT. Lo que es importante no perder de vista, es que CodePlex no solo ofrece soporte para un repositorio de Source Control, sino que agrega varias posibilidades más … ahí lo dejo.

 

Saludos @ Home

El Bruno

image image image

Fuentes:

http://blogs.msdn.com/b/bharry/archive/2012/03/22/the-future-of-codeplex-is-bright.aspx

http://blogs.msdn.com/b/codeplex/archive/2012/03/21/git-commit-m-codeplex-now-supports-git.aspx?wa=wsignin1.0

[#TFS11] Microsoft Visual Studio Team Foundation Server 11 Beta Power Tools

image

Buenas,

lo digo y lo repito:

no puedes trabajar con Visual Studio sino tienes ReSharper

Para el caso de Team Foundation la frase es similar

no puedes trabajar con Team Foundation Server sin las TFS Power Tools

Visual Studio 11 y Team Foundation 11 están en modo Beta, pero eso no quita que los chicos de Redmond se pongan las pilas y nos envíen una versión de las PowerTools específica para TFS11.

Las Power Tools no tienen ninguna novedad o herramienta nueva (eso por ahora Guiño). En las misma encontrarás los clásicos Team Process Editor, Best Practices Analyzer, etc.

Vamos que un recomendado de los buenos.

 

Saludos @ Home

El Bruno

image image image

Descarga: http://visualstudiogallery.msdn.microsoft.com/27832337-62ae-4b54-9b00-98bb4fb7041a

[#KINECTSDK] HowTo: Pintar un skeleton

image

Buenas,

hace un par de días me preguntaban como hacer para pintar un skeleton con el nuevo KinectSDK, en este post. El post de hoy explica en pocos pasos los conceptos básicos para pintar el skeleton.

Para este ejemplo utilizaremos un formulario WPF, en el que agregaremos un Canvas donde pintaremos el skeleton.

   1: <Window x:Class="KinectSkeleton01.MainWindow"

   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   4:         Title="MainWindow" Height="480" Width="640">

   5:     <Grid>

   6:         <Canvas Name="skeletonCanvas" 

   7:                 Height="480" Width="640" 

   8:                 HorizontalAlignment="Center"/>

   9:     </Grid>

  10: </Window>

Lo siguiente a tener en cuenta es trabajar con el sensor Kinect como una variable local del form. En este post (link) hable un poco al respecto.

Una vez controlado el estado del Kinect, lo siguiente es inicializar la captura de skeleton (línea 6 y 7) y suscribirse al evento de cambio de frame para el skeleton (línea 8).

En la implementación de este evento, en primer lugar limpiaremos el canvas (línea 14) y una vez validado el frame recibido (línea 19) copiaremos el array de skeletons a una variable local (línea 21 y 22).

Las líneas finales verifican el estado del Joint de la cabeza para ver si el seguimiento es correcto y luego utilizan un helper de ElBruno.Kinect para pintar el skeleton.

   1: void MainWindowLoaded(object sender, RoutedEventArgs e)

   2: {

   3:     if(KinectSensor.KinectSensors.Count == 0)

   4:         return;

   5:     _kinect = KinectSensor.KinectSensors[0];

   6:     _kinect.SkeletonStream.Enable();

   7:     _kinect.Start();

   8:     _kinect.SkeletonFrameReady += KinectSkeletonFrameReady;

   9: }

  10:  

  11: void KinectSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

  12: {

  13:     // Remove the old skeleton

  14:     skeletonCanvas.Children.Clear();

  15:     Skeleton[] skeletons = null;

  16:  

  17:     using (var frame = e.OpenSkeletonFrame())

  18:     {

  19:         if (frame != null)

  20:         {

  21:             skeletons = new Skeleton[frame.SkeletonArrayLength];

  22:             frame.CopySkeletonDataTo(skeletons);

  23:         }

  24:     }

  25:  

  26:     if (skeletons == null) return;

  27:  

  28:     foreach (var skeleton in skeletons)

  29:     {

  30:         if (skeleton.TrackingState != SkeletonTrackingState.Tracked) continue;

  31:         var headJoint = skeleton.Joints[JointType.Head];

  32:         if (headJoint.TrackingState != JointTrackingState.NotTracked)

  33:         {

  34:             var skeletonDraw = new SkeletonDraw();

  35:             skeletonDraw.DrawSkeleton(_kinect, skeletonCanvas, skeleton);

  36:         }

  37:     }

  38: }

La clase encargada de pintar el skeleton básicamente pinta líneas entre cada uno de los joints del mismo. Como podemos ver en el siguiente código las líneas se pintan entre 2 puntos con el canvas y el sensor como elementos de referencia.

   1: void AddLine(KinectSensor kinectSensor, Canvas drawCanvas, Joint j1, Joint j2)

   2:  

   3:    var boneLine = new Line {Stroke = SkeletonBrush, StrokeThickness = 5};

   4:  

   5:    var j1P = kinectSensor.MapSkeletonPointToDepth(j1.Position, DepthImageFormat.Resolution640x480Fps30);

   6:    boneLine.X1 = j1P.X;

   7:    boneLine.Y1 = j1P.Y;

   8:  

   9:    DepthImagePoint j2P = kinectSensor.MapSkeletonPointToDepth(j2.Position, DepthImageFormat.Resolution640x480Fps30);

  10:    boneLine.X2 = j2P.X;

  11:    boneLine.Y2 = j2P.Y;

  12:  

  13:    drawCanvas.Children.Add(boneLine);

  14:  

  15:  

  16: ublic  float JointDistance(Joint first, Joint second)

  17:  

  18:    float dx = first.Position.X - second.Position.X;

  19:    float dy = first.Position.Y - second.Position.Y;

  20:    float dz = first.Position.Z - second.Position.Z;

  21:  

  22:    return (float)Math.Sqrt((dx * dx) + (dy * dy) + (dz * dz));

El código de ejemplo se puede descargar desde

https://skydrive.live.com/redir.aspx?cid=bef06dffdb192125&resid=BEF06DFFDB192125!3903&parid=BEF06DFFDB192125!1932&authkey=!AKQC01rb-avYBVg

 

Saludos @ Home

El Bruno

image image image

Recursos

http://elbruno.com/2012/03/06/kinectsdk-howto-detectar-el-cambio-de-estado-o-desconexion-del-sensor/

[#ALM] Automatizar procesos es ahorrar a largo plazo (por mas que a muchos les cueste verlo)

ALM 03

Buenas,

repito el título del post que más que un título es una afirmación

AUTOMATIZAR PROCESOS ES AHORRAR A LARGO TIEMPO

Esto no es una tarea fácil, pero una de las formas de encarar la misma es la siguiente

1. Identificar las tareas repetitivas que realizamos manualmente durante el desarrollo de una aplicación

2. Evaluar la posibilidad de crear un proceso automático que se encargue de realizar esas tareas

3. Definir un período de prueba para la implantación de este proceso

4. Verificar el tiempo ganado utilizando este proceso

Si seguimos esos pasos durante la implantación de un proceso de automatización, seguramente veremos una de estas dos opciones

– lo que inicialmente parecía una tarea que podía ser sustituida rápidamente por un script luego se complica bastante y no tiene sentido abandonar el proceso manual

– el proceso automatizado comienza a ser parte de un proceso de automatización cada vez mayor que nos ayuda a ganar calidad en nuestros desarrollos

Esto que parece un poco de teoría de cerveza de viernes por la noche en realidad es bastante cercano a nuestro día a día. He aquí un ejemplo con uno de los grandes “el Javi Gallardo” (a ver cuando te creas un blog che!)

Resulta que para compartir el output de una aplicación era necesario comprimir la misma en un formato especial, separar el archivo comprimido en varios chunks, firmarlos, y par de pasos más.

Cuando realizábamos este proceso a mano, el mismo nos tomaba menos de un minuto. Pero siempre existía la posibilidad de poner mal la clave del ZIP, de separar mal los chunks, etc. Javi se tomó 30 minutos y se creó un script que se encargaba de realizar este proceso.

De esta forma, logramos tener siempre el mismo OUTPUT a partir de un proceso repetitivo y predecible (que es una de las bases sobre las que debemos trabajar).

A nivel métricas, simplemente evitando que Javi se equivocase en la generación de un paquete ya habíamos ganado el tiempo de generación del script. Javi es un crack, pero si asumimos que se podía equivocar 2 veces al día.

Todas las ejecuciones posteriores nos dieron una ganancia de +300 segundos. Finalmente, después de un par de meses habíamos ganado 2 días/hombre. (Esto traducido a €uros siempre nos da una alegría)

Con Javi no fuimos más allá, ya que con el script nos bastaba, pero siempre existe la posibilidad de pensar un poco out-of-the-box

  • delegar en una build de Team Foundation la responsabilidad de realizar este proceso.
  • procesar el resultado de este proceso solo en ocasiones de compilación exitosa y si los tests se ejecutan correctamente
  • automatizar el empaquetado y distribución a partir de este proceso
  • etc.

Cuando llegamos a estos escenarios estamos más cerca de tener escenarios de Continuous Delivery (sobre lo que hablé en este link), simplemente automatizando tareas.

Existen muchos escenarios donde podemos automatizar, la mayoría se traducen en despliegues, pero rápidamente se me ocurren los siguientes

  • Despliegues, por ejemplo cuando desplegamos a AZURE, ¿porqué lo hacemos SIEMPRE manualmente?
  • Pruebas, el principal punto donde automatizar nos garantiza calidad
  • Generación de código, no es uno de los más recomendados, pero trabajar con plantillas por ejemplo es una forma de garantizar siempre el mismo OUTPUT a partir de un INPUT determinado
  • Muchos más …

Finalmente, comentar que tal vez el mejor momento donde podemos aplicar estos procesos es en el momento de integrar nuestro código. En el caso de trabajar con Team Foundation, la definición de una build es increíblemente potente como para implementar estos procesos.

En AVANADE Spain tenemos una serie de definiciones de Build que nos permiten realizar diferentes tareas de automatización. Desde procesos para garantizar la calidad, como la ejecución de análisis de estilo de código (StyleCop), generación de informes personalizados a partir de pruebas unitarias y de pruebas de MTM, hasta despliegues automatizados a AZURE, ClickOnce, WebDeploy, etc.

 

Saludos @ Home

El Bruno

image image image