UlabGrid2Moodle
From P2pgrid
(La documentación y detalle de como se han implementado los objetivos estan en las diferente paginas enlazadas desde aqui )
Objetivos:
- (OK) UlabGrid2MoodleModule Crear un modulo para moodle:El nombre del nuevo módulo es "sesionvnc".
Para conseguir que se visualice la sesión VNC en el módulo.
Crear sesiones VNC que se cargen a traves de moodle en las que se ejecuten diferentes aplicaciones: Simprocess, Repast....
Hemos creado dos cursos: "Compartir SimProcess mediante VNC" y "Compartir Repast Simphony mediante VNC".
Para acceder a los cursos: Usuarios administradores: "admin", "luis", "oscar".
Usuarios estudiantes: grupo 1 = "a", "b" y "e". grupo 2 = "c", "d" y "e".
Los dos cursos utilizan el mismo módulo (sesionvnc) que creamos a partir del archivo descargado newmodule.zip.
- (OK) UlabGrid2MoodlePoolConfig Cuando un usuario tenga rol de profesor, etc. al pulsar en la opción "settings" en Modules > Activities > sesionvnc saldrá la opción de elegir a que máquinas se conectaran los usuarios mediante el módulo sesionvnc para utilizar las aplicaciones lanzadas.
En un principio, lo que hicimos fue añadirle un campo "ip" a cada instancia de sesionvnc. De esta manera, era necesario crear tantas instancias del módulo como direcciones IP eran accesibles para lanzar VNC.
Otra posible manera de configurar dinámicamente la dirección de conexión a VNCserver sería programar un atributo "ip" como parte de la configuración del módulo (acceder en Administración > Módulos > (sesionvnc) Configuración), pero su edición implicaría que todas las instancias del módulo tendrían el mismo valor en dicho campo y no interesa <-- Lo que se ha hecho finalmente es crear una tabla que almacena "user", "ip", "port" y "groupid" y todas las instancias de sesionvnc consultarán la misma tabla para decidir en que dirección y con que usuario se lanzará VNC server y se realizará la conexión.
Otra manera sería relacionar el campo "ip" con $course->idnumber pero implicaría que todos las instancias de sesionvnc que correspondan al mismo curso se conectarían a la misma dirección. Además ya estamos utilizando $course->idnumber para diferenciar entrer SimProcess y Repast Simphony.
- (OK) UlabGrid2MoodlePool En lugar de configurar direcciones IP fijas para cada instancia de sesionvnc, crear una tabla (sesionvnc_desktops) con unas cuantas direcciones IP de las máquinas donde serán lanzados los servidores VNC.
Pero estos servidores VNC no deben estar ejecutándose como se ha hecho hasta ahora sino que serán lanzados remotamente desde Moodle cuando un usuario quiera acceder a ellos. Para ello, se deberá disponer de una tabla en la base de datos que almacene además de las direcciones IP, si estas se están utilizando o no, por que usuario y/o grupo, etc. Pero antes de intentar lanzar un servidor VNC en una máquina será necesario comprobar si está disponible. Si un usuario accede a sesionvnc se comprobará si hay usuarios de su grupo conectados, y en caso afirmativo se conectará a la misma sesión. Si no hay ningún usuario de su grupo conectado, lanzará un escritorio remoto en una máquina que esté libre.
Hemos instalado en otro ordenador kubuntu 8.04 + TightVNCserver para hacer pruebas.
- (OK) UlabGrid2MoodleOnlineVNCUsersBlock El bloque "online_vncusers" tiene que mostrar la lista de usuarios usando el módulo "sesionvnc", con código a partir del bloque de "online_users".
Cada vez que un usuario acceda a una instancia del módulo "sesionvnc" debe ser reflejado en la tabla "mdl_vncusers_lastaccess" (campos "id", "userid", "courseid" y "timeaccess". Podría resultar interesante almacenar o simplemente utilizar $user->lastip para realizar comunicaciones p2p entre clientes...)
El problema que presenta es que el tiempo que aparece en la tabla mdl_vncuser_lastaccess es el tiempo en el que se accedió a la instancia de sesionvnc. Es decir, si el bloque online_vncusers está configurado para mostrar usuarios que se hayan conectado en los últimos 5 minutos y un usuario lleva conectado 6 minutos, este no aparecerá reflejado en la lista mostrada en el bloque.
Con el bloque online_users pasa lo mismo, la diferencia es que la tabla mdl_user_lastaccess es actualizada al acceder a la página principal, a otros cursos, etc. (no únicamente al acceder a un módulo).
(OK) Cada vez que se accede a sesionvnc es insertada una nueva instancia en la tabla mdl_vncuser_lastaccess. De esta manera la tabla crecerá innecesariamente cuando los usuarios accedan más de una vez al módulo sesionvnc del mismo curso, dejando valores obsoletos. Solución: comprobar si el usuario que accede ya había accedido anteriormente a sesionvnc en ese mismo curso y en caso afirmativo hacer UPDATE en lugar de INSERT.
(done) El bloque "online_vncusers" deja de contabilizar usuarios cuando "vncuser_lastaccess.timeaccess" se queda obsoleto, ya que el código que lo actualiza sólo se ejecuta al acceder a sesionvnc (view.php) pero no se actualiza.
(OK) Una posible solución sería emplear un flag en la tabla mdl_vncuser_lastaccess que se active cuando se accede a sesionvnc. El problema que presenta esta opción es la dificultad de desactivar el flag cuando se deja de utilizar sesionvnc.Como solución he incluido un enlace "cerrar sesión vnc" en view.php que conecta a sesionvnc/disconnectvnc.php, el cual accede a mdl_vncuser_lastaccess y pone a 0 el atributo "connected" que ha sido puesto a 1 al acceder al módulo, y después redirige a la página principal.
(done) Otra solución sería mantener actualizada la tabla mdl_vncuser. El problema es que solo se accede al fichero sesionvnc/view.php una vez (al acceder al módulo) y luego es la aplicación Java de TightVNC la que se ejecuta. ¿utilización de AJAX? ¿función PHP o JavaScript recursiva? Intentamos hacer una función PHP recursiva utilizando la función sleep(seconds) pero no funcionaba correctamente. Hemos creado una función javascript que es ejecutada cuando se sale de la página (evento onUnload) y que ejecuta sesionvnc/disconnectvnc.php, el problema es que aunque con Internet Explorer y con Mozilla Firefox 3 funciona correctamente, no lo hace así con Mozilla Firefox 2 y Konqueror...
(done) ¿Utilizar el cron de MOODLE? <- puede ser útil para tareas como copias de seguridad de los cursos, copias automáticas de ficheros de los usuarios...
- (OK, obsoleto) UlabGrid2MoodleSesionVNC+Online_VNCusers La actividad sesionvnc debe cargar el bloque online_vncusers.
- (OK) UlabGrid2MoodleSesionVNC+Online_VNCusers (Integrado) Finalmente hemos decidido no utilizar el bloque online_vncusers dentro de sesionvnc sino simplemente integrar dentro de sesionvnc/view.php un código similar al de este bloque.
- (DOING) UlabGrid2MoodleCompartirFicheros Posibilidades para compartir ficheros:
(OK) NFS -> Carpeta compartida en un equipo accesible desde 130.206.161.199 (apache + moodle). En esta carpeta se crearán carpetas de grupo.
(?) Subir fichero a Moodle y hacer copia automática en un recurso compartido.
(NO) Usar Samba server (la universidad tiene un servidor samba, "monix" -> instalar servidor samba para probar. Esta opción queda descartada porque se estamos utilizando NFS.
Ficheros de grupo (en progreso) solo los ven los compañeros de grupo.
Ficheros de resultados, hechos publicos desde el interface moodle, los ven todos los usuarios (¿en carpeta compartida por NFS?)
Estadisticas de uso de ficheros,
Votacion de ficheros,
Comentarios sobre ficheros, lineas de texto.
- (to do) Al desinstalar el módulo "sesionvnc" se debe eliminar la tabla "mdl_vncusers_lastaccess"
- (OK, obsoleto) así como no debería ser posible instalar el bloque "online_vncusers" si el módulo "sesionvnc" no está instalado. <- no hace falta realizar esta comprobación porque el código del bloque online_vncusers irá integrado en el código de sesionvnc y no será necesario instalar el bloque.
- En un futuro sería interesante:
- Aumentar las medidas de seguridad: ¿SSL en el servidor Apache? ¿Redirigir http a https? ¿Túneles SSL en las conexiones VNC?
- (done) Comprobar Network Servers funcionality -> sirve para conectar con un servidor moodle "externo" y usar sus actividades, cursos, etc requiere tener permisos: se llega a formar un red peer-to-peer.
