JustOneScript - SSG
Estuve trabajando en un generador de sitios estáticos al que llamé JustOneScript-SSG, orientado principalmente a la publicación de blogs, y otro tipo de sitios centrados en el contenido, y de publicación periódica.
Uso
Escribimos nuestro contenidos en un archivo .md, corremos el comando python
justonescript.py build, y el sitio aparece en la carpeta output. Nada más (y
nada menos) que eso.
¿Por qué?
La idea surgió de las múltiples adaptaciones que le fui haciendo a mi versión modificada de bashblog. Bashblog es un script en bash que genera un sitio web estático a partir de archivos escritos en markdown. Está buenísimo, pero es un poco limitado en algunos aspectos que yo quería ampliar, y le fui haciendo parches no muy prolijos a lo largo de los años.
Principalmente, quería agregar las siguientes prestaciones:
- Permitirme definir la fecha de publicación. Bashblog toma como fecha de publicación el momento en que el archivo fue guardado. Eso quita mucha flexibilidad, a veces escribo algo que quiero publicar en una fecha futura, y bashblog no me permitía definir la fecha. Tenía que simular que era un archivo recién escrito para que anduviera bien.
- Quería evitar regenerar los archivos que no cambian. ¿Para qué volver a procesar lo que no va a cambiar?
- Quería ordenar la detección de título y etiquetas, y tener la flexibilidad de cambiarlo a futuro.
- Quería especificar un breve párrafo resumen para que se muestre en la página de inicio, y poder decidir si esa presentación debía repetirse o no en el artículo.
- Quería facilitar la tarea de tener imágenes que ilustren cada artículo, con una manera fácil y consistente de indicar la atribución a los autores de cada imagen.
- Quería organizar toda la información (metadata) del artículo al comienzo, en el frontmatter, en lugar de tener que procesar todo el texto del artículo para encontrar esa información.
- Que sea configurable a través de un archivo
.config.py, que simplemente defina variables en Python. - Y quería lograr todo esto sin instalar un framework, con múltiples dependencias. No solamente genera un sitio web simple, también es simple en la máquina del autor.
Ventajas
Respecto de otros SSG, encuentro algunas ventajas importantes:
- Cero dependencias de ecosistema, no hay nada que dependa de una actualización de Node o de un plugin de terceros. Es un solo script con poquísimas dependencias de paquetes muy difundidos del ecosistema Python.
- El HTML que genera no tiene capas de abstracción intermedias; si algo falla, hay un solo lugar que analizar.
- Arranca en milisegundos.
- Totalmente adaptable. Cada autor/a puede modificarlo sin aprender las convenciones internas de otro proyecto.
- El sitio no queda "pegado" con ninguna plataforma ni framework, siempre vamos a tener nuestros artículos escritos en Markdown en una carpeta, que puede ser migrado a otra plataforma con bastante facilidad.
- Muy seguro. Como cualquier sitio estático, el resultado que se va a generar no es más que un conjunto de archivos html, css y algún script en javascript. No puede tener intrusiones, porque no hay dónde entrar.
- Eficiente. Al ser un sitio estático, no tiene backend, ni bases de datos, ni nada. Requiere muy bajo cómputo en el servidor, y consume poco ancho de banda.
- El resultado generado es compatible con sitios que permiten alojamiento gratuito, como GitHub pages, por ejemplo.
Desventajas
Obviamente, también tiene sus desventajas; eso depende de cada necesidad:
- Todo el manejo de javascript, CSS, etc. es 100% flexible, pero eso implica que, si se prefiere no utilizar lo que viene por default, debe ser modificado a mano.
- No tiene soporte para imágenes responsive: si bien el sitio generado se ve bien en celulares, tablets o computadoras; se utilizan las mismas imágenes en todas las versiones. Puede no ser óptimo si el sitio va a depender intensivamente de este recurso. Sin embargo, va a funcionar bien para un sitio en donde lo principal es el texto, y las imágenes solamente sirven como recurso de apoyo. Esta es una de las prestaciones que me gustaría agregar a corto plazo.
- No es multiidoma: obviamente podemos escribir en cualquier idioma, pero si, por ejemplo, queremos que el sitio tenga una versión en inglés y otra en español, no es una buena opción. Nikola, por ejemplo, es muy útil si este es tu caso.
- No hay modo "watch + hot reload". Es decir, no podemos ir viendo cómo va a quedar el artículo mientras lo escribimos. Tenemos que terminar de escribir, generar el sitio y ver cómo quedó. Obviamente, podemos volver a generar cuantas veces sea necesario, y lleva apenas una fracción de segundo. Pero no es algo automático.
- No hay un ecosistema de themes o plantillas prediseñadas. Podés hacer lo que quieras en cuanto al aspecto visual, pero, si no queremos usar la opción por defecto, tendremos que generar el CSS por nuestra cuenta.
Público objetivo
Usar este script requiere de ciertos conocimientos. Obviamente, no tiene nada secreto y es algo que cualquier persona puede aprender, pero requiere algunos mínimos conocimientos técnicos:
- Saber escribir Markdown (se puede aprender en media hora).
- Uso de git (no es indispensable, pero es útil).
- Cierta familiaridad (mínima) con la línea de comandos.
- Autogestionar la publicación en Internet del sitio Web, el SSG "no sabe nada" acerca de dónde se publicará el sitio.
Tags: articulos, castellano, cultura-libre, herramientas, programacion, python