viernes, junio 14, 2013

Cómo instalar una instancia de prueba de la plataforma de edX paso a paso

El proyecto de edx-platform permite descargar e instalar una instancia de pruebas en una máquina virtual local. Este es el procedimiento recomendado para familiarizarse con la plataforma y sus requisitos de hardware y software antes de intentar una instalación real en un servidor de producción, lo cual puede ser una experiencia frustrante si se tropieza con errores cuya causa se desconoce.

  1. Verificar características de la máquina local
  2. Instalar cliente de Git
  3. Instalar virtualBox
  4. Instalar Vagrant
  5. Configurar instancia de edx-platform
  6. Usar edx-platform

1. Verificar características de la máquina local

Asegúrese de que la máquina local disponga de más de 1GB de espacio para descargar los instaladores, instalar las plataformas y desempaquetar la instancia de edX. Esta guía paso a paso se probó sobre Windows 7, pero el procedimiento general es el mismo para Mac OS y distribuciones populares de Linux para las cuales existan versiones de los instaladores.

2. Instalar cliente de Git

Como ya lo habíamos discutido en la entrega anterior, el código fuente de la plataforma de edX y las bibliotecas de funciones sobre las que está construido se pueden encontrar publicadas en GitHub. Para tener acceso al código fuente necesitamos instalar localmente un cliente de Git:
  • Descargar cliente de git-scm.com/downloads.
  • Abrir el instalador. Autorizar que haga cambios.
  • Usar las opciones predeterminadas, excepto en "Configuring the line ending conversions" (seleccionar la tercera opción: "Checkout as-is, commit as-is").


Una nota sobre la última opción. En Windows y en Linux los archivos de texto tienen diferentes formatos para representar <ENTER>. En Windows, se usan dos caracteres: CR (Carriage Return, para volver a la primera columna de la pantalla) y LF (Line Feed, para pasar a la siguiente línea). En Linux se usa únicamente  LF.

Dado que GitHub puede ser usado desde múltiples plataformas, se asume que se debe traducir el formato del <ENTER> al formato de la plataforma local del cliente de Git. En nuestro caso, como estamos usando Windows 7, la traducción está predeterminada. Sin embargo, como los archivos de configuración van a ser usados en linux, no vamos a usar la traducción y en su lugar usamos la tercera opción que es dejar el fin de línea como está.

Adicionalmente hay que agregar tres macros a la configuración de Git con el fin de implementar en el sistema de archivos de Windows los enlaces simbólicos de Linux (symlinks). Abrir una terminal del cliente Git (Git Bash) y allí pegar estos comandos:

git config --global alias.add-symlink '!__git_add_symlink(){
    dst=$(echo "$2")/../$(echo "$1")
    if [ -e "$dst" ]; then
        hash=$(echo "$1" | git hash-object -w --stdin)
        git update-index --add --cacheinfo 120000 "$hash" "$2"
        git checkout -- "$2"
    else
        echo "ERROR: Target $dst does not exist!"
        echo "       Not creating invalid symlink."
    fi
}; __git_add_symlink "$1" "$2"'

git config --global alias.rm-symlink '!__git_rm_symlink(){
    git checkout -- "$1"
    link=$(echo "$1")
    POS=$'\''/'\''
    DOS=$'\''\\\\'\''
    doslink=${link//$POS/$DOS}
    dest=$(dirname "$link")/$(cat "$link")
    dosdest=${dest//$POS/$DOS}
    if [ -f "$dest" ]; then
        rm -f "$link"
        cmd //C mklink //H "$doslink" "$dosdest"
    elif [ -d "$dest" ]; then
        rm -f "$link"
        cmd //C mklink //J "$doslink" "$dosdest"
    else
        echo "ERROR: Something went wrong when processing $1 . . ."
        echo "       $dest may not actually exist as a valid target."
    fi
}; __git_rm_symlink "$1"'

git config --global alias.rm-symlinks '!__git_rm_symlinks(){
    for symlink in `git ls-files -s | grep -E "^120000" | cut -f2`; do
        git rm-symlink "$symlink"
        git update-index --assume-unchanged "$symlink"
    done
}; __git_rm_symlinks'
Esos tres pequeños scripts quedan grabados en la configuración de Git y pueden ser usados más adelante para adaptar a Windows los archivos de Linux que vamos a descargar.

3. Instalar VirtualBox

Virtualbox permite simular localmente el funcionamiento de otro computador. Es útil cuando se necesita ejecutar en el mismo computador físico un sistema operativo diferente, o cuando se requiere una configuración especial que no queremos o de la que no podemos disponer en nuestra máquina local.

En este caso, se trata de usar localmente una máquina virtual con una configuración que ya ha sido totalmente probada por los desarrolladores de edX. Una ventaja adicional es que tenemos la libertad de hacer ajustes dentro de la máquina virtual o instalar software adicional sin correr el riesgo de que se afecte nuestra máquina local. Todos los cambios quedan contenidos dentro de la máquina virtual.
  • Descargar el instalador de www.virtualbox.org/wiki/Downloads
  • Abrir el instalador. Autorizar que haga cambios.
  • Usar las opciones predeterminadas. Puede omitirse "USB Support" porque no es necesaria para ejecutar la instancia de edX y además evitamos cambios en la configuración local que pueden tener efectos secundarios inesperados en los controladores USB, especialmente en máquinas que no son físicas sino virtualizadas. Tampoco se necesita instalar la opción "VirtualBox Python 2.x Support", pero si se desea se puede incluir como en este ejemplo.

El proceso de instalación del soporte para red requerirá que se reinicie el servicio de red. Hay que tener eso en cuenta porque si se está usando la máquina local a través de escritorio remoto o de un servicio de virtualización como el de Cytrix se perderá el control sobre la máquina. Si este es el caso:
  • Suministre al administrador de infraestructura el nombre de la máquina y la IP fija.
  • Ejecute el instalador con las opciones seleccionadas. 
  • Cuando pierda comunicación con la máquina, pida al administrador de infraestructura que ingrese a ella por la consola del servidor de virtualización.
  • Use su usuario y contraseña habituales para desbloquear la sesión.
  • Vaya al Centro de Redes y Recursos Compartidos y deshabilite la Conexión de área local.
  • Vuelva a habilitar la Conexión de área local.
  • Cierre la consola del servidor de virtualización y vuelva a conectarse normalmente a la máquina.
En caso de ya estuviera instalado VirtualBox localmente, hay que asegurarse de que no exista ya una máquina virtual llamada "precise32". Este es el nombre predeterminado de la máquina virtual Ubuntu que creará Vagrant.

4. Instalar Vagrant

Vagrant es una herramienta que permite disponer de entornos de trabajo fáciles de configurar, reproducir y transportar, construidos sobre tecnología estardar de la industria y controlada por un procedimiento consistente. Esto garantiza que nuestra máquina virtual en VirtualBox va a tener exactamente la misma configuración y el mismo software instalado que la máquina donde los desarrolladores de edX la probaron.
  • Descargar el instalador desde downloads.vagrantup.com/
  • Abrir el instalador. Autorizar los cambios en el computador.
  • Instalar con las opciones predeterminadas y reiniciar la máquina local.

Aunque Vagrant no necesita Python 2.7 para configurar la instancia de edX, si se desea se puede instalar:
  • Descargar el instalador de la versión 2.7.x desde www.python.org/download/
  • Instalar.
  • Configurar las variables de entorno:
    • Crear PYTHONPATH = C:\Python27
    • Editar Path y agregar ";%PYTHONPATH%"

5. Configurar instancia de edx-platform

Como las intrucciones para que Vagrant configure la máquina virtual no están en el repositorio oficial del proyecto edx-platform, primero se descargan los archivos desde el repositorio del instalador.
  • Abrir una terminal del cliente Git (Git Bash) como administrador.
  • Descargar el código fuente con las instrucciones para Vagrant: $ git clone git://github.com/antoviaque/edx-platform.git
  • Bajar a la carpeta del repositorio local: $ cd edx-platform
  • Ejecutar la macro: $ git rm-symlinks
  • Iniciar Vagrant: $ vagrant up.
Una vez ha concluido la creación y configuración de la máquina virtual (en este ejemplo tomó tres horas, pero el tiempo depende del alcho de banda y de la capacidad del procesador de la máquina física local).

Para apagar la máquina virtual cuando no vamos a usarla:

$ vagrant halt

Para volver a encenderla (sin pasar otra vez por todo el proceso de instalación):

$vagrant up --no-provision

6. Usar edx-platform


Se accede a la consola de la misma con el usuario y contraseña "vagrant":

$ ssh vagrant@127.0.0.1 -p 2222

Una vez dentro de la máquina virtualPara arrancar el LMS (plataforma de cursos como tal): $ rake lms[cms.dev,0.0.0.0:8000]

Desde la máquina física local se puede usar con un navegador en: http://localhost:9000/

Para arrancar Studio (herramienta de creación de cursos): $ rake cms[dev,0.0.0.0:8001]

Desde la máquina física local se puede usar con un navegador en: http://localhost:9001/

Esto es posible gracias a la redirección de puertos que fue configurada en la máquina virtual, la cual convierte las peticiones que se hagan a la máquina física por los puertos 9000/9001 en peticiones a la máquina virtual por los puertos 8000/8001.

martes, junio 11, 2013

Cómo colaborar con la plataforma MOOC de edX

¿Por qué edX?


edX es una iniciativa de prestigiosas universidades de NorteAmérica, Europa y Asia que han unido sus esfuerzos para poner a disposición del mundo una vasta biblioteca de cursos en línea usando su propia plataforma para MOOC (Massive Open Online Courses). Aunque es muy interesante su oferta de contenido (después de todo estamos hablando de clases que dan en Berkeley, Queensland, MIT, Harvard, entre otras), lo que llama especialmente la atención sobre edX frente a su competencia (por ejemplo Coursera o Udacity) es que han sido los primeros en abrir las entrañas de su plataforma a la comunidad del código abierto (open source).

¿Cómo funciona el proyecto? 

El proyecto edx-platform comprende dos componentes principales: la plataforma de gestión del aprendizaje (edX) y la herramienta de edición de contenidos (Studio).

El código fuente está escrito primordialmente en Python, aunque también hay partes escritas en Ruby y NodeJS. Los diferentes proyectos que integran la arquitectura están accesibles en repositorios alojados en GitHub, una especie de red social donde los participantes aportan al desarrollo de proyectos de software de código abierto. Este esquema fue favorecido por el consorcio detrás de edX para no limitarse a los recursos que ellos puedan aportar sino más bien aprovechar la iniciativa y creatividad de gente alrededor del mundo, siguiendo el ejemplo de iniciativas exitosas como la de Wikipedia.

La arquitectura de edX-platform

La plataforma está compuesta basicamente por:

  • un repositorio de Cursos
  • una interfaz con sistemas externos de calificación
  • bibliotecas de código y módulos para calificación
  • un entorno para ejecución de programas

Repositorio de cursos

Actualmente la plataforma del LMS (Learning Managenent sistema de gestión de aprendizaje) está basada en XModules (componentes de cursos), pero está siendo migrada a XBlock (arquitectura de componentes para construir cursos).

Configuration suministra una forma simple pero flexible de levantar una instancia de la plataforma edX completamente configurada y lista para usarse.

Interfaz con sistemas externos de calificación

XQueue define una interfaz entre el LMS y sistemas externos que provean la calificación de exámenes y trabajos enviados por los estudiantes. Esto permite que se usen los módulos de calificación que ya trae edX o que uno desarrolle o adapte su propio mecanismo personalizado de calificación y lo conecte con el LMS.

Calificación

Como la idea es que los cursos que se publiquen en esta plataforma estén abiertos para una comunidad enorme (alrededor de 100.000 participantes simultáneos) es necesario contar con mecanismos para calificar que no dependen de la intervención manual de uno o varios profesores. De esta manera, no solo se evalúan los típicos cuestionarios de selección única o múltiple, sino también respuestas abiertas. Para eso se cuenta con módulos como:

edx-ora (Open Response Assessor) recibe trabajos enviados desde el LMS a través de la interfaz XQueue, los pasa ya sea por un motor de calificación basado en aprendizaje automático, un sistema de calificación manual por pares o por profesores, según corresponda y devuelve el resultado al LMS.

Discern es un API que permite el uso de un motor de clasificación de textos basado en aprendizaje automático. Si uno quiere desarrollar su propio motor de calificación, debe implementarlo dentro de estar interfaz para comunicarse con el LMS. Una forma de hacerlo es basándose en bibliotecas de funciones como EASE.

EASE (Enhanced AI Scoring Engine) no es un módulo sino una biblioteca de funciones que permite alimentar mecanismos de clasificación de contenido textual basado en aprendizaje automático. Es útil para calificar exámenes que no se ajustan a un formulario de selección múltiple, como ensayos o preguntas de respuesta abierta. Suministra funciones que asignar una nota a texto arbitrario y predictores numéricos, buscando predecir objetivos a partir de valores arbitrarios de forma escalable y con alto desempeño.

Entorno para ejecución de programas

CodeJail gestiona la ejecución de programas en entornos seguros de prueba. Está diseñado en principio para ejecución de código Python, pero también se puede usar para otros lenguajes.

XServer recibe código fuente de programas enviados por los estudiantes desde el LMS y lo ejecuta usando sistemas de calificación, los cuales deben ser desarrollados aparte.