Tous les articles
-
Servir les requêtes de plage pour des téléchargements reprenables
Un serveur qui annonce Accept-Ranges: bytes, répond à Range: bytes=start-end par 206 Partial Content et Content-Range, évalue If-Range par rapport à un ETag fort, et renvoie 416 avec Content-Range: bytes */length pour les plages non satisfaisables, permet aux clients de reprendre des téléchargements interrompus et de lire des parties de fichiers volumineux. Ces étapes couvrent le côté serveur, le côté client et les vérifications.
-
Verrouillage de compte et qualité des mots de passe sous Linux avec pam_faillock et pwquality
pam_faillock verrouille un compte après plusieurs échecs de connexion, et la commande faillock permet d'inspecter ou d'effacer cet état ; pam_pwquality applique les règles de robustesse des mots de passe définies dans pwquality.conf. Les deux s'intègrent à PAM via authselect sur la famille RHEL et via pam-auth-update sur Debian/Ubuntu, et non en modifiant directement la pile PAM à la main.
-
Pourquoi NTP reste nécessaire dans les machines virtuelles malgré les agents invités et les horloges paravirtualisées
Plusieurs couches aident à gérer l'heure dans une machine virtuelle (kvm-clock, agents invités, services d'intégration Hyper-V), mais aucune ne remplace un client NTP ou chrony exécuté dans l'invité. Cet article explique ce que fait réellement chaque couche et pourquoi la synchronisation de l'heure reste du ressort du système invité.
-
Passation de maintenance et facteur bus : ce qu'un successeur doit pouvoir faire dès le premier jour
Un projet survit à son mainteneur lorsqu'une seconde personne détient déjà chaque compte et chaque clé, peut effectuer une publication à partir des seules étapes écrites, et sait où les décisions sont consignées. La PEP 541 montre ce qui se passe autrement sur PyPI : un projet n'est considéré comme abandonné que lorsque le propriétaire est injoignable, qu'aucune publication n'est parue depuis douze mois et que sa page d'accueil ne montre aucune activité, et ce n'est qu'alors qu'il peut être confié à un nouveau propriétaire au titre de la règle d'abandon. Le transfert de dépôt de GitHub déplace les issues, les pull requests, les étoiles et les observateurs avec le code.
-
Environnements de prévisualisation par branche : une copie déployée par pull request, détruite à la fusion
Donner à chaque pull request une copie fonctionnelle de l'application sur sa propre URL, construite une seule fois par commit, nommée d'après le numéro de la pull request, alimentée avec les données de départ locales et connectée à des services tiers en bac à sable ; publier l'URL sur la pull request, plafonner la concurrence, et supprimer la copie et ses données à la fusion, à la fermeture ou après une période d'inactivité.
-
Un journal de décision personnel : rédiger l'entrée avant de connaître le résultat
Un format proposé pour le journal de décision d'un individu : une entrée par choix non trivial, rédigée avant d'agir, avec les options envisagées, le résultat attendu, la confiance exprimée sous forme de chiffre et une date de relecture ; la relecture ultérieure compare l'attente au résultat et sépare la qualité de la décision de la chance liée au résultat.
-
Une base de connaissances personnelle en dossiers de texte brut : inbox, notes, sources, projects, archive
Une organisation de dossiers pour une base de connaissances personnelle qu'une personne ou un agent peut tenir pendant des années : cinq dossiers racine aux durées de vie différentes, une note par fichier avec un identifiant stable et un petit en-tête, un fichier d'index tenu à la main, et une règle d'archivage plutôt que de suppression ; la structure reste plate afin que la recherche et les liens ne dépendent pas de l'emplacement d'un fichier.
-
Travailler dans un grand dépôt avec le sparse checkout et le clone partiel
Le sparse checkout limite les répertoires qui apparaissent dans l'arbre de travail (le mode cône énumère des répertoires), le clone partiel avec --filter=blob:none retarde le téléchargement du contenu des fichiers jusqu'à ce qu'il soit nécessaire, et le clone superficiel tronque l'historique ; les trois résolvent des problèmes différents et se combinent, mais le clone partiel exige que le dépôt distant promisor reste accessible.
-
Les points de terminaison GET modifiant l'état sont la principale source d'actions involontaires déclenchées par des clients automatisés
Hypothèse : dans les applications web qui effectuent des changements d'état sur GET (liens d'action dans des e-mails, page?do=delete, approbations en un clic), la plupart des changements d'état sans session utilisateur correspondante sont causés par des clients automatisés tels que les préchargeurs de liens, les scanners de sécurité de messagerie, les crawlers et les bibliothèques HTTP qui relancent leurs requêtes, que la RFC 9110 s'attend explicitement à voir récupérer librement des URI à méthode sûre et répéter des requêtes idempotentes après un échec ; déplacer ces actions derrière POST supprime presque entièrement cette catégorie.
-
Paquet malveillant installé : contenir son exécution avant de remplacer les identifiants
Proposition de procédure pour réagir à des paquets npm ou Python malveillants : arrêter l’exécution et la publication, préserver les preuves, révoquer les identifiants exposés depuis un système sain, rechercher la persistance dans les dépôts, reconstruire les environnements et vérifier le rétablissement.
-
JSON Lines : une valeur par ligne pour les journaux, les jeux de données et les réponses en flux
JSON Lines (aussi appelé NDJSON) place une valeur JSON complète par ligne, en UTF-8 sans marque d'ordre des octets et terminée par un saut de ligne ; les fichiers peuvent être complétés par ajout, découpés, parcourus avec grep et compressés, et un flux tronqué ne perd que sa dernière ligne. Les séquences de texte JSON de la RFC 7464 ajoutent un octet séparateur d'enregistrement pour la récupération. Utiliser l'un ou l'autre plutôt qu'un grand tableau JSON unique chaque fois que des enregistrements sont produits ou consommés un par un.
-
Parallax occlusion mapping : tracer un champ de hauteur avec des limites prévisibles
Utiliser les intersections avec un champ de hauteur, dépendantes du point de vue, pour positionner le détail de surface, en tenant compte des limites explicites d'échelle, d'échantillonnage et de silhouette.
-
Un carnet de trajet en voiture ou à vélo : distance, durée et conditions, avec l'instrument de mesure précisé
Un protocole proposé pour un enregistrement par trajet : nommer l'instrument (compteur kilométrique, capteur de roue avec son réglage de circonférence, ou une application GPS) dans l'en-tête et ne jamais mélanger les instruments dans une même colonne de distance, horodater le début et la fin au format RFC 3339, consigner l'itinéraire, les arrêts et les conditions, et considérer comme attendue une dispersion sur un itinéraire répété là où gps.gov indique que la précision des smartphones se dégrade près des bâtiments, des ponts et des arbres.
-
Présentation d'un service de feature flags : ensembles de règles, évaluation locale et déploiements progressifs stables en pourcentage
Présentation de la conception d'un service de flags : les définitions de flags sont servies sous la forme d'un ensemble de règles versionné par environnement, des SDK mettent en cache et évaluent localement, un contexte d'évaluation sert au ciblage, un regroupement par hachage stable évite qu'un utilisateur bascule pendant un déploiement progressif, des valeurs pré-évaluées sont fournies aux clients non fiables, et un rapport permet de repérer les flags morts.
-
Installer et sécuriser le serveur OpenSSH intégré à Windows Server
Add-WindowsCapability installe la fonctionnalité OpenSSH Server ; le fichier sshd_config se trouve sous %ProgramData%\ssh. Les clés autorisées d'un administrateur doivent figurer dans administrators_authorized_keys, protégé par une ACL restrictive, faute de quoi le serveur les ignore, et DefaultShell détermine ce qu'exécute réellement une session SSH.
-
Interpolation de snapshots : mettre en tampon une ligne temporelle distante stable
Afficher l'état distant entre des snapshots horodatés, choisir un délai qui absorbe la gigue réseau et traiter les échantillons manquants sans confondre interpolation et prédiction.
-
Figer les dépendances NuGet : PackageReference, gestion centralisée des paquets et packages.lock.json
NuGet résout la version applicable la plus basse de chaque paquet au moment de la restauration, si bien qu'une restauration peut dériver quand de nouvelles versions ou des plages flottantes apparaissent ; une build reproductible déclare les versions une seule fois dans Directory.Packages.props, active RestorePackagesWithLockFile pour que packages.lock.json enregistre la fermeture transitive complète, versionne le fichier de verrouillage pour les applications, et restaure avec --locked-mode en intégration continue.
-
Enregistrer les hypothèses comme des données de premier ordre
Rattacher les hypothèses aux décisions qui en dépendent, avec un moyen de vérification et un déclencheur de réexamen.
-
__slots__ et les dataclasses slots=True : des instances plus légères, aux attributs fixes
Déclarer __slots__ remplace le __dict__ propre à chaque instance par un stockage fixe, ce qui économise de la mémoire et rejette les attributs mal orthographiés ; @dataclass(slots=True) le génère à partir des champs mais renvoie une nouvelle classe, ce qui casse super() sans argument et nécessite weakref_slot=True pour les références faibles. Chaque classe de base doit elle aussi déclarer des slots.
-
Mise en cache des builds en intégration continue : clés, repli de restauration et empoisonnement du cache
Un cache d'intégration continue est indexé par un hachage du fichier de verrouillage, avec des clés de repli ordonnées, cantonné aux branches avec la branche par défaut comme parent partagé, et évincé selon la taille ou l'ancienneté ; les caches de couches Docker doivent être exportés et importés explicitement en intégration continue. Les caches ne sont pas signés, donc tout ce qui peut écrire dans une portée de confiance peut injecter du code dans les builds suivantes.
Lisible par machine : JSON