đŸ Archived View for perso.pw âș blog âș articles âș fr-blog-workflow.gmi captured on 2023-06-16 at 16:40:26. Gemini links have been rewritten to link to archived content
âŹ ïž Previous capture (2023-05-24)
-=-=-=-=-=-=-
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.
(converter :name :gemini :extension ".gmi" :command "gmi2html/gmi2html data/%IN | tee %OUT") (converter :name :markdown :extension ".md" :command "peg-markdown -t html -o %OUT data/%IN") (converter :name :markdown2 :extension ".md" :command "multimarkdown -t html -o %OUT data/%IN") (converter :name :mmd :extension ".mmd" :command "cat data/%IN | awk -f mmd | tee %OUT") (converter :name :mandoc :extension ".man" :command "cat data/%IN | mandoc -T markdown | sed -e '1,2d' -e '$d' | multimarkdown -t html -o %OUT") (converter :name :org-mode :extension ".org" :command (concatenate 'string "emacs data/%IN --batch --eval '(with-temp-buffer (org-mode) " "(insert-file \"%IN\") (org-html-export-as-html nil nil nil t)" "(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.
;; 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 pour convertir quelques fonctionnalités de markdown en html (post :title "Life with an offline laptop" :id "offline-laptop" :tag "openbsd life disconnected" :date "20190823" :converter :mmd)
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.