Monografia de MAC499


1a Parte

  1. Objetivos
    Fazer uma implementação em C do sistema desenvolvido pelo Daniel Oliveira Dantas referente à automatização para se medir o sinal de imagens de cDNA.

  2. Introdução
    A técnica de microarray possibilita, através da análise da concentração relativa de mRNA de 2 amostras distintas, medir a expressão gênica de milhares de genes simultaneamente.
    Esta técnica é utilizada para se estudar a estrutura de genomas inteiros, diagnóstico de doenças, descoberta de novos genes, pesquisa de novas drogas medicinais, etc. A técnica utiliza arranjos de cDNA que são distribuídos de forma ordenada sobre uma placa. Ela é constituída em um arrranjo de sequências de cDNA ou oligonucleotídeos. A análise é feita pelo processo de hibridização com sua sequência complementar. Depois ela é passada em um scanner de alta resolução onde depois a imagem é processada para a obtenção da expressão gênica.
    O problema é que o usuário necessita interagir com o programa por um bom tempo até conseguir uma boa segmentação que gere bons resultados. O trabalho do Daniel visou automatizar esse processo de segmentação e a identificação dos spots de forma precisa e sem interferência humana.
    Não irei detalhar o processo já que o projeto se limita a implementação do sistema atual desenvolvido em MATLAB, em melhorias na interface e adição de funcionalidades que visam a melhoria do sistema. Inicialmente iremos fazer o desenvolvimento em Windows já que o pymorphpro(Mmorph toolbox for python) só possui versão para o Windows.

  3. Gerenciamento de atividades
    Bom, o gerenciamento das atividades é feito pelo Daniel e o fluxo do desenvolvimento depende de mim. Atualmente estamos fazendo reuniões semanais para melhorar o fluxo de comunicação que foi deficiente(por minha culpa) durante o semestre...

  4. Cronograma
    Aqui temos o cronograma geral de todo o projeto.
    Como o projeto ainda está em andamento houve a necessidade de adaptação total nos prazos e objetivos. Este planejamento está bem superficial e pode ser alterado conforme o andamento do projeto. Por enquanto a realidade é a seguinte:

    Data Objetivo
    01/12/2003
    • Desenvolvimento da interface em tkinter.
    • Desenvolvimento das funcoes de IO do sistema.
    • Funcionalidade de leitura de arquivos tiff em C. Montagem das structs básicas do sistema.
    15/12/2003
    • Navegação do usuário pela interface.
    • Desenvolvimento de algumas das funcionalidades apresentadas no matlab.
    • Desenvolvimento da tela de parâmetros, menus e popups.
    • Utilizacao das funcoes do pymmorphpro.
    • Criação de testes automatizados nos módulos que foram/serão criados
    12/01/2004
    • Testes das funcionalidades implementadas até agora. Acredito que a fase de segmentação dos blocos esteja feita nesta fase.
    • Desenvolvimento de detalhes da interface. Ainda depende de conversas com o Daniel.
    26/01/2004
    • Todas as telas deverão estar construídas e pelo menos 70% das funcionalidades implementadas.
    • Help do sistema já concluído.
    • Repassada no código com o intuito de localizar eventuais gargalos no código utilizando as técnicas aprendidas em sistemas de alto desempenho dado pelo Gubi(MAC443).
    09/02/2004
    • Todas as funcionalidades deverão estar implementadas.
    • Desenvolvimento de detalhes e facilidades ao usuário.
    • Planejamento da versão para outras plataformas. Dependendo da decisão tomada, teremos uma alteração no cronograma nas datas posteriores.
    • Se possível, criação de um novo cartaz de 499.
    23/02/2004
    • Teste da versão beta.
    • Correção de bugs.
    • Criação do manual do usuário sobre o sistema.
    01/03/2004
    • Entrega do sistema final.


  5. Suporte e planos de contingencia
    Ok. O curso terminou e aqui estou eu com o projeto em andamento... Basicamente o suporte ao sistema será feito através de contato direto e através de outros alunos(ou estagiários). Se houver a necessidade de novos plugins ou correção de bugs estarei a disposição. O telefone do Call Center deste sistema será o meu celular que talvez não esteja funcionando após o término do projeto. Como o sistema não terá acesso à base de dados então caso o sistema de um crash basta fazer a correção dos bugs. Não há um plano de contingência bem elaborado no sistema atual. Segue-se o esquema "Deu Pau -> localizar o Bug e arrumar o mais rápido possível."

  6. Referências bibliográficas
    Atualmente estou utilizando as seguintes referências para o desenvolvimento do projeto:

    Bibliografia
    Algorithms For Image Processing And Computer Vision
    J. R. Parker
    Wiley Computer Publishing
    Practical Image Processing in C
    Craig A. lindley
    Wiley Computer Publishing
    Borland C++ 4.0
    Chris H. Pappas, William H. Murray
    McGraw Hill
    Machine Vision Algorithms in Java: Techniques and Implementation
    Paul F. Whelan / Derek Molloy
    Springer


    Links
    1. http://www.vision.ime.usp.br/~ddantas/dissert/master_thesis.pdf
    2. Tkinter Documentation
    3. Python/C API
    4. Python Tutorial
    5. MMORPH Toolbox for Python


  7. Treinamento
    Não houve nenhum treinamento dado já que o sistema atualmente envolve apenas o Daniel.
    Na verdade sabemos que um sistema bem feito não necessita de manual. Como eu sei que isso raramente acontece então o usuário terá à sua disposição um manual que será feito no final do projeto. Essa será a ferramenta de treinamento do usuário.

  8. Ferramentas/Técnicas utilizadas
    Atualmente estamos utilizando como ferramentas e recursos o Borland C++ 4.5, o pymorphpro, tkinter e python/C. Futuramente haverá o desenvolvimento deste sistema para linux.
    Para o desenvolvimento da interface com o tkinter está sendo utilizado o super editor Emacs mesmo.
    Anteriormente, ao invés do tkinter foi utilizado o GTK+. Depois de mexer um pouco com o GTK+ para Windows seria mais interessante utilizar o tkinter já que houve alguns problemas na construção da interface utilizando esta ferramenta.

  9. Cartas que ficaram escondidas na manga e continuam lá
    Este projeto é bem interessante já que ele é bem aberto permitindo que eu aplique qualquer técnica possível e existente no mundo. Como o projeto ainda está em andamento e como estou sem cartas na manga atualmente então não há nada que ficou engasgado na garganta. Sem essas restrições que em geral existem no mundo dos negócios tudo depende da inspiração e disciplina do programador.

  10. Acompanhamento do supervisor/orientador
    Devido à falta de comunicação de minha parte não houve um contato muito grande entre supervisor e supervisionado.

2a Parte

  1. Desafios e Frustrações.
    Um dos desafios principais deste projeto era construir um sistema robusto, confiável e eficiente de forma a bater o sistema desenvolvido em MATLAB. Isso se tornou bastante interessante já que a base seria programado em C com a interface feita em tkinter utilizando a API tkinter/C. Outro desafio seria aprimorar a interface com o usuário de forma a facilitar a utilização do sistema já que o MATLAB não permitia muitas coisas em relação ao desenvolvimento da interface.
    Com isso em mente eu vi que poderia aplicar as técnicas de IHC(matéria do Hitoshi) e aprender os algoritmos de processamento de imagens em uma área que eu não estava familiarizado. Isso sem contar aprender uma nova linguagem como o Python e relembrar C. Outra aplicação seria a utilização dos métodos de alto desempenho para otimização do código já que envolve um processamento grande no tratamento de imagens.
    A maior frustação deste semestre foi no meu desempenho que deixou a desejar. O ritmo de programação completamente fragmentada prejudicou demais o projeto embora agora a produção de linhas de código estão sendo mais lineares e o melhor: acima de zero.

  2. Afinal, para que serviu o Ime?
    Aqui vou listar as matérias que eu realmente utilizei e vou dar alguns créditos a algumas matérias que eu acho relevantes mesmo sem ter usado.

    Matéria Comentários
    MAC122, MAC323, MAC338 e MAC328
    São matérias chaves do curso já que você usa sem mesmo perceber isso. É necessário usar as estruturas aprendidas em 122 e 323 em qualquer lugar onde seja necessário programar. Grafos é aquela matéria que é importante mais no desenvolvimento do raciocinio na solução de problemas.
    No caso de MAC122 foi interessante que é uma das primeiras matérias onde se consegue adquirir o skill de compressão/dilatação do tempo. Como ele os alunos do Ime conseguem fazer os eps na última hora com uma qualidade discutível mas suficiente para passar na matéria. É claro que em matérias mais avançadas não basta só isso. É necessário adquirir o meditation que permite você pensar com mais clareza. Em geral se adquiri isso em MAC328.
    A importância de AA é um tanto discutível já que ele parte para um lado mais teórico mas ele acaba sendo importante para a vida acadêmica.
    MAC446
    Bem interessante poder aplicar tudo que se aprende em IHC. Embora muitas coisas sejam intuitivas na construção de uma interface gráfica, existem muitos detalhes que os programadores esquecem ou desconhecem e esta matéria consegue abrir os olhos do programador mostrando as técnicas que tornam uma interface realmente funcional.
    MAC300 e MAT122
    Como muitas das operações envolvem operações sobre matrizes, esta matéria acaba sendo essencial(alg. lin. também de forma indireta) no projeto.
    MAT211
    Nunca pensei que iria dizer isso mas devido ao milagre de eu ter passado nesta matéria e ao uso de algoritmos de processamento de imagens sou obrigado a dizer que esta matéria foi realmente MUITO importante para este projeto.
    MAC332 e MAC445(XP)
    Na verdade XP foi a matéria mais importante do curso já que é lá que os alunos tem um contato com projetos reais, bem diferente de engenharia de software ou BD onde se faz um projeto mas depois que acaba o curso não importa se está funcionando bem.
    Neste projeto está começando a ser implantado a filosofia XP já que a filosofia Homer Simpson de ficar de baixo das cobertas esperando que tudo se resolva de um dia para o outro não deu muito certo.
    MAC417
    Eu não poderia deixar de citar a matéria de processamento de imagens já que isso faz parte do sistema.
    MAC443
    Sistemas de alto desempenho. Esta matéria está sendo utilizada para a melhoria na estruturação do código para facilitar o compilador na otimização do programa.
    MAC424
    Esta matéria realmente me surpreendeu e achei espetacular a forma do Setzer da aula. Realmente me ajudou bastante já que esta matéria foi extremamente agradável e diferente. Ela acabou sendo útil de forma indireta.
    MAC438 e MAC426
    Estou deixando essas duas matérias como relevantes pois elas sempre serão relevantes no desevolvimento de qualquer sistema.
    Concorrente sempre será importante já que dificilmente teremos um sistema que não possua dados compartilhados ou que tenha apenas 1 usuário.
    BD é necessário pois futuramente este sistema terá um acesso a uma base de dados.


  3. Interação com a vida real
    Agora que a comunicação entre eu e o Daniel foi retomada o projeto voltou a andar. Isso já é visivel já que o projeto está andando de forma mais linear. Essa é uma prova de que o contato com o cliente é essencial no desenvolvimento do projeto já que sem ele não haveria cobranças e nem os requisitos para dar forma ao sistema.

  4. Ime x Realidade
    Em geral a realidade se diferencia dos eps do Ime pela existência de um usuário, um cliente e para nós, desenvolvedores, isso faz uma enorme diferença. É claro que este projeto é mais tranquilo já que o Daniel é um desenvolvedor também e isso facilita muito a comunicação. Acredito que o projeto de XP é o que mais se aproxima da realidade no desenvolvimento de um sistema real. Os eps "comuns" que seguem o padrão do Ime servem para fixar algoritmos mas peca por não exigir do aluno uma análise de requisitos, etc. Já em engenharia de software isso é exigido mas não adianta nada pois não há a implantação do projeto.

  5. Ime x Realidade - Parte 2
    Houve a necessidade de se adaptar alguma técnica aprendida no Ime para este projeto?
    A resposta é: por enquanto não. Como a utilização da metodologia XP está sendo feita e ainda não houve necessidade de adaptação posso dizer que estou utilizando tudo que aprendi no Ime da forma que aprendi no Ime.

  6. Dá para melhorar?
    Como em qualquer projeto, é necessário uma comunicação constante com o cliente através de protocolos que ambos conheçam. Há também a necessidade de comprometimento e uma constância na produção do programador. O que posso dizer é que faltou essas duas coisas de minha parte.
    Em relação ao treinamento para melhorar a produção é claro que o conhecimento fluente das linguagens utilizadas pesa muito na velocidade. É importantíssimo ao programador sempre estar ligado às novas atualizações das ferramentas e linguagens que se utiliza.

  7. Críticas, auto-crítica e desabafo geral (opcional)
    Poderia falar sobre política, esporte ou qualquer outra coisa aqui já que está seria uma parte totalmente livre de qualquer padrão. Vou apenas fazer uma auto-crítica aqui. Este ano foi realmente triste mesmo mas mesmo assim nada é desculpa para a demora no desenvolvimento deste projeto. Quando o projeto é extremamente focado no programador e se existir apenas 1 programador o projeto corre o risco de não ter seus prazos cumpridos já que se o programador não estiver bem o projeto simplesmente pára.
    Outro enfoque nesta auto-crítica é a falta da famosa proatividade. Não tive a criatividade para tentar novas idéias e nem a disciplina para utilizar algum processo de desevolvimento de software para melhorar a produção. Sem isso fica difícil de se ter uma visão global do projeto.
    Agora em relação à disciplina de 499, acho que seria interessante retirar a obrigatoriedade na apresentação já que vejo muitos alunos contrários a isso. Isso permitiria um aumento de tempo na apresentação daqueles que estão realmente interessados em expor seus trabalhos aumentando assim a qualidade nas apresentações.


Atualizado em 08/12/2003