L'auteur explique pourquoi c'est une bonne pratique
L'auteur a nommé son article en référence à l'excuse improbable du "chien qui a mangé mon travail" :) L'architecture en micro-services n'est pas responsable de problèmes, mais les mauvaises décisions si ! L'auteur donne quelques pistes pour repérer les problèmes, et surtout comment s'en prémunir.
L'auteur explique à quoi servent les DTOs et comment les utiliser dans le contexte d'une application Symfony en particulier.
L'auteur montre comment se prémunir des attaques XSS dans Symfony : pour les templates Twig en les échappant systématiquement, pour les entrées utilisateur en les "sanitizant" et en utilisant une politique de sécurité de contenu (CSP)
Il est possible d'appliquer des styles CSS à SVG. Il y a 3 cas principaux : SVG inline (facile à manipuler en CSS), SVG externe (limité), et SVG via
L'auteur présente brièvement ce qu'est la "screaming architecture" et ses avantages
L'idempotence est un concept clé en informatique et en mathématiques, particulièrement crucial dans la conception de systèmes fiables. Une opération idempotente produit le même effet, peu importe le nombre de fois qu'elle est exécutée. Par exemple, soumettre un formulaire plusieurs fois ne devrait générer qu'un seul résultat, et une requête de paiement ne devrait débiter le compte de l'utilisateur qu'une seule fois, même en cas de réessais réseau. Pour implémenter l'idempotence, des techniques comme l'utilisation de jetons uniques, des verrous pessimistes ou optimistes, et des index uniques dans les bases de données sont employées. Ces méthodes assurent que les opérations répétées n'altèrent pas l'état du système de manière indésirable, garantissant ainsi la cohérence et la fiabilité des applications.
Le changement de contexte, ou la nécessité de passer rapidement d'une tâche à une autre, est identifié comme le principal obstacle à la productivité des développeurs. Chaque interruption, même mineure, peut coûter jusqu'à 23 minutes de travail productif et dégrade la qualité du code en brisant la concentration. L'article explore les raisons pour lesquelles les développeurs sont particulièrement affectés, notamment en raison de la complexité des tâches de programmation qui nécessitent une mémoire de travail élevée. Des stratégies sont proposées pour minimiser ces interruptions, telles que la planification de périodes de travail ininterrompues et l'utilisation d'outils de communication asynchrones, afin d'améliorer la productivité et le bien-être des équipes de développement.
L'article met en lumière les erreurs fréquentes commises lors de la création de diagrammes d'architecture technique. Parmi celles-ci, on trouve la réalisation de diagrammes théoriques plutôt que concrets, le mélange de niveaux d'abstraction, la surcharge d'informations, l'utilisation de flèches non étiquetées, des compositions trompeuses, l'absence de contexte, et le manque de texte explicatif accompagnant les diagrammes. Pour éviter ces écueils, il est recommandé de se concentrer sur des représentations spécifiques et claires, de séparer les niveaux d'abstraction, de réduire le nombre de préoccupations simultanées, d'étiqueter les relations, de fournir un contexte adéquat, et d'accompagner les diagrammes de descriptions détaillées.
L'article explique la Content Security Policy (CSP) comme un mécanisme de sécurité essentiel pour les sites web, agissant comme un videur strict qui contrôle les contenus autorisés à s'exécuter. La CSP est configurée via un en-tête HTTP qui spécifie les sources autorisées pour les scripts, styles, images, etc. Elle protège contre les attaques XSS, clickjacking, et autres injections malveillantes en bloquant les contenus non autorisés. L'article détaille comment configurer la CSP dans un fichier nelmio_security.yaml, en définissant des directives comme default-src, script-src, et style-src pour restreindre les sources de contenu. Il souligne également l'importance de tester la CSP en mode report-only pour identifier les violations sans impacter les utilisateurs.
Les façades de service offrent une alternative à l'injection de dépendances traditionnelle dans Symfony, particulièrement utile pour les utilitaires comme les loggers ou les rapports d'erreurs, où elles simplifient le code et réduisent les instanciations inutiles. Elles sont également efficaces pour les objets paresseux et les situations où l'inversion de contrôle (IoC) est impossible, comme l'instanciation manuelle de classes ou l'utilisation de bibliothèques externes qui ne supportent pas l'IoC.
Cet article explique comment créer un menu hamburger accessible et fonctionnel sans utiliser JavaScript, en s'appuyant sur l'API Popover. Cette approche permet de garantir une navigation fluide et accessible pour tous les utilisateurs, y compris ceux utilisant des lecteurs d'écran. L'article détaille les étapes pour structurer le menu en HTML sémantique, utiliser les attributs Popover pour gérer l'affichage du menu, et ajouter des attributs ARIA pour améliorer l'accessibilité. Des exemples de code et des conseils pratiques sont fournis pour animer l'ouverture et la fermeture du menu, tout en respectant les bonnes pratiques d'UX.
Le legal design est une approche qui applique les principes du design centré sur l'humain pour rendre les systèmes, services et documents juridiques plus compréhensibles et accessibles. L'objectif est de permettre à tous, experts ou non, de mieux comprendre et utiliser les informations légales. L'article explore les enjeux du legal design dans la fonction publique, notamment pour simplifier l'analyse des documents juridiques et adresser des messages clairs à divers profils techniques. Des techniques concrètes sont présentées, comme la structuration de l'information dans les contrats, l'utilisation d'un langage clair et la contextualisation des informations. Plusieurs exemples de projets utilisant le legal design illustrent son impact positif sur la compréhension et l'autonomisation des utilisateurs.
Cet article détaille une méthode progressive pour implémenter une politique de sécurité de contenu (CSP) sur un site web. La CSP est un en-tête HTTP crucial pour se protéger contre les attaques XSS. L'auteur propose cinq niveaux d'implémentation, allant de la configuration de base à des restrictions avancées, en passant par l'utilisation de Content-Security-Policy-Report-Only pour éviter les blocages intempestifs. Chaque niveau réduit progressivement les risques en restreignant les sources de scripts, styles et autres ressources. L'article insiste sur l'importance de maîtriser son front-end et de collaborer entre équipes pour une mise en œuvre efficace. Des conseils pratiques et des exemples de configurations sont fournis pour chaque étape.
L'article présente des pratiques modernes pour le développement en Python. Il recommande d'utiliser des outils comme pipx ou uv pour exécuter des applications Python dans des environnements virtuels séparés, évitant ainsi d'installer des packages directement dans l'installation Python de l'OS. Pour le développement, il est conseillé d'utiliser des gestionnaires de versions comme pyenv ou des conteneurs de développement pour gérer plusieurs versions de Python. L'utilisation de Poetry, uv ou PDM est encouragée pour structurer les projets, tandis que Hatch est préféré pour les bibliothèques Python. Les outils de formatage comme Ruff et les linters comme flake8 sont essentiels pour maintenir un code propre et cohérent. Les type hints et les outils comme mypy améliorent la qualité du code, surtout pour les applications critiques. Pytest est recommandé pour les tests, avec des plugins comme pytest-randomly pour éviter les interférences entre tests. Les projets doivent être empaquetés en wheel pour les bibliothèques et en OCI ou PyInstaller pour les applications. Enfin, des pratiques comme l'utilisation de f-strings, de datetime avec time zones, et de pathlib pour les chemins de fichiers sont également mises en avant pour un code Python moderne et efficace.
L'auteur explique qu'il a récemment dû mettre à jour son API vers une nouvelle version tout en maintenant l'ancienne pour les clients existants. Il a d'abord pensé à utiliser /v1/products pour la version actuelle et /v2/products pour la nouvelle, mais cette approche viole les principes REST et complique la maintenance. Les URL versionnées créent un couplage serré avec les clients, rendant difficile la gestion des versions obsolètes et entraînant une duplication de code. Une alternative RESTful consiste à utiliser les en-têtes HTTP pour négocier les versions, ce qui permet de maintenir des URI stables et de faciliter la compatibilité ascendante. Cependant, cette méthode nécessite que les clients configurent les en-têtes, ce qui peut être non trivial avec certains outils ou bibliothèques.
L'article explique comment protéger les sites WordPress contre les attaques par injection SQL, une méthode couramment utilisée par les hackers pour accéder aux bases de données. Les sites WordPress, représentant 43% des sites web, sont des cibles privilégiées en raison de leur popularité. Une injection SQL peut endommager un site, voler des données et verrouiller l'accès administrateur. Pour se protéger, il est crucial de valider les entrées utilisateur, éviter le SQL dynamique, mettre à jour régulièrement les thèmes et plugins, utiliser un pare-feu, cacher la version de WordPress, personnaliser les messages d'erreur de la base de données, limiter les permissions des rôles utilisateurs, activer l'authentification à deux facteurs, supprimer les fonctions inutiles de la base de données, surveiller l'activité du site et effectuer des sauvegardes régulières. En cas d'attaque, il faut vérifier la base de données, supprimer le code malveillant, restaurer une sauvegarde propre, changer tous les mots de passe et renforcer la sécurité du site.
L'architecture hexagonale, également connue sous les noms de Ports et Adapters, Onion Architecture, ou Clean Architecture, est un modèle architectural qui vise à protéger le code métier des dépendances externes. Elle utilise des adapteurs pour encapsuler les dépendances externes, permettant ainsi une indépendance totale du code métier. Les avantages incluent la facilité de développement et de test, la protection contre le vendor lock-in, et la possibilité de changer les implémentations externes tardivement. Cependant, cette architecture peut entraîner une phase de conception plus longue et des pertes d'opportunités d'optimisation. Elle est particulièrement adaptée aux modules de taille moyenne ou plus grands, aux projets longs, et aux environnements multiplateformes. Elle est moins adaptée aux petits modules ou aux projets nécessitant un démarrage rapide.
L'article aborde l'importance de connaître le temps de redémarrage des machines et de s'assurer que les équipements et services reprennent correctement après un reboot. Il soulève des questions sur la fréquence des redémarrages et leur impact sur la disponibilité des services. L'article met en avant la nécessité de tester régulièrement les procédures de redémarrage pour garantir la résilience des systèmes et minimiser les interruptions.
L'article explore comment intégrer l'IA dans le développement logiciel tout en maintenant des normes de qualité élevées. Il souligne que bien que l'IA puisse générer du code rapidement, la qualité, la cohérence architecturale et la maintenance à long terme restent des défis.
L'article propose d'utiliser des tests comme contrats pour guider l'IA, en s'inspirant du Test-Driven Development (TDD) et de l'architecture hexagonale. Les tests fournissent un langage formel et sans ambiguïté, permettant à l'IA de mieux comprendre les attentes. En intégrant ces tests dans le processus de développement, l'IA peut itérer sur le code jusqu'à ce que tous les tests soient réussis, assurant ainsi une meilleure qualité du produit final.
L'article conclut que l'expertise humaine reste cruciale pour utiliser efficacement l'IA dans le développement logiciel, notamment en matière de principes algorithmiques et de gestion de projet.