Hacklympics
🏆 Online programming examination system prototype, featuring anticheat mechanisms (keylogging, playback)
Install / Use
/learn @aesophor/HacklympicsREADME
OnlineJudge Keylogging ScreenRecording REST Java8 Python3 Django1.8 Material UI
What's This
- 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
Overview
-
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
Features
- 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)
Supported Programming Languages
- Currently only Java is supported since this project mainly focuses on the proctoring mechanisms.
Usage
- 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.
Gallery
Please visit imgur for more screenshots.
<div align="center"> <img src="https://github.com/aesophor/Hacklympics/raw/master/.meta/teacher/EditMaterials - Course.png" alt="scrot1"><br>Editing a Course <br><br> <img src="https://github.com/aesophor/Hacklympics/raw/master/.meta/teacher/Proctor - Snapshots.png" alt="scrot2"><br>Student screens in real time <br><br> <img src="https://github.com/aesophor/Hacklympics/raw/master/.meta/teacher/Proctor - Keystrokes.png" alt="scrot3"><br>Syncing keylogs & playback <br><br> <img src="https://github.com/aesophor/Hacklympics/raw/master/.meta/student/TakeExam - Code.png" alt="scrot4"><br>Full-fledged code editor for students <br><br> <img src="https://github.com/aesophor/Hacklympics/raw/master/.meta/student/TakeExam - OnlineJudge.png" alt="scrot5"><br>Passing an exam with Online Judge <br><br> </div> <br>License
Available under Mozilla Public License 2.0.
Related Skills
diffs
343.1kUse the diffs tool to produce real, shareable diffs (viewer URL, file artifact, or both) instead of manual edit summaries.
openpencil
1.9kThe world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
HappyColorBlend
HappyColorBlendVibe Project Guidelines Project Overview HappyColorBlendVibe is a Figma plugin for color palette generation with advanced tint/shade blending capabilities. It allows designers to
Flyaro-waffle-app
Waffle Delight - Full Stack MERN Application Rules & Documentation Project Overview A comprehensive waffle delivery application built with MERN stack featuring premium UI/UX, admin management, a
