HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

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

7228 articles Page 433/723 Sans filtre

06:03

US appeals court declares 158-year-old home distilling ban unconstitutional

La cour d'appel du 5e circuit des États-Unis a jugé inconstitutionnelle l'interdiction fédérale vieille d'environ 158 ans sur la distillation domestique. Le jugement a été rendu en faveur de la non-profit Hobby Distillers Association et de quatre de ses membres, qui avaient fait valoir le droit de distiller pour consommation personnelle ou comme loisir. L'interdiction, issue d'une loi de 1868 visant notamment à prévenir l'évasion fiscale, prévoyait des peines pouvant aller jusqu'à cinq ans de prison et une amende de 10 000 dollars. La juge Edith Hollan Jones a estimé que l'interdiction réduisait en fait les recettes fiscales, manquait de principe limitant et permettrait au Congrès de pénaliser de nombreuses activités domestiques sous prétexte de taxation. La décision confirme en appel un jugement de juillet 2024 du tribunal de district qui avait été temporairement suspendu en vue de l'appel, et le ministère de la Justice n'a pas commenté immédiatement.

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é.