January 2012 - Artículos

image47dd1de4

Buenas,

voy a apuntar un escenario que es bastante casual y da errores en más de una ocasión. Se da usualmente cuando copias un proyecto asociado al SC de un servidor Team Foundation hacia otro servidor y el cliente de Visual Studio 2010 se hace un lío con el binding de ese proyecto. La solución es bastante simple:

  1. El proyecto debe ser parte de una solución correctamente asociada a un servidor de Source Control de TFS
  2. En el IDE abrir la opción “File >> Source Control >> Change Source Control“
  3. Seleccionar el proyecto con problemas y presionar la opción “Unbind”
  4. Confirmar los cambios, con la opción “Ignore All”
  5. En el panel Solution Explorer, seleccionar el proyecto.
  6. Desplegar el menú contextual y seleccionar la opción “Add selected projects to Source Control”
  7. Done !!!

7 pasos que te ahorran una tarde de disgustos, especialmente si “rompes una de las Builds

Saludos @ La Finca

El Bruno

   

image47dd1de4

Buenas,

si como a mi te toca cada tanto administrar uno o más servidores Team Foundation Server 2010, con sus correspondientes Team Project Collections y además sus interminables Team Projects, seguramente esta herramienta te alegrará el día: Team Project Manager. Se trata de una herramienta donde se unifican tareas comunes en la administración de Team Foundation Server como por ejemplo:

  • Gestión de las definiciones de Builds. Lo mejor es la capacidad de realizar bulk updates en las definiciones de Builds. Muy útil cuando se cambia el Drop Folder común a varias Builds.
  • Gestión de Build Process Templates
  • Gestión de los grupos de seguridad. Imprescindible a nivel global.
  • etc.

La documentación es bastante completa y si quieres ver las capacidades, este link http://teamprojectmanager.codeplex.com/documentation?referringTitle=Home te ayudará.

 

Saludos @ Home

El Bruno

   

Project HomePage: http://teamprojectmanager.codeplex.com/

Buenas,

después del excelente Coding Dojo con la ayuda de Luis Ruiz Pavón que hicimos con los chicos de MadridDotNet, pues me quedó pendiente explicar de manera matemática porque es útil realizar una práctica de Pair Programming en los equipos de desarrollo. Pair Programming o Programación en Pareja define un escenario donde básicamente se programa de a dos. He aquí la definición de la Wikipedia:

La Programación en Pareja (o Pair Programming en inglés) requiere que dos Ingenieros en Software participen en un esfuerzo combinado de desarrollo en un sitio de trabajo. Cada miembro realiza una acción que el otro no está haciendo actualmente: Mientras que uno codifica las pruebas de unidades el otro piensa en la clase que satisfará la prueba, por ejemplo.

La persona que está haciendo la codificación se le da el nombre de controlador mientras que a la persona que está dirigiendo se le llama el navegador. Se sugiere a menudo para que a los dos socios cambien de papeles por lo menos cada media hora o después de que se haga una prueba de unidad.

Esta práctica que es bastante útil, tiene muchos detractores ya que usualmente la gente piensa que en el mundo del desarrollo 4 manos producen más que 2. Cuando en realidad 2 cabezas producen mucho más que una sola. Pero bueno, si alguna vez te has encontrado con un “jefe” detractor de esta filosofía de trabajo, este ejercicio puede ayudarte a demostrar porque una práctica de Pair Programming es realmente útil.

Escenario Ideal

Supongamos que tenemos un equipo de trabajo de 6 personas compuesto por 2 programadores seniors y 4 programadores juniors. En un escenario ideal de trabajo, podemos asumir que diariamente un programador senior rinde una cantidad de 2 Unidades de Trabajo (UT), mientras que un programador Junior rinde 1 UT. Si tenemos una semana de 5 días de trabajo estándar pues al final de la semana tendremos 40 UTs. La siguiente tabla nos  muestra estos números para que queden más claros

Team Día 1 Día 2 Día 3 Día 4 Día 5 Total
SrP 2 2 2 2 2 10
JrP 1 1 1 1 1 5
JrP 1 1 1 1 1 5
SrP 2 2 2 2 2 10
JrP 1 1 1 1 1 5
JrP 1 1 1 1 1 5
            40

 

Escenario Real

Pero claro, si realmente te dedicas al desarrollo de software y eres consciente de lo que hace tu equipo de trabajo sabrás que el primer día tal vez un Sr Programmer pueda rendir al 100% y generar sus 2 UT, pero los días siguientes tendrá que ayudar a los Junior Programmers a que cierren su trabajo. En muchas ocasiones esto significa que su rendimiento personal bajará hasta el piso y se dedicará a trabajar por 2 o por 3 para poder sacar adelante el trabajo. Siendo generoso con el reparto de UTs, este escenario podría quedar como la siguiente tabla.

Team Día 1 Día 2 Día 3 Día 4 Día 5 Total
SrP 2         2
JrP   1   1 1 3
JrP     1   1 2
SrP 2         2
JrP   1   1 1 3
JrP     1   1 2
            14

Antes de pasar al escenario siguiente, y ya que has leído hasta aquí, pregúntate porque es tan frecuente que los programadores se junten entre sí para debatir un tema en particular o para mostrarse porciones de código. Verás que muchas veces están realizando Programación en Parejas sin siquiera saberlo.

 

Escenario de Programación en Pareja

Finalmente veamos que sucedería si juntamos a un SrP y a un JrP; y dejamos que la 3ra pareja de JrP vaya rotando con las anteriores. Pues siendo muy amarrete con los UTs, ya de entrada tenemos casi un 150% más que en el escenario real. Y claro, esto asumiendo que los JrP no pueden rendir más con el paso del tiempo. La siguiente tabla muestra este ejemplo:

Team Día 1 Día 2 Día 3 Día 4 Día 5 Total
SrP           0
JrP 1,5 1,5 1,5 1,5 1,5 7,5
JrP           0
SrP 1,5 1,5 1,5 1,5 1,5 7,5
JrP           0
JrP 1 1 1 1 1 5
            20

 

Pues bien, aquí tienes un ejemplo completamente irreal sobre como el Pair Programming puede ayudarnos a mejorar el rendimiento de nuestros equipos de trabajo. Obviamente que esto que he puesto aquí no es un estudio real ni cierto, ya que en desarrollo de software influyen muchas otras variables; pero tal vez si te juntas con un jefe obtuso puedas comenzar por hacer que reconozca que se trabaja en el escenario 2 y luego explicarle que el escenario 3 es mejor.

Completa la frikada de la semana … Risa

Update: voy a poner un poco de contexto para explicar el porqué de esta entrada y porqué no debes tomarte en serio la misma, es simplemente un ejercicio para demostrar como NO PUEDES bajar a números simples el trabajo de un equipo. Pair Programming es una práctica que aporta muchas ventajas, si las quieres conocer pues tu amigo google o su amigo Bing, te pueden ayudar. Sino volveré a recomendar The Agile Samurai, un libro obligatorio para estos días. En este caso en particular he destrozado todas las buenas prácticas de gestión de proyectos para llegar  a un número que sea válido para el post, por ejemplo

  • Es imposible medir la capacidad de trabajo de una persona en “unidades de trabajo”, todo el mundo sabe que el trabajo de un desarrollador se mide en base a la cantidad de líneas de código que escribe por día. Si no sabes como hacerlo, este post te puede ayudar a detectar quien trabaja y quien no.
  • Pair Programming no se basa en juntar a un Programador Senior y un Programador Junior, es un poquito más complicado. Yo personalmente recomiendo realizar parejas en base a los años de cada persona. Está científicamente demostrado que cuando la suma de los años de una pareja es un múltiplo exacto de 3 o de 7, el rendimiento se incrementa en un 18%.
  • Pair Programming  nos permite ahorrar costes de hardware. Al no necesitar 2 ordenadores, podemos reducir los gastos de IT a la mitad. Otra cosa que recomiendo para ahorrar costes y espacio trabajando con Programación en parejas, es no tener 2 sillas, sino una única silla y una persona colgada como en Mission Imposible. Esto también ayuda ya que si está colgada con una leve inclinación hacia abajo, llegará más sangre a su cabeza y podrá escribir más líneas de código al día.

 

Saludos @ Home

El Bruno

   

Fuentes: http://es.wikipedia.org/wiki/Programaci%C3%B3n_en_pareja

Publicado 26/1/2012 22:25 por El Bruno | 3 comment(s)
Archivado en: ,

image47dd1de4

Buenas,

mientras me muerdo las uñas para no contar nada del SDK de Kinect antes del 1 de febrero y no montar ningún evento online para contar las novedades, voy a aprovechar la gran tormenta solar que está ocurriendo justo en este momento para promocionar este eventos en el que participaré dentro de unos días.

12 Horas de Visual Studio 

Pues el título te lo dice todo. Vamos a abrir una instancia de Visual Studio 2010 y otra de Visual Studio 11 a las 0900 AM y hasta las 0900 PM no frenaremos. En el camino verás a cracks como Luis Fraile, Iván González, Rodrigo Corral, Eduard Tomás, Alberto Díaz, David Álvarez, Jose L. Teruel, Alberto Fraj, Pedro J. Molina, José Bustos, Marino Posadas, etc., y obviamente el que suscribe Risa. Veremos temas tan variados como Silverlight, ASP.Net, Ajax, JQuery, TDD, Kinect, Coded UI Tests, SharePoint, ASP.Net MVC, Windows Phone, pruebas de rendimiento, etc.

Además tengo que agradecer a los chicos de Microsoft Spain por darme esta oportunidad y además por tenerme en cuenta para abrir la sesión. Es un detallazo que pongan primero a los que somos medio así como yo, de forma que el listón esté bajito. Además como hay más de 20 sesiones, y seguro que tenemos un retraso medio de 5 minutos por sesión, el pobre Rodrigo Corral seguro que comienza la última sesión el día siguiente Lengua fuera 

Eso sí a las 11:40 me permiten conectar el Kinect, me voy a llevar el Robot, un par de gatos y montaré una gorda gorda …

Nos vemos virtualmente, porque he comentado que el evento es 100% formato webcast no? O pensabas que te ibas a tirar 12 horas delante de toda esta panda de gente en vivo?

Saludos @ Home

El Bruno

   

Registro: https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventID=1032502854&amp%3bCulture=es-ES

image

Buenas,

mientras esperamos que en pocos días salga el SDK final para los desarrollos con Kinect, todavía tenemos que ajustar bastantes cosas para que el SDK nos permita hacer aplicaciones robustas. Una de estas “deudas” que Kinect posee con nosotros es la capacidad de quitar el “tembleque/temblor” que tenemos en cada punto del skeleton cuando trabajamos con el mismo punto a punto o Joint a Joint. Si ejecutas la aplicación que muestra ambos skeletons en un Canvas de WPF, verás que la misma funciona bastante bien.

Ahora bien, si modificamos la misma con un poco del código base de este post, para agregar 2 mundos en cada mano (he’s got the whole world in his hands!!!) in  veremos algo similar a la siguiente imagen. Si bien no he ajustado bien el tamaño del form para que los mundos coincidan 100% con cada mano, cuando ejecutas la aplicación puedes ver que la misma tiene un flickering o tembleque un poco raro cuando analiza el detalle del skeleton.

image

Pues bien para solucionar este problema llega a nuestras manos una fabulosa propiedad del SDK llamada TransformSmooth. Si bien no hay mucha documentación al respecto, utilizando esta propiedad podemos definir una serie de buffers de desviaciones que se procesarán durante el análisis del skeleton. De esta forma si agregamos las siguientes líneas antes de suscribirnos al evento de detección de skeletons, podremos trabajar de una forma más suave.

   1: _kinect.SkeletonEngine.TransformSmooth = true;
   2: var parameters = new TransformSmoothParameters
   3: {
   4:     Smoothing = 0.75f,
   5:     Correction = 0.1f,
   6:     Prediction = 0.0f,
   7:     JitterRadius = 0.05f,
   8:     MaxDeviationRadius = 0.08f
   9: };
  10: _kinect.SkeletonEngine.SmoothParameters = parameters;
  11: _kinect.SkeletonFrameReady += KinectSkeletonFrameReady;

 

Ahora bien, para ver que valores tenemos que aplicar en cada propiedad, lo mejor es ir probando las mismas para ver que formato se adapta mejor a nuestra aplicación.  En este post, se describe un poco que representa cada propiedad y los valores por defecto de las mismas.

Parameter Description Default Value Comments
Smoothing Specifies the amount of smoothing. 0.5 Higher values correspond to more smoothing and a value of 0 causes the raw data to be returned. Increasing smoothing tends to increase latency. Values must be in the range [0, 1.0].
Correction Specifies the amount of correction. 0.5 Lower values are slower to correct towards the raw data and appear smoother, while higher values correct toward the raw data more quickly. Values must be in the range [0, 1.0].
Prediction Specifies the number of predicted frames. 0.5  
Jitter Radius Specifies the jitter-reduction radius, in meters. 0.05 The default value of 0.05 represents 5cm. Any jitter beyond the radius is clamped to the radius.
Maximum Deviation Radius Specifies the maximum radius that filter positions can deviate from raw data, in meters. 0.04 Filtered values that would exceed the radius from the raw data are clamped at this distance, in the direction of the filtered value.

Y como siempre si quieres descargar el ´código de este post lo puedes hacer desde aqui

https://skydrive.live.com/redir.aspx?cid=bef06dffdb192125&resid=BEF06DFFDB192125!3798&parid=BEF06DFFDB192125!1932

 

 

Saludos @ Home

El Bruno

   

Fuentes:

http://channel9.msdn.com/Series/KinectSDKQuickstarts/Skeletal-Tracking-Fundamentals

http://cm-bloggers.blogspot.com/2011/07/kinect-sdk-smoothing-skeleton-data.html

image47dd1de4

Buenas,

no voy a comenzar a explicar el porqué de la creación de un AddIn para OneNote. Si alguno conoce la teoría de la mala suerte, pues podrá ver que OneNote es el único elemento de la suite de Microsoft Office 2010 que no posee una plantilla para la creación de AddIns en Visual Studio 2010. Tuve que tirar de los malos recuerdos con IDTExtensibility2, de un poco de buceo por el registro para poder crear un AddIn. Eso si, una vez creado el AddIn para OneNote en Windows8 queda muy chulo, pero …. me topé la cabeza contra la pared cuando intenté depurar el mismo.

Resulta que si bien en la lista de procesos de Windows, hay activo un proceso que tiene toda la pinta de ser el de OneNote, llamado ONENOTE.EXE; pues este proceso no es el que hostea las notas de OneNote. Como un AddIn es un COM, el mismo no se ejecuta en el contexto del EXE de OneNote sino que no se ejecuta dentro de un DLLHOST (que malos recuerdos por dios !!!)

image

Pero bueno, adjuntando el proceso al dllhost correspondiente ya podremos depurar nuestros AddIns para OneNote.

Para esto tengo que agradecer a Daniel Escapa por su pos de hace unos años >> http://blogs.msdn.com/b/descapa/archive/2007/05/01/debugging-a-onenote-toolbar-addin-c.aspx

 

Saludos @ La Finca

El Bruno

   

Referencia: http://msdn.microsoft.com/en-us/library/extensibility.idtextensibility2.aspx

Thanks To http://blogs.msdn.com/b/descapa/archive/2007/05/01/debugging-a-onenote-toolbar-addin-c.aspx

image47dd1de4

Buenas,

en mi post anterior comenté el lanzamiento de Visual Studio Achievements, un interesante plugin que trae el concepto de logros o puntos al mundo del desarrollo. Ahora bien, si analizamos los logros que se han puesto dentro de Channel 9, pues vemos que hay una división en 6 categorías para tipos de logros. Hay una en particular que tiene logros de cero puntos, pero que dan miedo de solo encontrar a alguien que los posea. Por ejemplo

image

De verdad queremos enseñar la sentencia goto a aquellas personas que no lo conocen?. Pero bueno, entiendo que esto es un ejemplo de una mala práctica y solo sirve como referencia. Por ejemplo, la persona que más logros posee en este momento (http://channel9.msdn.com/niners/DotNetNuzzi/achievements/visualstudio) posee este logro y yo me pregunto:

¿Habrá conseguido el logro para tener puntos en este programa o REALMENTE UTILIZA LA SENTENCIA GOTO?

Ambos escenarios son igual de peligrosos. Otros logros que asustan son los siguientes

Finalmente, Hadi Hariri se encarga de terminar de rematar la mala implementación del programa en este post (http://hadihariri.com/2011/11/25/visual-studio-achievements-who-needs-clean-code-anyway/).

Yo creo que la idea es muy buena, que se trata de llevar adelante un poco de promoción de herramientas que complementan a Visual Studio 2010, como FxCop o las herramientas de profiling. Pero como dice Hadi, no podrían haber aprovechado la ocasión y pensar en logros que realmente promuevan un desarrollo limpio y basado en buenas prácticas.

 

Saludos @ Home

El Bruno

   

Download: http://visualstudiogallery.msdn.microsoft.com/bc7a433b-b594-48d4-bba2-a2f24774d02f

References: http://hadihariri.com/2011/11/25/visual-studio-achievements-who-needs-clean-code-anyway/

image47dd1de4

Buenas,

estos días no he tenido tiempo para escribir, ni tampoco para probar muchas cosas nuevas. Pero la idea de Visual Studio Achievements me llamó mucho la atención (aunque cuando visto los achievements me he quedado de palo!). Pero vamos a los que vamos, esta extensión te instala un plugin en el de IDE de Visual Studio que se encarga de analizar los desarrollos que estás haciendo y te brinda logros en base  a los mismos.

Una vez autenticado contra Channel9, podemos ver como se integra dentro del IDE.

image

A partir de este momento solo es cuestión de dejar que haga su trabajo de análisis por detrás y que comience a contar los logros que vamos sumado,

image

Yo después de jugar con la herramienta un par de minutos me encontré con varios logros desbloqueados (algunos de los que no me siento especialmente orgulloso Guiño)

image

Pues bueno, la idea me parece genial, él formato también, aunque mejoraría un poco los logros que se promueven. Eso va para el próximo post.

 

 

Saludos @ Home

El Bruno

   

Home: http://channel9.msdn.com/achievements/visualstudio

Download: http://visualstudiogallery.msdn.microsoft.com/bc7a433b-b594-48d4-bba2-a2f24774d02f

Buenas,

hoy paso de escribir de Kinect, ALM, Team Foundation, etc.

Simplemente pongo este post para aportar mi mini grano de arena dando de baja un blog que seguro que no lee nadie durante todo un día.

Mañana elbruno.com estará dado de baja y que conste que prefiero siempre > compartir a censurar Enfadado 

image

Saludos @ Home

El Bruno

   

Image Source: http://www.zazzle.com/angry_code_monkey_tshirt-235123079804333018

Publicado 17/1/2012 20:42 por El Bruno | con no comments
Archivado en: ,

Buenas,

en navidades y año nuevo con el Javi éramos los únicos en La Finca trabajando. Nos tocaba la agradable tarea de preparar scripts de despliegue, probarlos en local, después ver como fallan en el entorno de pruebas y ni hablar en PRE y PRO. Pero bueno, como el Javi es nicotinero, yo lo acompañaba a que sacie su vicio y entre una cosa y otra nos pusimos  a hablar del interesante y recurrente tema

¿Cada cuánto es recomendable hacer CheckIn mientras modifico código compartido? (o proteger código en el repositorio)

Pero el tema era bastante más específico, ya que hablamos de lo que sucede si tomamos una gran porción de código y comenzamos a trabajar y mejorar la misma. En este caso, ¿debo proteger mi código al final del proceso de refactoring?¿o hacerlo más frecuentemente cuando aplico voy aplicando pequeños cambios? Veamos algunos ejemplos:

En el primer caso, es bastante frecuente ver cómo una persona toma una porción de código durante un par de días, se dedica a jugar con las mismas, y al cabo de 48 horas decide proteger los cambios que ha realizado. Si está trabajando en un equipo conjunto y ha modificado elementos comunes como por ejemplo la definición de un proyecto, pues es muy probable que tenga que hacer una o más acciones de MERGE. Si además ha modificado clases que estaban siendo utilizadas por otros compañeros, pues el MERGE será más delicado.

Después de presentar este ejemplo, tal vez alguien piense que la solución es proteger más frecuentemente. Supongamos que por cada modificación “leve” que aplicamos en nuestro proceso de refactoring, y realizamos un CheckIn. En este caso, debemos tener muy afinado el funcionamiento del equipo de desarrollo, pues es en ese momento cuando los demás integrantes deberán evaluar si necesitan obtener la última versión de SC y la misma pregunta deberá hacerse la persona que está realizando el refactoring.

Como vemos ninguno de los dos casos es una solución completa para este escenario. Yo desde mi humilde opinión puedo sugerir lo siguiente para este ejemplo:

  • Evalúa los cambios que realizas e intenta que los mismos sean significativos para el código. Es decir que no sea una línea de comentario, ni la destrucción y reemplazo total de 20 clases por 7 nuevos proyectos diferentes .
  • Siempre debes cumplir con las premisas básicas antes de proteger código > verificar que compile y que se pase la última versión de las pruebas unitarias.
  • Si te encuentras frecuentemente con “clases” sobre las que están trabajando 2 personas (o más), evalúa si estás cumpliendo los principios SOLID. Que 2 personas trabajen sobre la misma clases suele ser indicador de que esa clase está asumiendo demasiadas responsabilidades
  • Si cumples los principios SOLID, pero todavía te encuentras con 2 personas trabajando sobre la misma clase; pues dale un toque a la persona que reparte las tareas en el equipo ya que seguro que hay algo que no cuadra.
  • Comenta este trabajo con tus compañeros. La reunión diaria de “puesta al día” es un momento ideal para comentar este trabajo.
  • Finalmente, recuerda que en un equipo se debe respetar el principio de la propiedad compartida del código. Cada cambio que aplicas repercute en el trabajo de tus compañeros y nadie es responsable y “amo” de una única porción de código.

Y para cerrar, el clásico de cada día cuando nos pasan estas cosas … (fuente http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef0162fe399bd1970d-pi)

image

Saludos @ Here

El Bruno

   

Geek And Poke : http://geekandpoke.typepad.com

Publicado 15/1/2012 22:58 por El Bruno | con no comments
Archivado en: ,

image

Buenas,

no me quiero olvidar de lo que voy haciendo así que aquí están mis posts relacionados con Kinect

HowTo

Programming

Varios

 

 

 

Saludos @ Home

El Bruno

   

Publicado 14/1/2012 21:44 por El Bruno | con no comments
Archivado en:

image

Buenas,

hace unos días me llegó el pedido de mis gafas para el Kinect. Si no sabes lo que son, pues en la siguiente imagen, puedes ver como un dispositivo tan bonito estéticamente como el sensor Kinect, queda de la época del medioevo cuando le pones unas gafas que “básicamente te permiten jugar con menos espacio”.

image

Si bien hay varios modelos, yo me he comprado uno Made in China, y que la verdad es que funcionan bastante bien. Yo tengo un salón grande donde podemos jugar tranquilos, pero otro escenario muy diferente es mi puesto de trabajo. Las especificaciones prometen una reducción de espacio de un 40%, pero en mi caso que además de jugar al Kinect lo utilizo para trabajar, he podido sacar las siguientes conclusiones:

  • Sin gafas el skeleton se detecta a partir de 1,5 mts.
  • Con gafas el skeleton se detecta a partir de 1 mt.
  • Las rutinas especiales que hemos creado para la detección de gesto (wave, swipes, etc.) siguen funcionando correctamente.
  • La imagen de la cámara es la que más se ve afectada ya que al cambiar el modo de la lente, en la misma se el marco que le aplica la lente.

Las siguientes imágenes muestran la comparación con la aplicación original de Feliz Navidad que publiqué hace unos días en este post y con la misma aplicación, pero con el foco de noche y con la lente puesta. La detección sigue funcionando y la aplicación da la sensación de ganar unos metros valiosos para cuando no hay espacio.

image

image

 

 

Saludos @ Home

El Bruno

   

Comprar: http://www.dealextreme.com/p/zoom-of-kinect-for-xbox-360-slim-101323

Publicado 13/1/2012 21:00 por El Bruno | con no comments
Archivado en: ,

image47dd1de4

Buenas,

en estos días de despliegue, tocan momentos divertidos para aprender  nuevas cosillas. Una de ellas, y que nos dio un dolor de cabeza de varios minutos con Javi, fue en la creación de un Application Pool utilizando PowerShell. El siguiente código está copiado 100% de un IIS.Net, para la creación de un Application Pool en un IIS 7.0.

 
   1: Import-Module WebAdministration
   2:  
   3: $userName = "ElBruno\Valentino"
   4: $password = read-host "Type user password for Application Pool for >> $userName"
   5:  
   6: write-host "set app pool properties"
   7: $appPool.processModel.userName = $userName
   8: $appPool.processModel.password = $password
   9: $appPool.managedRuntimeVersion = "v4.0"
  10: $appPool | set-item

 

Si lo pruebas en 99 entornos, seguramente funcionará correctamente, sin embargo a mi me ha tocado probarlo en ese entorno número 100 donde teníamos un error de tipo al momento de asignar la Password. Investigando un poco, he visto que la clase ReadHost no retorna un tipo string, sino algo un poco “más complicado”, por defecto el valor retornado se asigna a un tipo SecureString. De allí que al momento de asignar la Password es posible que tengamos un error de permisos o de acceso.

Pero tranquilos que la solución solo consiste en “castear” a un string el valor que retorna ReadHost. EL siguiente ejemplo, lo demuestra en la línea 3

   1: Import-Module WebAdministration
   2: $userName = "ElBruno\Valentino"
   3: [string] $password = read-host "Type user password for Application Pool for >> $userName"
   4:  
   5: write-host "set app pool properties"
   6: $appPool.processModel.userName = $userName
   7: $appPool.processModel.password = $password
   8: $appPool.managedRuntimeVersion = "v4.0"
   9: $appPool | set-item

 

Saludos @ La Finca

El Bruno

   

Referencia: http://ss64.com/ps/read-host.html

Publicado 12/1/2012 17:24 por El Bruno | con no comments
Archivado en: ,

image

Buenas,

ayer en el CES nuestro amigo Steve Ballmer anunció la disponibilidad de un nuevo sensor Kinect especialmente diseñado para Windows. El mismo es un poco más caro que el actual, U$S 249 pero tiene una evolución en su firmware que le permite identificar objetos en una distancia muy cercana y además soporte especial para Windows 7 y Windows 8. Algunos se preguntaron porque la diferencia de precios, es casi 150 dolarasos más cara que la versión de Xbox y la respuesta es la siguiente:

The ability to sell Kinect for Xbox 360 at its current price point is in large part subsidized by consumers buying a number of Kinect games, subscribing to Xbox LIVE, and making other transactions associated with the Xbox 360 ecosystem. In addition, the Kinect for Xbox 360 was built for and tested with the Xbox 360 console only, which is why it is not licensed for general commercial use, supported or under warranty when used on any other platform.

Pues parece que el desarrollo de aplicaciones con el sensor Kinect de Xbox no estará soportado para las aplicaciones comerciales que se desarrollen para Windows. Es decir, 2 dispositivos para un mismo objetivo. Jugada extraña y que seguro que tiene repercusiones en poco tiempo por parte de Microsoft.

El otro gran cambio viene dado por el coste del SDK. Hasta este momento se especulaba con un SDK free y otro de pago para desarrollar aplicaciones para Windows, pero ya que te meten el hachazo con el precio del hardware, pues te regalan el SDK y el runtime para el Kinect para Windows. Ahora bien, y para finalizar >> como ya hay muchos proyectos en marcha utilizando el SDK en Beta y con el sensor para XBox, pues para los mismos se extiende la licencia hasta el 2016; pero si quieres desarrollar aplicaciones para Windows, mejor que vayas juntando los U$S249 (o €249 aquí en Spain) para comprar el sensor para Windows.

 

Saludos @ Home

El Bruno

   

Fuente: http://blogs.msdn.com/b/kinectforwindows/archive/2012/01/09/kinect-for-windows-commercial-program-announced.aspx

Reserva: http://www.amazon.com/exec/obidos/ASIN/B006UIS53K/xataka-20

Publicado 10/1/2012 19:54 por El Bruno | con no comments
Archivado en:

image

Buenas,

me lo voy a apuntar porque muchas veces tengo que bucear entre laberintos de información para encontrar este simple link http://www.microsoft.com/visualstudio/en-gb/strategies/almassessment. El mismo te lleva a un estudio que te permite realizar Microsoft en modo online para evaluar tu nivel de ALM. Si bien los datos los procesan en UK, el resultado es bastante coherente y bien sirve para cualquier localización.

Así que ya sabes, si quieres saber “cómo lo llevas?”, este es un buen punto de partida.

 

Saludos @ Home

El Bruno

   

Recursos: http://www.microsoft.com/visualstudio/en-gb/strategies/almassessment

Publicado 9/1/2012 23:10 por El Bruno | con no comments
Archivado en: ,

Buenas,

en estos días cuando la cosa está bastante complicada, una de las herramientas que tenemos para salir adelante es mejorar la forma en la que trabajamos. Los que trabajamos en informática sabemos que desde hace bastante tiempo el estereotipo de trabajo repetitivo de 0900 a 1700, durante 30 años en el mismo sitio, es un imposible. Jose Manuel Alarcon ha escrito un post muy bueno al respecto, llamado “Artesanos del Conocimiento”, y uno de los puntos que más resalta en este post es la necesidad constante de mejorar que tenemos en nuestra profesión.

Pero cuidado, muchas personas han entendido mal el mensaje. Piensan que lo que tenemos que hacer es estar al día de todas las nuevas tecnologías que van apareciendo, conocer todos los nuevos productos que salen y adorar a cualquier nueva tendencia que prometa un futuro más brillante y pacífico. Cuando esto es solo un 10% de nuestra nueva responsabilidad. El otro 90% es un poco más complicado, ya que requiere que apliquemos eso que pocas veces utilizamos que se encuentra un metro por encima de nuestro culo (un metro aproximadamente, aunque existen muchos casos que el culo está conectado directamente con el cerebro). En este 90% restante se requiere pensar, se requiere aprender de los conocimientos que poseemos y a partir de las experiencias que tenemos, proponer cambios para mejorar la forma en la que trabajamos.

Por ejemplo, es muy simple estar suscrito a los 10 blogs más influyentes del la blogosfera y seguir a los 10 cracks que más opinan sobre diferentes temas de informática. Con dedicar 60 minutos al día a leer estos blogs, y darle un rápido vistazo al twitter cada tanto, ya podremos estar al tanto de todas las novedades. Habremos cambiado la forma de trabajo artesanal de nuestros padres, donde aprendías una profesión para toda la vida; y aplicaremos una nueva premisa que es la de la formación constante. Podremos tener un status social más avanzado, donde nuestros compañeros nos mirarán y se preguntarán cosas cómo: “¿De dónde saca tiempo para estar al día de todo?”; e incluso podremos llegar a tener un club de fan al mejor estilo de Justin Bieber.

Sin embargo si a toda esta información que leemos no la procesamos correctamente, esta forma de trabajo no sirve para nada. No sólo tenemos que leer, tenemos que aprender a aprender. En la gestión de proyectos informáticos es imprescindible conocer nuevas formas de trabajo, nuevas herramientas y nuevas tendencias; pero es mucho más importante entender como podemos aplicar las mismas a un escenario concreto para obtener buenos resultados. Tenemos que saber, que no hay fórmulas mágicas que solucionen todos los problemas; y que además una técnica tan vieja como el “refactoring” no solo es aplicable a los desarrollos sino también a la forma de trabajo y de gestión.

En muchos casos, existen personas/organizaciones que se esmeran por definir “un proceso” que sea útil tanto para proyectos de desarrollo de 2 meses de duración, como para proyectos de 2 años. Que además también sirva para equipos de trabajo de 5 personas y para equipos de 200 personas; y finalmente, que se pueda utilizar para equipos de trabajo que trabajen todos en el mismo sitio, como para equipos de trabajo distribuidos. Cuando nos encontramos en estos casos, no es raro que para crear este proceso se esté invirtiendo en un proyecto de 2 años de duración. Donde, obviamente, las premisas al día 1 de enero de 2010 no son las mismas que las premisas al 1 de enero de 2012, etc. etc. etc.

En el caso anterior, seguramente los agilistas extremos tendrán más de una úlcera y comenzarán a evangelizar con el ABC de Kent Beck sobre AGILE y las tendencias de los últimos 10 años. Por otra parte, los amantes de los procesos, se dedicarán a destruir el Amazonas creando manuales de procesos que contemplan 1000 situaciones que nunca se darán en ningún proceso, y que luego serán un libro muerto en algún armario de una organización. Seguramente existirá una 3ra línea de trabajo, que intentará conocer las necesidades reales de esta persona/organización y a partir de las mismas; creará una propuesta con una solución. En todos los casos, no sirve de nada la solución propuesta, sino tenemos en cuenta que cada un período determinado tenemos que analizar la forma en la que estamos trabajando y ver si podemos mejorar la misma.

En el mundo AGILE esto se conoce como una retrospectiva, y TODOS los agilistas que conozco son amantes de crear reuniones de retrospectiva. Sin embargo, estas reuniones mal llevadas, solo suponen una pérdida de tiempo que poco aporta a un proyecto y mucho menos a una organización. Como no voy a escribir de esto en este post, dejaré la referencia a un libro que me ha encantado sobre este tema > Agile Retrospectives: Making Good Team Great (http://pragprog.com/book/dlret/agile-retrospectives).  En CMMI también se toma en cuenta este modelo, por algo la “I” es de Improvement y la de “M” de Model. Para CMMI (bien entendido), los procesos, las personas y las herramientas tienen el mismo valor en el triángulo de valores. Cuidado, esto te puede gustar o no, pero es una forma de organizar y de gestionar que también es válida en muchos casos. Si quieres invertir dinero en un libro que te explicará lo mismo que las guías de CMMI, pero con un toque más humano, pues CMMI for Development®: Guidelines for Process Integration and Product Improvement (http://www.amazon.com/CMMI-Development-Integration-Improvement-Engineering/dp/0321711505/ref=cm_cr_pr_product_top).

En resumen, la mejora constante de la forma en la que trabajamos es igual de importante que las tecnologías con las que trabajamos. Es más, conocer nuevas formas de trabajo nos ayudará a mejorar las guías con las que estamos trabajando y además no ayudará a tener una perspectiva más amplia sobre cómo podemos trabajar.

Pero antes de terminar, tengo que señalar 2 problemas grandes que tenemos en este aspecto. Por un lado, el estar al tanto de “todo lo último” nos lleva a situaciones como la que comenta Rodrigo Corral en este tweet.

Hemos fallado con Scrum no es un motivo para adoptar Kanban. El motivo debe ser que Kanban es lo que mejor se adapta a tus necesidades.

image

El solo hecho de que algo falle, y que exista una solución alternativa no significa que la debamos adoptar lo antes posible. Como muchas veces he visto lo que comenta Rodrigo, no he podido resistirme a responder con una analogía un tanto molesta:

@r_corral también se puede aplicar >> "he tenido un accidente en coche, ahora me cambio a la moto"; mejor aprender a conducir no?

image

Finalmente, el 2do problema es el siguiente:

¿Cómo es posible que los problemas en la informática sigan siendo iguales hoy que los que teníamos hace 20 años?

Parece una contradicción, ya que metodologías como SCRUM nacen allá por el 1993, pero todavía hoy seguimos teniendo los mismos problemas. Yo escribí mi opinión al respecto en mi libro, y como veo que el post es un poco largo, lo dejo como pendiente para otro post.

 

Saludos @ Home

El Bruno

   

Links

Publicado 8/1/2012 19:39 por El Bruno | 2 comment(s)
Archivado en: ,,

image

Buenas,

esto es lo que yo llamo una buena idea, pero con menos futuro que cualquiera que compita con Facebook > MocKinect (http://mockinect.codeplex.com/)

A ver, a primera vista pareciera que es una serie de bibliotecas para “mockear” los ensamblados del Kinect SDK for Windows pero no, esta idea da un paso más allá y lo que te permite es

EMULAR COMPLETAMENTE EL RESULTADO QUE PROCESA UN SENSOR KINECT PARA REALIZAR PRUEBAS SIN EL MISMO.

Dicho de otra forma, la idea es que “grabes una secuencia” frente al sensor y luego realices tus pruebas utilizando esta grabación. Como idea está muy bien, ya que es cierto que cuando trabajas con Kinect es realmente aburrido, esto de tener que levantarte cada 15 minutos a probar si algo funciona. En mi caso lo tengo al Valentino que me sirve de “test dummy” pero tampoco es tan bueno como tester. Mejor sigo que me voy por las ramas. Esta es la idea, reemplazar los movimientos que se realizan frente al sensor, sin tener que estar de pie.

Lo que sucede es lo siguiente >> la base de kinect se basa en el pequeño offset o defecto con el que tenemos que trabajar. Por ejemplo, si estamos trabajando con la idea de crear un detector de gestures, podemos grabar un SWIPE LEFT y comenzar a crear una rutina que detecte el gesto swipe left. El problema está en que la grabación de estos gestos se realiza en base a la posición de los puntos del skeleton y claro, no es lo mismo el desplazamiento de los puntos de mi skeleton en mi brazo derecho, que los del Valentino que mide la mitad que yo.

En resumen, si lo que quiero es realmente simular un output de un skeleton o algo similar, MocKinect puede darnos bastante ayuda; pero si quiero trabajar en modelos más complejos, como por ejemplo en el reconocimiento de gestures pues mucho no me sirve.

Igualmente le hecho un follow a ver como evoluciona el proyecto, porque promete bastante.

 

Saludos @ Home

El Bruno

   

Publicado 7/1/2012 19:09 por El Bruno | con no comments
Archivado en: ,

image

Buenas,

hace un tiempo que he dejado de utilizar Visual Studio 2010 para mis desarrollos del día a día. Salvo cuestiones puntuales como desarrollos para Windows Phone o cosas raras, Visual Studio 11 es mi main dev tool. Ahora bien, desde hace ya bastante tiempo, Visual Studio no es Visual Studio si no tienes ReSharper y claro, los chicos de JetBrains no podían quedarse atrás y ya han liberado una versión que soporta el IDE de VS11. Después  de lanzar la pregunta por twitter, la respuesta de @hhariri fue inmediata >> http://blogs.jetbrains.com/dotnet/2011/11/resharper-61-eap-for-visual-studio-2011/

En mi caso particular he descargado la ultima Build del programa de EAP desde http://confluence.jetbrains.net/display/ReSharper/ReSharper+6.1.1+Nightly+Builds. Después de ver que la misma no es un instalador de los clásicos sino un buen paquete de Visual Studio, he leído por completo el License Agreement y en 2 clics ya tengo instalado ReSharper para Visual Studio 11.

image 

image

Ahora bien, como en una instalación normal de ReSharper, una vez ejecutado Visual Studio, veremos el form de control de licencia. En mi caso he puesto el License Key que me ha dado JetBrains por ser un MVP.

image

Y ya tenemos un Visual Studio 11 completito completito.

image

 

Thanks Risa

 

Saludos @ Home

El Bruno

   

image

Buenas,

mira que lo tenía pendiente de publicar y casi se me pasa > ya podemos descargar las sesiones y los contenidos del ALM Summit 2011 (el de Redmond). Todas las sesiones se pueden visualizar desde Channel 9, específicamente desde http://channel9.msdn.com/events/alm-summit/2011

image

 

Saludos @ Home

El Bruno

   

Buenas,

así como a más de uno no le gustó la Ribbon en el Windows Explorer de Windows 8, seguro que a algún detractor no le gusta este funcionamiento por defecto. Resulta que en Windows 8 cuando seleccionas un archivo o un folder y le das a la tecla “DEL”, pues no hay ventana de confirmación para la eliminación >> se va directamente a la papelera de reciclaje. A mi esto me parece genial. S hago cálculos mentales creo que una de cada 100 veces que elimino un archivo, realmente me he equivocado y lo tengo que buscar en la papelera. Eso son 99 clicks para aceptar la operación que me ahorro en Windows 8.

Pero bueno, si este funcionamiento es el que deseas, lo que tienes que hacer es acceder a las opciones de la papelera de reciclaje y marcar la opción [Display delete confirmation dialog]

image

A partir de ese momento tendrás el diálogo de confirmación antes de eliminar un elemento en Windows 8.

 

Saludos @ Home

El Bruno

   

Publicado 2/1/2012 10:53 por El Bruno | con no comments
Archivado en: ,