A partir del 31 de Enero de 2006 empieza la gira de lanzamiento de los nuevos productos. Yo estaré presente en algunas ciudades hablando sobre desarrollo para dispositivos móviles con Visual Studio 2005. Espero veros por allí...
Existe una utilidad muy interesante dentro de los Windows Mobile Developer PowerToys llamada ActiveSync Remote Display. Esta herramienta permite ver en una ventana del PC la pantalla del dispositivo Windows Mobile que esté conectado en un momento dado mediante ActiveSync. Yo la uso principalmente a la hora de hacer presentaciones o charlas, aunque es muy útil también para realizar capturas de pantalla de los dispositivos.
La utilidad está diseñada para dispositivos Windows Mobile hasta la versión 2003 SE, de manera que si se intenta usar con un dispositivo Windows Mobile 5.0 no funciona, simplemente muestra un error y se cierra.
Pero es posible usarla con Windows Mobile 5.0. Para ello, simplemente hay que copiar los dos ficheros del directorio
C:\Program Files\Windows Mobile Developer Power Toys\ActiveSync_Remote_Display\devices\wce400\armv4t
al directorio “\Windows” del dispositivo y ejecutar la utilidad.
Yo lo he probado en mi JasJar y la calidad de la imagen no es tan buena como debería ser (supongo que por ser un dispositivo con resolución VGA – 640x480–, cuando la utilidad se diseñó sólo para QVGA – 240x320). La velocidad de refresco de la imagen también deja algo que desear, pero al menos se puede utilizar de momento hasta que se actualice la aplicación para funcionar con las nuevas versiones de los dispositivos.
Si tenéis algún dispositivo con Windows Mobile 5.0, en el CD incluido tendéis la versión 4.0 de ActiveSync. Se encontraron varios problemas relacionados sobre todo con USB que han acelerado el desarrollo de la siguiente versión,
ActiveSync 4.1 que ya está disponible para descargar.
Según publica Brad Adams, ya está disponible una versión preliminar de WinFX que funciona con la versión final de Visual Studio 2005.
Sigue siendo una versión pre-beta, pero al menos permite probar Indigo y Avalon en la versión final del entorno de desarrollo.
Es necesario descargar el WinFX runtime, el SDK de WinFX (OJO, 1Gb) y los componentes de WinFX para Visual Studio 2005 (el link para este componente que hay ahora en el blog de Brad no funciona, supongo que funcionará en breve).
Con la llegada de la versión 2.0 de .NET Compact Framework, que se puede instalar en cualquier dispositivo Windows Mobile .NET o Windows Mobile 5.0, es posible incluir archivos de configuración de manera similar a como se hace en aplicaciones de escritorio basadas en Windows Forms.
Para el que no lo sepa, si se tiene un ejecutable llamado "app.exe", su archivo de configuración correspondiente se llamaría "app.exe.config" y, si está presente, el runtime de .NET lo leerá y procesará.
Una de las cosas que se pueden configurar en este archivo es la versión de .NET con la que se quiere ejecutar el programa. Esto permite fijar una versión de .NET a una aplicación dada y permite también que aplicaciones hechas con la versión 1.0 se ejecuten con la versión 2.0, aprovechando automáticamente sus ventajas.
David Kline explica en su blog cómo hacer este archivo de configuración. Hay que tener en cuenta que 'en principio' no debería haber ningún problema en realizar esta modificación, pero, como siempre, la única manera de saberlo es probando...
He estado probando un poco el desarrollo de aplicaciones Web con ASP.NET 2.0 y una de las cosas que más me gustan es el poder usar las capacidades de DataBinding de los controles para vincularlas a objetos en lugar de a bases de datos.
Una de las cosas que quería probar era ver si podía vincular un control de tipo GridView a unos objetos que creé hace tiempo que obtienen leen RSS. Estos objetos conectan con un documento RSS cualquiera y obtienen sus elementos en una colección, en el número que se le pida (por ejemplo los 3 últimos elementos).
Teniendo en cuenta esto, mi primera prueba fue intentar usar el asistente que trae Visual Studio 2005 para vincular controles a datos y seleccionar la plantilla de ObjectDataSource. Este asistente pide que se seleccione la clase que contiene los objetos a vincular, el nombre del método a llamar en esa clase y sus parámetros para obtener los datos que se mostrarán en el control deseado.
Esto aparentemente funciona sin más pero al intentar ejecutar la página apareció la excepción 'No parameterless constructor defined for this object'. En efecto, mi objeto no tiene un constructor por omisión sin parámetros. Mi objeto en concreto funciona pasándole unos parámetros al constructor que indican dónde está el documento RSS, el nombre de usuario y contraseña si son necesarios, etc. Una vez construida la instancia, se puede llamar al método que carga los datos.
Buscando en las propiedades del control proporcionado por Visual Studio no encontré ninguna forma de pasarle una instancia. Leyendo posteriormente la documentación, se indica que cuando se usa este origen de datos, el objeto ObjectDataSource crea una nueva instancia del componente que conecta a los datos llamando a su constructor sin parámetros. Después llama al método dado con los parámetros que se le pasen. Esto no me vale para mi objeto. Por otro lado parece bastante poco flexible ya que (al menos en mi caso) en la mayoría de los objetos que conectan a datos, antes de poder conectar establezco valores en propiedades que luego las instancias de los objetos usan para trabajar. Con el modelo planteado eso tampoco funcionaría.
Pero como no me gusta darme por vencido tan fácilmente, probé a usar el objeto ObjectDataSource directamente en el código de la página y ¡bingo!, existe un evento al que nos podemos suscribir para modificar la instancia que ObjectDataSource utiliza. El proceso es el siguiente:
• Crear una instancia de ObjectDataSource indicándole la clase que ha de usar y el nombre del método a llamar que traerá los datos.
• Indicarle el nombre y valores de los parámetros que necesita el método anterior para traer los datos.
• Crear un handler para el evento ObjectDataSource.ObjectCreating. En este handler se tiene acceso a la instancia que se va a usar, pudiendo sustituirla.
• Usar la instancia que hayamos creado de ObjectDataSource como origen de datos del control que se vaya a usar.
• Llamar a DataBind en el control, esto hará que se ejecute el método que conecta con los datos
En código C# sería algo así:
protected void Page_Load(object sender, EventArgs e)
{
// Una instancia de mi objeto
_blogClient = new BlogClient(p1, p2, p3, p4);
// Creo el ObjectDataSource indicándole la clase a usar
ObjectDataSource ods = new ObjectDataSource("Caladan.BlogClient.BlogClient", "GetRssEntries");
ods.SelectParameters.Add("ItemCount", "5");
// Establezco el handler
ods.ObjectCreating += new ObjectDataSourceObjectEventHandler(ods_ObjectCreating);
// Vinculo al control Web (un DataList en este caso)
dlBlog.DataSource = ods;
dlBlog.DataBind();
}
void ods_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
// Aquí se tiene acceso a la instancia, que modifico por la mía ya creada
e.ObjectInstance = _blogClient;
}
Y ya está, con estos simples pasos se pueden usar todas las técnicas de data binding del control Web pero con un origen de datos que no es una base de datos. Tengo que hacer notar que el resultado de la llamada a GetRssEntries (el método de mi objeto que lee el RSS) es una colección de tipo CollectionBase, con lo que la iteración entre los distintos elementos ya viene dada (por implementar IEnumerable).
No se a vosotros, pero a mí esto me ayuda bastante…
.NET Compact Framework 2.0 está disponible oficialmente desde ayer con lo que la mayoría de los dispositivos que hay por ahí no lo incluyen 
Para instalarlo existen dos opciones. Una es obtener los 'redistribuibles' y hacer la instalación del archivo .msi desde el PC a través de ActiveSync.
La otra opción es mediante Visual Studio 2005 o el SDK de .NET Framework 2.0. Si se usa este camino, en algunos dispositivos la instalación se puede hacer desde dentro del entorno de desarrollo, pero en otros no funciona.
Para los que no funciona hay que copiar el archivo .cab de manera manual al dispositivo y ejecutarlo para que se instale. El archivo a copiar es NETCFv2.wm.armv4i.cab para dispositivos Windows Mobile 2005 y NETCFv2.ppc.armv4.cab para dispositivos Windows Mobile 2003. Estos archivos se encuentran en el directorio de instalación del SDK. En el caso de una instalación de Visual Studio 2005 el directorio es similiar a:
\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wceXXX
donde XXX es la versión del S.O. wce400 para Windows Mobile 2003 y wce500 para Windows Mobile 2005. Tenéis más información en el blog de Marcus Perryman.