Archive for the ‘Off Topic’ Category

Sétimo Encontro de Programadores C/C++

20 de July de 2010

Como alguns de vocês já sabem, no próximo dia 14 de agosto acontecerá o sétimo encontro de programadores do grupo C/C++ Brasil. Mais uma vez, será um grande prazer participar do evento como palestrante e ter a oportunidade de falar um pouco sobre o desenvolvimento de drivers (pra variar). 😉

Minha primeira participação nesse evento foi em sua quarta edição, onde fiz um overview sobre arquitetura e desenvolvimento de drivers para Windows. Os slides desta palestra podem ser baixados a partir deste post. Apesar de o feedback ter sido muito bom, recebi algumas sugestões sobre mostrar mais código fonte. O desenvolvimento de drivers requer muito conceito, tanto sobre o sistema operacional quanto sobre as  regras impostas pelo I/O Manager e seus inseparáveis amigos. Assim, imaginei que mostrar código fonte sobre estruturas e regras não conhecidas pela maioria dos participantes da palestra soaria como “Nana neném que a Cuca vem…”. Mas não tem jeito, programador gosta mesmo é de código fonte.

Na sexta edição foi que tive minha segunda participação. Desta vez foquei nas caraterísticas de funcionamento e utilização da memória virtual por drivers, dei mais ênfase aos nomes das rotinas que drivers utilizam para obter os serviços do Kernel. Pois é, embora tenha melhorado ainda não foi suficiente. O resultado do feedback mais uma vez revelou que faltou exemplos práticos e código fonte pra galera.

Nesta sétima edição vou praticamente escrever, compilar, instalar, executar e depurar um driver de exemplo. Tudo alí na hora. A proposta desta palestra é demostrar como dar os estes primeiros passos para se ter um driver compilado bem alí em seu próprio notebook.

Embora essa informação também esteja na página no evento, seguem os tópicos que serão apresentados por mim:

  • O que é o Windows Driver Kit
  • Device Drivers e Software Drivers
  • WDK e os arquivos de um projeto
  • A rotina DriverEntry e DriverUnload
  • Hands on: Escrevendo e compilando um driver
  • Testando drivers em máquinas vituais
  • Hands on: Instalando o driver exemplo
  • Depurando o Kernel do Windows
  • Hands on: Depurando seu driver
  • A Tela Azul da Morte (BSOD)
  • Hands on: A primeira Tela Azul a gente nunca esquece
  • Gerando crash dumps
  • Hands on: Analisando seu crash dump
  • Dúvidas, pânico e depressão

Parece muito? Pois é, para que isso seja possível no tempo que disponho será necessário que já se tenha o ambiente preparado. Você não vai querer ver uma palestra de uma hora que vai explicar de onde baixar as ferramentas, como instalá-las e como preparar uma máquina virtual que sirva de ambiente de testes para seu novo driver. Se tudo isso for feito no dia do evento, mais uma vez vou ficar devendo o código fonte e provavelmente serei enforcado em praça pública. Eu não sei sobre vocês, mas eu não gostaria que isso acontecesse.

Baixando e Instalando o WDK

O primeiro passo dessa preparação é baixar o kit de desenvolvimento de drivers da Microsoft, o Windows Driver Kit (WDK). Esse kit contém os headers e bibliotecas necessárias para que seu driver possa utilizar as rotinas exportadas pelo Kerne, permitindo a interação do seu driver com o restante do sistema operacional. Além dos headers e bibliotecas, o kit também traz o compilador e depurador de sistema, fazendo desse kit a única ferramenta necessário para que se tenha um driver compilado e depurado.

Ainda não falei dos vários e vários exemplos de drivers que o kit traz, bem como toda a documentação necessária para a utilização das rotinas exportadas pelo Kernel. Essa documentação não serve apenas de referência, mas também como um guia de construção de drivers. Embora a documentação se proponha a servir de guia de construção de drivers, ainda recomendo fortemente a leitura de livros dedicados a essa atividade. Os livros conseguem expor as idéias com mais clareza abordando os assuntos de forma gradativa.

O fato de haver um compilador nesse kit não significa que exista um ambiente de desenvolvimento específico para drivers. O que estou querendo dizer é que não existe uma versão do Visual Studio específica para drivers, ou mesmo um plug-in que fosse instalado no Visual Studio que agregasse tais funcionalidades ao ambiente. No caso mais básico, os fontes poderiam ser editados no bom e velho Notepad. Isso não nos impede de utilizar nosso editor do coração para escrever drivers, como mostra este outro post. De fato existem algumas ferramentas com esse propósito como o VisualDDK, mas não é nada oficial.

Baixar o WDK é fácil e indolor. E quando digo indolor, estou me referendo também no sentido financeiro da idéia. O primeiro passo é baixar o WDK que está disponível no Microsoft Download Center. Seguindo as instruções, você baixará um ISO de aproximadamente 620MB que conterá toda a instalação.

O ISO pode ser queimado em uma mídia de CD, ou você pode simplesmente usar um desses aplicativos que cria uma unidade de disco virtual a partir de um arquivo de imagem. Se você não tem nenhum aplicativo desses à mão, você pode  baixar e instalar gratuitamente o OsrVitrtualCdAndDisk da OSR.

Depois de inserir o CD, execute o aplicativo KitSetup.exe que estará na pasta raíz do CD. Fazendo isso você verá a splash screen do Windows Driver Kit 7.1.0 como exibida abaixo.

Em seguida a janela exibida abaixo.

Selecione os itens como exibido acima, deixando de selecionar os itens “Device Simulation Framework” e “Windows Device Testing Framework”. Em seguida clique em OK para ver a próxima janela como exibida na figura abaixo.

Pelo menos para a palestra, simplesmente aceite o caminho de instalação sugerido, isso vaip evitar contratempos durante a palestra. Clicando OK nesta janela, apenas aceite os termos da instalação e clique em OK na janela exibida abaixo para finalizar a instalação do WDK.

Aguarde a cópia dos arquivos terminar e a instalação se encerrará.

Dando uma compiladinha, só pra…

Depois de instalar o WDK você pode se certificar de que tudo está certo simplesmente compilado um dos exemplos instalados pelo próprio kit. Para fazer isso, abra o prompt de comando de build como demonstrado na figura abaixo.

Este prompt de comando é diferente do convencional por já estar devidamente configurado com as variáveis de ambiente necessárias para a compilação de drivers para Windows XP. Mais detalhes sobre isso na palestra. Com este prompt de comando, execute os passos indicados na figura a seguir.

Certifique-se de que o exemplo foi compilado verificando a saída do compilador como destacado na figura acima. Caso você tenha algum problema em seguir estes passos, mande-me um e-mail que a gente sai na porrada e tudo bem.

Baixando e Instalando o Virtual PC

Ter o ambiente de desenvolvimento configurado é essencial para o desenvolvimento de drivers, mas de nada adiantaria se você não tiver um ambiente de teste. Não caia na besteira de utilizar sua própria máquina de desenvolvimento como ambiente de teste. Tente pelo menos usar a máquina de desenvolvimento de um estagiário ou sei lá. Pense que você não vai escrever uma aplicação que, na pior das hipóteses, resultará no sonoro PAM. Dependendo do tipo de driver e do tamanho da orelhada que você aprontar, sua máquina pode ficar inutilizada, não iniciar mais ou mesmo ter dados corrompidos.

Depurar um driver de Kernel requer condições especiais. A rigor são necessárias duas máquinas para essa tarefa. Isso mesmo, duas máquinas. O que você está pensando? Que vai poder colocar um break-point em seu driver, interromper sua execução e dar um ALT+TAB para dar uma olhadinha na janela de variáveis locais? Nem pensar amigão. Quando um break-point interrope o sistema operacional, o Windows inteiro para. O mouse não se mexe, a janela não repinta o scheduler não trabalha, nada nada. Por essa razão é que precisamos de uma segunda máquia. Das suas máquinas, uma delas será sua vítima, a máquina na qual rodará seu driver e que será completamente congelada quando necessário. A outra será sua máquina de desenvolvimento. Nela estarão os códigos fontes, os símbolos e o ambiente de depuração. É em sua máquina de desenvolvimento que a janelinha de variáveis locais vai aparecer.

Hoje em dia podemos recorrer à virtualização para economizar tempo e espaço em nossas mesas. Utilizando uma máquina virtual podemos ter o ambiente que precisamos para dar continuidade à palestra e testar o driver que será desenvolvido. Máquinas virtuais ajudam em muitos casos, principalmente nos casos de desenvolvimento de drivers que não lidam com hardware diretamente. Este é o caso de drivers de anti-virus, firewall, file systems, alguns tipos de drivers USB e outros. Por outro lado, se você por exemplo tiver uma placa PCI para fazer port I/O, manipular interrupções ou mesmo fazer DMA, uma VM não vai ajudar muito, mas este é outro caso.

O Virtual PC é uma ferramenta gratuita da Microsoft e que pode ser baixada a partir deste link. Executando o arquivo baixado, teremos a seguinte janela como listrado na figura abaixo. Apenas clique em Next para a próxima janela.

Aceite os termos do produto e clique Next para dar continuidade a instalação.

Apenas aceite o diretório de destino sugerido e clique Next.

Depois de aguardar a cópia dos arquivos, finalize a instalação.

Criando uma nova VM

Este não é um blog especializado em máquinas virtuais, então nem tentem me mandar e-mails com dúvidas cabeludas sobre esse assunto. Entretanto, posso ajudar na criação da máquina virtual que usaremos na palestra. Afinal de contas teremos que destruir alguma coisa, caso contrário ficaria meio sem graça.

Nesta tela inicial exibida acima, apenas clique Next para continuar com a instalação.

Aqui selecione a opção de criação de uma nova máquina virtual e depois clique Next para continuar.

Neste passo você dá o nome da sua máquina virtual. Fique a vontade para colocar o nome que achar mais adequado. Zé, Jão e Toin são algumas opções válidas, mas por simples clareza vou preferir “Windows XP” mesmo.

Neste passo selecionamos o sistema operacional que será instalado nessa nova máquina. Isso serve para que a VM possa instalar as ferramentas certas de integração. Resumindo, selecione Windows XP e clique Next para continuar.

Apenas aceite a quantidade de memória recomendada pelo Wizard e clique Next.

Como vamos fazer uma nova instalação do Windows, precisaremos de uma nova HD que será formatada pela instalação do Windows. Selecione a opção indicada na figura acima e clique Next.

Bom, aqui você determina onde o arquivo que representa o disco rígido será criado. Sem muitas firulas apenas aceite o caminho sugerido e clique Next para continuar.

Finalize a criação da sua nova máquina virtual clicando em Finish e pronto.

Ufa! Agora sua máquina virtual está pronta para receber um novo sistema operacional.

Deste ponto em diante você pode instalar uma cópia do seu Windows XP. Outras versões do Windows poderiam ser instaladas, mas a fim de evitar diferenças nas configurações de debug durante a palestra, vamos combinar de instalar o Windows XP mesmo.

Caso você não tenha uma cópia do Windows XP para instalar, não há muito que eu possa fazer para te ajudar. O máximo que posso fazer é te dar o seguinte conselho: Vá até a igreja de Santa Ifigênia, que fica na avenida Santa Ifigênia bem no centro de São Paulo, e acenda uma vela para a santa. Aproveitando que você vai estar por lá, dê uma passeada pelo comercio local. Tenho certeza que você receberá uma luz em seu caminho.

Agora vou para por aqui, caso contrário eu não vou ter muito que falar no dia da palestra. Aproveite essa oportunidade para aprender os conceitos básicos (e bota básico nisso) sobre como gerar seu primeiro driver, sua primeira tela azul e por fim fazer seu primeiro crash analysis. Pense que você um dia vai poder contar isso para os seus netos. Embora isso não ajude muito, eles não vão fazer a menor ideia do que você está falando e vão acabar te internando de qualquer maneira.

Espero vê-los por lá. T+!

Download dos slides

Último post pelo Blogger

28 de April de 2010

Olá cambada! Puts, eu já estava com saudade de postar alguma coisa. Pena este ser mais um daqueles chatos posts Off-Topic. O que posso fazer? É o que temos para o momento.

Hoje pela manhã recebi um mais um e-mail de aviso do Blogger dizendo que o suporte à publicação via FTP estão com os dias contatos. Como este recurso é utilizado por menos de 5% dos seus usuários, resolveram dar fim à ele. Mas essa não foi a principal razão pela qual eu decidi deixar de postar pelo Blogger para usar o WordPress. Eu já vinha ensaiando essa transição há pelo menos dois anos. A faculdade e outras desculpinhas esfarrapadas não me deixavam pôr essa idéia em prática. Alguns leitores já vinham reclamando da falta de um índice geral e da separação dos posts em categorias, coisas que o WordPress faz com uma mão nas costas.

Como um web designer, eu sou um excelente desenvolvedor de drivers, e eu já tinha ouvido falar que o WordPress usava PHP e MySQL, assuntos os quais eu não tenho a menor intimidade. Inicialmente contei com a ajuda do meu irmão que já possuia um blog pelo WordPress, mas assim como eu, ele também tinha faculdade e outras prioridades. Por um tempo eu contratei os serviços de um web designer que colocava em prática as minhas ídéias com relação ao novo layout, mas por fim ele se envolveu com algo maior e fiquei na mão novamente.

A idéia de migrar o blog persistia, mas a preguiça, a falta de tempo e de domínio de HTML e CSS me fizeram ir empurrando esse problema com a barriga. Cheguei até a ler o guia o oficial da famosa série “Preciso aprender isso de qualquer jeito”, o livro “WordPress for Dummies”. Pra quem está acostumado a ler livros de assuntos um tanto mais cabeludos, as mais de 380 páginas do livro foram como um passeio no parque. O mais surpreendente pra mim foi descobrir que o WordPress é uma ferramenta que não requer prática nem tampouco habilidade, e isso incluia as habilidades de PHP e MySQL que eu não tenho. Uma ferramenta poderosa, flexível e simples. A parte desagradável dessa história é que tudo que o livro falou sobre HTML e CSS é que ele não falava a respeito.

Até aqui excelente. Os 68 posts poderiam ser migrados mas o layout ainda foi o meu carma. Outras tentativas de encontrar alguém disposto a fazer o design pra mim me mostrou que estou no emprego errado. Esse negócio de desenvolver drivers não está com nada. Pra ganhar dinheiro mesmo o negócio é fazer Web Design.

Há uns três meses, quando recebi o primeiro aviso do Blogger sobre o fim do suporte ao FTP foi o momento “Agora ou nunca”. Minha faculdade não me servia mais de desculpa e aos poucos fui colocando a mão na massa. Depois de muito trabalho manual de migrar cada post e cada comentário, veio o layout. Graças ao site W3Schools, às aulas particulares de Photohop do meu irmão e à ajuda de alguns amigos, essa semana consegui publicar o novo blog. Ainda faltam muitas coisas. A página “About Me” ainda não tem nada about me. A página de treinamentos, que vai falar sobre os cursos que ofereço ainda fala exatamente isso: “Essa página vai falar sobre os cursos que ofereço”. Ainda estou instalando alguns plug-ins que vão ajudar em uma coisa aqui e outra ali. Mas o fato é que há dois dias do prazo final do suporte ao FTP, o novo blog já está no ar.

Esse post foi o último a ser contruído no Blogger com o objetivo principal de avisar àqueles que seguem o RSS original de que o endereço agora mudou. O novo RSS será provido em um novo endereço.

Eu não poderia terminar esse post sem agraceder às pessoas que tiveram a paciência de me aturar com testes e dúvidas sobre HTML, CSS e sei-lá mais o que. Um muito obrigado aos meus amigos Lesma, Thiago Oliveira, Thiago Brito, meu irmão Kabloc, Willam, Francisco, à minha esposa Magda que migrou todos os comentários e a todos os outros que não me lembro agora (eu perturbei muita gente).

Se você não conhecia o blog antigo, aqui estão as páginas do velho aposentado.
Valeu!

Sexto Encontro de Programadores C/C++

26 de February de 2010

Começo de ano é sempre a mesma correria. Depois que a gente começa a se acostumar com a idéia de que o feriadão de Natal e Ano Novo acabaram, logo vem o carnaval e desanda tudo. Aproveitei este início de ano para tirar merecidas férias, já que finalmente meu curso de Engenharia da Computação terminou. Como um belo start para minha reintegração à sociedade, nada melhor que uma viajem ao nordeste brasileiro. Semanas antes desta viajem fiquei sabendo do novo encontro da comunidade de programadores C/C++. Por causa da viagem eu perderia o evento.

Um mês se passou e semana passada vi que o evento foi adiado para o próximo dia seis de março. Muito boa notícia já que além de poder participar do evento também vou falar um pouquinho. Já participei de outro encontro de programadores e fiquei muito feliz de poder falar para tantas pessoas sobre esse assunto tão misterioso para muitos, que é o desenvolvimento de drivers para Windows.

Sob meu ponto de vista os resultados foram muito bons. A palestra deu uma introdução ao assunto de desenvolvimento de drivers e obviamente os 60 minutos de palestra não foram suficientes para explicar o assunto com detalhes, mas foi interessante mostrar a ponta do iceberg e poder responder a algumas perguntas dos presentes. Eu escrevi um post que comenta sobre o encontro, mas recomendo o post do meu amigo Lesma que ficou muito bom.

Lidando com Memória Virtual em Drivers

Bem, neste novo encontro não vou dar novamente uma introdução ao assunto, mas vou comentar sobre algumas carasterísticas e curiosidades sobre Memória Virtual no desenvolvimento de drivers. Entenda que não vou fazer um resumo do capítulo 9 do Windows Internals, “Memory Management” que fala sobre Page Table Entries e Working Sets, mas sim demonstrar que, diferentes de uma aplicação User-Mode, drivers precisam estar cientes dos conceitos fundamentais de memória virtual e paginação, controlando paginação de objetos e atendendo à requisítos de paginação de memória e espaço de endereçamento.

Os tópicos a serem discutidos na palestra serão os seguintes:

  • Overview de Memória Virtual e Paginação.
  • Operações de I/O e manipulação de Buffers.
  • Prioridade de thread e acesso à memória.
  • Pools de alocação, Tags e Quotas.
  • Evitando Fragmentação.
  • Drivers no caminho da paginação.
  • Controlando paginação de funções.
  • Obtendo endereços reais de memória.
  • Dispositivos de acesso direto à memória (DMA).
  • Recursos do Driver Verifier.
  • Hands on: Operações de memórias por drivers no WinDbg.
  • Dúvidas.

Esta é a página oficial do evento e as inscrições estão abertas. Até lá!

Download dos slides

Mais um Engenheiro à solta

27 de November de 2009

Ufa! Quarta-feira passada foi minha última prova da universidade. Parece mentira mas finalmente o curso de Engenharia da Computação chegou ao fim. Ainda temos que entregar uma papelada do projeto de conclusão de curso, mas são apenas papéis. Acabaram as provas, os trabalhos, os relatórios e agora um baita peso começa a sair das minhas costas à medida que as notas vão sendo liberadas no site da universidade. Quem me segue no Twitter teve uma idéia da correria que tem sido. Esse ano foi especialmente apertado por conta das dependêcias que tive que cursar, do estágio que tive que fazer, e por fim, do projeto de formatura que tivemos que apresentar.

O projeto foi o maior responsável pela minha ausência no blog, foram muitos testes, sustos, sensores queimados, apresentações e feiras.

Pera aí! Você disse sensores queimados?

Isso mesmo. Murphy pode ser considerado um integrante do nosso grupo já que esteve sempre presente no desenvolvimento do projeto. Nas vésperas da apresentação para a banca avaliadora, um mal contato nos reguladores de tensão, originado pela trepidação do motor do helimodelo, fez com que quase tudo se queimasse. Foi um desespero geral, já que os sensores eram importados. Sem falar da grana que teríamos que desembolsar, ainda teríamos que aguardar a entrega que ocorre em média em duas semanas. Nesse momento Murphy nos deu uma trégua. Particularmente acho que ele ficou com pena de nós. Digo isso porque no dia seguinte encontramos uma revenda de sensores similares aos que estávamos usando no projeto aqui em Santo André (cidade onde moro). Quando entramos em contato com a revenda, descobrimos que eles tinham os sensores em estoque. Inacreditável não?

Depois da apresentação que fizemos para a banca avaliadora, ainda fomos convidados a participar da apresentação de gala da universidade, onde os melhores projetos do ano foram exibidos.


Também ficamos em segundo lugar no concurso “Melhor Aplicação Acadêmica Baseada em PC” promovido pela National Instruments, e com isso fomos convidados a expor nosso trabalho no stand da National no ISA Show 2009. O mais legal é que o primeiro lugar deste concurso foi conquistado por um grupo também da minha sala na Universidade São Judas Tadeu. Isso evidenciou que além de ficarmos na frente de várias outras universidades, mostrou que nossa sala né brinquedo não.

A National Instruments produziu este vídeo explicativo onde eu falo sobre a idéia básica do projeto. O vídeo foi feito na chácara de um dos componentes do grupo, onde ficamos internados nas últimas semanas antes das apresentações finais.

Este é apenas um post de “Ei, estou voltando do coma!”. Agora vou parar de falar sobre o projeto e voltar a falar sobre o que realmente interessa: “Telas Azuis da Morte”. O meu grande dilema agora é se devo também comentar algo sobre firmware e hardware. Desenvolvi muitas atividades com software embarcado não só durante a produção do projeto.

Durante o projeto, sobretudo desenvolvendo protocolo USB em um 8051 utilizando o Keil, além de ler sensores e trabalhar com barramentos em um PIC utilizando o compilador C18 no MPLAB.

Além disso, tive a oportunidade de contribuir no desenvolvimento de um projeto do IPEI. O hardware deste projeto mede os resultados de uma máquina de tração e os envia a um computador via USB. Contribui no desenvolvimento do firmware PIC implementando o protocolo HID mais uma vez utilizando o MPLAB.

Por último e não menos importante, também contribui no desenvolvimento de firmware FreeScale durante meu estágio na Commodity. Este firmware também lida com protocolo USB, e conta com o auxílio de um chip que dispoê desta interface, já que o DSP que compunha a solução não o fazia. Desta vez tive que utilizar o Code Warrior no desenvolvimento, e revivi o tempo em que trabalhei na Provectus desenvolvendo um Bootloader para a atualização do próprio firmware via rede 485, só que dessa vez foi através da USB.


Tanta interação com a USB de ambos os lados do cabo é principalmente fruto dos conhecimentos adquiridos com o livro “USB Complete” de Jan Alexlson. Não me lembro se já comentei sobre esse livro aqui antes, mas vale a pena falar dele principalmente sobre do ponto de vista eletrônico/firmware. O livro é simplesmente ótimo, mas diz não cobrir o desenvolvimento de drivers para USB pois tal assunto daria um livro à parte. Com isso ele indica um velho conhecido nosso, o “Programming the Windows Driver Model” de Walter Oney.

De qualquer forma, aguardem por reformas neste blog. Durante muito tempo tenho trabalhado no limite para conseguir postar e ainda dar conta de todo o resto. Agora meu tempo extra me permitirá fazer posts com mais frequência e finalmente montar turmas abertas do Curso de Drivers para Windows.

Como alguns de vocês já sabem, mantenho uma lista de interessados no curso e que serão notificados por e-mail quando as turmas forem abertas. Independente disso, gostaria de receber e-mails sobre preferências de horários e especialidades, tais como WDM/KMFD/UMDF/File Systems ou ainda sobre ênfase em USB/PCI.

É isso aí. Para um post que não tinha nada a dizer, até que esse disse muito.
Até breve!

Um Helimodelo no XV Simpósio Multidisciplinar

8 de September de 2009

Esse é mais um daqueles posts Off-Topic que não tem nada a ver com nada. Ou quase nada. Acho que a maioria de vocês já esta cansada de saber que este é meu último ano da universidade e que este ano estou todo enrolado com nosso Trabalho de Graduação (TG). Quem acompanha meu Twitter tem uma idéia de como isso tem tomado meu tempo. Você pode estar se perguntando: “O que faz este projeto?”. Em uma palavra: “Nada”. Estamos trabalhando a mais de um ano desenvolvendo hardware, firmware, driver, software e controle para que o projeto não faça nada. Na verdade, o objetivo é que não aconteça nada com um helimodelo em voo. Tá, tudo bem, desde o começo agora.

Era uma vez um helimodelo

Alguns de vocês já sabem que além de programador retardado, também tento gastar o tempo que não tenho como helimodelista. Um helimodelo é um helicóptero em escala reduzida, equipado com motor à combustão ou mesmo elétrico. Com as funcionalidades de um helicóptero convencional, é capaz de realizar voos com as mesmas características e liberdade de movimentos. Na verdade, quanto à capacidade de voo, um helimodelo pode fazer mais que um helicóptero real. Não é incomum ver um helimodelo voando de cabeça para baixo.


Um helimodelo é controlado por um sistema de rádio controle que determina os movimentos de servomotores instalados na aeronave. Cada servo tem seu papel específico dentro do helimodelo. Um controla o acelerador, outro a inclinação das pás do rotor de cauda e assim por diante.

É fácil controlar um helimodelo?

Não mesmo. O rádio controle possui dois sticks, e assim, são 4 os movimentos que você deve comandar ao mesmo tempo, isso além das chaves adicionais. O grande problema é que para ganhar os reflexos necessários para fazer a correção leva um certo tempo de treino. Acredite, você não vai querer um helimodelo voando desgovernado perto de você. Além do risco de se ferir, é quase certo que o helimodelo acertará algo e se dividirá em vários pedaços. Posso dizer que este não é um equipamento barato e cada queda pode significar centenas de reais para colocar tudo para funcionar novamente. Para começar com esse hobby normalmente utilizamos um simulador.


Um simulador é muito parecido com um vídeo-game. Com ele você recebe um joystick especial que é uma réplica de um rádio controle, mas que faz interface USB com seu computador. Você utiliza tal joystick para controlar um helimodelo na tela do seu computador. Assim, a cada queda que o modelo sofrer, basta apertar um botão de reset no próprio controle para que você possa tentar novamente. Quando eu estava começando no hobby, todos me indicaram um simulador até que comprei um. Fiquei pensando: “Que dificil que nada… Pra cima de mim? Só se for pra esses coroas. Tenho mais de vinte anos de vídeo-game nas costas”. Quando comecei a brincar com o simulador ví que não era tão fácil assim. Dezenas e dezenas de quedas. Os simuladores são realmente um excelente início. Eles conseguem reproduzir com grandes detalhes o comportamento de um modelo.


Depois do simulador, você normalmente faz aulas de voo. E para isso você contrata um instrutor. Mas o que pode fazer um instrutor além de lhe desejar boa sorte? O que acontece é que rádios controles podem ser ligados por um cabo de treinamento. Esse cabo permite que o instrutor possa controlar o helimodelo, e com o mudar de uma chave, o controle passa para a mão do aluno. Se o aluno perder o controle sobre o modelo, o instrutor pode tomar o controle de volta e evitar que seu helimodelo novinho se transforme num monte de lixo.

Legal, mas e o projeto?

Nosso projeto tem como objetivo controlar um helimodelo em voo de forma a estabilizá-lo. Por isso digo que nosso projeto vai fazer nada. Houve professor que ainda disse: “Caramba! Vocês vão fazer tudo isso para fazer um helicóptero ficar parado?”. Se você é um helimodelista, sabe que manter o helimodelo parado é o primeiro desafio de um piloto. Mesmo em ambientes sem vento, estabilizar um helimodelo requer uma boa quantidade de experiência. Nosso objetivo final seria descrever um plano de voo simples onde ele decole, estabilize no ar, faça alguns movimentos e finalmente pouse. Não queremos dar um passo maior que a perna. Vamos ver o que conseguimos até o dia da apresentação.

Para detectar os movimentos do helimodelo, nós instalamos alguns sensores no helimodelo, os dados dos sensores são reunidos por um microcontrolador que está instalado numa placa também a bordo do helimodelo. Depois de reunidos, os dados são enviados à uma outra placa em solo através de um módulo ZigBee. Na foto abaixo pode-se ver nossa plaquinha. Essa placa em solo é um kit da Atmel que tem suporte a diversas interfaces, sendo a USB uma delas. Assim, escrevemos o firmware e o driver USB para fazer com que tais leituras agora fossem recebidas pelo nosso software de controle.


Para fazer o controle, utilizaremos o novo Toolkit de lógica Fuzzy que está disponível no novo LabVIEW 2009 da National Instruments. Para quem não conhece, o LabVIEW é uma das principais ferramentas de controle utilizadas pela engenharia moderna. É possível fazer programas de controle apenas desenhando e arrastando componentes sobre a tela, pode parecer contraditório um desenvolvedor de baixo nível dizer isso, mas toda essa abstração nos dá tempo para dedicar às coisas que realmente precisam de tempo. A ferramenta também dispõe de interfaces de I/O permitindo trabalhar com sensores e atuadores diretamente sobre o meio eletrônico.

Uma outra informação interessante é que o Toolkit de PID e Lógica Fuzzy foi completamente re-escrito e reformulado com a ajuda de um brasileiro. Isso mesmo, Bruno Cesar (na foto ao lado) trabalha na National Instruments Brasil e foi um dos responsáveis por esse desenvolvimento. Acha isso conhecidência? Então o que você me diria ao saber que ele também se formou na Universidade São Judas Tadeu? Bruno esteve semana passada no campus da Mooca dando uma palestra sobre o novo módulo de lógica Fuzzy. Isso nos deu mais certeza de que a lógica Fuzzy é a ideal para nosso problema de controle, já que ela é perfeita para lidar com problemas complexos onde não se tem o modelo matemático que descreva o comportamento de um helimodelo. A lógica Fuzzy se baseia na experiência de um operador para atuar sobre os controles. É bem interessante.

O LabVIEW também nos permite que façamos chamadas à DLLs. Essa foi uma maneira simples que conseguimos para fazer com os dados que estavam no driver chagar ao software de controle. Assim, criamos uma DLL que abstraísse muitas das complicações de se interagir com um dispositivo USB. O LabVIEW apenas chama funções do tipo LeAmostra() que já retorna o dado pronto para o uso. Todo aquele código com CreateFile() e DeviceIoControl() ficou por conta da DLL, além de outras funções auxiliares.

Agora vocês podem estar se perguntando: “Mas como o LabVIEW vai atuar sobre o helimodelo?”. Lembra daquele cabo de treinamento? Nossa placa USB vai receber as ações de controle do LabVIEW através da mesma DLL. Para fazer com que tais comandos sejam aplicados sobre o helimodelo, fizemos com que nossa placa USB se comporte como um rádio controle, que utilizará o cabo de treinamento para aplicar o controle sobre o helimodelo. Obviamente ainda teremos um piloto segurando o rádio no papel de instrutor, principalmente para evitar acidentes, onde um mal funcionamento de nosso projeto poderia transformar meu helimodelo num monte de lixo.

O Simpósio Multidisciplinar

Desde que comecei a escrever sobre o projeto neste blog, algumas pessoas ficaram curiosas e disseram: “Me avise quando houver alguma apresentação”. Bom, esta é a sua chance de dar uma olhada em alguns projetos. Nosso projeto foi aceito para ter um espaço neste evento que vai acontecer de 18 a 25 de setembro na Universidade São Judas Tadeu. Serão várias apresentações curtas de 15 cada. Os projetos ainda não estão terminados, e dessa forma, você ainda não verá nenhum helimodelo voando sozinho por lá, mas estaremos com nosso equipamento dispostos a responder algumas perguntas. O simpósio é aberto à visitação pública. Não é necessário ser aluno para participar, basta se inscrever gratuitamente no site da universidade e pronto. Se quiser discutir um pouco sobre sensores, microcontroladores, firmwares, drivers, controle ou ainda helimodelismo, mesmo que durante um café, é só aparecer.

Bom, é isso aí. Já escrevi demais. Agora preciso voltar ao meu projeto.
Até mais!

110% de CPU

20 de March de 2009

Eu não queria postar algo que começasse com choradeiras dizendo que estou sem tempo, que tive que buscar minha tia no aeroporto e coisa e tal, mas estou vendo que não vai ter jeito. Até comecei a escrever uns posts para tirar dúvidas de leitores, mas aí eles começam a tomar tempo quando tenho que montar um exemplo, fazer uma figura, etc. Por fim, já tenho dois posts começados, mas que foram abandonados durante sua concepção por falta de tempo. Tenho recebido alguns e-mails do tipo “Você ainda está vivo por aí?” de alguns leitores. As coisas estão realmente complicadas para mim esse ano, mas não vou deixar de postar. Só estou precisando arrumar um tempinho pra sentar. Já tentei escrever posts enquanto almoçava ou tomava banho, mas não deu muito certo. De fato eu consegui escrever um post enquanto dormia, mas quando acordei, por algum motivo, o post não estava publicado. Nota: “Reclamar com o pessoal do blogger”. Mas enfm, na falta de tempo suficiente para escrever algo que os ajudem a desenvolver algo, neste post vou apenas relatar o que tenho feito. De repente vocês precisem de algo parecido e queiram me pedir alguma ajuda ou referência.

O Último Ano…

Parece mentira, mas este é meu último ano da minha graduação em Engenharia da Computação, e por ser o último ano, três agravantes aparecem para disputar meu tempo (como se eu tivesse algum), sendo eles: Dependências, Trabalho de graduação (TG) e o Estágio.

As Dependências…

Para quem não lembra ou não sabe o que são dependências, são matérias as quais você não conseguiu ser aprovado no ano em que você estudou, mas consegue passar de ano mesmo assim, só que você terá que estudar estas matérias em separado, seja de sábado ou num horário em que você tenha livre (dá até vontade de rir…). Enfim, cheguei ao sexto ano com três matérias para fazer em meu horário livre. Assim, parte do meu sábado foi e será dedicado a essa atividade. Para fazer uma dependência, é necessário que a universidade agrupe alunos com a mesma matéria para fechar uma turma. Duas das três dependências já formaram turmas, mas ainda preciso rezar para que a terceira turma se forme. Dessa forma eu poderei me matricular. Caso contrário, terei que vir para universidade mais um ano para estudar a matéria restante. Isola…(Toc, toc, toc) vai dar tudo certo.

O Estágio…

Em paralelo à essa aventura de estudar três matérias adicionais e ainda ter que passar em tudo, terei que fazer o estágio. Estágio é uma das matérias que preciso fazer para me formar. Terei que cumprir 192 horas de estágio para passar nesta matéria. Felizmente, meu curso pode ter o estágio tanto com ênfase eu software como em hardware, já que a Engenharia da Computação desenvolve as duas especialidades no estudante.

Mas Fernando, se me lembro bem, você trabalha na IBM e seu estágio pode sair sem que você tenha que mover um único músculo. Basta alguém assinar seu estágio e pronto.

Pois é, acho que tenho sérias tendências para querer me enrolar. É como meu amigo Heldai me disse uma vez: “Ê seu Fêrnando, o senhor é como eu. Não pode ver uma corda que já quer enrolar no pescoço”. O fato é que eu gostaria imensamente de desenvolver meu lado mais fraco, e sabendo que já brinco de fazer telas azuis há um tempo razoável, meu objetivo seria arrumar um estágio em hardware. Mas como isso seria possível se já trabalho numa empresa de software durante a semana?

Bom, há um ano atrás, eu dei um curso de desenvolvimento de drivers para Windows em uma empresa que projeta hardware. Uma empresa dessa não se acha assim em qualquer esquina. A Commodity é uma empresa que desenvolve um hardware que faz interface USB, cujo firmware é escrito em linguagem C e roda num chip da Freescale, e como se não fosse o bastante, o hardware ainda faz compressão de audio utilizando um chip da Altera com FPGA. Quem entende de eletrônica sabe que este seria um excelente lugar para fazer estágio e aprender muito. O problema é que eu não poderia fazer o estágio de domingo, que é meu único dia disponível, já que tenho aulas aos sábados e trabalho durante toda a semana. Já que não posso fazer o estágio de domingo, então posso trabalhar de domingo. Mais uma grande vantagem de se fazer Home Office. A solução foi me oferecer para fazer o estágio que seria cumprido apenas de segunda-feira. Estes dias seriam compensados trabalhando de domingo. Pedi autorização para meus gerentes do Brasil e dos Estados Unidos e pronto. Sabendo que um estagiário que aparece uma vez por semana mais atrapalha que ajuda, facilitei minha entrada na empresa solicitando um estágio não remunerado. Como eles já me conheciam, ficou fácil.

Apesar de eu não receber nem um centavo e ainda pagar minha gasolina e refeição, tenho certeza de que fiz a escolha certa. Meu estágio começou há duas semanas e tenho tido contato com coisas bem interessantes. Para dar uma acelerada no acúmulo de horas, trabalharei no estágio durantes todos os dias da semana enquanto eu estiver de férias da IBM. Juntando tudo, meu estágio terminará no início de agosto.

O TG…

Bom, eu já não tinha os sábados e agora não tenho mais os domingos. Só preciso dar um jeito que acabar com qualquer fragmento de tempo livre que eu puder encontrar. Para isso, a universidade nos abençoou com o trabalho de graduação. Nós teremos que montar um projeto que utilize as especialidades que vimos durante o curso de engenharia da computação. Como meta pessoal, não importa o que o projeto faça, terá que haver um driver. Afinal de contas é a única coisa que sei fazer direito. Não posso perder essa oportunidade. Nosso projeto tem como objetivo estabilizar um helimodelo em vôo.


Ah tá, e onde o driver entra na história mesmo?

Para resumir muito (mas muito mesmo), faremos leituras de um giroscópio embarcado num helimodelo à distância utilizando o protocolo ZigBee. Tais leituras serão realizadas por um kit de desenvolvimento com microcontrolador que fará interface USB com um computador. O driver encaminhará as leituras de movimentos para uma ferramenta chamada LabView. Em resposta à percepção dos movimentos, o sistema reagirá enviando comandos via USB para a placa. A mesma placa fará interface com o rádio controle do helimodelo a fim de corrigir o curso.

Em linhas gerais é isso que faremos. Eu poderia escrever muito à respeito de como estamos fazendo isso. Começamos a trabalhar no projeto no ano passado por que já sabíamos que não seria nada fácil. Aproveitei uma das minhas idas para os Estados Unidos para comprar os sensores e kits necessários. O importante é que o projeto está indo bem até aqui, mas ainda vamos apanhar muito. Estou escrevendo o firmware do microcontrolador e obviamente o driver que fará interface com ele, mas nosso principal desafio será fechar a malha de controle e fazer o helimodelo ficar parado no ar.

Parado? Você não tem vergonha de dizer que está fazendo tudo isso para fazer um helimodelo ficar parado?

Nosso sonho dourado é definir dois pontos distintos e fazer o trajeto completo com decolagem, delsocamento e pouso, mas quem é helimodelista como eu sabe que fazer um helimodelo ficar parado é um excelente primeiro passo. Nosso orientador já nos disse que nosso projeto é o mais desafiador das engenharias e que se nós fizéssemos apenas a parte da leitura à distância já seria um bom trabalho de graduação.

Eu escreveria muito mais sobre o projeto, mas isso vai ficar para depois. Este post já está ficando longo para mais um Off-Topic. Meus agradecimentos à prefeitura municipal de São Paulo por ter criado o rodízio municipal de veículos, e por consequência, ter me trazido para a faculdade com duas horas de antecedência. Isso me deu a oportunidade de começar este post. Agora são 01:45 da manhã e ainda tenho que revisar e publicar esse post.

Vou tentar escrever mais. Talvêz minhas aventuras com o TG ou com o estágio me tragam assuntos interessantes e curtos o suficiente para publicar aqui.

Até mais mais. 🙂

Recife Office

24 de August de 2008

Pode uma pessoa trabalhar do outro lado do país e ainda assim dar um curso de Drivers para Windows? A resposta para essa pergunta é: “Depende se essa pessoa é Home suficiente para isso”. O fato de ter recebido a oportunidade de trabalhar em casa me abriu a grande flexibilidade de poder trabalhar fora de casa. Trabalhar pela Internet não significa necessariamente trabalhar em casa.

Fui convidado a ministrar o curso de Drivers em um centro de estudos que fica em Recife – PE. Eu nunca poderia aceitar um convite desses em condições normais de temperatura e pressão, já que trabalho regularmente em uma empresa em São Paulo, e como se não bastasse, ainda estou me graduando em Engenharia da Computação no período noturno. Mas agora que virei Home, as coisas são diferentes. Aproveitando o período de férias da universidade, fui fazer meu Home Office em Recife e dar o curso durante o período noturno.

Uma empresa multi-nacional do ramo de eletrônicos contratou os serviços deste centro de estudo para o desenvolvimento e manutenção dos drivers que se comunicariam via USB com telefones celulares. O driver original foi escrito por ninguém menos que Walter Oney. Fiquei com a missão de ensinar o caminho das telas azuis para este grupo de 10 alunos, minha maior turma até agora. Quantas pessoas que trabalham com drivers você conhece? O número de alunos não foi problema em momento algum, pensei que seria mais difícil gerenciar isso. Todos interessados, esforçados e com vontade de aprender. Difícil mesmo foi ter que ficar duas semanas inteiras hospedado em um Hotel à beira-mar na praia de Boa Viagem e não poder dar um único mergulho (A primeira foto deste post foi tirada da janela do hotel). Um dos motivos é a constante presença de tubarões nas praias Pernambucanas, com algumas exceções. Outro fato foi a carga horária que foi adotada. Um curso básico de drivers é normalmente ministrado em 40 horas, o que é perfeito para duas semanas, sendo 10 aulas de 4 horas. Mas neste caso havia a necessidade de uma especialização em dispositivos USB. Isso nos tomou dois sábados, meio domingo e muita energia. Um curso de três semanas foi dado em duas. Não sei se foi o mais produtivo, mas minha agenda não me permitiu o luxo de descansar aos finais de semana.

Uma pergunta freqüente em meu blog é “Quando será formada a próxima turma?”. No começo desse ano eu imaginei poder montar uma turma aberta durante o período de férias, mas a correria que veio em seguida, acentuada com pela minha viagem, não permitiu que eu me organizasse com relação a infra-estrutura e divulgação. O curso destas férias não existiria, mas no caso de Recife, já havia uma turma fechada e a disponibilidade dos recursos oferecidos por eles. A pergunta ainda persiste e a resposta agora será que estou me organizando para montar uma turma aberta para o início de Janeiro. Obviamente vou publicar qualquer novidade referente a isso aqui no blog, mas gostaria de já ter uma noção dos recursos que terei que reservar para isso. Assim, se você tem interesse de participar dessa turma, me envie um e-mail sem compromisso ou deixe um comentário neste post. Meu endereço de e-mail que ninguém encontra, fica na página apontada por este link, que é a página do meu perfil do blogger.

Até mais…

Agora que virei Home

12 de July de 2008

De repente meu gerente me liga e pergunta – “Você é Home, certo?”. Fiquei meio constrangido com aquela situação, mas o que eu podia fazer? Eu tinha que responder àquela pergunta. “Olha, ainda não sou completamente, mas estou interessado em virar”, respondi. “Então preencha os formulários que eu aprovo”. Foi basicamente assim que virei Home Office.

Como funcionário regular, eu ainda tinha o direito de fazer Home Office 2 dias por semana. No início vem um sentimento de culpa. Não dá pra aceitar, assim de cara, que não terei que levantar às cinco e meia da manhã e enfrentar quase duas horas de trânsito para sair de Santo André, pegar a Avenida dos Estados e finalmente chegar ao prédio onde trabalho. Confesso que não sair de casa tão cedo e me sentar em frente ao notebook da empresa usando um moletom causa um certo desconforto no início. Dá a impressão de que não estamos trabalhando, de que estamos fazendo alguma coisa errada.

Depois do sentimento de culpa vem o relaxo. Até hoje eu continuo levantando cedo para poder levar minha esposa até a estação de trem, que fica à exatos 7 minutos de minha casa. Nas primeiras semanas, eu voltava para a cama e dava mais uma dormida até às nove da manhã. Já consegui chegar no trabalho com 30 minutos atraso mesmo estando a vinte metros dele. Tomar café da manhã em frente ao notebook virou rotina. Mas isso passou. Acho que conforme o tempo foi passando, o corpo e a mente vão ficando mais descançados, até uma hora que não dá mais vontade de voltar para a cama. Além do mais, eu ainda tenho uma lista razoável de livros para ler. O tempo que antes eu gastava no trânsito, agora eu gasto lendo e isso está dando muito certo.

Meus vizinhos agora devem pensar que fiquei desempregado e que sou sustentado pela minha esposa. Tem uma pessoa que além limpar minha casa, prepara meu almoço. Assim, eu consigo almoçar em 15 minutos e não vou voltar correndo para o notebook depois disso. Eu preciso fazer minha fotosíntese. Para isso vou tomar um café expresso em uma padaria que fica láááááááá em cima e aproveito para tomar sol caminhando até a padaria. Ter horário para tomar sol até parece programa de presidiário. Às vezes eu levo meus cães para passear durante meu horário de almoço. Eu não culpo meus vizinhos. O que você pensaria se visse uma pessoa de uns trinta anos de idade, com a barba de dias na cara, passeando com cachorros ao meio dia? “Esse aí leva cães para passear para poder conseguir o dinheiro da pinga”.

Bom, eu estou mesmo babando e andando para os vizinhos. Complicado é o que seus parentes pensam de você. Para tomar café, eu passo em frente à casa de uma tia. Sabe aquela tia que tudo o que ela conseguiu entender sobre o que você faz é que você trabalha com computadores, ela só não tem certeza se é limpando ou vendendo. Numa dessas idas e vindas do café, acabei me encontrando com ela. “E aí Fernando, está de folga?” – ela pergunta. “Não tia, agora eu trabalho em casa” – eu respondo todo satisfeito, mas olhando sua expressão, dá pra imaginar as engrenagens na cabeça dela – “Vixe tadinho, deve estar fazendo aqueles bicos do tipo Trabalhe em casa, pergunte-me como.

Mais difícil que se convencer de que você pode trabalhar em casa, é convencer os outros de que você está trabalhando em casa. Na época em que eu fazia Home Office apenas 2 vezes por semana, minha esposa sempre me perguntava – “Você vai trabalhar amanhã?”, como se eu não trabalhasse em casa. Meu irmão uma vez me disse, ” …mas você não vai ficar em casa amanhã? Então, eu passo lá e a gente vai ver aquela peça do carro”.

Trabalhar em casa exige disciplina, embora eu possa fazer meu próprio horário, eu prefiro ter horário fixo para almoçar, começar e parar de trabalhar. Não estou falando apenas de trabalhar menos. Trabalhar demais é um risco maior. Você já está alí com um pepino pra resolver, falta só mais aquele último teste, que é o último há uns 5 testes atrás, você não tem que pegar trânsito, já está no conforto do seu lar e quando você vê já são nove da noite.

Não muda nada para a empresa?

Eu trabalho em um time global. Uns aqui, outros nos Estados Unidos e India. O gerente do time de desenvolvimento está em outro hemisfério. Você acha mesmo que isso vai fazer alguma diferença pra ele? Mesmo quando eu estava trabalhando no prédio, tudo que eu precisava era de um ponto de rede. Apesar de eu ter um notebook, este é utilizado para abrir uma sessão remota em uma das máquinas que servem os laboratórios externos (Brasil e India). As máquinas de teste são virtuais em sua maioria, as reais também são acessadas remotamente. Todas as reuniões são feitas via Web Conference. Seu ramal é desviado para uma ferramenta VOIP no notebook. Você disca um ramal pra falar com alguém do outro lado do planeta. Tudo através de um ponto de rede.

Quando você vira Home Office, a empresa te dá um limite de reembolso para comprar móveis, aparelho e conta telefônica, Internet banda larga, impressora e material de escritório. Obviamente tudo tem que ser devolvido quando você deixar de ser Home Office. Felizmente minha casa já tinha todos os requisitos necessários, e assim, não vou ficar usando uma mesa ou cadeira que não são minhas mesmo. O bom disso é que eu posso trocá-los quando eu quiser.

O que principalmente vai mudar para a empresa, é que agora eles terão mais uma baia livre. Uma empresa deste tamanho não cabe nos prédios onde estamos (isso mesmo, no plural). A empresa incentiva o Home Office. Uma das cláusulas da transição para Home Office é a de que você deve permanecer no mínimo um ano nesta condição. Fiquei preocupado quando li essa parte, então fui perguntar às pessoas que já eram Home Office o que eu não estava conseguindo ler nas entrelinhas. O que acontece é que na empresa que trabalho, a grande maioria dos funcionários são vendedores. Vendedor é o tipo de profissional extrovertido, que fala bastante e preza muito o contato com as pessoas. Para esse tipo de pessoa, ficar enclausurado dentro de casa é a morte. Tanto que muitas pessoas que são Home Office deixam suas casas para disputar baias vagas aos tapas lá no prédio. Minha esposa mesmo, se ficasse em casa, morreria louca mordendo o braço do sofá em menos de um mês.

Pois é, existem pessoas e pessoas. Como você já deve ter percebido, sou desenvolvedor de software. Sou do tipo de pessoa que prefere ter seu tempo para fazer as coisas, gosto de ter meu espaço. Não estou dizendo que tenho alergia a pessoas e que ando com um saco de papel enfiado na cabeça. Só estou dizendo que não me importo de ficar trabalhando sozinho em casa, onvindo meu som preferido enquanto faço tudo pela internet. Aliás, isso me dá um gancho pra falar de um livro que li e que imaginei nunca ter a oportunidade de comentar a respeito neste blog técnico. Este livro fala justamente das diferenças entre pessoas extrovertidas e introvertidas. Explica que apesar de 75% das pessoas serem extrovertidas, não há nada errado em ser introvertido. O livro explica que pessoas introvertidas tem lá suas vantagens. Elas se concentram com maior facilidade. Conhecem menos assuntos, mas com mais profundidade. Tem menos amigos, mas são amizades mais intensas. Achei o livro interessante, com suas estatísticas e fundamentos para explicar o por quê do comportamento das pessoas.

Ainda não falei tudo que poderia falar sobre minha transição para Home Office, mas este post já está ficando longo demais para um Off Topic.
Até mais…

A matéria mais difícil

24 de June de 2008

Como alguns de vocês já estão cansados de saber, estou cursando o quinto ano de Engenharia da Computação. No começo do curso, naturalmente pastei para poder aprender Cálculo, Álgebra, Física e aquelas outras matérias que tiram fumacinha da calculadora.

Como não pude sair do meu colegial técnico e ir direto para uma universidade, trabalhei um pouco na área até eu conseguir pagar a mensalidade de uma faculdade. Estagiário ganha pouco mesmo. Esse tempo, além de me trazer uma graninha extra por mês, também me trouxe um cadim de experiência. Não foi muita, mas o suficiente para identificar possíveis deslises de professores durante as aulas de programação. O curso de Engenharia da Computação tem duração de seis anos, e durante esse tempo eu ainda tinha que trabalhar, mesmo porque eu tinha que pagar a faculdade. Durante esse tempo acabei lendo um livro ou dois, ou três, quatro, cinco, enfim, alguns.

É natural os professores tenderem a não explicar exatamente como as coisas são ou funcionam, e assim, ganhar um pouco de tempo para poder abordar mais assuntos com menos detalhes. Afinal, você não aprende tudo o que precisa na universidade, mas você já consegue ter uma boa noção de onde você está se enfiando quando for trabalhar na área e por onde começar a buscar mais detalhes sobre determinado assunto. Eu mesmo, nos cursos de drivers que já dei, tento explicar o essencial, o que o aluno vai mesmo utilizar, mas sempre tento deixar claro que existem detalhes a serem vistos.

Durante o curso, eu mal podia esperar para ver as matérias técnicas, que me abririam os olhos para uma nova maneira de ver os dispositivos eletrônicos, circuitos integrados e os computadores. Depois de engolir algumas atravessadas de professores de Linguagem C e de Engenharia se Software, finalmente comecei a estudar algo realmente interessante. A matéria de Sistemas Operacionais é mesmo surpreendente. Nela estudamos diferentes sistemas operacionais que rodam sobre diferentes arquiteturas de computadores. Ufa! Pelo menos uma arquitetura e um sistema operacional eu conheço razoavelmente bem.

Tudo bem o professor dizer que Thread e Processo é a mesma coisa, explicar Inter Process Communication sem nem tocar no assunto Memória Virtual e Marshaling, mas foi show tentar engolir a explicação sobre Sincronismo e Gerenciamento de Interrupções dos sistemas operacionais. Tudo bem, eu só posso dizer que o professor escorregou em Windows, eu não conheço todos os outros Sistemas Operacionais. Acho que ele só escolheu o sistema operacional errado na hora de dar um exemplo infeliz. Não me lembro das palavras exatas, mas meu professor nos ensinou que o Windows XP ainda não é um sistema operacional preemptivo, e que as chamadas ao sistema operacional não podiam acontecer concorrentemente. Primeiro uma, depois a outra e assim por diante. Particularmente acho que ele deve ter confundido XP com 9X. Afinal os dois possuem a letra X. Nessa hora eu tive que parar de ler o livro que eu estava lendo e pedir para ele repetir aquilo. Eu poderia ter ouvido errado, mas infelizmente não foi isso que aconteceu. Ele disse aquilo mesmo. Mais tarde na mesma aula ele nos disse que o Windows XP ainda não consegue gerenciar interrupções adequadamente, que se uma interrupção ocorre enquanto um processo está rodando, o sistema normalmente espera o processo inteiro terminar para que só depois ele possa atender à uma interrupção.

Como em toda sala de aula universitária, sempre existe um grupinho de alunos que odeiam o Windows e defendem uma outra opção de Sistema Operacional. Nada contra eles, nem contra a opção deles, mas de vêz em quando me aparece cada figura que é um caso sério. Enfim, estes logo disseram ironicamente aos risos: “É lógico! Porque é o mais inteligente a se fazer”. Assim todos na sala começaram a rir desse péssimo exemplo de gerenciamento de interrupções do Windows. Eu nunca falo nada, sou aquele cara que chega uns 30 minutos mais cedo na sala pra poder ler meu livro em paz. Não saio fazendo campanha a favor do Windows nem contra outros sistemas. Não fico explicando como completar uma IRP para cada pessoa que encontro no café, mas essa eu não podia deixar passar em branco. Perguntei ao professor: “Nossa, que interessante isso! Onde foi mesmo que o senhor leu isso?”. “Em qualquer livro de Sistemas Operacionais” ele me respondeu. Vejam só que inocência da minha parte, eu imaginava que os livros clássicos de Sistemas Operacionais tinham sido escritos quando o Windows XP ainda nem existia. Então eu disse: “Não é por nada, é que não é isso que tenho visto nos livros que tenho lido. Talvêz eu esteja lendo os livros errados.”

Windows Driver Model (1999)

“The operating system can preempt any subroutine at any moment for an arbitrarily long period of time, so we cannot be sure of completing critical tasks without interfere or delay. Even if we take steps to prevent preemption, code executing simultaneously on other CPU in same computer can interfere with our code.”


Windows NT Device Driver Development (1999)

“As was mentioned in Chapter 1, Windows NT is a pre-emptive, multithreaded, and multitasking, operating system. It employs a traditional operating system technique to provide this multitasking capability by associating a quantum with each thread when it starts running.”


Desvendando o Windows NT (1998)

“Como o Windows NT implementa um escalador preemptivo, se outro thread, com uma prioridade mais alta se aprontar para execução, o thread sendo executado atualmente é solicitado antes de terminar sua fatia de tempo.”


Windows Internals (2005):

“Windows implements a priority-driven, preemptive scheduling system the highest priority runnable (ready) thread always runs, with the caveat that thread chosen to run might be limited by the processors on wich the thread is allowed to run, a phenomenom called Processor Afinitty.”


Developing Drivers with Windows Driver Foundation (2007):

“Windows is a preemptive multitasking operating system in wich multiple thread can try to aceess shared data or resources concurrently and multiple drivers functions can run concurrently.”


Enfim, é óbvio que não vou discutir com meu professor e tornar minha vida acadêmica um inferno. Mais uma vez vou respirar fundo e fazer dizer aquele sonoro “Ahhhh tá…”.

É nestes momentos que eu fico preocupado sobre um outro aspecto. Felizmente posso ouvir e filtrar o que professores de programação em Linguagem C e Sistemas Operacionais dizem, mas nada posso fazer quanto aos professores de Eletrônica, Inteligência Artificial, Microcontroladores e outras tantas matérias que estamos aprendendo. Será que estamos ouvindo as mesmas barbaridades e não sabemos?

De qualquer forma, a matéria que pensei que seria a mais fácil, agora é uma das que me atormentam.
Leia sempre…

Tirando o atraso :-P

5 de June de 2008

Mais uma vez fiquei sem postar por um longo tempo. Agora você deve estar pensando: “Lá vem ele com aquela ladainha de que não tem tempo, que tudo está difícil, que Deus não gosta dos programadores de Kernel e assim por diante”. Bom, vou pular essa parte de dar minhas desculpas e vou logo dizendo o que estive fazendo durante esse tempo.

Curso de Drivers para Windows

Bom deixe-me ver onde foi mesmo que eu parei. Meu último post foi durante o período em que eu estava dando um curso de desenvolvimento de drivers para uma turma fechada. O curso foi ministrado em cinco sábados de 8 horas cada. Não preciso dizer que isso me ocupou por um tempo. Tá tá tá, sem desculpas.

Quarto Encontro de Programadores de C/C++

No sábado subsequente ao final do curso, fui dar uma passeada neste evento. Deixaram a porta meio aberta e consegui entrar para dar uma espiada e falar um pouco sobre Arquitetura e Desenvolvimento de drivers para Windows com linguagem C. Confesso que o convite para participar deste evento foi uma surpresa para mim. Não sou um grande programador de C++, mas utilizo a linguagem C com classes como meu amigo Strauss gosta de dizer. Posso dizer que foi muito interessante poder participar desse evento de altíssimo nível técnico e ter a oportunidade de ver como a linguagem pode ser utilizada em diferentes cenários. Os slides da minha palestra estão disponíveis neste link.

De volta à Boston

Até parece que as coisas só acontecem aos sábados. De qualquer forma, no sábado subsequente ao encontro, embarquei em uma viajem de um mês para Boston. Da última vez que estive por lá foi para fazer um treinamento na OSR como descrevi neste post. Desta vez foi um programa de integração da IBM. Pude conhecer pessoalmente as pessoas com quem trabalho e que antes só conhecia por Web Conferência. Mais uma vez foi bem interessante e tentei aproveitar ao máximo. Fomos em dois brasileiros e um Indiano. Senti muita saudade do nosso cafézinho brasileiro. Nessa foto abaixo estão, da esquerda para a direita, David E. Jones (Gerente), Scott D. Hankin (Documentação), William C. Oliveira (Linux), William H. Taber (Linux), Mridula Muppana (Testes), Paul Ganshirt (Windows), Niraj Kumar (AIX), Kaveesh Mishra (Windows), Fernando Roberto (Windows) e Richard Kissel (AIX e Linux). Esta é apenas uma parte de todo o time de MVFS.


Não sabe o que é MVFS? É um File System que faz parte de um produto chamado ClearCase. Não conhece o ClearCase? Bom, além da Wikipedia, pude ter o prazer de esbarrar com uma observação sobre o ClearCase no livro de Rajeev Nagar. Este livro, como eu não me canso de dizer, ainda é a única referência respeitável sobre desenvolvimento de File Systems para Windows apesar de ter sido publicado pela primeira vez em 1997. Mas onde está o ClearCase nesta história? Bom, se você é doente como eu e tem esse livro, dê uma olhadinha no início do capítulo nove. Na primeira página deste capítulo você encontrará as seguintes passagens.


Isso é realmente muito legal! 🙂

Volta às aulas

Durante um mês inteiro após minha chegada de volta ao Brasil, dediquei algum tempo correndo atrás da matéria que perdi na faculdade. Pois é, ainda estou me graduando em Engenharia da Computação. Já estou trabalhando em meu TCC (Trabalho de Conclusão de Curso). Meu TCC terá obrigatóriamente que ter um driver de Windows, é o mínimo que eu poderia fazer. Finalmente vou poder mostrar o que sei fazer aos meus amiguinhos de sala. Durante o curso, alguns amigos me perguntam com o quê eu trabalho, já que freqüentemente estou lendo grandes livros da Microsoft. Depois de tentar explicar das maneiras mais simples possíveis, desenhando ou mesmo usando fantoches, eles ainda ficam com aquela cara de interrogação. Bom, na hora que eu mostrar a tela azul, eles vão acabar entendendo.


Aproveitei o passeio nos Estados Unidos para comprar esse kit de desenvolvimento da ALTERA. Esse kit vai fazer parte do meu TCC e futuramente poderei utilizá-lo em meus cursos de desenvolvimento de drivers. Hoje conto apenas com as placas de treinamento da OSR, conforme já falei a respeito neste post. Diferente das placas da OSR, este kit pode ter seu hardware definido por uma linguagem chamada VHDL, e assim, poderei fazer com que a placa tenha os mais variados comportamentos e poderei ilustrar a construção de drivers de interface para cada situação. Essa placa custa em torno de R$ 1.700,00 aqui no Brasil, enquanto que paguei apenas US$ 150,00 lá. Praticamente veio no doce. Sabe quando íamos à padaria comprar aquela casquinha de sorvete que vem recheada com maria-mole, e enfiada nela vem um brinquedo. Então, foi quase a mesma coisa. Uma outra coisa interessante nesse kit, além do preço, é que é possível fazer interface USB e interface PCI. Isso vai ser bem divertido.

Seminário de Portabilidade e Performance

Neste último final de semana, participei de mais esse evento organizado pelo grupo de C/C++ Brasil. É impressionante ver como estes eventos estão trazendo cada vez mais gente. Bati algumas fotos, mas vou deixar os comentários por conta do meu amigo Lesma, que já fez um post muito legal à respeito.

De volta ao mundo dos bloggers, vou tentar não abandoná-los por tanto tempo. Desculpinhas à parte, num tá fáci não.

Até a próxima.