All Projects → aesophor → hacklympics

aesophor / hacklympics

Licence: MPL-2.0 License
🏆 Full-stack online programming examination system

Programming Languages

java
68154 projects - #9 most used programming language
python
139335 projects - #7 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to hacklympics

Bank-Account-Simulation
A Bank Account Simulation with JavaFX and SQLite back-end. Material UX|UI.
Stars: ✭ 19 (-56.82%)
Mutual labels:  material-ui, javafx, javafx-application, javafx-desktop-apps
tqrespec
TQRespec - The respec tool for Titan Quest game
Stars: ✭ 59 (+34.09%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
gramophy
A JavaFX based Open-Source YouTube Music Downloader/Player
Stars: ✭ 88 (+100%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
Jabref
Graphical Java application for managing BibTeX and biblatex (.bib) databases
Stars: ✭ 2,385 (+5320.45%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
JFXGoogleDrive
A JavaFX Google Drive Client (For Demonstration Purposes Only).
Stars: ✭ 29 (-34.09%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
OmniGraph
Desktop application for creating graphs and algorithm visualisation
Stars: ✭ 27 (-38.64%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
sqlbrowserfx
A feature rich cross platform sql client for SQLite , MySQL.
Stars: ✭ 19 (-56.82%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
store-pos
It is java accounting software basically developed using javafx which has various modules like purchase, sales, receipts, payments, and journals.
Stars: ✭ 84 (+90.91%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
DashboardFx
JavaFx Dashboard
Stars: ✭ 272 (+518.18%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
vkmusic
Приложение для выгрузки аудио библиотеки из ВК
Stars: ✭ 31 (-29.55%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
ChatRoomFX
JavaFX ChatRoom using JAVA RMI
Stars: ✭ 33 (-25%)
Mutual labels:  javafx, javafx-application, javafx-desktop-apps
spring-javafx-material-design-admin
Aplicação desktop para Gerenciamento de estoque e vendas com Spring Boot, JavaFX e Material Design
Stars: ✭ 56 (+27.27%)
Mutual labels:  material-ui, javafx
jdeploy
Developer friendly desktop deployment tool
Stars: ✭ 282 (+540.91%)
Mutual labels:  javafx, javafx-desktop-apps
InvMan
Open source JavaFX inventory management application
Stars: ✭ 40 (-9.09%)
Mutual labels:  javafx, javafx-application
mano-simulator
🖥️ An assembler and hardware simulator for the Mano Basic Computer, a 16 bit computer.
Stars: ✭ 20 (-54.55%)
Mutual labels:  javafx, javafx-application
AllInOneFX
All In One JavaFX Application with a curated list of awesome JavaFX libraries, frameworks
Stars: ✭ 26 (-40.91%)
Mutual labels:  javafx, javafx-application
subtitles-view
基于javaFX的简单字幕处理桌面程序,集成在线翻译及语音转换
Stars: ✭ 368 (+736.36%)
Mutual labels:  javafx, javafx-desktop-apps
OnlyViewer
A material design picture viewer made with JavaFX and JFoenix. / 用JavaFX编写的Material Design风格的电子图片管理系统
Stars: ✭ 23 (-47.73%)
Mutual labels:  javafx, javafx-desktop-apps
SnakeFX
Snake game in JavaFX
Stars: ✭ 41 (-6.82%)
Mutual labels:  javafx, javafx-application
FxEditor
JavaFX rich text editor able to handle billions of lines (WORK IN PROGRESS)
Stars: ✭ 21 (-52.27%)
Mutual labels:  javafx, javafx-desktop-apps

HACKLYMPICS

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)
  • Event-driven Architecture

    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.

  • 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

  1. Clone this repo
$ git clone https://github.com/aesophor/hacklympics
$ cd hacklympics
  1. Start the django server on 0.0.0.0:8000
$ cd Nocturnal && ./start_server.sh
  1. 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.

scrot1
Editing a Course

scrot2
Student screens in real time

scrot3
Syncing keylogs & playback

scrot4
Full-fledged code editor for students

scrot5
Passing an exam with Online Judge


License

Available under Mozilla Public License 2.0.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].