| 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 |