I am a research associate and PhD student at Hochschule Bonn-Rhein-Sieg, Germany. I work on the project e2x where the main goal is to provide constructive alignment in education. My role in the project is to build an infrastructure for teaching, examination, and machine learning research in general.
We are using Jupyter Notebooks with nbgrader for teaching several university courses in the area of STEM. Courses range from small size to large size (up to 300 participants per semester). We cover topic areas from mathematics and statistics to AI and robotics.
This includes assignments during the semester as well as exams. Nbgrader provides basic tools for creating, grading, and exchanging assignments. We developed e2xgrader, an nbgrader add-on, to address the needs of three types of users: (i) students, (ii) graders, and (iii) teachers.
Students, especially in undergraduate STEM courses, come with varying levels of knowledge in programming and how to use Jupyter Notebooks. The freedom provided by Jupyter Notebooks has led to several problems in grading and teaching. Using JupyterHub eliminates issues with setting up local environments and ensures fairness by providing a standardized computing environment. However, students may still accidentally delete or alter nbgrader cells or notebooks. In interpreted languages, students may import libraries in a later cell and then use it in an earlier cell, causing further problems.
To address these issues, we have implemented measures to restrict the notebook and provide clear instructions for students. We provide a visual indicator in the form of a cell toolbar to help students know where to write solutions. During exams, we replace the standard view with a simple toolbar that includes a save and submit button and links to provided resources. Students can view their submission in HTML, and are given a restricted Python kernel with preloaded libraries and disabled terminal commands and magics. This kernel is fully configurable.
To support the transfer of paper grading processes to electronic systems, we added the ability for graders to annotate student submissions by drawing on them and display them in feedback.
We also implemented a new grading view that allows graders to view submissions horizontally (e.g. looking at one exercise for all students).
After partially grading a notebook, graders may realize that the automatic test cases need improvement. To address this, we added the option to autograde only specific cells. After updating a test case, the grader can run the autograding process again for the changed cells, and only the relevant grades will be updated. Graders can also export grades in CSV format for use in other university systems. This provides greater control and ease of use in the grading process.
Teachers need tools that make it easier to create assignments. To address this, we created a tool that organizes simple exercises into pools by topic. Teachers can choose from a variety of preset question types and create their own, and can use templates to quickly assemble assignments from the pools. We also added version control to the pools and exercises to make the process more transparent. This provides greater efficiency and flexibility in assignment creation.
Teachers need specific cell types for different courses. For example, in a software engineering class, they may want students to create diagrams, while in a mathematics class they may want to give students the ability to solve exercises on paper and upload an image of the solution. To support these needs, we added multiple and single choice cells, a fully integrated diagram editor cell based on diagrams.net, and a cell for uploading files and taking pictures from a webcam.
Finally, teachers wanted greater standardization and ease of use in authoring test cases. For this, we provide the assignmenttest package which can assign partial grades and provides an easy way to author test cases for variables, functions and classes in Python.
Summing up, the Jupyter ecosystem provides the needed to flexibility to enhance the effectivity of learning, teaching and grading for students, staff and professors, with e2xgrader.
Jupyter Notebook has been widely used in academia for research, teaching and examination. JupyterHub enables multi-user Jupyter Notebook environments, making it an ideal tool for educators. However, configuring nbgrader, a popular tool for managing assignments, for multi-course and multi-grader systems can be challenging and often requires a sysadmin to provide the necessary environment. We propose e2xhub as a solution to simplify this process, allowing educators to easily set up courses and environments using the Jupyter ecosystem without having to deal with the complexities of configuration.
We achieve this by providing a user-friendly JupyterHub configuration to allow graders to easily create courses and specify their requirements. We use YAML, a well-known declarative configuration language, to allow graders to set up courses, environments and resource allocation. Our JupyterHub is deployed on a Kubernetes cluster in order to provide isolation for users and improve scalability and maintainability. Isolation is important for our system to ensure security during examinations.
We use Zero to JupyterHub with Kubernetes (Z2JH) to deploy JupyterHub on our Kubernetes cluster. Our software extends the capabilities of Z2JH, allowing us to deploy a more customizable JupyterHub. The main objectives include providing the ability to create or load courses for individual users, creating personalized profiles for each course e.g. personalized image and resource allocation (CPU, RAM, and GPU), and enabling multi-course and multi-grader support. All of these modifications can be easily made using YAML, without the need for a sysadmin to update the configuration. In addition, we also maintain continuous integration and deployment to ensure that any updates to the upstream environment created by graders can be easily delivered to our system.
We have developed e2xhub for use at our university. Since our initial JupyterHub deployment in 2018, we have used it for 27 courses and 41 examinations, involving a total of 3569 students working on assignments and 1878 students taking exams. The flexibility to transfer our system to different cloud providers makes it easy to scale and support more courses and students. Overall, the configurability and maintainability of our system not only make it easier for sysadmins to manage, but also allow graders to create and manage courses more easily. This could potentially encourage wider adoption of the Jupyter ecosystem in education.