Giter Site home page Giter Site logo

examgen's Introduction

examgen's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

examgen's Issues

Refactor: break out the classes, e.g. Question

Make the library more modular, so that the e.g. the Question class can be replaced by the one from examtool or vice versa. This is one step towards a symbiosis of examgen and examtool. (This is worked on in the refactor branch.)

Handle inter-question dependence

We want to handle inter-question dependence. Some questions might be follow-ups to previous questions. This should be detectable by tracing the questions’ labels. If we take this into consideration we do not risk including the follow-up question without the first one.

Refactor the tagging mechanism

It might not be sustainable to keep the tags in the \label of a question. One alternative approach is to have specially crafted comments, e.g.

\question\label{q:SomeLabel}
% examgen: tag1;tag2;...;tagN
% examgen: more;tags;will;be;appended
A difficult question.

Edit: Instead of "examgen:" it is better to have something describing what it actually is, so "tags:" is better.

\question\label{q:SomeLabel}
% tags: tag1;tag2;...;tagN
% tags: more;tags;will;be;appended
A difficult question.

Option for question environment for output

Currently we output using the exam class \question format. However, sometimes it would be nice to output the question in a \begin{question}...\end{question} environment instead.

Add error-handling code

Currently there is no error handling in the code. This should of course be added to improve usability. (The error messages can be quite hard to understand at the moment.)

Add stop condition based on number of questions

In some cases there is a valid use of a minimum and a maximum number of questions, e.g. when creating exercise sheets for a particular intended learning outcome (ILO).

Good command-line options are probably -m and -M, min and max respectively.

Add validation of manually written exams

Occasionally one feels the inspiration flowing and one writes a full exam manually. To aid this work it would be nice to have a validation option which simply processes the questions of an exam and checks whether all ILOs are covered.

Read out frame environments or (sub)sections

We can also read out frame environments from the slides. Then we can use material from the course as inspiration rather than only the old questions. That might break converging to very particular questions.

Frames might be very specialized, so maybe read out a subsection instead.

Insert Vim modeline in interactive mode

When running interactive mode, the editor (at least Vim) cannot detect any file type. Thus it would be nice to insert a modeline, e.g.:

% vim: filetype=tex

Output questions while generating

This is done in the code, but still output is not written to the file. Is this due to piping, do we need an -o option for output file?

Add example use of library

The UI is an example use of the library. Maybe if we split it (#41) we get a concrete example. Now that the UI is inline, it's not a particularly concrete example of the library (API).

Store statistics in questions (and exam)

Read back the exam, add statistics to each question and write it back to disk. We can also do the same for the exam as a whole.

This way we should be able to keep statistics similarly to examtool.

We should add a separate tool that handles the statistics: \eg examgen for generating the exam and examstats to handle the statistics and follow up. Then maybe rename the repo to examtools.

Handle exercise environments

Instead of handling only exams as questions databases, handle \begin{exercise} and \end{exercise} environments from textbook, lecture notes or even slides source, e.g. LNCS, AMSbook etc. This also includes the possible solution environment too.

Save user's tagging effort from interactive mode

Since the user tags the questions selected in interactive mode, it would be good to save this work. So these tags from interactive mode should be put into the code. This way the questions are correctly tagged when the exam is later used as a questions database.

Add quiz option

Add an option (-q?) which students can use to do quizzes. I.e. show the question first, then print the answer.

Rewrite code to be portable as a library

Currently the code is written with the program as the interface. It should be rewritten as a library with a program acting as an intermediary between the user and the library.

Comprehensive examples

The refactor branch (#42) moves the examples to a separate directory (/examples). Add comprehensive independent (runnable) examples there. In particular, make example.mk usable with the Makefile there.

This is related to #32.

Add a set of tools

  • questions <ILO1> ... <ILOn>: searches the questions databases for questions matching the given ILOs.

This would essentially be

DBs = $(find . -name \*.tex)
examgen -C -d $DBs -t $*
  • grade <exam-ID>: this allows entering results from an exam to store statistics.

The <exam-ID> could be the filename. Then stats can be stored with each question in the actual exam.

  • stats <question-ID>: prints the statistics for the question in question.

The <question-ID> could be the hash of the question, similar to hashes of commits in Git. Stats for a particular question can be extracted by summarizing from every available exam.

Add support for nada-ten

The nada-ten exam template uses its own constructs. The questions are delimited by \begin{problem}...\end{problem}.

Generate surrounding code: preamble etc.

We can let examgen(1) generate the code for the entire document, i.e. preamble, title, intro etc. We can use certain command-line arguments for date, title etc. The authors of the exam should be the authors of the included questions, i.e. examgen(1) has to generate the authors list. The alternative is to use the examiner as the author (more editor) and credit contributors otherwise.

Another requirement when automatically generating the preamble is to find what packages are actually needed. The required packages can be fetched from their respective questions database. Although this approach might include some unnecessary packages.

Add similarity metric for questions

Some questions are slight modifications of older questions, then a question and its parent should not both be included. We need a similarity metric to estimate whether two questions are too closely related, then we can automatically discard too closely related questions.

Add section on (other) uses

examgen can be used for other educational purposes more than generating exams. One use is to filter out questions concerning a single intended learning outcome (ILO) as part of formative assessment, i.e. to filter out question that the student must continue to work on.

Add to acknowledgements

Mention that Lennart came up with the idea of connecting intended learning outcomes to each question, then generating the exam based on the intended learning outcomes.

Specify required packages in each question

Some questions use "exotic" packages, it would be nice to extract them and put them in the preamble automatically. Lennart's exam generator uses the following format:

\usepackage{enumitem}
\usepackge{listings}

\question[3]\label{q:typomvandling}
Utifrån de typomvandlingar som sker i programmet nedan. 

But this restricts the format to only one question per .tex-file and ones the question is incorporated in an exam, this information is lost --- so the exam cannot be used as an input database to examgen.

However, questions formatted like this can be used with examgen, simply add the following filter to the Makefile:

.PHONY: filter-usepackage
filter-usepackage: questions.tex
    cat questions.tex | grep "usepackage" | sort | uniq >> preamble.tex
    sed -i "/^\\\\usepackage/d" questions.tex

exam.pdf: filter-usepackage

One must still manually resolve option conflicts though.

Improve pretty-printing

The detex(1) utility used to print the question in the terminal removes all math-mode code. This is bad. Instead of using detex(1), we could use another TeX pretty-printer—one which can handle math-mode. One possibility is using HeVeA 1 combined with lynx(1) or links(1). Or use tex2mail(1) for math-mode
code, then detex(1) for the rest.

Replace example exam

Add the full structure from OpenSecEd as an example: Makefile with tags and question databases, question databases found with the learning material.

The example exam is also a bad example: instead of topics and difficulty, it should be based on intended learning outcomes more directly --- to encourage better generation of exams.

Wrongly discards questions that should match

examgen -d infosak-questions.tex -t E C A foundations msb infotheory crypto auth usability lvlltrl trustcomp passwd

When the above is run, one question with a subset of matching tags is matched. After that no question is matched, although there are many questions which should match.

Make interactive mode print to stderr

If interactive mode prints all output needed for interaction to stderr instead, then examgen can be used in interactive mode from Vim too, e.g.:

:.! examgen -d *.tex -t topic1 topic2 ... topicN -i

to have examgen's output inserted into the current line in the buffer. And that line is probably between \begin{questions} and \end{questions}.

Allow for execution from within Vim

When editing a document in Vim, it would be nice to be able to generate the questions by running the command and automatically insert the result in the questions-environment.

However, previous ideas (#2) have failed.

Check how spaces are handled in tags

Since tags in the question databases are colon separated, they can contain spaces. How does this work with the command-line interface? Can we have -t "an ILO" "a second ILO"?

Add option to have required tags a subset of question tags

Instead of requiring that a question is a subset of the required tags, we want to do the opposite. A use case for this is to find all questions which cover a specific intended learning outcome (ILO). E.g. if a student has passed most ILOs except one, then we can filter out questions and exercises covering exactly that ILO.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.