Vue lecture

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

UxNote - Annotez vos maquettes web sans prise de tête

Il y a quelques jours, un lecteur (merci Benjamin !) m'a envoyé un outil qu'il a bricolé lui-même avec Codex d'OpenAI et ça touche une petite corde sensible chez moi, d'où le fait que je vous en parle.

C'est pas souvent que je bosse avec des clients sur autre chose que des articles mais il m'est arrivé par le passé qu'un client m'envoie ses retours par mail, avec des captures d'écran floues, des flèches rouges partout et des commentaires du genre "le truc là, à gauche, je sais pas trop ??".

Alors de mon côté, j'ai testé pas mal de solutions pour évier ça mais j'ai rien trouvé de foufou... Figma par exemple c'est top pour les retours mais faut que le client crée un compte (et ça, c'est jamais gagné), Marker.io c'est bien fichu mais c'est payant. J'avais même essayé Loom à un moment, mais bon, leur demander d'enregistrer leur écran c'était trop compliqué.

Alors que UxNote, lui, règle exactement ce problème sans rien de tout ça !

En fait, ça permet d'intégrer une balise JavaScript dans votre page (juste avant le </body>) et hop, une petite toolbar apparaît.

<script src="https://github.com/ninefortyonestudio/uxnote/releases/download/v1.0.0/uxnote.min-v1.0.0.js"></script>

Votre client peut alors surligner du texte, épingler des éléments avec des badges numérotés, ajouter des commentaires... et surtout, exporter tout ça proprement en JSON ou l'envoyer direct par mail.

Comme ça, fini le chaos habituel des retours clients façon "j'ai annoté le PDF que j'ai imprimé puis scanné". Là, les commentaires sont directement contextualisés sur la page, exactement là où ils doivent être. C'est vrai que des outils d'annotation web existent depuis des lustres, mais UxNote a choisi le stockage 100% local (via le localStorage) plutôt que de monter un backend avec des comptes utilisateurs. Et c'est ce qui fait toute la différence niveau simplicité, avec les autres outils.

Par contre attention, si votre client vide son cache navigateur, il perd ses annotations... Perso je vous recommande donc de faire l'export JSON dès que possible pour éviter les mauvaises surprises.

L'outil propose aussi un mode "assombrissement" qui met en évidence la zone annotée (pratique pour se concentrer), des couleurs personnalisables, et même la possibilité de bloquer certains éléments de l'annotation avec l'attribut data-uxnote-ignore. Ça fonctionne sur les environnements de staging, en local, et même sur les SPA ... sauf si vous avez une CSP ultra stricte, auquel cas faudra autoriser le script et les styles inline dans votre config.

Bref, si vous bossez avec des clients qui ont du mal à exprimer leurs retours autrement qu'en pièces jointes de 15 Mo, UxNote pourrait bien sauver les quelques cheveux qu'il vous reste. Et en plus c'est gratuit, open source et disponible sur GitHub .

Que demande le peuple ???

Merci Benjamin !

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 !

Stash - Synchroniser vos notes Apple Notes avec Markdown

Si vous êtes comme moi et que vous vivez dans Apple Notes parce que c'est fluide, synchronisé partout, et que ça marche sans qu'on ait à se poser de questions, cet outil va vous plaire.

Parce que oui, voilà, le jour où vous voulez bidouiller vos notes en ligne de commande, les exporter en Markdown, ou simplement éviter de vous retrouver coincé dans votre prison dorée Apple... Et bien c'est la galère. J'ai longtemps cherché une solution propre. Je me suis même dit à un moment que j'allais coder un script Python foireux pour scrapper la base SQLite locale, mais j'ai vite abandonné l'idée.

Pourquoi ? Parce que j'ai découvert Stash , un petit outil en ligne de commande qui fait le pont entre vos notes Apple et des fichiers Markdown.

Et le truc cool, c'est que ça marche dans les deux sens. Vous pouvez exporter vos notes Apple en Markdown (comme ici : Exporter pour vos backups ), mais aussi éditer vos fichiers Markdown et renvoyer les changements directement dans Apple Notes. C'est une vrai synchro bidirectionnelle qui vous rend vraiment maître de vos données.

J'ai testé ça sur macOS Tahoe avec un dossier de notes en vrac. J'ai lancé le bousin, et ça m'a fait plaisir de voir mes fichiers .md popper proprement dans le terminal, prêts à être commités ensuite sur un GitHub ou édités dans VS Code.

L'installation est toute bête, via Homebrew :

brew tap shakedlokits/stash https://github.com/shakedlokits/stash
brew install shakedlokits/stash/stash

Et ensuite, c'est juste 2 commandes. Pour exporter une note Apple vers Markdown, c'est

stash pull "Ma Super Note"

Stash va chercher la note dans Apple Notes, la convertit en Markdown propre via Pandoc, et vous la balance dans un fichier local Ma Super Note.md.

Et la seconde commande c'est pour faire l'inverse (éditer votre Markdown et pousser les changements vers Apple Notes). Là faut faire

stash push "Ma Super Note.md"

Et là, magie !! Vos modifs se retrouvent dans l'app Notes, synchronisées sur tous vos appareils Apple (iPhone, iPad, Mac). C'est dommage que ça soit pas natif ce truc.

Stash c'est chouette (Oula pas facile à prononcer vite celle là) parce qu'il utilise du YAML front-matter pour lier chaque fichier Markdown à une note Apple spécifique (via un ID unique). Quand vous faites stash push, le contenu du fichier écrase la note. Quand vous faites stash pull, la note écrase le fichier.

Attention toutefois car c'est là que ça se corse... Stash écrase sans pitié !! Si vous modifiez votre note sur l'iPhone ET votre fichier Markdown en même temps, c'est le dernier qui parle qui a raison. Y'a pas de fusion intelligente à la Git, donc gaffe aux conflits. C'est un peu brut de décoffrage, mais au moins c'est clair et prévisible.

Bref, pour ceux qui veulent scripter leurs notes, automatiser des backups, ou simplement bosser en Markdown avec leur éditeur préféré, c'est le chaînon manquant. J'avais testé Obsidian et Joplin par le passé, mais la synchro iCloud ou WebDAV m'avait saoulé. Là, c'est le bon compromis avec l'interface Apple pour la saisie, le Markdown pour le stockage long terme.

Un générateur de mots de passe qui utilise des regex

Vous avez déjà galéré à créer un mot de passe qui respecte les 42 règles imposées par un site un peu trop zélé ? Genre au moins 16 caractères, une majuscule, une minuscule, un chiffre, un caractère spécial, et surtout pas le prénom de votre chat ni votre date de naissance ?

C’est le genre de micro-agression qui peut flinguer une matinée ^^.

Heureusement, y’a un dev qui a eu une idée de génie en inversat complètement le problème grâce à la puissance brute des expressions régulières.

Son outil s'appelle RegExp Password Generator et comme son nom l'indique, c'est un générateur de mots de passe qui fonctionne avec des regex. Au lieu de cocher des cases un peu nazes dans une interface classique, vous définissez vos contraintes ligne par ligne sous forme d'expressions régulières.

Par exemple, vous balancez ^.{16,32}$ pour imposer une longueur entre 16 et 32 caractères, [0-9] pour exiger au moins un chiffre, and [A-Z] pour une majuscule. L’outil va alors calculer l’intersection de tous vos patterns pour vous sortir 5 mots de passe aléatoires qui matchent absolument toutes vos règles simultanément.

L'outil repose heureusement sur la bibliothèque TypeScript @gruhn/regex-utils. Pour ceux qui font du code, vous savez que manipuler des regex pour faire des intersections ou des compléments, c'est normalement une purge monumentale que la plupart des langages de programmation ne gèrent pas nativement.

C'est pourquoi ici, la lib fait tout le sale boulot de calcul d'ensemble pour s'assurer que vos contraintes ne sont pas contradictoires. Si vous demandez un truc impossible (genre un mot de passe qui doit être composé uniquement de chiffres ET uniquement de lettres), l’outil vous le dit direct au lieu de mouliner dans le vide.

Et tout tourne en local dans votre navigateur donc c'est cool pour la vie privée, par contre, gardez en tête que la lib supporte un sous-ensemble bien précis de la syntaxe RegExp de JavaScript. Inutile donc tenter des trucs ultra exotiques comme les lookbehinds complexes, l'outil risque de vous renvoyer une erreur.

Le côté pratique, c'est que vos contraintes sont directement encodées dans l'URL. Du coup, vous pouvez bookmarker une config précise pour un site spécifique ou la partager avec vos collègues sans avoir à tout retaper à chaque fois. Un petit compteur affiche même le nombre total de combinaisons possibles avec vos règles, histoire de vérifier que vous n'avez pas créé un mot de passe trop prévisible (ou au contraire, un truc tellement restrictif qu'il n'existe qu'une seule possibilité).

Bref, j'ai trouvé ça original !

OBS Studio 32 débarque avec un tout nouveau moteur de rendu pour macOS

Passer d'OpenGL à Metal, c'était visiblement pas une mince affaire pour l'équipe d'OBS. La techno d'Apple est sortie y'a 10 ans sous macOS mais ça leur a pris un peu de temps pour la migration... Et n'allez pas croire que je "juge"... Tout ce temps, c'est normal car c'est un soft multiplateforme, donc faut gérer trois écosystèmes en parallèle et ça, ça prend un temps fou.

Tous les effets visuels d'OBS ont dû être réécrits pour fonctionner avec Metal, le langage graphique d'Apple étant bien plus exigeant que celui de Windows et la preview peut parfois légèrement saccader à cause de macOS, mais le flux final reste impeccable.

Niveau performances, Metal fait aussi bien voire mieux qu'OpenGL dans les builds Release mais c'est surtout pour le débogage que ça change tout car les développeurs ont maintenant accès à des outils de diagnostic bien plus performants, ce qui devrait accélérer les corrections de bugs et les futures améliorations.

Pour l'activer (ouais on est chaud !!), c'est hyper simple. Vous allez dans les paramètres d'OBS 32.0, onglet Avancé, section Vidéo, et vous sélectionnez Metal dans le menu déroulant du renderer. Un petit redémarrage de l'appli et hop, vous êtes passé sur le nouveau moteur.

Ce qui est cool aussi avec cette version 32.0, c'est qu'elle inclut un gestionnaire de plugins et des améliorations pour les fonctionnalités NVIDIA RTX.

L'équipe OBS bosse aussi sur des backends Vulkan pour Linux et Direct3D 12 pour Windows, parce que les anciennes APIs comme OpenGL et D3D11 reçoivent de moins en moins de support des fabricants de GPU, donc si vous êtes sur Linux ou Windows, votre tour viendra aussi.

Voilà, après si ça bug, revenez sur OpenGL, mais y'a quand même de bonnes chances que ça tourne mieux qu'avant.

Source

Tunnl.gg - Exposez votre localhost en une seule commande SSH

Vous développez un truc en local et vous avez besoin de le montrer à quelqu'un au travers d'Internet, genre pour tester un webhook, faire une démo rapide, ou juste impressionner votre collègue à distance ? Hé bien au lieu de vous farcir une config nginx + certificats SSL + ouverture de ports sur le routeur (Beurk !), y'a Tunnl.gg qui fait tout ça en une SEULE ligne de commande.

Vous tapez une commande SSH, et hop, vous avez une URL publique qui pointe vers votre serveur local. Pas de client à installer, pas de compte à créer, pas de token à configurer, juste SSH, que vous avez forcément déjà sur votre machine.

Donc pour exposer votre app qui tourne sur le port 8080, vous faites :

ssh -t -R 80:localhost:8080 proxy.tunnl.gg

Et c'est parti ! Le service vous file une URL avec un sous-domaine aléatoire, genre abc123.tunnl.gg, et tout ce qui arrive dessus est redirigé vers votre localhost:8080. Et magie magie, HTTPS est automatique, donc pas besoin de vous soucier des certificats.

Du coup, si vous connaissez déjà ce genre d'outils, vous pensez peut-être à Bore que j'ai présenté il y a pas longtemps, ou Portr qui fait sensiblement la même chose, ou encore Chisel pour les amateurs de tunnels TCP/UDP via HTTP. Tous ces outils font du tunneling, mais Tunnl.gg se distingue par son approche "zéro friction" sans binaire à télécharger, et sans compte à vous créer.

Pour le moment, le service est gratuit pour un usage personnel mais les développeurs prévoient des plans payants plus tard avec des features comme les domaines personnalisés, les sous-domaines persistants et des limites de débit plus élevées. On verra bien mais en attendant, pour tester un truc vite fait ou faire une démo, la version gratuite suffira largement.

Bon, y'a quand même quelques trucs à savoir. Primo, ça ne marche qu'avec du trafic HTTP/HTTPS pour l'instant. Deuxio, le TLS est côté serveur, donc techniquement ils peuvent voir votre trafic même s'ils disent ne pas l'inspecter. Donc pour des données vraiment sensibles, gardez ça en tête. Et tertio, comme tout service de ce type, y'a des limites de fair-use pour éviter les abus.

Bref, si vous cherchez un moyen rapide d'exposer un port local sans vous prendre la tête avec la config, Tunnl.gg fera le taf. Au pire vous aurez découvert une alternative de plus à ngrok , au mieux ça deviendra votre outil par défaut pour les démos express...

Merci à Lorenper pour le partage !

SkillsMP - Plus de 26 000 skills Claude à portée de clic

Vous utilisez Claude Code ? Alors vous savez probablement que l'outil d'Anthropic peut être étendu avec des "Skills", c'est à dire des modules qui ajoutent des capacités supplémentaires à Claude. Y'a un fichier SKILL.md, des scripts optionnels, et comme ça, votre assistant sait faire de nouvelles choses. Sauf que pour trouver ces skills quand on n'a pas envie de se les palucher à la main (ou à l'IA), faut aller les chercher dans les repos GitHub, fouiller les README, comparer les étoiles... La flemme quoi...

C'est la raison d'être de SkillsMP qui vient résoudre ce problème. C'est en fait un marketplace communautaire (pas affilié à Anthropic) qui agrège plus de 26 000 skills Claude provenant de dépôts GitHub publics, le tout présenté dans une interface qui ressemble à un App Store, avec des catégories, des stats, et tout le toutim.

Je vous préviens d'emblée, le site est un peu bordélique. Entre les filtres, les catégories (Développement, Outils, Data & AI, DevOps...), les tris par popularité ou mise à jour récente, et l'interface du tur-fu, faut un peu tâtonner au début. Mais une fois qu'on a pigé comment ça marche, c'est vraiment cool de pouvoir explorer tout ça au même endroit.

Le truc intéressant c'est que SkillsMP filtre automatiquement les repos de mauvaise qualité. Pour qu'un skill apparaisse, il faut minimum 2 étoiles sur GitHub. Ça évite de se retrouver avec des trucs abandonnés ou mal foutus. Y'a même un badge "Marketplace Ready" pour les skills qui ont un fichier marketplace.json bien configuré.

Pour installer un skill que vous avez trouvé, vous avez alors 3 options. Soit vous le mettez dans ~/.claude/skills/ pour l'avoir disponible partout sur votre machine. Soit vous le collez dans .claude/skills/ dans votre projet si vous voulez le partager avec votre équipe via Git. Soit vous passez par l'installation plugin avec une commande du genre /plugin marketplace add anthropics/skills.

La différence avec les commandes slash c'est que les skills sont "model-invoked". Ça veut dire que c'est Claude qui décide tout seul quand les utiliser en fonction du contexte de votre demande. Vous n'avez donc pas besoin de taper /truc pour activer un skill, il se déclenche automatiquement quand c'est pertinent.

Attention quand même, comme toujours avec du code open source venu d'Internet, les développeurs de SkillsMP le précisent bien, ils filtrent les repos pourris mais ça reste votre responsabilité de vérifier ce que vous installez. Un skill a accès à pas mal de trucs sur votre machine, donc prenez 2 minutes pour auditer le code avant d'installer un truc d'un développeur inconnu.

Bref, si vous passez beaucoup de temps sur Claude Code et que vous voulez découvrir ce que la communauté a créé comme extensions, SkillsMP c'est un bon point de départ. C'est gratuit, y'a pas besoin de compte, et ça vous évite de passer des heures à fouiller GitHub manuellement.

Un grand merci à Lorenper pour le partage !

Github Store - Un App Store qui pioche directement dans les releases GitHub

Parfois, c'est galère de chercher des logiciels sur GitHub... et je sais de quoi je parle car je passe littéralement mes journées à faire ça... Faut trouver un projet cool, faut aller dans les releases ou le compiler, l'installer, le tester et ensuite déterminer si ça vous sera utile avant de passer à la rédaction d'un article comme celui que vous êtes en train de lire.

J'adore faire ça mais aller digger Github, ça peut vite devenir pénible.

Alors ça tombe bien car voici un projet qui transforme GitHub en véritable App Store. Ça s'appelle Github Store , c'est disponible sur Android et desktop (Windows, macOS, Linux), et ça vous propose une interface propre qui présente les logiciels open source comme dans un store classique, avec des catégories, des screenshots, des descriptions, et un bouton pour installer en un clic.

Comme c'est bien pensé, l'application va automatiquement indexer les repos GitHub qui contiennent des binaires installables dans leurs releases. Elle filtre les vrais installeurs (.apk, .exe, .msi, .dmg, .pkg, .deb, .rpm) et ignore les archives de code source que GitHub génère automatiquement, du coup, vous ne voyez que les trucs que vous pouvez réellement installer.

L'interface est organisée avec des sections "Populaire", "Récemment mis à jour" et "Nouveautés" et vous pouvez aussi filtrer par plateforme pour ne voir que les apps compatibles avec votre système. Puis quand vous cliquez sur une app, vous avez tous les détails : nombre d'étoiles, forks, issues, le README complet rendu en markdown, les notes de release, et la liste des fichiers disponibles avec leur taille.

Pour qu'un repo apparaisse dans Github Store, il faut qu'il soit public, qu'il ait au moins une release publiée (pas de brouillon), et que cette release contienne un installeur dans un format supporté. Et y'a pas de soumission manuelle à faire, puisque tout est automatique.

Côté technique, c'est du Kotlin Multiplatform avec Compose pour l'interface. Sur Android, quand vous installez une app, ça délègue au gestionnaire de paquets natif et sur desktop, ça télécharge le fichier et l'ouvre avec l'application par défaut de votre système.

Vous pouvez vous connecter avec votre compte GitHub via OAuth. C'est pas obligatoire, mais ça permet de passer de 60 à 5000 requêtes par heure sur l'API GitHub, ce qui est bien si vous êtes du genre à explorer plein de repos.

L'app est dispo sur les releases GitHub du projet et aussi sur F-Droid pour Android. C'est sous licence Apache 2.0, donc vous pouvez en faire ce que vous voulez.

Attention quand même, les développeurs le précisent bien que Github Store ne fait que vous aider à découvrir et télécharger des releases. La sécurité et le comportement des logiciels que vous installez, c'est la responsabilité de leurs auteurs respectifs et la votre, donc comme d'hab, faites gaffe à ce que vous installez.

Un grand merci à Lorenper pour l'info !

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.

Cordon - L'outil qui trouve les aiguilles dans vos meules de logs

Vous avez déjà passé des heures à éplucher des fichiers de logs de plusieurs millions de lignes pour trouver ce qui cloche ? Genre une pauvre erreur bizarre qui se produit une fois sur 100 000, noyée dans un océan de messages répétitifs et d'infos inutiles ? Moi, oui plein de fois !

Mais ça c'était avant de tomber sur Cordon !

Cordon est un outil en Python qui utilise des modèles de transformers et du scoring k-NN pour détecter les anomalies sémantiques dans vos logs. En gros, au lieu de chercher des mots-clés comme un bourrin avec grep, Cordon comprend le sens des messages et repère ce qui sort de l'ordinaire.

Les patterns répétitifs sont alors considérés comme du bruit de fond normal, même si ce sont des erreurs parce que si vous avez la même erreur FATALE qui se répète 10 000 fois, c'est probablement un problème connu. Et vous, ce que vous voulez trouver, c'est l'événement rare, celui qui se produit une seule fois et qui est sémantiquement différent du reste.

L'installation est simple comme bonjour. Un petit pip install cordon et c'est réglé. Pour l'utilisation de base, vous balancez juste votre fichier de logs en argument :

cordon system.log

Et hop, Cordon va analyser tout ça et vous sortir uniquement les trucs intéressants. Par défaut, il garde les 10% les plus "anormaux" sémantiquement. Vous pouvez ajuster ce pourcentage avec --anomaly-percentile 0.05 pour être plus sélectif (top 5%).

Sous le capot, ça utilise le modèle all-MiniLM-L6-v2 de sentence-transformers pour vectoriser les logs. Le fichier est découpé en fenêtres de N lignes (4 par défaut), chaque fenêtre est transformée en vecteur, puis un score de densité k-NN est calculé. Les fenêtres qui ont des vecteurs très différents du reste sont marquées comme anomalies.

Et si vous avez un GPU, Cordon peut l'utiliser automatiquement avec l'option --device cuda. D'après les benchmarks, ça donne un speedup de 5 à 15x sur le scoring pour les gros datasets. Sur des logs HDFS de 1 à 5 millions de lignes, l'outil arrive à réduire le volume de 98%. Autant dire que ça filtre sévère.

Y'a aussi un mode "range" qui est pratique pour explorer par tranches. Genre si vous voulez exclure le top 5% (trop bizarre, probablement du garbage) mais garder le top 5-15%, vous faites :

cordon --anomaly-range 0.05 0.15 app.log

Ça permet d'affiner l'investigation de manière itérative.

Pour les environnements conteneurisés, Cordon propose également une image Docker avec un backend llama.cpp au lieu de sentence-transformers. Pratique si vous voulez utiliser des modèles GGUF ou si vous êtes dans un contexte où les dépendances PyTorch posent problème.

L'outil peut aussi s'utiliser comme bibliothèque Python si vous voulez l'intégrer dans vos propres scripts :

analyzer = SemanticLogAnalyzer()
output = analyzer.analyze_file(Path("system.log"))

C'est top moumoute pour le prétraitement de logs avant de les balancer à un LLM (pour réduire le contexte), le triage initial de fichiers de logs inconnus, ou la découverte de patterns inattendus. Par contre, si vous cherchez une erreur spécifique que vous connaissez déjà, grep reste votre ami. Et si vous avez besoin d'un historique complet pour la conformité, oubliez Cordon qui est volontairement "lossy".

Notez qu'au premier lancement, Cordon téléchargera le modèle d'embedding (environ 80 Mo) donc ce sera un peu lent, mais ensuite, ça sera quasi instantané car les lancements suivants utiliseront le cache. Et si vos logs sont très verbeux avec de longues lignes, le modèle par défaut (256 tokens max) risque de tronquer les lignes, dans ce cas, passez à un modèle plus costaud comme BAAI/bge-base-en-v1.5 qui supporte 512 tokens avec le paramètre --model-name.

Voilà, j'espère que ça vous sera utile ! C'est open source sous licence Apache 2.0 et ça se trouve sur GitHub .

❌