Hablo !

![L'icône du projet Hablo, un perroquet gris du gabon stylisé dans un carré qui regarde vers le haut](/media/2019/04/22/hablo.svg)

Bon, ça y est, les dernières semaines furent les plus dures mais j'ai enfin releasé la première version de [hablo](https://git.marvid.fr/Tissevert/hablo) mon générateur de blog !

Je me sens vraiment soulagée, ça me pesait beaucoup ces derniers jours. J'ai d'abord quasi-terminé le code mais je n'avais [pas écrit](/articles/Saturday%20afternoon%20unexpected%20fun%20adventure.html) la documentation. Premier ascenseur émotionnel, aller, t'as pas fini, repars écrire ta doc ! J'ai mis quelques semaines pour peaufiner ça, des gens super sympas m'ont relue (merci encore, [@eliotberriot](https://mastodon.eliotberriot.com/@eliotberriot) !) et là, vraiment certaine qu'il n'y avait plus rien à faire, je me suis retrouvée figée, incapable d'appuyer sur le bouton pour fusionner les branches et ajouter la documentation sur ma branche *master*.

Bref, ce moment difficile, est passé, j'ai releasé et je me sens beaucoup beaucoup mieux !

![Un gif de Sakura utilisant le pouvoir d'une Clow Card](/media/2019/04/22/release.gif)

## Le projet

### Encore un autre générateur de blog statique ?!

Quand j'ai voulu ouvrir ce blog, je savais que je voulais un générateur de blog statique parce c'est beaucoup plus simple à héberger et que moralement il n'y a pas à faire de calculs côté serveur pour assembler les pages, qui sont écrites une fois pour toutes où ne changent que rarement et quand je travaille dessus donc quand je peux lancer une actualisation des pages. Et surtout, je voulais un outil qui soit simple.

Je ne supporte pas les interfaces comme Wordpress qui ne savent pas rester simples et entendent fournir une «solution» complète, en proposant leur propre éditeur de texte, en stockant les articles dans des bases de données. Les gens sont déjà tellement perdus avec rien quant il s'agit d'informatique, je crois que ce type de logiciel est nuisible et contribue à ce que les gens ne sachent même pas où ils stockent leurs fichiers. Tout ce qu'ielles comprendront de leur blog, c'est ce qu'ielles arriveront à se souvenir du processus d'édition dans Wordpress. Aucun intérêt. Heureusement, je ne pense pas qu'il existe beaucoup de générateurs de blogs statiques comme ça (c'est curieux d'ailleurs, on pourrait se demander pourquoi).

Des générateurs de blog statique, il y en déjà pas mal mais je n'ai pas réussi à me décider pour un seul.

- J'ai utilisé autrefois [pelican](https://docs.getpelican.com/en/stable/) qui est vraiment super bien, mais un peu trop compliqué pour moi encore, j'avais passé un temps fou à personnaliser des templates pour créer le visuel de mon blog et je ne voulais pas recommencer. Je me souviens que j'étais un peu perturbée par cette notion de thème qui me rappelle trop Wordpress. Je comprends l'idée de vouloir partir de quelque chose qui a déjà une bonne tête, mais il me semble qu'en définitive tout le monde veut personnaliser son blog, et donc jamais garder le thème initial exactement comme tel. Pour moi le thème n'est pas à séparer du contenu du blog (il est un des contenus du blog).

- Il y a bien [hakyll](https://jaspervdj.be/hakyll/), qui est en plus écrit en Haskell, langage que j'aime beaucoup et que j'ai choisi pour écrire hablo mais je le trouve encore trop compliqué. Dès les premiers tutoriels, on me parle de configurer des routes, ce qui est pour moi le travail d'un serveur web, et pas d'un générateur de blog. Ça ne me dérange pas que les URLs de mon blog reflètent exactement la structure des fichiers, et je trouve ça mieux pour les gens peu à l'aise avec l'informatique.

- J'ai entendu parler de manière très enthousiaste de [hugo](https://gohugo.io/) récemment. Je sais qu'il ne faut pas se fier aux apparences mais le site web du projet lui-même me donne envie de fuir. Je ne comprends pas en quoi les slogans marketting vides et les références à toutes les grandes boîtes supposées l'avoir utilisé ou avoir aidé le projet d'une manière ou d'une autre constitueraient une raison de l'utiliser. En plus c'est écrit en Go, langage que je ne porte pas spécialement dans mon cœur, ayant été créé chez Google, et n'apportant de ce que j'ai pu en voir jusqu'ici aucune évolution majeure.

Bref, vu tout ça et convaincue qu'il n'y avait vraiment pas grand-chose à faire puisque je voulais garder les fichiers source des articles tels-quels en Markdown et ne les interpréter qu'au moment de les afficher dans le navigateur je me suis dit qu'il serait plus simple d'écrire rapidement un petit programme qui ferait ça.

### Ce qui caractérise Hablo

J'ai vraiment vu hablo depuis sa [conception](https://git.marvid.fr/Tissevert/hablo/wiki/Architectural%20choices) comme l'outil le plus minimal possible pour générer un peu de HTML autour des articles en Markdown de manière à pouvoir les parcourir de manière un peu plus élégante qu'en listant seulement le contenu du répertoire.

Par contre, j'aime bien écrire un peu de JavaScript pour améliorer la navigation et je voulais justement gérer de cette manière le rendu des articles en HTML ainsi que leur gestion dans un cache pour ne pas passer son temps à re-télécharger les mêmes sources en Markdown alors qu'on revient sur un article précédement consulté.

Surtout, au moment où je démarrais le projet, j'ai compris que cette technique de rendu de la page dans le navigateur permettrait d'ajouter très facilement des commentaires aux articles malgré le fait que les pages soient statiques. Hablo fait le lien entre un article et un toot sur la [Fédiverse](https://fediverse.network/) et affiche les réponses à ce toot en commentaires de l'article.

Hablo permet donc de générer des pages relativement légères, avec très peu de dépendances à part celles que vous voudrez utiliser (juste [remarkable](https://github.com/jonschlinkert/remarkable) pour générer le HTML à partir du Markdown). Et surtout, et c'est une fonctionnalité, pas une restriction, Hablo ne permet pas de changer complètement la structure du HTML généré. Le design de votre site est relégué à quelques modifications mineures de son en-tête et à du CSS.