Tutorial "Mobile and Smart Devices Development Solution"

Introducción
Hoy en día es claro para la industria de TI la relevancia que tienen los smartphones, tabletas y dispositivos inteligentes (los llamados Smart Devices) en el día a día de los consumidores y usuarios de sistemas, tanto a nivel personal como empresarial. También es visible la necesidad que las empresas y desarrolladores tienen de integrar rápidamente estas tecnologías para sacarles provecho en sus propios negocios y estar preparados para las oportunidades que se avecinan.
Hay dos características medulares a considerar en esta revolución, del mercado y los usuarios: una es lo que se puede llamar “user-centric”; la otra tiene que ver con el mercado de dispositivos, hoy altamente dinámico.

El centro en el usuario
“User-centric” quiere decir que son los usuarios quienes tienen el poder de elegir la tecnología a usar, como nunca antes en la historia de la informática. No sólo eligen el navegador –como se vio en la era Web– sino que pueden elegir directamente el dispositivo, el tamaño, su sistema operativo, las aplicaciones que tiene instaladas y la “experiencia de usuario” que esperan de dichas aplicaciones. El usuario define dónde, cómo y para qué va a utilizar los dispositivos, cambiando su relación con la tecnología, pasando de su tradicional rol de usuario a un rol de consumidor, con los nuevos niveles de exigencia que eso implica para el desarrollo de aplicaciones.
Así, las nuevas aplicaciones no sólo deben poder ejecutarse en una variedad cada vez mayor de dispositivos, sino que deben comportarse de la manera esperada en cada uno de ellos. Por ejemplo, deben soportar los modos de interacción típicos (el diálogo que el dispositivo provee y que el usuario utiliza a diario); deben poder acceder a recursos como el GPS, la cámara, el teléfono; y deben integrarse con el resto de las aplicaciones del mismo para permitir, por ejemplo, enviar un mensaje con las aplicaciones de mensajería que el dispositivo tenga instalado u otras funcionalidades y capacidades nativas, propias de cada dispositivo.
Tradicionalmente, en las corporaciones, el dispositivo inteligente siempre fue asignado por la propia empresa, no por el usuario. Actualmente hay una tendencia más marcada a la flexibilización de esta clase de delineamientos (de nombre BYOD, por Bring Your Own Device), lo que plantea mayores dificultades a las áreas técnicas y de desarrollo de las empresas. Como si eso fuera poco, si bien las empresas podrían dotar a su fuerza laboral con tal o cual dispositivo, no pueden en cambio definir qué “device” usarán sus clientes. El carecer de soluciones que puedan ser utilizadas en los dispositivos de sus clientes conspirará contra sus estrategias de marketing, ventas y operaciones en general, por lo que las aplicaciones corporativas tienen que poder correr en múltiples plataformas, algo que tradicionalmente siempre ha sido más costoso.

Alto dinamismo
Es muy claro que codificar aplicaciones nativas “a mano” para todas y cada una de las plataformas, tiene un costo enorme. Asimismo, un tema habitual pero crítico, es que nadie tiene la certeza de qué plataformas prevalecerán o cuáles podrán surgir en el mercado a futuro, lo que genera incertidumbres importantes a la hora de definir un lenguaje y una plataforma para crear un sistema.
Esto nos lleva a la siguiente característica de esta revolución, que es el dinamismo del mercado de los Smart Devices. A diario aparecen nuevos dispositivos, de fabricantes nuevos o reconocidos, utilizando los usuales o nuevos sistemas operativos y lenguajes. O sea, nos encontramos en un ambiente en constante evolución que no presenta signos de estabilidad alguna en el mediano plazo. Se gestan nuevas propuestas, nuevos jugadores, nuevos intentos de liderar el mercado, y por más que en un momento dado se pueda definir una plataforma de desarrollo, la misma –probablemente en el corto plazo– estará sujeta a grandes cambios para mantenerse en el mercado o perderá su lugar frente a la competencia.
De este modo, decidir una plataforma principal en la que desarrollar, aún para el sector corporativo, es una tarea delicada de hacer y compleja de mantener. Como se suele decir: elegir es renunciar. Por otra parte, no hay que perder de vista que el tiempo de amortización del costo de un proyecto se reduce sensiblemente si el mismo está atado a una única plataforma.
En este contexto, GeneXus -un programa que genera programas-, tiene una relevancia especial, porque responde a un paradigma de desarrollo orientado al conocimiento y la independencia tecnológica. Esta premisa se ha mantenido desde hace más de 20 años, cuando GeneXus se creó para generar aplicaciones para AS400, hasta el día de hoy, en que ha llegado también a generar aplicaciones para Smart Devices 100% nativas (Objective-C para iOS, Java especifico para Android y Java específico para Blackberry/RIM), conectadas con servicios Web (Java, .NET o Ruby), que a su vez son capaces de acceder a la capa de datos (DB2, Informix, MySQL, Oracle, SQL Server,) de una corporación. Todo de forma automática, sin necesidad de escribir una sola línea de código.

Metodología
Con GeneXus, cada aplicación, programa, o problema de desarrollo es reducido a ideas, conceptos y visiones de usuario, para construir una representación del software deseado que no está atada a ninguna tecnología específica. Esa representación -tecnológicamente independiente- es llamada “Base de Conocimiento”. Es a partir de esta Base de Conocimiento que GeneXus genera automáticamente el 100% de la aplicación (device, comunicaciones vía servicios y datos) en los lenguajes elegidos, sin que el usuario tenga la necesidad de dominar ninguno de ellos, permitiéndoles poner el foco en las tareas más creativas y en el negocio, para dejar del lado de GeneXus las tareas más tediosas, como la codificación de las soluciones, la creación de las bases de datos y el deployment.

Creando Aplicaciones con GeneXus
Veamos a GeneXus en acción:
Partir de una Base de Conocimiento de inmobiliarias que contiene un objeto “Propiedad” con los siguientes atributos: PropiedadId, PropiedadAddress, PropiedadImagen, PropiedadTelContacto, PropiedadEmailContacto

Cada atributo es de un tipo genérico (Numérico, Date, etc.) o predefinido (Phone, Image, Address, etc.) que tiene una semántica específica en el device y permite, por ejemplo, con un simple “tap” llamar por teléfono o ubicar una dirección en un mapa.

2. Aplicar un patrón sobre la TRN
Ahora lo que haremos es aplicar un patrón (Work With SD) de diseño predefinido que, dada una entidad (en este caso las Propiedades), muestre una lista de las mismas y cuando se hace “tap” sobre alguna propiedad se ven los detalles asociados a ella.

Se elige la/s plataforma/s a generar: En este caso generaremos para las tres plataformas, la capa de datos será MySQL y los servicios de datos estarán en Java.

Se ejecuta
Una vez que se va a ejecutar la aplicación se generan todos los componentes antes mencionados:
base de datos, capa de servicios y capa de presentación.

Nótese que todo esto puede ser ejecutado de modo local o automáticamente (cambiando una propiedad de configuración), y hacer el deployment a la nube de Amazon o cualquier otra que se elija. De este modo, el “time to market” de la aplicación es mucho menor, puesto que cualquier usuario en el mundo puede estar utilizándola con sólo una conexión a internet. Incluso en iOS se cuenta con algo conocido como “Knowledge Base Navigator” que permite prototipar la aplicación rápidamente, sin necesidad de contar con una MAC.

5. Ejecutar la aplicación
Android
1.- Lista de Inmuebles almacenados en la capa de datos (MySql)
2.- Interacción con la capa de datos desde el dispositivo
3.-Detalle de algún elemento, seleccionado desde la lista, con un solo “Tap”
4.- Interacción nativa con el dispositivo, Ubicación, Teléfono, E-mail, con un solo “Tap”.

Del mismo modo que generamos la aplicación para Android podemos hacerlo para IOS y BlackBerry

Blackberry
Si bien la aplicación conceptualmente es la misma, a nivel de implementación es específica para cada dispositivo. Así los mapas en iOS se ven con “el estilo propio de iOS” (con todo su “look and feel”), las fotos en BlackBerry aprovechan la resolución específica de la pantalla, etc. En definitiva, la “user experience” conserva el estilo del device: no es una aplicación genérica que le resultará extraña al usuario.

Cabe destacar que si bien se aplicó un patrón de diseño, el mismo permite configurar que no se muestre tipo lista y que las acciones estén siempre visibles, entre otras opciones. También se puede modificar el “form” de los mismos o agregar acciones, ya que la aplicación es totalmente personalizable.

Plus: Web y HTML5
Como en la Base de Conocimientos se definió la entidad “Propiedad”, además de la aplicación para SD
se puede, siguiendo la misma lógica, generar aplicaciones Web.

De este modo se tiene una solución integrada que tiene un componente Web y otro componente
para los diferentes SD. Todo en una misma solución, a partir de la misma Base de Conocimiento.

Conclusiones
Con GeneXus se puede generar, a partir de una Base de Conocimiento, aplicaciones nativas para SD o como una parte integrada a una aplicación Web con las siguientes características y ventajas:

Multiplataforma: Android, iOS (iPad, iPhone e iPod), Blackberry (RIM).
1. 100% nativas, que cumplen con la “user experience” que el usuario espera.
2. Integradas con el dispositivo (GPS, Teléfono, etc.) y las aplicaciones que se ejecutan en el mismo (Mensajería, Navegador, Push Notifications, etc).
3. Adaptadas a los procesos de negocio, porque fácilmente se integran con otras aplicaciones ya existentes e incluso permiten que se pueda generar una parte web para la misma aplicación, completamente integrada con todas las funcionalidades en SD.
4. Robustas: no son “escritas a mano”, sino por un generador de aplicaciones y en los lenguajes recomendados por los fabricantes.

Con el mejor time-to-market:
1. Con “un solo clic” se puede enviar directamente la aplicación a la nube y dejarla disponible para el mundo entero.
2. Reducción drástica en los tiempos de desarrollo (entre 10 y 20 veces más rápido que con lenguajes tradicionales).

A un costo muy inferior:
1. No es necesario tener expertos en cada una de las tecnologías asociadas.
2. El mantenimiento de la aplicación es mucho más sencillo y se impactan todos los componentes de la aplicación.
3. Se incluyen patrones de diseño que reducen los tiempos de desarrollo y módulos predefinidos como el de seguridad, que permite integrarse vía protocolos estándar (OAuth 2), propietarios (Twitter, Facebook) o directamente con los servicios de seguridad propietarios del cliente.
4. No se debe invertir en la capacitación en nuevas tecnologías.
5. La curva de aprendizaje de GeneXus es corta en comparación con otros lenguajes.

Resguardando la inversión:
Puesto que el know how de la aplicación permanece en la Base de Conocimiento, la misma puede ser generada para las plataformas que hoy son líderes del mercado o las que puedan aparecer en el futuro, pues GeneXus asume el compromiso de mantener a sus clientes y usuarios a la vanguardia tecnológica.