Catalyst, el framework web elegante.
Justo antes de empezar a escribir este post, tenía pensado realizar una serie de screencast’s demostrativos de las tareas cotidianas que se le presenta a cualquier programador web al realizar un proyecto, algunos temas que tengo en mente ahora son:
- Manejo de formularios
- Abstracción de base de datos
- Ajax
- Autenticación / Autorización.
- Reportes por PDF.
- Manejo de sesiones
- Depuración de la aplicación.
- Documentación del código (pod)
Si se le presentan ideas, por favor hacerlas llegar, y en lo posible será incluido en esta serie de videos para que sea lo mas completa posible.
Empecemos por lo básico para entender este post.
¿Que es un framework? un framework es un conjunto de herramientras integradas para facilitar la realización de tareas realizadas practicamente a diario.
¿Que es Catalyst? Catalyst es un framework web escrito usando perl, quizá una forma de asociarlo más rápido puede ser pensando en el framework web Ruby on Rails, así en este caso, Ruby es para Ruby on Rails lo que Perl es para Catalyst, es decir, Catalyst no es un lenguaje.
Catalyst trabaja usando la metodología de desarrollo MVC (Modelo Vistra Controlador) que lo que hace es separar el origen de información (Base de datos, RSS, LDAP, Etc.), la presentación (xml, json, html, PDF, RSS, Etc. ) y la propia lógica de programación, la cual es la encargada de procesar la información obtenida, es decir, sirve de intermediario entre la capa de Vista y Modelo, ofreciendo un código mas mantenible e incluso, tener grupos de desarrolladores/diseñadores/DBA dedicados a su tarea.
En este punto se podría decir que Catalyst no es mas que otro Framework web, a continuación algunas caracteristicas que hacen de Catalyst un buen framework.
- Facilidad de instalación:
El medio mas fácil/comodo de realizar una instalación de Catalyst es a travez de aptitude, en el caso de Debian o Ubuntu se encuentra disponible con el paquete de nombre ‘libcatalyst-perl‘. Siendo tan fácil como aptitude install libcatalyst-perl .
Otra forma es por medio de CPAN, que… usando el mismo ejemplo de hace un rato: CPAN es para Perl lo que Aptitude es para dpkg (algo así, es para que agarren una idea) CPAN es un repositorio muy extenso de modulos de Perl, y al realizar una instalación por este medio, se satisfaceran las dependencias necesarias de modulos para no dejar la instalación a medias. El nombre del módulo a instalar para tener todo lo que se necesita para empezar a trabajar es Task::Catalyst, instalandose de la siguiente forma: cpan Task::Catalyst . Recomiendo en lo posible realizar la instalación usando los paquetes de debian, este método solo cuando sea necesario. - uri_for (sin reglas de mod-rewrite)
Otra de las ventajas es que nos olvidamos de las reglas de mod-rewrite para tener una direcciones de despacho limpias, de esto se encarga Catalyst internamente, y para mantener el control de las rutas a la hora de mover el proyecto de directorio es la función uri_for, la cual se encarga de mostrar la ruta adecuada según el metodo de despacho usado, es decir, trabajar con: http://mi.dominio.com/mantenimiento/empleado/11222333/editar (Basadas en segmentos) en vez de http://mi.dominio.com/mantenimiento/empleado.cgi?cedula=11222333&operacion=editar (query string). Esto a parte de ser visualmente mas limpio, intuitivo de usar, mas amigable… es mas manejable para los motores de busqueda (google,yahoo.etc) a la hora de indexar el contenido del sitio haciendolo mas accesible (en términos de visitas) en la red. - scripts helpers
Al igual que otros framework’s (no todos) catalyst trabaja con unos scripts de ayuda para crear modelos, vistas, controlladores (podemos pensar en un controlador como un conjunto de páginas), es ventajoso porque hay frameworks en los cuales uno tiene que copiar archivos y trabajar sobre estos últimos, en Catalyst no es el caso. - Unicode
Catalyst tiene buen soporte para unicode (UTF8), si la intención es en algún futuro ofrecer la aplicación/página web a la mayor variedad de publico, se tiene que trabajar con unicode desde un principio, de hecho, aplicaciones desarrolladas hoy día deberían trabajar bajo esta cadena de caracteres (a nivel de servidor web, base de datos, tipo de archivo, el propio charset el archivo) para evitar los rombitos con el signo de interrogación que se puedan llegar asomar en la aplicación. - Acciones y métodos de despacho
Una acción es un bloque dentro de los controladores, y no es mas que una función esperando ser disparada al reconocer una llamada por meadio del URL por cualquiera de los tipos de acciones, de los cuales tenemos los siguientes:- Path: Se asigna una ruta absoluta a ser reconocida en toda la aplicación, independiente del controlador donde se encuentre
- Regex, LocalRegex: Realiza correspondencias de los URL visitados según expresiones regulares (el fuerte de Perl) a nivel global y local.
- Global: Hace pasar el nombre de la acción al primer nivel (como si se tratase de un controlador)
- Local: Despacha el nombre de la acción como segundo nivel, justo despues del nombre del controlador que la mantiene.
- Chained: Esta una de las acciones mas interesantes ya que permite jugar con los segmentos del URL a ser reconocidos puesto que es una combinación de varias acciones concatenadas pero aún así cada una recibe una cantidad definida de argumentos.
- Private: no despacha por medio de URL sino funciones llamadas internamente de forma explicita y otras veces por secuencia (index,begin,auto,end,default).
- CPAN
“CPAN es el lenguaje, perl es sólo la sintaxis” esto es algo que escuché (o leí) alguna vez y se me quedó grabado porque en cierta forma es así, dada la gran cantidad de módulos que se encuentran disponible en CPAN para cualquier tarea pensada, uno no tiene porque reinventar la rueda sino usar los módulos aqui disponibles para facilitar las operaciones a realizar, y gracias a la flexibilidad de uso de Catalyst, no hay inconvenientes para incorporarlos como si se tratase de un script stand-alone de perl o CGI, pero recuerden que se trata de un framework MVC, no traten mezclar arroz con mango, denle sentido al asunto de separar las capasa.
Este articulo (y el resto que estan por venir) no pretende dar a explicar cada punto sobre el uso de Catalyst ya que siempre se escapará algo, para eso use la lista de Catalyst-es.
Recomendación de lectura de Catalyst , Catalyst::Manual::Intro , Catalyst::Manual::Tutorial , esta docmentación se encuentra en ingles, parte de ella ha sido traducida por mi, cuando lo tenga listo lo publicaré en castellano para llegar esta información a mas gente.

Excelente trabajo, ojala sigas adelante con él. Estoy intentando arrancar con el mundo de Catalyst y un sitio tan bien explicado como éste me ayudaría muchísimo.
Saludos.