Moodle CodeRunner
Ejecuta las preguntas de CodeRunner sin servidor Jobe
CodeRunner, el tipo de pregunta de Moodle para cuestionarios de programación, necesita un servidor Jobe para ejecutar el código de los estudiantes. En lugar de instalar y mantener uno, apunta CodeRunner a OnlineCompiler.io: cambia dos ajustes y tus preguntas se ejecutan en nuestros sandboxes.
Por el equipo de OnlineCompiler.io. Actualizado el .
Also in EnglishTambém em português
Por qué no mantener tu propio Jobe
Jobe es de código abierto y funciona bien, pero alguien tiene que mantenerlo: un servidor Linux aparte solo para código no confiable, los compiladores e intérpretes que usan tus cursos, actualizaciones para cada uno y capacidad para el momento en que todo el grupo envía sus respuestas a la vez. Si el servidor se cae durante un cuestionario, los estudiantes no pueden enviar.
Un servidor alojado y compatible con Jobe te quita ese trabajo de encima. CodeRunner sigue calificando como hoy; solo cambia la dirección a la que van sus ejecuciones.
¿Ya tienes Jobe y te topaste con un error? Mira "cannot start `sh'" y "Unable to fork", errores de numpy y matplotlib y cómo proteger un servidor Jobe (las tres páginas en inglés).
Cuestionarios y tareas de programación en Moodle: CodeRunner o VPL
Moodle tiene dos plugins comunes para el trabajo de programación. Los dos ejecutan el código de los estudiantes en un servidor propio, y los dos vienen apuntando a un servidor por defecto pensado solo para probarlos:
| CodeRunner | VPL (Virtual Programming Lab) | |
|---|---|---|
| Qué es | Un tipo de pregunta: preguntas de programación dentro de un cuestionario de Moodle, calificadas con casos de prueba cuando el estudiante presiona Check | Una actividad para tareas de programación, con un editor en el navegador, pruebas de entrada y salida y una búsqueda de entregas parecidas |
| Ejecuta el código en | Un servidor Jobe | Un servidor VPL Jail System |
| Servidor por defecto | El de la Universidad de Canterbury, para pruebas iniciales, no para producción (en inglés), limitado a 60 ejecuciones por hora por cliente Moodle | demojail.dis.ulpgc.es, para pruebas (en inglés); los sitios en producción instalan el suyo |
| Funciona con OnlineCompiler.io | Sí: cambia los dos ajustes de abajo | No |
OnlineCompiler.io reemplaza solo el servidor Jobe. VPL se comunica con su servidor jail con otro protocolo, así que no puede usar esta API, y un sitio con VPL sigue necesitando su propio servidor jail. Si estás eligiendo para un curso nuevo y no quieres mantener un servidor, arma el trabajo como preguntas de CodeRunner: un cuestionario abierto varios días funciona como tarea de programación, y un cuestionario con tiempo, como examen.
Configúralo en dos ajustes
- Crea una clave de API gratis en tu panel.
- En Moodle, como administrador, abre Site administration > Plugins > Question types > CodeRunner, la página de ajustes de CodeRunner.
- En Jobe server, la dirección del servidor Jobe, pon
https://api.onlinecompiler.io/api, con elhttps://. - En Jobe API key, la clave de API de Jobe, pon tu clave de API y guarda. Después, revisa una respuesta en cualquier pregunta de CodeRunner.
Los nombres en negrita de esta página son los de un Moodle en inglés. Si tu Moodle está en español, los menús del propio Moodle aparecen traducidos, y una parte de los ajustes y campos de CodeRunner también, según el paquete de idioma de tu sitio; cada uno sigue en el mismo lugar y en el mismo orden.
La referencia completa, con cada endpoint, cada resultado y cada diferencia con Jobe, está en la página de la API compatible con Jobe (en inglés).
Preguntas listas, con el enunciado en español
¿No quieres escribir todas las preguntas desde cero? El banco de preguntas CodeRunner gratis tiene paquetes de preguntas en Moodle XML, de Python, Java, C y C++, con el enunciado en español. Funcionan en cualquier servidor Jobe y se pueden configurar para ejecutarse aquí.
Crea tu primera pregunta de CodeRunner
Con los dos ajustes guardados, una pregunta toma unos minutos. Esta pide una función en Python, el primer ejemplo clásico de CodeRunner:
- Abre un cuestionario, ve a su página Questions, elige Add, luego a new question, y selecciona CodeRunner.
- En Question type, elige
python3. Ponle un nombre a la pregunta y este enunciado: escribe una funciónsqr(n)que devuelva el cuadrado den. - En Answer, pega una solución correcta,
def sqr(n): return n * n, y deja marcada la casilla Validate on save. CodeRunner ejecuta esa respuesta contra tus pruebas al guardar, así que un error al escribir una salida esperada aparece antes de que la vean los estudiantes. - Llena tres casos de prueba. En Test code va el código que llama a la función del estudiante e
imprime el resultado, y en Expected output, lo que imprime una función correcta:
Test code Expected output Ajustes print(sqr(-7))49Use as example marcado, para que los estudiantes vean esta prueba en el enunciado print(sqr(11))121Display: Show print(sqr(0))0Display: Hide, para que nadie pueda escribir la respuesta fija en el código - Guarda, abre la vista previa de la pregunta, escribe una respuesta y presiona Check, el botón que califica la respuesta.
Con All-or-nothing grading marcado, la pregunta solo da puntos cuando pasan todas las pruebas; desmárcalo y cada prueba da sus propios puntos, los que pongas en Mark. Cada Check, y cada vez que guardas y se valida la respuesta, envía ejecuciones aquí, que se cuentan como se explica en cuánto cuesta una ejecución. La documentación de CodeRunner (en inglés) explica los otros tipos de pregunta y las plantillas.
Lenguajes
Los tipos de pregunta integrados de CodeRunner usan los ids de lenguaje de Jobe, y cada uno se ejecuta en un compilador actual:
| Lenguaje en Jobe | Se ejecuta en |
|---|---|
c | C (GCC 15) |
cpp | C++ (G++ 15) |
java | Java (OpenJDK 25) |
nodejs | JavaScript (Node.js 24) |
octave | Octave (11) |
pascal | Pascal (Free Pascal 3.2) |
php | PHP (8.5) |
python3 | Python (3.14) |
Otros 38 lenguajes que Jobe no ofrece están disponibles para tipos de pregunta personalizados, con
ids simples, entre ellos go, rust, kotlin, csharp, haskell y sqlite. Elige uno como lenguaje del sandbox del tipo de pregunta; la página Scala, Haskell, SQL, Swift y más en CodeRunner (en inglés)
explica cómo, paso a paso.
Cuánto cuesta una ejecución, y los picos de los cuestionarios
Cada ejecución que envía CodeRunner cuenta como una. Un Check puede ser una sola ejecución o una por caso de prueba, según la plantilla de la pregunta, y validar la respuesta de ejemplo de una pregunta también ejecuta código. Las 100,000 ejecuciones al mes del plan Free alcanzan para mucho trabajo de curso.
En los momentos de más carga, el límite es cuántas ejecuciones puede iniciar tu cuenta por minuto y tener corriendo a la vez:
| Plan | Ejecuciones al mes | Ejecuciones por minuto | A la vez |
|---|---|---|---|
| Free | 100,000 | 30 | 2 |
| Starter | 150,000 | 60 | 4 |
| Pro | 1,000,000 | 120 | 4 |
| Business | 4,000,000 | 300 | 16 |
Una ejecución por encima de esos límites recibe la respuesta de sobrecarga de Jobe, que CodeRunner muestra como una sobrecarga del sandbox; presionar Check otra vez un momento después funciona, y no se cuenta nada. Para exámenes con tiempo y grupos grandes, mira los precios o escríbenos para pedir límites más altos (las dos páginas en inglés).
Qué cambia respecto a Jobe
- C compila en el dialecto por defecto de GCC 15 y no con el
-std=c99de Jobe. Las opciones de compilador que defina una pregunta (compileargs,linkargs) se ignoran. - Las advertencias del compilador van a stderr, que CodeRunner marca como error, de forma parecida a como el
-Werrorpor defecto de Jobe las hace fallar. - Los argumentos de línea de comandos (
runargs) se rechazan. - Cada lenguaje se ejecuta en su propio sandbox, así que las plantillas que compilan otro lenguaje desde Python, incluido el tipo de pregunta integrado
multilanguage, no funcionan: el sandbox de Python no tiene compilador de C ni JDK. - El tiempo límite es el tiempo de CPU de la pregunta, hasta 30 segundos; la memoria es fija, de 512 MB.
Un editor que ejecuta código en una página de Moodle
Para práctica sin calificación, como un ejemplo resuelto que los estudiantes pueden cambiar y ejecutar, pega el editor de código insertable en un recurso Page o en
un Label. Cambia el editor de texto de Moodle a la vista HTML o de código fuente y pega un
iframe con tu clave de widget, con el código inicial después del #:
<iframe src="https://api.onlinecompiler.io/embed/?key=YOUR_WIDGET_KEY&lang=python-3.14#code=for%20n%20in%20range(1%2C%206)%3A%0A%20%20%20%20print(n%2C%20%22al%20cuadrado%20es%22%2C%20n%20*%20n)"
title="Ejemplo de Python ejecutable" width="100%" height="400" style="border: 0" loading="lazy"></iframe>Nada de lo que pasa ahí llega al libro de calificaciones; para calificar, usa una pregunta de CodeRunner. Los profesores normalmente pueden agregar un iframe así, pero Moodle limpia el HTML de los usuarios en los que no confía, que por lo general son los estudiantes, así que un iframe en la publicación de foro o la página wiki de un estudiante se elimina. Algunos sitios limpian el contenido de todos: si el editor desaparece al guardar, pregúntale al administrador de tu Moodle. Una clave de widget restringida al dominio de tu Moodle solo carga ahí, y el generador de embed (en inglés) arma el iframe a partir de tu código. En el iframe, los botones del editor aparecen en inglés.
Preguntas frecuentes
¿Qué es Jobe y por qué lo necesita CodeRunner?
Jobe es el servidor que compila y ejecuta el código de los estudiantes para CodeRunner, el tipo de pregunta de Moodle para preguntas de programación. CodeRunner envía cada ejecución al servidor Jobe configurado en sus ajustes y califica según la salida que recibe.
¿Puedo usar CodeRunner sin instalar Jobe?
Sí. En CodeRunner, pon https://api.onlinecompiler.io/api en el campo Jobe server y una clave de API de OnlineCompiler.io en el campo Jobe API key. Así CodeRunner envía sus ejecuciones a OnlineCompiler.io, que responde en el formato de Jobe.
¿Es gratis?
Sí: el plan Free incluye 100,000 ejecuciones al mes, sin tarjeta de crédito. Cada ejecución que envía CodeRunner cuenta como una.
¿Tengo que cambiar mis preguntas?
Por lo general, no: las preguntas que usan los tipos integrados de CodeRunner (c, cpp, java, nodejs, octave, pascal, php y python3) siguen funcionando. Las diferencias que pueden aparecer están en esta página y en la documentación: C compila en el dialecto por defecto de GCC 15 y no en C99, los argumentos de línea de comandos se rechazan, y el tipo de pregunta multilanguage, que compila otros lenguajes desde una plantilla en Python, no funciona.
¿Funciona con VPL (Virtual Programming Lab)?
No. VPL envía el código a su propio servidor jail con otro protocolo, así que no puede usar la API compatible con Jobe, y un sitio con VPL sigue necesitando su propio servidor jail. Solo se puede reemplazar el servidor Jobe de CodeRunner.
¿El código de los estudiantes está aislado?
Sí. Cada ejecución tiene un sandbox gVisor nuevo, sin acceso a la red, con 512 MB de memoria y un límite de 30 segundos, y se desecha al terminar. La página de seguridad, en inglés, tiene los detalles.