Primer dia Tech Days 2008

banner

Hoy fué un día de los que empiezan mal… Me levanto con una contractura en el cuello, miro el reloj … «weno, voy sobrado para llegar al Hands-On lab de WPF…» (11:00), subo al coche introduzco la dirección que Google Maps me había dado para el Palacio Municipal de Congresos Campo de las Naciones … tardo 10 min en coche, genial… llego a un recinto ferial y le pregunto al de seguridad y me dice … «Eso chaval… esta en la otra punta de Madrid» … WTF!! .. prosigue «habeis venido muchos esta mañana, vienes por una conferencia de Microsoft, verdad?» … Pues si, Google Maps me ha colado un gol digno del Fail Blog :

googlemapsfail 

Muy amablemente, el guardia de seguridad me da la dirección correcta, efectivamente, el Palacio Municipal de Congresos Campo de las Naciones esta a unos 24km de donde marca Google Maps. A lo que mi GPS Navman, que me tiene contento, decide que es mejor atravesar Madrid por el centro… pero centro de verdad, he pasado al lado de la boca de metro de Gran Via xD Como consecuencia de esto, no llego al Hands-On Lab de WPF :(.

Llego por fin, al palacio en cuestión y ante la imposibilidad de encontrar sitio para aparcar… aparco en un sitio semi-recóndito pero con una bien visible señal que lo prohibía… reconozco que después de como he arrancado el día esto ha sido tentar mucho a la suerte jejeje. Un poco apurado llego al Hands-On Lab de WCF… y no hay plazas, aunque lo planifiqué en mi agenda con antelación sin problemas 🙁 Me dicen que hay que apuntarse in-situ a los Hands-On Lab, así que consigo apuntarme al de TDD 😛

Y bueno, a partir de aquí la cosa va a mejor 😀 La charla Evolución de la plataforma de Acceso a Datos ha sido muy interesante e instructiva, introduciendo como LINQ junto sus variantes, y el Entity Framework van a cambiar la forma de ver las capas de acceso a datos de nuestras aplicaciones. Cada día me gusta más LINQ.

Después me tocaba un Hands-On Lab de media hora sobre TDD… donde se ha explicado que es y hemos hecho un Debug.Assert… tal cual, y bueno, decir «hemos» es mucho decir, casi diria que solo lo he hecho yo y porque he sacado mi propio portátil (sinceramente esperando otras cosas además del Assert :D) porque los que había allí… aparte de tener el teclado en otro idioma iban leeeeeeeeentos…, el PIII de mi casa va más rápido 😛 Lo bueno es que he podido apuntarme directamente a los de mañana 😀

Kit-Kat para comer, una caja de cartón esconde un sandwich de máquina espéndedora, un bocadillo de tortilla, una botella de agua, un yogurt líquido, una manzana y un … Toblerone!! 😀

Pin pam siguiente charla, LINQ a fondo, el maestro Octavio Hernández metiendose a fondo con los principios de LINQ, ha estado bastante interesante, ha intentado no solaparse con los ejemplos que ya se había explicado en la charla de Evolución de la plataforma de Acceso a Datos y se ha metido más con los temas de interfaces IEnumerable e IQueryable en los que se basan los modelos para trabajar en local y en remoto respectivamente.

Siguiente charla, Evolución de la plataforma de servicios… a la que llegué un poco tarde … interesante también, WWF, WCF .. etc..

Y como colofón, Windows Server 2008 para desarrolladores, renombrada a Design For Operations, donde Unai Zorrilla e Ivan Gonzalez de Plain Concepts han estado bastante resueltos en una charla sobre como los desarrolladores podemos ayudar a que el trabajo de los ITPro sea más llevadero y que nuestras aplicaciones no se conviertan en cajas negras, una charla bastante entretenida y que han llevado con bastante desparpajo.

De cada una de las charlas, se podrían expandir en horas y horas, pero a mi forma de ver son para dar una visión global de las posiblidades de las nuevas tecnologías Microsoft y por lo general estoy bastante contento 😛

Unas cuantas fotos para el recuerdo.

 

Primer dia Tech Days 2008 | vtortola.NET

Advertised shortcuts, cosas que me cabrean…

En mi anterior entrada hablaba sobre como crear enlaces en SendTo y preparar nuestra aplicación para recibir los nombres de los archivos seleccionados. He de confesar, que desde que uso XP x64 y VS2008 tengo varios problemas con los instaladores MSI que genero con VS, asi que estoy esperando a que pasen los TechDays para ponerme a instalar XP normal …, el caso es que elaborando dicho artículo no pude probar correctamente la parte de instalación ya que, literalmente, aparecia un error de acceso a memoria un poco chungo cuando le daba a «Install» desde el VS, poco después me dí cuenta de que el error no aparece al ejecutar el .msi directamente y me dí cuenta que la manera de generar el enlace en la carpeta SendTo no funciona!!

Parece ser que los enlaces que generan los MSI son advertised shortcuts, un tipo especial de enlace que ejecuta Windows Installer antes de llamar al enlace, con lo que no funcionan al colocarlos en SendTo, pues no llaman directamente a la aplicación… por lo que no hay paso de parámetros. Asi que me puse manos a la obra a buscar que tenia que hacer en VS para deshabilitar esta «funcionalidad» y usar enlaces de toda la vida… y no, no hay forma. Pregunté en los foros de MSDN pero parece no haber respuesta…

Aqui llega el momento en el que uno se cabrea, porque resulta que en la creación del paquete de instalación puedes especificar que quieres enviar a la carpeta SendTo como explicaba en el artículo, carpeta que tiene un único proposito… pero… no vale para nada porque estos enlaces no funcionan alli 😛

Soluciones hay varias, pero no bonitas, una… más engorrosa pero también más compacta es editar el .msi con una herramienta llamada Orcas, la otra… ejecutar el instalador añadiendo un parámetro:

msiexec /i MiInstalador.msi DISABLEADVTSHORTCUTS=1

ó

MiInstalador.exe DISABLEADVTSHORTCUTS=1

En una página proponen alguna más. Yo he probado (ahora si :D) la segunda forma y funciona. Lo peor es que no es nuevo, pasa de siempre y todavía sigue sin haber una opcion en VS para modificar este comportamiento.

En fin, a parte del cabreo y tener que editar los posts… me flagelaré por haber publicado algo sin probar 😛

 

Advertised shortcuts, cosas que me cabrean… | vtortola.NET

Enviar a … mi aplicación

image

Si desarrollamos una aplicación que manipule archivos puede ser útil disponer en el menu contextual «Enviar a» (SendTo) un enlace que permita enviar los archivos seleccionados directamente a nuestra aplicación trabajar con ellos. Esta es la típica cosita facilona y que lleva 5 minutos pero que resulta extremandamente útil cuando lo que desarrollamos es una herramienta de uso cotidiano.

Los elementos SendTo se encuentran en la carpeta %homepath/SendTo% de cada usuario, pero explicaré como añadirlo directamente con el instalador de nuestra aplicación.

Lo primero, es preparar nuestra aplicación WinForm para recibir una lista de argumentos al igual que puede hacer una aplicación de consola. Primero indicamos que constructor de nuestro formulario recibirá dicha lista y como trabajará con ellos, en este caso simplemente los añado a un ListView:

private String[] args;
public Form1(String[] args)
{
    InitializeComponent();
    this.args = args;
}
 
private void Form1_Shown(object sender, EventArgs e)
{
    if (this.args != null)
    {
        foreach (String s in this.args)
        {
            listView1.Items.Add(
                new ListViewItem(new String[]{Path.GetFileName(s),s}));
        }
    }
}

Y luego modificamos el punto de entrada de la aplicación para que se los pase:

[STAThread]
static void Main(String[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1(args));
}

Para hacer que el instalador de nuestra aplicación añada un enlace en SendTo:

  1. Vamos al Setup Project.
  2. Vamos al File System Editor.
  3. Botón derecho sobre File System on Target Machine.
  4. Add Special Folder -> User’s Send To Menu

Una vez dentro de esta nueva carpeta, hacemos un Create New Shortcut, y seleccionamos la salida activa de nuestro proyecto, le damos un nombre y eso será lo que aparezca en nuestro «Enviar a» (ó SendTo 😛 )

image

Probando… si selecciono una ristra de iconos de mi escritorio y los mando a mi aplicación….

image

Enviar a … mi aplicación | vtortola.NET

Evento: Threading y Paradigmas de Programacion Concurrente.

Este Jueves 21-02-2008 hay una charla en las Oficinas de Microsoft Ibérica acerca de Multithreading y Paradigmas de la programación concurrente, personalmente me parece un tema muy interesante y, dicho de paso, creo que desconocido para mucha gente.

Llevo un tiempo intentando reunir fuerzas para empezar una serie de artículos sobre los modelos de memoria, sincronización, APM, multithreading en .NET y temas similares… a ver si con esta charla cojo fuerza y me pongo manos a la obra 😛

El anuncio del evento reza lo siguiente :

Threading y Paradigmas de Programación Concurrente

Los buenos años han acabado. Con la tecnología actual ya no conseguimos hacer procesadores con más megahercios y la única salida para mejorar el rendimiento es utilizar varios procesadores simultáneamente. Conseguir esto no es gratis, ahora es responsabilidad de los programadores el hacer programas para aprovechar los avances de los procesadores del presente y futuro. Se trata del gran reto de nuestra industria para los próximos años.
En esta charla exploraremos el panorama actual de la programación concurrente, desde las aproximaciones más clásicas a los nuevos paradigmas de paralelismo implícito, más exóticos, que nos ofrece Redmond , así como los fundamentos necesarios para hacer que la programación concurrente deje de ser la pesadilla que era hasta este momento. Se tratarán los siguientes temas:

  • El reto de la programación concurrente : Tipos de aplicaciones y problemas
  • Modelo clásico de Threadings (La clase Thread, locks y otras primitivas de sincronismo)
  • Modelos de memoria (Heap y Stack, variables estáticas y ThreadStatic)
  • Estructuras de datos (Estructuras de datos inmutables, atomicidad y clase Interlocker)
  • Interface de usuario (WinForms y WPF)
  • Nuevos Modelos (Breve introducción a
    • Parallel Extensions (P-Linq)
    • C-Omega o Polyphonic C#
    • Robotics CCR (Concurrency and Coordination Runtime)
  • Recomendaciones generales y conclusión

Ponente:
Olmo del Corral

Fecha y lugar:
Jueves 21 de Febrero de 2008 de 19:00h a 21:00h en las oficinas de Microsoft Ibérica

Url de registro:
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032368815&Culture=es-ES

vtortola.NET | Evento: Threading y Paradigmas de Programación Concurrente.

Servicios Windows con dependencias

Imagina que tu servicio necesita de otro servicio para cumplir su función, supongamos que el servicio ‘a’ necesita del servicio ‘b’. Si yo reinicio ‘b’ … ‘a’ es posible que pierda la conexión … aparezcan errores … e incluso pudiese darse el caso de quedar funcionando pero inconsistente, otro problema es que puede ser que al arrancar la máquina ‘a’ arranque más rápido e intente conectar a ‘b’ de forma infructuosa … con las consecuencias que ello acarreé (que no deberían ser muchas si has pensado en «cuando las cosas no salen como deberían» cuando lo desarrollaste).

Para solucionar este problema de forma elegante están las dependencias de servicio.

Si al crear ‘a’ decimos que depende de ‘b’ logramos este comportamiento:

  • si se reinicia ‘b’ se reinicia ‘a’.
  • si se detiene ‘b’ se detiene ‘a’.
  • pero si se inicia ‘b’ … y ‘a’ esta parado NO se inicia ‘a’ (ojo con esto 😛 ).
  • cuando arranque la máquina, iniciará ‘b’ y después ‘a’.

Es una pijada bastante sencillo de hacer y es muy útil.

Voy a agregar el servicio Message Queuing (MSMQ) como dependencia del servicio de instalable de prueba que cree el otro día, imaginando que no puede trabajar sin MSMQ.

Primero necesitamos saber el Nombre del servicio del que queremos depender, que aparece en primer lugar en la ventana de propiedades:

image

Después añadimos ese nombre (ó nombres si son varios) a la propiedad ServicesDependedOn de nuestro ServiceInstaller:

image

Y listo, al instalar nuestro servicio veremos que aparece MSMQ como dependencia:

image

Vemos, que MSMQ tiene también sus propias dependencias y el comportamiento antes citado se reproducirá en cadena.

Cosa curiosa… ¿Como añadir una dependencia a un servicio que ya esta instalado? Puuuess… lamentablemente hay que añadirla directamente sobre el registro de Windows (y digo lamentablemente porque no me gusta tocar el registro… y menos para esto 😛 ).  La clave a modificar esta en:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices<Service name>

image

Ale espero que sea útil 😀

Servicios Windows con dependencias | vtortola.NET