Inspiration
As a teaching assistant, we hope to develop an online judging for students which can help them to fix code and understand code error as program beginners.
What it does
It is an online judge system which can automatically compile, run and test C and C++ code from students, with test case generators and oracles from predefined problems, as well as dynamic analysis tools to provide memory issue detection, and fault localization.
How we built it
- We compile and run the code inside container, using
systemd-nspawn. Each container would only run one submission, and will be killed and a new one will be started, using-xoption. - There is a helper daemon inside each container, which communicate with the server, and do the actual jobs.
- The server stores problems and submissions using a database based on sqlite3.
- In the frontend, we use monaco-editor to provide a good coding experience.
Challenges we ran into
- Combine different dynamic skills, coverage codes and fault location to help students locate and fix bugs.
- manage all the untrusted codes, like student submissions, problem test case generator and test oracles, and keep it safe at the same time.
Accomplishments that we're proud of
- We managed to manage a pool of containers.
- We managed to perform dynamic analysis in an automatic manner.
What we learned
- It is still not possible to build online judge system or only the judging module based on serverless functions/lambda.
- An online judge system is cpu greedy and need great multicore performance.
What's next for Tellers: Guide for novice programmers
- We have not complete the fault localiztion feature. We will go on working on that.
- We are trying yo provide more cool analysis tools.
- We are trying to allow it to work together will canvas or moodle, so that students can directly submit to our system, and teachers can directly grade on our system.
- We are trying to optimize grading performance, and imporve the speed for container initialization.
Log in or sign up for Devpost to join the conversation.