- Programdom is an application that lets lecturers test their students understanding of coding concepts. How does it work?
- A Lecturer creates a coding problem, with some skeleton code and test cases.
- The lecturer adds a problem to a workshop that they can present
- Students join the workshop via a code, and attempt to solve the problem, by changing the code
- Students get given feedback on what tests pass and fail
- Lectuers see results live as they are submitted
Under the hood, we are using Judge0 in order to evaluate each submission.
If you want to run Programdom locally, then great! All you need to do is the following:
- Ensure you have docker and docker-compose installed and usable
- Run
docker-compose -f prod.yml up
- Wait for the image to build, and then access the instance at localhost:80
In order to actually use the system, they are some "first steps" that should be run
1. Create a super user - docker-compose -f prod.yml run python manage.py createsuperuser
- answer the prompts for
your username and password
2. Import default programming languages. While languages can be created manually in Django Admin (accessible at /admin
), it's
normally easier to import the default ones. Run docker-compose -f prod.yml run python manage.py
In production, a few changes will need to be made.
1. Add your SSL keys to the nginx config file, which is in compose/nginx.conf
. At the same time, change
server_name
to the hostname of your server.
- Create a Security Key - This can be done by changing the
SECRET_KEY
property in.envs/.prod/.django
- Create a secure username and password for postgres in
.envs/.prod/.postgres
- Create a new secret and access key for minio in
.envs/.prod/.minio
- Uncomment all of the security lines in
config/settings/production.py
If you want to develop Programdom, then you should do the following, after ensuring that you have all of the development requirements installed
- Create and activate a virtualenv, with Python >= 3.6
- Install packages via
pip install -r requirements/local.txt
- Run gulp - this will build all static files, and launch browsersync, which will refresh the browser on any static file changes
- Run
./manage.py runserver
and./manage.py runworker judgebridge
for the bridge server - To run tests, run
pytest
Python >=3.6 npm docker docker-compose google-chrome and chromedriver (only for UI tests)
You might also want to check out judge0api
This software is released under the MIT License
programdom was written by Aaron Walker.