Colophon

Cette page décrit le rôle de ce site web. Elle décrit aussi les différentes ressources et bibliothèques utilisées. Un Colophon est, historiquement, en imprimerie, un encadré donnant des informations sur le résultat d'une impression. C'était donc une manière un peu manuelle d'attacher des méta-données. Je ne sais pas si c'est un titre de page pertinent, mais il est souvent utilisé, dans la blogosphère (et spécifiquement dans l'anneau web dont j'ai fait partie pendant plusieures années) pour décrire les différents processus et outils utilisés pour décrire un site web.

Vous êtes sur ma page personnelle et son objectif est de me permettre d'avoir un espace de publication libre. Où je peux choisir les thématiques que je veux traiter et où il est possible de structurer mes documents à ma guise. Les grandes sections présentent sur l'index décrivent des thématiques, qui elles-même sont regroupées en sections. L'application possède aussi un journal, me permettant de rédiger à la manière d'un blog. Les documents peuvent être des articles, des guides ou des galeries.

Mon tout premier site personnel date de 2001, et avait été construit avec l'éditeur en ligne du site voila.fr, au fil des années, j'ai eu beaucoup de sites différents (et j'ai utilisé beaucoup de platformes différentes) dont la première archive, encore accessible, date de 2004 (attention, c'est cringe). Depuis quelques années, j'utilise des générateurs de sites statiques et mon contenu est versionné sur un dépôt Git, rendant l'archivage plus aisé (il est possible de retrouver des archives en cherchant nukifw.github.io et xvw.github.io).

Thématiques et navigation

Alors que pendant très longtemps, je tâchais de dupliquer mes espaces de rédactions pour garantir que chacun de mes sites possédaient une thématique clair, j'ai, vers 2014, commencé à être amusé par certaines pages de chercheurs qui exploitaient leurs espaces numériques pour discuter de sujets variés. Par exemple, je me souviens d'une page de Joe Armstrong, le créateur de Erlang qui, au milieu d'une liste de projets très sérieux, décrivait comment il avait construit des fusées propulsées à l'eau. Ou encore certains chercheurs de INRIA profitant de leurs pages pour partager leurs photos de vacances.

Plus tard, en fréquentant l'instance Mastodon Merveilles, j'ai découvert une collection de sites dans lesquels il était possible de se perdre pendant plusieurs heures. Le site de Devine Lu Linvega en est, de mon point de vue, un excellent exemple. On clique sur un lien, et, quelques heures plus tard, on s'est perdu au détour d'une section, appartenant elle-même à une rubrique. L'auteur décrit d'ailleurs son site, dans la conférence The Frameworks for Mystics, comme une ville labyrinthique dans lequel il est possible de se perdre.

Cette approche du web, que l'on appelle maintenant Le Web Indie est un retour aux fondamentaux, à l'époque Geocities où les internautes étaient très créatifs et rigolos. La popularité des platforme de publications à la Medium a normalisé le contenu en ligne, et certains, dont je fais partie, trouvent ça dommage. C'est pour cette raison que j'ai pris, à la refonte de mon site personnel, la décision de ne pas figer sa thématique, et de m'offrir la liberté d'écrire sur tout ce dont j'ai envie. N'étant pas très productif, il est possible que mon site ne ressemble jamais à une ville dans laquelle il est possible de se perdre, mais la navigation structurée, mais pas trop, sert cette ambition.

Technologies

Pour être parfaitement libre dans la manière dont je structure mes documents, il était très important que j'utilise un outil libre, extensible et que je puisse facilement maitriser. L'itération précédente de mon site personnel approchait cette idée. J'avais construit une collection de petits logiciels (en OCaml, évidemment) me permettant de structurer de la données et, potentiellement, de générer des pages. N'étant pas emballé à l'idée de créer un moteur de gabarits, je m'étais tourné vers Hakyll, un excellent générateur, de générateurs de sites statiques, écrit en Haskell. Cependant, le mélange OCaml/Haskell rendait la maintenance de l'application et j'ai décidé, en 2022, de repartir de zéro.

Le code source du générateur, et le contenu brut se trouvent sur le dépôt Github xvw/capsule et le résultat du site généré se trouve sur le dépôt Github xvw/xvw.github.io.

Génération statique: YOCaml

YOCaml a été conçu par mon ami Antoine pour donner un exemple d'utilisation de la bibliothèque Preface, sur laquelle j'avais, avec Didier et Pierre, travaillé. Comme Hakyll, YOCaml est un générateur très versatile, qui laisse beaucoup de liberté sur les documents à construire. On peut le voir comme un tout petit framework pour construire des build-systems minimalistes. Son fonctionnement est, dans les grandes lignes, décrit dans un article du créateur, et, j'ai eu l'honneur de le présenter au OCaml usergroup Parisien.

Le binaire principale est orchestré via un logiciel en ligne de commandes, implémenté grâce à la très riche bibliothèque Cmdliner.

L'utilisation de YOCaml, dans un contexte un peu moins orthodoxe que les exemples présentés, permet d'utililiser mon site comme incubateur et de débroussailler des améliorations potentielles pour la prochaine version de la bibliothèque (mais aussi de trouver des bogues).

Greffons utilisés

YOCaml est un framework qui vient avec plusieurs greffons (des moteurs de gabarits, des description de langages de markups etc.) me permettant de construire une véritable application web, avec beaucoup de contrôle sur la manière dont les pages statiques sont produites. En général, un greffon est une sur-couche à une bibliothèque OCaml existante, servant à faire la glue entre cette dernière et YOCaml. Pour ce site, j'utilise ces différents greffons :

Greffons implémentés

Alors que, historiquement, j'utilisais Org comme langage Markup, j'ai décidé de passer vers du Markdown, essentiellement parce qu'il y avait une bibliothèque complète, et que YOCaml possédait, déjà, un greffon Yocaml_markdown, basé sur omd. Cependant, je voulais pouvoir automatiser la génération de table des matières, donc j'ai implémenté mon propre greffon, lui aussi, basé sur omd.

Entre temps, la bibliothèque Cmarkit, qui respecte la spécification CommonMark a été publiée et Dinosaure (contributeur et utilisateur de YOCaml, mais aussi le mainteneur/créateur de pléthore de bibliothèques incroyablement utile pour l'écosystème OCaml) a construit un greffon Yocaml_cmark. Quand le temps me le permettra, je passerai probablement sur cette bibliothèque.

Infrastructure

L'avantage d'un site généré statiquement est qu'il est incroyablement facile à déployer ! N'étant pas un très bon devOps, j'ai décidé d'utiliser Github Pages comme serveur de fichiers. J'utilise une Github Action (dont le nom est un peu nul) pour déployer une nouvelle version à chaque nouvelle version de la branche main.

Client et technologies front-end

Le site web est assez sobre concernant les technologies front-end mise en œuvre, essentiellement parce que je ne suis pas très aux faits des nouvelles technologies web. Par contre, pour garantir une certaine forme d'interactivité (par exemple pour le développement des applications embarquées ou pour la gestion des commentaires), j'utilise un peu de JavaScript, cependant, la désactivation de ce dernier permet tout de même la navigation.

CSS et intégration

Concernant le CSS, je n'utilise aucun framework. La feuille de style a été conçue à la main (et très maladroitement). Mon expérience avec Tailwind a été très laborieuse donc j'ai décidé de tout écrire from-scratch. Actuellement, je suis satisfait de bien comprendre mes feuilles de styles, cependant, comme évoqué dans ma rétrospective 2023, je devrais réecrire toute la feuille pour construire un design-system dédié à mon site web pour éviter les répétitions (actuellement, les règles ont été écrites à la nécéssité).

Je profite aussi de ce site web pour en apprendre un peu plus sur l'intégration, le HTML et le CSS. Par exemple, après des années sans m'y être intéressé, j'ai enfin utilisé des grilles, via le gabarit de grilles qui, logiquement, pour décrire des grilles, est largement plus confortable que Flexbox.

Coloration syntaxique

J'utilise la bibliothèque Highlight.js avec le thème Grayscale (très légèrement modifé pour s'adapter au visuel global de l'application).

Le choix d'une bibliothèque JavaScript pour assurer la coloration syntaxique est de la pure fainéantise. Même s'il y a des priorités plus importantes, je garde en tête le projet Hilite pour colorer les blocs de codes à la construction du site, et réduire la nécéssité d'une bibliothèque tiers aussi grande. (Actuellement, c'est laissé de coté car ça implique de migrer vers Cmarkit et d'intégrer d'autres syntaxes, mon site ne parlant pas que de OCaml).

Nightmare

Nightmare est une collection d'embryon de bibliothèques permettant de construire des applications client/serveur et développé à The Funkyworkers (dont je suis co-fondateur). Mon site utilise la partie cliente, qui est compilée en JavaScript grâce à l'excellent Js_of_ocaml, me permettant d'écrire le moins de JavaScript possible, et spécifiquement ces différentes bibliothèques :

Ces différentes bibliothèques me permettent d'embarquer des applications riches, par exemple, les Dapps ou encore l'affichage des commentaires. Et, comme le site fait office d'incubateur pour YOCaml, c'est aussi le cas pour les différentes bibliothèques qui constituent Nightmare.

Commentaires

Une des difficultés quand on construit un site statique, c'est que l'on perd des fonctionnalités d'interactivité. Par exemple, les commentaires sur les articles. Une solution acceptée dans le monde des sites statiques est d'utiliser un service tiers pour palier ces manque d'interactivité. On appelle ça la JamStack et il existe beaucoup de services permettant de résoudre le problème des commentaires.

Comme je l'avais expliqué dans une entrée de journal, je ne voulais pas dépendre d'un service pouvant, potentiellement faire du tracking sans mon accord, j'ai donc décidé de construire le support des commentaires sur base de réponses à des fils de conversations Mastodon. La te car elle ne me permet pas de faire de modérations, mais pour le moment, elle me suffit largement. Je pourrais imaginer une modération statique (en invalidant certains identifiants de messages au niveau d'une page), mais, pour le moment, n'ayant pas eu à déplorer des commentaires déplacés, je ne pense pas que ça soit nécéssaire.

L'application utilise nightmare_vdom, ce qui est un peu overkill car il n y a pas d'interactivité et un seul composant, mais ça me permet de bénéficier de combinateurs pour décrire une UI.

Web3 et Tezos

Dans certains espaces de conversations que je fréquente, il arrive souvent que les blockchains aient une mauvaise réputation, cependant, à titre personnel, et comme je l'avais expansivement évoqué dans ce podcast, j'y vois une collection d'opportunités de création de projets amusants. Et comme un des objectifs de mon site est d'être un petit bac à sable pour construire de petites expérimentations, je voulais être capable d'embarquer des petites applications décentralisées utilisant Tezos comme back-end (j'avais d'ailleurs éventualisé l'idée d'utiliser cette dernière pour la gestion des commentaires mais je trouvais ça laborieux d'imposer à mes lecteurs potentiels le fait de devoir payer pour publier un commentaire).

Pour l'interaction avec la chaine, j'utilise yourbones qui est, comme nightmare, une collection d'embryon de bibliothèques pour interagir avec la chaine Tezos. Dans Yourbones, il existe une bibliothèque yourbones_js-beacon qui fait la liaison avec Beacon, une implémentation de la TZIP-10 permettant l'abstraction de la connexion d'un Wallet. Exactement comme pour YOCaml et Nightmare, mon site fait office d'incubateur pour Yourbones en détectant les fonctionnalités intéressantes à implémenter et en faisant remonter des bogues potentiels, notamment pour Js_of_OCaml ou beaucoup d'améliorations d'inlining ont été remonté par l'utilisation de Yourbones. En complément, j'utilise la bibliothèque data-encoding pour les échanges de données entre mes applications embrarquées et les noeuds RPC de Tezos.

En complément, certaines galeries pointent vers des collections Objkt (ou certaines illustrations pointent directement vers une page Objkt) permettant à des utilisateurs d'acheter certaines éditions sous formes de NFT.

Conclusion sur la pile technologique

Même s'il reste des points d'améliorations, un des éléments qui me semblait essentiel dans la maintenance d'un site personnel était le plaisir que j'avais à le faire évoluer. L'utilisation de OCaml qui est, pour concrétiser des projets, mon langage favori, à presque toutes les couches du site web me donne, en permanence, envie de l'améliorer ! De plus, l'utilisation de bibliothèques expérimentales, développées par des partenaires/amis/collègues, me permet de dresser des retours d'utilisations pertinents et potentiellement de faire remonter des bogues.

Donc même s'il est probable que dans les mois à venir, j'apporte certains changements, je resterai probablement sur cette base, qui m'amuse et me permet d'implémenter à peu près ce dont j'ai envie.

Développement et production de contenu

En plus de la génération concrète du site, j'utilise des bibliothèques et des logiciels pour faciliter le développement de l'application et la production de contenu. Le code source et les différentes pages sont écrites avec Doom-Emacs (une configuration moderne pour l'éditeur Emacs, que j'utilise depuis près d'une quinzaine d'années).

Développement

Comme le générateur du site est un projet OCaml, j'utilise un ensemble d'outils relatifs au développement de projets OCaml :

Comme YOCaml a été conçu par au dessus de Preface, cette bibliothèque est aussi grandement utilisée dans les différents modules du générateur et des parties clientes.

En plus, j'utilise, par habitude Make comme orchestrateur de tâches génériques (un peu par habitude car Dune pourrait largement le remplacer) et npm et Webpack pour gérer les dépendances JavaScript (en l'occurence, uniquement Highlight.js).

Éléments visuels

Les différents éléments visuels du site sont réalisés avec ces trois outils :

L'ensemble des illustrations, pixels ou vectorielles sont réalisées avec une bien vieille (2008) tablettes graphique Bamboo de chez Wacom qui, malgré son âge avancé... fonctionne toujours !

Typographies

Le site web utilise trois polices de caractères différentes :

J'ai longuement hésité à utiliser la police Inter comme police sans serif, que je trouve aussi très jolie et lisible. Mais, même si mon avis en tant que designer a peu de valeur, je suis assez satisfait de la composition de ces trois polices.

Conclusion

C'était, dans les grandes lignes, les socles sur lesquels repose ce site web. Je n'ai malheureusement pas cité toutes les dépendances transitives des projets que j'utilise mais comme j'utilise presque essentiellement des logiciels libres, elles sont découvrables par le biais des liens que j'ai référencés.

De mon point de vue, la pile technologique basée sur YOCaml et Nightmare est très amusante à utiliser et me motive à faire évoluer mon site. Ce qui me permet de conclure sur, selon moi, l'importance de contrôler son espace personnel sur le net. En effet, il m'arrive souvent de voir des articles publiés sur Medium ou encore Dev.to. Même si je comprend parfaitement que le gros avantage de ces médiums de publication est la communauté (et donc la promotion de ses rédactions), je trouve que garder le contrôle de son contenu, d'être capable de construire une expérience de lecture adapté à ses articles et d'offrir des rédactions sans publicités (le fameux Pardon the Interruption que je trouve infernal) est un gain énorme. De plus, maintenir son espace sur le web, comme un jardin numérique est un exercice très amusant, formateur et qui, selon moi, stimule sa créativité ! Et de manière un peu technocratique, ça permet d'expérimenter des langages plus compliqués à proposer professionnellement !

Pour ma part, même si je pense qu'au vue de mes choix technologiques, je suis assez indépendant concernant l'évolution de mon site et du code de son générateur, je trouve que je dépend encore trop fortemment de Github et qu'un jour, je pourrai passer à une version auto-hébergée, le fait que je contrôle mon contenu, qu'il est facilement backupable ne m'inquiète pas quand je voudrai migrer. Et oui, une site généré statiquement, c'est très facile à déployer !

Si vous avez envie de vous lancer dans la construction de votre espace sur le web, l'anneau de la communauté Merveilles est une collection de jardins numériques pouvant être une très bonne source d'inspiration et je suis, évidemment, ouvert à tout échange à ce propos, via les différents canaux de contact qu'il est possible de trouver sur ce site !


Commentaires

Comme mon site web est hébergé sur un serveur de fichiers statiques (et ne dispose pas de base de données), les commentaires sont assurés par le Fediverse. Si vous possédez un compte, par exemple Mastodon, vous pouvez donc commenter cette page en répondant à ce fil de discussion!