sábado, 1 de agosto de 2009

Conectando extjs con el server side usando spring framewok

Una de las ventajas de extjs es que permite fácilmente poder prototipar sin tener que construir ninguna pieza server side. Con este tipo de frameworks es posbile definir como origen de datos de un combo un archivo json:

// Armo filtros
var comboFilter = new Ext.form.ComboBox({
store: new Ext.data.JsonStore({
autoLoad: true,
url: 'services/sales/filter/brands.json',
root: 'data',
fields: ['id', 'name']
}),
valueField: 'id',
displayField: 'name',
triggerAction: 'all',
forceSelection: true,
mode: 'remote',
loadingText: 'Loading...'
})

Para mayor claridad estoy usando url amigables. La url services/sales/filter/brand.json me dice que quiero obtener del dashboard de ventas, el filtro de marcas, en formato json.

Spring, ademas de ser un IoC/DI container, provee una buena forma de manejar friendly urls. Vamos a explicar paso a paso como usar spring como un pegamento entre client side y server side.

1ro Configurar spring web para escuchar los request en /services:

2do Configurar spring mvc para que la url services/sales/filter sea resuelta con el controller OlapServiceController:

3ero Implementar OlapServiceController. Este es quien realiza la ejecucion del servicio (service layer) que devuelve el filtro y selecciona la vista filter2json.jsp para renderizar el filtro en formato json:

Algo interesante de esta implementación es el bajo acople que hay entre el front end (extjs) y backend (jsp, spring, java, mondrian, etc.). Trabajar con simples urls permite definir un punto de entrada y abstraer totalmente su implementación. Sería posible tener fácilmente más de un server resolviendo peticiones (si los servicios son stateless) o acceder al servicio en la nube y escalar ondemand.

Otra posibilidad interesante es al tener un front end estático, es posible aplicar técnicas de caché en el browser para disminuir la cantidad de request, o distribuirlo a través de una cdn.

Y por último sería "no tan difícil" darle features offiline a la aplicación usando google gears (http://gears.google.com/). Aunque sobre esto me gustaría profundizar un poco más en otro post.

viernes, 31 de julio de 2009

Cannon y su iniciativa green

Me alegra mucho enterarme que una empresa como Cannon toma iniciativas green para minimizar el impacto ambiental de sus actividades. Un ejemplo a imitar por todos.

http://www.itbrief.co.nz/200907313528/canon-leads-by-example-with-green-initiative.php

domingo, 26 de julio de 2009

Composite web application con extjs y Tibco pagebus

Se me ocurre que una buena manera de crear un dashboard es componiendo distintas partes, al estilo ratis / lego. Una de los desafios de crear aplicaciones compuestas es el de mantener bajo acople entre las partes. Es decir, que sean lo más idependientes posible. Agregar / quitar un nuevo mashup no debe afectar al resto. Las dependencias entre unos y otros deberían ser mínimas.

Un patron de diseño que resuelve este problema es el observe o publish / subscribe. Y una buena implementacion en javascript es el pagebus de Tibco:
http://developer.tibco.com/pagebus/



En el prototipo se puede ver los filtros del dashboard a la derecha y 2 informes en el centro. El 1ro es una grilla y el segundo muestra los filtros seleccionados. Cuando se cambia un filtro se publica en el bus un evento. Ambos informes se suscribieron al bus y por lo tanto reciben estas notificaciones. La grilla ejecuta una llamada ajax (se puede ver en firebug), el segundo informe muesta el mensaje publicado.

Este es el codigo fuente:
http://codepaste.net/2mcfzz

Todavía hay mucho por hacer, pero la idea parece funcionar!

sábado, 25 de julio de 2009

Agilidad y equipos de trabajo: Shackleton, Kon Tiki, motivación: Messner

Algo que me entusiasma mucho es leer historias de aventura y exploración. Si hay gente que rompieron barreras mentales (paradigmas), hizo cosas que se creían imposibles y tuvo que lidiar con la incertidumbre, fueron los grandes exploradores y aventureros.

Creo que a nivel personal y profesional, conocer experiencias son un aporte invaluable. No deja de llamarme la atención cómo en algunos casos el encare de estos aventureros de alinean con las ideas de las metodologías ágiles.

Una de las historias más impresionantes es la de Shackleton y su tripulación, quienes a principio de siglo intentaron realizar la primera travesía al polo sur. Su barco quedó atrapado en el hielo, sobrevivieron a 2 inviernos polares, estuvieron a la deriva en un mas caótico de témpanos, navegaron en balsa por uno de los mares más tempestuosos del planeta y lo más increible de todo: volvieron todos vivos!

Hay varios libros que cuentan la historia, para mi el más apasionante es este:

Otro libro interesante es el que extrae las lecciones aprendidas:

Su similitud con las ideas de las metodologías ágiles a pesar de los 100 años de diferencia es asombrosa.

Formar equipos de trabajo efectivos es un desafío que requere un alto grado de creatividad. En una materia de la facultad donde trabajábamos la creatividad (Análisis y Resolución de Problemas) hice elegí como tema del trabajo final "Cómo Formar Equipos Efectivos" y tomé como punto de partida 2 grandes historias de expliración: la de Shackleton y Kon Tiki. Esta última es una expedición que cruzó en océano Pacífico en balsa. El motor era demostrar que los habitantes de la Polinesia eran antepasados de los Incas.

Esta es la presentación del trabajo:

y este es el trabajo:

Un tema importante y muy relacionado es la motivación. Hacer cosas imposibles requiere un alto grado de motivación. Uno de los alpinistas mas grandes de la historia, Reinhold Messner,vuelca en su libro Mover Montañas distintas experiencias, convicciones e ideas sobre el alpinismo. En cada capítulo se puede apreciar el trabajo de una persona que dedicó su vida a su pasión más entrañable.

Lo más importante de las capacidades del ser humano es la de establecer un sentido. No he alcanzado el éxito por ser especialmente fuerte, resistente o valiente. Hago ante todo que mi quehacer tenga un sentido.

En mi caso, al leer frases como esta, el efecto es de motivación contagioso.