Mystère du délai de connexion Windows 7 : les fonds d’écran de couleur unie sont-ils les coupables ?

2025-04-29
Mystère du délai de connexion Windows 7 : les fonds d’écran de couleur unie sont-ils les coupables ?

L’auteur, utilisateur de fonds d’écran de couleur unie depuis Windows 95, a découvert un délai de 30 secondes sur l’écran d’accueil de Windows 7 lorsqu’il utilise un fond d’écran uni. Il ne s’agit pas d’un temps de connexion plus long, mais d’un délai d’attente déclenché lorsque le système attend un signal indiquant que le chargement du fond d’écran est terminé. Les fonds d’écran de couleur unie, dépourvus d’informations bitmap, empêchent l’envoi de ce signal. Un problème similaire existe avec la stratégie de groupe « Masquer les icônes du bureau », où une erreur de codage empêche l’envoi du signal de disponibilité. Microsoft a corrigé ce problème dans Windows 7 quelques mois après sa sortie. L’auteur explique également sa préférence pour les configurations par défaut, ce qui simplifie les rapports et la résolution des bogues.

Lire plus
Développement Performances du système

Ne jamais suspendre un thread dans son propre processus !

2025-04-15
Ne jamais suspendre un thread dans son propre processus !

Un client a rencontré un problème de blocage de faible fréquence et de longue durée : son thread d’interface utilisateur appelait le noyau et se bloquait simplement. Le vidage du noyau n’a pas pu afficher une trace de pile en mode utilisateur car la pile avait été échangée. L’enquête a révélé un thread watchdog qui suspendait périodiquement le thread d’interface utilisateur pour capturer des traces de pile, mais cette fois, il s’est bloqué pendant plus de cinq heures. La cause racine : une interblocage. Le thread watchdog, essayant d’obtenir une trace de pile, avait besoin d’un verrou de table de fonctions, mais le thread d’interface utilisateur était suspendu, en maintenant le verrou. L’article souligne qu’il ne faut jamais suspendre un thread dans son propre processus, car cela augmente le risque d’interblocages en raison de la contention des ressources. Pour suspendre un thread et capturer sa pile, faites-le à partir d’un autre processus afin d’éviter les interblocages.

Lire plus

Le Mystère de l'Adaptateur Passif Souris USB vers PS/2

2025-03-28
Le Mystère de l'Adaptateur Passif Souris USB vers PS/2

Les anciennes souris USB comprenaient souvent un adaptateur vert pour convertir la prise USB Type-A en PS/2. Il ne s'agissait pas d'un adaptateur intelligent ; il était purement mécanique, sans circuit. La souris elle-même effectuait la conversion, en détectant le type de signal (USB ou PS/2) et en s'ajustant en conséquence. C'est analogue à un adaptateur secteur simple : l'intelligence réside dans le périphérique, pas dans l'adaptateur. Ainsi, si vous en trouvez un, n'oubliez pas qu'il ne s'agit que d'un connecteur physique ; la conversion réelle a lieu dans la souris à double bus.

Lire plus
Matériel Adaptateur Souris

Débogage d'une condition de concurrence : le piège de RtlRunOnceExecuteOnce

2025-03-23
Débogage d'une condition de concurrence : le piège de RtlRunOnceExecuteOnce

Un collègue a rencontré un problème de concurrence délicat lors d'une session de débogage hebdomadaire : une section critique n'a pas réussi à empêcher deux threads d'entrer dans le même bloc de code, ce qui a entraîné une double inscription erronée de `TraceLoggingRegister`. Un débogage approfondi a révélé la cause racine : la fonction d'initialisation `InitializeCriticalSectionOnce` pour `RtlRunOnceExecuteOnce` a renvoyé incorrectement `STATUS_SUCCESS` (0). Cela a amené `RtlRunOnceExecuteOnce` à croire que l'initialisation avait échoué, ce qui l'a fait réinitialiser la section critique à chaque appel, déclenchant ainsi la condition de concurrence. La solution a consisté à modifier la valeur de retour en `TRUE`, ou plus élégamment, à remplacer `CRITICAL_SECTION` par `SRWLOCK`. Ce cas souligne à quel point des erreurs subtiles de valeur de retour peuvent avoir des conséquences graves et souligne l'importance du choix d'une primitive de synchronisation appropriée.

Lire plus
Développement

Compilateur TypeScript natif : amélioration des performances multipliée par 10

2025-03-11
Compilateur TypeScript natif : amélioration des performances multipliée par 10

L'équipe TypeScript a annoncé un portage natif du compilateur et des outils TypeScript pour améliorer considérablement les performances. Cette implémentation native devrait accélérer considérablement le démarrage de l'éditeur, réduire la plupart des temps de compilation d'un facteur 10 et réduire considérablement l'utilisation de la mémoire. Des tests initiaux montrent des améliorations de la vitesse de compilation de plus de 10 fois pour plusieurs grands projets (par exemple, VS Code, Playwright). Le futur TypeScript natif (prévu pour TypeScript 7) prendra en charge des refactorisations plus avancées, une analyse de code plus approfondie et jettera les bases des outils de développement d'IA de nouvelle génération. TypeScript 6 (basé sur JS) continuera d'être maintenu pour assurer une transition en douceur.

Lire plus
Développement Compilateur natif

Problème subtil d'appel de fonction C++/WinRT et sa résolution

2025-03-09
Problème subtil d'appel de fonction C++/WinRT et sa résolution

Une requête d'extraction de C++/WinRT a corrigé une ambiguïté dans l'appel à `invoke` dans `winrt::impl::promise_base::set_completed`, causée par la recherche dépendante des arguments (ADL). La mise à jour vers les coroutines C++20 a élargi l'espace de recherche ADL, trouvant inopinément `std::invoke` au lieu de `winrt::impl::invoke`. L'article détaille le mécanisme ADL et fournit un correctif pour les anciennes versions de C++/WinRT : déclaration d'une fonction `invoke` mieux adaptée dans l'espace de noms `winrt::Windows::Foundation` pour guider le compilateur. Ce correctif inclut également une assertion statique pour garantir sa suppression automatique après la mise à jour de C++/WinRT.

Lire plus
Développement

Le Piège du 'Autre' dans les Énumérations : Compatibilité des Versions et Énumérations Ouvertes

2025-03-02
Le Piège du 'Autre' dans les Énumérations : Compatibilité des Versions et Énumérations Ouvertes

Cet article traite des problèmes liés à l'utilisation d'une valeur 'Autre' (par exemple, WidgetFlavor::Autre) dans les énumérations C++. L'ajout de nouvelles valeurs d'énumération pose un défi : comment les gérer et maintenir la compatibilité avec les anciennes versions du code. L'auteur suggère d'éviter complètement 'Autre' et de déclarer l'énumération comme ouverte, permettant aux programmes de gérer les valeurs non reconnues indépendamment. Cela résout élégamment les problèmes de compatibilité des versions, évitant toute confusion lors de l'ajout de nouvelles valeurs et garantissant des transitions fluides entre l'ancien et le nouveau code.

Lire plus

Améliorations majeures de MSVC Address Sanitizer (ASan)

2025-02-25
Améliorations majeures de MSVC Address Sanitizer (ASan)

Microsoft a considérablement amélioré la qualité de MSVC Address Sanitizer (ASan). Ils ont transféré avec succès les principales parties d'ASan vers LLVM, permettant une intégration plus rapide des améliorations de la communauté LLVM. De plus, ils ont intégré ASan dans la base de code MSVC, y compris le compilateur, l'éditeur de liens et les outils, permettant la détection des problèmes de sécurité mémoire en intégration continue. Visual Studio 2022 version 17.13 inclut de nombreux correctifs, réduisant les faux positifs, améliorant les rapports d'erreurs et gérant les scénarios multi-processus.

Lire plus
Développement

Programme d'installation de Windows 95 : l'histoire étonnamment complexe d'un mini-système d'exploitation

2025-02-17
Programme d'installation de Windows 95 : l'histoire étonnamment complexe d'un mini-système d'exploitation

Cet article révèle la complexité cachée du programme d'installation de Windows 95. Pour créer un programme d'installation apparemment simple, l'équipe a dû créer un mini-système d'exploitation à partir de zéro sous MS-DOS, comprenant des bibliothèques graphiques, un gestionnaire de fenêtres, une prise en charge multilingue et même une compatibilité avec Windows 3.1. Ils ont finalement réalisé qu'il était beaucoup plus efficace d'utiliser l'environnement d'exécution existant de Windows 3.1, évitant ainsi des efforts de développement considérables. L'histoire souligne l'importance de la réutilisation du code en génie logiciel et expose la nature étonnamment complexe du programme d'installation de Windows 95.

Lire plus
Développement

L'écran 'Il est maintenant possible d'éteindre votre ordinateur' : un voyage nostalgique vers Windows 95

2025-02-16
L'écran 'Il est maintenant possible d'éteindre votre ordinateur' : un voyage nostalgique vers Windows 95

Vous vous souvenez du message 'Il est maintenant possible d'éteindre votre ordinateur' sous Windows 95 ? Cette histoire raconte un épisode amusant dans un avion où un voisin de siège a redémarré son ordinateur portable à plusieurs reprises après avoir vu l'écran 'Windows a été arrêté', ne réalisant pas qu'il devait éteindre la machine manuellement. Cela souligne le manque de gestion de l'alimentation dans les anciens ordinateurs et explique pourquoi Windows 95 incluait ce message : un rappel amical qu'il était sûr d'appuyer sur le bouton d'alimentation.

Lire plus
Technologie

Anecdote de la réunion des spécifications USB : la prime du bleu translucide

2025-02-10
Anecdote de la réunion des spécifications USB : la prime du bleu translucide

Lors d'une réunion sur les spécifications USB, une société a présenté ses lecteurs de disquettes USB, proposant étonnamment des versions distinctes pour PC et Mac. Les membres du comité étaient perplexes, car les spécifications garantissaient que le même lecteur fonctionnait sur les deux systèmes. Le représentant a expliqué que les lecteurs étaient électroniquement identiques ; la seule différence était que la version Mac était en plastique bleu translucide et coûtait plus cher. Cela reflétait la tendance populaire du plastique translucide de l'iMac à l'époque et soulignait comment certains fabricants tiraient parti des différences de conception pour des prix majorés.

Lire plus

Le 'Garbage Collector Nul' dans les logiciels de missiles : Fuites de mémoire ? Pas de problème !

2025-02-07
Le 'Garbage Collector Nul' dans les logiciels de missiles : Fuites de mémoire ? Pas de problème !

Un développeur raconte une application ingénieuse d'un 'garbage collector nul' dans un logiciel de missile. En raison du temps de vol limité et de la mémoire matérielle abondante, les fuites de mémoire dans le programme n'étaient pas une préoccupation. Les ingénieurs ont calculé la fuite de mémoire potentielle pendant le vol et ont ajouté le double de cette quantité de mémoire pour garantir que le programme ne plante pas avant la fin de la mission. Cette approche a intelligemment exploité les contraintes d'exécution du programme, résolvant efficacement le problème des fuites de mémoire : une sorte de 'garbage collection ultime'.

Lire plus
Développement fuites mémoire

Refonte de la cryptographie de Go 1.24 : conformité FIPS 140-3

2025-02-06

Go 1.24 a considérablement refactorisé ses paquets de cryptographie pour atteindre la conformité FIPS 140-3. Il s’agit d’un progrès majeur, avec une implémentation purement Go (et assembleur Go) d’un module cryptographique validé FIPS 140-3, éliminant ainsi la dépendance à cgo ou aux appels système. Microsoft Go 1.24 a également été mis à jour, ajoutant une prise en charge préliminaire de macOS et une meilleure prise en charge d’Azure Linux, mais il continue d’utiliser des bibliothèques système pour la cryptographie, ce qui diffère de l’approche officielle de Go. De nouvelles variables d’environnement telles que GODEBUG=fips140=on et GOFIPS140=latest contrôlent le mode FIPS ; l’exécution l’active automatiquement sur les systèmes compatibles FIPS (Azure Linux, Windows).

Lire plus
Développement

Un défaut de conception et une théière cachée dans l'économiseur d'écran 3D Pipes de Windows

2024-12-28
Un défaut de conception et une théière cachée dans l'économiseur d'écran 3D Pipes de Windows

L'économiseur d'écran 3D Pipes de Windows, apprécié pour ses animations de tuyaux hypnotiques, cache un secret peu connu : une théière qui apparaît rarement. Cette théière est un hommage à la théière de l'Utah, un objet de référence standard en infographie, mais son taux d'apparition incroyablement faible a suscité des plaintes d'utilisateurs concernant une faible productivité. L'article révèle également que, dans les versions antérieures de Windows, l'économiseur d'écran causait une forte utilisation du processeur sur les serveurs en raison du rendu logiciel, recommandant un économiseur d'écran noir pour les serveurs.

Lire plus

Erreurs du compilateur C++ : erreurs absurdes provenant d’une déclaration de fonction

2024-12-12
Erreurs du compilateur C++ : erreurs absurdes provenant d’une déclaration de fonction

Un développeur ajoutant la prise en charge de XAML à une application C++ a rencontré une série d’erreurs du compilateur simplement en incluant le fichier d’en-tête winrt/Windows.UI.Xaml.h. Les erreurs provenaient de ce qui semblait être une déclaration de fonction normale : `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` La cause première était une macro préexistante nommée ErrorMessage dans le projet du développeur, entrant en conflit avec le nom de la fonction. Cette macro créait un objet ErrorMessageString et retournait un pointeur vers une chaîne de caractères de message d’erreur. L’absence de limites de la macro a fait que le compilateur interprétait erronément la déclaration de la fonction comme une invocation de macro, ce qui a entraîné des erreurs telles que « arguments insuffisants ». La solution consistait à désactiver la macro à l’aide de #pragma undef avant d’inclure l’en-tête ou à supprimer complètement la macro et à la remplacer par une fonction inline.

Lire plus