
每个学校 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 ,欢迎去试用一下。
有什么问题或者建议欢迎在下面回复。
谢谢啦~
1 hcymk2 2015-09-17 17:12:59 +08:00 我怎么 star 过? |
2 Nan7Huang 2015-09-17 17:19:19 +08:00 哦~厉害~我要推荐给队友 |
3 maemual 2015-09-17 17:47:39 +08:00 不好意思。。。似乎被我一个 fork 炸弹就玩挂了。。。 |
6 virusdefender OP @maemual 额 我看到了 现在系统调用过滤还是 todo 的状态。。 |
7 virusdefender OP @maemual docker 里面跑的 https://github.com/quark-zju/lrun docker 只是用来方便隔离环境用的,只是 lrun 的系统调用过滤我还没写 |
8 wph95 2015-09-17 17:54:27 +08:00 > 国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑 赞的不能再多 整体写的非常好 部分代码有待商榷 比如: contest_submission 和 submission 可以和到一起的 评测机代码问题很严重 , 这个等下私聊告诉你 , 已经看出起码 3 种方式搞坏 。 个人还是推荐 不开源 评测机 , 或者集成 hustoj 的评测机(虽然渣的厉害 , 但是安全) 或者给等即将开放的 CodeVS 的评测 API :) |
9 maemual 2015-09-17 17:55:44 +08:00 还有, Django 的 settings 里的 SECRET_KEY ,开源出来会有安全隐患的。 |
10 wph95 2015-09-17 17:57:26 +08:00 @virusdefender 不能隔 fork 的 隔了 fork () , 会让 java 性能锐减 , lrun 我记得有个参数的 开启那个参数就可以防止 fork 炸弹, 没记错应该是 --isolate-process |
11 virusdefender OP @maemual 这个只有在 signed cookie 里面用到吧,如果用了 signed cookie 会有问题的。 |
12 virusdefender OP @wph95 嗯~代码中就可以看到 lrun 的那些参数都是 todo 的状态~docker 隔离性也有问题 |
14 learnshare 2015-09-17 18:03:02 +08:00 为什么感觉山东的 ACM 搞得比较热闹 |
15 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 路评测 的集群给大家用:) |
17 breeswish 2015-09-17 19:06:47 +08:00 安利一个久经考验(经过多位就职于国内著名安全实验室小伙伴测试)的,基于 Windows Sandbox 的评测机( from Vijos ) https://github.com/iceboy-sjtu/winjudge |
18 iniwap 2015-09-17 19:15:41 +08:00 @wph95 OJ 是 Online Judge 系统的简称,用来在线检测程序源代码的正确性。著名的 OJ 有 TYVJ 、 RQNOJ 、 URAL 等。国内著名的题库有北京大学题库、浙江大学题库、电子科技大学题库、杭州电子科技大学等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。 |
19 Delbert 205-09-17 20:17:53 +08:00 via Android @learnshare 山大 7 年表示不知道 acm 是啥 |
20 wph95 2015-09-17 20:37:44 +08:00 @maemual 还在实现中 可以 mail [email protected] 交流 |
21 ChiangDi 2015-09-17 21:34:05 +08:00 哎哟不错哦,支持 |
22 virusdefender OP @learnshare 可能是高考遗留问题。。但是成绩不好 |
23 tuteng 2015-09-18 19:00:19 +08:00 好炫呢 |
24 Changxu 2015-10-10 23:16:41 +08:00 docker 最近新加入了一个特性,是--kernel-memory 参数,据说可以用来解决 fork 炸弹问题: https://github.com/docker/docker/issues/6479 另外,常见的攻击 OJ 的手段都有什么? |
25 virusdefender OP @Changxu 调用各种命令 删除修改文件 fork 占用大量内存 include </dev/random>等 |
26 virusdefender OP @Changxu 我在系统调用上限制了一下,直接 fork 应该不行了,其余的我也不会写。。 |
27 nisekoi 2015-10-13 12:20:23 +08:00 已 star..不过按照文档配置了一下,返回 Server Error (500),不清楚是什么问题 |
28 virusdefender OP @nisekoi 看日志 |
29 nisekoi 2015-10-13 18:37:30 +08:00 @virusdefender 已解决。说说我遇到的问题: 提示 TemplateDoesNotExist: oj/index.html 将 /qduoj/template/src 中的 src 改为 release 可以访问后静态文件没显示出来? 由于我把静态文件放在了 /root/下,换到其他目录即可 |
30 virusdefender OP @nisekoi 你是不是没设置环境变量啊,会判断环境变量来决定配置文件的,一个是 src 一个是 release 。 要不你就是没打包 js , python tools/release_static.py 就行,这个时候会生成 release 目录。 不打包的话文件很大,有的页面 1M 多。 |
31 nisekoi 2015-10-13 20:08:10 +08:00 @virusdefender oj_env 么,那应该是没有设置环境变量了 |
32 junnplus 2015-10-17 10:06:28 +08:00 我们学校也在开发新的 OJ ,测试地址 http://oj.sdutacm.org 目前功能还没写完 |
33 virusdefender OP @junnplus looks great~ |
34 junnplus 2015-10-17 11:27:45 +08:00 @virusdefender thanks |
35 virusdefender OP @junnplus http://oj.sdutacm.org/u/1/ 我们也在写这样一个个人主页,仿 github |
36 virusdefender OP @junnplus 看了下你们的后台,也是 django 的? |
37 junnplus 2015-10-17 13:54:07 +08:00 @virusdefender 后端是 flask |
38 junnplus 2015-10-17 13:54:50 +08:00 @virusdefender 方便的可以交流下,微信 jun_nplus |
39 kzzhr 2015-10-18 00:15:33 +08:00 via iPhone 作为一个折腾过 oj 的人。挺支持这样做的。 不过有一些个人看法,浙大在很多年前开源了一个判题的 core ,我觉得其实够用了。并没有必要去用 docker 从头搞。但是其他地方,我们称之为用户体验吧,确实应该改一改。功能上很多不足,应该才是需要花很多精力的 |
40 snnn 2015-10-18 01:04:20 +08:00 via Android 直接刷 UVA 什么的不好吗? |
41 virusdefender OP @kzzhr 你是说 lrun 么,我们用到了那个, docker 只是一个壳 |
42 virusdefender OP @snnn 自己考试测评比较方便 |
43 Omitted 2015-10-18 09:20:07 +08:00 信工大二,对 python 感兴趣,请问加入学习嘛 0.0 |
44 virusdefender OP @Omitted 青大的? |
45 Omitted 2015-10-18 10:36:41 +08:00 @virusdefender 是的, 14 级软外 |
46 Omitted 2015-10-18 10:45:29 +08:00 @virusdefender 对 Python 和 Docker 都感兴趣,不过仅仅算是知道吧,想深入学习,但没有方向,学长能否带走 |
47 virusdefender OP @Omitted http://weibo.com/277116340 私信我个 qq |
48 jzp113 2015-12-14 16:45:50 +08:00 哈哈 用 python 写的也支持下 python 在线编译吧 |
49 virusdefender OP @jzp113 acm 没用 Python 的,所以就没加 |
50 samhjn 2016-01-05 18:15:51 +08:00 @wph95 其实很多年以前 CodeVS ( WikiOI )的评测机也是不安全的。当年他们的安全控制还是字符串匹配。最后我用了伪汇编调用 fork 把服务器整个搞瘫了。 |
51 wph95 2016-01-05 22:17:21 +08:00 |
52 felix021 2016-01-31 21:53:19 +08:00 写 OJ 的人真多……我想找个能跑 PHP 的,我之前写的那个 Judge 完全是基于 ptrace 限制系统调用,这个对付 PHP 的话很不灵活。 |
53 virusdefender OP |
54 felix021 2016-02-01 10:02:03 +08:00 @virusdefender 我是从最小权限开始,一点一点尝试,一点一点放开,直到把必须权限都放开为止。 |
55 xiaoqiang179 2018-05-05 19:06:28 +08:00 支持学长!!! |
56 bulabean 2020-02-08 01:16:32 +08:00 支持,厉害了。 和 oj.youdao.com 好像,简直一毛一样。我觉得他们用的你这个开源 |