L'article explique comment implémenter le modèle de conception d'Injection de Dépendances dans Vue 3, en utilisant le conteneur IoC (Inversion de Contrôle) et l'API Provide/Inject de Vue. Il montre comment créer un plugin pour lier des dépendances à l'instance Vue, les rendant accessibles dans toute l'application. L'article illustre également l'utilisation de ces dépendances dans des composables et des composants, favorisant ainsi la maintenabilité et la testabilité du code.
L'article explique comment connecter un conteneur Podman à Open vSwitch, d'abord en créant un namespace réseau avec ip netns add. Ensuite, ajoutez un port à Open vSwitch et configurez-le comme interface interne. Assignez cette interface au namespace créé et activez-la. Construisez une image de conteneur avec les outils réseau nécessaires et lancez le conteneur en utilisant l'option --network pour le connecter au namespace. Cela permet au conteneur de communiquer avec les machines virtuelles connectées à Open vSwitch, intégrant ainsi les conteneurs dans une topologie réseau virtualisée existante.
L'article traite des préoccupations liées à la fouille de données sur le web par les intelligences artificielles, une pratique souvent perçue comme une forme de vol de données. Il explore les moyens pour les créateurs de contenu de protéger leurs œuvres, notamment à travers des procédures comme l'opt-out, qui permet de déclarer son refus de voir ses données utilisées pour enrichir les bases de données de l'IA. L'article aborde également des méthodes techniques pour bloquer les robots aspirateurs, comme l'utilisation de fichiers robots.txt et .htaccess, tout en soulignant l'importance de l'opt-out pour une protection juridique. Il conclut sur la nécessité pour les auteurs de se préparer à ces enjeux, tout en restant ouverts à une collaboration éventuelle avec l'IA.
L'article explique ce qu'est l'authentification multifacteur (2FA ou MFA), à quel besoin elle répond sur quels fondements elle repose. Il décrit aussi sa mise en place côté utilisateur.
L'article détaille la stack technique de Shopify, révélant comment la plateforme gère une échelle massive avec une architecture qui semble simple en surface, mais qui est en réalité le résultat de décisions architecturales astucieuses et de nombreuses années de refactoring. Shopify utilise principalement Ruby on Rails pour son backend, avec des investissements significatifs dans des outils comme YJIT et Sorbet pour améliorer les performances et la sécurité du typage. Le frontend est principalement construit avec React et TypeScript, tandis que React Native est utilisé pour le développement mobile. Shopify s'appuie sur MySQL pour sa base de données principale, avec des stratégies de sharding et de pods pour assurer l'isolation et la scalabilité. Kafka est utilisé pour la messagerie et la distribution d'événements, tandis que des outils comme Memcached et Redis sont utilisés pour le caching et la gestion des files d'attente. L'infrastructure ML de Shopify utilise des embeddings pour la recherche en temps réel et des pipelines de données basés sur Apache Beam. La plateforme est déployée sur Kubernetes, avec des processus CI/CD robustes et des outils d'observabilité pour assurer la fiabilité et la sécurité. Shopify traite des milliards de requêtes par jour, démontrant l'efficacité de sa pile technologique à grande échelle.
L'auteur a besoin de tester des rôles Ansible sur plusieurs versions de clones RHEL. Il a donc installé un multiboot de 4 systèmes : AlmaLinux 8 et 9, RockyLinux 8 et 9. Il détaille dans cet article comment il s'y est pris.
L'article présente une synthèse de cinq publications clés qui ont marqué le domaine des grands modèles de langage (LLM). Il commence par expliquer comment GPT-3 a révolutionné le traitement du langage naturel en permettant à un seul modèle de réaliser diverses tâches grâce au "few-shot learning". Ensuite, il aborde les "scaling laws" qui démontrent l'importance de la taille des modèles pour leur performance. Le concept de "modèles de fondation" est introduit comme une évolution vers des modèles plus génériques capables de s'adapter à différents domaines. L'architecture des Transformers, basée sur des mécanismes d'attention, est également explorée pour son efficacité à grande échelle. Enfin, l'approche RAG (Retrieval-Augmented Generation) est présentée comme une méthode pour améliorer les LLM en intégrant des informations actualisées sans réentraînement coûteux. L'article souligne l'importance de ces avancées pour comprendre l'essor de l'IA générative et des LLM.
L'article explique que PHP, traditionnellement synchrone, peut optimiser des tâches comme les requêtes SQL en les exécutant de manière asynchrone. Cela permet de lancer des opérations non bloquantes, comme des requêtes de base de données ou des lectures de fichiers, pendant que d'autres tâches sont traitées. PHP a introduit des fonctionnalités asynchrones dès la version 4.3 avec les streams, et a évolué avec les générateurs en PHP 5.5 et les fibers en PHP 8.1, permettant une meilleure gestion des coroutines. L'EventLoop est présenté comme un modèle efficace pour gérer plusieurs opérations asynchrones en utilisant des callbacks, bien que cela puisse mener à un "callback hell". Les promesses sont proposées comme solution pour simplifier la gestion asynchrone, transformant les callbacks imbriqués en une chaîne de promesses plus lisible. Enfin, l'article compare des bibliothèques comme ReactPHP et Amp pour la gestion des promesses et des coroutines, recommandant ReactPHP pour les promesses et Amp pour une approche plus naturelle avec les coroutines, tout en suggérant Revolt pour l'EventLoop.
L'article explore l'impact des outils de génération de code assistés par l'IA sur le développement logiciel moderne. Il met en lumière des outils comme Cursor et Windsurf, qui intègrent l'IA pour aider les développeurs à écrire du code plus rapidement et plus efficacement. Cursor, basé sur VSCode, offre des fonctionnalités comme la complétion de code intelligente et un chat intégré pour discuter des améliorations de code. Windsurf, quant à lui, va plus loin en permettant des refactorings complexes et une compréhension multi-fichiers. Cependant, l'article souligne également les défis et les pièges potentiels de ces outils, tels que la génération de code qui compile mais ne fonctionne pas comme prévu, l'accumulation de dette technique, et la dépendance excessive à l'IA qui pourrait entraîner une perte de compétences. En outre, l'article aborde l'intégration de ces outils dans les workflows de développement, notamment avec des plateformes comme Graphite et Diamond, qui automatisent les revues de code et améliorent la qualité logicielle. Enfin, il réfléchit sur l'avenir du métier de développeur, suggérant que les rôles évolueront vers une supervision et une orchestration accrues des outils d'IA, tout en maintenant une compréhension solide des fondamentaux du codage.
L'article explore l'impact de l'IA sur le développement logiciel à travers son expérience personnelle. Initialement sceptique, l'auteur a découvert que l'IA pouvait significativement améliorer sa productivité, notamment en générant du code pour des tâches répétitives et en servant de "rubber duck" pour résoudre des problèmes complexes. Il souligne que l'IA excelle dans l'automatisation des tâches banales, permettant aux ingénieurs de se concentrer sur des aspects plus créatifs et architecturaux du développement. Cependant, il met en garde contre une confiance aveugle dans les outils d'IA, insistant sur la nécessité de revoir et de tester soigneusement le code généré. l'auteur partage également des stratégies pour intégrer l'IA dans les flux de travail, comme l'utiliser dans les éditeurs de code et expérimenter avec différents modèles de prompts. En fin de compte, il encourage les développeurs à adopter l'IA de manière critique et réfléchie pour rester compétitifs dans un paysage technologique en évolution.
L'auteur souhaite sécuriser son réseau local très ouvert, notamment contre les robots d'IA qui consomment des ressources. Il utilise pour cela Reaction, une alternative légère et performante à Fail2Ban, écrite en Rust, pour bloquer les connexions indésirables. Les logs sont centralisés sur une machine via rsyslog, où Reaction sera installé pour surveiller et réagir en exécutant des commandes SSH sur le routeur/firewall, un Turris Omnia sous OpenWRT. La configuration du firewall, basée sur nft, a été modernisée pour supporter à la fois IPv4 et IPv6.
L'article explore comment les développeurs peuvent tirer parti de Cursor pour améliorer leur efficacité en codage. Il met en lumière des techniques pratiques telles que l'établissement de règles spécifiques au projet, la documentation de la structure du projet, et la rédaction de prompts efficaces pour guider l'IA. L'auteur partage également des conseils avancés comme le chaînage de prompts et l'itération progressive pour affiner les résultats. L'article souligne l'importance de superviser l'IA et de l'utiliser comme un accélérateur pour amplifier les compétences existantes plutôt que de remplacer l'expertise humaine.
Une liste de prompts plus ou moins amusants ou utiles
L'article explore l'application de la Clean Architecture dans les applications PHP pour créer des systèmes découplés, testables et maintenables. L'auteur explique comment la Clean Architecture sépare les responsabilités en couches distinctes : Entités, Cas d'utilisation et Interfaces, en insistant sur le fait que la logique métier doit être indépendante des frameworks. Les contrôleurs, souvent surchargés dans les applications MVC traditionnelles, sont allégés en déléguant les tâches aux cas d'utilisation spécifiques. L'article souligne l'importance des interfaces sur les implémentations, facilitant ainsi les tests et la flexibilité. En suivant ces principes, les développeurs peuvent obtenir un code plus propre, plus facile à tester et à maintenir, tout en étant prêt pour une croissance future.
L'article explore une approche pour construire des applications en combinant les principes du Domain-Driven Design (DDD) et de l'architecture Clean. L'auteur propose de se concentrer sur les cas d'utilisation plutôt que sur les entités pures du DDD, en utilisant des cas d'utilisation pour orchestrer la logique métier inter-aggregats de manière claire et ciblée. L'article présente un exemple d'application simple avec des entités comme Student et Course, illustrant comment modéliser le domaine et gérer les relations entre les agrégats. Il préconise l'utilisation de l'ORM pour les opérations C(r)UD et des requêtes JDBC directes pour les requêtes impliquant plusieurs agrégats, s'inspirant des principes CQRS. Les cas d'utilisation sont transactionnels pour garantir la cohérence des états des agrégats. L'article conclut en soulignant les avantages de cette approche, notamment une meilleure compréhension du code et une facilité de test.
Secure Boot est une fonctionnalité de sécurité conçue pour empêcher le chargement de logiciels non autorisés lors du démarrage du système, mais elle peut poser des problèmes pour les utilisateurs de Linux en raison de signatures non reconnues. Les fichiers Shim agissent comme des traducteurs entre Secure Boot et Linux. Signés avec une clé reconnue par Secure Boot, souvent par Microsoft, ils permettent de charger Linux sur des machines avec Secure Boot activé. L'auteur finit en expliquant comment désactiver Secure Boot si nécessaire (distribution Linux non supportée, problème matériel, etc.)
Discord a partagé les détails de l'évolution de son infrastructure de recherche, lui permettant d'indexer des trillions de messages et d'introduire des fonctionnalités comme la recherche multi-serveurs. Initialement, l'architecture reposait sur Elasticsearch avec une indexation paresseuse utilisant Redis, mais la croissance rapide a révélé des limites, notamment des pertes de messages et des surcharges des nœuds. Pour y remédier, Discord a migré vers Google Cloud PubSub pour une livraison garantie des messages et a optimisé l'indexation en masse avec un routeur intelligent. Ils ont également introduit des cellules Elasticsearch pour mieux répartir la charge et isoler les grands serveurs, tout en adoptant Kubernetes pour une orchestration plus efficace. Ces améliorations ont permis une indexation fiable, une meilleure gestion des grands serveurs, une scalabilité accrue et de nouvelles fonctionnalités comme la recherche multi-serveurs, améliorant ainsi l'expérience utilisateur.
L'auteur décrit comment il a utilisé Claude pour développer une simple application météo : depuis le choix des technologies jusqu'à l'implémentation. Il donne quelques conseils sur le bon usage de l'IA pour l'aide au développement : importance du contexte, questionner les choix, etc.
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.
L'article présente le pattern Spécification, à quoi il sert et comment l'implémenter. C'est dans le cadre d'une application Laravel, mais ça se transpose facilement dans d'autres situations.
L'article décrit une mise à jour majeure de l'infrastructure d'un data center personnel, surnommée "la Brasserie". L'autrice raconte comment un incident pendant les vacances de Noël, où son routeur principal est tombé en panne, l'a conduit à une refonte complète de son infrastructure. Elle a remplacé le matériel défectueux par un nouveau routeur MikroTik CCR 2004 et a restructuré son réseau en utilisant plusieurs VLANs pour mieux organiser et sécuriser son environnement. L'article détaille les étapes de la migration, y compris la reconfiguration des hyperviseurs XCP-ng, la mise en place de nouveaux VLANs, et la réinstallation de Xen Orchestra pour la gestion des machines virtuelles. L'infrastructure comprend désormais trois serveurs Dell R630, un NAS Synology, et plusieurs outils open source pour le web, les mails, la comptabilité, et le monitoring. L'autrice envisage des améliorations futures, comme l'ajout d'un cluster Kubernetes et l'amélioration de sa stack de monitoring.
L'article explore les implications de l'utilisation des modèles de langage (LLMs) dans la rédaction de blogs techniques. L'auteur, qui a toujours privilégié l'écriture personnelle et authentique, a mené une expérience en utilisant un LLM pour rédiger un article technique sur son blog. Il a constaté que, bien que les LLMs puissent reproduire un style d'écriture personnel de manière convaincante, le contenu généré reste souvent générique et manque de profondeur contextuelle. L'auteur souligne que, malgré les avancées technologiques, les articles générés par IA nécessitent encore beaucoup de révisions et de guidage pour atteindre un niveau satisfaisant. Il conclut que les LLMs peuvent être utiles pour des sujets très spécifiques ou des retours d'expérience, mais qu'ils ne remplacent pas encore l'authenticité et la richesse d'un article rédigé par un humain.
L'article explique les concepts clés du Site Reliability Engineering (SRE) tels que les SLO (Service Level Objectives), SLI (Service Level Indicators), et Error Budget, introduits par Google. Il souligne l'importance de distinguer les SLA (Service Level Agreements), qui sont des contrats avec des pénalités financières, des SLO, qui sont des objectifs internes pour la fiabilité des services. L'article met l'accent sur l'identification des Critical User Journeys (CUJ), qui sont les parcours utilisateurs critiques pour le succès d'un service. Les SLI sont utilisés pour mesurer la performance de ces parcours, tandis que les SLO définissent des objectifs réalistes pour ces mesures. Enfin, l'Error Budget est présenté comme un outil pour gérer la fiabilité des services, permettant aux équipes de prendre des risques calculés tant que les objectifs de fiabilité sont respectés.
L'article propose une amélioration de l'API pour le ResizeObserver, un outil JavaScript utilisé pour observer les changements de taille des éléments DOM. L'auteur suggère d'encapsuler la logique du ResizeObserver dans une fonction plus simple et réutilisable, ce qui rend son utilisation plus intuitive et proche des modèles d'écouteurs d'événements familiers. En passant un élément et une fonction de rappel à cette fonction personnalisée, les développeurs peuvent facilement réagir aux changements de taille sans avoir à réécrire le code standard du ResizeObserver à chaque fois. De plus, l'article montre comment intégrer des options supplémentaires et gérer l'arrêt de l'observation, offrant ainsi une solution plus flexible et maintenable. Enfin, il mentionne une bibliothèque appelée Splendid Labz qui offre une version améliorée de cet observateur, capable de gérer plusieurs éléments simultanément.
L'article explore l'utilisation de SPIFFE (Secure Production Identity Framework for Everyone) et du mTLS (mutual Transport Layer Security) avec cert-manager dans un environnement Kubernetes. SPIFFE est un standard open-source qui utilise des certificats X.509 pour sécuriser les échanges entre les workloads dans des architectures microservices, contrairement à Kerberos qui est plus adapté aux architectures monolithiques. L'article détaille l'installation et la configuration de cert-manager, un contrôleur Kubernetes pour la gestion des certificats, en désactivant l'approbation automatique des certificats pour une gestion plus sécurisée. Il explique également l'utilisation de trust-manager pour propager les certificats de confiance et du CSI Driver SPIFFE pour monter automatiquement les certificats SPIFFE dans les pods Kubernetes. Enfin, l'article présente une application simple utilisant SPIFFE pour communiquer en mTLS, soulignant l'importance de recharger régulièrement les certificats pour éviter les problèmes d'expiration.
L'article compare 2 manières de sérialiser des données : JSON et Proto (Protocol Buffer). Il conclue en donnant une règle : si des humains vont devoir lire les données échangées, préférer le JSON. Si ce sont des machins, préférer Proto.
L'article critique deux pratiques courantes dans le domaine du monitoring : le sampling des données et l'utilisation de S3 comme solution de stockage principale. Le sampling, bien que présenté comme une solution économique, peut entraîner une perte de granularité cruciale, rendant invisibles des problèmes intermittents et compliquant le débogage. De plus, l'utilisation de S3, bien que durable et économique, introduit des latences importantes et des coûts cachés, rendant les opérations de monitoring inefficaces et coûteuses en situation de crise. L'auteur souligne que ces pratiques peuvent transformer le monitoring en un processus inefficace, avec des conséquences graves lors d'incidents majeurs. Il recommande d'investir dans des solutions de monitoring adaptées pour éviter ces pièges et garantir une visibilité opérationnelle complète.
Il s'agit d'une introduction à l'art génératif : ce que c'est, comment débuter et où "exposer"
L'article souligne qu'il est presque impossible pour les individus d'évaluer les avantages ou les inconvénients des chatbots et des agents par eux-mêmes en raison des biais cognitifs qu'ils déclenchent. Il critique également la mauvaise qualité des recherches dans les domaines de la technologie et de la productivité, souvent influencées par le marketing. L'auteur met en garde contre l'effet de la bulle de l'IA, qui biaise presque tout le monde, y compris les institutions et les autorités. Il conclut en affirmant que, face à ces enjeux, la décision rationnelle et responsable est d'éviter les modèles génératifs jusqu'à ce que la bulle éclate.
L'article met en garde contre les dangers de se fier à son propre jugement concernant l'intelligence artificielle. Il souligne que les mécanismes de notre pensée peuvent être facilement trompés, rendant même les personnes intelligentes vulnérables à la manipulation. L'auteur utilise des exemples tirés de livres sur la psychologie et des expériences personnelles pour illustrer comment les biais cognitifs peuvent fausser notre jugement. Il conclut en insistant sur l'importance de s'appuyer sur des recherches scientifiques impartiales plutôt que sur des expériences personnelles pour évaluer les technologies d'IA.
L'article présente une comparaison des bibliothèques de journalisation pour Node.js, mettant en avant leurs forces et leurs cas d'utilisation spécifiques. Par exemple, Winston est apprécié pour sa grande configurabilité, ce qui le rend idéal pour les applications complexes, tandis que Pino est privilégié pour ses performances élevées, adaptées aux systèmes à haut débit. L'article souligne également l'importance de choisir une bibliothèque de journalisation en fonction des besoins spécifiques du projet, tels que la structure des données, l'expérience de l'équipe et les exigences d'intégration. Il conclut sur une liste de bonnes pratiques et recommandations