Vue lecture

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

VHS - Scriptez vos démos terminal en GIF

Vous vous souvenez des cassettes VHS ?

Bon, là rien à voir avec le magnétoscope de mémé qui clignote à 12:00 mais je suis quand même content de vous présenter VHS , un petit outil open source concocté par la team Charm dont je vous ai déjà parlé.

Y'a pas longtemps, je cherchais un moyen propre de faire une petit démo d'un projet perso et je ne sais pas si vous connaissez Terminalizer (j'en avais déjà parlé), mais là pour le coup, j'ai préféré l'approche de VHS parce qu'au lieu d'enregistrer votre terminal en "live" comme Terminalizer et de me faire stresser à chaque faute de frappe, ça me permet de scripter entièrement en amont ma démo.

En fait vous écrivez un fichier ".tape" avec vos instructions, et l'outil génère un rendu (GIF, MP4, WebM) nickel chrome. C'est donc le rêve de tous les perfectionnistes comme moi qui recommencent 15 fois la même capture parce qu'ils ont oublié un sudo ou qu'ils ont bafouillé sur le clavier.

Pour l'installer, comme d'hab :

brew install vhs

Après si vous passez par Docker, c'est possible aussi mais il vous faudra impérativement ttyd et ffmpeg installés sur votre machine pour que ça tourne.

Ensuite, voici à quoi ressemble un scénario en .tape :

Output demo.gif
Set FontSize 20
Set Width 1200
Type "echo 'Salut les amis !'"
Sleep 500ms
Enter
Sleep 2s

Et là, c'est magique, vous lancez la commande et c'est parti :

vhs demo.tape

Il lance alors un terminal invisible, tape les commandes pour vous, et enregistre le rendu. Hop, c'est dans la boîte mes petits Spielberg !

Mais ça ne s'arrête pas là puisqu’on peut aussi contrôler la vitesse de frappe pour donner un effet plus naturel, ou utiliser la commande "Wait" pour mettre le script en pause jusqu'à ce qu'une certaine chaîne de caractères apparaisse à l'écran. Genre pour ne pas couper la vidéo pendant un "npm install" qui dure trois plombes.

Et ce qui est top moumoute avec VHS , c'est que comme c'est du code, vous pouvez versionner vos démos sur Git. Mieux encore, vous pouvez les intégrer dans votre CI/CD avec GitHub Actions. Du coup, si votre CLI change, votre GIF de documentation se régénère automatiquement (à condition de configurer le commit du résultat, bien sûr). C'est ti pas beau ça ?

Comme ça s'en est fini des GIFs flous ou des screencasts qui pèsent une tonne. Avec VHS c'est propre, c'est net, et c'est maintenable !

jq-quest - Apprenez à maîtriser jq sans vous prendre la tête

Si vous avez déjà croisé la route de jq , c'est probablement parce que vous vous la touchez un peu dans le terminal et que vous avez déjà joué avec du format JSON (logs, APIs, config...).

Jq, tout le monde l'adore parce que ça filtre, ça mappe et surtout ça transforme du JSON directement depuis le terminal. Mais la syntaxe de ce truc, aïe aïe aïe, c'est comme faire de la Regex. C'est de l'apprentissage sur le tas surtout. Faut copier coller des trucs en provenance de RIP-StackOverflow ou de ChatGPT-le-sang-de-la-veine. Et le pire c'est que 2 jours après, on a tout oublié !!! Puis lire la doc officielle, m'en parlez pas, c'est comme lire autre chose que mon site... c'est pas le criss de fun ^^.

Heureusement, pour ceux qui veulent vraiment monter en compétence sans s'endormir, il existe jq-quest .

C'est un petit projet sympa hébergé sur Codeberg qui propose une approche "learning by doing" (apprendre en faisant, pour les anglophobes). Au début, je pensais que c'était juste un QCM basique, mais en fait non puisqu'il faut vraiment taper les commandes et se salir les mains.

Pour essayer, suffit de cloner le dépôt, vous lancez le script, et on vous donne un input JSON et l'output attendu. À vous ensuite de trouver la bonne commande jq pour passer de l'un à l'autre.

Il vous faudra juste jq d'installé sur votre machine. Attention par contre, si vous êtes sous Windows, il faudra passer par WSL ou Git Bash, parce que le script .sh ne va pas aimer PowerShell.

Ça s'installe donc en deux secondes comme ceci :

git clone https://codeberg.org/gturri/jq-quest.git
cd jq-quest

Ensuite, vous lancez votre premier exercice :

./jq-quest.sh 1-pretty-print.json

Le script va alors vous afficher l'instruction, le JSON d'entrée et ce qu'il attend en sortie :

INSTRUCTION: Pretty print the json
INPUT: {"k1": "v1", "k2":[1, 3, 7]}
EXPECTED OUTPUT: {
 "k1": "v1",
 "k2": [
 1,
 3,
 7
 ]
}

Vous tapez votre proposition de filtre, et il vous dit si c'est bon ou pas. Pour proposer une solution, suffit de taper :

./jq-quest.sh 1-pretty-print.json 'SOLUTION'

Si vous séchez (et croyez-moi, ça va arriver), vous pouvez demander un indice avec :

./jq-quest.sh 1-pretty-print.json hint

Ou carrément la solution si vous êtes au bout du rouleau :

./jq-quest.sh 1-pretty-print.json solution

Mais rassurez vous, les exercices sont progressifs, ça commence par du "pretty print" basique (le truc qu'on fait tous), puis on attaque les filtres simples, les clés spéciales, les tableaux, et petit à petit on arrive sur des trucs bien plus costauds comme les itérations sur objets, le slicing ou les opérations mathématiques.

Ce genre de tuto interactif c'est top parce que jq, c'est hyper puissant, mais la courbe d'apprentissage est un peu raide au début. Là, en une petite heure, vous pouvez plier les exercices et avoir enfin compris la logique du truc au lieu de tâtonner à chaque fois.

D'ailleurs, si vous aimez ce genre d'outils pour parser de la donnée, je vous rappelle qu'il existe aussi fq pour les fichiers binaires ou encore htmlq pour le HTML . J'aurais pu vous parler d'outils graphiques pour faire ça, mais franchement, rien ne vaut la ligne de commande pour comprendre ce qu'on fait. Et si vous êtes plutôt Python, jetez un oeil à jc qui convertit la sortie des commandes classiques en JSON.

Bref, si vous voulez arrêter de souffrir à chaque fois que vous devez extraire un champ d'un JSON interminable, faites un tour sur jq-quest, ça va vous dérouiller les neurones.

Si vous êtes dev et que ce genre de tuto vous parle, suivez Korben sur LinkedIn pour d'autres découvertes.

Un grand merci à Guillaume pour la découverte.

Mole - L'outil CLI qui remplace CleanMyMac et toute la clique

Vous en avez marre de payer des licences pour des apps de nettoyage macOS qui font grosso modo la même chose ? CleanMyMac, AppCleaner, DaisyDisk, Sensei, iStat Menus... C'est pas les options qui manquent, mais le portefeuille finit par tirer la gueule, du coup, quand je suis tombé sur Mole, je me suis dit que j'allais vous en parler.

Mole c'est un outil en ligne de commande (donc ça fait peuuuuur, ahaha mais c'est cool vous allez voir) qui regroupe toutes ces fonctionnalités dans un seul binaire. C'est open source, sous licence MIT, et ça pèse que dalle et en gros, l'idée c'est de taper la commande "mo" suivi d'un paramètre et hop, ça fait le taf.

mo # Interactive menu
mo clean # Deep cleanup
mo uninstall # Remove apps + leftovers
mo optimize # Refresh caches & services
mo analyze # Visual disk explorer
mo status # Live system health dashboard
mo purge # Clean project build artifacts

mo touchid # Configure Touch ID for sudo
mo update # Update Mole
mo remove # Remove Mole from system
mo --help # Show help
mo --version # Show installed version

mo clean --dry-run # Preview cleanup plan
mo clean --whitelist # Adjust protected caches
mo uninstall --force-rescan # Rescan apps and refresh cache
mo optimize --whitelist # Adjust protected optimization items

Par exemple, pour le nettoyage en profondeur, c'est mo clean. L'outil va scanner vos caches système, les logs, les données des navigateurs, et tout le bordel qui s'accumule avec le temps. Dans les exemples donnés par le développeur, il parle de récupérer jusqu'à 95 Go d'espace disque. Évidemment ça dépend de votre usage, mais ça donne une idée du potentiel.

Pour désinstaller proprement une app, mo uninstall fera le job. Et contrairement à la méthode du glisser-déposer dans la corbeille qui laisse traîner des fichiers de préférences partout, Mole traque tous les fichiers associés à l'application et les vire ensemble, comme ce que fait AppCleaner...

Côté monitoring système, mo status vous affiche un dashboard temps réel avec CPU, RAM, réseau, et métriques de santé. Un peu comme iStat Menus mais directement dans votre terminal. Et avec mo analyze, vous avez un explorateur visuel de l'espace disque avec des barres de progression ASCII. Très DaisyDisk vibes. Et mo analyze c'est pareil mais pour l'espace disque...

La commande mo optimize va rafraîchir les caches système et relancer certains services pour remettre de l'ordre. Et pour les devs, mo purge est une tuerie : ça nettoie les dossiers de build de vos projets (node_modules, target, build...) qui peuvent facilement bouffer des dizaines de gigas si vous bossez sur plusieurs projets.

Petit bonus sympa, mo touchid permet de configurer Touch ID avec sudo, ce qui vous évitera de taper votre mot de passe admin 15 fois par jour.

Voilà... Maintenant si ça vous chauffe, l'installation se fait soit via Homebrew avec brew install tw93/tap/mole, soit via curl directement. Le projet est écrit en Shell et Go, ce qui explique qu'il soit aussi léger et rapide. Seul bémol relevé par le développeur, évitez iTerm2 qui a des soucis de compatibilité. Alacritty , Kitty , WezTerm ou Ghostty par contre fonctionnent nickel.

L'outil supporte aussi les options classiques genre --dry-run pour prévisualiser les changements sans rien supprimer, --whitelist pour protéger certains éléments, et --debug pour les curieux et la navigation se fait avec les flèches ou en mode Vim (hjkl) pour les puristes.

Bref, si vous êtes à l'aise avec le terminal et que vous en avez marre de multiplier les apps payantes pour faire des trucs basiques, Mole mérite un petit test !

sqlit - Quand y'en a marre de lancer SQL Server Management Studio pour une requête

Vous aussi vous avez ce truc où vous devez juste faire un petit SELECT rapide sur votre base de données, et là vous lancez un monstre du genre SQL Server Management Studio ou DBeaver, vous attendez que ça se charge pendant 47 ans, que ça bouffe les 2 Go de RAM qu'il vous reste, et tout ça pour une requête de 3 lignes ?

Moi ça m'énerve profondément, j'avoue... Pas le temps, pas la patience !

Heureusement, y'a un dev qui en a eu encore plus marre que moi et qui a pondu sqlit . C'est une interface TUI (Terminal User Interface, je précise...) qui tourne direct dans votre terminal et qui supporte un paquet de bases de données différentes telles que PostgreSQL, MySQL, SQL Server, SQLite, MariaDB, Oracle, DuckDB, CockroachDB, Supabase, Turso... La liste est longue mais en gros, si ça parle SQL, sqlit sait s'y connecter.

Le truc est inspiré de lazygit , un client Git en TUI que beaucoup de devs adorent, ce qui fait qu'on retrouve cette approche "lazy" où l'interface se suffit à elle-même. Comme ça y'a pas besoin de mémoriser 150 raccourcis clavier, puidqu'il y a une aide contextuelle qui s'affiche et qui vous dit quoi faire, comme votre maman quand vous ne l'avez absolument pas sollicitée.

On a donc de l'autocomplétion SQL qui va chercher les noms de tables et de colonnes, un historique des requêtes par connexion (pratique pour retrouver cette requête chelou qu'on avait bidouillée y'a 3 semaines), et même la gestion des tunnels SSH intégrée pour se connecter à des bases distantes. Les utilisateurs de Vim seront contents aussi, car y'a un mode d'édition modal pour naviguer comme dans votre éditeur préféré.

Pour l'installer, c'est hyper simple :

pip install sqlit-tui

Et après vous tapez sqlit dans votre terminal et c'est parti. Les drivers pour chaque type de base de données s'installent à la demande la première fois que vous essayez de vous connecter. Donc pas de dépendances inutiles qui traînent si vous utilisez juste PostgreSQL par exemple.

Y'a aussi un mode CLI si vous voulez scripter vos requêtes :

sqlit query -c "MaConnexion" -q "SELECT * FROM Users" --format csv

Le seul truc naze je trouve, c'est le nom "sqlit" qui ressemble trop à SQLite. Bon courage pour googler des infos dessus... Je sais de quoi je parle, toutes les 2 semaines, y'a une entreprise Korben qui pop en voulant surfer sur mon buzz (ouais j'ai le melon, mdr) et qui passe toutes ses levées de fonds en adwords pour se positionner avant moi sur Google ^^. C'est couillon ^^.

Bref, si vous vivez dans le terminal et que vous en avez marre de lancer des client lourds juste pour un SELECT, c'est vraiment pratique.

❌