05 agosto 2004

De vuelta al tajo...

Después de unos días sin publicar nada, heme aquí de nuevo en el tajo.

El proyecto de la PDA está finalizado al 90%, ya está implantado en el cliente y sólo quedan ciertos retoques por hacer. Eso sí, su trabajo ha costado. Mi parte de horas este mes va a ser la risa: el pasado lunes trabajé trece horas y media y el martes la friolera de 24, como la serie de TV. A cambio y como compensación, no trabajé ayer: más que nada porque no creo que hubiera sido muy útil para nadie roncando encima del teclado o deambulando como un zombie por los pasillos.

En fin, el caso es que ahora puedo dedicarme a este tema con más tranquilidad: el cliente ya tiene soft (y hard, nosotros les proporcionamos también las PDAs de combate) con las que trabajar. Por cierto, he terminado por cogerles cierto cariño a estos mamotretos: y sobre todo mucho, pero que mucho agradecimiento a que vengan de serie con el Windows CE .NET, lo que hace que traigan el Compact Framework (CF, para los amigos) de serie. Por lo tanto, se permiten las instalaciones estilo XCopy: sencillamente, se copia el ejecutable (y las DLLs que se puedan necesitar que no sean parte del Framework) al directorio destino en la PDA y listo.

La espina que tengo clavada es el tema del login: dos semanas dedicado a ello (sin resultados visibles) para que al final no hiciera tanta falta porque resulta que cada usuario tendrá su propia PDA, lo que significa que pueden personalizar los aparatos con su identificación de red y todo el pastel. Si hubiera dedicado mucho más tiempo al resto de la aplicación hubiera quedado mucho mejor. Del resto, lo destacable es la rutina que se encarga de rotar la orientación de la PDA, la rutina que carga desde un XML los botones que cada usuario tendrá disponibles en la aplicación, y los propios botones: tuve que hacerlos como controles de usuario personalizados porque la versión actual del CF no permite controles con cambios de color, ni de apariencia, ni de nada. Me ha comentado Paul Yao que la próxima versión del CF traerá muchas características mejoradas, los controles una de ellas y otra de ellas la mejora del P/Invoke.

Que ya iba haciendo falta, por cierto. Pongámonos en situación: el P/Invoke (o Platform Invoke del que ya he hablado en entradas anteriores es como se llama al conjunto de técnicas para manejar código no administrado desde el código administrado; o en otras palabras llamar a la API. Es decir, lo que se lleva haciendo de toda la vida en Visual Basic pero más complicado.

Generalmente, cuando se programa una aplicación de escritorio en Windows llamaremos a la API en contadas ocasiones para que nuestro programa realice funciones muy concretas. En cambio, en aplicaciones de Compact Framework descubriremos muy pronto que hay que llamar a la API de la máquina para hacer casi cualquier cosa. Por ejemplo, si queremos que nuestra aplicación ejecute otras aplicaciones o procesos: API. Si queremos que nuestra aplicación se ejecute siempre la primera en el orden-z y nunca sea tapada por otra aplicación: API. Si queremos destruir una aplicación: API. Y un largo y doloroso etcétera de ejemplos.

Es lógico, si nos paramos a pensarlo. Hay un montón de funcionalidades del Framework normal que no están incluidas en el Compact Framework, por una razón muy simple: espacio. Entonces, realizar funciones que serían muy sencillas de realizar en Framework se convierte en una tarea muy complicada con CF, ya que esas funciones no están incluidas.

Por lo tanto, parece lo más lógico del mundo pensar que los programadores de .NET CF estarán mucho tiempo llamando a APIs.

Por lo tanto, parece lo más lógico del mundo pensar que los programadores de .NET CF estarán mucho más tiempo realizando código P/Invoke.

Por lo tanto, parece lo más lógico del mundo dejar las funcionalidades de P/Invoke en el Framework intactas en el CF, o incluso mejoradas para .NET CF. Al fin y al cabo, hacen más falta.

Pues no.

Estás también recortadas. Y esto es lo que no entiendo: no creo que ocuparan tanto como para hacer que su inclusión completa engordara tanto el peso final del .NET CF. Es otra de las decisiones de diseño de Microsoft que no se entienden. Pero en fin, me ha asegurado Paul Yao (y él está en el ajo) que dicha funcionalidad P/Invoke aparece completa (o, al menos, muy mejorada) para la próxima versión de Visual Studio .NET, la 2005. Ya veremos que entienden los muchachos de MS por muy mejorada.