La guerre secrète des droits d'auteur derrière le Plug and Play de Windows 95

2025-06-29
La guerre secrète des droits d'auteur derrière le Plug and Play de Windows 95

Implémenter le Plug and Play dans Windows 95 n'a pas été une mince affaire. Pour faire fonctionner l'ancien matériel avec la nouvelle fonctionnalité, les ingénieurs ont utilisé des solutions ingénieuses. Un exemple amusant a impliqué des fabricants ajoutant la chaîne "Not Copyright Fabrikam Computer" à leur BIOS. C'était une astuce intelligente pour tromper la vérification de licence de LitWare Word Processor, débloquant la version complète sans être un PC Fabrikam sous licence. Cela met en évidence les défis de la compatibilité des anciens PC et les efforts déployés par les fabricants pour obtenir des licences de logiciels.

Lire plus
Développement

La suppression « permanente » de Contoso : pas si permanente que ça

2025-06-25
La suppression « permanente » de Contoso : pas si permanente que ça

Il y a dix mois, j'ai supprimé mon compte Contoso et j'ai reçu une confirmation indiquant que mes données avaient été supprimées de manière permanente et irréversible. Hier, j'ai reçu un e-mail de Contoso concernant une mise à jour de sa politique de confidentialité. Son affirmation de suppression permanente était manifestement prématurée, puisqu'ils possèdent toujours mon adresse e-mail. Cela soulève de sérieuses questions concernant la confidentialité des données et la fiabilité des promesses des entreprises.

Lire plus
Divers

Héritage de modèles C++ et construction par copie : un static_assert déroutant

2025-06-10
Héritage de modèles C++ et construction par copie : un static_assert déroutant

Cet article explore un problème troublant concernant les constructeurs de copie dans l’héritage de modèles C++. La classe `Derived` hérite de la classe `Base`, dont le constructeur de copie est supprimé. Cependant, `Derived` définit son propre constructeur de copie. Même si ce constructeur tente de copier l’objet `Base` non copiable, `std::is_copy_constructible` renvoie toujours vrai. Cela est dû au fait que le compilateur vérifie uniquement la présence d’un constructeur de copie non supprimé, et non sa capacité d’instanciation. L’auteur discute également des différences entre les constructeurs de copie explicitement définis et implicitement définis, ainsi que des implications du déplacement de la définition du constructeur de copie hors ligne.

Lire plus
Développement Construction par copie

Exécuter du code C# directement sans fichiers de projet : .NET 10 Preview 4

2025-05-29
Exécuter du code C# directement sans fichiers de projet : .NET 10 Preview 4

.NET 10 Preview 4 introduit une fonctionnalité révolutionnaire : vous pouvez désormais exécuter des fichiers C# directement à l’aide de la commande `dotnet run app.cs` — sans fichier de projet ni échafaudage ! Cela réduit considérablement la barrière à l’entrée pour C#, le rendant idéal pour l’apprentissage, le prototypage ou les scripts rapides. Tirez parti de puissantes directives au niveau des fichiers, telles que `#:package`, `#:sdk` et `#:property`, pour gérer les packages NuGet, les SDK et les propriétés MSBuild directement dans votre fichier .cs, tout en maintenant la compatibilité avec les concepts MSBuild existants. Même lorsque votre script devient une application complète, la conversion vers une application basée sur un projet est transparente. Ce flux de travail simplifié simplifie l’expérience de développement C#, le rendant incroyablement accessible et pratique pour les utilitaires CLI, les scripts d’automatisation et bien plus encore.

Lire plus

Windows 11 intègre un nouvel éditeur de texte en ligne de commande : Edit

2025-05-19
Windows 11 intègre un nouvel éditeur de texte en ligne de commande : Edit

Microsoft présente Edit, un nouvel éditeur de texte en ligne de commande léger pour Windows 64 bits. Cet éditeur open source, de moins de 250 Ko, offre des fonctionnalités telles que la prise en charge de la souris, l'ouverture de plusieurs fichiers, la recherche et le remplacement, le retour à la ligne automatique et, surtout, une conception sans mode pour éviter la courbe d'apprentissage abrupte des éditeurs modaux comme Vim. Il sera disponible en avant-première dans le programme Windows Insider dans les mois à venir avant de devenir une partie standard de Windows 11.

Lire plus

Icônes MS-DOS nostalgiques : Plus utiles que le Gestionnaire de programmes ?

2025-05-16
Icônes MS-DOS nostalgiques : Plus utiles que le Gestionnaire de programmes ?

Un utilisateur a partagé son point de vue sur un ensemble d'icônes MS-DOS, arguant qu'elles sont plus pratiques que l'ensemble par défaut du Gestionnaire de programmes. Des exemples incluent des icônes pour le compilateur Microsoft Basic, Microsoft Project et Close-Up 4.0, soulignant leur utilisation historique. L'auteur souligne des défauts de conception, tels que des logos MS-DOS obsolètes ou des superpositions inappropriées. Cela déclenche une discussion sur la conception d'interface utilisateur de logiciels anciens et la nostalgie.

Lire plus
Divers

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