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):
- Creating and maintaining the C autograder;
- Creating and maintaining the Java autograder;
- Improving the process of automated enrollment based on course and assessment URLs, simplifying instructors' integration with their own web pages and LMS platforms;
- Implementing additional instructor controls, such as the ability to change time limits of active exams;
- Several smaller improvements and bug fixes.
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
https://www.eecs.yorku.ca/~jonatan/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:
- Convert Canvas quizzes to PrairieLearn assessments (currently hosted in the PrairieLearn repository);
- Generate PDF files from Canvas quizzes suitable for grading on Gradescope;
- Synchronize Canvas quizzes using JSON files, which simplify the process of creating and modifying quizzes with several complex questions and variants;
- Convert a CSV file containing assignment grades to a Canvas rubric associated to an assignment.