随笔 - 175  文章 - 202  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

第一个Blog,记录哈哈的生活

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜

因为需要在两台机器上同步一些数据,在网上找了一下,发现 cwRsync 是可以的。尝试了一下

1、安装
安装的过程很简单,也很顺利,从 cwRsync 网站上下载的 server and client ,都安装了一下,不过后来发现,其实是不需要安装 client 的,只要 server 就可以了,server 包括了 client 的功能。安装完 server 后,会在 service 中增加 Rsync 和 ssh 服务。

2、配置
配置了一下 rsyncd.conf

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid

# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[test]
path = /cygdrive/c/work
read only = false
transfer logging = yes

只是将 [test] 中的 path 改成了我本机的备份目录

[test]
path = /cygdrive/d/backup
read only = false
transfer logging = yes

3、数据同步
因为只是最简单的数据同步,所以就不使用 ssh 了,直接启动 rsync 服务就可以了。然后按照 usage 上面教的。

rsync -av /cygdrive/d/test localhost::test

完成了数据的同步工作,一切顺利。顺便说一下,/cygdrive/d 是安装完 cwRsync ,会自动将系统上所有的盘 mount 成 /cygdrive/x ,x 表示盘符,小写的,并把安装目录 mount 成 / 了。

4、绿色安装
我将 cwRsync copy 到另一台机器上,试图不安装就启动 cwRsync server,启动过程比较正常,只要运行 rsync --config=$config_file --daemon --no-detach 就可以了,这里面的 $config_file 指的是前面配置的 rsyncd.conf ,路径要写成 /cygdrive/d 这样的形式。

5、安装成服务
程序包中带了 cygwin 的 cygrunsrv ,可以通过这个命令将 rsync server 做成 windows 服务,但我试了一下,路径中有空格没有成功,命令是这样的

cygrunsrv.exe -I "Rsync" -p /cygdrive/d/cwRsyncServer/bin/rsync.exe -a "--config=/cygdrive/d/cwRsyncServer/rsyncd.conf --daemon --no-detach" -f "Rsync"

也很顺利的安装成服务了。

6、问题二
惨的是当我在第二台机器上同步数据的时候,权限却成了问题,同步过去的文件(目录)所有者是 SYSTEM,不是我,而且我没有访问的权限,只有在安全中把自己加进来(我用管理员帐户),给自己权限,才能访问。

或者在 cygwin 下使用 chmod 给自己授权,和在 windows 中给自己授权没什么区别。

最后:

问题2已经解决
方法:只要把 cwRsyncServer 这个目录 mount 到 / ,就可以了,估计是 rsync 同步数据的时候,会调用 /bin/chmod 来授权,如果是安装版的,这个目录会在安装的时候 mount 好。 (好象不是这个问题了)
posted @ 2007-05-20 14:36 哈哈的日子 阅读(13861) | 评论 (2)编辑 收藏

PMD 在 check 的时候,告诉我不要使用 new Interger(int i) 方法,要使用 Integer.valueOf(int i) 方法,如我所料,Integer 将-128~127 之间的 Interger cache 了,好啊,就用这个方法了。

后来悲惨的发现,JDK 5.0 才有这个方法 1.4 中是没有的。

苦在我开发的时候使用的是 JDK 5.0 ,部署在 1.4 的环境中,运行出错。

sigh,不小心被 PMD 撞了一下,它怎么也不告诉我不能用在 1.4 里啊。^_^

posted @ 2007-05-16 10:41 哈哈的日子 阅读(267) | 评论 (0)编辑 收藏

今天安装了一下 jira 的 svn acceptance,遇到了不少问题,实际上这些问题在之前学习 subversion hooks 的时候也有遇到,没记下,又弄一次,真是心烦得很。

1、hooks 中不能使用任何环境变量,svn acceptance 使用的是 pre-commit ,里面调用 python 的脚本。python 要写绝对路径,脚本 jira-client.py 也要写绝对路径,将 python 放在 path 中是没有用的。(这个在 svn acceptance 安装步骤中有,没有细看就安装,苦啊!)
2、pre-commit.bat 中路径或者使用老 DOS 的方式,如 @D:\Progra~1\Python25\python.exe" E:\SVN\repos\hooks\jira-client.py %1 %2。或者加上双引号,如@"D:\Program Files\Python25\python.exe" E:\SVN\repos\hooks\jira-client.py %1 %2
3、jira-client.py 中的路径也一样,或者使用 DOS,如 svnlookPath = 'D:\\Progra~1\\svn-win32-1.4.3\\bin\\svnlook.exe'。或者加上双引号,如svnlookPath = '"D:\\Program Files\\svn-win32-1.4.3\\bin\\svnlook.exe"'
4、hooks 中 exit 1 就是拒绝提交,exit 0 或什么都不写就是允许提交(windows 2000 中好象必须要 exit 0)
5、提交显示的错误信息在脚本中放在 system err 中,bat 文件只要 echo "haha" >&2 就可以了,python 中 print >> sys.stderr, 'haha' 就可以了
6、用户信息是通过 svnlook author 得到,注释信息是通过 svnlook log 得到

ps:subversion acceptance plugins 安装容易得很

posted @ 2007-05-14 11:14 哈哈的日子 阅读(1376) | 评论 (0)编辑 收藏
奇怪为什么 fisheye 一直都找不到 crack?难道是我寻找 crack 的水平有限?
崩溃了,自己弄了一个,再这么下去,都要成愤青了。

fisheye-1.3_20070424_crack.rar


copy 到 fisheye 安装目录,针对 fisheye 1.3 build 20070424 版本
posted @ 2007-05-13 22:53 哈哈的日子 阅读(2146) | 评论 (17)编辑 收藏
当数据库字段类型为 Number 时,IBatis 可以映射 Java 类型为 Integer,这样就一切没问题了。
不过这样比较麻烦,尤其是在使用 JDK 1.4 的时候。

如果选择映射为 int 类型,在数据库字段可以为 null 的情况下,需要设置 result 的 nullValue ,否则会出错。
posted @ 2007-04-30 16:17 哈哈的日子 阅读(2032) | 评论 (0)编辑 收藏
6.0 的 crack 不能用了,就自己弄了一个 7.0 的 crack ,如果有什么问题,给我留言。
http://www.blogjava.net/Files/haha1903/jp7.0-crack-20070530.rar
crack by Sea Chang
posted @ 2007-04-13 15:35 哈哈的日子 阅读(4605) | 评论 (21)编辑 收藏
教你如何注册msn.com的 邮箱


  在很久很久以前,我们注册的时候,可以选择注册hotmail.com还是msn.com的信箱。而现在微软把注册页面改掉了,进入hotmail.com只能注册以hotmail.com结尾的信箱了,而msn.com则找不到北了。而很多很多人还是很想注一个msn.com的,好记嘛,这么短小精悍。

  说了半天,到底怎么注册呢?简单!

  点这个链接https://accountservices.passport.net/reg.srf?ns=msn.com
就可以注册msn.com的信箱啦,哈哈哈~~~

  当然,如果你的电脑上装有msn browser的话,那用那个创建用户,就默认是msn.com的用户啦,不过好像那个玩儿在国内用的不多好像,我是两三年前用过的。



(提示:您必须在没用登陆 spaces或者 MSN hotmail油箱的前提下才可以申请 )

转自:http://my.opera.com/hotel/blog/show.dml/112387
posted @ 2007-04-11 20:13 哈哈的日子 阅读(9804) | 评论 (16)编辑 收藏
设置 Header Content-disposition 可以
如果设置为 attachment 就下载
如果设置为 inline 就直接打开

response.setContentType("application/msexcel");
加上
response.setHeader("Content-disposition", "attachment; filename=\"export.xls\"");

response.setHeader("Content-disposition", "inline; filename=\"export.xls\"");
posted @ 2007-02-06 16:47 哈哈的日子 阅读(1234) | 评论 (2)编辑 收藏
背景:
EasyMock 2 版本必须要 JDK5 才能使用 EasyMock 1.2 可以在 JDK 1.4 使用
也可以使用 Retrotranslator 将 EasyMock 2 版本改为 JDK 1.4 也可以使用的。
目前使用的是 EasyMock 2.2

准备:
先弄个接口 Haha 用来 Mock 的,两个方法
void haha(String s);
String hehe(String s);

开始 Mock:

静态导入 EasyMock
import static org.easymock.EasyMock.*;

然后
Haha haha=createMock(Haha.class);

无返回值的调用可以直接调用 Mock 方法

haha.haha("haha");

有返回值的可以

expect(haha.hehe("hehe")).andReturn("ok");

这样做完后

你要 replay(haha); 一下,表示录完 mock ,准备重放了。

就可以调用 haha.haha("haha") 了,同样的,调用 haha.hehe("hehe") 的返回值是 "ok"

全部调用完了,使用 verify(haha); 查看一下预期的调用是不是都调了,如果预期要调用一次,却没调,那就会 AssertionError 哦。

调用次数

上面这些都是默认调用一次,就相当于 expect(haha.hehe("hehe")).andReturn("ok").times(1); 或 expect(haha.hehe("hehe")).andReturn("ok").once();

如果想调用任意次,就 expect(haha.hehe("hehe")).andReturn("ok").anyTimes();

如果想最少调用一次,就 expect(haha.hehe("hehe")).andReturn("ok").atLeastOnce();

如果想调用 1 至 3 次,就 expect(haha.hehe("hehe")).andReturn("ok").times(1,3);

预期的结果

还可以 expect(haha.hehe("hehe")).andReturn("ok").andReturn("ok too").andThrow(new RuntimeException());

这样,第一次调用 haha.hehe("hehe") 时返回 "ok" ,第二次返回 "ok too",第三次调用就比较惨了,会抛出一个 RuntimeException,需要注意
的是,如果抛出的异常是 unchecked 的,就是 Runtime 的,就随便抛,如果是 checked 的,那就一定要抛这个方法定义的,否则会在 andThrow 这行出 IllegalArgumentException 。

终极解决办法还可以使用 andAnswer(IAnswer<T> answer) 传一个实现 IAnswer 接口的实例,这个接口只有一个方法
T answer() throws Throwable;
随便你返回什么,或是抛出什么异常。

调用顺序

不过如上面所说,haha.haha("haha") 与 haha.hehe("hehe") 是没有顺序的,将 createMock 改成 createStrictMock 或在 createMock 后面加一行 checkOrder(haha,true) 就可以了,这时,就一定要按照定义的顺序来调用了。

如果多个不同的 mock 也要保证顺序呢?那就不能使用 createMock 来创建这些 mock 了,因为每次 createMock 都会使用一个新的 IMocksControl 实例来单独控制这个 mock ,我们希望将多个 mock 用同一个 IMocksControl 控制,只需要

IMocksControl ctrl = createStrictControl();
Haha haha1= ctrl.createMock(Haha .class);
Haha haha2 = ctrl.createMock(Haha .class);

haha1.haha("haha1");
haha2.haha("haha2");

ctrl.replay();

就可以了

预期的参数

刚才 haha.haha("haha") 中的 "haha" 就是预期的参数,EasyMock 提供了很多预期参数的方法,比如 haha.haha(eq("haha")),与前面的方法功能完全一样
haha.haha((String)anyObject)  随便你传什么参数都没问题。
haha.haha(not(eq("haha"))) 这个只要不传 haha ,其它什么都成

同样可以自定义,只要调用     public static void reportMatcher(IArgumentMatcher matcher) 方法,将自定义的 IArgumentMatcher  传进去就可以了,这个接口有两个方法 boolean matches(Object argument)  和 void appendTo(StringBuffer buffer) 第一个方法的参数是调用实际传入的值,返回是否匹配,第二个方法是错误时向 buffer 中 append 错误信息。

将方法弄成 Stub

Stub 方法,我想应该就是随便调,爱怎么调就怎么调,返回的都是那个值,最后也不会验证到底调用了多少次。
如果想把一个方法弄成 Stub,无返回值的只要 asStub() 就是 expect(haha.haha("haha")).asStub() ,有返回值的就 andStubReturn() , andStubAnswer() 这样就可以了。

友好的Mock

我们使用 createMock 创建出来的 mock 对象,如果没有录过,调用这个方法都会出 AssertionError ,但如果使用 createNiceMock 就不会了,会返回 0 , null , false 这样的。
posted @ 2007-01-18 23:03 哈哈的日子 阅读(3062) | 评论 (5)编辑 收藏
RandomAccessFile file  =   new  RandomAccessFile(lockFile,  " rw " );
FileChannel channel 
=  file.getChannel();
FileLock tryLock 
=  channel.tryLock();
System.out.println(
" try lock ok  "   +  tryLock);

 

posted @ 2007-01-17 09:34 哈哈的日子 阅读(391) | 评论 (0)编辑 收藏
仅列出标题
共17页: First 上一页 9 10 11 12 13 14 15 16 17 下一页