Yann Bucaille

00 surface

Technicien systèmes et réseaux en formation · TSSR · 2i Academy, Normandie

Yann Bucaille

Je monte des serveurs, j'écris des outils et je construis des interfaces, du binaire jusqu'à l'IA locale. Mes projets sont rangés ici par couche, de l'écran jusqu'au socle.

Je cherche une alternance défiler pour descendre ↓

Couche 01

Interfaces & IA

Ce que l'on voit à l'écran, et les modèles qui tournent derrière, en local.

01.1 · runtime d'IA local · code privé

Nexus

Le projet que je fais évoluer depuis le plus longtemps : un runtime d'IA local et mono-utilisateur, conçu pour que chaque décision reste lisible.

Le modèle propose ; la politique du backend, le périmètre de l'espace de travail et un exécuteur contrôlé autorisent. Les outils sont en lecture seule et une approbation ne peut déclencher ni écriture, ni commande shell. Mémoire par portée, sessions indépendantes des projets, plugins déclarés par manifeste, dont un module d'échecs avec un apprentissage hors ligne.

Cockpit « Horizon » · Ctrl+K ouvre la palette de commandes · le code reste privé

PythonFastAPISQLiteCLI Node.jsNext.jsuvPlaywright

01.2 · observabilité de LLM

Nexus Observatory

Un tableau de bord local pour surveiller, déboguer et comparer des exécutions de modèles de langage.

Chaque prompt exécuté devient un run consultable, avec sa trace en frise chronologique. Les fournisseurs sont interchangeables : un mock local ou n'importe quel point d'accès compatible OpenAI. Un Model Lab compare les réponses de plusieurs modèles côte à côte.

Tableau de bord de Nexus Observatory Frise chronologique d'une trace d'exécution

TypeScriptNext.jsTailwind CSSFastAPIPythonSQLite

01.3 · outil de développement · publié sur PyPI

LiveQuill

On décrit une modification dans une barre flottante posée sur son site local ; le modèle choisi modifie les vrais fichiers et la page se recharge.

Il fonctionne avec une API, un modèle local ou un agent en ligne de commande. Python 3.10 et plus, aucune dépendance, une intégration continue sur GitHub Actions et un paquet publié sur PyPI.

Premier lancement réel avec Claude Code · accéléré ×3

Python0 dépendancePyPIGitHub Actions

01.4 · son, image et composition par LLM

equation sound lab

Des équations qu'on entend. On écrit y = f(x), un point parcourt la courbe et sa hauteur devient la hauteur du son.

La règle : f = 130,81 Hz × 2y. y = 0 donne un do3, +1 monte d'une octave. La courbe se trace en direct sous sa formule, typographiée par MathJax, et le lab exporte la vidéo avec ffmpeg.

Great Fairy Fountain (Koji Kondo), reprise à la harpe · une corde pincée Karplus-Strong par voix

Node.jsMathJaxffmpeg

01.5 · entendre une IA douter

le son du doute

Chaque mot qu'un modèle de langage écrit devient une note. Quand il hésite, les mots qu'il a failli dire sonnent faux et la cassette se met à pleurer.

Ollama donne les cinq suites les plus probables de chaque token ; le doute est leur entropie, ramenée entre 0 et 1. La mélodie, l'harmonie et le tempo sont composés à l'avance : seul le doute, mesuré token par token, ajoute des notes fantômes, fait pleurer la bande et change le visage de la cassette. Les tests vérifient que la partition ne dépend jamais des réponses. Qwen 3.5 4B tourne en local, à température 0.

Qwen 3.5 4B invente une lune de Neptune · 1 min 43, avec le son

Node.jsOllamaQwen 3.5 4BffmpegMIT

Aussi dans cette couche

  • AERAPrototype : la webcam détecte en local deux mains et leurs 21 articulations ; un pincement pouce-index saisit une fenêtre et la déplace.TypeScript · Vite · Canvas 2D · Fastify
  • IrisReconstruction de Cats Identifier : détection et identification séparées, modèle entraîné puis évalué avant toute promotion explicite.Python · Flask
  • Orca ComputeBanc d'essai sur des cas SWE-bench réels : préparation des dépôts, notation dans Docker, mise en quarantaine des cas ambigus.Python · Docker · SWE-bench
  • MnemonicMémoire vectorielle locale : retrouver un souvenir par similarité de sens, stocké en JSONL ou dans un index FAISS.Python · FAISS
  • NexNotesNotes audio et texte, transcription locale par Whisper, sans cloud.Python · Whisper · CustomTkinter

Couche 02

Bureau & GPU

Mon environnement Linux, ce qui s'y affiche et ce qui le fait bouger.

02.1 · fond d'écran audio-réactif

Woofer

Un fond d'écran Wayland qui réagit à la musique : les basses poussent l'image, chaque kick la fait vibrer.

Woofer lit le son directement dans PipeWire, calcule le rendu sur le GPU avec wgpu et se place sous les fenêtres grâce à wlr-layer-shell. Treize préréglages, du cône de haut-parleur au verre brisé, se changent à chaud avec woofer ctl ; --idle-fps 0 arrête le rendu dans le silence.

Préréglages woofer · nebula · shards · ripple

RustwgpuVulkanPipeWireWayland

02.2 · apprendre le russe sans y penser

Rusky

Toutes les 25 minutes, une carte de russe apparaît dans un coin de l'écran : trois réponses, la prononciation à la française, une explication en une phrase.

2 007 cartes sur dix niveaux, de l'alphabet jusqu'à l'argot et aux proverbes. La prononciation est calculée depuis l'accent tonique (молоко́ → ma·la·ko), la répétition est espacée façon Anki et chaque niveau s'ouvre quand le précédent est maîtrisé. La popup est une fenêtre GTK 4 posée par layer-shell au-dessus du bureau Wayland ; une fenêtre de révision suit l'activité sur 30 jours et les points faibles.

Une vraie session, filmée par Rusky lui-même sur une base de démonstration

Rust 2024GTK 4layer-shellWayland2 007 cartes

Couche 03

Ligne de commande

Des binaires petits, rapides, qui font une chose et la prouvent.

03.1 · CLI Linux, macOS, Windows

c2pa-strip

Retire les Content Credentials (C2PA) des JPEG, PNG et WebP sans réencoder un seul pixel.

Le manifeste est rangé dans une boîte JUMBF. L'outil analyse le conteneur propre à chaque format et ne retire que le magasin C2PA : en JPEG, ses segments APP11, en gardant EXIF et ICC. À chaque push, la CI signe des images avec l'outil officiel c2patool, les nettoie et vérifie que le fichier est identique à l'original non signé.

$ c2pa-strip check photo.png
C2PA   photo.png  manifest store 100973 bytes, 1 manifest(s)
$ c2pa-strip remove photo.png
fixed  photo.png -> photo.clean.png  (219942 -> 118969 bytes)
$ c2patool photo.clean.png
Error: No claim found
$ cmp photo.clean.png original-before-signing.png && echo identical
identical

Rust 1.85+GitHub Actions3 OSMIT

03.2 · lecteur d'épisodes en terminal

CartmanCLI

Choisir une saison, un épisode, et le regarder dans mpv sans quitter le terminal.

L'interface TUI est écrite avec Bubble Tea : navigation au clavier, recherche par titre, reprise du dernier épisode vu. Un cache local accélère la recherche et la lecture, et mpv garde la position de chaque épisode. Tout passe aussi par des sous-commandes : cartman play 10 8, cartman resume, cartman search.

Enregistrée depuis le vrai binaire · choix d'une saison, puis des épisodes

GoBubble Teampv

03.3 · jeu de gestion en terminal · code non publié

PowerPrinter

Un jeu de gestion dans le terminal, des groupes électrogènes improvisés jusqu'aux essaims de Dyson autour de vraies étoiles.

Chaque étape est une chaîne de goulots d'étranglement : raffinerie, fonderie de voiles, lanceur, puis faisceau stellaire. Fermé, le jeu continue selon les vraies règles (contrats de combustible, usure, stockage) et affiche un bilan au retour. Il se sauvegarde toutes les 10 secondes, et à la réception de SIGTERM ou SIGHUP.

Une vraie partie · bilan hors ligne, chaîne de production, carte des étoiles

GoTUIsimulation hors ligne

Couche 04

Services

Ce qui tourne en continu sur mes machines, et ce qui le surveille.

04.1 · laboratoire personnel documenté

Homelab Pivuche

Un PC sous Arch Linux qui héberge mes machines virtuelles, avec un dossier technique complet : réseau, services, exploitation et migration.

Hôte Arch (QEMU/KVM, libvirt) relié par le pont NAT virbr0 aux VM proxy, apps01, monitor01 et ai01 PC Arch LinuxQEMU/KVM · libvirt · DNS · Ollama virbr0 · NAT proxyApache · entréedashboard apps01ForgejoDocker monitor01PrometheusGrafana ai01Nexusespace de travail

Le proxy est le point d'entrée, apps01 héberge Forgejo sous Docker, monitor01 supervise avec Prometheus et Grafana, ai01 accueille Nexus. La documentation consigne aussi les incidents, comme des conteneurs relancés sans leurs ports publiés qu'il a fallu recréer.

Arch LinuxQEMU/KVMlibvirtApacheCaddyDockerForgejoPrometheusGrafanaOllama

04.2 · console Docker Swarm

Phoenix Protocol

Trois managers Debian, des stacks réparties sur plusieurs machines : Phoenix donne une vue claire de ce que fait le cluster.

Il observe nœuds, services, stacks, tâches et réplicas. Un watchdog sur chaque manager journalise les transitions et les erreurs d'API. Le navigateur ne lit qu'un instantané JSON, jamais le socket Docker, qui reste derrière un proxy sur le réseau overlay interne. Le tout se déploie en mode global sur les managers éligibles.

Tableau de bord Phoenix, données de démonstration
Capture avec des données de démonstration

Docker SwarmPythonNginxJavaScriptThree.jsTailscale

Couche 05

Système & réseau

Une machine qu'on peut détruire et reconstruire, à l'identique, en une commande.

05.1 · infrastructure as code

debian-rebuild

Un serveur Debian 13 durci, créé et configuré entièrement par script sous KVM/libvirt, puis vérifié par 22 tests.

Accès par clé SSH uniquement, root refusé, sudo toujours avec mot de passe. Pare-feu nftables en liste blanche, fail2ban, modules noyau inutiles bloqués, auditd sur les comptes, sudo, SSH et le pare-feu, mises à jour de sécurité automatiques. Lynis note le durcissement à 84/100, contre 67 pour la même VM avant.

$ scripts/rebuild.sh
>> Destruction : 1 s
>> Déploiement : 139 s
>> Tests : 10 s
Reconstruction complète et testée en 2 min 30 s.
$ scripts/test.sh
[OK]    La VM a l'IP réservée 192.168.122.40 (bail DHCP)
[OK]    La VM répond au ping
[OK]    La VM sort sur Internet via le NAT (deb.debian.org)
[OK]    La VM résout les noms DNS
[OK]    SSH par clé fonctionne pour admin
[OK]    SSH ne propose pas l'authentification par mot de passe
[OK]    Connexion root refusée
[OK]    sshd : PermitRootLogin no, PasswordAuthentication no
[OK]    SSH : aucun transfert de ports, d'agent ni d'affichage X11
[OK]    sudo refusé sans mot de passe
[OK]    sudo accepté avec le mot de passe d'admin
[OK]    nftables actif, politique d'entrée à drop
[OK]    HTTP (80) ouvert : la page d'état répond
[OK]    Port 8080 joignable depuis la VM elle-même
[OK]    Port 8080 bloqué depuis l'hôte par le pare-feu
[OK]    fail2ban surveille sshd
[OK]    Mises à jour de sécurité automatiques activées
[OK]    Aucune mise à jour en attente
[OK]    Noyau : filtrage anti-usurpation, redirections refusées (sysctl)
[OK]    Modules inutiles bloqués (stockage USB, dccp, sctp...)
[OK]    AppArmor actif
[OK]    auditd surveille comptes, sudo, SSH et pare-feu
# Lynis 3.1.4 : 67/100 avant durcissement, 84/100 après

BashDebian 13KVM/libvirtcloud-initnftablesfail2banauditdAppArmorLynisnginx

Couche 06

Socle

Ce sur quoi tout le reste est posé : ma formation, mes premiers projets et mes certifications.

  1. LycéeSpécialité NSI, projet de fin d'année du bacHosting-Yann : un prototype d'hébergeur de serveurs de jeu, en PHP, CSS et JavaScript.
  2. 42Une année à l'école 42La Piscine C, puis ft_printf : réécrire printf en C, avec son Makefile.
  3. AutodidacteLinux, systèmes, réseaux et IA localeAppris en construisant les outils présentés plus haut.
  4. Aujourd'huiTSSR à 2i AcademyTechnicien supérieur systèmes et réseaux, Bac+2 en alternance, avec l'envie de poursuivre vers l'IA et le Big Data.

Certifications 11

Hors de la pile

Contributions open source

Je contribue en externe aux projets que j'utilise tous les jours : le shell de bureau Caelestia et Quickshell, sur lequel il repose, ou uutils coreutils, les outils de base de Linux réécrits en Rust.

À côté, l'extension caelestia-websearch ajoute la recherche web au lanceur Caelestia (Google, YouTube, Wikipédia, GitHub, Reddit, Maps), sans toucher au lancement d'applications, avec une installation locale sauvegardée et une désinstallation propre.

QMLQuickshellHyprlandGLSLShellRust

Index

Les technologies, et où elles vivent

Survolez ou sélectionnez une technologie : les projets qui l'utilisent s'allument dans la pile.

 

Couche 07 · à construire

Il manque une couche à la pile : votre entreprise.

Formation
TSSR, technicien supérieur systèmes et réseaux · 2i Academy
Rythme
3 semaines en entreprise, 1 semaine en formation
Lieu
France entière, présentiel ou/et télétravail
Début
avant le 31 décembre

M'écrire Mon CV (PDF)

Première page du CV de Yann Bucaille

Contact

bucaille.yann14@icloud.com

Document

CV · Yann Bucaille

Télécharger Nouvel onglet