Hebdomadaire Shaarli

Tous les liens d'un semaine sur une page.

Semaine 42 (October 13, 2025)

30 ans de PHP au Forum PHP 2025, notre récap complet - JoliCode

Le Forum PHP 2025 a célébré les 30 ans de PHP, les 25 ans de l’AFUP, les 20 ans de Symfony et les 15 ans d’API Platform, avec des annonces et retours d’expérience marquants. Symfony 8 a été présenté avec ses évolutions (PHP 8.4 minimum, typage renforcé, suppression de code obsolète) et ses outils phares comme Flex, Autowiring ou Symfony AI. PHP 8.5 introduit notamment le pipe operator pour le chaînage de fonctions et des améliorations sur les URL et les emojis. L’IA était au cœur des discussions, avec des démonstrations du protocole MCP pour rendre les LLM capables d’agir via des outils serveurs, ainsi que des réflexions sur l’impact des IA génératives sur le métier de développeur. Des talks ont aussi mis en lumière des alternatives comme HTMX pour des applications dynamiques sans SPA, l’optimisation SQL face aux ORM, et des solutions pour la résilience des applications. Enfin, des retours sur la sécurité (WannaCry), l’accessibilité (RGAA) et l’embarquement de PHP dans des binaires autonomes ont complété ce panorama technique et inspirant. Une édition riche en innovations et en partage d’expertise pour la communauté PHP.

louislam/its-mytabs: Open source, web based, self hostable guitar/bass tab viewer and player, similar to Songsterr.

Tout est dans le titre... et c'est génial !

(mcorbin.fr): La GenAI pour les développeurs, un réel gain de productivité?

L’auteur, développeur expérimenté, partage son retour sur l’utilisation de la GenAI (Claude Code) au quotidien. Il distingue trois usages principaux : le "vibe coding" (génération complète de scripts ou interfaces simples, gain de temps énorme), le "mode chirurgien" (résolution ciblée de bugs complexes ou manipulation de SDK obscurs), et l’assistance pour du code de production (génération de couches techniques répétitives, reviews, agents automatisés). Selon lui, la GenAI ne remplace pas les développeurs — elle libère du temps pour se concentrer sur la réflexion architecturale, l’intégration système et les bonnes pratiques, domaines où l’expertise humaine reste indispensable. Un outil à adopter pour booster sa productivité, mais sans illusions sur la disparition du métier.

Favicons : quand les petits pixels font les grands sites  • Lecodeestdanslepre

L’article explique comment améliorer l’UX d’un site en affichant automatiquement les favicons devant les liens externes, sans JavaScript ni surcharge inutile. L’auteur utilise une approche côté serveur (via un MarkdownProcessor en PHP) pour détecter les liens externes, ajouter dynamiquement leur favicon via l’API publique de DuckDuckGo, et appliquer des attributs de sécurité (target="_blank", rel="noreferrer nofollow"). Le CSS assure un alignement parfait et un soulignement du texte seulement. Résultat : une navigation plus intuitive et visuellement claire, avec un impact minimal sur les performances grâce au lazy loading et au cache HTTP. Une astuce simple mais efficace pour soigner les détails et renforcer la confiance des utilisateurs.

Développer, c’est comme tracer un mandala - Human Coders Blog

L'auteur compare le développement logiciel à la création d’un mandala : un travail minutieux, parfois éphémère, où l’essentiel réside dans le processus plutôt que dans le résultat final. Comme les moines bouddhistes qui effacent leurs mandalas de sable après des jours de travail, les développeurs voient parfois leurs fonctionnalités abandonnées ou modifiées, non par manque de qualité, mais parce que les besoins évoluent. L’article souligne que la valeur du code ne se limite pas à ce qui est déployé, mais aussi à l’apprentissage, aux échanges en équipe et à la compréhension des besoins. Développer, c’est accepter l’impermanence tout en s’investissant pleinement, car c’est dans la démarche collaborative et la qualité du processus que réside la véritable richesse du métier. Une belle métaphore pour rappeler que coder, c’est aussi savoir lâcher prise.

Lesson 1 - Why Foundations? - Scott H Young

Scott H Young présente dans cet article son programme "Foundations", une formation d’un an visant à renforcer les "fondations" universelles d’une vie épanouie. Les fondations sont des pratiques essentielles (comme la forme physique, le sommeil, la productivité, l’alimentation ou les relations sociales) qui, bien que souvent négligées, influencent profondément la qualité de vie. Contrairement aux compétences spécialisées, ces fondations concernent tout le monde et nécessitent un travail délibéré, car notre environnement moderne ne les favorise pas naturellement. L’auteur explique que leur amélioration demande de la concentration et une intégration harmonieuse pour éviter qu’elles ne deviennent une liste de corvées. Le programme propose une approche structurée : commencer par une habitude clé, s’appuyer sur un curriculum ciblé et bénéficier d’un soutien communautaire. L’objectif est de transformer ces pratiques en un mode de vie durable, sans qu’elles ne pèsent comme un fardeau. Une réflexion intéressante sur l’importance de ces bases souvent invisibles, mais déterminantes.

Utiliser Coolify et Nuxt en multi tenant avec des sous-domaines dynamiques

Ce billet explique comment configurer une application multi-tenant avec des sous-domaines dynamiques (ex: clientA.monapp.com, clientB.monapp.com) en utilisant Coolify et Nuxt. Coolify, une alternative open-source aux PAAS comme Heroku, permet de déployer des applications et services managés. L’astuce repose sur l’utilisation des wildcard domains et la modification des Container labels de Traefik pour accepter tout le trafic sur *.monapp.com via une expression régulière (HostRegexp(.+.monapp.com$)). Côté Nuxt, un composableuseTenant()` extrait le sous-domaine de l’URL pour identifier le client. Une solution simple une fois la configuration Traefik bien comprise !

Runtipi | Homeserver management made easy

Runtipi est une solution tout-en-un open source pour la gestion d'applications auto hébergées. Elle contient plus de 250 apps comme Adguard, Crowdsec, Draw.IO ou Nextcloud

De l'importance de bien taguer sa musique, découverte de MusicBrainz Picard • FLOZz' Blog

L’article explique l’importance de bien taguer sa musique pour une collection organisée et cohérente, en s’appuyant sur MusicBrainz Picard, un outil open source qui automatise l’étiquetage en utilisant la base de données collaborative MusicBrainz. L’auteur illustre les défis posés par les variations de noms d’artistes, d’albums ou de genres (ex. : le groupe 7!! et ses multiples dénominations), et montre comment Picard permet de normaliser ces métadonnées. Après une présentation de l’interface et des zones clés (fichiers en vrac, regroupement par album, résultats de la base de données), il détaille le processus pas à pas : import des fichiers, regroupement, recherche automatique ou manuelle d’albums, ajustements (genres, pochettes) et sauvegarde. Des astuces avancées sont partagées, comme la gestion des versions alternatives d’albums, la configuration des langues préférées pour les noms d’artistes, ou le renommage automatique des fichiers. L’outil s’avère indispensable pour maintenir une bibliothèque musicale propre et exploitable, surtout pour les amateurs de playlists ou d’autohébergement (Nextcloud Music). Un guide pratique et complet pour optimiser la gestion de sa discothèque numérique. Lire l’article

Le task runner Castor est maintenant disponible en version 1 ! - JoliCode

Castor, le task runner PHP développé par JoliCode, vient d’atteindre sa version 1.0.0, marquant ainsi sa stabilité et sa maturité. L’outil se distingue par sa simplicité d’utilisation : il permet de définir des tâches automatiques via de simples fonctions PHP, sans besoin de configuration YAML ou de surcouche complexe. Avec un seul fichier castor.php et l’attribut AsTask, il est possible de créer et exécuter des tâches (comme composer install, yarn install, etc.) en une commande. Castor mise sur une API publique stable, une expérience utilisateur optimisée (autocomplétion IDE et shell, logs, documentation complète) et une intégration facile avec l’écosystème PHP (Symfony, Monolog, JoliNotif, etc.). Il propose aussi des fonctionnalités avancées comme l’exécution parallèle de processus, les notifications desktop, les commandes SSH/SCP, et même la possibilité de "repacker" un projet en un exécutable autonome. Disponible en phar ou binaire, Castor s’installe facilement et est déjà adopté par de nombreux développeurs pour automatiser leurs workflows, remplacer les Makefiles ou scripts shell, et simplifier la gestion des tâches quotidiennes. La documentation et les exemples sont riches, et le projet est open source, encouragé par une communauté active. Une alternative moderne et efficace pour l’automatisation en PHP !

Stop copying Symfony docs – learn anemic vs rich models first | by Bohdan Pastukh | Medium

L’article de Bohdan Pastukh critique l’approche souvent enseignée par la documentation Symfony, qui pousse vers un Anemic Domain Model : les entités (comme User) se réduisent à des conteneurs de données avec des getters/setters, tandis que la logique métier est déplacée vers des services externes (ex : ContactDataService). L’auteur souligne que cette pratique, bien que courante dans les tutoriels, conduit à un code moins cohésif et moins orienté objet. Il encourage à privilégier les Rich Models, où la logique métier est encapsulée directement dans les entités, pour un design plus robuste et maintenable.

Exemple critiqué :

class User {
    private string $contactType;
    private string $contact;
    public function setContactType(string $contactType): void { ... }
    public function setContact(string $contact): void { ... }
}
class ContactDataService {
    public function changeContactData(string $contactType, string $contact): void { ... }
}

Alternative suggérée : Intégrer la validation et la logique dans l’entité User elle-même.

DevFest Nantes 2025 - Récap des 2 jours

L’auteur partage son retour sur le DevFest Nantes 2025, une première pour lui en tant que participant et conférencier. Au programme : une keynote sur le "techlore" (folklore technologique moderne) par Dasha Ilina, des découvertes sur les trésors méconnus de PostgreSQL (CTE, JSONB, Foreign Data Wrapper…), une réflexion philosophique sur l’IA et la conscience, une analogie ludique entre Factorio et l’ingénierie logicielle, et un side project technique autour de la série Bref. Il a aussi co-animé un talk sur Kubernetes (Limits, QoS, PriorityClasses) avec Quentin Joly, et assisté à des retours d’expérience sur Karpenter/KEDA pour le FinOps et un agent vocal "trouveur de chaussettes" mêlant RAG et LLM. L’ambiance networking et les soirées ont complété une édition riche en échanges et en apprentissages.

GraphRAG - Augmenter la puissance de votre RAG avec L’intégration Neo4J

L’article présente comment renforcer un système RAG (Retrieval-Augmented Generation) en intégrant Neo4j, une base de données graphe, pour améliorer la pertinence et la précision des réponses générées par un LLM (comme Claude d’Anthropic via AWS Bedrock). L’approche combine le LLM pour extraire et structurer des données semi-structurées (via des prompts ciblés) et Neo4j pour stocker ces données sous forme de graphe, permettant des requêtes complexes et contextualisées. Grâce à LangChain, les questions en langage naturel sont traduites en requêtes Cypher, exploitant ainsi la puissance des relations pré-établies dans Neo4j pour fournir des réponses précises, même sur des données métiers spécifiques. L’auteur souligne aussi l’importance de la sécurité, de la performance, et de l’itération sur les prompts pour optimiser les résultats. Une solution idéale pour des cas d’usage professionnels où la précision et le contexte sont cruciaux.

Visio dans Nextcloud - Aukfood

L’article explique comment mettre en place un système de visioconférence performant dans Nextcloud, en dépassant les limites des solutions traditionnelles comme Talk ou l’intégration de BigBlueButton. Il propose deux méthodes d’installation : un script de déploiement pour un serveur dédié, ou un déploiement en conteneurs Docker (pour le signaling et l’enregistrement), avec des exemples de fichiers docker-compose et de configurations Apache. L’objectif est d’offrir une solution scalable, intégrée à Nextcloud, permettant notamment l’enregistrement de webinaires ou de démonstrations. L’auteur partage aussi des captures d’écran et un exemple concret d’utilisation réussie. Idéal pour ceux qui cherchent à optimiser la visio et l’enregistrement dans leur instance Nextcloud.

How to Audit Web Accessibility with WAVE Extension

L'auteur présente les items analysés par l'extension WAVE pour l'accessibilité. C'est un outil intéressant qui fournit une synthèse rapide.

Lesson 2 - What’s Your “Good Enough”? - Scott H Young

Scott H Young explore dans cet article la notion de "good enough" (assez bien) appliquée aux fondations de la vie quotidienne (santé, relations, sommeil, etc.). Il souligne que pour ces aspects, la médiocrité évitée (atteindre un niveau suffisant) compte plus que la maîtrise absolue, car les bénéfices diminuent rapidement après un certain seuil. Par exemple, passer de zéro à 75 minutes d’exercice par semaine réduit significativement le risque de mortalité prématurée, tandis que doubler ce temps n’apporte qu’un gain marginal. L’auteur insiste sur l’importance de trouver un équilibre personnel, en tenant compte des coûts subjectifs (temps, énergie, sacrifices) et des bénéfices réels. Le défi réside dans le fait que les coûts perçus (comme l’effort pour faire du sport) diminuent avec la pratique régulière, rendant plus facile le maintien d’un niveau satisfaisant. Il invite à réfléchir : dans quels domaines atteignez-vous facilement un niveau "assez bien", et dans quels autres peinez-vous à atteindre même le minimum ? Une approche pragmatique pour optimiser son bien-être sans viser la perfection.

Un site anniversaire pour célébrer les 20 ans de Symfony ! | Les-Tilleuls.coop

Les-Tilleuls.coop a conçu un site immersif pour célébrer les 20 ans de Symfony, basé sur une timeline interactive pilotée par le scroll, avec un design inspiré du logo anniversaire. Chaque section représente une année clé, avec des animations fluides pour plonger l’utilisateur dans l’histoire du framework. Les défis techniques incluaient l’optimisation des performances (chargement progressif des animations) et la gestion des décalages de scroll sous Firefox (corrigés via un ajustement manuel du positionnement). Un projet alliant narratif visuel et expertise UX/UI, pour rendre hommage à un outil central dans leur quotidien depuis 15 ans.

pommee/goaway: Lightweight DNS sinkhole written in Go with a modern dashboard client

Il s'agit d'une alternative à Adguard ou Pi-hole, un intercepteur DNS pour bloquer les requêtes vers les domaines indésirables.

Seeing like a software company

Sean Goedecke s’inspire de Seeing Like a State de James C. Scott pour analyser la tension entre "legibility" (lisibilité) et "illegibility" (illisibilité) dans les grandes entreprises technologiques. Les organisations modernes cherchent à maximiser la lisibilité — rendre le travail mesurable, planifiable et traçable — via des outils comme les OKR ou Jira, même si cela réduit souvent l’efficacité réelle. Pourtant, elles dépendent aussi d’un travail illisible (faveurs, savoir tacite, relations informelles), essentiel mais impossible à formaliser. Cette dualité explique pourquoi les grandes entreprises, malgré leur bureaucratie, persistent à privilégier la lisibilité : elle permet la planification à long terme, la coordination avec de grands clients (comme les entreprises), et une apparence de contrôle, même au détriment de l’agilité et de la productivité individuelle. L’auteur illustre comment les zones d’illisibilité (équipes "tiger teams", canaux informels) coexistent avec les processus officiels, souvent de manière non sanctionnée mais indispensable. Une réflexion sur l’équilibre fragile entre structure et flexibilité, où la lisibilité sert surtout les intérêts stratégiques (contrats, scalabilité) plutôt que l’efficacité opérationnelle pure.

ForumPHP 2025 : Au cœur d'une révolution silencieuse | Les-Tilleuls.coop

Le ForumPHP 2025 marque un tournant discret mais puissant pour l’écosystème PHP : loin d’une simple commémoration des 30 ans du langage, la conférence a mis en lumière une communauté en pleine mutation, entre innovations techniques (FrankenPHP, IA, performance, packaging binaire) et une gouvernance renforcée via la PHP Foundation. Elle souligne la maturité du langage tout en prouvant qu’il continue de repousser ses limites, porté par une dynamique collective tournée vers l’avenir.

Auto-Discovering Console Commands in Power Modules - DEV Community

L’article explique comment automatiser la découverte et l’enregistrement des commandes console dans une application PHP utilisant le framework Power Modules et Symfony Console. L’auteur part du constat que la registration manuelle des commandes (via une boucle sur les modules et leurs composants exportés) est répétitive et peu élégante. Il propose une solution basée sur un PowerModuleSetup dédié, qui s’intègre au cycle de vie des modules pour collecter et enregistrer automatiquement les commandes, en s’appuyant sur le conteneur de dépendances de Symfony. La solution évolue vers une approche optimisée avec un ContainerCommandLoader, permettant un chargement paresseux des commandes. Le résultat est un code plus modulaire, réutilisable et sans duplication, idéal pour les architectures basées sur Power Modules. Le package est disponible via Composer : power-modules/console.

Level Up Your DTOs: Pro Techniques for the Symfony ObjectMapper - DEV Community

Ce billet explique comment tirer pleinement parti du composant symfony/object-mapper, bien au-delà d'une simple hydratation d'objets à partir de tableaux. L'auteur montre que cet outil, basé sur le puissant Serializer de Symfony, permet de gérer des cas avancés comme la création de DTO immutables (avec promotion de propriétés dans le constructeur), la gestion de structures imbriquées et de collections, l'application de logiques personnalisées (ex : conversion de chaînes en DateTimeImmutable), et l'adaptation entre différentes conventions de nommage (snake_case ↔ camelCase). Grâce à des exemples concrets en Symfony 7.3, il démontre comment configurer et utiliser l'ObjectMapper pour des transformations de données élégantes et maintenables, tout en intégrant la validation et la gestion des erreurs. Un guide pratique pour optimiser la manipulation de données dans des applications PHP modernes.

Ndiff ou comment comparer deux scans Nmap

ndiff (Nmap) permet de comparer deux scans réseau au format XML pour détecter rapidement les changements (nouveaux hôtes, ports, services). Installation simple, utilisation en une commande (ndiff scan1.xml scan2.xml), sortie exploitable en texte ou XML pour automatisation. Idéal pour surveiller l’évolution d’un réseau et repérer les anomalies.

Comment arbitrer les développements prioritaires ?

L’article explique comment prioriser les développements logiciels en s’appuyant sur le Domain Driven Design (DDD) : il propose de classer les domaines métier en trois catégories — Core (cœur de métier, différenciant, à développer en interne avec soin), Support (nécessaire mais non différenciant, pouvant être externalisé ou standardisé), et Generic (standard, sans valeur stratégique, à traiter avec des solutions existantes et un investissement minimal). L’idée est d’aligner les ressources et l’effort sur ce qui crée vraiment de la valeur pour l’entreprise, afin de construire une stratégie de développement cohérente et efficace.

Analyser le trafic de votre serveur web avec GoAccess : Le guide du dev paresseux – Idriss Code

Cet article explique comment utiliser GoAccess, un outil open-source d’analyse de logs web, pour surveiller le trafic de son serveur Apache/Nginx directement depuis le terminal ou via des rapports HTML. L’article détaille l’installation sur Ubuntu, la configuration du format des logs, les commandes de base pour analyser les logs (y compris en temps réel), et des astuces pour filtrer le trafic (exclure les bots, les pages admin, etc.). Il propose aussi des alias pour simplifier l’utilisation, des méthodes pour sécuriser les rapports générés, et des techniques avancées comme l’automatisation via des scripts et cron. L’outil est présenté comme une alternative légère, performante et respectueuse de la vie privée à Google Analytics, idéale pour les développeurs qui veulent garder le contrôle sur leurs données. En résumé : installation rapide, configuration flexible, et résultats complets (visiteurs, pages, OS, géolocalisation, etc.) sans dépendre d’un service externe.

Live Components : JavaScript, moi non plus  • Lecodeestdanslepre

Les Live Components de Symfony permettent de créer des interfaces réactives en PHP/Twig, sans JavaScript : une classe PHP gère la logique et l’état (avec #[LiveProp] et #[LiveAction]), tandis que le template Twig affiche et déclenche les actions via data-action="live#action" et data-model. Exemple : un menu dynamique, une recherche en temps réel (avec debounce intégré), ou des mises à jour partielles du DOM — le tout avec typage strict, validation, et optimisations (cache, requêtes limitées). Réactivité côté serveur, simplicité côté dev.

Twig Components : comment Symfony a piqué les super-pouvoirs de React  • Lecodeestdanslepre

Les Twig Components permettent de créer des composants réutilisables et typés en PHP/Twig, inspirés de React/Vue, mais sans JavaScript.

Points clés :

  • #[AsTwigComponent] : Déclare un composant (ex: Hero) avec son template Twig.
  • #[ExposeInTemplate] : Expose des méthodes/propriétés dans le template (ex: {{ punchline }}).
  • Architecture claire : Séparation logique (classe PHP) et affichage (template), avec typage strict.
  • Avantages : Réutilisabilité, encapsulation, cache intégré, et fin du mélange logique/affichage.

Exemple :

#[AsTwigComponent(name: 'Hero', template: 'components/Layout/Hero.html.twig')]
class Hero {
    #[ExposeInTemplate('punchline')]
    public function getPunchline(): ?PunchlineEntity { ... }
}

Des composants modernes, mais 100% Symfony.

Un bon support client fait toute la différence

L'auteur insiste sur la nécessité d'un bon support client : c'est lui qui fait pencher la balance du bon côté pour les retours utilisateurs... et ça fait partie de l'UX

Do you guys really do TDD? | Jared Norman

Jared Norman réagit à un post Reddit sur la pratique réelle du TDD (Test-Driven Development) en entreprise, soulignant que si les tests sont souvent perçus comme une contrainte, leur valeur dépend de leur pertinence et de leur utilité. Il insiste sur trois points clés : privilégier les cas de failure utiles, éviter les tests redondants ou inutiles, et toujours avoir une raison claire d’écrire un test. Les réactions au post varient : certains développent en TDD surtout pour le backend (plus facile à tester), d’autres écrivent les tests après le code, et quelques-uns utilisent l’IA pour générer des tests—une approche que Jared critique, jugeant les outils actuels peu efficaces pour produire des tests de qualité. Il rappelle que le TDD est un outil parmi d’autres, à adapter selon le contexte (durée de vie du code, complexité, besoin de maintenance), et que l’important est d’en tirer un maximum de valeur, surtout dans des projets à long terme. En résumé, le TDD n’est pas une obligation absolue, mais une méthode qui, bien maîtrisée, peut accélérer le développement et sécuriser les évolutions futures.

Bootc et OSTree : Moderniser le déploiement des systèmes Linux

Cet article explique comment Bootc et OSTree permettent de gérer et déployer des systèmes Linux de manière moderne, immuable et reproductible. OSTree, souvent comparé à un "Git pour les filesystems", versionne et distribue des snapshots complets du système, facilitant les mises à jour atomiques et les retours en arrière. Bootc, quant à lui, permet de démarrer un système Linux directement à partir d’une image conteneur (OCI), offrant ainsi une approche similaire à celle des conteneurs pour le déploiement d’OS complets. L’auteur partage son expérience en passant de Packer et NixOS à Fedora Silverblue, puis détaille comment OSTree gère les fichiers système de manière immuable, tout en permettant des modifications locales via des overlays. Il montre aussi comment rpm-ostree remplace les gestionnaires de paquets traditionnels pour garantir l’atomicité des mises à jour. Enfin, il illustre la création et le déploiement d’une image Bootc personnalisée, ainsi que la gestion des mises à jour automatiques via un registre d’images, soulignant l’intérêt de cette approche pour le GitOps et la gestion centralisée des serveurs. Une solution idéale pour ceux qui cherchent à automatiser et sécuriser leurs déploiements Linux. ☕