Files for my website bwc9876.dev
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 31eaaa534f945d32f2b4e97df0e8da1347f0cc53 35 lines 1.8 kB view raw
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.