HN Digest
Briefing personnel.

Lire vite.
Garder l'essentiel.

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

12074 articles Page 371/1208 Sans filtre

Improving Heuristics for A* Pathfinding

Cette technique améliore l'heuristique d'A* en utilisant des points de repère («landmarks») pour mieux refléter les murs et la topologie du graphe, ce qui réduit le nombre de nœuds explorés. Un heuristique parfaite qui connaît tous les murs et le but existe mais est impraticable à calculer et à stocker pour chaque objectif. En précalculant pour chaque landmark les distances depuis tous les nœuds (avec Dijkstra ou BFS) on peut appliquer l'inégalité triangulaire pour obtenir la borne cost(B,X) ≥ cost(B,L) - cost(X,L) et combiner ces bornes (max) en une heuristique différentielle plus informée. Concrètement, on alloue un tableau cost[node][landmark], on lance une recherche depuis chaque landmark pour remplir ce tableau puis on remplace dans la fonction heuristique traditionnelle par le maximum entre l'heuristique de base et les différences de coûts (ou la valeur absolue pour les graphes non orientés), sans modifier l'algorithme A* lui‑même. Plusieurs landmarks couvrent mieux la carte, leur placement peut être manuel, basé sur analyses aléatoires ou automatisé, et il faut prendre en compte que des changements de graphe peuvent rendre l'heuristique temporairement sur‑estimée (non admissible) ou moins efficace; des démonstrations montrent de fortes améliorations sur labyrinthes et cartes pièce‑couloir.

Os8088: A powerful Mac-like OS for the IBM XT, 286, 386

Il s'agit d'un système d'exploitation graphique écrit entièrement en assembleur réel pour processeurs 8086/8088 et démarrant depuis le premier secteur d'une disquette. L'interface reproduit l'aspect du Macintosh System 1 avec fenêtres superposées, menus déroulants, souris série, icônes de disquette et un dock pour les programmes chargés depuis une seconde disquette. Le noyau occupe 78 950 octets, le code source totalise 112 792 lignes de NASM, le tout tient dans 256 Ko de RAM et le système prend en charge jusqu'à 12 tâches préemptives à 18,2 Hz. Ce n'est pas DOS, il n'y a pas de protection mémoire ni de réseau, les programmes partagent un segment de 64 Ko avec le noyau et l'API disque transfère des fichiers entiers sans cache. C'est un projet amateur utilisable, reproduit en émulation et booté sur du matériel d'époque (IBM 5150, Toshiba T1100 Plus, 286) et distribué sous forme d'images de disquette.

My server is a phone now

L'auteur a remplacé son VPS par un téléphone ARM64 (CMF Phone 1) pour faire tourner des services personnels afin de réduire les coûts. Après une tentative ratée de remplacer Android par postmarketOS, il a restauré Android et utilisé Termux comme environnement hôte avec runit, Tailscale et Cloudflared pour superviser les services. Les applications sont déployées comme rootfs Debian gérés par Ansible depuis un dépôt Git, et l'auteur est passé de proot à un chroot rooté pour améliorer les performances sans recourir à Docker. L'ingress utilise Cloudflare Tunnel pour les HTTP et un tunnel WebSocket chiffré pour la connexion sensible de Surf, tandis que Tailscale assure l'accès d'administration et la mobilité réseau. Le système est reproductible et surveillé par un tableau de bord local, mais il exige des sauvegardes externes, étend le périmètre de confiance en root et reste dépendant des comportements d'Android.

"The original URL for this prediction will no longer be available in 11 years." (2011)

Le pari couvre une période de onze ans, de 2011 à 2022, avec mille dollars misés. Le montant ira au Bletchly Park Trust si Jeremy Keith l'emporte, ou à l'Internet Archive si Matt Haughey gagne. Jeremy Keith soutient que la dégradation des liens et la disparition des ressources web rendent très improbable la persistance d'une URL sur onze ans. Matt Haughey affirme que les pratiques de redirection et la maturité des technologies permettent de maintenir des URI stables, en citant des sites personnels fonctionnant depuis treize ans. Les termes exigent que le 22 février 2022 l'adresse http://www.longbets.org/601 retourne un document HTML contenant la phrase «The original URL for this prediction (www.longbets.org/601) will no longer be available in eleven years.», une redirection 301 vers une page contenant ce texte étant également valide, auquel cas Haughey (Matt) gagne et sinon Keith (Jeremy) gagne.

The BBC Tetris Companion

L'auteur a entrepris de faire tourner un jeu de type Tetris sur une console pédagogique britannique des années 1980 destinée à l'enseignement du bridge. Il décrit le matériel de la console, notamment un processeur Z80, un TMS9129 VDP et des cartouches ROM commercialisées avec neuf titres officiels. Pour exécuter son propre code, il a rétro‑ingénieré le BIOS afin de fabriquer un en‑tête de cartouche compatible et a appris l'assembleur Z80 pour développer Bridgetris. Parallèlement il a réparé une unité achetée en remplaçant le connecteur de cartouche, réalisé des PCB de cartouche et mis au point une modification composite pour améliorer la sortie vidéo. Il annonce la publication prochaine d'articles détaillés sur la réparation, le mod vidéo et la programmation, ainsi que la diffusion du ROM et du code source.

What is a product?

Beaucoup de projets générés rapidement avec l'IA ressemblent à des produits mais ne sont souvent que des prototypes ou des démos superficielles. Les mises à jour fréquentes des modèles produisent des exemples impressionnants qui inondent les réseaux mais n'aboutissent pas forcément à des produits viables. Quatre ans après l'avènement des grands chatbots, on ne voit pas de véritables concurrents des plateformes majeures créés uniquement avec l'IA, car l'innovation exige plus que des prompts. Un vrai produit nécessite des utilisateurs réels, un marché et la résolution de problèmes concrets, pas seulement du code ou une belle maquette. Par conséquent, un prototype sans adoption n'est qu'un jouet, et il ne faut pas confondre démonstrations rapides avec des produits aboutis.

Show HN: Modern C++ Build Tools for Module Feature

mcpp est un outil de gestion de construction conçu pour le développement axé sur les modules C++23 et permet d'utiliser import std ainsi que les unités d'interface sans configuration manuelle. Il propose l'analyse automatique des dépendances de modules, des builds incrémentiels au niveau fichier (front-end dirty check, P1689 dyndep et BMI restat) et installe des toolchains préconstruits dans un sandbox isolé pour ne pas modifier le système hôte. La gestion des dépendances inclut la résolution SemVer, un fichier lock unifié, un cache BMI partagé entre projets, des indices personnalisés et un écosystème de bibliothèques modulaires (mcpplibs). L'expérience développeur offre des commandes haut niveau (new, build, run, test, add, pack, publish), la génération automatique de build.ninja et compile_commands.json, ainsi que des options de packaging dont des binaires statiques musl. Le projet supporte Linux (x86_64/aarch64), macOS ARM64 et Windows x86_64 avec gestion multi-toolchain et cross-compilation, il est en développement actif et accueille contributions, issues et demandes de fonctionnalités.

Petri Nets as a Music Sequencer

Le générateur beats.bitwrap.io crée des morceaux en combinant des réseaux de Petri qui font circuler des jetons pour déclencher notes et percussions. Chaque instrument est modélisé comme un anneau de places et transitions où des jetons produisent des rythmes basés sur des schémas euclidiens et des notes pour les mélodies et lignes de basse. La structure inclut des réseaux de contrôle non sonores pour gérer l'arrangement (introductions, breaks, retours) et des optimisations comme les compte-à-rebours par jetons multiples pour réduire la taille des fichiers. Les transitions du mode Auto-DJ ont été intégrées au graphe pour résoudre des conditions de concurrence et assurer une synchronisation précise entre régénérations et exécution des macros. Le système est déterministe grâce à l'état unique des jetons, fonctionne essentiellement côté client avec Tone.js pour l'audio, et le code source est publié en open source.

Thoroughly Understanding C++ ABI (2024)

L'article explique que l'ABI (Application Binary Interface) rassemble les règles permettant à des modules binaires de s'interfacer, incluant formats d'objets, représentation des données, conventions d'appel et bibliothèques d'exécution. La compatibilité binaire dépend du couple CPU/OS et de détails comme le format exécutable (PE/ELF), la taille et l'alignement des types, et les conventions d'appel qui diffèrent notamment entre Windows x64 et System V. Des conséquences pratiques sont illustrées par des violations d'ODR lorsqu'on change la définition de structures, par des règles spécifiques sur le passage des structs en registres ou par référence, et par le fait que des objets C++ non triviaux (p. ex. unique_ptr) ne sont pas forcément aussi efficaces que des pointeurs bruts. Le texte souligne que le standard C++ n'impose pas d'ABI stricte, mais que des conventions de facto (Itanium vs MSVC) et des changements d'implémentation ou d'options de compilation peuvent provoquer des ruptures ABI. Pour les bibliothèques distribuées en binaire, l'article recommande d'exposer des types POD ou des wrappers C (extern "C") pour la création/destruction et d'éviter le mélange de CRT/allocateurs afin de prévenir les erreurs de libération de mémoire.