我们学校的 Online Judge 开源了,基于 Python 和 Docker, https://github.com/QingdaoU/OnlineJudge ,求 star

2015-09-17 17:06:17 +08:00
 virusdefender

每个学校 ACM 队在训练或者招生的时候可能都需要一个 oj ,我们常用的 oj 是杭电的,但是有些不是很满意的地方。

首先是界面,国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑, 10 多年前的风格,可能因为 oj 就是 10 年前写的吧。

用起来也有些不是很方便的地方,比如提交题目要新开页面,要再选择题号,再手动刷新看结果。自己内部比赛有些规则也没办法去设置,自己没法去添加题目去查看测试用例等等。

所以我们实验室三个人用了大约暑假一个半月的时间,自己写了一个 oj ,我们的定位不仅仅是 ACM 训练,还有学校平时教学的作业考试等也可以在上面进行。 老师作为普通管理员可以创建小组,相当于一个班级,内部举办比赛,创建修改题目,外人不可见,超级管理员才可以管理公开的题目和比赛。

后端涉及到的技术有 Python 、 Django 、 Docker 、 MySQL 、 Redis 、 Celery 等,后台的前端是一个 SPA 页面,使用 avalon js 。

GitHub: https://github.com/QingdaoU/OnlineJudge (顺手 star 一个吧~)

文档: https://www.zybuluo.com/virusdefender/note/171932

demo: https://qduoj.com

给大家提前注册了账号,用户名 V2EX (都是小写的,论坛会自动转换为大写),密码 123456 ,欢迎去试用一下。

有什么问题或者建议欢迎在下面回复。

谢谢啦~

20341 次点击
所在节点    分享创造
56 条回复
hcymk2
2015-09-17 17:12:59 +08:00
我怎么 star 过?
Nan7Huang
2015-09-17 17:19:19 +08:00
哦~厉害~我要推荐给队友
maemual
2015-09-17 17:47:39 +08:00
不好意思。。。似乎被我一个 fork 炸弹就玩挂了。。。
elvodn
2015-09-17 17:49:56 +08:00
@maemual 真会玩
maemual
2015-09-17 17:52:58 +08:00
@elvodn 作为同样写过 OJ 的人,看到用 Docker 判题就知道八成没处理这种问题。。。
virusdefender
2015-09-17 17:53:02 +08:00
@maemual 额 我看到了 现在系统调用过滤还是 todo 的状态。。
virusdefender
2015-09-17 17:54:15 +08:00
@maemual docker 里面跑的 https://github.com/quark-zju/lrun docker 只是用来方便隔离环境用的,只是 lrun 的系统调用过滤我还没写
wph95
2015-09-17 17:54:27 +08:00
> 国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑
赞的不能再多

整体写的非常好

部分代码有待商榷 比如:
contest_submission 和 submission 可以和到一起的


评测机代码问题很严重 , 这个等下私聊告诉你 , 已经看出起码 3 种方式搞坏 。
个人还是推荐 不开源 评测机 , 或者集成 hustoj 的评测机(虽然渣的厉害 , 但是安全) 或者给等即将开放的 CodeVS 的评测 API :)
maemual
2015-09-17 17:55:44 +08:00
还有, Django 的 settings 里的 SECRET_KEY ,开源出来会有安全隐患的。
wph95
2015-09-17 17:57:26 +08:00
@virusdefender 不能隔 fork 的 隔了 fork () , 会让 java 性能锐减 , lrun 我记得有个参数的 开启那个参数就可以防止 fork 炸弹,
没记错应该是 --isolate-process
virusdefender
2015-09-17 18:00:40 +08:00
@maemual 这个只有在 signed cookie 里面用到吧,如果用了 signed cookie 会有问题的。
virusdefender
2015-09-17 18:01:33 +08:00
@wph95 嗯~代码中就可以看到 lrun 的那些参数都是 todo 的状态~docker 隔离性也有问题
maemual
2015-09-17 18:02:31 +08:00
@wph95 可以交流一下评测机的安全机制么。
learnshare
2015-09-17 18:03:02 +08:00
为什么感觉山东的 ACM 搞得比较热闹
wph95
2015-09-17 18:15:05 +08:00
@maemual
CodeVS 的核心技术都在评测机了 233
安全部分 还是传统做法 不过没用 ptrace ( ptrace 太傻 x )
我原来也是用 lrun (Orz quake ) , 不过和 docker 无法兼容 就放弃了 , 自己写了一套 , 正努力的和整个 docker 生态融合 。

还有就是 动态弹性的评测集群 , 这个有很多花式解决方案 。

---

有兴趣可以多多交流 , 也可以使用 codevs 的 开放 api 。 已经接受近 300 万次代码提交的检验 , 2 台单核 1g 机器就能承受年百万次评测哦 :—) 。 即将开放 平时 2 路, 峰值 10 路评测 的集群给大家用:)
maemual
2015-09-17 18:27:44 +08:00
@wph95 API 文档在哪?
breeswish
2015-09-17 19:06:47 +08:00
安利一个久经考验(经过多位就职于国内著名安全实验室小伙伴测试)的,基于 Windows Sandbox 的评测机( from Vijos )

https://github.com/iceboy-sjtu/winjudge
iniwap
2015-09-17 19:15:41 +08:00
@wph95 OJ 是 Online Judge 系统的简称,用来在线检测程序源代码的正确性。著名的 OJ 有 TYVJ 、 RQNOJ 、 URAL 等。国内著名的题库有北京大学题库、浙江大学题库、电子科技大学题库、杭州电子科技大学等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。
Delbert
2015-09-17 20:17:53 +08:00
@learnshare 山大 7 年表示不知道 acm 是啥
wph95
2015-09-17 20:37:44 +08:00
@maemual 还在实现中 可以 mail wph95@codevs.cn 交流

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221500

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX