II Evento CatDotNet

El próximo sábado 28 de enero, el grupo de usuarios .NET de Catalunya (el CatDotNet) organiza el segundo evento en Barcelona, donde tendré la oportunidad de participar junto a unos auténticos fieras. En esta ocasión hablaré de cómo desarrollar aplicaciones Metro en Windows 8 con HTML 5.

El evento se celebrará en la sala de actos del centro cívico Golferichs, situado en Gran Via de les Corts Catalanes, 491, en la esquina con la calle Viladomat (ver en Google Maps).

Para asistir al evento os podéis registar en la página de eventos de Microsoft a través de este enlace.

La agenda del día es la siguiente:

10:00- 10:45 – “Cómo realizar una app metro style con C# y expression blend” by Edu Tomas.

En esta charla vamos a ver como podemos usar C# y XAML para la construcción de aplicaciones Metro Style usando la nueva API WinRT. Veremos como gracias a las novedades incorporadas en C#5 se nos simplifica el uso de una API masivamente asíncrona como es WinRT.

También hablaremos un poco del papel que juega .NET en Windows 8 y especialmente en aplicaciones Metro Style.

Continuar leyendo

Programación asíncrona con WinJS y «Promises»

En la anterior entrada, en la que hicimos una introducción a los controles WinJS y al databinding, vimos que para poder acceder a todos los controles creados de forma declarativa teníamos que llamar a la función WinJS.UI.processAll, que se encargaba de crear todas las instancias. Además nos aprovechábamos de que esta función devolvía un objeto Promise para realizar una serie de acciones. Bien, hasta aquí nada nuevo, ¿pero qué es exactamente un objeto Promise? Esto es lo voy a intentar explicar en esta entrada.

Uno de los problemas con el que nos encontramos al lidiar con programación asíncrona en JavaScript es la complejidad que adquiere el código cuando tenemos que sincronizar una serie de llamadas asíncronas, por ejemplo, cuando hacemos una llamada a un servicio y a partir de la respuesta de éste tenemos que realizar otra llamada a otro servicio. Además, si añadimos una gestión de errores mínima, el código que obtenemos es todavía más complejo. En definitiva, tenemos un código complejo de seguir a pesar de que es un código que, según su lógica, debería ejecutarse linealmente.

La comunidad JavaScript propuso una solución a este problema a través del estándar Common JS Promises/A. Básicamente una Promise es un objeto que nos «promete» un resultado en algún momento en el futuro y nos permite programar cualquier operación cuando ese valor esté establecido. Esto nos permite escribir código no bloqueante que se ejecuta de forma asíncrona y sin necesidad de escribir código para manejar la sincronización. Ahora mismo existen implementaciones de Promises en los principales frameworks de JavaScript (jQuery, node.js, dojo, etc.) y WinJS no podía quedarse atrás. La especificación es muy sencilla, y dice simplemente que hay que tener un objeto con un método llamado then y que este método debe aceptar tres parámetros. Estos tres paramétros serán tres funciones callback que se llamarán cuando la Promise se complete, cuando se produzca un error o cuando se produzca algún evento de progreso. En WinJS el objeto es WinJS.Promise y podemos ver su implementación en el fichero base.js.

Continuar leyendo

Controles WinJS y databinding de un vistazo

WinJS (Windows Library for JavaScript) es una librería que nos ayuda en la tarea de crear aplicaciones Metro style para Windows 8 utilizando JavaScript. Esta librería esta compuesta por un conjunto de ficheros JavaScript y CSS que nos proporcionan además de los estilos por defecto para que nuestras aplicaciones tengan el estilo Windows Metro, los controles de uso común como el selector de fecha y hora, la barra de aplicación, listas de selección, barra de progreso, etc. Así, hasta unos 20 controles WinJS que tenemos disponibles en la preview. Pero no sólo esto, WinJS nos da soporte entre otras funciones para interacción táctil, navegación y programación asíncrona. En esta entrada nos vamos a centrar en como declarar controles WinJS y como enlazarlos con un origen de datos.

A diferencia de los controles HTML, los controles WinJS no tienen un elemento dedicado, es decir, si queremos añadir un elemento de selección de hora (Timepicker) no haremos añadiendo el elemento <timepicker /> a nuestro código HTML, sino que tenemos que crear un objeto JavaScript que estará enlazado a un elemento HTML.
Tenemos dos métodos para instanciar estos controles, lo podemos hacer de forma declarativa, utilizando atributos desde el código HTML, o programáticamente.

Primero veamos cómo podemos crear el control WinJS de forma declarativa. Añadimos un elemento div y utilizamos el attributo data-win-control para especificar el tipo de control que queremos. Con esto estamos indicando que el elemento sera el host del control WinJS. En el siguiente ejemplo vemos como crear un control TimePicker.

Continuar leyendo

Windows Runtime y el despliegue de aplicaciones

Llevo utilizando la versión preview de Windows 8 desde su presentación en septiembre y durante este tiempo he podido introducirme en el nuevo mundo que se nos ha presentado con el desarrollo de aplicaciones Metro Style y Windows Runtime, el nuevo proveedor de servicios del sistema. Hace también unas semanas que estoy deseando escribir sobre mis experiencias y por fin me he decidido, así que en los próximos días iré compartiendo con todos vosotros una serie de entradas sobre el funcionamiento de Windows Runtime y sobre cómo desarrollar aplicaciones para la plataforma.

Para esta primera entrada he elegido un tema que se trató en unas de las charlas de la BUILD y que me resultó muy interesante porque a diferencia de otras charlas, en las que se mostraba cómo crear aplicaciones y en las que siempre veíamos WinRT como la API que podemos consumir desde cualquier lenguaje (Javascript, C++, C# y VB), Matt Merry (Program Manager del equipo de Windows Runtime Experience), en su charla, cambió el punto de vista y muestra cómo las aplicaciones trabajan con la infraestructura de Windows Runtime para ejecutarse. Sin duda, lo más interesante de esa presentación (que recomiendo que veáis) es la sesión de debug paso a paso que hace para ver cómo funciona el proceso de activación de una aplicación, pero eso lo dejaremos para más adelante, antes veamos qué es lo que sucede en el sistema cuando desplegamos nuestra aplicación.

Con Windows 8 tenemos un nuevo sistema de despliegue de paquetes mediante el cual podemos instalar o desinstalar aplicaciones de una forma simple, sin hacer cambios irreversibles en el sistema operativo y sin que haya una degradación del rendimiento del sistema. No vamos a entrar ahora en detalle sobre lo que contiene este paquete, pero basta decir de momento que es un contenedor que se utiliza para instalar nuestra aplicación en nuestra máquina local, en una para hacer pruebas o en el Windows Store.
Sabiendo esto, tenemos por un lado el paquete que contiene nuestra aplicación y por otro lado tenemos el manifiesto del paquete (package manifest) que describe y contiene las propiedades para desplegar el paquete. Este fichero contiene información tan importante como el nombre de la aplicación a mostrar, el icono, las capacidades (características del sistema o dispositivos que la aplicación puede utilizar) o la página de inicio. Todos las aplicaciones Metro tienen este manifiesto, se trata de un fichero XML con el nombre Package.appxmanifest que podemos encontrar en el directorio raíz de nuestro proyecto. Además Visual Studio 11 tiene un diseñador que nos permite ver todas las propiedades agrupadas en varias pestañas (Application UI, Capabilities, Declaration, Content URIs y Packaging).

Continuar leyendo

BcnDevCon: Aplicaciones robustas con Programación Orientada a Aspectos

Este pasado jueves di una breve charla durante la Barcelona Developers Conference sobre Programación Orientada a Aspectos. Fue una charla introductoria de cuarenta y cinco minutos en la que vimos los conceptos básicos de AOP, los problemas de implementación que nos encontramos al tratar los temas transversales de aplicación (cross-cutting concerns), las soluciones parciales que utilizamos actualmente y los beneficios que nos aporta la programación orientada a aspectos. Las demos con código estuvieron centradas en presentar varios conceptos de PostSharp y DynamicProxy, dos librerías que podemos utilizar para implementar aspectos en nuestras aplicaciones. En esta entrada voy a intentar resumir lo que ya fue una charla muy resumida de lo que es AOP.

¿Qué es AOP?
La programación orientada a aspectos es un paradigma de programación cuya principal intención es que escribamos buen código, código más limpio. Como comenté durante la charla este es un tema bastante curioso, porque el concepto de AOP es bastante antiguo (se desarrolló hace 15 años), mucha gente lo conoce, existen librerías desde hace también bastante tiempo, pero lo curioso es que en muy pocos proyectos he visto una implementación de aspectos.

De hecho, me ha sucedido varias veces, que lo primero que pregunta mucha gente cuando oye este término (sobre todo programadores de .NET) es: ¿Ya no programamos con orientación a objetos? Y la respuesta siempre es: No, AOP no sustituye la orientación a objetos. Pero lo que sucede es que la OOP es un modelo que se queda corto cuando tenemos que implementar temas transversales, cuando tenemos que implementar comportamientos que se utilizan en gran parte de las funcionalidades de negocio y además estos comportamientos no se pueden aislar fácilmente.

Continuar leyendo