隨筆 - 175  文章 - 202  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          第一個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 哈哈的日子 閱讀(13891) | 評論 (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 哈哈的日子 閱讀(278) | 評論 (0)編輯 收藏

          今天安裝了一下 jira 的 svn acceptance,遇到了不少問題,實際上這些問題在之前學習 subversion hooks 的時候也有遇到,沒記下,又弄一次,真是心煩得很。

          1、hooks 中不能使用任何環境變量,svn acceptance 使用的是 pre-commit ,里面調用 python 的腳本。python 要寫絕對路徑,腳本 jira-client.py 也要寫絕對路徑,將 python 放在 path 中是沒有用的。(這個在 svn acceptance 安裝步驟中有,沒有細看就安裝,苦?。。?br>2、pre-commit.bat 中路徑或者使用老 DOS 的方式,如 @D:\Progra~1\Python25\python.exe" E:\SVN\repos\hooks\jira-client.py %1 %2?;蛘呒由想p引號,如@"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 哈哈的日子 閱讀(1394) | 評論 (0)編輯 收藏
          奇怪為什么 fisheye 一直都找不到 crack?難道是我尋找 crack 的水平有限?
          崩潰了,自己弄了一個,再這么下去,都要成憤青了。

          fisheye-1.3_20070424_crack.rar


          copy 到 fisheye 安裝目錄,針對 fisheye 1.3 build 20070424 版本
          posted @ 2007-05-13 22:53 哈哈的日子 閱讀(2153) | 評論 (17)編輯 收藏
          當數據庫字段類型為 Number 時,IBatis 可以映射 Java 類型為 Integer,這樣就一切沒問題了。
          不過這樣比較麻煩,尤其是在使用 JDK 1.4 的時候。

          如果選擇映射為 int 類型,在數據庫字段可以為 null 的情況下,需要設置 result 的 nullValue ,否則會出錯。
          posted @ 2007-04-30 16:17 哈哈的日子 閱讀(2049) | 評論 (0)編輯 收藏
          6.0 的 crack 不能用了,就自己弄了一個 7.0 的 crack ,如果有什么問題,給我留言。
          http://www.aygfsteel.com/Files/haha1903/jp7.0-crack-20070530.rar
          crack by Sea Chang
          posted @ 2007-04-13 15:35 哈哈的日子 閱讀(4633) | 評論 (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 哈哈的日子 閱讀(9814) | 評論 (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 哈哈的日子 閱讀(1248) | 評論 (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 哈哈的日子 閱讀(3078) | 評論 (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 哈哈的日子 閱讀(409) | 評論 (0)編輯 收藏
          僅列出標題
          共17頁: First 上一頁 9 10 11 12 13 14 15 16 17 下一頁 
          主站蜘蛛池模板: 阜新市| 长宁区| 博白县| 灯塔市| 临安市| 荃湾区| 礼泉县| 新竹县| 康平县| 遵义市| 游戏| 如皋市| 定远县| 玉环县| 庆云县| 洛南县| 平塘县| 西和县| 喀什市| 贵州省| 抚州市| 陵川县| 叶城县| 阳谷县| 中宁县| 南汇区| 宜宾县| 柳河县| 盐池县| 永安市| 紫金县| 西城区| 枞阳县| 阳城县| 安庆市| 湘阴县| 罗定市| 清镇市| 石阡县| 兴仁县| 永州市|