Title: [FR] Méthodes de publication de mon blog sur plusieurs médias | |
Author: Solène | |
Date: 03 January 2021 | |
Tags: life blog francais | |
Description: | |
On me pose souvent la question sur la façon dont je publie mon blog, | |
comment j'écris mes textes et comment ils sont publiés sur trois | |
médias différents. Cet article est l'occasion pour moi de répondre | |
à ces questions. | |
Pour mes publications j'utilise le générateur de site statique | |
"cl-yag" que j'ai développé. Son principal travail est de générer | |
les fichiers d'index d'accueil et de chaque tags pour chacun des | |
médias de diffusion, HTML pour http, gophermap pour gopher et gemtext | |
pour gemini. Après la génération des indexs, pour chaque article | |
publié en HTML, un convertisseur va être appelé pour transformer le | |
fichier d'origine en HTML afin de permettre sa consultation avec un | |
navigateur internet. Pour gemini et gopher, l'article source est | |
simplement copié avec quelques méta-données ajoutées en haut du | |
fichier comme le titre, la date, l'auteur et les mots-clés. | |
Publier sur ces trois format en même temps avec un seul fichier source | |
est un défi qui requiert malheureusement de faire des sacrifices sur | |
le rendu si on ne veut pas écrire trois versions du même texte. Pour | |
gopher, j'ai choisi de distribuer les textes tel quel, en tant que | |
fichier texte, le contenu peut être du markdown, org-mode, mandoc ou | |
autre mais gopher ne permet pas de le déterminer. Pour gémini, les | |
textes sont distribués comme .gmi qui correspondent au type gemtext | |
même si les anciennes publications sont du markdown pour le contenu. | |
Pour le http, c'est simplement du HTML obtenu via une commande en | |
fonction du type de données en entrée. | |
J'ai récemment décidé d'utiliser le format gemtext par défaut | |
plutôt que le markdown pour écrire mes articles. Il a certes moins de | |
possibilités que le markdown, mais le rendu ne contient aucune | |
ambiguïté, tandis que le rendu d'un markdown peut varier selon | |
l'implémentation et le type de markdown (tableaux, pas tableaux ? | |
Syntaxe pour les images ? etc...) | |
Lors de l'exécution du générateur de site, tous les indexs sont | |
régénérées, pour les fichiers publiés, la date de modification de | |
celui-ci est comparée au fichier source, si la source est plus | |
récente alors le fichier publié est généré à nouveau car il y a | |
eu un changement. Cela permet de gagner énormément de temps puisque | |
mon site atteint bientôt les 200 articles et copier 200 fichiers pour | |
gopher, 200 pour gemini et lancer 200 programmes de conversion pour le | |
HTML rendrait la génération extrêmement longue. | |
Après la génération de tous les fichiers, la commande rsync est | |
utilisée pour mettre à jour les dossiers de sortie pour chaque | |
protocole vers le serveur correspondant. J'utilise un serveur pour le | |
http, deux serveurs pour gopher (le principal n'était pas | |
spécialement stable à l'époque), un serveur pour gemini. | |
J'ai ajouté un système d'annonce sur Mastodon en appelant le | |
programme local "toot" configuré sur un compte dédié. Ces | |
changements n'ont pas été déployé dans cl-yag car il s'agit de | |
changements très spécifiques pour mon utilisation personnelle. Ce | |
genre de modification me fait penser qu'un générateur de site | |
statique peut être un outil très personnel que l'on configure | |
vraiment pour un besoin hyper spécifique et qu'il peut être difficile | |
pour quelqu'un d'autre de s'en servir. J'avais décidé de le publier | |
à l'époque, je ne sais pas si quelqu'un l'utilise activement, mais au | |
moins le code est là pour les plus téméraires qui voudraient y jeter | |
un oeil. | |
Mon générateur de blog peut supporter le mélange de différents | |
types de fichiers sources pour être convertis en HTML. Cela me permet | |
d'utiliser le type de formatage que je veux sans avoir à tout refaire. | |
Voici quelques commandes utilisées pour convertir les fichiers | |
d'entrées (les articles bruts tels que je les écrits) en HTML. On | |
constate que la conversion org-mode vers HTML n'est pas la plus simple. | |
Le fichier de configuration de cl-yag est du code LISP chargé lors de | |
l'exécution, je peux y mettre des commentaires mais aussi du code si | |
je le souhaite, cela se révèle pratique parfois. | |
```Code Common-lisp pour la déclaration des convertisseurs texte vers html | |
(converter :name :gemini :extension ".gmi" :command "gmi2html/gmi2html data/… | |
(converter :name :markdown :extension ".md" :command "peg-markdown -t html -o… | |
(converter :name :markdown2 :extension ".md" :command "multimarkdown -t html -… | |
(converter :name :mmd :extension ".mmd" :command "cat data/%IN | awk -f m… | |
(converter :name :mandoc :extension ".man" | |
:command "cat data/%IN | mandoc -T markdown | sed -e '1,2d' -e '$d'… | |
(converter :name :org-mode :extension ".org" | |
:command (concatenate 'string | |
"emacs data/%IN --batch --eval '(with-temp-buf… | |
"(insert-file \"%IN\") (org-html-export-as-htm… | |
"(princ (buffer-string)))' --kill | tee %OUT")) | |
``` | |
Quand je déclare un nouvel article dans le fichier de configuration | |
qui détient les méta-données de toutes les publications, j'ai la | |
possibilité de choisir le convertisseur HTML à utiliser si ce n'est | |
pas celui par défaut. | |
```Exemple de déclaration d'un nouveau texte à publier avec ses métadonnées | |
;; utilisation du convertisseur par défaut | |
(post :title "Minimalistic markdown subset to html converter using awk" | |
:id "minimal-markdown" :tag "unix awk" :date "20190826") | |
;; utilisation du convertisseur mmd, un script awk très simple que j'ai fait p… | |
(post :title "Life with an offline laptop" | |
:id "offline-laptop" :tag "openbsd life disconnected" :date "20190823" :c… | |
``` | |
Quelques statistiques concernant la syntaxe de mes différentes | |
publications, via http vous ne voyez que le HTML, mais en gopher ou | |
gemini vous verrez la source telle quelle. | |
* markdown :: 183 | |
* gemini :: 12 | |
* mandoc :: 4 | |
* mmd :: 2 | |
* org-mode :: 1 |