Un billet d'humeur... dont je plussoie la conclusion
Un aide-mémoire pour l'installation de tout ce qui est cité dans le titre
L'article explore comment l'intelligence artificielle peut être utilisée comme un outil pour améliorer la pensée critique et la rigueur intellectuelle. Plutôt que de blâmer l'IA pour ses défauts, l'auteur souligne que c'est l'usage que nous en faisons qui détermine son impact. L'article propose des exemples de prompts pour utiliser l'IA de manière constructive, encourageant les utilisateurs à poser des questions exigeantes et réfléchies. Il met également en garde contre les limites de l'IA et insiste sur l'importance de l'engagement et de la curiosité humaine pour en tirer le meilleur parti.
L'auteur décrit l'utilisation de Stylelint pour vérifier la bonne application de conventions CSS. Il donne plusieurs exemples de conventions, et conclut avec une configuration complète.
Suite de https://css-tricks.com/a-better-api-for-the-resize-observer/ , l'article propose une refonte des API pour MutationObserver et IntersectionObserver afin de les rendre plus simples à utiliser. L'auteur montre comment simplifier l'utilisation de ces observateurs en utilisant des motifs de rappel et d'écouteurs d'événements. Pour MutationObserver, il explique comment observer les mutations du DOM et se déconnecter proprement en utilisant une méthode disconnect. Concernant IntersectionObserver, il détaille comment observer les changements d'intersection d'un élément avec un ancêtre ou une fenêtre de visualisation. Enfin, l'article mentionne une bibliothèque pratique, Splendid Labz, qui offre des utilitaires pour ces observateurs, facilitant leur intégration dans des projets web.
L'auteur donne une série de conseils pour l'écriture de regex en JavaScript, du plus basique au plus complexe : ajout de flags, groupes de capture nommés, etc.
L'article traite des problèmes courants liés au DNS dans Kubernetes, en se concentrant sur trois principaux problèmes :
- Problème des ndots : Kubernetes tente d'être intelligent en essayant plusieurs suffixes DNS pour résoudre les noms, ce qui peut entraîner une charge accrue sur le serveur DNS et une latence plus importante. La solution consiste à utiliser des noms de domaine complets (FQDN) ou à ajuster la valeur de ndots.
- Problème de Lameduck : Lors de la suppression d'un pod, il peut y avoir un délai avant que kube-proxy ne mette à jour les règles iptables, ce qui peut entraîner des erreurs de connexion. La solution consiste à configurer un délai de grâce (lameduck) pour permettre à kube-proxy de se réconcilier.
- Problème de conntrack : Il existe un bug non corrigé dans kube-proxy en mode iptables qui provoque une perte de trafic UDP lors de la suppression d'un pod, affectant particulièrement le DNS. Les solutions partielles incluent l'ajout d'un timeout DNS ou la limitation du redémarrage des pods CoreDNS.
L'article souligne que ces problèmes peuvent avoir un impact significatif sur les performances et la fiabilité des clusters Kubernetes, en particulier ceux hébergés sur des plateformes comme AWS EKS.
L'article présente une liste de conseils pour les tests avec PHPUnit, certains spécifiques à Laravel et d'autres non. J'en retiens :
- assertEqualsCanonicalizing qui permet de vérifier que 2 tableaux sont "égaux", sans tenir compte de l'ordonnancement des valeurs
- l'attribut #[\PHPUnit\Framework\Attributes\DoesNotPerformAssertions] qui permet de dire à PHPUnit qu'un test ne vérifie aucune assertion (ce qui déclenche normalement une erreur dans PHPUnit)
- l'attribut #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] permet de préciser à PHPUnit d'exécuter les tests dans plusieurs processus... ça permet par exemple de définir une même constante dans 2 méthodes de tests de la même classe.
- la méthode $this->markTestSkipped('test are skipped because ...'); permet de sauter l'exécution d'un test, $this->markTestIncomplete('test are incomplete but not in error'); permet d'indiquer qu'un test est incomplet (??) et $this->fail('test are failed !'); permet de marquer un test comme échoué quoi qu'il arrive.
- phpunit --order-by=random permet de lancer les tests dans un ordre aléatoire - c'est très pratique pour détecter les dépendances implicites entre les tests. phpunit --order-by=random --random-order-seed=1234 permet même de rejouer le même ordre aléatoire, notamment pour reproduire un échec.
- phpunit --stop-on-failure --stop-on-error permet de stopper l'exécution des tests dès la première erreur rencontrée
- enfin en utilisant l'attribut #[\PHPUnit\Framework\Attributes\Group('mon_super_groupe')], on peut exclure les tests de ce groupe vendor/bin/phpunit --exclude-group mon_super_groupe ou au contraire ne jouer que les tests de ce groupe vendor/bin/phpunit --group flaky
L'article introduit les Signaux en tant que nouveau modèle mental pour la réactivité dans Angular, en se concentrant sur des variables réactives plutôt que sur des flux de données. Contrairement à RxJS, où les données sont traitées comme des flux, les Signaux permettent de lire les valeurs comme des variables, simplifiant ainsi la gestion des dépendances et des réactions. Cependant, cette approche nécessite une attention particulière pour éviter les dépendances implicites et les recalculs inattendus. Bien que les Signaux ne remplacent pas RxJS, ils offrent une alternative efficace pour la gestion de l'état local et les données dérivées dans les composants.
L'auteur expose les points qui font que l'IA n'est pas prête pour remplacer les développeurs... mais va quand même causer de sacrés dégâts, notamment chez les développeurs junior.
L'article présente l'utilisation de base de Imagemagick
L'auteur présente les PSR - PHP Standard Recommandations : leur histoire, à quoi elles servent, et surtout il détaille les principales :
- PSR-1, normes de codage de base
- PSR-2, guide de style - remplacé par PSR-12
- PSR-3, interface pour les logger
- PSR-4, autoloading
- PSR-7, HTTP message interface
- PSR-11, interface pour les containers d'injection de dépendance
L'auteur présente les éléments à prendre en compte pour générer un flux RSS :
- choix du format (RSS, Atom, JSON)
- balises selon le format
- découvrabilité du flux
- catégories
- adaptation des règles HTTP selon la charge du serveur
L'auteur expose plusieurs concepts et bonnes pratiques de git, en revisitant Blanche-Neige. C'est assez drôle, bien écrit et surtout très compréhensible.
Symfony dispose de fonctionnalités sur les chaînes de caractères depuis longtemps (Symfony 5) avec plein d'utilitaires très pratiques : gestion de l'unicode, enchaînement de méthodes (interface fluente), prise en charge de l'internationalisation, etc.
L'article explique comment implémenter le design pattern Strategy dans Symfony 7 pour gérer des comportements différents sous certaines conditions sans utiliser de multiples instructions if. Ce modèle permet de créer des stratégies distinctes et testables individuellement, rendant le code plus élégant et professionnel. L'article décrit la structure du modèle, composée d'une classe de contexte, de classes de stratégie individuelles et de classes auxiliaires. Trois exemples concrets sont fournis : une règle métier, des opérations avec API Platform, et une recherche intelligente avec Doctrine. L'utilisation du pattern Strategy dans Symfony 7 est présentée comme une solution efficace pour centraliser et simplifier la gestion des comportements variés dans une application.
L'article explique comment améliorer la structure et la performance des services dans Symfony en utilisant les "service subscribers". Il commence par souligner les problèmes liés au chargement automatique de nombreux services, qui peuvent entraîner une instanciation inutile de dépendances et compliquer l'extensibilité. La solution proposée est d'implémenter l'interface ServiceSubscriberInterface, ce qui permet de charger les services de manière paresseuse, c'est-à-dire uniquement lorsqu'ils sont réellement nécessaires. L'article montre également comment créer une classe de base abstraite pour centraliser la logique des services, améliorant ainsi la maintenabilité et l'expérience des développeurs. Enfin, il aborde l'utilisation de cette approche dans un bundle Symfony pour gérer des dépendances optionnelles, rendant les services plus modulaires et légers.
Zeropod est un outil Kubernetes qui permet de mettre en pause les conteneurs inactifs et de les restaurer automatiquement lors d'une nouvelle connexion TCP, offrant ainsi une solution de "scale-to-zero". Il écoute sur le même port que l'application et restaure le conteneur en quelques millisecondes, ce qui est presque imperceptible pour l'utilisateur. L'état complet de l'application est préservé grâce à la sauvegarde de la mémoire sur le disque pendant le checkpointing. Zeropod ajuste également les demandes de ressources à l'état réduit si le cluster le supporte et permet la migration des pods mis à l'échelle sans redémarrage. Cet outil est particulièrement utile pour économiser des ressources tout en maintenant la réactivité des applications. L'auteur reste néanmoins sceptique sur l'usage en l'état puisqu'il est impossible d'avoir des containers en prod sans liveness / readiness.
L'article explique comment créer un cas de test HTML simple pour signaler un bug ou un comportement inattendu. Il recommande d'utiliser des outils en ligne comme jsfiddle ou codepen, mais préfère souvent les URLs de type data: pour partager du code rapidement. L'auteur illustre cela avec un exemple de code HTML et JavaScript qui extrait une valeur de style, montrant les différences de résultats entre les navigateurs. Il démontre comment condenser ce code en une seule ligne et l'utiliser directement dans la barre d'URL d'un navigateur. Enfin, il mentionne avoir ouvert un rapport de bug pour le problème discuté.
L'article est une introduction pour comprendre et utiliser correctement les Accessible Rich Internet Applications. Il explique que ARIA est utilisé pour améliorer l'accessibilité des sites web en fournissant des informations supplémentaires aux technologies d'assistance, comme les lecteurs d'écran. L'auteur souligne l'importance d'utiliser des éléments HTML natifs chaque fois que possible et de ne pas modifier leur sémantique inutilement. Il met également en garde contre certaines idées fausses courantes et fournit des conseils pour aborder ARIA de manière efficace. Enfin, l'article insiste sur le fait que l'utilisation correcte d'ARIA peut grandement améliorer l'expérience des utilisateurs dépendant de technologies d'assistance.