Universitat Oberta de Catalunya

Tecnologías para desarrollo de Aplicaciones Rich Media

Antecedentes

Las Aplicaciones Rich Media ocupan desde hace bastantes años un lugar privilegiado en el mundo del software. Apoyadas por los avances tecnológicos (hardware, conectividad, etc.) y por la certeza de que el contenido manda para los usuarios, era una consecuencia lógica que dichos contenidos se enriquecieran al máximo en busca de aportar al usuario un mayor valor.

Una de las herramientas que facilitan en mayor medida esta capacidad de combinar tantos formatos y tipologías de contenidos sin duda es Adobe Flash. A parte de la propia naturaleza multimedia de Flash, su cualidad multiplataforma la hace aun más valiosa (sobre todo para desarrolladores independientes o pequeños equipos de trabajo)… y es que no siempre hemos tenido en nuestras manos un software que nos permite atacar con garantías:

  • La web
  • El escritorio (Win y Mac)
  • Tablets (iOS, Android y BlackBerry)
  • Smartphones (iOS, Android y BB10 )
  • SmartTV (aunque en mucha menor medida)

Flash no atraviesa su época dorada: en el navegador de los dispositivos, las smartTV parecen haberse decantado claramente por HTML5 y lo más importante, la propia Adobe pone en entredicho su futuro al eliminar gran cantidad e importantes funcionalidades en su última versión (Adobe Flash CC). Malos tiempos para una tecnología que quienes la hemos exprimido al máximo no podemos más que admirarla y reconocer en ella una gran solución para muchas situaciones profesionales que de otra manera, y desde hace muchos años, eran difícilmente abordables.

Aplicaciones Rich Media, hoy

Como he tratado de exponer en la introducción de este artículo, a día de hoy tenemos dos realidades que no deberíamos dejar de lado:

  1. Flash es hoy la mejor alternativa crossplatform para hacer aplicaciones rich media. Quizás sería mejor atacar diferentes plataformas en tecnologías nativas, pero salvo en situaciones realmente excepcionales, esto nunca es una opción tanto por capacidad técnica del equipo de desarrollo como por presupuesto.
  2. Teniendo en cuenta la perspectiva futura de Flash, deberíamos comenzar a analizar qué alternativas tenemos a nuestro alcance .

En cuanto nos pongamos manos a la obra, nos daremos cuenta que hoy en día no existe ninguna herramienta que permita hacer, con un mismo lenguaje y con unas prestaciones multimedia como las que Flash nos proporciona, aplicaciones tan variadas para plataformas tan diferentes.

La mayor brecha ha tenido lugar en la web, donde los dispositivos (incluida la TV) la han dejado fuera, en favor de HTML5, cosa que era bastante lógica. Pero Aplicaciones Rich Media no solamente se encuentran en la web (RIAs) sino que van mucho más allá. Como consultor de ARM en la UOC, tengo bastantante claro que para impartir una asignatura que nos permita cubrir un espectro tan amplio, actualmente Flash es la única alternativa realista. Y lo creo tan firmemente, que en el estudio que dirijo lo aplicamos en la práctica.

Somos un estudio pequeño, necesitamos herramientas versátiles que nos permitan la máxima flexibilidad, y cuando nos solicitan, por ejemplo, una aplicación multimedia para escritorio compatible con Win y Mac, Flash + Adobe AIR + AS3 es la combinación elegida, y sólo se queda fuera en casos muy concretos donde algunas funcionalidades nativas puedan justificar otro enfoque.

No obstante, la cuestión es que aunque hoy en día nos encontremos en esta situación no debe significar que miremos hacia otro lado para no ver lo que está sucediendo en estos días con Adobe Flash y que muy probablemente tenga repercusiones para Adobe AIR.

Aplicaciones Rich Media, mañana

Este sí que es un tema difícil de pronosticar… porque hoy en día no existe una alternativa real a Flash + AIR que pueda dar el mismo rendimiento en tal variedad de plataformas destinatarias. Y es cierto que resulta muy difícil aventurarse a elegir una opción alternativa.

Web y dispositivos

Para web y dispositivos, podemos afirmar que HTML5 + CSS + JavaScript es la combinación que más posibilidades tiene para asentarse y evolucionar en el tiempo. Los fabricantes parece que en general la han aceptado con muy buenos ojos… pero como todo lo que tiene que ver con diferentes fabricantes, implica una importante fragmentación.

Esa misma realidad nos pone en nuestro sitio al poder comprobar que de momento no nos permite lograr los mismos resultados que obteníamos al trabajar con Flash, AIR y AS3. Para lograr acercarse necesita gran cantidad de “extras” que hay que combinar, como por ejemplo: Phonegap como puente a lo nativo en dispositivos (hay otras opciones, pero esta es la más plataformas soporta), Adobe Edge Animate para animaciones, jQuery como framework base para interacción con el DOM (sobre todo si se quiere dar soporte a navegadores antiguos), posiblemente un framework si se busca una solución robusta y genérica para abordar el tema de responsive (bootstrap, foundation, ink, Grid960, Less Framework por citar 5 de las decenas existentes), quizás otras librerías (por no repetir la palabra framework de nuevo) si el desarrollo se enfoca principalmente para móviles (como jQuery Mobile aunque hay decenas y algunos especialmente destacables, como Sencha Touch, PhoneJS, Mobile Boilerplate, Zepto, Lungo, xui y otro larguísimo etcétera de opciones)

Tomemos como ejemplo destacado Phonegap, que es una solución que lleva varios años como referente en la creación de apps basadas en HTML5, CSS y JS con capacidades nativas. En nuestra empresa ya estamos trabajando con ella y contamos con referencias de freelances y otros estudios que ha hecho proyectos medios / complejos con esta solución. Las conclusiones comunes para todos es que el rendimiento no está aún a la altura del obtenido con Adobe AIR, y tampoco la facilidad / herramientas de desarrollo.

Y aunque permite abarcar más plataformas, una realidad reincidente en este tipo de proyectos, es que el cliente suele querer enfocar sus aplicaciones en iOS y Android. Como referencia, es necesario comentar que hace bien poco ha visto la luz la versión 3.0 que tiene importantes e interesantes cambios: http://www.raymondcamden.com/index.cfm/2013/7/19/PhoneGap-30-Released–Things-You-Should-Know

Además y como colofón, hay que tener en cuenta que cuando hablamos de ARM no hablamos solamente de aplicaciones para dispositivos, que tan sólo es una parte.

Web: no se vayan todavía, aún hay más

Y es que si hablamos de aplicaciones web no se pueden obviar frameworks como AngularJS o Ember, sistemas de templanting como Moustache o Handlebars o herramientas como LESS o SASS para trabajar con el CSS.

Y todo eso sin insistir con opciones como TypeScript para desarrollos mayores en los que esta propuesta alternativa puede ser muy útil.

Desktop Apps

Si hasta este punto ya se puede atisbar la complejidad innata al trabajo en tecnologías web contra diferentes navegadores y plataformas, hay que sumar la habitual necesidad (cuando hablamos de apps) de suplir las limitaciones que hoy en día impone la ejecución en dichos navegadores, ya no digamos en la web y en dispositivos sino al hablar de “aplicaciones de escritorio”.

Usar el navegador y un lenguaje de marcado como base de nuestra aplicación para escritorio tiene bastantes inconvenientes, sobre todo según qué tipo de aplicaciones queramos crear. Aún así, existen soluciones basadas en Chromium Embedded Framework o en Node (por ejemplo), algunas con mejor reputación que otras como es el caso de TideSDK (http://www.tidesdk.org). Un artículo interesante para conocer algunas opciones que siguen este camino dentro del panorama actual es http://clintberry.com/2013/html5-apps-desktop-2013/

Uno de los problemas importantes que existen en estas alternativas es que son soluciones relativamente “jóvenes”, surgidas de la necesidad de una solución crossplatform y sobre las que siempre se cierne la sombra de las barreras difícilmente salvables que puedan aparecer como consecuencia de las decisiones de los creadores de sistemas operativos y/o navegadores.

Una opción que quizás pueda resultar más “estable” en este aspecto es emplear las Chrome Packaged Apps, aunque como contrapartida, su medio de instalación dista mucho de lo deseable en una app nativa al estar ligada a un navegador concreto: http://developer.chrome.com/apps/about_apps.html

TV, algo a lo que mirar

El futuro de la smartTV y las increíbles posibilidades que tiene como plataforma para aplicaciones aún está por establecerse, pero no deberíamos dudar que es un dispositivo a tener muy en cuenta. La televisión quiere recuperar el trono que se ha tambaleado con Internet, y para volver a ser el centro de atención tiene que mejorar en interactividad, posibilidades y servicios. Aunque parece que las aplicaciones en la televisión no acaban de despegar, la estrategia de los fabricantes de simplificar el entorno puede dar buenos resultados. En este ámbito Samsung está algo desmarcada, ya que en gamas altas tiene soporte tanto para AIR como para HTML5 (http://developer.samsung.com/devices/tv-specs), pero en general se puede hablar que todos los fabricantes tienden a una solución basada en HTML5 + CSS3 + JavaScript, aunque lamentablemente y como suele ser habitual, cada uno con sus “propias características”.

Existe una iniciativa promovida principalmente por LG, Toshiba y TPV (Philips) con un SDK conjunto que emplea HTML5 + CSS3 + JavaScript, y que podría ser un principio de estandarización http://www.smarttv-alliance.org/About/OurMembers.aspx no obstante no existe aun ningún framework y/o herramienta que permita atacar los diferentes fabricantes y como cada uno se desmarca en algunos aspectos, es complicado afrontar la creación de aplicaciones de manera “común”. La solución puede ser centrarse en un fabricante (tal vez Samsung fuese la elección) y su SDK, aunque con la Smart TV Alliance las opciones mejoran.

En este campo es justo decir que, salvo en modelos puntuales, Adobe AIR nunca logró hacerse un hueco estable y fuerte.

Rizando el rizo, juegos e interacción avanzada

Una consecuencia negativa del uso de HTML5, CSS y JavaScript como combinación de desarrollo para un espectro tan variado como posibilitan las ARM, es que prácticamente para cada tipología de aplicación que se quiera crear se requerirá del uso de librerías existentes o creadas a medida.

La realidad es que no es viable en términos productivos hacer juegos con canvas prograando todo lo que implica un juego desde cero, sino que como es lógico se usan librerías existentes como pueden ser CreateJS (muy cercana a Flash, creado por Grant Skinner, un referente en flash), Box2D (motor de físicas), PixiJS (framework para 2D en webGL con fallback a canvas, que está bastante en auge http://www.goodboydigital.com/pixi-js-has-landed/)… pero mirando en cosas aun más simples, incluso para interacciones como gestos, etc. si se quiere más o menos un soporte decente entre navegadores se necesitan cosas como podría ser Hammer.js

Y aunque esto pueda no parecer relevante, podría tener connotaciones si se deseara usar TypeScript como una forma de JavaScript avanzado, ya que para poder trabajar con TypeScript se necesitan las definiciones de las librerías… (afortunadamente hoy en día  están soportadas las más conocidas, aunque no todas: https://github.com/borisyankov/DefinitelyTyped)

Conclusiones

Aunque parece que el futuro cercano de las Aplicaciones Rich Media (multidispositivo) estará ligado a HTML5 + CSS3 + JavaScript, lo cierto es que, por un lado todavía no existen herramientas de desarrollo al nivel que aporta la plataforma Flash y, por otro lado, para el escritorio todavía no existe una alternativa como Adobe AIR que permita la reutilización de código en múltiples dispositivos y sistemas operativos con capacidades similares.

Tal vez la propia Adobe continúe la evolución de su producto Flash Professional hacia HTML5 (cosa que ya ha comenzado), y tal vez aparezcan herramientas y entornos de desarrollo con la calidad y la capacidad con las que contaban FDT, Flash Builder, Flash Develop, etc. Tal vez JavaScript logre abrirse un hueco en el escritorio, liberándose del yugo del navegador…. Pero lo cierto es que, con sus limitaciones, ahora mismo tan solo Flash + AIR permiten al desarrollador crear aplicaciones Rich Media de forma sencilla para múltiples dispositivos bajo unas mismas herramientas y lenguaje.

Y para el futuro más lejano… ya veremos 😉