Grupo D5

     Subject: Programação na Web - Grupo D5 : versão FINAL do artigo.
        Date: Thu, 16 Apr 1998 18:58:27 -0300
        From: Carlos Augusto Fernandes Dagnone 
    Reply-To: dagnone@hotmail.com
Organization: Departamento de Engenharia de Fabricação / 
              Faculdade de Engenharia Mecânica / UNICAMP
  Newsgroups: feec.posgrad.IA368F


                      IA368 - Tópicos em Engenharia de Computação V
                        Tema para discussão 5 : Programação na Web


Grupo D: 
Carlos Augusto Fernandes Dagnone R.A.: 932034 (relator) 
Valmir Tadeu Fernandes           R.A.: 946211 
Firmiano Ramos Perlingeiro       R.A.: 972407 
Marcio Vieira Soares             R.A.: 984331 


                                              Índice

1 - Introdução 
2 - Ferramentas disponíveis 
3 - Vantagens e desvantagens... 
4 - A adequação das ferramentas disponíveis ao cenário proposto 
5 - Servlets e suas aplicações 
6 - A discussão das implementações das funcionalidades em detalhes 
7 - Conclusão 
8 - Referências e links 



        1 - Introdução 
  
         A World Wide Web (WWW) tem se destacado nos últimos anos como um
fator de integração de conhecimento, levando a inegáveis mudanças em
diversos aspectos de nossas vidas. A educação é um deles e nesse ponto
podemos distinguir vários tópicos nos quais a WWW desempenha um papel
inovador e, por isso, importante.
         Em [1] encontramos a proposta de um ambiente de ensino no qual
apresentou-se sua arquitetura, suas funcionalidades e suas estratégias de
implementação e é nesse documento que focaremos, levando em conta os três
itens citados, o desenvolvimento do presente trabalho, que consiste em
determinar qual a ferramenta de programação na Web mais adequada ao cenario
descrito, justificando a escolha.
  
        2 - As ferramentas disponíveis 

        A programação na Web é assunto de constantes pesquisas, e vários
mecanismos para obtenção de informação, troca de dados entre clientes /
servidores e compartilhamento de arquivos foram criados. Atualmente,
dispomos de pelo menos duas ferramentas principais, o CGI (Common Gateway
Interface) e a linguagem Java, desenvolvida pela Sun Microsystems. É claro
que melho ramentos em ambas surgiram, gerando, inclusive, novas abordagens
para o tratamento de informações, como os applets (ver [13]) e servlets
(ver [14]). O emprego deste ou daquele método dependerá do que esperamos do
nosso ambiente e da quantidade de dados a serem manipulados.

        3 - Vantagens e desvantagens... 

        Como é de se prever, os dispositivos que empregamos para a
programação na Web não são perfeitos. Algumas limitações presentes na
linguagem Java e no mecanismo CGI tornam a tarefa de se programar as
funcionalidades desejadas um pouco desconfortável (apesar de não ser
difícil !).
        Um dos problemas principais dos mecanismos CGI é a sua interação
com bancos de dados. Os browsers que hoje são usados não são clientes para
esse tipo de armazenamento e o uso de CGI's para realizar acessos a bancos
de dados demonstram seu baixo rendimento, pois os scripts se tornam lentos
quando escritos em linguagens compiladas ou lançadas como processos
separados, gerando os conhecidos "bottlenecks" (ou gargalos), grandes
inimigos da transmissão de dados.  (ver [4] e [5]). Uma das estratégias
para contornar esse problema é a utilização de protocolos TCP/IP (que não
serão comentados aqui) ou alternativas para o CGI, como os programas NSAPI,
ISAPI ou os servlets, que são objetos Java (ver [14]).
        A linguagem Java, por sua vez, revela suas limitações em ambientes
cliente/servidor, já que, em sua concepção, se destina a ambientes com
processamento distribuído.
  
        4 - A adequação das ferramentas disponíveis ao cenário proposto 

        As funcionalidades descritas em [1] podem ser resumidas em três grupos: 

        (a) As que cuidam do cadastro e manutenção dos atores (alunos,
            instrutores,etc);  
        (b) Aquelas que cuidam do andamento da disciplina elaborada; 
        (c) As responsáveis pela aplicação de provas e sua correção. 

        Para os dois primeiros a abordagem CGI foi eleita como opção, ao
passo que o terceiro requeriu o emprego da linguagem Java. Vejamos algumas
das implicações que as escolhas teriam sobre o ambiente discutido.
        Os cadastros de alunos e as consultas às questões disponíveis podem
ser grandes. Ora, o CGI pode se tornar inconveniente num caso desse, que é
perfeitamente possível (alunos em véspera de prova podem ficar inseguros e
consultar várias vezes a resolução de uma determinada questão), pois a cada
acesso, o CGI lanca uma cópia do script, (CGI's são os mediadores entre
servidores e clientes, que atuam através de scripts ou pequenos programas
autoexecutantes - ver [6]-[8]) o que sem dúvida levará à sobrecarga do
servidor (ver [14]). Além disso, os CGI's sobre HTTP's são lentos e não
preservam estados, o que foi parcialmente resolvido com o advento do DAE
(Dynamic Argument Embedding - ver [2], [9]), embora não resolva totalmente
a situação, pois o DAE não acelera o sistema.
        Por outro lado, o uso de Java em arquiteturas cliente/servidor,
como é o caso de nosso ambiente perde a eficiência, uma vez que a filosofia
da linguagem é, basicamente, trabalhar em sistemas distribuídos (ver
[9]-[12]). No cenário em questão, apenas o banco de dados é distribuído e
aberto ao cliente. O acesso a ele é feito via CGI e não Java, o que vem a
confirmar a perda de eficiência. Além disso, o uso de applets deve ser
feito com cautela, pois certas propriedades do sistema podem ser ignoradas
por eles, ou pode haver diferenças entre os efeitos do applet no servidor e
no cliente, o que seria desastroso em termos de seu uso numa prova, por
exemplo (ver [13]).
        Torna-se necessário, portanto, o uso de uma ferramenta mais geral,
que contorne as limitações inerentes aos dois métodos empregados até agora.

        5 - Servlets e suas aplicações 

        Os servlets (ver [14]) surgiram como uma alternativa para o CGI,
possuindo algumas vantagens sobre este:
        - Maior eficiência; 
        - Melhor uso de memória; 
        - Segurança e portabilidade, entre outras. 
        Na arquitetura discutida em [1], a segurança que Java proporciona
está muito bem fundamentada. Os servlets preservam essa característica,
pois derivam diretamente da linguagem. Portabilidade, melhor uso de memória
e desempenho superior aos scripts CGI garantem, enfim, a superioridade
deste mecanismo sobre os demais.
        Por fim, servlets suportam todos os métodos principais HTTP (ver
[15]), o que garante compatibilidade total com os documentos HTML que farão
parte do sistema hipermedia educacional.
        Assim, o uso de servlets em conjunto com o correto emprego de
applets pode ser encarada como uma opção prática na implementação do
cenário em discussão.

        6 - A discussão das implementações em detalhes 
  
        No item 4 fizemos breves comentários sobre como as escolhas feitas
para a implementação das funcionalidades definidas em [1] poderiam afetar
seu desempenho. Baseado nesses comentários, na apresentação dos servlets e
na própria referência [1], vamos nos deter um pouco mais nos detalhes que
envolvem a implementação dos recursos que compõem o nosso cenário "prova
virtual" + "curso sob medida".
        Em primeiro lugar, listemos os tais recursos desejados; queremos um
sistema hipermedia adaptado ao ensino, que seja capaz de ministrar uma dada
disciplina, e no qual estejam disponíveis as seguintes características:
  
        1 - "Compor as disciplinas através de material, exercícios, provas,
aulas, de forma distribuída, aplicando ou não técnicas de grupo, etc."
        Aqui, o uso de servlets é o recomendado, uma vez que estamos
lidando com consultas a bancos de dados, estruturas de armazenamento de
informação nos quais o mecanismo CGI revela suas limitações. Como isso será
feito no servidor, não se justifica o uso de applets.

        2 - "Cadastrar atores com diferentes perfis e níveis de acesso
(instrutor, monitor, alunos, grupos de estudo)."
        Devemos ter operante um servlet que receba como dados as sugestões
feitas em [1]: R.A., nível de acesso, senha, disciplina e perfil, que serão
passados a um banco de dados. Estas informações deverão estar
"transparentes" a todo o restante da estrutura do sistema, pois é a partir
daí que serão elaboradas as provas, questões e avaliações para o
aluno. Pode-se inferir, portanto, que o servlet definido no item anterior
seja suficientemente "inteligente" para levar esses dados em consideração
na hora da preparação das mesmas.

        3 - "Estabelecer perfis para cada curso definindo diferentes visões." 
        Foi proposital a inversão de ordem em relação ao descrito em [1],
pois pensamos que o estabelecimento de perfis adequados para cada aluno é
posterior ao cadastro de suas informações iniciais. Nesse ponto, é usado o
servlet que se incumbirá de "separar" (ou selecionar) os alunos em
diferentes níveis de conhecimento, o que será importante quando da
elaboração de seus exercícios.

        4 - "Disponibilizar as disciplinas / aulas (Relacionamento
             curso/aulas/disciplinas/tempo máximo)."
        Novamente se faz necessário o uso de um servlet para o acesso
cliente / servidor de questões. Introduzimos agora a necessidade, nesta
característica de nosso sistema, do uso do chamado castanet, para otimizar
o acesso aos dados, que podem estar sendo solicitados por diversas
pessoas. O castanet, um produto da empresa Marimba, Inc., é uma outra
ferramenta em Java, desenvolvida para acelerar as transmissões de dados,
permitindo programas Java serem transmitidos através da rede sem um
browser. Informações (bem) básicas sobre essa ferramenta pode ser
encontrada em [16].

        5 - "Acompanhar o andamento da disciplina." 
        A presente funcionalidade (bem como a 6, 7 e 8 seguintes) farão uso
dos applets. A diferença fundamental que justifica o uso deste mecanismo é
que tais processos são interativos, e devem ser processados nas
máquinas-clientes. Em outras palavras, o servidor envia um applet Java que
será disparado na máquina do aluno, e comandará as ações.
  
        6 - "Fornecer o feed-back para alunos e professores." 
        Poderíamos tomar como exemplo deste item a relação entre os alunos
de IA368 e os professores através do newsgroup criado. Aqui, poderia ser
usado o mecanismo CGI, mas preferimos a abordagem servlet, para prevenir
eventuais "tumultos" no grupo de discussão. Nesse "local", podem ser
trocadas informações a respeito do andamento da aula, dos métodos de
avaliação, etc.
  
        7 - "Aplicar provas, testes, dissertativas, etc." 
        Os applets usados para esse momento da interação aluno / máquina
devem ser tais que controlem diversos fatores como tempo de resolução de
uma determinada questão, tentativas de interrupção da resolução, ordem de
escolha de exercícios e etc. O uso do castanet aqui é necessário por
motivos de envio de respostas ao servidor.

        8 - "Corrigir e pontuar a prova pelo próprio sistema através de
             testes, Instrutor "ad-hoc", auto-correção  
             (disponibilizar gabaritos para auto avaliação)." 
        Applets apropriados encerrarão o tempo de resolução do exercício
(ou computarão o tempo gasto para resolvê-lo), reunirão todas as respostas
e as enviarão de volta ao servidor, que se encarregará de corrigir e dar a
nota à avaliação.

        9 - "Disponibilizar os resultados para eventuais consultas." 
        Retornamos, agora, ao uso de servlets, já que se trata de trânsito
entre consultas de alunos às suas provas e o envio destes resultados a quem
os requisita. Pode ser inclusive enviado um gabarito ao interessado, no
qual ele poderá comparar as resoluções.
  
        De acordo com as funcionalidades acima, podemos, então,
enquadrá-las na divisão proposta no item 4:
        - em (a) podemos inserir as funcionalidades 2 e 3; 
        - em (b) inserimos 1, 4, 5 e 6; 
        - finalmente, em (c), encaixamos 7,8 e 9. 

        7 - Conclusão 

        Vimos, neste trabalho, as ferramentas disponíveis a aquelas que
mais auxiliam no desenvolvimento de um ambiente educacional hipotético e
pudemos notar a superioridade dos servlets sobre os mecanismos CGI. As
consultas intensivas a banco de dados e o constante trânsito de informações
na rede fizeram com que o castanet também entrasse na lista de ferramentas
"preferidas".

        8 - Referências & Links 

        A Web na educação e outros assuntos de interesse: 
        [1] Pimenta, M.F., Soares, M.V., "Formatos de documentos na WEB",
relatório final sobre o tema "Formatos de documentos e dados na Web", para
a disciplina IA368: "Tópicos em Engenharia de Computação V", Prim. Semestre
98, FEE/UNICAMP, profs. drs. Ivan Ricarte & Léo Pini 
        [2] Iyengar, A., "Dynamic argument embedding: Preserving state on
the World Wide Web", IEEE Internet Computing, 1(2):50-56, March/April 1997 
        [3] Alcântara, A.A. et al, "HomePages: recursos e técnicas para criação de páginas na WWW", Ed. Campus, 1997 
        [4] Powell, T.A., "Web to Database or Database to Web ?", Web Mechanic 
(http://www.pint.com/workshop/webmech/Past/1.12/WM1.12.p1.htm) 
        [5] (sem autor), "Alguns conceitos sobre CGI, Java e HTML" (título
proposto pelo relator), em
(http://www-usru.broadcom.ie/team/mwa/htmlfiles/chapter1.html)  

        Sobre CGI: 
        [6] Brenner, S.E., Aoki, E., "Prelude to CGI", em "Introduction to
CGI/Perl", M&T Books, 1996
        [7] Conceitos básicos sobre CGI
(http://www.pcs.usp.br/~jyean/cgi/intro.html)
        [8] The Web Developer's Virtual Library, "CGI - The Common Gateway
Interface for Server-side Processing", 1997
(http://WWW.Stars.com/Authoring/CGI/)

        Sobre Java & Applets 
         [9] Orfali, R., Harkey, D., "Client/server, CORBA/Java-Style" em
"Client/server programming with Java and CORBA", John Wiley & Sons, 1997
        [10] Documentação (http://java.sun.com/documentation.html)
        [11] Guia do Programador (http://java.sun.com/progGuide/index.html)
        [12] Especificações
(http://java.sun.com/doc/language_specification/)
        [13] Overview of Applets
(http://www.javasoft.com/docs/books/tutorial/applet/overview/index.html)

        Sobre Servlets 
         [14] Marchal, B., "Dynamic WebPages in Java: Servlets", Digital
Cat's Java Resource Center, November 1997
(http://www.javacats.com/US/Articles/servlet.html)

        Sobre HTML 
        [15] HTML Quick Reference
(http://kuhttp.cc.ukans.edu/lynx_help/HTML_quick.html)

        Sobre Castanet
        [16] Página de divulgação
(http://www.cnet.com/Content/Reviews/JustIn/Items/0,118,340,00.html)
  

ricarte@dca.fee.unicamp.br

Last modified: Wed Apr 29 17:09:30 BRA 1998