La propriété CSS flex-wrap: balance, disponible depuis Chrome 150, permet d’éviter l’effet d’"orphelin" où un seul élément s’enroule seul sur une nouvelle ligne dans un conteneur flex avec flex-wrap: wrap. Elle redistribue automatiquement les éléments pour un rendu plus équilibré, contrairement à la méthode classique qui peut nécessiter des media queries fragiles.
L’article illustre ce problème avec un exemple concret où des liens de navigation s’enroulent de manière déséquilibrée, puis montre comment flex-wrap: balance résout ce cas. Il aborde aussi un exemple réel sur Buffer.com, où des icônes sociales s’espacent de façon inesthétique en cas de redimensionnement, et propose deux solutions alternatives (container queries et max-width avec clamp) pour les navigateurs ne supportant pas encore cette propriété.
Enfin, l’auteur souligne que flex-wrap: balance simplifie la gestion des layouts flexbox responsives, réduisant le besoin de recourir à des astuces complexes, tout en restant limité à Chrome pour l’instant.
BLONK! est un système d'exploitation minimaliste pour PC x86, entièrement développé manuellement, sans recourir à des outils existants comme Linux ou GRUB. Son objectif est pédagogique : comprendre le fonctionnement interne des ordinateurs en partant de zéro, en écrivant chaque composant à la main. Le nom "BLONK!" provient des initiales des modules clés (Boot, Loader, Kernel) et d'une touche d'humour.
L'auteur souligne que ce projet s'adresse à des développeurs expérimentés, maîtrisant l'assembleur, les langages compilés et les concepts matériels comme la segmentation ou les interruptions. La série d'articles suit une approche pratique, où chaque publication correspond à une fonctionnalité implémentée et testée d'abord sur émulateur, puis sur du matériel réel pour garantir sa robustesse.
Le projet se distingue par son exigence de compatibilité avec plusieurs machines physiques, couvrant différentes générations de matériel et BIOS, afin d'éviter les écueils des environnements trop tolérants comme les émulateurs. L'objectif final est de construire un système fonctionnel capable de démarrer, afficher des informations, interagir via un clavier et exécuter un shell.
L’article explique comment une mise à jour automatique de MariaDB via Docker et Watchtower a causé des problèmes de compatibilité silencieuse. Le site fonctionnait normalement, mais les sauvegardes de la base de données échouaient en raison d’une incompatibilité entre les versions des tables système (11.3.2 vs 12.3.2). Le conteneur avait été mis à jour vers une version majeure plus récente, tandis que le volume persistant conservait l’ancien schéma, sans migration automatique.
L’auteur souligne que l’image Docker mariadb:latest et Watchtower ont agi comme prévu, mais sans coordination pour les bases de données persistantes. Il recommande d’activer MARIADB_AUTO_UPGRADE pour automatiser les migrations ou de désactiver les mises à jour automatiques pour les services critiques. La leçon retenue est d’automatiser avec prudence et de gérer manuellement les migrations des données persistantes.
Le protocole Spanning Tree (STP), et sa version moderne RSTP, permet d'éviter les boucles dans les réseaux Ethernet en bloquant certains chemins redondants, formant ainsi un arbre sans cycle. L'article illustre son fonctionnement via une simulation interactive dans le navigateur, montrant comment le protocole réagit aux changements de topologie en temps réel, comme la déconnexion d'un câble, avec une reconvergence en moins d'une seconde. Conçu dans les années 1980 et standardisé par l'IEEE, RSTP a remplacé le STP d'origine en 2004, utilisant des trames BPDU pour coordonner les commutateurs et maintenir une topologie stable.
Ce billet introduit le premier volet d’une série dédiée à l’hébergement en self-hosted d’un grand modèle de langage (LLM) à l’échelle professionnelle, à partir de l’expérience d’une équipe ayant déployé un serveur GPU chez Ippon. L’objectif est de partager un retour d’expérience pratique sur l’écosystème technique entourant les LLM, incluant les composants matériels (GPU, infrastructure) et logiciels (vLLM, Kubernetes), sans entrer dans les détails complexes de l’entraînement des modèles. L’auteur, ingénieur système, aborde les principes fondamentaux des réseaux de neurones de manière vulgarisée, en simplifiant les aspects mathématiques pour se concentrer sur les concepts clés comme les poids et les biais, qui structurent les fichiers de modèles téléchargeables (ex. Ministral-3B). Le texte prépare le terrain pour des articles ultérieurs en expliquant la nature des LLM comme des fonctions massivement paramétrées, composées de couches de neurones interconnectés via des matrices de poids.
L’auteur partage son expérience de cohabitation entre Docker Compose et K3s dans son homelab, expliquant pourquoi il maintient les deux solutions plutôt que de tout migrer vers Kubernetes. Il souligne que Compose reste plus simple et efficace pour un serveur unique, grâce à sa transparence (fichiers de configuration clairs, volumes localisés, dépannage direct) et sa légèreté, tandis que K3s apporte une uniformisation des déploiements et une préparation pour une infrastructure évolutive, notamment pour des projets multi-nœuds ou nécessitant une montée en charge. Cependant, il note que K3s ajoute une complexité d'exploitation (ressources minimales requises, gestion du stockage et de la haute disponibilité non automatique) et que son utilité se limite à des cas spécifiques, comme l'apprentissage de Kubernetes ou des environnements devant grandir.
L’auteur insiste sur le fait que le choix entre les deux outils ne dépend pas du nombre de conteneurs, mais plutôt de la facilité de maintenance et de restauration en cas de panne. Il rappelle que Compose reste pertinent même avec une dizaine de conteneurs, à condition de respecter des conventions claires (volumes nommés, images taguées, documentation des sauvegardes), tandis que K3s devient intéressant pour des besoins de scalabilité ou de résilience, bien que son contrôle-plane et ses applications ne soient pas automatiquement hautement disponibles sans configuration avancée. Il conclut que la cohabitation des deux outils est un compromis pragmatique, évitant une migration brutale et permettant de tirer parti des avantages de chaque solution selon les besoins.
L’article explique comment la sécurité au niveau des lignes (RLS) dans PostgreSQL peut être contournée dans un projet Symfony en raison du rôle propriétaire des tables. Bien que les politiques RLS soient activées, le rôle qui exécute les migrations (et donc possède les tables) ignore ces restrictions par défaut, exposant toutes les données sans restriction. Un simple ALTER TABLE ... FORCE ROW LEVEL SECURITY est nécessaire pour appliquer correctement les politiques.
L’auteur souligne que cette faille est difficile à détecter en tests, car les connexions de test utilisent souvent un superutilisateur qui contourne aussi la RLS. La configuration par défaut de Symfony, où le même rôle gère à la fois les migrations et l’application, crée un risque de fuite de données. La documentation PostgreSQL mentionne ce comportement, mais il est souvent ignoré lors de la mise en place des politiques.
L’article critique l’approche traditionnelle des systèmes multi-agents en IA, qui se concentre souvent sur l’orchestration des agents plutôt que sur la modélisation du domaine métier. L’auteur souligne que les règles et contraintes (comme les seuils d’approbation) ne devraient pas être intégrées dans les prompts des agents, mais plutôt encapsulées dans un modèle de domaine bien défini. Cela permet aux agents d’agir dans un environnement structuré, recevant des retours immédiats en cas d’erreur, et favorise une autonomie plus robuste.
Plutôt que de concevoir des workflows complexes entre agents, l’article plaide pour une architecture où le domaine est modélisé en premier : processus, état, invariants et règles métier. Les agents interagissent ensuite avec ce modèle partagé, sans avoir à gérer eux-mêmes les contraintes. Cette séparation réduit les risques liés aux erreurs de compréhension des règles et évite les systèmes soit trop risqués, soit trop restrictifs.
L’auteur présente Mozaik, un framework qui adopte cette approche en introduisant un état partagé et concurrentiel pour les agents, tandis que le modèle de domaine garantit le respect des règles. L’objectif est de construire des systèmes plus fiables et évolutifs, en s’appuyant sur une modélisation précise du monde réel plutôt que sur des workflows artificiels.
DeltaChat est une application de messagerie chiffrée de bout en bout, comparable à WhatsApp ou Signal, mais avec des différences notables. Contrairement à WhatsApp, elle ne collecte pas les contacts des utilisateurs ni ne les transmet à des tiers comme Facebook. Son chiffrement est systématique, sans option à désactiver, et son identité repose sur une clé cryptographique stockée localement, sans mot de passe ni dépendance à un serveur spécifique.
L’absence de spam est un autre avantage majeur : les comptes ne sont pas énumérables, et les contacts ne peuvent être ajoutés que via un QR-code ou une URL d’invitation, ce qui limite les risques de sollicitations indésirables. DeltaChat propose aussi des relais par défaut (comme nine.testrun.org), mais permet d’en ajouter ou supprimer, voire d’héberger son propre serveur pour plus de contrôle.
Enfin, DeltaChat se distingue par sa simplicité de création de compte (un pseudo suffit) et son approche décentralisée, où l’identité numérique reste sous le contrôle exclusif de l’utilisateur. Cependant, la perte de l’appareil entraîne la perte définitive de cette identité, d’où l’importance de sauvegarder régulièrement son profil.
L’article souligne que le Domain-Driven Design (DDD) gagne en importance avec l’essor de l’IA générative, car cette dernière simplifie la partie technique du développement, mais ne remplace pas la nécessité de bien comprendre et modéliser le domaine métier. L’auteur, Miłosz Smółka, rappelle que le DDD, popularisé par Eric Evans en 2003, reste pertinent car la complexité centrale des projets logiciels réside dans la résolution des problèmes métiers, et non dans les détails techniques.
L’IA permet désormais de générer du code rapidement, réduisant l’importance des frameworks et des langages, mais elle ne peut pas remplacer le travail collaboratif entre experts métiers et développeurs pour construire un modèle précis. Le DDD insiste sur la knowledge crunching (affinage des connaissances) et des méthodes comme l’Event Storming pour capturer la logique métier, des étapes que l’IA ne peut automatiser entièrement.
Enfin, l’article met en garde contre la tentation de confier la modélisation du domaine à l’IA, soulignant que cette tâche reste un effort collectif et itératif. L’optimisation des outils d’IA pour générer du code doit s’accompagner d’une focalisation accrue sur la compréhension du domaine, sous peine de reproduire les erreurs passées où la technologie était privilégiée au détriment du problème à résoudre.
Plexus est une plateforme collaborative qui évalue la compatibilité des applications Android sur des appareils dé-Googlés, en s’appuyant sur les contributions de la communauté. Elle recense plus de 10 000 applications, notées selon leur fonctionnement sans dépendre des services Google : Gold pour un usage parfait, Silver pour des problèmes mineurs, Bronze pour des limitations notables, et Broken pour les applications inutilisables. Une distinction est également faite pour les appareils utilisant microG, une alternative open-source aux services Google Play.
Les statistiques montrent une majorité d’applications bien notées (12 517 Gold en dé-Googlé), mais un nombre significatif reste problématique (1 088 Broken). La plateforme permet aux utilisateurs de partager leurs retours pour améliorer la compatibilité des logiciels avec ces environnements alternatifs.
Développée par Techlore, Plexus propose des liens vers son code source, des téléchargements et des ressources complémentaires, tout en restant accessible via une API pour les développeurs.
Cette page de Chris Burnell illustre la puissance croissante du HTML natif, qui permet désormais des interactions dynamiques autrefois réservées à JavaScript. Elle présente des fonctionnalités comme les popovers, les modales <dialog>, les groupes <details> ou encore les attributs loading="lazy" et hidden until-found, démontrant comment le navigateur gère seul des comportements complexes sans code supplémentaire.
L’auteur souligne cependant les limites d’implémentation et d’accessibilité de certaines de ces fonctionnalités, comme le popover ou le hidden until-found, qui peuvent poser problème selon les navigateurs ou les outils d’assistance. Il encourage à les tester tout en veillant à les rendre accessibles.
Enfin, des éléments comme command et commandfor ouvrent la voie à des interactions encore plus poussées, bien que leur support reste partiel. La page sert à la fois de démonstration et de rappel sur l’évolution continue des standards web.
L’article de JoeCode défend l’idée que SQLite, souvent sous-estimé, peut remplacer de nombreux outils spécialisés grâce à ses fonctionnalités étendues et sa simplicité. L’auteur souligne sa stabilité exceptionnelle, illustrée par un historique de 25 ans, une couverture de test quasi parfaite et une adoption massive dans des environnements critiques comme les smartphones ou les avions. Contrairement aux bases de données traditionnelles, SQLite se distingue par son absence de dépendances, son intégration native dans de nombreux langages et systèmes, et son modèle public domain, garantissant une liberté d’utilisation sans contraintes.
L’auteur met en avant la polyvalence de SQLite, capable de servir de moteur de recherche full-text, de base de données JSON, de file d’attente, de base de données vectorielle pour l’IA, ou même de système de cache, réduisant ainsi la complexité des architectures IT. Son installation et son déploiement sont quasi instantanés, car il est déjà présent sur la plupart des systèmes, et son utilisation en mémoire (:memory:) simplifie grandement les tests unitaires. Pour les environnements serveurs, SQLite s’exécute directement sans configuration supplémentaire, bien que ses performances verticales (sur un seul serveur) soient limitées par le matériel.
Enfin, l’article souligne que SQLite évolue constamment avec des fonctionnalités modernes comme les window functions ou le support JSONB, tout en restant rétrocompatible. Bien que l’auteur plaisante sur sa capacité à remplacer même une PlayStation 5, il reconnaît que son véritable atout réside dans sa fiabilité et son intégration transparente, faisant de lui un choix judicieux pour des applications où la simplicité et la robustesse priment.
L’article défend l’idée que PostgreSQL peut remplacer de nombreux outils spécialisés grâce à ses fonctionnalités étendues. L’auteur, Raphael Bauer, souligne sa stabilité, sa facilité d’installation et de scalabilité, ainsi que sa capacité à simplifier les infrastructures IT en intégrant des fonctions comme la recherche full-text, le stockage JSON, le traitement de séries temporelles ou même le caching. Il évoque aussi son rôle potentiel dans les workflows d’IA ou comme base pour des microservices.
L’auteur partage son expérience depuis 2003, comparant PostgreSQL à MySQL de l’époque, plus limité en fonctionnalités malgré sa popularité. Il illustre son propos par des cas concrets, comme l’utilisation de TimescaleDB pour l’analyse de données web dans son outil Privatracker, évitant ainsi la maintenance de systèmes multiples.
Enfin, Bauer met en avant la maturité de PostgreSQL, soutenu par une communauté active qui enrichit régulièrement le logiciel sans compromettre sa stabilité. Il recommande des ressources complémentaires, comme les travaux de Stephan Schmidt ou Hazel Bachrach, pour approfondir les possibilités de cet outil polyvalent.
L’article analyse les hacks récents ayant ciblé des services publics français en 2026, soulignant que trois des quatre attaques ont exploité des comptes légitimes sans nécessiter de compétences techniques avancées. Il met en avant l’importance de la défense en profondeur : pare-feu, cloisonnement, double authentification et contrôle strict des droits d’accès, tout en rappelant que la minimisation des données (RGPD) limite les risques de fuite. L’exemple de la DGFIP illustre un retard de six semaines dans la détection de l’exfiltration de données, malgré une coupure immédiate des accès, soulignant l’importance de surveiller à la fois l’intrusion et la sortie des informations.
Les attaques se divisent en deux catégories : les cibles spécifiques (phishing, mots de passe volés, comptes obsolètes) et les scans automatisés exploitant des failles connues dans des logiciels populaires. L’article cite l’exemple d’une faille de conception (IDOR) sur le portail ANTS, où une simple modification d’URL permettait d’accéder à des dossiers non sécurisés. Les robots malveillants, eux, ciblent indistinctement les serveurs vulnérables, souvent en quelques secondes après l’enregistrement d’un nom de domaine.
Enfin, l’auteur insiste sur la nécessité d’une approche globale, combinant prévention (mises à jour, configuration par défaut restrictive) et détection rapide des intrusions ou fuites. Il rappelle que le RGPD impose une notification rapide des victimes, mais que certains organismes peinent à identifier une exfiltration de données, retardant ainsi les mesures correctives.
L’article de Smashing Magazine explore l’utilisation de SMIL (Synchronized Multimedia Integration Language) pour animer des SVG, une alternative méconnue aux animations CSS ou JavaScript. SMIL permet d’animer intégralement un SVG, y compris via la balise <img>, sans recourir à JavaScript, bien que certaines propriétés comme viewBox ne disposent pas encore d’équivalents CSS. L’auteur souligne que SMIL, malgré sa syntaxe verbeuse, offre une solution native pour des animations complexes, notamment lorsque JavaScript est bloqué.
Pour simplifier la gestion des animations SMIL, souvent alourdies par des balises répétitives (une par propriété et élément), l’auteur propose de planifier les animations à l’avance en utilisant des timing charts (diagrammes de timing). Ces diagrammes, inspirés de segments de ligne, aident à visualiser les séquences, chevauchements et synchronisations entre animations, facilitant ainsi leur conception et leur maintenance. Une approche visuelle qui rappelle les principes de parallélisme et de séquencement en animation.
Cette page présente treize balises et attributs HTML5 méconnus ou sous-utilisés, avec des exemples concrets et leur niveau de compatibilité. Parmi les éléments mis en avant, la balise <details> permet d’afficher un contenu masqué par défaut, avec la possibilité de créer un accordéon via l’attribut name pour gérer l’ouverture exclusive d’un seul élément à la fois. L’attribut popover, récemment ajouté, simplifie l’affichage de fenêtres modales sans JavaScript, tandis que <data> facilite l’association entre une valeur lisible par l’humain et un identifiant machine.
D’autres fonctionnalités comme <meter> et <progress> offrent des solutions natives pour représenter visuellement des proportions ou des avancements, bien que leur affichage doive être géré manuellement. Les attributs comme loading="lazy" optimisent le chargement des ressources en différé, et poster permet de définir une image de prévisualisation pour les vidéos. Enfin, les types d’input natifs (date, color, range, etc.) améliorent l’expérience utilisateur sans recourir à des bibliothèques externes.
Ce tutoriel explique comment configurer Codex, l'agent IA d'OpenAI, pour l'utiliser avec un modèle de langage local (LLM) hébergé via llama.cpp. L'idée principale est d'éviter les abonnements payants des plateformes cloud en auto-hébergeant le LLM, tout en conservant les fonctionnalités de Codex. L'auteur insiste sur l'importance d'installer Codex sur une machine dédiée pour limiter les risques liés à son accès au système.
L'installation de Codex se fait via un téléchargement manuel depuis GitHub, suivi de son déplacement dans /usr/local/bin. L'outil bubblewrap est requis pour sécuriser l'exécution de Codex en mode bac à sable. La configuration repose sur un fichier config.toml où l'utilisateur définit le fournisseur de modèle (llamacpp), un nom personnalisé et l'URL locale de l'API de llama.cpp.
L’article explore l’évolution des pseudo-classes CSS qui, bien que conçues pour gérer des états, peuvent parfois imiter le comportement des écouteurs d’événements JavaScript. L’auteur souligne que des pseudo-classes comme :hover, :active, :focus ou :checked réagissent à des interactions utilisateur (clic, survol, focus), offrant une alternative à JavaScript pour des cas simples. Par exemple, :focus-visible utilise des heuristiques pour déterminer si un élément doit afficher un indicateur de focus, une logique difficile à reproduire efficacement en JavaScript.
L’auteur aborde aussi des pseudo-classes plus avancées comme :focus-within et :has(), qui permettent de cibler des éléments parents en fonction de l’état de leurs enfants, réduisant ainsi le besoin de scripts. Ces fonctionnalités illustrent comment CSS gagne en expressivité, notamment avec des spécifications émergentes comme les Animation Triggers, qui pourraient un jour permettre de déclencher des animations via des événements. Cependant, ces innovations restent encore en développement.
Enfin, l’article mentionne des pseudo-classes liées aux formulaires (:valid, :invalid, etc.), qui simplifient la gestion des états de validation sans recourir à JavaScript. L’auteur conclut que, malgré ces avancées, CSS et JavaScript restent complémentaires, chacun ayant ses forces pour gérer les interactions et la logique applicative.
Cette page présente une sélection de ressources pour la réparation électronique, à la fois pour les particuliers et les professionnels. Elle met en avant des plateformes collaboratives comme iFixit, qui propose des tutoriels et pièces détachées, ainsi que des services spécialisés comme Murfy pour la réparation d’électroménager à domicile.
Elle recense également des acteurs professionnels tels qu’AdExcel pour la maintenance électronique industrielle ou Repturn, spécialisé dans la réparation de composants électroniques. Les liens sont soumis à modération avant publication sur OpenNews, qui compte plus de 12 000 références partagées.