Ce billet de blog explore la stratégie d'utilisation des "boring technologies", c'est-à-dire des technologies maîtrisées mais moins tendance, en les poussant à leurs limites avant de changer. L'auteur, Jérémy DECOOL, souligne l'importance de bien connaître les capacités des outils existants, comme les bases de données relationnelles ou les monolithes, avant d'adopter des solutions plus complexes comme le NoSQL ou les microservices. Il met en garde contre l'anticipation et le marketing, qui peuvent pousser à changer de technologie trop tôt, et insiste sur l'importance de l'expérience et de la connaissance approfondie des outils pour identifier le bon moment pour évoluer.
L'article explore comment les principes de conception d'objets de Matthias Noback, introduits en 2019, sont désormais intégrés directement dans la syntaxe de PHP 8.5. Autrefois fastidieux à implémenter, ces principes sont maintenant simplifiés et plus intuitifs. L'article met en lumière l'encapsulation, un des premiers principes, et montre comment la visibilité asymétrique (introduite en PHP 8.4) permet de protéger l'état interne des objets tout en réduisant la verbosité du code. Trois approches pratiques sont présentées pour gérer la visibilité des propriétés, illustrant comment PHP moderne facilite l'application de ces bonnes pratiques de conception.
Cet article de Ihor Pal sur Medium explique le flux de traitement d'une requête HTTP dans une architecture propre (Clean Architecture). Il détaille comment une requête traverse les différentes couches (Domain, Use Cases, Interface Adapters, Frameworks) en montrant les structures de données échangées (DTOs, Entités, Value Objects) et l'orientation des dépendances. L'article illustre également la distinction entre les entités ORM et les entités de domaine, et met en lumière deux points clés d'inversion de dépendance. Un diagramme de flux complet et une structure de projet pratique en PHP/Symfony sont fournis pour clarifier le processus. L'objectif est de donner une vision dynamique de l'architecture propre, au-delà de la simple description statique des couches.
Cet article explique les language tags, un concept clé pour l'internationalisation (i18n) et la localisation (l10n) des applications web. Il définit ces termes selon le W3C et détaille les standards du Web (RFC 5646, BCP 47) qui régissent les language tags. Ces tags, composés de subtags séparés par des tirets, permettent d'identifier précisément une langue, une écriture, une région ou d'autres variantes. L'article fournit des exemples et des explications sur la syntaxe des language tags, offrant ainsi une compréhension claire de leur utilisation pour adapter les applications à différents marchés linguistiques et culturels.
Ploum exprime son inconfort face aux excuses pour les réponses tardives aux emails, soulignant que les échanges par email sont asynchrones et ne devraient pas générer de pression. Il encourage à ne pas s'excuser pour les délais de réponse, à ne pas justifier les retards par des détails personnels, et à ne répondre que si cela apporte une réelle valeur. Il propose même de reporter la réponse ou de ne pas répondre du tout, surtout si l'email initial n'était pas urgent ou important.
Ce guide pratique oppose logs et métriques pour une meilleure observabilité des systèmes. Les métriques indiquent qu'un problème existe, tandis que les logs expliquent quoi. Les logs, coûteux mais détaillés, sont utiles pour le débogage et la conformité, tandis que les métriques, économiques et rapides, servent aux alertes et aux tableaux de bord. Les logs structurés sont préférables pour leur recherche facilitée. Les quatre signaux clés de Google (latence, trafic, erreurs, saturation) sont essentiels pour surveiller la santé d'un service. Le choix entre logs et métriques dépend de l'objectif et des ressources disponibles.
L'article explore l'importance de la mise en cache au niveau de l'application, en se concentrant sur les pools de cache, les tags et l'invalidation. À travers un projet Symfony réaliste, l'auteur montre comment introduire progressivement la mise en cache, identifier les problèmes en production et améliorer la conception du cache. Les exemples illustrent l'évolution de la mise en cache, en commençant par une approche naïve et en introduisant des techniques plus avancées comme les pools de cache dédiés et l'invalidation fine-grained à l'aide de tags. L'objectif est de montrer comment concevoir un cache fiable en production, en abordant les problèmes courants et les solutions applicables au-delà d'un seul framework.
Ce guide explique comment renforcer la validation des données dans SQLite, une base de données permissive par défaut. Il propose d'utiliser des clés primaires de type INTEGER PRIMARY KEY NOT NULL, de spécifier explicitement si les colonnes acceptent des valeurs NULL, et d'utiliser le mot-clé STRICT dans les déclarations de tables pour activer des vérifications de type strictes. Le guide aborde également l'utilisation des contraintes CHECK() pour des validations supplémentaires. Idéal pour ceux qui veulent éviter les erreurs de données et les problèmes ultérieurs.
L’article explique pourquoi les leaders tech doivent maîtriser la résolution de problèmes, une compétence clé selon le World Economic Forum. Il propose une méthode rigoureuse en 4 étapes (PDCA : Plan, Do, Check, Act) pour transformer les obstacles en opportunités d’apprentissage. L’accent est mis sur l’importance de bien définir le problème (écart entre situation actuelle et souhaitée), d’identifier les causes racines (via la technique des "5 pourquoi"), de tester des contre-mesures, et d’ancrer les apprentissages. L’auteur souligne les pièges à éviter, comme le fingerpointing ou l’attente passive, et encourage à impliquer toute l’équipe pour développer une culture d’amélioration continue. Une approche inspirée du lean management, adaptée au software engineering.
Ce billet explique l'impact souvent méconnu des délimiteurs Twig sur l'espace blanc dans le HTML généré, causant des problèmes de mise en page, des diffs Git bruyants et des réponses HTTP plus lourdes. L'auteur partage son expérience et détaille comment maîtriser ces délimiteurs ({{-}, {%-}, etc.) pour contrôler précisément l'espace blanc et améliorer la qualité du code. Une lecture essentielle pour les développeurs Symfony souhaitant optimiser leurs templates.
L'article critique l'organisation typique des projets informatiques, où les fichiers sont regroupés par type (Commandes, Contrôleurs, Formulaires, Entités, etc.) plutôt que par fonctionnalité. L'auteur illustre comment cette approche, bien que pratique au début, devient problématique à mesure que le projet grandit, entraînant une dispersion des fonctionnalités et un codebase difficile à maintenir. Il suggère une organisation par domaine ou fonctionnalité pour faciliter l'évolution et l'entretien du projet.
Ce billet explique comment générer des PDF à partir de HTML et CSS en utilisant Weasyprint, un outil Python. L'auteur, insatisfait par LaTeX, préfère utiliser des langages qu'il maîtrise mieux. Le tutoriel commence par un exemple simple de conversion HTML en PDF, en passant par l'ajout de styles CSS et diverses astuces pour personnaliser les documents. Il met l'accent sur l'importance des métadonnées et de l'accessibilité des PDF. J'ai découvert des astuces étonnantes : les types de page (page: xxx), la récupération du décompte (target-counter, non documentée dans la MDN !), les sélecteurs de page (:left :right), les règles de marge (@bottom-left @bottom-right), la position "running", etc.
L'article explore l'utilisation pratique des outils de codage basés sur l'IA pour les développeurs responsables. Il met en lumière comment des outils comme Copilot, Cursor, Claude et ChatGPT peuvent améliorer le flux de travail en gérant des tâches fastidieuses, en aidant à naviguer dans des codebases complexes et en facilitant l'implémentation de fonctionnalités dans des langages inconnus. L'auteur partage des techniques concrètes pour utiliser ces outils de manière responsable, en insistant sur la qualité du code, la sécurité, la confidentialité et l'approbation des outils par l'employeur. L'article se concentre sur des applications pratiques, notamment la compréhension de codebases inconnus et la gestion des changements de rupture lors des mises à niveau.
Ce billet explore des techniques Git avancées pour optimiser votre workflow de développement. Il met en lumière l'importance de maintenir un historique Git logique et cohérent, en utilisant des outils comme git rebase -i pour réécrire l'histoire avant de partager vos commits. Il aborde également l'utilisation efficace du staging area avec git add -p pour créer des commits atomiques, et le workflow "fixup" pour corriger des erreurs sans encombrer l'historique. Enfin, il souligne l'importance de travailler avec des branches éphémères et de les rebaser régulièrement pour éviter les conflits et maintenir un historique propre.
L’article explique que dans le développement logiciel, l’ego des développeurs est souvent la vraie source de dysfonctionnements en équipe car il transforme les débats techniques en combats de personnalité et freine l’amélioration collective; l’egoless programming consiste à laisser le problème guider les décisions plutôt que la défense de ses propres idées, en restant ouvert aux idées des autres, en acceptant les retours sans défensivité et en dissociant sa valeur personnelle de la qualité du code, ce qui améliore collaboration, innovation et résultats produit.
Le dépôt GitHub "awesome-cursorrules" de PatrickJS propose des fichiers de configuration pour personnaliser et améliorer l'expérience avec l'éditeur de code AI Cursor. Ces fichiers, nommés ".cursorrules", permettent de définir des règles et comportements spécifiques pour adapter l'IA aux besoins particuliers de chaque projet. Les avantages incluent une personnalisation du comportement de l'IA, une cohérence dans le respect des standards de codage, une meilleure prise en compte du contexte du projet, une productivité accrue, une meilleure cohésion d'équipe et une intégration de connaissances spécifiques au projet. Le dépôt contient des règles pour divers frameworks, bibliothèques, outils de développement et langages de programmation.
L'article explore comment optimiser l'utilisation des agents de codage (comme Claude Code ou GitHub Copilot) pour améliorer la productivité des développeurs. Basé sur des retours d'expérience, il propose plus de 40 bonnes pratiques pour rendre les bases de code plus "agent-friendly". Parmi les conseils clés : intégrer la connaissance du domaine dans le code (via des fichiers dédiés, des commentaires, des noms explicites), améliorer la "SEO" du code pour faciliter la recherche, et suivre des conventions claires. L'objectif est de permettre aux agents de travailler de manière autonome et efficace sur des tâches complexes.
Atomic Design est un modèle de composition d'interfaces utilisateur (UI) bien connu, mais souvent mal utilisé comme architecture d'application complète. Cet article explique que Atomic Design excelle dans l'organisation de l'UI, mais ne répond pas aux questions de domaine, d'orchestration des flux applicatifs ou de gestion de l'état métier. Il propose de séparer clairement la composition de l'UI (où Atomic Design a sa place) de l'architecture applicative, avec des règles strictes pour éviter le couplage caché et maintenir la réutilisabilité des composants. Les features deviennent ainsi l'unité architecturale principale, contenant la logique métier et l'orchestration. Cette séparation améliore également la stratégie de test, avec des tests visuels pour l'UI et des tests d'intégration pour les features.
Cet article de Wanadev Digital explique comment utiliser l'Event Bus de Symfony Messenger pour créer une architecture découplée. Il compare l'EventDispatcher et l'Event Bus, soulignant leurs différences fondamentales : synchrone vs asynchrone, couplage faible vs fort, et scalabilité. L'Event Bus permet un traitement asynchrone, une sérialisation des messages, et une meilleure traçabilité. L'article guide pas à pas pour configurer et utiliser l'Event Bus, idéal pour des tâches comme l'envoi d'emails ou la génération de PDF. Prérequis : comprendre les concepts de Commands et Queries.
L'auteur propose une alternative à la "Ralph loop", appelée "Eric loop", inspirée par le personnage calculateur et manipulateur d'Eric Cartman de South Park. Contrairement à la Ralph loop, la boucle Eric implique une séparation des tâches en plusieurs étapes (planification, exécution, vérification, review) et une formalisation des tâches par une IA. L'auteur illustre ce concept en créant un projet nommé Tiny-till, une application de caisse simple pour marchands ambulants, en utilisant un outil appelé Task-o-matic. L'idée est de mieux contrôler et optimiser l'utilisation des modèles d'IA en séparant les préoccupations et en adaptant les prompts à chaque phase de l'exécution des tâches.