Quotidien Shaarli
Hier - June 28, 2026
Symfony 8.1 introduit un kernel HTTP-less conçu pour simplifier les projets neufs sans composants HTTP, comme des outils en ligne de commande ou des microservices. Cette version extrait ServicesBundle et ConsoleBundle de FrameworkBundle, permettant un conteneur léger avec injection de dépendances et commandes CLI, sans surcharge HTTP.
En revanche, cette approche n’est pas adaptée aux workers existants (comme ceux de Messenger), car FrameworkBundle reste nécessaire pour configurer des fonctionnalités comme le routage ou la messagerie. Réimporter FrameworkBundle annulerait les gains de légèreté, rendant le kernel HTTP-less inutile dans ce contexte.
Pour les applications full-stack existantes, aucune action n’est requise : FrameworkBundle intègre déjà les nouveaux bundles via des attributs #[RequiredBundle], maintenant ainsi la compatibilité sans modification.
L’article explique comment construire un site web dynamique utilisant Symfony, NATS et NUTS pour des mises à jour en temps réel sans rafraîchissement. L’idée principale repose sur l’utilisation de Server-Sent Events (SSE), une technologie simple et native pour pousser des données du serveur vers le navigateur via HTTP, évitant ainsi la complexité des WebSockets pour un usage unidirectionnel. L’auteur souligne que SSE est idéal pour des flux de texte unidirectionnels, avec une reconnexion automatique et une gestion simplifiée des événements.
L’architecture proposée intègre NATS JetStream comme système de messagerie, tandis que NUTS agit comme un pont entre NATS et SSE via un module Caddy, réduisant ainsi l’infrastructure nécessaire. Un exemple concret est donné avec un tableau de bord affichant des prix de noix en temps réel, où un producteur envoie des mises à jour via une API, et les navigateurs les reçoivent instantanément sans besoin de rafraîchir la page.
MapToPoster est un outil open source qui permet de générer des affiches minimalistes de cartes géographiques pour n'importe quelle ville du monde. L'application utilise des données cartographiques et des thèmes visuels pour créer des visuels esthétiques, comme des exemples pour San Francisco, Barcelone ou Tokyo. Les utilisateurs peuvent personnaliser les affiches en ajustant des paramètres comme la taille, le thème (ex. terracotta, japanese_ink) ou la distance de la zone cartographiée.
L'installation se fait via uv (recommandé) ou pip avec un environnement virtuel, et l'exécution du script nécessite simplement de spécifier la ville et le pays. Des options avancées permettent de modifier le centre géographique, d'utiliser des polices personnalisées ou de générer plusieurs thèmes pour une même ville. Le projet, sous licence MIT, est hébergé sur GitHub avec une communauté active (plus de 13 000 étoiles).
Le Domain Driven Design (DDD) est souvent réduit à une simple organisation technique du code, comme l’isolation du domaine métier dans un dossier dédié. Pourtant, son essence réside bien avant le développement, dans une approche stratégique centrée sur la compréhension et la modélisation du métier. L’identification des sous-domaines porteurs de valeur, la création d’un langage commun entre experts techniques et métiers, ainsi que des ateliers comme l’event storming ou le context mapping, constituent le socle véritable du DDD.
Les patterns tactiques (objets riches, agrégats, etc.) ne représentent que la partie visible de cette méthode. Leur efficacité dépend entièrement du travail préliminaire d’alignement entre le modèle logiciel et la réalité métier. Sans cette phase en amont, le DDD se limite à une coquille vide, confondant technique et méthode.
L’auteur souligne que négliger ces aspects stratégiques revient à méconnaître la philosophie du DDD, qui vise à transcender la simple architecture pour devenir un outil de collaboration et d’innovation au service du métier.
Ce billet explore les trois leviers concrets dont dispose un développeur pour réduire l’empreinte écologique du numérique, en soulignant que ces actions reposent davantage sur des abstentions que sur des optimisations techniques. L’auteur démystifie d’abord deux récits trompeurs : le catastrophisme, qui exagère l’impact réel du numérique (ex. : 1,6 kg de CO₂ pour 30 minutes de Netflix, alors que la réalité est 36 g), et l’illusion de l’efficacité technique seule, qui ne suffit pas à résoudre le problème. Il insiste sur l’importance de contextualiser les chiffres et de cibler les vrais leviers d’action.
L’idée centrale est que le développeur peut agir en évitant trois écueils majeurs : ne pas contribuer à l’obsolescence prématurée du matériel, ne pas solliciter inutilement les serveurs (ex. : en supprimant des fonctionnalités énergivores), et ne pas manipuler les données pour masquer l’impact réel. Ces principes, bien que simples, sont rarement intégrés dans les critères de conception, alors qu’ils ont un impact significatif. L’auteur rappelle que la sobriété numérique passe avant tout par des choix de conception responsables, plutôt que par des optimisations techniques marginales.
Enfin, le texte aborde la responsabilité des développeurs face aux exigences légales croissantes en matière d’écoconception, tout en reconnaissant que ces mesures ne suffisent pas à elles seules. Il conclut que la sobriété numérique est un métier du « ne pas faire », où l’abstention intelligente et la transparence sur les données priment sur les solutions techniques coûteuses ou illusoires.
PHP 8.4 simplifie radicalement l'écriture de classes propres en PHP grâce à des fonctionnalités comme la promotion des propriétés dans le constructeur, les propriétés readonly et la visibilité asymétrique. L'auteur illustre cette évolution avec un exemple concret : une classe ControllerActor passe de 12 lignes (avec propriétés privées, constructeur et getters) à seulement 4 lignes en utilisant ces nouvelles syntaxes, tout en garantissant l'immutabilité des données. Cette approche réduit la verbosité du code et améliore sa sécurité en empêchant les modifications accidentelles.
L'immutabilité des objets, rendue plus accessible par PHP 8.4, offre des avantages majeurs comme la sécurité des threads, l'absence d'effets de bord et une meilleure maintenabilité. Cependant, l'auteur souligne que cette pratique n'est pas universelle : les entités avec un cycle de vie (comme les utilisateurs ou les demandes de dépôt) doivent rester mutables pour des raisons de performance et de cohérence. Les collections dynamiques ou les objets hydratés par des ORM comme Doctrine nécessitent également une approche différente.
Enfin, l'article met en garde contre les pièges courants, notamment avec des outils comme Symfony Forms ou EasyAdmin, qui peuvent ne pas être compatibles avec ces nouvelles fonctionnalités. En adoptant l'immutabilité de manière ciblée (pour les objets de valeur ou les événements), les développeurs gagnent en fiabilité et en clarté, tout en évitant les régressions liées aux modifications implicites de données.
Igor PHP est un outil conçu pour détecter des fuites de cache en worker mode, un problème que PHPStan ne peut pas identifier. Contrairement à PHPStan qui vérifie les types et la cohérence statique du code, Igor analyse le cycle de vie des services en exécution, notamment dans des environnements comme FrankenPHP où un même processus PHP gère plusieurs requêtes sans redémarrage. Cela permet de repérer des mutations d'état involontaires dans des services partagés, évitant ainsi des risques de partage de données entre utilisateurs ou des comportements imprévisibles.
Le billet illustre l'utilisation d'Igor à travers un cas concret : le scan du blog de l'auteur, qui a révélé 269 anomalies brutes réduites à 3 vrais bugs après un tri rigoureux. L'outil, écrit en Go, se distingue en lisant le container Symfony pour différencier les services partagés des instances par requête, puis en signalant toute modification d'état sur les premiers. Cette approche comble une lacune majeure des outils traditionnels, qui ne prennent pas en compte les effets de bord liés au worker mode.
Pour l'installer, deux méthodes sont proposées : un binaire Go autonome ou une dépendance Composer en mode développement. Une configuration minimale est nécessaire, et l'outil peut fonctionner en mode complet (requérant l'exécution de bin/console) ou en fallback si le mode console échoue. Le billet souligne aussi l'importance d'intégrer Igor dans une chaîne CI pour rendre ses rapports exploitables, tout en mettant en garde contre ses limites et particularités d'usage.
La page Art Terms de la Tate propose un glossaire en ligne expliquant des termes artistiques variés, couvrant mouvements, techniques et concepts. Parmi les exemples mis en avant, l’impressionnisme se distingue par son approche de peinture en plein air et spontanée, centrée sur des paysages et la vie quotidienne, tandis que l’art land se caractérise par des œuvres créées directement dans le paysage à partir de matériaux naturels.
Le glossaire recense plus de 460 définitions, classées par ordre alphabétique, allant de l’Abbaye de Créteil (un groupe d’artistes français du début du XXe siècle) au Rayographe (technique photographique surréaliste). Chaque terme est accompagné d’une brève explication et d’un lien vers d’autres entrées similaires, offrant une ressource accessible pour comprendre l’histoire et les pratiques de l’art.
La Tate met ainsi à disposition un outil pédagogique pour explorer les courants artistiques, les styles et les méthodes, depuis le baroque jusqu’au dadaïsme, en passant par des mouvements moins connus comme le Laboratoire Agit’Art ou la Khartoum School.
L’article explore la dualité de l’IA générative en 2026, entre avancées concrètes et illusions marketing, en s’inspirant de la métaphore du Magicien d’Oz. D’un côté, des réalisations tangibles comme AlphaFold, qui a révolutionné la biologie en prédisant la structure de millions de protéines, ou des outils comme GenCast en météorologie, démontrent l’utilité de ces technologies. De l’autre, certaines applications surfent sur le buzz sans réelle autonomie, comme des systèmes de commande automatisée où des humains interviennent massivement en coulisses.
L’auteur souligne que les progrès sont réels dans des domaines ciblés (biologie, médecine, développement logiciel), mais que leur efficacité dépend fortement du contexte. Par exemple, l’IA excelle sur des tâches répétitives et bien définies, comme la génération de code avec GitHub Copilot, mais son apport se réduit sur des projets complexes. Cette nuance est souvent occultée par les discours promotionnels.
Enfin, l’article met en lumière des cas de tromperie pure, où des entreprises ont levé des millions en prétendant automatiser des processus alors qu’ils reposaient sur une main-d’œuvre humaine. Ces exemples, comme l’application Nate ou les systèmes de Presto Automation, révèlent une économie de l’IA parfois plus proche du leurre que de l’innovation, surtout dans un contexte où les valorisations boursières et les attentes des utilisateurs sont sous pression.
Ce tutoriel explique comment implémenter le chiffrement au niveau des champs dans Symfony avec Doctrine, afin de protéger les données sensibles stockées en base. L’idée centrale est d’encrypter uniquement certains champs d’entités Doctrine (comme des notes privées ou des clés API) plutôt que l’ensemble de la base, permettant ainsi à l’application de continuer à manipuler des valeurs lisibles en PHP tout en stockant des données chiffrées dans la base. L’auteur recommande cette approche pour limiter les risques en cas de fuite de sauvegardes ou d’accès non autorisé à la base, tout en évitant les inconvénients du chiffrement global (perte de fonctionnalités comme les recherches ou tris).
L’article détaille les cas d’usage pertinents (champs contenant des données personnelles ou critiques) et les compromis à considérer, comme la complexité accrue pour les opérations de requêtage. Il présente également un exemple concret avec le bundle doctrine-encryption-bundle, illustrant comment un champ comme privateNote est chiffré en base tout en restant accessible normalement dans le code PHP. L’outil utilisé, disponible via Composer, simplifie l’intégration de cette fonctionnalité dans un projet Symfony.
Cette page explique le processus de correction des vulnérabilités de sécurité dans Symfony UX, depuis la détection jusqu’à la publication. L’auteur, membre de l’équipe Symfony UX Core Team, détaille les étapes clés : développement des correctifs dans un dépôt privé pour éviter les exploits anticipés, triage des rapports pour distinguer les vulnérabilités critiques (CVE) des améliorations de sécurité mineures, et création de correctifs ciblant d’abord les branches maintenues en mode security-fixes-only.
Deux exemples concrets illustrent ce processus : CVE-2026-55877, une faille XSS dans symfony/ux-icons due à l’injection de SVG non échappés, corrigée via une usine centralisée de nettoyage des éléments dangereux ; et CVE-2026-55878, une traversée de chemin dans symfony/ux-toolkit permettant l’accès à des fichiers arbitraires, résolue par un rejet explicite des chemins contenant ...
L’auteur souligne l’utilisation d’outils automatisés (comme un assistant IA pour analyser les rapports ou générer des advisories GitHub) pour accélérer les tâches répétitives, tout en insistant sur la nécessité d’un examen humain pour valider les correctifs et les scores CVSS avant publication.
L’article explique que le protocole atproto, utilisé par Bluesky, ne repose pas sur des instances comme Mastodon. Contrairement à ce que certains pensent, atproto n’implique pas de serveurs séparés gérant des communautés distinctes, mais plutôt un réseau unique où les utilisateurs publient directement sur un espace global, sans fragmentation.
L’auteur compare cette approche à l’ère des blogs et des agrégateurs RSS, où les contenus étaient centralisés dans des applications comme Google Reader, sans être "captifs" d’un serveur spécifique. Il souligne que les instances (comme dans Mastodon) sont une solution de contournement pour la décentralisation, mais qu’elles introduisent des problèmes de fédération et de confiance dans les administrateurs.
Enfin, il critique le modèle des instances, où l’identité d’un utilisateur est liée à son serveur (ex: utilisateur@instance.social), le rendant dépendant de cette entité. atproto, en revanche, évite cette contrainte en unifiant l’espace de publication.
Ce billet humoristique et critique illustre les dangers du vibe coding (développement impulsif basé sur l’IA) à travers une expérience fictive où un développeur, pressé par le temps, utilise un assistant IA pour implémenter rapidement une fonctionnalité. L’auteur met en scène deux jauges symbolisant la vitesse de développement et la dette technique, montrant comment la précipitation mène à des erreurs critiques, comme l’exposition d’une clé d’API en dur dans un commit public.
Le récit, structuré comme un jeu de rôle, explore les conséquences d’un manque de rigueur : l’assistant IA génère du code erroné ou dangereux, tandis que le développeur, obnubilé par la productivité immédiate, ignore les signaux d’alerte. Les choix du protagoniste – accepter aveuglément les suggestions, négliger les tests ou reporter les corrections – aggravent la situation, culminant avec la compromission d’un compte et une dette technique ingérable.
À travers ce scénario, l’auteur souligne les risques d’une approche trop laxiste du développement assisté par IA, où la vitesse prime sur la qualité et la sécurité. Le ton sarcastique et les références aux jeux vidéo renforcent l’idée que le vibe coding peut rapidement virer au cauchemar, transformant une "petite feature" en un désastre professionnel.
Le tutoriel d'Alsacréations présente l'arrivée de CSS Grid Lanes, une fonctionnalité native du module CSS Grid Level 3 qui simplifie la création de mises en page de type Masonry (comme Pinterest), où les éléments de hauteurs variables s'imbriquent sans espaces vides. Cette solution élimine le recours à des bibliothèques JavaScript comme Masonry.js ou à des astuces CSS peu fiables, offrant une approche performante, accessible et respectueuse de l'ordre du DOM.
L'article explique que Grid Lanes permet de disposer des éléments de manière asynchrone sur l'axe vertical, sans imposer de hauteurs de ligne rigides, contrairement aux grilles traditionnelles. Ses avantages incluent une meilleure performance (pas de recalculs JavaScript), une sémantique HTML préservée et une adaptabilité responsive grâce à des fonctions comme repeat() et auto-fit.
Cependant, la compatibilité reste limitée : il faut activer un flag expérimental dans les navigateurs (Chrome, Firefox, Edge ou Safari) pour tester cette fonctionnalité. L'auteur propose une stratégie de progressive enhancement avec @supports pour garantir un affichage de secours, illustrée par un exemple simple d'implémentation.