Windows Mobile 5.0 y MSMQ

Llevo un par de dias urgando en la versión de MSMQ para dispositivos móviles preparando una maravillosa parte para los cursos de certificación de CampusMVP, que espero sean del agrado de los asistentes. Ya había jugado con este tema desde las versiones beta de Compact Framework 2.0 e incluso había publicado un artículo en MTJ.NET. Revisando blogs y más blogs sobre este tema en busca de algún detalle que se me pudiera estar escapando y que fuera interesante como material para el curso observaba bastantes cuestiones acerca de un error en la instalación de MSMQ que voy a pasar a comentar.


En principio se suelen usar dos formas, una variante de la otra, para instalar MSMQ en los dispositivos, la primera es llevarse el archivo de empaquetado msmq.cab, que podremos encontrar en los ‘Optional Windows Mobile 5 Server Componentes’ y proceder a su instalación, con esto conseguimos llevar las librerías y herramientas como msmqadm.exe y visadm.exe  a los directorios apropiados, posteriormente tendríamos que ejecutar visadm.exe y los comandos necesarios para proceder al registro de MSMQ. La segunda versión de instalación consiste en establecer estas librerías y herramientas como archivos incluídos en el proyecto y como ‘Copy To Output Allways’ . es decir, que acompañen a nuestra aplicación, para posteriormente desde código copiarlas a los directorios específicos, en este caso Windows. Hasta este punto nada fuera de lo normal, sin embargo existe un paso a realizar en ambos casos y consiste en registrar el driver de MSMQ y es aquí dónde viene el misterioso problema. Para registrar el driver de MSMQ realizamos una llamada a nativo tal y como vemos a continuación:


IntPtr handle = ActivateDevice(MSMQ_DRIVER_REG, 0);


                    CloseHandle(handle);


                    if (CreateProcess(MSMQ_ADM, «status»))


                        MessageBox.Show(«MSMQ running»);


                    else


                        MessageBox.Show(«System Error = « + GetLastError().ToString());


Tal y como decía el problema que se repite en multitud de foros y blogs como los anteriormente propuestos hace referencia a que este registro de driver que acabamos de ver funciona correctamente en los emuladores de Windows Mobile 5.0 pero no en los dispositivos reales y en la consola de visadm.exe siempre encontramos un maravilloso y explicativo código de error, el error C00E000B  ¿ Cual es el problema y cual es la solución ?


Despues de darle muchas vueltas y hablar con mi compañero y amigo Alejandro Mezcua comentamos que podría ser algún tipo de problema de seguridad puesto que el driver esta firmado con un certificado no presente en el Root de los dispositivos por lo que lo exportamos y lo incluímos, el problema es que seguía sin funcionar…. Alejandro se dió cuenta de un problema que le había pasado en el registro de un Driver que el se había construído y sugirió hacer el registro del driver en WindowsStartUp y !!!!!voila!!!!!!


 Realmente el problema es que Windows Mobile no permite el registro de un nuevo driver en User Mode por lo que el código visto nunca funcionará a lo menos que lo ejecutemos en la carga del S.O.


 


Espero que os haya gustado y que no perdais mucho tiempo con el maravilloso C00E000B..


 


Saludos


Unai Zorrilla Castro

Visual Studio Orcas y el testeo unitario para dispositivos móviles

En otro post ya había comentado la posiblidad de realizar Unit Test para nuestros desarrollos sobre dispositivos móviles con Mobile Client Software Factories, ahora según leo en el blog de Visual Studio for Devices se podrá realizar de la misma sencilla forma que en los desarrollos para WinForms puesto que existirá la posiblidad de crear proyectos de UnitTest para Smart Devices. Sin duda esto es una excelente noticia ya que para los que realizamos estos procesos nos sentiremos mucho más ágiles al contar con una herramienta integrada dentro del propio entorno de desarrollo.

 Podeis encontrar más información aqui

Saludos

Unai Zorrilla Castro

¿Que puede hacer un CodeCamp por nosotros?

¿Qué hace por nosotros un CodeCamp?

Puede que este post no sea lo que seguramente se debería poner después de un evento como este, pero la verdad es que me apetecía hacerlo. Desde hace un cierto tiempo corren por mi cabeza distintos pensamientos acerca del panorama actual en el mundo del desarrollo del software, hasta tal punto que uno no cree si la situación que pienso que ocurre actualmente es reversible y si debería o no seguir participando en ella. Me encanta escuchar y leer a mi socio, compañero de blog y amigo Rodrigo sobre su visión de la gestión de proyectos moderna, y como los ‘arcaicos’ pensamientos de la gestión tradicional no deberían tener cabida actualmente, digo ‘deberían’ porque desgraciadamente ocurre y lamentablemente con mucha frecuencia, se nos sigue considerando como simples recursos prescindibles y sustituibles por cualquier persona con un mínimo de inteligencia para tirar un par de líneas de código, aunque no tengan ninguna noción sobre estructuras de datos, algoritmia y demás conceptos clave para un buen profesional, no se valora el ‘arte’ que conlleva realizar un determinado proceso y se cree que basta con que un jefe de proyectos de la suficiente  caña para que estos ‘recursos’ que somos trabajemos 12 horas, creen que si en 1 hora eres capaz de tirar 100 líneas de forma correcta en 8 horas realizarás 100×8.

No me gustaría tocar el tema de la formación, cuantas empresas gastan una parte de sus ingresos en formar a sus trabajadores, ¿cuantas empresas prefieren gastar su dinero en promocionar un producto y no en hacer que sus empleados puedan generar un producto mejor aprovechándose de un periodo de formación, mejores prácticas y un ambiente más saludable?

¿Cual es el futuro del panorama actual?¿Podremos entre todos darle la vuelta?…. Daros una vuelta por algún evento parecido al Code Camp y veréis que vendrá dentro de unos años. Este fin de semana tuve la suerte de asistir como ponente al CodeCamp de Madrid y todo lo que me rondaba por la cabeza se diluía según iban transcurriendo las horas, todo lleno de gente entusiasmada por su trabajo, con ganas de crear, inconformistas en su profesión y con el mayor hambre posible para cambiarlo todo. Gente dispuesta a preguntar sus inquietudes, sin miedo a aprender lo mejor de nuestra profesión y como podríamos mejorar todo, gente que crea grupos de usuarios y dotnetclubs con el único fin de aprender de los demás y compartir lo que saben. Toda esta gente son los tiburones del mañana, los que serán reconocidos y se harán reconocer por su profesionalidad, sus ganas de aprender y de mejorar y sobre todo, serán los futuros gestores de proyectos, los que valorarán más a los profesionales y los que no pensaran en el 100×8!!.

No me gustaría terminar este post si destacar a todas las personas que hacen posible estos y otros muchos eventos, a Alfonso Rodríguez por su saber hacer, por estar dispuesto a ayudar a cualquier iniciativa de formación y de grupos, a gente como David Carmona Salas por su inagotable paciencia, por su increíble capacidad técnica y por la ilusión que transmite siempre, a Jose Murillo,Aurelio Porras, Ethel, David Salgado, y demás gente de Microsoft por estar siempre al pie del cañon. A todos los MVP que contribuyen a la comunidad, a todas las empresas como Ilitia, Solid Quality Learning y como no a Plain Concepts por participar desinteresadamente en estos eventos, a todos ellos GRACIAS!!

 

 

 

Se acercan dos dias interesantes!!!

Ya están cerca una serie de dias que todos los geeks esperamos con impaciencia. Por un lado tengo la suerte de dar una charlita este viernes en el TTT ( Train The Trainers ) como dia preliminar al CodeCamp… para despues aburrir ( o no 🙂 ) a los presentes con una 'frikada' en Windows Mobile.

 

Espero poder subir las PPT y las demos al blog una vez acabadas las sesiones, para los que tuvisteis la suerte de registraros os espero ver por allí y poder charlar de lo que nos gusta !!

 Saludos

Unai Zorrilla Castro

Otro año más MVP

 Parece que mi contribucción a la comunidad este año ha sido la suficiente como para que la gente de Microsoft me haya renovado como MVP por otro año más…. con lo cual nos seguiremos viendo por los eventos y demás actuaciones de la comunidad

Saludos a todos

 

Evento de Team Foundation Server y Visual Studio 2005 en A Coruña

El dia 9 de Octubre Microsoft organiza un evento sobre Team Foundation Server y Visual Studio 2005 en A Coruña en el que tengo el placer de participar junto a Álvaro Rodríguez, espero veros por allí y que disfruteis con esta sesión.

 

En enlace para registraros es

 

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032311655&Culture=es-ES

Saludos

Unai Zorrilla Castro

En tiempo de diseño o en tiempo de ejecución

En algún que otro desarrollo sobre Compact Framework, y también sobre otras plataformas, necesitamos ejecutar código en función de si estamos en tiempo de diseño o en tiempo de ejecución. En el siguiente ejemplo se muestra como podía realizar esta tarea.

    public class Helper

    {

        /// <summary>

        /// La aplicacion esta en tiempo de diseño

        /// </summary>

        public static bool IsDesignTime

        {

            get

            {

                //Comprobamos el Key Token del assembly en el que esta

                //contenido el Tipo Int32 y verificamos que es el correspondiente

                // a mscorlib para .NET Framework

                Assembly msCorLib = typeof(Int32).Assembly;

                if (msCorLib != null)

                    //Comprobamos el Key Token

                    return (msCorLib.FullName.IndexOf("B77A5C561934E089") != -1) ? true : false;

                return false;

            }

        }

        /// <summary>

        /// La aplicacion esta en tiempo de ejecucion

        /// </summary>

        public static bool IsRuntime

        {

            get

            {

                //Comprobamos el Key Token del assembly en el que esta

                //contenido el Tipo Int32 y verificamos que es el correspondiente

                // a mscorlib para .NET Compact Framework

                Assembly msCorLib = typeof(Int32).Assembly;

                if (msCorLib != null)

                    return (msCorLib.FullName.IndexOf("969DB8053D3322AC") != -1) ? true : false;

 

                return false;

 

            }

        }

    }

La idea consiste en verificar el PublicKeyToken del ensamblado que contiene al tipo Int32, dependiendo de este PublicKeyToken podremos verificar si estamos trabajando con mscorlib de .NET Framework o mscorlib de .NET Compact Framework.

Espero que le saqueis provecho…

Saludos

Unai Zorrilla Castro

Sql Server 2005 Everywhere Edition ( SSEv ) Access Database Synchronizer

De CTP a CTP y tiro por que me toca… sin duda algun friki ya estará pensando en crear un juego de la 'Oca' para las CTP's de Microsoft, pero eso es lo que nos toca en estos tiempos y la verdad para no mentir, nos gusta jueguetear 🙂

En esta ocasión se presenta la CTP de Access Database Synchronizer la cual nos permitirá sincronizar bases de datos Access de escritorio con bases de datos de SSEv mediante Active Sync. Entre las características de este nuevo producto podemos destacar las siguientes:

 

  • La sincronización de los datos se realiza mediante una conexión ActiveSync ( cable, bluetooth..)
  • No requiere actualizar SSEv es simplemente un componente de escritorio que se comunica con el 'Agente móvil' del dispositivo
  • Basado en RDA ( Remote Data Access )
  • No implemente ni detección ni resolución de conflictos

Una de las cosas más interesantes es que terceros pueden usar los componentes instalados en el escritorio para realizar las sincronizaciones entre las bases de datos de Access y SSEv. Por ahora se soportan las siguientes versiones de S.O y Office

  • Windows XP SP2 Proffesional,Home,Media Center y Tablet
  • Windows Vista y Media Center 2005 Edition
  • Microsoft Office Access 2000 SP3
  • Microsoft Office Access 2002 SP3
  • Microsoft Office Access 2003 SP2

Logicamente para la version release se soportar'a Office 12

 

Podeis descargaros la CTP de SSEv Access Database Synchronizer desde aqui

 

 

Saludos Unai