Mistério do Atraso no Login do Windows 7: Fundos de Cor Sólida São os Culpavos?

2025-04-29
Mistério do Atraso no Login do Windows 7: Fundos de Cor Sólida São os Culpavos?

O autor, um usuário de longa data de fundos de cor sólida desde o Windows 95, descobriu um atraso de 30 segundos na tela de boas-vindas do Windows 7 ao usar um papel de parede de cor sólida. Isso não é um tempo de login mais longo, mas sim um tempo limite acionado quando o sistema aguarda um sinal indicando o término do carregamento do papel de parede. Fundos de cor sólida, sem informações de bitmap, impedem que esse sinal seja enviado. Um problema semelhante existe com a política de grupo "Ocultar ícones da área de trabalho", onde um erro de codificação impede que o sinal de pronto seja enviado. A Microsoft corrigiu isso no Windows 7 alguns meses após seu lançamento. O autor também explica sua preferência por configurações padrão, simplificando os relatórios e a resolução de bugs.

Leia mais
Desenvolvimento Desempenho do Sistema

Nunca suspenda uma thread em seu próprio processo!

2025-04-15
Nunca suspenda uma thread em seu próprio processo!

Um cliente encontrou um problema de travamento de baixa frequência e longo prazo: sua thread de interface do usuário chamava o kernel e simplesmente travava. O dump do kernel não conseguia mostrar um rastreamento de pilha do modo de usuário porque a pilha havia sido descartada. A investigação revelou uma thread watchdog que periodicamente suspendia a thread da interface do usuário para capturar rastreamentos de pilha, mas desta vez ela travou por mais de cinco horas. A causa raiz: um deadlock. A thread watchdog, tentando obter um rastreamento de pilha, precisava de uma trava de tabela de função, mas a thread da interface do usuário estava suspensa, mantendo a trava. O artigo enfatiza nunca suspender uma thread dentro de seu próprio processo, pois isso aumenta o risco de deadlocks devido à contenção de recursos. Para suspender uma thread e capturar sua pilha, faça-o de outro processo para evitar deadlocks.

Leia mais
Desenvolvimento suspensão de thread

O Mistério do Adaptador Passivo de Mouse USB para PS/2

2025-03-28
O Mistério do Adaptador Passivo de Mouse USB para PS/2

Mouses USB antigos frequentemente incluíam um adaptador verde para converter a tomada USB Tipo-A para PS/2. Este não era um adaptador inteligente; era puramente mecânico, sem circuitos. O próprio mouse fazia a conversão, detectando o tipo de sinal (USB ou PS/2) e ajustando-se de acordo. É análogo a um adaptador de energia simples – a inteligência reside no dispositivo, não no adaptador. Portanto, se você encontrar um desses, lembre-se de que é apenas um conector físico; a conversão real acontece dentro do mouse de barramento duplo.

Leia mais

Depurando uma condição de corrida: a armadilha do RtlRunOnceExecuteOnce

2025-03-23
Depurando uma condição de corrida: a armadilha do RtlRunOnceExecuteOnce

Um colega encontrou um problema complicado de concorrência durante uma sessão semanal de depuração: uma seção crítica falhou em impedir que duas threads entrassem no mesmo bloco de código, levando a uma falha de registro duplo do `TraceLoggingRegister`. A depuração aprofundada revelou a causa raiz: a função de inicialização `InitializeCriticalSectionOnce` para `RtlRunOnceExecuteOnce` retornou incorretamente `STATUS_SUCCESS` (0). Isso levou `RtlRunOnceExecuteOnce` a acreditar que a inicialização falhou, fazendo com que ele re-inicializasse a seção crítica a cada chamada, acionando a condição de corrida. A solução foi alterar o valor de retorno para `TRUE`, ou mais elegantemente, substituir `CRITICAL_SECTION` por `SRWLOCK`. Este caso destaca como erros sutis de valor de retorno podem levar a consequências graves e sublinha a importância de escolher o primitivo de sincronização apropriado.

Leia mais
Desenvolvimento

Compilador TypeScript Nativo: Aumento de Desempenho de 10x

2025-03-11
Compilador TypeScript Nativo: Aumento de Desempenho de 10x

A equipe do TypeScript anunciou uma porta nativa do compilador e das ferramentas do TypeScript para melhorar dramaticamente o desempenho. Essa implementação nativa deve acelerar drasticamente a inicialização do editor, reduzir a maioria dos tempos de compilação em 10 vezes e reduzir substancialmente o uso de memória. Testes iniciais mostram melhorias na velocidade de compilação de mais de 10 vezes para vários projetos grandes (por exemplo, VS Code, Playwright). O TypeScript nativo futuro (previsto como TypeScript 7) suportará refatorações mais avançadas, análise de código mais profunda e lançará a base para ferramentas de desenvolvimento de IA de próxima geração. O TypeScript 6 (baseado em JS) continuará sendo mantido para garantir uma transição suave.

Leia mais

Problema sutil de invocação do C++/WinRT e sua correção

2025-03-09
Problema sutil de invocação do C++/WinRT e sua correção

Um pull request do C++/WinRT corrigiu uma ambiguidade na chamada para `invoke` em `winrt::impl::promise_base::set_completed`, causada pela Pesquisa Dependente de Argumentos (ADL). A atualização para corrotinas C++20 expandiu o espaço de pesquisa ADL, encontrando inesperadamente `std::invoke` em vez do `winrt::impl::invoke` pretendido. O artigo detalha o mecanismo ADL e fornece uma correção para versões mais antigas do C++/WinRT: declarando uma função `invoke` mais adequada no namespace `winrt::Windows::Foundation` para guiar o compilador. Essa correção também inclui uma asserção estática para garantir que seja removida automaticamente após a atualização do C++/WinRT.

Leia mais
Desenvolvimento

A Armadilha do 'Outro' em Enumerações: Compatibilidade de Versão e Enumerações Abertas

2025-03-02
A Armadilha do 'Outro' em Enumerações: Compatibilidade de Versão e Enumerações Abertas

Este artigo discute as armadilhas de usar um valor 'Outro' (por exemplo, WidgetFlavor::Outro) em enums C++. Adicionar novos valores de enum apresenta um desafio: como lidar com eles e manter a compatibilidade com versões de código mais antigas. O autor sugere evitar o 'Outro' completamente e declarar o enum como aberto, permitindo que os programas lidem com valores não reconhecidos de forma independente. Isso resolve elegantemente problemas de compatibilidade de versão, evitando confusão ao adicionar novos valores de enum e garantindo transições suaves entre códigos antigos e novos.

Leia mais
Desenvolvimento Compatibilidade de Versão

Melhorias significativas no MSVC Address Sanitizer (ASan)

2025-02-25
Melhorias significativas no MSVC Address Sanitizer (ASan)

A Microsoft melhorou significativamente a qualidade do MSVC Address Sanitizer (ASan). Eles transferiram com sucesso grandes partes do ASan para o LLVM, permitindo uma integração mais rápida das melhorias da comunidade LLVM. Além disso, integraram o ASan na base de código do MSVC, incluindo o compilador, o vinculador e as ferramentas, permitindo a detecção de problemas de segurança de memória em integração contínua. O Visual Studio 2022 versão 17.13 inclui várias correções, reduzindo falsos positivos, melhorando os relatórios de erros e lidando com cenários de multiprocessamento.

Leia mais
Desenvolvimento

Instalador do Windows 95: A história surpreendentemente complexa de um pequeno SO

2025-02-17
Instalador do Windows 95: A história surpreendentemente complexa de um pequeno SO

Este artigo revela a complexidade oculta do programa de instalação do Windows 95. Para criar um instalador aparentemente simples, a equipe teve que construir um minissistema operacional do zero dentro do MS-DOS, incluindo bibliotecas gráficas, um gerenciador de janelas, suporte multilíngue e até mesmo compatibilidade com o Windows 3.1. Eles acabaram percebendo que era muito mais eficiente usar o tempo de execução do Windows 3.1 existente, evitando enormes esforços de desenvolvimento. A história destaca a importância da reutilização de código na engenharia de software e expõe a natureza surpreendentemente complexa do programa de instalação do Windows 95.

Leia mais
Desenvolvimento

A Tela 'Agora é Seguro Desligar o Computador': Uma Viagem pela Nostalgia do Windows 95

2025-02-16
A Tela 'Agora é Seguro Desligar o Computador': Uma Viagem pela Nostalgia do Windows 95

Você se lembra da mensagem 'Agora é seguro desligar o computador' no Windows 95? Esta história narra um episódio divertido em um avião, onde um passageiro ao lado repetidamente reiniciava seu laptop após ver a tela 'O Windows foi desligado', sem perceber que precisava desligar a máquina manualmente. Isso destaca a falta de gerenciamento de energia em computadores mais antigos e explica por que o Windows 95 incluiu a mensagem: um lembrete gentil de que era seguro pressionar o botão liga/desliga.

Leia mais
Tecnologia

Anedota da reunião de especificações USB: O prêmio do azul translúcido

2025-02-10
Anedota da reunião de especificações USB: O prêmio do azul translúcido

Em uma reunião de especificação USB, uma empresa exibiu seus drives de disquete USB, oferecendo surpreendentemente versões separadas para PCs e Macs. Os membros do comitê ficaram perplexos, pois a especificação garantia que o mesmo drive funcionasse em ambos os sistemas. O representante explicou que os drives eram eletronicamente idênticos; a única diferença era que a versão Mac vinha em plástico azul translúcido e custava mais. Isso refletiu a tendência popular de plástico translúcido do iMac na época e destacou como alguns fabricantes alavancaram as diferenças de design para preços premium.

Leia mais

O 'Coletador de Lixo Nulo' em Software de Mísseis: Vazamentos de Memória? Não é um Problema!

2025-02-07
O 'Coletador de Lixo Nulo' em Software de Mísseis: Vazamentos de Memória? Não é um Problema!

Um desenvolvedor relata uma aplicação inteligente de um 'coletor de lixo nulo' em software de mísseis. Devido ao tempo de voo limitado e à memória de hardware abundante, vazamentos de memória no programa não eram uma preocupação. Os engenheiros calcularam o potencial vazamento de memória durante o voo e adicionaram o dobro dessa quantidade de memória para garantir que o programa não travasse antes da conclusão da missão. Essa abordagem utilizou de forma inteligente as restrições de tempo de execução do programa, resolvendo efetivamente o problema de vazamento de memória — uma espécie de 'coleta de lixo definitiva'.

Leia mais

Reestruturação Criptográfica do Go 1.24: Alcançando Conformidade com o FIPS 140-3

2025-02-06

O Go 1.24 reformulou significativamente seus pacotes de criptografia para atingir a conformidade com o FIPS 140-3. Este é um grande passo em frente, com uma implementação em Go puro (e assembly Go) de um módulo criptográfico validado pelo FIPS 140-3, eliminando a dependência de cgo ou chamadas de sistema. O Microsoft Go 1.24 também foi atualizado, adicionando suporte de pré-visualização para macOS e suporte aprimorado para Azure Linux, mas mantém o uso de bibliotecas do sistema para criptografia, divergindo da abordagem oficial do Go. Novas variáveis de ambiente como GODEBUG=fips140=on e GOFIPS140=latest controlam o modo FIPS; o tempo de execução o ativa automaticamente em sistemas compatíveis com FIPS (Azure Linux, Windows).

Leia mais
Desenvolvimento

Um Flaw de Design e um Bule Oculto no Protetor de Tela 3D Pipes do Windows

2024-12-28
Um Flaw de Design e um Bule Oculto no Protetor de Tela 3D Pipes do Windows

O adorado protetor de tela 3D Pipes do Windows, conhecido por suas animações de canos hipnotizantes, esconde um segredo pouco conhecido: um bule que aparece raramente. Este bule é uma homenagem ao bule de Utah, um objeto de referência padrão em computação gráfica, mas sua taxa de aparecimento incrivelmente baixa levou a reclamações de usuários sobre baixa produtividade. O artigo também revela que, em versões mais antigas do Windows, o protetor de tela causava alto uso da CPU em servidores devido à renderização de software, recomendando um protetor de tela de tela preta para servidores.

Leia mais

Erros de compilador C++: Erros sem sentido de uma declaração de função

2024-12-12
Erros de compilador C++: Erros sem sentido de uma declaração de função

Um desenvolvedor adicionando suporte XAML a um aplicativo C++ encontrou uma série de erros de compilador simplesmente incluindo o arquivo de cabeçalho winrt/Windows.UI.Xaml.h. Os erros decorreram do que parecia ser uma declaração de função normal: `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` A causa raiz era uma macro preexistente chamada ErrorMessage no projeto do desenvolvedor, conflitando com o nome da função. Essa macro criava um objeto ErrorMessageString e retornava um ponteiro para uma string de mensagem de erro. A falta de limites da macro fez com que o compilador interpretasse erroneamente a declaração da função como uma invocação de macro, resultando em erros como "argumentos insuficientes". A solução envolveu desabilitar a macro usando #pragma undef antes de incluir o cabeçalho ou remover a macro completamente e substituí-la por uma função inline.

Leia mais