Skip to content

Instantly share code, notes, and snippets.

@nareddyt
Last active February 26, 2017 17:02
Show Gist options
  • Save nareddyt/b10e222f354c1472d7620818bf36a8fb to your computer and use it in GitHub Desktop.
Save nareddyt/b10e222f354c1472d7620818bf36a8fb to your computer and use it in GitHub Desktop.
HackIllinois 2017 submission requirements for PrairieLearnHack

PrairieLearnHack

We modified UIUC's PrairieLearn service to add fully-configurable, server-side autograding to student submissions. All our contributions are currently on a fork called PrairieLearnHack.

The Team

  • Tejasvi Nareddy
  • Nathan Walters
  • Genevieve Helsel
  • Jordi Paris Ferrer

Mentors

  • Matt West
  • Dave Mussulman
  • Jake Bailey
  • Kevin Wang

Understanding and Design

We spend most of Friday night and Satuday morning understanding the codebase. The github repo had extensive documentation on how the code was structured, so we read through that. Additionally, one of PrairieLearn's mentors helped us understand how all the different files and machines were interconnected.

We spend most of Saturday brunch and afternoon designing the autograding service. We created a full network diagram on a chalkboard and decided on the program flow. Even though we spend 3+ hours on this, we felt that this was important, as we all knew what to do from the beginning.

Splitting the Work

We split the work up into sections and created pull requests to the fork for each one.

Features Added

  1. Professors can add autograders to PrairieLearnHack. They can fully configure which environments and which tests are run with each autograder.
  2. Students can trigger an autograder by submitting code online
  3. Grading runs in a seperate one-time docker container for each student submission using a master-child configuration. Grading happens securely to prevent student code from comprimising the docker container.
  4. Students are notified of results in real-time using queuing services.

Documentation

We extensively documented our changes to PrairieLearnHacks. All of our defined standards for json sending and receiving between the two servers (PrairieLearn and the Grader) are defined in markup files such as this one. All the changes that professors need to make to upload autograders is also documented throughout the rest of the documentation. All these markup files are linked to the repo's Readme.md.

We also made sure to comment our code! All our pull requests have comments too.

Things TODO

Currently, this only runs on localhost through sockets. We did not have time to implement AWS cloud functionality, so our code is not live on the PrairieLearn website. We planned on using AWS SQS as our queuing service, S3 for storage of autograders and student submissions, ECS for running the graders in docker containers, and EC2 for the main PrairieLearn server. All the components work locally by just running different scripts at the same time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment