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:
| CodeRunner | VPL (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 Check | Uma 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 em | Um servidor Jobe | Um servidor VPL Jail System |
| Servidor padrão | O da Universidade de Canterbury, para testes iniciais, não para produção (em inglês), limitado a 60 execuções por hora por cliente Moodle | demojail.dis.ulpgc.es, para testes (em inglês); sites em produção instalam o seu próprio |
| Funciona com o OnlineCompiler.io | Sim: mude as duas configurações abaixo | Nã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
- Crie uma chave de API grátis no seu painel.
- No Moodle, como administrador, abra Site administration > Plugins > Question types > CodeRunner, a página de configurações do CodeRunner.
- Em Jobe server, o endereço do servidor Jobe, coloque
https://api.onlinecompiler.io/api, com ohttps://. - 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:
- Abra um questionário, vá à página Questions dele, escolha Add, depois a new question, e selecione CodeRunner.
- Em Question type, escolha
python3. Dê um nome à questão e este enunciado: escreva uma funçãosqr(n)que devolve o quadrado den. - 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. - 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 code Expected output Configuraçã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 - 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 Jobe | Roda em |
|---|---|
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) |
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:
| Plano | Execuções por mês | Execuções por minuto | Ao mesmo tempo |
|---|---|---|---|
| Free | 100.000 | 30 | 2 |
| Starter | 150.000 | 60 | 4 |
| Pro | 1.000.000 | 120 | 4 |
| Business | 4.000.000 | 300 | 16 |
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=c99do 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
-Werrorpadrã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 #:
<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%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.