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.