2009-03-24

如何設定 Eclipse 中變數的 highlight

啟用: 按下工具列的 "Toggle Mark Occurrences" 就有 highlight 變數的功能 更改 highlight 時的背景色 Window -> Preferences -> General -> Editors -> Text Editors -> Annotations -> Occurrences

2009-03-20

IE8 正式版的 bug?

base 元素可規定頁面中所有鏈接的基準 URL。 通常情況下,瀏覽器會從當前文檔的 URL 中提取相應的元素來填寫相對 URL 中的空白。 使用 base 標籤可以改變這一點。瀏覽器隨後將不再使用當前文檔的 URL,而使用指定的基本 URL 來解析所有的相對 URL。這其中包括 a、img、link、form 標籤中的 URL。 但是在 IE8 裡面有個 bug,就算設定了 base標籤,它還是會使用當前的 URL 提取相應的元素,然後再用 base 設定的 url 去提取元素。如此一來,造成 server 不必要的負擔,不知道有沒有人有解決方式?還是這其實是我對標準的誤解? 假設我有下面這個 index.html 放在 ui 的目錄: 當利用 IE8 去開 index.html 時,其會對 server 做以下的 request:
http://scott0228.blogspot.com/ui/index.html
http://scott0228.blogspot.com/main.css
http://scott0228.blogspot.com/main2.css
http://scott0228.blogspot.com/mootools.js
http://scott0228.blogspot.com/ui/mootools2.js
http://scott0228.blogspot.com/ui/mootools3.js
http://scott0228.blogspot.com/ui/main3.css
http://scott0228.blogspot.com/mootools2.js
http://scott0228.blogspot.com/mootools3.js
http://scott0228.blogspot.com/main3.css
IE8 對於 base 的正確處理只會到第一個 script 之前,之後的 script 及 link 都會取兩次,一次是 base 的,一次是當前的 url 目前 IE8 對於第一個 script 的 src 只取以 base 為基楚的檔案,第二個以後,及其之後的 link 都會取兩次,這樣會造成 server 的 loading 及程式的錯誤,不知道有法有辦法解決?

2009-03-15

Java Transaction Strategies

Transaction Management 對於企業交易是相當重要的,今天剛好看到 IBM DeveloperWorks 上有一些文章,說明的滿不錯的,介紹給大家知道: http://www.ibm.com/developerworks/cn/java/j-ts1.html?ca=drs-tp4608 裡面有參考了 Java Transaction Design Strategies ,個人覺的是本相當不錯的書,非常值得研究瞭解。

2009-03-11

Partition Table Fix

今天有個同事拿了顆 sata 的硬碟給我,說因為裝了 ghost 9 後造成無法開機,本來想說用 Partition Manage 來改一下開機磁區就好,結果回應該該硬碟的磁區錯誤,可是在 xp 中還是看的到磁區,真是見鬼了。後來用 Partition Table Doctor 去看,才發現原來裡面的磁區已經有問題,Ghost 產生的磁區蓋到既有的開機磁區,造磁碟分割軟體沒辦法使用。而 Partition Table Doctor 需要付費才有辦法修復,後來上網找到一個小軟體:TestDisk,可以用來針對分割磁區檢查、救援,不論是因為手賤誤刪了磁碟分區,或是因為安裝作業系統、感染病毒而不慎毀損或遺失硬碟分區表,他都有辦法幫你救回來。 TestDisk 可以在多種作業系統下執行,也支援多種檔案系統,有需要人可以下載試試嚕。 使用方法:
  1. 將下載回來的 TestDisk 解壓縮,找到並執行置於「win」中的「testdisk_win.exe」。
  2. 在它的歡迎訊息之下的,選擇您要如何處理 Log 檔案。
  3. 選定硬碟後,選擇「Proceed」後按「Enter」。
  4. 選擇該硬碟的檔案系統類型,一般的Windows系統請選擇第一個[ Intel ],然後按「Enter」即可。
  5. 按下「Analyse」開始分析現有分區結構和搜尋遺失的分區。另外還有「Advanced」選項可以將分區設定成開機磁區或改變分割區類型、「Geometry」選項可以修改分區結構參數及大小、「MBR Code」選項可以將主要開機磁區代碼寫入第一分割區。
  6. TestDisk就會幫你找出所有磁碟分區,確定無誤後,以選擇「Save」後,按下「Enter」,最後再按「Quit」離開程式
  7. 重新開機後就可看到原本消失的磁碟分區了。
PS. 進行『磁碟救援』並無法保證絕對能完整救回您硬碟裡的資料,相反的,進行『磁碟救援』很有可能會反而使得您硬碟裡的資料一去不復返。您應該將『磁碟救援』視為最後的救援手段。非必要請勿輕易嘗試! 參考: TestDisk Step By Step官網的教學,圖、(英)文並茂。 Data Recovery Examples官網還舉了一些範例。

2009-03-10

Continuous Integration

Continuous Integration 是我們在開發時的一個好方法,Fontys 大學 的 Georg Fleischer 寫了一篇有關持續整合的報告。報告裡討論了用戶的需求和不同的產品如何滿足這些需求,並對於用戶和工具開發提供了不錯的參考資料。它裡面包涵了 12 種產品,算是相當有參考價值的一份報告。

2009-03-06

如何刪除不合法檔名的檔案

之前曾經下載 portable 版的 open office ,結果解壓縮後有個檔案刪不掉,今天發現,原來只要利用 command 模式,用短檔名來刪除即可;那要怎麼做呢,方法如下:
  1. 使用 cmd 進入命令列模式
  2. 用 dir /x 察看檔案的 8.3 短檔名
  3. 直接 del 那個短檔名即可。
參考: http://blog.miniasp.com/post/2008/01/How-to-delete-file-with-invalid-filename.aspx

2009-02-25

Windows 下的 su

最近因為用到 PostgreSQL ,而 PostgresSQL 有個限制,不能以【擁有系統管理者權限的使用者】來執行,因此在 Linux 下,就需要以 su 來改變身份去執行,那 windows 下要怎麼辦呢?小弟找到了兩個方法:
  1. sysinternals 裡的 psexec
  2. Windows 內建的 runas
小弟先在系統中建立了一個 postgres 的帳號,然後利用上述兩個軟體來執行。 使用 psexec 的方法如下: psexec -u postgres -p postgres D:\pgsql\bin\postgres -D D:\pgsql\data 使用 runas 的方法如下: %windir%\System32\runas.exe /user:ComputerName\postgres "D:\pgsql\bin\pg_ctl start -D D:\pgsql\data" 使用 psexec 的好處是,可以直接將密碼放在參數上,這樣不用每次都去 keyin 密碼。而使用 runas 的話,每次都要輸入密碼,另外也可以加上 /savecred 參數來存儲存密碼(XP Home 是不能用的)。

2009-02-24

sockstat

之前曾經介紹過如何查看 port 被占住的方式,只是在 Linux 下要下的指令比較長,今天剛好到有人介紹:sockstat,原本是在 freebsd 下用來查看的工具,現在有人將他改寫成 Linux 版,因此 Linux 下也可以使用這好用的工具了。
$ sockstat
USER     PROCESS              PID      PROTO  SOURCE ADDRESS            FOREIGN ADDRESS           STATE
chihchun conduit.real         7902     tcp4   *:3400                    *: *                      LISTEN
chihchun dropboxd             7989     tcp4   10.11.12.231:49912        75.126.170.58:443         CLOSE_WAIT
chihchun pidgin               8651     tcp4   10.11.12.231:46378        66.163.181.178:5050       ESTABLISHED
chihchun ssh                  22871    tcp4   127.0.0.1:6667            *: *                      LISTEN
chihchun ssh                  22871    tcp4   127.0.0.1:6667            127.0.0.1:54522           ESTABLISHED
chihchun ssh                  28346    tcp4   127.0.0.1:1100            *: *                      LISTEN
chihchun ssh                  28346    tcp4   127.0.0.1:2500            *: *                      LISTEN

2009-02-22

好用工具:Junction ( Windows 版的 symbolic link )

Linux 上有個 ln 指令可任意建立 link ( 包括 hard links 與 symbolic links ),這是個很好用的東西,在 Vista 上也有個 mklink 可以用來做相同的事,不過在 Windows XP 之前的環境卻沒有內建相對應的程式,而 Junction 就是一個可以替代的工具。 其使用說明如下:
Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com

The first usage is for displaying reparse point information, and the
second usage is for creating or deleting a NTFS junction point:

usage: junction [-s] [-q] 
    -q     Don't print error messages (quiet)

    -s     Recurse subdirectories

usage: junction [-d]  []
    -d     Delete the specified junction
    example: junction d:\link c:\winnt
新增: junction c:\Profiles\User1\MyDocs "d:\tmp\My Documents" 刪除: junction -d c:\Profiles\User1\MyDocs 如果不是透田 junction 去刪除 link,而是直接用檔案總管去刪除 link,會造成原來的資料被一併刪除,請特別注意。 另外, 有個 NTFS Link ext 可以讓我們使用 GUI 的方式進行 link。 參考: http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=1276558

2009-02-21

License Management for java

前陣子公司有打算將產品加上 License 的管控,當初的想法是取得 Mac Address 來加密比對,但沒有實際進行實作,今天剛好看到市面上已經有此相關的產品可以直接拿來套用了,因此先把它記下來: truelicense 是 opensource 的,剛好可以拿來研究嚕。當然,這兩套程式都有提醒說,在使用的時候,記得使用 obfuscation 來為程式碼加密,否則有心人事還是可以很簡單的破解它。

2009-02-07

JNI

目前 java 與 dll 溝通的技術主要有以下幾種:

目前看起來好像是 JNative 比較方便。

參考文章: JNI技術實踐小結

2009-02-03

SSH Tunnel

之前在客戶那,沒辦法使用 msn ,後來發現可以利用 ssh tunnel 來 proxy 連線。在 windows 平台下,我們可以使用 putty 或是 plink 來建立 ssh tunnel,因為這兩個都不支持密碼的在檔,所以我通常是使用 MyEnTunnel ,它是利用 plink 來進行連線,可以存下連線資料,方便我們進行連線。 那我們如何利用 MyEnTunnel 建立一個 socket proxy 呢?其使用部驟如下:
  1. 首先我們下載 MyEnTunnel 及 plink ,然後解壓縮放在一起:
  2. 執行 myentunnel.exe,設定連線資訊,記得勾選【Enable Dynamic SOCKS】:
  3. 點選 Connect,切換到 Status 頁即可看到是否連線成功
當線線成功後,我們就可以讓 firefox 或是 msn 利用此通道進行網頁的連線: Firefox:
  • 選擇【工具】=>【選項】
  • 點選【進階】=>【網路】=>【設定】 選擇【手動設定 Proxy】將最下面的【SOCKS 主機】設定到本機端的 7070 port(對應 MyEntunnel 上所設定的 port),然後我們就可以利用 firefox 連線到 http://myip.easylife.idv.tw/ 來驗證是否是透過 ssh server 連線了。
MSN:
  1. 【選項】=>【連線】=>【進階設定】
  2. 設定 SOCKS 為本機端及 Port 為 7070 按下測試:
  3. 如果 SOCKS 可連線,便可看到以下的訊息
參考: PuTTY自帶的plink.exe實現ssh繞牆技術 PuTTY - SSH Tunnel 運用備忘

2009-02-02

背景執行 Unit Test

Background Unit Testing: New Evolutions in Unit Testing and IDE Integration 裡面介紹了兩個 eclipse 的 plugin 來讓我們即時的執行 Unit Test ,這樣的好處就是我們一改動程式,就可以立即知道是否有造成 unit test 錯誤,感覺相當不錯,可以看看嚕。裡面介紹的兩個工具如下: 第二個還有 idea 的 plugin ,而且是 open source 的,改天有空而且電腦有升級後再來玩玩看。XD

2009-01-11

查看 port 被哪個程式占住了

一直以來,我都懶的去記 windows 的指令,而是使用 CurrPorts 這方便的工具來查,今天剛好在網路上看到記令,就把它記下來嚕,雖然比較麻煩,但是在沒有工具的情況下還是不錯用的:

netstat –ano a:表示列出所有連線中或 listening的連線。 n:表示使用數字形態列出,即 http 會以 80 顯示,ftp 會以 21 顯示。 o:則為列出該程式的 PID。

Noname

知道 PID 之後,接著就可以使用【工作管理員或是【tasklist】查看該 PID 是由哪一支程式所執行。

在 Linux 底下則是要用下面的指令:

netstat -tulnp

t:顯示 TCP u:顯示 UDP l:只顯示 listening 的 processes n:不要解析 IP address names 或 port numbers p:顯示 listening ports 的 process 名稱

也可以使用:

lsof -i

2009-01-09

Improve your jQuery - 25 excellent tips

最近開發網頁,都儘量使用 jQuery 來減少程式碼的撰寫,今天剛好看到網路上這篇文章,值得推薦:Improve your jQuery - 25 excellent tips,裡面有一些小技巧讓你的程式跑的更快。

依條件決定呼叫的函數

jQuery 提供了很多好用的涵數讓我們可以少寫很多 Javascript 程式碼,像 show() 及 hide() 用來顯示或隱藏元素,及 toggle() 可以在顯示與隱藏間來回切換,但當我們要依條件決定顯示或隱藏元素時,寫法還是有點囉嗦:

今天看到有人建議:suggestion to reduce show/hide code,不知道 jQuery 會不會加,不過裡面給我發現了 Javascript 的一個奇特的程式寫法,也可以少掉一些 code :

只能說,javascript 真是個神奇的語言。

2009-01-07

Tomcat Resource 使用的 lib 擺放位置

在網路上看到在 Tomcat 中設置 Datasource,都需要將 jdbc driver 放到 Tomcat 的 lib 目錄下,之前在研究使用 JTA 時,才發現原來並不一定要將 jdbc driver 放在 Tomcat 的 lib 目錄下。之前說過 Tomcat 載入 class 的順序,當我們在 context.xml 中宣告了 Resource ,如果該 Resource 的 factory 是使用到 Tomcat lib 下的 class ,此時 classloader 就只會找 Tomcat lib 目錄下的 class 來載入。

上面的寫法,使用的是 Tomcat 預設的 Factory 來啟始 Resource,如果 jdbc driver 沒有放在 Tomcat 的 Lib 下,就會無法使用。

此寫法,當我使用 factory 是 com.atomikos.tomcat.BeanFactory,我是將其 jar 檔都打包在我的 war 檔裡,因此 Tomcat 在載入此 Resource 時,會使用的是 WEB APP 的 classloader ,因此 jdbc driver 也只要放在 web app 下即可被載入。

如何利用 Java 5 Concurrency 來加速程式

好文共享:Accelerating Applications with Java 5 Concurrency

如何動態取得 Windows 系統特殊資料夾

怎麼利用 Java 去取得 windows 系統上的特殊資料夾呢? 在 dot net 平台上,微軟有準備好Environment.SpecialFolder 列舉型別 來給開發者用,而 java 平台上,目前有看到 winfoldersjava 可以使用,目前似乎不支援中文,用法如下:

import java.io.File;

import com.catnapgames.winfolders.WinFoldersJava;


public class Test {
 public static void main(String[] args) {
  System.load(new File("").getAbsolutePath() + "\\WinFoldersJava-1.0.dll");
  System.out.println("CSIDL_PERSONAL\t\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_PERSONAL));
  System.out.println("CSIDL_LOCAL_APPDATA\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_PERSONAL));
  System.out.println("CSIDL_MYPICTURES\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_MYPICTURES));
  System.out.println("CSIDL_COMMON_APPDATA\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_COMMON_APPDATA));
  System.out.println("CSIDL_COMMON_DOCUMENTS\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_COMMON_DOCUMENTS));
  
 }
}

這程式目前對中文似乎不支援。如果只是要取得【我的文件夾】目錄的話,可以直接使用 Swing 的功能取得,中文沒問題:

javax.swing.filechooser.FileSystemView.getFileSystemView().getDefaultDirectory()