1、How to generate and validate a software license key?
2、Selecting the Right License Strategy for Your Software
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2012年7月30日 星期一
2012年7月27日 星期五
最佳化 Java File I/O
[1] 這篇文章是研究怎樣讀取檔案最快的開箱文 (?!)
一開始先說明了 Java 常用的 14 種讀取檔案的方法,並簡單說明主要的優點(例如有沒有 thread-safety)
然後開始做各種方法的效率測試。
一開始先說明了 Java 常用的 14 種讀取檔案的方法,並簡單說明主要的優點(例如有沒有 thread-safety)
然後開始做各種方法的效率測試。
2012年7月26日 星期四
使用 Java 發送 HTTP Request
要在程式裡面模擬瀏覽器的行為是很常見的需求
不管是要做爬蟲,還是是要無縫連接網際網路的服務,都需要利用程式來實作瀏覽器的動作。
雖然上週才剛發一篇 Android HTTP POST
但因為 Android 函式庫本身已經內含 Apache 的 HttpClient 套件,所以實作起來稍微簡單一點
而在純 Java Application 的環境中,如果沒辦法用 Apache 的套件的話,就必須自己用別的方法處理了。
參考資料:
1、java HttpURLConnection來實作get及post動作
2、HTTPURLConnection
不管是要做爬蟲,還是是要無縫連接網際網路的服務,都需要利用程式來實作瀏覽器的動作。
雖然上週才剛發一篇 Android HTTP POST
但因為 Android 函式庫本身已經內含 Apache 的 HttpClient 套件,所以實作起來稍微簡單一點
而在純 Java Application 的環境中,如果沒辦法用 Apache 的套件的話,就必須自己用別的方法處理了。
參考資料:
1、java HttpURLConnection來實作get及post動作
2、HTTPURLConnection
2012年7月24日 星期二
自行觸發 jQuery Validation 的表單驗證
這是個無聊的記錄 XD
當遇到有任何需要,必須強制由程式碼自行觸發 validator 的驗證事件時
可以直接呼叫 valid() 函式,同時 valid() 會回應驗證結果(true/false)。
參考資料:jQuery Validation
當遇到有任何需要,必須強制由程式碼自行觸發 validator 的驗證事件時
可以直接呼叫 valid() 函式,同時 valid() 會回應驗證結果(true/false)。
$("#form").valid();
參考資料:jQuery Validation
在 Linux 上偵測系統頻寬
原本有找到 nmon 這個工具可以在 Linux 上偵測頻寬
(在 Linux 監控系統資源:nmon for Linux)
不過它好像只有直接執行 nmon 觀察,才會有 peak 的數據出現
如果要輸出成檔案時,nmon 只會輸出當下的流量數據,這樣就無法達成原本的需求了。
在看 nmon 輸出的資料時,發現在網路的部份它似乎也只是去分析 /proc/net/dev 提供的資訊
例如現在去看 /proc/net/dev,顯示累計傳輸了 N Bytes
一秒之後再看一次 /proc/net/dev,會顯示累計傳輸 N+M Bytes
因此可以算出這 1 秒的流量是 M Byte/s。
既然 nmon 實際上也只是輸出 /proc/net/dev 的數據,那其實直接自己去查詢 /proc/net/dev 就好了!
(在 Linux 監控系統資源:nmon for Linux)
不過它好像只有直接執行 nmon 觀察,才會有 peak 的數據出現
如果要輸出成檔案時,nmon 只會輸出當下的流量數據,這樣就無法達成原本的需求了。
在看 nmon 輸出的資料時,發現在網路的部份它似乎也只是去分析 /proc/net/dev 提供的資訊
例如現在去看 /proc/net/dev,顯示累計傳輸了 N Bytes
一秒之後再看一次 /proc/net/dev,會顯示累計傳輸 N+M Bytes
因此可以算出這 1 秒的流量是 M Byte/s。
既然 nmon 實際上也只是輸出 /proc/net/dev 的數據,那其實直接自己去查詢 /proc/net/dev 就好了!
2012年7月23日 星期一
2012年7月20日 星期五
在 Linux 監控系統資源:nmon for Linux
官方網站:nmon for Linux
線上文件:Document
要把監視的結果輸出成檔案可以用:
輸出檔名的格式是 _YYYYMMDD_HHMM.nmon。
不過目前覺得輸出的資料太多了,我只需要其中幾個值而已
所以還在搜尋要如何只讓 nmon 輸出少部分的資料....
如果沒辦法的話,可能就只能在看輸出的記錄時自己寫篩選器了。
線上文件:Document
要把監視的結果輸出成檔案可以用:
nmon -f -N -m 輸出資料夾nmon 就會在指定的資料夾裡面產生輸出的檔案
輸出檔名的格式是 _YYYYMMDD_HHMM.nmon。
不過目前覺得輸出的資料太多了,我只需要其中幾個值而已
所以還在搜尋要如何只讓 nmon 輸出少部分的資料....
如果沒辦法的話,可能就只能在看輸出的記錄時自己寫篩選器了。
2012年7月18日 星期三
(暫存) Android HTTP POST
參考資料:
1、http://www.wikihow.com/Execute-HTTP-POST-Requests-in-Android
2、[Android] 使用HTTP的POST方式和網頁表單溝通
1、http://www.wikihow.com/Execute-HTTP-POST-Requests-in-Android
2、[Android] 使用HTTP的POST方式和網頁表單溝通
2012年7月14日 星期六
(暫存) 實現像 Google Play 那樣左右滑動換頁的方法
可以使用 ViewPager:http://developer.android.com/reference/android/support/v4/view/ViewPager.html
2012年7月11日 星期三
筆記:JVM 的記憶體管理
JVM 規範的記憶體空間結構如下圖:
註:圖片轉載自 [2]
Heap
Heap 用來儲存物件的實例以及陣列值,可以視為所有用 new 關鍵字建立的物件,記憶體都會分配在 Heap 區域中。
Heap 預設的最小值是實體記憶體的 1/64,但小於 1GB;最大值是實體記憶體的 1/4,但小於 1GB。
最大值可以透過 -Xmx 參數來設定;最小值則透過 -Xms 設定。
當 JVM 目前的 Heap 空間使用率超過 60% 時,JVM 會自動增加 Heap 的空間;
而當使用率低於 40% 時,JVM 會自動減少 Heap 的空間。
要改變比例的話,可以透過 -XX:MinHeapFreeRatio、-XX:MaxHeapFreeRatio 改變比例
要注意的是參數是用閒置比例來計算的,因此假設 MinHeapFreeRatio 設定為 30% 的話
是表示閒置記憶體低於 30%,亦即記憶體使用率超過 70%,JVM 會增加 Heap 的記憶體空間。
在 Java 1.2 版以後,為了提昇 Heap 記憶體的使用效率,JVM 使用了分代管理(Generations)的機制來管理 Heap 記憶體空間,即將 Heap 分成三個世代,如下圖。
註:圖片轉載自 [6]
(1) 新生代(Young Generation)
(2) 舊生代(Old Generation)
(3) 方法區(Permanent Generation)
方法區存放類別的資訊(名稱、修飾符)、靜態變數、常數(定義為 final 的變數)等等。
Permanent Generation 在一定條件下會被 GC,但一般狀況下 GC 不會影響到 Permanent Generation。
而且根據 [6] 的描述,看起來官方似乎也不建議 GC 方法區的樣子?(不太確定,其實官方也只是用詞看起來不太建議,但並沒有明說 XD)
根據 [3] 回應的描述,Permanent Generation 當中會存放 class 對應到 Heap 裡的位置,如下圖。
註:圖片轉載自 [4]
在 JVM 當中可以透過 -XX:PermSize 及 -XX:MaxPermSize 來指定大小,預設最小值為 16MB、最大值為 64MB。
參考資料:
1、[書目] Java 分散式處理實務精要:奠定雲端基礎的 63 個思考術
2、JVM内存模型
3、In Java is Permanent Generation space garbage collected?
4、Presenting the Permanent Generation
5、Pick up performance with generational garbage collection
6、Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1
JVM学习总结(转载)
Heap
Heap 用來儲存物件的實例以及陣列值,可以視為所有用 new 關鍵字建立的物件,記憶體都會分配在 Heap 區域中。
Heap 預設的最小值是實體記憶體的 1/64,但小於 1GB;最大值是實體記憶體的 1/4,但小於 1GB。
最大值可以透過 -Xmx 參數來設定;最小值則透過 -Xms 設定。
當 JVM 目前的 Heap 空間使用率超過 60% 時,JVM 會自動增加 Heap 的空間;
而當使用率低於 40% 時,JVM 會自動減少 Heap 的空間。
要改變比例的話,可以透過 -XX:MinHeapFreeRatio、-XX:MaxHeapFreeRatio 改變比例
要注意的是參數是用閒置比例來計算的,因此假設 MinHeapFreeRatio 設定為 30% 的話
是表示閒置記憶體低於 30%,亦即記憶體使用率超過 70%,JVM 會增加 Heap 的記憶體空間。
在 Java 1.2 版以後,為了提昇 Heap 記憶體的使用效率,JVM 使用了分代管理(Generations)的機制來管理 Heap 記憶體空間,即將 Heap 分成三個世代,如下圖。
註:圖片轉載自 [6]
(1) 新生代(Young Generation)
(2) 舊生代(Old Generation)
(3) 方法區(Permanent Generation)
方法區存放類別的資訊(名稱、修飾符)、靜態變數、常數(定義為 final 的變數)等等。
Permanent Generation 在一定條件下會被 GC,但一般狀況下 GC 不會影響到 Permanent Generation。
而且根據 [6] 的描述,看起來官方似乎也不建議 GC 方法區的樣子?(不太確定,其實官方也只是用詞看起來不太建議,但並沒有明說 XD)
根據 [3] 回應的描述,Permanent Generation 當中會存放 class 對應到 Heap 裡的位置,如下圖。
註:圖片轉載自 [4]
在 JVM 當中可以透過 -XX:PermSize 及 -XX:MaxPermSize 來指定大小,預設最小值為 16MB、最大值為 64MB。
參考資料:
1、[書目] Java 分散式處理實務精要:奠定雲端基礎的 63 個思考術
2、JVM内存模型
3、In Java is Permanent Generation space garbage collected?
4、Presenting the Permanent Generation
5、Pick up performance with generational garbage collection
6、Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1
JVM学习总结(转载)