{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Camil Benameur - Blog",
  "home_page_url": "https://blog.camilbenameur.com/fr/",
  "feed_url": "https://blog.camilbenameur.com/fr/feed.json",
  "description": "Retours d'expérience sur des logiciels que j'ai construits, surtout en Go. Par Camil Benameur, ingénieur logiciel à Nice.",
  "language": "fr",
  "authors": [
    {
      "name": "Camil Benameur",
      "url": "https://camilbenameur.com/"
    }
  ],
  "items": [
    {
      "id": "https://blog.camilbenameur.com/fr/blog/offline-installer-retrospective/",
      "url": "https://blog.camilbenameur.com/fr/blog/offline-installer-retrospective/",
      "title": "Comment fonctionne un installateur hors ligne, et ce que j'ai surdimensionné en chemin",
      "summary": "Comment fonctionne un installateur pour PC industriels isolés du réseau (air-gapped), du déploiement SSH et de la progression en direct au relais hors ligne de paquets .deb, et ce que j'ai surdimensionné et changerais.",
      "content_text": "Comment fonctionne un installateur pour PC industriels isolés du réseau (air-gapped), du déploiement SSH et de la progression en direct au relais hors ligne de paquets .deb, et ce que j'ai surdimensionné et changerais.",
      "date_published": "2026-10-14T00:00:00.000Z",
      "authors": [
        {
          "name": "Camil Benameur"
        }
      ],
      "tags": [
        "go",
        "architecture",
        "offline",
        "installation",
        "industrial",
        "retrospective",
        "ai-assisted-development"
      ],
      "language": "fr"
    },
    {
      "id": "https://blog.camilbenameur.com/fr/blog/from-backlog-to-offline-installer/",
      "url": "https://blog.camilbenameur.com/fr/blog/from-backlog-to-offline-installer/",
      "title": "Du backlog au MVP : construire un installateur industriel hors ligne en Go",
      "summary": "Comment j'ai conçu et construit, en tant que stagiaire, un installateur pour des PC industriels air-gapped : installation de Docker hors ligne à partir de paquets .deb, avec la 27.5.1 comme version par défaut, et ce que j'ai appris en le faisant.",
      "content_text": "Correction du (2026-10-14): 14 octobre 2026 : j'ai corrigé la façon dont je décrivais l'installation hors ligne de Docker (quels paquets étaient épinglés, comment les dépendances étaient résolues, ce que faisaient certaines étapes), reformulé d'autres étapes ainsi que le système d'appui pour qu'ils correspondent au fonctionnement réel de l'installateur, atténué des affirmations sur l'architecture et sur le résultat, et supprimé un détail de configuration ainsi qu'une affirmation sur la disponibilité d'autres personnes. Un article ultérieur examine le projet plus en profondeur. 29 septembre 2026 : j'ai retiré des affirmations que je ne pouvais pas étayer : qu'une installation manuelle prenait des heures et qu'elle était ramenée à quelques minutes, que l'installateur passait à l'échelle sur des parcs de machines, que le résultat était reproductible et moins sujet aux erreurs, qu'il tournait en production, et qu'il y avait des fenêtres de déploiement strictes. J'ai aussi retiré des affirmations sur mes coéquipiers et sur le fait de travailler surtout seul, décrit le point de départ comme un besoin plutôt que comme une demande client, atténué certaines affirmations générales sur les PC industriels, et ajouté que j'ai été responsable du projet jusqu'en mars 2026.\n\nComment j'ai conçu et construit, en tant que stagiaire, un installateur pour des PC industriels air-gapped : installation de Docker hors ligne à partir de paquets .deb, avec la 27.5.1 comme version par défaut, et ce que j'ai appris en le faisant.",
      "date_published": "2026-02-05T00:00:00.000Z",
      "date_modified": "2026-10-14T00:00:00.000Z",
      "authors": [
        {
          "name": "Camil Benameur"
        }
      ],
      "tags": [
        "go",
        "architecture",
        "devops",
        "offline",
        "installation",
        "industrial"
      ],
      "language": "fr"
    },
    {
      "id": "https://blog.camilbenameur.com/fr/blog/on-streaming-optimization/",
      "url": "https://blog.camilbenameur.com/fr/blog/on-streaming-optimization/",
      "title": "Streaming de JSON de LLM en Go : un scanner reprenable et un Healer",
      "summary": "Comment go-llm-stream analyse et répare le JSON émis en streaming par des LLM : un scanner reprenable au niveau de l'octet, un healer pour la sortie tronquée, et ce que ses benchmarks montrent ou non.",
      "content_text": "Correction du (2026-09-29): Quand j'ai publié cet article en janvier, j'ai écrit que l'approche de streaming d'encoding/json réanalyse tout le buffer à chaque chunk et est en O(n²), et que go-llm-stream règle ce problème. C'était faux. encoding/json.Decoder est en O(n). Le coût quadratique n'apparaît que lorsque l'on accumule les chunks et que l'on réanalyse soi-même tout le buffer à chaque chunk. Le tableau comparatif que j'avais présenté à l'origine (environ 500 analyses pour 1 Mo) n'a jamais été mesuré par un benchmark. Quand j'ai comparé les approches directement l'une à l'autre en juin 2026, Decoder s'est aussi révélé environ 2 à 3 fois plus rapide par opération que le StreamReader de go-llm-stream sur une entrée découpée en chunks. La bibliothèque vaut le coup pour réparer une sortie tronquée, lire les champs au fur et à mesure qu'ils sont complets, et sauvegarder et restaurer l'état du scanner, pas pour sa vitesse. J'ai aussi changé le titre de l'article et corrigé plusieurs autres affirmations ; la liste se trouve à la fin de l'article.\n\nComment go-llm-stream analyse et répare le JSON émis en streaming par des LLM : un scanner reprenable au niveau de l'octet, un healer pour la sortie tronquée, et ce que ses benchmarks montrent ou non.",
      "date_published": "2026-01-27T00:00:00.000Z",
      "date_modified": "2026-09-29T00:00:00.000Z",
      "authors": [
        {
          "name": "Camil Benameur"
        }
      ],
      "tags": [
        "go",
        "llm",
        "streaming",
        "state-machines"
      ],
      "language": "fr"
    }
  ]
}