Tous les articles
-
Nombres à virgule flottante : pourquoi 0.1 + 0.2 n'égale pas 0.3
La virgule flottante binaire représente la plupart des fractions décimales de façon approximative, si bien que les calculs accumulent des erreurs d'arrondi ; comparer avec des tolérances, additionner avec soin, utiliser des entiers ou des types décimaux pour l'argent et les comptages, et afficher avec suffisamment de chiffres pour permettre un aller-retour exact.
-
Appeler l'API TypeSafe depuis un agent : forme de la requête, erreurs, tentatives et épinglage de version
Le contrat documenté dont un agent a besoin pour appeler Jev sans couche de discussion (chat) : POST /v1/systemone avec une clé Bearer, un état (state), un nom de modèle et une carte de questions typées ; des réponses indexées comme les questions, plus un bloc d'usage ; les codes 401, 422, 429 et 529 avec un backoff exponentiel ; des alias qui évoluent et des identifiants versionnés qui restent fixes ; les valeurs par défaut du SDK pour les tentatives, et la compétence (skill) dédiée aux agents de codage.
-
Concevoir un tableau de bord d'exploitation : une question par panneau, un écran par public
Partir des questions auxquelles une personne d'astreinte doit répondre, attribuer un panneau à chaque question, ordonner les panneaux du général au particulier, normaliser les unités et les axes, utiliser des variables de modèle plutôt que des copies, relier chaque alerte déclenchant un appel au tableau de bord dont elle a besoin, et conserver la définition du tableau de bord sous contrôle de version.
-
Modes simulation (dry-run) pour les actions d'un agent : montrer le plan avant le changement
Doter chaque outil qui modifie un état d'un mode qui calcule et retourne le plan concret (quels objets, quels champs, combien) sans l'appliquer, valider le plan côté serveur là où le système le permet, exiger que le plan soit produit et revu avant l'appel réel, et comparer le résultat réel avec lui a posteriori.
-
Bases de données éphémères en conteneurs pour les tests d'intégration
Démarrer le véritable moteur de base de données dans un conteneur jetable par exécution de tests, garder ses données en mémoire, appliquer les migrations une seule fois sur une base de données modèle et la copier pour chaque fichier de test ; les tests sollicitent alors le véritable planificateur, les véritables contraintes et le véritable comportement d'isolation, au lieu d'un substitut en mémoire.
-
Arrêt propre : gérer SIGTERM dans les services
Les runtimes de conteneurs envoient SIGTERM et attendent un délai de grâce avant SIGKILL ; un service doit cesser d'accepter du nouveau travail, terminer ou restituer le travail en cours, fermer ses connexions, et se terminer dans ce délai. Ignorer le signal transforme chaque déploiement en interruption de service.
-
Les formulaires qui déclarent des contraintes HTML natives produisent moins de rejets de validation côté serveur par soumission que les formulaires validés uniquement en JavaScript personnalisé
Hypothèse : le navigateur bloque la soumission interactive d'un formulaire dont les contraintes natives (required, pattern, type, min et max) échouent, tandis que MDN note que l'appel de submit() contourne ce blocage et que novalidate le désactive ; la proposition est que les formulaires portant des contraintes natives reflétant les règles du serveur atteignent le serveur avec moins de rejets par soumission que les formulaires dont les vérifications ne vivent que dans des scripts personnalisés, parce que les vérifications natives continuent de fonctionner quand le script ne se charge pas ou échoue ; un test A/B est proposé, sans résultat avancé.
-
Upsert, row limits and identifier quoting across PostgreSQL, MySQL, SQLite and SQL Server
PostgreSQL's ON CONFLICT, MySQL's ON DUPLICATE KEY UPDATE, SQLite's PostgreSQL-style ON CONFLICT and SQL Server's MERGE are three families of upsert syntax, LIMIT/OFFSET has at least three shapes, and a quoted identifier means double quotes, backticks or square brackets depending on the engine.
-
Codes de sortie de find et xargs : le 0/>0 grossier de find face à l'échelle 123-127 de xargs
find ne garantit que 0 en cas de succès complet et une valeur supérieure à 0 en cas d'erreur, volontairement sans plus de détail, alors que xargs définit une échelle précise pour l'échec de la commande lancée : 123 pour une sortie non nulle ordinaire, 124 pour la sortie 255, 125 pour une commande tuée par un signal, 126 pour une commande non exécutable et 127 pour une commande introuvable. Chaîner find et xargs oblige à vérifier deux logiques différentes de codes de sortie dans un même pipeline.
-
Réexpliquer pour vérifier la compréhension : l'expliquer à un lecteur nommé, puis comparer avec la source
Rédiger ou formuler à voix haute une explication destinée à un lecteur précis et moins informé met au jour des lacunes que la relecture dissimule ; une expérience publiée en 2014 a montré que le simple fait de s'attendre à enseigner un passage produisait un rappel plus complet et mieux organisé que le fait de s'attendre à un test, et l'explication écrite peut être vérifiée phrase par phrase par rapport à la source.
-
Où se trouvent les identifiants sur une machine de développement qu'un processus agent peut lire
Un agent qui s'exécute sous l'identité de la personne qui l'utilise peut lire tout ce que cette personne peut lire : variables d'environnement, fichiers d'identifiants des CLI, connexions aux registres de conteneurs, clés SSH, historique du shell et magasins proches du navigateur. Connaître ces emplacements permet à une personne opérant le système de décider ce qui doit rester hors de portée de l'agent et ce qui doit être renouvelé après un incident.
-
Confusion de dépendances : quand un paquet public masque un paquet privé
Si une build résout les noms de paquets à la fois sur un index privé et un index public, une personne malveillante qui publie le nom privé en public avec une version supérieure peut faire installer son propre code ; la documentation de pip qualifie justement --extra-index-url pour des paquets privés de non sûr pour cette raison. Les défenses consistent en des espaces de noms liés à un seul registre, un index unique servant de proxy, l'épinglage par empreinte (hash) et la revendication des noms.
-
Charger YAML en toute sécurité
Les chargeurs YAML complets peuvent instancier des objets arbitraires à partir de nœuds étiquetés ; toujours utiliser un chargeur sûr, figer la sémantique de version YAML, et valider le résultat par rapport à un schéma avant utilisation.
-
Dialectes de motifs glob : signification de * et ** dans .gitignore, .dockerignore, bash, Python et GitHub Actions
Les caractères * et ** n'ont pas le même sens selon l'outil qui évalue le motif : un motif sans barre oblique dans .gitignore correspond à toutes les profondeurs, alors que la même ligne dans .dockerignore ne correspond qu'à la racine du contexte. La récursion globstar de bash est optionnelle, et fnmatch de Python ne tient même pas compte des chemins.
-
L'en-tête Link et les types de relation de lien
La RFC 8288 permet à toute réponse HTTP de porter des liens typés dans un en-tête Link : <cible>; rel="relation" plus des paramètres facultatifs anchor, hreflang, type, title et media. Les noms de relation proviennent du registre IANA (next, prev, canonical, alternate, describedby, preload) ou sont des URI absolues pour des extensions privées. C'est ainsi que les réponses non HTML pointent vers leurs voisines, et comment le code 103 Early Hints indique à un navigateur quoi récupérer en avance.
-
Ajouter un dépôt APT tiers selon la méthode actuelle : fichiers .sources deb822 et trousseaux Signed-By
apt-key est obsolète : la méthode prise en charge pour ajouter un dépôt tiers signé consiste à placer un trousseau de clés dans /etc/apt/keyrings et à le référencer par l'option Signed-By, soit au format classique sur une ligne, soit au format deb822 .sources, plus récent, que Debian 12/13 et les versions actuelles d'Ubuntu savent lire.
-
Examiner les enveloppes de commande à l'aide d'un substitut enregistreur d'arguments
Vérifier comment l'enveloppe de commande d'un agent de codage transforme des valeurs contrôlées par la personne qui l'utilise en intention exécutable. Cette méthode originale substitue au programme réel un enregistreur d'arguments inoffensif et examine directement la frontière.
-
Planifier une mise à niveau majeure sur place de RHEL avec Leapp
Leapp met à niveau RHEL 8 vers 9, ou RHEL 9 vers 10, sur place, mais seulement une fois résolus tous les constats bloquants de son rapport de préparation. Cette méthodologie couvre l'exécution de l'évaluation, l'enregistrement des réponses aux questions posées et la raison pour laquelle la sauvegarde précède l'étape de mise à niveau proprement dite.
-
Rendu indirect piloté par le GPU : construire les charges de dessin sur le périphérique
Utiliser les résultats de visibilité du GPU pour générer des draws indirects, avec une capacité de tampon explicite, la réinitialisation des compteurs, la synchronisation et une référence CPU pour la validation.
-
Une petite zone de swap avec un swappiness faible réduit les destructions OOM du service principal sur des serveurs à mémoire tendue
Hypothèse : sur des serveurs à vocation unique dont l'ensemble de travail remplit presque la RAM, une zone de swap modeste combinée à un vm.swappiness faible permet au noyau de sortir de la mémoire anonyme froide vers le disque lors de pics brefs, si bien que le service principal est moins souvent détruit par l'OOM killer que sur le même hôte sans swap, au prix d'une latence occasionnelle.
Lisible par machine : JSON