Año nuevo, blog nuevo
Llevaba un mes entero sin escribir, ¿creíais que estaba descansando en una playa paradisíaca?
Evidentemente no, primero porque las playas no son mis lugares favoritos, y segundo porque realmente estaba haciendo algo gordo. En realidad eran varias cosas, pero la primera que puede ver la luz ahora mismo es esta. Este propio blog. ¿Lo véis? Es nuevo. Está hecho a mano en Rust. Y aunque todavía le faltan algunas cosas, ya es lo suficientemente capaz como para sustituir a WordPress.
WordPress me gusta, funciona bien, es un producto intuitivo, con buen marketing y con una factura técnica aceptable. Pero había varios "problemas":
- WordPress usa MariaDB (o MySQL), ahora mismo quiero aprovechar la potencia de SQL estándar y en eso solo PostgreSQL me ofrece lo que busco. No es que en este blog lo vaya a usar, pero así evito tener que mantener dos bases de datos paralelamente en la misma Raspberry
- soy un programador que no ha programado su blog (y aunque sea una tontería, admiro mucho a la gente que se programa sus propios blogs)
- quería probar Rust en producción
- quería probar tecnología relacionada con la web semántica
Como veis, ningún motivo real, podríamos decir que lo he hecho por que sí.
Tecnologías usadas
Este sistema de blog, que he llamado Diario y que es software libre, aunque hay que modificar unas cuantas cosas, es un mejunje de varias tecnologías. Por un lado quería usar Rust en producción y por otro quería probar tecnología relacionada con la web semántica, así que hay varios lenguajes de programación involucrados.
- Rust es el lenguaje de programación principal
- Rocket es el servidor web, esto me obliga a usar nightly. Sin embargo Rocket me parece un framework web muy bien diseñado y funciona muy bien
- Diesel como ORM. Pero no estoy usando migraciones, así que al principio me costó pillar la documentación. Es un ORM muy bien diseñado pero cuando hay un error de compilación es bastante críptico
- Tera como motor de plantillas
- y alguna librería más como Chrono, Regex, Ring o Serde
- PostgreSQL como base de datos
- Python para la funcionalidad del formulario de contacto. La razón es que no conseguí hacer funcionar lettre en un tiempo razonable para poder enviar emails. Así que uso el módulo smtp de Python.
- XSLT, para generar los feeds RSS, el sitemap y para alguna cosa más
- XSLT no lo había usado nunca, pero no es complicado, eso sí, no hay librerías en Rust para usarlo, así que he usado xsltproc de línea de comandos
Quizá todo te parezca normal, hasta lo de XSLT. ¿Por qué he usado XSLT cuando ya tengo un sistema completo en Rust, que solo es cuestión de programar los feeds RSS y ya? Pues porque quiero que este blog tenga una API, una API de la web semántica.
Para ello, tiene que aceptar peticiones SPARQL. Todavía no lo he conseguido, pero viendo la falta de herramientas y librerías para trabajar con SPARQL, mi idea es generar un fichero con información RDF donde se almacena TODA la parte pública del blog. Allí se ejecutarán las consultas y de paso, me sirve para generar ficheros RSS y similares en XML de forma fácil y sencilla, transformando el fichero RDF original.
Código fuente
El código fuente del sistema, por si queréis echarle un ojo, está aquí: https://github.com/aarroyoc/diario
Feedback
Todavía quedan muchas cosas, como por ejemplo la API SPARQL (aunque eso casi está). He intentado además que todas las URLs antiguas sean compatibles con el nuevo sistema, aunque puede haber fallos, lo mismo con el formato de algunas páginas. Me gustaría que comentáseis que cosas échais en falta, hay que añadir, qué tal el diseño del blog y ese tipo de cosas. Al final sois vosotros los que vais a leerlo más veces que yo.