Durante el desarrollo de la presente tesina realizamos un análisis sobre las tecnologías disponibles para el desarrollo de aplicaciones web destacando el aporte de los frameworks orientados a aplicaciones de contenidos, como Ruby On Rails o Django. Los lenguajes dinámicos de alto nivel, a pesar de la sobrecarga que introducen, facilitan la creación de frameworks simples, como es el caso de Django.
De los objetivos cumplidos:
Extender un framework de aplicaciones web, OpenSource, existente de manera que una aplicación realizada sobre éste, pueda ser ejecutada en el cliente de manera desconectada con un mínimo de modificaciones
Sobre el framework elegido, realizamos la extensión como una aplicación genérica llamada offline, que se trató en los capítulos de Introducción al Desarrollo y Offline, la Aplicación para la Desconexión.
Implementar persistencia del modelo de datos en el cliente
Mediante el plugin Google Gears, logramos persistencia base de datos en el cliente. El soporte para Google Gears se trató en los capítulos sobre Protopy y Doff. En el capítulo sobre Offline, la Aplicación para la Desconexión, se trató la migración automática a partir de la introspección de la definición.
Implementar un subconjunto de acciones disponibles en modo desconectado
Doff provee el sistema de vistas y middlewares de Django, por lo que la funcionalidad de la aplicación conectada se puede migrar de manera sencilla. Esto se trató en los capítulos de Doff y Offline, la Aplicación para la Desconexión.
Implementar primitivas de sincronización entre la aplicación del cliente y la aplicación web que le dio origen
Logramos implementar un sistema de sincronización basado en estándares web y de alto nivel, superando las expectativas iniciales. El protocolo de sincronización se trató en el capítulo Sincronización de Datos.
En cuanto a los objetivos secundarios:
Enriquecer nuestra experiencia relacionada con el desarrollo de software libre
Los frameworks web que hemos estudiado se distribuyen como OpenSource. Su desarrollo está asistido por software OpenSource, como los sistemas de control de versiones como Subversion, Mercurial (utilizado en esta tesis), Git o Bazaar; sistemas de control de proyecto como Trac o Launchpad. Los sistemas de documentación tanto para las APIs del programador como los tutoriales, se basan también en herramientas libres, desde la documentación plana en HTML o Docbook, hasta sistemas más sofisticados como LaTeX o Sphinx (sistema con el cual elaboramos el presente documento). El uso de estas herramientas nos ayudó a la adopción más plena de la filosofía del software libre.
Aportar y difundir una extensión a un framework de libre distribución
Completamos íntegramente el trabajo con Software Libre: el lenguaje Python, Django, Gears y el navegador Mozilla. Doff, Protopy y la aplicación offline se distribuyen con la misma licencia y están disponibles en la URL http://code.google.com/p/protopy, donde se cuenta con una Wiki, un sistema de seguimiento de tareas y correcciones (Issues) y la posibilidad de enlazar con listas de correo (Google Groups). Para la difusión del trabajo utilizamos las listas de correo de Django (http://django-project.com) y el popular sitio de noticias Ajaxian (http://www.ajaxian.com).
El desarrollo de este tipo de aplicaciones requerirá que los profesionales dedicados al desarrollo de sistemas de información dominen los estándares como XHTML, EcmaScript, HTTP y sepan utilizarlos para su provecho. Además, la integración de múltiples servicios web (mashups) será una excelente alternativa para conservar compatibilidad con sistemas Web Legacy.
A continuación se detallan algunas líneas futuras puntuales que surgieron del estudio y desarrollo de la presente tesina.
Google publicó en mayo de 2006 un proyecto llamado Google Web Toolkit (GWT) [*], que consiste en un compilador de Java en JavaScript que permite al programador realizar aplicaciones web totalmente en Java. James Tauber y Luke Casson Leighton realizaron una implementación similar a GWT sobre Python, denominada PyJamas [†]. Es posible, por lo tanto, generar un compilador de código Python a JavaScript, utilizando la API de Protopy y Doff, permitiendo que los programadores utilicen Python para la totalidad del desarrollo.
| [*] | http://code.google.com/intl/es-AR/webtoolkit/ |
| [†] | http://pyjs.org/features.html |
Django se caracteriza por brindar una aplicación de administración (django.contrib.admin) que permite realizar CRUD (Create, Retrieve, Update, Delete) sobre los modelos de las aplicaciones de usuario, interactuando con la aplicación de autorización y permisos (django.contrib.auth). En base a la implementación de Protopy y Doff sería posible implementar un sitio de administración similar.
Gears provee un mecanismo de ejecución de código en el cliente de manera concurrente, llamado Worker Pool, que permite que tareas que demandan un tiempo considerable de CPU sean ejecutadas en segundo plano, evitando entorpecer el refresco de la interfaz del navegador. Una característica de los worker pools, es que se ejecutan en un ámbito de nombres diferente al del hilo principal y el único mecanismo de comunicación con el hilo principal es un sistema de cola de mensajes.
Se podrían aislar partes del framework Doff para realizar tareas, como el ciclo del Request o el acceso a la base de datos en un Worker Pool.
EcmaScript 5 o JavaScript 2.0 resuelven varios aspectos que fueron abordados por Protopy/Doff, como un sistema de clases. Si bien no se trató específicamente en la presente tesina, la aparición de HTML5, estándar en el cual la funcionalidad de Gears queda comprendida, reduce la brecha entre las aplicaciones de escritorio y las aplicaciones web. Con la próxima aparición de JavaScript 2 (EcmaScript5) y HTML5, las aplicaciones web de escritorio poseerán nativamente la capacidad de ejecutarse de manera desconectada. El conjunto de Doff y Protopy puede ser utilizado como base para realizar aplicaciones de escritorio basadas en web, adaptándolo a estas nuevas tecnologías.
En una aplicación desconectada, el estado generado por cada petición no se pierde, aunque es destruido voluntariamente por Doff. Algunos componentes, como las plantillas, pueden ser conservados entre petición y petición para acelerar el procesamiento.
Se podría implementar un sistema de almacenamiento para archivos en el cliente, utilizando el LocalServer de Gears.
Doff aprovechó las ventajas de la sintaxis de JavaScript 1.7 y 1.8, que no se encuentran disponibles en navegadores fuera de la plataforma Mozilla. Con el objeto de compatibilizar con otros navegadores disponibles en el mercado, se podría implementar un compilador de JavaScript 1.7 en JavaScript 1.6, utilizando el mecanismo de orientación a objetos de Protopy. Además, esta compilación podría traer aparejado un aumento de la velocidad.
Una de las características planeadas para Django 1.2 es un sistema de migración de esquemas que permita transformar una definición de modelo en otra, realizando los cambios en la base de datos. Los cambios en el esquema de una aplicación web son una buena alternativa para evitar soluciones de compromiso ante diseños en producción. Doff podría admitir definiciones de migraciones.