- This was my undergrad project while I was a cadet at National Defense University (Jun. 2015 ~ Jun. 2018)
- I left the R.O.C. army in Jun. 2018 due to my disappointment in them.
- I transferred to University of Taipei in Aug. 2018, and got admitted to NCTU in Nov. 2019
- This is my complete rewrite of its predecessor which was written by six of my seniors
- A programming exam platform with online judge and anticheat
- Can prevent students from cheating (using StackOverflow, LINE, etc) with keylogging and continuous screen capture
-
Three-tier REST architecture
- Hacklympics - Client (Java FX)
- HacklympicsAPI - RESTful API (Java 8)
- Nocturnal - Backend (Python 3.5 + Django 1.8.18)
-
When there's a change in state at the server side, the server will notify all relevant clients by "dispatching events" to them. When a client receives an event from the server, it will take appropriate actions in order to reflect the changes to the user.
- server-side event dispatcher: dispatcher.py
- client-side event manager: EventManager.java
-
Design Patterns used
- Singleton
- Observer
-
Libraries used
- okhttp - HTTP+HTTP/2 client for Android and Java applications.
- gson - JSON Library. Used for passing data between Django and HacklympicsAPI
- java-diff-utils - Diff Patch Library. Used for syncing keylogs.
- thumbnailator - Thumbnail generation library. Used for down-scaling snapshots.
- JFoenix - JavaFX Material Design Library
- FontawesomeFX - Icon Library
- RichTextFX - RichText Area for JavaFX. Used for code areas
- TerminalFX - A Terminal Emulator written in JavaFX 8
- Users with Teacher's privileges can create/edit/remove Courses/Exams/Problems.
- each Course contains Exam(s)
- each Exam contains Problem(s)
- Server-side Online Judge (implemented in judge.py)
- Automatic score assiging (not implemented yet)
- Server-side countdown timer for each Exam (implemented in session.py.
- when the time's up, the exam will halt automatically.
- Screen recording and keylogging targeting students while they are in exams
- no more visiting StackOverflow! Everything is under surveillence!
- taking snapshots
- syncing keystrokes via diff-patches.
- Each exam has its own chatroom
- all messages are public
- useful for students asking teachers questions
- togglable toast notifications (not implemented yet)
- Currently only Java is supported since this project mainly focuses on the proctoring mechanisms.
- Clone this repo
$ git clone https://github.com/aesophor/hacklympics
$ cd hacklympics
- Start the django server on 0.0.0.0:8000
$ cd Nocturnal && ./start_server.sh
- Open another terminal, cd to hacklympics directory, and run the desktop client.
$ cd Hacklympics/dist
$ java -jar Hacklympics.jar
Note: Please edit Hacklympics/dist/config.properties
to change where the desktop client will connect to.
Please visit imgur for more screenshots.
Editing a Course
Student screens in real time
Syncing keylogs & playback
Full-fledged code editor for students
Passing an exam with Online Judge
Available under Mozilla Public License 2.0.