2008-12-31
ThinkPad 還原
2008-12-28
如何取得目前運行的 Java Process
在 JDK 1.6 中,有一個 JConsole 的工具,可以用來監看目前運行中 Java Process 的狀況。其在啟動時候,會列出目前運行的 Java process 來給使用者選擇要監控哪個 process。如果我們也希望取到該 List ,要如何處理呢?今天剛好在網路上看到,就留下來做記錄。
import sun.tools.jconsole.*; import java.util.*; public class Main { public static void main(String[] args) { Map map = LocalVirtualMachine.getAllVirtualMachines(); Iterator iter = map.values().iterator(); LocalVirtualMachine vm = null; while (iter.hasNext()) { vm = (LocalVirtualMachine)iter.next(); System.out.println(vm.displayName()); } } }
classpath 必需加上 jconsole.jar 和 tools.jar 兩個 jar
參考:
http://w3hjava.com/uncategorized/handling-java-code-from-another-java-code/
2008-12-26
好的測試應該具備哪些特質?
什麼樣的測試算是好測試?我們又該怎麼知道如何編寫好測試?
Kent Beck斷定,好的測試應該具備下列條件:
- 互相隔離的(不受其他測試的表現形式、是否存在、執行結果的影響)
- 自動化的
- 編寫快
- 運行快
- 獨一無二(為開發人員提供自信,而不會由其他測試提供信息,與其他測試不相關)
Roy Osherove 補充:好的測試有三個基本屬性:
- 可維護
- 值得信賴
- 易於理解。
Mike Hill的列表要更長:
- 它會很短,通常只有十來行代碼。
- 它不會測試運行程序內部的對象,但是會測試為了測試目的而構建的應用內部的對象。
- 它只會調用很小的一部分代碼,通常是某個函數的某一分支。
- 它是灰盒的形式編寫的。也就是說,它運作的方式像是黑盒,但是有時又會利用白盒的長處。(一般來說,這是避免組合問題的重要因素。)
- 測試要符合生產代碼的編碼標準,比如,團隊目前對於優秀編碼的最佳看法。
- 應用的眾多小測試構成了一個「提交關卡」。這就是說,開發人員可以在所有小測試通過的情況下提交代碼,否則(強烈建議、甚至不惜手段)阻止他們提交。
- 測試應對接受測試的對象有完全的控制權,因此應是自包含的。也就是說,它不會依賴不屬於測試代碼及其依賴圖的任何其他對象。
- 它的運行時間非常短。
- 它會先於要測試的代碼變更之前編寫。
- 通過一系列slip-and-fake技巧,它會避免使用所有「糟糕」的collaborator。
Mike和Ron Jeffries提醒我們:TDD的核心價值是要簡化設計、提升開發效率;代碼質量的提升和bug數量的減少是因此而帶來的重要好處。
Jeremy Miller補充了良好單元測試應該具備:
- 與順序無關,並且是隔離的。運行測試的軟件可以按照以任何順序運行。
- 意圖明確。最好的單元測試應該能夠告訴閱讀者,一個對象的API是如何準備被調用的。
- 易於設置。
最後,Ed Burnette 寫到:要讓你的單元測試在任何方面都可以重複;測試邊界條件,並且要一直保持測試的通過率是100%。
2008-12-25
幾個可在遠端桌面中使用的快速鍵
在公司裡每天都在不同的遠端桌面(Remote Desktop)上工作,但是很多按鍵在非全螢幕下都是不能用的,若要在非全螢幕的情況下使用的話,就必須用另一組快速鍵來操作。
本機 | 遠端桌面 | 說明 |
---|---|---|
CTRL + ALT + DEL | CTRL + ALT + END | 顯示 [Windows 安全性] 對話方塊 |
- | CTRL + ALT + BREAK | 在視窗和全螢幕顯示模式間切換。 |
Win Key 或 CTRL + ESC | ALT + HOME | 顯示 [開始] 功能表。 |
ALT + TAB | ALT + PAGE UP | 從左到右切換視窗 |
PrintScreen | CTRL + ALT + 數字鍵上的加號(+) | 將遠端的整個螢幕畫面複製回本機。 |
ALT + PrintScreen | CTRL + ALT + 數字鍵上的減號(-) | 將遠端的作用中的螢幕畫面複製回本機。 |
使用 Fiddler2 無法截取到封包的問題
之前在公司使用 Fiddler2 的時候,監控封包都沒什麼問題,在家裡的 eee-pc 上剛裝好時,好像也可以用,只是後來不知道為什麼,就是截取不到封包,今天上網查資料,才發現原來是因為 Fiddler 預設只會監控區域連線,而我使用撥接 ADSL 上網,它就沒有監控到,要解決這個問題透過以下方式解決:
在 Fiddler2 的 Options 中的 Connections 裡:
選取 Monitor all connections 讓 Fiddler 監控所有的連線。
另外網路上還有看到修改 HKCU\Software\Microsoft\Fiddler2 機碼的方式來處理,不過我沒試過,有興趣的可以試試。
http://blog.miniasp.com/post/2008/10/Fiddler2-can-not-capture-packets-when-using-3G-networking.aspx
讓IE執行Javascript更快速
只要加上一行,就可以讓IE更快的執行Javascript。
/*@cc_on _d=document;eval('var document=_d')@*/
測式範例
Before
var date = new Date(); for (var i = 0; i < 100000; i++) document; alert(new Date() - date); // 643After
/*@cc_on _d=document;eval('var document=_d')@*/ var date = new Date(); for (var i = 0; i < 100000; i++) document; alert(new Date() - date); // 145
解說
對 Internet Explorer 來說,要使用 document ,必須經過 window 。而上面那一行是讓 document 成為一個獨立的物件,不必透過 window ,因此速度就提昇了。
參考:
在 IE 中把 Browser 強制關閉的方法
Browser 都因為安全性的問題不允許強制關閉主視窗,但自己透過 window.open() 開啟的視窗可以控制強制關閉。
不過還是找的到方法處理:
IE 6
window.opener=null; window.close();
IE 7
window.open('','_parent',''); window.close();
參考:http://blog.miniasp.com/post/2008/01/How-to-force-close-the-browser-window-in-IE.aspx
2008-12-22
如何利用批次檔取得系統日期時間
之前曾經有想過要利用批次檔加上 windows 的排程來定時為測試用的資料庫進行備份,只是不知道怎麼取得目前系統日期時間來使用,最近剛好看到這幾篇文章,留下來做參考:
取得今天日期的年、月、日:
for /f "tokens=1-4 delims=-/ " %%i IN ("%date%") DO ( set year=%%i set month=%%j set day=%%k )
取得當下時間的時、分、秒、百分之一秒
for /f "tokens=1-4 delims=:." %%i IN ("%time%") DO ( set hour=%%i set minute=%%j set second=%%k set centisecond=%%l )
組合含有日期、時間的字串:
SET OutputDir=%year%%month%%day%_%hour%_%minute%_%second%_%centisecond%
指令取得上個月的月份(使用 SET /A,/A 可以做數值運算(arithmetic)):
@echo off rem 把日期裡的斜線拿掉;2008/10/21→20081021 set Today=%DATE:/=% set ThisYear=%Today:~0,4% rem 取回今天的年度月份;200810 set ThisMonth=%Today:~4,2% rem 本月份減1取得上個月份 set /A LastMonth=%ThisMonth%-1 rem 如果是1月份的話,要把年度減1 if "%LastMonth%"=="0" set /A ThisYear=%ThisYear%-1 if "%LastMonth%"=="0" set LastMonth=12 rem 如果是1月到9月時,左補零成為01~09 if "%LastMonth:~1,1%"=="" set LastMonth=0%LastMonth% echo Year=%ThisYear% echo Month=%LastMonth%
參考:
2008-12-16
突破AD查詢1000條限制
啟動 Ntdsutil.exe
Ntdsutil.exe 位於 Windows 2000 安裝 CD-ROM 上的 [支援工具] 資料夾中。- 請按一下 [開始],再按一下 [執行]。
- 在 [開啟] 文字方塊中,輸入 ntdsutil,然後按 ENTER 鍵。如果要隨時檢視說明,請在命令提示字元下輸入 ? 。
檢視目前的原則設定
- 在 Ntdsutil.exe 命令提示字元下,輸入 LDAP policies,然後按 ENTER 鍵。
- 在 LDAP 原則命令提示字元下,輸入 connections,然後按 ENTER 鍵。
- 在伺服器連線命令提示字元下,輸入 connect to server <伺服器的 DNS 名稱>,然後按 ENTER 鍵。如果要連線至目前您正在使用的伺服器。
- 在伺服器連線命令提示字元下,輸入 q,然後按 ENTER 鍵以返回前一個功能表。
- 在 LDAP 原則命令提示字元下,輸入 Show Values,然後按 ENTER 鍵。
- 如果它們存在的話,便會顯示原則。
修改原則設定
- 在 Ntdsutil.exe 命令提示字元下,輸入 LDAP policies,然後按 ENTER 鍵。
- 在 LDAP 原則命令提示字元下,輸入 Set <設定> to <變數%>,然後按 ENTER 鍵。例如: Set MaxPoolThreads to 8。 如果您將另一個處理器加入伺服器,則這個設定會變更。
- 您可以使用 Show Values 指令,確認變更。 如果要儲存變更,請使用 Commit Changes。
- 當您完成時,請鍵入 q,然後按 ENTER 鍵。
- 如果要結束 Ntdsutil.exe,請在命令提示字元下輸入 q,然後按 ENTER 鍵。
Web Debugger
- Live HTTP Headers
- HTTPGuideDog
- HttpFox 與 httpwatch 相當類似,還滿好用的
Debugging Deadlocks - Print All Stack Traces
private static void printAllStackTraces() { Map liveThreads = Thread.getAllStackTraces(); for (Iterator i = liveThreads.keySet().iterator(); i.hasNext(); ) { Thread key = (Thread)i.next(); System.err.println("Thread " + key.getName()); StackTraceElement[] trace = (StackTraceElement[])liveThreads.get(key); for (int j = 0; j < trace.length; j++) { System.err.println("\tat " + trace[j]); } } } 其內容是寫說用上面這 method 去印出 thread 中的相關資訊,以便發現是哪個 thread 造成的 lock。
利用Microsoft Office Document Image Writer的ActiveX元件做OCR
2008-12-14
Notepad++
- Alt+shift+方向鍵
- Alt+mouse 左鍵
- Edit->Column Editor => 插入文字
2008-12-10
查詢 IP 對應的電腦
nbtstat -a 電腦名稱:查該電腦所提供的網路共享資源名稱,與網路卡硬體位址
nbtstat -A IP:查該電腦所提供的網路共享資源名稱,與網路卡硬體位址
nbtstat -n :查本機電腦所提供的網路共享資源名稱
nbstat -s :列出目前與本機電腦建立網站連線的遠端電腦名稱與資料量大小。
nbstat -S :列出目前與本機電腦建立網站連線的遠端電腦IP名稱與資料量大小。
參考:http://www1.cpshs.hcc.edu.tw/leson/netadm/nbtstat.htm
2008-12-07
JTA 的實作
2008-12-05
免費的驅動程式備份工具
DriverBackup:http://sourceforge.net/projects/drvback/
DriverMax:http://www.drivermax.com/
雖然沒用過,但這對重灌系統應該很有用吧,先留記錄,以備不時之需。 參考:http://blog.soft.idv.tw/?p=4232008-12-04
文件編碼自動偵測
Eclipse 常用 plugin
- M2Eclipse:Maven 的 plugin ,讓我們可以在 eclipse 整合 maven 開發。
- subclipse:整個 svn 來進行程式碼管控
- Implementors:方更 trace 程式,當我們程式有多種 implement 時,可以利用這個 plug in 來追踨進 method 的實作者。
- FindBug:程式碼靜態分析,找出可能的錯誤或是不好的寫法。
- CheckStyle:同上。
- JInto:多國語言訊息編輯。
- SQL Explorer:查詢資料庫。
- Regex Util:正規表達式。
- visualswing4eclipse:好用的 swing design 工具,跟 netbeans 的 matisse 有的拼。
- Jigloo:GUI builder。
- AnyEdit:為 eclipse 中的右鍵增加了不少實用的功能,如:跟外部檔案比較、space 跟tab 的轉換之類的。
- QuickRex:正規表達式的工具。
Java decompiler
- Jad:http://www.kpdus.com/jad.html C++ 開發,目前好像已經沒有在發展了,最後更新日是 2006,使用它為核心的工具還不少。
- JODE:http://jode.sourceforge.net/ java 開發,目前發展也停滯中,支援到JDK1.3。
- jd-gui:http://java.decompiler.free.fr/ C++ 開發,持續有在發展,支援到 JDK1.5