2014年10月28日 星期二

自行架設 Wiki 引擎(二):變更預設字體

在 Foswiki 上,預設的字體可以從開發者工具中看出,CSS 上的字體設定如下。
html body {
  font-family: arial,verdana,sans-serif;
  font-size: small;
}
不過如果要在 Foswiki 上寫一些中英文夾雜的條目,預設的字體其實蠻不好閱讀的!
因此就想要變更 Foswiki 預設使用的網頁字體。

自行架設 Wiki 引擎(一):使用 Debian 安裝 Foswiki

現在市面上有很多免費的 Wiki 引擎 [1],可以讓使用者自行架設需要的 Wiki 系統
因為我的需求主要是希望有至少還 OK 的 WYSIWYG 介面,並且希望能夠直接針對 Wiki 內容做 HTML 編輯
因此選擇了 Foswiki [2] 作為目標。

2014年10月24日 星期五

設定 OpenStack Neutron 並讓 VM 取得外部連結

簡單說明一下環境,本篇文章中用的 OpenStack 是使用 Fuel 5.1 [1] 佈署出來的 Mirantis OpenStack
因為佈署時不想影響到其他實體網路,因此將 OpenStack 移至虛擬區網的網段,IP 位址為 10.5.*.*。

Fuel 5.1 佈署時的設定如下。

Public Network -- 聯外的實體網路。這個網路區段是讓被 Fuel 佈署的節點取得可被外部存取的 public IP,必須搭配節點佈署時的網路介面設定。
IP Range: Start 10.5.4.2, End 10.5.4.254
CIDR: 10.5.0.0/16
Use VLAN tagging: false
Gateway: 10.5.0.1

Management Network -- 內部溝通的區域網路。Fuel 佈署出來的節點會使用這個網段做溝通,例如 Compute Node 的 Nova 嘗試連接 Controller Node 的 AMQP 服務時,就會透過這個網段連接。
CIDR: 192.168.101.0/24
Use VLAN tagging: false

Storage Network -- 內部溝通的區域網路。照名字來看是被 Cinder、Swift 或者 Ceph 等儲存服務使用的網路..吧。
CIDR: 192.168.102.0/24
Use VLAN tagging: false

Neutron L3 Configuration -- OpenStack 佈署後的 Neutron 設定。此處的設定會反應在 OpenStack 佈署完後,預設建立出來的虛擬路由器的設定。
Internal network CIDR: 192.168.111.0/24
Internal network gateway: 192.168.111.1
Floating IP ranges: Start 10.5.5.2, End 10.5.5.254
DNS Servers: 8.8.4.4, 8.8.8.8

針對 Neutron L3 Configuration 的部份記錄一下,Fuel 佈署完的 OpenStack 預設會先產生好一個虛擬路由器
虛擬路由器會有兩個介面,一個是內部網路,IP 位址的分配會被 Internal network 的設定所限制;
另一個則是外部閘道,IP 位址的分配為 Floating IP ranges 設定的範圍。

2014年10月23日 星期四

透過 Java 讀取、分析封包攔截記錄 (2):即時封包擷取

續上篇文章「透過 Java 讀取、分析封包攔截記錄 (1):使用 jNetPcap 函式庫讀取封包擷取記錄
上篇文章主要是讓 Wireshark 軟體事先擷取好封包,將擷取記錄儲存成 *.pcap 檔之後,再寫程式去分析 *.pcap 檔的記錄內容。
不過有些狀況會希望能夠即時擷取網卡上的資料,這時就可以利用 jNetPcap 函式庫提供的 openLive() 方法了。

2014年10月22日 星期三

在 Windows 上修改網卡的優先順序

簡易記錄~電腦同時插了兩張以上的網卡,而且都有連上網的時候
想要設定網卡的優先順序,以確保網路在最佳配置下運作。
在 Windows 7 上面可以直接參考 [1] 中第二篇回覆(原作者自己的回覆)
在網路設定頁面中按 F10 打開工具列,然後按照說明調整介面順序。

參考資料:
1、《分享》雙網卡修改路由優先順序
2、修改 Windows 網路卡的自動公制設定

2014年10月21日 星期二

在 ubuntu 14.04 設定 VNC 遠端桌面(2015-05-06 修正)

以前在用 ubuntu 12.04 時,使用 x11vnc 都很正常,但升級到 ubuntu 14.04 之後 VNC 就變成一片黑
後來只好整個重裝一次,重新設定 VNC 的環境。

ubuntu 本身雖然有內建 vino server 這個 VNC 服務,啟用方法也很簡單
但測試了之後發現似乎必須要先在 ubuntu 上登入過一次,之後才有辦法透過 VNC 進行連線。
試了一段時間仍然沒有解答之後,又回頭去尋找 x11vnc 的設定方法,而最後找到可用的方式如 [1] 的步驟。

2014年10月17日 星期五

透過 Java 讀取、分析封包攔截記錄 (1):使用 jNetPcap 函式庫讀取封包擷取記錄

如果想要在電腦上攔截網卡發出的封包,一般直覺會想到的就是 Wireshark 這個軟體
它在攔截了一些封包之後,可以透過另存新檔的方式,將攔截下來的內容儲存成一個檔案(*.pcap)
接著還想用程式化的方式自動分析封包的話,在 Java 上可以使用 jNetPcap 函式庫 [1] 來分析攔截下來的封包內容了。

2014年9月24日 星期三

使用 HttpURLConnection 時的記憶體問題

以前同事寫的 HttpClient 套件,實作是靠 Java 原生的 HttpURLConnection
不過最近又發生了使用該 HttpClient 套件時,出現 OutOfMemoryError 的訊息
發生原因是因為透過該 HttpClient 傳輸的資料太大,把 JVM 的記憶體撐爆了。

花了一些時間搜尋後,同事發現在 HttpClient 裡面加上 HttpURLConnection.setChunkedStreamingMode(0) 後問題似乎就解決了。
而關於為什麼有這個問題、以及為什麼呼叫這個方法後就可以解決,原因大概可以參考 [1] 的描述。
以下節錄 [1] 文章開頭的兩段話:
post請求的OutputStream實際上不是網絡流,而是寫入內存,在getInputStream中才真正把寫道流裡面的內容作為正文與根據之前的配置生成的http request頭合並成真正的http request,並在此時才真正向服務器發送。

HttpURLConnection.setChunkedStreamingMode函數可以改變這個模式,設置了ChunkedStreamingMode後,不再等待OutputStream關閉後生成完整的http request一次過發送,而是先發送http request頭,正文內容則是網路流的方式實時傳送到服務器。實際上是不告訴服務器http正文的長度,這種模式適用於向服務器傳送較大的或者是不容易獲取長度的數據,如文件。

參考資料:
1、Http学习之使用HttpURLConnection发送post请求深入
2、HttpUrlConnection.setChunkedStreamingMode()

2014年9月23日 星期二

實作 Java 的套件系統(Plugin System):以 jspf 框架為例

在開發比較大一點的系統時,常會有個想法是想要做到可以讓使用者動態下載套件,然後系統就能夠即時把套件套用到系統上
在 Java 上這個概念可以透過 ClassLoader 的技巧來實現。
雖然網路上也有一些文章教導如何自行建立簡單的套件系統,不過現在其實也有一些 Open Source 的專案可以利用了~。

2014年9月18日 星期四

MongoDB 監控:使用 MongoDB Management Service

MongoDB 官方有提供 MongoDB Management Service (MMS) 這個服務
可以用來監控指定的 MongoDB 資料庫,並且畫出還蠻詳細的曲線圖供使用者分析自己的資料庫運作狀況。


MMS 主要有提供監控和備援的能力,其中監控的部份是免費的、備援則是必須付費。
同時 MMS 提供了雲端版的服務和獨立安裝版,前者可以直接把統計資料送到 MongoDB 營運的 MMS 服務,後者則是自己維護一台自有的 MMS 主機。
對前者來說,使用者只需要註冊一個 MMS 的帳號,然後在能夠存取想監控的 MongoDB 的一台主機上安裝監控的代理人程式即可。
不過如果有些監控的功能想使用(例如 profiling 功能,會送出每個 MongoDB 接受的指令到 MMS 上),但又不希望這些資料被送上雲端
就可以改用後者,自己安裝自己的 MMS 囉。