HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

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

3464 articles Page 57/347 Sans filtre

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

06:00

GitHub Stacked PRs

La fonctionnalité de PR empilées permet d'organiser des pull requests en une chaîne ordonnée où chaque PR cible la branche de la PR inférieure. L'interface GitHub affiche une carte de la pile pour naviguer entre les couches, applique les règles de protection contre la branche cible finale et exécute la CI comme si chaque PR visait la branche finale. Le CLI gh stack facilite la création et la gestion locale des stacks, y compris la création de branches, les rebasages en cascade, le push et la création de PR avec les bases appropriées. Lors de la fusion, on peut fusionner toute la pile ou des parties, et les PR restantes sont automatiquement rebasées pour que la plus basse non fusionnée cible la branche de base. L'approche réduit la taille des diffs à revoir, améliore la qualité des retours et accélère les fusions, et peut être intégrée aux agents IA via npx skills add github/gh-stack.

06:00

Someone bought 30 WordPress plugins and planted a backdoor in all of them

Un client a signalé une alerte dans le tableau de bord WordPress indiquant que le plugin contenait du code susceptible de permettre un accès tiers non autorisé. Le module wpos-analytics a téléchargé un backdoor qui a injecté un bloc PHP dans wp-config.php, affichant du spam uniquement à Googlebot et résolvant son serveur de commande via un contrat intelligent Ethereum. Le plugin avait été revendu via Flippa à un acheteur identifié comme «Kris», une désérialisation RCE et un endpoint REST non authentifié ont été introduits en août 2025 et sont restés dormants environ huit mois avant d'être activés en avril 2026. WordPress.org a fermé définitivement plus de 30 plugins de l'auteur Essential Plugin et forcé une mise à jour qui a neutralisé le phoning-home mais n'a pas supprimé l'injection dans wp-config.php. L'auteur de l'article a publié des versions patchées supprimant le module malveillant, recommande de rechercher et patcher ou supprimer les plugins affectés et d'inspecter wp-config.php pour détecter une compromission active.

06:00

A new spam policy for "back button hijacking"

Google étend ses règles anti-spam pour interdire explicitement le détournement du bouton retour (back button hijacking) en le qualifiant de pratique malveillante. Ce comportement consiste à empêcher l'utilisateur d'utiliser le bouton retour pour revenir à la page précédente, en insérant ou remplaçant des pages trompeuses dans l'historique du navigateur ou en affichant des recommandations ou publicités non sollicitées. La mesure vise à protéger l'expérience utilisateur, car ces manipulations créent une attente non satisfaite, nuisent à la navigation et entraînent frustration et baisse de confiance envers les sites. Les sites identifiés peuvent subir des actions manuelles de spam ou des déclassements automatisés dans les résultats de recherche, et l'application de la règle débutera le 15 juin 2026 après un préavis de deux mois. Les propriétaires doivent retirer ou désactiver tout script, bibliothèque ou configuration publicitaire responsable du détournement et peuvent demander un réexamen via Search Console une fois les corrections effectuées.