Teaching Tools

As an educator, I enjoy making use of tools that enhance student experience, as well as simplify instructional tasks. Some of these tools are not always easily available, or do not provide all the flexibility I hope to achieve. In such cases, I have had the opportunity to either develop my own tools, or to collaborate in the development of existing platforms.

PrairieLearn Collaboration

PrairieLearn is an open source platform for creating homeworks and tests based on mastery learning, developed at the University of Illinois at Urbana-Champain (UIUC). It allows questions to be written using arbitrary HTML/JavaScript, thus enabling very powerful questions that can randomize and autograde themselves, and can access client- and server-side libraries to handle tasks such as graphical drawing, symbolic algebra, and student code compilation and execution.

As a collaborator to PrairieLearn, I have been able to engage in multiple initiatives, including (but not limited to):

As an instructor, I have also used PrairieLearn in my own classes, often experimenting with new and improved question styles. A demo course is available with some examples of questions I created is available here. This demo course requires login with UBC credentials or a Google account.

CPU Simulator


For courses involving Computer Architecture concepts, I have created a simulator using HTML and JavaScript. This simulator is based on y86-64, a subset of the x86-64 Instruction Set Architecture (ISA) created by Randal Bryant and David O'Hallaron for their textbook on Computer Systems. The simulator is built so that other ISAs can also be built as additional modules (some of these modules are available in very early stages, but are not in a production-level quality yet).

The simulator provides students with the ability to write Assembly code directly or to load an existing Assembly file. It has support for multiple implementations of the same ISA (e.g., sequential execution, pipelining, hazard control, etc.). It also has support for multiple levels of set-associative cache with configurable settings and policies.

Canvas Tools

As instructors we sometimes need to interact with multiple platforms to reach specific teaching goals. Although it is often useful to rely on LMS platforms like Canvas to centralize access to course material, some of its features are not always suitable for some of our needs. Additional tools like PrairieLearn (above), Gradescope or even internal scripts are needed to fill those gaps.

By using the Canvas API, I have been able to create scripts that allow instructors to transfer information between Canvas and other platforms. These tools are available in https://github.com/ubc-cpsc/canvasgrading, and have been used by several instructors. Some useful scripts include: