OnlineJudge 2.0發布

Github: https://github.com/QingdaoU/OnlineJudge

Docs: http://docs.onlinejudge.me

Demo: http://v2.qduoj.com

經過3個多月的開發, 600多次的commit,我們今天終於可以說一句: OnlineJudge 2.0版本正式發布了。新的OJ可能是現在最簡潔、漂亮、強大、易用且最易搭建的的了。

新特性一睹為快:

  • 基於Docker,真正的一鍵部署
  • 現代化的設計架構,前後端分離,模塊化編程
  • ACM/OI 兩種比賽模式,實時/非實時評判 任意選擇
  • 更細緻合理的許可權劃分,超級管理員和普通管理員各司其職
  • 基於 vue 構建的 SPA, 友好易用
  • 豐富的可視化圖表,一圖勝千言
  • 支持使用 Markdown 創建題目
  • JudgeServer 心跳檢測、狀態檢查
  • 支持導入用戶,生成用戶
  • 支持選取公開題目作為比賽題目
  • 更多的語言支持: C, C++, Java, Python2, Python3
  • ...

主要模塊均已開源:

  • 後端(Django): github.com/QingdaoU/Onl
  • 前端(Vue): github.com/QingdaoU/Onl
  • 判題沙箱(Seccomp): github.com/QingdaoU/Jud
  • 判題伺服器(Judger的封裝): github.com/QingdaoU/Jud

一次從內到外的完全重構

2.0版的規劃從去年就有了,只是大家忙於工作學習,開發進度緩慢。今年年初@李大佬基本完成了新OJ的admin部分,後台框架也有了。我今年4月底加入了開發團隊,中間不少事基本沒怎麼做,從今年8月初開始專心開發新版。

從去年開始,我們逐漸感覺到傳統的 MVC, MVVM 等開發模式在寫這種交互繁多、 動態Dom占多數的頁面越來越吃力,同時前端各種框架層出不窮,在這些框架的幫助下,前端的開發門檻在逐漸降低。於是我們適時的分離了前後端,後端專註於邏輯處理, 前端專註於數據展現,用戶體驗大大提升。

與此同時,後端也經歷了一次脫胎換骨,之前不合理的地方被統統重寫了一遍。首先是統一了語言配置規則,題目可以自行選擇使用的語言;然後是引入了多時區,後台統一使用UTC,在前端做時間轉換;再就是重新定義了管理員和普通管理員的許可權,使得許可權的劃分更加細緻合理;當然,判題伺服器這塊也做了巨大改動,我們將判題服務從OJ中抽離出來單獨作為了一個模塊,這樣不僅添加判題伺服器其更加簡單,維護起來也更加方便。

一些截圖

推薦直接去體驗下 Demo, 新功能較多,無法一一截圖

Problem List

Problem Detail

Submission List

Settings

User Home

Users

Judge Server

Create Problem

Create Contest

感謝

可以說2.0版就是我和李同學兩人一起做的, 開源不易,希望大家且用且珍惜。如果您覺得還不錯就star一下吧,您的star可能是我們持續更新下去的動力。如果您有什麼好的想法,歡迎PR,真的好久沒有PR啦!

在此感謝所有為OJ提供建議和反饋問題的小夥伴們,你們的幫助讓OJ變得越來越好用。

推薦閱讀:

爬蟲帶你逛知乎(下篇)
10min手寫(一):伺服器內存監控系統
為什麼 x in range(1000000000000001) 的執行速度這麼快
如何看待將Python代碼轉換成Go代碼並進一步編譯的 Grumpy 項目?

TAG:OnlineJudge | Python | Vuejs |