A propos Compétences Expérience Services Blog Contact

Blog

Retours d'expérience techniques sur Go, la sécurité des agents LLM et serveurs MCP, le DevSecOps et l'architecture backend à l'échelle. Hands-on technical write-ups on Go, LLM agent & MCP server security, DevSecOps, and backend architecture at scale.

25 septembre 2026 · ~4 min · Freelance · Sécurité · IA 25 September 2026 · ~4 min · Freelance · Security · AI

Reprendre une app codée à l'IA : l'audit avant le devis Taking over an AI-built app: the audit before the quote

Des fondateurs non techniques, une app générée par IA, un petit budget et une deadline stores. Ma règle : une journée d'audit de cadrage avant tout devis. Les patterns documentés des apps générées, CVE-2025-48757 comprise, et le devis en lots, sécurité d'abord. Non-technical founders, an AI-generated app, a small budget and a store deadline. My rule: one day of scoping audit before any quote. The documented patterns of generated apps, CVE-2025-48757 included, and a quote in lots, security first.

23 septembre 2026 · ~4 min · Machine Learning · MLOps · Incident 23 September 2026 · ~4 min · Machine Learning · MLOps · Incident

Mon réentraînement a supprimé une classe en silence My retraining silently deleted a class

Personne n'a touché au code : un rangement de boîte mail a vidé une classe de 196 exemples à 9, et le retrain a déployé un modèle à 6 classes au lieu de 7. L'incident, puis les trois garde-fous : classes attendues, gate macro-F1, moniteur d'escalade. Nobody touched the code: a mailbox cleanup drained a class from 196 examples to 9, and the retrain shipped a 6-class model instead of 7. The incident, then the three guardrails: expected classes, a macro-F1 gate, an escalation monitor.

21 septembre 2026 · ~4 min · Sécurité · Autorisation · Échelle 21 September 2026 · ~4 min · Security · Authorization · Scale

L'ABAC en production : ce qui casse vraiment ABAC in production: what actually breaks

Le débat RBAC contre ABAC est plié. Ce qui casse en prod est ailleurs : attributs périmés, explosion des règles, chemins de code qui ne posent jamais la question, refus sans trace. Quatre modes de défaillance, et les règles pour les contenir. The RBAC vs ABAC debate is settled. What breaks in production is elsewhere: stale attributes, rule explosion, code paths that never ask, denials without a trace. Four failure modes, and the rules that contain them.

18 septembre 2026 · ~4 min · Go · HTMX · Web 18 September 2026 · ~4 min · Go · HTMX · Web

HTMX en production : ce que j'ai gardé, ce que j'ai retiré HTMX in production: what I kept, what I removed

Mon cockpit tourne en prod avec HTMX, Go et html/template. Ce qui a tenu : un endpoint par fragment, des templates éclatés, Redis optionnel. Ce que j'ai retiré : le push SSE qui gelait la page en HTTP/1.1. Bilan honnête, htmx 4.0 compris. My cockpit runs in production on HTMX, Go and html/template. What held: one endpoint per fragment, split templates, optional Redis. What I removed: the SSE push that froze the page on HTTP/1.1. An honest verdict, htmx 4.0 included.

16 septembre 2026 · ~4 min · Architecture · Identité · RGPD 16 September 2026 · ~4 min · Architecture · Identity · GDPR

Un SSO multi-région pour 25 millions d'utilisateurs : les données restent, l'auth voyage Multi-region SSO for 25 million users: data stays, auth travels

Des données de santé qui n'ont pas le droit de bouger, un SSO qui doit marcher partout. Le pattern de la résidence sélective : classification des données, fallback d'auth inter-région, réplique les clés, pas les dossiers. Et les pièges invisibles : logs, jobs, admin. Health data that is not allowed to move, an SSO that must work everywhere. The selective residency pattern: data classification, auth-only cross-region fallback, replicate keys, not records. And the invisible traps: logs, jobs, admin.

14 septembre 2026 · ~4 min · Go · Architecture · Refactoring 14 September 2026 · ~4 min · Go · Architecture · Refactoring

Refactorer un main.go de 2060 lignes en hexagonal, avec les chiffres Refactoring a 2,060-line main.go to hexagonal, with the numbers

49 fichiers en package main, un main.go de 2060 lignes, une god-struct à 20 dépendances. La frontière calculée avec go list -deps, 8 services extraits, go.mod passé de 30+ à 3 dépendances, et un bug produit latent trouvé en route. Facture comprise. 49 files in package main, a 2,060-line main.go, a 20-dependency god struct. The boundary computed with go list -deps, 8 services extracted, go.mod down from 30+ to 3 deps, and a latent product bug found on the way. Bill included.

11 septembre 2026 · ~5 min · RGPD · Backend · Échelle 11 September 2026 · ~5 min · GDPR · Backend · Scale

Le droit à l'effacement à l'échelle : pourquoi on a remplacé le hard delete par des files Right to erasure at scale: why we replaced hard delete with queues

Supprimer un compte à 25 millions d'utilisateurs n'est pas un DELETE. La transaction géante, les données éparpillées, puis le design qui tient : files distribuées, étapes idempotentes, journal de preuve. Avec les constats de l'EDPB de février 2026. Deleting an account at 25 million users is not a DELETE. The giant transaction, the scattered data, then the design that holds: distributed queues, idempotent steps, a proof journal. With the EDPB's February 2026 findings.

9 septembre 2026 · ~5 min · DevOps · Infra · Coûts 9 September 2026 · ~5 min · DevOps · Infra · Costs

Je n'ai pas pris Kubernetes, et voici la facture exacte I did not pick Kubernetes, and here is the exact bill

Ma plateforme DevSecOps tourne sur Docker Swarm, au-dessus d'un maillage WireGuard, pour environ 30 euros par mois, facture réelle. Les vrais coûts sont ailleurs : un piège .env, du calcul de MTU, et la rigidité. Et les cas où Kubernetes gagne quand même. My DevSecOps platform runs on Docker Swarm, on top of a WireGuard mesh, for about 30 euros a month, real invoice. The real costs live elsewhere: a .env trap, MTU math, and rigidity. Plus the cases where Kubernetes still wins.

7 septembre 2026 · ~4 min · Sécurité · Conformité · UE 7 September 2026 · ~4 min · Security · Compliance · EU

Cyber Resilience Act : le chrono démarre le 11 septembre, voici le runbook Cyber Resilience Act: the clock starts on September 11, here is the runbook

Le 11 septembre, le Cyber Resilience Act, le règlement cybersécurité de l'UE, arme son chrono : 24 h pour l'alerte, 72 h pour la notification, 14 jours pour le rapport. Pas un mémo de juriste : le runbook côté pipeline, SBOM, govulncheck et modèle de rapport prêts avant l'incident. On September 11, the Cyber Resilience Act, the EU cybersecurity regulation, arms its clock: 24 hours for the alert, 72 for the notification, 14 days for the report. Not a legal memo: the pipeline-side runbook, SBOM, govulncheck and a report template ready before the incident.

4 septembre 2026 · ~4 min · IA · Agents · Qualité 4 September 2026 · ~4 min · AI · Agents · Quality

Donne des preuves à fournir à tes agents, pas des instructions Give your coding agents proof obligations, not instructions

Six agents IA ont livré un écran complet de mon cockpit en deux heures. Ce qui l'a rendu livrable : la parité visuelle vérifiée dans les deux thèmes, quatre parcours cliqués dans un vrai navigateur, 167 tests verts et une punch-list vide. Le harnais, pièce par pièce. Six AI agents shipped a full screen of my cockpit in two hours. What made it shippable: visual parity checked in both themes, four flows clicked in a real browser, 167 green tests and an empty punch-list. The harness, piece by piece.

2 septembre 2026 · ~4 min · Sécurité · Identité 2 September 2026 · ~4 min · Security · Identity

Quand Keycloak et ta base ne sont plus d'accord sur qui existe When Keycloak and your database disagree about who exists

Un utilisateur existe dans ta base, plus dans Keycloak : magic link 200 sans mail, inscription en 409 à vie, et rien dans les logs, parce que ton anti-énumération avale le 404. L'incident réel (539 orphelins), la réparation SQL, et l'invariant qui l'empêche. A user exists in your database but not in Keycloak: magic link 200 with no email, registration stuck on 409, and empty logs, because your anti-enumeration swallows the 404. The real incident (539 orphans), the SQL repair, and the invariant that prevents it.

31 août 2026 · ~5 min · DevOps · Cloud · Coûts 31 August 2026 · ~5 min · DevOps · Cloud · Costs

Monter ton cluster est devenu plus simple que croire au PaaS Running your own cluster is now simpler than believing in PaaS

On nous promet moins d'ops, moins cher, plus fiable. En 2026 : 63 % des boîtes ont une équipe FinOps, AWS, Azure et Cloudflare ont enchaîné les pannes, et un PaaS entier est tombé 8 h parce que Google a suspendu son compte. Pendant ce temps, l'IA a rendu le self-host accessible. The promise: fewer ops, cheaper, more reliable. In 2026: 63% of companies run a FinOps team, AWS, Azure and Cloudflare chained outages, and an entire PaaS went down for 8 hours because Google suspended its account. Meanwhile, AI made self-hosting accessible.

28 août 2026 · ~5 min · Tests · Qualité · IA 28 August 2026 · ~5 min · Testing · Quality · AI

Ta suite de tests est verte et ton produit est cassé Your test suite is green and your product is broken

Un test d'intégration vert sur une migration qui a cassé la prod, une suite E2E verte sur un parcours cassé. Le conteneur de test est superuser, les assertions lisent du JSON, un bypass saute l'étape testée. En 2026, avec 42 % de code généré, une CI verte n'a jamais prouvé aussi peu. A green integration test on a migration that broke prod, a green E2E suite on a broken journey. The test container runs as superuser, assertions read JSON, a bypass skips the step under test. In 2026, with 42% generated code, green CI has never proven less.

26 août 2026 · ~6 min · Machine Learning · IA · NLP 26 August 2026 · ~6 min · Machine Learning · AI · NLP

Les embeddings ne savent pas dire non Embeddings cannot say no

Un détecteur d'intention par embeddings ne comprend pas la négation : « la panne est réparée, merci » déclenche comme « panne ». Mes vrais chiffres, y compris les moches : le seuil cosinus mort, l'effondrement sur holdout, et pourquoi toute la précision appartient au LLM. An embedding intent detector does not understand negation: "the outage is fixed, thanks" fires like "outage". My real numbers, ugly ones included: the dead cosine threshold, the holdout collapse, and why all the precision belongs to the LLM.

24 août 2026 · ~6 min · Go · HTTP/2 · Production 24 August 2026 · ~6 min · Go · HTTP/2 · Production

Tes timeouts Go ne s'appliquent pas là où tu crois Your Go timeouts do not apply where you think

Un flux SSE, c'est une requête qui ne finit jamais. Elle casse deux fois avant ta logique : un header interdit en HTTP/2, puis les timeouts par défaut à 30 secondes. Deux incidents en production, la config qui répare, et la faille Go d'août 2026 qui raconte la même histoire. An SSE stream is a request that never ends. It breaks twice before your logic: a header that is illegal in HTTP/2, then the default 30 second timeouts. Two production incidents, the config that fixes them, and the August 2026 Go flaw telling the same story.

31 juillet 2026 · ~7 min · DevSecOps · Identité · Agents IA 31 July 2026 · ~7 min · DevSecOps · Identity · AI Agents

Donne une identité à ton agent IA, pas ta clé API Give Your AI Agent an Identity, Not Your API Key

Coller une clé API statique dans un agent, c'est lui prêter ton identité : large, longue vie, intraçable. Donne-lui la sienne, courte et révocable : machine identity, jetons juste-à-temps, audit de chaque action. Le problème NHI vu par un praticien Go et ex-pentester. A static API key hands your agent your identity: broad, long-lived, untraceable. Give it its own, short and revocable: machine identity, just-in-time tokens, an audit trail on every action. The non-human identity problem, from a Go practitioner and ex-pentester.

29 juillet 2026 · ~8 min · Go · DevSecOps · Supply chain 29 July 2026 · ~8 min · Go · DevSecOps · Supply chain

Sécuriser la supply chain d'un projet Go : le pipeline qui tient en 2026 Securing a Go Supply Chain: The Pipeline That Holds in 2026

La sécurité d'un projet Go ne vit pas dans la revue de code, elle vit dans le pipeline. L'enchaînement complet : govulncheck, pinning des dépendances, SBOM, scan d'image, secrets, durcissement GitHub Actions et signature. Étape par étape, avec les outils et là où chacun casse. A Go project's security does not live in code review, it lives in the pipeline. The full chain: govulncheck, dependency pinning, SBOM, container scan, secrets, GitHub Actions hardening and signing. Step by step, with the tools and where each one breaks.

27 juillet 2026 · ~8 min · DevSecOps · Souveraineté · EU 27 July 2026 · ~8 min · DevSecOps · Sovereignty · EU

La région « EU » ne suffit pas : le playbook du self-host souverain An "EU Region" Is Not Enough: The Sovereign Self-Hosting Playbook

Une région « EU » chez un cloud américain n'est pas de la souveraineté : le CLOUD Act la traverse. Le playbook technique pour auto-héberger une stack souveraine et prête pour l'IA, avec Terraform et Ansible. Les briques open source qui remplacent les services US. An "EU region" on a US cloud is not sovereignty: the CLOUD Act reaches through it. A hands-on playbook to self-host a sovereign, AI-ready stack with Terraform and Ansible. The open-source pieces that replace US services.

23 juillet 2026 · ~9 min · DevSecOps · IA · Agents 23 July 2026 · ~9 min · DevSecOps · AI · Agents

Mon agent IA a voulu supprimer mes secrets. Il n'a pas pu. My AI agent tried to delete my secrets. It couldn't.

Un agent de code, c'est un nouveau dev : large en local, verrouillé en prod. Comment je cadre ses droits par environnement avec des principes DevSecOps. Les garde-fous vivent dans les hooks et le RBAC, les secrets ne sont jamais lus par l'agent, et la prod se répare par pull request IaC. Deux war stories de production à l'appui. A coding agent is a new dev: broad locally, locked down in prod. How I scope its rights per environment with DevSecOps principles. Guardrails live in hooks and RBAC, secrets are never read by the agent, and prod gets fixed through IaC pull requests. With two production war stories.

23 juillet 2026 · ~5 min · Go · LLM · Protocoles 23 July 2026 · ~5 min · Go · LLM · Protocols

Reconstruis-le pour le comprendre : des protocoles réseau aux agents LLM Rebuild it to understand it: from network protocols to LLM agents

Tu ne comprends vraiment un système qu'en le reconstruisant. De TCP, DNS et Modbus recodés en Go à une boucle d'agent LLM minimale : comprendre le tooling et la fenêtre de contexte, puis détourner l'outil à ton besoin. Le vrai réflexe de dev. You only truly understand a system by rebuilding it. From TCP, DNS and Modbus recoded in Go to a minimal LLM agent loop: grasp tooling and the context window, then bend the tool to your need. The real dev instinct.

22 juillet 2026 · ~6 min · Go · Postgres · Sécurité 22 July 2026 · ~6 min · Go · Postgres · Security

Mets la barrière entre tes tenants dans Postgres, pas dans ton code Go Put the wall between tenants in Postgres, not in your Go code

Filtrer par tenant dans ton code Go marche, jusqu'au jour où un « if » manque. Comment je mets l'isolation dans la base avec la Row-Level Security de Postgres, pilotée depuis Go avec pgx : le tenant posé par connexion, un rôle BYPASSRLS à part, et les pièges qui mordent (échec silencieux, récursion 42P17). Tiré de la production. Filtering by tenant in your Go code works, until the day an "if" is missing. How I move isolation into the database with Postgres Row-Level Security, driven from Go with pgx: the tenant set per connection, a separate BYPASSRLS role, and the traps that bite (silent failure, 42P17 recursion). From production.

20 juillet 2026 · ~7 min · Go · IA · ML 20 July 2026 · ~7 min · Go · AI · ML

Mets le LLM en dernier : j'ai remplacé un modèle 7B par un petit classifieur Go Put the LLM Last: I Replaced a 7B Model With a Tiny Go Classifier

La plupart des tâches « IA » ne sont pas des tâches LLM. Comment j'ai remplacé un modèle 7B (GPU) par un classifieur TF-IDF en Go pur : des règles d'abord, un petit modèle ensuite, le LLM en dernier recours. Avec les vrais chiffres, tirés de la production. Most "AI" tasks are not LLM tasks. How I replaced a 7B model (GPU) with a pure-Go TF-IDF classifier: rules first, a small model next, the LLM only as a last resort. With the real numbers, from production.

17 juillet 2026 · ~10 min · Go · DevSecOps · IA 17 July 2026 · ~10 min · Go · DevSecOps · AI

Ne laisse jamais le modèle choisir le tenant ID : sécuriser un agent LLM en Go Never Let the Model Pick the Tenant ID: Securing an LLM Agent in Go

Un LLM qui appelle des outils, c'est un client non fiable avec tes credentials de prod. Retour de terrain pour sécuriser un agent LLM (et les serveurs MCP) en Go : identité côté serveur, OAuth, RLS, masquage PII, rate limits, audit. Tiré de la production. An LLM that calls tools is an untrusted client with your production credentials. A field guide to securing an LLM agent (and MCP servers) in Go: server-side identity, OAuth, RLS, PII masking, rate limits, audit logging. From production.