Blog
Derniers articles et ressources
Installer le terminal Kitty et configurer Zsh comme shell par défaut sous Xubuntu
Ce billet présente la démarche complète d'installation et configuration de kitty terminal sous ubuntu.
DGX Spark vs Cloud vs Abonnements LLM — Le Benchmark Économique Qui Tue le Rêve du Hardware Local
À $4 699 le DGX Spark, $20/mois Ollama Pro, $1.38/h le H100 en cloud — le calcul est vite fait. Ce benchmark compare toutes les options disponibles en 2026 pour faire tourner des LLMs, de l'inférence au fine-tuning. Verdict : le Spark est un objet de luxe, pas un outil rentable. La vraie raison d'acheter du hardware local en 2026 n'est pas économique — elle est politique.
La Matrice de Gouvernance LLM — Pourquoi la Sécurité de Votre IA Commence par l'Arborescence
Et si la sécurité de votre IA ne dépendait pas d'un prompt mais d'un système de fichiers ? Ce manifeste d'architecture définit une matrice 4×4 — zone physique × droit d'accès LLM — qui rend mécaniquement impossible la fuite de secrets, le mélange open/closed source, et la publication d'opinions déguisées en faits. Aucun prompt à écrire. Aucune règle à retenir. Juste des dossiers.
La Granularisation OSS/CSS — Pourquoi J'ai Coupé foundry/ en Deux
`foundry/` mélangeait code open source et code private dans le même dossier. Le RAG et le knowledge graph ne savaient pas faire la différence. La solution ? Couper cette zone fonctionnelle en deux — OSS/ pour le public (Apache 2.0, indexation libre), CSS/ pour le closed source (dataset privé uniquement). Plus besoin de dire au LLM d'être prudent. Le système de fichiers le fait pour lui. Et j'en ai profité pour ranger cheroliv.com là où il aurait toujours dû être : dans office/sites/.
Le Compartimentage Épistémique Automatisé — Comment le LLM Protège Mon Jardin Mental
Le pattern STIMULUS ne se contente pas de capturer des idées brutes et de les diluer dans les documents du workspace. Il ajoute une couche critique : le LLM est responsable de classifier chaque information en Vision (publiable sur le blog), Opinion (confinée au cercle privé) ou Stratégie (dilution restreinte). Cette ségrégation épistémique automatisée est ce qui permet de penser librement en Cercle 0 sans crainte de publication inappropriée.
Notre Premier Embauché : l'Anonymiseur de Datasets — MVP0 en Période d'Essai
Avant de faire du RAG, du fine-tuning, ou du SaaS, il faut des données propres. Notre premier embauché en période d'essai — l'Anonymiseur — détecte et nettoie les PII dans des sources multi-technologies (SQL, pgvector, ONNX, Graphify, JSON, YAML, AsciiDoc). C'est le MVP0. Sans lui, tout le reste est soit illégal, soit techniquement dégradé. Voici comment cette brique transforme un problème universel en produit marketable.
Le Jardin Secret du Développeur : Comment l'Ontologie Spatiale Aligne les LLMs Sans Prompt Engineering
Et si la meilleure façon d'aligner un LLM n'était pas un prompt, mais un système de fichiers ? Ma workspace est structuré en quatre cercles de confiance concentriques, du plus intime au plus public. Le LLM n'a pas à mémoriser les règles — il les voit à chaque chemin de fichier. Voici comment cette ontologie spatiale rend la gouvernance agent plus robuste qu'un bloc de règles textuelles.
Migration Supabase → Firebase : Brancher un Formulaire de Contact sur Firestore Sans Backend
Mon formulaire de contact tournait sur un mock depuis des mois. Le plan initial Supabase a été abandonné au profit de Firebase. Je raconte la création du projet, la configuration Firestore, la réécriture du JS de soumission, le nettoyage du code mort, et ce que cette migration dit de l'état d'esprit « finir ce qu'on a commencé ».
DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1 : Trois LLMs à l'Épreuve du Vibe Coding Long Contexte
Pendant trois semaines, j'ai fait tourner trois modèles majeurs sur mes sessions de développement de plugins Gradle avec Opencode. Contexte 30K tokens, gouvernance Eager/Lazy/Hot/Warm/Cold, tâches de refactoring, TDD et architecture. Voici lequel a survécu — et pourquoi les autres ont dérapé.
Audit de Contexte Agent : Quand Votre Propre Gouvernance Devient le Problème — et Comment la Réparer sans Rien Perdre
Après deux articles sur la structuration et le backup du contexte agent, je découvre que le fichier qui documente la méthode est lui-même devenu le plus gros consommateur de tokens. Audit section par section d'un AGENT_MODUS_OPERANDI de 627 lignes, identification des doublons, et solution de split encyclodéique qui préserve l'ingénierie sans saturer le contexte.
Sliding Window et Vague Froide : Quand le Contexte Agent Explose et qu'il Faut Archiver sans Perdre
Après des mois de sessions Opencode, les fichiers de gouvernance explosent. 5200 lignes chargées automatiquement. Je conceptualise un mécanisme de sliding window et de "vague froide identique" pour maintenir un contexte actif léger sans rien perdre.
Quand Gradle 9, Docker 29 et Testcontainers se mettent la rate au court-bouillon : debugging d'un build JHipster
Un `./gradlew build` qui échoue sur onze erreurs successives, depuis une variable `reportsDir` inexistante jusqu'à Docker Engine 29 qui rejette le client docker-java 1.32. Voici le carnet de bord complet du debugging d'un build JHipster sur Gradle 9, Java 21 et Testcontainers 2.0.5.
Gouverner un Agent IA avec du AsciiDoc : Ma Stratégie Eager/Lazy pour des Sessions Opencode sans Fuite de Contexte
Face à la fuite de contexte entre les sessions d'un agent IA, j'ai mis au point une stratégie artisanale de gouvernance basée sur des fichiers AsciiDoc. Le principe : un tableau de bord Eager auto-chargé, un manuel du propriétaire Lazy sur demande, et une procédure de fin de session incontournable.
Pourquoi `serve` affichait un site moche alors que `publishSite` était parfait
La tâche `serve` de mon plugin Gradle JBake affichait des boutons rectangulaires, des textes illisibles et un CSS partiellement absent, alors que `publishSite` produisait un site parfait. Root cause : des arguments CLI JBake passés avec une syntaxe incorrecte. Voici le diagnostic complet et comment je l'ai corrigé.
OpenCode et le PATH incomplet : pourquoi vos outils n'étaient pas dans le shell de l'agent
OpenCode exécute des shells non-interactifs qui ne sourcent pas .zshrc. Résultat : SDKMAN, NVM, ~/apps et pnpm sont absents du PATH de l'agent. Diagnostic complet du problème, comparaison du comportement SDKMAN vs NVM, et solution définitive via .zshenv + symlink ~/.nvm/current.
Intégrer Graphify dans un workflow Gradle : du Knowledge Graph au diagramme PlantUML en une commande
Graphify extrait un Knowledge Graph de votre codebase. Le plugin Gradle PlantUML transforme ce graphe en diagrammes PlantUML déterministes. Pipeline complet : pip install graphify → graphify . --no-viz → ./gradlew generateKnowledgeGraphDiagram → diagrammes PNG versionnés dans Git.
Le super tips de la commande fg : quand Ctrl+Z sauve votre session terminal
Vous avez lancé une commande qui bloque votre terminal ? Ctrl+Z la suspend, fg la reprend. Découvrez comment fg, bg et jobs transforment votre productivité en terminal.
VS Code dans le Home : installation locale et customisation des polices sans sudo
Installez VS Code dans votre home Linux pour garder le contrôle total sans sudo. Puis customisez les polices du menu et de l'explorateur de fichiers — un parcours semé d'embûches qui aboutit enfin à une UI lisible.
Migration d'un plugin Asciidoctor RevealJS vers buildSrc Kotlin : reverse engineering d'une API Groovy
Comment migrer la configuration d'une tâche AsciidoctorJRevealJSTask du buildscript racine vers un plugin buildSrc Kotlin autonome, en remplaçant le DSL Groovy ruby { gems() } par ses mécanismes sous-jacents découverts par introspection de bytecodes.
Architecture Portfolio JBake - Vision et Use Cases
Découvrez comment j'ai résolu une série de problèmes complexes de mocking Mockito dans les tests d'un plugin Gradle, de l'erreur "Wanted but not invoked" aux "Unfinished Stubbing" en cascade.
Architecture Hybride : Le Meilleur des Deux Mondes avec Supabase et Spring Boot
Combinez Supabase pour le CRUD simple et Spring Boot pour la logique complexe. Architecture hybride pragmatique, évolutive et économique.
Debugging Mockito: Résoudre l'erreur "Wanted but not invoked" dans les tests de plugins Gradle
Découvrez comment j'ai résolu une série de problèmes complexes de mocking Mockito dans les tests d'un plugin Gradle, de l'erreur "Wanted but not invoked" aux "Unfinished Stubbing" en cascade.
L Art du Pré-chargement : Éliminer le "Flash" de Thème avec JavaScript et CSS
Logging Efficace dans les Tests Fonctionnels de Plugins Gradle
Guide complet pour mettre en place un système de logging robuste et indépendant dans les tests fonctionnels de plugins Gradle avec SLF4J et Logback
Afficher des carrés colorés dans AsciiDoc : Guide pratique
Guide pratique pour intégrer des échantillons de couleur dans AsciiDoc en utilisant la macro pass:[] avec du HTML et CSS inline. Compatible JBake et tous processeurs.
Internationalisation d'un site statique JBake avec Thymeleaf
Guide complet pour implémenter l'internationalisation dans JBake avec Thymeleaf : fichiers de messages pour l'UI, organisation par dossiers pour les articles multilingues.
Installer et vérifier Tor Browser sous Ubuntu
Procédure complète pour télécharger, vérifier et lancer Tor Browser sous Ubuntu, avec une réflexion sur la vérification cryptographique et la navigation éthique et éducative dans le réseau Tor.
Article 5 : L'Aventure du libs.versions.toml Partagé
Une plongée dans le catalogue de versions de Gradle (libs.versions.toml) et comment le partager dans un build composite, à travers un problème concret rencontré avec notre plugin site-baker.
Article 4 : Le Piège du Cache de Configuration Gradle
Une aventure de débogage inattendue qui nous a plongés dans les subtilités du cache de configuration de Gradle. Découvrez pourquoi nos builds se comportaient étrangement et comment nous avons résolu le problème.
Article 3 : Intégration de Jackson pour le Parsing YAML avec TDD dans un Plugin Gradle
Découvrez comment intégrer la bibliothèque Jackson pour parser des fichiers de configuration YAML en objets Kotlin dans un plugin Gradle, en suivant une approche de Développement Guidé par les Tests (TDD).
Article 2 : Développer un Plugin Gradle avec une Approche TDD
Dans cet article, nous allons explorer comment mettre en place une base de développement solide pour un plugin Gradle en utilisant une approche de Développement Guidé par les Tests (TDD - Test-Driven Development).
Article 1 : Créer un Plugin Gradle de A à Z avec la commande gradle init
Un guide pas à pas pour initialiser un projet de plugin Gradle en utilisant la tâche standard `init`, comprendre la structure générée et lancer les premières commandes de build.
Article 0 : Mise en Place de l'Environnement pour Créer des Plugins Gradle
Avant de coder notre premier plugin, nous devons préparer notre machine. Ce guide vous montre comment installer et configurer les outils essentiels : un JDK, IntelliJ IDEA, Gradle et JBake.
CI/CD Python – Partie 3 : Aller plus loin avec Poetry, Docker et la publication avancée
Partie 3 - Guide complet pour mettre en place un pipeline CI/CD robuste avec GitHub Actions, du linting et tests automatisés jusqu'au déploiement automatique sur PyPI lors des releases.
Partie 2 : Industrialiser et sécuriser un pipeline CI/CD Python avancé
Partie 2 - Guide complet pour mettre en place un pipeline CI/CD robuste avec GitHub Actions, du linting et tests automatisés jusqu'au déploiement automatique sur PyPI lors des releases.
Partie 1 : Mettre en place un pipeline CI/CD simple pour Python et PyPI
Partie 1 - Guide complet pour mettre en place un pipeline CI/CD robuste avec GitHub Actions, du linting et tests automatisés jusqu'au déploiement automatique sur PyPI lors des releases.
Développement d'un Bot Discord Musical : Architecture Fonctionnelle et Log Driven Development
Refroidir et surveiller la température de son laptop sous Ubuntu
Récit d'un débogage : dompter les caprices de Firefox avec Bootstrap 5
Résoudre le Défi des Tests Unitaires Gradle avec `gradle.properties`
Découvrez une technique efficace pour tester unitairement des plugins Gradle qui dépendent de `gradle.properties`. Cet article explique comment utiliser `ExtraPropertiesExtension` pour simuler des propriétés, garantissant des tests isolés, fiables et maintenables, illustré par des diagrammes PlantUML.
Optimiser la Gestion des Tâches Gradle avec Kotlin DSL et buildSrc
Optimisez Gradle avec buildSrc et Kotlin DSL pour des tâches réutilisables et des builds plus propres.
TDD d’un Plugin Gradle Kotlin configurable avec JBake et JGit
Ce billet présente la démarche complète de conception et de tests (TDD) d’un plugin Gradle écrit en Kotlin DSL. Ce plugin automatise la génération de sites statiques avec *JBake* et le *déploiement Git* via *JGit*, le tout à partir d’un fichier YAML de configuration.
AsciiDoc : Découvrir et maîtriser la syntaxe pour une documentation efficace
Plongez dans la syntaxe d’AsciiDoc et apprenez à écrire des documents clairs, structurés et puissants pour tous vos besoins de documentation et de publication.
Exposer un service local sur Internet depuis Ubuntu : Guide complet du port forwarding
Comment configurer le port forwarding pour rendre accessible un service local tournant sur Ubuntu depuis l'extérieur de votre réseau domestique.
Kotlin Arrow : Maîtriser la navigation dans la monade Either
Découvrez les techniques avancées pour naviguer efficacement dans les côtés right et left de la monade Either avec la bibliothèque Kotlin Arrow.
Guide pratique : recherche de fichiers sous linux
Apprenez à rechercher efficacement des fichiers sous linux avec Zsh en utilisant find, locate, et grep.
Mémo linux
Simple mémo sur unix/linux et le terminal bash
Exposer un port linux subsystem pour l'hôte windows
Exposer un port linux subsystem pour l'hôte windows, avec la commande `wsl --install`.
Installer Pandoc
Installer Pandoc qui est un tranformateur de document, sur linux et windows wsl
Implémentation de kotlin.Triple en JavaScript, TypeScript et Python
Proposons une implémentation de kotlin.Triple en JavaScript, TypeScript et Python
Introduction à Google Apps Script
Introduction complète à Google Apps Script
Formation Express sur Google Form Script et Automatisation
Formation Express sur Google Form Script et Automatisation
Mémo Python
simple mémo Python
Web dev
Training Web dev
Trading card games (TCGs)
Training trading card games (TCGs)
Mémo Typescript
simple mémo Typescript
Mémo CSS
simple mémo CSS
Mémo HTML
simple mémo HTML
Mémo Javascript
simple mémo Javascript
Mémo Cadrage
simple mémo sur le cadrage d'un projet.
Mémo Kotlin
simple mémo kotlin
Mémo JVM
simple mémo JVM
Mémo Gradle
simple mémo gradle
Training - kotlin: enum, sealed classes
Programmation en kotlin: enum, sealed classes
Training - Kotlin
Programmation en kotlin, plan.
Mémo design system
Simple mémo des liens utiles et des références dans le design system
Kubernetes, Microk8s, Docker: premiers pas
Installation, mise en place de micro kubernetes, docker, et lancement d'un helloworld sur linux/unix
Gradle: Exécuter un processus externe depuis une tâche gradle
Comment lancer un binaire externe depuis une tache gradle
Kotlin: NotImplementedException, NotImplementedError
Pas encore implémenté, permet de lever la bonne exception.
Untar
l'application untar
Gradle: Rejouer les tests même lorsque les tests sont UP-TO-DATE
ajouter l’argument --rerun-tasks à la ligne commande.
Docker, n’installe pas l’application mais tire la plutôt
docker optimisation
Gherkin en francais :
BDD, cucumber, gherkin en français
Gradle cli: surcharger un paramètre
./gradlew -Pparam_component=CUSTOM
Mémo git
simple mémo git
Aspirer depuis une URL
wget aspirateur d'URL
Créer un disk bootable
faire son disque bootable
Dezipper en CLI dans un dossier cible
dezipper en ligne de commande
Afficher la somme des tailles de fichier dans la liste des répertoires
la somme des tailles de fichiers dans un dossier
Détruire une branch sur github
complément mémo git
Asciidoc/Markdown Mémo
simple mémo ascidoc/markdown
Debian : Installer un fichier .deb en ligne de commandes
installer des .deb en ligne de commandes
Gradle: dossier resources visible dans l'IDE
ajouter un dossier au classpath d'un build gradle
Groovy script, grab et ivy configuration
gradle groovy ivy
Groovy: un peu d’algèbre, le pgcd et le ppmc
de l'algebre en groovy
Bash : Trouver des fichiers par extension sortie sur fichier avec find
un peu de bash avec find
Gérer un projet digital avec une méthodologie en cascade
un peu de methodo des projets digitals avec la méthodologie en cascade
Lister les bases de données dans une instance de PostgreSQL
tatonnement de postgres
Groovy: Renomer des fichiers recursivement
recursion en groovy
Groovy: Recherche de fichiers avec critère, copie de la selection
recherche de fichier par motif en groovy
Groovy: Manipulation de fichiers, recherche et suppression
manipulation de fichiers et recherche de caracteres en groovy
Groovy: Remplacer une séquence de caractères dans une String et charger une Properties depuis une file
manipulation de Properties et recherche de motif en groovy
Groovy: Caractères ASCII
du groovy, des boucles et de la manipulation de code ascii