jueves, septiembre 17, 2009

GeneXus y iPhone


En el evento se mencionó timidamente la palabra iPhone en alguna charla, pero más que nada como caso particular de los "smartphones" en general.
Una aplicación iPhone es lo que está de moda, es lo que todo el mundo quiere hacer y es lo que muchos se preguntan cómo hacer.

Una aplicación iPhone puede ser de 2 tipos (ambos son aceptados en el Apple Store o en Cydia). Puede ser una aplicación nativa desarrollada en Objective-C o puede ser una aplicación web (webapp) que respete una serie de recomendaciones de Apple.

Si queremos desarrollar una aplicación nativa, necesitamos una máquina donde podamos correr el sistema operativo MacOS y utilizar el editor XCode que se instala con el iPhone SDK. Necesitamos además aprender a programar en Objective-C. La ventaja de una aplicación nativa es que tenemos acceso a todas las funcionalidades y features del teléfono, como por ejemplo la cámara, el acelerómetro, los contactos, etc.

Si queremos desarrollar una aplicación web, tenemos varias opciones.

1) Desarrollar una aplicación utilizando el Dashcode (iPhone SDK y MacOS) que nos brinda varios templates y una libreria de controles que podemos poner en la pantalla mediante drag&drop. Consumimos webservices para la comunicación con el server.

2) Desarrollar una aplicación web como lo hacemos habitualmente, utilizando html, css y javascript y ejecutar la misma en el browser del teléfono.

3) Idem al punto 2, pero luego embeber esta aplicación en una "cáscara" de aplicación nativa de iPhone utilizando el XCode en MacOS. Esto lo que hace es ejecutar un browser dentro de una aplicación nativa de tal forma que no te das cuenta que es web.

Dado este entorno, y si tuviera que hacer una aplicación iPhone, no elegiría hacer una aplicación nativa ya que no veo conveniente hacer algo que corra solo en una plataforma (además de aprender Objective-C para terminar haciendo simplemente altas, bajas y modificaciones en una base de datos).
Asi que iría por el lado de las aplicaciones web.

El punto 1 lo probé, me pareció muy piola sobre todo porque ya te resuelve todo el tema de las "animaciones" y "transiciones" tan bonitas que tiene el iPhone para pasar de una pagina a otra o para hacer efectos. Es simplemente decirle como hacer la transicion (similar a elegir un efecto en Power Point). En cuanto al código, lo bueno es que solo hay que saber javascript, por lo que podes hacer request ajax para comunicarte con el server y ejecutar procedures main HTTP o webservices de gx.

El punto 2 es el más sencillo de todos.
Ojo que no es solo hacer la pantalla más chiquita para que entre en el iPhone, es bastante más. Hay que repensar tu aplicación para que en cada pantalla puedas resolver las acciones utilizando solo 1 o 2 botones y tiene que ser altamente customizable (es decir, prendé fuego las tablas y utilizá solo divs y muchisimo css).
Me quedo con la ppt de Gastón Milano de "Los 3 fantásticos" son fundamentales para una aplicación web... html, css, javascript.
Lo ideal sería escribir a mano en procedures main HTTP el código html (evita tener que bajar el gxgral.js y el dojo.js que son muy pesados y si los usuarios que usan la aplicación son "one-time users" y no tienen cacheado estos javascripts, se aburren y cierran el browser antes de que cargue la aplicación) y no utilizar webpanels y menos transacciones, pero esa es una decisión de cada uno. (Hay que tener en cuenta que el tráfico en kbs y la cantidad de requests es crítica para que la aplicacion funcione correctamente).
Es necesario utilizar alguna libreria javascript que te permita emular las transiciones y animaciones, jQuery es suficiente, sin embargo hay librerias especializadas y pensadas para el browser del iPhone (PhoneGap, UIWebkit, etc).
(En un post futuro haremos una evaluación de PhoneGap que es muy poderosa ya que utiliza bibliotecas compiladas en Objective-C para poder acceder a features del iPhone mediante javascript... aunque el Apple Store no está aprobando las aplicaciones que utilizan este framework).

El punto 3 es el más atractivo para mi. Todo lo que hiciste para terminar tu aplicación en el punto 2, ahora lo podes poner facilmente en una cáscara de aplicación nativa y ver tu webapp "transformada" en una iPhone Application. Lo que se debe tener en cuenta es que no se puede abrir otra ventana del browser, asi que si tienen algun "target=_blank" por ahi, hay que sacarlo.

Qué otra ventaja tiene hacer tu aplicación web y no nativa... que esa misma aplicación si la pensaste bien, funciona en cualquier browser de cualquier teléfono móvil, y solo necesitas cambiar el css de la misma.

Ahora bien, mucho teórico y nada de práctica.... estas son unas screenshots de una aplicación generada con genexus y con mucho javascript para que la experiencia de navegación del usuario no sea diferente a la que tendría si fuese una aplicación nativa (cosa que no se verá en las fotos, pero espero poder hacer un video de como se ve en el telefono realmente). Esta aplicación está embebida en una aplicación nativa iPhone como mencionamos en el paso 3.

La aplicación sirve para organizar eventos, los invitados pueden confirmar su participación via email, via sms, via web... y ahora via iPhone. Se pueden subir fotos del evento y se pueden realizar comentarios.



En el siguiente post, si hay interés, les contamos cómo es la odisea de la publicación de una aplicación en el Apple Store... y sin ir mas lejos, cómo tenes que hacer para poder instalar tu aplicación en tu teléfono y los de tus amigos para poder testear el desarrollo.

También explicaremos como hacer el paso 3 que mencionabamos antes y poder transformar tu aplicación web en una aplicacion nativa iPhone en unos pocos y simples pasos.


Si te sirvió el tutorial, regalanos una cerveza!!





martes, septiembre 15, 2009

Por las calles de Montevideo...

Mientras toda la comunidad habla del Evento GeneXus... nosotros no...
Esta es la panorámica que me encontré hoy desde la ventana de la oficina!.



El único comentario que puedo hacer es "Arriba el bolso!!" :)

domingo, agosto 23, 2009

Dónde estoy???

Miren esta forma bien simple de "autolocalizarse"... funciona unicamente con Firefox (por ahora).
Copien este código en un archivo .html y abranlo con el Firefox....




<html>
<head>
<title>Donde estoy???</title>
</head>
<body>
<script type="text/javascript">
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(pos){ // OK
location.href="http://maps.google.com?q=" + pos.coords.latitude + "," + pos.coords.longitude + "(estoy aca)";
}, function(){ //
alert( "No se puede che...");
});
else
alert('el browser no puede... ');
</script>
</body>
</html>



domingo, agosto 16, 2009

iPhone 3G Jailbreak, Unlock e Internet Sharing con Ancel


Hacía mucho tiempo que no escribía en el blog.
No por falta de ideas ya que en estos meses "descubrí" muchas cosas interesantes relacionadas con la tecnología, la programación y sobre todo con celulares, que es un tema que me encanta!
Tuvo que ver el hecho del nacimiento de mi primer hijo, Lucas, que se lleva gran parte de mi tiempo libre y de mi sueño, por lo que el tiempo que me quedaba, lo ultimo que quería era pasarlo escribiendo :)

Espero que ahora que me decidí a retomar la escritura del blog, lo pueda hacer más seguido como antes.

En estos meses, me aburrí del Windows Mobile y me pasé a un iPhone 3G. Lograr comprar un iPhone 3G sin contrato y a un precio razonable es todo una experiencia... por suerte yo pude comprar el mio en eBay por U$S350 en un remate y conseguí que alguien me lo trajera de USA.

Sin tener idea de iPhones, Mac o cualquier producto de Apple, tenía por delante una tarea que al principio parecía imposible... desbloquear el celular!!
Google de por medio, aprendí que existen 2 términos "Jailbreak" y "Unlock". El primero significa levantar la restricción para poder instalar aplicaciones "no Apple" en el celular, y el segundo significa levantar la restricción del carrier (poder usarlo con Ancel o con otra compañia).

No voy a hacer un tutorial de como hacer el jailbreak y el unlock ya que están muy bien explicados acá y acá respectivamente. Simplemente quiero contar que, si bien me temblaban las piernas en cada paso, es realmente muy sencillo hacerlo (no gasten U$S40 llevandolo a un lugar "especializado" en desbloqueos).
Se utiliza el mismo software para hacer el jailbreak y el unlock y te va llevando paso a paso. Yo instalé en mi celular el OS 3.0, pero ya estaba la posibilidad de instalar el 3.0.1 (el unlocker de este último estaba en su primer release, por lo que no me animé).

Una vez que tenía el telefono desbloqueado y con linea ("74801" decía en la barra superior) me puse a jugar con él. La verdad es que está bien pensado y bien hecho. Para los que venimos de WM, la interfase e interacción con el usuario es muy superior.

No me quiero explayar en las virtudes del teléfono, sino que quiero contarles 3 cosas que no me convencían.
1) no se podía grabar video
2) no podía usar el teléfono como modem
3) no tiene navegación por voz (el gps es un a-gps).

La primera fue solucionada rapidamente... existe una alternativa al Apple Store para bajar aplicaciones gratis llamada Cydia de donde pude bajar e instalar una aplicación llamada "Cycorder" que graba y reproduce video.

La segunda fue un poco más complicada, por lo que quiero contarles el método para poder hacerlo. Utilizar el teléfono como modem (en windows se llamaba "Internet sharing" y en mac se llama "Internet tethering") es algo que me parece fundamental si tenes 3G y un plan de datos sobre todo si te vas para afuera con el notebook.

Yo vi que hay 2 alternativas. Una es bajar la aplicación "iphonemodem" desde Cydia que cuesta U$S 9.99 y hace una conexion wi-fi con el notebook permitiendo que éste use la conexión a internet del teléfono.
La otra es modificar "a mano" los datos del apn del carrier (suena complicado pero no lo es).
Esta última opción fue la que elegí... no por ratón y no pagar 10 dólares, sino porque ésta permite conectarte via bluetooth o via USB.

Pasos a seguir:
1) Bajate este archivo
2) Abri ese archivo con el WinRar
3) Descomprimi el archivo Payload\ATT_US.bundle\carrier.plist (es un xml)
4) Editalo (con el notepad para evitar caracteres raros)
5) Buscá esta sección en el archivo y modifica el apn, usuario y password segun tu plan de datos:



6) Volvé a meter ese archivo en el archivo ancel.rar y renombralo a ancel.ipcc
7) Ejecuta el siguiente comando en windows ( Inicio -> Ejecutar ):
"C:\Program Files\iTunes\iTunes.exe" /setPrefInt carrier-testing 1
8) Abrí el iTunes
9) Conectá el iPhone
10) En el iTunes, apretá "shift + boton actualizar", se te va a abrir un browser, seleccioná el archivo ancel.ipcc que modificaste y dale ok.

Una vez hecho esto, en el iPhone vas a "Ajustes -> General -> Red" y ahi vas a ver un nuevo botón "Internet compartir" .... entrás ahi, lo prendés y listo!! Tenes el iPhone funcionando como Modem para tu notebook!. ( ah.. y ya no dice "74801" sino que dice "Ancel").

EDITADO: Si esto no te funciona o el iTunes te da un error al intentar transferir el archivo ipcc (error desconocido 0xe8000050 por ej.) hay otro método quizás hasta más fácil.
Entrá desde tu iPhone a esta Url: http://help.benm.at/generator.php, ingresa los datos del apn, usuario, password y pone "ON" en "Enable Tethering" y apretá el botón "Generate!". Esto va a instalarte un archivo y listo... ya quedó pronto.




En cuanto a la tercera y el poder usar el gps con navegación por voz lo dejo para otro post!!

EDITADO: Lee este otro post donde explicamos como instalar el TomTom!!

Si te sirvió el tutorial, regalanos una cerveza!!