Quotidien Shaarli

Tous les liens d'un jour sur une page.

Aujourd'hui - August 2, 2026

Building Idempotent Message Handlers in Symfony Messenger | by Krzysztof Słomka | Jul, 2026 | Medium

L’article explique comment concevoir des gestionnaires de messages idempotents dans Symfony Messenger pour éviter les effets indésirables lors de la réception de messages en double, notamment dans des environnements distribués comme Kubernetes avec des files SQS. L’idée centrale repose sur la création d’effets métiers "effectivement uniques" malgré des livraisons multiples, en s’appuyant sur des identifiants stables (comme eventId), des contraintes d’unicité dans la base de données et des mécanismes de déduplication. L’auteur souligne que la fiabilité ne peut être garantie par les simples configurations de tentatives de renvoi, mais nécessite une approche systémique intégrant la gestion des clés d’idempotence et des transactions atomiques.

L’analyse détaille les risques liés à l’absence de transaction atomique entre la validation en base de données et la suppression du message de la file, illustrant comment un crash peut entraîner des doublons ou des pertes. Pour y remédier, il propose des solutions comme l’utilisation de contraintes uniques PostgreSQL, de tables de déduplication ou du Outbox Pattern pour sécuriser la production des messages. Ces méthodes permettent de garantir que, même en cas de livraisons multiples, l’effet métier ne se produit qu’une seule fois, tout en reconnaissant que cette approche ne couvre pas les systèmes externes (API, paiements, etc.), qui nécessitent leurs propres mécanismes d’idempotence.

👩‍💻Le dev est mort, vive le dev ! 🧑‍💻 - 🧸 Ourson's blog

L’article explore l’impact de l’IA générative sur le métier de développeur, soulignant que son adoption massive est désormais incontournable sur le marché du travail. L’auteur, Stéphane Philippart, explique que refuser d’utiliser ces outils peut devenir un frein professionnel, tant pour les recherches d’emploi que dans les entreprises, où la pression pour livrer plus vite est forte. Il compare cette évolution à d’autres révolutions technologiques passées, comme l’arrivée du Web ou des smartphones, où l’adaptation était nécessaire pour rester compétitif.

Plutôt que de parler de déclin, il insiste sur la nécessité de s’adapter, en transformant les pratiques sans pour autant renoncer à la passion ou à la créativité. L’IA ne supprime pas le métier, mais le fait évoluer, comme l’automatisation a pu le faire pour d’autres professions, comme les ébénistes. Certains peuvent choisir de rester sur des méthodes traditionnelles, mais cela devient un choix assumé plutôt qu’une obligation.

Enfin, l’auteur nuance son propos en reconnaissant que l’IA pourrait réduire l’espace dédié à la créativité pure, mais estime que le métier reste viable à condition de se réinventer. Il conclut que l’enjeu n’est pas de lutter contre cette tendance, mais de l’intégrer pour en tirer parti, tout en préservant l’essence du développement.

How to disable or avoid intrusive AI – librarian.net

Cette page propose des méthodes pour désactiver ou limiter les fonctionnalités d'intelligence artificielle jugées intrusives dans divers outils technologiques. L'idée principale est de donner des instructions pratiques pour réduire la présence de l'IA dans des logiciels et appareils courants, comme Adobe Acrobat, Android/Gemini, Apple Intelligence ou les navigateurs Chrome, Edge et Firefox. Elle inclut aussi des astuces pour désactiver des assistants spécifiques comme Siri ou Copilot, ainsi que des extensions pour Firefox afin de bloquer les améliorations basées sur l'IA dans les résultats de recherche.

How Do Decision-Making Frameworks Work? 8 Methods That End Overthinking - LifeDev.net

Cet article explique comment les cadres de prise de décision structurent le processus pour éviter la paralysie par l’analyse. Il souligne que le cerveau humain, submergé par des choix complexes, génère des scénarios excessifs et une aversion à la perte, aggravant l’indécision. Les cadres proposés, comme la règle 10/10/10 ou la méthode du pré-mortem, remplacent les ruminations infinies par des étapes claires, réduisant ainsi la fatigue décisionnelle.

L’auteur détaille huit méthodes pratiques, adaptées à différents types de décisions, comme le filtre des cinq ans pour refuser ou la liste pondérée pour comparer des options. Ces outils, accessibles sans outils complexes, visent à identifier les critères essentiels et à clore rapidement les choix, libérant ainsi l’esprit.

Enfin, l’article aborde les erreurs courantes, comme la recherche excessive d’informations ou l’illusion du choix parfait, qui alimentent l’indécision. Il insiste sur l’importance de choisir le bon cadre en fonction du contexte pour maximiser son efficacité.

🎯 Clean Transactions in the Application Layer | by Davide Romanelli | Jul, 2026 | Medium

L’article propose une solution pour gérer les transactions en couche applicative dans une architecture hexagonale, sans dépendre de l’infrastructure comme Doctrine. L’idée centrale est d’introduire un port TransactionManagerInterface dans l’application, implémenté par un adaptateur Doctrine qui utilise wrapInTransaction() pour encapsuler les opérations dans une transaction unique. Cela permet d’éviter les problèmes de cohérence, comme des modifications partielles en cas d’échec, en regroupant plusieurs opérations (persistance, mise à jour) dans un bloc atomique.

L’auteur illustre le problème avec un cas concret : la création d’une commande et la mise à jour simultanée des stocks. Sans gestion centralisée, chaque appel à flush() (via add() ou update()) crée une transaction implicite, risquant des incohérences si une étape échoue. La solution repose sur un service applicatif (OrderService) qui dépend uniquement des interfaces de domaine et du TransactionManagerInterface, isolant ainsi la logique métier des détails d’infrastructure.

Enfin, l’implémentation montre comment le TransactionManager utilise les mécanismes natifs de Doctrine pour gérer les transactions de manière robuste, y compris les erreurs PHP, tout en maintenant une séparation claire des responsabilités. Les méthodes add() et update() des repositories doivent éviter d’appeler flush() directement pour préserver l’intégrité transactionnelle.

GitLab MCP Server — Connect AI assistants to your repositories - DEV Community

Le GitLab MCP Server permet de connecter des assistants IA comme ChatGPT à des dépôts GitLab, qu'ils soient hébergés sur GitLab.com ou en auto-hébergement. Ce serveur, développé avec Symfony, expose des outils MCP pour interagir avec GitLab, offrant des fonctionnalités de lecture (liste de projets, exploration des fichiers, branches) et d'écriture (création de fichiers, commits atomiques jusqu'à 100 modifications). Les opérations destructives (suppression de fichiers ou projets) sont isolées et nécessitent des permissions spécifiques, renforçant la sécurité.

Pour sécuriser l'accès, le serveur utilise un système de permissions granulaires (lecture, écriture, destructif) et privilégie l'authentification OAuth 2.1 en production, avec vérification des jetons JWT et validation des scopes. Une configuration statique est disponible pour les tests locaux. Le transport est stateless via HTTP (Streamable HTTP ou Server-Sent Events), sans stockage de session, et les métadonnées OAuth sont publiquement accessibles pour faciliter l'intégration des clients.

L'installation requiert PHP 8.2+ et Symfony 7.4 LTS, avec une configuration Docker simplifiée. En production, l'OAuth est recommandé, tandis que le mode statique convient au développement. Le projet est conçu pour éviter les risques liés à la diffusion de tokens complets et pour maintenir un contexte à jour des dépôts.

sickn33/agentic-awesome-skills: AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 1,987+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.

AAS Core est un contrôleur local axé sur les agents, conçu pour découvrir, valider et planifier des stacks de compétences (skills) via une interface en mémoire et un catalogue de plus de 1 987 compétences agentiques. Il permet aux agents comme Codex ou Claude d’inspecter un projet, de sélectionner des compétences spécifiques depuis un catalogue local, puis de valider ces choix via un outil en lecture seule (compose_stack) avant de générer un plan immuable (aas-stack.json) pour une exécution ultérieure.

Le projet inclut une CLI dédiée, un serveur MCP local (via stdio), des plugins et un Workbench pour faciliter la revue humaine des plans générés. Bien que la validation et la planification soient fonctionnelles, les phases d’application et de récupération restent expérimentales et non couvertes par le support officiel en préversion.

Le dépôt propose également des playbooks réutilisables (SKILL.md), une documentation structurée et des outils de vérification pour renforcer la sécurité et la cohérence du catalogue. La dernière version stable (v15.7.1) intègre des corrections de sécurité et des améliorations de stabilité.

DTOs in Symfony: Definition, Best Practices, and Automatic Mapping & Validation | by Youssef | Jul, 2026 | Medium

Les DTO (Data Transfer Objects) dans Symfony sont des objets simples dont le rôle est de transporter des données entre les couches d'une application, notamment entre le contrôleur HTTP et la couche métier. Contrairement aux entités Doctrine, qui gèrent la persistance et la logique métier, les DTO se concentrent uniquement sur la structure des données nécessaires à un cas d'usage spécifique, sans logique ni dépendances. Par exemple, un DTO comme CreateProductInput peut inclure des annotations de validation pour garantir l'intégrité des données avant qu'elles n'atteignent le domaine métier.

L'utilisation des DTO apporte plusieurs avantages, notamment une meilleure sécurité en évitant les attaques par sur-assignation (mass assignment), une séparation claire entre l'API publique et le modèle de persistance, et une validation précoce des données. Ils améliorent également la maintenabilité en documentant explicitement les besoins d'un cas d'usage et en permettant une évolution indépendante des entités et des DTO. Par ailleurs, les DTO favorisent la testabilité, car ils sont faciles à instancier dans des tests unitaires sans dépendre de comportements spécifiques à l'ORM.

Pour une implémentation efficace, les DTO doivent être simples, explicites et immuables, de préférence en utilisant des classes final readonly en PHP 8.2+. Ils peuvent être adaptés à différents besoins, comme les entrées (input) et les sorties (output), qui peuvent avoir des exigences distinctes. En évitant de mélanger les responsabilités des entités et des DTO, les développeurs réduisent les risques de problèmes de sécurité et de couplage serré entre l'API et la base de données.

Tmux : le guide du multiplexeur de terminal

Ce guide complet présente tmux, un multiplexeur de terminal essentiel pour gérer efficacement les sessions, fenêtres et panneaux dans un environnement Linux. L’outil permet de conserver des processus actifs même après la fermeture du terminal, évitant ainsi la perte de travail en cas de déconnexion. Il offre aussi une meilleure organisation grâce à des sessions isolées, des fenêtres personnalisables et des panneaux divisés, améliorant ainsi la productivité.

L’installation est simple sur les distributions majeures (Debian/Ubuntu via apt, Fedora/RHEL via dnf), et la version 3.x est recommandée pour accéder à toutes les fonctionnalités. Les commandes de base incluent la création, l’attachement et le détachement de sessions, tandis que des raccourcis comme Ctrl+b suivi d’autres touches permettent de naviguer entre fenêtres et panneaux.

Le guide aborde aussi la personnalisation via le fichier .tmux.conf et l’ajout de plugins via TPM, illustrant des cas d’usage concrets comme le pair programming ou la surveillance de serveurs. Un tableau récapitulatif des raccourcis est disponible pour une prise en main rapide.

Kubernetes avec Vagrant – Talos & kubeadm – OPS

Ce billet présente deux méthodes pour déployer rapidement un cluster Kubernetes de laboratoire avec Vagrant, via les dépôts Vagrant-kubeadm (Debian 13) et Vagrant-Talos (Talos Linux immuable). Les deux solutions partagent une topologie réseau commune (192.168.56.0/24) et une couche applicative identique, mais diffèrent radicalement par leur approche : l’une utilise kubeadm avec des outils classiques (SSH, apt), tandis que l’autre repose sur l’API Talos pour une gestion sans accès shell. Les deux permettent des configurations variées, du control plane unique au HA complet, avec des outils comme Cilium ou Calico pour le réseau.

Le dépôt Vagrant-kubeadm offre une approche "vanilla" proche d’une installation de production, automatisant les étapes complexes comme la configuration de la VIP ou de containerd. Les scripts détaillent chaque commande kubeadm, facilitant la compréhension et l’adaptation. À l’inverse, Vagrant-Talos illustre les avantages d’un OS immuable, où toute la configuration passe par l’API talosctl, sans accès direct aux nœuds. Les deux projets partagent un fichier de configuration unique (lab.env) pour synchroniser les paramètres entre Vagrant, le bootstrap et la couche applicative.

L’objectif pédagogique est clair : comparer deux philosophies d’exploitation (mutable vs immuable) sur une même plateforme applicative. Les dépôts, disponibles sur GitHub, permettent de tester concrètement les compromis entre flexibilité et sécurité, tout en offrant une base reproductible pour des Proof of Concept ou des explorations techniques.

Why Is Journaling So Powerful? 9 Prompts That Change How You Think - LifeDev.net

Le journaling agit comme un outil puissant pour clarifier l’esprit et améliorer le bien-être mental. Des études en psychologie montrent que l’écriture expressive réduit le stress, améliore l’humeur et même renforce le système immunitaire en transformant les expériences floues en récits structurés. En libérant de l’espace mental, elle permet de mieux se concentrer et de mieux dormir, agissant comme une extension de la mémoire.

L’article propose neuf prompts spécifiques pour orienter la réflexion, comme identifier ses émotions, évaluer ce qui nous inquiète ou imaginer les conseils à donner à un ami. Ces questions ciblées évitent les pages vides et génèrent des insights plutôt que des simples notes. Elles aident à prendre du recul sur ses peurs, ses priorités et ses schémas de pensée récurrents.

Enfin, l’auteur souligne que la clé du succès réside moins dans la discipline que dans la régularité et l’adaptation du format. Un carnet simple suffit, et l’habitude se construit en choisissant des moments adaptés, comme le matin ou avant le coucher. Le journal devient alors un miroir longitudinal de soi, révélant des tendances invisibles à court terme.