lunes, 17 de junio de 2013

Metro México DF 2.0, primer aplicación Offline con iOS

Hace unos días, se liberó la versión 2.0 de la aplicación del Metro de México DF para iOS, hecha con GeneXus Tilo, y que tiene como novedad que incorpora la funcionalidad de generación Offline de esta versión. Hasta donde sé(1), esta es la primera aplicación Offline en iOS con GeneXus.

La generación Offline para aplicaciones de Smart Devices es una de las características principales de la versión Tilo, de la cual estamos por liberar una beta que agrega esta funcionalidad para iOS.

Por "aplicaciones Offline" en este caso, entendemos aplicaciones que tienen una base de datos en el dispositivo (SQLite, tanto en iOS como en Android), y tienen generación de código del lado del cliente, por lo que pueden funcionar completamente desconectadas del servidor.

En la versión Evolution 2 lo más parecido, es el caché de datos, que permitía acceder a los mismos a pesar de no tener conexión, pero no permitía ejecutar código del lado del cliente ni realizar modificaciones en la base de datos.

En particular la aplicación del Metro DF usa varias características del nuevo generador.

Para empezar, tiene todos los datos embebido en el SQLite, por lo que los accesos son mucho más rápidos.

Además se hace uso del generador de Objective-C, por lo que todos los cálculos se realizan locales, no hay ninguna llamada al servidor por ejemplo para calcular las rutas entre dos estaciones dadas.

También se realizan modificaciones a la base de datos mediante procedimientos, para cálculos internos, aunque esto no es visible para el usuario final ya que no hay ningún formulario de entrada de datos.

Otra cosa para destacar es que en la aplicación se usó la sincronización automática de datos (del servidor al cliente), para la carga inicial de datos en el SQLite, que luego se agregaron a la aplicación compilada (para evitar que cada instalación tenga que sincronizar).

Como decía, en breve vamos a tener una beta liberada para que puedan probar esta funcionalidad. No es una versión completa, porque quedan cosas por hacer, pero por lo menos tenemos la certeza de que ya hay un conjunto de aplicaciones que se pueden hacer. Y para muestra, ya pueden bajar la aplicación del Metro de México DF(2)


(1) Dado que el generador no está liberado, creo estar bastante seguro de que no hay otra aplicación liberada para iOS que use base de datos Offline. Si me equivoco, me avisan :)
(2) La aplicación tiene algunos puntos a mejorar, por lo que se va a estar subiendo una nueva versión, pero igual me pareció destacable que la aplicación ya esté en producción...

jueves, 13 de junio de 2013

Literales de tipo Date y DateTime en GeneXus

Cuando programamos, ya sea en GeneXus o en cualquier otro lenguaje, es muy común usar literales en el código, para valores conocidos o especiales de la aplicación.

Por ejemplo, si voy a hacer una suma de varios registros, inicializo la variable en cero:
&suma = 0
O si estoy por ejemplo en una transacción y quiero saber si estoy en modo Insert, puedo preguntar
if &Mode = 'INS'
    ...
endif
(nota: es un ejemplo... lo recomendable en este caso es usar el dominio enumerado TrnMode)

En GeneXus hay unos cuantos tipos de datos, pero podríamos decir que los principales son cuatro: números, strings, booleanos y fechas (o fecha-hora para ser más precisos).

Para los tres primeros, es bien sabido como expresar literales, ¿pero para las fechas?

Esta funcionalidad creo que no es muy conocida, pero en GeneXus también se pueden escribir literales de fechas, utilizando el caracter # como delimitador (así como usamos las comillas simples o dobles para los strings).

Así por ejemplo, las siguientes expresiones son válidas:
&date = #2013-06-13#
&dateTime = #2013-06-13 06:23p#
Por más información, pueden ver la documentación oficial en el Wiki.

Esto en sí no parece tener demasiadas ventajas con respecto a usar las funciones YMDtoD y YMDHMStoT, pero hay un caso donde sí en necesario usarlos: cuando queremos hacer un call dinámico a un objeto SD, que recibe una fecha por parámetro. Por ejemplo:
&callObject = "sd:MiObjetoSD?#2013-06-13#"
call(&callObject)
En todo caso, es una herramienta más de la que disponemos a la hora de escribir nuestras aplicaciones en GeneXus.

martes, 11 de junio de 2013

iOS 7

En el día de ayer Apple presentó la nueva versión de iOS, que ya se puede obtener en versión beta y estará disponible más adelante este año.

La presentación se puede ver completa en el sitio de Apple, donde tambiéan anunciaron una nueva versión de OS X (con poca cosa nueva...), nuevas MacBook Air y una nueva Mac Pro. Si quieren ver el video de presentación de iOS 7 específicamente (no la presentación), también lo pueden hacer.

Si bien se esperaba que el nuevo diseño en iOS 7 fuera más "flat" que en versiones anteriores, creo que con lo que mostraron se pasaron para el otro lado...

Todavía no instalé la beta, y dudo que lo vaya a hacer. Eventualmente voy a terminar actualizando, pero el diseño de esta nueva versión me parece mucho más descuidado que en iOS 6.

Por ejemplo, la aplicación del WWDC que liberaron hace unos días para el evento de desarrolladores, tiene "tabs" en la barra de navegación que se ven así:


En contraste, por ejemplo la aplicación de Calendario en iOS 6, tiene botones similares en la "toolbar", que se ven así:


Entre estos dos diseños, ya se nota la diferencia. En la aplicación del WWDC se le saca el aspecto redondeado a los botones y a la barra misma.

Sin embargo, a pesar que podía ser esperable algo similar para iOS 7, hicieron un cambio mucho más grande.

En iOS 7, ese mismo componente de UI se ve así:


En temas de diseño, evidentemente es una cuestión de gustos... pero el estilo "flat" que eligieron me resulta bastante malo.

En fin... Ya veremos el próximo año cuando anuncien el porcentaje de adopción de iOS 7, a ver si se acerca al que tiene iOS 6 hoy en día (que es del 93% de acuerdo a la presentación de ayer).