¿por qué este cms?
en esta página documentamos nuestros requerimientos de publicación para gemini y la web y discutimos diferentes herramientas existentes, la que usamos actualmente, y el por qué sí o no las otras funcionarían (o qué les faltaría) para cumplirlos.
la discusión se centra en los sitios personales o islas, que cada una puede editar con Lichen.
Notas sobre uso de Lichenesta página queda bien acompañada por la de flujos de publicación alternativos.
Flujos de publicación alternativosrequerimientos
en Archipiélago I tenemos una combinación curiosa de necesidades respecto a varios niveles de involucramiento técnico que queremos permitir, protocolos donde servir, y ligereza de las herramientas.
específicamente, queremos:
- poder editar las islas desde una interfaz web.
- poder editar las islas subiendo/actualizando archivos via SFTP.
- poder editar las islas desde "dentro" del servidor (via SSH), utilizando editores de texto que estén ahí presentes.
- publicar las islas simultáneamente en la web (formato html) y en el protocolo gemini (formato gemtext).
- evitar duplicar trabajo para publicar en ambos formatos: tener una herramienta que convierta los archivos fuente a sus representaciones en html y gemtext.
- evitar tener que ejecutar manualmente dicha herramienta de conversión con cada edición que se realiza.
- permitir subir y compartir archivos de tipo arbitrario (incluido html).
- utilizar herramientas simples que consuman pocos recursos computacionales.
nuestra herramienta actual: lichen (php)
qué es lichen
Lichen is the simplest possible CMS for the web that is friendly enough for non-technical users
(Lichen es el CMS para la web más simple posible que es suficientemente amigable para usuari@s no técnic@s)
versiones de lichen
históricamente (?), Lichen ha tenido tres grandes versiones: la original (y la que usamos), escrita en PHP. Luego una versión en gForth, y finalmente un "fork" de esta llamado Lichen-Markdown.
Lichen PHP (unmaintained) Lichen (Forth) Lichen-Markdownlas tres versiones presentan una interfaz web minimalista que permite editar, crear y subir archivos, y ver la representación del archivo fuente al instante. Las tres versiones convierten los archivos de texto fuente a una versión html.
las tres versiones están pensadas como CMS para web únicamente, es decir que las páginas se editan via web y el resultado de esa edición se ve por la web. En su diseño no contemplan realmente la edición por otros medios ni el servirlos por otros protocolos.
diferencias entre versiones
las primeras dos versiones utilizan gemtext como el formato de texto fuente, y la tercera usa markdown. La justificación para usar gemtext es por su minimalismo / simplicidad y no necesariamente porque se promueva el uso del protocolo gemini (aunque winduptoy, quien creó lichen originalmente, sí lo usa).
una diferencia crucial entre la primera versión en PHP y las siguientes en Forth (además del lenguaje en el que están programadas), es que la primera convierte los archivos fuente ("renderea") a html cada vez que alguien visita una página, mientras que las otras dos hacen la conversión ya sea cuando una página es guardada desde la interfaz web, o ejecutando un script desde el servidor para re-convertir todas las páginas.
técnicamente, la segunda forma es más eficiente en recursos, pero para nosotres, pone en conflicto algunas de nuestras otras necesidades. esto lo discutimos abajo.
por qué usamos Lichen (PHP)
retomando nuestra lista de requerimientos, el usar Lichen PHP nos ha permitido:
- editar las islas desde la interfaz web dada por Lichen: esto funciona para quienes no quieren tener mucho involucramiento técnico en ese momento.
- también editar las islas por SFTP y SSH: como los archivos fuente que usa Lichen son archivos de texto en gemtext, los podemos editar manualmente por aparte.
- subir y compartir archivos de tipo arbitrario (incluido html).
- evitar duplicar trabajo para publicar en ambos formatos: Lichen es una herramienta que convierte los archivos fuente (gemtext) a html. Esto nos permite tener un servidor gemini que sirve los archivos gemtext directamente, y un servidor web que se vale de Lichen para convertirlos al momento en html.
- utilizar herramientas simples que consuman pocos recursos computacionales.
ahora, esto es lo crucial. Lichen-php nos permite:
- publicar las islas simultáneamente en la web (formato html) y en el protocolo gemini (formato gemtext): Lichen convierte automáticamente las páginas a html al ser visitadas. Esto implica que sin importar de qué forma hayan sido editados esos archivos (interfaz web, SFTP o SSH), siempre vamos a poder ver una versión en html.
gracias a esto, podemos:
- evitar tener que ejecutar manualmente dicha herramienta de conversión con cada edición que se realiza.
básicamente, sin importar el método de edición que utilicemos, nuestra preocupación es únicamente editar y guardar los archivos. La conversión a html es realizada automáticamente cada vez que alguien visita una página, y la conversión a gemtext no es necesaria porque los archivos ya están en ese formato.
ahora comparemos con otras versiones de Lichen y otras posibilidades más.
otras opciones (y por qué no las usamos)
Lichen (Forth)
en principio, Lichen Forth funciona igual que el otro EXCEPTO porque este realiza la conversión a html cuando el archivo se guarda desde la interfaz web.
es decir, Lichen Forth genera y guarda un archivo html al momento de presionar el botón de guardar. Esto en principio es más eficiente porque solo se hace la conversión una vez.
con este Lichen, editar los archivos gemtext via SSH y SFTP sigue siendo posible, y estos pueden ser servidos igualmente desde gemini.
ahora, el inconveniente es que esos archivos no serían convertidos a html automáticamente.
Lichen incluye un "build script" para realizar la conversión a html de todas las páginas.
como sea, esto implicaría posibles cambios en el flujo de trabajo:
- indicar a las islas que si editan los archivos gemtext via SSH, hay que después ejecutar el script de conversión para actualizar las páginas web. En principio este script no podría ser ejecutado subiendo los archivos via SFTP.
- alternativamente, ejecutar periódicamente con un cron job (cada minuto? cada 5 minutos?) el script de conversión en todas las islas para asegurar que siempre estén actualizadas. Un acercamiento menos "fuerza bruta" sería detectar si hay cambios y solo convertir cuando los haya, pero igual necesitaríamos esa revisión constante.
en su momento, el involucrar ese script ya sea manual (via SSH y no SFTP) o automáticamente resultó más inconveniente que seguir usando la versión PHP, que ya estaba instalada.
si quisiéramos migrar a esta versión de Lichen tendríamos que tomar en cuenta cómo ejecutar dicho script, e implementarlo.
Lichen-Markdown
esta versión de Lichen nos presentaría el mismo inconveniente que el anterior, AGREGANDO uno más: los archivos fuente son en markdown, no en gemtext. Si bien existen programas que convierten de markdown a gemtext, utilizar esta versión de Lichen implicaría lo siguiente, ADEMÁS de lo descrito arriba para Lichen Forth:
- "hackear" el código fuente de lichen para que al guardar la página en la interfaz web no solo se convierta a html sino también a gemtext.
- y/o "hackear" el script de conversión global para incluir también la conversión a gemtext.
otros CMS basados en markdown
cualquier otro CMS basado en archivos de texto en markdown (sin soporte para gemini/gemtext) nos presentaría los mismos inconvenientes que Lichen-Markdown:
- necesitaríamos "hackear" el CMS para que al guardar una página en markdown, no solo se convierta a html sino también a gemtext.
- alternativamente, necesitaríamos un script de conversión global que convierta todas las páginas de markdown a gemtext (ver abajo la discusión sobre generadores de sitios estáticos).
- teniendo ese script de conversión global, sería necesario 1) indicar a las islas que hay que ejecutarlo después de editar las páginas via SSH, y/o 2) ejecutarlo frecuentemente para asegurar que todo esté siempre bien convertido y actualizado.
Flounder
Flounder es una comunidad y un software que hace algo parecido a nosotres: es un cms web donde se escribe en gemtext y que permite tener una página replicada en la web y gemini automáticamente. Además, soporta manejar archivos via SFTP (pero no SSH).
flounderen su momento nos pareció una opción interesante para utilizar, pero:
- el principal problema era que originalmente compartíamos el servidor gemini con otros "hosts". Esto impedía que pudiéramos instalarlo dado que ocuparía totalmente el puerto 1965 para gemini.
- es un "armatoste" algo más complejo y opinionado, y por ejemplo no podríamos modificar la apariencia de cada isla ni podríamos subir archivos HTML propios.
generadores de sitios estáticos
en principio este tipo de generadores no están en contraposición con nuestro acercamiento actual y de hecho son discutidos abajo como un "flujo de publicación alternativo".
solo cabe mencionar aquí que no usamos este acercamiento como forma de publicación principal, justo por no ser "CMS": no tienen una interfaz web y por lo tanto no permitirían la edición de esa forma, que es algo que apreciamos de nuestra solución actual.
si algún generador sí tuviera una interfaz web, entonces muy probablemente aplicaría lo que mencionamos arriba sobre "otros CMS basados en markdown".
como sea, vale la pena rescatar que algunos de estos generadores suelen ofrecer opciones de conversión (a html y gemtext) que pueden ser interesantes para islas que deseen probar flujos de publicaciń alternativos:
Flujos de publicación alternativosconclusión (por ahora)
nuestro cms actual, Lichen PHP, cubre nuestras peculiares necesidades grupales a la vez que nos permite cierta flexibilidad para editar y publicar simultáneamente en la web y en gemini.
utilizar otros sistemas y/o involucrar Markdown en el flujo de trabajo implica agregar desarrollo y complejidad extra en los que por ahora no hemos podido invertir.
como sea, las islas son invitadas a probar (y hackear!) otras posibilidades tanto para su uso personal como para cubrir las necesidades de todas las islas, tomando en cuenta los requerimientos discutidos arriba.