Moodle CodeRunner

Rode as questões do CodeRunner sem servidor Jobe

O CodeRunner, o tipo de questão do Moodle para questões de programação, precisa de um servidor Jobe para rodar o código dos alunos. Em vez de instalar e manter um, aponte o CodeRunner para o OnlineCompiler.io: mude duas configurações e as suas questões rodam nos nossos sandboxes.

Pela equipe do OnlineCompiler.io. Atualizado em .

Also in EnglishTambién en español

Por que não manter o seu próprio Jobe

O Jobe é open source e funciona bem, mas alguém precisa cuidar dele: um servidor Linux separado só para código não confiável, os compiladores e interpretadores que as suas disciplinas usam, atualizações para cada um deles e capacidade para o momento em que a turma inteira manda as respostas ao mesmo tempo. Se o servidor cair durante um questionário, os alunos não conseguem enviar.

Um servidor hospedado e compatível com o Jobe tira esse trabalho das suas mãos. O CodeRunner continua corrigindo como faz hoje; só muda o endereço para onde vão as execuções.

Já tem um Jobe e travou num erro? Veja "cannot start `sh'" e "Unable to fork", erros de numpy e matplotlib e como proteger um servidor Jobe (as três páginas em inglês).

Questões e trabalhos de programação no Moodle: CodeRunner ou VPL

O Moodle tem dois plugins comuns para atividades de programação. Os dois rodam o código dos alunos num servidor próprio, e os dois vêm apontando para um servidor padrão que serve só para experimentar:

CodeRunnerVPL (Virtual Programming Lab)
O que éUm tipo de questão: questões de programação dentro de um questionário do Moodle, corrigidas por casos de teste quando o aluno aperta CheckUma atividade para trabalhos de programação, com editor no navegador, testes de entrada e saída e uma busca por envios parecidos
Roda o código emUm servidor JobeUm servidor VPL Jail System
Servidor padrãoO da Universidade de Canterbury, para testes iniciais, não para produção (em inglês), limitado a 60 execuções por hora por cliente Moodledemojail.dis.ulpgc.es, para testes (em inglês); sites em produção instalam o seu próprio
Funciona com o OnlineCompiler.ioSim: mude as duas configurações abaixoNão

O OnlineCompiler.io substitui só o servidor Jobe. O VPL conversa com o servidor jail dele por outro protocolo, então não pode usar esta API, e um site com VPL continua precisando de um servidor jail próprio. Se você está escolhendo para uma disciplina nova e não quer manter servidor, monte as atividades como questões do CodeRunner: um questionário aberto por vários dias funciona como trabalho de programação, e um questionário com tempo marcado, como prova.

Configure em dois campos

  1. Crie uma chave de API grátis no seu painel.
  2. No Moodle, como administrador, abra Site administration > Plugins > Question types > CodeRunner, a página de configurações do CodeRunner.
  3. Em Jobe server, o endereço do servidor Jobe, coloque https://api.onlinecompiler.io/api, com o https://.
  4. Em Jobe API key, a chave de API do Jobe, coloque a sua chave de API e salve. Depois, verifique uma resposta em qualquer questão do CodeRunner.

Os nomes em negrito nesta página estão como aparecem num Moodle em inglês. Se o seu Moodle está em português, os menus do próprio Moodle aparecem traduzidos, mas a maior parte das configurações e dos campos do CodeRunner continua em inglês, no mesmo lugar e na mesma ordem.

A referência completa, com cada endpoint, cada resultado e cada diferença em relação ao Jobe, está na página da API compatível com o Jobe (em inglês).

Questões prontas, com enunciado em português

Não quer escrever todas as questões do zero? O banco de questões CodeRunner grátis tem pacotes de questões em Moodle XML, de Python, Java, C e C++, com o enunciado em português. Eles funcionam em qualquer servidor Jobe e podem ser configurados para rodar aqui.

Crie a sua primeira questão do CodeRunner

Com as duas configurações salvas, uma questão leva poucos minutos. Esta pede uma função em Python, o primeiro exemplo clássico do CodeRunner:

  1. Abra um questionário, vá à página Questions dele, escolha Add, depois a new question, e selecione CodeRunner.
  2. Em Question type, escolha python3. Dê um nome à questão e este enunciado: escreva uma função sqr(n) que devolve o quadrado de n.
  3. Em Answer, cole uma solução correta, def sqr(n): return n * n, e deixe Validate on save marcado. O CodeRunner roda essa resposta contra os seus testes quando você salva, então um erro de digitação numa saída esperada aparece antes de os alunos verem a questão.
  4. Preencha três casos de teste. Em Test code vai o código que chama a função do aluno e imprime o resultado, e em Expected output, o que uma função correta imprime:
    Test codeExpected outputConfiguração
    print(sqr(-7))49Use as example marcado, para os alunos verem esse teste no enunciado
    print(sqr(11))121Display: Show
    print(sqr(0))0Display: Hide, para ninguém escrever a resposta fixa no código
  5. Salve, abra a pré-visualização da questão, digite uma resposta e aperte Check, o botão que corrige a resposta.

Com All-or-nothing grading marcado, a questão só vale nota quando todos os testes passam; desmarque e cada teste vale a sua própria nota, definida em Mark. Cada Check, e cada vez que você salva e a resposta é validada, envia execuções para cá, contadas como explicado em quanto custa uma execução. A documentação do CodeRunner (em inglês) explica os outros tipos de questão e os templates.

Linguagens

Os tipos de questão nativos do CodeRunner usam os ids de linguagem do Jobe, e cada um roda num compilador atual:

Linguagem no JobeRoda em
cC (GCC 15)
cppC++ (G++ 15)
javaJava (OpenJDK 25)
nodejsJavaScript (Node.js 24)
octaveOctave (11)
pascalPascal (Free Pascal 3.2)
phpPHP (8.5)
python3Python (3.14)

Outras 38 linguagens que o Jobe não oferece estão disponíveis para tipos de questão personalizados, com ids simples, entre elas go, rust, kotlin, csharp, haskell e sqlite. Defina uma delas como a linguagem do sandbox do tipo de questão; a página Scala, Haskell, SQL, Swift e mais no CodeRunner (em inglês) mostra o passo a passo.

Quanto custa uma execução, e os picos de questionário

Cada execução que o CodeRunner envia conta como uma. Um Check pode ser uma execução só ou uma por caso de teste, dependendo do template da questão, e validar a resposta de exemplo de uma questão também roda código. As 100.000 execuções por mês do plano Free dão para muitas atividades.

Nos momentos de pico, o limite é quantas execuções a sua conta pode começar por minuto e rodar ao mesmo tempo:

PlanoExecuções por mêsExecuções por minutoAo mesmo tempo
Free100.000302
Starter150.000604
Pro1.000.0001204
Business4.000.00030016

Uma execução acima desses limites recebe a resposta de sobrecarga do Jobe, que o CodeRunner mostra como sobrecarga do sandbox; apertar Check de novo logo depois funciona, e nada é contado. Para provas com tempo marcado e turmas grandes, veja os preços ou fale com a gente para ter limites maiores (as duas páginas em inglês).

O que muda em relação ao Jobe

  • O C compila no dialeto padrão do GCC 15, e não no -std=c99 do Jobe. Opções de compilador definidas na questão (compileargs, linkargs) são ignoradas.
  • Os avisos do compilador vão para o stderr, que o CodeRunner marca como erro, mais ou menos como o -Werror padrão do Jobe reprova o código com avisos.
  • Argumentos de linha de comando (runargs) são recusados.
  • Cada linguagem roda no seu próprio sandbox, então templates que compilam outra linguagem a partir do Python, incluindo o tipo de questão nativo multilanguage, não funcionam: o sandbox do Python não tem compilador C nem JDK.
  • O tempo limite é o tempo de CPU da questão, até 30 segundos; a memória é fixa em 512 MB.

Um editor que roda código numa página do Moodle

Para prática sem nota, como um exemplo resolvido que os alunos podem mudar e rodar, cole o editor de código incorporável num recurso Page ou num Label. Mude o editor de texto do Moodle para a visualização HTML ou de código-fonte e cole um iframe com a sua chave de widget, com o código inicial depois do #:

Página do Moodle, visualização HTML
<iframe src="https://api.onlinecompiler.io/embed/?key=YOUR_WIDGET_KEY&amp;lang=python-3.14#code=for%20n%20in%20range(1%2C%206)%3A%0A%20%20%20%20print(n%2C%20%22ao%20quadrado%20%C3%A9%22%2C%20n%20*%20n)"
  title="Exemplo de Python executável" width="100%" height="400" style="border: 0" loading="lazy"></iframe>

Nada do que acontece nele vai para o livro de notas; para valer nota, use uma questão do CodeRunner. Professores normalmente conseguem colocar um iframe assim, mas o Moodle limpa o HTML dos usuários em quem não confia, o que em geral quer dizer os alunos, então um iframe num post de fórum ou numa página wiki de um aluno é removido. Alguns sites limpam o conteúdo de todo mundo: se o editor sumir quando você salvar, fale com o administrador do Moodle. Uma chave de widget restrita ao domínio do seu Moodle só carrega lá, e o gerador de embed (em inglês) monta o iframe a partir do seu código. No iframe, os botões do editor aparecem em inglês.

Perguntas frequentes

O que é o Jobe e por que o CodeRunner precisa dele?

O Jobe é o servidor que compila e roda o código dos alunos para o CodeRunner, o tipo de questão do Moodle para questões de programação. O CodeRunner envia cada execução para o servidor Jobe definido nas configurações dele e corrige a resposta pela saída que recebe de volta.

Dá para usar o CodeRunner sem instalar o Jobe?

Sim. No CodeRunner, coloque https://api.onlinecompiler.io/api no campo Jobe server e uma chave de API do OnlineCompiler.io no campo Jobe API key. Assim o CodeRunner envia as execuções para o OnlineCompiler.io, que responde no formato do Jobe.

É grátis?

Sim: o plano Free inclui 100.000 execuções por mês, sem cartão de crédito. Cada execução que o CodeRunner envia conta como uma.

Minhas questões precisam de mudanças?

Em geral, não: as questões que usam os tipos nativos do CodeRunner (c, cpp, java, nodejs, octave, pascal, php e python3) continuam funcionando. As diferenças que podem aparecer estão nesta página e na documentação: o C compila no dialeto padrão do GCC 15, e não no C99, argumentos de linha de comando são recusados, e o tipo de questão multilanguage, que compila outras linguagens a partir de um template em Python, não funciona.

Funciona com o VPL (Virtual Programming Lab)?

Não. O VPL envia o código para o próprio servidor jail, por outro protocolo, então não pode usar a API compatível com o Jobe, e um site com VPL continua precisando de um servidor jail próprio. Só o servidor Jobe do CodeRunner pode ser substituído.

O código dos alunos fica isolado?

Sim. Cada execução ganha um sandbox gVisor novo, sem acesso à rede, com 512 MB de memória e limite de 30 segundos, e é descartada no final. A página de segurança, em inglês, tem os detalhes.