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.

jueves, 23 de julio de 2009

Construir una UI web con solo html y javascript

Hoy en dia existen muchas alternativas para construir la UI de una aplicación web. Estas son algunas características desables (en mi caso) para construir una aplicación web tipo dashboard:

  • Capacidad de prototipar. Esto permite construir la UI rapidamente, obtener feedback temprano, visualizar y probar la idea más ágilmente, etc.
  • Independiente de la tecnología server side. Esto permite reutilizar el front end y sus controles en java, .net, php, etc.
  • Poseer una buena libreria de controles
  • Liviano
  • Proveer una manera consistente / homogenea para construir aplicaciones web
  • Cross browser
  • Open source, con respaldo de la comunidad
  • Posibilidad de tunear y aplicar recomendaciones de sitios de alta performance
  • Facilidad para implementar mecanismos offline
En internet hay mucha informacion sobre distintos frameworks ajax (prototype, scriptaculos, jquery, dojo, ext, yui, general interfaces, etc). Con algunos hice pruebas, con pude experimentar directamente en una aplicación. Finalmente me decidí por extjs, ya que me gustó mucho la librería de controles.

Uno de los problemas a resolver para construir una aplicacion web con capacidad de funcionar offline es el acople entre la interface de usuario y el server. Se me ocurre que html estático + ajax + google geas puede ser una buena alternativa. Pero en el fondo pienso que este no es el paradigma dominante, quizas estoy equivocado. Por suerte encontré este post que me alentó a seguir esta alternativa:
Does the rise of Service Oriented UI (SOUI) means the death of server-assisted MVC?

Mis tags en delicious sobre el tema:
http://delicious.com/ferclaverino/ria

miércoles, 22 de julio de 2009

Instalar vmware tools - host windows, virtual machine ubuntu

Ya comenté anteriormente que esto era algo que tenía pendiente. Gracias a lo publicado aca
tengo una buena guía para hacerlo. El único problema es que el sistema operativo host es windows.

1ro Bajar vmware workstation para linux (.bundle)

2do Instalar .bundle en ubuntu. Esto es simple, solo hay que hacer sudo chmod +x vmware.bundle y luego sudo ./vmware.bundle

3ro Buscar en el filesystem linux.iso

4to Montar linux.iso. Ingresar y extraer .rpm (como lo explica el post)

5to Instalar vmware tools haciendo sudo ./vmware-install.pl
El instalador pide por recompilar algunos modulos que no son compatibles con el kernel ubuntu.

6to Desinstalar vmware workstation sudo ./vmware.bundle -uninstall

7mo Recompilar vmware:
#sudo /usr/bin/vmware-config-tools.pl

8vo Finalmente, para iniciar automaticamente vmware tools al inicio de gnome, agregar a system, preferences, startup applications el comando /usr/bin/vmware-user

Empezando con scrum

Estas últimas semanas me pasó de conocer nuevas personas y charlar sobre scrum. Noté un interés creciente por el tema. Para quienes les interese el tema, esta es una lista de links que me fueron de utilidad para entrar en contacto con el mundo agil.

http://groups.yahoo.com/group/foro-agiles/
Este es el grupo de la comunidad ágil de habla hispana. Participan varios profesiones reconocidos por el mercado. Las discusiones son interesantes, generalmente tratan los problemas y experiencias de llevar scrum a la práctica.

Grupo agile de Argentina. Además de discusiones locales, el grupo organizar reuniones presenciales periódicamente.

http://www.infoq.com/minibooks/scrum-xp-from-the-trenches
Este es un libro sobre scrum (con ejemplos).

http://agileassessments.thoughtworks.com/
Este es un assesment para evaluar el estado actual y compararlo con el estado definido por las buenas prácticas de las metodologías ágiles.

http://www.slideshare.net/proyectalis/090526-charla-scrum
Una presentación sobre scrum

Mis delicious
http://delicious.com/ferclaverino/scrum

saludos!

sábado, 18 de julio de 2009

Hello world, hello mondrian

Mondrian es un motor olap open source escrito en java.
http://mondrian.pentaho.org/

Tiene algunas caracteristicas interesantes, como por ejemplo permitir mendiante un archivo xml configurar las facts y dimensiones de un cubo, tomar como origen de datos una base de datos relaciones, distintos niveles de agregacion y cache, etc. Es compatible con varias bases de datos, entre ellas hsqldb

Este es un breve paso a paso para realizar un hello world, o mejor dicho, un hello mondrian.

1ro bajar el ultimo release.

2do descomprimir y copiar en usr/local/mondrian.
Todas las librerias y dependencias requeridas por mondrian se encuentran dentro de mondrian-embedded.war. Por lo tanto descomprimir mondrian-embedded.war y copiar el contenido de la carpeta WEB-INF/lib en usr/local/mondrian/lib.

3ro crear proyecto java en eclipse. Agrear los siguientes external jars:


4to crear xml de definicion del cubo. Este ejemplo contiene una dimension de producto y otra de tiempo.

<?xml version="1.0" encoding="UTF-8"?>
<Schema name="SaleStore">
<Cube name="Sales">
<Table name="FT_SALES"/>
<Dimension name="Product" foreignKey="PRODUCT_ID">
<Hierarchy hasAll="true" allMemberName="All Products" primaryKey="PRODUCT_ID">
<Table name="LK_PRODUCT"/>
<Level name="Product" column="PRODUCT_ID" nameColumn="PRODUCT_NAME" uniqueMembers="true"/>
</Hierarchy>
</Dimension>
<Dimension name="Time" type="TimeDimension" foreignKey="DATE_ID">
<Hierarchy hasAll="true" allMemberName="All Periods" primaryKey="DATE_ID">
<Table name="LK_TIME"/>
<Level name="Year" column="YEAR" uniqueMembers="true" levelType="TimeYears" type="Numeric"/>
<Level name="Quarter" column="QUARTER" uniqueMembers="false" levelType="TimeQuarters" />
<Level name="Month" column="MONTH" uniqueMembers="false" ordinalColumn="MONTH" nameColumn="MONTH_NAME" levelType="TimeMonths" type="Numeric"/>
<Level name="WEEK" column="WEEK_IN_MONTH" uniqueMembers="false" levelType="TimeWeeks" />
<Level name="DAY" column="DAY_IN_MONTH" uniqueMembers="false" ordinalColumn="DAY_IN_MONTH" nameColumn="DAY_IN_MONTH" levelType="TimeDays" type="Numeric"/>
</Hierarchy>
</Dimension>
<Measure name="Quantity" column="QUANTITY" aggregator="sum" formatString="#,###"/>
<Measure name="SalePrice" column="SALE_PESO" aggregator="sum" formatString="#,###.##"/>
</Cube>
</Schema>

5to crear clase java de prueba

import mondrian.olap.*;
import java.io.PrintWriter;
import java.io.StringWriter;

public class TestMondrian {

/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException
{
// Load the HSQL Database Engine JDBC driver
// hsqldb.jar should be in the class path or made part of the current jar
Class.forName("org.hsqldb.jdbcDriver");

// First, set up a valid connection string
String connStr = "Provider=mondrian;" +
"Catalog=data/cube_sales.xml;" +
"JdbcDrivers=org.hsqldb.jdbcDriver;" +
"Jdbc=Jdbc:hsqldb:file:/home/fer/workspace/helloworld/HelloHsqldb/data/testdb;" +
"jdbcUser=sa;" +
"jdbcPassword=;";

// Second, set up a valid query string
String queryStr =
"SELECT {[Measures].[Quantity], [Measures].[SalePrice]} on columns," +
" {[Product].children} on rows " +
"FROM [Sales] ";
//"WHERE ([Time].[2009].[Q1]";

// Third, retrieve a connection from the DriveManager
Connection connection = DriverManager.getConnection(connStr, null);

// Fourth, generate a MDX Query object
Query query = connection.parseQuery(queryStr);

// Fifth, execute the query
Result result = connection.execute(query);

// Finally, print out the result
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
result.print(pw);
pw.flush();
System.out.println(sw.toString());

}

}