ContestSonic 开发笔记(一)

这个会不定时更新……

报上这个项目上去真的是脑袋抽了,真的。

2018 年 12 月,学校发通知报项目,我觉得这个写起来还可以,于是报了,报了就后悔,后悔还没后悔药,于是硬着头皮做,做得头皮发麻。

其实很久以前就想做这个了,借这个机会补坑吧……

项目名称来自 Kanade 的技能 Handsonic,希望写出来的东西能够稳定快速地解决线下竞赛与考试的问题吧……至于中文翻译,如果 Handsonic 被翻译成「音速手刃」的话……

MD 真 TM 中二我不管了

1 月做了一下项目调查,回收到了 65 份答卷,有 8 份无效的,分析了一下剩余部分。

简单介绍一下调查结果吧:

第一个是问身份,以此来判断问卷的有效性,调查到两名教练,不确定真实身份……37 位现役 OIer / ICPCer,18 位退役 OIer / ICPCer,以此分配考虑加权。

第二项是问是否用过线下测评系统,近 90% 的调查者用过,说明写这玩意是有人用的……

第三项是问选手端与测评端分别需不需要全平台,大多数倾向于选手端全平台测评端 Linux 这样的方案,也是我预想的方案。

第四项是问需不需要分布式测评,现役 OIer / ICPCer 19 人支持只用一台测评机,但是退役 OIer / ICPCer 大多支持用多台测评机……所以考虑分布式测评。

第五项调查了用户行为会不会像用 Cena 一样不测比赛只是自测,发现现役 OIer / ICPCer 和退役 OIer / ICPCer 使用习惯确实不一样……

第六项是交互方式调查,大多数都倾向于网页交互,所以交互逻辑就定了。

第七项是问反作弊系统是否多余,大多数人都认为是不多余的,因此还要就这个问题进行深入设计……但是至少还可以搞一个相似代码的这么一个判断(有现成的,不造轮子了)。

第八个是时间限制的这个设定需不需要调整,大多数人认为不需要调整,我提出了用相对时间进行判断,发现其实没多少人支持……想想也是,首先相对标准没法制定,其次只要 std 跑得够快其他代码都跟不上它的 speed,这个就是没用的……

第九项是调查是否需要用 testlib 重写一下 diff,发现更多人支持重写,泥萌都是魔鬼吗QAQ,工期拉满了啊QAQ

第十项是调查有没有线上线下比赛联动的需求,发现是有的,需要设计 API 来实现。

后面的调查是关于程序设计考试的调查,发现这个是可行的,可以设计程序设计考试的测评系统,这个和竞赛系统可以通用。

然后就是直接调查需求了。

总结一下需求:

  • 子任务捆绑(包括 Skipped)
  • 简单配置
  • 稳定更新
  • 扩展性强
  • 非传统题测评
  • 自动收取程序
  • 选手竞赛环境与测评环境不一致导致问题
  • 直观的错误提示
  • 线上线下联动
  • 页面可爱!

emmmmm……争取做到最后一条吧……

早自习设计了一下前端和后端模型,简要写了一下数据库结构,感觉界面可以挺简洁,感觉用无印的本子自己的设计都简洁了很多……(不是

前端的想法是把所有功能只做到一页上,后端的功能想法是只推送不询问。尽可能合并状态更新,尽可能做到快速响应。

原来其实是想把一些 OJ 的比赛功能扒下来随便改改就交上去的,但没有一个 OJ 比赛功能符合预期,于是自己写了……

四月准备开工。