Tutorial de “Open Flash Chart” con Python

Recién el pasado 28 de enero [del 2008] se liberó la versión 1.9.7 de Open Flash Chart para la cual hice un humilde aporte con su implementación en Python. [Lo abreviaré como OFC, en algunas ocasiones, para economizar un poco de teclado]

Seguramente que a todos nosotros nos encantan esos gráficos estadisticos hechos en Flash que vemos en algunas aplicaciones o sitios web. Y con seguridad, también, que la mayoria de ellos han sido desarrollos por personas que han tenido que comprar (o crackear, siendo realistas) paquetes costosos que nuestros proyectos pequeños no pueden afrontar.

No importa, no nos preocupemos más: es imposible que no exista una solución open source. Ya podemos tener nuestros propios gráficos en formato SWF dentro de nuestra aplicación web utilizando una herramienta totalmente gratuita… Open Flash Chart!. Asi que, si no lo tienes, es hora de descargarlo!

Que alivio, ya no tendremos que piratear algun paquete comercial y caer en la ilegalidad. Noooo, que feo sería!

En el sitio web del autor existen muchos ejemplos en PHP ya que es el lenguaje para el que originalmente fue desarrollado OFC; sin embargo, al dia de hoy, OFC es compatible con Java, Perl, .NET, Ruby y Python. Tutoriales para usar OFC con Python parecen no haber en la web, es por esa razón que me estoy tomando un tiempito para hacerlo… proximamente! [en este mismo post]

JBoss en Ubuntu

jboss

JBoss es un servidor de aplicaciones J2EE bastante popular en el mundo de Java. Es el primer servidor de aplicaciones de código abierto que obtuvo el certificado J2EE 1.4, talvez de ahi sea su gran popularidad.

Ahora les dejo los sencillos pasos que debemos realizar para tener JBoss corriendo en nuestra cajita ubuntera [y empezar a desarrollar aplicaciones J2EE].

  • Primero que todo es necesario tener instalado Java en nuestra computadora.
  • Descargar JBoss. A la fecha, recomendaria descargar la version 4.2.2.GA con lo que obtendremos un zip llamado jboss-4.2.2.GA.zip.
  • Descomprimir el zip y renombrar la carpeta jboss-4.2.2.GA con el nuevo nombre jboss
  • Mover esta carpeta:

sudo mv jboss /opt/

  • … por lo que ahora deberiamos tener una carpeta /opt/jboss/
  • Crear el archivo/etc/init.d/jboss con el cual levantaremos o detendremos el servidor.

sudo vim /etc/init.d/jboss

  • … y pegar el siguiente contenido:
#! /bin/sh

#  /etc/init.d/jboss: Start and stop JBoss AS

ECHO=/bin/echo

TEST=/usr/bin/test

JBOSS_START_SCRIPT=/opt/jboss/bin/run.sh

JBOSS_STOP_SCRIPT=/opt/jboss/bin/shutdown.sh

$TEST -x $JBOSS_START_SCRIPT || exit 0

$TEST -x $JBOSS_STOP_SCRIPT || exit 0

start() {

      $ECHO -n "Starting JBoss"

      su - jboss -c "$JBOSS_START_SCRIPT > /dev/null 2> /dev/null &"

      $ECHO "."

}

stop() {

      $ECHO -n "Stopping JBoss"

      su - jboss -c "$JBOSS_STOP_SCRIPT -S > /dev/null &"

      $ECHO "."

}

case "$1" in

      start)

            start

            ;;

      stop)

            stop

            ;;

      restart)

            stop

            sleep 30

            start

            ;;

      *)

            $ECHO "Usage: jboss {start|stop|restart}"

            exit 1

esac

exit 0
  • Permitir que este nuevo archivo sea ejecutable:

sudo chmod 755 /etc/init.d/jboss

  • Crear un usuario llamado jboss:

sudo adduser jboss

  • Actualizar los run levels:

sudo update-rc.d jboss defaults

Ya con esto deberiamos ser capaces de levantar nuestro JBoss por primera vez sin ningun problema:

sudo /etc/init.d/jboss start

Tardará cuestión de 1 o 2 minutos en levantar. Podemos hacer un escaneo de puertos sobre nuestra máquina con nmap para asegurarnos que JBoss está escuchando. Ademas, JBoss iniciará automaticamente cuando iniciemos nuestro sistema operativo.

Espero que sea de utilidad para alguien y espero sus comentarios, dudas, preguntas, criticas…

Las escalas del universo

A traves de eliax me encontre con esta animacion interactiva en la que pueden comparar el tamaño de las cosas que existen en nuestro universo, desde electrones, atomos, bacterias, insectos, pasando por piramides, montañas hasta planetas, estrellas, galaxias y todo nuestro universo. Me parece una animacion maravillosa que no pueden dejar de ver y asombrarse:

http://www.nikon.com/about/feelnikon/universcale/index_f.htm

Colorear sintaxis de python en vim

Y despues de esos nacatamales comentados en el post anterior me dedique a disfrutar una buena siesta. Sucede que durante la siesta tuve una pesadilla: estaba editando codigo python con el vim y no me coloreaba la sintaxis! Si te pasa eso y tienes ubuntu, prueba esto:

sudo aptitude install vim-python

sudo vim /etc/vim/vimrc

… y descomenta la linea que dice “syntax on”.

Por cierto que existe una version GTK del Vim:

sudo aptitude install vim-gnome

gvim

Dulces sueños.

CherryPy 3

Muy de moda se han puesto los llamados “frameworks de desarrollo web” y con justa razon. El uso de un “framework” te ahorra mucho trabajo, te permite programar con mas rapidez, realizar un trabajo mas consistente, le da estructura a tu aplicacion y, como si fuera poco, al seguir el “estandar” del framework que utilices, tendras todo un batallon de programadores alrededor del mundo dispuestos a brindarte soporte [mayoritariamente] gratuito ante cualquier problema (algo que nunca falta).

Definir “web framework” es una tarea demasiado complicada. A veces he tratado de hacerlo; buscando ayuda con la teoria caigo en la ya clasica wikipedia que dice:

En el desarrollo de software, un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado.

Si, claro que si, pero, dile esto a alguien que nunca ha usado uno y veras como aclaras sus dudas! (Sarcasmo). Veamos que dice un poco mas adelante en el mismo articulo:

Los Frameworks son diseñados con el intento de facilitar el desarrollo de software, permitiendo a los diseñadores y programadores pasar más tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional. Por ejemplo, un equipo que usa Apache Struts para desarrollar un sitio web de un banco puede enfocarse en cómo los retiros de ahorros van a funcionar en lugar de preocuparse de cómo se controla la navegación entre las páginas en una forma libre de errores. Sin embargo, hay quejas comunes acerca de que el uso de frameworks añade código innecesario y que la preponderancia de frameworks competitivos y complementarios significa que el tiempo que se pasaba programando y diseñando ahora se gasta en aprender a usar frameworks.

Correcto, muy cierto. Asi que, para entender de una vez el concepto de “framework” empecemos gastando un poco de tiempo en aprender uno, CherryPy. (Si quieres una lista bastante completa de web frameworks existentes, en distintos lenguajes, visita: http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks)

Nota aparte: Tambien existen un par de frameworks destinados a desarrollar “aplicaciones de escritorio”, en vez de web, como Spring RCP (Java + Swing) y GnuEnterprise (Python + GTK; muy prometedor este proyecto, les recomiendo leer su documentacion, empezando por aqui)

Por que usar CherryPy?

Esta es una pregunta interesante. Hubo algun momento en el que me dedique a investigar sobre frameworks escritos en Python y realmente que existen muchos, entre los que sobresalen Django, Turbogears y Plone (evolucion de Zope).

En mi investigacion llegue a darme cuenta de que un framework generalmente se compone de las siguientes piezas:

  • Controlador (controller)
  • Motor de plantillas (template engine)
  • Persistencia (ORM: Object-Relational Mapper)
  • Validacion de formularios
  • Mensajeria
  • Conjunto de Widgets (no se en español, si alguien me dice, por favor!)
  • Librerias javascript

Resulta que en el mundo maravilloso de Python podemos encontrar todas estas piezas por separado y con mucha variedad en cada uno. Veamos:

  1. Controlador: Cherrypy, Webpy, mod_python (este ultimo mas bien serviria de base para hacerte el tuyo).
  2. Motor de plantillas: Aqui si que hay muchas; Mako (mi preferido, no dejen de dar click en el link y ver el ejemplo que aparece en la pagina principal!), Kid, Cheetah, Genshi, PSP, Clearsilver, ZTL, SimpleTAL,… etc… etc.
  3. ORM: SQLObject y SQLAlchemy
  4. Validacion de formularios: FormEncode… y creo que aqui no hay duda.
  5. Mensajeria: PyRO
  6. Widgets: ToscaWidgets

Y seguro que hay muchisimas cosas mas rodando por ahi. Sucede que hay 2 tipos de frameworks: primero, los que crean su propio controlador, plantillas y todo lo demas (como Django), y, segundo, los que sirven como pegamento para herramientas ya existentes (TurboGears).

Por ejemplo, TurboGears usa por defecto el motor de plantillas Kid (aunque ahora agregaron una capa de abstraccion para las plantillas a la que denominaron Buffet que te permite utilizar casi cualquier motor de plantilla de tu preferencia; todavia no lo he probado, talvez algun dia lo haga y lo comente mejor), como ORM usa SQLObject, como widgets los ToscaWidgets y como controlador… ah!, CherryPy.

-“…entonces, CherryPy es un framework o un simple controlador?”

Mas arriba dije que ibamos a aprender a utilizar un framework llamado CherryPy y ahora les digo otra cosa, lo se. Les dire, en esencia es un simple controlador, pero, talvez la verdadera importancia de aprender sobre CherryPy es que podemos elegir el resto de piezas a nuestro antojo!

Talvez a mi no me gusta el motor de plantillas que trae Turbogears y prefiera Mako… y asi podria ir cambiando pieza por pieza. Talvez a mi me gusta la combinacion CherryPy (controlador) + Mako (plantillas) + SQLAlchemy (persistencia) + FormEncode (validacion) + ToscaWidgets (widgets) + JQuery (javascript). Lo ven? Y esta es la formula que vamos a ir desarrollando en este “pequeño cursito”; o sea que pronto tendremos nuestro “framework a la medida”. Primero haremos el ejemplo con CherryPy, luego le agregamos Mako al ejemplo y mas adelante probamos con SQLAlchemy,.. y asi hasta que estemos listos para lanzarnos en grande con un proyecto.

Instalar CherrPy en Ubuntu 7.10

Utilizo Ubuntu 7.10, asi que muchas veces me voy a referir como suponiendo que utilizan el mismo sistema operativo. Si no es asi, lo siento, tendran que averiguar como hacer algunos detalles en el sistema operativo que usen.

Instalar en Ubuntu el CherryPy3 es cuestion de rascarse la panza:

sudo aptitude install python-cherrypy3

Listo! Si no estas convencido de que se haya instalado correctamente puedes abrir la consola de python y escribir “import cherrypy”; si no te lanza un error quiere decir que todo esta bien. Fijense en este ejemplo:

minibota@minibota-laptop:~$ python
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import cualquiercosa
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: No module named cualquiercosa
>>> import cherrypy
>>>

Si no tuvieras CherryPy instalado te sucederia lo mismo que me ocurrio al hacer “import cualquiercosa”.
Primer ejemplo con CherryPy