-
Notifications
You must be signed in to change notification settings - Fork 21
0.前言
省选(HAOI 2012)没有过,于是就要回班学习了。作为失败的典型,我本该钉在耻辱柱上的,但常老师要我为这个评测系统写一份文档,便就照做吧。也算是为下一届的维护提供方便。
我曾经对TeX(由高德纳发明的排版软件)十分痴迷,但现在我已经没有心思研究它了。这样,我就选择了GitHub,算是一分维基式的文档吧。
CmYkRgB123 Online Grading System (COGS) 是由宝哥(CmYkRgB123)开发的一款信息学竞赛在线评测系统。后来宝哥改名叫BYVoid了,评测机也重写了一个叫Vakuum的OJ,但没人用过,也就不提了。COJS和COGS只是一个评测系统的两种不同叫法,关于此详细信息,请访问宝哥博客Beyond the Void,我不再赘述。
我是从什么时候接触到这个评测系统的呢?想来那是2010年7月的暑假培训。在2010-07-17 10:54:25,我在192.168.1.253(对,那时候的IP还是253)上注册了我的账号——Kingfree,uid是524。但是我并没有在上面做题,因为我还很弱——当然现在依旧弱。
真正来到实验是9月,于是我提交了第一道题——加法问题。11月,联赛(NOIP 2010)没有过,然后从Pascal就转C++了。某个偶然的机会,我知道了评测机数据的地址192.168.1.9,于是可以登陆上去看数据了,自然也发现了以前版本的COJS源代码。
我开始阅读并尝试重新搭建这个旧版本。我是从Ubuntu 8.04开始接触开源的,有一定的Linux基础,所以看懂了部分代码。我决心开发一个更好用的评测系统。HAOI 2011后,我首先学习了LAMP ( Linux + Apache + MySQL + PHP ) ,并开始从零写评测系统。然而这终究很难。最开始是不成熟的,我不断编写代码,并推翻重写,如此三番。终于在5月初我选择了开源的HUSTOJ来构建,重写了路径系统,编写了大量类及其方法。然后,发布到了SAE上KFJS,那时SAE才刚刚有。到了五月底,我又找到了一个MVC架构的WOJ,就又改做基于WOJ开发。期末难捱,终于到6月下旬又拾起HUSTOJ构架。7月把它悄悄放在了192.168.1.9上,也实现了评测功能。但这一切只停留在了7月下旬。暑假莫名其妙地就过去了。
高二开学后便开始准备联赛(NOIP 2011),很悲惨的,又没有过。于是我便专心准备会考。幸运的是,我会考还不错,只有政治君B了,也不枉我一个月刷完会考小册子。又一个偶然的机会,常老师感觉192.168.1.18出了问题,便叫我去看看什么情况。——咦,什么时候换成18了?我也记不清了,大概在联赛期间吧。我趁此机会看到了最新版COGS代码,并装上了SSH,要来了账号密码。当天回到小黑屋便修复了几个Bug。——咦,小黑屋是什么?这个,就是5303,确切历史我真不清楚。
我先是把又臭又长的题目信息压缩成两栏。因为当年君哥(Pom)不小心把自己的账号删了,于是添加了管理员删除用户时的提示信息以免误删。然后把Gravatar头像功能加了上去,取代了只能选不能传的旧的头像系统。当然这个网站很慢,所以我搞了一个缓存功能。团长(kaaala)喜欢ruan题(随机题目)做,于是我又把这个功能加了上去。为了方便联系,我又搞了一个站内信功能。然后就放寒假了。
冬令营归来,我首先修正了C++编译不能的问题——因为G++编译龟速,开启图形界面又占用大量资源,导致编译超时,这样把时限改长一点或者关闭图形界面就解决了。接着,我又添加了题目评测显示首个错误点数据的功能,以便调试代码。后面,又采用了新的分页系统,新的文字编辑器KindEditor,新版本的高亮插件。
为了更好地管理,我将代码放在了GitHub上COGS-by-Kingfree。参考了Google Code Jam的界面重写了题目和比赛的显示系统,为小屏幕和宽屏幕用户带来福音。为了判定题目是否把测试数据放上去了,又添加了提示没有数据的功能。清明三天放假在家里重写了CSS选择器。回来后采用了Windows 8 Metro式配色。然后又在题目页面显示相关讨论,合并不同语言的前n名,提升了讨论功能。Yeefan需要弄个题目索引,我就写了个页面系统。又把管理员后台优化了一下。
其实变化最大的不在于这些,等级制度才是重中之重。等级 = 求和(题目的最高得分 * 题目的难度 / 30)。这个公式评判做题数量、做题质量显然十分有用。但是,这显然不够好,也不够正确。常老师有一篇网络游戏与信息学奥赛之间的关系探讨,其中提到与WoW结合的思想未尝不可。但由于我不会打WoW,所以未能实现相关功能,这是遗憾了。
APIO以来,我想常老师申请了一台服务器,192.168.1.139,四核3.3GHz的中央处理器,4G内存,500GB硬盘。我想这样足够用了。范神牛折腾上去一个不能用的 Gentoo ,我真受不了就换了 Ubuntu 12.04,但仍旧保留了300GB空间以备不时之需。目前上面跑着图形界面的 Ubuntu 12.04 和虚拟机中 NOI Linux。
当前我正在基于Twitter Bootstrap重新编写界面,由于我的美工水平有限,能做到怎样见仁见智了。当然这样做就不支持 IE 了,所以我又另留了旧版本的为 IE 用户专门跳转。同时我也在开发一些使用的功能进去,近期要完成的任务有:评测机选择,提交答案的题目,C++评测插件,新的权限系统,新的错误提示系统,新的参数设置,美化且可自定义的界面,交互式题目,导入导出其他OJ的题目数据,兼容FPS。
饭团(fanzeyi)正在开发一个基于Python的评测机Vulpix,也不知他能否成功。如果他成功地搞出来一个大家都认可的评测系统,那我这些也都是废话了。如果他烂尾了或者开发得不好,那我的这篇文档就需要被下一代挖出来了。希望下一届实验能有人有能力接管它。