Llegamos a ustedes gracias a:



Reportajes y análisis

Reseña: Alpha Anywhere ases de las apps offline

Las herramientas de desarrollo rápido de app orientadas a bases de datos brillan por crear apps Web e híbridas que funcionan fuera de línea.

[03/03/2015] Una de las características definitorias de los dispositivos móviles es que no se puede contar con que estén en línea todo el tiempo; sin embargo, aun así los necesita y tiene que usarlos cuando están fuera de línea. Las apps móviles nativas frecuentemente pueden manejar las operaciones en línea y fuera de línea adecuadamente; para las apps móviles web e híbridas, las operaciones fuera de línea pueden ser un poco más difíciles. Las cosas se ponen aún más pesadas cuando la app se conecta a una base de datos remota, lo cual es frecuente en el caso de las apps de negocios. Las complicaciones se triplican si el usuario tiene que editar datos fuera de línea y sincronizarlos luego con la base de datos remota, abriendo potenciales conflictos en la actualización de datos.

Además de estar fuera de línea en momentos impredecibles, los dispositivos móviles funcionan con baterías que pueden agotarse sin mucho aviso. Los dispositivos móviles también se pueden reiniciar inesperadamente -frecuentemente en el peor momento. Si el dispositivo es un teléfono, una llamada entrante puede interrumpir la sesión de datos del usuario, causando potencialmente que la app basada en navegador refresque la página y se pierdan los datos no grabados cuando el usuario retorne de la llamada.

No muchas herramientas de desarrollo móvil se han ocupado de estos problemas de forma adecuada. Con demasiada frecuencia los proveedores de herramientas le dirán que es responsabilidad del programador solucionar todos estos problemas. Los desarrolladores móviles de negocios ya tienen muchas solicitudes de aplicaciones con poco presupuesto y con escaso tiempo; considerando eso, pienso que sería mejor para el fabricante ofrecer una solución.

Alpha Anywhere 3 de hecho soluciona todos esos problemas para las apps web e híbridas móviles. Y realiza esto en el contexto de una herramienta RAD (desarrollo rápido de aplicación), lo cual permite a los desarrolladores construir buenas aplicaciones rápidamente, con un buen rendimiento y con una apariencia nativa.

Para diseñar una UI móvil con Alpha Anywhere, normalmente se arrastran paneles, contenedores, y controles al árbol de un componente UX, y se establecen las propiedades de cada elemento. Se puede hacer una vista previa de trabajo en vivo o en cualquier momento -de manera simultánea con el diseñador si es que cuenta con suficiente espacio en la pantalla. El lado del servidor Xbasic de una web Alpha o componente móvil genera HTML5 y JavaScript para la prestación de un navegador.
Alpha Anywhere

Un poco de antecedentes

Alpha Anywhere evolucionó desde Alpha Five, el cual era una herramienta de desarrollo de aplicaciones web y de escritorio con un servidor web y de aplicaciones, un generador de reportes PDF, y un fuerte soporte para docenas de bases de datos SQL y de escritorio. Alpha Five en su momento evolucionó de Alpha Four, el cual era un clon fácil de usar de dBase. Los servidores web y de aplicaciones Alpha originalmente estaban unificados, y luego se separaron, de modo que el servidor web pudo ser reemplazado por IIS.

Alpha Anywhere agregó desarrollo web móvil y luego móvil híbrido a la bolsa de trucos del Alpha Five, pero realmente no realizó operaciones fuera de línea hasta la versión 3. Pero, fiel a su estilo, cuando finalmente adoptó la operación en línea, cubrió todo lo básico.

En versiones posteriores de Alpha Five, el componente Grilla enlazado a datos, y el componente Tabbed User Interface fueron los caballos de batalla para los desarrolladores web. Con un poco de experiencia, un desarrollador podía partir de una base de datos hacia una aplicación web inicial basada en Grilla, en minutos. A medida que la web móvil se volvió más importante, el componente Dialog, de peso liviano, comenzó a reemplazar el monolítico Grid en muchas apps web. El Dialog finalmente fue rebautizado como el componente UX en Alpha Anywhere y su funcionalidad se expandió hasta incluir los paneles de navegación y búsqueda.

Para reemplazar la vista tabular en Grid, Alpha añadió un control de Lista liviano al componente UX. El control List es la piedra central de la estrategia fuera de línea de Alpha. Internamente utiliza JSON, el cual lo hace compatible con las APIs REST y con bases de datos NoSQL así como SQL. Los datos digitados retornados desde una búsqueda en una base de datos SQL son fáciles de convertir a JSON; y el control List lo hace de manera automática por usted.

Cómo funciona la operación fuera de línea

Para diseñar una UI con Alpha Anywhere, usualmente se arrastran paneles, contenedores y controles a la vista de árbol del componente UX, y se establecen las propiedades de cada elemento en una hoja de propiedades. Esta metodología es rápida, aunque no tan intuitiva como el diseñador WYSIWYG. Sin embargo, se puede ver una vista previa del trabajo o en vivo en cualquier momento, y se puede ver de manera simultánea con el diseñador, si es que tiene suficiente espacio en pantalla. El lado del servidor Xbasic (y otros lenguajes) de un componente móvil Alpha Web genera HTML 5 y JavaScript para ser renderizado por un navegador.

Las propiedades del componente UX, y cualquier otro componente Alpha, define su comportamiento general y apariencia. Cambiar de estilo altera el CSS, y por lo tanto la apariencia, sin cambiar el comportamiento.

El control UX puede emitir automáticamente la lógica apropiada para almacenamiento local persistente en un navegador o en un dispositivo móvil. Se puede controlar los comportamientos del almacenamiento local en la sección Local Storage de la hoja pertinente.

El Working Preview permite ver cómo se verá el componente en un navegador o en un dispositivo móvil, usando ya sea Chrome o IE como navegador. Working Preview hace que sea más sencillo depurar el código que en Live Preview, el cual corre en un proceso de navegador separado con la aplicación incluida y el servidor web. El servidor está restringido a desarrollo a menos que compre una licencia de servidor, la cual lo desbloquea.

El componente UX incluye muchos controles además de List. Por ejemplo, puede elegir una fila de una lista y traer un mapa de Google a su ubicación.

La definición de la fila de unión, el display del mapa y la adición del marcador es cuestión de unos cuantos clics. Alpha genera el JavaScript y el HTML adecuado de manera automática. El UX puede incluso ofrecer reportes HTML.

Alpha Anywhere tiene un lenguaje de plantillas robusto que puede convertir datos JSON en páginas HTM formateadas. El probador de plantillas le permite refinar la plantilla de manera interactiva hasta que la salida luzca como se desea.

El componente UX y el control List implementan lo necesario para la sincronización de datos en-línea/fuera-de-línea. Hay múltiples UIs para controlar el comportamiento. El List Builder, por ejemplo, le permite gestionar la unión de datos, el comportamiento de la lista y el diseño de la misma.

Alpha Anywhere

La ilustración de de la derecha muestra lo que ocurre cuando hemos grabado un registro para edición en base de datos localmente en el dispositivo móvil simulado, pero no hemos sincronizado el cambio con la base de datos remota. Se puede notar esto por el estado del botón en la parte inferior y la bandera de isDirty en el bloque de depuración. Note que el ContactName ahora es Anita Trujillo (diminutivo de Ana), mientras que el ContactName original que se aprecia en el bloque de depuración azul es Ana Trujillo.

La siguiente ilustración muestra los tiempos y el SQL para la operación UPDATE generada para sincronizar el nuevo valor del campo local con la base de datos remota. El valor en la base de datos ya no es el mismo que el antiguo valor guardado, ocurre un conflicto, el SQL fallará y el Alpha generará mensajes de error con botones de acción de modo que el usuario pueda decidir una resolución correcta del conflicto y luego reiniciar la operación, si lo desea. Se puede probar esta función abriendo el mismo registro en dos navegadores y cambiándolo en uno antes de cambiarlo en el otro.

Alpha Anywhere

Integración de base de datos

Alpha comenzó como una herramienta compatible con dBase, y luego agregó soporte para bases de datos SQL. Una cosa condujo a la otra y actualmente soporta más de 20 bases de datos, que van desde archivos DBF hasta Oracle, y soporta funciones avanzadas de la mayoría de bases de datos, como tipos de datos espaciales y secuencias Oracle.

El soporte de base de datos de Alpha es especialmente fuerte porque le permite usar dialectos SQL nativos en cada base de datos si lo desea, o usar la instalación Portable SQL de Alpha, la cual emitirá el SQL nativo adecuado para la conexión de base de datos actual. Para hacer las cosas aún más sencilla, Alpha generará la mayoría del SQL por usted, y le ayudará a diseñar las sentencias SELECT con un constructor gráfico. Si solo desea usar tablas o vistas existentes, ni siquiera tiene que digitar nada una vez que la conexión de base de datos ha sido configurada.

La conexión de base de datos en Alpha es una abstracción útil que está hecha aún más útil para Portable SQL. No es poco frecuente que los desarrolladores de Alpha trabajen con bases de datos Access en sus propias computadoras, y luego publiquen a un servidor que ejecuta una base de datos SQL escalable como SQL Server, Postgres, MySQL u Oracle. Todo permanece igual, salvo que usted cree un valor diferente para la cadena de conexión nombrada en el perfil de publicación del servidor.

Hace algunos años, algunos desarrolladores independientes de Alpha tenían problemas usando procedimientos almacenados para la creación de datos, retorno, actualización y eliminación de componentes de Grid, los cuales están inherentemente unidos a los datos. Eso se arregló añadiendo algunos eventos de servidor que permiten al programador sobrescribir las búsquedas incorporadas SQL de Grid y ejecutar el SQL propio del programador, lo cual podría ser una llamada de procedimiento almacenada. Con esa experiencia en mente, el componente UX fue creado como intrínsecamente desligado, con formas sencillas de activar el mecanismo de unión.

Los dispositivos móviles pueden conectar y desconectarse del Wi-Fi y las áreas de servicio del carrier. Si decide esconder los datos de la base de datos a nivel local, entonces guardar los datos y la sincronización con la base de datos remota son pasos separados. Esta pantalla controla cuando ocurre la sincronización.
Alpha Anywhere

Servidores y lenguajes

Esa arquitectura intrínsecamente desligada, y el soporte de JSON, hicieron posible añadir la integración del componente UX y el control List con bases de datos NoSQL. Otro cambio permitido para soporte directo de MongoDB y CouchDB: la integración entre el lenguaje Xbasic de Alpha y Node.js, de modo que Alpha pudiera aprovechar los drivers del Node.js para MongoDB y CouchDB. Por supuesto, usted programa Node en JavaScript, de modo que puede escribir servicios JavaScript Node y usarlos en aplicaciones Alpha.

Incluso antes de eso, Xbasic estaba integrado con el framework .Net. Eso hacía fácil llamar servicios web JSON y XML, y usar código C# en aplicaciones Alpha. De hecho, un porcentaje significativo de Alpha Five Version 11 fue escrito en C#, construido sobre el código existente C++, Antlr y Xbasic.

Alpha Anywhere está experimentando dos grandes transiciones en sus servidores de aplicación. Un esfuerzo es para integrar un servidor IIS con plug-ins Alpha, y esto está actualmente en un período de beta abierto. El otro es un esfuerzo para ofrecer servidores de nube Alpha alojados, y esto está actualmente en un período de prueba beta cerrado, corriendo sobre Amazon Web Services. Los dos esfuerzos podrían finalmente ser combinados y los servidores probablemente se pongan a disposición de otras nubes, además de la de Amazon.

El servidor IIS con los plug-ins Alpha, el cual no he evaluado personalmente, se supone que es más rápido y más escalable que el servidor actual Alpha. También debería ser más fácil de certificarse para uso gubernamental, ya que el IIS en sí mismo ya ha sido vetado para seguridad FIPS.

Alpha Anywhere cuenta con un lenguaje de plantillas robusto que puede convertir los datos JSON en páginas HTML con formato. El probador de plantillas le permite refinarlas de forma interactiva hasta que queden como usted lo desee.
Alpha Anywhere

RAD y nivel de habilidad

Alpha Anywhere es un producto de desarrollo de "código bajo. Hay gente que usa Alpha sin escribir mucho código más que las ocasionales expresiones relacionales o lógicas donde sean necesarias; además ellos emplean la mayor parte de su tiempo de desarrollo usando el IDE. Por otro lado, hay programadores "reales que agregan grandes trozos de funcionalidad a lo que Alpha ya ofrece, escribiendo código en Xbasic, JavaScript, C#, HTML, o CSS.

He visto programadores junior -básicamente chicos recién egresados de universidades- convertirse en desarrolladores Alpha productivos en una semana o dos. También he visto programadores experimentados en Alpha lanzar sofisticados sitios web y apps móviles híbridas en cuestión de días. En el otro lado del espectro, he visto complicadas aplicaciones web corporativas desarrolladas por dos programadores en nueve meses, menos de la mitad del tiempo que hubiera tomado crear el mismo sitio en Java Server Pages o en ASP.Net -y nunca necesitaron ningún mantenimiento.

Sopesando los contras de Alpha

Hay algunas desventajas significativas en Alpha, aunque no detienen a ninguna compañía. Uno de los problemas es el Alpha IDE y los servidores de aplicación que actualmente solo corren en Windows. Eso no solía importar, ya que de todas formas la mayoría de gente ejecuta sus negocios en Windows, pero ahora hay buenas razones por las que muchos desarrolladores utilizan Macs; la más grande de las cuales es que necesitan usar Xcode en Mac para desarrollar apps para iPhone e iPad. Como solución se ejecuta Windows en Prallels o en una máquina virtual VMware Fusion, y el Alpha Anywhere IDE corre bien en cualquiera de esas configuraciones.

Otra desventaja es el servidor de aplicaciones propietario de Alpha. Aunque grandes aplicaciones compatibles con HIPAA -y PCI- han sido desarrolladas en Alpha, ninguna agencia gubernamental de los EE.UU. ha sido capaz de usar Alpha para sitios web porque el servidor de aplicación no ha sido certificado con FIPS. La compañía espera que su próxima integración IIS solucione el problema.

En una versión futura de Alpha Anywhere, un nuevo componente Form View permitirá la visualización móvil unificada y la edición de bases de datos con relaciones padre/hijo/nieto, junto con paneles táctiles de edición que dependan del tipo de campo.
Alpha Anywhere

Y una tercera desventaja es la carencia de Alpha de un servicio escalable de nube. De nuevo, está en desarrollo, mientras tanto, es fácil construir una granja de servidores Alpha en IBM SoftLayer, Amazon o Rackspace, y el revendedor de SoftLayer, ZebraHost, se ha vuelto experto en hacer solo eso.

La cuarta desventaja es que Alpha carece de soporte de cliente móvil nativo.Curiosamente, la gente no puede decir que las aplicaciones híbridas de Alpha no son nativas, porque los componentes móviles de Alpha Anywhere y los controles han sido trabajados para verse y sentirse como nativos.

¿El veredicto? En general, califico al Alpha Anywhere 3 muy bueno como sistema de desarrollo web, web móvil e híbrido móvil. El IDE es potente y fácil de usar, aunque tiene tantas funciones que es fácil olvidar dónde encontrar lo que se necesita. Las capacidades e integraciones son muy buenas.

Alpha tiene su propio framework cliente JavaScript, el cual incluye soporte para jQuerry, pero no para algunos de los frameworks más nuevos como Angular y Backbone. Por otro lado, el leguaje de plantilla de Alpha tiene una apariencia distintivamente similar a Angular, y no se puede confiar en la compatibilidad del framework cuando el sistema genera casi todo el código por usted. Lo que me hizo reducir la puntuación de soporte al cliente a 8 no fue nada de eso, sino la carencia de soporte de app nativa. Sin embargo, como mencioné arriba, eso frecuentemente no interesa, porque las apps Alpha Anywhere/PhoneGap usualmente lucen como nativas, aun si no lo son.