Lea Verou explique comment émuler les import maps externes, une solution pour gérer centralement les dépendances JavaScript, grâce à une astuce compatible avec les navigateurs modernes. En injectant dynamiquement une balise <script type="importmap"> via un script classique, il est possible de contourner les limitations actuelles des import maps. La méthode, déjà utilisée par JSPM v4, permet de résoudre les problèmes de URLs relatives et offre une solution simple et efficace pour une gestion centralisée des dépendances.
Ce billet met en lumière l'importance de définir des valeurs par défaut sûres pour les drapeaux (flags) dans les scripts et commandes. L'auteur, Zhe Lu, illustre comment une simple omission, comme oublier le drapeau --dry_run, peut entraîner des conséquences graves. Il recommande de choisir des valeurs par défaut qui minimisent les risques d'erreurs coûteuses, comme par défaut un mode "dry run" ou l'ajout de confirmations explicites. Il souligne également l'importance de rédiger des documentations avec des exemples sécurisés, en évitant les valeurs par défaut dangereuses. Enfin, il suggère de rendre obligatoires les drapeaux spécifiques à l'environnement pour éviter les mélanges de configurations.
Scott H. Young explore la loi de Parkinson, qui stipule que le travail s'étend pour remplir le temps disponible. Bien que cette loi ne soit pas empiriquement valable, elle capture une vérité humaine : le temps nécessaire pour accomplir une tâche peut s'étendre lorsque les contraintes temporelles sont assouplies. L'auteur lie ce phénomène à des observations en matière d'endurance physique, où le cerveau semble limiter la performance pour éviter des dommages corporels. Il se demande si des mécanismes similaires s'appliquent à la fatigue mentale, suggérant des liens entre l'épuisement physique et mental.
L'article explique comment utiliser SOPS (Secrets OPerationS) pour chiffrer et gérer des secrets dans des dépôts de code, seul ou en équipe. Il couvre l'installation de SOPS et de age (outil de chiffrement), la création de paires de clés, et trois cas d'usage : chiffrer des variables d’environnement, des secrets Kubernetes, et des secrets pour des flakes Nix. L'article détaille également l'installation manuelle de SOPS sur des distributions non supportées et fournit des commandes pour chiffrer un fichier texte.
Mitchell Hashimoto partage son parcours d'adoption de l'IA, en six étapes, depuis le scepticisme initial jusqu'à une intégration efficace dans son flux de travail. Il commence par abandonner l'utilisation directe des chatbots pour le codage, soulignant leur inefficacité pour des tâches complexes. Il recommande ensuite d'utiliser des agents, des modèles de langage capables d'interagir avec des outils externes. Hashimoto décrit son expérience avec Claude Code, où il a reproduit manuellement ses propres travaux pour améliorer ses compétences et comprendre les capacités de l'IA. Il insiste sur l'importance de diviser les tâches en étapes claires et actionnables pour maximiser l'efficacité. Son approche nuancée et mesurée offre une perspective équilibrée sur l'adoption de l'IA dans le développement logiciel.
Nirina Rabeson explore la question de l'utilisation de l'IA par les développeurs juniors. Initialement opposée à cette pratique, elle change d'avis après avoir observé des juniors utiliser efficacement des outils comme GitHub Copilot et ChatGPT. Elle souligne que son approche traditionnelle d'apprentissage par la pratique présente des limites, notamment en ne permettant d'apprendre que ce que le mentor connaît déjà. Elle conclut que l'IA pourrait être un atout pour les juniors, à condition qu'ils sachent bien implémenter les feedbacks et traiter la dette technique.
L’article recommande d’abandonner Kaniko et de ne pas se précipiter sur Docker BuildX pour la construction d’images de conteneurs en CI/CD, en proposant plutôt Buildah comme solution plus simple et plus robuste, car il permet de construire des images OCI sans dépendre d’un daemon Docker ni d’une configuration complexe souvent nécessaire avec Docker-in-Docker ou BuildX. L’auteur explique que Kaniko a été abandonné et que BuildX reste fortement lié à l’écosystème Docker et à son daemon, alors que Buildah, issu de l’écosystème Podman, fonctionne de manière plus légère et s’intègre facilement dans des pipelines CI pour construire et pousser des images, éventuellement même via une API sans Dockerfile.
Oskar Dudycz partage une leçon apprise à propos de la gestion des données, notamment des grands entiers (bigints) dans les environnements JavaScript/TypeScript. Il explique les défis de la sérialisation et de la désérialisation des données, en particulier avec JSON, qui ne supporte pas nativement les grands entiers ou les dates. Il décrit ses tentatives pour contourner ces limitations, y compris une approche "sneaky" qui a finalement causé des problèmes, soulignant l'importance de bien parser les données plutôt que de deviner leur type. Il conclut en recommandant une approche plus rigoureuse et moins "sneaky" pour éviter les erreurs.
L'auteur de ce blog, Patrice Ferlet, défend l'utilisation de Makefile face à la popularité croissante de Taskfile (GoTask). Il argue que Makefile est plus simple et accessible, même pour les débutants, et critique les arguments fallacieux souvent avancés pour promouvoir Taskfile. Il propose un exemple basique de Makefile et invite les lecteurs à comparer les deux outils de manière objective, tout en reconnaissant les avantages de GoTask. L'article est écrit sur un ton sarcastique et provocateur, mais avec l'intention de stimuler le débat et la réflexion.
L’auteur explique comment optimiser Doctrine ORM pour éviter non seulement le problème classique du N+1, où l’accès aux relations dans une boucle génère des dizaines voire centaines de requêtes, mais aussi le piège du produit cartésien qui survient lorsqu’on tente de tout charger en une seule requête avec de nombreux LEFT JOIN : bien que n’affichant qu’une requête dans le profiler, ce type de jointures multiplie les lignes SQL retournées (chaque combinaison de collections), ralentit la page et surcharge Doctrine lors de l’hydratation des objets. La solution proposée repose sur une hydratation en plusieurs étapes en chargeant d’abord les entités principales avec une relation, puis en « primeant » séparément les autres relations via des requêtes successives utilisant l’Identity Map de Doctrine, ce qui aboutit à quelques requêtes légères et prévisibles sans explosion des résultats.
L’article explique comment configurer Claude Code, un outil CLI d’IA pour améliorer la productivité sur des projets Symfony et PHP, en insistant sur le fait que la qualité des résultats dépend surtout du bon paramétrage plutôt que du modèle utilisé : il conseille l’intégration de Claude Code dans l’IDE (par exemple via un plugin PhpStorm), la création d’un fichier AGENTS.md décrivant les conventions et règles de codage du projet pour guider l’IA, et l’usage systématique d’une phase de planification (“plan mode”) avant de générer du code afin d’obtenir des résultats précis et cohérents, tout en donnant des exemples pratiques de configuration et bonnes pratiques pour Symfony.
Ce tutoriel explique comment construire une application Symfony capable de gérer un grand volume de documents (jusqu'à un milliard) en utilisant MongoDB. Dans cette deuxième partie, l'auteur montre comment configurer une application Symfony avec le Doctrine MongoDB ODM pour mapper les documents à des classes PHP, et utiliser Symfony UX pour créer une interface utilisateur moderne. Le tutoriel couvre la configuration initiale de l'application, la cartographie des documents, et la mise en place d'un tableau de bord pour afficher des informations générales, une liste de stations, et des détails spécifiques comme les prix des carburants et leur historique.
L'auteur, Alexandre Daubois, partage son expérience après avoir rejoint les équipes principales de trois projets open-source majeurs : PHP, Symfony et FrankenPHP. Contrairement à ses attentes initiales, il découvre que ces projets ne fonctionnent pas selon des plans rigides et des roadmaps détaillés, mais plutôt par l'improvisation et l'adaptation aux besoins de la communauté. Il souligne que l'expertise ne signifie pas tout savoir, mais plutôt oser affronter l'inconnu. Il met également en lumière l'importance de lâcher prise et de ne pas être obsédé par le code parfait, une leçon qu'il a apprise en tant que réviseur de code.
Cet article explore les fonctionnalités avancées du composant EventDispatcher de Symfony, au-delà de son utilisation basique pour les notifications. Marcel Moll y partage des patterns qui peuvent transformer la structure d'une application, comme les événements stoppables, les priorités, les subscribers, et les points d'extension. Il aborde également les défis liés au traçage du code événementiel et quand il est approprié d'utiliser EventDispatcher. L'auteur partage son expérience et ses recommandations pour une utilisation efficace de cet outil puissant.
L'article explique comment éviter de réécrire des expressions régulières pour les routes dans Symfony. Il met en avant la classe Requirement de Symfony, qui contient des motifs pré-définis pour des paramètres de route courants comme les UUID, les slugs ASCII, et les formats de date. Plutôt que d'écrire manuellement des regex complexes, on peut simplement utiliser les constantes fournies par cette classe, ce qui simplifie et standardise le code. L'auteur encourage à utiliser ces outils intégrés pour gagner en efficacité et en clarté.
Ce partage explique comment optimiser les performances d'un site Symfony en minifiant le CSS et le JavaScript grâce au bundle SensioLabs Minify. La minification réduit la taille des fichiers en supprimant les espaces et commentaires inutiles, améliorant ainsi la vitesse de chargement. L'article détaille l'installation et la configuration du bundle, ainsi qu'une astuce pour désactiver la minification en mode développement tout en l'activant en mode production.
L'article explore l'utilisation de l'API Popover pour créer des infobulles (tooltips) en s'appuyant sur les fonctionnalités natives du navigateur plutôt que sur des bibliothèques JavaScript. L'auteur explique comment cette API simplifie la gestion des interactions clavier, de l'accessibilité et des événements, réduisant considérablement le code nécessaire. Il compare l'ancienne méthode utilisant des bibliothèques avec la nouvelle approche basée sur l'API Popover, soulignant les avantages en termes de simplicité et de robustesse. L'article note également que l'API est bien supportée par les navigateurs, bien que certaines fonctionnalités soient encore en développement.
L’article présente un patron appelé “Orchestrated UI” qui combine Symfony UX, Mercure et Temporal pour créer des interfaces utilisateur live pilotées par des workflows côté serveur sans gestion d’état complexe côté frontend, illustré par un exemple de commande de repas où chaque étape du processus est orchestrée par un workflow et poussée en temps réel au navigateur via Mercure afin de recharger dynamiquement les composants Symfony Live sans JavaScript sophistiqué ; l’intérêt principal est de simplifier la construction d’applications web interactives à états complexes tout en restant dans un seul codebase PHP, avec des exemples et une bibliothèque nommée StepKit disponibles pour tester cette approche.
Joppe De Cuyper explore l'idée d'un monde où l'IA génère du code sans intervention humaine, remettant en question l'importance des principes de "clean code". Il présente un projet Symfony sans code source, où seul un ensemble de spécifications et de tests sont maintenus. L'IA génère le code nécessaire à chaque build, le rendant obsolète après utilisation. Cette approche permet une amélioration continue du code grâce aux avancées de l'IA, sans héritage de code ancien. Le projet, illustré par une API de gestion de tâches, montre comment les spécifications détaillées peuvent remplacer le code source traditionnel.
Cet article explique comment utiliser MariaDB-Backup (Mariabackup) pour sauvegarder et restaurer des bases de données MariaDB ou MySQL de manière performante. Contrairement à mysqldump, qui effectue des sauvegardes logiques lentes, Mariabackup réalise des sauvegardes physiques "à chaud", plus rapides et adaptées aux environnements de production exigeants. Le tutoriel couvre l'installation, la création de sauvegardes, la restauration, les sauvegardes incrémentielles et les fonctions avancées. Il souligne aussi la différence entre sauvegardes logiques et physiques, ainsi que la compatibilité de Mariabackup avec les fonctionnalités spécifiques de MariaDB.