Palestra Windows Internals

Enquanto não sai o próximo post da série Inside the Machine, fiz uma apresentação sobre fundamentos de Windows Internals para alguns DBAs SQL Server.

Nessa palestra falei, entre outras coisas, sobre um pequeno segredo para gerar dumps “full” do SQL Server sem que se tenha que suspender o processo original do mesmo. Isso é bastante interessante em cenários onde você tem uma instância com um Buffer Pool relativamente grande (30 GB+) e não pode manter o processo parado enquanto gera um dump.

Pretendo (um dia haha) postar sobre isso, mas por enquanto veja nos slides para maiores informações. Vale ressaltar que essa funcionalidade não é documentada, não é suportada pela Microsoft e pode destruir o processo da sua instância SQL, corromper os bancos de dados, explodir o seu data center e ainda por cima matar alguns gatinhos! Não use em produção.

Segue o link para download do pdf: http://bit.ly/1KgXElG

Se você quer se aprofundar mais nos assuntos, recomendo dar uma olhadinha nas referências ao fim da apresentação e também o meu treinamento on-demand de Windows Internals na Sr. Nimbus.

No mais, fique à vontade para deixar seus comentários sobre o material!

Pin It

Windows Internals

MCTS Microsoft Certified Technology Specialist Windows Internals Logo

Microsoft Windows Internals Specialist

Não costumo fazer alarde em relação à certificações, mas acredito que essa vale um blog post. :)

Nesta semana realizei a prova de certificação Windows Internals e, com muito gosto, posso dizer que fui aprovado!

Quando soube a respeito dessa prova, ainda em 2011, fiquei bastante interessado. Segue a descrição do exame:

“This exam validates deep technical skills in the area of Windows Internals. Including troubleshooting operating systems that are not performing as expected or applications that are not working correctly, identifying code defects, and developing and debugging applications that run unmanaged code or that are tightly integrated with the operating system, such as Microsoft SQL Server, third party applications, antivirus software, and device drivers.”

Há alguns meses lançaram no Defrag Tools do Channel 9 um episódio falando do exame, e decidi que realmente era hora de tentar.

Esse exame marcou um fim de um ciclo para mim. Hoje estou me dedicando bastante a outras áreas de TI, relacionados ou não diretamente a Windows, mas tenho certeza que o conhecimento adquirido e a certificação ainda vão me auxiliar muito ao longo da minha carreira, além de dar mais pique para continuar gravando os meus treinamentos de Windows Internals pela Sr. Nimbus.

Os skills mensurados durante o exame foram basicamente:

  • Identifying Architectural Components (16%)
  • Designing Solutions (15%)
  • Monitoring Windows (14%)
  • Analyzing User Mode (18%)
  • Analyzing Kernel Mode (19%)
  • Debugging Windows (18%)

Para informações à respeito do que cai em cada tópico, esse post do blog MSDN NtDebugging lista o material e ferramentas que foram cobrados, e no episódio do Defrag Tools já mencionado acima algumas dessas ferramentas são demonstradas.

Pontos gerais da prova

A prova em si é bem prática, com muito debugging tanto em user mode quanto kernel mode. Cobrou bastante comandos do Windbg, e alguns parâmetros. Também caíram questões de desenvolvimento de soluções – drivers e apps Win32 – com direito a código-fonte em C e perguntas sobre parâmetros de APIs em algumas questões. Outro ponto que caiu bastante foi troubleshooting de drivers e aplicativos mal comportados com ferramentas Sysinternals e do WDK.

No geral, eu gostei da prova. Bastante prática e objetiva. As questões e cenários eram bem mais simples do que encontramos no dia a dia mas o suficiente, na minha opinião, para aferir se o profissional realmente conhece os conceitos do sistema operacional, kernel e API Win32, e se tem experiência real realizando trobleshooting, tuning e desenvolvimento nativo e baixo-nível.

EOL da versão 2008

O lado ruim, entretanto, é que a prova não estará mais disponível. Foi descontinuada no dia 31/07, um dia após o meu exame.

Infelizmente a Microsoft ainda não disponibilizou uma versão atualizada da prova para as novas versões do sistema operacional. Levando em conta que os livros Windows Internals do Server 2008 R2 (Client 7) acabaram de ser lançados e que os de 2012 ainda nem têm previsão, não acredito que teremos outra prova tão cedo, o que é uma pena.

O pessoal do Defrag Tools até tentou intervir junto ao time de certificações da Microsoft para que ela mantivesse o exame disponível por mais algum tempo, mas sem sucesso.

Na minha opinião, deveriam ter mantido essa prova, pelo menos até introduzir a versão atualizada. De qualquer maneira, isso me forçou a finalmente criar coragem e realizá-la depois de enrolar por muito tempo, caso contrário teria que esperar uma próxima versão em um futuro distante…

Que venham os próximos desafios!

Pin It

C++… em 2012?

Na última década nós programadores C++ temos visto cada vez mais tecnologias como Java e .Net serem “empurradas” pela indústria.

Nós vimos o nosso querido Visual Studio, onde costumávamos ter suporte de primeira classe, ser transformado em Visual .Net Studio ao longo dos anos, com um suporte ao C++ subpar e às vezes até negligenciado por parte da Microsoft. Comparando o Intellisense do C# com o do C++ nós vemos a gigantesca discrepância do suporte oferecido entre as duas linguagens. Refactoring? Testes unitários? Snippets? Pff!

Mas quem vem acompanhando de perto os trends na indústria pôde perceber um reposicionamento da Microsoft nos últimos anos quanto ao código nativo, em especial à linguagem C++. A Microsoft voltou a apostar em código nativo nos últimos tempos e isso estava ficando bem claro, principalmente nos canais da comunidade da Microsoft e também nos projetos internos em Redmond, como C++ AMP, Casablanca, Rx nativo e LINQ for C/C++. Mas o que faz a Microsoft “voltar atrás” na questão de código gerenciado vs. nativo?

A verdade é que a Microsoft não está voltando atrás, está indo adiante. Com o advento do C++11 depois de anos de pesquisa e debate pelo comitê, o C++ finalmente repareceu como uma linguagem moderna, produtiva e, claro, eficiente. E apesar de tanto esforço por parte da Microsoft em otimizar a CLR, a verdade é que ainda não temos a mesma eficiência, ou ao menos eficiência comparável ao do código nativo. Classes de aplicações que necessitam de alto desempenho e eficiência como jogos, servidores, bancos de dados, entre diversos outros ainda são escritos em código nativo e muito provavelmente vão continuar assim por muitos anos.

Mas não se trata apenas de manter código legado.

O lançamento do Windows para dispositivos portáteis ou tablets, dispositivos que não são famosos pela sua vida útil de bateria ou poder de processamento e onde cada ciclo de processamento desperdiçado afeta diretamente a experiência do usuário, colocamos novamente em pauta a questão da eficiência. E com o anúncio do WinRT a Microsoft mostrou de vez que o C++ está novamente en vogue em Redmond.

O C++ hoje não é a mesma linguagem que costumava ser há 20 anos, ou mesmo 5 anos atrás. Claro, biblotecas como Boost e Qt vêm empurrando os limites do C++ há algum tempo, mas agora que temos um padrão definido as coisas começam a melhorar em termos de interoperabilidade e produtividade “out of the box”, coisas que vêm sendo criticadas (e com razão!) pelos usuários das linguagens ditas gerenciadas (.Net/Java) há bastante tempo. A verdade é que C++ dormiu no tempo, mas finalmente tivemos uma release digna não apenas de trazer novamente o C++ ao mundo moderno da programação, mas colocá-lo de volta à frente. Ainda falta muita coisa, sim, mas foi um grande (e importante!) passo adiante, e projetos como os supracitados são o caminho para resolvê-los.

Temos agora uma linguagem com um excelente nível de abstração, e isso significa maior produtividade por parte do programador, mas onde não pagamos um alto custo por essa abstração. A linguagem foi desenhada parar ser otimizável de forma que o compilador pode efetivamente remover as diversas camadas de abstração e fornecer um código executável de alto desempenho.

Visando principalmente atender esse novo mercado do Windows a Microsoft está novamente dando a merecida importância ao C++. Isso envolve não apenas a linguagem em si, mas todo o ecossistema de desenvolvimento, incluindo suporte de ferramentas e IDE para aumentar a produtividade dos programadores. Pensando nisso, a nova versão do Visual Studio trás, além da mais nova versão do compilador e mais suporte ao novo padrão da linguagem (C++11), uma melhoria significativa no suporte ao código C++, colocando-a novamente lado-a-lado das linguagens C# e VB.Net. Suporte este que já era esperado há muito tempo, diga-se de passagem!

E com o suporte de primeira classe para desenvolvimento para a nova UI, conhecida como Metro, a Microsoft está apostando também na utilização do DirectX 11 para a criação de aplicações ricas e de alto desempenho (incluindo, mas não restrito a jogos) para dispostivos móveis através de código nativo.

Apesar do chamado “renaissance” do código nativo na Microsoft, não existe nenhuma razão pelo qual código nativo e código gerenciado não possam coexistir lado-a-lado. A idéia, ao contrário do que algumas pessoas mal informadas estão dizendo, não é tornar o .Net obsoleto, e sim atender à demanda do mercado. Aplicações como LOB (Line of Business) continuarão a se beneficiar pela agilidade de desenvolvimento e produtividade oferecidos pelo .Net e as linguagens gerenciadas vão, sem dúvida alguma, continuar liderando esse setor, por exemplo.

O momento nunca foi tão bom para programadores C++, e pelo que tudo indica as coisas vão continuar melhorando. O projeto Casablanca é um excelente exemplo da direção que o C++ tem tomado e onde nós pensamos em ver a linguagem no futuro.

C++ está morto. Vida longa ao C++! ;)

Se você tiver interesse e quiser saber mais:

Welcome Back to C++ (Modern C++)
http://msdn.microsoft.com/en-us/library/hh279654(v=vs.110).aspx

C++11, VC++11 and Beyond
http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond

C++ – A Modern language for Modern Times
http://channel9.msdn.com/Shows/The+Knowledge+Chamber/C-A-Language-for-Modern-Times

Casablanca
http://msdn.microsoft.com/en-us/devlabs/casablanca

Pin It