2008年1月30日 星期三

利用 HttpClient 來模擬 Client 端

Web應用程式的觸發條件基本上是由Client端發出要求(request),然後將執行要求的結果(response)傳回給Clent端。因此一些Servlet或元件在沒有client端的要求時,就沒有辦法被觸發來執行工作。Jakarta Commons HttpClient可以模擬發出要求並充當Clent端接收回應。

特色


  • 使用 Pure Java 開發標準的 HTTP v1.0 及 v1.1
  • 實作所有的 HTTP methods (GET, POST, PUT, DELETE,HEAD, OPTIONS, and TRACE)
  • 支援 HTTPS 的協定
  • 支援 proxies 的各種情況
  • 利用 Multi Form 上載檔案
  • 支援認證機制 可以設定最大連結數量
  • 自動的 cookie 處理模式
  • Request 及 Response 最佳化處理
  • 支援 HTTP 1.0 KeepAlive 連線模式及 1.1 的 persistance 保存狀態
  • 直接存取伺服器送來的 response code 及 header
  • 能夠設定連結過時
  • 實作 Command Pattern 允許去平行處理及有效重複使用連結
  • 這個是Public Open Source

實作流程

  • 建立 HttpClient 的 instance HttpClient client = new HttpClient();
  • 建立 HttpClient instance 要使用的 method。例如 GET/POST 等等 連結到一個 URL , HttpMethod method = new GetMethod(http://www.apache.org/);
  • 告訴 HttpClient 去執行這個訊息 statusCode = client.executeMethod(method);
  • 得到 Server 端的回應 byte[] responseBody = method.getResponseBody();
  • 結束這個連結 method.releaseConnection();
  • 處理這個回應資料 System.err.println(new String(responseBody));

詳關文件

HttpClient 3.1 API

2008年1月16日 星期三

061的貼貼貼寫: Ubuntu 7.04 - codec輕鬆裝 rmvb快樂看

061的貼貼貼寫: Ubuntu 7.04 - codec輕鬆裝 rmvb快樂看

Ubuntu Source.list 說明

因為 Ubuntu 原生於 Debian, 所以也是對於自由很堅持,因此希望把自由軟體和非自由軟體拆開來放。有些是因為人力的問題,有些套件是在 Debian 裏面有,但是不被 Ubuntu 官方支援的。所以 Ubuntu 的處理方式是把它們拆成以下四大主要組件庫,類似 Debian 一樣,讓使用者選擇需要。前兩個 Main 和 Restricted 是官方正式支援的,Universe 和 Multiverse 是不被官方正式支援的。而 Restricted 和 Multiverse 裏面是 non-free 的軟體。

main
大部份常用的自由軟體都會收編在 main 裏面,這裡面所含的軟體需要完全符合 Ubuntu 對自由軟體的定義,詳細規定請見http://www.ubuntu.com/ubuntu/licensing。因此通常使用 main 就可以應付日常所需。而 main 裏面所有軟體,都是官方支援的,所以 Ubuntu 將會提供 main 的安全更新和技術支援。而它的角色和 Debian 裏面的 main 差不多。

restricted
裏 面所含的是非自由軟體,通常是不公開程式碼的程式或者授權不符合 Ubuntu 的要求。例如顯示卡驅動程式等等。雖然是非自由軟體,但是因為這些都是比較重要的非自由軟體,所以 Ubuntu 在符合該軟體授權下,將會進行穩定性上的測試,並也提供安全更新。因為不是自由軟體,所以 Ubuntu 在遇到問題時不一定能解決,所以維護品質沒有 main 那個好。桌面使用者通常都會使用 Restricted 這個組件庫,來對多媒體支援有比較好的效果。

universe
這 裡面大部分的軟體都是自由軟體,而且幾乎都是包含在 Debian 裏面的 main 中。但是因為人力上的問題,所以 Ubuntu 無法親自去包這些套件,而是直接由Debian 裏面抓下來從新編譯,或者是直接從外部程式碼自動編譯出來的。不管怎麼樣,這裡面的軟體是不被 Ubuntu 正式支援的,Ubuntu 雖然有提供它的安全更新,但是不保證能即時修正或能穩定運行。例如國內有名的打 BBS 軟體、 PCManX 就放在這裡面,或國內有名的輸入法程式 gcin 也是包含在這裡面。Ubuntu 預設沒有啟用 universe 套件庫,所以想要用的人得自己在 sources.list 啟用。

multiverse
裏面的軟體都是非自由軟體,但是因為重要性不足或授權的因素,所以放在這裡。而這裡的軟體也是不被官方正式支援的。而和 universe 一樣,Ubuntu 預設也是沒有啟用它。

而 除了以上這幾個組件庫以外,它還有其他附屬的組件庫。因為這些組件庫在穩定版出來以後,就不會再更動,所以當有漏洞的時候怎們辦?或者有人懶得每半年都更 新一次,但是又想要在舊版 Ubuntu 裏面享用一些比較新版的軟體時,總不能自己編譯和搞定 library 的問題吧!所以在上面四大組件庫,都有以下三個分支。

security
穩定版本正式釋出後,如果程式有重大安全性上的問題,將會 在這裡更新。而這裡所謂的更新,通常只會打上 patch (這裡指原始程式碼的修正檔。), 還是同一個版本,所以功能也不會增加。因為 security 套件庫是針對系統安全而更新,所以裏面大部份更新都和伺服器或系統架構有關。而這個組件庫預設是被開啟的。

updates
這 也是在穩定版釋出後,提供系統更新的一個方式。但是和 security 不同的是,這裡所做的更新都是和安全性沒有關,而是和程式的 bug 相關。例如某套桌面軟體有時候會當掉,而這個當然和系統安全沒關係了,這種更新就會放在這裡。updates 裏面的更新和 security 一樣,也只做 patch, 所以也是同一個版本,不會有新功能。這個組件庫也是預設被開啟的。

backports
例如 6.06 (Dapper) 中附的網頁瀏覽器是 Firefox 1.5.0.3, 但是在穩定版釋出後,也許這段時間裏面出現了 1.5.1, 1.5.2, 1.5.3 等版本,但是在主套件庫中軟體是一定不會更新的,而預設開啟的 security 或 updates 套件庫除非是有安全性的問題或者是有些 bug,否則不會更新。就算是因為安全性或 bug 而更新,也通常不會換成新版的。所以 backports 就是為了解決這樣的問題,開發者會將新版的軟體就會放在 backports 中,讓使用者使用舊版發行版但是可以用到比較新的套件。而通常在 backports 中的程式都是和桌面相關,而不會去更新到系統或伺服器架構,這樣才能保證系統運作穩定。而預設 backports 是沒有使用的,所以要自己修改 sources.list 來啟用。
(備註: 使用者可以要求希望哪些軟體進入 backports, 詳細辦法可以參閱http://backports.ubuntuforums.org)

2008年1月6日 星期日

Linux Swap Memory分配小技巧

Linux的一個Swap上限爲128MB,可以有16個Swap, 也就是最大上限爲2GB.
Swap可以是2的等比級數2MB,4MB,8MB,16MB,32MB,...,128MB.切成200MB的話, 只能用到128MB, 切成48MB只能用到32MB.所以切割成大於128MB的Swap是沒有用的.
對於Swap的大小問題, 要考慮的使用狀況,如果有搞電腦繪圖時,有大矩陣的運算, 那麽Swap當然要大一點.否則一般的狀況是記憶體的兩倍到四倍.記憶體越小, 這個比例要相對的增大.如果是64MB, 那麽大約128MB-256MB就很夠.
例如一台機器作為HTTP Server原本給了64MB,Swap給了512MB, 但後來發現給得太多了,就改回32MB, Swap 128MB, 奇怪的是,效能不降反升, 可能是需要處理的量降低所造成的.
Desktop用的電腦, 因爲有電腦繪圖的應用,因此有192MB RAM, 給了1GB Swap,最壞的狀況是Swap到達400MB.在64MB的狀況, 大部份時候比較常見到Swap到達150MB(X window+GIMP+Blender+Netscape+...servers)
如果只是File Server, 那麽16MB RAM+64MB Swap可能就夠了.如果還有Printer Server, 那麽要看使用的量來決定了,如果是一堆圖檔, 或者列印量很大, 那麽RAM/SWAP比率要加大很多.64MB+512MB Swap並不會太誇張.
要決定swap memory的使用狀況, 可以經常去看/proc/meminfo這個檔案. 看過這個檔案可驗證swap是否有效,如果您了一塊不是2的倍數的swap, 會發現浪費了一大塊硬碟空間.剩餘記憶體應當通常都不多(因爲Linux重重地快取所有檔案系統,這是Linux之所以快速的原因之一), 但這不重要, Linux有一些機制, 在需要記憶體的時候, 會釋放記憶體出來. 您只需要看swap的部份,就可以決定swap memory大約需要多少.例如如果您的swap經常在100MB左右, 那麽給200MB大致是夠的.另外, 發現許多人把swap切在primary上面,這本身倒沒什麽錯誤. 不過切在extended上面可以多切幾個小塊出來,效能會比較好一點. Swap小一點會有比較好的效能, 也比較安全一點,畢竟memory block少有超過32MB的. 不過, 別太小就是了