miércoles, septiembre 26, 2007

Cursos muy buenos de JavaScript en Video

Hace un tiempo, en Yahoo! UI Library: YUI Theater, se publicó un curso muy completo de un lenguaje que me resultó muy interesante, y que muchos piensan que más que un lenguaje es un juguete. En mi humilde opinión, es el gran lenguaje con conceptos increibles. Ya algo escribí luego de la charla de lenguajes prototipados.
Este curso es muy completo y el instructor (Douglas Crockford) lo hace muy llevadero. Yo lo hubiese querido haber hecho 8 años atrás cuando empecé a programar aplicaciones Web y pensaba que JS era un juguete (que equivocado que estaba)
Parte 1

Parte 2

Parte 3

Parte 4


Las diapositivas las pueden bajar de aca

Espero que les guste.

domingo, septiembre 16, 2007

Ruby: un lenguaje muy simpático

En IBM estamos empezando un proyecto en Ruby y la verdad que el lenguaje me está cayendo muy pero muy simpático.
Acá les quiero dejar una presentación muy buena sobre 10 features que tiene el lenguaje. Espero que les guste, también les dejo un resumen:
#10 Convenciones
#9 Todo es un objeto
#8 (Casi) Todo es un mensaje
#7 Ruby es más dinámico de lo que parece (Open clases, reflection, hooks, singleton method, code evaluation, etc)
#6 Ruby es fuertemente tipado pero no estáticamente tipado
#5 No te preocupes por las interfaces (Duck Typing)
#4 Soporta Mix-Ins (Algo parecido a lo que se podría hacer con herencia multiple)
#3 Closures
#2 IR (docs) es tu amigo, IRB (consola interactiva, recomendable) también es otro amigo
#1 Deja de escribir tanto código!
Este es el link
Creo que todos, antes de hablar bien o mal de ruby, deberían saber que posee estas features.

martes, septiembre 11, 2007

Un camino que lleva a RIA

Luego de 7 meses bastante duros, pudimos llevar a producción la release 2.3 del proyecto que vengo trabajando hace años. La verdad que esta release tuvo un gustito particular, debido a que no solo se agregó mucha funcionalidad, en muy poco tiempo, sino que también tuvimos que implementar nuevas tecnologías para agregar items de usabilidad que impactaron bastante en la arquitectura.
Básicamente el objetivo fue pasar de una aplicación web tradicional a algo más híbrido y más parecido a una RIA (Rich Internet Application).

Voy a tratar de listar un par de prácticas y lecciones aprendidas que tuvimos en esta release:
  • Tener bien separado los diferentes concerns del browser, Contenido (HTML), los Estilos (CSS), Eventos(JavaScript) y Comportamientos (JavaScript). Esto ayuda a tener un código más simple, claro y mantenible. Lo que hicimos fue framework en JavaScript que obligó a estructurar un poco más el código javascript, con lo cual cada funcionalidad tenia su archivo/objeto/metodo en donde debía escribirse. Realmente JavaScript me resultó un lenguaje increíble, muy potente...
  • Como parte del proceso de transformar una Web Tradicional a una RIA, tuvimos que mantener las páginas como están y agregar los items de usabilidad desde allí, o sea, tener un único refresco completo por pagina (cada vez que se va de una página a otra), y mientras el usuario realice transacciones en esa página, recién ahí utilizar AJAX/AHAH para actualizar partes de ella. Es importante destacar que el uso de AJAX y AHAH brinda una gran performance, mejorando la latencia y utilización de recursos, debido a que hay menor transferencia de datos y que la página no se refresca por cada transacción.
  • JSON es la mejor manera para intercambiar datos entre el browser y el Server. Todos los delta de página son devueltos en un único objeto JSON con pedacitos de HTML renderizados en el Server. Está claro que JSON es muy superior a XML en este conexto, ya voy a hablar un poco más de esto.
  • Una parte interesante fue la modificación que le hicimos al componente de Vista, debido que se componentizaron los renderizadores de HTML, y ahora estos renderers son utilizados tanto para crear el HTML de la página completa como los delta de HTML que viajan a través de JSON.
  • El manejo de eventos en el browser tuvo un cambio en el final de la release, empezamos usando Event Handling y terminamos con Event Delegation (con bubbling) lo que mejoró muchísimo la performance. En este link se explica muy bien la diferencia.
  • Ni Client Pulling, ni Server Pushing son la mejor solución. Luego de implementar un Indicador de Progreso para transacciones largas, llegamos a la conclusión que las actualizaciones del Server al Browser (Reverse AJAX) debe ser una solución intermedia entre los dos enfoques, ya que esto evita muchos problemas de performance y concurrencia.
  • YUI Yahoo es una librería de JavaScript increíble ya que posee muchísimos widgets y componentes configurables, como los Menus, Paneles (eliminamos los malditos popups), Connections, etc Pero sobre todo nos permitió lidiar con el cross browser compatibility.
  • Firebug rocks!
Obviamente nos faltaron muchas cosas por mejorar y hacer:
  • Armar un buen entorno de Unit Test de JavaScript, estuve probando JSUnit, pero no lo pudimos institucionalizar :(
  • Realizar inclusiones de JS dinámicamente
  • Tener un mapeo de Evento<->Comportamiento más declarativo en JS que permita reutilizar más comportamientos o behavior, creo que estamos bastante bien, pero todavía necesitamos más trabajo.
  • No pudimos resolver, por falta de tiempo, como enviar solo la información que cambió en el formulario del browser.
  • El HTML de la aplicación todavía es muy muy feo, hay que trabajar más en este tema para poder tener el contenido mejor representado.
  • No pudimos incluir el Spring Webflow, lo que nos hubiese permitido tener una aplicación con flujos mejor definidos y un modelo más stateful en el server.
Espero que les sirva esta experiencia que ganamos, calculo que en algún momento explotaré cada uno de los puntos planteados y daré más detalles... probablemente en algún articulo y mejor redactado.