Skip to contents

Creating and maintaining question banks in Canvas sucks, but examiner makes it suck less.

Multiplying the learning benefits of an exercise was the initial motivation for examiner. By randomizing key aspects of the exercise, students get to practice a skill over and over with questions that feel fresh even though they are just variations over a theme, i.e. a single Rmd file. Question banks are a perfect fit for mass generation of exercises. However, they cannot be exported from Canvas nor imported from external files, nor is there an API for question banks.

examiner manipulates question banks via library(selenider), an R package for remote control of a web browser. Once you log in to Canvas, examiner will click buttons and type text into boxes while you get a well deserved coffee.

However, a couple of words of warning:

Anything to do with question banks is slow. That’s because we regularly need to open the question banks web page and wait for it to render, and because some elements on the page are slow to respond.

If you’re running an ad blocker, it may prevent library(selenider) from remote-controlling its browser. Either turn the ad blocker off while using examiner with question banks, or add an exception for “localhost” (https://127.0.0.1). In Ublock Origin, it goes like this: Click the Ublock button, then the gears icon (“Open the dashboard”), then “My filters”, and add the line @@127.0.0.1 (indicating an exception).

Using question banks in an examiner quiz

In the questions field of the YAML header, append a pick/from text like 3/50 after the Rmd file name. It means to insert a question group picking 3 questions from a bank of 50 realizations of that Rmd file. If the question bank does not already exist, examiner will create it for you.

Here’s a complete example of what the quiz file could look like (with very few realizations so the example won’t take forever to run):

And here’s what randomized_question.Rmd could look like:

When knitting a test which uses question banks, a dialog box will appear asking you to log in to Canvas. Once you do, the rest of the interaction with the Canvas interface will be automatic.