Páginas de error 404 personalizadas en Pelican

Cuando comencé mi aventura con el generador de contenido estático Pelican cometí muchas equivocaciones, por eso al principio me aparecian muchos errores 404 de páginas o recursos no encontrados.

Al principio, el servidor web me mostraba una página de error genérica, pero lo mejor es ofrecer una página personalizada que ofrezca algún tipo de ayuda.

En mi caso, puse un enlace al archivo general donde están enlazados todos los artículos del sitio y un cuadro de búsqueda.

Pero vámonos por pasos.

Crear la página personalizada

Edición del archivo 404.md

En la carpeta content / pages de mi proyecto hice un archivo con el nombre 404.md con un contenido muy similar a este:

Title: Archivo no encontrado
Status: hidden
Save_as: 404.html

El artículo solicitado no pudo ser localizado.

Tal vez quiera revisar el [Archivo general](https://centaurodelnorte.com/archivo.html).

Noten los encabezados, son importantes.

Informar al servidor web

Ahora hay que informarle al servidor web que existe una página personalizada para mostrar cuando existan estos errores.

Si estan usando un servidor web Apache o similar (en mi caso uso el servidor LiteSpeed ). Para eso hay que modificar el archivo .htaccess (o crearlo si no existe) y agregar esto:

# Error 404
ErrorDocument 404 /404.html

Con eso será suficiente.

Un tip adicional

Esto lo descubrí un poco a la mala. El archivo .htaccess no se genera automáticamente en Pelican a menos que así lo configuren.

Para eso, hice un archivo llamado htaccess.txt en la carpeta content / assets con todas las modificaciones que le he hecho a mi archivo .htaccess (incluyendo la anterior).

En el archivo de configuración de Pelican me encontré con el diccionario EXTRA_PATH_METADATA y agregué el archivo htaccess.txt como se muestra a continuación.

EXTRA_PATH_METADATA = {
    'assets/robots.txt': {'path': 'robots.txt'},
    'assets/favicon.ico': {'path': 'favicon.ico'},
    'assets/htaccess.txt': {'path': '.htaccess'},
}

De esa forma toma el contenido del archivo htaccess.txt y lo copia correctamente como un archivo .htaccess en la carpeta output del proyecto.

Y lo seguirá haciendo cada vez que genere el contenido estático de mi sitio.

¿Le han dado un vistazo a Pelican? en estos días de tanta amenaza informática vale la pena considerar este tipo de herramientas.

¡Hasta la próxima!.

Convertir archivos JPG a WebP con Python

Ahora les quiero compartir un pequeño programa en Python para convertir archivos JPG a WebP.

Primero que nada les ofrezco una disculpa a mis 4 lectores, con la depresión de la pandemia no dan muchas ganas de escribir, pero esto ya está durando mucho y no se puede estar tanto tiempo preocupado, lo que sigue es un proceso de adaptación a la nueva realidad y ni modo ¡A darle átomos!

Decidí dejar de estar ocioso y aprender una nueva habilidad. Desde hace tiempo me ha estado haciendo ojitos Pelican un generador de sitios web que utiliza Python (¡Obvio!).

Migrar este blog sería algo en exceso complicado (aunque no lo descarto), por eso decidí hacer pruebas con algo más pequeño, mi otro blog Centauro del Norte.

Las ventajas son muchas, el sitio generado no requiere una base de datos, tienes un mayor control de todos los aspectos del sitio, carga mucho más rápido, aunque eso si, requiere de más conocimientos técnicos.

WebP el formato gráfico de Google

Durante la migración quise probar algo nuevo, cambiar todos los archivos de JPG a WebP. En general son archivos más pequeños, aunque he tenido resultados mixtos en este punto. Dicen que tienen una carga más rápida y aparentemente es cierto. Lo he probado en Chrome y con Firefox y las imágenes aparece como de rayo.

Sin embargo, convertir las imágenes no era algo sencillo. WordPress guarda todas las imágenes en una carpeta que se llama uploads y para conservar algo de orden almacena los archivos en subcarpetas de año y mes.

Probablemente hay otras formas de abordar este problema pero a mi se me ocurrió hacer un programa en Python inspirado en programas que ya había hecho para otros fines.

Lo primero es establecer un directorio de trabajo, luego hacer un barrido a esa carpeta y sus subcarpetas.

Si encuentra un archivo JPG inicia una conversión y genera un archivo del mismo nombre pero con extensión WebP.

Veamos el código.

import os
from PIL import Image

carpeta_raiz = "/carpeta/de/trabajo/"

# Localizar los archivos jpg
for root, dirs, files in os.walk(carpeta_raiz):
    for file in files:
        if file.endswith(".jpg"):
            archivo = os.path.join(root, file)
            archivo_nuevo = archivo.replace('.jpg', '.webp')

            # Convertirlos a WebP
            im = Image.open(archivo).convert("RGB")
            im.save(archivo_nuevo,"webp")

            print(archivo_nuevo)        

print("¡Trabajo terminado!")

Como pueden ver es un código muy sencillo, se puede adaptar para otro tipo de conversiones sin problemas.

Una vez que tuve los archivos WebP, lo único que tuve que hacer es una búsqueda y reemplazo en los archivos markdown que sirven para generar los artículos del sitio.

Ejemplos los pueden ver en: Ex Hacienda La Loma, cuna de la División del Norte y en Mercado Municipal General Francisco Villa. Ambos artículos contienen una buena cantidad de imágenes en formato WebP y creo que tienen un tiempo de carga mucho más que razonable. Bueno, eso digo yo, porque después de la primer carga entran en el juego los cachés de los navegadores.

Espero que les sea de utilidad y procuraré escribir más seguido, que también a mi me hace falta.