Implementação de uma Ferramenta de Edição de Texto Colaborativa Paulo Roberto Gonçalves, Thereza Patrícia P. Padilha Curso de Sistemas de Informação Centro Universitário Luterano de Palmas (CEULP) Palmas, TO, Brasil {prg,thereza}@ulbra-to.br Abstract. In general, the collaborative environments provide a set of tools that offer the communication among members. The purpose of these tools is to allow the members have a better interaction in teach-learning process. This paper presents the implementation of a collaborative text editor, using the resources of the programming language Java. Resumo. De modo geral, os ambientes colaborativos agregam um conjunto de ferramentas que propiciam a comunicação entre os membros de um grupo. O propósito dessas ferramentas é permitir que os membros possam ter uma maior interação no processo de ensino-aprendizado, devido às características contidas nessas ferramentas. Diante disso, este artigo apresenta a implementação de uma ferramenta de edição colaborativa de texto, utilizando os recursos da linguagem de programação Java. 1 Introdução A partir do momento em que as novas tecnologias de comunicação começaram a fazer parte da Educação a Distância (EaD), foram projetados modelos de ensino e de aprendizado cada vez mais interativos. Com isso, o surgimento de ambientes colaborativos para a EaD suportados pela Internet que oferecem recursos para a construção do conhecimento de modos síncrona e assíncrona entre os membros (alunoaluno ou aluno-professor) independentemente de tempo e local tem sido bastante aceitos na comunidade de Informática na Educação. As ferramentas síncronas permitem membros de um grupo trabalharem ao mesmo tempo. Já as ferramentas assíncronas não possibilitam essa comunicação ao mesmo tempo. Chat, whiteboard, editor de texto colaborativo, votação, listas de discussão, e-mail e videoconferência são as ferramentas mais comuns para suportar a colaboração via computador. Cada vez mais surgem pesquisas que destacam o aprendizado em grupo. Portanto, é de vital importância para o advento da EaD desenvolver ferramentas de comunicação textual que propiciem o aprendizado em grupo, preocupando-se com a colaboração entre os membros, interface e segurança das informações compartilhadas. Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 Vale a pena ressaltar que a personalização/adequação dessas ferramentas num ambiente colaborativo tem uma grande relevância para o sucesso do ensino-aprendizado. Dentro desse contexto, o presente artigo visa apresentar a implementação de uma ferramenta de edição de texto colaborativa, utilizando os recursos da linguagem Java, para ser utilizada em ambientes colaborativos. Este artigo está organizado da seguinte forma: na seção 2 é apresentada uma visão geral sobre a edição colaborativa suportada por computador; na seção 3 são descritos alguns aspectos básicos para o suporte do desenvolvimento de ferramentas de edição colaborativa; na seção 4 são apresentadas a interface e a implementação da ferramenta de edição de texto proposta; na seção 5 são apresentadas as considerações finais do trabalho. 2 Edição Colaborativa Suportada por Computador A facilidade de comunicação introduzida pelo avanço das áreas de telecomunicações e redes de computadores tem viabilizado o surgimento de várias ferramentas de trabalho cooperativo/colaborativo suportado por computador (Computer Supported Cooperative Work – CSCW). CSCW é uma área de pesquisa que envolve estudos de computação e tecnologias de comunicação para suportar atividades em grupo [Weiss 2001]. Quando esse tipo de aplicação está inserido num contexto de aprendizagem, torna-se mais conhecido como Aprendizado Cooperativo Suportado por Computador (Computer Supported Cooperative Learning), na qual pessoas têm um espaço compartilhado para o aprendizado [Macedo et al. 1999 ]. A estratégia das ferramentas de edição que suportam a colaboração via computador é incentivar os participantes a trabalharem em grupo num documento comum, respeitando as características individuais. Todos participantes interagem entre si visando a formulação de um artigo ou relatório. A edição colaborativa pode ser definida como um processo, no qual autores (editores, usuários ou revisores) com diferentes habilidades e responsabilidades interagem durante a elaboração ou a revisão de um documento. Muitas ferramentas já suportam a edição colaborativa para diferentes tipos de mídia, como por exemplo, textos, gráficos e documentos estruturados. 3 Suporte de Desenvolvimento de Ferramentas de Edição Colaborativa Na última década têm surgido muitas soluções técnicas para o suporte de ferramentas de edição colaborativa, mas poucas estão, na realidade, em uso. Em geral, essas ferramentas envolvem várias áreas da ciência da computação, tais como: redes de computadores e comunicação, sistemas operacionais, multimídia e hipermídia. Alguns aspectos considerados importantes para esse suporte são descritos a seguir: 3.1 Compartilhamento O compartilhamento de tempo é um caso especial da multiprogramação em que vários usuários compartilham um determinado computador (servidor) por terminais. O servidor executa uma parte do trabalho de um usuário e então passa a servir o próximo Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 usuário. O servidor faz isso, tão rapidamente, que pode fornecer um serviço para cada usuário várias vezes por segundo, de modo tão transparente, que parecem que os programas dos usuários estejam executando simultaneamente. Por isso, o compartilhamento de tempo possui a vantagem que o usuário recebe respostas quase imediatas às suas solicitações em vez de esperar um longo tempo por resultados [Deitel e Deitel 2001]. A incorporação das funcionalidades de controle de acesso e versão numa ferramenta de edição colaborativa agregará segurança aos documentos compartilhados, pois, neste tipo de aplicação, tem-se uma certa probabilidade de conflitos gerados pelo fato dos usuários realizarem operações simultâneas em documentos compartilhados. Na edição colaborativa, evitar que os usuários trabalhem com versões de textos ultrapassadas é fundamental. Para isto, é necessário implantar o: • Controle de Concorrência – quando vários usuários estão conectados ao servidor, os mesmos estão concorrendo entre si para as realizações das suas ações. As políticas de controle de concorrência definem uma área exclusiva para a interação do texto sem a interferência de outro usuário, podendo ser seções, parágrafos ou letras. Portanto, quanto menor o nível de granularidade definido, maior controle será necessário. • Controle de Versão – O controle de versões em editores colaborativos é um aspecto fundamental para evitar conflitos e inconsistências entre as versões de textos elaboradas pelo grupo. Em geral, o controle de versões implementado nos editores gerencia as diferentes cópias do mesmo objeto (texto). Por exemplo, usuários desejam conhecer quem foi o último membro que alterou o documento e em que parte do documento foi realizada a alteração. Uma breve descrição e comparação de sistemas de controle de versão existentes, tais como: RCS (Revision Control System), MICROCOSM, COOP, PREP e Timewarp, e questões sobre conflitos, tipos de acesso, gerenciamento de versões e tipos de arquitetura de editores colaborativos podem ser encontrados em [Lee et al. 1998 ]. Uma alternativa viável e bastante utilizada é a criação de um histórico de alterações, indicando o local das alterações, nome do usuário, data e horário. 3.2 Visualização Uma das formas de visualização do espaço compartilhado é o estilo What You See is What I See (WYSWIS). O WYSWIS strict é rigoroso e mais problemático para um número de membros muito grande, porque qualquer ação de um membro é influenciada para todos os outros membros. E, nem sempre, todos os membros desejam trabalhar deste modo. Um exemplo de WYSWIS strict é o NetMeeting da Microsoft. O WYSWIS relaxed é um estilo mais aceitável pelos membros, pois a sua visualização é individual, ou seja, cada membro trabalha do seu modo sem perturbar os outros. Um exemplo de WYSWIS relaxed é o ambiente de aprendizado TeamWave Workplace (www.teamwave.com). 3.3 Percepção (Awareness) A maioria das ferramentas síncronas fornece a percepção de usuários através de um beep ou cor de fonte diferente. Já nas ferramentas assíncronas, a percepção é obtida após algum tempo, pois os usuários podem fazer a sua contribuição e, posteriormente, Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 enviar para os demais usuários. Um histórico das ações dos usuários nos objetos compartilhados evita trabalhos redundantes, e também possibilita, verificar a participação dos usuários. Geralmente, um histórico possui informações de data, hora e usuário que realizou a última alteração num documento. 3.4 Arquitetura A arquitetura distribuída é caracterizada pelo armazenamento dos documentos em diversos hosts. Tipicamente, o servidor armazena o modelo do documento e os clientes possuem uma cópia (do documento) e o controlador de versão, que verifica as atualizações existentes. Desta forma, apenas os eventos dos modelos, situados no servidor, são atualizados nos hosts clientes. Uma vantagem desta arquitetura é que os clientes podem trabalhar independente do funcionamento da rede. A arquitetura centralizada mantém apenas uma aplicação e envia mensagens do evento a todos os clientes. Quando um arquivo é atualizado, todas as alterações são enviadas para o servidor, que por sua vez, enviará para os demais usuários, caso estejam conectados. Assim, o servidor mantém arquivos compartilhados de forma consistente. Um problema encontrado nessa arquitetura é que se o servidor não estiver funcionando, todos os usuários não podem trabalhar. Pode-se verificar que a arquitetura distribuída possui uma implementação mais fácil que a centralizada. 4 Editor de Texto Colaborativo Proposto Uma ferramenta de edição deve reunir um conjunto de elementos básicos, de forma a facilitar o desenvolvimento de textos entre autores colaboradores. Por isso a ferramenta de edição colaborativa proposta disponibiliza os principais recursos que compõem um editor de texto tradicional (salvar arquivo, abrir arquivo, negrito, itálico, etc). O editor proposto suporta a comunicação em grupo, ou seja, existem vários grupos, sendo que cada grupo trabalha com um documento diferente. A linguagem de programação escolhida para a implementação foi Java devido, principalmente, o suporte da execução em várias plataformas, a disponibilidade de recursos avançados de computação distribuída e por possuir recursos que permitem aplicativos multithreaded, isto é, aplicativos que podem especificar que múltiplas atividades deverão ocorrer em paralelo [Deitel e Deitel 2001]. Na figura 1 pode ser visualizada a interface do editor de texto colaborativo proposto. Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 Figura 1. Interface do editor de texto colaborativo 4.1 Aspectos de Implementação Na literatura, existem vários tipos de políticas de controle de acesso, que variam de acordo com a granularidade, que são: blocos de texto, parágrafos ou palavras. Quanto menor o nível de granularidade definida no editor maior controle será necessário sobre o texto e, conseqüentemente consumo da largura de banda. Essas políticas de controle, conhecidas também como regras de comportamento, são difíceis de serem implementadas remotamente porque é necessário um gerenciamento das informações que estão sendo enviadas/recebidas simultaneamente pelos membros [Padilha 2003]. A política de controle de acesso a ser implementada neste editor foi definida por blocos de textos, assim um membro poderá fazer as suas alterações num certo bloco, não disponibilizando para os demais membros até que o finalize. Pode-se verificar a interface com os blocos de texto na figura 1. Para a inserção de blocos de texto há uma opção no menu na qual o membro cria o bloco. Quando um bloco é inserido, ao lado do mesmo há uma estrutura dos blocos contendo o nome de cada bloco criado. Ao inserir um bloco de texto o membro estará apto a utilizá-lo, os outros blocos estarão bloqueados caso os outros membros estiverem editando. Assim, um bloco só estará liberado quando um membro finalizar. Para verificar se um bloco está sendo editado ou está liberado, o membro precisa selecionar o nome do bloco na estrutura de blocos, retornando assim uma mensagem quando estiver sendo utilizado ou selecionando a área de texto do bloco deixando editá-la quando não estiver sendo utilizada. Por isso a estrutura de blocos localizada à esquerda é apresentada para uma melhor organização dos blocos que estarão sendo utilizados e para que um usuário possa escolher um outro bloco para visualizá-lo ou mesmo editá-lo, caso esteja livre. Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 Para a implementação dos blocos de texto foi definido que cada bloco seria uma área de texto a qual é destinada a apenas um usuário. Para a criação dessas áreas de texto utilizou-se da classe da API Java JTextPane, pois suporta todas as formatações requeridas para os textos. Cada JTextPane pode ter ou não um usuário responsável por ele, sendo assim quando um usuário cria um bloco de texto, uma mensagem é enviada ao servidor, sendo ela um vetor unidimensional, da classe vector da API Java, contendo duas posições, um boolean indicando false e uma string contendo o nome do JTextPane. Depois o servidor repassa essa mensagem aos demais membros, onde será invocado o método setEnabled false para o respectivo JTextPane. Quando o usuário de alguma forma libera uma área de texto, o procedimento de liberação do JTextPane é feita da mesma forma que foi descrito anteriormente mudando apenas o valor booleano para true. Quando uma área de texto é inserida, simultaneamente um nó é criado na estrutura de blocos com o nome definido pelo usuário. A estrutura de blocos é representada em forma de uma árvore, utilizando-se da classe JTree da API Java. Para o funcionamento do editor o usuário deve informar o seu login e senha. Quando um usuário se conecta ele pertence a um certo grupo. Na Figura 2 é apresentada a arquitetura genérica do editor colaborativo, destacando como é realizada a comunicação entre os membros do grupo e o servidor. Como pode ser observada, essa arquitetura suporta a comunicação em grupo, ou seja, quando um cliente solicita a conexão, envia o login e o nome do grupo, o servidor guarda suas informações e disponibiliza ao demais membros do grupo. É importante ressaltar que um cliente pode ser membro de apenas um grupo. Figura 2. Arquitetura genérica do editor de texto colaborativo Para a implementação desses grupos foi estabelecido um vetor unidimensional, da classe vector do Java, para armazenar as informações dos clientes no servidor. O servidor possui um vetor S que, em cada posição, armazena um outro vetor C. Cada vetor C possui as informações de um cliente conectado, que são: o login, o grupo, o documento que esse cliente está editando e o fluxo do aplicativo (que verifica se o usuário fechou o aplicativo ou quer enviar uma mensagem aos membros do grupo). Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 O compartilhamento do documento é feito de forma transparente para os clientes. Cada cliente possui uma cópia do documento podendo realizar alterações nesse arquivo, o qual é repassado para o servidor que, em seguida, repassará novamente para os clientes conectados. Quando um cliente se conecta ao servidor, é repassado apenas uma cópia do documento original. Em termos de implementação, cada cliente conectado ao servidor se tornará um thread, que são processos executando concorrentemente (controle de concorrência). Deste modo, o arquivo original (documento) fica armazenado no servidor, mais precisamente, em um repositório. O servidor possui um repositório que armazenará os documentos compartilhados, sendo possível verificar a última versão de cada documento editado do grupo (controle de versões). Para cada documento salvo é criado um arquivo .log contendo no nome do mesmo, o nome do respectivo do documento salvo, a data e a hora em que foi salvo. O arquivo .log conterá as alterações mais recentes feitas no arquivo texto, com o nome de quem fez a alteração e a data e hora da modificação. Os arquivos são salvos em um repositório visando evitar a redundância. Senão cada usuário poderia salvar sua versão, podendo alterá-la e não disponibilizá-la aos demais integrantes do grupo, contrariando os conceitos de edição colaborativa. 5 Considerações Finais O editor de texto proposto possui várias funcionalidades de um editor comum, diferenciando-se pelo fato de suportar a edição colaborativa de vários grupos simultaneamente. Possibilita a sua execução em várias plataformas e os modos de interação assíncrona e síncrona, na qual é muito importante para motivar os membros, tornando assim uma comunicação mais próxima do ensino presencial. Uma das dificuldades encontradas foi com relação ao modo de envio do texto para o servidor com algumas restrições estabelecidas. Pois se têm várias áreas de texto que precisam ser atualizadas quase que simultaneamente, para que um membro possa ver o que cada um do grupo está fazendo. Pode-se concluir a eficiência da linguagem Java para aplicações voltadas à confecção de ferramentas colaborativas, por fornecer recursos que permitam a implementação de técnicas de colaboração. Outro aspecto positivo de uma aplicação construída em Java é o fato da mesma ser orientada a objetos, que proporciona benefícios como: a extensibilidade, reusabilidade, manutenção, entre outros. Além disso, pode-se verificar o poder da linguagem Java para os recursos de sockets (cliente/servidor), construção de múltiplas linhas de execução – concorrência (threads) e acesso à banco de dados [Horstman e Cornell 2001], devido já existirem várias classes e construtores implementados, o que acelera e facilita a implementação. Além do alto grau de recursos oferecidos, a linguagem de programação Java é multiplataforma, permitindo que um mesmo programa possa ser utilizado em máquinas com sistemas operacionais diferentes, garantindo a portabilidade de qualquer aplicação implementada nessa linguagem. Além disso, o Java disponibiliza primitivas de concorrência. Estas foram relevâncias que nos levaram a escolher a linguagem Java. Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360 Acredita-se que com as funcionalidades de controle de acesso e de versão numa ferramenta de edição de texto colaborativa agregará mais segurança aos documentos compartilhados, principalmente porque existe uma grande probabilidade de conflitos. Referências Bibliográficas Deitel, H. M. e Deitel, P. J. (2001) “Java como programar”, Tradução: Edson Furnankiewicz, Porto Alegre: Bookman. Horstman C. S. e Cornell, G. (2001) “CoreJava 2 – Recursos Avançados”. Tradução: João Eduardo N. Tortello Revisão Técnica: Álvaro R. Antunes. São Paulo: MAKRON Books, Vol. II. Lee, B. G. e Chang, K. H. e Narayanan, N. H. (1998) “An integrated approach to version control management in computer supported collaborative writing”, In: Proceedings of the 36th Annual ACM Southeast Conference. Macedo, A. A. e Pimentel, M. G. C. e Fontes, R. P. M. (1999) “Studyconf: infraestrutura de Suporte ao Aprendizado Cooperativo na WWW”, In: Revista Brasileira de Informática na Educação. Weiss, G. (2001) “Multiagent systems: a modern approach to distributed artificial intelligence”, MIT Press. Padilha, T. P. P. (2003) “Um ambiente de aprendizado colaborativo para resolução de problemas”. Exame de Qualificação de Doutorado, Universidade Federal de Santa Catarina. Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. outubro, 2003. pp. 353-360