HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

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

3081 articles Page 26/309 Sans filtre

06:06

The APL programming language source code (2012)

Ken Iverson a inventé en 1957 une notation mathématique pour décrire des algorithmes qui, développée chez IBM, est devenue le langage APL axé sur le traitement de tableaux et l’usage de symboles spéciaux. APL\360, implémenté pour l’IBM System/360 comme environnement interactif en temps partagé écrit en assembleur, offrait saisie immédiate, édition, débogage et gestion de workspaces, et son code source XM6 (1969–1972) est maintenant rendu disponible par le Computer History Museum pour un usage non commercial. Le langage se distingue par une évaluation droite-à-gauche, la création automatique de vecteurs et tableaux, et un riche ensemble de primitives et d’opérateurs permettant d’exprimer de nombreux algorithmes de façon concise sans recourir souvent aux boucles. L’implémentation d’APL\360 était un interpréteur qui gérait dynamiquement les structures de données et remplaçait une partie du système d’exploitation pour optimiser les performances sur des machines à mémoire limitée et desservir de nombreux utilisateurs simultanés. APL a trouvé des usages importants en sciences, actuariat, statistique et finance, a suscité à la fois admiration pour sa puissance et critiques pour sa densité syntaxique, et a inspiré des langages dérivés tels qu’APL2 et J.

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.