Files for my website
bwc9876.dev
1---
2name: WCPCI
3summary: An online judging system
4timespan:
5 from: 2024
6 to: 2025
7internalSort: 50
8tags:
9 - web
10 - rust
11 - rocket
12 - astro
13links:
14 github: Bwc9876/WCPCI/tree/dev
15image: ./wcpc.png
16---
17
18An Online Judging system (often shortened to OJ) is a tool used for programming competitions. It handles taking user submissions and scoring them based on their output. Usually this involves running the submission against a series of test cases.
19
20This was a big undertaking for me as a project but overall I learned so much about many, many things from it. Some cool features include.
21
22- WebSocket-based submission and feedback to users
23- Fully customizable branding so the site can be customized for different schools / brands
24- Integrated code editor for writing submissions. I want to also make a VSCode extension maybe
25- Git-based export of all problems for users, simply run `git clone` to get a copy of all your submissions!
26- Lightweight jailing system for running user code inside of, utilizing various Linux kernel features
27- SAML integration so institutions can use their current auth instead of making users make new accounts
28- Live updating leaderboard with animations for when teams change places
29- Confetti :)
30
31For the Git export I learned how Git worked at a low-level and re-implemented the "dumb" clone protocol in Rust, which involved creating a fake repo over HTTP.
32
33For the jailing of user code I learned many parts of Linux process isolation. This was a very long process and arguably the most complex part of the site. I actually made a write-up on how the system works [within the repo](https://github.com/Bwc9876/WCPCI/blob/dev/src/run/RUNNER.md).
34
35As of right now the system has not been integrated at my institution but the application code is done. In the future I want to add support for teams.