4 de Octubre, 2009

Probando un nuevo framework web

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 URL sea algo más semántica, un título y obligar a pasar por la página de preview antes de visitar la URL destino.
  • La funcionalidad de preview se puede activar desde el servicio para todas las URL (mediante una cookie).
  • 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 con JSON, 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 Perl a placer, cosa que puede ser buena o mala (dependiendo de lo claro que tengamos eso de separar vista-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 ORM que hay en CPAN. Yo he ido a por Class::DBI (que no conocía, pero me ha resultado mucho más asequible que DBIx::Class). También puedes no usar un ORM, pero ya que estábamos...
  • Tiene una pila HTTP completa, incluyendo un servidor. Me ha facilitado mucho el despliegue en el servidor de casa, que tengo con Apache en un chroot de frontal.
  • Es verdad que con 5.8.1 es 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 en Class::DBI, DateTime, YAML y Text::CSV, más el propio pack de Mojo y Mojolicious.
  • 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 SQLite a MySQL no 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 ;).

Anotación por Juan J. Martínez, clasificada en: perl, mojolicious.

Hay 3 comentarios

Gravatar

A mí con PHP me pasa un poco igual a ti (bueno, o eso creo) y es que se hace aburrido programar en él. De todos modos ¿has probado Symfony? Lo uso en el curro, para proyectos medianos está genial, en mi opinión es más completo que el tan popular CakePHP (el cual personalmente no me convence, antes me decantaría por RoR que es lo que hago para proyectos pequeños que he hecho de prueba, como el de url cortas, un pastebin o un blog sencillo)

Saludos

por un visitante, en 2009-10-04 17:54:42

Gravatar

Aunque has comentado que PHP no te interesa demasiado, llevo un tiempo usando CodeIgniter y me tiene enamorado. Se basa en el patrón modelo-vista-controlador y tiene unos vídeos al estilo RoR creando un blog sencillito.

También hay un fork del mismo llamado Kohana que está totalmente orientado a objetos y tiene algunos cambios, aunque no he llegado a probarlo.

por adobo, en 2009-10-04 22:29:39

Gravatar

Yo personalmente uso Symfony, es un framework que utiliza MVC, también tiene ORM (propel o doctrine), un sub-framework de formularios y otro de enrutamiento, sistema de cache, configuración en cascada, generador de backends, etc; en fin, está muy bien, y es el framework que utilizan en dailymotion.com , así que eso ya dice bastante jejeje además hay muy buena documentación y un sitio web llamado Symfonians con algún código fuente para examinar

Saludos!

por despai, en 2009-10-12 23:03:57

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: