jueves, 6 de diciembre de 2012

Arquitecturas para desarrollo móvil - Modelo de Código Generado

Este artículo forma parte de una serie de artículos donde iré explicando las distintas arquitecturas que tenemos disponibles a la hora de desarrollar para móvil.
Arquitectura del Modelo de Código Generado
La idea base de este modelo es producir aplicaciones nativas para cada plataforma pero a partird de un mismo código y un mismo lenguaje de programación.

Diagrama Modelo de Código Generado
Un compilador multiplaforma permite separar el entorno de construcción o desarrollo del entorno del dispositivo objetivo o de ejecución. La idea es la siguiente: Habrá una framework o herramienta que nos ofrecerá un API (en cualquier lenguaje de programación) independiente de la plataforma en la que se vaya a ejecutar. El desarrollador usará este API para construir la aplicación móvil, incluyendo el interfaz de usuario, la persistencia de datos y la lógica de negocio. Una vez hecho esto, el código es procesado por el compilador multiplaforma que transformará esté código en una aplicación nativa especifica para una plataforma objetivo. La aplicación resultante de este proceso puede ser desplegada y ejecutada de forma nativa en un dispositivo.

lunes, 3 de diciembre de 2012

Arquitecturas para desarrollo móvil - Modelo de Código Interpretado


Este artículo forma parte de una serie de artículos donde iré explicando las distintas arquitecturas que tenemos disponibles a la hora de desarrollar para móvil.

Este modelo se basa en la existencia de un Intermediate Language Runtime (ILR) o entorno de ejecución de lenguaje intermedio que abstraiga al desarrollador los detalles de la plataforma en la que se está ejecutando el código. El desarrollador escibirá el código en un lenguaje de programación determinado (esto depende del framework), un compilador generará el mismo programa en un lenguaje intermedio, y este código intermedio es interpretado o compilado just-in time por un por un interprete escrito para cada plataforma que interpreta o compila el código en un código máquina entendible por el dispositivo objetivo.

Arquitectura del Modelo de Código Interpretado

Como podemos ver en la arquitectura, el ILR será por tanto un entorno de ejecución que contendrá una capa de abstracción multi plataforma que trabajará con cada una de las APIs de las distintas plataformas. La implementación de este interprete varía en tamaño y complejidad según la herramienta elegida, incluso varían los métodos de ejecución, pudiendo usarse virtualización, interpretación, compilación just-int time o una mezcla de varios tipos.

Un ejemplo muy conocido de este modelo en las aplicaciones de escritorio es la maquina virual de java. Una máquina virtual es una implementación software de una maquina (por ejemplo de un dispositivo móvil) que ejecuta programas como si de una maquina físifica real se tratase. Y ya en su día se intentó replicar este modelo en el mundo móvil con Java ME y su KVM (Kilo Virtual Machine), pero no termino de triunfar ya que producía aplicaciones demasiado pesadas para el momento, y la alta fragmentación del mercado, hacía que las aplicaciones desarrolladas para este entorno de ejecución no funcionase en muchas plataformas.

Componentes del Modelo de Código Interpretado

Así que con este modelo, la responsabilidad de soportar multiples plataformas, la pasamos del desarrollador al creador de la máquina virtual o el ILR

Anngry Birds es un ejemplo de este modelo (usa Lua como lenguaje principal).

domingo, 2 de diciembre de 2012

Arquitecturas para desarrollo móvil - Modelo Híbrido


Este artículo forma parte de una serie de artículos donde iré explicando las distintas arquitecturas que tenemos disponibles a la hora de desarrollar para móvil.

Uno de los mayores inconvenientes del modelo web es las limitaciones que nos impone a la hora de acceder a algunas características del hardware de la plataforma o dispositivo sobre la que se ejecuta la aplicación, ya que a pesar de que las últimas versiones de los navegadores móviles propagan información como la orientación de la pantalla o geolocalización, esta es aun limitada y todavía no hay forma de obtener datos del acelerómetro, la cámara o subir un video.

Aquí es donde el modelo hibrido entra en escena. En este, básicamente tendremos una aplicación nativa que sólo contendrá la aplicación web embebida, de tal manera que funcionará como un wrapper que hará de puente de comunicación entre la aplicación web embebida y las opciones propias del dispositivo, eliminando así parte de las limitaciones del modelo web.

El usuario recibe una aplicación nativa normal que muestra contenido web. La aplicación web interna será cacheada localmente en el dispositivo durante la instalación, eliminando así la necesidad de una conexión activa a la red y mejorando su velocidad y sensibilidad.

 Arquitectura del Modelo Híbrido

La comunicación entre la aplicación web y la aplicación nativa, normalmente ocurre mediante JavaScript APIs que nos dan la posibilidad de leer datos adicionales del móvil, y lanzar acciones como la vibración, el acelerómetro o acceder a ficheros de un modo estándar a través de diferentes plataformas.

Componentes del Modelo Híbrido
Esta habilidad de combinar aplicaciones web estándar con las nativas, puede significar una importante reducción de tiempo y coste al minimizar el trabajo necesario de codificación. Para el usuario, una aplicación hibrida bien diseñada, se verá muy parecido a una nativa: Se la bajará de un app store, la almacenará en el dispositivo móvil y la ejecutará como cualquier otra aplicación nativa. Sin embargo para los desarrolladores supone una gran diferencia, porque en vez de tener que rescribir buena parte de la aplicación para cada plataforma móvil, escribirán esa parte en HTML, CSS y JavaCript, y reusarán ese código a través de las diferentes plataformas.

Ejemplos de este modelo serían la aplicación android de la Wikipedia o la aplicación iPhone de LinkedIn.

viernes, 16 de noviembre de 2012

Arquitecturas para desarrollo móvil - Modelo Web


Este artículo forma parte de una serie de artículos donde iré explicando las distintas arquitecturas que tenemos disponibles a la hora de desarrollar para móvil.

En este modelo, las aplicaciones son codificadas en un lenguaje de programación soportado por los navegadores web y es ejecutado dentro del navegador del móvil.

A la hora de presentar la información (parte UI) se utilizan dos enfoques, uno en el que tanto la lógica como las vistas son procesadas, ejecutadas y preparadas en el servidor, y otro en el que la mayor parte de este trabajo es hecho en cliente.

Arquitectura del modelo Web (Procesamiento en Servidor)

Para el segundo enfoque, la base es javascript

Arquitectura del modelo web (Parte en Cliente)

Por lo tanto podríamos resumirlo en que aquí la clave es construer la aplicación usando tecnologías web estandar como HTML (para definer texto estático e imagines), CSS (que define el estilo y la presentación) y JavaScript (nos servirá para establecer las interacciones y animación) que nos permiten que su apariencia y comportamiento sea cercano al de las aplicaciones nativas. Todos los frameworks que utilizan este modelo se basan en librerías javascript, que combinadas con HTML 5 y CSS 3 renderizan la aplicación web móvil en cualquier dispositivo, y esto es possible a las posibilidades que nos ofrece HTML 5  y CSS 3, que incluyen bases de datos SQL, almacenamiento local, animaciones, video, ejecución offline…

Esta arquitectura es muy interesante cuando buscamos algo barato y que cubra un rango muy grande de plataformas con cambios mínimos. 

miércoles, 14 de noviembre de 2012

Arquitecturas para desarrollo móvil - Modelo Nativo


Este artículo forma parte de una serie de artículos donde iré explicando las distintas arquitecturas que tenemos disponibles a la hora de desarrollar para móvil.

Como si fuera una aplicación de escritorio, las aplicaciones nativas se construyen pensando en un único sistema operativo o incluso un único dispositivo. La idea de este enfoque es aprovechar todo el potencial que nos da el entorno para acceder a las características propias del dispositivo móvil y poder así llegar a sacar el máximo potencial en cuanto a rendiemiento y posibilidades que un móvil nos ofrece.


Arquitectura del modelo nativo

La arquitectura se basa en que en el dispositivo implementaremos toda su interfaz, acceso a funcionalidades de la plataforma (cámara y demás) y lógica (al menos la que necesite ser accedida de modo offline). Si existe cierta información que no necesite ser accedidad de modo constante y offline, sino que basta con recuperarla cada vez que haya una conexión disponible, se podría implementar una aplicación web o servicio web que implementase parte de la lógica y recuperación de información.

En este enfoque, la misma funcionalidad (offline y UI) debe ser implementada desde cero para cada plataforma, ya que cada una de ellas usa su propio lenguaje de programación, por lo que no tenemos la opción de compartir implementaciones de funcionlidad común.  Esto puede hacer que pensemos en desechar esta alternativa inmediatamente, pero para algunos escenarios, donde el rendiemiento y la experiencia de usuario cobran especial relevancia, las aplicaciones nativas son necesarias.

Entornos de trabajo para el desarrollo de aplicaciones nativas
Tanto Android como iOS o Windows Phone proveen todos los mecanismos necesarios para crear este tipo de aplicaciones, ya sea un IDE, emuladores o un app store donde ponerla a la venta.

En resumen, puede ser interesante en aplicaciones donde hay un alto nivel gráfico y de procesamiento de imágenes, se requiere geo localización audio o video en tiempo real, se busca la realidad aumentada, integridad transaccional con datos offline del teléfono…

Instagram para iOS o Mint.com son ejemplos de este enfoque.

domingo, 11 de noviembre de 2012

Consideraciones previas en una arquitectura para móviles


Este artículo forma parte de una serie de artículos donde iré explicando las distintas arquitecturas que tenemos disponibles a la hora de desarrollar para móvil.


A la hora de elegir una arquitectura de desarrollo para móvil es necesario tener en cuenta una serie de aspectos, como son: conectividad, almacenamiento, limitaciones del procesador, estándares, opciones de despliegue, usuarios potenciales… sin olvidar otros típicos como escalabilidad, mantenibilidad o extensibilidad. Todos estos factores servirán como punto de partida a la hora de tomar una decisión arquitectónica.



A continuación se comentan los aspectos más relevantes.

Conectividad


Aplicaciones móviles son por defeinición, móviles, es decir, el usuario no está conectado a un punto de red fijo, sino que mientras se mueve va cambiando y puede que en ciertos momentos se encuentre con una conexión nula o inexistente.

A pesar de que las tecnologías inalambricas han evolucionado mucho en los últimos años, no se puede esperar que un usuario móvil vaya a estar “siempre conectado”, como mucho se puede esperar que este “casi siempre conectado”.

 Acceso al dispositivo.


Con esto nos referimos al echo de poder acceder desde nuestra aplicación a funciones propias del smartphone o dispositivo, como son el GPS, acelerometro, agenda, camara y demás.

Algunas arquitecturas permitirán acceder a todas estas opciones, mientras que otras solo permiten acceder a algunas o incluso a ninguna. Por eso es importante tener siempre en mente como de importante es para nosotros y para nuestra aplicación el acceso al dispositivo y a sus funciones.

Usabilidad


A la hora de diseñar el interfaz de una aplicación para móvil, tenemos que ser mucho más cuidadosos, si cabe, que cuando lo hacemos para una aplicación de escritorio o web, ya que  nos encontramos ante pantallas de pequeño tamaño, multitáctiles, con métodos de entrada disitintos a los tradiciones y en definitiva, unas limitaciones y posibilidades que pueden llevar a nuestra aplicación al fracaso o al exito

Rendimiento


Un aspecto muy a tener en cuenta es como de importante es para nuestro objetivo el rendimiento que tenga la aplicación. Está claro que si queremos desarrollar un juego de coches, el rendimiento es muy importante y por tanto seguramente deberemos pensar en aquellar arquitecturas que permiten sacar el máximo potencial de cada dispositivo.

 Seguridad


Las aplicaciones para móviles estan dejando de ser un simple entreteniemiento para convertirse en una parte importante de nuestro día a día, llegando a tener presencia en operaciones clave donde la seguridad es crucial, como emails, bancos o simples aplicaciones de compra y venta donde tenemos almacenados datos bancarios… Esto hace que en nuestra elección sea importante valorar hasta que punto sera necesaria una seguridad robusta con características como autenticación, encriptación o control de acceso.

domingo, 9 de septiembre de 2012

Plataformas Disponibles para Móviles - Windows Phone


Windows Phone es el nuevo, el último en llegar, el sucesor de Windows Mobile y el sustituto de Symbian, su nacimiento fue en Octubre de 2010 de la mano de Microsoft. El mercado lo ha aceptado con cautela, y su crecimiento ha sido lento, pero el reciente acuerdo con Nokia por el que pasará a ser el sistema operativo de sus móviles más avanzados, ha hecho que su popularidad haya aumentado considerablemente en los últimos meses, y algunos expertos ya le situán como un importante competidor a futuro para Android e iOS.

¿Pero que nos ofrece Windows Phone? Seguramente la interfaz más fácil de usar, antes denominado Metro y ahora Modern UI, se aleja en cierto modo de la propuesta de iOS y Androd. Con un buen diseño y mosaicos interactivos que sirven como widgets (pequeños programas) y como accesos directos, la interfaz Metro posee un aspecto eficaz e intuitivo, con grandes pantallas de desplazamiento horizontal. Una puesta diferente a la de sus comeptidores pero está teniendo muy buena aceptación.

Además está totalmente integrado con el paquete Office de Microsoft, lo cual puede ser algo muy a considerar en el mundo empresarial a la hora de mejorar la productividad de sus empleados
Con todo esto, los fabricantes están empezando a implantar este sistema operativo en sus dispositivos, en especial Nokia por el acuerdo que antes comentábamos. Microsoft da libertad en el diseño de los dispositivos, pero está decidido a mantener un estricto control sobre el cumplimiento de una serie de requisitos con la idea de asegurar la estabilidad y calidad y así evitar algunos de los problemas que nos podemos encontrar con Android.

Para el desarrollo sobre Windows phone contamos con toda la potencia de .Net en este campo, así podremos desarrollar usando el Visual Studio 2010, C# como lenguaje de programación y emuladores sobre Windows, seguramente la opción más sencilla de las tres.