Vue lecture

Vos sauvegardes Windows avec Plakar, et un backend S3

Bon, on va pas se mentir, j’étais pas parti pour l’écrire cet article. Mais faut dire que j’ai un peu merdé dans les grandes largeurs pour le live, donc bon, sachant qu’en plus je traite d’un angle particulier de l’usage de ce cher Plakar, autant en faire un billet, ça sera le premier (et j’espère pas le seul) de 2026. On y croit ?

Plakar est une solution développée en France par une petite équipe apparemment friande des jeux de mots, puisqu’au delà de son nom même, le site est hébergé par la société Kandbaz. Voilà voilà…

Des confrères blogueurs ont déjà fait quelques présentations de l’outil (exemple: Adrien), principalement pour s’en servir sous Linux. Il se trouve que j’ai une machine Windows qui a besoin d’être sauvegardée, en vue d’une mise à jour de firmware de SSD qui devrait bien se passer, mais on doit toujours faire une sauvegarde avant de faire ce genre de choses. Mieux vaut prévenir que guérir comme on dit. Et la présentation en live aurait du se passer plus ou moins tranquille, mais bon, j’ai pas percuté la micro-coupure pendant plus d’une heure (habitué à ne pas avoir d’activité dans le chat), donc, je vous remet le processus sur « papier numérique ».

Je ne redétaille pas l’installation de Garage parce qu’on l’a faite en live sans souci.

Petit rappel rapide des caractéristiques de l’outil

On a donc un outil principalement en ligne de commande, qui repose sur un concept voisin de celui de Borg, qui nécessite la configuration d’un dépôt et propose un chiffrement natif des sauvegardes. Ce dépôt, local ou distant, peut être contacté de différentes manières, natives (SFTP/SSH) ou via des intégrations supplémentaires à installer au besoin. C’est le cas notamment du support S3.

Le setup

En soit, c’est très bien documenté : une fois l’outil installé, vous ajoutez le package directement, mais vous tombez sur un mur que je n’aime pas : créer un compte Plakar pour accéder aux intégrations. J’ai une petite idée de pourquoi ça peut avoir du sens (les intégrations concernent en général des solutions d’entreprise), mais ça me gonfle plus que profondément quand ça concerne des particuliers, qui se font déjà violer en permanence, donc pas la peine d’en rajouter (on a la même avec  BitWarden, ou El Gato et son Stream Deck Marketplace pour l’intégration… d’OBS, qui est pourtant mis en avant comme native – c’est donc faux). Fort heureusement, l’outil propose de builder l’intégration depuis les sources qui sont disponibles sur Github, comme le reste des sources de l’outil, et ça sans création de compte. C’est facile… si on est sous Linux.

J’avoue que pour l’instant les installations sont un peu brutes de décoffrage, mais le support Windows est vraiment frais, donc je ne vais pas trop me formaliser là-dessus. Le fait que ça doit déjà proposé pour une version 1.0 est déjà assez cool. Par contre, concernant la compilation des intégrations, c’est plus ardu : il faut disposer de Go (dans la version qui est demandée par Plakar), de Make (à priori à part Chocolatey pas de moyen indépendant), et peut-être d’autres outils, mais je me suis heurté à un mur à cause de ça. La solution, comme d’hab’, aura demandé un pas de côté.

La cross compilation à la rescousse

Une des particularités de Go, c’est qu’on peut nativement compiler pour un autre système d’exploitation que celui sur lequel on se trouve. Et la chaine de compilation nécessaire est plus facile à déployer sous Linux; ça tombe bien, WSL est là pour ça. Après l’installation de la même version de Plakar que sous Windows, j’ai donc installé build-essential (pour être sûr d’avoir un max d’outils, donc Make), installé la version 1.24.12 de Go via asdf-vm (je vous renvoie vers la doc de Stéphane Robert qui a tout expliqué au sujet de cet outil trop pratique). Et pour la compilation d’un autre OS, c’est simple : on configure une variable d’environnement, GOOS, éventuellement l’architecture (oui, parce que c’est aussi possible), l’extension de fichier dans la variable EXT (parce que sous Windows, il faut un .exe pour qu’il soit exécutable – oui c’est débile en 2026, mais que voulez-vous, l’IA c’est plus intéressant à intégrer que moderniser un OS don personne ne voulait à la base) et on lance la compilation de l’intégration via la commande plakar ad-hoc. Vraiment, c’est aussi simple que ça :

$ export GOOS=windows
$ export EXT=.exe
$ plakar pkg build s3
info: fetching https://plugins.plakar.io/kloset/recipe/v1.0.0/s3.yaml
/usr/bin/make -C /tmp/build-s3-v1.0.7-161840773 EXT=.exe
3fe849cb: OK ✓ /manifest.yaml
3fe849cb: OK ✓ /s3Importer.exe
3fe849cb: OK ✓ /s3Exporter.exe
3fe849cb: OK ✓ /s3Storage.exe
3fe849cb: OK ✓ /
Plugin created successfully: s3_v1.0.7_windows_amd64.ptar
$ ls -l
.rw------- 1 42M seboss666 16 Jan 22:29  s3_v1.0.7_windows_amd64.ptar

On peut donc désormais copier le fichier ptar sous Windows (il faudra que je creuse ce format qui semble un peu maison), et on peut l’installer avec la bonne commande :

> .\plakar.exe pkg add ./s3_v1.0.7_windows_amd64.ptar
> .\plakar.exe pkg list
s3@v1.0.7

La sauvegarde ? Ben ça fonctionne

On peut donc attaquer le dur. J’ai juste suivi la doc de l’intégration, à savoir créer le kloset l’initialiser, et lancer le backup d’un dossier vers ce kloset là :

.\plakar.exe store add garage s3://192.168.1.201:3900/backup-pc access_key=<accesskey> secret_access_key=<secret_key> use_tls=false
.\plakar.exe at "@garage" create
repository passphrase:
repository passphrase (confirm):
.\plakar.exe at "@garage" ls
repository passphrase:
.\plakar.exe at "@garage" backup C:\\Users\\Seboss666\\Pictures\\blog
repository passphrase:
e363f7fa: OK ✓ /C:/Users/Seboss666/Pictures/blog/Firefox_groupe_onglets.png
e363f7fa: OK ✓ /C:/Users/Seboss666/Pictures/blog/Firefox_profils.png
e363f7fa: OK ✓ /C:/Users/Seboss666/Pictures/blog/docker-docker-everywhere.jpg
e363f7fa: OK ✓ /C:/Users/Seboss666/Pictures/blog/418-error-page.png
e363f7fa: OK ✓ /C:/Users/Seboss666/Pictures/blog/cross.svg
(...)
.\plakar.exe at "@garage" ls
repository passphrase:
2026-01-16T21:40:31Z e363f7fa 42 MiB 0s /C:/Users/Seboss666/Pictures/blog

Bonus, on peut vérifier l’état du backup depuis un autre PC, ou un autre OS, donc je suis retourné sur WSL, j’ai viré les variables d’environnement pour builder l’intégration pour Linux cette fois, et rebuildé/ajouté l’intégration. On reprend ensuite la même commande pour ajouter le Kloset, mais pas besoin de l’initialiser, on peut directement lister son contenu en fournissant la bonne passphrase :

$ plakar store add garage s3://192.168.1.201:3900/backup-pc access_key=<access_key> secret_access_key=<secret_key>
$ plakar at "@garage" ls
repository passphrase:
2026-01-16T21:40:31Z e363f7fa 42 MiB 0s /C:/Users/Seboss666/Pictures/blog

On peut donc faire à peu près ce qu’on veut dès lors : restauration complète ou partielle, création de nouveaux backups, etc.

Verdict

Donc oui, tout a fonctionné pratiquement du premier coup. J’ai quand même tâtonné au départ concernant le build de l’intégration, à vouloir « make » direct à partir du dépôt git. Mais dans ce cas, on se retrouve avec les trois binaires, sans infos sur la construction du fameux ptar (on est là encore dans le simili-jeu de mots, vraiment…), ce qui est plutôt dommage. Il m’aura fallu quelques minutes pour me résigner à utiliser plakar directement. Il faudrait aussi un peu plus de retour sur les commandes qui se déroulent bien (sans erreur). Autant quand on se plante, on le sait, mais quand on se plante pas, voir juste un retour à la ligne est un peu frustrant et déroutant.

Il y a question aussi sur les performances de la sauvegarde testée. j’ai testé sur un dossier de 108 images, et un des développeurs s’est étonné sur BlueSky du temps que ça a pris. J’avoue que pour l’instant, je n’ai pas creusé le sujet, il y a des chances que ça soit dû aux performances S3 elle-mêmes, à NTFS, une combinaison de tout ça. Garage est censé être performant, mais bon, on est sur un processeur ARM assez poussif quand même, qui doit déjà gérer le transfert réseau, donc on est pas à l’abri que ça soit un problème purement chez moi.

En tout cas, pour un jeune logiciel, la qualité de la documentation et l’implémentation Windows déjà opérationnelle (même si encore un peu buggée chez certains, en lien notamment avec les différences slash/antislash à cause de Windows), en bonus une interface web pour parcourir les backups, il m’a très agréablement surpris. On ne peut souhaiter que ça mature comme il faut et que l’entreprise trouve son équilibre (la stabilité financière et l’open-source, hein…). Et moi que je regarde d’un peu plus près le statut du live la prochaine fois (ou que je configure l’enregistrement en plus du stream)…

  •  

Elo – Quand une IA écrit un langage de programmation complet sans intervention humaine

Vous connaissez probablement les prouesses de Claude Code pour décompiler du code , ou encore son utilisation pour automatiser la création d'outils , mais là, on a passé un cap.

Bernard Lambeau, un développeur belge avec plus de 25 ans d'expérience et un doctorat en informatique, a décidé de pousser le concept jusqu'au bout à savoir utiliser Claude Code non pas pour écrire quelques scripts, mais pour générer un langage de programmation complet.

Carrément ! Il est chaud Bernard, car quand je dis complet, je parle d'un compilateur entier avec analyseur lexical, un parseur, un système de typage, des backends multiples...etc. Voilà, comme ça, en full pair-programming avec une IA.

Ça s'appelle Elo et l'idée, c'est de proposer un langage tellement sécurisé by design qu'on peut le confier à des non-développeurs… ou à des IA. Pas de variables mutables, pas d'effets de bord, pas de références qui traînent dans tous les sens. Bref, un langage où il est quasi impossible de faire une bêtise, même en essayant très fort.

Alors pourquoi créer un énième langage alors qu'on en a déjà des centaines ?

Hé bien le truc, c'est que la plupart des langages existants partent du principe que vous savez ce que vous faites. JavaScript, Python, Ruby… Ils vous font confiance. Trop, parfois.

Elo, lui, adopte l'approche inverse... le "zero-trust". Le langage ne fait confiance à personne, ni au développeur, ni à l'IA qui pourrait l'utiliser. Ainsi, chaque expression est pure, chaque fonction est déterministe, et le compilateur vérifie tout avant d'exécuter quoi que ce soit.

Et surtout Elo est un langage d'expressions portables, ce qui veut dire que vous écrivez votre logique une fois, et vous pouvez la compiler vers JavaScript, Ruby ou même du SQL PostgreSQL natif. Oui, oui, le même code peut tourner dans votre navigateur, sur votre serveur Ruby, ou directement dans votre base de données. Et là, y'a de quoi faire des trucs sympas pour peu qu'on ait besoin de partager de la logique métier entre différents environnements.

Le typage est volontairement minimaliste mais costaud et se compose de 10 types de base : Int, Float, Bool, String, DateTime, Duration, Tuple, List, Null et Function. Pas de classes, pas d'héritage, pas d'objets au sens classique mais juste des valeurs et des fonctions, ce qui peut paraître limité dit comme ça, mais c'est justement cette contrainte qui rend le langage sûr.

Moins de features, c'est moins de façons de se planter !

L'opérateur pipe |> est le cœur du langage car au lieu d'imbriquer des appels de fonctions comme des poupées russes, vous chaînez les transformations de gauche à droite. Par exemple, pour récupérer tous les clients actifs et compter combien il y en a, vous écrivez quelque chose comme customers |> filter(active: true) |> size. C'est lisible, c'est fluide, et même quelqu'un qui n'a jamais codé comprend ce qui se passe.

Et il y a aussi l'opérateur alternative |. Comme ça, si une expression peut retourner null, vous pouvez prévoir un fallback avec ce simple pipe. Genre user.nickname | user.firstname | "Anonymous". Ça essaie dans l'ordre et ça prend la première valeur non-nulle.

Comme ça, fini les cascades de if/else pour gérer les cas où une donnée manque ! Youpi !

Voilà pour le langage...

Maintenant parlons un peu du bonhomme car Bernard Lambeau n'est pas un inconnu dans le monde du développement. Il est derrière Bmg (une implémentation de l'algèbre relationnelle), Finitio (un langage de schémas de données), Webspicy (pour tester des APIs), et Klaro Cards (une app no-code). Tout cet écosystème partageait déjà une certaine philosophie, et Elo vient unifier le tout. Son langage est d'ailleurs utilisé en production dans Klaro Cards pour exprimer des règles métier que les utilisateurs non-techniques peuvent modifier.

Ce qui m'a intéressé dans toute cette histoire, c'est surtout la méthode de développement de Bernard qui a travaillé en pair-programming avec Claude Code pendant des semaines, voire des mois. L'IA générait du code, et lui relisait, corrigeait, guidait, et l'IA apprenait de ces corrections pour les itérations suivantes. Sur l'ensemble du projet, chaque ligne de code, chaque test, chaque doc a été écrit par Claude et croyez le ou non, le code est clean car Bernard est un pro !

D'ailleurs, il a enregistré une démo de 30 minutes où il montre le processus en live .

En regardant cette démo, on découvre une vraie méthodologie de travail avec l'IA car il n'a pas juste balancé des prompts au hasard en espérant que ça marche. Au contraire, il a mis en place tout un système pour que la collaboration soit efficace et sécurisée.

Premier truc : le "safe setup". Bernard a configuré un environnement Docker sandboxé dans un dossier .claude/safe-setup afin de laisser Claude Code exécuter du code dans un conteneur Alpine isolé, sans risquer de faire des bêtises sur la machine hôte. En entreprise, c'est exactement le genre de garde-fou qu'on veut quand on laisse une IA bidouiller du code. Le conteneur a ainsi accès aux fichiers du projet, mais pas au reste du système.

Ensuite, il y a la documentation projet via un fichier CLAUDE.md à la racine. Ce fichier décrit l'architecture du langage avec le parser, l'AST, le système de typage, les différents backends, comme ça, quand Claude démarre une session, il lit ce fichier et comprend la structure du projet.

La gestion des tâches est aussi bien pensée puisqu'il utilise un système de dossiers façon Kanban : to-do, hold-on, done, et analyze. Chaque tâche est un fichier Markdown qui ressemble à une user story.

Ainsi, quand il veut ajouter une feature, il crée un fichier dans to-do avec la description de ce qu'il veut. Claude lit le fichier, implémente, et Bernard déplace le fichier dans done une fois que c'est validé. Le dossier analyze sert pour les trucs à creuser plus tard, et hold-on pour ce qui attend des décisions.

Ce qui est bien trouvé aussi, c'est qu'il utilise trois modes d'interaction selon les situations. Le mode "accept-it" pour les trucs simples où Claude propose et Bernard dispose. Le "plan mode" quand la tâche est complexe avec Claude qui pose des questions de design avant d'écrire du code. Et le mode autonome avec --dangerously-skip-permissions quand il a parfaitement confiance pour une série de modifications.

Bernard a aussi créé plusieurs personas spécialisés (des agents) que Claude peut invoquer. Un agent "security" qui analyse le code du point de vue sécurité. Un agent "DDD" (Domain-Driven Design) qui vérifie la cohérence du vocabulaire métier. Un agent "skeptic" qui cherche les cas limites et les bugs potentiels. Et un agent "Einstein" qui détecte quand le code devient trop complexe et suggère des simplifications.

En gros, 4 cerveaux virtuels qui relisent chaque modification.

Et là où ça devient vraiment ouf, c'est que Elo se teste lui-même. Les tests d'acceptance sont écrits en Elo, avec une syntaxe d'assertions qui se compile vers JavaScript, Ruby et SQL. Comme ça quand Bernard ajoute une feature, il écrit d'abord le test en Elo, puis Claude implémente jusqu'à ce que le test passe. Le langage valide sa propre implémentation.

Comme je vous l'avais dit, c'est propre !

Bernard n'a fait que valider et refuser et ne retouche jamais le code lui-même. C'est Claude qui fait tout le reste et ça c'est un sacré changement dans la façon de développer.

Il évoque aussi l'idée que quand on délègue une compétence à quelqu'un (ou quelque chose) qui la maîtrise, on peut se concentrer sur le reste. Comme ça, Bernard ne s'occupe donc plus d'écrire du code mais s'occupe plutôt de définir ce que le code doit faire, de valider les résultats, et de guider l'architecture.

C'est vraiment le métier de développeur nouvelle génération et c'est très inspirant si vous cherchez votre place de dev dans ce nouveau monde.

En tout cas, même si ce n'est pas la première fois qu'on voit Claude Code produire des résultats impressionnants là c'est carrément autre chose.

Maintenant si vous voulez tester, l'installation est simple. Un petit

`npm install -g @enspirit/elo`

Et vous aurez ensuite accès à deux outils :

  • elo pour évaluer des expressions à la volée, et
  • eloc pour compiler vers la cible de votre choix.

Et si vous voulez du JavaScript ?

eloc -t js votre_fichier.elo.

Du Ruby ?

eloc -t ruby.

Du SQL ?

eloc -t sql.

Le site officiel propose également un tutoriel interactif plutôt bien fichu pour découvrir la syntaxe. On commence par les bases (les types, les opérateurs), on passe aux fonctions, aux gardes, et on finit par les trucs plus avancés comme les closures et les comparaisons structurelles. En une heure ou deux, vous avez fait le tour.

Alors bien sûr, Elo n'est pas fait pour remplacer votre langage préféré car ce n'est pas un langage généraliste. Vous n'allez pas écrire une app mobile ou un jeu vidéo avec... Par contre, pour exprimer des règles métier, des validations, des transformations de données… C'est pile poil ce qu'il faut.

Peut-être qu'un jour on verra une équipe où les product managers écrivent directement les règles de pricing ou d'éligibilité en Elo , (j'ai le droit de rêver) et où ce code est automatiquement validé par le compilateur avant d'être déployé.

Plus de traduction approximative entre le métier et les devs, plus de bugs parce que quelqu'un a mal interprété une spec.

Le dépôt GitHub est ouvert , la documentation est dispo, et le langage est sous licence MIT donc vous avez de quoi explorer, tester, et pourquoi pas contribuer si le cœur vous en dit.

Voilà, avec Claude Code (ou d'autres comme Gemini CLI, Codex CLI...etc) on n'est clairement plus sur des outils qui complètent du code ou qui génèrent des snippets. On est carrément sur un système IA capable de créer des outils complets et des langages entiers, avec son humain préféré qui joue le rôle de chef d'orchestre.

Steve Klabnik a d'ailleurs fait quelque chose de similaire avec son langage Rue, lui aussi développé avec Claude, si vous voulez jeter un œil !

Voilà les amis ! La tendance est claire j'crois... les développeurs expérimentés commencent à utiliser l'IA comme un multiplicateur de force, et pas comme un remplaçant et je pense vraiment que vous devriez vous y mettre aussi pour ne pas vous retrouver à la ramasse dans quelque années...

Amusez-vous bien et un grand merci à Marc d'avoir attiré mon attention là dessus !

  •  

Super Mario 64 tourne maintenant sur PlayStation 1 et c'est un sacré bordel technique !

La guerre des consoles des années 90, c'est terminé depuis longtemps... Enfin, c'est ce qu'on croyait ! Car un moddeur du nom de Malucard vient de raviver les braises en portant Super Mario 64 sur... PlayStation 1. Oui, le jeu phare de la N64 qui tourne nativement sur la console de Sony... À l'époque de ma jeunesse aux temps jadis, ça aurait fait scandale ^^

Le projet s'appelle SM64-PSX et c'est basé sur le fameux travail de décompilation de Super Mario 64 qui circule depuis quelques temps. Sauf que là, au lieu de simplement recompiler le code pour PC, Malucard l'a adapté pour qu'il tourne sur le hardware de la PS1. Et c'était pas gagné d'avance.

Car les deux consoles sont très différentes niveau architecture. Du coup, il a fallu réécrire tout un tas de trucs : conversion en mathématiques à virgule fixe au lieu de flottants, compilation just-in-time des listes d'affichage dans un format custom, compression des animations (de 580 Ko à 190 Ko stockés directement en VRAM), quantification des textures en 4 bits... Bref, du bricolage de haut niveau pour faire rentrer un jeu N64 dans une PS1.

Mais c'est jouable, même si faut pas s'attendre à du miracle non plus. Y'a des arbres qui flottent dans le vide à cause des conversions mathématiques, certaines animations font crasher le jeu, la caméra est aux fraises dans pas mal de niveaux, et le menu pause ne fonctionne pas. Mais bon, voir Mario sauter dans le château de Peach sur une PlayStation, ça a quand même de la gueule !

Et le plus marrant dans l'histoire, c'est que cette initiative a provoqué une riposte de l'autre camp. Des fans de Spyro the Dragon ont lancé un projet miroir pour porter le jeu d'Insomniac... sur N64 ! La guerre des consoles continue donc, mais cette fois-ci ce sont les fans qui s'en chargent.

Voilà, si vous voulez tester, le code source est dispo sur GitHub . Il vous faudra une ROM originale de Super Mario 64 version US et quelques outils de compilation. Le build génère un fichier ISO et CUE prêt à être gravé ou émulé. Le projet supporte même les manettes DualShock avec les vibrations !

Merci à Lorenper pour l'info !

  •  
❌