Contenido

Magmax 5.0

El blog ha pasado por distintas etapas. Aquí os cuento la evolución del mismo.

MagMax 1.0: Drupal

Pues sí, el blog comenzó utilizando Drupal y hosteado en Quijost. Problemas: incompatibilidades, inseguridad, actualizaciones, spam, …

MagMax 2.0: Blogger

Decidí dejar a Blogger que se encargara. Así me olvidaba de toda la gestión. Problemas: sentí que dejaba de ser el dueño de mis posts.

MagMax 3.0: Jekyll/Octopress

Así comencé con los generadores estáticos de código. Octopress es un framework creado sobre Jekyll, y me pareció una buena idea.

Problemas: Es ruby, y comencé a tener problemas de compatibilidades. Al final, no escribía porque me daba pareza pelearme con él. Además, en generar el site tardaba 2 minutos.

MagMax 4.0: Nikola

Así que pensé… Si el problema es ruby, ¿Por qué no probar un generador estático en Python?

Y probé Nikola, que me ofrecía, además, más ayudas. Menudo error.

Aunque al principio muy bien, pronto comencé a tener los mismos problemas que con Jekyll: lento y problemas de incompatibilidades. A la mínima me hacían cambios incompatibles hacia atrás.

MagMax 5.0: Hugo

Y así llegué a Hugo.

La web ha pasado de tardar 2 minutos a tardar 2 segundos. Literalmente.

Además, no sólo no he perdido ninguna de las características que tenía con Nikola, sino que tengo muchas más, como que es multi-idioma nativo.

Pero había algo que me echaba para atrás. Durante la época que estuve usando Nikola comencé a pasar los artículos de Markdown a Restructured Text, con el fin de unificar formatos. Así que me encontré con 248 artículos por revisar, de los cuales sólo unos 70 estaban en Markdown.

En las migraciones anteriores utilicé programitas de migración que me había creado, Estos programas funcionaron bien sobre el 90% de los artículos, pero poco a poco la calidad había decrecido. Así que decidí hacer la migración a mano.

Migrando

Comencé con los artículos que ya estaban en Markdown, porque me suponían menos trabajo. Gracias a ellos cogí soltura en el Markdown que soporta Hugo.

Además, me permitió crearme algunas macros para Vim que me ayudaban con las tareas más rutinarias.

Semanas después, comencé a migrar los artículos en formato Restructured Text. Estos tenían el añadido de tener que cambiar también las cabeceras.

Finalmente, me creé tests para asegurar que no me había dejado nada. Los tests tenían esta pinta:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import os
import re
import pytest

FILES = [os.path.join('content', 'posts', x) for x in
os.listdir('content/posts')]

@pytest.mark.parametrize('filename', FILES)
def test_not_contains_code(filename):
    with open(filename) as fd:
        assert re.search(':code:', fd.read()) is None

Resultado: 1991 passed, 9 skipped in 2.62s

Puesta en producción

Y llegó el día de la puesta en producción. Es un estático, así que no tiene que dar problemas. Lo subo y… Error 404.

Tras mucho pelearme con GitHub, encontré el problema: al tener mi propio dominio tenía que crear el archivo CNAME con el nombre del dominio. Ahora sí… Subida a producción.

Compruebo que todo funciona y estoy orgulloso del cambio que me ha llevado, literalmente, meses. Lo anuncio a bombo y platillo y entonces, @recena me indica que el tema que elegí no funciona bien en móvil:

Así que tuve que poner otro tema deprisa y corriendo, y me costó algo más de 2 días encontrar otro tema adecuado y adaptarlo.

Si, desde el principio, hubiera compartido la evolución, probablemente el problema hubiera surgido antes y no me habría vuelto loco en el último instante.

Lecciones aprendidas

  • Las herramientas de migración están muy bien, pero fallan. Me encontré posts que no se podían ni leer, enlaces rotos, elementos que sólo funcionaban en alguno de los sistemas anteriores, ¡hasta cosas de Drupal!
  • Hugo está muy bien, pero sus errores son crípticos. Puede dejar de funcionar porque el tema que has elegido tiene una plantilla que usa algo que está vacío en un único post.
  • Hugo es muy potente. Aunque es Golang, las plantillas son las plantillas Golang y te permite expandirlo sólo usando dichas plantillas.