diff --git a/demo/questions/questions-tutorial.yaml b/demo/questions/questions-tutorial.yaml index f6fbb62..e4cbd67 100644 --- a/demo/questions/questions-tutorial.yaml +++ b/demo/questions/questions-tutorial.yaml @@ -5,67 +5,77 @@ title: Configuração do teste text: | O teste é configurado num ficheiro `yaml` (ver especificação [aqui](https://yaml.org)). - Esta configuração indica a identificação do teste, base de dados dos alunos, ficheiros de perguntas a importar e uma selecção de perguntas e respectivas cotações. + A configuração contém a identificação do teste, base de dados dos alunos, + ficheiros de perguntas a importar e uma selecção de perguntas e respectivas + cotações. Exemplo: ```yaml - #----------------------------------------------------------------------------- - # ref: Referência atribuida a um teste. A mesma referência pode ser usada em vários turnos - # title: Título do teste, por exemplo "Unidade Curricular - Exame de recurso" - # database: Base de dados previamente inicializada com os alunos inscritos usando o comando initdb.py - # answers: Directório onde vão ficar guardados os testes dos alunos com as respostas e respectivas correcções. - ref: tutorial - title: Teste de Avaliação - database: demo/students.db - answers_dir: demo/ans - - # Duração do teste, apenas informativo para o aluno - # (opcional, default: infinito) minutos - duration: 60 - - # (opcional, default: False) mostra cotação das perguntas aos alunos, escala 0-20. - show_points: True - - # untested. Points are scaled so that total of exam is given by scale_max - scale_points: True - scale_max: 20 - - # (opcional, default: False) - debug: False - - #----------------------------------------------------------------------------- - # Directório base onde estão as perguntas - questions_dir: ~/topics/P1 - - # Ficheiros de perguntas a importar (relativamente a ~/topics/P1) - files: - - topico_A/parte_1/questions.yaml - - topico_A/parte_2/questions.yaml - - topico_B/parte_3/questions.yaml - - #----------------------------------------------------------------------------- - # Perguntas do teste e respectivas cotações - questions: - - ref: pergunta1 - points: 3.5 - - - ref: pergunta2 - points: 2 - - - ref: tabela-auxiliar - - # escolhe uma das seguintes aleatoriamente - - ref: [ pergunta3a, pergunta3b ] - points: 0.5 - - # a cotação é 1.0 por defeito, caso não esteja definida - - ref: pergunta4 - - pergunta5 - #----------------------------------------------------------------------------- + --- + # ---------------------------------------------------------------------------- + # ref: Referência do teste. Pode ser reusada em vários turnos + # title: Título do teste + # database: Base de dados previamente inicializada com os alunos (usando initdb.py) + # answers_dir: Directório onde vão ficar guardados os testes dos alunos + ref: tutorial + title: Teste de Avaliação + database: demo/students.db + answers_dir: demo/ans + + # Duração do teste em minutos, apenas informativo. (default: infinito) + duration: 60 + + # Mostrar cotação das perguntas. (default: false) + show_points: true + + # Pontos das perguntas são automaticamente convertidos para a escala dada + # (defaults: true, 20) + scale_points: true + scale_max: 20 + + # (opcional, default: false) + debug: false + + # ---------------------------------------------------------------------------- + # Directório base onde estão as perguntas + questions_dir: ~/topics/P1 + + # Ficheiros de perguntas a importar (relativamente a ~/topics/P1) + files: + - topico_A/parte_1/questions.yaml + - topico_A/parte_2/questions.yaml + - topico_B/questions.yaml + + # ---------------------------------------------------------------------------- + # Especificação das perguntas do teste e cotações. + # O teste é uma lista de perguntas + # Cada pergunta é um dicionário com ref da pergunta e cotação. + questions: + - ref: pergunta1 + points: 3.5 + + - ref: pergunta2 + points: 2 + + - ref: tabela-auxiliar + + # escolhe uma das seguintes aleatoriamente + - ref: [ pergunta3a, pergunta3b ] + points: 0.5 + + # a cotação é 1.0 por defeito, caso não esteja definida + - ref: pergunta4 + + # ou ainda mais simples + - pergunta5 + # ---------------------------------------------------------------------------- ``` - O mesmo teste pode ser realizado várias vezes em vários turnos, não é necessário alterar nada. + A ordem das perguntas é mantida. + + O mesmo teste pode ser realizado várias vezes em vários turnos, não é + necessário alterar nada. # ---------------------------------------------------------------------------- @@ -73,32 +83,38 @@ ref: tut-questions title: Especificação das perguntas text: | - As perguntas estão definidas num ou mais ficheiros `yaml` como uma lista de dicionários, onde cada pergunta é um dicionário. + As perguntas estão definidas num ou mais ficheiros `yaml` como uma lista de + dicionários, onde cada pergunta é um dicionário. - Por exemplo, um ficheiro com o conteúdo abaixo contém duas perguntas, uma de escolha múltipla e outra apenas informativa: + Por exemplo, um ficheiro com o conteúdo abaixo contém duas perguntas, uma + de escolha múltipla e outra apenas informativa: ```yaml - #----------------------------------------------------------------------------- - - type: radio - ref: chave-unica-1 - text: Quanto é $1+1$? - options: - - 1 - - 2 - - 3 - - #----------------------------------------------------------------------------- - - type: info - ref: chave-unica-2 - text: | - Quando o texto da pergunta tem várias linhas, dá jeito usar o símbolo pipe, para indicar que tudo o que estiver indentado relativamente à linha `text: |` faz parte do corpo do texto. + --- + #----------------------------------------------------------------------------- + - type: radio + ref: chave-unica-1 + text: Quanto é $1+1$? + options: + - 1 + - 2 + - 3 + + #----------------------------------------------------------------------------- + - type: info + ref: chave-unica-2 + text: | + Quando o texto da pergunta tem várias linhas, dá jeito usar o símbolo + pipe, para indicar que tudo o que estiver indentado relativamente à + linha `text: |` faz parte do corpo do texto. - É o caso desta pergunta. + É o caso desta pergunta. - #----------------------------------------------------------------------------- + #----------------------------------------------------------------------------- ``` - As chaves são usadas para construir o teste e não se podem repetir em ficheiros diferentes. A seguir vamos ver exemplos de cada tipo de pergunta. + As chaves são usadas para construir o teste e não se podem repetir em + ficheiros diferentes. A seguir vamos ver exemplos de cada tipo de pergunta. # ---------------------------------------------------------------------------- @@ -106,7 +122,8 @@ ref: tut-radio title: Escolha simples, uma opção correcta. text: | - As perguntas de escolha simples, permitem fazer uma pergunta e apresentar várias opções de resposta em que apenas uma delas está certa. + As perguntas de escolha simples, permitem fazer uma pergunta e apresentar + várias opções de resposta em que apenas uma delas está certa. A utilização mais simples é a seguinte: ```yaml @@ -123,10 +140,16 @@ - Opção 4 ``` - Sem outras configurações, assume-se que a primeira opção ("Opção 0" neste caso) é a resposta correcta, e todas as 5 opções são apresentadas por ordem aleatória. + Sem outras configurações, assume-se que a primeira opção ("Opção 0" neste + caso) é a resposta correcta, e todas as 5 opções são apresentadas por ordem + aleatória. - Para evitar que os alunos memorizem os textos das opções, podem definir-se várias opções correctas com escrita ligeiramente diferente, sendo apresentada apenas uma delas. - Por exemplo, se as 2 primeiras opções estiverem correctas e as restantes erradas, e quisermos apresentar 3 opções no total com uma delas correcta adiciona-se: + Para evitar que os alunos memorizem os textos das opções, podem definir-se + várias opções correctas com escrita ligeiramente diferente, sendo + apresentada apenas uma delas. + Por exemplo, se as 2 primeiras opções estiverem correctas e as restantes + erradas, e quisermos apresentar 3 opções no total com uma delas correcta + adiciona-se: ```yaml correct: [1, 1, 0, 0, 0] @@ -135,9 +158,12 @@ Assim será escolhida uma opção certa e mais 2 opções erradas. - Por defeito, as opções são sempre baralhadas. Adicionando `shuffle: False` evita que o sejam. + Por defeito, as opções são sempre baralhadas. Adicionando `shuffle: False` + evita que o sejam. - Por defeito, as respostas erradas descontam 1/(n-1) do valor da pergunta, onde n é o número de opções apresentadas. Para não descontar usa-se `discount: False`. + Por defeito, as respostas erradas descontam 1/(n-1) do valor da pergunta, + onde n é o número de opções apresentadas. Para não descontar usa-se + `discount: False`. options: - Opção 0 @@ -147,7 +173,7 @@ - Opção 4 correct: [1, 1, 0, 0, 0] choose: 3 - shuffle: True + shuffle: true solution: | A solução correcta é a **opção 0**. @@ -156,9 +182,13 @@ ref: tut-checkbox title: Escolha múltipla, várias opções correctas text: | - As perguntas de escolha múltipla permitem apresentar um conjunto de opções podendo ser seleccionadas várias em simultaneo. - Funcionam como múltiplas perguntas independentes com a cotação indicada em `correct`. As opções não seleccionadas têm a cotação simétrica à indicada. - Deste modo, um aluno só deve responder se tiver confiança em pelo menos metade das respostas, caso contrário arrisca-se a ter cotação negativa na pergunta. + As perguntas de escolha múltipla permitem apresentar um conjunto de opções + podendo ser seleccionadas várias em simultaneo. + Funcionam como múltiplas perguntas independentes com a cotação indicada em + `correct`. As opções não seleccionadas têm a cotação simétrica à indicada. + Deste modo, um aluno só deve responder se tiver confiança em pelo menos + metade das respostas, caso contrário arrisca-se a ter cotação negativa na + pergunta. ```yaml - type: checkbox @@ -175,10 +205,15 @@ correct: [1, -1, -1, 1, -1] ``` - Neste exemplo, seleccionando as opções 0 e 3 obtém-se cotação +1 em cada uma, enquanto que seleccionando as opções 1, 2 e 4 obtém-se cotação -1. - As opções não seleccionadas pelo aluno dão a cotação simétrica à indicada. Por exemplo se não seleccionar a opção 0, tem cotação -1, e não seleccionando a opção 1 obtém-se +1. + Neste exemplo, seleccionando as opções 0 e 3 obtém-se cotação +1 em cada + uma, enquanto que seleccionando as opções 1, 2 e 4 obtém-se cotação -1. + As opções não seleccionadas pelo aluno dão a cotação simétrica à indicada. + Por exemplo se não seleccionar a opção 0, tem cotação -1, e não + seleccionando a opção 1 obtém-se +1. - Cada opção pode opcionalmente ser escrita como uma afirmação e o seu contrário, de maneira a dar mais aleatoriedade à apresentação deste tipo de perguntas. Por exemplo: + Cada opção pode opcionalmente ser escrita como uma afirmação e o seu + contrário, de maneira a dar mais aleatoriedade à apresentação deste tipo de + perguntas. Por exemplo: ```yaml options: @@ -188,9 +223,13 @@ correct: [1, 1, 1] ``` - Assume-se que a primeira alternativa de cada opção tem a cotação +1, enquanto a segunda alternativa tem a cotação simétrica -1 (desconta se for seleccionada). + Assume-se que a primeira alternativa de cada opção tem a cotação +1, + enquanto a segunda alternativa tem a cotação simétrica -1 (desconta se for + seleccionada). - Estão disponíveis as configurações `shuffle` e `discount`. Se `discount: False` então as respostas erradas têm cotação 0 em vez do simétrico. + Estão disponíveis as configurações `shuffle` e `discount`. + Se `discount: False` então as respostas erradas têm cotação 0 em vez do + simétrico. options: - Opção 0 (sim) @@ -199,7 +238,7 @@ - Opção 3 (sim) correct: [1, -1, -1, 1] choose: 3 - shuffle: True + shuffle: true # ---------------------------------------------------------------------------- @@ -207,7 +246,8 @@ ref: tut-text title: Resposta de texto em linha text: | - Este tipo de perguntas permite uma resposta numa linha de texto. A resposta está correcta se coincidir com alguma das respostas admissíveis. + Este tipo de perguntas permite uma resposta numa linha de texto. A resposta + está correcta se coincidir com alguma das respostas admissíveis. ```yaml - type: text @@ -227,7 +267,8 @@ ref: tut-text-regex title: Resposta de texto em linha text: | - Este tipo de pergunta é semelhante à linha de texto da pergunta anterior. A única diferença é que esta é validada por uma expressão regular. + Este tipo de pergunta é semelhante à linha de texto da pergunta anterior. A + única diferença é que esta é validada por uma expressão regular. ```yaml - type: text-regex @@ -248,7 +289,8 @@ title: Resposta numérica em linha de texto text: | Este tipo de perguntas esperam uma resposta numérica (vírgula flutuante). - O resultado é considerado correcto se estiver dentro do intervalo (fechado) indicado. + O resultado é considerado correcto se estiver dentro do intervalo (fechado) + indicado. ```yaml - type: numeric-interval @@ -270,9 +312,12 @@ ref: tut-textarea title: Resposta em múltiplas linhas de texto text: | - Este tipo de perguntas permitem respostas em múltiplas linhas de texto, que podem ser úteis por exemplo para validar código. - A resposta é enviada para ser avaliada por um programa externo (programa executável). - O programa externo, recebe a resposta via stdin e devolve a classificação via stdout. Exemplo: + Este tipo de perguntas permitem respostas em múltiplas linhas de texto, que + podem ser úteis por exemplo para validar código. + A resposta é enviada para ser avaliada por um programa externo (programa + executável). + O programa externo, recebe a resposta via stdin e devolve a classificação + via stdout. Exemplo: ```yaml - type: textarea @@ -285,12 +330,18 @@ timeout: 5 ``` - Neste exemplo, o programa de avaliação é um script python que verifica se a resposta contém as três palavras red, green e blue, e calcula uma nota de 0.0 a 1.0. - O programa externo pode ser escrito em qualquer linguagem e a interacção com o servidor faz-se via stdin/stdout. - Se o programa externo demorar mais do que o `timout` indicado, é automaticamente cancelado e é atribuída a classificação de 0.0 valores. - `lines: 3` é a dimensão inicial da caixa de texto (pode depois ser redimensionada pelo aluno). + Neste exemplo, o programa de avaliação é um script python que verifica se a + resposta contém as três palavras red, green e blue, e calcula uma nota de + 0.0 a 1.0. + O programa externo pode ser escrito em qualquer linguagem e a interacção + com o servidor faz-se via stdin/stdout. + Se o programa externo demorar mais do que o `timout` indicado, é + automaticamente cancelado e é atribuída a classificação de 0.0 valores. + `lines: 3` é a dimensão inicial da caixa de texto (pode depois ser + redimensionada pelo aluno). - O programa externo deve atribuir uma classificação entre 0.0 e 1.0. Pode simplesmente fazer print da classificação como um número, ou opcionalmente escrever em formato yaml eventualmente com um comentário. Exemplo: + O programa externo deve atribuir uma classificação entre 0.0 e 1.0. Pode + simplesmente fazer print da classificação como um número, ou opcionalmente escrever em formato yaml eventualmente com um comentário. Exemplo: ```yaml grade: 0.5 @@ -308,15 +359,18 @@ ref: tut-information title: Texto informativo text: | - As perguntas deste tipo não contam para avaliação. O objectivo é fornecer instruções para os alunos, por exemplo tabelas para consulta, fórmulas, etc. - Nesta como em todos os tipos de perguntas pode escrever-se fórmulas em LaTeX. Exemplo: + As perguntas deste tipo não contam para avaliação. O objectivo é fornecer + instruções para os alunos, por exemplo tabelas para consulta, fórmulas, etc. + Nesta como em todos os tipos de perguntas pode escrever-se fórmulas em + LaTeX. Exemplo: ```yaml - type: information ref: tut-information title: Texto informativo text: | - A distribuição gaussiana $\mathcal{N}(x\mid\mu,\sigma^2)$ é definida por + A distribuição gaussiana $\mathcal{N}(x\mid\mu,\sigma^2)$ é + definida por $$ p(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\tfrac{1}{2}\tfrac{(x-\mu)^2}{\sigma^2}}. @@ -356,7 +410,8 @@ text: | Também não conta para avaliação. - Já vimos como se introduzem fórmulas LaTeX, também se pode escrever troços de código: + Já vimos como se introduzem fórmulas LaTeX, também se pode escrever + troços de código: ```C int main() { @@ -397,7 +452,8 @@ $\sqrt{\pi}$ | `code` | $1.99 ``` - A linha de separação entre o cabeçalho e o corpo da tabela indica o alinhamento da coluna com os sinais de dois-pontos. + A linha de separação entre o cabeçalho e o corpo da tabela indica o + alinhamento da coluna com os sinais de dois-pontos. # ---------------------------------------------------------------------------- @@ -409,10 +465,13 @@  - As imagens podem ser adicionadas usando a notação standard em markdown. Há duas possibilidads: + As imagens podem ser adicionadas usando a notação standard em markdown. Há + duas possibilidads: - - Imagens inline: não têm título definido e podem ser incluídas no meio de uma linha de texto usando``. - - Imagens centradas e com título: ``. O título aprece por baixo da imagem. O título pode ser uma string vazia. + - Imagens inline: não têm título definido e podem ser incluídas no meio de + uma linha de texto usando``. + - Imagens centradas com título: ``. + O título aprece por baixo da imagem. O título pode ser uma string vazia. # ---------------------------------------------------------------------------- diff --git a/demo/test-tutorial.yaml b/demo/test-tutorial.yaml index f57bb01..b74c961 100644 --- a/demo/test-tutorial.yaml +++ b/demo/test-tutorial.yaml @@ -1,4 +1,5 @@ -#============================================================================= +--- +# ============================================================================ # The test reference should be a unique identifier. It is saved in the database # so that queries for the results can be done in the terminal with # $ sqlite3 students.db "select * from tests where ref='demo'" @@ -7,8 +8,8 @@ ref: tutorial # (optional, default: '') You may wish to refer the course, year or kind of test title: Teste tutorial -# (optional) duration in minutes FIXME -duration: 90 +# (optional) duration in minutes, 0 or undefined is infinite +duration: 120 # Database with student credentials and grades of all questions and tests done # The database is an sqlite3 file generate with the script initdb.py @@ -19,18 +20,18 @@ database: demo/students.db answers_dir: demo/ans # (optional, default: False) Show points for each question, scale 0-20. -show_points: True +show_points: true # scale_points: True # scale_max: 20 # (optional, default: False) Show hints if available -show_hints: True +show_hints: true # (optional, default: False) Show lots of information for debugging # debug: True -#----------------------------------------------------------------------------- +# ---------------------------------------------------------------------------- # Base path applied to the questions files and all the scripts # including question generators and correctors. # Either absolute path or relative to current directory can be used. @@ -61,4 +62,3 @@ questions: - tut-success - tut-warning - tut-alert - diff --git a/static/js/clock.js b/static/js/clock.js index 90b660c..7690e8f 100644 --- a/static/js/clock.js +++ b/static/js/clock.js @@ -1,11 +1,11 @@ $(document).ready(function() { - var clock = $("#clock"); function time() { var d = new Date(); var m = d.getMinutes(); var h = d.getHours(); - clock.html( h + ":" + (m >= 10 ? m : "0"+m)); + $("#clock").html( h + ":" + (m >= 10 ? m : "0"+m)); } + time(); setInterval(time, 60000); }); \ No newline at end of file diff --git a/templates/test.html b/templates/test.html index 3b1ed5d..111424c 100644 --- a/templates/test.html +++ b/templates/test.html @@ -89,7 +89,7 @@