Compact Framework .NET 2.0 Adrián Couñago Silva Índice Índice......................................................................................................... 1 1. Introducción........................................................................................ 2 2. Diferencias de .NET Compact Framework ...................................... 3 2.1. Respecto .NET Framework .......................................................... 3 2.2. Respecto .NET Compact Framework 1.0..................................... 3 3. Generalidades y novedades Compact Framework 2.0 .................. 9 3.1. Generalidades CF........................................................................... 9 3.2. Novedades .....................................................................................10 4. Optimizando Compact Framework 2.0 ...........................................13 4.1. Motor de ejecución .......................................................................14 4.2. Colector de basura .......................................................................14 4.3. Excepciones ..................................................................................15 4.4. Windows Forms ............................................................................15 4.5. Servicios web ................................................................................15 5. Mejoras y avances en CF 2.0 ...........................................................17 5.1. Interfaz de usuario ........................................................................17 5.2. Controles de Windows Forms .....................................................17 5.3. Gestión de pantalla .......................................................................18 5.4. Dibujo personalizado ....................................................................19 5.5. Control de teclado.........................................................................19 5.6. Gestión de datos ...........................................................................20 5.7. XML .................................................................................................20 5.8. Seguridad y criptografía ...............................................................21 5.9. Threadings .....................................................................................21 6. Conclusiones.....................................................................................22 7. Glosario..............................................................................................23 8. Referencias ........................................................................................27 1 1. Introducción Todos los servicios actuales de telecomunicaciones e informática tienden a la exigencia de la movilidad. El desarrollo de aplicaciones para dispositivos móviles es cada vez mayor. Las principales restricciones de estos equipos son los recursos finitos de energía así como la capacidad de procesado y memoria. Los dispositivos móviles deben ser pequeños así que el uso de periféricos como el teclado o el ratón es impensable. La interoperabilidad con el usuario esta restringida debido al compromiso entre la movilidad y el tamaño. En este contexto nace la necesidad de crear herramientas de trabajo que nos permitan desarrollar aplicaciones para este tipo de equipos. Compact Framework es la una de las herramientas que se ha creado con este fin. Esta herramienta nos permite adaptar aplicaciones, que usaríamos en un equipo de sobremesa, a un nuevo entorno móvil. Con las nuevas capacidades de transmisión de datos aparecen nuevos servicios y prestaciones. Necesitamos renovar nuestras herramientas de trabajo de acuerdo a estos cambios. CF como herramienta ha evolucionado para satisfacer las nuevas necesidades. En este estudio se pretende definir las características y novedades que aporta Compact Framework .NET 2.0 disponible en la nueva plataforma Microsoft Visual Studio .NET 2005. Es un estudio orientativo y gran parte de la información recabada pertenece a las propias fuentes de Microsoft como señalamos en las referencias. Compact Framework 2.0 ofrece muchas mejoras sobre su predecesora versión (1.0) Cabe destacar que las posibles variaciones entre ambas versiones son muchísimas y trataremos las más destacables y las trataremos de forma superficial. Básicamente podríamos destacar los siguientes objetivos que persigue la nueva versión: • Mejorar la productividad del desarrollador • Proveer mayor compatibilidad con el marco completo Framework .NET • Aumentar la ayuda para las características del dispositivo En Compact Framework 2.0 destacan sus nuevas características y la integración del marco .NET como citamos anteriormente, así por ejemplo existen numerosas características que pueden introducir variaciones que veremos posteriormente. Son el caso de, por ejemplo, gestión de basura, servicios web XML, acceso a datos, soporte a criptografía, excepciones... Aparte de las características de la nueva versión repasaremos también brevemente como se lleva a cabo alguna de las optimizaciones de la versión posterior, las actualizaciones que hubo y la nueva versión vigente. Por último, hablaremos sobre alguna de las conclusiones que hayamos podido extraer de la información leída y este propio estudio. 2 2. Diferencias 2.1. Respecto .NET Framework Además, en la siguiente figura podemos hacer un repaso básico sobre los namespaces y librerías de clases disponibles para CF respecto el paquete Framework .NET completo. Fig 1. Namespaces y librerías de clases 2.2. Respecto .NET Compact Framework 1.0 Debemos saber que CF 2.0 cumple con todos los namespaces disponibles en la versión anterior excepto unos tipos y métodos que comentaremos. Según esto siempre se cumplirá el siguiente esquema: .NET CF 1.0 .NET CF 2 .0 Fig 2. CF 1.0 como subconjunto de la versión 2.0 3 Las diferencias se pueden clasificar según: Descripción Prestaciones y/o diferencias Clases y Tipos Compact Framework soporta como dijimos un subconjunto de librerías de clases de Framework .NET. Este subconjunto está destinado para el diseño de aplicaciones con una serie de limitaciones que corren en dispositivos generalmente móviles y que también tienen una serie de limitaciones. COM Interop Disponibles en la versión 2.0 de CF. Common Language Runtime Encargado de operaciones como el gestor de basura, compilación de código Just in Time y otras. Existe aproximadamente el 12% del total del Common Language Runtime de Framework .NET Controles En esta asignatura hemos podido comprobar que la gran mayoría de controles de Windows Forms disponibles en un formulario de aplicación común están también disponibles para CF. Así como existen controles específicos de CF. Directorio actual La funcionalidad de directorio actual no está presente en Windows CE, por lo que Compact Framework no soporta los métodos GetCurrentDirectory y SetCurrentDirectory. No obstante, propiedad Compact Framework WorkingDirectory posee para la obtener información sobre el proceso de inicio. Datos CF contempla un subconjunto de ADO .NET e incluye también el proveedor de datos SQL Server Mobile. No está soportado el namespace System.Data.OleDb. Debugging en la consola de comandos La posterior versión de Compact Framework no soporta el nuevo debugger (MDbg.exe) por línea de comandos que provee la versión 2.0. El antiguo debugger (DbqCLR.exe) fue descatalogado en la versión 2.0 de Framework .NET. 4 Despliegue de aplicaciones Desplegar aplicaciones es tan fácil como copiar el assembly al dispositivo que queramos utilizando un cable desde el puerto de conexión del PC de sobremesa. En la nueva versión de Visual Studio, se pueden desplegar directamente sobre el dispositivo en el momento de debugar. Trazo de diagnóstico Compact Framework .NET no soporta la configuración de archivos de trazo pero se pueden usar contadores de funcionamiento. Objetos dispuestos Framework .NET no garantiza que estén accesibles las propiedades y métodos que un objeto siempre tuvo disponibles. Sin embargo, acceder a algunas propiedades como la propiedad Text en el entorno Framework resulta normalmente satisfactorio. En cambio, debido a la implementación y a las diferencias que existen entre Framework .NET y CF .NET el acceso de propiedades y métodos pueden fallar en CF .NET. Codificación y localización Compact Framework depende del sistema operativo en relación a los datos de clases, por lo que los resultados de las clases pueden ser inesperados para algunas culturas. CF .NET no soporta ajustes en per-thread CurrentUICulture. Eventos CF .NET soporta los eventos GotFocus y LostFocus pero no soporta los eventos Activated y Desactivated. Secuencias de descripción de excepciones Compact Framework provee secuencias de descripción de excepciones mediante mensajes de error separados en una DLL diferente (System.SR.DLL). También permite que cada uno pueda crear sus propias secuencias de excepción para otras culturas con el objetivo de localizar aplicaciones. Nombres de archivo y rutas Windows CE resuelve un nombre de fichero sin información de ruta como si estuviese en el directorio raíz del dispositivo, no en el directorio de la aplicación desarrollada. Para asegurar la consecución de operaciones se debe especificar información acerca de la ruta absoluta. 5 Alta resolución El recurso HiDPI se añadirá automáticamente en los proyectos de VS 2005. Entrada/Salida Debido a las diferencias entre sistemas operativos, existen apremios y restricciones en el modelo de E/S. CF .NET no provee notificaciones de cambio de archivos. Instalación y ficheros CAB Es posible utilizar ficheros CAB y crear aplicaciones MSI para distribuirlas. Lenguajes Compact Framework 2.0 soporta el desarrollo utilizando VB y VC#, en cambio no soporta el actual C++. Matemáticas Los métodos matemáticos no están disponibles en su totalidad en todas las plataformas, sin embargo, están incluidas en la API para su compatibilidad. Memoria Compact Framework 2.0 está optimizado para sistemas alimentados por baterías y nos avisa de grandes usos de RAM o de ciclos de CPU. Red CF .NET provee clases compatibles con la tecnología IrDA conexiones con mediante el objetivo infrarrojos de y crear también incluye clases de escucha para peticiones HTTP al dispositivo. Test de funcionamiento CF .NET no soporta perfiles de código o el archivo Perfmin.exe en Monitor de Sistema. Sin embargo, se pueden usar contadores de funcionamiento. Código Proxy CF .Net no soporta todo el código generado por la herramienta de descripción de lenguaje de servicios web (WDSL). Reflection Compact Framework no soporta el namespace System.Reflection.Emit. CF actualmente no soporta el operador de equidad (==) en objetos de comparación tales como MethodInfo, FieldInfo, PropertyInfo, EventInfo, MemberInfo, MethodBase, ConstructorInfo y ParameterInfo. Se pueden utilizar hasta 64 bits usando el campo OpCodes.Shl. Cualquier especificación superior será reseteada con 64 bits. 6 Control Remoto CF no permite control remoto. Mensajería segura Compact Framework no soporta certificados del cliente ni autenticación mediante HTTPS. Sólo es posible usar autenticación básica. Seguridad Existen importantes diferencias y consideraciones que comentaremos. Serialización Debido al tamaño y a consideraciones de funcionamiento, no se soporta la serialización binaria utilizando el “BinaryFormatter” (visto en la asignatura) o serialización SOAP mediante el “SoapFormatter”. Sin embargo, es posible la serialización mediante la transmisión de objetos de datos utilizando SOAP en servicios web XML y la serialización de datasets con XML. Tamaño CF tiene alrededor del 8% del paquete completo de Framework .NET. El tamaño que ocupa en el disco duro es de un 50% más pequeño debido a la compresión de archivos de sistemas de Windows CE. Sockets No todas las opciones de Sockets están disponibles en CF. Threads Existen hasta cuatro threads creados por Compact Framework .NET. Intervalos de tiempo El valor retornado desde “Now” se especifica únicamente en segundos, no milisegundos. Se puede obtener una medida precisa mediante la propiedad “TickCount”. Temporizadores Los métodos “Start” y “Stop” disponibles en un objeto tipo System.Timers.Timer no son soportados, pero es posible parar e iniciar el temporizador utilizando la propiedad booleana “Enabled” disponible en System.Windows.Forms.Timer. Objetos My en VB CF soporta la característica de VB de los objetos My, exceptuando los siguientes objetos My: My.Application, My.Computer, My.User y My.Settings. 7 Web Services Los servicios web del cliente ejecutan el archivo wsdl.exe generado directamente por el código. No se pueden montar servicios web sobre un dispositivo como host local porque el host local se refiere al dispositivo que ejecuta la aplicación como en el dispositivo mismo. En lugar de esto, se debería usar el nombre de otra máquina o la dirección IP. XML Debido a numerosas consideraciones, CF no soporta la validación del esquema XML. Pero sí soporta el Modelo de Objeto de Documento (DOM). 8 3. Generalidades y novedades 3.1. Generalidades Como sabemos, Compact Framework es un subset de Framework .NET. Consiste en una serie de librerías de clases y tiene algunas clases adicionales específicas para dispositivos que requieren movilidad. CF .NET se ejecuta sobre el compilador de altas prestaciones JIT. El “Common Language Runtime” (CLR) está construido especialmente para CF por lo que resultan códigos finales mucho más eficientes para esta clase de dispositivos. Debemos imaginar las limitaciones que supone utilizar estos dispositivos como por ejemplo su memoria, los recursos y sobretodo el consumo de baterías y el tiempo limitado de estas. Para soportar aplicaciones diseñadas con CF los dispositivos deben hacer uso de una plataforma que lo permita, esta es el sistema operativo de Microsoft diseñado para este objetivo. El sistema utilizado es una parte reducida del sistema conocido como Windows CE. CF es compatible con los siguientes dispositivos y plataformas de desarrollo: Versión Dispositivo Plataforma 1.0 Pocket PC Pocket PC 2000, Pocket PC 2002, Windows Mobile 2003 para Pocket PC, Windows Mobile 2003 para Pocket PC SE, Windows Mobile Version 5.0 y software para Pocket PC 1.0 Smartphone Windows Mobile 2003 para Smartphones Windows Mobile Version 5.0 software for Smartphone 1.0 Otros dispositivos Windows CE 4.1 Windows CE 4.2 Windows CE Windows CE 5.0 2.0 Pocket PC Windows Mobile 2003 para Pocket PC, Windows Mobile 2003 para Pocket PC SE, Windows Mobile 5.0 software para Pocket PC 2.0 Smartphone Windows Mobile Version 5.0 software para Smartphone 2.0 Otros dispositivos Windows CE 5.0 Windows CE Recordemos que Smartphone 2002 no soporta CF pero sí Smartphone 2003 En relación con lo anterior, podemos ver una clasificación de los diferentes dispositivos para los que podemos diseñar, bajo qué versión de Windows CE funciona y las capacidades que aporta. Esto lo podemos observar en la siguiente figura: Fig 3. Dispositivos, versiones CE y capacidades 9 La arquitectura de Compact Framework cumple con el siguiente esquema: Fig 4. Arquitectura de Compact Framework .NET 3.2. Novedades Como dijimos, la nueva versión de Compact Framework aporta numerosas novedades. Debemos recordar que Compact Framework .NET proviene de Framework .NET por lo que muchas de estas novedades y/o mejoras suponen la incorporación de nuevas clases y métodos que provienen de Framework .NET o bien optimizaciones de las clases y métodos existentes. P.ej:\\ En el proyecto del juego Snake que tenemos, debíamos utilizar threads. System.Threading pertenece a Compact Framework y, por supuesto obligatoriamente, a Framework .NET. Lamentablemente, no disponíamos de los métodos Abort() y Join() en la versión 1.0 mientras que en CF 2.0 están disponibles. Compact Framework 2.0 añade una nueva característica en C#, es que permite incluir el direccionamiento mediante eventos en un código delegado como mostramos en el siguiente ejemplo: P.ej:\\ Antes en VS 2003: this.menuItem8.Click += new System.EventHandler(this.menuItem8_Click); private void menuItem8_Click(object sender, System.EventArgs e) { //CODIGO A EJECUTAR } En VS 2005 donde se dispone de CF 2.0: this.menuItem8.Click += new System.EventHandler(sender,args); //EL OBJETO sender Y EL EVENTO args YA PUEDEN INICIALIZAR EL EVENTO CONTROL DEL MENUITEM, ESTOS DOS INDICAN EL CODIGO QUE SE DEBE EJECUTAR Y EL EVENTO SECUNDARIO LANZADO Criptografia Se añaden nuevas características de soporte a criptografía. Estas son: • Certificados de seguridad X.509 • Hashing: MD5 y SHA1 • Encriptación simétrica: RC2, RC4, 3DES, DES • Encriptación asimétrica: RSA, DSA 10 DataSet Otras nuevas implementaciones son las realizadas en la clase System.Data.DataSet. Este alberga el método GetChanges y otros métodos disponibles en el namespace System.Data. Eventos En las excepciones también existen sustanciales cambios, se incluye un evento para cuando el índice cambia en un TabControl, otro para el cambio del valor de una TrackBar, se añaden eventos en vista de árbol (Treeview) y todos los eventos de selecion de objeto en un ComboBox o ListBox, como por ejemplo el evento SelectedIndexChanged. Excepciones Se implementan excepciones en casos que antes no se contemplaban, más que nada suponemos que como medio de ayuda al desarrollador. P.ej:\\ CF 2.0 incluye un método llamado Substring perteneciente a la clase String que lanza una excepción si el índice de inicio es mayor que la longitud del string. En la versión posterior, cuando depuramos la aplicación se para cuando llegamos a este punto. Red En cuanto a red, también podemos destacar varias mejoras como la compatibilidad para el futuro protocolo de Internet Ipv6, así como optimización de la serialización mediante XML. Además CF 2.0 soporta SOAP 1.2 y los siguientes protocolos de autenticación: Negotiate, NTLM y Kerberos. En CF 2.0 disponemos de encolamiento de mensajes, las clases disponibles en el namespace System.Messaging están disponibles como también se implementa soporte para clases parciales, luego pueden usarse en VS2005 cuando se crea un nuevo proyecto. Control del teclado La clase RegistryKey está disponible y por tanto se pueden hacer accesos al registro de Windows, la profundidad máxima de la clave de un registro es de 15 ya que es la limitación que pone Windows CE Con la nueva versión podemos acceder a puertos serie, se puede soportar hasta 4 puertos simultáneamente. Además de todo esto, también existen nuevas clases disponibles en la nueva versión de SQL Mobile Edition. XML En relación a los textos en XML, que antes mencionamos sutilmente podemos añadir que se incorpora la clase XmlSerializer así como los namespaces System.Xml.Xpath y System.Xml.Schema Se definen tres tipos de My objects: My.Resources Object, My,WebServices Object y My.Forms Object. Threads Además de disponer los métodos Join() y Abort() para los threads que antes comentamos, también se incluyen los métodos BeginInvoke, EndInvoke y parámetros útiles con el método Invoke. 11 Aunque la compilación en línea de comandos es soportada en versiones anteriores de CF, la nueva versión provee más facilidad y soporte para la compilación y la debugación mediante una Terminal de comandos. Controles CF cuenta con nuevos controles disponibles en Microsoft.WindowsCE.Forms, más adelante repasaremos qué mejoras presentan los formularios de Windows y el objeto Graphics utilizado en el proyecto de Snake. Librería de clases soportadas y no soportadas por el Compact Framework: Compact Framework es compatible con el 28 por 100 de las librerías que se encuentran en la versión completa. Algunas de las prestaciones que no soporta el CF son las siguientes: • ASP .NET • Gestión remota del dispositivo nativo. • Funcionalidad como servidor Web. • Desarrollo de aplicaciones en C++, J# y JSP. • Seguridad por palabra clave. Sin embargo ofrece algunas funcionalidades propias que no se encuentran en la versión completa como son: • Microsoft.WindowsMobile.DirectX • Microsoft.WindowsMObile.DirectX.Direct3D • Microsoft.WindowsCE.Forms • Infrared Connections • System.Data.SqlServerCe La necesidad de librerías propias relacionadas con el movimiento de gráficos en 3D y de controles con DirectX se debe a la menor capacidad del procesador del equipo nativo entre otras limitaciones. Los formularios se han readaptado al nuevo tamaño de pantalla y a la manera de gestionar los eventos producidos por el usuario. Se han incluido librerías propias relacionadas con la gestión de los sockets y la transmisión de datos a través de infrarrojos. La librería SQLServer permite la interoperabilidad con las bases de datos de un servidor SQL móvil. Algunas de estas funcionalidades requieren la instalación de herramientas específicas para ser utilizadas. Un ejemplo es un kit propio de desarrollo para la versión 5.0 de Windows Mobile, normalmente llamados paquetes SDK. 12 4. Optimizando Compact Framework Muchas de las diferencias que distinguen la versión de Compact Framework con su predecesora es precisamente la optimización de muchas de sus principales características. Es decir, de una versión a su posterior, además de agregar funciones inexistentes, se realizan mejoras que aumentan la eficiencia de ejecución de la aplicación. Debemos recordar que este es uno de los objetivos primordiales que busca el programador. Así podemos destacar, por ejemplo, las particularidades relacionadas con el almacenaje de variables en memoria donde podemos distinguir los siguientes elementos: • Almacenaje – Flash/ROM • Memoria física • Memoria virtual – 32 MBytes por proceso Compact Framework 2.0 está diseñado según: • Cubrir el 28% del total de Framework .NET • Compilador Just in Time (JIT) para dispositivos móviles (generación rápida de código) • Llamadas virtuales interpretadas • Carga escasa de metadatos En resumen, podemos consultar la siguiente tabla donde se encuentran algunas de las llamadas y la optimización que han tenido al respecto de sus versiones predecesoras y distinguidas según su optimización se vea incrementada por su tamaño o tiempo de ejecución. La tabla es la siguiente: Grande es mejor Pequeño es mejor Podemos comprobar como algunas de las características destacadas en la tabla aumentan su eficiencia dependiendo las llamadas por segundo, iteraciones, bytes por segundo o segundos. Estas unidades de medida se distinguen en las que mejoran minimizándolas o maximizándolas. Para la medida del funcionamiento y la optimización del mismo se utilizan más contadores de funcionamiento con el objetivo de verificar los tiempos de ejecución que se desean obtener o 13 simplemente los tiempos que han logrado conseguir los desarrolladores de la nueva versión. A esto se le añaden estadísticas que ayudan a conseguir el objetivo marcado. Estos contadores los podríamos resumir en: • De utilización genérica • De utilización para interoperaciones COM • Control de threadings • Objetos GUI • Control de actividad de red (bytes recibidos/enviados por socket) Cabe destacar que también se añaden nuevos colectores de basura (GC) que optimizan el espacio estático disponible ya que eliminan posibles variables y/u objetos que no serán utilizados dado que sus tiempos de latencia son también menores. 4.1 Motor de la ejecución En relación a la optimización de llamadas podemos distinguir dos tipos: • Llamadas controladas (requieren más recursos que las nativas) 1. Llamada a instancias 2. Llamada virtual 3. Invocación de plataforma: • Propiedades: son llamadas El compilador de ejecución JIT es el mismo en todas las versiones, no obstante se han incluido también optimizaciones como son el método “inlining” para métodos simples, registro de variables y en aspectos internos de la secuencia de ejecución del compilador. Gracias a las mejoras aportadas en las llamadas a funciones se han obtenido resultados muy interesantes donde, por ejemplo, una llamada a una función virtual se reduce el tiempo de ejecución en un 30% del valor anterior. 4.2 Colector de basura (GC) El colector de basura de Compact Framework realiza más rápidamente las asignaciones de espacio, concretamente de 7.5 bytes/segundo. Lo más importante es que el propio colector de basura gestiona su propia pila en bloques de 64 KBytes y 1 Mbytes de cache. Además utiliza una función para devolver memoria virtual y física al sistema llamada VirtualAlloc. Si existe fragmentación de la información a almacenar, GC puede comprimir su propia pila. Los elementos que accionan el GC son: • Fallo en la localización de memoria • Existencia de un millón de objetos localizados por GC • Que una aplicación pase a ejecutarse en segundo plano • Mediante GC.Collect() método que avisa a GC En el tiempo en el cuál se ejecuta el colector de basura se realizan las siguientes acciones: 1. Parada de todos los threads mediante un punto seguro 14 2. Encontrar todos los objetos vivos (en uso) y marcarlos 3. Desmarcar los objetos que están inactivos y añadirlos a la cola finalizadora 4. Se compacta la pila del colector de basura si así se requiriese 5. Se retorna el total de memoria libre obtenida al sistema operativo Todas las mejoras hechas en el colector de basura suponen una increíble eficiencia en contra de la versión antigua, ya que la localización y gestión de objetos activos e inactivos también es mucho más eficiente. De esta manera es como se obtienen fantásticos resultados de prueba, donde se sitúan contadores de tiempo que desvelan un decremento del tiempo de ejecución del 10000%. Mientras en la versión predecesora un código de prueba producía una cadena de 20040 objetos de secuencia en memoria en la nueva versión el mismo código obtenía solamente 56 cadenas. Por este motivo podemos afirmar que el colector de basura es uno de los elementos mejor optimizados o que el salto dado de una versión a otra es mucho más evidente. 4.3 Excepciones Las excepciones en la nueva versión de Compact Framework son mucho más eficientes y trabajan en segundo plano de forma más sutil, haciendo presencia en el momento de lanzar la propia excepción. Esta es la permisa que busca la nueva versión, ya que normalmente una excepción no entra en juego hasta que es lanzada y, además, se lanza en circunstancias limitadas. De aquí la importancia de hacer que consuman menos recursos del sistema. La nueva versión añade contadores de funcionamiento para controlar el número de excepciones lanzadas para que el propio sistema a la vez tenga un caudal más constante de trabajo a lo largo del tiempo, minimizando así los recursos dedicados. Recordemos, que en el VS2003 ya se incluían las sentencias “try/catch/finally” en lugar de “on error/go to”. 4.4 Windows Forms Los formularios de Windows han tenido muchos avances entre los que se encuentran: • Carga de formularios en segundo plano. • Carga más rápida del formulario. • Optimización de buffers para minimizar el parpadeo en la pantalla (hasta un 50% mejor). • Renderización previa de imágenes antes de su representación en el formulario: requiere un tratamiento básico previamente, pero posteriormente aumenta la eficiencia de manipulación de estas imágenes. 4.5 Web Services En la nueva versión de CF se ha intentado resolver en la medida de lo posible los embotellamientos en servicios Web. Normalmente, estos problemas en los servicios Web son debidos a dos problemas básicos: que la red esté limitando o bien que la propia CPU del dispositivo limite el servicio. 15 Como indicamos antes, se utilizan contadores de funcionamiento que controlan los bytes recibidos y/o enviados por un socket en concreto. De esta forma se intenta optimizar partiendo de la base que el servicio vaya alcanzando su límite sin llegar a él maximizando así la eficiencia sin llegar al colapso. Además de estos contadores, se añade mensajería específica para el control y la gestión de una sesión de un servicio Web. Por último, como último recurso se recomienda optimizar el esquema de serialización en el caso de tener al límite el uso de CPU. 16 5. Mejoras y avances 5.1. Interfaz de usuario La interfaz de usuario de Compact Framework se distingue claramente del paquete completo Framework .NET ya que los controles y el aspecto global de la interfaz se ve empobrecido. Como hemos visto en clase, el desarrollo de aplicaciones visuales para dispositivos móviles y smartphones está limitado porque los controles disponibles no son los mismos, las propiedades y tamaños de las pantallas tampoco y el teclado no ofrece la misma versatilidad que un teclado convencional. Los avances recientes en capacidades de exhibición, tales como pantallas de alta resolución y distintas orientaciones, han hecho el trabajo del desarrollo de la interfaz de usuario una labor más desafiante. Para simplificar la tarea de crear interfaces de usuario, Compact Framework 2.0 proporciona nuevas características disponibles para la personalización de la misma. 5.2. Controles de Windows Forms A continuación enumeramos los distintos controles que incorpora la nueva versión. Entre algunos de estos se encuentran: • MonthCalendar: es un control de calendario personalizado que provee una visualización gráfica de la fecha y es bastante útil para que los usuarios seleccionen una fecha de forma gráfica. • DateTimePicker: es un control personalizado para mostrar por pantalla y permitir a los usuarios introducir una fecha, incluso la hora. Es especialmente utilizada para aplicaciones de SmartPhones debido a que su combinación de una disposición gráfica reducida y el cómodo formato de selección de fecha. Cuando queremos mostrar esta información por pantalla, el control DataTimePicker tiene un aspecto muy similar a un TextBox, sin embargo, cuando el usuario está seleccionando una fecha, un calendario emergente similar al control MonthCalendar se muestra por pantalla. • WebBrowser: el control WebBrowser encapsula la herramienta Web Browser, provee de altas capacidades gráficas y expone una gran variedad de eventos que permite a la aplicación la interacción entre el usuario y el contenido del navegador web además de permitir que la aplicación tenga comportamientos personalizados (eventos). • Notification: este control encapsula la capacidad de notificación que permite a las aplicaciones para PocketPC enviar una notificación al usuario sin cambiar el contexto en el que la actividad del usuario transcurre. El texto de la notificación puede ser texto plano o bien lenguaje HTML. Además para mostrar información por pantalla, las notificaciones pueden recibir entradas por parte del usuario incluyendo botones HTML y hipervínculos en el propio texto de la notificación. • DocumentList: el control DocumentList provee de un mecanismo estandar para gestionar y mostrar archivos tales como los que se usan cuando abrimos hojas de cálculo de Excel Mobile o documentos de texto de Word Mobile. Este control le da la posibilidad al usuario de navegar por los archivos del sistema, borrar, copiar, mover y renombrar archivos. El usuario 17 también puede usar este control para enviar correos electrónicos y archivos mediante el uso de puertos infrarrojos, Bluetooth u otros sistemas de comunicación. • DataGrid en SmartPhones: en esta versión es posible implementar el control DataGrid sobre dispositivos SmartPhones. Tal y como para PocketPC, el control DataGrid sobre SmartPhones soporta configurar el tamaño de las columnas, múltiples estilos de visualización, manipulación de valores nulos y eventos de selección. • LinkLabel: simplemente es un control que permite mostrar hipervínculos en nuestra aplicación. • Splitter: es un control que permite la capacidad de configurar el tamaño de los controles fijos. • ToolBar: control que añade una barra de herramientas de Windows capaz de mostrar imágenes como botones. • Controles de usuario: la nueva versión soporta controles de usuario. Con la ventaja añadida de que en CF 2.0 las aplicaciones pueden crearse gráficamente mediante controles. Tal y como sucede con el paquete completo Framework .NET de VS2005, en CF 2.0 .NET los controles de usuario aparecen automáticamente en el control Toolbox y solamente arrastrándolos sobre el formulario ya los tenemos funcionales en la aplicación. 5.3. Gestión de pantalla Como sabemos, la multitud de factores que intervienen en el desarrollo de una aplicación para un dispositivo móvil (tamaño de ventana, teclado, sin ratón …) requiere que por parte de los desarrolladores se implementes interfaces que deben ser dinámicas en lugar de estáticas. Esto quiere decir que se ajusten a las características de cada dispositivo en concreto maximizando las prestaciones visuales en cada momento. Aunque en muchas ocasiones esto no es posible (por falta de tiempo, recursos…) Compact Framework 2.0 intenta simplificar la esta tarea de crear interfaces dinámicas ya que tiene muchas capacidades de gestión de pantalla. Entre estas nuevas capacidades podríamos destacar las siguientes: • Control Docking: CF 2.0 soporta este control que permite fijar y marcar zonas de controles que dependen de un control padre. Cuando el padre es redimensionado los controles fijados también se autoredimensionan rellenando la zona especificada en el control padre. Existe la posibilidad de rellenar por completo el control padre. • Control Anchoring: la nueva versión soporta también el “anclaje” de controles. Este término se utiliza para denominar a la función que nos permite identificar a uno o más controles y fijar una distancia respecto el eje o los ejes de control padre. Cuando se lleve a cabo un redimensionamiento del control padre, los controles “anclados” también se redimensionarán automáticamente pero conservando la distancia apropiada entre ellos y los ejes del control padre. • Automatic Scrolling: aparte de los controles propios de un formulario de poder hacer “scroll” en un formulario, se añade la propiedad de Automatic Scrolling. Esta propiedad permite que cuando está activada (“trae”) se añade automáticamente un control con una “scroll bar” que 18 permite al usuario moverse y encontrar aquellos controles que no están visibles en el formulario. • Automatic Scaling: es una nueva propiedad incluida que indica como el control debe dibujarse cuando debe mostrase por pantalla con una resolución diferente a la resolución original en el que fue diseñado. Además de esto, en la nueva versión de Compact Framework, tal y como sucedía en Framework .NET, están disponibles los métodos “SuspendLayout” y “ResumeLayout”. Estos métodos están disponibles en las clases de CF 2.0 y son utilizados en la conjunción con otro grupo de múltiples eventos relacionados con la reposición o el redimensionamiento de controles hijos. También se añaden clases gráficas que proveen de información como la resolución de la pantalla del dispositivo en uso. Por ejemplo, existe una propiedad llamada “DpiX” la que indica el número de puntos por píxel horizontales o “DpiY” para los verticales. 5.4. Dibujo personalizado Para simplificar la creación de interfaces de calidad, CF 2.0 ha añadido un buen número de características que permiten a las aplicaciones una manejabilidad mayor y más fácil utilizando dibujos personalizados. Entre las nuevas características disponibles podemos destacar: • Fuentes rotativas: se añade la clase “LogFont” que permite a CF 2.0 disponer en pantalla texto y el cambio de ángulos de vista y otros efectos de texto. • Paleta personalizada: las aplicaciones ahora se pueden crear con un “Pen” de un tamaño y color personalizado. • Bitmaps: como en la versión predecesora es posible trabajar con archivos bitmap. Ahora bien, se incluyen más opciones cuando creamos los bitmaps y en el momento de salvar el bitmap en un archivo o bien en un stream. En general, resulta más sencillo visualizar y manipular bitmaps a través de la combinación de los métodos “LockBits” y “UnlockBits”. • Compatibilidad con DirectX: Windows Mobile 5.0 incluye un buen número de funciones para dibujo en dos y tres dimensiones a través de la implementación nativa de las interfaces gráficas de programación de DirectX. Las aplicaciones diseñades para un sistema Windows Mobile 5.0 tienen la posibilidad de utilizar clases propias que están contenidas en el namespace “Microsoft.Windows.DirectX”. 5.5. Control de teclado Actualmente, muchos de los nuevos dispositivos de bolsillo ya incluyen teclado, bien sea reducido (concentrando varios caracteres en una tecla), interactivo en pantalla, etc. Para permitir que los desarrolladores tengan la ventaja de utilizar las posibilidades y prestaciones que ofrece la utilización del teclado, CF 2.0 soporta el uso de teclados. Se añade una propiedad que permiten ordenar los controles de la aplicación de forma que los usuarios pueden navegar por ellos utilizando el tabulador. Asimismo, se añaden eventos de teclado como: KeyUp, KeyDown, KeyLeft, KeyRight y KeyPressed. 19 Además, el control del formulario tiene la propiedad “KeyPreview”. Cuando esta propiedad se encuentra con el valor booleano “false”, los eventos de teclado se envían directamente hacia el foco del control. Si está en “true”, todos los eventos se envían mediante una instancia prioritaria al formulario para ser enviado después al control que en ese momento tenga el foco. 5.6. Gestión de datos Los datos son la parte más importante de cualquier aplicación. Las clases orientadas a la gestión de datos están directamente relacionadas con el nivel de esfuerzo que se requiere la programación para acceder y trabajar con datos. Compact Framework .NET provee nuevas clases de datos añadidas a las ya disponibles. Entre las clases incluidas en la nueva versión son: • Clases de acceso a SQL: permite el acceso a bases de datos SQL Server 2005 Mobile. Este acceso es mucho más rápido y una solución mucho más eficiente, en cuanto a consumo de recursos del sistema, para el acceso a datos SQL Mobile que la clase DataSet. Tal y como sucedía en la clase DataSet, “SqlCeResultSet” puede usarse como fuente de datos enlazados. • DataSet: la clase DataSet y las clases relacionadas poseen nuevas características. Estas características no sólo proveen una gran funcionalidad sino que también intenta acercar la clase DataSet a lo que viene establecido normalmente en el paquete completo de Framework .NET. • GetChanges y Merge: son métodos que están añadidos en la nueva versión disponible en la clase DataSet. El método GetChanges retorna una copia del objeto DataSet que contiene todos los cambios hechos desde la última llamada al método AcceptChanges. El método Merge fusiona un objeto DataSet combinándolo con otro. Este método es muy útil sobretodo para fusionar cambios desde un objeto DataSet, retornado por el método GetChanges, a otro objeto DataSet diferente. • Copy: el método Copy retorna un nuevo objeto DataSet que contiene la misma estructura y datos que el objeto original. • Serialización de DataTables: la clase DataTable contiene los métodos WriteXml y ReadXml, los cuales disponen de capacidades de serialización y deserialización de texto XML de tablas individuales. Además también soporta pasar DataTables como argumentos de un servicio Web. 5.7. XML La versión 2.0 de CF ofrece nuevas prestaciones respecto al procesado de datos mediante XML respecto de su predecesora. Estas nuevas prestaciones simplifican el trabajo con este tipo de archivos ya que se incluyen nuevas clases que nos permiten seleccionar nodos del archivo, realizar búsquedas dentro de cada nodo y la comunicación entre equipos mediante serialización. 20 XmlDocument es la clase que nos permite seleccionar nodos y realizar búsquedas de datos dentro del mismo archivo. XmlSerializer mejora las capacidades de serialización respecto de la anterior versión. Permite utilizar servicios web que utilicen esta tecnología. XmlSchema permite la creación de archivos XML mediante esquema en tiempo de ejecución de la aplicación. 5.8. Seguridad y criptografía La seguridad es un factor a considerar en la gran mayoría de aplicaciones, incluyendo aquellas que se ejecutan en dispositivos móviles. Además las capacidades de seguridad incluidas en la plataforma Windows Mobile, CF 2.0 incluye criptografía y protocolos de red. CF 2.0 brinda soporte a la criptografía, por ejemplo soporta el sistema MD5 y SHA1, como también el RC2, RC4, 3DES y DES (encriptaciones simétricas) y el RSA o DSA (encriptaciones asimétricas). Además de la autenticación “Digest” incluida en la versión posterior, la nueva versión incluye soporte para autenticación NTLM y Kerberos. 5.9. Threadings Los cambios que se han realizado en Compact Framework 2.0 aportan a las aplicaciones más control de los threads e incorporan la clase Thread haciéndola prácticamente idéntica a la clase disponible en la versión completa de Framework .NET CF 2.0 añade soporte para threads en segundo plano. Estos son threads que no acaban de ejecutarse mientras haya threads primarios activos hasta que estos últimos estén terminados. Existe una propiedad de los threads llamada “IsBackground” con el objetivo de definir los threads de segundo plano. Además también incluye método para abortar la ejecución de un hilo llamado “Abort”. Cuando se llama a este método, se lanza una excepción llamada “ThreadAbortException” y normalmente finaliza el thread abortado. Existe la posibilidad de establecer una coordinación entre hilos de ejecución diferentes, es decir podemos bloquear un thread esperando por el inicio de otro. CF 2.0 permite la identificación de cada uno de los threads por nombres asignando un string a la propiedad “Name” existente ahora en esta versión. Ahora está disponible utilizar ejecución asíncrona de un delegado en un thread de interfaz de usuario. Hasta ahora en la versión 1.0 sólo se soportaba la ejecución síncrona mediante el método “Control.Invoke” mientras que en 2.0 se provee el método “Control.BeginInvoke” que ejecuta asíncronamente el delegado. El método “Control.EndInvoke” retorna el resultado de esta operación. 21 6. Conclusiones En primer lugar destacar que existen innumerables mejoras en la nueva versión de Compact Framework 2.0. Además de cubrir un porcentaje mayor del paquete completo de Framework .NET, también mejora las ya disponibles en la versión posterior, adaptándolas más a las necesidades reales de los dispositivos y aplicaciones actuales, así como la creación de nuevos métodos con el mismo objetivo. En contra de lo anterior, debemos decir que parece que Compact Framework está desarrollado muy irregularmente. Con esto nos referimos a que el avance en diferentes campos ha sido muy diferente y no se han llevado a cabo de una forma equitativa. Suponemos que debido, aparte de las nuevas necesidades tecnológicas, a cuestiones de marketing. Y es que muchos de los grupos de desarrollo en los que se divide el grupo de trabajo de Microsoft de Compact Framework equiparan la programación de ciertas clases a nivel de paquete completo mientras que en otros no sucede esto. Como hemos visto aporta muchas novedades en cuanto a los threads, tema relacionado con el proyecto de la asignatura. Los métodos y propiedades ahora disponibles quizás se hubieran ajustado más o de manera más sencilla a los objetivos que perseguíamos en el proyecto. Resumiendo y como idea general extraemos que la nueva versión de Compact Framework aporta aquellas novedades que se hacen imprescindibles para la programación de aplicaciones actuales. Además de la optimización de muchas de las llamadas a métodos ya presentes en versiones anteriores. Por estas razones suponemos que sería interesante comenzar a migrar nuestra herramienta de desarrollo .NET por la nueva versión VS2005 disponiendo así de CF 2.0 para el diseño de aplicaciones sobre PDAs, Smartphones, etc. 22 7. Glosario A Active-x Un conjunto de tecnologías de interoperabilidad independientes del lenguaje, creadas por Microsoft, que permiten que los componentes de software escritos en diferentes lenguajes funcionen juntos en entornos de red. Los elementos fundamentales de la tecnología ActiveX son el Modelo de objetos componentes (COM) y el Modelo de objetos componentes distribuido (DCOM). ASP Active Server Pages: Páginas de Servidor Activo. Es la especificación para páginas Web dinámicamente creadas, con extensión .ASP, con ActiveX y ejecutadas en servidores con Microsoft Internet Information Server (IIS). Cuando un browser solicita una página ASP, el servidor Web la genera con código HTML y se la envía. B Bytecode Es un código intermedio más abstracto que el código máquina. Habitualmente se trata como a un fichero binario que contiene un programa ejecutable similar a un módulo. C CLR Common Language Runtime es el motor en tiempo de ejecución del nucleo de CF. Permite utilizar servicios como la compilación de diferentes lenguajes de programación entre otras prestaciones. COM Es una arquitectura de software desarrollada por Microsoft para construir aplicaciones basadas en componentes. Los objetos COM son componentes discretos, cada uno con una identidad única, y con interfaces que permiten su uso desde otras aplicaciones o componentes. Son más versátiles que los DLLs de Windows porque son completamente independientes del lenguaje, tienen capacidades de comunicación intraprocesos, y caben fácilmente en un diseño orientado a objetos. ActiveX también está basado en COM. D DES Data Encryption Standard.Algoritmo de Encriptacion de Estandar. Algoritmo desarrollado por IBM, utiliza bloques de datos de 64 bits y una clave de 56 bits. Es utilizado por el gobierno americano. 23 DCOM Modelo de objetos componentes distribuido. Extensiones del Modelo de objetos componentes (COM) que facilita la distribución transparente de objetos a través de redes y de Internet. DCOM forma parte de la especificación administrada por The Open Group para la distribución en plataformas. DIRECTX Interfaz de programación bajo Windows, que permite acceder directamente al hardware (por ejemplo, tarjetas gráficas y de sonido). Se suele utilizar para programar juegos en este sistema. E F G GUI Interfaz gráfica de usuario (GUI) es un método para facilitar la interacción del usuario con el ordenador a través de la utilización de un conjunto de imágenes y objetos (iconos, ventanas..) además de texto. H Hash Un hash o función resumen se refiere a una función o método para generar claves o llaves que representen de manera unívoca a un documento, registro o archivo. J JIT (Just In Time) Compilación en tiempo de ejecución (también conocida como traducción dinámica) es una técnica para mejorar el rendimiento de sistemas de programación que compilan a bytecode, consistente en traducir el bytecode a código máquina nativo en tiempo de ejecución. K Kerberos: protocolo de seguridad muy difundido en entornos Unix y adoptado también por otros sistemas operativos como, por ejemplo, Windows 2000. Básicamente utiliza una aplicación, el servidor de autenticación, para validar las contraseñas y los esquemas de cifrado. L M 24 MD5 es un algoritmo utilizado para crear firmas digitales. Está orientado al uso con máquinas de 32 bits y es más seguro que un algoritmo MD4, que puede romperse. El MD5 es una función hash de un sólo sentido, o sea que toma un mensaje y lo convierte en una cadena fija de dígitos, también conocida como digest. Cuando se utiliza una función hash de un sólo sentido, se puede comparar un mensaje digest calculado contra el mismo digest desencriptado mediante una clave pública para verificar que el mensaje no fue falsificado. Dicha comparación se denomina "hashcheck". Metadato: Los metadatos son información de la información misma. En esencia, intentan responder a las preguntas quién, qué, cuándo, cómo, dónde y porqué, sobre cada una de las facetas relativas a los datos que se documentan. P PocketPc PocketPC es un ordenador de bolsillo, también llamado PDA (Personal Digital Assistant). Se trata de un pequeño ordenador, diseñado para ocupar el mínimo espacio y ser fácilmente transportable que ejecuta el sistema operativo Windows CE de Microsoft, el cual le proporciona capacidades similares a los PCs de escritorio. R RSA El sistema criptográfico con clave pública RSA recibe su nombre por la inicial del apellido de sus inventores: Ronald Rivest, Adi Shamir y Leonard Adleman. Todo usuario de dicho sistema hace pública una clave de cifrado y oculta una clave de descrifrado. Cuando se envía un mensaje, el emisor busca la clave pública de cifrado del receptor y una vez que dicho mensaje llega al receptor, éste se ocupa de descifrarlo usando su clave oculta. S SDK Software Development Kit. Es un paquete de programación que permite desarrollar aplicaciones para una plataforma específica. Típicamente un SDK incluye una o más APIs, herramientas de programación y la documentación pertinente. Serializacion Codificar una estructura de datos como una tira de bits. Deserializar sería la operación contraria. SOAP 25 Simple Object Access Protocol. Es un protocolo de mensajería basado en XML y que se usa para codificar la información en los mensajes de petición y respuesta en servicios Web antes de enviarlos por la red. Los mensajes SOAP son independientes de cualquier sistema operativo y pueden transportarse usando una variedad de protocolos de Internet, como SMTP, MIME, y HTTP. Socket Un objeto de software utilizado por un cliente para conectarse a un servidor; los componentes básicos incluyen el número de puerto y la dirección de red del host local. SQL Structured Query Language. Lenguaje de programación que se utliza para recuperar y actualizar la información contenida en una base de datos. Históricamente, el SQL ha sido el lenguaje favorito para sistemas de administración de bases de datos corriendo en minicomputadoras y mainframes. Sin embargo, el SQL está teniendo soporte en sistemas de base de datos para PC porque soportan bases de datos distribuidos (bases de datos sobre distintos sistemas de computadoras). Esto permite que varios usuarios sobre una LAN accedan a la misma base de datos simultáneamente. W Windows Ce Variación minimalista del sistema operativo Windows para equipos móviles. Es compatible con los procesadores Intel x86,MIPS,ARM y SuperH. X X509 Es un standard ampliamente usado para definir certificados digitales. El X.509 es actualmente una Recomendación de la ITU, lo cual significa que aún no ha sido oficialmente definido o aprobado para su uso estandarizado.Como resultado, las empresas han implementado este standard en distintas maneras. XML Lenguaje universal de marcado para documentos estructurados y datos en la web, mas amplio, mas rico y mas dinámico que HTML. No solo es un lenguaje de marcado, sino también un metalenguaje que permite describir otros lenguajes de marcado. Permite el uso ilimitado de los tipos de datos que pueden utilizarse en Internet, lo cual resuelve los problemas que surgen entre las organizaciones que deben intercambiar datos procedentes de standards distintos. 26 8. Referencias Novedades en CF 2.0 • http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnnetcomp/html/whats_new_netcf2.asp Formularios y gráficos • http://msdn2.microsoft.com/en-us/library/hyc18s6t.aspx Controles • http://msdn2.microsoft.com/en-us/library/5c632yz4.aspx Desarrollo para SmartPhones • http://msdn2.microsoft.com/en-us/library/ms172541.aspx Diferencias • http://msdn2.microsoft.com/en-us/library/2weec7k5(en-US,VS.80).aspx Librerías de CF 2.0 • http://www.mperfect.net/cfBcl/ Soporte Framework y nuevas características • http://msdn2.microsoft.com/en-us/library/h1ek3akf.aspx Varios (SmartPhones con CF 2.0) • http://www.mentores.net/default.aspx?tabid=104&type=art&site=196&par entid=51 Optimización • Presentación oficial de Microsoft acerca de CF .NET 27