Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Ratty, l'émulateur de terminal qui affiche de la 3D directement dans la ligne de commande

Orhun Parmaksız, l'un des principaux mainteneurs de Ratatui (une bibliothèque Rust très utilisée pour créer des interfaces texte dans le terminal), vient de sortir un projet qui sort vraiment des clous.

Ça s'appelle Ratty, c'est donc un émulateur de terminal capable d'afficher des objets 3D, des sprites animés et des modèles complets en plein milieu de votre ligne de commande.

Sur le papier, ça paraît absurde. Un terminal sert à taper des commandes et lire du texte. Sauf que Parmaksız s'est demandé pourquoi on devait s'arrêter là, et sa réponse est qu'on n'y est pas obligés.

Le truc tourne donc sur Rust avec Ratatui pour la couche d'affichage texte, parley_ratatui pour le rendu de la typographie, et Bevy (un moteur de jeu open source qu'on retrouve dans pas mal de petits jeux indé) pour la partie graphique.

Un terminal classique génère son texte caractère par caractère, là chaque image devient une texture envoyée sur le GPU (la puce graphique de votre machine, celle qui gère normalement les jeux et les vidéos). Bevy place ensuite cette texture dans une scène 3D où vous avez des caméras, des éclairages, des animations.

Pour faire passer des objets 3D dans le flux, Parmaksız a inventé son propre protocole, le Ratty Graphics Protocol, qui permet à n'importe quelle commande de balancer un cube tournoyant ou un modèle de chat à côté d'un texte d'aide.

Le curseur lui-même est un rat 3D qui tourne sur lui-même, d'où le nom du projet. Inspiration officielle : TempleOS, l'OS développé en solo pendant des années par Terry Davis, célèbre pour permettre d'afficher des sprites 3D dans son shell. Une référence improbable, mais assumée.

Le code est open source sur github.com/orhun/ratty , et un widget Ratatui nommé ratatui-rgp permet d'intégrer la 3D dans vos propres apps terminal. La version 0.2.0 vient de sortir. C'est encore largement expérimental, mais le rendu sur les démos est franchement sympa.

Source : The Register

Google Workspace CLI - Pour piloter tous les services Google avec votre IA

Justin Poehnelt, Senior Developer Relations Engineer chez Google, vient de balancer sur Github un outil en ligne de commande (CLI), codé en Rust qui permet de faire un truc trop pratique, à savoir piloter entièrement Workspace depuis le terminal. Ce logiciel nommé GWS est donc capable de gérer Gmail, Drive, Calendar, Sheets et sept autres services Google d'un coup. Et en plus, comme il a été conçu pour les agents IA, donc c'est pas juste pour vous et votre terminal !

Une fois installé via npm, cargo, brew ou un binaire pré-compilé, vous tapez gws auth login pour vous authentifier via OAuth et vous pouvez ensuite attaquer onze services depuis votre shell : Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, Apps Script, Tasks, Workspace Events et Model Armor.

Niveau archi, au lieu de hard-coder chaque commande dans le binaire, gws interroge tout simplement le Discovery Service de Google au démarrage et reconstruit son arbre de commandes à la volée. Du coup quand Google ajoute un endpoint à l'API Sheets, le CLI le voit apparaître tout seul. C'est trop bien parce que ça évite de devoir attendre une release pour utiliser un éventuel nouveau service de Google. Et pour un agent IA qui re-fetch le schéma à chaque run, c'est plutôt une bonne idée.

Donc en plus de démarrer en moins d'une seconde, GWS crache des sorties en JSON structurées, y'a un mode --dry-run qui montre la requête sans l'envoyer, et de l'auto-pagination via --page-all. Et côté commandes utilitaires, vous avez aussi les + qui sont des helpers cousus main tels que gws gmail +send, gws drive +upload, gws calendar +agenda, gws sheets +append, gws gmail +triage et un gws gmail +standup-report qui résume vos mails de la semaine en quelques lignes.

Le repo embarque aussi 40+ skills d'agent prêts à l'emploi du type "résume mes mails non lus" ou "génère mon rapport", une extension Gemini CLI qui s'installe avec gemini extensions install https://github.com/googleworkspace/cli, et le helper +sanitize-response qui fait passer la sortie par Model Armor (le filtre anti-prompt-injection de Google Cloud) pour éviter les réponses bizarres.

En gros, c'est un outil pensé pour faire piloter votre Workspace par Claude, Gemini ou n'importe quel agent. Comme ça vous allez pouvoir écrire un workflow qui lit vos mails non lus, en fait un résumé, le poste dans un Chat et classe tout ça proprement dans Drive... sans avoir à toucher à la souris ni avoir à utiliser votre cerveau léthargique. Elle est pas belle la vie ?

Sauf que. Le projet porte le disclaimer "This is not an officially supported Google product", et un employé Google a confirmé sur le thread Hacker News (presque 1000 points, quand même) que c'est un projet DevRel. Comprendre : pas de SLA, pas de roadmap garantie, pas d'équipe SRE qui veille au grain. Vous savez comment ça finit chez Google avec ce genre de statut !

Bref si vous êtes chaud pour tester, le binaire est dispo ici . Maintenant reste à voir si Google lui donnera un statut officiel ou si GWS s'éteindra discrètement comme tant d'autres projets internes oubliés...

DirPlayer - L'émulateur qui ressuscite Shockwave

Flash à sa grande époque c'était quand même tout un truc, mais est-ce que vous vous souvenez de Shockwave ? Le grand frère de Flash (techniquement c'était une autre techno bâtie sur Director mais bref...), qui était capable de faire tourner des trucs bien plus complexes que les vieux .swf ?

Et ben l'équipe derrière DirPlayer s'est tapé tout le reverse-engineering du moteur Director from scratch pour le ressusciter grâce à Rust et le rendre à nouveau fonctionnel dans nos navigateurs modernes !

Faut savoir qu'Adobe a débranché Shockwave Player en avril 2019 et Flash un peu plus tard, et avec eux c'est un pan entier du web rétro qui s'est retrouvé inaccessible du jour au lendemain. Du genre tous ces jeux qui tournaient sur Shockwave.com ou les vieux portails de mini-jeux des années 2000, paf, d'un coup plus moyen d'y rejouer.

Alors heureusement, pour Flash, y'a déjà Ruffle qui fait tourner les bons vieux .swf. Hé bien ici c'est le même principe avec DirPlayer pour les .dcr Shockwave.

L'outil se décline sous 3 formes. D'abord une extension Chrome qui détecte automatiquement les balises Shockwave qui traînent encore sur les vieux sites web, ce qui peut être sympa pour redécouvrir des sites des années 2000.

Y'a aussi une version standalone construite avec Electron qui embarque carrément un debugger Lingo (le langage de scripting de Director, super pratique si vous voulez bidouiller du contenu existant). Et enfin un polyfill JS auto-contenu qui réécrit les et directement sur votre site web.

Perso, pour vous faire une idée, je vous invite surtout à jeter un oeil à la démo web pour tester rapidement parce qu'il n'y a rien à installer. Mais dès que vous voudrez analyser ou debugger un vieux jeu en profondeur, faudra plutôt opter pour la version standalone.

Notez que DirPlayer utilise Ruffle en submodule Git donc les 2 projets sont liés et bonus côté sécurité, le tout tourne en WebAssembly avec le sandboxing du navigateur, donc y'aura plus toutes ces failles qu'on pouvait retrouver à l'époque sur l'ancien plugin Shockwave Player.

Pour les sites qui hébergent encore des applis ou des jeux Shockwave (genre archive.org, avec des musées interactifs ou des jeux des années 2000), c'est une nouvelle corde à leur arc. Et si vous avez de vieux .dcr planqués sur un disque dur, la démo web devrait pouvoir les avaler aussi (faudra tester quoi...).

Bref, grâce à Ruffle pour Flash et DirPlayer pour Shockwave, le web des années 90-2000 n'est pas encore tout à fait mort ! Un peu comme moi finalement ^^

Comment activer l'adblock natif de Firefox 149 ?

Vincent en avait parlé il y a peu : Firefox 149 embarque maintenant discrètement adblock-rust , le moteur Adblock de Brave, désactivé par défaut et contrôlé uniquement par deux prefs dans about:config.

A l'origine, je vous avais parlé d'une extension mais après analyse plus approfondie, celle-ci n'est pas vraiment nécessaire. Y'a juste deux valeurs à coller dans about:config et le moteur tourne. Merci donc à François qui m'a indiqué cette méthode directe.

Étape 1 : Activer le moteur

Dans la barre d'adresse, tapez about:config et acceptez l'avertissement. Cherchez la préférence suivante :

privacy.trackingprotection.content.protection.enabled

Passez-la à true. Si elle n'existe pas encore dans votre profil, créez-la : clic droit quelque part dans la liste → Nouveau → Booléen.

Étape 2 : Charger vos listes de filtres

Cherchez ensuite cette seconde préférence :

privacy.trackingprotection.content.protection.test_list_urls

Collez-y la valeur suivante, toutes les URLs séparées par des pipes :

https://easylist.to/easylist/easylist.txt|https://easylist.to/easylist/easyprivacy.txt|https://secure.fanboy.co.nz/fanboy-cookiemonster.txt|https://raw.githubusercontent.com/uBlockOrigin/uAssets/refs/heads/master/filters/annoyances-others.txt|https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_Base/filter.txt|https://raw.githubusercontent.com/uBlockOrigin/uAssets/refs/heads/master/filters/filters.txt|https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_3_Spyware/filter.txt|https://pgl.yoyo.org/adservers/serverlist.php?hostformat=adblockplus&showintro=1&mimetype=plaintext

Ça couvre 8 listes : EasyList, EasyPrivacy, Fanboy Cookie Monster, uBO Annoyances (les 4 de base), plus uBO Filters, AdGuard Base, AdGuard Tracking et Peter Lowe. Si vous voulez un profil plus léger, vous pouvez supprimer des URLs avant de coller.

Petite note : le préfixe test_ dans le nom de cette pref indique que la feature est encore expérimentale dans Firefox 149. Les noms peuvent donc changer dans une version future.

Désactiver ETP (optionnel mais recommandé)

La protection contre le pistage intégrée de Firefox (ETP) et adblock-rust filtrent chacun de leur côté. C'est redondant. Pour désactiver ETP, allez dans about:preferences → Confidentialité et sécurité → Protection renforcée contre le pistage → cochez "Personnalisée", puis décochez tout ce que vous voulez confier à adblock-rust.

Limitation actuelle : adblock-rust ne gère pas encore les sélecteurs CSS de masquage d'éléments, les règles ## du style uBlock Origin. Brave les supporte déjà, Firefox devrait suivre. En attendant, quelques pubs que uBO cachait via CSS resteront visibles.

Pour le contexte technique complet sur l'intégration de ce moteur, allez lire l'article de Vincent sur l'arrivée discrète d'adblock-rust dans Firefox 149 . Et si vous voulez un guide général pour bloquer les pubs et trackers sur le web , c'est par là.

Merci à François pour la méthode et la liste de filtres !

psmux - Le vrai tmux natif pour Windows (sans WSL)

Splitter son terminal en plusieurs panneaux, gérer des sessions persistantes, le tout avec les mêmes raccourcis que tmux... mais sous un bon gros Windows des familles, nativement, en Rust et sans avoir besoin de se galérer avec WSL !

C'est exactement ce que fait psmux , un multiplexeur de terminal conçu pour PowerShell et cmd.exe qui utilise directement l'API ConPTY de Windows 10/11. Du coup, pas de couche d'émulation Unix, pas de Cygwin, pas de MSYS2... ça tourne direct sur votre bécane.

Pour ceux qui débarquent, un multiplexeur de terminal ça permet de découper votre console en plusieurs zones (des "panes" que j’appellerai "panneau" parce que merde c'est + français), de jongler entre plusieurs sessions, et surtout de retrouver votre boulot exactement là où vous l'avez laissé même après une déconnexion. Sous Linux, tout le monde utilise tmux pour ça mais sous Windows, jusqu'ici c'était soit WSL (installer tout un sous-système Linux juste pour splitter un terminal, c'est un peu overkill quand même !), soit des splits basiques via Windows Terminal qui ne gèraient ni les sessions persistantes ni le détachement. Snif...

psmux en action sous PowerShell

L'installation est rapide. Un petit winget install psmux et hop, c'est réglé. Ça passe aussi par Cargo, Scoop ou Chocolatey pour les puristes. Ensuite, vous tapez psmux dans PowerShell 7 et vous retrouvez vos marques : Ctrl+B pour le prefix, les mêmes commandes split-window, new-session, attach... L'outil implémente 76 commandes tmux avec plus de 126 variables de formatage. Et y'a même un mode copie Vim avec 53 raccourcis clavier.

Bref, si vous avez une mémoire musculaire ultra développée pour tmux, vous êtes chez vous !

Et le truc cool, c'est que psmux lit directement vos fichiers .tmux.conf existants. Du coup, vos raccourcis custom et pas mal de thèmes (Catppuccin, Dracula, Nord...) fonctionneront directement, même si les configs tmux les plus complexes avec des scripts bash ou TPM peuvent nécessiter des ajustements. Et y'a aussi Tmux Plugin Panel pour vous accompagner dans l'ajout de plugins et de thèmes.

Alors je vous connais les raloux sous OuinOuin, vous allez me dire "Windows Terminal fait déjà des splits avec Alt+Shift+D"... sauf que non, c'est pas pareil. Windows Terminal découpe votre fenêtre visuellement mais ne gère ni les sessions persistantes, ni le scripting, ni le détachement. Avec psmux, vous lancez une session le lundi, vous fermez votre terminal, vous revenez le mardi et tout est encore là : vos panneaux, vos processus, votre historique. C'est ça la vraie différence avec un simple split visuel.

D'ailleurs, si vous utilisez Claude Code ou d'autres agents IA en ligne de commande , psmux intègre un support pour les agent teams qui permet à chaque agent de spawner dans son propre panneau automatiquement.

Côté support souris, c'est complet : clic pour sélectionner un panneau, drag pour redimensionner les bordures, molette pour remonter dans l'historique du buffer. Tout est activé par défaut, pas besoin de rajouter set -g mouse on comme sous tmux. L'outil tourne sous Windows 10 et 11, et le projet est sous licence MIT.

Après c'est encore jeune et y'a quelques galères connues notamment le support des caractères CJK et UTF-8 multi-octets qui peut se planter comme une merde sur des textes longs. Et split-window -c ne préserve pas toujours le répertoire courant (oubliez pas de vérifier votre pwd après un split). Par contre, le dev répond en quelques heures, et des PR externes sont mergées régulièrement... donc c'est bon signe !

Bref, c'est propre, c'est natif, et ça lit vos .tmux.conf ! Que demande le peuple barbu emprisonné sous Windows, finalement ? Eh bien pas grand chose de plus pour être heureux.

Basalt - Vos coffres Obsidian direct dans le terminal

Un TUI en Rust pour gérer vos coffres Obsidian sans quitter le terminal c'est ce que propose Basalt qui détecte automatiquement vos vaults, affiche le markdown avec un rendu visuel, et depuis la v0.12.3, y'a même un mode vim intégré. Le tout sans avoir besoin que la vraie app tourne en arrière-plan !

Et c'est là toute la différence avec le CLI officiel d'Obsidian dont je vous parlais il y a quelques jours. Car le CLI a besoin de l'app qui tourne via un socket local. Basalt, lui, lit en fait vos fichiers .md directement sur le disque. Du coup, ça marche en SSH, sur un serveur headless, ou sur n'importe quelle machine où vous avez juste vos fichiers markdown. C'est carrément pratique !

L'installation se fait en une commande :

cargo install basalt-tui

Au premier lancement, l'outil va alors chercher automatiquement vos coffres en lisant le fichier de config (sous macOS c'est dans ~/Library/Application Support/obsidian/obsidian.json). Comme ça, hop hop, vos vaults apparaissent, vous naviguez au clavier et vous passez d'un coffre à l'autre avec Ctrl+G. Vous pouvez aussi passer par aqua ou télécharger un binaire pré-compilé sur la page releases si vous préférez.

Basalt en action, navigation dans un vault Obsidian

Vous ouvrez alors une note et le markdown s'affiche avec un rendu visuel : les # disparaissent au profit d'indicateurs plus colorés, les blocs de code ont un fond distinct, les callouts > [!NOTE] sont reconnus, et les wiki-links [[Ma Note]] sont également parsés. D'ailleurs, quand vous renommez une note avec r, tous les wiki-links qui pointent vers elle sont mis à jour automatiquement dans tout le vault. Pas de search-replace à la main, ça fait toujours du bien !

Après faut pas s'attendre à un clone complet non plus. Y'a pas de rendu pour le gras, l'italique ou les tableaux. Pas de recherche dans les notes. Pas de graph view. L'éditeur intégré est expérimental (pas d'undo, pas de copier-coller, pas de sélection). C'est assumé de ce que j'ai pu voir, car le projet se présente comme un compagnon minimaliste.

Et c'est justement pour ça que le mode vim est le bienvenu, à vrai dire. Vous pouvez activer ça dans votre config TOML comme ceci :

vim_mode = true

Le mode vim en action dans Basalt

Et là vous avez hjkl pour naviguer, gg / G pour sauter en haut et en bas, w / b pour les mots, i pour l'insertion. C'est pas forcément aussi complet qu'un vrai vim, mais franchement, pour parcourir vos notes c'est agréable.

Le vrai kiff, c'est la config TOML qui permet de lancer un éditeur externe sur la note en cours :

[global]
key_bindings = [
 { key = "ctrl+alt+e", command = "exec:vi %note_path" },
]

Du coup, le workflow devient : Basalt pour naviguer et lire et un raccourci clavier pour ouvrir dans vim (ou n'importe quel éditeur) quand vous voulez éditer sérieusement. C'est le genre de combo qui fonctionne bien quand vous bossez en full terminal .

Le projet est sous licence MIT, écrit en Rust avec ratatui, et tourne sur Linux, macOS et Windows. Tiens, la v0.12.3 ajoute aussi la création de notes et dossiers directement depuis l'explorateur avec n et N... Ça avance plutôt vite comme projet !!

Voilà, si vos notes vivent dans des coffres et que le terminal c'est votre habitat naturel, Basalt fera bien le boulot.

sudo-rs - 40 ans de silence cassés par des astérisques

Si vous utilisez Ubuntu 26.04, vous avez peut-être remarqué un truc bizarre dernièrement en tapant votre mot de passe sudo... Ouiiiiii, y'a des petites étoiles qui apparaissent !! Pas de panique, c'est "normal". Enfin, c'est nouveau...

En effet, sudo-rs, la réécriture en Rust de la bonne vieille commande sudo, a décidé d'activer pwfeedback par défaut. En gros, quand vous faites un sudo apt install bidule, au lieu du trou noir habituel, vous voyez maintenant des ***** défiler pendant la saisie du mot de passe. C'est un changement qui casse une convention vieille de 40 ans... et ça, forcément, ça fait du bruit !

Pour rappel, Ubuntu a basculé sur sudo-rs (le remplaçant en Rust du bon vieux sudo en C) depuis la version 25.10. Ça fait partie du même mouvement de réécriture des outils système en Rust, comme les coreutils dont je vous avais parlé. Et la 26.04 vient de "cherry-picker" comme on dit, un patch upstream qui active le feedback visuel par défaut.

Un bug report sur Launchpad ( #2142721 ) est bien sûr arrivé direct, en mode vénère genre "*ÇA FAIT DES DÉCENNIES qu'on n'affiche pas la longueur du mot de passe pour empêcher le shoulder surfing ! C'est quoi ce bordel !!?? *"

Et la réponse des devs : Won't Fix. Circulez les relous !

En fait, leur argument c'est que le bénéfice sécurité est "infinitésimal". Parce que bon, votre mot de passe sudo c'est le même que celui de votre session (celui que vous tapez à l'écran de login, devant tout le monde). Et le bruit des touches trahit déjà la longueur de toute façon. Du coup, ils ont préféré régler le problème UX qui paume les débutants depuis le début des années 80.

D'ailleurs, en 2013 je vous expliquais comment activer ces étoiles manuellement avec sudo visudo (ça date de fou !!) et maintenant c'est l'inverse, faut expliquer comment les virer ! Linux Mint avait d'ailleurs déjà sauté le pas de son côté depuis un moment.

Perso, le truc qui me gonfle c'est pour les tutos vidéo. Quand vous faites un screencast, les astérisques révèlent la longueur de votre mot de passe à tous vos spectateurs. Du coup faut aller reparamétrer chaque machine avant de filmer ou faire du masquage en post prod. C'est pas la fin du monde, mais bon, la flemme...

Alors pour désactiver ces jolies zétoiles :

sudo visudo

Et ajoutez cette ligne à la fin de /etc/sudoers :

Defaults !pwfeedback

Sauvegardez (Ctrl+X sous nano), et c'est réglé. Attention, ne touchez à rien d'autre dans ce fichier, une erreur de typo et sudo ne marchera plus. Grâce à cette manip, ce sera retour au trou noir ! Youpi !

Source

RustFS - L'alternative Rust à MinIO

MinIO, tout le monde ou presque connaît car c'est LE truc quand on veut du stockage objet S3-compatible auto-hébergé sous Linux. Sauf que voilà... la licence AGPL, ça pique pour pas mal de boîtes qui ne veulent pas se retrouver à devoir ouvrir leur code.

Du coup, y'a un nouveau projet qui débarque dans le tiek et qui devrait en intéresser plus d'un. C'est RustFS , codé en Rust (comme le nom le laisse deviner mes petits Sherlock) et 100% compatible S3. En gros, vous prenez votre stack MinIO existante, vous remplacez par ce truc, et en fait tout continue de fonctionner pareil... Vos buckets, vos applis, vos scripts Python, boto3... tout pareil !

La licence c'est de l'Apache 2.0 comme ça y'a pas de contrainte virale, vous faites ce que vous voulez avec. Et c'est d'ailleurs sûrement la raison numéro un pour laquelle le projet cartonne.

Côté perfs, les devs annoncent 2,3x plus rapide que MinIO sur des petits objets de 4 Ko (testé sur un modeste 2 coeurs Xeon avec 4 Go de RAM). Bon, c'est un benchmark maison, à prendre avec des pincettes hein... mais finalement Rust pour du I/O intensif, ça se tient comme argument, car y'a pas de garbage collector qui vient foutre le bazar.

Pour l'installer, Docker en une ligne :

docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest

Et voilà, l'API tourne sur le port 9000 et la console web sur le 9001 (identifiants par défaut : rustfsadmin/rustfsadmin, changez-les vite fait hein). Y'a aussi du Kubernetes via Helm, un script d'install one-click, du Nix, ou un bon vieux git clone pour compiler vous-même (attention, sur macOS faut un ulimit à 4096 sinon ça ne marche pas).

Le conteneur Docker tourne en non-root (UID 10001), donc c'est plutôt propre niveau sécu. Pensez juste à faire un petit chown -R 10001:10001 data logs sur vos répertoires avant de lancer, sinon ça casse au démarrage.

Petit bonus appréciable, y'a aussi de la détection de corruption intégrée, et même du versioning de buckets pour les plus méfiants côté intégrité des données. D'ailleurs, côté monitoring, c'est déjà câblé pour envoyer vos métriques dans Grafana, vos traces dans Jaeger et le reste dans Prometheus. Un petit docker compose --profile observability up -d et c'est plié.

Par contre, on est encore en alpha et le mode distribué et le KMS sont en phase de test. Donc c'est PAS le genre de truc que vous mettrez en prod demain matin pour vos données critiques... mais pour du dev, du lab, ou des tâches pas trop sensibles... ça tourne impecc !

Bref, si l'AGPL de MinIO vous gave et que vous cherchez une alternative S3-compatible, en Rust, sous licence + permissive, allez jeter un œil à RustFS.

Merci à Lorenper pour le partage !

Obsidenc - Du chiffrement parano en Rust pour vos dossiers sensibles

Vous avez des dossiers sensibles que vous aimeriez chiffrer avant de les balancer sur un cloud ou un disque externe ? Ça tombe bien, je vous ai trouvé un petit outil en Rust qui va vous plaire.

Obsidenc , c'est son nom, est un utilitaire de chiffrement que son créateur qualifie de "paranoid-grade". Et après avoir jeté un œil au code source, je peux vous dire que c'est pas du marketing puisque ce truc archive votre répertoire en TAR et le chiffre avec XChaCha20-Poly1305, un algorithme AEAD moderne qui assure à la fois la confidentialité et l'intégrité de vos données.

Côté dérivation de clé, ça utilise Argon2id conforme à la RFC 9106. Pour les non-initiés, Argon2id c'est l'algo qui a gagné le Password Hashing Competition et qui est spécifiquement conçu pour résister aux attaques par GPU et circuits spécialisés (ASIC). L'outil adapte automatiquement les paramètres à votre machine en utilisant 85% de votre RAM disponible (entre 512 Mo minimum et 2 Go maximum) afin de rendre le brute-force astronomiquement coûteux. Et si vous avez moins de RAM dispo, il compense en augmentant le nombre d'itérations.

C'est du code Rust bien propre qui utilise les bibliothèques cryptographiques RustCrypto (bien auditées par la communauté) et le code implémente des bonnes pratiques de sécurité comme le memory locking (mlock sur Unix, VirtualLock sur Windows) pour éviter que vos clés se retrouvent dans le swap, et le zeroize pour effacer la mémoire sensible après utilisation.

Vous compilez ça avec cargo build --release, puis pour chiffrer un dossier :

obsidenc encrypt ~/mon-dossier ~/mon-dossier.oen

Pour déchiffrer :

obsidenc decrypt ~/mon-dossier.oen ~/mon-dossier-dechiffre

Le mot de passe doit faire minimum 20 caractères (pas de négociation possible, déso pas déso) et vous devez le confirmer deux fois. Vous pouvez aussi ajouter un fichier de clé en plus du mot de passe pour du 2FA old-school.

L'outil a aussi quelques protections défensives sympas. Par exemple, il refuse les symlinks (vecteur d'attaque classique), limite le nombre de fichiers à 1 million et la longueur des chemins à 4096 caractères pour éviter les zip bombs. Sur les systèmes Unix, il vérifie même que votre fichier de clé n'est pas lisible par tout le monde (chmod 600 obligatoire).

Cet outil part du principe qu'un attaquant peut avoir accès à votre fichier chiffré et dispose de temps illimité pour tenter de le casser, du coup, tout est conçu pour rendre l'attaque offline la plus douloureuse possible.

Bref, si vous cherchez un moyen de sauvegarder vos dossiers sensibles de manière vraiment sécurisée avant de les balancer sur un cloud ou un disque externe, obsidenc fait le taf et en plus c'est open source (MIT/Apache 2.0) !

iMessage Exporter - Pour faire un backup de vos conversations iMessage

Vous avez combien de messages iMessage sur votre Mac ?

10 000 ? 50 000 ? Plus ????

Vous en avez des amis, dites moi ! Et maintenant, petite question piège : Combien de ces messages pouvez-vous réellement exploiter en dehors de l’app Messages d’Apple ?

Hé bien la réponse va vous surprendre (non) : zéro !

Hé oui, car vos conversations sont stockées dans une base SQLite quelque part sur votre disque dur , mais Apple a fait en sorte que vous ne puissiez rien en faire. Les pièces jointes sont planqués dans des dossiers obscurs avec des noms aléatoires, les métadonnées sont éclatées sur une quinzaine de tables, et les timestamps sont au format Apple (pas Unix). Vous pouvez donc ouvrir la base avec DB Browser si vous voulez, mais vous allez juste pleurer du sang devant votre écran et perdre votre joie de vivre.

Et le plus beau dans tout ça c’est qu’Apple ne propose AUCUN moyen d’exporter vos messages. Y’a rien. Y’a des boutons d’export pour vos photos, pour vos mails, pour vos contacts, mais pour vos SMS et iMessages, c’est podzob !

Donc si vous voulez quitter l’écosystème Apple et migrer vers Android (mais qui fait ça ??? lol), bonne chance pour récupérer ces 10 ans de conversations torrides avec Monique de la compta. Et si vous avez besoin d’archiver des échanges professionnels pour raisons légales, à part faire des centaines de captures écran ou de copier coller, j’vois pas.

Heureusement, un dev nommé ReagentX en a eu marre de cette situation et a créé imessage-exporter, un outil open source en Rust qui fait exactement ce qu’Apple refuse de faire à savoir vous donner accès à VOS propres données dans un format lisible et portable.

L’outil tourne sur macOS évidemment, mais aussi sur Linux et Windows. Comme ça, même si vous avez viré votre Mac depuis 3 ans, vous pouvez quand même récupérer votre ancienne base iMessage et l’exporter tranquillement depuis votre machine Ubuntu ou Windows.

Et au niveau des formats d’export, vous avez le choix entre du txt et du html. Le format html est particulièrement bien foutu parce qu’il recrée l’interface visuelle d’iMessage avec vos bulles bleues et grises, les heures d’envoi, et surtout il préserve tous les médias : photos, vidéos, audios, tout y passe. Vous vous retrouvez avec un site html statique que vous pouvez ouvrir dans n’importe quel navigateur et parcourir comme si vous étiez dans l’app Messages, sauf que là c’est rien qu’à vous et personne peut vous le reprendre (sauf le karma ^^).

Pour l’install, si vous êtes à l’aise avec Rust, hop, un simple cargo install imessage-exporter fera l’affaire. Sinon y’a un package Homebrew (brew install imessage-exporter) ou des binaires précompilés sur la page du projet pour Mac Intel et Apple Silicon.

Notez qu’il vous faudra aussi installer ImageMagick et ffmpeg pour la conversion des pièces jointes, mais rien de sorcier. Ensuite, côté utilisation, c’est de la ligne de commande pure et dure. Par exemple, pour exporter toutes vos conversations en html avec les médias dans votre dossier personnel, vous tapez :

imessage-exporter -f html -c clone

Si vous voulez exporter uniquement les conversations avec un contact spécifique, vous pouvez filtrer par numéro de téléphone :

imessage-exporter -f html -c clone -t "0612345678"

Et si votre base iMessage est corrompue ou que vous soupçonnez des problèmes, l’outil intègre aussi une fonction diagnostic qui va scanner la base et vous remonter les anomalies.

Et l’outil gère iMessage, RCS, SMS, MMS, les conversations de groupe, les messages formatés, les threads de réponse, les messages édités, les traductions, les sondages, les votes, et même les arrière-plans de chat custom. C’est ouf ! Et ça c’est parce que ReagentX maintient ce projet depuis des années et suit les updates Apple en temps réel, ce qui n’est franchement pas une mince affaire vu qu’Apple change régulièrement le schéma de leur base.

Normal que ce projet cartonne !

Voilà si vous tenez un minimum à vos données, allez faire un tour sur le repo GitHub d’imessage-exporter … çaa prend 10 minutes à installer, et vous dormirez mieux en sachant que vos échanges et autres souvenir seront conservés bien au chaud sur votre prochain backup.

Et un grand merci à Lorenper de m’avoir signalé ce projet.

TwoFace - Quand les sandbox deviennent inutiles

TwoFace est un outil développé par Synacktiv qui permet de créer des binaires Linux ayant 2 comportements bien distincts. Un comportement parfaitement inoffensif qui s’active dans 99% des cas et un comportement malveillant qui ne se déclenche que sur une machine ciblée spécifiquement pour l’occasion.

Comme ça, votre sandbox verra toujours la version “propre” parce qu’elle n’aura pas le bon UUID de partition.

D’après la doc de Synacktiv, voici comment ça fonctionne : Vous avez deux binaires en fait… Y’en a un qui est inoffensif et un autre malveillant. TwoFace les fusionne alors en un seul exécutable. Ainsi, au moment du build, le binaire malveillant est chiffré avec une clé dérivée depuis l’UUID des partitions disque de la machine cible. Cet UUID est unique, difficile à deviner, et stable dans le temps ce qui est parfait pour identifier une machine spécifique.

Ensuite au lancement, quand le binaire s’exécute, il extrait l’UUID du disque de la machine. Pour ce faire, il utilise HKDF (Hash-based Key Derivation Function) pour générer une clé de déchiffrement depuis cet UUID et tente de déchiffrer le binaire malveillant caché. Si le déchiffrement réussit (parce que l’UUID match), il exécute le binaire malveillant. Par contre, si ça échoue (parce que l’UUID ne correspond pas), il exécute le binaire inoffensif.

Le projet est écrit en Rust et c’est open source ! Et c’est une belle démo (PoC) d’un problème que tous ceux qui font de l’analyse de binaires ont. En effet, d’ordinaire, pour révéler le vrai comportement d’un malware on l’exécute dans une sandbox et on peut ainsi observer en toute sécurité ce qu’il fait, les fichiers qu’il crées, les connexions réseau qu’il établit etc…

Mais avec TwoFace ça casse cette façon de faire. Et c’est pareil pour les antivirus qui verront toujours la version inoffensive tant que l’UUID ne correspond pas.

Techniquement, TwoFace utilise memfd_create() pour exécuter le binaire déchiffré en mémoire, sans toucher au disque, ce qui veut dire zéro trace sur le système de fichiers. Le binaire malveillant apparaît directement en RAM, s’exécute, puis disparaît. Et si vous utilisez io_uring pour l’écriture mémoire, il n’y a même pas de trace syscall visible via strace.

Et ça, c’est la version basique car le document de Synacktiv mentionne également d’autres techniques avancées possibles comme du déchiffrement dynamique page par page du binaire ELF, des mécanismes anti-debugging, des chained loaders multi-niveaux…etc…

Le parallèle avec la backdoor XZ Utils backdoor est très instructif car celle-ci a failli compromettre des millions de serveurs Linux parce qu’un seul mainteneur a poussé du code malveillant dans une lib compressée. Elle a alors été découverte parce qu’un dev a remarqué un ralentissement SSH bizarre et a creusé… Et TwoFace montre qu’on peut faire encore pire sans toucher à la supply chain.

Pas besoin de corrompre un mainteneur de projet, de pousser un commit suspect chez Github. Là suffit d’écrire du code parfaitement propre, de le compilez avec TwoFace pour une machine spécifique, et de le déployez. Le code source sera alors auditable ainsi que le binaire mais l’audit ne révèlera rien parce qu’il se fera dans un environnement qui n’aura pas le bon UUID.

Après, techniquement, une défense existe. Vous pouvez par exemple détecter les appels à memfd_create(), monitorer les exécutions en mémoire, tracer les déchiffrements crypto à la volée…etc., mais ça demande du monitoring profond, avec un coût performance non-négligeable. Et ça suppose aussi que vous savez ce que vous cherchez…

Bref, si ça vous intéresse, c’est dispo sur GitHub !

Handy - Un outil de reconnaissance vocale incroyable (et open source)

Je suis dégoûté parce que je viens de payer un abonnement pour un logiciel qui fait exactement ça, sauf que bah là, Handy , c’est gratuit. L’idée derrière ce logiciel, c’est un outil de speech to text qui fonctionne uniquement en local. Pas d’abonnement, tout est gratuit, et pas de cloud… il faut juste configurer un raccourci clavier. Et ensuite vous parlez et le texte apparaît comme par magie.

A la base, l’idée de cet outil est venue d’un accident. CJ se casse le doigt et il est plâtré pendant six semaines. Du coup il lui est impossible de taper normalement. Il cherche alors des outils de transcription vocale.

Par exemple, Dragon NaturallySpeaking, mais bon, 100 balles, ça fait chier. Google Docs aussi propose ce genre de fonctionnalités, mais uniquement en ligne. Et ça envoie tout dans le cloud, donc bonjour à confidentialité. Quant à Windows Speech Recognition, c’est bugué et assez limité. Bref, toutes les alternatives qu’il a trouvées étaient soit payantes, soit nécessité une connexion permanente vers des serveurs tiers.

Alors CJ a fait ce que font les devs quand un problème les agace. Non pas aller sur Reddit pour dire de la merde random sur moi, mais plutôt coder une solution qui fonctionne super bien !

Et au lieu de la garder pour lui ou de la rendre payante lui il a décidé de tout mettre en open source avec une licence MIT.

Et ce que vous êtes en train de lire précisément maintenant, et bien je suis en train de le dicter. Et ça marche dans les emails, les formulaires web, les éditeurs de texte, peu importe. Et comme je vous le disais, toute la transcription se fait localement sur votre machine. Et tout ça grâce à quoi ? Et bien grâce à Whisper d’OpenAI, dont je vous ai déjà parlé beaucoup de fois.

Handy est codé en Rust pour la performance et la sécurité et surtout cross plateforme, c’est-à-dire qu’il marche ou Linux, macOS et Windows. Et au niveau de la config, il y a quelques options comme le choix de la langue ou le mode d’enregistrement avec le raccourci clavier, soit vous faites du push to talk, soit vous faites une écoute en continu.

Ce truc est génial aussi bien pour l’accessibilité que pour la reconnaissance vocale en elle-même qui est plutôt utile dans la vie de tous les jours. D’ailleurs, il y a plusieurs modèles IA disponibles, comme tous les modèles Whisper, mais aussi un modèle que je ne connaissais pas, qui s’appelle Parakeet et qui franchement fonctionne très bien. C’est celui que j’utilise actuellement.

Testez si ce truc fonctionne bien sur votre vieux PC mais moi en tout cas sur mon Mac de dernière génération c’est encore plus rapide que ce que j’avais avec un modèle Whisper sur mon outil payant.

Voilà, si vous cherchiez un outil de reconnaissance vocale, vous pouvez vous arrêter là parce que vous venez de trouver. Et non pas parce qu’il est parfait, mais parce que comme c’est open source, vous pouvez vous-même le rendre parfait pour vos usages (Le code est sur GitHub ).

Merci à Lilian pour le partage de ce projet absolument génial !

Article dictée intégralement à l’aide de Handy (et corrigé manuellement pour les quelques erreurs de transcription)

Neura Hustle Tracker - Surveiller sa productivité en respectant sa vie privée

Quand je bossais comme consultant y’a genre 10 000 ans, je devais tracker le temps que je passais pour chaque client dans un fichier Excel. Et ça mes amis, c’était super chiant mais nécessaire. Après peut-être que vous de votre côté, vous n’êtes pas tropfliqué mais vous vous imposez l’envoi de messages Slack stratégiques juste avant de vous déconnecter, ou vous faites partir des emails à 23h pour montrer que vous êtes un esclave acharné du capitalisme ?

Bienvenue dans l’ère du grand théâtre de la productivité.

Après quand on est freelance ou qu’on essayer de bien équilibrer son temps de travail, c’est sympa aussi de pouvoir tracker ce qu’on fait en temps réel, pour nous-même, sans forcement que personne d’autre ne regarde.

Hé bien c’est exactement ce que propose Neura Hustle Tracker qui est un tracker de temps open-source, écrit en Rust, qui tourne dans votre terminal et stocke TOUT en local sur votre machine dans un PostgreSQL. Comme ça, aucune donnée ne quitte votre ordinateur.

L’idée, c’est donc de reprendre le pouvoir sur vos propres données de productivité en enregistrant automatiquement les applications que vous utilisez, le temps passé sur chacune, et afficher ça sous la forme de graphiques directement dans votre terminal.

Comme ça vous verrez le temps pharamineux que vous passez sur Korben.info ou Slack au lieu de vraiment bosser. Pour l’installer, ça marche sous Windows, macOS et Linux et ça peut tourner dans un Docker. La doc est ici.

Vous pouvez même le lancer au démarrage de l’ordi, comme ça, le tracking démarre instantanément dès que vous commencez à bosser. Par contre, n’oubliez pas de le couper quand vous voulez faire un truc en dehors des radars hein ^^.

Le projet est encore jeune, mais il évolue rapidement. Adolfo, le développeur principal, a d’ailleurs récemment ajouté des commandes pour naviguer dans l’historique complet (touches h pour history et b pour breakdown) et améliore régulièrement la qualité des visualisations.

Voilà, donc si vous en avez marre que votre productivité soit transformée en KPI pour votre manager, et que vous voulez juste comprendre comment vous passez vraiment votre temps sans avoir à rendre de comptes à personne, Neura Hustle Tracker mérite le coup d’oeil. C’est gratuit, et c’est open-source !

Un grand merci à Lorenper pour le partage !

GitType - Le jeu qui vous fait retaper votre propre code (pour redevenir bon !!)

Vous savez ce moment où vous regardez votre historique Git et vous vous demandez qui est le débile qui a écrit ce code dégueulasse ?

Ah bah ouais, c’était vous il y a 3 mois ^^. Eh bien GitType a trouvé la meilleure des thérapies qui est de vous faire retaper tout ça, lettre par lettre, comme une punition de primaire version développeur, totalement gamifiée avec des points, un chrono, et la possibilité de mesurer à quel point vos doigts sont devenus flasques depuis que Copilot fait tout le boulot à votre place.

Le tagline du projet, c’est “Show your AI who’s boss: just you, your keyboard, and your coding sins”. Et c’est pas une blague, c’est un manifeste car pendant que Copilot, ChatGPT, Claude Code et compagnie écrivent du code à notre place, GitType vous fait faire exactement l’inverse… il vous force à retaper du code pour redevenir bon !

Et contrairement aux tests de frappes classiques comme Ttyper ou tt qui vous font taper du texte générique, GitType utilise du VRAI code source. Votre code, celui de vos repos préférés, ou des repos trending de GitHub. Comme ça, vous ne vous entraînez pas sur du “ the quick brown fox jumps over the lazy dog ” à la con, mais sur vos propres merdes spaghettico-syntaxiques en Rust, TypeScript, Python ou Go.

Le jeu vous propose plusieurs modes. Y’a le mode Normal pour vous échauffer tranquillement, le Time Attack quand vous voulez vous mettre la pression, et des niveaux de difficulté de Easy à Zen pour ceux qui veulent méditer en tapant du code. Le tout avec un tracking en temps réel de votre WPM (words per minute) et de votre précision. Comme ça, plus vous progressez, plus vous montez dans le ranking avec des titres de développeur qui évoluent.

GitType supporte plus de 15 langages de programmation et propose plus de 15 thèmes visuels en mode Dark ou Light, avec possibilité de personnaliser le vôtre. L’installation est simple…

curl -sSL https://raw.githubusercontent.com/unhappychoice/gittype/main/install.sh | bash

Ou via Brew, ou avec un téléchargement direct de binaires. Ça prend 30 secondes chrono. Autre truc sympa aussi, vous pouvez cloner n’importe quel repo GitHub directement depuis le jeu pour vous entraîner dessus.

Comme ça, vous pourrez réaliser votre fantasme le plus humide, à savoir retaper le code de Linus Torvalds !

Cet outil va comme ça l’air de rien vous réapprendre à taper du code vous même, parce que faut bien le reconnaitre, depuis que tout le monde s’est mis au vibe coding, c’est difficile de dire à nos doigts et nos cerveaux de s’y remettre. Avec GitType, vos doigts retrouvent leurs réflexes, vous mémorisez mieux la syntaxe, vous devenez plus rapide au clavier, votre haleine redevient fraiche et vous chopez enfin des matchs sur Tinder, c’est SÛR !!

Ce projet est dispo en open-source sous licence MIT et franchement, vu comment nos IA nous assistent de partout, c’est pas plus mal de garder un peu de muscle mémoire au cas où…

Source

Redlib - Lire Reddit sans que Reddit vous lise

Vous scrollez tranquillement r/rance à 2h du mat’ pour tuer le temps avant de dormir, vous lisez quelques posts, regardez des memes, rigolez sur un truc débile. Mais savez-vous que Reddit enregistre chaque post que vous lisez, chaque image que vous ouvrez, chaque seconde que vous passez sur chaque thread ? Et ça, ils le font même si vous n’avez pas de compte y compris si vous êtes en navigation privée.

Bienvenue dans le monde merveilleux du tracking obligatoire !

Heureusement, pour lutter contre ça, sans se priver de Reddit, il existe Redlib , un front-end alternatif open source, codé en Rust, qui va vous permettre de lire Reddit sans que Reddit ne sache que vous existiez. Pas d’inscription, pas de JavaScript, pas de pubs, pas de tracking. Vous remplacez juste “reddit.com” par “redlib.tiekoetter.com” dans l’URL et hop, vous avez le même contenu sans la surveillance.

D’ailleurs, petite histoire rapide pour comprendre pourquoi Redlib existe…

En 2023, Reddit a décidé de tuer toutes les apps tierces populaires comme Apollo ou BaconReader en rendant son API hors de prix. Le vrai objectif n’était pas de monétiser l’API, mais plutôt de forcer tout le monde à passer par leur app officielle bourrée de trackers et de pubs. À cette époque, il existait Libreddit, un projet similaire à Redlib qui permettait de lire Reddit en privé mais Reddit a commencé à imposer des rate limits agressifs qui ont tué Libreddit… Projet tragiquement décédé, fin de l’histoire…

Sauf que non. Un dev a décidé de ressusciter Libreddit sous un nouveau nom : Redlib. Et là, coup de génie technique, au lieu de se connecter normalement à l’API Reddit, Redlib utilise une technique appelée OAuth token spoofing.

En gros, Redlib se fait passer pour l’application officielle Android de Reddit. Il envoie les mêmes headers HTTP, utilise les mêmes tokens d’authentification, et imite le comportement de l’app officielle. Du coup, Reddit pense que c’est son app qui fait des requêtes, et laisse tout passer sans bloquer. Alors évidemment, la première question qui vous vient surement c’est : Est ce légal ??

Et bien comme pour toutes les bonnes choses de la vie, techniquement, on est dans une “zone grise”. Mais après éthiquement parlant, vous lisez du contenu public que les gens ont posté gratuitement sur une plateforme publique, donc j’imagine que pour le concepteur de Redlib, y’a pas mort d’homme.

Donc pour utiliser Redlib, vous avez donc cette instance publique redlib.tiekoetter.com qui vous permet de libérer n’importe quel lien Reddit. Mais pour les plus geeks d’entre vous, ceux qui sont à fond dans l’auto-hébergement parce qu’ils ont beaucoup de temps libre (lol), vous pouvez le mettre en place chez vous également avec Docker. Le repo GitHub explique tout, c’est assez rapide à mettre en place.

La différence avec l’expérience Reddit normale est d’ailleurs flagrante car sur reddit.com, vous êtes bombardé de popups “Install our app”, de bannières de cookies, de pubs…etc. Le site est lourd, lent, et essaie constamment de vous pousser vers l’app mobile alors qu’au contraire, sur Redlib, c’est du contenu pur et dur. Pas de JavaScript, pas de popups, juste les threads et les commentaires. Et c’est super rapide !! Même les images passent par le serveur Redlib, donc Reddit ne voit jamais votre IP quand vous chargez une photo.

Maintenant, faut quand même savoir que Reddit n’est pas content de cette situation. Ils essaient régulièrement de bloquer les instances Redlib en bannissant des adresses IP. C’est pour cela que certaines instances publiques rencontrent parfois des erreurs du style “Failed to parse page JSON data”, mais la communauté Redlib réagit en général très vite, change d’IP, ajuste les tokens OAuth, et le service repart.

Bref, je vous conseille de tester, surtout si vous en avez marre de vous faire harceler par des messages vous incitant à installer l’app mobile.

Reddit, c’est bien mais Reddit sans surveillance, c’est mieux !

❌