Novedades en Dan versión 0.21

Ángel Ortega

He continuado con el desarrollo de Dan, el software de blogging que usa una cuenta de email IMAP4 como almacenamiento, y he llegado a la versión 0.21. Estos son los cambios:

La versión 0.10 estaba diseñada en tres pasos claramente diferenciados: el primero recorría la cuenta IMAP4 construyendo un árbol de «posts» y sus «comments» asociados como una sublista; el segundo recorría ese árbol, descargaba los mensajes RFC822 completos y completaba todos los campos necesarios de cada entrada, incluyendo las conversiones necesarias de formatos text/plain y text/html; y el tercero recorría ese árbol ya completo y generaba las páginas HTML. Esto quedaba muy elegante con procesos claramente separados pero tenía un problema serio de escalabilidad: el blog completo acababa cargado en memoria. He refactorizado todo esto para ahorrar memoria y ahora todos los pasos están entrelazados. Cada «post» y sus «comments» asociados se completan de uno en uno y son liberados de la memoria en cuanto se escribe el fichero HTML asociado.

Ya se genera un feed RSS de los 10 «posts» más recientes (este valor no es configurable).

Si un «post» contiene imágenes (o cualquier otra cosa) adjuntas, estas se descargan en el directorio de salida. Un mensaje en formato HTML puede referenciarlas directamente en tags img por su nombre (sin necesidad de trayectoria porque no hay subdirectorios). Si el «post» que incluye imágenes adjuntas está en formato text/plain, se añaden automáticamente tags img para cada una de ellas al final.

Si un mensaje está en formato text/plain pero incluye marcas de párrafo HTML, este se procesa como HTML.

El texto citado (es decir, líneas precedidas de >) se marca con una clase CSS especial.

Se han añadido más operaciones de limpieza de los contenidos originales.

Esto es lo que queda aún pendiente:

La gente no sabe usar el email; escribe encima del texto citado, incluye la copia completa del texto citado, etc. (los problemas de siempre del email). Además, está el problema del ruido que generan las firmas automáticas. Los «comments», por supuesto, incluyen todas estas mierdas. Es muy difícil y tedioso construir la maquinaria para borrar o corregir todas estas cosas y, sinceramente, no me apetece una mierda afeitar ese Yak.

Sigue habiendo problemas de escalabilidad. El concepto se basa totalmente en procesar la cuenta IMAP4 completa para construir el árbol; no hay atajo posible. Cuando el contenido sea grande el gasto de memoria y el tráfico de datos se disparará pese al refactoring mencionado más arriba. Sería posible hacer que solo se procesen los N mensajes más modernos (aunque el árbol de mensajes se tiene que seguir construyendo completo) y dejar los más antiguos en modo «congelado» (es decir, sin posibilidad de que entren comentarios nuevos). Esto añade una nueva lista de problemas: algunos «comments» válidos de mensajes congelados se quedarían sin procesar y se tendría que desactivar el borrado de ficheros desconocidos en el directorio de salida (los «posts» congelados pasarían a ser considerados «extraños» por el proceso de purga y eliminados).

No se está haciendo nada con los mensajes no válidos (es decir, aquellos que no son «posts» ni «comments»). Deberían moverse a una carpeta IMAP4 especial al detectarlos para 1) no volverlos a encontrar una y otra vez y 2) poderlos procesar manualmente de forma sencilla.

Al parecer he tenido mucha suerte porque el servidor IMAP4 que uso me manda siempre los mensajes por orden de llegada. Esto no está asegurado. Existe la extensión SORT en IMAP4rel1 que ayudaría a esto pero por lo visto es opcional y no todo el software servidor de IMAP4 lo proporciona. Dan debería hacer uso de esa opción (en lugar de confiar en el orden como hace ahora) y fallar en caso de que no esté disponible.

Cada vez que se procesa el blog se origina un montón de tráfico desde el servidor IMAP4. Esto se puede mitigar usando algún programa de sincronización de cuentas IMAP4 (que suelen estar optimizados para no castigar demasiado a los servidores) y generar el blog desde un servidor espejo local.

En resumen: Dan es una prueba de concepto que ha quedado bastante bien (y conciso; son apenas 521 líneas de Python sin dependencias externas de las cuales casi una tercera parte son comentarios). Es muy poco probable que continúe el desarrollo (a excepción de usar la extensión SORT porque me parece importante) y lo que queda pendiente de hacer no me interesa en absoluto.

Comments [Add new one]

Manuel Zamora

Tío, el resumen es lo más "tú".Loca idea genial --> la haces realidad (aunque parezca imposible) --> Ya te has quedado a gusto y pasas de ella.

Me encanta 😊

Un saludo

Manzam