HN Digest
Briefing personnel.

Edition quotidienne

Lire vite. Garder l'essentiel.

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

5547 articles Page 2/555 Sans filtre

06:07

Stop the Apple Music app from launching

Depuis la version 1.1, on peut configurer Music Decoy pour lancer une autre application lorsque le bouton Play est pressé en utilisant la commande defaults write avec le chemin de l'application. La configuration peut être réinitialisée avec defaults delete pour supprimer la clé mediaAppPath. Music Decoy se lance automatiquement quand on appuie sur la touche Play s'il n'y a pas d'autre application en train de jouer, lorsqu'un casque Bluetooth envoie une commande play ou à la fin d'un appel quand le casque repasse en mode musique. Ce comportement provient du démon rcd qui, s'il ne trouve aucune application en lecture, lance l'application Musique, et désactiver ce démon supprime aussi le contrôle des médias au clavier. Comme alternatives on peut décharger com.apple.rcd.plist avec launchctl (ce qui désactive la touche Play) ou utiliser noTunes pour tuer l'application Musique au lancement, et Music Decoy se quitte via le Moniteur d'activité ou la commande killall.

06:07

Thunderbird Littering My Home

L'auteur a redécouvert Thunderbird et signale un bogue provoqué par des changements XDG qui crée systématiquement un répertoire ~/thunderbird à chaque démarrage. Ce répertoire est vide et inutile, tandis que le client continue d'utiliser l'ancien ~/.thunderbird au lieu des emplacements standard ~/.config et ~/.local/share. Ne disposant pas du temps pour corriger le bogue, l'auteur juge impoli que des applications créent des répertoires dans le dossier personnel et propose un contournement. Il fournit un script fish utilisant inotifywait pour surveiller la création du répertoire et le supprimer immédiatement, ainsi qu'un service systemd utilisateur pour exécuter le script en permanence. Des instructions indiquent de rendre le script exécutable, de recharger le démon systemd utilisateur et d'activer le service, en précisant de supprimer ce correctif provisoire une fois le bogue corrigé.

06:07

Fooling Go's X.509 Certificate Verification

Le billet décrit deux certificats X.509 (un CA racine et un certificat feuille) apparemment identiques mais dont la vérification diffère selon l'outil utilisé. Un programme Go qui construit un CertPool et appelle x509.Verify échoue avec l'erreur "certificate signed by unknown authority" alors qu'openssl verify réussit. L'auteur montre par comparaison DER et asn1parse qu'il ne diffère que deux octets : les champs Subject/Issuer sont encodés en PrintableString (0x13) dans le CA défaillant et en UTF8String (0x0c) dans l'autre CA et dans l'Issuer de la feuille. Go utilise les octets bruts (cert.RawSubject et cert.RawIssuer) comme clés dans le CertPool, si bien que des types ASN.1 différents mais textuellement équivalents ne correspondent pas et empêchent la construction de la chaîne. L'article souligne que ce comportement "fail-closed" peut provoquer des indisponibilités et recommande de contrôler la cohérence des outils de génération de certificats et des encodages ASN.1 utilisés.

06:07

Doing something that’s never been done before (2025)

L'auteur explique qu'il hésite à entreprendre de nouveaux projets par crainte de manquer d'originalité. Il observe que dans les marchés être second n'est pas forcément mauvais, mais être cinquante fois en retard l'est généralement. Il identifie quatre facteurs qui réduisent la probabilité que d'autres aient déjà réalisé un projet : le temps requis, la difficulté, l'obscurité et la dépendance progressive entre étapes. Les projets exigeant beaucoup de temps ou comportant de nombreuses étapes sont moins susceptibles d'être entrepris ou achevés par d'autres. En combinant obscurité, difficulté, forte consommation de temps et étapes dépendantes, on diminue fortement le nombre de personnes susceptibles d'avoir réalisé l'idée, ce qui augmente les chances d'être le premier.

06:06

Massachusetts bans sale of precise location data in new privacy rights bill

Les législateurs du Massachusetts ont adopté la Consumer Data Privacy Act à la Chambre par un vote unanime, après l'avancée parallèle d'un texte au Sénat, et les mesures doivent être fusionnées puis envoyées au gouverneur pour signature. La loi accorderait aux résidents de l'État de nouveaux droits d'accès et de suppression de leurs données détenues par les grandes entreprises technologiques et interdirait la vente de leurs données de géolocalisation précises. Elle s'appliquerait aux entreprises traitant les données personnelles de plus de 100 000 consommateurs, touchant ainsi autant des startups de taille moyenne que des géants de la Silicon Valley. Le texte prohiberait le partage ou la vente d'informations sensibles sans consentement explicite, notamment les données biométriques, la géolocalisation précise et les indicateurs liés à la religion, au statut migratoire ou à l'orientation sexuelle. La mesure, saluée par des groupes de défense de la vie privée, vise à combler le vide d'une loi fédérale et devrait avoir un impact majeur sur les courtiers de données et les entreprises de publicité ciblée.

06:06

Are you expected to run five Python type-checkers now?

L'auteur conseille de prioriser l'exécution du plus grand nombre possible de vérificateurs de types sur la suite de tests d'une bibliothèque et d'en exécuter au moins un sur le code source. Il explique que taper le code de test garantit la compatibilité du contrat public de l'API pour les utilisateurs, car les tests exercent l'interface publique tandis que vérifier le code interne vérifie principalement la logique interne. L'exemple de Polars montre que l'ajout de nouveaux vérificateurs comme Pyrefly peut révéler bugs et obliger à ajouter des annotations ou des commentaires d'ignorance, rendant le code source plus verbeux. Cependant, dans ce cas les principaux vérificateurs (mypy, Pyrefly, Pyright, ty, Zuban) ont validé les tests publics de Polars sans erreur, prouvant que les outils s'accordent souvent sur l'API même s'ils divergent sur l'implémentation. Enfin, les vérificateurs diffèrent par leur position entre strict et permissif et les mainteneurs doivent choisir le niveau de strictesse qu'ils appliquent au code source tout en préférant tester l'API avec plusieurs outils.

06:06

A Survey of Inlining Heuristics

Les compilateurs JIT travaillent généralement sur une fonction à la fois, et dans les langages dynamiques les méthodes sont souvent courtes, ce qui limite le contexte disponible pour l'optimisation. L'inlining permet d'éliminer des appels, des allocations et du trafic mémoire inutiles, et ouvre la porte à d'autres optimisations, tandis que copier le corps du callee est la partie la plus simple à implémenter. Le vrai défi est de décider quand et quoi inliner, car des choix inadaptés peuvent gonfler le code, dégrader la localité cache, empêcher l'inlining d'autres fonctions clés et augmenter le temps de compilation. Les heuristiques communes se basent sur des profils d'appels et de types, la taille cumulée du caller et du callee, la profondeur d'inlining, la polymorphie, l'usage de la pile, la fréquence d'appel et le mode du compilateur. Les moteurs et travaux étudiés (Cinder, PyPy, V8, JavaScriptCore, SpiderMonkey, HotSpot, ART, HHVM, .NET, Dart, Graal, etc.) expérimentent aussi le split par contexte, l'inlining de bytecode, les tiers multiples, les essais d'inlining et l'apprentissage automatique pour améliorer ces décisions.