Aluno : Fernando Corrêa Lima ,
flima@linux.ime.usp.br
Orientador : Marcelo Finger,
www.ime.usp.br/~mfinger
, mfinger@ime.usp.br
Nome do Projeto : Tycho Brahe,
www.ime.usp.br/~tycho
Entidade Financiadora : FAPESP - Fundação de Amparo
à Pesquisa do Estado de São Paulo,
http://www.fapesp.br/
O projeto Tycho Brahe tem como objetivo principal estudar mudanças que geraram o português moderno a partir do português antigo, para isto estão sendo desenvolvidas ferramentas computacionais que fazem análise sintática em textos, com o intuito de ajudar estudiosos de linguística em suas pesquisas neste campo. No desenvolvimento dessas ferramentas há participação de profissionais de diversas áreas, dentre elas linguistica, estatística e é claro, computação, maiores informações podem ser obtidas aqui .Os programas desenvolvidos estão instalados em máquinas da rede IME-USP
Uma das preocupações do projeto Tycho Brahe é de disponibilizar as ferramentas de análise de textos que estão instaladas nos computadores da rede IME-USP para pesquisadores de lisguística, a minha participação na elaboração deste projeto consiste em estudar e implementar soluções que tornem possível a utilização dos programas por estas pessoas, para isto estão sendo criadas interfaces gráficas que irão intermediar a comunicação entre os pesquisadores e o etiquetador morfo-sintático existente.Além da parte gráfica também foram desenvolvidas implementações de objetos utilizados pela interface, tais objetos, assim como suas funcionalidades são detalhadas nos próximos tópicos.
O projeto foi praticamente todo desenvolvido em Java, os principais pacotes utilizados na implementação do sistema foram os pacotes AWT (Abstract Window Toolkit) e RMI ( Remote Method Invocation ), no começo do projeto o conhecimento sobre estas tecnologias era irrisório e o domínio delas foi um processo custoso, pois algumas vezes era difícil entender o porque do não funcionamento de algumas implementações, principalmente sobre a parte correspondente a invocação de chamadas remotas.
Uma das vantagens foi ter desenvolvido todo o projeto sozinho, podendo assim, entender toda a implementação. No inicio do projeto não havia definição precisa do que seria o produto final, sabia-se apenas que queríamos uma interface que disponibilizasse o etiquetador para outras pessoas que estivessem fora da rede IME-USP, ou seja, não havia um plano preciso do desenvolvimento do sistema, e mesmo as ferramentas que certamente seriam necessário e teriam que ser implementadas mais cedo ou mais tarde, não foram projetadas previamente, os componentes do sistema simplesmente eram desenvolvidos conforme se mostravam necessários, este método de desenvolvimento se mostrou extremamente ineficaz, já que após certo tempo havia sido criado uma quantidade de código que era maior do o necessário, não fazia tudo o que deveria, e além disso, estava má escrito, já que o aprendizado das tecnologias utilizadas era feito em paralelo ao desenvolvimento do sistema. Também não tive muita preocupação em documentar o que estava sendo desenvolvido, já que a única pessoa que iria alterar o código seria eu mesmo e ninguém mais precisaria entender detalhes do código, depois de algum tempo percebi também que eu não tinha mais idéia do que algumas partes do código faziam, e como não o código não estava documentado vi que havia cometido um grande erro.
Com um domínio razoável das ferramentas de desenvolvimento acabei reescrevendo grande parte do que havia feito, desta vez documentando todo o código fonte, projetando os componentes e suas responsabilidades e analisando como seria feita a comunicação entre os componentes e corrigindo os erros detectados na primeira tentativa mau sucedida. Esta segunda versão se mostrou mais simples de entender, mais funcional e mais estável, além disso, o código ficou menor e mais fácil de ser alterado, devido ao alto grau de modularidade que foi dado aos componentes desenvolvidos. Os módulos criados, que são detalhados nos próximos tópicos, foram implementados de forma a poderem ser configurados sem a necessidade de alteração do código fonte e com alto grau de modularidade.
O projeto portanto ressaltou a importância de se projetar cuidadosamente o que deve ser feito, pois isto economiza bastante trabalho e tempo, além de gerar um sistema melhor desenvolvido.
Aqui segue uma explicação detalhada sobre o sistema desenvolvido com o intuito de disponibilizar o etiquetador para outros pesquisadores:
O sistema desenvolvido pode ser dividido em duas partes principais, que serão genericamente chamadas por Cliente e Servidor, a parte relativa ao Cliente é simplesmente uma applet Java que deve ser carregada a partir do site hospedado na máquina onde está o Servidor, esta applet recebe, no momento em que é carregada, informações fornecidas pelo Servidor sobre o que ela deve pedir ao usuário para iniciar a execução do etiquetador, que está instalado no Servidor, estes parâmetros pedidos ao usuário são nomes de arquivos que o usuário anteriormente enviou para o Servidor (este envio também é detalhado nos tópicos seguintes) e que o etiquetador utiliza durante sua execução.
A applet Cliente, após receber os dados por parte do usuário, invoca remotamente o etiquetador que está no Servidor, ou seja, os dados são enviados do Cliente para o Servidor, o etiquetador é executado e o resultado é devolvido para o usuário, toda a comunicação entre Cliente e Servidor é feita através da tecnologia RMI, que encapsula toda a transmissão de dados através da rede.
A applet é capaz de realizar chamadas remotas paralelas, ou seja, o usuário pode realizar a etiquetagem de mais de um texto simultaneamente, além disso a applet permite também que o usuário execute apenas parte da etiquetagem (o processo de etiquetagem é dividido em varias partes, com resultados parciais entre elas), podendo assim, inspecionar os resultados intermediários.
A parte relativa ao Servidor é um pouco mais elaborada que o Cliente, por isso é dividida em componentes independentes que executam tarefas específicas, tornando assim o Servidor bastante modular e fácil de ser alterado, já que alterações em um desses componentes não irá afetar o funcionamento dos demais, além disso, novos componentes podem ser introduzidos com igual facilidade. Estes componentes são todos utilizados pela applet Cliente na execução da etiquetagem. Atualmente existem três componentes:
O primeiro deles permite que o usuário se identifique ao carregar a applet em seu browser, a partir de então, caso esteja cadastrado no sistema, o sistema reconhecerá os comandos feitos por este usuário, fornecendo acesso ás ferramentas de etiquetagem.
O segundo componente é responsável por gerenciar os arquivos do usuário (estes arquivos são enviados para o servidor com o uso de um programa cgi e um formulário HTML, que é acessível a partir da própria applet Cliente).
O terceiro e ultimo componente em uso atualmente é responsável por executar as tarefas de etiquetagem requisitadas pelo Cliente, a aplet Cliente simplesmente envia um comando de etiquetagem especificando quais partes da etiquetagem deseja executar e os parâmetros necessários e este componente executa o comando recebido e devolve o resultado para o Cliente.
Um usuário pode acessar o sistema a partir de qualquer computador
que possua acesso a Internet e um navegador compatível com a linguagem
Java, a interface Cliente pede ao usuário todos os dados necessários
para a execução do processo de etiquetagem, esses dados são
basicamente nomes de arquivos residentes no Servidor, os dados coletados
são então enviados através de uma conexão
remota com o Servidor que também hospeda todas as ferramentas utilizadas
no processo de etiquetagem, ao receber os dados, o Servidor analisa o
que foi recebido e caso não existam erros, o processo de etiquetagem
é iniciado, uma mensagem é enviada ao cliente indicando o inicio
do processo solicitado. Quando o processo de etiquetagem que está
ocorrendo na máquina servidora é concluído, uma nova
mensagem é enviada para o Cliente, indicando o termino do processo,
essas mensagem enviadas pelo Servidor para o Cliente permite que este monitore
o processo de etiquetagem, obtendo assim informações de
erros e termino do processo.
Desafios, Frustrações e a Interação com o curso
O principal desafio foi aprender praticamente tudo o que foi utilizado no desenvolvimento do projeto sozinho, no início do projeto eu possuía pouco conhecimento sobre programação em Java, assim como controle de concorrência e protocolos de redes que foram implementados no sistema, nesse aspecto, a principal fonte de informação foi encontrada na Internet. Desenvolver tudo sozinho também foi uma frustração, pois isso algumas vezes isto me deixava sem motivação.
As disciplinas do BCC que mais ajudaram no desenvolvimento do projeto foram as disciplinas básicas: Introdução a Computação e Princípios de Desenvolvimento de Algoritmos, além de Estruturas de Dados, Programação Orientada a Objetos e Redes de Computadores. As disciplinas de fora do departamento de Computação talvez tenham ajudado em minha maneira de pensar, mas não tiveram nenhuma outra influência na implementação do sistema.
Desenvolvi o projeto inteiro sozinho, o que impossibilita comparar com o trabalho em equipe realizados em matérias cursadas durante o curso, mas posso comparar com projetos que também implementei sozinho em algumas disciplinas do BCC, os ep's, que em geral foram muito mais simples e menos abrangente no conhecimento necessário para implementação, no desenvolvimento de ep's, geralmente implementamos o suficiente para conseguir a nota que precisamos, na IC tive a preocupação de desenvolver o sistema de maneira organizada, tentando escrever codigo limpo e bem documentado, o que se mostrou difícil devido à quantidade de codigo gerado. Outra grande diferença estava na especificação, em ep's já temos um enunciado que diz quase tudo o que devemos implementar, em minha IC, a especificação inicial consistia em "Construir uma interface", ou seja, não estava muito claro o que deveria ser feito. Portanto, existem grandes diferenças entre um projeto de sala de aula e minha IC, tanto no tempo gasto na implementação quanto na metodologia de desenvolvimento.
Para se aprofundar nos temas abordados no projeto, seria necessário estudar arquiteturas de redes de computadores, princípios de desenvolvimento de interfaces e também questões de segurança que devem ser consideradas neste tipo de aplicação, mas atualmente não tenho interesse em continuar pesquisando tais assuntos em minha pos-graduação.
Durante todo o projeto foi de grande ajuda a participação do professor Marcelo, apesar de não conhecer muito sobre o desenvolvimento de Interfaces, Comunicação Remota, etc, ele me incentivou bastante e me manteve motivado durante todo o projeto, tentanto sempre resolver dúvidas e indicar o melhor caminho a seguir.
Core Java, volume 1, Horstmann, Cay S. Makron Books.
Core Java, volume 2, Horstmann, Cay S. Makron Books.
Aprendendo Java - Programação na Internet, Damasceno Jr, Americo. Erica
Textos, exemplos e tutoriais sobre as tecnologias utilizadas obtidos em mecanismos de busca na internet, tais como cade, altavista, etc...
Durante o desenvolvimento do projeto também houveram momentos longe dos computadores, em fevereiro de 2000, por exemplo, foi feita uma viagem para o instituto de lingüística da Universidade de Campinas, nessa viagem foi exibido um protótipo da interface da etiquetagem para as lingüistas que participam do projeto e que serão os principais usuários do sistema desenvolvido, elas puderam comparar o uso das ferramentas usadas na etiquetagem através de uma linha de comando e através do uso da interface que esconde as ferramentas reais de etiquetagem.
Esse encontro demonstrou que as interfaces precisam ser extremamente fáceis de utilizar, já que a maior parte das pessoas que irão executar o processo de etiquetagem em geral são lingüistas que não possuem grandes conhecimentos de computação.
Em novembro de 2000 realizou-se, na faculdade de Engenharia de São
Carlos o 8° Simpósio Internacional de Iniciação
Científica. Neste simpósio tive oportunidade de expor o projeto
e conhecer outros projetos de Iniciação Científica
desenvolvidos por alunos de faculdades de todo o Brasil e também
de outros países, foi uma experiência bastante agradável
e produtiva.