Commit 2e43c7a2a2c6d55e5fd1b42a821cd98727fb4254

Authored by Miguel Barão
1 parent bbfa03c9
Exists in master and in 1 other branch dev

updates demo-tutorial

demo/demo.yaml
@@ -22,7 +22,7 @@ title: Teste de demonstração (tutorial) @@ -22,7 +22,7 @@ title: Teste de demonstração (tutorial)
22 22
23 # Duration in minutes. 23 # Duration in minutes.
24 # (0 or undefined means infinite time) 24 # (0 or undefined means infinite time)
25 -duration: 5 25 +duration: 20
26 26
27 # Automatic test submission after the given 'duration' timeout 27 # Automatic test submission after the given 'duration' timeout
28 # (default: false) 28 # (default: false)
@@ -37,11 +37,6 @@ show_points: true @@ -37,11 +37,6 @@ show_points: true
37 # (default: no scaling, just use question points) 37 # (default: no scaling, just use question points)
38 scale: [0, 5] 38 scale: [0, 5]
39 39
40 -# DEPRECATED: old version, to be removed  
41 -# scale_max: 20  
42 -# scale_min: 0  
43 -# scale_points: true  
44 -  
45 # ---------------------------------------------------------------------------- 40 # ----------------------------------------------------------------------------
46 # Base path applied to the questions files and all the scripts 41 # Base path applied to the questions files and all the scripts
47 # including question generators and correctors. 42 # including question generators and correctors.
demo/questions/generators/generate-question.py
@@ -8,6 +8,7 @@ Arguments are read from stdin. @@ -8,6 +8,7 @@ Arguments are read from stdin.
8 from random import randint 8 from random import randint
9 import sys 9 import sys
10 10
  11 +# read two arguments from the field `args` specified in the question yaml file
11 a, b = (int(n) for n in sys.argv[1:]) 12 a, b = (int(n) for n in sys.argv[1:])
12 13
13 x = randint(a, b) 14 x = randint(a, b)
@@ -18,10 +19,13 @@ print(f"""--- @@ -18,10 +19,13 @@ print(f"""---
18 type: text 19 type: text
19 title: Geradores de perguntas 20 title: Geradores de perguntas
20 text: | 21 text: |
21 - Existe a possibilidade da pergunta ser gerada por um programa externo. O  
22 - programa deve escrever no `stdout` uma pergunta em formato `yaml` tal como os  
23 - exemplos anteriores. Pode também receber argumentos para parametrizar a  
24 - pergunta. Aqui está um exemplo de uma pergunta gerada por um script python: 22 +
  23 + As perguntas podem ser estáticas (como as que vimos até aqui), ou serem
  24 + geradas dinâmicamente por um programa externo. Para gerar uma pergunta, o
  25 + programa deve escrever texto no `stdout` em formato `yaml` tal como os
  26 + exemplos das perguntas estáticas dos tipos apresentados anteriormente. Pode
  27 + também receber argumentos de linha de comando para parametrizar a pergunta.
  28 + Aqui está um exemplo de uma pergunta gerada por um script python:
25 29
26 ```python 30 ```python
27 #!/usr/bin/env python3 31 #!/usr/bin/env python3
@@ -46,7 +50,7 @@ text: | @@ -46,7 +50,7 @@ text: |
46 ``` 50 ```
47 51
48 Este script deve ter permissões para poder ser executado no terminal. 52 Este script deve ter permissões para poder ser executado no terminal.
49 - Podemos testar o programa no terminal `./gen-somar.py 1 50` e verificar que 53 + Podemos testar o programa no terminal `./gen-somar.py 1 100` e verificar que
50 o output é uma pergunta válida em formato `yaml`. Agora é necessário indicar 54 o output é uma pergunta válida em formato `yaml`. Agora é necessário indicar
51 que este script deve ser usado para gerar uma pergunta. 55 que este script deve ser usado para gerar uma pergunta.
52 56
@@ -60,7 +64,8 @@ text: | @@ -60,7 +64,8 @@ text: |
60 args: [1, 100] 64 args: [1, 100]
61 ``` 65 ```
62 66
63 - O programa pode receber uma lista de argumentos declarados em `args`. 67 + O programa pode receber uma lista de argumentos de linha de comando
  68 + declarados em `args`.
64 69
65 --- 70 ---
66 71
demo/questions/questions-tutorial.yaml
@@ -24,9 +24,8 @@ @@ -24,9 +24,8 @@
24 duration: 60 # duração da prova em minutos (default: inf) 24 duration: 60 # duração da prova em minutos (default: inf)
25 autosubmit: true # submissão automática (default: false) 25 autosubmit: true # submissão automática (default: false)
26 show_points: true # mostra cotação das perguntas (default: true) 26 show_points: true # mostra cotação das perguntas (default: true)
27 - scale_points: true # recalcula cotações para [scale_min, scale_max]  
28 - scale_max: 20 # limite superior da escala (default: 20)  
29 - scale_min: 0 # limite inferior da escala (default: 0) 27 + scale: [0, 20] # limites inferior e superior da escala (default: [0,20])
  28 + scale_points: true # normaliza cotações para a escala definida
30 debug: false # mostra informação de debug no browser 29 debug: false # mostra informação de debug no browser
31 30
32 # -------------------------------------------------------------------------- 31 # --------------------------------------------------------------------------
@@ -48,9 +47,9 @@ @@ -48,9 +47,9 @@
48 points: 3.5 47 points: 3.5
49 48
50 - ref: pergunta2 49 - ref: pergunta2
51 - point: 2.0 50 + points: 2.0
52 51
53 - # a cotação é 1.0 por defeito, se omitida 52 + # a cotação é 1.0 por defeito
54 - ref: pergunta3 53 - ref: pergunta3
55 54
56 # uma string (não dict), é interpretada como referência 55 # uma string (não dict), é interpretada como referência
@@ -153,17 +152,19 @@ @@ -153,17 +152,19 @@
153 entre 0 e 1, sendo atribuída a respectiva cotação, mas só o valor 1 152 entre 0 e 1, sendo atribuída a respectiva cotação, mas só o valor 1
154 representa uma opção certa. 153 representa uma opção certa.
155 154
156 - Por defeito, as opções são apresentadas por ordem aleatória.  
157 - Para manter a ordem definida acrescenta-se: 155 + Por defeito, as opções são apresentadas por ordem aleatória, mas é possível
  156 + usar a ordem predefinida. Por exemplo, para manter a ordem e indicar que a
  157 + resposta correcta é a do meio define-se:
158 158
159 ```yaml 159 ```yaml
  160 + correct: [0, 0, 1, 0, 0]
160 shuffle: false 161 shuffle: false
161 ``` 162 ```
162 163
163 - Por defeito, as respostas erradas descontam, tendo uma cotação de  
164 - $-1/(n-1)$ do valor da pergunta, onde $n$ é o número de opções apresentadas  
165 - ao aluno (a ideia é o valor esperado ser zero quando as respostas são  
166 - aleatórias e uniformemente distribuídas). Para não descontar acrescenta-se: 164 + As respostas erradas descontam, tendo uma cotação de $-1/(n-1)$ do valor da
  165 + pergunta, onde $n$ é o número de opções apresentadas ao aluno (a ideia é o
  166 + valor esperado ser zero quando as respostas são aleatórias e uniformemente
  167 + distribuídas). Para não descontar acrescenta-se:
167 168
168 ```yaml 169 ```yaml
169 discount: false 170 discount: false
@@ -269,7 +270,7 @@ @@ -269,7 +270,7 @@
269 Neste caso, as respostas aceites são `azul`, `Azul` ou `AZUL`. 270 Neste caso, as respostas aceites são `azul`, `Azul` ou `AZUL`.
270 271
271 Em alguns casos pode ser conveniente transformar a resposta antes de a 272 Em alguns casos pode ser conveniente transformar a resposta antes de a
272 - comparar, por exemplo para remover espaços ou converter para maiúsculas. 273 + comparar, por exemplo para remover espaços ou converter para minúsculas.
273 A opção `transform` permite dar uma sequência de transformações a aplicar à 274 A opção `transform` permite dar uma sequência de transformações a aplicar à
274 resposta do aluno, por exemplo: 275 resposta do aluno, por exemplo:
275 276
@@ -278,10 +279,10 @@ @@ -278,10 +279,10 @@
278 correct: ['azul'] 279 correct: ['azul']
279 ``` 280 ```
280 281
281 - Neste momento estão disponíveis as seguintes transformações: 282 + Estão disponíveis as seguintes transformações:
282 283
283 - * `trim` remove os espaços do início e fim da resposta, os do meio mantêm-se  
284 - inalterados. 284 + * `trim` remove os espaços do início e fim da resposta, os espaços do meio
  285 + mantêm-se inalterados.
285 * `remove_space` remove todos os espaços (início, meio e fim). 286 * `remove_space` remove todos os espaços (início, meio e fim).
286 * `normalize_space` remove espaços do início e fim (trim), e substitui 287 * `normalize_space` remove espaços do início e fim (trim), e substitui
287 múltiplos espaços por um único espaço (no meio). 288 múltiplos espaços por um único espaço (no meio).
@@ -375,10 +376,11 @@ @@ -375,10 +376,11 @@
375 são as mais flexíveis. 376 são as mais flexíveis.
376 377
377 A resposta é enviada para um programa externo para ser avaliada. 378 A resposta é enviada para um programa externo para ser avaliada.
378 - O programa externo é um programa escrito numa linguagem qualquer, desde que  
379 - seja executável pelo sistema operativo (pode ser um script ou binário).  
380 - Este programa recebe a resposta submetida pelo aluno via `stdin` e devolve  
381 - a classificação via `stdout`. 379 + O programa externo é um programa que tem de ser executável pelo pelo
  380 + sistema operativo (pode ser um binário ou script desde que o respectivo
  381 + interpretador instalado).
  382 + Este programa externo recebe a resposta submetida pelo aluno via `stdin` e
  383 + devolve a classificação via `stdout`.
382 Exemplo: 384 Exemplo:
383 385
384 ```yaml 386 ```yaml
@@ -566,7 +568,7 @@ @@ -566,7 +568,7 @@
566 duas possibilidads: 568 duas possibilidads:
567 569
568 - Imagens inline: não têm título definido e podem ser incluídas no meio de 570 - Imagens inline: não têm título definido e podem ser incluídas no meio de
569 - uma linha de texto usando`![alt text](image.jpg)`. 571 + uma linha de texto usando `![alt text](image.jpg)`.
570 - Imagens centradas com título: `![alt text](image.jpg "Título da imagem")`. 572 - Imagens centradas com título: `![alt text](image.jpg "Título da imagem")`.
571 O título é colocado por baixo da imagem. Pode ser uma string vazia. 573 O título é colocado por baixo da imagem. Pode ser uma string vazia.
572 574