星期五, 十月 08, 2010

轉換subnet mask的程式 => ipcalc

寫網路程式時,常常要處理和ip address有關的issue。這時候,遇到255.255.255.255 = 32的Mask還好,但是如果是IP address/31 或是 IP address/30呢?

還好,我找到了一個很好用的程式: ipcalc
ipcalc 192.168.0.1/24

下頭是輸出
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet

星期四, 十月 07, 2010

用gnuplot來畫圖

開會要準備投影片時,如果要畫圖,我心裡就一陣幹。
這兩天,決定用gnuplot來做,果然,順手多了。雖然一開始為了生出一個可以用的script,也磨了一陣子。

plot "./data.txt" using 1:2 title "single direction", "./data.txt" using 1:3 title "two direction"
set title "throughput"
set xlabel "packet size(Bytes)"
set ylabel "rate(Mbps)"
set style data lines
set grid
replot
set output "throughput.png" ; set term png ; replot

在linux的shell下,使用gettext來翻譯

(0)準備gettext的環境變數
TEXTDOMAINDIR
TEXTDOMAIN

(1) 先寫 zh_TW.po

(2) 用msgfmt指令生成 mo檔
msgfmt -o $TEXTDOMAIN.mo zh_TW.po

(3) 將mo檔放到正確的位置, /MO_DIR
其中,/MO_DIR 長成這樣: $TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES

(4) 此時,mo檔和路徑,環境變數的關系應該是:
$TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES/$TEXTDOMAIN.mo

(5) gettext -s "$msgid"

星期四, 九月 16, 2010

FirePHP

已經用firebug來debug javascript一段時間了,firebug真是超好用的。然而,javascript是 client side的東西。有時候,會希望,要是server-side的php也可以有簡單的方法來debug就好了。

這兩天找了FirePHP來用,雖然它不能做為一個像firebug一樣,是PHP的debugger。但是,它可以做為logger。在php的程式碼中,調用了FirePHP的程式碼之後, 可以用簡單的log function,將PHP執行時,輸出的東西,透過Http的header來回傳。回傳之後,被FirePHP 的程式收到,它就可以顯示。

使用方法:
(1) 下載 FirePHP的 php library, 放到網頁的根目錄
(2) 在php檔中,寫合適的程式碼。
下頭是一個example:
require_once('FirePHPCore/FirePHP.class.php');
ob_start();
$firephp = FirePHP::getInstance(true);
$var = array('i'=>10, 'j'=>20);
$firephp->log($var, 'Iterators');

(3) 在瀏覽器上,開啟firebug,再開啟FirePHP

星期一, 八月 16, 2010

原來網路上找到的noseeing檔是有被修改過的…

這是測試用的嘸蝦米輸入法表格,主要在測試 gcin 的 UTF-8 環境的運作
情形。如果要長期使用,請購買合法版權的嘸蝦米輸入法。這個表格內容
有可能和正式的嘸蝦米表格不一樣,因為這是我個人在使用的。

目前編入正式的 Unicode 編碼日文及簡體字。原來的輸入日文的方法只能
適用於 GNU/Linux 系統,因為他是對照 Unicode PUA 的對應,需要 GNU
libc 才能做正確的轉換,其他的系統並不一定支援。正式的 Unicode 編碼
日文,在輸入時請多加個 j,以便和原來的 Big5 日文區別:

a, => 原 Big5 編入 Unicode PUA 的日文『』
ja, => Unicode 標準編碼日文『あ』

簡體的部份依繁體的輸入方式,必需選字才能輸入。所以,正常的繁體中文
依以往的輸入方法即可,需要簡體時再來選字。

這裡是繁體中文。 => 依正常輸入即可
这里是简体中文。 => 依繁體的輸入方法,需要選字。

這是依我個人的使用習慣編入的,所以不一定會和正式嘸蝦米的輸入方式一
樣,也不一定會符合你的需求。

星期四, 四月 01, 2010

如何使用shunit2來做unit test

如何使用shunit2

(1) 下載 shunit2-2.1.3.tgz
tar zxvf shunit2-2.1.3.tgz


(2) 建議…
在.bashrc中,加上一個alias
alias get_shunit2='cp XXXX/shunit2-2.1.3/src/shell/shunit2 ./'

在 /tmp目錄下做實驗:
get_shunit2 // 這樣可以把需要的shunit2 拷貝到/tmp資料夾下。


(3) 寫一個test suite , 名稱是 test.sh
//////內容/////
#! /bin/sh

testEquality()
{
assertEquals 1 1
}

# load shunit2
. ./shunit2
/////////////

(4) sh test.sh

使用gtest來做Unit Test

非常簡單、非常好上手。

(1) 下載gtest-1.4.0.tar.bz2
tar jxvf gtest-1.4.0.tar.bz2

(2) ./configure
make
sudo make install
ldconfig // 因為它有灌library

(3) 準備要被測的檔案
for example: humorless.h
///////// 內容 ///////////
class Sample
{
public:
int return_100()
{
return 100;
}
};
/////////////////////////
(4) 準備好test suite
for example: tester.cpp
///////////// 內容 ///////////
#include
#include "humorless.h"

TEST(Sample, return_100) {
Sample c;

// EXPECT_EQ() evaluates its arguments exactly once, so they
// can have side effects.

EXPECT_EQ(0, c.return_100());
EXPECT_EQ(1, c.return_100());
EXPECT_EQ(2, c.return_100());
}

int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
//////////////////////////

(5) g++ -o tester tester.cpp -lgtest
./tester
// 記得要去link 啊…