HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

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

7277 articles Page 438/728 Sans filtre

06:02

Rust Threads on the GPU

VectorWare annonce qu'ils ont réussi à exécuter std::thread de Rust sur le GPU en mappant chaque thread sur un warp. Ils expliquent que le modèle d'exécution GPU diffère du CPU et que rendre la concurrence explicite via des threads facilite la sécurité et l'intégration avec les abstractions Rust existantes. L'implémentation associe chaque std::thread à un warp (seul le warp 0 est actif au départ, spawn réveille un warp et join attend sa fin) ; la technique a été démontrée sur NVIDIA mais s'applique à d'autres architectures. Cette approche prévient la divergence en veillant à ce que chaque warp exécute le même code, préserve l'emprunt et les durées de vie Rust, et ouvre une grande partie de l'écosystème Rust (bibliothèques basées sur threads et async) au matériel GPU. Les limites incluent le nombre fini de warps, des coûts de synchronisation, une consommation mémoire pour les piles et un risque de sous-utilisation des lanes, et l'équipe prévoit de publier des mitigations et de supporter d'autres langages à l'avenir.

06:02

Nothing Ever Happens: Polymarket bot that always buys No on non-sports markets

Ce projet est un bot Python asynchrone conçu pour acheter des positions "No" sur des marchés yes/no autonomes non sportifs de Polymarket. Le code est organisé en répertoires bot/ pour l'exécution et la stratégie nothing_happens, scripts/ pour les outils opérationnels et tests/ pour la couverture unitaire et de régression. L'exécution scanne les marchés standalone, cherche des entrées NO sous un prix plafond configurable, suit les positions ouvertes, propose un tableau de bord et persiste l'état de récupération lorsque l'envoi d'ordres est activé. La transmission réelle d'ordres exige trois variables d'environnement strictes (BOT_MODE=live, LIVE_TRADING_ENABLED=true et DRY_RUN=false) et des secrets supplémentaires (clé privée, adresse du funder, URL de base de données et RPC Polygon), sinon le bot utilise un client d'échange en mode papier. L'installation et la configuration reposent sur requirements.txt, des fichiers config.json et .env locaux (avec un chemin configurable via CONFIG_PATH), des scripts de déploiement pour Heroku et des utilitaires fournis pour l'inspection de la base de données, l'export, l'historique du portefeuille et l'analyse des logs.

06:02

Design and implementation of DuckDB internals

Ce cours de 15 semaines, élaboré par Torsten Grust pour des étudiants de premier cycle à l'Université de Tübingen, propose du matériel pédagogique disponible sur un dépôt GitHub. Il parcourt une sélection d'internes du système relationnel DuckDB en se concentrant sur des thèmes choisis plutôt que sur une couverture exhaustive. Le plan de cours couvre l'installation, le spectre de performance des requêtes, la gestion de la mémoire et des agrégations groupées, le tri de grandes tables, l'ART pour l'indexation, l'exécution de plans et le pipeline, l'exécution vectorisée ainsi que la réécriture et l'optimisation des requêtes. Des compétences SQL de base suffisent pour suivre le fil rouge du cours, la plupart des requêtes restant dans le bloc SELECT-FROM-WHERE-GROUP BY-HAVING. La bibliothèque associée référence également des ressources complémentaires telles que des conférences et des podcasts liés au projet.

06:02

I shipped a transaction bug, so I built a linter

Un bug fréquent consiste à exécuter des opérations hors d'une transaction en appelant le dépôt externe (par ex. s.repo) au lieu du dépôt transactionnel (tx), ce qui peut provoquer une corruption silencieuse des données. Ce problème est difficile à détecter car le code compile et les tests passent en isolation, tandis que les défaillances surviennent de façon aléatoire sous charge et échappent souvent aux revues de code. Pour l'attraper à la compilation, l'auteur a écrit un linter personnalisé basé sur le framework go/analysis qui parcourt l'AST, identifie les appels Transaction et suit le paramètre tx via son types.Object. Le linter analyse les appels et leurs arguments, signale les appels de méthodes dont le receveur est un dépôt non transactionnel et remonte l'analyse récursivement dans les fonctions utilitaires en évitant les boucles infinies. Le projet est testé avec analysistest, distribué via singlechecker et intégré au CI et au runner de tâches, il a trouvé des violations réelles en quelques jours et l'auteur recommande d'envisager des linters personnalisés pour les motifs de code fragiles.

06:01

TanStack Start Now Support React Server Components

TanStack Start adopte une philosophie flexible qui traite les React Server Components comme des primitives utilisables à la demande plutôt que comme une convention qui orchestre toute l'application. Dans Start, les RSC sont des flux Flight récupérables, décodables et cacheables côté client ou durant le SSR via des API minimales (renderToReadableStream, createFromReadableStream, createFromFetch) et s'intègrent naturellement à TanStack Query et Router. Cette approche simplifie la mise en cache fine (mémoire, route, CDN) et permet de déplacer le rendu coûteux hors du client tout en restant compatible avec les outils de cache et de routage existants. Les Composite Components permettent au serveur de rendre des fragments tout en exposant des slots que le client remplit avec des composants interactifs, conservant la frontière client/serveur et augmentant la composabilité. La fonctionnalité est expérimentale, privilégie des RPC explicites via createServerFn pour réduire la surface d'attaque, et les mesures montrent d'importantes améliorations sur les pages riches en contenu mais des gains variables selon les cas d'usage.

06:01

WiiFin – Jellyfin Client for Nintendo Wii

Le projet propose un client homebrew expérimental développé en C++ avec GRRLIB et MPlayer CE pour parcourir et lire des médias sur la Wii. Les fonctionnalités opérationnelles incluent l'authentification (identifiant/mot de passe ou QuickConnect), profils sauvegardés (jetons), navigation des bibliothèques avec affiches et vues détaillées, lecture audio/vidéo via transcodage côté serveur, contrôle de lecture et envoi de la progression au serveur. Parmi les limitations connues figurent l'absence de direct-play (tout est transcodé), l'absence de support 5.1 (stéréo uniquement) et le rendu des sous-titres dépendant de leur incorporation par le serveur. La compilation nécessite devkitPro et bibliothèques graphiques, mbedTLS est fourni, MPlayer CE est optionnel mais requis pour la vidéo, et l'application s'exécute sous Dolphin ou s'installe sur la console en .dol ou .wad. Le dépôt contient le code source, les assets et outils, accepte contributions et rapports de bugs, prévoit des améliorations (tri/filtre, favoris, thèmes) et est distribué sous licence GPLv3.

06:01

Sometimes powerful people just do dumb shit

L'article illustre comment des décisions manifestement erronées de dirigeants, comme l'invasion de la Russie par Napoléon ou l'achat de Twitter par Elon Musk, sont souvent défendues comme si elles faisaient partie d'un plan supérieur incompris. L'auteur critique la tendance des partisans du "4D chess" à rationaliser les échecs en les présentant comme des stratégies invisibles, en donnant aussi des exemples contemporains comme Donald Trump et l'acquisition par OpenAI de l'émission TBPN. Il explique que des mécanismes psychologiques et sociaux — la croyance en un monde juste, la propension à voir des motifs et le désir de paraître plus perspicace — alimentent cette interprétation. Le texte met en garde que ce cadre protège les puissants de la responsabilité, rend les théories infalsifiables et empêche d'apprendre des erreurs concrètes. La conclusion est que parfois les dirigeants prennent simplement de mauvaises décisions et que reconnaître cette banalité est nécessaire pour maintenir la clarté et la responsabilité.

06:00

Lean proved this program correct; then I found a bug

Un programme vérifié en Lean (lean-zip) a été soumis à du fuzzing automatique et à des outils d'analyse (AFL++, AddressSanitizer, Valgrind, UBSan) pilotés par un agent Claude qui a exécuté plus de 105 millions de tests. Aucun défaut mémoire n'a été trouvé dans le code Lean vérifié lui‑même, mais le fuzzing a découvert deux problèmes : un débordement heap dans le runtime Lean (lean_alloc_sarray) et un déni de service dans le parseur d'archives non vérifié. Le débordement provient d'une addition qui déborde lors de l'allocation de ByteArray (capacité proche de SIZE_MAX) et peut être déclenché par un fichier ZIP malformé avec compressedSize égal à 0xFFFFFFFFFFFFFFFF, affectant toutes les versions de Lean 4 citées, et une PR correctrice est en attente. Le déni de service est causé parce que Archive.lean transmet le champ compressedSize lu dans l'en‑tête ZIP directement à h.read sans validation, permettant à un en‑tête malveillant de provoquer une allocation excessive et un panic OOM. L'article conclut que la vérification formelle a rendu la base applicative remarquablement sûre en éliminant de nombreuses classes de bogues, mais que son efficacité dépend de l'étendue des preuves et de la fiabilité de la base de confiance (runtime et modules non vérifiés).