CD-MOJ is going to be a complete rewrite of original CD-MOJ, that is supposed to retain utilization compatibility with the original project as much as possible. That means the way contests are created should be virtually the same, and the external APIs should work the same, say for the MOJinho bot that is able to retrieve information from the running instance.
There are a few points that I believe can receive improvements, so I'll list a few:
- CD-MOJ often takes way too long to judge a problem, even when the judging list is empty.
- The running instance often can't keep up with high demand.
- The user experience lacks some polishment, which would need changes on the backend to be properly enhanced.
The backend server will be rewritten in Async Rust, with the use of the Actix-Web framework. This allows the backend server to handle a high volume of requests, with very little overhead. The Actix-RT runtime allows for spawning multiple independent threads that can sleep until they can be processed. This can allow for some control granularity by the sysadmins: a certain number of threads can be reserved for the compiler, while other threads can be reserved to running tests and comparing diffs for judging solutions in parallel, allowing for maximum performance and utilization of resources. For my plans on enhancing the user experience, I plan on rewriting the API architecture for how solutions are submitted. The idea is to use gRPC, which allows the backend server to better show judgement status, in a more interactive way, possibly showing run time for each test and other statistics that won't bias the correction process.
Soon:tm:. I have been studying ways to improve this project for a while, but currently I don't have enough time to commit to this project. Hopefully in December, but probably in January I'll be able to start this project.
#A Contest Driven Meta Online Judge
CD-MOJ is a meta online judge, where the main objective is to submit users codes to another online judge, in order to take advantage of the current infrastructure available.
Our main goal is to create a simple submission system where teachers can set contests, or exercise lists, to their students and follow how students are evolving in an Algorithm class.
Also, we use a simple system to detect software plagiarism.
Besides the idea of creating a simple system for professors, we aim to create an API to deploy a decentralized infrastructure to judge problems online.
The idea is to create trustworthy peers to judge problems, in order to avoid outages of some judge sites. Besides, anyone could set it own instance of CD-MOJ and could benefit of this model and also to contribute with a judging machine.
We look forward some students to create and set this distributed model of judging problems.
##Code
CD-MOJ is entirely written in Bash script, server and html side. It is easy to maintain and easy to create plugins.
If you would like to contribute to our platform, please feel free to send bug reports and pull requests.