jeudi 28 mai 2026

La commande llama.cpp qui fonctionne pour moi

HIP_VISIBLE_DEVICES=0 ./llama-server -a Devstral-Small-2507 -m ~/Devstral-Small-2-24B-Instruct-2512-Q4_K_M.gguf -c 64000 -fa on -ngl 99 --jinja --host 0.0.0.0 -nkvo

Rapidement, parce qu'il est tard, et que je dois aller me coucher. Ce qui marche: HIP_VISIBLE_DEVICES=0 pour viser le GPU discret, le modèle Devstral-Small-2-24B-Instruct-2512-Q4_K_M.gguf qui fonctionne bien en agentique et tient tout juste dans mes 16 GB de VRAM, -c 64000 pour le contexte (que l'on peut augmenter à volonté, grace au -nkvo), le --jinja pour s'assurer que la couche agentique fonctionne, et le -nkvo qui pousse le contexte en RAM, ce qui ralentit un peu (mais pas tant que ça!), mais surtout permet d'augmenter grandement le contexte et de permettre des tâches nettement plus avancées.

jeudi 21 mai 2026

Une boucle agentique

Un poil avares de documentation, chez Mistral ! Il a fallu se battre, mais j'ai finalement quelque chose d'un peu intégré. Mon idée : avoir Mistral Vibe qui tente de corriger les issues Github associées à mon projet.

Première étape, avoir Vibe qui cause à Github. C'est possible via le serveur MCP de Github, dont la configuration est simple, ou du moins le serait si la doc aidait un petit peu. Ce qui a fonctionné chez moi, c'est de créer un token sur Github, de lui donner accès à tous mes dépôts, et de lui donner accès en lecture et écriture aux pull requests. Ensuite, avec le token généré, j'enlève la ligne mcp_servers = [] si elle existe et j'ajoute ceci à mon ~/.vibe/config.toml:

[[mcp_servers]]
name = "github"
transport = "http"
url = "https://api.githubcopilot.com/mcp/"

[mcp_servers.headers]
Authorization = "Bearer letokendegithubquilestbô"

Ensuite, dans github, je fais /mcps et je vois qu'il détecte mon mcp github, et m'indique toute une liste d'outils. Super - On peut passer à la suite. Je peux lui demander de regarder la liste des issues du projet, prendre la première, la corriger, et faire une PR. Magie ! Il se lance et fait tout de manière autonome !

Ensuite, j'utilise la commande /loop pour faire tourner cela automatiquement. Un prompt qui semble marcher pas mal:

Look at list of issues for the current project. Take the first one that doesn't have an open PR, attempt to fix it. Do a fetch, then a reset on master, create a new branch from master, correct the issue, push the branch, and create a pull request, do not merge into master. If no such issue exists, stop.

Je peux m'en aller et le laisser tourner, et depuis n'importe quel appareil, vérifier l'avancée des correctifs, lever les issues, et fusionner les PRs!

mardi 19 mai 2026

Un setup de vibe coding en local qui fonctionne avec 16GB de VRAM (si on est patient)

J'étais arrivé à la conclusion qu'il n'est pas possible de vibe coder avec seulement 16GB de VRAM, et que je devais donc considérer mon AMD 7800XT comme suffisante pour du conversationel, mais pas pour de l'agentique.

Le problème principal est un problème de taille. Les gros modèles ne tiennent pas en mémoire, et les petits fonctionnent mal : soit ils partent en mode poisson rouge et racontent d'importe quoi, soit ils perdent la compréhension du protocole pour communiquer avec la GUI agentique.

Sauf qu'à force d'insister, j'ai compris plusieurs choses : d'une part, ollama, lorsqu'il détecte que la VRAM est basse, configure par défaut un tout petit contexte. D'autre part, ollama est capable de décharger une partie de la VRAM en RAM, ce qui est lent, mais doit continuer de fonctionner. Et c'est seulement lorsque l'on tente de changer de modèle qu'il s'emmelle les pinceaux et peut planter en ne trouvant plus de mémoire pour y charger le modèle.

Un setup qui marche chez moi, c'est donc devstral-small-2 avec 32K de contexte, en utilisant Mistral Vibe du côté client. Alors, c'est très lent - Compter plusieurs minutes entre chaque action de la boucle agentique, et plusieurs dizaines de minutes pour arriver au bout d'une requête ou feature, surtout si on lui demande de compiler (il se trompe beaucoup). Mais ça marche !

J'ai plein d'idées, principalement orientées vers l'idée de le laisser tourner en tâche de fond pendant que je fais autre chose (comme écrire des billets de blog).

mercredi 15 avril 2026

Nouveau mini-jeu

Parce que c'est l'occasion d'intégrer les dessins de la petite, je me suis lancé dans un nouveau mini-jeu. Et j'ai bataillé beaucoup trop longtemps avec Godot avant de finalement repasser à mon bon vieux sfml. Pour un jeu complexe, avec beaucoup d'animations ou même en 3D, il n'y a pas photo. Mais pour un bête truc qui affiche 3 images, revenir aux fondamentaux, c'est plutôt plaisant.

mardi 24 mars 2026

pySpice retrospective

J'ai (presque) complété l'implémentation Unity3D, j'ai pu aider à la game jam, tout va bien. Au final, avec les outils modernes, tout cela va quand même rudement vite - Un jeu presque complet en 200 lignes de Python, et encore moins en Godot ou Unity? C'est impressionnant.

vendredi 20 mars 2026

La même en Godot!

En une petite journée, j'ai pu porter pySpace vers gdSpace. Très intéressant - Certaines choses sont nettement plus élégantes, d'autres moins, mais ça reste un bon système (peut-être un poil plantogène?). Hâte de passer à Unity3D!

mercredi 18 mars 2026

On se remet à écrire des jeux

La game jam de l'école approche, et, soucieux de mener à bien mon rôle de mentor, je me suis lancé dans l'écriture d'un mini shooter spatial en vue de dessus, en utilisant Python, langage avec lequel je suis très peu familier.

Une fois compris qu'il fallait mettre des self partout, et avec l'assistance d'une IA locale (il faudra que je vous parle de mon petit lab IA dont je suis très content), j'ai réussi à coder quelque chose de sympathique étant donné le peu de temps que je m'étais donné. Il est vrai qu'avec Python, tout va assez vite, même si je perds parfois pas mal de temps avec les petites erreurs de syntaxe. Il faudra que j'améliore mon setup.

Voici la bête, les graphismes sont de l'IA (locale à nouveau, mais de l'IA quand même), mon but étant purement de me dépatouiller du code, qui lui est écrit à la main, même si je me suis permis de poser des questions à Mistral.

Prochaine étape : faire exactement la même chose avec Godot, et avec Unity!

samedi 24 janvier 2026

Un NAS maison qui dépote

Je me suis lancé tête baissée dans la configuration de mon Raspberry Pi pour le transformer en NAS. Aprés une première soirée pas très productive à me battre avec le SSH, j'ai fini par réussir à installer les services suivants : OpenSSH pour l'accès à distance, Avahi pour la résolution de nom, et enfin Samba pour le partage de répertoires.

Et ça marche du tonnerre ! Je peux même y accéder depuis mon IPhone, moyennant l'ajout de support pour une vieille version du protocole. Après tout, Apple n'est qu'une petite PME sans grande ambition, on ne peut pas leur demander de supporter SMB 3!

Je m'en vais maintenant mettre tout ceci en production pour de bon, et le tester un bon moment. Si en effet cela s'avère utile, je pense en particulier pour le partage de fichiers entre les différentes machines de la maison, ainsi que pour centraliser les photos de famille, alors j'investirai dans un Raspberry Pi 5 et une paire de M2 pour avoir du RAID.

Un nouveau clavier

Ça y est ! Mon pauvre TypeMatrix est mort. Il m'a donc fallu chercher un remplacement, et j'ai beaucoup hésité avant de finalement me lancer dans le clavier de chez Truly Ergonomic. Les débuts sont plutôt encourageants : mon cerveau voulait absolument taper en Qwerty, même si je suis principalement utilisateur de Dvorak, mais je m'y suis vite fait et je suis revenu aux bonnes habitudes. Le vrai problème, ce sont les autres touches : en particulier, la touche effacement, les touches flêchées, et les touches Ctrl et Alt ne me viennent absolument pas naturellement, et j'ai vite fait de taper n'importe où, avec des résultats hilarants sur ce qui se passe à l'écran.

Mais le vrai souci, et ce qui va m'empêcher de passer au boulot avec le même clavier, c'est le bruit ! C'est un clavier mécanique, ce qui veut dire que le claquement du plastique et le bruit des ressorts est assez fort. Pas de souci pour la maison, mais au milieu de l'open space, je ne vais pas me faire des amis... La recherche du clavier ultime pour remplacer le Typematrix continue !

jeudi 8 janvier 2026

Bonne année !

Petite année sur le blog, avec 17 articles publiés, ce qui est bien mais pas top. Peut-être un peu plus en 2026, alors que j'ai plusieurs projets sur le feu. Déjà, je découvre plein de choses intéressantes avec Bazzite et que j'ai bien l'intention de partager. Ensuite, je me lance dans la création d'une démo de jeu de plateforme en préparation d'un hackathon - Au menu, Godot et Blender. Et enfin, j'ai l'intention d'enfin créer un vrai NAS familial afin de partager les fichiers facilement à la maison, et d'au moins en faire un prototype avec mon Raspberry Pi 4.

Bonne année 2026 à tous, donc !

dimanche 21 décembre 2025

Bazzite

Je vous avais parlé dans l'article précédent de Bazzite, la distribution orientée gaming. Je continue à en être pleinement satisfait - On a vraiment besoin de toucher à rien, tout se gère via le client steam en mode plein écran, les jeux tournent et le matériel aussi.

Le XBox wireless adapter marche très bien, ainsi que le dongle de ma manette Razer. Parfois, il faut aller débrancher et rebrancher un dongle pour que tout le monde s'y retrouve, mais cela reste l'exception.

Finalement, la vraie limitation de Bazzite, c'est justement de sortir du petit pré carré du gaming Steam - En particulier, la multiplication des gestionnaires de paquet de type Flatpack et autres qui se contrôlent via des scripts ujust me semble juste ajouter au désordre ambiant - J'ai ainsi essayé d'installer openrgb pour calmer un peu les ardeurs des diodes du PC, j'ai suivi les instructions, et, déçu par la complexité de l'installation, j'ai voulu revenir en arrière, et ce n'est pas vraiment possible. Il faudrait sans doute retrouver chaque paquet Flatpack et le supprimer, en espérant ne pas se tromper. Les utilisateurs venant de Windows ne seront sans doute pas dépaysés, mais j'ai l'habitude de pouvoir garder mon système propre avec des desinstallations parfaitement configurées, et cela m'a chagriné. Je vais donc surtout ne pas tenter de bidouiller.

dimanche 30 novembre 2025

Un PC de gamer

J'ai fait une folie - J'ai acheté un vrai PC de gamer. Chez un assembleur, dans un vrai petit magasin, ça m'a rappelé ma folle jeunesse où j'errais du côté de la rue Montgallet. Au menu, une belle tour faite de blanc et de verre, avec refroidissement à eau "tout en un", et beaucoup trop de LED - Il y en a même sur la RAM ! Je n'ai pas fait gaffe. Et encore, il était à 2 doigts de me refourger l'afficheur de température sur le ventilo !

J'ai installé Bazzite sur la bestiole (il y avait eu un journal sur Linuxfr), et je suis épaté par la qualité du soft. Le PC marche presque tout seul, le mode "big picture" par défaut permet de démarrer sans avoir à toucher un clavier ou une souris, et l'on choisit son jeu au gamepad, comme une XBox, mais en nettement mieux.

J'ai un petit souci cependant avec le Bluetooth, qui est au mieux parfois instable avec un seul gamepad, au pire complètement à la ramasse quand je tente d'en connecter plusieurs. Je vais tenter des gamepads avec des dongles et avec le Windows XBox Wireless Adapter, avec l'espoir que ça fonctionne mieux.

Me voici ravi - Il ne reste plus qu'à l'utiliser ! J'ai commencé Chants of Sennaar, j'ai bien entendu fait tourner X-Plane dessus, et Expedition 33 me fait de l'oeil.

dimanche 16 novembre 2025

KSA, mon chaton dans l'espace (et sous Linux, s'il vous plait !)

Enfin, après des mois d'attente, une version jouable de Kitten Spage Agency (KSA), qui se veut le digne successeur de Kerbal Space Program (KSP), est maintenant disponible, et il a fallu que je l'essaie immédiatement. On s'inscrit, on fait optionellement un petit don pour soutenir les devs, et on télécharge l'installeur.

Même si une version Linux est prévue pour bientôt, il s'agit d'un installeur Windows. Heureusement, cela fonctionne sous Wine / Proton, à condition de bidouiller un petit peu - Cette vidéo par exemple nous prend suffisamment par la main pour le faire fonctionner.

Et ça marche ! Alors, avec ma config antédiluvienne, je tourne à 5 images par seconde, et j'ai de plus quelques bugs graphiques, mais techniquement ça tourne. J'ai hâte de suivre les progrès de l'équipe, et de mettre à jour mon matos pour pouvoir pleinement en profiter. Vivement la suite !

jeudi 13 novembre 2025

Steam Frame - L'annonce

Enfin, des informations ! Steam a annoncé aujourd'hui son nouveau matériel: la manette, la Steam Machine, qui est un mini-PC sous SteamOS qui veut se faire passer pour une console (ce qui est exactement mon projet de cet hiver par ailleurs), et le Steam Frame, qui est le nouveau casque de réalité virtuelle autonome, accompagné de ses contrôleurs.

Passé la déception d'avoir à attendre jusqu'à 2026 pour poser mes mains sur le Steam Frame, c'est la joie de comprendre que Valve a l'intention de fournir exactement ce que je voulais : un casque autonome (pour les jeux arcade), mais qui peut faire de l'affichage déporté depuis un PC (pour les jeux plus gourmands), avec une connection sans fil de haute qualité via un adaptateur, le tout parfaitement compatible avec Linux.

Ma patience va être mise à rude épreuve !

mardi 4 novembre 2025

Rêves de rouille

Je m'intéresse, de loin, à Rust - Puisque c'est apparemment le futur de la programmation système ! Même si de nombreux aspects me poussent à m'interroger, en particulier la Pythonification avec la démultiplication de minuscules bibliothèques qui sont tellement faciles à tirer via le gestionnaire de paquets et finissent par créer un bazar infâme - Mais je ne demande qu'à être convaincu. Je vais donc tenter de m'y mettre doucement. Parmi les possibles, j'entrevois un bon vieux raytracer : c'est amusant, ça peut être très simple, et l'on peut itérer pratiquement indéfiniment à rajouter des fonctionnalités. On va donc devoir tirer la "crate" image, quelque chose pour gérer la géométrie en 3D (à moins de la réécrire), et apprendre à faire des tests unitaires. Ah, et bien sûr, l'intégration avec Emacs, sans quoi je suis perdu. Et on verra bien !

mardi 30 septembre 2025

Divisions entières rapides

Je me suis attaqué à un morceau plutôt amusant : en effet, j'ai eu besoin d'écrire ma propre queue circulaire à accès concurrent, avec un producteur et un consommateur - Typiquement le genre de problème que l'on désire résoudre avec un algo "lock-free". Ce n'est pas très compliqué : un atomic pour l'écriture, un atomic pour la lecture, et basta. Là où ça devient intéressant, c'est dans les différentes optimisations sur lesquelles on peut travailler.

Tout d'abord, bien penser à séparer ses atomiques, afin d'éviter le "false sharing", c'est à dire le transfer entre les caches CPUs de données qui sont indépendantes, mais proches. On utilise pour cela alignas(std::hardware_destructive_interference_size) devant nos attributs afin de bien les séparer.

Ensuite, on se rend compte que l'on a besoin à chaque lecture ou à chaque écriture de vérifier si l'on a atteint la fin du tampon circulaire pour repartir à zéro. Cela peut se faire soit avec un test, soit avec un modulo. Les deux sont plutôt chers... Heureusement, si l'on est pas trop regardant sur la taille exacte de son tampon, on peut l'arrondir à la puissance de 2 suivante, ce qui simplifie énormément les calculs : en effet, le modulo n'est alors qu'un masque...

Voici la partie intéressante du code, qui utilise std::bit_ceil pour trouver la prochaine puissance de 2, calcule le masque, et effectue l'incrément et la division modulaire

class Buffer
{
public:
    Buffer(size_t length):
        _size(std::bit_ceil(length)),
        _mask(_size - 1),
        _reader(0),
        _writer(0)
    {
    }

    void nextRead()
    {
        _reader = (_reader + 1) | _mask;
    }

    const size_t _size;
    const size_t _mask;
    alignas(std::hardware_destructive_interference_size)
    std::atomic _reader;
    alignas(std::hardware_destructive_interference_size)
    std::atomic _writer;
};

Mais la plus grande optimisation que l'on peut faire est de correctement effectuer l'ordonnancement de la mémoire, en sélectionnant memory_order_relaxed, memory_order_acquire ou memory_order_release lors des appels à store et load. La différence est très impressionnante - Un facteur 10 ou 20 dans certains benchmarks ! Je vous passe la logique exacte (en très gros, on load en memory_order_acquire, on store en memory_order_release, et pour des cas indépendants comme chercher la taille du tampon, on peut utiliser memory_order_relaxed), mais en permettant la réécriture des opérations de manière plus flexible que l'accès strict par défaut, le compilo est capable d'effectuer de très bonnes micro-optimisations, et cela se voit !

dimanche 3 août 2025

Oh la jolie maison !

De mes vacances en Crète, je retiens tout pleins de trucs (en particulier, je me suis senti complètement dans Subnautica à chaque fois que je sautais dans l'eau !). Mais voilà quelque chose qui m'a beaucoup plu : cette jolie maquette en terre cuite de maison, dans le plus pur style Assassin's creed - Odyssey, et qui trône au musée archéologique de la Canée. Maintenant, j'ai très envie de la modéliser !

lundi 21 juillet 2025

Inside - Un jeu de platforme / réflexion glauquissime

J'avais regardé un let's play de Inside il y a de cela quelques temps, pensant que je n'aurais jamais l'occasion d'y jouer, et puis il était sur le Game Pass et j'avais un peu de temps, alors je m'y suis mis. Quel beau jeu ! Quel jeu assez terrifiant aussi, avec ce petit garçon pourchassé par des hommes, des chiens et des machines, qui doit tenter de survivre dans un monde post-apocalyptique où la plupart des êtres humains semblent être devenus des automates décérébrés au service de quelques uns. Il y a des plates formes, des puzzles pas trop méchants, des parties sous l'eau très angoissantes, des machines étrages, et une ambiance très sombre. La difficulté est très mesurée, et je n'ai jamais été coincé bien longtemps - C'est surtout l'atmosphère glauque et l'impression de danger permanent (ah, la sirène !) qui rendent l'expérience de jeu tout à fait inoubliable.

lundi 9 juin 2025

The Ascent - Un cyber punk bourrin

En cherchant un nouveau jeu multijoueurs et crossplay pour retrouver un peu les sensations de Diablo 4, je suis tombé sur The Ascent, qui avait de plus la bonne idée d'être en soldes. Dans ce hack n slash cyberpunk, on incarne un gros bras d'un parrain local et qui nous envoie tirer sur tout ce qui bouge dans diverses missions qui nous emmènent aux 4 coins de la ville.

Le monde est immense et alterne entre les zones commerciales, plutôt sûres, et où l'on peut améliorer ses armes et ses divers implants, et de grandes zones industrielles à moitié en ruines où l'on se fait attaquer par de l'humain et par de l'extra-terrestre à chaque pas. Il faudra choisir la bonne arme, se mettre à couvert, et esquiver au bon moment pour survivre aux hordes d'ennemis, ainsi qu'aux boss particulièrement puissants. L'intrigue est parfois maigrelette, mais un codex se remplit au fur et à mesure pour ceux qui veulent du contexte. Le jeu est très beau, les effets de lumière dans cette ville crépusculaire sont magnifiques. L'on notera quelques bugs et quelques crashs, mais rien qui n'empêche de bien rigoler entre potes à tout défoncer.

samedi 24 mai 2025

Unravelled Two - Un bon casse-tête plateforme pour jouer ensemble

Cela faisait un petit moment que j'avais repéré Unravelled Two dans le Game Pass, et en cherchant le prochain jeu pour jouer avec les enfants, on a décidé de s'y mettre. Comme dans beaucoup de jeux du genre, c'est tout d'abord un principe, celui de deux personnages faits de cordes, attachés l'un à l'autre, et qui peuvent utiliser la corde pour s'accrocher à certains emplacements, et se tirer l'un l'autre des plateformes. Ce principe est ensuite décliné dans tout un tas de tableaux où l'on doit s'entre aider pour passer les obstacles.

Une petite histoire et des décors très variés, forêt, parc, maison, entrepôt, complètent l'expérience de jeu. Le multijoueurs est optionel : si l'on joue seul, l'on doit passer d'un personnage à l'autre avec un bouton. Il est possible de combiner les deux personnages en un seul afin de ne pas avoir à répéter les passages de plateforme 2 fois. Ce mécanisme, toujours présent en multi, fonctionne particulièrement bien lorsque l'on joue avec un jeune enfant : on a le temps de l'aider ou de lui donner des indications sur où se tenir et où attraper le fil, tandis que le joueur le plus expérimenté du duo peut s'occuper des parties où il faut synchroniser ses sauts ou encore certaines parties plateforme un peu plus compliquées.

Ajoutons à ceci que l'ambiance, même un peu inquiétante, reste bon enfant, et que chaque tableau est assez court et permet donc de s'arrêter à peu près n'importe quand, et l'on a un petit jeu casual tout à fait sympathique.