找到一篇非常不错的文章,晚上回来操作一下。
http://zeroliu.blogdriver.com/zeroliu/1208212.html
应用场景:
玩个游戏文字mud,客户端使用mushclient,支持使用 lua 脚本来写 robot,以便自动练功。
但由于多个 id 之间 share 数据比较困难,导致地图数据在每个 id 都要加载一次,数量大了之后,内存用很多,而且还会出现莫明其妙的内存泄漏问题。所以想改用 java 实现(因为我不会用 c 实现)
最终选择了使用 lua 调用 c,然后调用 java
posted @
2008-10-19 09:49 哈哈的日子 阅读(44) |
评论 (0) |
编辑 收藏
安装了cdt 5.0,以前可以build的project死都不能build。
错误是
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\Test.o ..\src\Test.cpp
Internal Builder: Cannot run program "g++": ϵͳÕҲ»µ½ָ¶¨µ
Build error occurred, build is stopped
Time consumed: 0 ms.
把 MinGW 的运行目录加到classpath里,把mingw32-make.exe复制一个,改名为make.exe。
在命令行下,一切都没有问题,就是在 eclipse里面不能用,郁闷了几天了。
google 了一下,参考了
http://www.eclipseworld.org/bbs/read-cec-tid-18540-page-e.html
这个帖子中参考了
http://74.53.91.20/bbs/read-cec-tid-17557-fpage-2.html
最终的方法是将
org.eclipse.cdt.core.win32_5.0.0.200809120802.jar
解压成目录org.eclipse.cdt.core.win32_5.0.0.200809120802,注意把原来的jar删除。
要人命了,这也能行,不看 code 估计这辈子都解决不了这个问题了。
posted @
2008-10-18 20:36 哈哈的日子 阅读(257) |
评论 (2) |
编辑 收藏
今天安装了 svn 服务端。
为什么写呢?因为和以前安装的不一样。
有什么不一样呢?
1、方便了很多
2、安装了 viewvc
为什么要安装 viewvc,而不是fisheye呢?
不是因为viewvc比fisheye好,就是因为刚才的第一点,方便。
以前安装 svn 都是直接下载一个 svn windows 版的压缩包,解压,bin目录加到path里,使用 sc 命令用 svnserve 建个服务,启动,完成。
其实这个步骤还是很简单的,就是在使用 sc 建 service 的时候,命令行有些复杂而已。
但这样只能使用 svn://xxx/xxx 来使用,而且不能在 web 上看到版本库,那么,就想了点儿办法,安装一个 apache 吧,然后根据文档,一顿猛配,相当的麻烦。好处就是,可以使用
http://xxx/xxx 来使用,而且可以在 web 上浏览到最新的版本内容,虽然 web 功能土了点儿,但至少可以使用了。有的时候,深得这样不爽,就再加个 fisheye,我个人相当喜欢 fisheye 这个软件,以至于花了点儿时间破解了一下,需要的可以在 blog 上找一下,不是暴力的那种,是半注册的,可以跟着升级的那种。
但是,唯一,也是最大的问题,就是麻烦,安装这一套东西,那是相当的麻烦啊。
今天发现了一个方便的办法。
下载三个东西:
1、CollabNet Subversion Server
2、python
3、python win32api
安装过程和下载不太一样。
1、python
2、CollabNet Subversion Server
3、python win32api
2、3顺序无所谓的。
然后,就拥有了一个 svn + apache + viewvc 的环境了,相当的方便。
我喜欢。
呵呵…… ^_^
posted @
2008-08-05 21:28 哈哈的日子 阅读(147) |
评论 (0) |
编辑 收藏
可以直接将 plugin 放到 dropins 目录下,即可自动完成安装。
dropins 目录支持下列形式的结构。
1、
eclipse/
dropins/
org.eclipse.core.tools_1.4.0.200710121455.jar
org.eclipse.releng.tools_3.3.0.v20070412/
plugin.xml
tools.jar
... etc ...
...
2、
eclipse/
dropins/
eclipse/
features/
plugins/
3、
eclipse/
dropins/
emf/
eclipse/
features/
plugins/
gef/
eclipse/
features/
plugins/
... etc ...
4、
eclipse/
dropins/
emf.link
最后一种就相当原来的 links 目录,只要写
path = ...
就可以了。
posted @
2008-04-13 13:02 哈哈的日子 阅读(2805) |
评论 (0) |
编辑 收藏
batch_size 即同时提交数据的数量,原本与事务并没有什么关系,但如果涉及到同一张表数据的同一种操作,可能就会发生微妙的关系了。
场景如下:
场景一:使用 spring 控制事务,将方法事务配置为 not_supported,向同一张表中插入两条数据,保证第一条数据正常插入,而第二条数据受约束(如唯一约束)插入失败。
预测结果:第一条数据成功,第二条失败。
实际结果:两条数据均失败。
原因:hibernate 将两条插入放到了同一个 batch 中,提交同时失败了。
场景二:同样使用 spring 控制事务,将方法事务配置为 not_supported,向第一张表中插入一条合法数据,成功,向第二张表插入数据,受约束(如唯一约束)插入失败。
预测结果:第一条数据成功,第二条失败。
实际结果:第一条数据成功,第二条失败。
原因:hibernate 分别插入数据并提交,在无事务的情况下,第一条成功,第二条失败。
那么如何让场景一得到预测结果呢,一个简单的解决方法,将 hibernate.jdbc.batch_size 设置为 1,即可。
所以,即使控制了事务,也未必能够得到期望的结果,还需要考虑某些特殊的场景带来的影响。
posted @
2008-03-06 14:18 哈哈的日子 阅读(1141) |
评论 (2) |
编辑 收藏
在学习 lua 的时候,看到了一个生成序列的一个递归算法,比起我以前的算法,要好得很多,学到了。^_^
package com.sea.pc;
public class Permgen {
public static void main(String[] args) {
Permgen permgen = new Permgen();
String[] ss = { "a", "b", "c" };
permgen.permgen(ss, 3);
}
public void permgen(Object[] os, int n) {
if (n == 0) {
for (Object obj : os) {
System.out.print(obj + "\t");
}
System.out.println();
} else {
for (int i = 0; i < n; i++) {
Object t = os[i];
os[i] = os[n - 1];
os[n - 1] = t;
permgen(os, n - 1);
os[n - 1] = os[i];
os[i] = t;
}
}
}
}
posted @
2007-10-21 15:18 哈哈的日子 阅读(197) |
评论 (2) |
编辑 收藏
最先遇到的问题是编译的问题,我觉得环境对于一个新手有致命的阻碍作用。可能有人会说,去 google 一下不就完了,可是,实际上新手可能根本就不知道要 google 什么,我学 c 很多次放弃基本上都是环境原因。
这次弄 c 主要是为了和 lua 脚本语言集成,其实用 java 也有得选,luajava 不失为一个好的选择。但是长久以来的小体积什么都不依赖就能运行的 c 程序(.exe)文件对我很有吸引力,因为发布 java 程序就意味着要伴随十几M的jre(哪位知道不用jre的,请务必教教在下),所以,这次决定了,学习 c!
IDE 嘛,就选择了 CDT,实在是太习惯eclipse了,然后就是用 Programing in lua 中copy个例子下来,编译。我靠,错误,想了想,把 lua 的那些头文件加进来,把 lib 目录也加进来,我靠,还是编译不过,崩溃了,放弃。
sigh,c编译是我永远的痛!
一天在公司里,突然想起有个同事是弄 c 的,问问他吧。他人好热情,给我讲了好多。终于明白了,不仅要把 lib 目录加进来,还要指定具体的 lib 文件名字,编译通过,迎来了全新的世界。
经过一段时间的乱弄,终于如愿的把程序编译成动态链接库(windows下的dll),引入到 lua 里,插曲:lua 原来引入动态链接库是全局的 function 叫 loadlib ,我靠,升级到 5.1 竟然改成了 package.loadlib,害我 google 了半天。不过其实 5.1 的 changelog 里是说了的,^_^
我的 lua 终于可以调 c api 了,快乐之情无法表达啊!
来,再做一个使用 c 访问网页的功能,找了半天,决定使用 wininet 库,跑到 ms 的 msdn 上一顿猛找啊,终于,皇天还不负我这个学c有心人,终于在一个 xx 角落里找到了 wininet 的 api,我,我终于可以用他连网了!
经过一会儿的奋斗,终于,从
http://localhost:8080/index.html 中,把自己 tomcat 的主页访问了出来,快乐的瞬间!
马上就发现这个程序有间歇性失忆,一会儿好用,一会儿不好用。共发生过以下几种失忆情况:
1、把代码 copy 到一个函数中,在 main 调用这个函数,程序运行失败!
2、删除了调试用的 printf 方法,程序运行失败!
3、夸张,这个是最夸张的!把 BOOL b = HttpSendRequest(req, NULL, 0, NULL, 0); 前面的 BOOL b = 去掉,只留下 HttpSendRequest(req, NULL, 0, NULL, 0);,失败!!!!!!!这样居然都失败!加上去就好好的运行。精神一度处于崩溃的边缘,眼睛里的血丝一度超过狼人!
左思右想,左改右改,死都不行!
一个声音高叫着:放弃吧,玩会游戏!
放弃了,md,再也不被 c 玩了,俺要玩俺的 java 去,下载 luajava 去,不理你了!
临行前,我恋恋不舍地看了一眼俺的c代码,我靠,突然发现这 xx 代码居然有个问题,这真是豁然开朗啊。
原来是。。。(省略一万字)
LPDWORD n; // LPDWORD 是个 unsigned long *
没初始化!
天啊,这点问题就让我找了这么久啊,我改。
DWORD a = 0;
LPDWORD n = &a;
一切正常。
世界终于清静了……
posted @
2007-09-06 21:50 哈哈的日子 阅读(485) |
评论 (1) |
编辑 收藏