TOP: Una Plataforma para el Desarrollo de Interfaces y Aplicaciones Colaborativas sobre Web
 
Luis A. Guerrero, Roberto C. Portugal, David A. Fuller
{luguerre, rportug, dfuller}@ing.puc.cl
Departamento de Ciencia de la Computación
Pontificia Universidad Católica de Chile

RESUMEN

En el presente artículo se propone una plataforma basada en objetos para la construcción de aplicaciones colaborativas sobre el Web. Se describe un esquema de comunicación para que aplicaciones construidas sobre el Web puedan intercambiar mensajes con un servidor de objetos. Este esquema provee una gran flexibilidad para la construcción de interfaces Web y para el desarrollo de aplicaciones colaborativas en Internet. Se muestran también algunos ejemplos de aplicaciones colaborativas desarrolladas sobre Internet utilizando la plataforma orientada a objetos. La interfaz de estas aplicaciones fue construida sobre el Web utilizando el esquema de comunicación propuesto.

Palabras claves: Sistemas Colaborativos, interfaz humano-computador, plataforma orientada a objetos, Internet, aplicaciones sobre Web.

1. Introducción

El World Wide Web (en adelante Web) provee un marco ideal para el desarrollo de aplicaciones colaborativas debido principalmente a su amplia extensión alrededor de todo el mundo. Esto facilita la distribución de las aplicaciones y la comunicación y colaboración entre los usuarios de los grupos de trabajo.

Hasta hace poco tiempo, el Web era de naturaleza básicamente asincrónica. Sin embargo, los nuevos "sitios Web de cuarta generación" [Eckerson97] permiten bajar documentos HTML [Berners-Lee94] con applets de Java [Flanagan97] que proveen comunicación directa, por ejemplo a través de TCP/IP, con otros servidores. Los applets pueden incluso estar del lado del servidor HTTP como servlets de un Java Web Server [JWS], lo que provee mejor funcionalidad que el uso de los tradicionales CGIs [Robinson96]. Estos recientes avances han hecho posible el desarrollo de aplicaciones colaborativas sobre el Web, con alto grado de sincronismo [Gall97, Kindberg96, Trevor97, vanWelie96, Walther96].

Sin embargo, la creación de estas aplicaciones no es tarea fácil, principalmente por la escasez de herramientas de desarrollo. Esto hace que el proceso de construcción de aplicaciones empiece de cero, teniendo que invertir mucho tiempo en problemas de comunicación, seguridad, control de concurrencia, transmisión de datos, diseño de interfaces, etc.

En este artículo presentamos una plataforma para el desarrollo de aplicaciones colaborativas sobre el Web y un esquema de comunicación cliente-servidor, usando como clientes documentos HTML con funciones JavaScript [Flanagan97b] desde cualquier browser que las soporte. La sección 2 muestra la plataforma, la sección 3 el esquema de comunicación cliente-servidor y en la sección 4 se presentan algunas de las aplicaciones desarrolladas usando la plataforma y el esquema de comunicación.

2. La plataforma TOP

La plataforma TOP ("Ten Objects Platform") es parte del proyecto CLASS ("Computer Learning Applications for Students' Support") [Guerrero97] y nace debido a la falta de herramientas para la rápida construcción y modificación de aplicaciones colaborativas docentes. Esta plataforma está compuesta por diez objetos para la construcción de aplicaciones colaborativas, y un servidor que provee acceso a los métodos y atributos de estos objetos. El siguiente diagrama OMT [Rumbaugh91] muestra la relación entre estos objetos.
 

Figura 2.1. Objetos de la plataforma TOP


Los objetos tipo box son repositorios de información, donde puede almacenarse cualquier otro tipo de objeto. El objeto boxObject contiene información sobre cada objeto almacenado en un box, básicamente su nombre, dueño o creador, fecha de creación, última fecha de modificación y último usuario que lo modificó. Cada objeto debe tener un tipo. La especificación de tipos se hace a través del objeto boxObjectType. En este objeto se especifica, entre otras cosas, la forma en que este tipo de objeto va a ser visualizado a través de un browser HTML, es decir, las instrucciones o marcas HTML que se necesitan para desplegar este tipo de objeto.

El objeto view permite tener vistas distintas de los objetos contenidos en un box, por ejemplo para ocultar cierta información o para presentar la información de otra manera. Las vistas y los permisos de acceso a los objetos de un box están determinadas por el rol que cada usuario tiene en una aplicación. Los objetos user y role definen estos permisos. El objeto floorControl define políticas de control de piso para proveer coordinación en las aplicaciones, por ejemplo para coordinar el uso de recursos compartidos. El objeto session permite definir sesiones de trabajo y áreas de trabajo distintas para una misma aplicación. El objeto broadcast envía información a todos los usuarios conectados en una misma sesión de trabajo, principalmente en sesiones de trabajo sincrónico. Finalmente, el objeto environment es quien relaciona todos los objetos de una misma aplicación. A través de este objeto se tiene acceso al contexto o ambiente compartido de una aplicación.

Los métodos y atributos de todos estos objetos se pueden acceder y modificar mediante mensajes enviados al servidor de la plataforma. También a través de este servidor se pueden borrar y crear nuevos objetos. Tanto los objetos como el servidor están hechos en Java, lo que hace que la plataforma sea portable.

Ellis define groupware como sistemas basados en computadoras que apoyan a grupos de gente que trabajan en una tarea o meta común, y que provee una interfaz a un ambiente compartido [Ellis91]. A través de los objetos de la plataforma se puede crear el ambiente compartido de la aplicación. El usuario constructor de aplicaciones, a través del programa administrador de la plataforma, define los objetos que necesita para su aplicación. Luego construye, en JavaScript, la interfaz de su aplicación. Veamos a continuación cómo se realiza este proceso.

3. Interfaz a través del Web

Para la creación de la interfaz de la aplicación se utiliza JavaScript y HTML. Se tiene definido un pequeño applet (3.11Kbytes el archivo .class) que encapsula todas las rutinas de comunicación con el servidor, incluyendo definición de puertos, protocolos de comunicación, servicio de notificaciones y variables para almacenamiento temporal con persistencia durante todo el tiempo que la aplicación es utilizada en el browser. El llamado a este applet se hace desde una hoja HTML que forma parte de la aplicación, y permite la comunicación con el servidor de la plataforma TOP. La clase principal de este applet se llama TopInterface. Sus atributos y métodos son mostrados en la siguiente figura.
 
 

Figura 3.1. La clase TopInterface.
 

Los atributos server y port registran, respectivamente, el nombre del servidor donde se encuentra el servidor de TOP y el número de socket que utiliza para "escuchar". El atributo listener, es una referencia a un objeto tipo "thread". El handWindow es un atributo que representa la ventana del browser (o frame) donde se ejecuta TopInterface. handWindow provee el enlace de comunicación entre TopInterface y las funciones JavaScript.

Un problema que se presenta en JavaScript, es la referencia a variables desde funciones que se ejecutan en frames diferentes dentro de un mismo browser. Por ello se adiciona a TopInterface el atributo vars[], que es un vector de tiras de caracteres con capacidad limitada. La forma de acceder a este atributo, es a través de los métodos putvar() y getvar(), que almacenan una variable y recuperan su contenido, respectivamente.

El método run() es quien recibe las notificaciones del servidor y las transfiere a la función JavaScript notificator(). Este método es un "thread" protegido que se ejecuta luego de haber inicializado e instanciado el atributo listener.

listener = new Thread(this);
listener.start();
requestService() es un método público para las funciones JavaScript que desean comunicarse con el servidor de TOP. makeConnection() es un método privado que establece esta comunicación vía sockets. Finalmente, sendRequest()es el método privado que envía mensajes al servidor. Estos mensajes son originados en las funciones JavaScript de las hojas HTML de las aplicaciones.

3.1 La Funcionalidad de TopInterface

LiveConnect [Flanagan97b] es el mecanismo que permite a JavaScript y Java trabajar juntos. Se emplea esta facilidad de comunicación para lograr la interacción entre las aplicaciones Web con JavaScript y TopInterface.

Existen dos características que TopInterface ofrece a las aplicaciones JavaScript: la comunicación con la plataforma TOP (para la invocación de sus servicios) y un servicio de notificación para proveer percepción (awareness) de usuarios [Dourish92]. La siguiente figura muestra esta funcionalidad.

Figura 3.2. Esquema de comunicación con el servidor.


Los eventos que ocurren en la interfaz (browser) son tratados por las respectivas funciones definidas en JavaScript. Así por ejemplo, cuando un usuario presiona un botón para conectarse a una sesión determinada, se invoca a la función inSession(). Esto se muestra a continuación.

            <INPUT TYPE="button"
            NAME="button_connect"
            VALUE="Connect"
            onFocus='document.formData.msg.value="Connect to a TOP session."'
            onClick="inSession(document.formData.text_userName.value,
            document.formData.text_password.value)">

Este código define un botón para conectarse a una sesión de trabajo de la plataforma TOP. El evento que maneja esta conexión es la función inSession(), a la cual se le transfiere el nombre del usuario y su palabra de paso.

3.2 Invocación a los Servicios del Servidor TOP

Cuando se requiere invocar un servicio de la plataforma TOP, se debe construir el mensaje respectivo en una función JavaScript, según la estructura de los servicios de TOP. Por ejemplo, cuando un usuario desea conectarse a una sesión en TOP debe invocar al siguiente servicio del servidor TOP:

    UpdateUserSession:user_name,password,session_name,app_name,check_user,access_mode

Para esto, debe construirse en una función JavaScript el siguiente mensaje:

var msg = "UpdateUserSession:" + userName + "," + password + "," + sessionName + "," + AppName + "," + "not" + "," + "in"; 
Para transmitir esta solicitud de servicio, se invoca al método requestService(), implementado en TopInterface. El llamado a éste método es transparente, y se realiza de la siguiente forma: answer = document.TopInterface.requestService(msg)
if (answer=="OK") {
    // Servicio atendido
}
else {
    // Problema en el llamado al servicio
}
 La variable answer recibe de TOP la confirmación del servicio. Cuando el servicio es atendido en forma exitosa se recibe un "OK" . En caso contrario, se recibe un código de "ERROR". El método requestService(), recibe el mensaje en la variable service.
  // Método público para aplicaciones JavaScript
public String requestService(String service) {
    String answer="";
    try {
        makeConnection();
        answer = sendRequest(service);
    } catch (IOException ex) {
        ex.printStackTrace ();
    }
    return(answer);
}
 
El método makeConnection() se encarga de establecer la comunicación con el servidor de TOP vía sockets, y el mensaje es enviado a través del método sendRequest(service). Éste método espera la confirmación del servidor, retornándola a la función JavaScript, quien la instancia en la variable answer.

3.3 Servicio de Notificaciones para Aplicaciones Web

Una característica común en aplicaciones colaborativas sincrónicas es el servicio de notificación a los usuarios. Una notificación se produce cuando el estado compartido de una aplicación cambia [Day97]. Una forma de proveer mecanismos de percepción y sincronismo a las aplicaciones Web, es a través del servicio de notificación que TopInterface provee.

Existen dos situaciones no excluyentes en las que se pueden encontrar los usuarios en una aplicación colaborativa: en estado de notificadores o en estado de observadores [Eiderbäck97].

Un usuario es notificador cuando pone en conocimiento de los demás usuarios un evento. Bajo nuestro esquema, para esta situación se utiliza el método sendMessage() del objeto broadcast de la plataforma TOP. Primero se construye el mensaje de este servicio desde una función JavaScript, y luego se invoca al método requestService() de TopInterface para transmitir el mensaje al servidor. Por ejemplo:

            msg = "broadcast:" + userName + "," + appName + "," + sessionName +
                    "," + broadcastName + "," + userList + "," + "nosave" + "," +
                    messageToBroadcast
            answer = document.TopInterface.requestService(msg)


Un usuario es observador cuando recibe la notificación de un evento por parte de un usuario notificador. TopInterface implementa un "thread" en el lado del cliente para escuchar los mensajes transmitidos por los usuarios notificadores. Esto se hace a través del servicio broadcast() del servidor. Esta situación obliga a implementar en JavaScript una función denominada notificator(String notify). Esta función es invocada por el "thread" de TopInterface para transmitir la notificación por medio del atributo handWindow, de la siguiente forma:
 

            handWindow = JSObject.getWindow(this); // handler for Netscape window
            ...
            private void run() {
                ...
                                handWindow.call("notificator",args);
                ...
            }


El atributo handWindow hace referencia a la página Web donde está ejecutándose TopInterface. A través de su método call() se hace el llamado a la función notificator() de JavaScript. El argumento args contiene el evento a notificar. En la construcción de la interfaz, se debe considerar el manejo de todos los eventos que pueden producir notificaciones. Esto depende de la funcionalidad de cada aplicación.

Las notificaciones son recibidas por la función notificator(String notify), en la variable notify, bajo el siguiente formato:

Algunos ejemplos de notificaciones que se podría requerir manejar son:

Veamos ahora algunos ejemplos de aplicaciones construidas sobre Web que utilizan los objetos de la plataforma TOP y nuestro esquema de comunicación.

4. Ejemplos de Aplicaciones

Las siguientes aplicaciones fueron implementadas sobre Web empleando el lenguaje JavaScript. Estas aplicaciones emplean la clase TopInterface y los otros objetos de la plataforma TOP para proveer colaboración.

Para la creación de los ambientes de cada aplicación, se utiliza el programa administrador de la plataforma TOP. A través de este programa se pueden crear y modificar todos los objetos de la plataforma. La pantalla principal de este programa se muestra en la siguiente figura.
 

 Figura 4.1. Administrador de la plataforma TOP


A través del menú principal se pueden crear usuarios y ambientes. Una vez que se crea un ambiente, se pueden crear los otros objetos, que deben estar relacionados con éste. En una etapa previa del diseño de las aplicaciones se debe determinar los objetos que se necesitarán, y a través de este administrador se crean. Veamos algunos ejemplos.

4.1 Aplicación ChatWeb

Se implementó una aplicación chat para demostrar la funcionalidad de nuestra plataforma en la construcción de aplicaciones colaborativas sincrónicas sobre Web. Esta aplicación envía y recibe mensajes tipo texto y proporciona mecanismos de percepción (awareness) sobre los usuarios que llegan y se retiran de la sesión. Por defecto los mensajes son enviados a todos los usuarios conectados a la sesión. Sin embargo, provee la facilidad de seleccionar los usuarios a los que se desea enviar el mensaje.

Para el funcionamiento de la aplicación se creó en la plataforma TOP (usando el administrador presentado en la sección anterior) un ambiente de trabajo y un box con broadcast sin persistencia. Se definió un tipo de usuario guest, para que cualquier persona pueda hacer uso de esta aplicación. La siguiente figura muestra nuestra aplicación Chat.
 

Figura 4.2. Chat a través del Web


El usuario debe ingresar su nombre y la palabra guest como palabra de paso. Luego debe conectarse a la plataforma a través del botón "connect". Una vez registrado en la plataforma, puede enviar mensajes. Conforme otros usuarios se incorporen o se retiren de la sesión, serán visualizados en la ventana "User Connected". Para retirarse de la sesión se utiliza el botón "disconnect". Esta aplicación está disponible para ser utilizada en la dirección: http://cronos.ing.puc.cl/~rportug/ChatWeb/ ChatWeb.html

4.2 Aplicación Slider: Control de Navegación Sincrónica sobre Web

Existen varios trabajos relacionados sobre la sincronización de los Web-Browsers [Yen96, Parnes97], por lo que esta idea no es nueva. Slider requiere la creación de una sesión, un box y un control de piso (objeto floorControl) a través del administrador de objetos de TOP. Con el control de piso se garantiza la existencia de un solo usuario notificador y varios usuarios observadores. El usuario que posee el control de piso cuenta con la barra de botones habilitada para navegar dentro de una secuencia predefinida de hojas HTML. También cuenta con un telepuntero [Greenberg96], implementado con layers [Netscape-Layers], para resaltar algún tópico dentro de la hoja HTML.

El aporte de Slider radica en la forma de su implementación. Según Yeh, JavaScript y Java no pueden sincronizar los browser en los clientes: JavaScript no provee posibilidad de comunicación y Java sólo detecta los eventos que se activan en el "frame" del Java applet [Yeh96]. Slider sincroniza los browsers de los clientes a través de funciones JavaScript que se comunican con applets Java.

El problema de brindar distribución en tiempo real entre hojas HTML en el Web puede ser divido en dos partes: sincronización y distribución [Parnes97]. La sincronización y distribución en Slider se da través de la función JavaScript notificator(). Esta función hace que los usuarios observadores reciban dos tipos de notificación: la posición del telepuntero y la dirección URL de la hoja HTML. Con la dirección URL los observadores solicitan la página HTML al Web Server. Con la posición del telepuntero ubican a éste en su propio browser. La siguiente figura muestra la aplicación Slider.

Figura 4.3. Aplicación Slider.


Al cargar la hoja HTML principal de esta aplicación se solicita el nombre del usuario. La aplicación automáticamente detecta, según la configuración de la sesión de trabajo de TOP, si posee o no el control de piso. Cualquier acción que realice quien tiene el control de piso, sobre el telepuntero o los botones de navegación, es reflejado en todos los browsers conectados a la sesión. Actualmente sólo el usuario coordinador posee el control del piso. Estamos trabajando en una nueva versión que permite rotar el control de piso mediante alguna política predefinida, como FIFO o prioridades.

4.3 ECO: Editor Colaborativo

ECO es un editor colaborativo asincrónico simple, construido utilizando nuestro esquema de comunicación y la plataforma TOP. El acceso al editor está restringido. Solamente usuarios previamente definidos pueden crear o modificar documentos. Al ingresar al editor se solicita el nombre del usuario y su palabra de paso. A través de una función JavaScript, se envía un mensaje a TopInterface para validar su ingreso. TopInterface se comunica con el servidor de TOP para verificar si es usuario del editor. Si el usuario es tiene acceso al editor, se le presenta la siguiente pantalla.

Figura 4.4. Editor colaborativo asincrónico


En esta pantalla se presentan opciones para edición de texto, para crear o recuperar documentos, y para visualizar los documentos. Según la estrategia de colaboración definida en el editor, los usuarios no pueden borrar ni modificar objetos creados por otros usuarios, solamente visualizarlos. Pueden crear nuevos objetos, por ejemplo nuevos párrafos de texto, o modificar aquellos objetos que ellos mismos han creado. Sin embargo, pueden hacer comentarios a cualquier objeto a través de notas de texto. Estas notas pueden ser removidas por el dueño del objeto. La siguiente figura muestra un ejemplo de visualización del documento incluyendo estas notas.

Figura 4.5. Notas de comentario en el editor


En la figura 4.5 se muestra la opción de visualización del documento con todas sus marcas. Aquí se incluye, en texto azul, el nombre de cada objeto, el dueño y los íconos correspondientes a los comentarios hechos por otros usuarios. Estos comentarios pueden ser visualizados haciendo click sobre los íconos. Se presenta una ventana pequeña de fondo amarillo con el nombre del usuario que hizo el comentario y el texto del mismo. Otra opción muestra el documento completo sin marcas, en su presentación final.

5. Conclusiones y Trabajo Futuro

En el presente artículo se mostró una plataforma para la construcción de aplicaciones colaborativas sobre Web y un esquema de comunicación entre funciones JavaScript de hojas HTML, un applet de Java y un servidor de objetos.

Los objetos box, boxObject y boxObjectType de la plataforma TOP, administran los datos de las aplicaciones colaborativas. El objeto view provee diferentes vistas sobre estos datos. Los objetos user y role definen los permisos de acceso de los usuarios sobre las vistas y la información contenida en los boxes. El objeto floorControl provee coordinación en el uso de recursos compartidos. El objeto session permite definir periodos de trabajo sincrónico. También define áreas de trabajo distintas para distintos grupos de trabajo. El objeto broadcast distribuye objetos entre los usuarios conectados en una sesión de trabajo sincrónico. Finalmente, el objeto environment establece la relación entre todos los objetos de una misma aplicación. Los métodos y atributos de estos objetos son administrados a través de un servidor.

Una aplicación colaborativa está conformada por un ambiente o contexto compartido, y una interfaz a este ambiente. A través de los diez objetos de la plataforma TOP es posible construir el ambiente o contexto compartido. Para la creación de la interfaz en aplicaciones colaborativas sobre Web se utiliza el lenguaje JavaScript. Las funciones JavaScript de estas aplicaciones se pueden comunicar con el servidor de la plataforma TOP a través del applet TopInterface, usando LiveConnect.

El applet TopInterface tiene un método que "escucha" los mensajes enviados desde el servidor. Al recibir una notificación, ejecuta un manejador de eventos, que debe ser programado en la aplicación Web como una función JavaScript llamada notificator(String notify). A través de esta función cada aplicación hace el respectivo tratamiento de las notificaciones que puede recibir. Otra funcionalidad de TopInterface es el almacenamiento y recuperación de variables desde JavaScript, evitando de esta forma el uso de "Cookies" [Flanagan97b], que incluso puede ser desabilitada por el usuario del browser. Esto soluciona el problema de que JavaScript, por razones de seguridad, no permite transferir información entre "frames".

Nuestra propuesta muestra cómo, aplicaciones Web con funciones JavaScript, pueden ser extendidas a aplicaciones sincrónicas, multiusuario y distribuidas, empleando TopInterface y la plataforma TOP. Permitiendo luego agregar mecanismos de colaboración a estas aplicaciones. Se puede aprovechar además las ventajas del hipertexto, propias de las hojas Web, para el diseño de estas aplicaciones.

A pesar de que en el presente artículo hemos enfatizado en el desarrollo de aplicaciones colaborativas sobre Web, nuestra plataforma es abierta. La plataforma está construida en Java, lo que la hace portable. El servidor de la plataforma escucha un puerto definido por el administrador al levantarlo. De este modo, es posible la comunicación entre el servidor y cualquier aplicación construida en algún lenguaje que permita la definición de sockets.

Como trabajo futuro esperamos diseñar e implementar más aplicaciones colaborativas sobre la plataforma. Estamos trabajando en la incorporación de audio y video, ampliando la comunicación para permitir plug-ins usando LiveConnect. También esperamos incorporar más servicios en el servidor de TOP, así como mejorar los aspectos de seguridad y consistencia de la información.

Reconocimientos

Este trabajo fue parcialmente apoyado por el Fondo Nacional de Ciencia y Tecnología (FONDECYT), proyecto 198-0960.

Referencias

[Day97] Day, M., Pattersson J. and Mitchell D. The Notification Service Transfer Protocol (NSTP): Infraestructure for Syncronous Groupware. Proceedings of the Sixth International World Wide Web Conference. Santa Clara, California USA. April 7-11, 1997. Available at: http://www6.nttlabs.com/ HyperNews/get/PAPER80.html

[Dourish92] Dourish P. and Belloti V. Awareness and Coordination in Shared Workspaces. Proceedings of CSCW'92, pp. 107-114. Canada, 1992.

[Eiderbäck97] Eiderbäck, B. and Jiarong L. A Common Notification Service. Proceedings of the OOGP'97, The ECSCW'97 Workshop on Object Oriented Groupware Platforms. Lancaster, UK. September 7, 1997. Available at: http://www.trc.nl/events/ecscw97oogp/papers.htm

[Ellis91] Ellis, C.A., Gibbs, S.J. and Rein, G.L. Groupware Some Issues and Experiences. Communications of teh ACM, Vol. 34 No.1, 1991, pp. 38-58.

[Flanagan97] Flanagan, D. Java in a Nutshell. USA, O'Reilly, Second Edition, May, 1997.

[Flanagan97b] Flanagan, D. JavaScript, The Definitive Guide. USA, O’Reilly & Associates, Inc. Second Edition. January, 1997.

[Gall97] Gall, U., Hauck, F. Promondia: A Java-Based Framework for Real-Time Group Communication in the Web. Proceedings of the Sixth International World Wide Web Conference. Santa Clara, California USA. April 7-11, 1997. Available at: http://www6.nttlabs.com/HyperNews/ get/PAPER100.html

[Girgensohn96] Girgensohn, A., Lee, A., and Schlueter, K. Experiences in Developing Collaborative pplications Using the World Wide Web "Shell". Proceedings of ACM Hypertext'96, pp. 246-255, Washington, USA, March, 1996.

[Greenberg96] Greenberg, S., Gutwin, C., and Roseman, M. Semantic Telepointers for Groupware. Proceedings of the OzCHI '96, Sixth Australian Conference on Computer-Human Interaction, Hamilton, New Zealand, November 24-27, 1996.

[Kindberg96] Kindberg, T. Mushroom, A Framework for Collaboration and Interaction Across the Intenet. Proceedings of the ERCIM Workshop on CSCW and the Web. Sankt Augustin, Germany. February 7-9, 1996.

[Patterson96] Patterson, J.F., Dayn, M.and Kucan, J. Notification Servers for Syncronous Groupware. Proceedings of the CSCW 96. Boston, Massachusetts, USA. November 16-20, 1996.

[Parnes97] Parnes, P., Mattsson, M., Synnes, K. and Schefstr, D. The mWeb Presentation Framework. Proceedings of the Sixth International World Wide Web Conference. Santa Clara, California USA. April 7-11, 1997. Available at: http://www6.nttlabs.com/HyperNews/get/PAPER23.html

[Robinson96] Robinson, D. The WWW Common Gateway Interface. Version 1.1. Internet Draft, January, 1996.

[Trevor97] Trevor, J., Koch, T. and Woetzel, G. MetaWeb: Bringing Synchonous Groupware to the World Wide Web. Proceedings of the European Conference on Computer Supported Cooperative Work, ECSCW'97, Lancaster, 1997. Available at: http://bscw.gmd.de/MetaWeb/papers/ecscw97.html

[vanWelie96] vanWelie M. and Eliëns A. Chatting on the Web. Proceedings of the ERCIM Workshop on CSCW and the Web. Sankt Augustin, Germany. February 7-9, 1996.

[Walther96] Walther, M. Supporting Development of Synchronous Collaboration Tools on the Web with GroCo. Proceedings of the ERCIM Workshop on CSCW and the Web. Sankt Augustin, Germany. February 7-9, 1996.

[Yeh96] Yeh, P., Chen, B., Lai, M. and Yuan, S.. Synchronous Navigation Control for Distance Learning on the Web. Proceedings of the Fifth International World Wide Web Conference. Paris, France. May 6-10, 1996. Available at: http://www5conf.inria.fr/fich_html/papers/P28/Overview.html

Referencias URL

[JWS] Java Web Server. http://jeeves.javasoft.com

[Netscape-Layers] Layers and JavaScript Extensions for Layes Glossary.
http://home.netscape.com/comprod/products/communicator/layers/layers_glossarl