# BUGS - show_points nao esta a funcionar (mostra sempre) - esta a corrigir código JOBE mesmo que nao tenha respondido??? - correct devia poder ser corrido mais que uma vez (por exemplo para alterar cotacoes, corrigir perguntas) - nao esta a mostrar imagens?? internal server error? - guardar testes em JSON assim que sao atribuidos aos alunos (ou guardados inicialmente com um certo nome, e atribuidos posteriormente ao aluno). - cookies existe um `perguntations_user` e um user. De onde vem o user? - QuestionCode falta reportar nos comments os vários erros que podem ocorrer (timeout, etc) - algumas vezes a base de dados guarda o mesmo teste em duplicado. ver se dois submits dao origem a duas correcções. talvez a base de dados devesse ter como chave do teste um id que fosse único desse teste particular (não um auto counter, nem ref do teste) - em caso de timeout na submissão (e.g. JOBE ou script nao responde) a correcção não termina e o teste não é guardado. - grade gives internal server error?? - reload do teste recomeça a contagem no inicio do tempo. - em admin, quando `scale_max` não é 20, as cores das barras continuam a reflectir a escala 0,20. a tabela teste na DB não tem a escala desse teste. - em grade.html as barras estao normalizadas para os limites `scale_min` e max do teste actual e nao dos testes realizados no passado (tabela test devia guardar a escala). - codigo `hello world` nao esta a preservar o whitespace. O renderer de markdown gera a tag `` que não preserva whitespace. Necessario adicionar `
.`
- mensagems de erro do assembler aparecem na mesma linha na correcao e nao
  fazerm rendering do `$t`, ver se servidor faz parse do markdown dessas
  mensagens.
- a revisao do teste não mostra as imagens.
- `Test.reset_answers()` unused.
- teste nao esta a mostrar imagens de vez em quando.???
- show-ref nao esta a funcionar na correccao (pelo menos)

# TODO

- permitir que textarea nao tenha correct definido, da sempre 0 e é para
  corrigir manualmente.
- permitir corrigir mais que uma vez, actualizando a base de dados.
- yaml schemas para validar os ficheiros yaml (ver cerberus e jsonschema)
- permitir remover alunos que estão online para poderem comecar de novo.
- guardar nota final grade truncado em zero e sem ser truncado (quando é
  necessário fazer correcções à mão às perguntas, é necessário o valor não
  truncado)
- stress tests. use [locust](https://locust.io)
- wait for admin to start test. (students can be allowed earlier)
- impedir os eventos copy/paste. alunos usam isso para trazer codigo ja feito
  nos computadores. Obrigar a fazer reset? fazer um copy automaticamente?
- na pagina admin, mostrar com cor vermelha as horas de entrada dos alunos que
  ja tenham excedido o tempo
- retornar None quando nao ha alteracoes relativamente à última vez.  ou usar
  push (websockets?)
- mudar ref do test para `test_id` (ref já é usado nas perguntas)
- servidor ntpd no x220 para configurar a data/hora dos portateis dell
- sala de espera: autorização dada, mas teste não disponível até que seja dada
  ordem para começar.
- alunos com necessidades especiais nao podem ter autosubmit. ter um
  `autosubmit_exceptions`: ['123', '456']
- submissao fazer um post ajax?
- adicionar opcao para eliminar um teste em curso.
- enviar resposta de cada pergunta individualmente.
- experimentar gerador de svg que inclua no markdown da pergunta e ver se
  funciona.
- quando ha varias perguntas para escolher, escolher sucessivamente em vez de
  aleatoriamente.
- como refrescar a tabela de admin sem fazer reload da pagina?
- botao "testar resposta" que valida codigo relativamente a syntax, mas nao
  classifica. perguntas devem ter opcao validate: script.py. Aluno pressiona
  botao e codigo é enviado para servidor para validação, feedback é mostrado na
  pagina de teste.
- test: botao submeter valida se esta online com um post `willing_to_submit`,
  se estiver online, mostra mensagem de confirmacao, caso contrario avisa que
  nao esta online.
- test: Cada pergunta respondida é logo submetida.
- test: calculadora javascript.
- admin: histograma das notas.
- admin: mostrar as horas a que o teste terminou para os testes terminados.
- admin: histograma das notas.
- admin: mostrar teste gerado para aluno (tipo review).
- fazer renderer para formulas com mathjax serverside (mathjax-node) ou usar
  katex.
- fazer renderer para imagens, com links /file?ref=xpto;name=zzz.jpg
- fazer renderer para linguagem assembly mips?
- cancelar teste no menu admin. Dado o numero de aluno remove teste e faz
  logout do aluno.
- Gerar pdf's com todos os testes no final (pdfkit).
- manter registo dos unfocus durante o teste e de qual a pergunta visivel nesse
  momento
- permitir varios testes, aluno escolhe qual o teste que quer fazer.
- se ocorrer um erro na correcçao avisar aluno para contactar o professor.
- abrir o teste numa janela maximizada e que nao permite que o aluno a
  redimensione/mova?
- detectar scroll e enviar posição para servidor (analise de scroll para
  detectar copianço? ou simplesmente para analisar como os alunos percorrem o
  teste)
- aviso na pagina principal para quem usa browser incompativel ou settings
  esquisitos... Apos login pode ser enviado e submetido um exemplo de teste
  para verificar se browser consegue submeter? ha alunos com javascript
  bloqueado?
- criar perguntas de outros tipos, e.g. associação, ordenação, varios textinput
- perguntas para professor corrigir mais tarde. permitir que review possa
  alterar as notas
- fazer uma calculadora javascript e por no menu. surge como modal

# FIXED

- JOBE correct async
- testar as perguntas todas no início do teste como o aprendizations.
- adicionar identificacao do aluno no jumbotron inicial do teste, para que ao
  imprimir para pdf a identificacao do aluno venha escrita no documento.
- internal server error quando em --review, download csv detalhado.
- perguntas repetidas (mesma ref) dao asneira, porque a referencia é usada como
  chave em varios sitios e as chaves nao podem ser dupplicadas.  da asneira
  pelo menos na funcao `get_questions_csv`. na base de dados tem de estar
  registado tb o numero da pergunta, caso contrario é impossível saber a qual
  corresponde.
- mostrar unfocus e window area em /admin
- CRITICAL se answer for `i 8080. documentacao
- barras com notas em grade estão desalinhadas.
- erros nos generators devem ser ERROR e não WARNING.
- se directorio "logs" não existir no directorio actual aborta com mensagem de
  erro.
- se um teste tiver a mesma pergunta repetida (ref igual), rebenta na
  correcçao. As respostas são agregadas numa lista para cada ref. Ex: {'ref1':
  'resposta1', 'ref2': ['resposta2a', 'resposta2b']}
- usar [](http://fontawesome.io/examples/) em vez dos do bootstrap3
- se pergunta tiver 'type:' errado, rebenta.
- se submeter um teste so com information, da divisao por zero.
- se save_answers nao existir, da warning que nao serao gravados, mas sao
  sempre gravados! pagina de administracao diz --not being saved--
- first login é INFO e não WARNING
- /review não mostra imagens porque precisa que teste esteja a decorrer...
- visualizar um teste ja realizado na página de administração
- Depois da correcção, mostra testes realizados que não foram realizados pelo
  próprio
- detectar se janela perde focus e alertar o prof
- server nao esta a receber eventos focus/blur dos utilizadores diferentes de
  '0', estranho...
- permitir adicionar imagens nas perguntas.
- detect_unfocus.js so funciona se estiver inline no html. porquê???
- inserir novo aluno /admin não fecha.
- se aluno desistir, ainda fica marcado como online
- give dá None em vez de 0.0
- debug mode: log levels not working
- Se aluno fizer logout, o teste não é gravado e ficamos sem registo do teste
  que o aluno viu.
- criar sqlalchemy sessions dentro de app de modo a estarem associadas a
  requests. ver se é facil usar with db:(...) para criar e fechar sessão.
- sqlalchemy queixa-se de threads.
- SQLAlchemy em vez da classe database.
- replace sys.exit calls
- if does not find questions, aborts silently
- argumentos da linha de comando a funcionar.
- configuracao dos logs cherrypy para se darem bem com os outros
- browser e ip usados gravado no test.
- botões allow all/deny all.
- mostrar botão de reset apenas no final da pagina, com edit para escrever o
  número.
- aluno faz login, mas fecha browser, ficando no estado (online,deny). Ao
  tentar login com outro browser está deny e o prof não consegue pô-lo em allow
  pois já não está na lista. => solucao é manter todos os alunos numa tabela.
- pagina de login nao esta a apresentar bem. parece que precisa de autorizacao
  para aceder a /static...
- Não mostrar Professor nos activos em /admin
- /admin mostrar actualizações automaticamente?
- se no teste uma das "ref" nao existir nos ficheiros de perguntas, rebenta.
- alunos podem estar online, mas browser perder sessao => nao conseguem mais
  entrar porque a App pensa que estão online. Permitir login e dar o mesmo
  teste.
- pagina de management dos alunos.  mostrar online ordenados por hora de login,
  offline por número.  permitir reset da pw e allow/disallow
- script de correcção pode enviar dicionario yaml com grade e comentarios. ex:
  grade: 0.5 comments: Falhou na função xpto.  os comentários são guardados no
  teste (ficheiro) ou enviados para o browser no modo practice.