Año nuevo, framework nuevo
Estoy escribiendo un framework para desarrollar sitios Web estáticos multilingües como proyecto para aprender programación funcional con Guile y para cubrir mis propias necesidades con mi sitio Web, que no he podido satisfacer con otro software similar.
Ayer por la mañana terminé de escribir las últimas líneas del primer prototipo del framework. Lo estoy escribiendo en GNU Guile. Ya estoy usando el framework para este sitio Web.
Software para generar sitios Web estáticos hay, y muchos, pero en mi experiencia personal con los que he probado he encontrado dos problemas que siempre me dejan insatisfecho:
- Dificultad para internacionalizar el sitio. Esto incluye URL de los recursos, las plantillas y los datos que se incrustan en ellas.
- Enfoque casi exclusivo en el concepto de blog, no de sitio Web que puede tener varios componentes como un blog, un sistema de administración de proyectos, documentos o tareas, etc. Generalmente es: escriba entradas en un formato como markdown y defina unas plantillas HTML donde se van a incrustar las entradas del blog.
Entonces, aprovechando mi interés reciente en programación funcional y Guile, me puse a escribir mi propia herramienta para desarrollar y mantener mi sitio.
En el prototipo que acabo de terminar, ya no tengo los dos problemas que mencioné arriba. El primer problema lo resolví usando los procedimientos de Guile para cambiar locales en tiempo de ejecución, GNU gettext para generar catálogos de traducción del contenido del sitio y Poedit para traducir los catálogos. Para resolver el segundo problema decidí usar el concepto de aplicaciones como componentes que extienden un sitio Web (cosa que saqué de mi experiencia previa con Django).
Así se ve la estructura general de archivos fuente de mi sitio Web:
website ├── apps ← Aplicaciones (Escritas en Scheme) │ ├── base │ ├── blog │ └── pms ├── locale ← Catálogos de traducción ├── static ← Archivos como imágenes, CSS, JavaScript, etc. ├── resources.scm ← Índice de todos los recursos del sitio ├── settings.scm ← Configuración del sitio └── utils.scm ← Herramientas
La interfaz de línea de órdenes del framework incluye las tres opciones siguientes para manipular sitios Web:
- build: construye el sitio Web a partir de los archivos fuente.
- run: ejecuta el sitio Web en un servidor de pruebas localmente para ir probando cosas en el navegador Web durante el desarrollo del sitio.
- deploy: sube el sitio Web a un servidor de producción.
Aunque ya me siento relativamente cómodo desarrollando mi sitio con él, todavía no quiero publicar el framework. Por un lado, esto lo estoy escribiendo como una herramienta para mis propias necesidades; por otro lado, todavía estoy muy torpe en Guile, en programación funcional y abstrayendo conceptos del dominio como para empezar a mantener un proyecto público con usuarios finales.
Este año le sigo trabajando de a poquito.
Temas relacionados: