abril 15, 2010

Integracion a Google AppEngine


Recuerde que..
Este blog esta desarrollado en idioma español pero utilizando Google Traductor puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a Integracion Google.

Y bueno amigos, a lo que finalmente queríamos llegar.. y que fue motivo de una consulta en el foro de Quizzpot que ha tenido muchas visitas pero pocas ayudas técnicas: la integración de nuestras aplicaciones a Google App Engine, utilizando ExtJs o cualquier otro framework,..

Los que han revisado este Blog desde el principio han de recordar que les propuse la vista de un vídeo de Google sobre App Engine en la que se nos presenta las atractivas ventajas de utilizar Google App Engine para nuestros desarrollos web:


En su parte inicial, este vídeo nos explica claramente la importancia y ventajas de utilizar Google App Engine en nuestros proyectos.. pero siguiendo el desarrollo del video, vemos después que el ejemplo que nos presentan no nos resultó suficiente para entusiasmarnos (no se plantea claramente los resultados buscados con el ejercicio que desarrollan y se pierde algo de la visión de las ventajas innegables de AppEngine); por lo que aprovechando en efectuar nuestras propias pruebas, les presentamos en esta entrada algunos tips para poder iniciarnos en Google App Engine, y que por supuesto, que incluya todo lo que hemos avanzado en nuestro proceso de Integración a Google utilizando el framework ExtJs mostrados en las entradas anteriores.

Nota agregada:
Conviene también que después revisen con mayor detenimiento nuestro enlace a "Google Codelabs" (último botón derecho del menú superior de esta página), allí se detalla con mayor detalle el ejemplo que presentan en el vídeo y lo profundizan más mostrándonos la utilización de algunas de las principales librerías de Phyton (incluida su almacenamiento de datos); asimismo, también pueden probar AppEngine sobre Java, para los que desarrollen en dicha plataforma)

A este respecto resulta conveniente revisar la siguiente documentación:


Instalando Google App Engine

Instalar Google App Engine nos permite instalar una infraestructura de pruebas similar a instalar nuestro servidor HTPP local, pero sin utilizar la combinación Apache+PHP+ MySQL que hemos venido utilizando con Appserv, y que por supuesto representa una nueva alternativa a considerar así como tambien tenemos la combinación Apache Tomcat (servidor de aplicaciones)+Java+MySQL -puede ser con cualquier otra base de datos como MS-SQL Server, PostGreSQL, Oracle, Access, etc.- Todas estas combinaciones entre otras, nos permiten crear, probar, publicar y mantener nuestros proyectos Web.


En este caso, vamos a utilizar el Kit de Desarrollo de software (SDK) de Google App Engine para Python: GoogleAppEngine_1.5.2.msi para plataforma Windows (de 16.5Mb, vigente al 20/Julio/2011; pero también puede utilizar la versiones correspondiente para equipos con Mac o Linux instalado), la que podemos descargar de la siguiente dirección:


Antes de iniciar la instalacion del SDK de Google AppEngine, debemos asegurarnos que tengamos Phyton 2.5.x instalado en nuestro ordenador, para lo cual el mismo instalador nos indicara de donde bajar primero e instalar dicha version de Phyton (version 2.5.5.7 de 24Mb, vigente al 01/03/2011). Finalmente toda version completa de AppEngine ocupara unos 150Mb, incluido los instaladores del SDK y Phyton...

La ventaja del Kit SDK para Python es que simultáneamente instala un "launcher" (lanzador de aplicaciones de GoogleAppEngine), el cual nos facilita las pruebas de nuestros desarrollos:



Audiencia

Se recomienda que, para entender este codelab, tengamos suficientes conocimientos de ExtJs y herramientas básicas desarrollo Web (HTML, CSS, Javascript; o en su defecto, haber seguido el curso de ExtJs que nos ofrece Crysfel Villa de México en su pagina del Quizzpot.

Asimismo se recomienda haber leído y probado nuestras entradas: Integracion a Google (1ra parte) e Integración a Google (2da parte), especialmente para comprender las herramientas utilizadas para integrar de las API de Google a ExtJs (y viceversa), que se emplean en este tutorial.


Appengine.rar, Descargar el material de apoyo desde Google Docs, que es donde tenemos cargado el archivo appengine.rar (elegir pestaña "File"), y en la raíz de nuestro disco de trabajo o donde estimemos conveniente se creara la carpeta "appengine", dentro de la cual tendremos las siguientes carpetas:



carpeta prueba, contiene un ejemplo sencillo que nos muestra una visualizacion de una Hoja de Calculo de Google Docs (un grafico líneal en este caso), y que su codigo lo hemos tomado del Code Playground de Google, pero bajo App Engine.



carpeta prueba01, que nos muestra un ejemplo de visualizacion de nuestra "tabla de productos" de Google Docs utilizada en nuestra entrada Integración a Google (2da.parte), y a los que he agregado un manejo básico de eventos que nos proporciona el API de Visualizaciones Google entre la Tabla y el PieChart mostrados, que son interesantes para poderlas revisar con mas detalle.




Nota agregada: Después de algunas pruebas realizadas por miembros de nuestro grupo, parece que para que funcionen estos ejercicios debe previamente haber accedido a cualquier servicio con nuestra cuenta personal de Google:. La tabla Spreadsheet Productos que utilizamos en este ejercicio está compartida en Google Docs para que "todos la vean sin acceder", pero parece que para Google, "sin acceder" significa que la tabla no aparezca en nuestra lista personal de documentos de Google Docs, pero que necesariamente se tiene que haber ingresado primero con nuestra cuenta a algún servicio de Google como GMail por ejemplo, o con la opción "acceder" de la barra del menú de www.google.com), sino el ejercicio propuesto posiblemente no trabaja bien y arroje un mensaje de error de acceso al Query. 


Estos ejercicios deben funcionar aún cuando con nuestra cuenta Google nunca hayamos utilizado Google Docs, por cuanto, las cuentas de Google, no son solo nuestra puerta de ingreso a GMail sino a una larga lista de servicios de Google que nos debe resultar interesante considerar para nuestro uso cotidiano: Google Calendar, Blogger, Picassa, Google Sites, CheckOut (tipo pay-pal), Google Maps, Google Talk, y por supuesto Google App Engine, entre otros)


carpeta intGoogle1, que nos muestra lo mismo que nuestro post Integración a Google (1ra.parte), pero corriendo sobre AppEngine (nuestro archivo 01.GVisualizaton-sample.html se encuentra "insertado" dentro de IntGoogle1.py (de Phyton), y el resto de archivos js y de Extjs se encuentran grabados en la carpeta "static"  de IntGoogle1.



carpeta intGoogle2, que nos muestra lo mismo que nuestro post Integración a Google (2da.parte), pero corriendo sobre AppEngine (nuestro archivo 02.GVisualizaton-sample.html se encuentra "insertado" dentro de IntGoogle2.py (de Phyton), y el resto de archivos js y de Extjs se encuentran grabados en la carpeta "static" de IntGoogle2.




NOTA IMPORTANTE :

Resulta que el sistema de autorización "AuthSub for JavaScript" de Google ya no se encuentra disponible (pueden revisar el siguiente enlace), por lo que nuestro botón "Login" de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora "OAuth 2.0 for client-side applications", vale decir, tendremos que utilizar Google API Javascript Client para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.

Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:

function activando(auth) {
  var c = Ext.getCmp('center');
  //google.accounts.user.login('http://www.google.com/m8/feeds/');
  auth = true;
  c.enable();
  c.update('');
  if (auth) {
    vistree.enable();
  };
};

within of: MenuGVisualization_01.js / MenuGVisualization_02.js where appropriate!


TRABAJANDO CON OAUTH 2.0 :

por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo OAuth20, pero presentamos lo demos de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted puede probar en su servidor local de pruebas utilizando el SDK de Python (una vez adecuado el código a OAuth2.0 como indicamos en nuestros codelab Int-Google 1ra y 2da parte.. ó realizando el cambio indicado para "puentear" el proceso de autenticación)

 ..now you can test our IntGoogle01-Oauth demo  (New!) .
the demo may prompt popup window (you must enable it)

 ..now you can test our IntGoogle02-Oauth demo  (New!) .
the demo may prompt popup window (you must enable it)


Pasos para ejecutar el codelab

Para ejecutar los ejemplos mostrados solo basta ejecutar el launcher de Google App Engine (hay un icono en el desktop luego de instalación), y seleccionar la opción "File/Add Existing Aplication.." del menú, dicha opción nos muestra una ventana en la cual el boton "Browse" nos permite seleccionar la carpeta appengine que contiene nuestro proyecto (prueba, prueba01, IntGoogle1 y IntGoogle2 en este caso), elijamos cada una de nuestras carpetas y seleccionar el botón "Add", se cargaran nuestras aplicaciones al "launcher"; luego seleccionemos nuestro proyecto y elijamos el botón "Run", que direccionará nuestra aplicación a un puerto específico, y activará al botón "Browse", el cual al ser seleccionado ejecutará nuestro navegador web predeterminado, y ejecutará nuestra aplicación (este proceso es sencillísimo y no creo que tengan inconvenientes para hacerlos).



APUNTES TECNICOS:

Al revisar con más detalle los archivos de cada carpeta notarán lo siguiente:
  • nuestras imágenes, iconos y otros archivos "externos" utilizados en cada ejercicio, están grabadas en la carpeta static (hay que revisar un poco de la documentación al respecto, pero vale indicar que la razon principal de este procedimiento es que a diferencia de nuestras aplicaciones probadas en un servidor Apache, con Google AppEngine no todos los archivos de nuestra carpeta del proyecto se cargan en la web, y de nuestra estructura de directorios, solo algunas carpetas se ejecutan exclusivamente por el lado del servidor.
  • por el motivo indicado, grabamos también los archivos de ExtJs en la carpeta "static", y que en este caso corresponden a la version ext-3.1.0; realmente tuvimos algunos problemas al utilizar versiones a partir de etx-3.2.x, e inclusive con la versión vigente de ExtJs-3.3.1 a la fecha (no cargaba la "datatable" requeridas para las visualizaciones Google desde los "stores") ..pero este "bug" producto a una revisión de una de las clases de ExtJs ya ha sido corregido, por lo que pueden revisar el post respectivo a Integracion Google 1ra y 2da que corresponden a estos mismos ejercicios que estamos probando sobre AppEngine, pero funcionando sobre un servidor Apache estándar, en dicho caso, ambos ejercicios IntGoogle1 e IntGoogle2, ya han sido modificados a la versión extjs-3.1.1. vigente al 01/03/2011, así que esperamos que como haciendo sus pruebas personales deberían poder actualizar estos ejercicios para utilizar una versión actualizada de Extjs (la disponible en estos momentos), y verificar su funcionamiento.
  • al cargar nuestras aplicaciones con el boton "Run", a la vez que se activa el botón "Browse" (que lanzará automáticamente nuestro browser preferido y nos permitirá observar los resultados de nuestra aplicación). Vale también revisar los botones "Logs" y "SDK Console", el primero nos indica si todo esta correcto (y nos indica incluso los errores de compilación phyton de haberlos);  el SDK Console nos servirá luego, especialmente cuando utilizemos la biblioteca de almacenamiento de datos de Google AppEngine y otras librerías incorporadas de la biblioteca estandard de Phyton.
  • Para lanzar a la web nuestra aplicación, solo basta utilizar el botón "Deploy", y si no tenemos un dominio propio, Google nos proporcionará un dominio provisional, pero nuestra aplicación bien podría ahí mismo subirse a la web (solo se necesita haber registrado nuestra cuenta Google en App Engine, para lo que se necesita registrar nuestro código de confirmación recepcionado via sms utilizando un telefono celular de la empresa Claro, para el caso de Perú (para otros países debemos consultar la lista de compañías de comunicaciones correspondiente); pero actuemos con mesura, pues Google nos permite hasta 10 subidas "gratuitas", y tal vez no nos convenga desaprovecharlas por el momento.
  • Al igual como hemos cargado la versión 3.1.1 "liviana" de ExtJs, podríamos hacer lo mismo si se desea utilizar cualquier cualquier otro framework JavaScript, pero téngase presente que Google tiene ya disponibles versiones de frameworks como JQuery, Prototype, Dojo, entre otros. Aunque también debemos resaltar que ahora tambien resulta importante practicar y utilizar Javascript puro.. opción que debemos tener en cuenta, ahora que poco a poco se va a imponer el manejo de este lenguaje por el lado del servidor, debido a la versatibilidad y perfomance mostradas de Node.js y el motor de desarrollo V8, los que inclusive han sido utilizados en el desarrollo del navegador Google Chrome.
  • Cabe resaltar asimismo que para efectuar el "Deploy" con el launcher AppEngine, de ser el caso, nuestro Logs nos indicará que debemos tener instalado y operativo "openssl",  correspondiente a las herramientas que permiten a nuestros proyectos AppEngine  implementar SSL (Secure Socket Layer), TLS (Transport  Layer Security) así como otros protocolos relacionados con la seguridad. Para ello puede seguir los pasos indicados aqui, o a mejor parecer, nos conviene instalar completamente GnuWin32, que además de darnos acceso a comandos Linux, y entre otros paquetes, nos implementa openssl 0.9.8r vigente a la fecha (esto sobre windows; en otras plataformas como Linux o Mac debe verificarse si openssl ya se encuentra instalado, caso contrario debe implementarse el paquete openssl correspondiente).
  • Para nuestras pruebas personales debemos indicar también que, el nombre de nuestras aplicaciones que pongamos en el archivo app.yaml debe seguir el estandar "camel casing", por lo que dicho nombre debe empezar en minusculas...
  • y bueno, estas son opciones de Google AppEngine que corresponden únicamente al manejo del framework webapp proporcionado por la biblioteca estandard de Phyton, pero debemos tener en cuenta que uno de los recursos mas interesantes de Google AppEngine es su almacenamiento de datos (y que corresponden al concepto Big Table descrito en el video indicado al comienzo del post), punto muy importante que nos encontramos desarrollando con bastante interés..

Porque GAE-Python ?

la plataforma GAE permite en estos momentos el uso de hasta 03 lenguajes por el lado del servidor: Python, Java y Go; y tal vez pueda ser bastante difícil invocar a los desarrolladores a optar por un lenguaje en particular, pero lo cierto es que Python es el lenguaje con que se inició la plataforma GAE y tal vez la que mantiene aún "en exclusividad" algunos desarrollos importantes como son la carga y descarga de datos (vía remote_api) , y en particular de la herramienta MapReduce (aún experimental), para trabajar procesos de datos en forma optimizada en nuestros GAE datastores. Vale entonces destacar que si nuestro interés en hacer desarrollos en la plataforma GAE conviene que mantengamos un conocimiento básico de desarrollo GAE utilizando su SDK para Python.. y a la par, dedicarnos a nuestras investigaciones y desarrollos en la platagorma GAE-Java ó GAE-Go (según nuestra especialización).

Otro punto a tomar en cuenta es que para desarrollos para móviles (y para Android en particular), es necesario tomar conocimientos de desarrollo en la plataforma Java y esto induce a muchos desarrolladores a considerar como punto de partida de sus investigaciones y desarrollos a la plataforma GAE-Java, vale entonces reiterar nuestro apunte anterior, en que aún cuando la plataforma Java de desarrollo es bastante importante y de muy buen soporte, pues no debemos considerar que hay algunas herramientas Appengine que solo trabajan, por el momento, exclusivamente en la plataforma GAE-Python, por lo que vale considerar y dar una periódica revisión a este entorno de desarrollo.

Saludos...
@Mlaynes

Opina sobre Google AppEngine en nuestro foro..!


3 comentarios: