De vez en cuando hago cosas de provecho, he aquí el resultado de algunas de ellas.
Hace ya más de año y medio empecé a trabajar en la Universidad de Sevilla, y después de un tiempo me sorprendió que hubiera un servicio tan usado y que tuviera tan mala pinta a la vez: el servicio de consigna. Para quien no lo conozca, es un servicio destinado a compartir ficheros grandes que por correo electrónico no podrían enviarse.
La consigna que se usaba estaba basada en un software bastante antiguo (QuiXplorer), modificado hasta la saciedad para que tuviera la funcionalidad que se deseaba embutida en una interfaz horrorosa y anti-intuitiva. Cuando me tocó modificarlo un poco para implementar cierta funcionalidad, descubrí que además tenía un código infernal. Tras toquetearlo, el software se publicó con una licencia libre (proyecto tfconsigna) y algunas universidades usaron más o menos su misma base para sus servicios de consigna.
Pues bien, allá por diciembre de 2008 decidí que aquello no podía seguir así y me lie la manta la cabeza. Usando un framework PHP llamado CodeIgniter, muy a lo Ruby on Rails, y teniendo en mente siempre que el nuevo desarrollo debía ser algo muy fácil de usar, salió la nueva consigna de la Universidad de Sevilla.
Las mejoras que introduce respecto a la anterior son muchas, entre ellas:
Empecé además el proyecto con la intención de publicarlo con una licencia libre, y esta semana finalmente he publicado el código de consigna. La licencia elegida es la Affero GPL 3, por la cual el uso en red del proyecto implica poner a disposición de los usuarios el código del mismo. En la consigna de la US lo hemos hecho en condiciones, colocando el enlace en el pie de cada página:

El sistema de gestión de proyectos se llama Redmine y también me entretuve montándolo, espero publicar una guía de instalación en breve.
Anuncié la publicación del código en varias listas de correo de gente que pudiera estar interesada, y de la experiencia de poner en marcha el sistema y de publicar el código voy a contar mis experiencias:
Cada pocos días se reciben mensajes de usuarios diciéndome que la consigna nueva es una m*****, que no encuentran tal o cual cosa, o que "tienen problemas con dos ficheros" (no dicen qué problema ni qué dos ficheros). Reconozco que hay sugerencias que eran muy razonables y que he implementado finalmente, pero por lo general el tono de estos mensajes es bastante hostil. Creo que al usuario final no le gusta que le cambien lo que conoce, y admito que la atención al usuario es una actividad poco agradecida.
En más de una ocasión he encontrado/me han informado de un error de consideración en la consigna y me he visto intentando solucionarlo a todo trapo. Por muchas pruebas que hagas antes, siempre surge algún imprevisto, y la solución tiene que llegar a contrarreloj.
Es muy gratificante ver que, pese a las quejas, la gente hace un uso intensivo de consigna. De hecho se han subido unos 3400 ficheros desde el 20 de abril, día de la puesta en marcha, por la máquina han pasado más de 350GB de datos y actualmente hay 65GB ocupados en el disco.

A la hora de liberar el código me he encontrado mensajes interesándose por el proyecto, pero también algún mensaje crítico. Pese a todo, considero que es importante haber hecho público el proyecto, porque me obliga a tener más cuidado con todo lo que escribo, ya no soy el único que lo va a ver :). Además, si finalmente a alguien le interesa y contribuye con algo de código o la pone en funcionamiento, habrá merecido la pena.
Some time ago I wanted IceWM to check my Maildir mailbox. I found an old patch, but it was for IceWM 1.0.9, so I started my own patch.
I don't know so much about C++ programming, just about C, but I think my code doesn't look much as an ugly hack.
To apply the patch you have to compile IceWM. Download IceWM source and this patch, and apply it as follows:
$ tar xzf icewm-1.2.XX.tar.gz
$ cd icewm-1.2.XX/
$ patch -p1 < ../maildir-icewm-1.2.XX.diffIf there were no errores, you can now just compile IceWM as usually.
To use the Maildir feature, change your ~/.icewm/preferences file and set MailBoxPath to maildir:///home/user/Maildir, for example. Don't forget to activate TaskBarShowMailboxStatus.
It's recommended to move large Maildir subdirectories out of your main Maildir, because it may slow down the mail check process.
This patch looks your maildir recursively for new mails in new/ subdirectories.
Please, note that IceWM mail checker doesn't usually change between versions, so last patch should work with newer versions of IceWM.
Existe en IceWM la posibilidad de que te informe cuando llega un correo nuevo. IceWM te permite comprobarlo mediante POP3, IMAP e incluso en un fichero mbox, pero no te permite hacerlo en un buzón en Maildir.
Como parece que nadie se animaba a hacer el parche para IceWM, lo he hecho yo. Puede ser algo chapuza, pero funciona. No tengo mucha idea de C++, aunque tampoco he necesitado saber demasiado, ya que no es un parche que presente gran dificultad. Hace uso de funciones como stat(), opendir(), readdir(), etc.
El parche ha sido creado para IceWM en su versión 1.2.16 y para la versión 1.2.18, aunque supongo que iré actualizándolo. De todas formas, los ficheros que modifica (src/amailbox.*) no se suelen modificar entre versiones, por lo que el parche seguirá funcionando.
Hay que bajar el código fuente de IceWM, descomprimirlo y aplicar el parche. El proceso lo describo abajo.
$ tar xzf icewm-1.2.XX.tar.gz
$ cd icewm-1.2.XX/
$ patch -p1 < ../maildir-icewm-1.2.XX.diffTras esto, y si no ha habido ningún mensaje de error, el parche estará aplicado y podremos compilar IceWM normalmente.
Para hacer uso del parche, en nuestro ~/.icewm/preferences hay que modificar la opción MailBoxPath, dándole un valor como maildir:///home/usuario/Maildir. No debemos olvidarnos de activar el módulo de comprobación de correo, TaskBarShowMailboxStatus.
Nota: el sistema de comprobación de correo no suele cambiar de una versión a otra de IceWM, por lo que no hay problema en usar el último parche disponible. Por ejemplo, el parche para la versión 1.2.25 es aplicable a la versión 1.2.31 y funciona correctamente.
El parche colgado anteriormente (hasta 8/diciembre/2004) funcionaba de forma parcial. Se basaba en los directorios new/ y fallaba con el formato más extendido de Maildir (subdirectorios .directorio.subd/{cur,new,tmp} en vez de directorio/subd/{new,cur,tmp}. Por eso lo he corregido y parece que ya funciona bien. Se aconseja aplicar este nuevo parche en lugar del antiguo.
El parche comprueba los directorios recursivamente (vaya, la RAE no acepta recursivo...mejor recurrente), buscando ficheros que no tengan el flag 'S' activado. Este flag es el que indica que el mensaje ya se ha leído. Se aconseja mover de sitio las carpetas con muchos mensajes antiguos, porque puede ralentizar mucho el proceso.
Es bastante probable que existan fallos en el parche. Se agradecería cualquier comentario a la dirección de contacto.
Ya existía un parche para IceWM con esta funcionalidad, pero se creó en el 2002 para la versión 1.0.9. Aunque el parche es posible aplicarlo, porque el código fuente que modifica no ha cambiado demasiado desde esa versión, no mira en los distintos directorios del buzón, lo que lo limita mucho. Además... la verdad es que no vi que existía tal parche hasta después de acabar el mío, así que... :)