HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

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

3507 articles Page 70/351 Sans filtre

06:03

Tofolli gates are all you need

Le principe de Landauer établit une borne inférieure à l'énergie nécessaire pour effacer un bit, E ≥ kB T ln 2, indépendante du support physique. Il n’existe pas de limite inférieure théorique pour l’énergie d’un calcul réversible, et bien que l’effacement d’un bit pratique demande environ un milliard de fois plus d’énergie que la borne de Landauer, les circuits réversibles peuvent néanmoins offrir des gains d’efficacité réels. Une porte de Toffoli prend trois bits en entrée et renvoie trois bits en sortie selon T(a,b,c) = (a,b,c XOR (a AND b)), c’est‑à‑dire qu’elle inverse le troisième bit si et seulement si les deux premiers sont à 1. La porte de Toffoli est son propre inverse et donc réversible, puisque l’appliquer deux fois annule l’effet sur le troisième bit. En envoyant (a,b,1) dans une Toffoli on obtient la NAND en troisième sortie, ce qui permet de construire toute fonction booléenne de manière réversible mais implique souvent d’entrer et de récupérer plus de bits que dans les portes non réversibles.

06:02

Advanced Mac Substitute is an API-level reimplementation of 1980s-era Mac OS

Ce logiciel est une réimplémentation au niveau API du Mac OS des années 1980 qui exécute des applications 68K sans ROM Apple ni logiciel système. Plutôt que d’émuler tout le matériel, il remplace le système d’exploitation (sauf le processeur 680x0) et lance directement les applications sans phase de démarrage. L’architecture est factorisée avec un backend émulateur 68K portable sur systèmes POSIX et un frontend de terminal bitmap fourni par SDL2, complété par des implémentations pour macOS, X11 et fbdev. Le projet prend en charge le graphisme 1‑bit, les régions, les primitives (cercles, lignes, roundrects), les GrafPorts, curseurs, fenêtres, contrôles, menus et dialogues, et il exécute plusieurs jeux et applications Macintosh classiques. Le code source est disponible sur GitHub et le logiciel peut être essayé sur macOS, sous X Window, sur une console framebuffer Linux ou via un client VNC.

06:02

Building a Z-Machine in the worst possible language – Whitebeard's Realm

La Z-machine est une machine virtuelle des années 1980 créée par Infocom pour permettre d'exécuter leurs jeux textuels sur plusieurs architectures. L'auteur a entrepris d'en implémenter une en Elm, ce qui pose un défi car Elm est purement fonctionnel et la Z-machine suppose un accès mémoire direct et une pile distincte. La crainte d'un désastre de performances liée à la copie des structures a été atténuée par l'utilisation des tableaux persistants d'Elm (variante de RRB trie), qui offrent de bonnes performances pour les mises à jour. Le projet fonctionne aujourd'hui: il exécute des fichiers .z3, réussit le test de conformité tchèque et est assez performant pour servir de lecteur d'Interactive Fiction. La bibliothèque propose une interface propre pour charger, exécuter et gérer les événements, avec des exemples (notamment une application node.js/elm avec Zork1) permettant de créer facilement des clients.

06:02

Pijul a FOSS distributed version control system

Il s'agit d'un système de contrôle de version distribué, libre (GPL2), fondé sur une théorie des patchs et conçu pour être rapide et évolutif. Sa propriété de commutation permet d'appliquer des changements indépendants dans n'importe quel ordre sans modifier le résultat ni l'identifiant de version, simplifiant les flux de travail par rapport aux rebase ou transplant et reléguant les branches à un rôle moins central. Le système garantit la préservation de l'ordre des lignes lors des fusions et considère comme conflit toute situation où l'ordre est indéterminé, contrairement aux fusions à trois voies qui peuvent parfois réagencer les lignes. Les conflits sont traités comme des entités de premier plan : chaque conflit oppose deux changements et se résout par un changement de résolution qui reste valable indépendamment d'autres changements, empêchant leur réapparition. La commutation permet des clones partiels en n'appliquant que les changements liés à un sous-ensemble du dépôt, et le logiciel est distribué en code source ouvert et disponible publiquement.

06:01

Dark Castle

La série comprend trois jeux emblématiques de plateforme initialement sortis en 1986 et 1987, puis relancée en 2008 avec une version en couleur. Le jeu original en noir et blanc a été un pionnier du jeu sur Macintosh, apprécié pour ses animations, son humour et sa mise en valeur des capacités son et graphisme de la machine. La réédition de 2008, développée par Z Sculpt après un long développement commencé en 1996, intègre tous les niveaux des deux premiers volets et plus de cinquante niveaux nouveaux, mêlant écrans fixes et niveaux à défilement. La jouabilité reste centrée sur l'exploration du château pour affronter le Chevalier Noir en collectant des orbes et en utilisant des armes comme le rocher, la boule de feu, le bouclier et la pierre spéciale. Un fichier téléchargeable facilite l'émulation en fournissant Mini vMac, une ROM Mac Plus et une image système contenant les deux premiers jeux (mais pas le troisième), avec une option festive activable le 25 décembre.

06:01

Apple Silicon and Virtual Machines: Beating the 2 VM Limit (2023)

L'auteur décrit la limite de deux machines virtuelles macOS actives imposée par le contrat de licence et signalée par Virtualization.framework. L'enquête a montré que la restriction est implémentée dans le noyau XNU via la variable hv_apple_isa_vm_quota et qu'un boot-arg permettait de la contourner, mais les kernels de production vérifient un flag AppleInternal protégé par SIP. La méthode proposée consiste à assembler une Kernel Collection de développement à partir du Kernel Debug Kit, à la déployer avec kmutil et à configurer le démarrage depuis macOS Recovery en activant le boot-arg hypervisor et en définissant hv_apple_isa_vm_quota via nvram. Une fois configuré, l'auteur a pu lancer de nombreux invités macOS simultanément (par exemple neuf) avec des outils comme UTM, Viable ou Parallels, au prix d'une charge matérielle accrue. L'utilisation d'une Kernel Collection personnalisée empêche les mises à jour système simplifiées et il faut rétablir la politique de démarrage en recovery pour revenir au noyau stock, et l'auteur évoque des pistes futures pour automatiser le processus ou remplacer la variable par une extension.

06:01

Excellence Is a Habit

Artemis II a ramené l'équipage sain et sauf, marquant le premier vol humain près de la Lune depuis plus de cinquante ans et illustrant la continuité avec les programmes Mercury-Gemini-Apollo. Le texte rappelle que le succès lunaire historique s'est construit étape par étape, grâce à des vols fréquents et à l'apprentissage institutionnel qui ont permis de gérer des crises comme Apollo 13. L'auteur fait le parallèle avec le développement logiciel moderne en soulignant que l'automatisation, l'infrastructure en tant que code et les exercices réguliers renforcent la résilience opérationnelle. Deux leçons pratiques d'Artemis II sont mises en avant : l'importance d'une instrumentation contextualisée et corrélée pour éviter les fausses alertes, et la nécessité d'éviter les points de défaillance uniques en disposant de solutions de secours dégradées. La conclusion insiste sur le fait que l'excellence et la résistance aux incidents se construisent par la répétition, les tests et la préparation continue, transformant les échecs potentiels en succès partiellement dégradés plutôt qu'en catastrophes.

06:01

How Complex is my Code?

L'auteure définit la complexité du code comme les ressources nécessaires pour l'exécuter au sens large, incluant le temps, la mémoire, les ressources mentales et les connaissances contextuelles. Elle illustre la complexité algorithmique avec des exemples de tri (insertion_sort en O(n²) et counting_sort en O(n)) et souligne que des gains en temps peuvent introduire des contraintes d'utilisation et nuire à la lisibilité. Pour le code métier, la charge cognitive humaine prime, et des métriques comme la complexité cyclomatique et les mesures de Halstead quantifient respectivement les chemins d'exécution et la diversité des tokens sans saisir la complexité sémantique. La psycholinguistique offre des mesures transférables au code — indice de subordination, distance moyenne de dépendance, Dependency Locality Theory, ratio type-token et entropie — permettant d'évaluer la mémoire de travail, la localité des variables, la cohérence et le degré de surprise. Elle conclut qu'il faut combiner et agréger ces métriques (maximum, moyenne, couplage, churn) pour prioriser les refactorings et informer les décisions, en les utilisant comme outils de conversation plutôt que comme objectifs contraignants.