The Great Crime Decline Is Happening All Across the Country
Résumé indisponible pour cet article.
Les meilleurs longs formats de Hacker News, relus plus calmement.
Résumé indisponible pour cet article.
La plateforme met en relation des agents vendant des services d'extraction web et des acheteurs qui doivent vérifier si une extraction invente des champs manquants. Le test utilise des pages jumelles qui ne diffèrent que par une ligne: l'extracteur doit renvoyer la valeur présente sur la première page et null sur la deuxième, avec des leurres comme un ancien prix ou un faux auteur. Tous les modèles ont fait davantage d'inventions sans l'instruction « utilisez null » (70,7% sans vs 20,2% avec); les performances varient fortement, GPT-6 Luna figurant parmi les meilleurs et Firecrawl ayant copié le leurre dans 24 des 36 cas. Un vérificateur peu coûteux peut attraper la plupart des valeurs inventées: GPT-6 Luna a détecté 38 des 49 valeurs fabriquées sans rejeter de valeurs correctes, et la vérification de tous les retours a coûté environ 0,0049 $ avec ce modèle. Les résultats présentent des limites: un seul passage par concurrent, pages synthétiques, tests sur paliers gratuits d'API, et les offres publiées pendant le lancement ne sont pas vérifiées.
L'auteur a construit une installation qui affiche une simulation FLIP (Fluid Implicit Particle) sur un écran électromécanique à points basculants pour obtenir du mouvement visible et du son. Il a récupéré des panneaux anciens auprès d'un collectionneur et a dû affronter des contraintes techniques majeures liées aux circuits d'origine, à la vitesse de balayage matriciel et au coût des écrans neufs. La solution retenue consiste en des cartes de pilotage soudées au dos des panneaux utilisant des pilotes H-bridge, des condensateurs en série, des registres à décalage et des microcontrôleurs CH32V003 avec un protocole série robuste pour la distribution des données. Après des mois de préparation, de soudure et de réparations mécaniques, l'ensemble a été intégré dans un boîtier avec alimentation, joystick et électronique mère, puis exposé à EMF2026 où il a fonctionné de manière fiable et interactive. Le coût matériel hors pièces données et main-d'œuvre est resté inférieur à 500 £, les fichiers de conception sont publiés sur GitHub et l'auteur propose des évolutions possibles comme la lecture d'état non volatile ou des jeux sur cette matrice.
L'article explique l'idiome "parse, don't validate" qui recommande de transformer et d'enrichir les données via le système de types plutôt que de se contenter de validations répétées. Il illustre le problème avec Vec::first qui retourne Option<&T>, obligeant les clients à revérifier une contrainte déjà garantie ailleurs. La solution proposée consiste à introduire des types raffinés comme NonEmpty<T> qui garantissent statiquement l'absence d'éléments vides et permettent d'accéder directement à head sans Option. Des cas concrets montrent l'approche en pratique, notamment rust-analyzer avec AbsPathBuf et camino::Utf8PathBuf, l'utilisation de NonZero pour entiers non nuls, et l'usage de serde pour convertir du JSON en types validés. Cette méthode améliore la clarté du code, peut réduire les vérifications et les coûts d'exécution, et empêche les bugs liés à la rupture involontaire d'invariants.
David Chisnall, utilisateur de vim depuis 2000, décrit l'undo persistant comme une fonctionnalité essentielle qui conserve l'historique des modifications même après redémarrages ou mois d'intervalle. Il explique que cette fonction lui a permis de récupérer du texte supprimé des semaines auparavant et de retrouver des états antérieurs lorsqu'une version retouchée cessait de fonctionner. En passant à NeoVim, il a constaté que le format des fichiers d'undo avait été changé, que les anciens fichiers avaient été supprimés et remplacés par des fichiers incompatibles, entraînant la perte des historiques. La réponse des développeurs, qui qualifiaient le format d'undo d'instable et conseillaient de ne pas compter sur la pérennité de ces fichiers, a fait perdre à Chisnall la confiance dans NeoVim. L'auteur de l'article apprécie ce témoignage, cite la première loi de Jef Raskin sur la protection du travail de l'utilisateur et souligne l'importance de ces principes dans la conception des interfaces.
Cet article décrit l'entraînement d'une voiture à l'auto-parking à l'aide d'un algorithme génétique, avec un simulateur interactif et une implémentation en TypeScript. Le modèle de la voiture comprend huit capteurs de distance, deux actionneurs (moteur et direction) et un « cerveau » qui produit tous les 100 ms deux signaux (-1, 0 ou +1) calculés par deux polynômes linéaires dont les coefficients déterminent les actions. Les 18 coefficients des polynômes sont encodés en format flottant réduit puis en 10 bits chacun pour former un génome binaire de 180 bits, décodé à chaque simulation pour calculer les commandes. L'algorithme génétique génère une population initiale, évalue la fitness (inverse de la distance moyenne des quatre roues aux quatre coins de la place), puis applique sélection pondérée, croisement uniforme et mutations pour faire évoluer les générations, avec des améliorations visibles autour de la 40e génération. L'approche est pédagogique mais limitée : le cerveau linéaire empêche une généralisation fine, les collisions ne sont pas pénalisées, le simulateur est instable et gourmand en ressources, et le code source complet est disponible dans le dépôt Evolution Simulator.
Le YouTuber RedLogic a créé une simulation pour trouver un seed de Minecraft aux conditions exactes permettant potentiellement au jeu de se terminer sans intervention humaine. Il a utilisé une simulation Monte Carlo pour condenser des milliards de ticks en temps d'attente statistiquement échantillonnés et a lancé la simulation sur le seed -535646876083114041. Sur des échelles temporelles astronomiques allant jusqu'à plusieurs milliards d'années, des événements aléatoires impliquant des citrouilles, des golems de neige et des creepers ont ouvert l'accès à l'End et détruit progressivement les cristaux d'End. Après environ 1,975 milliard d'années d'attaques sporadiques et d'explosions, la dernière attaque a finalement infligé le coup fatal au Dragon de l'End, ce qui a signifié la défaite du jeu. Le résultat visuel est un monde surréaliste, empilé de blocs et dévasté par des explosions, où aucune vie humaine n'est visible mais où le jeu est considéré comme complété.
e-POWER est la motorisation hybride à entraînement électrique de Nissan qui fait fonctionner les roues uniquement par un moteur électrique tout en utilisant un moteur essence embarqué pour recharger la batterie. La troisième génération intègre une architecture modulaire 5-in-1 regroupant moteur, réducteur, onduleur, increaser et générateur, et utilise des bobines à fil plat, un onduleur à double refroidissement et, sur certains modèles, des semi‑conducteurs SiC pour augmenter le débit électrique, améliorer le rendement et réduire les pertes. Nissan a développé des moteurs dédiés à la production d’électricité, comme les HR14DDe et ZR15DDTe, conçus pour fonctionner à régime constant avec une longue course, un fort tumble, le concept STARC, un gros turbocompresseur et des sièges de soupape par cold spray afin de stabiliser la combustion et améliorer l’efficience. L’intégration renforcée et le partage de composants entre EV et e‑POWER améliorent la rigidité et la précision d’assemblage pour diminuer vibrations et bruit tout en réduisant le nombre de pièces et les investissements de production. En limitant l’exploitation du moteur à des points fixes et grâce à ces innovations, Nissan annonce une efficacité thermique atteignant 50 % et vise à modulariser davantage la chaîne X‑in‑1 pour rapprocher le coût d’e‑POWER de celui des véhicules thermiques d’ici 2026.
L'auteur, parti d'une provocation sur l'usage de JSON, a conçu jBin, un format binaire et un langage de schéma capables de réduire des payloads JSON d'environ 80 %. Le format repose sur l'encodage binaire avec varints (LEB128), des balises combinant numéro de champ et type, et des champs délimités pour représenter types, longueurs et données. Le projet inclut un langage de schéma simple (messages, enums, listes, maps, unions), ainsi qu'un lexer, un parseur, un AST et un analyseur sémantique en deux passes pour valider les définitions. Un packer dynamique lit du JSON et le convertit en binaire en se référant au schéma, tandis qu'un générateur AOT produit du code (exemple en C) avec fonctions d'encodage/décodage. L'implémentation en C++ utilise LEB128 pour les varints, applique le patron Visitor pour la génération de code, fournit une CLI et permet de générer des structures et routines autonomes.
Le langage C n'impose pas des tailles d'entiers fixes car, dès ses origines, il visait la portabilité efficace sur des architectures très diverses avec des tailles de mots et d'octets différentes. Dans les années 1960‑70 il existait une grande variété de machines (12, 16, 18, 24, 36, 48, 60, 64 bits), de représentations de signe et de tailles de caractères, ce qui rendait risqué d'énoncer des tailles d'entier absolues. La normalisation ANSI a formalisé cette approche par des garanties minimales de plages pour chaque type et C99 a introduit <stdint.h> avec des types à largeur exacte optionnels et des types "au moins" et "rapides". Des projets modernes comme Lua montrent la pratique recommandée : interroger l'implémentation via <limits.h> et choisir des types selon la plage et les performances nécessaires plutôt que selon une largeur fixe. Autoriser des tailles flexibles fut un compromis conscient pour maximiser l'efficacité et la portabilité sur du matériel hétérogène, et non une simple erreur de conception.