Hace cosa de un año que me puse a mirar Catalyst, un framework web en Perl que goza de muy buena salud, muchos adeptos y buena publicidad (eh, para ser del mundo Perl, sí :D).
El experimento no salió bien, porque me encontré con muchas cosas que no me convencían (entre otras, la gran cantidad de dependencias que tiene el invento a la hora de desplegar una aplicación, y que tiene una curva de aprendizaje bastante dura). Además coincidió que fue mi primer encuentro con un ORM, y no le cogí el tranquillo a DBIx::Class (para alguien que piensa en SQL con naturalidad, es complicado :P).
Desde entonces he cacharreando algo con el Google App Engine (sin mucha continuidad ni resultados :P), y con Django, que no termina de apasionarme. Como recientemente he estado dedicándole tiempo a algún proyecto nuevo en escritorio con Perl, y me he estado animando a empezar de una vez algo en plataforma web (AKA tengo una idea
), he vuelto a revisar el panorama de frameworks, por si no había mirado bien :D.
No sé porqué siempre acabo descartando ideas basadas en PHP, aunque algunas tiene buena pinta, y tiendo a concentrarme más en otros lenguajes. Igual es porque PHP lo tengo muy visto, y lo paso mejor desarrollando con otras herramientas. Vamos, que a estas alturas nadie me puede decir que no lo he probado lo suficiente.
Lo que nos lleva a considerar los otros tres lenguajes en los que me manejo: Ruby, Python y Perl. Después de mirar algún framework más en Python (TurboGears me ha gustado bastante), y resistirme al buzz de RoR, me he encontrado con algo muy interesante: Mojolicious (que además está en Perl :P).
Tengo que reconocer que solo me plantee probarlo por lo que dicen en su web:
Pure Perl without any hidden magic and no requirements besides Perl 5.8.1.
Venga, va... ¡no puede ser cierto! ¿De verdad está hecho en Perl? :D
El caso es que, por experiencia, las cosas se prueban bien si las usamos en un proyecto de cierto tamaño, así que eso he hecho estos dos últimos fines de semana.
El proyecto elegido ha sido una web tipo servicio para acortar URLs, que a priori es sencillo de implementar (por eso hay tantos y tantos; la anotación es del 2008, y muchos de esos servicios ya no existen. Claro: lo que fácil viene, fácil se va :P).
Como siempre pasa en estos casos, te lías y acabas implementando más cosas de lo previsto, así que ahí van las características de ln.usebox.net:
- Servicio gratuito para acortar
URLs, como ya viene haciendo desde hace eras TinyURL (y ahí siguen :D). - El funcionamiento básico es indicar una
URL, y se genera una más corta (he usado un subdominio de usebox.net, y muy corto no es). - Opcionalmente podemos indicar un alias, para que la
URLsea algo más semántica, un título y obligar a pasar por la página de preview antes de visitar laURLdestino. - La funcionalidad de preview se puede activar desde el servicio para todas las
URL(mediante unacookie). - Se mantiene un directorio con las hot URLs del servicio, en base a las visitas de cada una.
- Hay un bookmarklet que nos facilita usar el servicio (nos carga los datos en el formulario, incluyendo el título de la web).
- Existe un API pública con interfaz
REST(y respuestas conJSON, porque yo lo valgo). - Internamente hay medidas anti-flood y anti-spam (usando PhishTank).
Bueno, y alguna cosa más que no tiene mucha importancia para el usuario final, pero que desde el punto de vista del desarrollo era interesante.
Mojolicious no está muy bien comentado y tampoco hay casi documentación. No obstante hay un canal de IRC con actividad, y es sencillo en sí mismo (el código es pequeño), lo que facilita las cosas (pero no mucho, sobretodo al principio).
No sé hasta que punto me vale para mi próximo proyecto (demasiado hágalo usted mismo en la parte de las vistas), pero algunos comentarios pueden ser:
- El diseño del framework es una pasada: puedes tenerlo todo en la cabeza, y resulta muy sencillo ser productivo desde el primer momento. Dispatcher, Controller y Renderer; no hay mucho más. Nunca se pone en tu camino, sino que deja que tus ideas fluyan hacia código de una forma muy natural (una vez pasadas las primeras horas de WTF!).
- Para las vistas han elegido un sistema de plantillas que básicamente permite empotrar código
Perla placer, cosa que puede ser buena o mala (dependiendo de lo claro que tengamos eso de separarvista-modelo-controlador). Si no nos gusta, podemos usar cualquier otro sistema de plantillas. - No hay modelo, o más bien que elijas cualquiera de los
ORMque hay en CPAN. Yo he ido a por Class::DBI (que no conocía, pero me ha resultado mucho más asequible queDBIx::Class). También puedes no usar un ORM, pero ya que estábamos... - Tiene una pila
HTTPcompleta, incluyendo un servidor. Me ha facilitado mucho el despliegue en el servidor de casa, que tengo con Apache en unchrootde frontal. - Es verdad que con
5.8.1es suficiente :o. En mi caso he intentado ser conservador, para no tener que instalar muchas cosas en producción solo por jugar, y me he quedado enClass::DBI,DateTime,YAMLyText::CSV, más el propio pack deMojoyMojolicious. - He desarrollado en un entorno muy diferente al de producción, y he tenido que hacer varios cambios (algunos algo sucios, ya subiré el código a alguna parte cuando esté seguro de que no he roto nada :P). No debería ser necesario decirlo, pero de
SQLiteaMySQLno es tan transparente como se puede esperar :S.
Respecto al resultado: pues estoy contento. Además, el amigo r0sk ya lleva tiempo que me ha dejado atrás con sus proyectos (algunos incluso con utilidad :D).
Espero que el servicio no me de muchos problemas, porque intentaré tenerlo funcionado mientras las circunstancias lo permitan.
Actualización: he publicado el código, así que cualquiera puede montarse un servicio similar en cuestión de minutos :P. Lo único que no está en el repositorio es el look & feel de la web de producción, pero eso es lo de menos ;).

![[xml]](/images/xml.gif)
