[Evento] Materiales del evento ¿dominas las máquinas?

Buenas,

el amigo Miguel ya ha publicado las fotos del evento sobre robótica en el que pude participar ayer, pueden ver las mismas en http://www.facebook.com/photo.php?pid=283639&id=1426693222#/album.php?aid=69230&id=1426693222 (además si vives por la zona de Castilla-La Mancha te recomiendo que te sumes al grupo para estar al tanto de las novedades del mismo)

Yo desde Madrid agradeceré la oportunidad y el buen rato que pasamos con los chicos, ya que después del evento entre una cañita y otra pudimos compartir experiencias, un par de risas y un muy buen rato.

A continuación dejo el enlace para que se puedan descargar la presentación y el codigo fuente de las demos del evento

http://cid-bef06dffdb192125.skydrive.live.com/self.aspx/2009%2002%2027%20Robotics%20en%20Albacete

Y obviamente, agradecer a Murphy por aparecer en el momento más inoportuno para recordarnos que no podemos confiarnos de las versiones Beta.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

[TFSBUILD] HowTo: Configurar el servicio de TFS Build para que interactue con el Desktop

El Bruno Visual Studio Team System

Buenas,

el escenario que voy a detallar es muy poco común, pero como bien nos ha enseñado Murphy existen situaciones donde necesitamos que nuestras compilaciones interactuen con el escritorio de Windows.

Imaginaos que una inocente prueba unitaria al momento de probar una función totalmente intrascendente desencadena un proceso al que llamaré [X]. Hasta aquí todo perfecto las pruebas en local funcionan perfectamente, pero luego el servidor de compilación se nos va de vacaciones cuando quiere ejecutar esta prueba. (nota escrita: el amigo Ibon está escribiendo bastante sobre Unit Testing, se los recomiendo)

Pero bueno, después de un par de horas y varios litros de café, vemos que dentro del proceso [X] un componente de backend utiliza una instancia de Internet Explorer para “hacer algo con la misma” y luego la destruye (nota mental: recordar llevar el hacha, averiguar la mente maligna creadora de este código y comenzar a cortar miembros a cascoporro).

Este es un escenario bastante improbable pero no imposible, asi que no entraré en detalles de diseño y opiniones adjuntas; pero sí, como siempre trato de hacer en el blog, comentaré la solución al problema.

  • Abrir una sesión en el servidor de compilación TFS utilizando la cuenta de servicio de TFS Build (usualmente es DOMAINTfsBuild)
  • Abrir una instancia del Command Prompt de Visual Studio
  • Ejecutar el comando TFSBuildService, esto crea una instancia “interactiva” del servidor de build en el puerto 9192 (puerto por defecto)
  • Dejar la sesión abierta
  • Ya en este punto, podemos lanzar nuestros builds utilizando un Agente de Build en el puerto 9192 y el mismo se ejecutará en la sesión del punto anterior.

Sin ser una solución elegante, funciona.

 

Saludos @ Silverlight Hell

El Bruno

PD: el siguiente link seguramente será de ayuda http://blogs.msdn.com/buckh/archive/2007/07/20/tfs-2008-build-agent-configuration-options.aspx

Crossposting from ElBruno.com

[VSTS2010] El nuevo IDE está TODO basado en WPF (lo flipas !!!)

Buenas,

si has hecho alguna prueba al estilo “Hola Raimundo” en las máquinas virtuales de Visual Studio 2010, seguramente te habrás percatado que la ventana de edición de código se ha reescrito en WPF y que ahora el “flow” de la misma es mucho más natural. Hasta aquí lo que ya conocemos.

Pero y este es un pero de los gigantes la versión final del IDE estará 100% basado en WPF. Personalmente pensé que no lo veríamos, ya que el IDE de Visual Studio tiene mucho trabajo dentro del mismo, pero este post de Jason Zander nos demuestra lo contrario.

 

Les recomiendo darle un vistazo al post, pero les dejo un par de detalles interesantes

– ventanas flotantes: ideal para los que trabajamos con varios monitores

DvX_ShellFloatWide

 

– Nueva ventana para la creación de proyectos y elementos, que básicamente no aporta nada nuevo pero queda muy vistoza.

image

 

– Novedades en el editor de código donde podemos colapsar y expandir bloques de código, se resalta a la derecha el código editado en un archivo, etc.

image

 

Simplemente impresionante … aunque sigo un poco escéptico ya que los comentarios del site muestran que todavía estamos en una fase muy temprana para dar como válido este IDE.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

[Silverlight] Sobre los Proyectos, Expression Blend, SubsetFontSilverlight.targets y los problemas con el Source Control

Buenas,

si yo fuese un personaje en My Name is Earl además de perseguir a Joey seguramente cerraría cada capítulo con una moraleja y una enseñanza más en mi haber. Pues creo que esa es la única forma en la que puedo trabajar con Silverlight; personalmente no me considero un experto en ninguna materia sin embargo creo conocer un poco de Visual Studio, pero Silverlight me sorprende cada día.

En este caso, luego de tirar líneas durante varios de días, de cerrar varias pruebas de concepto; llegó el momento de refactorizar los proyectos para comenzar a trabajar más organizado. En este momento en base a la experiencia de las pruebas de concepto, comienzo a organizar mis directorios, es decir, renombrar, subir, bajar, etc.

Una vez finalizado, con todo el código dentro del gestor de codigo fuente (TFS obviamente), al momento de abrir un proyecto de Silverlight me encuentro con el siguiente mensaje de error:

 

---------------------------
Microsoft Visual Studio
---------------------------
Unable to read the project file 'Avanade.Silverlight.DirectiveDashboard.csproj'. 
C:PW SLSourceSilverlightAvanade.ProductivityWorkspaceAvanade.Silverlight.DirectiveDashboard
Avanade.Silverlight.DirectiveDashboard.csproj(190,11): The imported project 
"C:PW SLSourceSilverlightAvanade.ProductivityWorkspace
Avanade.Silverlight.DirectiveDashboardSubsetFontSilverlight.targets" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
---------------------------
OK   
---------------------------

Y es en este momento donde me pregunto, ¿de donde ha salido ese archivo SubsetFontSilverlight.targets?

Tratando de entender un poco más, edito el archivo de proyecto y me encuentro con el import correspondiente

   1: <Project ToolsVersion="3.5" DefaultTargets="Build" 
   2:   xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   3:   ...
   4:   <ProjectExtensions>
   5:     <VisualStudio>
   6:       <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
   7:         <SilverlightProjectProperties />
   8:       </FlavorProperties>
   9:     </VisualStudio>
  10:   </ProjectExtensions>
  11:   <Import Project="SubsetFontSilverlight.targets" />
  12: </Project>

 

Como soy una persona organizada, reviso el backup anterior y encuentro el archivo SubsetFontSilverlight.targets, pero como el mismo se ha agregado desde fuera del Source Control, no está relacionado con el proyecto. Lo agrego al directorio de proyecto y ya todo comienza a funcionar correctamente, pero sigo con la duda de donde salió este archivo.

Asi que me pongo a leer un rato y me encuentro con que a este archivo lo genera Microsoft Expression Blend cuando realizamos algunas acciones particulares en nuestros diseños (por ejemplo embeber Fonts). Pero lo más interesante es que en la cabecera del mismo se incluye una referencia a una tarea de MSBuild contenida dentro del ensamblado SubsetFontTask.dll. (ver las líneas 2 y 3 del codigo del archivo)

Asi que resulta que también debo copiar el ensamblado SubsetFontTask.dll al directorio de proyecto para que el mismo funcione correctamente, y no olvidarme de agregar estos archivos al control de código fuente.

   1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   2:     <UsingTask AssemblyFile="SubsetFontTask.dll" TaskName="SubsetFontTask.SubsetFontsSilverlight" />
   3:     <UsingTask AssemblyFile="SubsetFontTask.dll" TaskName="SubsetFontTask.CleanSubsetFonts" />
   4:     
   5:     <ItemGroup Condition="'$(BuildingInsideVisualStudio)'=='true'">
   6:         <AvailableItemName Include="BlendEmbeddedFont"/>
   7:     </ItemGroup>
   8:     
   9:     <Target Name='SubsetFontsSilverlight' DependsOnTargets="$(SubsetFontsDependsOn)" Condition="'@(BlendEmbeddedFont)' != ''">
  10:         <SubsetFontsSilverlight 
  11:             Fonts="@(BlendEmbeddedFont)" Xamls="@(Page)" Resources="@(Resources)" 
  12:             IntermediateFilesDirectory="$(IntermediateOutputPath)"
  13:             >
  14:             <Output TaskParameter="SubsettedFonts" ItemName="Resource"/>
  15:         </SubsetFontsSilverlight>
  16:     </Target>
  17:  
  18:     <Target Name='CleanSubsetFonts' DependsOnTargets="$(CleanSubsetFontsDependsOn)" Condition="'@(BlendEmbeddedFont)' != ''">
  19:         <CleanSubsetFonts 
  20:             Fonts="@(BlendEmbeddedFont)"
  21:             IntermediateFilesDirectory="$(IntermediateOutputPath)"
  22:             />
  23:     </Target>
  24:     
  25:     <PropertyGroup>
  26:         <PrepareResourcesDependsOn>
  27:             SubsetFontsSilverlight;
  28:             $(PrepareResourcesDependsOn);
  29:         </PrepareResourcesDependsOn>
  30:     </PropertyGroup>
  31:     
  32:     <PropertyGroup>
  33:         <CleanDependsOn>
  34:             $(CleanDependsOn);
  35:             CleanSubsetFonts;
  36:         </CleanDependsOn>
  37:     </PropertyGroup>
  38:     
  39: </Project>

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

[Silverlight] DateTimePicker (no me puedo creer que lo tenga que crear yo)

Buenas,

como ya nos comentó el amigo Valeriano: Silverlight da para todos los gustos, a algunos les gusta y a otros les hace tener sudores fríos por la espalda. En mi caso me toca trabajar; parece que soy el primero en tener algunos problemas que personalmente pensaba que eran de principiante. Por ejemplo, la necesidad de tener un control (gratis) para la selección de la fecha y la hora.

Hoy como están las cosas no queda otra opción más que hacerlo a mano, y si algún especialista en interfaz de usuario me suelta el rollo de que Silverlight es una tecnología que debe revolucionar la forma en la que las personas interactuan con un ordenador, etc etc etc; yo simplemente le digo “tio, yo solo quiero seleccionar una fecha y hora

Pero bueno, la idea fundamental de esta vida es dar soluciones y no problemas, asi que en pocos minutos creé una solución a este problema. En primer lugar me aproveché de la biblioteca System.Windows.Controls y del Silverlight Toolkit para crear un proyecto donde implementé mi propia versión de un TimePicker y con el mismo ya pude crear el tan deseado un DateTimePicker.

 

Una vez en ejecución si estás de pie sentate porque esto es para caerse de orto podemos ver el típico y tan esperado conjunto de selección de fecha y hora

 

y el modo de selección de la misma es simplemente impresionante

 

Bueno después de este descargue de ironía, simplemente me queda compartir el códígo: http://code.msdn.microsoft.com/ebsldatetimepicker/Wiki/View.aspx?title=Home y espero ahorrarle un par de minutos a alguien, que siempre vienen bien para ver que pasó realmente con el vuelo Oceanic 815.

 

Saludos @ Godzilla’s House

El Bruno

Crossposting from ElBruno.com

[Silverlight] Nueva versión del runtime de Silverlight 2.0.40115.0 (no trae regalo pero si truco para instalarla)

Buenas,

mientras llegan las pizzas a domicilio y después de conquistar toda una ciudad de LEGO con Godzilla (ver foto aquí ->), este sábado toca descansar y actualizar un par de cuestiones pendientes, entre ellas el runtime de Silverlight.

Ahora gracias a otro GDR (ven como se pone de moda esta palabrota), ya vamos por la versión 2.0.40115.0 y lo podemos descargar desde http://www.microsoft.com/silverlight/resources/install.aspx.

Como yo soy un campeón un tanto ignorante, confié en los buenos instaladores y me encontré con que después de la hermosa pantalla de inicio del setup

 

me aparecia que no podía instalar el GDR ya que mis componentes estaban “out of date”

 

Me fui derechito a la página de los componentes de desarrollo para VS2008 SP1 de Silverlight y casi me caigo de culo me sorprendió ver que no se habían actualizado los mismos ya que la fecha de publicación es 30-Oct-2008.

 

Con el de las pizzas llegando y la 2da cerveza en la mano, agarré a uno al azar del messenger y le pregunté que era esto. Él me respondió: vos dale tranquilo. Asi que descargué los componentes de desarrollo, los instalé, me abrí otra cervecita y después de ver la repetición de los 6 goles del Madrid pude ver también el tan esperado

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

[TFS2008] HowTo: Configurar el Team Explorer para que no se conecte automáticamente al último TFS con el que hemos trabajado (BBBB: bueno, bonito, barato, …)

El Bruno Visual Studio Team System

Buenas,

al igual que Trev, en mi ordenador de desarrollo tengo configurados varios servidores TFS con los que trabajo a diario; y poder configurar al Team Explorer para que no se conecte al último que hemos utilizado, es decir que no haga un “auto connect” es algo que realmente echaba en falta a nivel configuración del cliente de TFS.

Por suerte, la solución es muy simple:

– Agregar una entrada DWORD llamada “AutoLoadServer” en HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio9.0TeamFoundation con el valor Zero

image 

 

Listo !!!

 

Fuente: http://blogs.msdn.com/dstfs/archive/2009/02/19/my-favorite-tfs-tweak.aspx

Saludos @ Home

El Bruno

PD: también funciona para TFS 2005, utilizando la entrada HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio8.0TeamFoundation

Crossposting from ElBruno.com

[Evento] MS Robotics en Albacete (la conquista sigue la ruta del Quijote)

Buenas,

después de conquistar Barcelona, Getafe, Huelva y Madrid (y una pequeña parte de mi tierra natal, Córdoba Argentina), mi amigo el Lego Mindstorms NXT hará una nueva parada en Albacete gracias a los amigos de CLMNET (Grupo de usuarios de .Net de Albacete y Castilla-La Mancha)

El evento es el próximo viernes 27 de febrero de 16:00 a 20:00 horas; y si bien no podré llevar a Valentino ni a los gatitos para que sean perseguidos por el Bot, en el evento tendremos 5 Lego NXT para una pequeña competición donde uno de los premios para los perdedores será una foto con quien redacta (o eso creo)

Mas información:

Ahh y me olvidaba, aunque ya se lo pueden imaginar, la descripción del evento:

CLMNET organiza una charla práctica de introducción a cómo programar el sistema robótico LEGO Mindstorms con Microsoft Robotics Studio y Visual Studio 2008. La última versión de Microsoft Robotics Developer Studio por fin nos acerca un poco más al ansiado objetivo de la conquista global del mundo utilizando robots. En esta charla veremos cómo podemos aprovechar esta tecnología y comenzar a programar nuestros primeros robots. Además de programación concurrente, orientación a servicios, “hardware as services” y veremos una implantación real de esta tecnología en un escenario concreto; como perseguir a tu mascota utilizando LEGO Mindstorms & Microsoft Robotics Studio y controlar un lanzamisiles USB.

Si tienes suerte, podrás salir del evento no solo sabiendo como programar el LEGO Mindstorms sino con una sorpresa bastante interesante…

 

Saludos @ La Finca

El Bruno

PD: he realizado una pequeña búsqueda y no he encontrado ningún robot de Don Quijote, veo que nadie se ha planteado conquistar al mundo comenzando por los molinos de viento.

Crossposting from ElBruno.com

[VSTS2008] HowTo: comparar datos entre 2 tablas

El Bruno Visual Studio Team System

Buenas,

hace un par de días comentaba como podemos utilizar las herramientas que se incluyen dentro del perfil Microsoft® Visual Studio Team System 2008 Database Edition GDR para comparar los esquemas de 2 bases de datos. Este perfil también incluye otra herramienta interesante que nos permite comparar los datos entre 2 tablas con la misma estructura.

El siguiente tutorial demuestra como realizar una comparación de datos entre 2 tablas.

Tutorial

1. Creamos una nueva sesión de comparación desde el menú Data // Data Compare // New Data Comparison …

 

2. En el asistente de comparación seleccionamos las 2 bases de datos con las que queremos trabajar. Además seleccionamos las opciones para analizar los registros sólo en el origen, sólo en el destino, los diferentes o todos.

 

3. A continuación seleccionamos una o más tablas o vistas para realizar la comparación. Dentro de cada una podemos seleccionar los campos sobre los que queremos trabajar.

Una vez determinadas las opciones presionamos el boton [Finish] y el proceso de comparación comienza.

 

04. Cuando se ha terminado el proceso de comparación, podemos ver dentro de Visual Studio un nuevo formulario con el resumen de información:

  • Registros diferentes
  • Registros solo el base de datos de origen
  • Registros solo el base de datos de destino
  • Registros iguales

Por ejemplo, para los registros diferentes, podemos ver los campos que poseen valores diferentes en cada caso.

 

05. Las pestañas con los registros que sólo existen en el origen o en el destino, nos muestran los mismos.

 

06. Finalmente, podemos seleccionar los registros que deseemos y generar un Sql Script para actualizar nuestra base de datos de destino con la información correspondiente.

 

Una vez más, una herramienta simple pero poderosa.

 

Saludos @ Oceanic 815

El Bruno

Crossposting from ElBruno.com

[TFS2008] HowTo: habilitar la creación de directorios en el Source Control Explorer

El Bruno Visual Studio Team System

Buenas,

hoy me preguntaban porque en determinadas ocasiones cuando trabajamos en Visual Studio 2008 con el Source Control Explorer, la opción para crear nuevos directorios aparece deshabilitada como muestra la siguiente imagen.

Pues bien, lo más habitual sería que este impedimento esté dado por cuestiones de permisos; pero por lo general es algo mucho más simple:

el workspace de trabajo no está bien configurado.

En este caso, el workspace en el que estoy trabajando se llama TFSRTM08_1, como se muestra en la imagen no tengo mapeado el directorio de trabajo del Source Control con un directorio local.

Para mapear un directorio de trabajo, simplemente hago click en el el link Not Mapped y sigo el asistente (a estos pasos ya los expliqué en este post HowTo: Mapear un Workspace en 2 Clicks)

De esta forma, la opción para crear directorios se habilitará siempre que tengamos los permisos adecuados y podremos dedicarnos a subir toneladas de codigo.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com