Gestión de contenidos con Org mode y Hugo
Aprovecha la potencia de ox-hugo
En enero de 2016 expliqué cómo había pasado la web de infotics.es de Wordpress a Jekyll. Ambos se pueden considerar gestores de contenido pero mientras el primero trabaja con PHP y SQL -es decir, genera los contenidos haciendo llamadas con PHP a la base de datos SQL- el segundo trabaja con un lenguaje de programación -en el caso de Jekyll, con Ruby- que se ejecuta en el servidor o en local y general los contenidos estáticos -de ahí el acrónimo SSG, Static Site Generator, generador de contenidos estáticos.
Desde ese momento, infotics.es pasó a estar alojado en un servidor con Debian que servía con Apache los contenidos que había generado con Jekyll en local. Aproveché también para cambiarlo al subdominio blog.infotics.es, y así está ahora.
Jekyll no era el único SSG, había otros -Pelican o Nikola en Python, por ejemplo- pero el soporte de Github -la web de Github está creada en Jekyll porque Jekyll está creado para Github- y las posibilidades de aprender me parecieron una buena opción.
El flujo de trabajo
Sin embargo, ese primer artículo que anunciaba el cambio también fue el primero de tan solo tres artículos publicados con este sistema:
- Los artículos se escriben en Org-mode en Emacs.
- Luego los exporto a Markdown.
- Los copio a la carpeta posts.
- Actualizo el repositorio git.
- Se publican.
Este flujo de publicación me resultó complicado porque no lo automaticé absolutamente y, además, porque no me convencía tener el contenido replicado: escrito en Org-mode y luego exportado a markdown para Jekyll.
Por tanto, solo fueron dos más los artículos publicados: día de los datos abiertos España 2016 y de github a jekyll con git por ssh en vps con debian, apache y letsencrypt. Este último artículo explicaba en detalle todo el reto tecnoloógico del blog que iba y va más allá del propio contenido y que es una apuesta global por la soberanía tecnológica. Y hay otras derivadas por ahí. Pero sigamos con la gestión del contenido.
Aunque seguí escribiendo, mi escritura ya no iba tanto por el formato blog sino por la documentación de todo lo que había aprendido, iba aprendiendo o quería aprender de las tecnologías que me interesan, y hacerlo además siguiendo el paradigma de la programación literaria y la investigación reproducible que están en la esencia de mi elección por Emacs + Orgmode + Babel. Esos textos siguen en local, esperando ser publicados. Faltaba, por tanto, encontrar un flujo de publicación mejor o mejorar el utilizado.
Además de los ya citados Nikola y Pelican también he probado Hexo (nodejs), o-blog (Org-mode), y otros. Durante un tiempo me parecía que Hexo podía ser lo que estaba buscando porque tenía soporte nativo para Orgmode (plugin hexo-renderer-org) y Yen-Chin explicaba cómo hacerlo fácil. Suin embargo, la experiencia no fue todo lo satisfactoria que esperaba.
Ojo, con esto no quiero decir que el resto de tecnologías o métodos sean peores, sino que a mí no me han servido. A veces por desconocimiento, por fallos no resueltos, por no dedicarle el tiempo necesario en la mayoría de los casos… Sigamos.
Hugo y ox-hugo
Así llegamos a Hugo, el framework escrito en Golang, que ha sido el elegido “por culpa de” kaushalmodi y su ox-hugo y que cada vez está utilizando más gente.
El motivo es que se ha ajustado a lo que esperaba y me funciona. ox-hugo es una extensión para Emacs Org-mode que exporta el contenido de Org-mode al Markdown compatible con Hugo, en concreto a la versión de Markdown Blackfriday, incluidas las cabeceras -soporta TOML y YAML- y lo inserta en la estructura de plantillas de Hugo.
De hecho, ox-hugo se basa en ox-blackfriday.el -la extensión para exportar Org-mode a Markdown Blackfriday- a la que añade la funcionalidad relativa a Hugo.
Instalación de ox-hugo y configuración de emacs
ox-hugo propone dos vías de exportación que también son dos formas de almacenar/gestionar el propio contenido y el contenido publicado en concreto:
- Un archivo por artículo.
- Un archivo con todos los artículos.
La primera opción fue la que probé inicialmente, ya que se ajustaba a mi flujo de trabajo habitual. Sin embargo, la idea de un archivo único se me antojó interesante, muy en la línea de gestión de contenidos más largos en el mismo documento pero donde las partes del contenido se pueden gestionar en conjunto o por separado. Así ocurre en general con documentos que obedecen a un dominio determinado o que merecen ser compilados, como podría ser un libro, una revista -de papers o de un congreso- o incluso una web. Así ocurrió con el paso de la web de documentos a la web de datos, de alguna manera. Y así podíamos optimizar también la gestión de los contenidos que manejo: cuando empiezas un blog, gestionar un número bajo de artículos parece una tarea realizable; cuando llevas años escribiendo, es un poco más complicado.
Por tanto, me imagino pasar de tener 200 archivos Org-mode a un único archivo, donde cada artículo tiene sus etiquetas y sus propiedades, al estilo Org-mode.
Y así lo podéis ver, con cinco artículos publicados desde que empecé en junio de 2018, más éste y muchos otros que espero publicar en breve.
Archivo fuente
Una copia de los artículos publicados en formato Org-mode se encuentra en este repositorio.