给HUSTOJ用户提供的源码阅读与修改建议


 

0、 准备知识

a)        最新系统源码可以用svn取得,或在下述地址直接浏览

          i.  http://code.google.com/p/hustoj/source/browse/   稳定版

         ii.  https://github.com/zhblue/hustoj                         实验版

b)       系统分为Web和Core两个部分

c)        简化ER图http://code.google.com/p/hustoj/wiki/DBdesign

d)       Web与core的连接方式有两种,实际运行可选其中一种

      i.   数据库连接【默认】

1.        Web插入Solution表

2.        core轮询solution表,发现新纪录

3.        core更新solution表result等字段

4.        Web端轮询soltuion显示result等字段。

        ii.   HTTP方式

1.        Web插入Solution表

2.        core访问Web端admin/problem_judge.php,发现新纪录

3.        core向Web端admin/problem_judge.php提交数据,problem_judge.php更新solution表result等字段

4.        Web端轮询soltuion显示result等字段。

1、 Web部分

a)        阅读配置文件,弄清各设置含义

         i.      参考http://code.google.com/p/hustoj/wiki/Configuration

         ii.      源码http://code.google.com/p/hustoj/source/browse/trunk/web/include/db_info.inc.php

b)       制定自己的前台模板

            i.      复制template/bs目录。

            ii.     在db_info.inc.php中修改$OJ_TEMPLATE变量为新模板名

           iii.   浏览前台,修改新目录中对应的php、css、imgae等文件

c)        模板制定成功以后应该有足够的知识开始修改template目录以外的部分了

d)       论坛

           i.    建议集成GPL的phpbb,参考http://code.google.com/p/hustoj/source/browse/trunk/web/bbs.php

            ii.    集成Discuz

1.   建议购买商业许可。

2.   参考http://code.google.com/p/hustoj/source/browse/trunk/web/include/login-discuz.php

e)        比赛根据数据通过率排名,而不只看AC数量

       i.             数据库solution表pass_rate字段

       ii.             把contestrank.php中的solved字段变成浮点对待。

       iii.             http://code.google.com/p/hustoj/source/browse/trunk/web/contestrank.php#36

f)        对有志于重写整个前台的勇士

      i.             希望你选择一种魔法师编程语言。

      ii.             如果做不到前面那条,请做好长时间开发的心理准备。

    iii.             理论上任何现存web编程模型都可以,推荐JSP/SSH。

    iv.             建议实现admin/problem_judge.php的仿真,方便直接集成原版core

2、 Core部分

a)        阅读配置文件,弄清各设置含义

      i.    参考http://code.google.com/p/hustoj/wiki/Configuration

    ii.      源码http://code.google.com/p/hustoj/source/browse/trunk/core/judge_client/judge_client.cc

b)       查阅Linux文档中关于下述关键词的内容

     i.  Ptrace

    ii.  Chroot

    iii. Setuid

    iv.  Proc

     v. shm

c)        所有API限定在okcalls.h

d)       代码查重工具sim

   i.  http://code.google.com/p/hustoj/source/browse/trunk/core/sim/sim_2_67/READMEs

e)        对于计划改造Core来适应你自己的Oj前台的朋友

  i. 参考1.c.iv

 ii. 在judge_client.cc中搜索关键词wget

f)        HUSTOJ的沙箱模型

     i.  相对openjudge.net的sandbox libraries而言并不严谨

     ii.  对于OJ而言,基本满足需求

   iii.  容易理解、容易实现、容易修改

 

你可能感兴趣的:(ACM,OnlineJudge,Hust)