domingo, octubre 11, 2009

Ancel encuentra

Ancel Encuentra es un servicio nuevo de Ancel para localizar a tus contactos que asi lo permitan. Es una especie de Google Latitude pero que no necesita una conexión a internet y puede ser utilizado desde la web o via mensajes de texto (sms).


La agenda de contactos no es la de tu celular, sino que es una agenda que te vas armando en la web (o via sms) con el numero de celular que queres localizar y un nickname asociado.
Una vez que agregás un número a esa agenda, se envia un sms pidiendo permiso a tu contacto para que tu lo localices. Esta localización es configurable... en la web podés activar o no la localización e incluso definir un "schedule" con dias y horarios en los cuales te pueden localizar.

Casi toda acción que realices tiene un costo asociado, salvo agregar un contacto a la agenda... después si queres modificarlo sale 1 peso, si queres encontrarlo 3 pesos , etc etc. Se puede ver la lista de precios aca: Precios Ancel Encuentra.

Es posible realizar un seguimiento de tu contacto, lo cual te envía su ubicación cada n segundos y hasta 720 veces.

Yo realicé una pruebita y anduvo bastante bien localizandome a 4 cuadras de donde yo realmente estaba (este test lo hice via web)



Luego hice el test utilzando el servicio via sms, enviando un sms "ENCUENTRA 099xxxxxx" al 36633 y el resultado me localizó tambien a 4 cuadras de donde yo estaba, pero hacia el otro lado de 21 de setiembre.... yo esperaba que me enviara la misma ubicación que en la web, ya que la hice practicamente al mismo tiempo. Este es el resultado via sms:


La verdad que me gustó el servicio, muy útil para padres nerviosos. Piratas abstenerse y buscar excusas para no participar!!.
Está muy bueno sobre todo para quienes no cuentan con un teléfono con conexión a internet o con gps y no tienen acceso a google maps o latitude.

Muy bien Ancel esta vez.

Esta es la página web para comenzar a utilizar el serivicio: Ancel Encuentra

viernes, octubre 02, 2009

Google Traductor

Hoy me topé con este sitio de Google casi sin querer y no me aguanté de hacer una pruebita!

Agarré una página de un sistema hecho con GxX que está en español y le apliqué la API para traducirlo a otro idioma automáticamente... la traducción al inglés queda muy bien, muy fiel al texto original, luego probamos con la traducción al sueco y aprovechamos la sabiduría de Martin (el "sueco") y su fluidez para hablar esa lengua nórdica y parece que la traducción no es tan buena como la del inglés...

Esta es una captura de una de las páginas del sitio traducida al árabe... si alguno se anima a decirme si está bien lo que dice, arriba!


jueves, septiembre 24, 2009

GeneXus y iPhone III


Luego de haber desarrollado la aplicación web, haber embebido la misma dentro de una WebView para transformarla en una aplicación nativa iPhone y haber testeado con éxito la misma en el simulador de iPhone que viene con el SDK, es momento de transferir esta aplicación a un teléfono de verdad, ya que el comportamiento en el mismo es diferente al que se aprecia en el simulador debido básicamente a que el hardware del teléfono no es tan potente como el que utiliza el simulador.

Estaba pensando como armar un tutorial, cuando me di cuenta que tendría que pasarme por lo menos una hora pegando screenshots y escribiendo los pasos a seguir, por lo que me pareció más beneficioso (al menos para mi) compartir el link a este sitio donde encontré el mejor y más claro tutorial de la web.


Cuando yo decidí pasar mi aplicación al teléfono, obviamente lo intenté hacer sin leer nada y a lo guapo... primero intenté con el iTunes, luego con un software que permite explorar los archivos en el iPhone (iPhone Explorer) y luego mediante SSH usando un terminal que bajás de Cydia... pero no logré nada, el teléfono no reconocia la aplicación como tal, por lo que empecé a buscar en internet como hacerlo.

Primero fui directo al sitio de Apple donde la documentación es excelente, pero como todo uruguayo desconfiado, no "acredité" cuando llegué a la parte donde decía "para poder transferir una aplicación a un teléfono, tenes que ser miembro del Programa de Desarrollo iPhone (IDP), y tenes que pagar U$S 99 para obtener un certificado para firmar el código y un provisioning profile para que el teléfono pueda ejecutar tu aplicación" ..... cric cric....

"Pero... entonces para poder testear mi aplicación en mi teléfono, tengo que pagar U$S 99 ???"
Yes sir... hay que pagar.

Esto, para alguien que realmente piensa desarrollar aplicaciones para iPhone, no suena tan caro... pero desalienta a quien quiere testear su primer y probablemente única aplicación !!

Después de leer y releer la documentación e intentar inscribirme al IDP sin pagar y no lograr avances, desistí de hacerlo por la derecha y pasé a leer la "otra" documentación... la que no va tan por la derecha (cosa que no apoyamos para nada!!! es más ... la repudiamos!!) y que en general te saca del apuro, al menos para el uso personal... yo solo quería ver mi aplicación en el teléfono!! no pensaba comercializarla ni subirla al Apple Store ( claro... si pagás los U$S99 obviamente el paso siguiente es postearla al Apple Store y esperar la aprobación ).

La cosa es que encontré algo de información respecto al tema... muchos workarounds para probar, pero ninguno que realmente funcionara. Hay un método que explica como crear un certificado y hacerle pensar al teléfono que tiene un provisioning profile y lograr que ejecute código no firmado, pero parece que dejó de funcionar luego de la version 2.1 del S.O. del iPhone. (lo digo con propiedad ya que tuve que reinstalar el SDK luego de tocar muchos archivos al parecer importantes para el funcionamiento del mismo :P ).
Si alguien lo quiere probar, este es el link How to deploy an iPhone application without an IDP membership

O sea... en resumen, (increiblemente) no aconsejo perder tiempo intentando hackear el proceso oficial. Si querés transferir la aplicación al teléfono, lo mejor es tomarse el tiempo y tener la paciencia de llenar formularios y seguir el tutorial del link que les pasé más arriba.
Una vez que hacés esto y tenés bien configurado todo, el camino de ahi en más es bastante más sencillo, incluso para la publicación en el Apple Store.

Existe una alternativa al Apple Store llamada Cydia que vendría a ser un repositorio de aplicaciones de código no firmado. Aun no lei mucho de como realizar un deploy en Cydia, simplemente vi muy por arriba que también es un proceso complicado ya que hay que armar un paquete de determinada forma... espero poder hacer un post con este otro proceso cuando tenga un tiempo para investigar.


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





sábado, septiembre 19, 2009

GeneXus y iPhone II

En este post les cuento como transformar tu aplicación web para iPhone en una aplicación nativa Objective-C.
La ventaja es que no parece una aplicación web y no muestra las barras de dirección y la barra de navegación del browser, permitiendo aprovechar al máximo la pantalla.
Las desventajas (al menos las que me encontré yo en mi primer aplicación) son que no podes abrir nuevas ventanas (tipo target=_blank) y que no podés guardar cookies como lo harías en el browser común.

La primer desventaja es facil de sobrellevar ya que no hay necesidad de navegar hacia otra ventana, es más, se me ocurre que lo mas prolijo y el mejor método para que parezca una aplicación no-web es diseñar la pantalla utilizando un "gran" div que sirva de contenedor e ir modificando sus elementos via ajax, asi nunca "cambiamos" ni siquiera de pagina.
Yo haría una pagina, llamemosle aindex.aspx (es un procedure GX main http). Esta pagina tiene dentro un div "contenedor" con 2 divs hijos "header" y "body". El div header se reescribe por javascript, si es necesario, cada vez que se cargan nuevos contenidos en el div body y al div body se le va cambiando el contenido via ajax usando jquery (para aprovechar los efectos de transicion), de esta forma siempre estariamos parados en index.aspx. Pero esto es solo una idea.

La segunda desventaja se puede solucionar utilizando el motor de base de datos que tiene incorporado el iPhone y crear una tabla donde almacenar las cookies, sesiones o cualquier otro dato que se necesite.

Bien, tenemos nuestra aplicación web (ver post GeneXus y iPhone) y queremos transformarla en una aplicación nativa iPhone. Voy a tratar de hacerlo en forma de wizard asi queda mas ordenado:

1) Conseguite una Mac o una maquina Intel, instalate el MacOS Leopard 10.5.X o instalate alguna distro de MacOSX86 para pc e instalá el SDK del iPhone.

2) Abrí el XCode y seleccioná crear una aplicación "view-based", ponele un nombre que tenga que ver con tu aplicación web, para este ejemplo le pongo "Eventos".




3) Localizá el archivo EventosViewController.h, abrilo en el editor y modifcalo para dejarlo asi:

#import <>
@interface EventosViewController:UIViewController {
IBOutlet UIWebView *webView;

}
@property (nonatomic, retain) UIWebView *webView;
@end




4) Localizá el archivo EventosViewController.xib y abrilo haciendo doble click, te debería abrir un editor llamado Interfase Builder que sirve para diseñar las pantallas. Arrastrá desde la librería de controles el control llamado UIWebView.
Luego tenés que hacer un link entre el objeto File's Owner y la UIWebView que agregaste... esto lo haces cliqueando con el botón derecho en File's Owner y arrastrando hasta la UIWebView y seleccionando "view" en las opciones que te presenta. Ya podés salvar y cerrar el Interfase Builder.






5) Localizá el archivo EventosViewController.m, abrilo y modificalo para dejarlo asi (cambiando la url para apuntar a tu aplicacion) ... aca se ve feo, pero en el editor no es tan entreverado:

#import "EventosViewController.h"
@implementation EventosViewController
@synthesize webView;
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
}
return self;
}
-(void)viewDidLoad {
NSString *urlAddress = @"http://www.miservidor.com/eventos/aindex.aspx";
//Create a URL object. NSURL *url = [NSURL URLWithString:urlAddress];
//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[webView loadRequest:requestObj];
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
-(void)dealloc {
[webView release];
[super dealloc];
}
@end



6) Cliqueá el boton Build & Go del XCode y listo!! Ya tenes una aplicación iPhone nativa!
Luego podes modificar el archivo Eventos-info.plist (es el archivo de configuración de la aplicación) para agregarle datos, como por ejemplo, el nombre, el ícono (debe ser un png de 57x57 pixels), etc etc.

Resumiendo, poniendo un poco de pienso en alguna funcionalidad de la aplicación que utilice cookies u otra funcionalidad que no se comporte como debe (que a mi no me sucedió) y escribiendo solo unas pocas lineas de código, tenemos una aplicación iPhone ... lo bueno, además, es que esta aplicación "cambia" segun cambiemos el código en nuestro server ya que esta hosteada allí.
Se podría también importar todos los fuentes de la aplicación web al proyecto en XCode y apuntar la UIWebView a un archivo local a la aplicación ... pero esto depende de la naturaleza de la aplicación... si se nutre de la web no tiene sentido ya que de todos modos consumiría datos el server... no se.. es otro approach válido.

Una vez que lograste compilar y ejecutar esto en el simulador del iPhone en el SDK, seguramente te sientas entusiasmado y quieras transferir la aplicación a tu celular para probarla y para mostrarle a tus amigos!!!
Bueno... no te emociones mucho, porque eso que parece una tontería no es para nada sencillo (@Enrique: ojalá fuera solo transferirla con iTunes al teléfono).

Pero esto.... esto es lo que guardamos para el siguiente post!!!
( y si che... tanto tiempo sin escribir nada que tengo que ir largando de a poco las cosas!!)

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