Jev, développé par TypeSafe, se positionne comme un modèle de décision qui ne génère aucun texte, mais se concentre sur la classification de données brutes avec une latence inférieure à une seconde. Il opère comme un "Système 1" selon la théorie de Daniel Kahneman, privilégiant la rapidité et l'automatisation par rapport au raisonnement et à la génération de texte des LLM classiques ("Système 2"). Son approche "zero-shot" permet une grande flexibilité en modifiant les taxonomies directement dans le prompt, évitant ainsi le besoin de fine-tuning coûteux en temps et en ressources comme avec les modèles BERT.
Ce modèle innovant propose trois primitives en un seul appel API : "Noul" pour des évaluations binaires avec probabilité, "Choice" pour des sélections parmi une liste fermée, et "Score" pour des notations sur une échelle personnalisée. Ces fonctions sont particulièrement utiles pour automatiser des tâches de tri et de routage, notamment en combinant plusieurs critères en une seule requête. L'analyse de la "confiance" globale, distincte du score de probabilité, permet de discriminer les décisions nécessitant une automatisation directe et celles qui requièrent une intervention humaine.
En termes de coûts, Jev est significativement plus économique que les LLM traditionnels, avec un prix de 0,042 $ par million de tokens en entrée et des sorties gratuites, divisant ainsi le coût de traitement par environ 300. Cependant, il est important de noter son hébergement américain, qui soulève des questions potentielles liées au RGPD pour les données personnelles, et de comparer ses performances avec des solutions de machine learning classiques sur des jeux de données spécifiques.
Cet article présente une fonction Zsh nommée "update" conçue pour simplifier le nettoyage et la mise à jour des outils de développement. L'idée principale est de centraliser en une seule commande la gestion de plusieurs utilitaires courants tels que Homebrew, Docker, nvm et les worktrees Git. Cela permet de libérer de l'espace disque et d'éviter l'accumulation de données inutiles laissées par ces outils.
La fonction aborde le problème de l'espace disque saturé en identifiant et en supprimant les "déchets" spécifiques à chaque outil. Pour les worktrees Git, elle recherche et supprime ceux qui sont orphelins, c'est-à-dire qui ne correspondent plus à une branche active. Dans le cas de nvm, elle gère la suppression des versions de Node.js obsolètes ou inutilisées, tout en proposant des mécanismes de sauvegarde et de confirmation.
Enfin, la fonction "update" utilise topgrade pour orchestrer les mises à jour des différents paquets et applications. Elle intègre également des commandes spécifiques pour nettoyer les caches Homebrew, les images et volumes Docker non utilisés, et offre un bilan détaillé de l'espace récupéré en gigaoctets avant de confirmer les actions.
L'article propose un système de gestion des priorités pour les tâches, basé sur quatre niveaux de priorité avec des "tests d'entrée" écrits et des règles strictes. L'idée principale est que la définition claire de chaque niveau de priorité force des choix concrets et visibles, évitant ainsi la dévaluation des étiquettes de priorité, un problème courant où tout devient rapidement "urgent".
Ce système vise à surmonter la tendance des listes de tâches à se remplir d'éléments marqués comme urgents, rendant la priorisation inefficace. En exigeant des critères spécifiques pour chaque niveau de priorité, l'approche garantit que seules les tâches qui répondent réellement à ces critères accèdent aux niveaux supérieurs, imposant ainsi des arbitrages clairs lorsque de nouvelles demandes apparaissent.
Transitions.dev propose une collection de transitions d'interface utilisateur (UI) préconçues, destinées à être intégrées facilement dans des applications web, notamment celles interagissant avec des agents d'IA. Ces transitions couvrent une variété d'effets visuels, allant des animations de chargement aux transformations d'éléments interactifs, dans le but d'améliorer l'expérience utilisateur.
Le site met en avant des exemples concrets d'animations pour des éléments courants tels que les boutons, les notifications, les menus, les cartes, et les champs de texte. Il offre la possibilité de copier le code des transitions ou de les utiliser via une compétence d'agent de codage. Des fonctionnalités Pro sont également disponibles, proposant des animations plus élaborées et des effets physiques avancés.
L'objectif de Transitions.dev est de fournir aux développeurs un catalogue de transitions esthétiques et performantes, simplifiant ainsi l'ajout d'interactions dynamiques et engageantes aux applications web modernes.
L'article explore le rôle de l'intelligence artificielle dans le développement logiciel, en s'opposant à son utilisation systématique pour "automatiser les parties ennuyeuses" du codage. L'auteur met en avant l'importance de conserver le processus de résolution de problèmes comme un "artisanat" personnel, une pratique qui permet un apprentissage et une croissance profonds.
Face à l'essor de l'IA, l'auteur préconise un retour aux fondamentaux du codage, comparant ce processus à l'entraînement dans un "vieux gymnase" à la Rocky Balboa. L'idée principale est que la lutte directe avec les défis de programmation, même frustrante, est essentielle au développement des compétences et à la maîtrise, un aspect que l'IA ne peut remplacer.
L'IA est reconnue pour son utilité dans des tâches répétitives comme la génération de code boilerplate ou la résumé de documentation. Cependant, le cœur du métier de développeur, impliquant la pensée critique, la conception architecturale et la prise de décisions nuancées, doit être préservé comme un espace de développement personnel, par analogie, à travers le "vieux gymnase" cognitif.
L'article met en lumière dix leçons importantes tirées d'erreurs réelles en conception UX. L'idée principale est que des décisions de conception apparemment mineures peuvent avoir un impact significatif sur l'expérience utilisateur et le succès d'un produit numérique.
Parmi les leçons clés, la réduction de la charge cognitive des utilisateurs est primordiale pour améliorer la productivité. L'article souligne également que le minimalisme n'est pas une solution universelle et que le respect des conventions propres à chaque système d'exploitation reste pertinent. Prévenir les erreurs des utilisateurs avant qu'elles ne se produisent s'avère plus efficace que de se concentrer uniquement sur leur récupération, et le maintien de l'état actuel du design de l'interface utilisateur peut prolonger la durée de vie d'un produit.
En résumé, cet article partage des leçons précieuses issues d'erreurs de conception UX courantes. Il insiste sur l'importance de réduire la charge cognitive pour une meilleure productivité, tout en rappelant que le minimalisme n'est pas toujours la solution et que le respect des standards établis, comme ceux de l'OS ou la loi de Jakob, facilite l'adoption et augmente la durée de vie des produits numériques. La prévention proactive des erreurs utilisateur est également présentée comme une stratégie plus efficace que la correction a posteriori.
Cet article explique comment générer manuellement un certificat Let's Encrypt temporaire, une solution de contournement face aux difficultés de renouvellement automatique des certificats, particulièrement sur des environnements complexes ou restreints. Il présente les pré-requis nécessaires, notamment Python 3 et la capacité de modifier les enregistrements DNS du domaine, ainsi que la commande certbot avec les options pertinentes pour un renouvellement manuel via le challenge DNS.
L'approche manuelle permet de pallier temporairement les problèmes d'automatisation liés à l'ACME. Elle requiert la création d'enregistrements TXT spécifiques dans la zone DNS du domaine concerné pour valider la propriété, une étape vérifiable ensuite via des outils comme nslookup ou des plateformes en ligne. Une fois cette validation réussie, le certificat et sa clé privée sont générés, offrant une solution rapide pour résoudre les problèmes de certificat expiré.
Bien que cette méthode dépannage, elle n'adresse pas la cause profonde des échecs de renouvellement automatique. L'article souligne l'importance d'anticiper les futures contraintes, comme la réduction de la durée de validité des certificats à 47 jours d'ici 2029, et suggère l'adaptation des processus pour éviter ces problèmes à long terme.
La note aborde la problématique de l'autorisation légale pour analyser des données confidentielles, spécifiquement des secrets industriels, à l'aide d'un modèle linguistique de grande taille (LLM). L'objectif est de proposer des exemples de documents contractuels à faire signer par les clients, en fonction de cinq scénarios d'hébergement et d'accès au LLM, allant du SaaS hors UE à un serveur physique interne.
La distinction entre l'accès via une interface de chat et une API est soulignée, la note se concentrant exclusivement sur l'accès par API. Cette approche est motivée par la complexité et le coût d'hébergement des modèles LLM eux-mêmes, qui nécessitent une infrastructure matérielle spécifique comme des serveurs équipés de GPU, contrairement aux interfaces de chat plus légères.
Le contenu détaille ensuite les implications légales de chaque option, en classifiant les solutions par localisation du traitement des données, et non par juridiction du fournisseur. Cela permet de comparer les différentes approches et de comprendre leur impact sur la relation client, en identifiant celles qui pourraient potentiellement effrayer ou rassurer.
Hermes est présenté comme un framework d'agent IA "battery included" qui vise à combler les lacunes des agents de développement actuels. Contrairement à ses homologues qui nécessitent souvent une intervention manuelle continue, Hermes promet une plus grande autonomie, la capacité d'apprentissage et une configuration simplifiée, incluant des connecteurs et une intégration avec les plateformes de chat.
Son installation est conçue pour être accessible, avec la possibilité de le déployer sur des infrastructures modestes comme un vieux VPS ou un PC, plutôt que sur du matériel surdimensionné. L'auteur souligne l'approche open source de son éditeur, NousResearch, comme un atout majeur, permettant une personnalisation et une évolution du système sans être enfermé dans un écosystème propriétaire.
Bien que Docker soit une méthode d'installation courante, l'article aborde également la possibilité de l'installer sur d'autres environnements comme Kubernetes ou via Nix. L'auteur met en avant l'idée de pouvoir faire tourner Hermes sur des machines peu puissantes en n'utilisant pas de modèles locaux, mais en se connectant à des services externes.
FFmpeg Commander est un outil en ligne qui permet de générer des commandes FFmpeg pour des flux d'encodage vidéo courants sans avoir à mémoriser tous les drapeaux (flags). L'outil offre une interface visuelle pour construire des commandes en configurant des préréglages, les formats d'entrée et de sortie, les options vidéo, audio, les filtres et les conteneurs.
Il simplifie ainsi l'utilisation de FFmpeg, un logiciel puissant pour la manipulation de fichiers multimédias, en rendant ses fonctionnalités plus accessibles aux utilisateurs moins expérimentés en ligne de commande. L'outil propose également des options pour copier la commande générée, visualiser les réglages en JSON, sauvegarder des préréglages personnalisés et réinitialiser les configurations.
L'interface de FFmpeg Commander est conçue pour faciliter la création de commandes précises pour diverses tâches d'encodage et de traitement vidéo, tout en permettant un contrôle fin sur les différents paramètres.
L'auteur partage son parcours, passant d'un rôle de développeur à celui de manager, une promotion qu'il n'a pas pleinement choisie, motivée par la fidélité à son équipe et au projet, ainsi que par l'absence d'alternatives claires pour l'évolution de carrière. Il décrit le choc de la réalité managériale, accentué par la transition vers le télétravail imposé par la pandémie, et la difficulté de gérer des équipes aux besoins variés, ainsi que le stress des évaluations annuelles dans un système de quotas stricts.
Après trois années dans la gestion, l'auteur a ressenti le besoin de revenir à la technique. Il souligne que cette décision n'est pas une régression, mais une prise de conscience de son alignement plus fort avec le code et le développement. Il a trouvé son aboutissement dans le rôle de Staff Engineer, un poste qui, selon lui, manquait de définition à l'époque de sa promotion. Ce retour à la source lui a permis de mieux comprendre l'impact individuel au sein d'une équipe et de retrouver un épanouissement professionnel.
Les trois années passées dans le management ont paradoxalement enrichi sa perspective en tant que Staff Engineer. Elles lui ont apporté une meilleure compréhension des enjeux humains, de la dynamique d'équipe et des processus organisationnels, tout en lui permettant de retrouver sa place dans le cœur de métier technique. Il conclut que ce cheminement, bien qu'inattendu, a été formateur et lui a permis de trouver un équilibre professionnel plus satisfaisant.
Les requêtes de conteneur CSS sont sous-utilisées et mal comprises, en partie parce qu'elles sont traitées comme des requêtes média traditionnelles, alors qu'elles diffèrent fondamentalement. Les requêtes média interrogent la largeur du viewport, agissant comme un proxy pour l'environnement de l'élément.
Les requêtes de conteneur, quant à elles, permettent aux composants de s'adapter naturellement au contexte de leur conteneur parent, indépendamment de la largeur de l'écran. Elles répondent à la taille réelle du conteneur qui les héberge, offrant ainsi une réactivité plus granulaire et ciblée pour les composants réutilisables.
Cette distinction est cruciale pour exploiter pleinement le potentiel des requêtes de conteneur et construire des interfaces plus robustes et flexibles, capables de s'adapter aux différentes dispositions et tailles de blocs dans une page.
Le défi de l'alignement des icônes avec le texte dans les listes est qu'une fois que le texte dépasse une ligne, l'icône centrée visuellement peut paraître décalée. L'approche initiale consistant à utiliser align-items: start dans Flexbox déplace l'icône au sommet du conteneur, ce qui n'est pas idéal en raison de l'espace de ligne par défaut.
Pour résoudre ce problème lorsque l'icône est un élément HTML, il est recommandé d'ajuster la position verticale de l'icône. L'utilisation d'une valeur fixe avec transform: translateY() s'avère instable lorsque la taille de la police, la taille de l'icône ou la largeur du conteneur changent. La solution la plus robuste consiste à utiliser l'unité lh (line-height) pour calculer un décalage dynamique, assurant ainsi un alignement constant quelle que soit la taille du texte ou de l'icône.
Lorsque l'icône est ajoutée via un pseudo-élément comme image de fond, le même principe de calcul d'un décalage relatif s'applique pour garantir un alignement cohérent avec la première ligne de texte, même lorsque le texte se prolonge sur plusieurs lignes.
L'auteur a migré de l'application Authy pour la double authentification vers Aegis Authenticator, un logiciel libre. Cette transition a été motivée par l'incompatibilité d'Authy avec le système d'exploitation Murena /e/OS, utilisé sur son nouveau Fairphone, en raison de restrictions de sécurité liées aux ROM personnalisées.
Aegis a été choisi pour sa nature logicielle libre et pour maintenir une séparation entre la gestion des mots de passe et celle des codes de double authentification, privilégiant ainsi une application dédiée et simple d'utilisation sur smartphone. Le processus de migration a impliqué une approche minutieuse de changement un par un des comptes, avec une désactivation puis réactivation du 2FA, la génération de nouveaux codes de secours, et une vérification systématique de la fonctionnalité avant de supprimer l'ancien enregistrement dans Authy.
Pour assurer une transition réussie et ne rien oublier, l'auteur a utilisé des tags dans son gestionnaire de mots de passe et un fichier tableur dédié au suivi de la migration de chaque service vers Aegis, jusqu'à ce que tous les codes Authy aient été remplacés.
L'article explore comment étendre un blog existant, construit avec le générateur de site statique Hugo, pour le rendre accessible via le protocole Gemini. Le protocole Gemini est présenté comme une alternative minimaliste et plus respectueuse de la vie privée au Web actuel, évitant des aspects comme les publicités, le pistage systématique et les feuilles de style complexes. L'objectif est de créer une "capsule Gemini" ou un "gemlog" qui héberge le contenu du blog.
La démarche consiste d'abord à utiliser les capacités natives d'Hugo pour générer le contenu au format Gemtext, un format simple attendu par le protocole Gemini. Cela implique de configurer Hugo pour qu'il génère des fichiers avec l'extension .gmi et d'ajouter des templates spécifiques pour transformer le contenu Markdown existant en ce nouveau format. Plusieurs autres projets et articles sont mentionnés comme références pour cette transition vers Gemini avec Hugo.
Pour rendre le blog Gemini accessible, la seconde étape consiste à mettre en place un serveur Gemini capable de servir les fichiers .gmi générés par Hugo. L'article promet ensuite de présenter des clients Gemini permettant de consulter ce nouveau blog accessible via le protocole gemini://.
Pour suivre l'évolution de fichiers publics, comme la liste des plateformes agréées de la DGFiP, qui ne fournissent pas de métadonnées de modification (Last-Modified ou ETag), il est nécessaire de mettre en place un système de collecte régulière. L'absence de ces informations rend impossible de déterminer si un fichier a été mis à jour sans le télécharger et le comparer, entraînant une perte d'historique pour chaque jour sans relevé.
La solution proposée consiste à télécharger le fichier quotidiennement et à utiliser Git comme système d'archivage pour conserver les versions successives. L'analyse des fichiers .xlsx est simplifiée en exploitant leur structure ZIP contenant des fichiers XML, sans avoir recours à des bibliothèques complexes. Le processus utilise des outils en ligne de commande comme unzip et une analyse des chaînes de caractères dans xl/sharedStrings.xml ainsi que du contenu des cellules dans xl/worksheets/sheet1.xml.
Cette méthode de parsing XML par expressions régulières est spécifiquement adaptée à des fichiers dont la structure est stable et connue, garantissant que toute modification du format par le producteur du fichier entraînera une défaillance du script. Il est donc crucial de lancer la collecte dès que possible, même avec un script imparfait, afin de ne pas perdre de données historiques.
Un joli plaidoyer de Ploum pour ne pas utiliser l'IA dans la communication écrite : l'IA écrit de manière "vide" - il compare avec de la prose de "marketeux" - alors qu'une rédaction humaine, même maladroite, est incomparablement plus informative.
Le "seasonal slump" est une baisse saisonnière d'énergie, de concentration et d'enthousiasme qui survient généralement en automne avec la diminution des jours. Ce phénomène a une base biologique liée à la réduction de la lumière du jour qui perturbe l'horloge interne du corps.
La lumière du jour influence notre rythme circadien et la production de mélatonine, nous rendant plus somnolents et affectant nos niveaux de sérotonine, un messager chimique du cerveau lié à l'humeur. Cela, combiné à une tendance naturelle à moins bouger et à manger plus lourd, crée un cercle vicieux de baisse d'énergie.
Pour contrer ce phénomène, l'article propose six stratégies basées sur la science, axées sur l'exposition à la lumière naturelle dès le matin, l'activité physique (idéalement en extérieur), le maintien d'un horaire de sommeil régulier, la socialisation, la mise en place de projets motivants et une alimentation adaptée. Il est souligné que la dépression saisonnière est une condition distincte nécessitant un avis médical.
Ce billet décrit une approche pour renforcer la sécurité de Nginx Proxy Manager (NPM) dans un environnement Docker en utilisant CrowdSec. L'objectif est d'éviter de créer une image Docker personnalisée pour NPM, ce qui compliquerait les mises à jour. L'astuce consiste à faire tourner CrowdSec sur l'hôte et à lui permettre de lire les logs de NPM, sans modifier l'image officielle.
La solution proposée fait de CrowdSec un outil de détection et le firewall bouncer de CrowdSec une solution d'application des décisions. CrowdSec analyse l'activité de NPM, identifie les comportements malveillants, et le firewall bouncer utilise iptables pour bloquer les adresses IP incriminées au niveau du réseau, protégeant ainsi les services Docker exposés.
Cette méthode privilégie la simplicité et la maintenabilité, en conservant l'image NPM officielle et en évitant les dépendances à des images personnalisées moins suivies. Le filtrage s'opère au niveau du firewall plutôt qu'au niveau du serveur web lui-même, offrant une protection par blocage d'adresses sources pour les services Docker publiés.
Le projet Agojie vise à automatiser le jeu de société Dice Throne. Le développement a débuté par des décisions fondamentales avant même la première ligne de code, abordant la structure du modèle du jeu, la mécanique de défense des héros, la découpe des tâches de développement et le choix de la pile technologique. L'objectif initial est de modéliser le cœur du jeu en un contre un, en se concentrant sur la gestion des dés, avant d'intégrer les cartes et les effets de statut.
Trois idées d'architecture ont été envisagées dès le départ : la séparation entre la définition d'un héros et l'état d'une partie, la modélisation du jeu comme un "Aggregate" pour garantir l'intégrité des règles métier, et l'utilisation d'"Domain Events" pour enregistrer les faits importants du domaine. Cependant, ces idées n'ont pas été appliquées immédiatement, privilégiant une approche où les décisions sont justifiées par les règles du jeu et non par l'intuition.
Ce projet est structuré en quatre étapes principales : la mise en place du cœur du jeu sans cartes, le développement d'une interface utilisateur basique avec sauvegarde des parties, l'intégration de la couche de cartes pour influencer le jeu, et enfin la gestion des effets de statut qui affectent les héros. La première phase consiste en la rédaction d'une spécification détaillée des règles du jeu de Dice Throne, incluant des exemples concrets pour guider le développement du code.
Résumé pour Shaarli:
Le projet Agojie se lance dans l'automatisation de Dice Throne, un jeu de dés et de combat stratégique. Les premières étapes se concentrent sur les décisions architecturales et la modélisation des règles fondamentales, sans écrire de code. L'objectif est de développer le cœur du jeu, puis d'ajouter progressivement des fonctionnalités comme les cartes et les effets de statut, en s'appuyant sur des principes de conception logiciel rigoureux.