Projeto de Formatura Supervisionado
[MAC-499 ]



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 - Funcação de Amparo à Pesquisa do Estado de São Paulo, http://www.fapesp.br/



O projeto

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çao 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

[indice]

Minha participação

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.Alem 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.

[indice]

Desenvolvimento

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árias 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 mau 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 ao 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 imortância de se projetar cuidadosamente o que deve ser feito, pois isto economiza bastante trabalho e tempo, além de gerar um sistema melhor desenvovido.

[indice]

O sistema 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 parametros 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 Sevidor 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 requisitados pelo Cliente, a aplet Cliente simplesmente envia um comando de etiquetagem especificando quais partes da etiquetagem deseja executar e os parametros necessários e este componente executa o comando recebido e devolve o resultado para o Cliente.

[indice]

Funcionalidade geral

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.


[indice]


Observações

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.

[indice]