---
# System prepended metadata

title: 專題Proposal

---


# 專題名稱
Only Object Programming Juicy
Orange Juice
Only Juice
## 參與人員

:::success
- Professor
    - Sun, Chin-Yu (NTUT CSIE)
- Consultant
    - Huang, Han-Xuan (109 NTUT CSIE, 113 NYCU Cybersecurity)
    - Huang, Zheng (110 NTUT CSIE)
- Member
    - Chang, Yi-Chang (111 NTUT CSIE)
    - Zhang, Rui-En (111 NTUT CSIE)
    - Lin, Pin-Wei (111 NTUT CSIE)
    - Wu, Yoa-Dong (111 NTUT CSIE)
:::

## 簡介

:::info
初步階段為，建立一個適用於NTUT OOP課程的Online Judge，目標為取代掉jenkins(同樣可以接git server)，新增一些實際上課會應用到的功能，例如:讓未來的助教免於用手key成績的痛苦，可以匯出Excel表單。
:::

## 任務概述

:::info
基於物件導向課程為基礎，針對大學生以下學生所遇到之程式設計題目，開發一個簡易Online Judge，並且模擬有心人士針對Online Judge的任何攻擊手段，進行系統強化與伺服器建設，修改伺服器。
:::

## 預期工作內容

:::spoiler　基礎
- [ ] 架設一個OJ(前後端，能run git的code，以現有開源做開發)
    - [ ] 程式上傳功能
    - [ ] 程式評測功能
    - [ ] 結果回傳
    - [ ] 結果顯示在網站上，自己可以決定是否要公開給大家
    - [ ] 建立管理員介面，用來增刪改查題目
    - [ ] 在上傳時建立自動化建置程序，省去作業時間
    - [ ] 新增測試員角色，負責所有題目做為測試的帳號

- [ ] 基礎防禦功能
    - [ ] 避免測資被偷出 (偷檔案或是其他奇怪的方法)
    - [ ] 考慮某些奇怪的STL或function避免Judger被打爆
- [ ] 即時記分板，顯示上機考、作業成績
    - [ ] 簡單記分板
    - [ ] 使用者可以自己關掉，不給別人看

- [ ] 效能必須扛下一切在考試時所上傳的程式碼
- [ ] 多repo，可以同時出多份題目
    - 2023f的OOP課程，同一份Repo同時有很多份作業，在整理的時候會很困難，要使用者手動備份。這裡的概念是指建立不同的Repo，一份Repo代表一次作業的上傳處，方便使用者整理。
:::


:::spoiler 進階
- [ ] 把成績輸出成 excel(方便期末上傳成績)
- [ ] 自己設計插件功能(插件商店，可以上傳並下載)
- [ ] 擴大Scale(到競賽等級)，當發生未預期攻擊事件，可以再來解決
~~- [ ] 可以撐住C10K問題(後期在處理，畢竟100多人效能問題不大)~~
- [ ] OJ的測試沙盒可以自己魔改其他測試功能。
- [ ] 文本比對功能(防止有人作弊) 
    - 這似乎要NLP or 其他Data Science理論基礎，偏困難
- [ ] 讓林品為跳舞，這是最後的警告，再不做出專題，林品為就會跳舞

:::

## 參考

:::info
[C10K 問題](https://en.wikipedia.org/wiki/C10k_problem)
[zero judge](https://zerojudge.tw/)
[Kotlin架設 OJ](https://ithelp.ithome.com.tw/articles/10233368)

* 一些OJ的開源專案&使用說明
[Dom Judge](https://contest.cc.ntu.edu.tw/npsc2023/teamclient/NPSC_DOMjudge_userGuide.pdf)
[DMOJ](https://github.com/DMOJ/online-judge)
[NOJ](https://github.com/ZsgsDesign/NOJ)
[Qing OJ](https://github.com/QingdaoU/OnlineJudge)
:::

# 專題工作進度



