|
Publicado el 10/Feb/2008
Se acaba de anunciar un nuevo modelo de teléfono de Sony-Ericsson, el XPERIA X1, que vendrá con Windows Mobile. Al parecer el terminal está fabricado por HTC (cómo no) y será el primero de una nueva línea de móviles de Sony Ericsson con este nuevo sistema operativo para ellos. El terminal parece bastante completo, e incorpora un nuevo UI que, si funciona como aparece en el vídeo promocional, quiere competir directamente con el UI del iPhone. El movimiento resulta bastante interesante ya que Sony Ericsson es uno de los fabricantes que más apoya (apoyaba?) Symbian en su línea UIQ. Por lo que parece, de entre todos los fabricantes grandes de móviles, ya sólo falta Nokia por unirse al carro de Windows Mobile; aunque ha licenciado parte de sus tecnologías, eso sí. Por experiencia os puedo decir que, desde el punto de vista del programador, nos ahorrarían muchos dolores de cabeza si lo hicieran.
Publicado el 02/Jan/2008
Aquí tenéis una interesante aplicación gratuita (de momento) para los usuarios de Windows Mobile 5/6. Se trata de una utilidad que reemplaza en cierto modo al Home Screen de un Pocket PC, aunque no lo deshabilita. Visualmente es muy agradable con animaciones y transiciones muy interesantes (que me recuerdan mucho a FlowFX, la entrada presentada en el primer concurso de desarrollo de OpenNETCF Community). Desde el punto de vista del uso, está pensada para ser utilizada principalmente con el dedo, aunque funciona bien con las teclas de desplazamiento. Veremos cómo evoluciona ya que aún es un proyecto reciente, pero no tiene mala pinta.
Publicado el 05/Sep/2007
Los chicos de OpenNETCF acaban de abrir un nuevo sitio web orientado a la comunidad de desarrolladores para dispositivos basados en Windows CE / Windows Mobile / .NET Compact Framework. Son de los mayores expertos que hay en este tema con lo que el contenido que encontraréis será de calidad. Inicialmente el sitio empieza con 3 puntos concretos: - Artículos técnicos. Artículos interesantes sobre desarrollo. Si queréis contribuir, se les pueden mandar artículos para su publicación.
- Concursos de desarrollo. Organizan concursos de desarrollo cada mes con premios interesantes para los ganadores. Este mes se trata de presentar aplicaciones o componentes con interfaces de usuario atractivas. Los premios son una copia de Visual Studio y un dispositivo Windows Mobile a elegir de entre varios.
- Un servidor basado en Subversion donde alojar proyectos Open Source. Ellos han colgado de momento varios de sus proyectos Open Source pero ponen el servidor a disposición de la comunidad para alojar otros proyectos relacionados con el desarrollo orientado a dispositivos.
La idea promete, así que estaremos atentos a ver cómo evoluciona.
Publicado el 10/Jul/2007
Hace un par de días he recibido mi copia de libro Microsoft Mobile Development Handbook editado por Microsoft Press del cual tuve el placer de revisar algunos capítulos mientras lo estaban escribiendo. El libro lo han escrito Andy Wigley, Daniel Moth y Peter Foot, tres conocidos MVPs en desarrollo para dispositivos cuando iniciaron el libro aunque ahora Daniel Moth ha dejado de serlo ya que ha pasado a ser empleado de Microsoft en el área de movilidad. Es un libro bastante completo (más de 600 páginas) que cubre casi todo lo relacionado con desarrollo para dispositivos Windows Mobile, centrándose en .NET Compact Framework 2.0 y ofreciendo una introducción a .NET Compact Framework 3.5 que vendrá con Visual Studio 2008, tratando temas de pruebas unitarias, LINQ y WCF para dispositivos. En su primera parte se centra en lo 'esencial' del desarrollo de aplicaciones móviles, aunque muchos de los temas se pueden aplicar a cualquier otro entorno .NET; en concreto el capítulo 4 sobre pruebas de las aplicaciones y gestión de excepciones. La segunda parte trata temas más concretos sobre los retos que presentan las aplicaciones móviles hablando sobre temas de red, threading, seguridad y criptografía, acceso a datos, gráficos, controles, etc... Existe un capítulo, el capítulo 5, dedicado al rendimiento de .NET Compact Framework que explica bastante bien cómo funciona, entre otras cosas, el recolector de basura de .NET Compact Framework y cómo usar las herramientas existentes para medir el rendimiento de las aplicaciones. Este capítulo, aparte del interés que tiene para los desarrolladores de aplicaciones móviles, también puede ser de especial interés para los desarrolladores de juegos basados en XNA ya que esta plataforma se basa en .NET Compact Framework. En definitiva Microsoft Mobile Development Handbook es un libro bastante recomendable para todos aquellos que quieran desarrollar aplicaciones para dispositivos Windows CE o Windows Mobile usando .NET Compact Framework escrito por gente que conoce bastante bien la plataforma.
Publicado el 04/Jul/2007
Recientemente se ha publicado en un blog de sobre de Windows Mobile escrito por dos evangelistas de la plataforma (o eso creo) una serie de links de utilidad para todos aquellos que se estén iniciando en el desarrollo de aplicaciones para esta plataforma. Recopilan links desde las novedades de Windows Mobile 6 hasta dónde encontrar información en caso de que seas un programador de Palm u otra plataforma; interesante tenerlo guardado por si acaso.
Publicado el 27/Mar/2007
Siguiendo la línea que os comentaba en el post anterior donde se mostraba un ejemplo que nos contaron en el pasado MVP Summit (en ese caso acerca de SQL CE Sync Services del que, por cierto, se ha publicado la segunda parte), Mark Prentice publica ahora un ejemplo que nos mostraron sobre WCF para .NET Compact Framework 3.5. WCF para Compact Framework se va a suministrar con dos canales de comunicación, uno basado en HTTP (ó HTTPS) y otro basado en Exchange Server. Se pueden usar las versiones 2003 SP2 o 2007 de Exchange La versión 2007 dispone de algunas características adicionales, como la posibilidad de usar aplicaciones de escritorio que 'hablen' con el servidor Exchange mediante Servicios Web para mandar mensajes a los dispositivos. En este caso la comunicación con los dispositivos usará entonces el correo electrónico como base. El dispositivo recibirá un correo mediante Server ActiveSync con un formato determinado que la aplicación podrá capturar, no apareciendo así el mensaje en el buzón de correo del usuario. Esto causó bastantes preguntas ya que no todo el mundo dispone de Exchange y las necesidades de la gente pueden variar bastante, como, por ejemplo, ¿qué hacer si se quieren usar diversas direcciones de email para diferentes aplicaciones cuando ActiveSync sólo permite disponer de una cuenta configurada contra Exchange? Si ninguno de estos canales nos sirve para nuestra aplicación, siempre se puede extender el sistema y usar el mecanismo de comunicación que nos interese/inventemos. La ventaja que tendremos es que desde el punto de vista del código cliente la utilización será similar, escondiéndose la implementación del canal para que sea transparente.
Publicado el 20/Mar/2007
Como complemento a la nueva versión de SQL CE (la base de datos compacta pensada para usar principalmente en dispositivos Windows Mobile), han liberado recientemente una herramienta que puede resultar muy interesante en ciertos casos. Como la mayoría que haya usado SQL CE sabrá, SQL CE se puede sincronizar con bases de datos SQL Server. La base de datos SQL CE se conecta con el servidor SQL Server vía HTTP y permite sincronizar su contenido con el servidor. Según se publica en el blog de SQL CE, esta nueva herramienta permite realizar una sincronización similar pero con bases de datos Access. Esto permite que, por ejemplo, dispongamos de una aplicación móvil con SQL CE y, al conectar el dispositivo móvil al PC, la base de datos del dispositivo se sincronice con una base de datos Access en nuestro PC. Esta sincronización se realiza con las siguientes características: - La conversión de tipos de datos entre SQL CE y Access se realiza en el momento de hacer la sincronización.
- Es necesaria una conexión de ActiveSync para que la sincronización se produzca.
- No es necesario instalar nada en el dispositivo. Simplemente hay que instalar software en el PC.
- La sincronización se basa en RDA (RDA es uno de los métodos de sincronización disponibles; en SQL Server se cuenta con RDA y Merge).
- Una aplicación existente en una PDA se puede hacer que sincroniza con SQL Server o Access simplemente cambiando los parámetros de sincronización, pero no es necesario modificar nada más.
- No existe resolución de conflictos.
Aún no la he usado mucho, pero tengo en mente un par de casos donde me podría resultar útil, ya veremos... Si la queréis probar está disponible aquí.
Publicado el 07/Mar/2007
Desde el viernes pasado están disponibles los SDK de Windows Mobile 6. Vienen en versión Pocket PC y Pocket PC Phone (a partir de ahora conocidos como Windows Mobile Professional) y en versión SmartPhone (ahora conocido como Windows Mobile Standard). La base del sistema operativo de estos dispositivos es el nuevo Windows CE 6, que trae bastante mejoras con respecto a la versión anterior. Corrección: La base sigue siendo Windows CE 5. Windows CE 6 y Windows Mobile 6 se desarrollaron en paralelo con lo que Windows Mobile 6 no pudo usar Windows CE 6. Habrá que esperar a nuevas versiones de Windows Mobile para tener el nuevo CE. También podéis leer las novedades desde el punto de vista del desarrollo que proporcionan estos dispositivos aquí. De momento, y hasta que haya dispositivos Windows Mobile 6 reales a la venta, nos tendremos que conformar con estos SDKs y sus emuladores.
Publicado el 01/Feb/2007
Por si no lo sabéis, desde ayer está disponible Google Maps para Windows Mobile. Yo lo he estado probando en mi i-mate JasJar con pantalla VGA y es espectacular, sobre todo cuando se usa el seguimiento de GPS con la vista de satélite... Enhorabuena al equipo que lo ha lanzado!
Publicado el 16/Dec/2006
Coincidiendo con el lanzamiento de Visual Studio 2005 Service Pack 1, Microsoft ha liberado SQL Server Compact Edition (antes SQL Server Everywhere) cuya principal novedad, como ya comenté anteriormente, es la posibilidad de disponer de bases de datos SQL CE (archivos con extensión .sdf) tanto en el PC como en dispositivos móviles (Pocket PCs, SmartPhones, ...) con una base de código común. Esto abre un interesante abanico de posibilidades y nuevos escenarios que hasta ahora no eran posibles. Además de SQL CE, se han liberado las herramientas de desarrollo correspondientes que faciliten el desarrollo de estas soluciones.
Publicado el 28/Nov/2006
Como ya sabréis, Outlook 2007 dispone de un lector de RSS integrado que permite descargar 'feeds' rss que aparecen en una carpeta dentro del buzón, como podéis ver en la imagen, como si fuesen mensajes de correo. Da la casualidad de que si se sincroniza un Pocket PC con el correo de Outlook 2007, se le puede indicar al Pocket PC que sincronice esas carpetas también, disponiendo así de un lector de RRS offline bastante interesante ya que podríamos llevarlos las noticias para leer por ejemplo en el metro, como se puede ver en esta imagen. Pero existe una gran pega y es que la mayoría de los feeds RSS que encontraremos muestran HTML en las publicaciones, y, desgraciadamente, el lector de correo de Windows Mobile es incapaz hasta el momento de leer correo HTML con lo que hace prácticamente inviable su uso ya que, como se puede ver en esta otra imágen, se muestra el texto con un formato que, si contiene links como en este caso, hace bastante difícil su lectura. Esperemos que en las nuevas versiones de Windows Mobile se incluya la posibilidad de leer correo HTML para que esto se convierta en una realidad. De todas formas, si dispones de feeds RSS que publiquen contenido en texto plano, esta es una buena opción para llevártelas donde sea.
Publicado el 06/Nov/2006
Hasta el momento hoy se han anunciado varios lanzamientos que pueden resultaros interesantes. Por un lado, ya está disponible el redistribuible de .NET Framework 3.0, incluyendo novedades como WPF (Windows Presentation Foundation, ó Avalon), WCF (Windows Communication Foundation, ó Indigo) y WWF (Windows Workflow Foundation). Por otro lado, también está disponible la RC1 de SQL Server Compact Edition (aunque al instalarla aparece aún como SQL Server Everywhere). Además, Office 2007 ya es RTM (versión final) y se ha anunciado en las subscripciones MSDN que todos los subscriptores tendrán disponibles tanto Office 2007 como Windows Vista para descargar en un plazo de 7 días después del anuncio, así que habrá que estar al tanto. Finalmente, hoy empieza el TechEd en Barcelona (donde hay varias presentaciones sobre Windows CE 6.0 que se lanzó la semana pasada), con lo que probablemente se producirán más anuncios interesantes a lo largo de los próximos días; pondremos la antena a ver qué se cuece.
Publicado el 03/Oct/2006
Si habéis leído mi post anterior probablemente habréis comprobado mi tendencia a usar en muchas ocasiones el camino más largo para llegar a un sitio dado. Como era de esperar, esto también funciona en .NET Compact Framework: System.Environment.OSVersion.Version (un poco más facil que lo anterior ¿no?) Esta propiedad devuelve un objeto de tipo Version que tiene sobrescrito el método ToString para obtener el string de versión habitual (x.x.xxxx); aunque también da acceso a los diferentes componentes de la versión. Como bonus, podéis examinar un poco más la clase Environment y veréis que podéis obtener lo siguiente: - Versión del runtime de .NET en ejecución - System.Environment.Version
- Directorios especiales (necesarios para acceder a los directorios en caso de que se ejecute la aplicación en equipos con diferentes idiomas, ej. "Startup" vs "Inicio") - Enum System.Environment.SpecialFolder, usado con la función System.Environment.GetFolderPath
- Tiempo que lleva el equipo encendido - System.Environment.TickCount
Recordatorio final: Antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado.
Publicado el 25/Sep/2006
A veces es necesario saber la versión del sistema operativo sobre la que está ejecutándose una aplicación .NET para tomar alguna deción sencilla. El ejemplo más claro que me he encontrado recientemente es el de usar la función Bitmap.Save en .NET Compact Framework para guardar un Bitmap a disco. Si se lee la documentación de esta función, se indica que se le puede pasar un parámetro de tipo ImageFormat (un enum) diciéndole el tipo de imagen a guardar. Entre los diferentes valores del enum se dispone de PNG por ejemplo. Pero si se intenta guardar un bitmap usando el formato PNG en un dispositivo Windows Mobile 2003 (cuya base de sistema operativo es Windows CE 4.2) obtendremos una excepción en tiempo de ejecución (NotSupportedException) ya que en Windows CE 4.2 GDI no dispone de la posibilidad de tratar PNGs. En cambio, si se ejecuta ese código en un dispositivo Windows Mobile 2005, basado en Windows CE 5.0, funcionará sin problemas. Para evitar estos problemas basta con que detectemos la versión del sistema operativo para escoger un formato de imagen u otro dependiendo del tipo de dispositivo que sea. Una forma de obtener rápidamente la versión del sistema operativo es mediante la función GetVersionEx del API de Windows. Su declaración sería similar a lo siguiente: [DllImport("coredll.dll")] public static extern int GetVersionEx(byte[] lpVersionInfo); Si se busca la documentación de esta función, como parámetro se pide una estructura de tipo OSVERSIONINFO. En este caso (como en muchos otros en los que el API requiere estructuras) resulta casi más fácil pasarle a la función como parámetro un array de bytes que luego la función rellenará. Lo que necesitamos saber, eso si, es el tamaño del array a pasar, que se puede ver en la documentación (sumando los tamaños de los campos de la estructura). Luego, cuando la función rellene el array, se podrá leer fácilmente su contenido usando la clase BitConverter, lo que facilita mucho las declaraciones de p/invoke, ya que no hay que traducir las estructuras a .NET. Esta misma técnica está usada en el ejemplo de Ping para Compact Framework que podéis encontrar aquí. Teniendo en cuenta esto, el código para obtener la versión será entonces algo parecido a: byte[] lpVersionInfo = new byte[138]; int resp = GetVersionEx(lpVersionInfo); if (resp == 1) { Int32 dwMajorVersion = BitConverter.ToInt32(lpVersionInfo, 4); Int32 dwMinorVersion = BitConverter.ToInt32(lpVersionInfo, 8); Int32 dwBuildNumber = BitConverter.ToInt32(lpVersionInfo, 12); Int32 dwPlatformId = BitConverter.ToInt32(lpVersionInfo, 16); } Para un equipo con Windows Mobile 2003 el valor de dwMajorVersion será 4 y el de dwMinorVersion será mayor o igual a 2 (Windows CE 4.2). En el caso de un equipo Windows Mobile 2005 la versión será mayor o igual a 5.0. Siguiendo el ejemplo anterior, la función Bitmap.Save pasándo como parámetro un formato de tipo PNG, funcionará sólo para equipos con dwMajorVersion >= 5.
Publicado el 24/Apr/2006
En ocasiones es necesario medir el tiempo que transcurre en completarse alguna operación en nuestro código, ya sea para optimizar su rendimiento o por cualquier otra razón. Para ello, en ciertas situaciones se puede utilizar la propiedad 'Now' de la clase DateTime, que devuelve una instancia de DateTime con la fecha y hora actuales. Se toma este valor en dos puntos diferentes del código y se restan para obtener el tiempo transcurrido.
Esta aproximación sólo será válida si la duración de la operación a realizar es relativamente larga, pero, en muchas ocasiones, la precisión ofrecida por este método no será suficiente y obtendremos que el tiempo transcurrido es 0, lo que no da mucha información. Para estos casos se usan habitualmente las funciones QueryPerformanceFrequency y QueryPerformaceCounter del API de Windows. Si se realiza una búsqueda sobre estas funciones en cualquier buscador, se verán cientos de artículos explicando su funcionamiento, con lo que no voy a extenderme aquí en su uso.
Lo que si puede resultar interesante en este caso es saber que estas funciones también se pueden utilizar en Windows CE, y, por tanto, están disponibles en Pocket PC y SmartPhone. Para utilizarlas hay que declararlas mediante P/Invoke de la siguiente forma:
[DllImport("coredll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
[DllImport("coredll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
Como se ve están definidas en la librería coredll.dll que contiene casi todo el API nativo de Windows CE.
Para mostrar su uso, se adjunta un ejemplo (PerformanceMeter.zip) que contiene una solución de Visual Studio 2005 para Windows Mobile 2005 Pocket PC, con lo que es necesario disponer del SDK de Pocket PC 2005 para poder probarlo tal cual está (si no se dispone de ese SDK, se puede crear una solución en Compact Framework 2.0 para Pocket PC 2003 y añadir las clases a ese proyecto para utilizarlas). Esta solución contiene 2 proyectos. El primero, llamado PerformanceMeter, contiene tres clases cuyo objetivo es facilitar la realización de pruebas de rendimiento a lo largo del código de manera cómoda y reutilizable. El proceso sería el siguiente:
- Crear una instancia de la clase PerformanceMeter
- Crear un nuevo test de rendimiento mediante la llamada a PerformanceMeter.NewTest(), que devuelve una instancia de la clase PerformanceTest. Esta instancia es almacenada automáticamente en una colección interna de PerformanceMeter.
- En el punto en el que se quiera iniciar el test, se hace una llamada a la función Start() de la instancia de la clase PerformanceTest obtenida en el paso anterior.
- Cuando se quiera finalizar el test, se hace una llamada a la función Stop() de la misma instancia anterior.
- Para ver los resultados de los test realizados hay que consultar la propiedad PerformanceTests que contiene la colección de pruebas realizadas.
El objetivo de estas clases es el de poder realizar varios tests de rendimiento a lo largo de las pruebas de una aplicación dada para posteriormente poder crear un informe de cómo han resultado las pruebas, de la manera menos intrusiva para el código posible. Cada test contiene la siguiente información:
- Nombre y descripción del test, útil si se va a disponer de varios tests y se quiere sacar un listado de ellos.
- Número de iteraciones que realiza el test de un código determinado. Este valor sólo es una propiedad que se usa para calcular una media, de manera que si se entre la ejecución de la función Start y la función Stop el código realiza 10 iteraciones, la podemos establecer con ese valor para que devuelva la media por iteración.
- Fecha y hora de inicio y fin del test, obtenidos con DateTime.Now. Hay que tener en cuenta que los contadores de precisión no devuelven la hora.
- Tiempo de ejecución del test en milisegundos obtenidos con la resta de los anteriores.
- Duración media por iteración en alta precisión (propiedad AverageDurationPerIteration - tipo double), si se miden varias iteraciones.
- Tiempo de ejecución del test en alta precisión (propiedad TotalDuration - tipo Double)
Como ejemplo del uso de estas clases está el segundo proyecto incluido en la solución, PerformanceTests. Este proyecto presenta un formulario para Pocket PC y un menú, Tests, que hace, a modo de ejemplo, dos tests, uno de concatenación de strings y otro de búsquedas en un documento XML.
El primer test compara lo que tarda el código en concatenar 2000 cadenas con y sin usar la clase StringBuilder, y el otro test mide lo que tarda el código en acceder un nodo de un documento XML con XmlDocument y lo compara con lo que se tarda en acceder al mismo nodo usando XmlTextReader.
Cuando finalizan los tests, muestra en la ventana los tiempos medidos.
En este ejemplo, para que los resultados sean más reales, conviene ejecutar cada test dos veces y usar los resultados de la segunda ejecución, ya que la primera vez que se ejecutan cada uno de ellos hay un tiempo de carga e instanciación de clases que hacen que el primer test sea mucho más lento que el segundo.
Espero que resulte interesante.
PerformanceMeter.zip (63,17 KB)
Publicado el 18/Apr/2006
Después de las quejas y peticiones por parte de mucha gente acerca del modelo de licencias de SQL Mobile (sólo licenciado para usarse en Windows CE y Tablet PC), Microsoft ha respondido y se va a modificar la política de licencias apareciendo bajo un nuevo nombre, SQL Server Everywhere Edition, que podrá usarse en cualquier entorno a partir de finales de año.
El producto es exactamente el mismo, lo único que cambia es su nombre y la política de licencias.
Esto va a posibilitar el desarrollo de aplicaciones que compartan una misma base de datos en múltiples entornos, lo que va a facilitar la vida a más de uno.
Publicado el 22/Mar/2006
Ultimamente he estado probando diferentes dispositivos con diferentes versiones de ActiveSync (4.1, 3.5, 3.8, ...).
Después de instalar/desinstalar ActiveSync varias veces y volver a quedarme con la última versión (la 4.1 en este momento), vi que la opción de conectar ActiveSync con DMA había desaparecido de su sitio (en la versión en ingles de ActiveSync está en File-Connection Settings-Allow connections to one of the following -> DMA). Esta opción se instala con Visual Studio 2005 para permitir la conexión de los emuladores mediante ActiveSync y así poder probar diferentes cosas simulando un entorno más 'real'.
Si os ocurre lo que a mi, al perder esta opción de conexión se pierde la capacidad de conectar el emulador a ActiveSync, pero se puede restaurar fácilmente. Existe una dll COM en el directorio de instalación de los emuladores (típicamente en "\Program Files\Microsoft Device Emulator\1.0") llamada "SERDMAAsPlugin.dll". Este componente es el que implementa el tema de DMA en ActiveSync y tiene que estar registrado.
Para habilitar la opción de nuevo, primero hay que cerrar el proceso de ActiveSync (terminar la tarea 'wcescomm.exe' con el administrador de tareas) y ejecutar el comando
regsvr32.exe serdmaasplugin.dll
en el directorio en el que tengais esa dll. Una vez registrado de nuevo el componente, al arrancar ActiveSync estará de nuevo disponible la opción DMA y el emulador debería conectar sin problemas.
Publicado el 23/Jan/2006
Si tenéis bases de datos SQL CE en versiones 1.0 o 2.0 y queréis actualizarlas a SQL Mobile, existe una utilidad llamada 'SQL Server Mobile Database Upgrade Tool' (upgrade.exe) que se ejecuta en el dispositivo y que os permite actualizarlas.
Tenéis más detalles sobre esta utilidad en el blog de José Miguel Torres.
Publicado el 23/Jan/2006
Tenía pensado escribir una guía acerca de cómo conectar a Internet con el emulador ya que es una pregunta que me han hecho en varias ocasiones.
Pero no voy a hacerlo, ya que he encontrado un sitio donde se explica cómo configurarlo, tanto si se quiere conectar con el emulador a través de Active Sync con la conexión passthrough como si se quiere conectar directamente.
|