[NEUOJ日记] #1 Hello World

[NEUOJ日记] #1 Hello World

写在前面:

NEUOJ的开发即将满五个月, 算是我在大学阶段做的最大的一个项目了(因为搞ACM的缘故没有在大一大二做什么项目出来) 在开发过程中遇到了很多问题  & 学到了很多东西, 谨以此系列文章记录开发过程以及开发心得体会

文章的格式:

每一篇文章都会以: 一个主标题 开头, 然后 分为多个副标题, 每个副标题后面会跟一个解释下面要讲的内容的commit-id

Hello World

Why we start (No commit id)

两年半的ACM生涯结束了, 老师征求我们对于重写OJ的想法, 我们队伍的大家早就有自己写一个OJ的想法了, 作为挖坑小能手的我 ( Qrz ) 本来还有点因为自己的时间+个人原因不是很想搞(其实内心是非常想搞的) 被两个队友拉着就果断入坑了, 我们想写出一个能够给大家一个梯度训练, 界面友好, 测评多样化, 符合当今Web开发潮流的新的Online judge 系统, 于是我们队伍+ sjm + wyf就开始了对OJ的开发, 最初的分工是 我们队伍搞 Web 后端开发, sjm 搞前端开发, wyf + 我搞测评端研究

How we design (No commit id)

开发OJ对我来说最陌生的就是测评后端的开发, 不知道如何下手, 好在老师给我们提供了一个开源的测评系统 domjudge, domjudge的后端judgehost已经非常完善了, 支持多语言多环境多测试样例的安全测评, 于是我们初期就直接使用judgehost来做我们的测评后端, 然后前端我们使用的是Bootstrap框架, Web后端使用Laravel框架, 然后我们初步设计了一下表的结构, 参考了hustoj的数据表结构 & 我们自己的表结构,对表进行了设计, 最初的表有

 

users: 用户登陆信息
problem: 题目相关信息
submissions: 用户提交相应信息
userinfo: 用户的详细信息,基本信息

(之后会在不同的阶段介绍表的具体结构  & 修改)

How we start(No commit id)

经过一周的讨论, 我们最后定下来了第一版的目标 先做出一个可以让用户提交代码(不管能不能测评)能看题的一个壳出来(虽然这个后来很快就实现了), 前端为 sjm 开始学习前端的知识(Bootstrap jQuery等等),后端为 accelercode队伍(即我们队) 我的另外两个队友都没有Web开发的经验, 因此给他们安排的任务是先学习PHP, 然后学Laravel, 在此同时我先开始熟悉laravel5(我之前用的是laravel4) 熟悉5之后, 开始建表, 建Model,建route, wyf 和 我的测评后端的任务是(刚开始没有让我搞测评后端, 我感觉搞OJ最有趣的地方就是测评后端了于是自己也主动去看了) 搭建domjudge, 并且研究judgehost的源码

Build the Domjudge(No commit id)

回去之后,我就开始了自己本地搭建domjudge的过程, 其中遇到了一些问题, 比如 archlinux下 jsoncpp头文件的名字和domjudge 的configure脚本里的名字不符,会导致就算安装了jsoncpp-devel还是找不到头文件, 这时候我在/usr/include/下面mkdir jsoncpp/json/ 然后把所有json/下的头文件拷贝到 jsoncpp/json/下 ,然后 再次configure就OK了 另外在下载源码之后没有configure文件, 需要先./bootstrap才行, 然而 bootstrap的时候会make 一次 latex的东西, 如果电脑里没有latex的东西, 你需要自己将 Makefile里关于latex的东西注释掉,也就是注释掉 make distclean下面的那一行,然后就可以了

Make the Plan for 1.0(931612-ffb28b)

这是我们的第一条commit, 在这个commit的时候, 我将大家拉入了我Bearychat的讨论组 NEUOJ-accelercode(private)

并且, 使用学校的gitlab 服务器 (219.216.96.46)对代码进行托管, 新建了 README.md 当时的计划如下:

NEUOJ
====

###Function Enabled for v1.0
* [ ]Problem managment
 * [ ]Add Problem
 * [ ]Edit Problem
 * [ ]Delete Problem
 * [ ]Edit data
* [ ]Hold Contest
 * [ ]Three kind of access to contest: Private Register Public
 * [ ]Enable user register himself into the register Contest
 * [ ]Board display
 * [ ]Import student info from xls and xlsx etc.
* [ ]Root Admin Panel
 * [ ]+ User Managment
* [ ]Auth module
 * [ ]Register
 * [ ]Login
 * [ ]Reset Password
 * [ ] (Future) SSO and Third party login

###top level route
* /profile User profile page
* /dashboard User managment panel
* /problem Show Problem(s)
* /status Show status(es)
* /auth Authenticate interface (Register login and reset password)
* /contest Show or get in contest
* /discuss Route to subfunction of bbs

###Code Styling

Use [PSR-2](http://www.php-fig.org/psr/psr-2/) Code Standard

 

然后为laravel工程建立了.gitignore, 并将laravel工程建好,配好了PHPStorm, laravel的环境, 配laravel的环境使用的是一键式傻瓜XAMPP, 我们的OJ开发正式开始 [Wed Nov 25 19:35:11 2015 +0800]

Leave a Reply

Your email address will not be published. Required fields are marked *

twelve − two =

This site uses Akismet to reduce spam. Learn how your comment data is processed.