Bode's Online Judge Core Engine
Bate2
Publish
在线评测系统核心引擎新测试版本发布
版本: 0.9.9.2002
日期: 2008-11-27
更新:
1 提高大预期文件读写的速度
2 提高输出流的处理效率
修正:
1 修正了多处资源泄漏的情况
版本: 0.9.9.2001
日期: 2008-11-21
更新:
1
提高单个预期输入输出文件上限(单个输入文件无限制、单个输出文件10M)
2
提高打包文件效率,支持多个大文件打包
3
修改打包程序逻辑,不再支持旧有版本生成的打包文件!
4
解包程序在解包后生成用于再次打包的批处理文件
5 同时发布基于0.9.9.1005的0.9.9.1999,用于预期文件升级
6 提供2个批处理方便预期文件升级(从0.9.9.1X到0.9.9.2X)
修正:
1
修改了导致日志错乱的一个Bug
××××××××××××××××××××××××××××××××××××
点击直接下载Bode's Online Judge Core Engine Bate2
点击下载升级包(用于0.9.9.1X版本的升级)
××××××××××××××××××××××××××××××××××××
关于预期文件升级的说明
由于用0.9.9.1X之前的内核在打包大文件时存在错误,所以0.9.9.2000开始的内核重写了这块逻辑。
原有打包后的预期文件需要用旧版本解包后,再用新版本重新打包,才能使用。
为方便操作,所以提供了2个批处理来进行重新打包预期文件的工作。
在命令行窗口进入JudgeCoreEngine所在目录,并确认该目录下存在下列文件:
文件 版本要求 说明
Judge.dll 0.9.9.2000+ 新版核心
Judge.dll.old 0.9.9.1999 旧版核心
UnpackExpectFile.exe / 解包程序
ExpectFileCreate.exe / 打包程序
UpdateExpectFile.bat / 单个预期文件升级
UpdateAllExpectFile.bat / 全目录预期文件升级
使用命令:
UpdateExpectFile 预期文件名
来升级单个预期文件
UpdateAllExpectFile 待处理目录
来升级待处理目录下所有预期文件
预期文件升级成功后,会将原预期文件添加后缀.old后备份。
注意:
请在升级前,将原预期文件复制到其他目录中备份!
升级程序不能辨认预期文件版本,错误的升级(将已升级的文件再次升级等)可能导致不可预计的后果。
升级程序会在当前目录下自动创建并删除一些临时文件,请不要在升级过程中,手动删除。
××××××××××××××××××××××××××××××××××××
这是一套在Windows平台下Online Judge系统的评测子系统,可用于需要批量校验代码的运行结果的场合,比如Online Judge在线评测系统或自动化测试系统等。
如果你希望了解更多关于本系统的相关信息,请直接联系我。(MSN/Email:
i@bodesmile.com)
由于包含编译器的版本过大,所以只提供含有.net平台编译器的版本下载,如果需要相应的编译器,可以直接联系我。
posted @
2008-11-21 17:25 博得一笑 阅读(207) |
评论 (1) |
编辑
Bode's Online Judge Core Engine (Judge Engine Dynamic Link Library)
在线评测系统核心引擎
Beta Publish
测试版公布
一、 用途
Windows平台下Online Judge系统的评测子系统,一般用于校验待检测代码的运行结果。
二、 方法
传入预期文件,待检测代码和对应编译器,就可获得代码运行结果。
三、 特色
A. 完备的功能性设计:
1. Online Judge任务无须人工干预。自动编译源文件,自动运行客户程序,自动效验答案,自动回收资源。
2.支持编译器扩展,当前支持的编译器有
GCC: 3.4.5 20060117 (http://gcc.gnu.org/)
VC8: 8.00.50727.42 (Microsoft® Visual Studio® 2005)
CS8: 8.0.50727.1433 (Microsoft® Visual Studio® 2005)
FPC: intel/i386 2.2.0 (http://www.freepascal.org/)
VB8: 8.0.50727.1433 (Microsoft® Visual Studio® 2005)
JAVA: jdk1.5.0_15
将来更会加入更多的支持可能
3.支持使用多组测试数据一次性完成Judge过程。
4.支持Special Judge。(需自行提供Special Judge的源代码或可执行文件)
5.当用户程序占用的系统资源(如CPU时间、内存等)超过限制时,及时终止用户程序,发出相应的“超时(Time Limit Exceeded)”、“超内存(Memory Limit Exceeded)”、“输出文件过大(Output Limit Exceeded)”,并能给出实际的CPU、内存占用情况数据。
6.提供任务缓冲功能,即使有任务在执行,也能添加新的任务。
7.提供完善的日志功能,当Judge系统发生错误时可以迅速定位。
B. 良好的安全性保护
1.防止用户程序取得除预期输入文件之外服务器上的任何文件信息或配置信息。更不能对服务器上的文件进行修改删除等操作。
2.用户程序不会在服务器上创建任何文件。所有输出一律使用标准输出。
3.防止用户程序创建子进程。
4.防止用户程序调用系统API。
5.防止用户程序无意中对于系统的破坏,如缓冲区溢出等。
6.防止其他可能危害系统安全的行为发生。
C. 超强的稳定性保证
1.系统可以长时间的连续、稳定、无错的工作。
2.无论Online Judge系统刚刚启动还是已经连续运行了几十个小时,同样的用户代码多次重复Judge,运行结果相同,运行参数(运行时间和内存占用)基本一致。
D. 极佳的效率性表现
1.系统具有较高的运行效率。
2.在相同配置的机器上,无论是在Online Judge系统中,还是单独运行,用户程序的执行时间,资源占用相当。
3.系统空闲时,占用极少的系统资源。
4.系统在空闲时接受到任务能够快速响应。
E. 开放的第三方接口
1.引擎可以方便的部署。
2.引擎可以方便的添加、移除第三方编辑器。(*测试版暂不支持)
3.预期文件、预期输出以及Special Judge的支援代码可以方便的组织。(*提供了对应的工具包)
4.提供方便的接口供第三方程序调用。
四、 历史
起源于大学时的毕业设计(Since 2006)
现版本完成于2008年5月
上海世界外国语中学在线评测系统使用了本引擎
五、 获取
如果你希望了解更多关于本系统的相关信息,请直接联系我。(MSN/Email: i@bodesmile.com)
由于包含了编译器的版本过大,所以只提供没有编译器的版本下载,如果需要相应的编译器,可以联系我,或自行下载(不推荐)。
本地下载 (只包含C#8、VB8编译器,需要先安装.net f2.0)
posted @
2008-05-27 17:31 博得一笑 阅读(667) |
评论 (0) |
编辑
公司的网游《乌龙学院》开始封测,我这里也推广一下~
==================================
由华东师范大学出版社和上海地创网络技术有限公司历时两年,联合精心研发的大型多人在线英语情境教学软件——乌龙学院,今日正式封测。
乌龙学院是一款神奇的英语学习软件,她真正的将“玩”和“学”结合起来了。
乌龙学院是以华东师范大学多位教育专家、外教的最新教研成果为基石,再由上海地创网络技术有限公司的数位资深多媒体技术和软件开发工程师潜心研发,以当今互联网领域最前沿的“大型多人在线角色扮演(MMORPG)”技术为平台,真正的实现了寓教于乐,她将掀起一轮新的学习革命。
乌龙学院的官方网站地址是:www.wulongonline.com 全程媒体支持:沪江英语网
从现在开始,您可以免费下载并注册。
直接点击下载( http://220.170.79.50/wulong/WLA_1010_setup.exe )
==================================








posted @
2008-02-13 14:19 博得一笑 阅读(397) |
评论 (3) |
编辑
写下来,给自己点鞭策!!!
1、完善judge.dll,帮助SHNU Online Judge早日上线。
2、早日搞定我的论文,也是关于judge的,呵呵!
3、开始准备学思湖怪3的开发!!!
关于学思湖怪三的开发设想如下:
相比之前的《博客笑》以及《学思湖怪文字生成器》,现在的《学思湖怪超COOL文字生成器II》极大的丰富了功能,已不单单只是一个文字特效的生成器了,而原有的程序架构显然不能很好的支持这种发展。而且用C#.net开发的《学思湖怪超COOL文字生成器II》在速度上偏慢,尤其是一些大篇文字的处理速度十分缓慢;利用.net1.1开发的界面也显得落伍。所以决定从底层开始重构,开发一套全新的“学思湖怪”!
历史版本进化
| 版本 |
学思湖怪文字生成器 |
学思湖怪超COOL文字生成器II |
学思湖怪特效生成器3 |
| 发布时间 |
2006/01/15 第一版 2006/01/19 Update |
2006/04/06 Beta1 2006/05/19 Beta2 2006/05/28 Beta3 2006/06/06 正式版 2006/06/24 Update 2006/07/04 Update 2006/12/24 Update |
2007/05 预期Alpha 2007/06 预期Beta 2007/08 预期正式 |
| 开发代号 |
BlogSmile2006/SHNUBBS++ |
SuperBBS |
SpecialBB(Special Blog & BBS) |
| 程序结构 |
单一文件 |
单一文件 + 资源文件 |
SBB SDK + 外壳界面 + 资源文件 |
| 内核语言 |
C#.NET |
C#.NET |
VC++2005 |
| 用户界面 |
C#.NET |
C#.NET |
C#2005 |
| 主要功能 |
文字渐变 |
文字渐变、字符画、隐匿画等 |
未定 |
| 支持语言 |
中文 |
中文 |
Unicode |
| Vista支持 |
未测试 |
未测试 |
计划支持 |
| 下载链接 |
本地下载 |
本地下载 |
暂无 |
posted @
2007-03-22 15:32 博得一笑 阅读(82) |
评论 (0) |
编辑
刚才心血来潮一记,去维基上面百科了一下上海师范大学,居然还给我找到了

仔细一看,咦,校长的名字还能点击,不错不错

然后赶紧点进去捧捧场,结果发现……

吾没想法了。。。
真不知道是谁干的好事……
Wiki应该是人人可以编辑的,俺没空研究怎么编辑,那个会改的同志上去改改吧,太不雅观了
p.s. 维基百科可能很多人上不了,所以俺贴几张图来
posted @
2007-02-07 16:33 博得一笑 阅读(70) |
评论 (0) |
编辑
关于进程间共享数据的研究。
昨天看了用共享节的方式共享静态数据,但是这个方法安全性不高,而且无法适用于需要动态分配大块内存的情况。
今天尝试了一下内存映射文件,发现可以很好的解决这个问题。
范例:
dll.h
class testFileMapping


{
private:
HANDLE hMapping;
LPVOID lpData;
public:
bool init();

void set(int idx,int val);

int get(int idx);

testFileMapping();
~testFileMapping();
};

MY_API HANDLE InitFileMapping();

MY_API void SetFileMapping(HANDLE hMap,int idx,int val);

MY_API int GetFileMapping(HANDLE hMap,int idx);

MY_API void CleanFileMapping(HANDLE hMap);
dll.cpp
bool testFileMapping::init()


{
hMapping=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(int)*100,L"MYSHARE");
if(hMapping==NULL)

{
return false;
}
lpData=MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData==NULL)

{
return false;
}
}

void testFileMapping::set(int idx, int val)


{
int* tp = (int*)lpData;
tp[idx] = val;
}

int testFileMapping::get(int idx)


{
int* tp = (int*)lpData;
return tp[idx];
}

testFileMapping::testFileMapping()


{
hMapping = NULL;
lpData = NULL;
}

testFileMapping::~testFileMapping()


{
if(NULL != lpData)

{
UnmapViewOfFile(lpData);
lpData = NULL;
}
if(NULL != hMapping)

{
CloseHandle(hMapping);
hMapping = NULL;
}
}

MY_API HANDLE InitFileMapping()


{
testFileMapping* tp = new testFileMapping();
tp->init();
return tp;
}

MY_API void SetFileMapping(HANDLE hMap,int idx,int val)


{
((testFileMapping*)hMap)->set(idx,val);
}

MY_API int GetFileMapping(HANDLE hMap,int idx)


{
return ((testFileMapping*)hMap)->get(idx);
}

MY_API void CleanFileMapping(HANDLE hMap)


{
delete ((testFileMapping*)hMap);
}
编译为dll后,在不同的程序中调用,就可以共享一块大小为100的int数组。因为没有加边界控制,所以检查了一下边界条件,发现其实可以访问的内存是大小为1024的int数组,也就是x86页面文件的大小4KB。当然这样的访问是不安全的,应该在程序中加以屏蔽。
posted @
2007-01-31 14:52 博得一笑 阅读(146) |
评论 (0) |
编辑