❌

Vue lecture

Korben Remote Desktop - Contrôlez votre Mac à distance gratuitement

J'ai pas mal de déplacements pro en ce moment, et comme je suis sur plein de projets en même temps, c'est un peu relou. Parce que tout ne tourne pas uniquement sur mon ordi portable. J'ai des traitements un peu plus lourds qui tournent par exemple sur mon Mac Studio et faut dire que je lui en fais vraiment voir de toutes les couleurs à celui-là...

La plupart du temps, j'arrive heureusement à tout gérer à distance en me connectant en SSH à l'ordinateur via mon VPN privé (ça me permet d'avoir toutes mes machines sur le même réseau local virtuel comme ça c'est chiffré et sécurisé) mais il arrive parfois que je doive cliquer sur un bouton ou taper un mot de passe via l'interface de macOS.

Jusqu'à présent pour ce genre de choses, j'utilisais donc l'application Partage d'Écran fournie par Apple, mais je ne sais pas vous, chez moi ça lag furieusement et c'est vraiment pas pratique à utiliser. Bref, j'aime pas.

Je me suis donc rabattu sur des Real VNC et compagnie, mais pareil, ce n'est pas un protocole et des clients que je trouve très efficaces. Et j'avais pas envie non plus de payer un peu au pif une app présentée comme meilleure comme celle-ci d'Apple pour voir ce que ça donne :

Du coup, je me suis créé à l'aide d'agent IA, ma propre application de prise de contrôle à distance en y mettant toutes les fonctionnalités dont j'avais besoin.

Ça s'appelle Korben Remote Desktop et ça fonctionne en deux parties. On a d'un côté un petit agent sur l'ordi à contrôler, qui demande juste les autorisations système "Enregistrement de l'écran" et "Accessibilité" (sans oublier la fonctionnalité de Session à distance activée dans Partage, pour le tunnel SSH au niveau des réglages de macOS), et de l'autre côté le client sur le Mac que vous avez sous les yeux. Les deux se parlent ensuite à travers un tunnel SSH chiffré, sur votre réseau local ou votre VPN privé, sans passer par aucun serveur chez moi ni ailleurs puisque l'appli refuse carrément les adresses IP publiques pour des questions de sécurité.

Voici tout ce que j'ai mis en place dans cette application :

  • Une image fluide, jusqu'en 4K. Capture ScreenCaptureKit, encodage HEVC ou H.264 par la puce du Mac, transport UDP chiffré avec de la parité Reed-Solomon pour encaisser les paquets perdus. Qualité au choix (Automatique, 720p, 1080p, 4K ou Native) et cadence de 30, 60 ou 120 images par seconde.
  • Un Wi-Fi qui coupe n'est plus un drame. Une micro-coupure est traitée comme un retard et pas comme une perte, et trois priorités de présentation (Réactif, Équilibré, Fluide) règlent le tampon selon que vous voulez la latence la plus basse ou aucun gel d'image.
  • Le son aussi. Le son système du Mac distant arrive au format Opus, et si y'a pas de son, aucune bande passante n'est consommée pour ça.
  • Souris, clavier et raccourcis. Défilement précis, boutons latéraux compris, et les raccourcis partent au Mac distant tant qu'il a le clavier (⌘C copie là-bas, pas chez vous). Ceux du client sont donc basculés en ⌃⌥⌘ pour ne pas leur marcher dessus.
  • Un mode jeu. Capturer la souris (⌃⌥⌘G) cache le curseur, envoie le mouvement brut sans le bloquer aux bords de l'image et passe le clavier en touches physiques, donc W reste la touche W quelle que soit la disposition. Les manettes passent aussi, en expérimental.
  • Tous les écrans. Vous passez d'un écran à l'autre, ou vous les affichez tous à la fois (⌃⌥⌘A), rangés comme sur le Mac distant, le pointeur passe de l'un à l'autre et une fenêtre se tire d'un écran à l'autre. Un écran branché ou débranché pendant la session apparaît ou disparaît tout seul.
  • Zoom et plein écran. Un zoom comme celui de macOS (pincement à partir du curseur, déplacement à deux doigts, double toucher) et un plein écran système dont la barre d'outils se range.
  • Les fenêtres des apps distantes, chez vous. Une fenêtre d'une application du Mac distant (un Terminal du Studio, par exemple) peut s'ouvrir comme une fenêtre indépendant sur votre Mac. Vous la déplacez, la redimensionnez, vous tapez et cliquez dedans, et c'est l'application distante qui répond. Quand elle a accès au clavier, la barre des menus de votre Mac affiche même les menus de cette application distante, et un clic droit y ouvre le vrai menu contextuel du Mac distant.
  • Fichiers et presse-papiers. Presse-papiers texte partagé, transfert de fichiers dans les deux sens, y compris en glisser-déposer vers et depuis le Finder distant. Un transfert interrompu peut également reprendre sans tout recommencer. Les fichiers reçus sont ensuite mis en quarantaine, comme n'importe quel téléchargement.
  • Reconnexion automatique. Si le lien tombe, l'image se grise et le client réessaie jusqu'à ce que vous l'arrêtiez, en gardant vos fenêtres déportées. Et si aucune session n'est ouverte sur le Mac distant (après un redémarrage, par exemple), l'appli vous propose alors d'ouvrir le Partage d'écran d'Apple pour taper votre mot de passe, puis reprend la main dès que l'agent est prêt (J'ai pas d'autre choix que de faire comme ça).
  • Un Mac qui ne montre rien pendant que vous bossez dessus. Durant une session, l'écran du Mac distant est noir pour quelqu'un qui passerait devant, son clavier et sa souris sont bloqués et ses haut-parleurs sont coupés (le son, lui, continue d'arriver chez vous). À la déconnexion, l'agent demande au lecteur multimédia de se mettre en pause (s'il peut le faire) et verrouille la session, par défaut.
  • Un accès depuis un simple navigateur. L'agent peut aussi ouvrir un accès web, à démarrer explicitement dans sa fenêtre. Vous copiez un lien à usage unique valable quinze minutes, vous l'ouvrez dans Safari ou Chrome sur votre réseau privé, vous comparez l'empreinte du certificat avec celle affichée par l'agent, et vous retrouvez l'écran, le son, le zoom et le contrôle sans rien installer. Les fichiers et les fenêtres séparées restent réservés au client Mac.
  • Sécurisé par défaut. Tunnel SSH obligatoire pour le client natif (votre compte SSH est la clé, aucun compte à créer nulle part), TLS avec échange de clés ECDHE et ChaCha20-Poly1305 pour le lien de contrôle, AES-256-GCM pour l'image et le son, adresses publiques refusées, et un seul viewer à la fois (le deuxième doit demander la place au premier, qui répond oui ou non).
  • Une vraie app Mac. Barre latérale avec vos Macs, barre d'outils native, fenêtre Réglages, menus complets, mode sombre, français ou anglais selon la langue du système, et les Macs du réseau qui ont la session à distance activée sont trouvés tout seuls par Bonjour. Les statistiques du flux (⌃⌥⌘I) donnent la latence, la gigue, le tampon et les pertes, et une "liaison économe" allège tout d'un coup pour un réseau lent ou compté.

Ce que ça ne fait pas encore par contre, c'est pas de réveil à distance, pas de déverrouillage FileVault après un redémarrage à froid (prévu sur macOS 26, mais pas encore validé), les gestes du trackpad comme la rotation ou le balayage à trois doigts ne passent pas, et le verrouillage des majuscules reste celui du Mac distant. Il faut macOS 14 minimum des deux côtés, et les deux applications sont universelles, Apple Silicon comme Intel (testées sur Apple Silicon, l'Intel et macOS 14 restent à valider).

Maintenant pour pour l'utiliser tous les jours, ce que je peux vous dire c'est que ça marche très bien. Maintenant, j'ai pas eu d'autres testeurs que moi-même pour le moment mais ça fait tout ce dont j'ai besoin.

Et je me suis payé le luxe également d'adapter le code (en version ultra alpha, j'ai pas encore assez testé ça) pour Windows et Linux. Et l'application iOS est également sur les rails.

Maintenant, comme d'hab, j'ai essayé de la mettre sur l'App Store d'Apple mais ils sont tellement casse couilles que je ne sais pas si j'y arriverai. Mais peu importe, je me suis dit que ça vous servirait alors je vous ai fait un petit site ici pour télécharger mon app : remotedesktop.korben.info .

C'est 100% gratuit, y'a aucune télémétrie ni pub dedans et je n'ai pas de plan de carrière avec ce logiciel si ce n'est de l'améliorer par petites touches au fil du temps. Je l'ai créé pour mes besoins et je me suis dit que ce serait dommage de ne pas vous en faire profiter, c'est tout.

Voilà, donc n'hésitez pas à tester. C'est conçu pour macOS mais j'ai décliné ça pour Windows et Linux (je le redis, c'est de l'alpha pour Win et Linux) afin que chaque client puisse prendre le contrôle de n'importe quelle machine peu importe son système d'exploitation.

Enjoy !

  •  

Music Bridge - Pour que les liens musicaux s'ouvrent bien sur votre plateforme favorite

Si vous avez des potes qui vous envoient des liens Spotify trop cools toute la journée alors que vous écoutez tout sur Deezer (ou l'inverse), bah c'est chiant votre vie. Faut copier le titre, ouvrir votre appli, le chercher...etc.

Heureusement, il existe Music Bridge , une extension pour le navigateur signée Simon Duhem (un ancien de Deezer) qui vous permet d'éviter de faire tout ce bordel en ouvrant directement la bonne chanson dans votre application musicale à vous.

Une fois Music Bridge installé, vous réglez votre service favori une fois pour toutes dans les options, et ensuite chaque page de morceau ou d'album ouverte ailleurs vous renvoie automatiquement vers son équivalent chez vous.

Deezer, Spotify, Apple Music, YouTube Music, Amazon Music, Tidal et Pandora se renvoient ainsi la balle dans n'importe quel sens, et YouTube ou SoundCloud peuvent également servir de destination. Et bien sûr si le morceau n'existe pas dans votre catalogue parce que c'est trop niche, bah vous restez sur la page d'origine avec un petit message qui vous prévient.

Maintenant pour ceux qui préfèrent l'appli de bureau plutôt que l'extension navigateur, une option permet également de lancer la musique directement dedans pour Deezer, Spotify et Apple Music, sous Windows et macOS, et une autre s'occupe de refermer l'onglet resté ouvert 5 secondes après l'ouverture de l'appli. Cochez juste "Toujours autoriser" la première fois que le navigateur vous demande s'il peut ouvrir l'appli, sinon l'onglet se fermera avant d'avoir eu votre réponse.

Après, il y a encore quelques trous dans la raquette... Par exemple, il n'y a pas de conversion pour les artistes ou pour les playlists. Et sur Android, quand l'appli de l'autre plateforme est installée, c'est elle qui récupère ses liens avant même que le navigateur ne les voie, et ça malheureusement, l'extension n'y peut rien.

Maintenant, pour retrouver le bon morceau, l'extension envoie l'adresse de la page ainsi que la plateforme de destination choisie à un petit service web que Simon hébergé chez Cloudflare, qui interroge l'API d' Odesli (le moteur de song.link) pour faire le matching.

Le code de cette extension est sous licence BSD et Music Bridge s'installe sur Chrome , Firefox (Android compris) et Edge .

Merci à Simon pour le partage !

  •  

Le Petit Prince devient un jeu 3D dans votre navigateur (Merci l'IA)

Je pense que ça va vous plaire ! En tout cas, moi ça m'a vraiment impressionné ! Le Petit Prince parmi les étoiles , c'est un jeu en 3D qui se lance directement dans le navigateur et qui nous emmène de planète en planète tout comme dans le conte de Saint-Exupéry. Il n'y a rien à installer, et le jeu est en français, en plus de sept autres langues.

La carte du voyage en français : B-612 est ouverte, les sept autres planètes attendent

Au premier clic, la carte du voyage s'ouvre avec huit planètes, et au démarrage, seule B-612 est accessible. Le roi, l'allumeur de réverbères, le géographe et les autres attendront donc leur tour pendant que vous promenez le petit prince sur son astéroïde (après une courte cinématique où il contemple une mer de nuages), entre ses volcans et sa fleur. Votre progression, elle, reste sauvegardée dans le navigateur d'une visite à l'autre.

Sur B-612, premier objectif : faire le tour de la planète, entre la cabane et les deux volcans

L'ambiance est reposante, un peu magique et m'a bien replongé en enfance, quand je lisais cette histoire poétique et un peu bizarre ^^.

Derrière ce jeu, il y a Sac, un créateur basé à Singapour qui parle d'IA et de 3D toute la journée sur X. Dans son post de lancement , il explique avoir passé 16 jours sur ce projet avec l'aide de Claude Opus 5.5, en combinant Tripo et Blender . Mais c'est surtout Opus 5.5 qui a transformé chaque planète du conte en scène 3D totalement explorable. Il a promis aussi de publier un peu plus tard le code source du jeu et le détail de comment il a réussi à faire tout ça. Après avoir fait ce jeu pour tester les capacités de l'IA, ce qu'il pense maintenant, c'est que plus personne n'a la moindre raison de ne pas l'utiliser.

En attendant qu'on ait les détails de son making-of, en creusant un peu, ce qu'on peut déjà voir c'est que c'est un export Unity qui tourne en WebGPU (sans aucun repli vers WebGL2), découpé en lots de chapitres, et que les commentaires dans le code renvoient à des documents de conception écrits en Markdown (UI_DESIGN.md, ENGLISH_COPY.md, WEB_BUILD.md...) ainsi qu'à des scripts Python qui génèrent en l'occurrence les polices et les logos.

Maintenant, quelle part a été faite à la main, ça, on ne le saura que lorsqu'il publiera sa technique...

Mais en tout cas, si après avoir joué à ce jeu, ça vous donne envie de vous y mettre pour réaliser vous aussi le jeu vidéo de vos rêves que vous avez dans la tête depuis que vous êtes tout petit, voici ce que vous avez à votre dispo.

Tout d'abord, il vous faut des graphismes et pour cela, Tripo transformera une description texte ou une simple image en modèle 3D, surtout si vous utilisez aussi son add-on officiel pour Blender qui permet de faire ça sans quitter le logiciel (à condition d'avoir une clé API Tripo). Maintenant, si vous préférez tout garder sur votre machine, n'oubliez pas que TRELLIS de Microsoft génère lui aussi des modèles 3D, sous licence MIT, et que je vous avais présenté son portage sur les Mac Apple Silicon il y a quelques mois.

Ensuite, pour que Claude pilote Blender, il y a MCP for Blender , l'ex-blender-mcp. L'IA y écrit elle-même le Python de Blender pour la modélisation, les matériaux, l'animation, le rig et la retopologie, et le serveur lui ajoute Poly Haven, Sketchfab ainsi que la génération 3D par Tripo ou Hyper3D Rodin (il propose aussi Hunyuan3D, mais la licence de Tencent exclut l'Union européenne, donc à voir ce qu'on fait de ça chez nous...).

Côté moteur, Unity a déclaré obsolète le serveur MCP intégré à son éditeur au profit du Unity CLI , gratuit et indépendant de son offre Unity AI, qui sait configurer Claude et installer des skills Unity pour votre agent.

Ça donne ceci si vous voulez l'installer. Ça commence par Blender d'abord, et puis Unity :

uvx mcp-for-blender setup
unity pipeline install
unity mcp configure claude
unity skill install <agent-name>

Ensuite, pour sortir le jeu et qu'il tourne dans le navigateur, sachez que le WebGPU d'Unity n'est plus expérimental depuis Unity 6.6 , mais qu'il faut encore l'ajouter vous-même aux API graphiques du lecteur Web. Quant au chef d'orchestre, Claude Code, comme vous le savez, c'est payant et inclus dès l'abonnement Pro de Claude , à 20 balles par mois.

Après, le hic, c'est ce WebGPU obligatoire car le jeu exige Chrome ou Edge 113 et plus, Safari 26, ou Firefox 141 sous Windows et 145 sur les Mac Apple Silicon. Et sous Linux (si j'en crois le suivi du W3C ), Chrome ne l'active d'office qu'avec un GPU Intel récent ou une carte NVIDIA sous Wayland, et Firefox seulement en Nightly.

Donc si l'écran vous dit que votre navigateur n'est pas compatible, séchez vos larmes et essayez depuis un Mac ou un PC Windows.

Et puis si l'envie vous prend d'adapter un autre classique à votre tour, choisissez-le bien, puisque le texte de Saint-Exupéry reste protégé en France jusqu'en 2032 et que ses héritiers exploitent le nom et les personnages comme étant des marques . Du coup, y'a des chances que Little Prince, le jeu, saute rapidement.

La rose va être bien triste encore...

Source : littleprince.dev

  •  

xboxrecomp - Transformer un jeu Xbox en .exe Windows

xboxrecomp est un outil de recompilation qui vient de voir le jour et qui devrait vous intéresser si vous êtes nostalgique de la première Xbox. En effet, ce dernier prend l'exécutable d'un jeu de la Xbox originale, traduit chacune de ses fonctions x86 en code C, puis recompile le résultat en programme Windows 100% natif. Cela veut dire que le jeu ensuite peut tourner directement sur votre ordinateur, sans faire appel à un interpréteur ni à un émulateur. C'est ce qui s'appelle de la recompilation statique, et je vous en parle régulièrement parce que je trouve ça assez magique (rappelez vous de Zelda 64 recompilé ).

Le dépôt de xboxrecomp ne contient évidemment aucun fichier de jeu pour ne pas s'exposer au courroux des ayants-droits. Vous devez donc avoir votre propre disque, en extraire le default.xbe, et la chaîne d'outils (du Python avec capstone, puis Visual Studio 2022 pour compiler) génèrera chez vous tout le code C du jeu. Pas de bouton magique, par contre, le premier lancement d'un jeu recompilé plantera et ensuite, ça avancera crash après crash. Notez que ce projet s'est construit avec Claude Code également.

Pour le moment, le seul jeu qui va au bout de sa recompilation, c'est Burnout 3: Takedown. Tous les modes démarrent et se jouent, seul ou à deux, mais les menus tournent à environ 14 images par seconde et les courses à 2 à 4 FPS sur une machine à 12 cœurs. Y'a pas non plus de possibilité de faire des sauvegardes et c'est manette obligatoire. Bref, c'est pas encore très jouable.

En fait le problème c'est le GPU de la Xbox (le NV2A) qui est émulé en logiciel, et c'est malheureusement ça qui fait chuter les FPS. Le "No emulation" du slogan ne vaut donc que pour le processeur, mais pas les morceaux audio ni le GPU repris de xemu. Mais ça changera peut-être bientôt.

Maintenant, si vous cherchez un jeu Xbox précis à installer, regardez plutôt du côté de SCDA-XBERecomp , qui est l'inverse de xboxrecomp. C'est n'est pas un outil universel mais une recompilation uniquement du jeu Splinter Cell: Double Agent. Celui-ci réimplémente le noyau, Direct3D et DirectSound côté Windows, et vous laisse régler le champ de vision ou lever la limite de 30 images par seconde.

Et si vous voulez juste rejouer à vos jeux Xbox ce soir, un émulateur comme xemu fera très bien comme d'hab.

Moi de mon côté, j'avance toujours sur mon recompilateur universel de ROMs Kompote et ça marche vraiment très bien. Là je suis en train d'implémenter le support des jeux Amiga... je pense que dans quelques jours, ce sera cuit à point.

Source : xboxrecomp sur GitHub

  •  

Il a entièrement recodé 8 vieux OS en HTML + un VB6 qui sort des .exe.

Wiesław Šoltés , un développeur open source spécialiste de .NET et d'Avalonia, a publié d'un coup sur son Github, plusieurs reconstitutions de Windows 3.1, 95, 98, Me, 2000, XP, Vista et même Mac OS 9 directement utilisables dans le navigateur ! Vous cliquez sur le lien, la page se charge en moins de deux secondes, et hop, vous voilà devant le Program Manager, le menu Démarrer ou le Finder.

Les huit bureaux au démarrage : Windows 3.1, 95, 98 et Me en haut, 2000, XP, Vista et Mac OS 9 en bas

Et ce ne sont pas des coquilles vides comme on le voit parfois mais de vrais OS complets. Le Windows 3.1 compte 28 applications rangées dans les groupes d'origine du Program Manager, XP en a 56, et Windows Me monte à 60 app en comptant les panneaux de configuration. Donc si vous n'avez jamais connu ces machines en vrai parce que vous êtes un.e petit.e jeune, c'est l'occasion de tripoter vous-même ce que vos aînés vous racontent depuis des années.

Le Démineur de Windows 3.1, ouvert par-dessus les groupes du Program Manager

Toutes les applis d'un même bureau partagent en plus un disque virtuel. Ainsi, sous Windows 95, un document enregistré dans Notepad apparaîtra dans l'Explorer tout comme dans l'invite MS-DOS, et l'interpréteur de commandes gère les redirections et les jokers (les *) sans soucis.

Voici par exemple le début d'une petite séquence que propose le README, à taper dans une invite de commande MS-DOS pour créer un fichier :

CD "C:\My Documents"
ECHO Hello from DOS>hello.txt
TYPE hello.txt
DIR /B *.txt

L'invite MS-DOS de Windows 95 après la séquence ci-dessus : hello.txt est créé, lu puis listé

Côté jeux, XP propose le Spider Solitaire, une Dame de pique contre trois adversaires pilotés par l'ordinateur et un flipper dont le tableau original, s'inspire de Space Cadet. Vista, quant à lui, ressort Chess Titans, Mahjong Titans, Purble Place et InkBall avec ses gadgets sur le côté, et Mac OS 9 a son Finder spatial, ses 33 tableaux de bord et sa Graphing Calculator.

Le flipper de Windows XP, une table originale inspirée de Space Cadet

Chess Titans sous Vista, avec l'horloge, le diaporama et le calendrier en gadgets

Mac OS 9 et sa Graphing Calculator, qui trace ici y = sin(x)

Maintenant, ce qui m'a intrigué, c'est comment ça peut démarrer aussi vite ???

Eh bien tout simplement parce que rien n'est émulé ! Par exemple, un émulateur comme v86 , dont je vous parlais en 2022, traduit à la volée le code machine x86 en WebAssembly pour faire tourner Windows lui-même dans le browser. Mais ici, il n'y a ni noyau Windows ni processeur virtuel, car chaque fenêtre, chaque menu et chaque application ont été réécrits en HTML, CSS et modules JavaScript. Les fenêtres sont donc des éléments de page web ordinaires, que le navigateur affiche comme n'importe quel site.

Le code, lui, est volontairement dépouillé, avec par exemple Windows 3.1 qui n'a besoin d'aucun framework ni d'aucun bundler, ou encore le bureau de Windows 95 qui s'affiche via un simple python3 -m http.server.

Seuls le fond d'écran, les économiseurs et certaines opérations de dessin passent par le GPU en WebGPU, avec un repli sur WebGL2 puis sur Canvas 2D si votre machine ne suit pas. Et sur Windows 3.1 comme sur Mac OS 9, l'image ne se redessine que quand quelque chose change, donc un bureau au repos ne relance aucun rendu au niveau GPU.

Pour le poids, pareil, c'est super léger. Cache désactivé, chaque "OS" charge très peu de data : 183 Ko pour Windows 95, 180 Ko pour Mac OS 9 et 306 Ko pour Windows 2000. Et XP et Vista montent à 4,5 et 2,5 Mo. À titre de comparaison, DrawingSpace , un éditeur de diagrammes façon Visio du même auteur, écrit en C# et compilé en WebAssembly avec Uno Platform, en réclame 17 Mo.

DrawingSpace, l'éditeur de diagrammes du même auteur, écrit en C# et compilé en WebAssembly

Le revers de la médaille, vous l'aurez compris, c'est que vous n'avez pas Windows sous la main, mais sa reconstitution. Aucun programme d'origine ne s'exécute, et l'équivalence au pixel près n'a pas été établie. Pour montrer à quoi ressemblait un bureau à quelqu'un qui ne l'a pas connu, ou pour choper un peu de code afin de développer votre propre bureau Windows HTML pour y mettre votre site web, c'est parfait. Mais pour relancer un logiciel d'époque tel qu'il était, faudra passer par v86, par Infinite Mac pour Mac OS 9, ou encore par RetroTick , qui exécute les vrais .exe Windows et DOS.

Mais le plus beau morceau de tout ce que le garçon nous a sorti, c'est je trouve, VB6 Studio Web , publié le même jour. C'est un Visual Basic 6 dans un onglet, avec sa boîte à outils, sa fenêtre Properties, son concepteur de formulaires et un débogueur pas à pas. Vous appuyez sur F5 et le projet d'exemple (une saisie de commandes shopping) se lance aussitôt. Et le code VB n'est pas confié à un eval JavaScript, mais réellement exécuté par un compilateur et une machine virtuelle maison, avec 37 types de contrôles différents dispos.

VB6 Studio Web après un F5 : le projet d'exemple Order Entry tourne dans l'IDE

Ouvrez ensuite l'exemple Calculator par File, New Project..., puis lancez File, Make Calculator.html, et votre programme deviendra une page HTML unique qui embarquera son propre runtime. Sur l'exemple Calculator, ça m'a donné un fichier de 1,9 Mo qui s'ouvre directement depuis le disque, sans l'IDE, et qui répond bien 42 quand je lui demande de faire un 6x7 (ouais, six-seven, on soutient la cause lycéenne ici !).

Pour ceux qui ont des archives, il peut aussi ouvrir les projets .vbp et .vbg d'époque, depuis des fichiers, un dossier ou un ZIP, et il embarque même un agent de code qui pilote l'IDE avec votre propre clé OpenAI, Anthropic ou Gemini.

L'entrée voisine, "Make Calculator.exe" (Win32 AOT), va encore plus loin puisqu'un éditeur de liens PE32 et un générateur de code x86 écrits en JavaScript y fabriquent un exécutable Windows natif, sans quitter le navigateur.

Chez moi, après compilation, j'ai obtenu un fichier de 34 ko que la commande file identifie comme un véritable exécutable PE32 pour Windows. Je ne l'ai pas lancé sous un vrai Windows, mais ça devrait normalement se lancer vu que c'est assez basique comme code.

Le projet Calculator après Make Calculator.exe : la barre d'état annonce 34304 octets, code x86, contrôles natifs et GDI, sans extraction

La même calculatrice exportée en un seul fichier HTML, ouverte hors de l'IDE : 7 × 6 = 42

Bref, le mec a fait des trucs de zinzin, à se demander comment un développeur peut-il sortir autant de choses à lui tout seul ?

Probablement grâce à l'IA, puisque les projets contiennent pour la plupart un fichier .openai/hosting.json mais peu importe, même si c'est vibe codé, c'est quand même un gros boulot et la qualité est au rendez-vous.

Voilà, si vous voulez tester, tout se lance sans rien installer, depuis les dépôts Windows 3.1 , 95 , 98 , Me , 2000 , XP , Vista et Mac OS 9

Vos fichiers créés dans ces "OS" resteront bien sûr dans le navigateur dans un IndexedDB, donc si vous videz les données du site ou si vous changez de navigateur, votre ordinateur virtuel repartira de zéro...

Sous Windows 95, l'outil Backup exportera le disque en JSON donc il y a quand même moyen de faire un petit export si ça vous amuse et bonne nouvelle, son VB6 Studio Web est sous licence MIT, donc si vous avez encore un vieux projet VB6 qui dort sur un disque dur, vous savez maintenant où aller pour tenter de le rouvrir !

  •  

OpenMouse - Réglez votre souris gaming depuis le navigateur

Si vous avez la chance de rentrer de manif avec vos 2 mains, parce que hé, "c'est la démocratie", voici un outil qui va vous intéresser ! Ça s'appelle OpenMouse et c'est un configurateur de souris gaming qui fonctionne direct dans le navigateur. Vous branchez votre souris, vous ouvrez le site dans Chrome ou Edge, et vous réglez le DPI, le polling rate, et les boutons et le RGB (selon ce que votre modèle sait faire).

L'outil n'envoie aucune donnée à l'extérieur et en plus, c'est gratuit et sous licence AGPL. Maintenant, est-ce que ça va fonctionner avec votre souris ? C'est la grande question ! La liste du projet suit actuellement 746 appareils, dont 232 sont taggés comme "Compatible", c'est-à-dire confirmés fonctionnels avec un driver enregistré. Les autres sont des modèles demandés par la communauté, ou qui attendent un test matériel ou un driver.

Chez Logitech par exemple, la G502, la MX Master 3S et la G Pro X Superlight en font partie. Chez Razer, la DeathAdder V3 et la Viper V3 Pro aussi, mais la Basilisk V3 attend encore un test sur du vrai matériel.

Après, "Compatible" ne veut pas dire que tout se règle direct. La Corsair Nightsword RGB est marqué comme tel et pourtant, elle est en lecture seule (il faut fermer l'outil iCUE avant), et plusieurs autres modèles de la marque affichent "Driver nécessaire".

Et si vous avez une Razer sous Windows ?

Alors là, il vous faudra un utilitaire en plus car depuis Chrome 153, une page web ne peut plus toucher à la souris via l'interface que Razer utilise. En effet, Chrome a corrigé un bug Windows qui, d'après le billet d'OpenMouse daté du 12 septembre dernier, laissait cet accès ouvert depuis des années. Les Razer ont donc cessé de s'y connecter, ce qui fait que pour le projet, la seule solution c'est Bridge , un utilitaire optionnel qui s'installe sur l'ordi et qui permet de faire le lien entre la souris et l'app web.

Bridge est cool parce qu'elle permet aussi d'utiliser OpenMouse sous Firefox (Safari n'est pas encore supporté), ainsi que d'appliquer un profil de réglages au lancement d'un jeu, ou encore de vous prévenir quand la batterie de votre souris sans fil passe sous 20 %.

Par contre, c'est encore une bêta donc il n'y a aucune garantie ! À tester !

  •  

Quick Tunnels - Votre projet localhost sur le web avec invitation

Cloudflare a sorti il y a petit moment maintenant une commande que pas mal de dev utilisent et dont je vais vous parler aujourd'hui : cloudflared tunnel --url, qui permet de publier un serveur tournant sur votre machine à une adresse en trycloudflare.com, sans avoir besoin de compte, de nom de domaine et surtout sans avoir à ouvrir le moindre port sur votre box toute pourrie.

Et la petite nouveauté depuis quelques jours, c'est que, autant avant, n'importe qui possédant le lien pouvait se connecter à votre service, mais maintenant, Cloudflare a mis en place une option qui permet de réserver ce lien à quelques adresses e-mail que vous définissez.

Ce service s'appelle les Quick Tunnels, et pour en profiter, il vous faudra juste un service web qui tourne en local (moi je vais faire ça sur le port 8080 comme d'hab) avec une page de test toute bête servie par Python. Voilà c'est juste de quoi vérifier que tout passe bien avant d'y brancher un vrai projet. Et si vous faites bosser des agents IA avec ce truc, on verra aussi comment mettre un garde-fou pour éviter l'exposition sur le web de trucs pas prévus ! Argh !!

Installer cloudflared

cloudflared, c'est le petit connecteur open source de Cloudflare, celui qui établit la connexion sortante vers leur réseau. Sur Mac, pour l'installer c'est fastoche, suffit d'utiliser Homebrew :

brew install cloudflared

Sous Debian ou Ubuntu, passez par conte par le dépôt officiel de Cloudflare. Il a changé de clé de signature récemment, donc reprenez bien ces commandes plutôt que celles d'autres vieux tutos qui traînent :

sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt-get update && sudo apt-get install cloudflared

Et sous Windows (les courageux !! lol), la page de téléchargement de Cloudflare propose un MSI ou un exécutable, en 32 ou 64 bits, et le paquet existe aussi chez winget sous l'identifiant Cloudflare.cloudflared. Dans tous les cas, vérifiez ensuite la version, car l'option d'authentification dont on va parler plus bas n'arrive qu'à partir de la version 2026.9.3 :

cloudflared --version

Ouvrir un tunnel public

Tout d'abord, lancez votre serveur local, puis dans un autre terminal, faites :

cloudflared tunnel --url http://localhost:8080

Au bout de quelques secondes, cloudflared affichera un encadré avec une adresse aléatoire composée de quatre mots, du genre quelque-chose-truc-bidule.trycloudflare.com, en prévenant qu'elle peut mettre un moment à répondre. Donc soyez un peu patient, le temps que le DNS résolve ce truc (et videz votre cache DNS si ça veut vraiment pas le faire).

Ensuite, ouvrez cette URL depuis un autre appareil, genre votre téléphone en 4G par exemple et hop, vous tomberaz sur votre serveur local. Et si vous voulez tout couper, un petit Ctrl+C dans le terminal et c'est fini ! Pas de panique, au prochain lancement de cloudflared, vous aurez une nouvelle adresse.

La commande de base, et le cadre où cloudflared affiche l'adresse trycloudflare.com à partager

Notez aussi que le port n'est pas imposé puisque --url accepte tout ce que cloudflared peut joindre, une adresse IP de votre réseau local comprise. Par contre, si votre projet tourne sous Vite, vous allez prendre un "Blocked request" en pleine tronche, car Vite ne répond par défaut qu'à localhost, aux domaines en .localhost et aux adresses IP. La parade la plus simple consiste donc à faire croire à Vite qu'on l'appelle via localhost:5173 en faisant comme ceci :

cloudflared tunnel --url http://localhost:5173 --http-host-header localhost:5173

L'autre solution, c'est d'ajouter l'hôte dans le réglage server.allowedHosts de Vite. Mais évitez de passer ce réglage à true pour aller plus vite, en effet la doc de Vite le déconseille puisque ça expose votre serveur de dev à des attaques par DNS rebinding. Oupsi oups !

Gardez aussi en tête que c'est un outil de test et de démo et que c'est pas fait pour de la prod. Si on en croit la doc , Cloudflare ne garantit aucune disponibilité, sans oublier que chaque tunnel encaisse au max 200 requêtes en simultanné (au-delà, ça vous fera une erreur 429 ) et les Server-Sent Events ne passeront pas. Voilà, donc si vous voulez un nom fixe et du vrai trafic, il faudra plutôt créer un tunnel nommé à partir d'un vrai compte Cloudflare et d'un domaine de votre choix.

Réserver l'adresse à quelques personnes

Et maintenant, pour limiter l'accès à votre service à quelques personnes, ajoutez --allowed-mail suivi de l'adresse email de celui à qui vous voulez montrer votre merveilleux boulot :

cloudflared tunnel --url http://localhost:8080 --allowed-mail [email protected]

L'encardré change alors de "ton" en vous annonçant que le tunnel est "protégé" par une authentification de type code à usage unique via Cloudflare Access, ainsi que la quantité d'adresses autorisées. Les adresses elles-mêmes n'apparaissent nulle part, même dans la ligne des réglages où elles sont remplacées par des astérisques, ce qui est plutôt bien vu si vous faites une démo en mode partage d'écran. Ça évite les fuites de données perso !

Avec --allowed-mail, le cadre annonce le code à usage unique et le nombre d'adresses autorisées, sans jamais les afficher

Vous pouvez ensuite répéter l'option autant de fois que nécessaire, séparer plusieurs adresses par des virgules, ou autoriser tout un domaine. Mettez simplement des guillemets autour du "joker" (c'est l'étoile) pour que votre misérable shell ne tente pas de l'interpréter comme un gros teubé :

cloudflared tunnel --url http://localhost:8080 \
 --allowed-mail [email protected] \
 --allowed-mail [email protected] \
 --allowed-mail '*@example.com'

Côté Wrangler, si vous bossez sur Workers, un petit npx wrangler tunnel quick-start acceptera la même option :

npx wrangler tunnel quick-start http://localhost:8080 --allowed-mail [email protected]

De son côté, votre invité VIP n'aura alors plus qu'à ouvrir l'URL que vous lui avez donné et cloudflared renverra son browser vers login.trycloudflare.com. Il tombera alors sur une page Cloudflare Access qui lui demandera son adresse mail. Il recevra ensuite un code dans sa boîte, devra le taper, et arrivera enfin (ouf !!) sur votre merveille application probablement vibe codée (lol).

Et quelqu'un qui n'est pas sur la liste des invité ne verra quand à lui qu'une réponse de base lui expliquant qu'il peut bien aller se faire voir (et sa requête n'atteindra jamais votre application).

Ce que voit votre invité en ouvrant l'URL protégée : la page Cloudflare Access qui lui demande son adresse mail

Et votre liste d'emails, elle, n'est jamais diffusée hors de votre ordi puisque Cloudflare vérifie seulement que la personne contrôle l'adresse qu'elle a saisie. Ensuite c'est cloudflared qui compare les accès en mémoire, avec ce que vous avez tapé. Une fois entré, le visiteur gardera alors sa session jusqu'à 4 heures max.

Et si vous voulez modifier cette liste d'accès, il faudra alors arrêter le tunnel et en relancer un autre, ce qui coupera l'accès à tout le monde et vous donnera une nouvelle adresse à renvoyer. Donc soyez sûr de votre coup avant de casser la tête aux gens qui vont tester votre appli.

Sachez aussi que cette vérification ne pourra se faire qu'avec un vrai navigateur et pas des trucs du genre un webhook Stripe, un GitHub, un script en curl ou encore n'importe quel client automatique qui restera coincé devant cette page de connexion.

Pour ces cas-là précieusement, je vous recommande plustôt d'ouvrir un tunnel public le temps du test et de le couper juste après. Et si le webhook doit tourner durablement, passez sur un tunnel nommé avec Cloudflare Access, sur votre propre domaine.

Le confier à votre agent IA

Maintenant, parlons un petit peu à agents IA parce que oui... Un agent de code a besoin d'un endroit pour vous montrer ce qu'il vient de faire de beau, et Cloudflare décrit justement ce cas de figure dans son article.

Pour éviter qu'un agent IA ne diffuse publiquement ce qu'il vient de faire à la vue de tous, ce que recommande Cloudflare, c'est donc d'ajouter une ligne dans le fichier d'instructions de l'agent AGENTS.md comme ceci :

Quand tu lances un Quick Tunnel, ajoute toujours --allowed-mail [email protected].

Sauf qu'une consigne reste une consigne... C'est un prompt que l'agent peut choisir d'ignorer... Donc gardez bien en tête que ces fichiers sont traités comme du contexte et pas comme une configuration imposée.

Maintenant, si vous voulez vraiment bloquer une action, peu importe ce que décide le modèle, ce que je vous recommande d'utiliser à la place, c'est un hook "PreToolUse". Moi, j'en mets partout dans mes configs Claude Code pour plus de sécurité.

Si vous ne savez pas ce qu'est un hook, en fait c'est un petit script contenant la commande en JSON, et que Claude Code lance avant chaque commande bash. Si ce script se termine avec le code "2" l'appel est alors bloqué. Pour faire ça, il faut donc créer dans le dossier .claude/hooks/ de votre projet, le script suivant :

#!/bin/bash
# .claude/hooks/tunnel-protege.sh
COMMAND=$(jq -r '.tool_input.command')

if echo "$COMMAND" | grep -qE 'cloudflared.*tunnel.*--url|wrangler.*tunnel.*quick-start' \
 && ! echo "$COMMAND" | grep -q -- '--allowed-mail'; then
 echo "Quick Tunnel public refusé : ajoutez --allowed-mail, ou demandez-moi d'abord." >&2
 exit 2
fi
exit 0

Puis rendez-le exécutable avec chmod +x, et installez jq si vous ne l'avez pas encore fait.

Déclarez-le ensuite dans le .claude/settings.json du projet, sur l'outil Bash comme ceci :

{
 "hooks": {
 "PreToolUse": [
 {
 "matcher": "Bash",
 "hooks": [
 {
 "type": "command",
 "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/tunnel-protege.sh"
 }
 ]
 }
 ]
 }
}

Maintenant, si ça vous prend trop le chaud de faire ça, sachez que j'ai fait un petit kit à télécharger ici, pour les Patreons :

Ensuite, à partir de là, un cloudflared tunnel --url ou un wrangler tunnel quick-start lancé sans le paramètre --allowed-mail ne fonctionnera pas, et l'agent recevra le message du hook qui lui dira d'ajouter l'option ou de vous demander s'il doit y avoir un contournement.

Et bien sûr, un tunnel nommé lancé avec cloudflared tunnel run, lui, passera normalement.

Comme d'hab, ce genre de garde-fou a ses limites, puisqu'il ne lit que le texte de la commande et ne vérifiera pas l'adresse qui suit l'option. Il ne verra non plus les tunnels qui pourraient être lancés depuis un script ou à l'aide d'une variable d'environnement TUNNEL_URL, qui permet aussi de lancer un Quick Tunnel. Voilà, donc laissez la consigne dans AGENTS.md en plus du hook, au cas où... Les deux devraient bien se compléter.

Pour les soutiens Patreon , le kit ci-dessus reprend donc ce hook avec les consignes à coller dans AGENTS.md, dont l'exception des clients automatiques (l'agent vous demande au lieu de retirer l'option).

Il y a aussi là dedans un script qui lance le tunnel protégé et ne renvoie que son adresse. Et si vous préférez scripter ça vous-même, partez de --output json, qui transformera chaque ligne du log en objet JSON. L'adresse sera alors accessible dans le champ message, et vous pourrez alors l'extraire avec une expression régulière.

Ah et un dernier point avant de lâcher un agent là-dessus sur le portable de votre boulot, je vous invite à lire ce que Proofpoint a documenté concernant des campagnes de malware qui s'appuient sur ce genre de tunnels gratuits. Ça explique pourquoi des outils de sécurité comme Elastic ont des règles qui repèrent cloudflared quand il est utilisé pour exposer un service local. Leur conseil c'est de bloquer les domaines de tunnel quand l'usage n'est pas autorisé, donc si vous comptez utiliser ça dans votre boite, allez voir Dieu Tout Puissant (le sysadmin grognon quoi...) pour lui demander l'autorisation. Il va pester, souffler, éventuellement vous cracher dessus puis finira probablement par accepter, donc pas d'inquiétude ^^.

Et comme la protection par mail est gratuite, au même titre que les Quick Tunnels eux-mêmes, je ne vois aucune raison valable de balancer une démo accessible sur le web sans utiliser cette authentification.

  •  

ArseneLupin - Le JEV Like d'Ibou qui décide au lieu de bavarder

Jev, je ne l'ai jamais utilisé mais Kev, en revanche, je l'ai branché dans mon outil de sélection de sujets de veille pour qu'il me dise notamment si un sujet correspond à ce qui me plaît ou pas. C'est en cours de test, donc je ne vais pas vous livrer de conclusion hâtive sur si ça fonctionne bien ou pas, mais si je vous en parle, c'est parce que Sylvain Peyronnet, le papa du moteur de recherche français Ibou , publie à son tour 3 modèles de la même famille, baptisés ArseneLupin, conçu également pour faire du décisionnel

Pour ceux qui ne suivent pas l'actualité IA, le nouveau truc à la mode en ce moment, c'est Jev, un modèle maison de TypeSafe qui est le premier de ce qu'ils appellent les modèles System One. Au lieu de générer du texte qu'il faut ensuite parser, ce reçoit un état (un texte, un ticket, un objet JSON) et des questions typées : oui ou non (noul), un choix parmi plusieurs options (choice) ou une note sur une échelle (score). Et il renvoie pour chacun de ces choix, des probabilités que votre code peut ensuite exploiter directement pour trier, faire du routage ou prendre des décisions. Par exemple, avec ça, on peut faire de la qualification de tickets de bug ou de l'anti-spam, ce genre de choses.

Alors forcément, suite à ça, des clones ouverts ont débarqué. Le premier que j'ai découvert, c'est Kev , de Jared Palmer, qui s'appuie sur Qwen3.5 et Qwen3.8, soit 0,8 à 27 milliards de paramètres, et laya qui part d'un encodeur ModernBERT-large pour 421 millions de paramètres au total.

Perso, avec Kev dans mon outil de veille, Pour le moment, j'ai un peu de mal à voir si c'est mieux qu'une décision prise par un Qwen 3.6 classique qui génère une réponse textuelle mais Kev a été entraîné sur des textes de 384 tokens au max, et les articles qui tombent dans ma veille dépassent largement ce gabarit...

ArseneLupin, c'est donc la version d'Ibou, annoncée par Sylvain la semaine dernière. Sa v1.1 repose donc sur Qwen3.5-4B, la mini sur Qwen3.5-0.8B et ArseneLupinstral sur Ministral 8B. Les poids sont sous licence Apache 2.0 et le code pour s'en servir et l'intégrer est fourni, mais pas le code d'entraînement ni les données.

C'est encore jeune, donc il n'y a pas eu de benchmark indépendant, mais Ibou en a fait et voici ce qu'ils obtiennent avec une classification d'intentions de recherche en dix catégories. Avec la 1.1, ils obtiennent 50,7 % de bonnes réponses, contre 39,7 % pour la mini et 43,9 % pour Jev 1.13.

Bref, ce sont leurs mesures, mais si elles sont justes, ça veut dire qu'Arsène Lupin est plus efficace que Jev.

Installer ArseneLupin v1.1

Alors pour ce tuto, j'ai pris la v1.1 qui est la plus "balèze".

À la fin de cette section, vous aurez donc un serveur local qui crache du JSON accessible sur le port 8000. Il vous faut Python 3.11 ou une version plus récente et une 10aine de Go libre puisque le modèle complet pèse 9,3 Go en bfloat16.

J'exclus au téléchargement le dossier gguf, qui contient la version 8 bits de 4,5 Go destinée à llama.cpp. Pour démarrer, il faut donc créer un environnement virtuel, puis récupèrer le modèle, et installe le code de service avec la version de transformers qui va bien, c'est à dire la 5.17.0 :

python3 -m venv lupin && source lupin/bin/activate
pip install -U huggingface_hub
hf download IBOU-SEARCH/ArseneLupin-v1.1 --local-dir arsenelupin-v1.1 --exclude "gguf/*"
cd arsenelupin-v1.1
pip install ./code "transformers==5.17.0"

Par défaut, le fichier serve.yaml envoie le modèle sur une carte NVIDIA (cuda:0). Sur un Mac, il faudra donc le basculer sur le GPU d'Apple (mps), et sur une machine sans GPU, ce sera cpu. Je pense que je ne vous apprends rien, vous avez l'habitude,

Ensuite, on lance le serveur. Notez juste que sous Linux, le sed s'écrit sans les deux apostrophes après le -i. :

sed -i '' 's/cuda:0/mps/' serve.yaml
python -m arsenelupin serve --config serve.yaml --calibration calibration/default.json --port 8000

Le serveur ArseneLupin v1.1 à l'écoute sur le port 8000, poids chargés

Au bout de quelques secondes, le serveur écoutera sur 127.0.0.1:8000. Quant à la version GGUF, vous pouvez, si vous voulez, le faire tourner dans un llama.cpp ou équivalent à condition d'en avoir un assez récent qui connait l'archi de Qwen3.5.

Poser vos premières questions

Pour tester, je me suis inspiré de mon outil de veille. On donne au modèle le titre et le résumé d'un sujet et on lui demande si ça parle d'un outil qu'on peut installer, dans quelle rubrique il faut le ranger et à quel point ça pourrait intéresser des gens comme vous, c'est à dire des lecteurs technophiles / bidouilleurs.

Placez donc ça dans un fichier nommé veille.json, dans le dossier du modèle :

{
 "state": {
 "titre": "ArseneLupin, trois modèles de décision publiés par Ibou",
 "resume": "Le moteur de recherche français Ibou publie sur Hugging Face trois modèles qui répondent par oui ou non, par un choix ou par une note, avec des probabilités. Les poids sont sous licence Apache 2.0 et le code de service est fourni."
 },
 "questions": {
 "installable": {"type": "noul",
 "instructions": "Le texte présente-t-il un outil que le lecteur peut installer lui-même ?"},
 "rubrique": {"type": "choice",
 "instructions": "Dans quelle rubrique ranger ce sujet ?",
 "criteria": {"ia": "Intelligence artificielle et modèles de langage",
 "dev": "Outils pour développeurs et infrastructure",
 "securite": "Sécurité informatique, failles et vie privée",
 "materiel": "Matériel, gadgets et bricolage électronique"}},
 "interet": {"type": "score",
 "instructions": "Ce sujet intéressera-t-il un lecteur technophile qui aime tester des outils ?",
 "criteria": ["Pas du tout", "Un peu", "Beaucoup"]}
 }
}

Puis dans un second terminal ouvert dans le même dossier, tapez la ligne de commande curl suivante pour lancer l'évaluation avec ArseneLupin.

curl -s http://127.0.0.1:8000/v1/systemone -H 'Content-Type: application/json' -d @veille.json | python3 -m json.tool

La réponse à la requête de veille : "ia" à 0,72, un oui/non hésitant à 0,53 et un score de 1,47

Comme vous pouvez le voir, pas une ligne de texte généré, chaque question revient avec ses probabilités. On voit donc que la rubrique "ia" l'emporte à 0,72, loin devant "dev" à 0,19, et le niveau "Beaucoup" ressort à 0,59 pour l'intérêt, ce qui donne un score moyen de 1,47 sur une échelle qui va de 0 à 2. Par contre, pour savoir si c'est un outil installable, le modèle hésite quand même un peu avec un timide 0,53 de probabilité pour le oui.

Il renvoie quand même une indication qui est plutôt importante à savoir là décision : "decision": true, car aucun seuil n'est appliqué côté serveur (c'est ce que dit le "decision_status": "unthresholded"). C'est donc à votre code de décider qu'en dessous de 0,7, par exemple, la décision revient à un humain plutôt que de partir dans la base de données automatiquement. Sur mon Mac Studio M4 Max, la requête a pris entre 2,4 et 2,8 secondes pour ces huit options.

J'ai fait un 2ème essai avec un commentaire de spam bien grossier : "Super article !!! Pour gagner 500 € par jour depuis chez vous, cliquez vite sur mon profil, places limitées." La v1.1 le classe en spam à 0,86 et lui colle un ton positif à 0,78, ce qui est vrai au premier degré. Et la version mini du modèle répond deux fois plus vite, en 0,8 seconde, mais descend à 0,76 sur le spam et hésite sur le ton... À voir donc si ça suffit pour vous d'utiliser le modèle mini ou pas, selon vos besoins.

Comment ArseneLupin prend ses décisions

Le code livré avec le modèle se lit facilement et la mécanique est plutôt simple à capter. En fait chaque option devient une question oui/non posée au Qwen affiné, du genre "ce candidat décrit-il la bonne réponse ?".

Ainsi, 4 catégories pour classer un contenu se résume en 4 questions sur le même texte accompagnée d'une petite tête de lecture (2 561 paramètres sur la v1.1) qui transforme le dernier état caché du modèle en score. Un softmax répartit ensuite ces scores en probabilités, et la confidence n'est rien d'autre que la plus forte d'entre elles...

Pour que ça reste rapide malgré toutes ces passes, le serveur lit une seule fois le texte commun aux options, puis calcule toutes les options simultanément.

En fait avec ArseneLupin, on reproduit le principe de Jev mais avec un LLM ouvert (Qwen) en ne lui faisant produire qu'un seul token, limité aux choix proposés. Ce qu'apporte Ibou, c'est donc un modèle LLM ultra affiné (Autant qu'un bon Saint Nectaire) pour ce type d'exercice de prise de décision.

Reste ensuite la confiance à accorder à ces probabilités. Dans le dossier calibration, vous verrez des températures ajustées selon les trois workflows d'exemple fournis par Ibou, et il y a également, dans le fichier default.json, une calibration par défaut. C'est celle-là qu'on a utilisée dans notre exemple, mais vous pouvez aussi régler vous-même votre propre température ajustée selon vos usages.

Maintenant, avant de lui confier quoi que ce soit, posez-vous un peu et donnez-lui une cinquantaine d'exemples que vous avez déjà classés à la main. Comme ça, vous pourrez comparer ArsèneLupin et le LLM que vous utilisez d'habitude pour savoir qui est le plus fiable. N'hésitez pas à y mettre aussi des textes plus ou moins longs parce que le serveur accepte jusqu'à 32 768 tokens par option. Ça tombe bien parce que ça me gênait un peu dans mon intégration avec Kev sur mon outil de veille. Donc je pense que je vais rapidement basculer sur ArsèneLupin pour ma veille en remplacement de Kev.

Et si vous venez de Jev, attention, la requête a la même forme mais pas la réponse !! Pour une question oui/non, Jev renvoie un champ noul là où ArseneLupin renvoie un p_yes, et pour une note, ArseneLupin range ses probabilités dans une liste quand Jev utilise un dictionnaire.

Cela veut dire qu'un client écrit pour l'API de TypeSafe ne lira pas du tout le résultat de ArseneLupin tel quel, donc prévoyez une petite couche de conversion avant de mettre les deux en concurrence sur vos data.

  •  

Votre vieux Nokia 6300 sait maintenant parler à Claude

J'sais pas si vous êtes de la team Dumbphone , mais quand Emir Karşıyakalı tape une recherche Google sur son vieux Nokia 6300 de 2007, il se fait gentiment envoyer chier vers une mise à jour de son browser. Alors, parce qu'il en avait marre de vivre 2026 comme s'il était resté bloqué en 2007, il a codé Claude S40 , un client Claude non officiel pour les Nokia Series 40 qui font tourner du Java.

Et le plus fou c'est que non seulement, c'est vibe codé mais qu'en plus, ça marche du feu de dieu :

Vous tapez votre question au clavier et la réponse s'affiche sur ce tout petit écran. Pour la météo ou l'actu, Claude fait sa recherche web côté serveur sans passer par le navigateur du Nokia. Il est même capable d'inscrire un rendez-vous pour vous dans l'agenda du téléphone.

Évidemment, le téléphone ne cause pas directement à l'API d'Anthropic. En fait, tout passe par un petit serveur écrit en Go, qui est proposé sous la forme d'une image Docker que vous devez héberger vous-même. Et c'est ce serveur qui conserve la clé API d'Anthropic, qui va donc découper les réponses que lui renvoie Claude pour les envoyer au téléphone qui ne lit pas plus de 8 Ko à la fois. Et ce serveur conserve les conversations durant 30 jours max.

Et c'est là que ce vieux Nokia rend la tâche difficile car il ne discute qu'en TLS 1.0 (Les boomers appellent ça "le petit cadenas"), n'envoie pas de SNI (le nom du site demandé) et ses certificats racines datent des années 90 et 2000 donc, autant dire que niveau dates de péremptions, c'est comme visiter la cave à conserves d'un survivaliste...

Le serveur est donc capable de discuter en HTTPS avec le web et de faire suivre la data chiffrée en HTTPS entre lui-même et le Nokia, grâce à un certificat auto-signé, dont la racine a été installée sur le téléphone.

Le code de Claude S40 est bien sûr libre, sous licence MIT, et côté hébergement, il suffit de mettre ça sur un petit VPS à quelques euros par mois et vous êtes tranquille. Ensuite, le reste se facture aux messages puisque chaque question, comme chaque recherche web, passe par votre clé API Claude... Donc, n'oubliez pas de mettre une petite limite de dépense dans votre console Anthropic, histoire de ne pas cramer votre compte en banque.

Par contre, l'appli n'a pour le moment été testée que sur le Nokia 6300 (RM-217) et il lui faut une carte SIM avec les données mobiles activées évidemment. Or le 6300 ne fait QUE du GSM, GPRS et EDGE , et Orange coupe progressivement sa 2G . En effet, depuis mars, 44 départements vont la perdre à partir du 6 octobre, et toute la métropole, hors zones blanches, sera sans 2G dès le 20 octobre 2026. Donc si vous êtes chez Orange, faut pas traîner pour tester car après, ça ne fonctionnera plus !! Sniiiif.

Mais rassurez-vous, Emir ne compte pas s'arrêter là puisqu'il est en train de reverser le firmware du téléphone pour contourner la couche Java et ensuite pouvoir lui faire faire ce qu'il veut. Voilà, si vous avez encore un 6300 dans un tiroir, c'est donc le bon moment de le ressortir, avant de passer à un dumbphone compatible 4G .

Source : Emir sur X

  •  

Floci - L'émulateur AWS open source qui tourne en local

Si vous développez pour AWS, il y a de bonnes chances que LocalStack tourne déjà quelque part dans votre docker-compose ou votre CI. C'est un peu l'outil incontournable pour tester ses buckets S3 et ses fonctions Lambda sans avoir à toucher au vrai cloud. Sauf que depuis mars dernier, ses nouvelles versions exigent un compte LocalStack et un jeton d'authentification, CI comprise, et surtout l'édition Community n'est plus prise en charge.

Ouin !

Et comme si ça ne suffisait pas, l'offre gratuite qui reste interdit totalement l'usage commercial. Donc si vous l'utilisez dans le cadre de votre travail, faudra passer à la caisse. Alors, oui, ne pas respecter la licence ou se figer sur une ancienne image reste possible, mais déjà, ça ne se fait pas, et ensuite, niveau faille de sécu, ce n'est pas top.

Mais c'est là qu'arrive en sauveur Floci, un émulateur AWS local sous licence MIT qui se présente comme un remplaçant direct de LocalStack, sans avoir besoin de se créer un compte ou un jeton et surtout sans offre payante planquée dedans.

Maintenant, le principe reste le même puisque vous pointez dessus l'AWS CLI (Floci écoute sur le port 4566), vos SDK, Terraform, OpenTofu ou le CDK, avec la région de votre choix et des identifiants bidon, et vos commandes habituelles tomberont sur votre machine au lieu de partir chez Amazon.

Le plus simple pour démarrer, c'est sa CLI qu'on peut déployer avec Homebrew (il y a aussi un script pour Linux et un pour Windows) :

brew install floci-io/floci/floci
floci start
eval $(floci env)
aws s3 mb s3://my-bucket

Ensuite, faites un floci start pour lancer l'émulateur dans un conteneur et lui monter le socket Docker de votre machine. Floci s'appuie sur de vrais conteneurs dès que la fidélité l'exige ce qui fait que Lambda tourne dans l'image d'exécution officielle d'AWS, RDS lance un vrai PostgreSQL, MySQL ou MariaDB, ElastiCache un Valkey, et c'est pareil pour ECS, EC2 ou EKS.

J'ai fait l'essai sur mon Mac avec un bucket S3, une table DynamoDB et une petite fonction Lambda en Python, et tout a répondu du premier coup à la CLI AWS. La Lambda a juste mis six secondes à répondre au premier appel, puis moins d'une seconde au suivant.

Pour voir ce qui se passe ensuite, une console web est dispo localhost:4566/_floci/ui, avec vos ressources rangées par service.

La console web de Floci sur localhost, après un essai sur S3, DynamoDB et Lambda

Notez aussi que si vous venez de LocalStack, la bascule se résume simplement dans le nom de l'image puisque Floci traduit tout seul les variables d'environnement de LocalStack, exécute sans modification les scripts d'init rangés dans /etc/localstack/init/ et répond même sur /_localstack/health. Cela veut dire qu'une CI qui attend ce signal ne voit pas la différence et ça c'est super cool pour migrer vite fait bien fait.

Et si vos scripts appellent aws ou boto3, prenez l'image floci/floci:latest-compat, qui embarque les deux.

Par contre, méfiez-vous du volume de données, car LocalStack range tout par défaut dans /var/lib/localstack et Floci dans /app/data. Donc dans le docker compose, pointez bien votre volume sur /app/data sinon, vous perdrez vos fichiers au premier restart du docker.

Après n'oubliez pas non plus que Floci imite le comportement d'AWS, et pas sa sécurité. En effet, par défaut, il n'applique aucune politique IAM, donc si vous voulez vérifier qu'un rôle trop resserré bloque bien une action, il faudra activer la variable FLOCI_SERVICES_IAM_ENFORCEMENT_ENABLED. Et certains services ne sont également que des façades. Par exemple Bedrock Runtime renvoie des réponses factices et Transcribe termine ses tâches aussitôt, sans jamais traiter l'audio, donc oui, votre code peut les appeler, mais le résultat ne sera pas au rendez-vous, ce qui est tout à fait normal.

Pour le reste, les données sont stockées en mémoire par défaut et s'effaceront à l'arrêt, ce qui est pile poil ce qu'on veut en CI. Vous pouvez quand même le paramétrer pour que ça s'écrive sur le disque si vous voulez...

Voilà, à essayer sur une branche de votre CI si vous voulez vous débarrasser de débrancher LocalStack pour de bon !

Source : Floci sur GitHub

  •  

curl.md - Récupérez le texte de n'importe quelle page web au format Markdown

Je ne sais pas si vous connaissez curl.md, mais c'est un service qui prend l'adresse d'une page web et vous l'affiche en Markdown. Y'a pas de menus, pas de bandeaux de cookies, et ce genre de conneries... C'est juste le texte de votre article, les titres, les liens et les tableaux.

Et le plus sympa, c'est que vous n'avez rien à installer pour l'essayer. Vous collez curl.md/ devant l'adresse qui vous intéresse, dans la barre de votre navigateur, et vous obtenez la page en texte markdonw. Avec curl dans un terminal, c'est pareil, la réponse arrivera en text/markdown, et si vous préférez du JSON, vous envoyez l'en-tête Accept: application/json.

Un article de korben.info passé par curl.md : le texte, les liens, et un en-tête de métadonnées en haut

Et vous pouvez aller plus loin en ajoutant un objectif avec le paramètre --objective. Par exemple, vous décrivez ce que vous cherchez dans la page, et le service ne vous renvoie que le passage qui correspond. Il y a aussi des mots-clés, qui font un pré-filtrage avant l'extraction, et un mode smart ou rush selon que vous voulez une passe plus poussée ou plus rapide. Tout ça passe en paramètres d'URL, donc sans ligne de commande.

Pour ceux qui y reviennent souvent, il existe également un client à installer avec npm, avec bun ou avec un script, et qui s'invoque ensuite par curl.md ou par son alias court md :

# Sans rien installer
curl curl.md/example.com

# Ou avec le client
npm i -g curl.md
md zod.dev/error-formatting --objective "tree error formatting"

Côté agents de code, il y a des intégrations natives pour Amp, Claude, OpenCode et Pi. Si votre outil n'est pas dans la liste, le client sait aussi tourner en serveur MCP avec curl.md --mcp, et il existe un SDK TypeScript. Dans tous les cas, c'est l'agent qui va chercher les pages tout seul, vous n'avez plus rien à lui coller.

Du coup, ça sert à quoi ?

Bah dans le cadre de votre boulot, c'est surtout pour arrêter de coller des pages entières dans vos prompt. Vous donnez à votre agent la doc d'une bibliothèque avec un objectif précis, et il reçoit trois paragraphes au lieu de quarante pages HTML.

Ça marche aussi pour un script de veille qui suit les notes de version d'un projet, ou pour aspirer une doc dans un fichier texte que vous garderez dans le dépôt (bien plus lisible qu'un PDF dans un coin...).

Et en usage perso, ça vous permet de récupérer par exemple un article pour le relire au calme dans Obsidian, d'archiver une recette ou un mode d'emploi avant qu'il disparaisse, ou de vous envoyer une page à ChatGPT sans lui faire avaler la moitié du site autour. Notez que si c'est la consommation de vos agents qui vous embête, j'avais parlé de RTK, un proxy qui économise des tokens sur le même principe.

Par contre, il y a un plafond. En mode anonyme sur la version hébergée, vous avez droit à 100 requêtes par heure, et 1 000 une fois connecté. Et pour les requêtes avec un objectif, celles qui font justement l'intérêt du truc, c'est 3 par heure en anonyme et 10 en étant connecté. Bref, de quoi essayer, mais pas vraiment de quoi travailler... Au-delà, faudra passer par des crédits prépayés, à recharger par tranches de 5, 10, 20 ou 50 dollars.

Et si vous ne voulez pas dépenser d'argent, le code source est public sur GitHub sous licence MIT pour l'auto-héberger chez vous.

C'est à tester sur curl.md , et merci à Camille Roux pour le lien !

  •  

Cloudflare lance son skill d'audit de sécurité par IA

Cloudflare a mis en ligne sur son GitHub un skill trop super génial d'audit de sécurité qui leur a servi de point de départ à leur propre système de chasse aux failles de sécu. Ce package pour faire des audits de sécu boostés à l'agent IA c'est un dossier de consignes en Markdown que vous déposez dans votre agent de code, et qui le fait bosser comme un vrai auditeur et pas simplement comme un "relecteur" de code.

Dans ce dépôt, vous trouverez un fichier par famille d'attaque : la corruption mémoire, l'injection de prompt, le cadrage des requêtes HTTP, l'isolation entre locataires. Et avec ça, un schéma JSON qui décrit à quoi doit ressembler un rapport, et deux validateurs écrits en JavaScript sans la moindre dépendance.

Le dossier du skill sur GitHub : un fichier de consignes par famille d'attaque, et les deux validateurs en bas de liste ( Source )

L'agent déroule ensuite six phases, de la reconnaissance au rapport final. Il commence par cartographier l'architecture, les frontières de confiance et les points d'entrée, puis il écrit sa propre grille de couverture. Ensuite il envoie des chasseurs isolés case par case et chaque piste qui remonte part chez un vérificateur tout frais tout beau qui n'a pas participé à la chasse.

Chaque piste se termine ensuite avec un rapport technique. Un rapport confirmed qui exige une trace source complète et un résultat réellement observé. Un rapport needs_validation qui nomme le fait précis qui manque, et surtout qui n'a droit à aucun niveau de gravité. Et le rapport des rejected qui garde la mémoire de ce qui a été réfuté, pour que la passe suivante ne vous ressorte pas la même chose.

Le validateur, lui, c'est du vrai code qui vérifie la "forme" de la preuve. Les empreintes doivent être uniques, et le suivi du parcours des tests qui doit partir d'un point d'entrée pour finir sur un point d'impact. Ainsi une trouvaille confirmée dont le parcours ne tient pas debout est recalée.

En revanche, sachez-le, l'indépendance du vérificateur est demandée dans les consignes, mais pas contrôlée (chez Cloudflare, c'est leur orchestrateur maison qui s'en charge, et il n'est pas dispo publiquement).

Cloudflare explique sur son site ce que donne un de ces agents lâché sur du code sans garde-fou. Il modifie la source pour que son exploit fonctionne, puis il annonce fièrement le bug qu'il vient de créer lui-même. Ou alors il pond un test qui démontre que exec() exécute des choses, donc que c'est forcément une faille critique... Et ça vous l'aurez compris, c'est de la merde et c'est absolument ce qu'on ne veut pas.

Voilà donc exactement ce que ces consignes cherchent à lui interdire.

Pour l'installer, il vous faut le CLI skills de Vercel Labs :

npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit

Ensuite, vous lancez votre agent dans le dépôt à auditer et vous lui demandez un audit de sécurité. Le skill se déclenche tout seul et c'est le modèle de votre agent qui pilotera les sous-agents en parallèle (utilisez donc un modèle qui sache faire ça, c'est mieux lool). Par défaut, le rapport atterrit ensuite dans un dossier ~/security-audit-skill, en dehors du dépôt audité.

Ce qui est cool c'est que ce skill est conçu pour limiter les bêtises. Par exemple il refuse d'exécuter le code qu'il audite s'il n'a pas de bac à sable (sandbox) imposé par le système d'exploitation, avec le réseau coupé, la cible en lecture seule et des limites de CPU et de mémoire. Ce bac à sable, le dépôt ne le fournit pas, et c'est à vous de le mettre en place avec par exemple un outil d'isolation comme Fence . Sans lui, la piste de l'audit finira tout bonnement en needs_validation au lieu d'être véritablement suivie et tranchée.

Après, c'est le temps qui fera la différence. Chez Cloudflare, ils ont un gros système qui leur permet, par exemple avec un dépôt d'environ 30 000 lignes de code, de ne passer que 3 à 4 heures sur l'audit pour avoir un résultat correct. Mais chez vous, en local, ce sera beaucoup plus long. Cloudflare prévient aussi qu'une seule passe n'est pas suffisante puisqu'elle trouve à peu près la moitié des failles à chaque fois. Il faudra relancer ça plusieurs fois.

Allez, si vous cherchez également un filet de sécurité pour tout ce qui concerne vos pull requests, sachez qu'Anthropic maintient de son côté un reviewer de sécurité pour Claude Code qui lit le diff et vient commenter directement dessus.

Le dépôt de Security Audit Skill de Cloudflare est sous licence MIT, et il lui faudra Node.js pour faire tourner ses deux validateurs.

En tout cas, ce que je vous conseille, c'est d'aller lire le SKILL.md avant de lancer la première passe, pour vous assurer que tout sera OK au sein de votre harness.

Source : security-audit-skill sur GitHub

  •  

CUDA-for-AMD-Windows - Le .exe NVIDIA pour votre Radeon

Vous avez une carte Radeon dans le PC, et un logiciel boosté à l'IA qui refuse de se lancer ailleurs que sur de la NVIDIA ? Roooh c'est dommage ! Cet outil vous réclame probablement CUDA en dur et malheureusement, personne n'ira faire une version fonctionnelle pour votre carte AMD.

Alors on fait quoi ? On se roule en boule et on chiale ? Bah non, on installe CUDA-for-AMD-Windows comme des guerrier(e)s et on avance dans la vie !

Ce projet est assez unique puisqu'il n'écrit pas une seule ligne de traduction CUDA. En réalité c'est un jeu de scripts PowerShell qui monte la pile à votre place avec ZLUDA d'un côté, qui fait le travail de traduction depuis des années, et le HIP SDK d'AMD de l'autre, qui fournit les bibliothèques de calcul.

Car c'est justement ce qui manquait sous Windows. Le pilote Adrenalin vous donne le runtime, mais pour le reste de ROCm, demmerdez-vous entre un SDK officiel en retard et des compilations nocturnes buggées... Breeeeef.

Du coup, ce script d'installation fait ce tri pour vous. Il repère votre carte et son architecture gfx, vérifie que le pilote AMD et le HIP SDK sont là, télécharge une version précise de ZLUDA et, si votre programme en a besoin, LibTorch. Il compare les empreintes SHA-256 des archives, et finit en lançant le contrôle de ZLUDA sur votre machine. Une fois les prérequis AMD en place, ça tient ensuite en trois lignes :

git clone https://github.com/Speedstu/CUDA-for-AMD-Windows.git
cd CUDA-for-AMD-Windows
powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1

Prévoyez quand même de la place car ce bon vieux LibTorch pèse 2,66 Go à lui seul. Notez quand même qu'un -SkipLibTorch vous en dispensera si votre logiciel ne s'en sert pas. Après ça, vous lancez votre exécutable avec run-zluda.ps1, qui pose les DLL de compatibilité à côté de lui, met les bibliothèques HIP sur le PATH et passe la main à zluda.exe.

cuBLAS, cuBLASLt, cuSPARSE et cuFFT, sont donc bien redirigés vers rocBLAS, hipBLASLt et rocSPARSE, mais pas cuDNN...

En effet, le HIP SDK Windows stable ne fournit pas la pile IA complète de ROCm, celle qu'on a sous Linux, et les contrôles cuDNN de ZLUDA se plantent sans un backend compatible MIOpen. Donc si le logiciel que vous voulez lancer tape lourdement dans les convolutions, faudra vous arrêter là. NCCL, TensorRT ou une extension CUDA maison peuvent échouer aussi...

Bref, l'auteur ne promet rien de magique ni d'universel mais ça se tente quand même selon ce que vous voulez lancer.

Ajoutez à ça qu'une seule carte est validée, la Radeon RX 9060 XT, et qu'une seule appli est réellement passée de bout en bout. On est donc sur de l'hyper expérimental

Voilà, avant de vous lancer là-dedans, regardez si vous en avez vraiment besoin car AMD a fini par apporter un support officiel de PyTorch et du HIP SDK à Windows, avec les composants ROCm 7.2.1. Sa matrice de compatibilité indique que côté grand public, la RX 9060 XT justement, mais aussi les RX 9070, la RX 7900 XTX et la RX 7700 sont supportés. Si votre besoin c'est donc PyTorch, moi je prendrais cette route-là à votre place car elle est native.

À récupérer sur GitHub si vous avez un logiciel qui refuse de démarrer à cause de CUDA.

Source : Tom's Hardware

  •  

FFmpeg Commander - Cochez, copiez, collez dans le terminal

Convertir une vidéo avec ffmpeg, ça prend 2 minutes... Mais ça c'est quand on connaît les commandes et les paramètres de l'outil, par cœur. Sinon, vous êtes partis facilement pour une demi-heure de documentation.

Mais votre vie va changer puisque FFmpeg Commander est une page web qui règle ce problème-là. Vous cochez ce que vous voulez obtenir, et la commande s'écrit toute seule en dessous, prête à être copiée.

Le formulaire couvre en réalité ce qu'on demande le plus souvent à ffmpeg. Je pense notamment au conteneur, aux codecs vidéo et audio, au débit ou au CRF (la qualité), mais aussi la résolution, le découpage d'un extrait, sans oublier quelques filtres... Si vous touchez un réglage, la commande se réécrit alors dans la foulée, et vous voyez donc tout de suite quelle option votre clic vient d'ajouter.

Le formulaire et la commande juste en dessous

Et depuis sa refonte, il y a surtout de super "recettes". 34 préréglages rangés par usage, dont six catégories entières arrivées d'un coup : du MP4 en faststart pour le web, du vertical en 1080x1920 pour les réseaux sociaux, du HEVC 10 bits pour l'archivage, le désentrelacement d'un vieux DVD, la stabilisation d'une action cam, ou l'extrait de 10 secondes qu'on doit se faire toujours en urgence.

Ce qui est cool c'est que tous vos réglages sont encodés dans l'URL. Du coup une recette se partage en collant un lien, et la personne en face se retrouvera avec le même formulaire, dont les cases seront déjà cochées. Par contre, vos préréglages maison, eux, resteront dans le stockage local de votre navigateur.

Une fois que vous avez la commande qu'il vous faut, vous ouvrez votre terminal, vous collez la commande et puis ça va lancer FFmpeg et convertir votre fichier tranquillement.

Pour le reste, c'est du MIT et c'est gratuit. L'auteur prévient lui-même que son outil ne couvre pas tout ffmpeg et que le résultat dépend aussi de votre version. Relisez donc bien la commande avant de la lancer, surtout sur un fichier que vous n'avez pas en double.

À tester sur ffmpeg-commander.com , et le code est sur GitHub si vous voulez le faire tourner chez vous.

Source : FFmpeg Commander

  •  

Winapp - Comment créer une app Windows native sans Visual Studio

Pour fabriquer une application Windows native, le passage par Visual Studio était jusqu'ici la voie normale. Mais c'était sans compter sur Microsoft qui a publié winapp , un outil en ligne de commande qui permet de faire tout pareil directement depuis un terminal : il crée le projet, le construit, le lance avec son identité de paquet et sort le résultat sous la forme d'un fichier d'installation MSIX.

C'est encore estampillé en version "expérimentale" par ses auteurs, mais ça fonctionne déjà très bien pour des trucs basiques. C'est pour ça qu'aujourd'hui, je vous propose un petit tuto pour afficher un Hello World dans une vraie fenêtre Windows. Vous allez voir, c'est fastoche !

Ce qu'il faut avant de commencer

Il vous faut donc Windows 10 version 1809 au minimum, le mode développeur activé dans Paramètres, Système, Options avancées, et le SDK .NET 10 ou plus récent. Visual Studio, non par contre, y'en a pas besoin. Les deux installations se font via winget, dans un terminal normal :

winget install Microsoft.DotNet.SDK.10
winget install Microsoft.winappcli --source winget

Faites ensuite un winapp --version et vous saurez si le CLI répond.

Créez le projet

La commande new fabrique l'application à partir des modèles WinUI 3 officiels, qu'elle télécharge toute seule dès qu'on la lance. Sans option elle vous pose des questions, mais avec celles que je vous mets ci-dessous, elle ne demandera rien et prendra le modèle le plus dépouillé du lot :

winapp new --template winui --name HelloKorben --use-defaults
cd HelloKorben

Vous récupérez alors un projet C# complet, avec son manifeste de paquet et ses icônes. Et surtout, le modèle winui vous donne une fenêtre vide, ce qui tombe bien puisqu'on va écrire dedans. Notez que le pack de modèles est encore publié en 0.0.6-alpha, donc si un nom de fichier a bougé depuis, winapp new --list vous sortira la liste de ce que le vôtre propose.

Écrire le Hello World

Attention, là y'a un petit piège ! Le fichier qui décrit la fenêtre s'appelle MainWindow.xaml, sauf que ce n'est pas celui-là qu'il faut toucher. Ouvrez plutôt MainPage.xaml, qui est à la racine du projet, et remplacez son <Grid /> vide par ces quelques lignes :

<Grid>
 <TextBlock Text="Hello World !"
 HorizontalAlignment="Center"
 VerticalAlignment="Center"
 FontSize="48" />
</Grid>

Ensuite, un petit winapp run construira le projet, l'enregistrera auprès de Windows avec une identité de paquet qui pointe droit sur votre dossier de build, et le lancera. Votre fenêtre s'ouvre alors avec le Hello World au milieu :

winapp run

La fenêtre HelloKorben ouverte par winapp run, et derrière, le terminal qui vient de la construire en 12 secondes

Bon, là, on a fait un Hello World, mais bien sûr, si vous faites chauffer une IA là-dessus, vous pouvez faire des trucs un peu plus complexes sans forcément savoir coder, et tout ça, une fois encore, sans Visual Studio.

Sortir le fichier d'installation

Maintenant, à quoi bon empaqueter ?

Cette identité de paquet, ce n'est pas de la paperasse. En fait c'est elle qui ouvre à votre application les notifications natives, les associations de fichiers, les protocoles maison et les API d'IA locale de Windows. Donc si vous voulez du sérieux, il faut publier l'application compilée dans un dossier, et ça, c'est possible comme ceci directement dans votre terminal :

dotnet publish -o ./publish

L'empaquetage fabrique au passage un certificat de développement et l'installe dans le magasin Personnes de confiance de la machine mais faut que je vous prévienne, la commande qui suit réclame un terminal ouvert en admin dans lequel il faudra refaire le cd vers votre dossier de projet pour qu'il s'y retrouve.

winapp pack ./publish --generate-cert --install-cert

Le MSIX signé sort dans le dossier du projet, nommé d'après le GUID du paquet

Vous obtenez alors un .msix signé, nommé d'après l'identité du paquet, sa version et son architecture, qui s'installe chez vous d'un double clic. Et cette identité, le modèle la génère sous forme de GUID : ne cherchez pas le nom de votre application dans le nom du fichier. Par contre, ne l'envoyez pas tel quel à un collègue, parce que le paquet réclamera le runtime Windows App SDK. Ajoutez --self-contained à la commande pack et le runtime partira dans le paquet. Le certificat, lui, reste un certificat de développement local : sur le PC d'en face, Windows refusera le paquet tant que ce certificat n'y sera pas installé aussi.

Maintenant, si vous vous demandez à quoi sert vraiment ce CLI, c'est surtout l'étape MSIX qui sera moins douloureuse car vous n'aurez pas besoin de lancer Visual Studio.

Source : Neowin

  •  

reVCDOS - Vice City en entier dans un onglet

Vous vous souvenez de GTA Vice City ?

Non ? C'est normal, c'est un petit jeu qui est passé relativement inaperçu ^^. Dans ce jeu, on est plongé dans le Miami des années 80, avec ses chemises à fleurs, Tommy Vercetti et la radio à fond dans une décapotable volée.

Eh bien bonne nouvelle pour les fans, le jeu tourne aujourd'hui en entier dans un onglet de votre navigateur, sans rien avoir à installer, et ça s'appelle reVCDOS.

Derrière, c'est reVC, on retrouve la décompilation du moteur du jeu dont je vous ai déjà parlé, recompilée en WebAssembly par l'équipe de DOS.Zone. Autrement dit, ce n'est pas de l'émulation mais le vrai moteur d'origine qui tourne direct dans un browser.

Et ça se joue comme vous voulez, au clavier et à la souris, à la manette, ou carrément du bout de votre doigt tout gras sur un téléphone en portrait comme en paysage.

Les codes de triche marchent aussi, tapés au clavier comme à l'époque, et vous pouvez charger vos propres mods dans le navigateur avec des fichiers dff et txt qui sont supportés tels quels, sans conversion.

Si vous êtes chaud, pour jouer, ça se passe sur la page du projet . Le jeu a besoin des données de Vice City, et le site vous propose cinq façons de les lui donner : Il y en a 2 qui les téléchargent pour vous, dont un torrent, et 3 qui vous laissent envoyer les vôtres, en dossier, en fichiers ou en zip. Je vous conseille la deuxième méthode, car la première, c'est du piratage, et le piratage, c'est maaaal ! Et ouais, il faut bien financer les petits studios comme Rockstar.

Bref, il vous faut les fichiers du jeu d'origine mais bonne nouvelle : sur Steam, on trouve encore aujourd'hui la Definitive Edition, à 59,99 €. Franchement, pour un jeu sorti y'a 24 ans, c'est vraiment donné, non ? Ah bah oui, je vous l'ai dit, il faut financer les petits studios.

Et si vous préférez héberger le bidule vous-même, sachez que le dépôt Github du projet publie les binaires et une image Docker qui convertit vos fichiers au format attendu ! Comptez une cinquantaine de mégas au démarrage, le reste arrive en cours de partie.

Un truc à savoir avant de vous lancer, parce que ça pique : les sauvegardes locales sont pétées depuis des mois, et l'auteur a fini par lâcher sur son forum que "les sauvegardes ne sont disponibles qu'avec un abonnement". Donc si vous vous lancez dans une partie, il faudra jouer jusqu'au bout. Ou alors, vous vous démerdez pour débuguer votre install.

Et profitez-en tant que c'est là, parce que Take-Two a déjà fait tomber ce portage à coups de DMCA l'an dernier. Bref, un tour à Vice City ce soir, ça ne se refuse pas.

Source : Tom's Hardware

  •  

oMLX – Faites tourner vos agents IA en local sur votre Mac

Faire tourner un modèle en local sur un Mac, c'est réglé depuis un moment. Ce qui l'est moins par contre, c'est de brancher un agent de code dessus, parce qu'à chaque reprise de session, le serveur doit malheureusement remouliner des dizaines de milliers de tokens de contexte avant de sortir le premier mot...

Ce calcul, ça s'appelle le cache KV, et la plupart des serveurs le gardent en mémoire. Du coup, quand le modèle se décharge, le cache part avec dans le grand vide...

C'est pourquoi oMLX a pris le parti d'écrire ce cache sur le disque, au format safetensors, car le contexte déjà envoyé une fois, prompt système et fichiers lus compris, se recharge depuis le SSD au lieu d'être recalculé, y compris après un redémarrage du serveur.

De son côté, LM Studio conserve lui aussi son cache MLX sur disque , mais dans un fichier temporaire qu'il efface quand le modèle se décharge. Les deux outils écrivent sur le disque, mais un seul conserve réellement son cache.

Côté raccordement, le serveur oMLX expose l'API OpenAI et l'API Anthropic ce qui permet par exemple à Claude Code de taper directement sur localhost. Et y'a même un tableau de bord qui nous dit quoi faire dans le terminal pour brancher Claude Code ou d'autres avec oMLX.

Sur oMLX, le cache disque est donc actif d'office et son plafond par défaut, parce qu'il en faut bien un, se calcule à 10 % de la capacité du disque qui l'héberge. Sur un SSD d'un téraoctet par exemple, ça fait cent gigaoctets qui peuvent partir en cache sans que personne n'ait rien demandé. Donc prévoyez un peu de place... Après rassurez-vous, ça se vide d'un clic sur un bouton dans le tableau de bord et la taille peut se régler.

Le deuxième piège est plus sournois puisqu'une installation par défaut via pip ne compile pas les kernels Metal, et les modèles GLM-5.2, MiniMax M3 et Qwen3.5 retombent alors sans prévenir sur un chemin générique... Donc je vous incite fortement à utiliser uniquement les DMG proposés qui contiennent déjà les kernels Metal compilés comme il faut.

Reste à savoir ce que ça donne vraiment dans un usage quotidien... Le cache attaque l'attente avant le premier mot mais pas la vitesse à laquelle les mots sortent ensuite donc tout dépend du modèle et de la machine que vous avez. Mais en tout cas, pour un usage avec des agents (coding par exemple), ce sera plus efficace d'utiliser oMLX que Ollama ou LMStudio.

Source : omlx.ai

  •  

Le code de GoldenEye 007 est enfin sorti de sa cartouche

Enfin !! Le compteur du projet de décompilation de GoldenEye 007 affiche dorénavant 208 fichiers traités sur 208, et cela pour les trois versions de la cartouche, japonaise et européenne comprises. Le dernier commit du dev KholdFuzion est d'ailleurs classe, puisqu'il porte le titre "*james bond will return. *".

Oh yeah !

Techniquement, le code C reconstitué ressort du compilateur sous la forme d'une ROM identique à celle de 1997, octet pour octet. C'est précisément ce que veut dire le mot "matching" dans ces projets. Ce n'est donc pas un jeu équivalent qui se comporterait pareil que le jeu d'origine... Non, c'est exactement le même binaire !

Après comme vous vous en doutez, le dépôt, lui, n'embarque pas tous les assets nécessaires à la compilation, pour des questions de droits d'auteur comme d'hab. Le README du projet nous explique ainsi qu'il faut posséder une copie du jeu, et que les scripts iront extraire ce qui manque de votre côté.

Après c'est pas cette recompilation qui fait que GoldenEye devient soudainement "moddable". En effet, il l'est depuis longtemps, via le GoldenEye Setup Editor de SubDrag, Wreck et Zoinkity, capable d'importer vos propres modèles 3D dans le jeu.

Ce qui change par contre, c'est que jusqu'ici on éditait des structures dans un binaire, alors que maintenant on modifie le moteur en C et on recompile. C'est le même chemin qu'avait pris ce bon vieux Duke Nukem Zero Hour l'an dernier .

Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles. En savoir plus Voir cette vidéo sur YouTube

Et c'est d'ailleurs ce que fait KholdFuzion à côté, avec GoldenRecomp , qui recompile la ROM en exécutable PC natif. Avec ça, le jeu peut tourner sur un ordinateur. Apparemment, c'est plutôt stable, et le son est bon.

Mais toute l'interface multijoueur reste à faire, le ciel du barrage part en vrille parce que le moteur de rendu ne digère pas les commandes de dessin maison, et certaines armes tirent trop vite maintenant que tout tourne à 60 images par seconde. Ce n'est donc pas encore vraiment jouable.

Aucune release n'a été publiée à ce jour, ni même un tag, ce qui veut dire qu'on est encore loin d'un portage installable comme celui de Zelda 64 . Faudra compiler vous-même, après avoir "build" une ROM depuis la branche du projet conçue pour ça.

Dans le même style, n'oubliez pas l'existence de GoldenEye-Recomp de SunJaycy , qui lui, est déjà jouable avec du multijoueur en ligne, mais qui n'a rien à voir avec tout ça puisqu'il recompile la version Xbox 360 qui n'est jamais sortie, et pas la N64.

Bref, si vous attendiez un exécutable à lancer ce soir, ce n'est pas ce que vous aurez mais ce qui s'annonce ensuite est très prometteur !

Source

  •  

Un script pour virer les produits sponsorisés d'Amazon

Allez, on va faire un jeu. Cherchez un disque dur externe sur Amazon et regardez où pointe le premier lien de la page. Bingo, ça part sur une adresse en /sspa/click, autrement dit un emplacement publicitaire. Et c'est pas le mieux noté, c'est pas le moins cher, non, c'est juste celui qui a payé le plus pour être là.

Et moi, ce qui me saoule vraiment, c'est que les filtres n'y peuvent rien.

Pour remédier à cela il faut sortir l'artillerie. J'ai d'abord pensé à faire un filtre uBlock Origin, puis à me coder une extension Firefox, avant de me rappeler que Tampermonkey tournait déjà dans mon navigateur.

Direction le repo Greasy Fork, donc, où traîne un script qui fait exactement ça . Une cinquantaine de règles CSS, qui dégagent du DOM les résultats sponsorisés de la recherche, les carrousels promo, les encarts publicitaires de la fiche produit, l'upsell Prime et les bannières de marque.

On passe ainsi de ça :

À ça :

Et ça fonctionne super sur toutes les versions d'Amazon, y compris Amazon.fr.

Trois réglages attendent dans le menu du gestionnaire de scripts. Un compteur qui affiche en bas de page ce qui a été retiré et pourquoi, une journalisation console pour les curieux, et une option qui redirige les pages de navigation vers la vraie liste de résultats.

Attention quand même à ce qui saute en plus des pubs. Le bloc "Les gens qui ont acheté ça, ont aussi acheté ça". Le script s'attaque aussi à Rufus, l'assistant d'achat maison et côté installation, il vous faut Tampermonkey, Violentmonkey ou Greasemonkey. Sur Firefox, ça s'arrête là. Par contre sur Chrome, depuis la version 138, il faut en plus activer un switch "Allow User Scripts" sur la fiche de l'extension, coupé par défaut sur toute extension fraîchement installée.

Voilà, j'espère que ça vous aidera à avoir un Amazon un peu plus propre. Maintenant, n'oubliez pas, Amazon, c'est le mal, donc si vous avez les moyens de payer 2x plus cher la même chose et que vous aimez passer votre vie dans les transports ou en bagnole à faire une espèce de chasse au trésor à travers toute la ville, pour trouver le produit qu'il vous faut, le mieux reste encore et toujours d'acheter dans des magasins physiques. Lol.

  •  

Freenet-git - Le dépôt Git sans serveur

Depuis ce printemps, sachez qu'un git clone ordinaire peut maintenant récupérer un dépôt qui n'existe sur aucun serveur spécifique. En fait, le code est stocké dans Freenet, le réseau pair-à-pair qu'Ian Clarke a relancé en mars. Et comme y'a plus d'hébergeur, bah y'a plus personne pour fermer un compte ou shooter le dépôt.

Car Git est décentralisé depuis toujours et fonctionne très bien comme ça, puisque chaque clone contient l'historique complet, ce qui permet à 2 clones de se synchroniser directement. Ce qui lui manquait par contre, c'était l'hébergement, et c'est là-dessus que les forges que nous connaissons, Github en tête, sont venues capitaliser. Y'a bien des initiatives comme Grasp qui essaie d'en sortir grâce au protocole Nostr mais freenet-git lui range carrément le dépôt dans un contrat que les nœuds recopient, et se publie lui-même à l'adresse freenet::99TmCayXn6Tm/freenet-git.

Cloner ou publier du code exige donc le paquet freenet-git et un nœud qui tourne sur votre machine, ce qui fait qu'on ne supprime pas vraiment le serveur, mais on le ramène juste chez soi.

Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles. En savoir plus Voir cette vidéo sur YouTube

Le socle compte plus que l'application dans cette présentation. Les contrats et les delegates forment la couche où une app tourne sans backend, et quatre tournent déjà dessus : River pour le chat de groupe, Delta pour les sites, Atlas pour la recherche, et freenet-git pour le code. Mail, Raven et Harvest existent aussi, à un stade plus jeune.

L'adresse du dépôt sort des 12 premiers caractères de la clé publique de son propriétaire, et à ce stade expérimental, lui seul peut pousser dedans. Y'a pas non plus de pull requests, ni d'issues puisque c'est le modèle du noyau Linux d'avant les forges, où chacun publie son clone et le mainteneur vient y piocher ce qui l'intéresse.

Reste le plus dur maintenant, retrouver un dépôt.

Car sans annuaire, un nœud doit deviner lequel de ses voisins mettra le moins de temps à trouver ce qu'on lui demande. Le réseau traite ça comme un problème d'apprentissage et parie sur le bon voisin à partir des requêtes passées grâce à Renegade, une bibliothèque open source sortie en 2021, capable de faire ce calcul.

Installer freenet-git

Il faut une chaîne Rust, et ~/.cargo/bin doit être dans votre PATH. Les installeurs du nœud sont sur freenet.org/quickstart.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Rust n'entre dans le PATH qu'au shell suivant, donc ouvrez un nouveau terminal avant la commande d'après. Elle dépose deux binaires, freenet-git et le remote helper que Git appellera tout seul.

cargo install freenet-git

Cloner un dépôt qui existe déjà

Aucune identité n'est nécessaire pour lire. La bibliothèque standard de Freenet fait un bon test, elle porte son historique complet et ses tags.

git clone freenet::96rknpy1GYhZ/freenet-stdlib

Publier le vôtre

C'est create qui publie réellement le contrat. Il affiche PUT confirmed by host et l'adresse du dépôt, dont le préfixe se recopie dans le remote. La phrase de passe voyage par une variable d'environnement parce que Git garde la main sur l'entrée standard durant le push.

freenet-git init-identity --name "Votre Nom" --email [email protected]
cd ~/code/mon-projet
freenet-git create --name mon-projet
# -> URL: freenet:VOTRE_PREFIXE/mon-projet
git remote add freenet freenet::VOTRE_PREFIXE/mon-projet
export FREENET_GIT_PASSPHRASE='votre-phrase-de-passe'
git push freenet main

Et voilà ! Avec ça vous pouvez faire du vrai git décentralisé même si la vraie limite est ailleurs...

En effet, les nœuds gardent en cache ce qu'on leur réclame et évacuent le reste, donc un dépôt que personne ne clone finit au bout d'un moment par ne plus être clonable. Et ça c'est dommage... C'est pourquoi une commande (rescue), le remet en circulation depuis une machine qui a encore les données. Le projet ne présente toutefois pas ça comme un bug, mais comme son modèle de durabilité actuel.

Mais autant le savoir avant d'y déposer votre code.

Source

  •  
❌