Skip to content

wtjiang98/vj4

 
 

Repository files navigation

VJ4

Build Status Code Climate Dependency Status GitHub license

Next generation of Vijos, built with asyncio on Python 3.5.

Functionality

  • Problem Categories and Tags
  • Solution Sharing & Voting
  • Online Coding and Testing (a.k.a. Scratchpad Mode)
  • Discussions & Comments
  • Trainings
  • Contests (ACM & OI)
  • Dynamic Ranking System
  • Real-time Status Updates
  • Online Judge as a Service (a.k.a. Domain): create your own OJ website without dev-ops!
  • Management UI

Features

  • Sandboxed & Distributed Judging: see jd4, winjudge and windows-container
  • High Performance Web Server
  • Cross Platform (both Judge and Web Server can be run on Linux & Windows)
  • Secure (we are also CTF players)
  • Modern Architecture
  • Modern User Interface
  • SEO Optimized
  • CDN Friendly

Prerequisites

Install requirements

In the root of the repository, where requirements.txt and package.json locates:

python3.5 -m pip install -r requirements.txt
npm install   # cnpm install

You don't need root privilege to run npm install. It installs stuffs in the project directory.

You may want to use cnpm and tuna if you are in China. Make sure to use cnpm by adding alias to npm instead of installing cnpm cli-tool.

Some requirements may need Python.h. In Ubuntu/Debian simply use

apt install python3-dev

to resolve the problem.

IP Geo-Location

To enable IP geo-location translation, you need to obtain a MaxMind GeoLite City DB and put it in the project root directory:

curl "http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz" | gunzip -c > GeoLite2-City.mmdb

You may also want to install libmaxminddb for higher performance.

Development

In the root of the repository:

npm run build   # or: npm run build:watch
python3.5 -m vj4.server --debug

Set --listen (default: http://127.0.0.1:8888) to listen on a different address.

As an intuitive example, you may want to add a super administator and a problem to start:

alias pm="python3.5 -m"
pm vj4.model.user add -1 icebox 12345 icebox@iceboy.org
pm vj4.model.user set_superadmin -1
pm vj4.model.adaptor.problem add system "Dummy Problem" "# It *works*" -1 1000   # you can also use web UI

You need to run these scripts on a regular basis to maintain correct RP and ranks for all users:

pm vj4.job.rp recalc_all
pm vj4.job.rank run_all

Watch and Restart

Frontend source codes can be recompiled automatically by running:

npm run build:watch

However you need to manually restart the server for server-side code to take effect.

Production

npm run build:production
python3.5 -OO -m vj4.server --listen=unix:/var/run/vj4.sock
  • Set --listen (default: http://127.0.0.1:8888) to listen on a different address.
  • Set --prefork (default: 1) to specify the number of worker processes.
  • Set --ip-header (default: X-Forwarded-For) to use IP address in request headers.
  • Set --url-prefix (default: https://vijos.org) to set URL prefix.
  • Set --cdn-prefix (default: /) to set CDN prefix.
  • Set --smtp-host, --smtp-user and --smtp-password to specify a SMTP server.
  • Set --db-host (default: localhost) and/or --db-name (default: test) to use a different database.

Notes

Have fun!

Maximum line width: 100

Indentation: 2 spaces

JavaScript Style Guide

References

About

Next generation version of Vijos, the 10+ years' (since 2005) online judge service with millions of submissions.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 42.7%
  • HTML 23.9%
  • JavaScript 20.8%
  • CSS 12.6%