MAC 499
Trabalho de Formatura Supervisionado
Alunos : Danilo Eiji Seki
Thiago Schumacher Barcelos
Supervisor : Prof. Dr. Carlos Hitoshi Morimoto
Tipo de trabalho : Iniciação Científica
Experiência pessoal
Individualidade

Sendo um tema que exige uma análise pessoal e subjetiva, cada um dos integrantes do grupo de trabalho dá sua opinião separadamente nesta seção.

Desafios, dificuldades e frustrações
Danilo

Acredito que a maior dificuldade e o maior desafio tenha sido lidar com o sistema operacional Microsoft Windows. Desde o início do curso, os professores ou dão liberdade de escolha de sistema operacional ou recomendam a utilização de sistemas Linux ou similares. No entanto, no primeiro caso, o ambiente quase não influi no desenvolvimento ou resultado do projeto. Dessa forma, o projeto desenvolvido como trabalho de formatura foi meu primeiro contato com aspectos mais estruturais do sistema operacional Windows. Também aprendi mais sobre o funcionamento do sistema operacional, além de ganhar experiência e desenvoltura com a documentação do mesmo e com as API's de desenvolvimento. A grande dificuldade foi exatamente em relação a esses últimos aspectos, pois navegar e entender os mesmos foi extremamente difícil. As estruturas e a forma de funcionamento das API's do sistema operacional chegam a ser ilógicas em alguns pontos, podendo até ser rotuladas de esquisitas. A documentação, por sua vez, é confusa, imprecisa e, em alguns casos, até mesmo errada. Só para citar um exemplo, muitas informações sobre um objeto estão escondidas e só podem ser conseguidas com o método getLong, que, para a surpresa geral, retorna um número do tipo long.

Outro aspecto importante foi o contato com a linguagem C++. Felizmente, por ter conhecimentos de C e orientação a objetos (sob a forma de Java), não houve um choque muito grande quando entrei em contato com a nova linguagem. A maior frustração é justamente nesse aspecto, pois apesar de considerar o conhecimento de C++ muito importante para minha vida profissional, não acredito que tenha obtido uma habilidade muito grande com a linguagem. Felizmente esse fato não teve um impacto significativo sobre o projeto.

Não posso deixar de mencionar a dificuldade de se trabalhar em grupo, ainda com várias versões de código envolvidas, sem a existência de um sistema de controle de versão. Aprofundarei esse tema mais adiante na seção sobre trabalho em equipe.

Thiago

A maior dificuldade que enfrentamos, na minha opinião, foi de ordem técnica. O rastreador de olhar exige um computador rápido para processar a entrada de vídeo em tempo real (30 frames por segundo), e no início do projeto só tínhamos em nosso laboratório computadores com processador Pentium III equipados com Windows 98. Com eles o programa processava em média 18 frames por segundo, o que era insuficiente para conduzir o desenvolvimento. Com a promessa da instalação de computadores mais rápidos, passei cerca de um mês e meio estudando o funcionamento do código; cheguei até a construir uma versão do programa que trabalhasse com bitmaps carregados do disco ao invés do sinal da câmera, apenas como exercício para adquirir familiaridade com o código.

Em agosto foram instalados dois computadores com processador Athlon XP e 512 Mb de RAM cada equipados com Windows XP, que permitiram que o programa processasse 30 frames por segundo; então, o trabalho de programação se intensificou. Daí para frente as dificuldades se concentraram em duas frentes: a API do Windows e o sistema de captura de vídeo.

A API do Windows trouxe alguma dificuldade ao projeto devido a diferenças entre a documentação e a implementação de algumas funções. Obter informações úteis sobre os widgets contidos em uma determinada janela não é uma tarefa muito trivial, e nem muito utilizada da API, por isso a documentação oficial da Microsoft era várias vezes vaga e confusa a esse respeito. Mais de uma vez constatamos, para nossa surpresa, que algumas funções simplesmente não devolviam os valores citados na sua especificação!

Por ser minha primeira experiência com um sistema de visão computacional, algum tempo foi gasto aprendendo como conseguir condições ideais de captura de imagens - descobri que um mínimo ajuste de foco ou um cabo de vídeo diferente podem causar mudanças sensíveis na precisão do sistema.

Para mim a maior frustração foi não ter conseguido conduzir experimentos mais aprofundados a tempo de serem incluídos nessa monografia. Infelizmente perdemos mais tempo do que o previsto para concluir a implementação, além de termos que lidar com aquela constumeira sobrecarga de tarefas do BCC ao final do segundo semestre.

O curso e o trabalho realizado
Danilo

Apesar do projeto ter um aspecto mais prático do que foi normalmente encontrado por mim no curso, pude ver exatamente o que significa conhecer a base e a teoria para aplicá-la nas mais diversas situações. Tudo começa com as matérias básicas, como Introdução à Computação, Princípio de Desenvolvimento de Algoritmos e Estrutura de Dados, indispensáveis para bons métodos de programação, principalmente documentação, capacidade de leitura e interpretação de código e, não menos importante, conhecimento sobre os mais diversos tipos de estruturas de dados.

Outra disciplina importante foi Sistemas Operacionais, que facilitou o entendimento de toda a estrutura do sistema Microsoft Windows, ambiente de desenvolvimento do projeto. Ter cursado a disciplina me deu experiência e uma visão global do funcionamento de triggers, handlers e outros elementos que foram utilizados.

Não posso esquecer também que como o projeto foi desenvolvido em C++, linguagem não utilizada anteriormente, devo dizer que o conhecimento da linguagem C adquirida nas disciplinas de introdução mencionadas anteriormente, juntamente com o conhecimento da linguagem Java, orientada a objetos, adquirida em trabalhos das disciplinas Engenharia de Software, Sistemas de Objetos Distribuídos e Princípios de Interação Homem-Computador.

Finalmente, a disciplina Princípios de Interação Homem-Computador teve um destaque final como uma área que me interessou e acabou servindo como objetivo principal no desenvolvimento do projeto em questão.

Thiago

Acredito que a primeira disciplina a ser citada é MAC 446 - Princípios de Interação Humano Computador, por ter me ajudado a ver e rever vários conceitos importantes para a análise dos resultados da implementação. Em alguns momentos foi necessário aplicar conceitos vistos em MAC 422 - Sistemas Operacionais, como o funcionamento do gerenciamento e proteção de memória em sistemas operacionais modernos. Sendo um trabalho de programação efetuado em dupla, as disciplinas que trataram tanto da prática quanto do planejamento do desenvolvimento foram importantes - ou seja, MAC 332 - Engenharia de Software, MAC 211 - Laboratório de Programação e MAC 242 - Laboratório de Programação II, além de MAC 110 e MAC 122.

O ambiente e a dinâmica do desenvolvimento foram muito semelhantes às da elaboração de EPs do curso; se por um lado isso facilitou o desenvolvimento, por outro me privou de uma oportunidade de experimentar outras maneiras de desenvolver.

Trabalho em equipe
Danilo

Eu acredito que não houve nenhum problema nesse aspecto. Mesmo que, apesar de colegas, nunca tivesse trabalhado com o Thiago em projetos, acadêmicos ou não, considero que tivemos uma boa comunicação e conseguimos trabalhar como um time. Mantendo sempre o outro a par da situação e das atividades sendo realizadas, conseguimos nos direcionar e planejar adequadamente evitando desperdício de tempo e energia. Conseguimos também trocar idéias livremente. Isso se deve ao fato de tanto eu como o Thiago, sob meu ponto de vista, estarmos abertos às opiniões um do outro e sempre as considerarmos seriamente nas tomadas de decisões.

Em minha curta experiência profissional (não-acadêmica), pude perceber que esse tipo de abordagem sempre favorece o produto final, tanto no aspecto de qualidade como no aspecto de custo. Naquele ambiente empresarial, que inibia o compartilhamento e o aproveitamento de idéias individuais, percebia-se claramente que o produto final acabava sendo prejudicado. Presenciei diversas vezes idéias boas que diminuiriam drasticamente o custo de sistemas ou melhorariam muito sua usabilidade ou funcionalidade serem descartadas. Normalmente isso acaba acontecendo por timidez da pessoa que teria a sugestão, por lapso dos gerentes ou até mesmo por disputas políticas internas.

Deixando o relacionamento com a equipe de lado, gostaria de ressaltar a importância de um sistema de controle de versão quando desenvolvendo projetos de médio ou grande porte. Tive meu primeiro contato com o sistema CVS (Concurrent Versions System) no desenvolvimento do projeto da disciplina Sistemas de Objetos Distribuídos. Prevendo o tamanho do projeto, nosso grupo foi incentivado pelo membro Rodrigo Vieira Couto a desenvolvê-lo num ambiente de CVS. Com aquele projeto, eu, que era muito cético quanto aos benefícios de algo do tipo, vi o quanto tão sistema melhorava a produtividade do grupo. Aplicando mais algumas vezes no trabalho ou em projetos pessoais, hoje acredito que a habilidade em utilizar sistemas desse gênero seja essencial para a formação de um profissional da área. Tudo isso está sendo relatado aqui porque a existência de uma central de controle de versões definitivamente teria aumentado muito a produtividade deste projeto. Recomendo, inclusive, que tal gênero de conhecimento seja incluído em alguma disciplina do currículo, Laboratório de Programação, por exemplo.

Em suma, fiquei muito feliz por ter conseguido participar desse modo da equipe, mas consciente de que o nosso caso não é algo comum. Afinal, já não é fácil encontrar equipes com apenas dois membros, muito menos com tais membros compartilhando dessa mesma ideologia. Para finalizar, gostaria de enfatizar a importância do uso de sistemas de controle de versão, já que a capacidade de trabalhar em equipe é algo extremamente importante em qualquer campo de atuação, seja ele acadêmico ou não.

Thiago

Posso dizer que, ao contrário de outros trabalhos em equipe no curso, foi uma experiência muito positiva trabalhar com o Danilo (sem rasgação de seda... :-)). Eu fui o primeiro a entrar em contato com o nosso orientador e saber da possibilidade de projeto com o EyeTracker; desde esse momento eu achava que, pela dimensão inicial e pela própria natureza do projeto, contar com alguém para discutir caminhos e soluções do projeto poderia melhorar bastante a qualidade do resultado final. Ainda, com a intenção inicial de efetuar testes com usuários, seria possível obter mais dados, já que cada um de nós poderia conseguir mais "cobaias" nas horas livres.

Apesar de ainda não termos conseguido efetuar os testes, e de que o nosso tempo livre foi, para variar, bem menor do que eu imaginava, minha intuição inicial se concretizou. No começo do projeto, quando ainda nem tínhamos acesso ao código fonte do MAGIC Pointing em si, tivemos que "explorar" bastante o código fonte para entender o funcionamento do programa, e nossas discussões evitaram muita perda de tempo que poderia acontecer se eu se estivesse trabalhando sozinho e entendesse errado o funcionamento de algum trecho de código. Quando o trabalho de desenvolvimento da extensão do MAGIC Pointing se intensificou, a divisão de tarefas não foi difícil, porque apesar de não ter feito nenhum trabalho com o Danilo anteriormente, já sabíamos com quais tarefas cada um teria mais afinidade e, portanto, mais chance de cumprir com sucesso. Eu já tinha algum conhecimento sobre a API do Windows, portanto ficou comigo a tarefa de descobrir funções que ajudassem a nossa implementação, e testá-las antes do uso no código do projeto (como já citei anteriormente, nem sempre a documentação cumpre o que promete), enquanto que o Danilo cuidou mais de implementação das funcionalidades no código do projeto. Acredito que essa estratégia de testar algumas funcionalidades fora do código do projeto nos poupou tempo precioso, ou pelo menos algumas dores de cabeça. Como não pudemos contar com o apoio de um CVS (o "sonho dourado" do Danilo), tentamos organizar o desenvolvimento através de um log detalhado de alterações e funcionalidades a implementar. Assim nós dois sabíamos o que cada um modificava no código, e sempre que retomávamos o trabalho depois de alguns dias estudando para provas ou fazendo algum EP, lembrávamos rapidamente qual era o próximo passo.

Conclusão pessoal
Danilo

Acredito que avaliando o que foi descrito nos tópicos anteriores, é possível perceber que quase a totalidade das tecnologias e conhecimentos utilizados foram adquiridos, de certa forma, durante o desenvolvimento do projeto. Portanto, apesar de eu ter utilizado em grande escala os conhecimentos acadêmicos adquiridos ao longo do curso, aprendi muito sobre áreas diferentes que não foram diretamente abordadas. No meu ponto de vista, isso é bom e está de acordo com o objetivo do curso que, no meu entender, é dar ao aluno uma base genérica e ampla de conhecimentos com o intuito de facilitar o entendimento e aprendizado de qualquer tecnologia, nova ou antiga.

Algo definitivamente valioso foi a experiência de se trabalhar com projetos científicos. O ponto decisivo que me convenceu a escolher uma iniciação científica como projeto de formatura e não um estágio (minha segunda opção), foi o fato de que ter a oportunidade de se trabalhar com algo do gênero não é comum quando se está no mercado de trabalho real. Ou seja, resolvi fazer uma iniciação científica tendo em vista que atividades do gênero de um estágio seriam muito comuns e freqüentes no futuro, mas que iniciações científicas não, aproveitando portanto a oportunidade que se mostrava disponível.

Finalmente, apreciei bastante a disciplina e considero sua presença no currículo como essencial para a formação de um bacharel em ciência da computação. No entanto, acredito que o benefício seria relevantemente maior se o curso fosse extendido por um quinto ano no qual a única atividade seria o projeto.

Thiago

Este foi para mim um projeto muito gratificante. Antes de tudo, desenvolver um projeto na área de Interação Humano-Computador era um desejo que tinha desde que entrei no BCC. Ainda, como procurei mostrar nessa segunda parte do trabalho, as dificuldades encontradas foram uma grande motivação para manter organizado e produtivo um projeto de duração razoavelmente longa, se comparada com a duração média do esforço dispendido nas tarefas do BCC.

Por fim, como pretendo seguir meus estudos nessa área em nível de pós graduação, a disciplina proporcionou uma excelente oportunidade de conhecer de perto a linha de pesquisa no departamento.

Valid HTML 4.01!Valid CSS Level 2!

Testado com Microsoft Internet Explorer 6.x (Windows) e Opera 6.x (Windows e Linux).