progcon is an application that can help you run programming contests. It's designed for live, in-person events where interested attendees can sign up and participate on the spot. It's not designed for remote participation, though you could certainly try that if you prefer.
NOTE: The docker image is still fairly new, and some parts may be broken. But, it's about 100 times easier to use than installing it all yourself, so... give it a try.
I highly recommend using the docker image
jpeddicord/progcon,
as everything is already built and ready-to-go. You'll need to supply your own configuration
and storage volumes, but a docker-compose
file is available in the docker
directory to
help you get started with that.
- NodeJS ^7.6
- nanomsg ^1.0
- Rust ^1.17 & Cargo
- Docker (optional)
After you've installed the above dependencies, go ahead and run make
in the main directory.
This will compile the NodeJS application as well as the two Rust applications. If anything
fails here, double-check your dependencies.
Then, run make install
as root (optionally setting DESTDIR, which defaults to /opt/progcon
).
A successful installation actually does need to be run as root, as contest-exec
needs to be
marked setuid
in order to sandbox problem runners.
If that all succeeded, you should have /opt/progcon/bin
with some nice executables,
/opt/progcon/conf
for configuration, and /opt/progcon/web
with website internals.
The contest website can be configured with config.js
in the web/server
directory. You'll note
that this doesn't exist -- you can copy it from config.template.js
to get started.
For an installed copy, you should edit /opt/progcon/conf/config.js
.
If any configuration needs to be loaded asynchronously, such as pulling credentials from
a remote server, you can delay application initialization by returning a promise in the load
function in this file.
This configuration file also controls how the grading robots will spawn. Be sure to have enough to meet the demands of your contest! I recommend spawning one per core, minus one to leave breathing room for the Node app. The grading robots are not currently multithreaded.
TODO still, sorrrryyy
Not here. If I posted them online then people could just cheat, you see.
There is a sample problem (Fibonacci) in the sample-problems directory. The format is easy enough to figure out for writing your own problems.
TODO again; more needs to be written on this
Yup. Workin' on it.
Hold off for now -- I'm changing a ton of stuff at the moment and I don't want your contribution to be lost in the fray. That said, feel free to file issues for bugs you find or features you're passionate about.
Copyright (c) 2016 - 2017 Jacob Peddicord
progcon is released under the terms of the Mozilla Public License, version 2.0. See the LICENSE for more information.
Sample problems (under the sample-problems
directory) are available under CC0.
See that file for further details.