From 59b65bf0096c5474e3abe4b808f8ee1e6aae42ea Mon Sep 17 00:00:00 2001 From: Pascal Le Merrer Date: Sat, 13 Dec 2025 17:03:01 +0100 Subject: [PATCH] Untrack generated site --- .gitignore | 1 + output/archives.html | 57 ----- output/author/pascal-le-merrer.html | 143 ----------- output/authors.html | 50 ---- output/categories.html | 50 ---- output/category/newsletter.html | 143 ----------- output/feeds/all.rss.xml | 6 - output/images/craftletter.svg | 70 ------ output/index.html | 75 ------ output/lettre-ndeg1.html | 84 ------- output/lettre-ndeg2.html | 92 ------- output/robots.txt | 20 -- output/tags.html | 48 ---- output/theme/css/print.css | 4 - output/theme/css/pygments.css | 87 ------- output/theme/css/screen.css | 356 ---------------------------- 16 files changed, 1 insertion(+), 1285 deletions(-) create mode 100644 .gitignore delete mode 100644 output/archives.html delete mode 100644 output/author/pascal-le-merrer.html delete mode 100644 output/authors.html delete mode 100644 output/categories.html delete mode 100644 output/category/newsletter.html delete mode 100644 output/feeds/all.rss.xml delete mode 100644 output/images/craftletter.svg delete mode 100644 output/index.html delete mode 100644 output/lettre-ndeg1.html delete mode 100644 output/lettre-ndeg2.html delete mode 100644 output/robots.txt delete mode 100644 output/tags.html delete mode 100644 output/theme/css/print.css delete mode 100644 output/theme/css/pygments.css delete mode 100644 output/theme/css/screen.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53752db --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +output diff --git a/output/archives.html b/output/archives.html deleted file mode 100644 index 95dc9c3..0000000 --- a/output/archives.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - Craft Letter | Archives - - - - - - - - - - - -
- - -
-
-
-

Archives

- - -

Dec 2025

-
- -
- -
- -
-
-
- - \ No newline at end of file diff --git a/output/author/pascal-le-merrer.html b/output/author/pascal-le-merrer.html deleted file mode 100644 index 29e8ce5..0000000 --- a/output/author/pascal-le-merrer.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Craft Letter | Articles by Pascal Le Merrer - - - - - - - - - - - -
- - -
-
-

15 Dec 2025

- -
-

- Lettre n°2 -

- - - - -

Logo Craft Letter

-

Édito

-

Alors que je publie ce second numéro de la Craft Letter, il s'est écoulé moins de deux semaines depuis j'ai eu l'idée de publier une newsletter. Dans un état d'esprit marqué par l'Agile des origines —pas l'adoption superfielle qualifiée de Faux Agile 🇫🇷— et par Getting Real —dont je parle ci-dessous—, j'ai publié le premier numéro rapidement, avec le strict nécessaire. Le logo que j'ai créé ne me satisfait pas complètement ? Ce n'est pas grave, j'en changerai plus tard. Je n'avais pas le temps de créer un site Web ? Je l'ai fait après la publication du premier numéro. L'essentiel était là : j'avais du contenu intéressant à partager avec vous.

-

Voici les articles et projets qui m'ont marqué cette semaine, agrémentés parfois de quelques réflexions issues de mon expérience ou des recherches que j'ai faites.

-

Bonne lecture !

-



-

Bebop

-

Dans le premier numéro de la Craft Letter était citées des alternatives à Json, telles que Protobuf et Apache Avro. Ce sont des protocoles binaires et typés, donc plus compacts et performants que Json. Le typage permet une expérience développeur sympathique. Bebop, dont la première version date de 2020, se présente comme une version plus moderne de Protobuf, sorti en 2001 —mais qui continue d'évoluer.

-

Une comparaison de Go, Rust et Zig

-

Sinclair Target compare Go, Rust et Zig 🇬🇧, après quelques quelques mois d'expérimentation sur ces trois langages. Ses réflexions sont intéressantes, bien qu'il n'ait pas pratiqué ces langages dans un cadre professionnel ni sur une longue durée. Il explique notamment ce qui rend Rust si compliqué à apprendre d'après lui : ce ne serait pas la gestion de la mémoire, mais la multplicité des concepts du langage.

-

Un algorithme de calcul de date hyper rapide

-

Ben Joffe est un passionné d'algorithmie, et plus particulièrement d'algorithmes de calcul de date. Il vient de présenter un nouvel algorithme nettement plus rapide que l'état de l'art, pour calculer la date à partir du nombre de jours écoulés depuis le 1er Janvier 1970.

-

Dans A Very Fast 64–Bit Date Algorithm: 30–40% faster 🇬🇧, il décrit en détail le fonctionnement de ce nouvel algorithme, les nouveautés qui le distinguent des précédents, et ce qui le rend aussi rapide.

-

Pourquoi quitter Github ?

-

Un billet sur le blog d'Iroco, un service mail Français éthique, nous explique pourquoi ils pensent qu'il faut quitter Github : ça parle d'IA générative, de souveraineté numérique, de colonialisme, de techno-autoritarisme...

-

Aerospace, un gestionnaire de fenêtre pour MacOS

-

Si comme moi vous n'appréciez pas le gestionnaire de fenêtres de MacOS, vous serez peut-être intéressé·e par cet article de Seg6 qui explique, selon lui, comment rendre MacOS supportable 🇬🇧. Seg6 y présente plusieurs outils pour se passer de la souris dans de nombreux cas, comme Aerospace et Vimium. Aerospace est inspiré de i3, un gestionnaire de fenêtres pour Linux. Vimium est une extension pour navigateur qui permet de naviguer presque uniquement au clavier.

-

Retour d'expérience sur Shape-up

-

Shape-up est une alternative aux méthodes Agiles telles que Scrum, Kanban ou XP. Elle a été imaginée chez 37Signals 🇬🇧, l'entreprise derrière Basecamp, et décrite dans un livre disponible en ligne 🇬🇧, gratuitement. Ce résumé 🇫🇷 vous donnera un aperçu, avant de découvrir le retour d'expérience de Scale X 🇬🇧.

-

Un ouvrage de 37Signals qui m'a beaucoup influencé est Getting Real 🇬🇧, le premier livre qui décrivait leur façon de travailler, bien avant qu'ils inventent Shape-Up. Les chapitres sont très courts, chacun présentant une idée souvent aussi iconoclaste que radicale, sur des sujets aussi divers que le financement d'une start-up, la priorisation des fonctionnalités, le recrutement, l'UX, etc. Contrairement à Shape-Up, ce n'est pas une méthode. Il s'agit plutôt une collection de trucs et astuces dont chacun peut être adopté indépendamment, et utilisé en complément de Scrum, XP ou autre.

-

Rework 🇬🇧, paru quelques années après, reprend une grande partie du contenu de Getting Real, et n'y apporte pas grand chose de nouveau sur le fond.

-

Vous n'avez pas besoin de framework CSS

-

Si vous n'avez pas suivi les évolutions du langage CSS ces dernières années, vous risquez d'être surpris·e par cette analyse de trois sites développés par 37Signals (oui, ceux qui ont créé Shape-up, mais ça n'a rien à voir les articles cités ci-dessus). Dans Vanilla CSS is all you need 🇬🇧, Rob Zolkos montre comment 37Signals utilise les fonctionnalités récentes de CSS pour se passer de framework, de pré-processeur, et parfois de JavaScript ou d'images.

-

La première question qui m'est venue à l'esprit à la lecture de cet article, c'est celle du support de ces fonctionnalités par les navigateurs. Une rapide recherche sur Can I Use m'a permis d'identifier depuis quand elles sont supportées par les principaux navigateurs :

- -

100 000 transactions par seconde : l'efficacité déraisonnable de Sqlite

-

Anders Murphy a réalisé un benchmark dans lequel il montre que Sqlite peut être d'une efficacité redoutable 🇬🇧 par rapport aux SGBD traditionnels, du fait de l'absence de communications réseau. Il faut cependant garder à l'esprit que Sqlite, bien que ce soit la base de donnée la plus utilisée au monde 🇬🇧, n'est pas adaptée à tous les cas d'usage, et n'offre pas exactement les mêmes fonctionnalités. Juste à titre d'exemple, vous n'y trouverez pas d'ID auto-incrémenté.

-
- - -

08 Dec 2025

- -
-

- Lettre n°1 -

- - - - -

Logo Craft Letter

-

Édito

-

J'ai découvert le développement logiciel alors que je n'étais qu'un adolescent. Cela m'a passionné, au point que j'en ai fait mon métier, et après plusieurs décennies, je le pratique avec un plaisir toujours renouvelé. Si mon intérêt pour le développement logiciel ne s'est pas émoussé au fil du temps, c'est grâce à la combinaison de plusieurs facteurs.

-

Tout d'abord, j'apprends en permanence ; être toujours à jour en termes de technologies, d'outils et de pratiques me permet non seulement de rester pertinent, mais aussi de ne pas sombrer dans une routine dont je me lasserais inévitablement. Cela implique de pratiquer une veille technologique constante, sous de multiples formes : lecture d'articles de blogs, de livres, conférences, ateliers, projets personnels... Par chance, tout cela aussi est un plaisir pour moi.

-

Ensuite, j'essaie de créer des logiciels dont je suis fier : je mets en pratique certaines bonnes idées que je découvre au fil de ma veille, qu'elles soient techniques ou méthodologiques. Et je fais en sorte que les clients et utilisateurs de ces logiciels soient satisfaits.

-

Enfin, je partage ce que j'apprends : j'ai donné plus d'une centaine de conférences, des dizaines de formations, écrit un livre, et je contribue à l'organisation d'événements : Meetup Software Craft Rennes, SoCraTes Rennes, Breizhcamp... J'apprécie particulièrement l'aspect social du développement, aussi bien le travail en équipe que les échanges au sein de communautés de professionnels.

-

 -Améliorer constamment ses compétences et connaissances, se montrer professionnel, et partager : c'est l'essence de l'artisanat logiciel —le software craft. Je suis un crafter, pour employer un de ces anglicismes dont nous sommes si friands dans ce milieu.

-

Depuis plus de 15 ans, je partage une partie de mes trouvailles avec les gens qui m'entourent, que ce soient des collègues, ou les gens qui viennent voir mes conférences. La publication d'une newsletter participe de la même envie de diffuser ce qui a retenu mon attention récemment. Mes centres d'intérêt sont assez variés, cela devrait se refléter dans le contenu de la lettre au fil des semaines. Vous y trouverez des articles relatifs au développement logiciel d'une façon générale, qu'il soit front-end, back-end ou autre. Mais aussi des articles consacrés à l'architecture logicielle, la méthodologie, les outils, des projets open source, des conférences... Bref, tout ce qui fait le quotidien d'une développeuse ou d'un développeur.

-

Bonne lecture !

-

Pascal

-

Quitter Github pour Codeberg

-

Ce retour d'expérience consacré à la migration de dépôts Git de Github vers Codeberg m'a interpelé, car j'ai migré récemment mes projets de Github vers une instance de Gitea (hébergée par Zaclys). Toutefois l'auteur de l'article est allé plus loin que le simple transfert de dépôts Git, car il a aussi migré des pipelines de CI, et les pages hébergées avec Github Pages. Il existe de nombreux scripts pour migrer tous vos dépôts d'un coup, de Github vers ForgeJo ou vers Gitea. Je suis parti de celui-là, mais il en existe une version améliorée.

-

Eldred Habert n'est le seul a avoir quitté Github : les développeurs du langage Zig ont fait de même, mettant en avant la dégradation du service qu'ils ont constaté ces dernières années. Mais cela engendre un risque sur le financement du projet, qui reposait en grande partie sur Github sponsors.

-

Gérer les effets de bord en 30 ligne de JavaScript

-

Comment tester simplement un code qui fait des appels à des services externes, comme une base de données, ou une API ? La mise en oeuvre d'une architecture functional core - imperative shell, en seulement 30 lignes de Javascript, permet de tester la logique métier, sans base de données de test ni mocks.

-

L'opérateur pipe se répand

-

A propos d'emprunts à la programmation fonctionnelle, l'opérateur pipe |> fait partie des nouveautés de PHP 8.5, et il est déjà disponible en JavaScript (via Babel). C'est une des choses qui me manque le plus quand je code en Python ou d'autres langages non fonctionnels (le jeu de mot est volontaire). Il change totalement la façon de penser les fonctions, et les rend bien plus simples à lire une fois qu'on a assimilé la syntaxe.

-

Pourquoi GCC utilise-t-il des ou exclusifs pour mettre à 0 des registres ?

-

Dans un article court et abordable même quand on y connait pas grand chose en assembleur, Matt Godbolt explique avec beaucoup de pédagogie une optimisation effectuée par GCC. Et si vous vous piquez d'intérêt pour le sujet, il a lancé un calendrier de l'avent dédié à l'optimisation lors de la compilation de code C ou C++.

-

Le calendrier de l'avent HTMHell est de retour

-

Ce site initié par Manuel Matuzović propose chaque jour jusqu'à Noël un article sur la sécurité, l'accessibilité, l'expérience utilisateur, ou les performances des pages Web.

-

Se protéger des attaques supply-chain en Javascript et en Python

-

Aikido Safe Chain est un outil qui filtre les demandes de téléchargement de paquets JS et Python, et vérifie si le paquet demandé ne contient pas de code malveillant. A son lancement, en Juillet dernier, il était compatible avec npm, npx, et yarn ; aujourd'hui il fonctionne avec pnpm, pnpx, bun, bunx, mais aussi des outils du monde Python comme uv, pip , ou pip3. Et d'autres gestionnaires de paquets sont prévus.

-

Meilleur que JSON

-

Dans Meilleur que JSON, Aloïs Deniel explique pourquoi il préfère Protobuf à l'omniprésent JSON : les données sont typées, leur format est vérifié et décrit par un schéma ; la compacité du format binaire améliore les performances. Et l'expérience développeur est améliorée par les générateurs de code. Ce qu'il ne mentionne pas, c'est qu'il existe d'autres formats du même type, comme Apache Avro. JsonToTable fournit une comparaison détaillée des deux formats, et indique dans quels cas d'usage chacun est plus pertinent. Spoiler : aucun des deux n'est meilleur dans tous les cas, mais les deux surpassent JSON.

-

Et voilà, c'est tout pour cette première lettre !

-
- - -
- -
- -
-
-
- - \ No newline at end of file diff --git a/output/authors.html b/output/authors.html deleted file mode 100644 index 79b021a..0000000 --- a/output/authors.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Craft Letter - Authors - - - - - - - - - - - -
- - -
-
-

Authors on Craft Letter

- - -
- -
-
-
- - \ No newline at end of file diff --git a/output/categories.html b/output/categories.html deleted file mode 100644 index 7144bf8..0000000 --- a/output/categories.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Craft Letter - Categories - - - - - - - - - - - -
- - -
-
-

Categories on Craft Letter

- - -
- -
-
-
- - \ No newline at end of file diff --git a/output/category/newsletter.html b/output/category/newsletter.html deleted file mode 100644 index 9d90d2e..0000000 --- a/output/category/newsletter.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Craft Letter | articles in the "Newsletter" category - - - - - - - - - - - -
- - -
-
-

15 Dec 2025

- -
-

- Lettre n°2 -

- - - - -

Logo Craft Letter

-

Édito

-

Alors que je publie ce second numéro de la Craft Letter, il s'est écoulé moins de deux semaines depuis j'ai eu l'idée de publier une newsletter. Dans un état d'esprit marqué par l'Agile des origines —pas l'adoption superfielle qualifiée de Faux Agile 🇫🇷— et par Getting Real —dont je parle ci-dessous—, j'ai publié le premier numéro rapidement, avec le strict nécessaire. Le logo que j'ai créé ne me satisfait pas complètement ? Ce n'est pas grave, j'en changerai plus tard. Je n'avais pas le temps de créer un site Web ? Je l'ai fait après la publication du premier numéro. L'essentiel était là : j'avais du contenu intéressant à partager avec vous.

-

Voici les articles et projets qui m'ont marqué cette semaine, agrémentés parfois de quelques réflexions issues de mon expérience ou des recherches que j'ai faites.

-

Bonne lecture !

-



-

Bebop

-

Dans le premier numéro de la Craft Letter était citées des alternatives à Json, telles que Protobuf et Apache Avro. Ce sont des protocoles binaires et typés, donc plus compacts et performants que Json. Le typage permet une expérience développeur sympathique. Bebop, dont la première version date de 2020, se présente comme une version plus moderne de Protobuf, sorti en 2001 —mais qui continue d'évoluer.

-

Une comparaison de Go, Rust et Zig

-

Sinclair Target compare Go, Rust et Zig 🇬🇧, après quelques quelques mois d'expérimentation sur ces trois langages. Ses réflexions sont intéressantes, bien qu'il n'ait pas pratiqué ces langages dans un cadre professionnel ni sur une longue durée. Il explique notamment ce qui rend Rust si compliqué à apprendre d'après lui : ce ne serait pas la gestion de la mémoire, mais la multplicité des concepts du langage.

-

Un algorithme de calcul de date hyper rapide

-

Ben Joffe est un passionné d'algorithmie, et plus particulièrement d'algorithmes de calcul de date. Il vient de présenter un nouvel algorithme nettement plus rapide que l'état de l'art, pour calculer la date à partir du nombre de jours écoulés depuis le 1er Janvier 1970.

-

Dans A Very Fast 64–Bit Date Algorithm: 30–40% faster 🇬🇧, il décrit en détail le fonctionnement de ce nouvel algorithme, les nouveautés qui le distinguent des précédents, et ce qui le rend aussi rapide.

-

Pourquoi quitter Github ?

-

Un billet sur le blog d'Iroco, un service mail Français éthique, nous explique pourquoi ils pensent qu'il faut quitter Github : ça parle d'IA générative, de souveraineté numérique, de colonialisme, de techno-autoritarisme...

-

Aerospace, un gestionnaire de fenêtre pour MacOS

-

Si comme moi vous n'appréciez pas le gestionnaire de fenêtres de MacOS, vous serez peut-être intéressé·e par cet article de Seg6 qui explique, selon lui, comment rendre MacOS supportable 🇬🇧. Seg6 y présente plusieurs outils pour se passer de la souris dans de nombreux cas, comme Aerospace et Vimium. Aerospace est inspiré de i3, un gestionnaire de fenêtres pour Linux. Vimium est une extension pour navigateur qui permet de naviguer presque uniquement au clavier.

-

Retour d'expérience sur Shape-up

-

Shape-up est une alternative aux méthodes Agiles telles que Scrum, Kanban ou XP. Elle a été imaginée chez 37Signals 🇬🇧, l'entreprise derrière Basecamp, et décrite dans un livre disponible en ligne 🇬🇧, gratuitement. Ce résumé 🇫🇷 vous donnera un aperçu, avant de découvrir le retour d'expérience de Scale X 🇬🇧.

-

Un ouvrage de 37Signals qui m'a beaucoup influencé est Getting Real 🇬🇧, le premier livre qui décrivait leur façon de travailler, bien avant qu'ils inventent Shape-Up. Les chapitres sont très courts, chacun présentant une idée souvent aussi iconoclaste que radicale, sur des sujets aussi divers que le financement d'une start-up, la priorisation des fonctionnalités, le recrutement, l'UX, etc. Contrairement à Shape-Up, ce n'est pas une méthode. Il s'agit plutôt une collection de trucs et astuces dont chacun peut être adopté indépendamment, et utilisé en complément de Scrum, XP ou autre.

-

Rework 🇬🇧, paru quelques années après, reprend une grande partie du contenu de Getting Real, et n'y apporte pas grand chose de nouveau sur le fond.

-

Vous n'avez pas besoin de framework CSS

-

Si vous n'avez pas suivi les évolutions du langage CSS ces dernières années, vous risquez d'être surpris·e par cette analyse de trois sites développés par 37Signals (oui, ceux qui ont créé Shape-up, mais ça n'a rien à voir les articles cités ci-dessus). Dans Vanilla CSS is all you need 🇬🇧, Rob Zolkos montre comment 37Signals utilise les fonctionnalités récentes de CSS pour se passer de framework, de pré-processeur, et parfois de JavaScript ou d'images.

-

La première question qui m'est venue à l'esprit à la lecture de cet article, c'est celle du support de ces fonctionnalités par les navigateurs. Une rapide recherche sur Can I Use m'a permis d'identifier depuis quand elles sont supportées par les principaux navigateurs :

- -

100 000 transactions par seconde : l'efficacité déraisonnable de Sqlite

-

Anders Murphy a réalisé un benchmark dans lequel il montre que Sqlite peut être d'une efficacité redoutable 🇬🇧 par rapport aux SGBD traditionnels, du fait de l'absence de communications réseau. Il faut cependant garder à l'esprit que Sqlite, bien que ce soit la base de donnée la plus utilisée au monde 🇬🇧, n'est pas adaptée à tous les cas d'usage, et n'offre pas exactement les mêmes fonctionnalités. Juste à titre d'exemple, vous n'y trouverez pas d'ID auto-incrémenté.

-
- - -

08 Dec 2025

- -
-

- Lettre n°1 -

- - - - -

Logo Craft Letter

-

Édito

-

J'ai découvert le développement logiciel alors que je n'étais qu'un adolescent. Cela m'a passionné, au point que j'en ai fait mon métier, et après plusieurs décennies, je le pratique avec un plaisir toujours renouvelé. Si mon intérêt pour le développement logiciel ne s'est pas émoussé au fil du temps, c'est grâce à la combinaison de plusieurs facteurs.

-

Tout d'abord, j'apprends en permanence ; être toujours à jour en termes de technologies, d'outils et de pratiques me permet non seulement de rester pertinent, mais aussi de ne pas sombrer dans une routine dont je me lasserais inévitablement. Cela implique de pratiquer une veille technologique constante, sous de multiples formes : lecture d'articles de blogs, de livres, conférences, ateliers, projets personnels... Par chance, tout cela aussi est un plaisir pour moi.

-

Ensuite, j'essaie de créer des logiciels dont je suis fier : je mets en pratique certaines bonnes idées que je découvre au fil de ma veille, qu'elles soient techniques ou méthodologiques. Et je fais en sorte que les clients et utilisateurs de ces logiciels soient satisfaits.

-

Enfin, je partage ce que j'apprends : j'ai donné plus d'une centaine de conférences, des dizaines de formations, écrit un livre, et je contribue à l'organisation d'événements : Meetup Software Craft Rennes, SoCraTes Rennes, Breizhcamp... J'apprécie particulièrement l'aspect social du développement, aussi bien le travail en équipe que les échanges au sein de communautés de professionnels.

-

 -Améliorer constamment ses compétences et connaissances, se montrer professionnel, et partager : c'est l'essence de l'artisanat logiciel —le software craft. Je suis un crafter, pour employer un de ces anglicismes dont nous sommes si friands dans ce milieu.

-

Depuis plus de 15 ans, je partage une partie de mes trouvailles avec les gens qui m'entourent, que ce soient des collègues, ou les gens qui viennent voir mes conférences. La publication d'une newsletter participe de la même envie de diffuser ce qui a retenu mon attention récemment. Mes centres d'intérêt sont assez variés, cela devrait se refléter dans le contenu de la lettre au fil des semaines. Vous y trouverez des articles relatifs au développement logiciel d'une façon générale, qu'il soit front-end, back-end ou autre. Mais aussi des articles consacrés à l'architecture logicielle, la méthodologie, les outils, des projets open source, des conférences... Bref, tout ce qui fait le quotidien d'une développeuse ou d'un développeur.

-

Bonne lecture !

-

Pascal

-

Quitter Github pour Codeberg

-

Ce retour d'expérience consacré à la migration de dépôts Git de Github vers Codeberg m'a interpelé, car j'ai migré récemment mes projets de Github vers une instance de Gitea (hébergée par Zaclys). Toutefois l'auteur de l'article est allé plus loin que le simple transfert de dépôts Git, car il a aussi migré des pipelines de CI, et les pages hébergées avec Github Pages. Il existe de nombreux scripts pour migrer tous vos dépôts d'un coup, de Github vers ForgeJo ou vers Gitea. Je suis parti de celui-là, mais il en existe une version améliorée.

-

Eldred Habert n'est le seul a avoir quitté Github : les développeurs du langage Zig ont fait de même, mettant en avant la dégradation du service qu'ils ont constaté ces dernières années. Mais cela engendre un risque sur le financement du projet, qui reposait en grande partie sur Github sponsors.

-

Gérer les effets de bord en 30 ligne de JavaScript

-

Comment tester simplement un code qui fait des appels à des services externes, comme une base de données, ou une API ? La mise en oeuvre d'une architecture functional core - imperative shell, en seulement 30 lignes de Javascript, permet de tester la logique métier, sans base de données de test ni mocks.

-

L'opérateur pipe se répand

-

A propos d'emprunts à la programmation fonctionnelle, l'opérateur pipe |> fait partie des nouveautés de PHP 8.5, et il est déjà disponible en JavaScript (via Babel). C'est une des choses qui me manque le plus quand je code en Python ou d'autres langages non fonctionnels (le jeu de mot est volontaire). Il change totalement la façon de penser les fonctions, et les rend bien plus simples à lire une fois qu'on a assimilé la syntaxe.

-

Pourquoi GCC utilise-t-il des ou exclusifs pour mettre à 0 des registres ?

-

Dans un article court et abordable même quand on y connait pas grand chose en assembleur, Matt Godbolt explique avec beaucoup de pédagogie une optimisation effectuée par GCC. Et si vous vous piquez d'intérêt pour le sujet, il a lancé un calendrier de l'avent dédié à l'optimisation lors de la compilation de code C ou C++.

-

Le calendrier de l'avent HTMHell est de retour

-

Ce site initié par Manuel Matuzović propose chaque jour jusqu'à Noël un article sur la sécurité, l'accessibilité, l'expérience utilisateur, ou les performances des pages Web.

-

Se protéger des attaques supply-chain en Javascript et en Python

-

Aikido Safe Chain est un outil qui filtre les demandes de téléchargement de paquets JS et Python, et vérifie si le paquet demandé ne contient pas de code malveillant. A son lancement, en Juillet dernier, il était compatible avec npm, npx, et yarn ; aujourd'hui il fonctionne avec pnpm, pnpx, bun, bunx, mais aussi des outils du monde Python comme uv, pip , ou pip3. Et d'autres gestionnaires de paquets sont prévus.

-

Meilleur que JSON

-

Dans Meilleur que JSON, Aloïs Deniel explique pourquoi il préfère Protobuf à l'omniprésent JSON : les données sont typées, leur format est vérifié et décrit par un schéma ; la compacité du format binaire améliore les performances. Et l'expérience développeur est améliorée par les générateurs de code. Ce qu'il ne mentionne pas, c'est qu'il existe d'autres formats du même type, comme Apache Avro. JsonToTable fournit une comparaison détaillée des deux formats, et indique dans quels cas d'usage chacun est plus pertinent. Spoiler : aucun des deux n'est meilleur dans tous les cas, mais les deux surpassent JSON.

-

Et voilà, c'est tout pour cette première lettre !

-
- - -
- -
- -
-
-
- - \ No newline at end of file diff --git a/output/feeds/all.rss.xml b/output/feeds/all.rss.xml deleted file mode 100644 index 730c51a..0000000 --- a/output/feeds/all.rss.xml +++ /dev/null @@ -1,6 +0,0 @@ - -Craft Letterhttps://www.craftletter.fr/Mon, 15 Dec 2025 09:00:00 +0100Lettre n°2https://www.craftletter.fr/lettre-ndeg2.html<p><img alt="Logo Craft Letter" src="https://www.craftletter.fr/images/craftletter.svg"></p> -<h2>Édito</h2> -<p>Alors que je publie ce second numéro de la Craft Letter, il s'est écoulé moins de deux semaines depuis j'ai eu l'idée de publier une newsletter. Dans un état d'esprit marqué par l'Agile des origines —pas l'adoption superfielle qualifiée de <a href="https://www.zdnet.fr/actualites/le-developpement-agile-plus-une-pretention-qu-une-realite-39870168.htm">Faux Agile</a> 🇫🇷— et par Getting Real —dont je parle …</p>Pascal Le MerrerMon, 15 Dec 2025 09:00:00 +0100tag:www.craftletter.fr,2025-12-15:/lettre-ndeg2.htmlNewsletterLettre n°1https://www.craftletter.fr/lettre-ndeg1.html<p><img alt="Logo Craft Letter" src="https://www.craftletter.fr/images/craftletter.svg"></p> -<h2>Édito</h2> -<p>J'ai découvert le développement logiciel alors que je n'étais qu'un adolescent. Cela m'a passionné, au point que j'en ai fait mon métier, et après plusieurs décennies, je le pratique avec un plaisir toujours renouvelé. Si mon intérêt pour le développement logiciel ne s'est pas émoussé au fil du temps …</p>Pascal Le MerrerMon, 08 Dec 2025 10:20:00 +0100tag:www.craftletter.fr,2025-12-08:/lettre-ndeg1.htmlNewsletter \ No newline at end of file diff --git a/output/images/craftletter.svg b/output/images/craftletter.svg deleted file mode 100644 index 0f300a0..0000000 --- a/output/images/craftletter.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/output/index.html b/output/index.html deleted file mode 100644 index b7a1670..0000000 --- a/output/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - -Craft Letter | Accueil - - - - - - - - - - - -
- - -
-
-
-
-

Accueil

-

Logo Craft Letter

-

La Craft Letter est une newsletter hebdomadaire dans laquelle je partage des articles -issues de ma veille technologique. Vous y trouverez des articles relatifs au développement logiciel d'une façon générale, qu'il soit front-end, back-end ou autre. Mais aussi des articles consacrés à l'architecture logicielle, la méthodologie, les outils, des projets open source, des conférences...

-

Pour savoir qui je suis, ou pourquoi j'écris cette lettre, je vous invite à vous lire l'édito du premier numéro.

- -
-
-

Archives

- -
-
- -
-
-
- - \ No newline at end of file diff --git a/output/lettre-ndeg1.html b/output/lettre-ndeg1.html deleted file mode 100644 index 3d047b6..0000000 --- a/output/lettre-ndeg1.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Craft Letter | Lettre n°1 - - - - - - - - - - - -
- - -
-
-

08 Dec 2025

-
-

-Lettre n°1 -

-

Logo Craft Letter

-

Édito

-

J'ai découvert le développement logiciel alors que je n'étais qu'un adolescent. Cela m'a passionné, au point que j'en ai fait mon métier, et après plusieurs décennies, je le pratique avec un plaisir toujours renouvelé. Si mon intérêt pour le développement logiciel ne s'est pas émoussé au fil du temps, c'est grâce à la combinaison de plusieurs facteurs.

-

Tout d'abord, j'apprends en permanence ; être toujours à jour en termes de technologies, d'outils et de pratiques me permet non seulement de rester pertinent, mais aussi de ne pas sombrer dans une routine dont je me lasserais inévitablement. Cela implique de pratiquer une veille technologique constante, sous de multiples formes : lecture d'articles de blogs, de livres, conférences, ateliers, projets personnels... Par chance, tout cela aussi est un plaisir pour moi.

-

Ensuite, j'essaie de créer des logiciels dont je suis fier : je mets en pratique certaines bonnes idées que je découvre au fil de ma veille, qu'elles soient techniques ou méthodologiques. Et je fais en sorte que les clients et utilisateurs de ces logiciels soient satisfaits.

-

Enfin, je partage ce que j'apprends : j'ai donné plus d'une centaine de conférences, des dizaines de formations, écrit un livre, et je contribue à l'organisation d'événements : Meetup Software Craft Rennes, SoCraTes Rennes, Breizhcamp... J'apprécie particulièrement l'aspect social du développement, aussi bien le travail en équipe que les échanges au sein de communautés de professionnels.

-

 -Améliorer constamment ses compétences et connaissances, se montrer professionnel, et partager : c'est l'essence de l'artisanat logiciel —le software craft. Je suis un crafter, pour employer un de ces anglicismes dont nous sommes si friands dans ce milieu.

-

Depuis plus de 15 ans, je partage une partie de mes trouvailles avec les gens qui m'entourent, que ce soient des collègues, ou les gens qui viennent voir mes conférences. La publication d'une newsletter participe de la même envie de diffuser ce qui a retenu mon attention récemment. Mes centres d'intérêt sont assez variés, cela devrait se refléter dans le contenu de la lettre au fil des semaines. Vous y trouverez des articles relatifs au développement logiciel d'une façon générale, qu'il soit front-end, back-end ou autre. Mais aussi des articles consacrés à l'architecture logicielle, la méthodologie, les outils, des projets open source, des conférences... Bref, tout ce qui fait le quotidien d'une développeuse ou d'un développeur.

-

Bonne lecture !

-

Pascal

-

Quitter Github pour Codeberg

-

Ce retour d'expérience consacré à la migration de dépôts Git de Github vers Codeberg m'a interpelé, car j'ai migré récemment mes projets de Github vers une instance de Gitea (hébergée par Zaclys). Toutefois l'auteur de l'article est allé plus loin que le simple transfert de dépôts Git, car il a aussi migré des pipelines de CI, et les pages hébergées avec Github Pages. Il existe de nombreux scripts pour migrer tous vos dépôts d'un coup, de Github vers ForgeJo ou vers Gitea. Je suis parti de celui-là, mais il en existe une version améliorée.

-

Eldred Habert n'est le seul a avoir quitté Github : les développeurs du langage Zig ont fait de même, mettant en avant la dégradation du service qu'ils ont constaté ces dernières années. Mais cela engendre un risque sur le financement du projet, qui reposait en grande partie sur Github sponsors.

-

Gérer les effets de bord en 30 ligne de JavaScript

-

Comment tester simplement un code qui fait des appels à des services externes, comme une base de données, ou une API ? La mise en oeuvre d'une architecture functional core - imperative shell, en seulement 30 lignes de Javascript, permet de tester la logique métier, sans base de données de test ni mocks.

-

L'opérateur pipe se répand

-

A propos d'emprunts à la programmation fonctionnelle, l'opérateur pipe |> fait partie des nouveautés de PHP 8.5, et il est déjà disponible en JavaScript (via Babel). C'est une des choses qui me manque le plus quand je code en Python ou d'autres langages non fonctionnels (le jeu de mot est volontaire). Il change totalement la façon de penser les fonctions, et les rend bien plus simples à lire une fois qu'on a assimilé la syntaxe.

-

Pourquoi GCC utilise-t-il des ou exclusifs pour mettre à 0 des registres ?

-

Dans un article court et abordable même quand on y connait pas grand chose en assembleur, Matt Godbolt explique avec beaucoup de pédagogie une optimisation effectuée par GCC. Et si vous vous piquez d'intérêt pour le sujet, il a lancé un calendrier de l'avent dédié à l'optimisation lors de la compilation de code C ou C++.

-

Le calendrier de l'avent HTMHell est de retour

-

Ce site initié par Manuel Matuzović propose chaque jour jusqu'à Noël un article sur la sécurité, l'accessibilité, l'expérience utilisateur, ou les performances des pages Web.

-

Se protéger des attaques supply-chain en Javascript et en Python

-

Aikido Safe Chain est un outil qui filtre les demandes de téléchargement de paquets JS et Python, et vérifie si le paquet demandé ne contient pas de code malveillant. A son lancement, en Juillet dernier, il était compatible avec npm, npx, et yarn ; aujourd'hui il fonctionne avec pnpm, pnpx, bun, bunx, mais aussi des outils du monde Python comme uv, pip , ou pip3. Et d'autres gestionnaires de paquets sont prévus.

-

Meilleur que JSON

-

Dans Meilleur que JSON, Aloïs Deniel explique pourquoi il préfère Protobuf à l'omniprésent JSON : les données sont typées, leur format est vérifié et décrit par un schéma ; la compacité du format binaire améliore les performances. Et l'expérience développeur est améliorée par les générateurs de code. Ce qu'il ne mentionne pas, c'est qu'il existe d'autres formats du même type, comme Apache Avro. JsonToTable fournit une comparaison détaillée des deux formats, et indique dans quels cas d'usage chacun est plus pertinent. Spoiler : aucun des deux n'est meilleur dans tous les cas, mais les deux surpassent JSON.

-

Et voilà, c'est tout pour cette première lettre !

-
- -
-
- -
-
-
- - \ No newline at end of file diff --git a/output/lettre-ndeg2.html b/output/lettre-ndeg2.html deleted file mode 100644 index 5198fa2..0000000 --- a/output/lettre-ndeg2.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - -Craft Letter | Lettre n°2 - - - - - - - - - - - -
- - -
-
-

15 Dec 2025

-
-

-Lettre n°2 -

-

Logo Craft Letter

-

Édito

-

Alors que je publie ce second numéro de la Craft Letter, il s'est écoulé moins de deux semaines depuis j'ai eu l'idée de publier une newsletter. Dans un état d'esprit marqué par l'Agile des origines —pas l'adoption superfielle qualifiée de Faux Agile 🇫🇷— et par Getting Real —dont je parle ci-dessous—, j'ai publié le premier numéro rapidement, avec le strict nécessaire. Le logo que j'ai créé ne me satisfait pas complètement ? Ce n'est pas grave, j'en changerai plus tard. Je n'avais pas le temps de créer un site Web ? Je l'ai fait après la publication du premier numéro. L'essentiel était là : j'avais du contenu intéressant à partager avec vous.

-

Voici les articles et projets qui m'ont marqué cette semaine, agrémentés parfois de quelques réflexions issues de mon expérience ou des recherches que j'ai faites.

-

Bonne lecture !

-



-

Bebop

-

Dans le premier numéro de la Craft Letter était citées des alternatives à Json, telles que Protobuf et Apache Avro. Ce sont des protocoles binaires et typés, donc plus compacts et performants que Json. Le typage permet une expérience développeur sympathique. Bebop, dont la première version date de 2020, se présente comme une version plus moderne de Protobuf, sorti en 2001 —mais qui continue d'évoluer.

-

Une comparaison de Go, Rust et Zig

-

Sinclair Target compare Go, Rust et Zig 🇬🇧, après quelques quelques mois d'expérimentation sur ces trois langages. Ses réflexions sont intéressantes, bien qu'il n'ait pas pratiqué ces langages dans un cadre professionnel ni sur une longue durée. Il explique notamment ce qui rend Rust si compliqué à apprendre d'après lui : ce ne serait pas la gestion de la mémoire, mais la multplicité des concepts du langage.

-

Un algorithme de calcul de date hyper rapide

-

Ben Joffe est un passionné d'algorithmie, et plus particulièrement d'algorithmes de calcul de date. Il vient de présenter un nouvel algorithme nettement plus rapide que l'état de l'art, pour calculer la date à partir du nombre de jours écoulés depuis le 1er Janvier 1970.

-

Dans A Very Fast 64–Bit Date Algorithm: 30–40% faster 🇬🇧, il décrit en détail le fonctionnement de ce nouvel algorithme, les nouveautés qui le distinguent des précédents, et ce qui le rend aussi rapide.

-

Pourquoi quitter Github ?

-

Un billet sur le blog d'Iroco, un service mail Français éthique, nous explique pourquoi ils pensent qu'il faut quitter Github : ça parle d'IA générative, de souveraineté numérique, de colonialisme, de techno-autoritarisme...

-

Aerospace, un gestionnaire de fenêtre pour MacOS

-

Si comme moi vous n'appréciez pas le gestionnaire de fenêtres de MacOS, vous serez peut-être intéressé·e par cet article de Seg6 qui explique, selon lui, comment rendre MacOS supportable 🇬🇧. Seg6 y présente plusieurs outils pour se passer de la souris dans de nombreux cas, comme Aerospace et Vimium. Aerospace est inspiré de i3, un gestionnaire de fenêtres pour Linux. Vimium est une extension pour navigateur qui permet de naviguer presque uniquement au clavier.

-

Retour d'expérience sur Shape-up

-

Shape-up est une alternative aux méthodes Agiles telles que Scrum, Kanban ou XP. Elle a été imaginée chez 37Signals 🇬🇧, l'entreprise derrière Basecamp, et décrite dans un livre disponible en ligne 🇬🇧, gratuitement. Ce résumé 🇫🇷 vous donnera un aperçu, avant de découvrir le retour d'expérience de Scale X 🇬🇧.

-

Un ouvrage de 37Signals qui m'a beaucoup influencé est Getting Real 🇬🇧, le premier livre qui décrivait leur façon de travailler, bien avant qu'ils inventent Shape-Up. Les chapitres sont très courts, chacun présentant une idée souvent aussi iconoclaste que radicale, sur des sujets aussi divers que le financement d'une start-up, la priorisation des fonctionnalités, le recrutement, l'UX, etc. Contrairement à Shape-Up, ce n'est pas une méthode. Il s'agit plutôt une collection de trucs et astuces dont chacun peut être adopté indépendamment, et utilisé en complément de Scrum, XP ou autre.

-

Rework 🇬🇧, paru quelques années après, reprend une grande partie du contenu de Getting Real, et n'y apporte pas grand chose de nouveau sur le fond.

-

Vous n'avez pas besoin de framework CSS

-

Si vous n'avez pas suivi les évolutions du langage CSS ces dernières années, vous risquez d'être surpris·e par cette analyse de trois sites développés par 37Signals (oui, ceux qui ont créé Shape-up, mais ça n'a rien à voir les articles cités ci-dessus). Dans Vanilla CSS is all you need 🇬🇧, Rob Zolkos montre comment 37Signals utilise les fonctionnalités récentes de CSS pour se passer de framework, de pré-processeur, et parfois de JavaScript ou d'images.

-

La première question qui m'est venue à l'esprit à la lecture de cet article, c'est celle du support de ces fonctionnalités par les navigateurs. Une rapide recherche sur Can I Use m'a permis d'identifier depuis quand elles sont supportées par les principaux navigateurs :

- -

100 000 transactions par seconde : l'efficacité déraisonnable de Sqlite

-

Anders Murphy a réalisé un benchmark dans lequel il montre que Sqlite peut être d'une efficacité redoutable 🇬🇧 par rapport aux SGBD traditionnels, du fait de l'absence de communications réseau. Il faut cependant garder à l'esprit que Sqlite, bien que ce soit la base de donnée la plus utilisée au monde 🇬🇧, n'est pas adaptée à tous les cas d'usage, et n'offre pas exactement les mêmes fonctionnalités. Juste à titre d'exemple, vous n'y trouverez pas d'ID auto-incrémenté.

-
- -
-
- -
-
-
- - \ No newline at end of file diff --git a/output/robots.txt b/output/robots.txt deleted file mode 100644 index b73e272..0000000 --- a/output/robots.txt +++ /dev/null @@ -1,20 +0,0 @@ -User-agent: GPTBot -Disallow: / - -User-agent: ClaudeBot -Disallow: / - -User-agent: CCBot -Disallow: / - -User-agent: Google-Extended -Disallow: / - -User-agent: Bytespider -Disallow: / - -User-agent: PerplexityBot -Disallow: / - -User-agent: * -Sitemap: https://www.craftletter.fr/sitemap.xml diff --git a/output/tags.html b/output/tags.html deleted file mode 100644 index b76e8bb..0000000 --- a/output/tags.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - Craft Letter - - - - - - - - - - - -
- - -
-
-
    -
- -
- -
-
-
- - \ No newline at end of file diff --git a/output/theme/css/print.css b/output/theme/css/print.css deleted file mode 100644 index c63a87b..0000000 --- a/output/theme/css/print.css +++ /dev/null @@ -1,4 +0,0 @@ -* { background: #fff; } -body { font-family: georgia, times, serif; color: black; } -blockquote { font-style: italic; color: black; } -a:link, a:visited { border-bottom-width: 1px; border-bottom-style: solid; } diff --git a/output/theme/css/pygments.css b/output/theme/css/pygments.css deleted file mode 100644 index 91ae326..0000000 --- a/output/theme/css/pygments.css +++ /dev/null @@ -1,87 +0,0 @@ -/* Solarized Dark - -For use with Jekyll and Pygments - -http://ethanschoonover.com/solarized - -SOLARIZED HEX ROLE ---------- -------- ------------------------------------------ -base03 #002b36 background -base01 #586e75 comments / secondary content -base1 #93a1a1 body text / default code / primary content -orange #cb4b16 constants -red #dc322f regex, special keywords -blue #268bd2 reserved keywords -cyan #2aa198 strings, numbers -green #859900 operators, other keywords -*/ - -.highlight { background-color: #002b36; color: #93a1a1 } -.highlight .c { color: #586e75 } /* Comment */ -.highlight .err { color: #93a1a1 } /* Error */ -.highlight .g { color: #93a1a1 } /* Generic */ -.highlight .k { color: #859900 } /* Keyword */ -.highlight .l { color: #93a1a1 } /* Literal */ -.highlight .n { color: #93a1a1 } /* Name */ -.highlight .o { color: #859900 } /* Operator */ -.highlight .x { color: #cb4b16 } /* Other */ -.highlight .p { color: #93a1a1 } /* Punctuation */ -.highlight .cm { color: #586e75 } /* Comment.Multiline */ -.highlight .cp { color: #859900 } /* Comment.Preproc */ -.highlight .c1 { color: #586e75 } /* Comment.Single */ -.highlight .cs { color: #859900 } /* Comment.Special */ -.highlight .gd { color: #2aa198 } /* Generic.Deleted */ -.highlight .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #dc322f } /* Generic.Error */ -.highlight .gh { color: #cb4b16 } /* Generic.Heading */ -.highlight .gi { color: #859900 } /* Generic.Inserted */ -.highlight .go { color: #93a1a1 } /* Generic.Output */ -.highlight .gp { color: #93a1a1 } /* Generic.Prompt */ -.highlight .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #cb4b16 } /* Generic.Subheading */ -.highlight .gt { color: #93a1a1 } /* Generic.Traceback */ -.highlight .kc { color: #cb4b16 } /* Keyword.Constant */ -.highlight .kd { color: #268bd2 } /* Keyword.Declaration */ -.highlight .kn { color: #859900 } /* Keyword.Namespace */ -.highlight .kp { color: #859900 } /* Keyword.Pseudo */ -.highlight .kr { color: #268bd2 } /* Keyword.Reserved */ -.highlight .kt { color: #dc322f } /* Keyword.Type */ -.highlight .ld { color: #93a1a1 } /* Literal.Date */ -.highlight .m { color: #2aa198 } /* Literal.Number */ -.highlight .s { color: #2aa198 } /* Literal.String */ -.highlight .na { color: #93a1a1 } /* Name.Attribute */ -.highlight .nb { color: #B58900 } /* Name.Builtin */ -.highlight .nc { color: #268bd2 } /* Name.Class */ -.highlight .no { color: #cb4b16 } /* Name.Constant */ -.highlight .nd { color: #268bd2 } /* Name.Decorator */ -.highlight .ni { color: #cb4b16 } /* Name.Entity */ -.highlight .ne { color: #cb4b16 } /* Name.Exception */ -.highlight .nf { color: #268bd2 } /* Name.Function */ -.highlight .nl { color: #93a1a1 } /* Name.Label */ -.highlight .nn { color: #93a1a1 } /* Name.Namespace */ -.highlight .nx { color: #93a1a1 } /* Name.Other */ -.highlight .py { color: #93a1a1 } /* Name.Property */ -.highlight .nt { color: #268bd2 } /* Name.Tag */ -.highlight .nv { color: #268bd2 } /* Name.Variable */ -.highlight .ow { color: #859900 } /* Operator.Word */ -.highlight .w { color: #93a1a1 } /* Text.Whitespace */ -.highlight .mf { color: #2aa198 } /* Literal.Number.Float */ -.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */ -.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */ -.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */ -.highlight .sb { color: #586e75 } /* Literal.String.Backtick */ -.highlight .sc { color: #2aa198 } /* Literal.String.Char */ -.highlight .sd { color: #93a1a1 } /* Literal.String.Doc */ -.highlight .s2 { color: #2aa198 } /* Literal.String.Double */ -.highlight .se { color: #cb4b16 } /* Literal.String.Escape */ -.highlight .sh { color: #93a1a1 } /* Literal.String.Heredoc */ -.highlight .si { color: #2aa198 } /* Literal.String.Interpol */ -.highlight .sx { color: #2aa198 } /* Literal.String.Other */ -.highlight .sr { color: #dc322f } /* Literal.String.Regex */ -.highlight .s1 { color: #2aa198 } /* Literal.String.Single */ -.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */ -.highlight .bp { color: #268bd2 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #268bd2 } /* Name.Variable.Class */ -.highlight .vg { color: #268bd2 } /* Name.Variable.Global */ -.highlight .vi { color: #268bd2 } /* Name.Variable.Instance */ -.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/output/theme/css/screen.css b/output/theme/css/screen.css deleted file mode 100644 index 9321a87..0000000 --- a/output/theme/css/screen.css +++ /dev/null @@ -1,356 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ -v2.0 | 20110126 -License: none (public domain) - */ -/* Mockingbird Theme by Nevan Scott nevanscott.com */ -/* Modified by Jody Frankowski */ -/* Modified by ix5 */ -/* Modified by Pascal Le Merrer */ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -em { - font-style: italic; -} -strong { - font-weight: bold; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} - -body { - font-family: Georgia, serif; - font-size: 16px; - line-height: 1.5em; - color: #444; -} - -header, #wrapper { - padding: 0 10px; - min-width: 500px; - max-width: 910px; - margin: auto; -} - -a { - box-shadow: inset 0 0 0 0 #801515; - color: #801515; - padding: 0 .25rem; - margin: 0 -.25rem; - transition: color .3s ease-in-out, box-shadow .3s ease-in-out; -} - -a:hover { - color: #fff; - box-shadow: inset 800px 0 0 0 #801515; -} - -ul { - list-style: outside disc; -} - -ol { - list-style: outside decimal; -} - -h1, h2, h3, h4, h5, h6 { - font-family: sans-serif; - font-weight: bold; -} -h1, h2, h3 { - font-size: 1.5em; - line-height: 1em; - margin: 1em 0; -} - -img, p, .post > .highlight, .highlighttable, h4, h5, h6 { - margin-top: 1.2em; -} - -blockquote { - margin: 1.5em 1.5em 1.5em .75em; - padding-left: .75em; - border-left: 1px solid #EEE; -} - -.date { - color: #CCC; - float: left; - clear: both; - width: 130px; - font-size: 1.5em; - line-height: 1em; - margin: 0 20px 1em 0; -} - -.info { - margin-top: 1.3em; - font-family: sans-serif; - text-align: right; - color: #BBB; -} -.info a { - color: inherit; -} -.info a.tags { - background: #CCC; - color: #FFF; - display: inline-block; - padding: 0 .3em; - border: 1px transparent solid; - border-radius: 5px; - margin: 0 0 0.3em 0; -} -.info a.tags:hover { - background: inherit; - color: inherit; -} -.info a.tags.selected { - border: 1px #999 solid; -} - -.post { - margin: 0 0 4.5em 150px; -} -.post.archives { - margin-bottom: 1.5em; - margin-left: 160px; -} -.post p { - text-align: justify; -} - -.page { - margin: 0 90px; -} - -.highlight { - border-radius: 3px; -} -.code > .highlight { - border-radius: 0px 3px 3px 0px; -} -.linenos { - border-radius: 3px 0px 0px 3px; - background-color: #073642; - border-right: 1px solid #00232C; - color: #586E75; - text-shadow: 0px -1px #021014; -} -td.code { - width: 100%; - max-width: 100px; -} -.linenos a { - color: #586E75; -} - -img { - border-radius: 0.3em; - max-width: 100%; - display: block; - margin-left: auto; - margin-right: auto; - margin-top: 6rem; - margin-bottom: 6rem; -} - -/*sub and sup stolen from Twitter bootstrap.*/ -sub, sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -.post pre, .page pre { - padding: .8em; - font-size: 12px; - font-family: Monospace; - line-height: 1.1em; - overflow: auto; -} - -form.inline_edit { - clear: both; - margin: 4.5em 0; - background-color: #DDD; - color: #000; - padding: 20px; - border-radius: 5px; -} -.inline_edit .sub { - color: #888; - white-space: nowrap; -} -.inline_edit label { - float: left; - clear: both; - width: 140px; - margin-right: 20px; -} -.inline_edit .buttons { - display: block; - text-align: right; -} - -nav ul { - float: right; - list-style: none; - margin: 0 0 0 3em; - padding: 0; -} -nav li { - float: left; -} -nav a { - color: #801515; - display: block; - padding: 4.5em 10px 10px 10px; -} -nav a:hover { - color: #801515; - text-decoration: underline; - background-color: #d3d3d3; - color: #FFF; -} -nav li.selected a { - background-color: #801515; - color: #FFF; -} - -header .header_box { - padding-top: 4.5em; -} -header h1 { - font-size: 1.5em; - line-height: 1em; - margin: 0; -} -header h2 { - font-size: 1em; - margin: .3em 0; - color: #DDD; -} - -#content { - margin-top: 3em; -} - -.pages { - font-family: sans-serif; - line-height: 2.5em; - margin: 4.5em 0 3em; - background-color: #F9F9F9; - color: #444; - border-radius: 5px; -} -.pages a.next_page { - float: right; - width: 140px; - text-align: center; - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; - background-color: #EEE; -} -.pages a.prev_page { - float: left; - width: 140px; - text-align: center; - border-top-left-radius: 5px; - border-bottom-left-radius: 5px; - background-color: #EEE; -} -.pages a { - color: inherit; - border: none; -} -.pages a:hover { - background-color: #DDD; -} - -.pages span { - display: block; - margin: 0 160px; - text-align: center; -} - -code { - background-color: #F9F2F4; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - box-sizing: border-box; - color: #C7254E; - font-family: Monaco,Menlo,Consolas,"Courier New",monospace; - font-size: 12.6px; - line-height: 18px; - padding-bottom: 2px; - padding-left: 4px; - padding-right: 4px; - padding-top: 2px; - white-space: nowrap; -} - -footer { - font-family: sans-serif; - line-height: 2.5em; - text-align: center; - color: #BBB; - margin: 3em 0; - border: 1px solid #EEE; - border-radius: 5px; -} -footer p { margin: 0; } - -.right { float: right; } - -.clear { clear: both; }