NOJ——我是如何从零开始创造OJ的(序)

NOJ 是一个开源的、基于 Laravel 构建的现代化 Online Judge,开源于 GitHub,详见ZsgsDeisng/NOJ

2018 年暑假,我们在校内参加暑期集训,重头戏就是个人排位赛了,个人排位赛使用的是老 NOJ,在使用过程中,我们发现它甚至不能计算准确 Java 的内存占用(任何代码直接 MLE,运气好才能 AC)。那个时候老板第一次提出了开发新的 NOJ 的构想。此前 NOJ 还是 2009 年与南航合作研发的版本,后续南航自主开发了新的 OJ,NOJ 就停止了更新。多年来多次试图重构,据说其中经历了从 java、php、node.js、go 到 python 五次的重构,但这五次没有一次成功,go 语言那次据说以及几乎成功了,结果负责学长去了公司(Google?)然后慢慢凉了。

当时由李争彦学长负责开发工作,我为副组长,后续涉及上半年的扇贝杯,期间我们为了比赛进行私有化了 QingdaoUOJ,直接改名为 NOJ 实现了假的 NOJ,后来 QingdaoUOJ 也成了 NOJ 最早的参考对象之一,NOJ 的 Judger、JugeServer 的分离方式都起源于 QingdaoUOJ。

由于神奇因素认识一些 OJ 的维护者,后续开发中 NOJ 参考了一些知名 OJ 的架构,由于学长事务繁忙等等原因基本上由我来主导开发,选择技术栈的过程中选择了和洛谷类似的 php+Symphony(后续调整为 Laravel)而放弃了原有的 python 技术栈,这是考量到 php7.3 的性能提升和 php 本身作为网关处理而生的优势而定。确定基调后我先仔细研读了 Laravel 文档,之后花费了一周时间先玩了一局《钢铁雄心 4》,在其中我扮演波兰,成立海间联邦后直接平推了小胡子和战斗民族,之后 45 年统一了全球……

之后,在除夕那一周,我加班加点,以 996 精神为标杆完成了 NOJ 的绝大部分架构,包括了整个用户系统和首页、题目列表、题目详情以及引以为豪的沉浸式编辑器,当然,此时的 NOJ 还只能交 CodeForces 的题目,充其量只是一个 Virtual Judge,离 Online Judge 还差得远呢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据