HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

Les meilleurs longs formats de Hacker News, relus plus calmement.

2849 articles Page 3/285 Sans filtre

06:05

Keeping a Postgres Queue Healthy

Postgres est souvent utilisé pour des files de travaux où les lignes sont très transitoires et le débit cumulé est élevé, ce qui exige un nettoyage efficace des tuples morts. Le mécanisme MVCC de Postgres laisse des tuples morts après les DELETE, et VACUUM ne peut les retirer tant qu'une transaction active maintient l'horizon de visibilité, ce qui alourdit les scans d'index. Dans des bases partagées par files, analyses et autres charges, des requêtes longues ou qui se chevauchent peuvent empêcher VACUUM d'avancer, et les timeouts standards ne permettent pas de contrôler la concurrence par classe de trafic, malgré les améliorations récentes de Postgres. PlanetScale propose Traffic Control avec des Resource Budgets pour limiter la concurrence et la consommation par type de requête, et des tests montrent que cette approche permet de préserver l'efficacité du VACUUM et la santé de la file. Pour maintenir une file saine, il convient d'assurer que VACUUM peut suivre le rythme des suppressions, d'ajouter des retries côté applicatif pour les requêtes tuées et, si nécessaire, de mettre en place un contrôle de trafic granulaire.

06:05

Midnight Captain – A midnight commander inspired file manager

Ce gestionnaire de fichiers en terminal est inspiré des concepts de projets existants et propose une interface à deux panneaux avec exploration arborescente et icônes Nerd Fonts. Il fournit des raccourcis de type Vim, la sélection visuelle, des opérations sur les fichiers (copier, couper, coller, renommer, supprimer), une création intelligente de fichiers et une recherche fuzzy. Le programme permet aussi l'accès distant par SFTP via une commande ssh intégrée, offre une palette de commandes avec complétion et des options de tri et d'affichage des fichiers. L'installation se fait via un script unique qui télécharge un binaire précompilé pour macOS et Linux ou par compilation locale nécessitant Go 1.22+, le binaire étant placé par défaut dans ~/.local/bin. Le projet est développé de manière personnelle sans acceptation de pull requests, mais les utilisateurs peuvent ouvrir des issues ou forker le dépôt.

06:05

Optimal Strategy for Connect 4

L'article décrit une solution faible et sans recherche pour le jeu Connect Four (7x6) qui garantit la victoire du premier joueur en mémorisant un petit arbre d'ouvertures dont les feuilles possèdent des « astuces simples ». Ces astuces sont formalisées par des « Steady State Diagrams » qui fournissent un ordre de priorité unique pour choisir un coup (gagner, bloquer, !, @, |/espace, +, =, -) et incluent des motifs connus comme la stratégie Claimeven. La construction combine algorithmes génétiques pour proposer des états candidats, vérification par force brute, recherche et élagage d'ouvertures, ainsi que visualisation par graphes et forces miroir. Le résultat est une structure de moins de 10 000 nœuds tenant environ 150 kilo-octets qui permet de jouer optimalement sans calcul au moment de la partie, avec une sélection de coup en O(wh). L'auteur présente cette approche comme une exploration de la compression informationnelle et de l'émergence de structures à plusieurs résolutions dans l'arbre de jeu, offrant une alternative compacte et visualisable aux solutions fortes.

06:05

Dcmake: A new CMake debugger UI

CMake dispose d'un mode --debugger depuis la version 3.27 permettant un contrôle interactif via le Debugger Adaptor Protocol, et l'auteur a développé en une journée une application nommée dcmake qui exploite ce mode. dcmake est une interface native multiplateforme avec GUI basée sur Dear ImGui (branche docking) offrant fenêtres détachables, persistance d'état, et commandes classiques de débogage comme F10, F11 et F5. L'outil permet de démarrer CMake en pause, d'exécuter pas à pas les scripts CMakeLists.txt et les scripts en mode -P, mais il ne permet pas de déboguer les invocations --build. Sur macOS et Linux il utilise GLFW avec rendu OpenGL 3, sur Windows il s'appuie sur Win32 et DirectX 11, et il gère les chemins Unicode sur Windows sans manifeste UTF-8 en évitant l'I/O standard du C++. L'auteur souligne que l'IA a grandement accéléré le développement de l'interface et annonce que dcmake sera inclus dans la prochaine version de w64devkit.

06:05

What is a property?

L'auteur explique que le modèle abstrait des tests basés sur les propriétés — propriétés, générateurs et framework — est trop simpliste pour couvrir des cas concrets. À travers un exemple de base de données, il illustre que les préconditions rendent nécessaire l'usage de générateurs dépendants, car des générateurs indépendants produisent généralement des entrées invalides. Il montre comment déplacer des vérifications dans le générateur — voire calculer la propriété directement dans celui‑ci — et souligne que des combinateurs comme forAll (et des outils comme Hypothesis) permettent d'écrire des générateurs dépendants sans scinder génération et assertion. Il critique certaines bibliothèques (notamment le port Rust quickcheck et proptest) pour avoir mal défini la frontière en échantillonnant entièrement les entrées avant d'exécuter la propriété, ce qui empêche un intercalage nécessaire des calculs, tandis que d'autres approches (comme Hegel ou Hypothesis) conservent des mécanismes permettant ce mélange. L'article se veut une exploration des besoins expressifs des bibliothèques PBT plutôt qu'une prescription, et l'auteur invite à la discussion en renvoyant à ses travaux connexes sur le sujet.

06:04

The Soul of an Old Machine

L'auteur explique qu'il s'attache au matériel depuis l'adolescence, prenant soin de choisir des appareils aux caractéristiques uniques plutôt que les plus populaires. Il décrit plusieurs appareils qui ont marqué son parcours, notamment un HP Compaq nx6310 qu'il a utilisé durant des années et sur lequel il a installé ses premières distributions Linux. Un MacBook Pro 13 pouces Late 2013, reçu en 2014, est devenu son outil principal grâce à son écran Retina, sa solidité et la compatibilité avec des outils Unix, même s'il montre son âge sur les usages modernes. Pour prolonger la vie de ses appareils il pratique des réparations et des modifications, comme remplacer des composants dans un iPod, souder une résistance sur un NAS ou changer la batterie du MacBook, et il a résolu un problème de Wi-Fi en remplaçant la carte par une Intel AX210 via un adaptateur. Après ces efforts le MacBook continue à servir pour du travail concentré et du développement sous NixOS, et l'auteur conclut que des marques axées sur la réparabilité comme ThinkPad ou Framework répondent à sa recherche d'appareils durables.

06:04

Software Preservation Group: C++ History Collection

Ce site rassemble des documents de conception, du code source et d'autres matériaux relatifs à la naissance, au développement, à la normalisation et à l'utilisation du langage C++. La chronologie présentée retrace les étapes majeures depuis le début de "C with Classes" en 1979 jusqu'à la ratification de la norme ISO en 1998 et aux travaux ultérieurs sur C++0x et ses évolutions. La collection contient des versions historiques de cfront (Release E, 1.0, 2.0, 3.0), leurs codes sources et une documentation détaillée publiés pour la recherche historique avec l'autorisation des ayants droit. On y trouve aussi les documents de standardisation (WG21/ISO), des articles et papiers de Bjarne Stroustrup et d'autres contributeurs, ainsi que des références aux implémentations comme GNU g++ et aux bibliothèques en C++. La page inclut enfin des remerciements à de nombreux contributeurs et archives qui ont fourni les sources, transcriptions et informations historiques utilisées pour compiler la collection.

06:04

How to build a `Git diff` driver

L'auteur explique qu'il existe peu de documentation facilement découvrable sur la création d'une commande externe pour git diff et qu'il présente sa démarche pour combler ce manque. Git diff fournit sept arguments au programme externe (nom de fichier, chemin "avant", SHA-1 "avant", mode "avant", chemin "après", SHA-1 "après", mode "après"), en utilisant /dev/null pour les créations/suppressions et des points pour les champs non pertinents. Dans de nombreux cas la méthode textconv suffit, mais lorsqu'il faut exposer davantage d'informations (par exemple pour des fichiers binaires), il est nécessaire d'utiliser un driver externe qui traite ces sept arguments. Un exemple concret montre un script bash enveloppant oasdiff qui détecte les ajouts/suppressions via /dev/null et appelle oasdiff changelog sur les fichiers temporaires en demandant toujours la couleur. L'article précise que ce script ne gère pas les changements de permissions et recommande éventuellement d'utiliser les sommes SHA-1 pour mettre en cache les diff générés.

06:04

Surelock: Deadlock-Free Mutexes for Rust

L'auteur présente surelock, une bibliothèque Rust préliminaire visant à garantir l'absence d'interblocages à la compilation. Le principe central est un MutexKey linéaire qui porte un état de verrouillage au niveau des types, de sorte que chaque appel .lock() consomme la clé et renvoie une clé attestant des verrous déjà acquis, évitant ainsi les cycles sans analyse globale ni coût d'exécution. Surelock combine deux mécanismes complémentaires : LockSet trie et acquiert atomiquement des verrous du même niveau en s'appuyant sur des LockId stables, tandis que des Level<N> et des contraintes LockAfter imposent par le typage un ordre strict pour l'acquisition incrémentale entre niveaux. L'API propose un usage implicite pratique via lock_scope et un modèle explicite (Locksmith → KeyVoucher → KeyHandle → MutexKey) pour les environnements no_std ou embarqués, et choisit un ordre total Level×LockId plutôt qu'un DAG pour garantir l'absence de deadlocks. La crate, publiée en pré-version et compatible no_std, fournit aussi une échappatoire feature-générée pour des verrouillages non vérifiés et vise à rendre la prévention des interblocages ergonomique en transformant les mauvais usages en erreurs de compilation.

06:03

Simplest Hash Functions

L'article compare les fonctions de hachage cryptographiques à des variantes minimalistes et très rapides comme rapidhash ou une simple addition de mots, en soulignant les dangers face à des entrées malveillantes. Il montre que l'addition sur blocs de 32 bits peut donner des distributions raisonnables pour de longs textes non structurés mais devient très mauvaise pour des données courtes et régulières comme les noms de domaine. L'auteur explique comment la finalisation par multiplication pliée (foldmul) et le chaînage de plusieurs opérations peuvent répartir l'entropie sur les bits et diminuer les collisions observées. Le texte aborde aussi l'importance de l'utilisation des bits hauts ou bas par les tables de hachage et comment le choix d'API et d'implémentation conditionne les exigences sur la qualité du hachage. La conclusion conseille d'adapter la simplicité ou la complexité du hachage au contexte d'utilisation, en privilégiant des méthodes très simples pour des données non adverses et des transformations supplémentaires pour les cas critiques.