博得一笑

编程只为博得一笑

所有的代码都自己敲……
    所有的BUG都自己找……
 

博得写的博客

写博客的博得
2005自制游戏《小鱼蛋与小仙女》 下载  Hot      学思湖怪超COOL文字生成器II黄金特别版——华丽登场!!!  New Cool Hot

de

[博得作品]

1、 学思湖怪超COOL文字生成器II黄金特别版——华丽登场!!!  New  Cool
最酷的文字特效生成器,丰富的附加功能,让喜欢灌水的你武装到牙齿!

2、 2005自制游戏《小鱼蛋与小仙女》 下载  Hot
(根据2005热播电视连续剧《小鱼儿和花无缺》改编)
 

posted @ 2005-08-22 16:01 博得一笑 阅读(178) | 评论 (0)编辑

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

现版本完成于20085

上海世界外国语中学在线评测系统使用了本引擎

五、         获取

如果你希望了解更多关于本系统的相关信息,请直接联系我。(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)编辑
    昨天深夜整理了一下Judge的需求和存在的bug,发现自己在Judge这个泥潭里已经越陷越深,很多问题都不是用一种查阅式的阅读所能解决,所以决定仔细的读一读《Windows核心编程》,来深刻领悟一下Windows相关的编程知识。

一:3.2.2 关闭内核对象

如果将一个无效句柄传递给CloseHandle,将会出现两种情况之一。如果进程运行正常,CloseHandle 返回FALSE ,而GetLastError 则返回ERROR_INVALID_HANDLE。如果进程正在排除错误,系统将通知调试程序,以便能排除它的错误。 
这个说明或许可以解释我Judge中现在存在的某个Bug:那个Bug仅在Debug模式下出现。

二:9.1等待函数

下面这个函数Wa i t F o r M u l t i p l e O b j e c t s与Wa i t F o r S i n g l e O b j e c t函数很相似,区别在于它允许调用线程同时查看若干个内核对象的已通知状态:


DWORD WaitForMultipleObjects(DWORD dwCount,
   CONST HANDLE
* phObjects, 
   BOOL fWaitAll, 
   DWORD dwMilliseconds);
d w C o u n t参数用于指明想要让函数查看的内核对象的数量。这个值必须在1与M A X I M U M _WA I T _ O B J E C T S(在Wi n d o w s头文件中定义为6 
4)之间。p h O b j e c t s参数是指向内核对象句柄的数组的指针。
可以以两种不同的方式来使用Wa i t F o r M u l t i p l e O b j e c t s函数。一种方式是让线程进入等待状态,直到指定内核对象中的任何一个变为已通知状态。另一种方式是让线程进入等待状态,直到所有指定的内核对象都变为已通知状态。f Wa i tAl l参数告诉该函数,你想要让它使用何种方式。如果为该参数传递T R U E,那么在所有对象变为已通知状态之前,该函数将不允许调用线程运行。

d w M i l l i s e c o n d s参数的作用与它在Wa i t F o r S i n g l e O b j e c t中的作用完全相同。如果在等待的时候规定的时间到了,那么该函数无论如何都会返回。同样,通常为该参数传递I N F I N I T E,但是在编写代码时应该小心,以避免出现死锁情况。

Wa i t F o r M u l t i p l e O b j e c t s函数的返回值告诉调用线程,为什么它会被重新调度。可能的返回值是WA I T _ FA I L E D和WA I T _ T I M E O U T,这两个值的作用是很清楚的。如果为f Wa i tAl l参数传递T R U E,同时所有对象均变为已通知状态,那么返回值是WA I T _ O B J E C T _ 
0。如果为f Wa i t A l l传递FA L S E,那么一旦任何一个对象变为已通知状态,该函数便返回。在这种情况下,你可能想要知道哪个对象变为已通知状态。返回值是WA I T _ O B J E C T _ 0与(WA I T _ O B J E C T _ 0 + d w C o u n t - 1)之间的一个值。换句话说,如果返回值不是WA I T _ T I M E O U T,也不是WA I T _ FA I L E D,那么应该从返回值中减去WA I T _ O B J E C T _ 0。产生的数字是作为第二个参数传递给Wa i t F o r M u l t i p l e O b j e c t s的句柄数组中的索引。该索引说明哪个对象变为已通知状态。下面是说明这一情况的一些示例代码:


HANDLE h[
3];
h[
0= hProcess1;
h[
1= hProcess2;
h[
2= hProcess3;
DWORD dw 
= WaitForMultipleObjects(3, h, FALSE, 5000);
switch(dw)