ProfissionalTrabalho na indústria do software há mais de cinco anos, atuando como projetista e programador de sistemas.A maior da parte da minha experiência profissional aconteceu na indústria da segurança em projetos de sigilo de dados armazenados e mensagens em trânsito, e assinaturas digitais. Nessa indústria me familiarizei com a teoria da segurança da informação, da criptografia de chaves simétricas e assimétricas, envelopamento de dados e assinaturas digitais, a série de especificações PKCS da RSA, a especificação X.509 do ITU-T, a série de especificações mantidas pelo grupo de trabalho PKIX do IETF, bem como tecnologias específicas como a CryptoAPI, a JCE e a OpenSSL e a programação de hardware criptográfico. Outra parte da minha experiência profissional aconteceu na indústria da televisão digital em projetos de middleware de suporte a aplicações interativas. Nessa indústria me familiarizei especificações de sistemas de televisão digital como o DVB, o ARIB e o SBTVD e sistemas de aplicações interativas como o JavaTV, o MHP e o JavaDTV, bem como as peculiaridades do desenvolvimento de sistemas para set-top boxes e seus dispositivos típicos como tuners, demultiplexers etc. Veja meu perfil profissional no LinkedIn! Gostaria de contratar minha ajuda?Eu estou aberto à possibilidade de participar do seu projeto no meu tempo livre de forma freelancer. Apesar de não poder oferecer muitas horas por semana, participei com sucesso de projetos nos últimos três anos, às vezes produzindo pequenos produtos, às vezes realizando tarefas em projetos maiores, às vezes fazendo o papel de analista de requisitos. Se você estiver interessado, me convide para conversar. PesquisaConduzo pesquisas sobre a ciência da computação e a engenharia de software desde calouro na universidade.Infelizmente, eu não estou conectado com o processo de publicação de artigos; portanto, meus leitores são em geral amigos ou colegas de trabalho. A maior parte das minhas áreas de pesquisa tem nomes de minha própria invenção, ou retirados de fontes que não os consideravam como coisa séria. Uma das grandes áreas do meu interesse é arqueologia dos sistemas. Que um sistema esteja implementado como está é resultado de um grande número de forças tecnológicas e sociais, e a história da interação entre essas forças frequentemente se perde. Durante atividades de manutenção ou extensão de um sistema, é de grande valia o conhecimento do impulso criativo original que o definiu e suas razões, bem como a história do seu desenvolvimento alinhado ou desviado desse impulso original. Sistemas impenetráveis ao arqueólogo, totalmente opacos ao entendimento, tendem a sofrer um processo de sedimentação de seus elementos estruturais, pelo qual esses elementos são soterrados por novos elementos introduzidos pela necessidade de manutenção e extensibilidade. Isto acaba por ocorrer tipicamente quando a reestruturação do sistema se torna uma ideia aterrorizante -- devido a ausência de suites de teste, por exemplo -- e todas as novas atividades se resolvem pelo acúmulo de código-fonte. Outra das grandes áreas do meu interesse é a semiótica dos sistemas, o estudo da representação e comunicação dos conceitos que permeiam um sistema, desde aqueles herdados necessariamente de seus requisitos, casos de uso ou histórias de usuário, àqueles definidos por seus projetistas como a própria solução ao problema fundamental a resolver, por seus elementos formais em diversos níveis. Como representar em alto nível esses conceitos de forma adequada, permitindo que o senso estético e artístico do projetista tenha liberdade sem prejudicar a exigência de não-ambiguidade na transformação do modelo de alto nível em uma implementação de baixo nível? Como representar em baixo nível, onde imperam as restrições sintáticas das linguagens de programação, os conceitos de alto nível originais do problema, de modo a evitar a erosão do projeto após infinitos ciclos de manutenção? As questões da semiótica dos sistemas, segundo a minha experiência, possui uma vertente interessante em direção à otimização dos sistemas. A incompreensão do significado de elementos formais do sistema tende a levar o indivíduo a representar seu entendimento sobre o fluxo de controle e/ou de dados de uma forma excessivamente complexa, com objetos ou atividades demais. Em particular, durante um ciclo de manutenção ou extensão, novos requisitos se tornam excesso de complexidade onde potencialmente o sistema já comportaria seus conceitos. Como ensinou William de Ockham, "não multiplique as entidades desnecessariamente". O que há de mais concreto atualmente é a pesquisa em projeto de pipelines de dados. Após entregar minha pesquisa de graduação, percebi que, apesar de um sistema se basear em uma ótima técnica de gestão concorrente de múltiplos dispositivos, ele ainda assim não alcançará excelente escalabilidade sem alcançar a minimização de cópias de memória. É, por exemplo, imprescindível usar um push parser para analisar mensagens de protocolo; a prática de usar um pull parser convencional exige que se copie todos os pedaços da mensagem em um segmento único de memória. A generalização desta ideia leva a um pipeline de dados onde a análise da mensagem de protocolo é um estágio, a operação da "camada de negócio" é um estágio, e qualquer tipo de resposta é o último estágio. Software, propriamente dito!Tudo isso possui seu aspecto prático.Meu projeto de graduação foi a representação de servidores concorrentes em C++0x com base nos princípios e técnicas da programação genérica. Como resultado dessa pesquisa produzi um binding C++0x para a API de sockets POSIX, e uma biblioteca de servidores concorrentes reutilizáveis em C++0x ao estilo da Loki. (A monografia pode ser obtida em PDF na seção de artigos.) O projeto de pós-graduação do meu grupo de trabalho foi um sistema para avaliação colaborativa de atividades, na forma de questionários web suportando réplicas e tréplicas. Este trabalho foi uma exploração das atividades de análise de requisitos com casos de uso, e especificação de sistemas com modelos UML e MER, bem como outras atividades envolvendo a interface com o usuário, homologação do sistema construído etc. Estou atualmente encarregado da manutenção e evolução de um sistema distribuído para operações criptográficas, com escalabilidade suficiente para os maiores processadores de transações do sistema brasileiro de pagamentos. |