2008年5月31日 星期六

Random walk model

我的論文中使用Random walk model, 在參照其官網的步驟編譯時,會產生幾個錯誤,其中有一個錯誤是必須把statistics.cc中,第66行的grid = new (int*) [x_]; 改為grid = new int* [x_]; 其餘的錯誤比較容易理解我就不在此贅述.

Random walk model 官網:
http://www.cs.rice.edu/~santa/research/mobility/

End~

啟動vsftp指令

在Terminal下: "/etc/init.d/vsftpd start" 即可.

referencr: "http://linux.vbird.org/linux_server/0410vsftpd.php"

End~

模擬時產生的錯誤---Classfier::no-slot{} default handler (tcl/lib/ns-lib.tcl)

今天在試跑模擬時,產生了一個error message :
--- Classfier::no-slot{} default handler (tcl/lib/ns-lib.tcl) ---
_o49: no target for slot 4294967295
_o49 type: Classifier/Portcontent dump:
---------- Finished standard no-slot{} default handler ----------
後來我上網查了一下,看到有人也有類似的問題,所幸友網友知道錯誤發生的原因 "http://www.nabble.com/problem:-Classfier::no-slot{}-default-handler-(tcl-lib-ns-lib.tcl)-to5616757.html" ,我看過後再重新檢查我自己的Tcl,發現原來我產生了一個udp(1) 卻在
" $ns connect $udp(1) $null(1)
$ns connect $udp(1) $null(2) "

重複定義了兩次其connect對象, (我想是因為這種原因,所以會發生這種問題吧!), 後來我將重複定義的connect修正後就解決此問題:) ~

End~

2008年5月29日 星期四

透過封包CID取得SS

void xxx(Packet *p)
{
hdr_mac802_16 *wimaxHdr_req = HDR_MAC802_16(req);
gen_mac_header_t header_req = wimaxHdr_req->header;
....
PeerNode *peer;
peer = mac_->getCManager()->get_connection (header_req.cid, false)->getPeerNode(); //透過CID取出此CID的peer object
int index_ = peer->getPeerNode(); //取出peer object的index (mac)
}

2008年5月19日 星期一

vim自動顯示行號與對齊

在Linux中最普遍的文字編輯器就是vim,依下列的步驟就可讓vim會自動顯示行號,或是撰寫文件時每行會自動對齊. 步驟如下:
Step 1.
在家目錄產生.vimrc檔.

Step 2.
撰寫.vimrc內容為:
set nu (自動顯示行號)
set autoindent (自動對齊)
set smartindent (智能對齊)
set incsearch (逐步查詢)

Step 3.
存檔離開.之後每次使用vim,家目錄下的.vimrc就會被讀取.

End~

2008年5月15日 星期四

ㄧ個Terminal開啟多個分頁

在ㄧ般來說,要是針對不同資料夾或是檔案夾,同時進行修改或比對等動作,有可能會要同時開啟多個Terminal來work,但是現在只需開啟一個Terminal,並且下"screen",就可以在同一個Terminal下開啟多個分頁,就不用東開一個新的Terminal,西開一個Terminal了. 在啟動screen前先記得在家目錄產生一個名為".screenrc"的檔案,內容為:
caption always "%{= wk} %{= KY} [%n]%t @ %H %{-} %= %{= KR} %l %{-} %{= KG} %Y-%m-%d %{-} "hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %= %0c:%s "bindkey ^[z prevbindkey ^[x next.

以下為啟動screen後的一些基本指令 (在下指令之前記得先按Ctrl+a喔~):
1. c: 新增一個新的分頁.
2. exit: 關閉當下分頁.
3. d:離開screen.
4. Alt+z/x: 開啟前一/後ㄧ的分頁.
5. 1~9: 直接切到指定的分頁.
6. Ctrl+a + Ctrl+g: 切換錯誤的提示的方式 (螢幕閃爍<->發出B聲)

若是做事做到一半離開screen,下次要登入screen時,在Terminal下"screen -r",登入screen後,則會延續上次登出時的狀態!!

End~

2008年5月14日 星期三

C#---數字轉國字

由於在仁耀的系統中,需要將阿拉伯數字轉成國字的大寫,因此研究了一下這種功能,後來在網路上發現有高手寫好類似的程式碼 (嘿嘿~當然不客氣的拿來使用嚕,在此謝謝Q_282898034大大的開發嚕^^),以下為Q_282898034大所開發的程式:
using System;using System.Collections.Generic;static class RMB{ private static readonly string DigitText = "零壹貳參肆伍陸柒捌玖"; private static readonly string PositionText = "圓拾佰仟萬億兆京垓秭穰"; private static readonly string OtherText = "分角整負"; private static void GetFractionStack(int num, Stack stack) { int fen, jiao = Math.DivRem(num, 10, out fen); if (fen != 0) { stack.Push(OtherText[0]); stack.Push(DigitText[fen]); } if (jiao != 0) { stack.Push(OtherText[1]); stack.Push(DigitText[jiao]); } } private static void GetIntegerStack(decimal num, int position, Stack stack) { if (num < _num =" Decimal.ToInt32(num);" i =" 0," mod_10 =" 0;" behindzero =" mod_10" _num =" Math.DivRem(_num," mod_10 ="="" _num ="=""> 0) stack.Push(PositionText[i]); stack.Push(DigitText[mod_10]); } } else { GetIntegerStack(Decimal.Remainder(num, 10000M), position, stack); int mask = -1, offset = 4; while ((position & (0x1 << ++mask)) == 0) ; mask += offset; while (stack.Peek() == PositionText[offset++]) stack.Pop(); stack.Push(PositionText[mask]); GetIntegerStack(Decimal.Divide(num, 10000M), position + 1, stack); } } public static string DecimalFormatter(Decimal input) { Stack stack = new Stack(60); bool isNegate = input < Decimal.Zero; input = Decimal.Add(isNegate ? Decimal.Negate(input) : input, 0.005M); decimal integer = Decimal.Truncate(input); int fraction = Decimal.ToInt32(Decimal.Multiply(Decimal.Subtract(input, integer), 100M)); if (fraction == 0) stack.Push(OtherText[2]); else GetFractionStack(fraction, stack); if (integer != Decimal.Zero) { stack.Push(PositionText[0]); GetIntegerStack(integer, 1, stack); if (stack.Peek() == DigitText[0]) stack.Pop(); } else if (fraction == 0) { stack.Push(PositionText[0]); stack.Push(DigitText[0]); } if (isNegate) stack.Push(OtherText[3]); return new string(stack.ToArray()); }}class Program{ static void Main() { decimal input = decimal.MaxValue; Console.WriteLine(input /= 1000M); // 国内银行通用上法转换:万万为亿,亿亿为兆 Console.WriteLine(RMB.DecimalFormatter(input)); Console.ReadKey(); }}

套到仁耀的系統上,我進行了小幅度的修改.

reference: http://topic.csdn.net/u/20080125/09/04c65875-4f50-42cd-bd63-d7b1429e42e1.html

End~

2008年5月6日 星期二

nam 編譯出錯

柏鋒發現修正nam編譯錯誤的方法!!由於風哥是用的是64 bit的OS, 所以在nam一開始編譯時會發生錯誤,如下所示:
netmodel.cc: In member function ‘int NetModel::addr2id(int) const’:
netmodel.cc:311: error: cast from ‘void*’ to ‘int’ loses precision
netmodel.cc: In member function ‘int NetModel::lookupObjname(const char*)’:
netmodel.cc:2764: error: cast from ‘void*’ to ‘int’ loses precision
解決辦法:
把return (int)Tcl_GetHashValue(he);改為return (long)Tcl_GetHashValue(he);

後續會在遇到數個類似的問題,依樣畫葫蘆~把int改成long即可!!

End~

2008年5月1日 星期四

tar壓縮解壓縮指令

壓縮檔案:
tar -czvf 壓縮封裝檔名稱.tar.gz 資料夾名稱--- 將 「資料夾名稱」 壓縮成為 「壓縮封裝檔名稱.tar.gz」壓縮檔.
tar -cjvf 壓縮封裝檔名稱.tar.bz2 資料夾名稱--- 將 「資料夾名稱」 壓縮成為 「壓縮封裝檔名稱.tar.bz2」壓縮檔.

解壓縮檔案:
tar -xzvf 欲解壓縮的檔名.tar.gz--- 解開 「檔名.tar.gz」壓縮封裝檔.
tar -xjvf 欲解壓縮的檔名.tar.bz2--- 解開 「檔名.tar.bz2」壓縮封裝檔.

各參數所代表的意思:
-c :建立一個壓縮檔案的參數指令(create 的意思);
-x :解開一個壓縮檔案的參數指令!
-t :查看 tarfile 裡面的檔案! 特別注意,在參數的下達中, c/x/t 僅能存在一個!不可同時存在! 因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-v :壓縮的過程中顯示檔案!這個常用,但不建議用在背景執行過程!
-f :使用檔名,請留意,在 f 之後要立即接檔名喔!不要再加參數!   例如使用『 tar -zcvfP tfile sfile』就是錯誤的寫法,要寫成   『 tar -zcvPf tfile sfile』才對喔!
-p :使用原檔案的原來屬性(屬性不會依據使用者而變)
-P :可以使用絕對路徑來壓縮!
-N :比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的檔案中!
--exclude FILE:在壓縮的過程中,不要將 FILE 打包!

reference: http://linux.vbird.org/linux_basic/0240tarcompress.php#tar

sftp 連線指令

若要利用sftp連至ip為XXX.XXX.XXX.XXX時,且對方的port設為YYYY. 則此時在terminal所下的指令為 "sftp -o PORT=YYYY 自己的帳號名稱@XXX.XXX.XXX.XXX" 即可.

以下為比較常用的指令:
1. 結束 SFTP: exit/quit
2. 變換遠方端伺服器的目錄: cd.
3. 更改檔案或目錄的權限: chmod.
4. 刪除檔案: del.
5. 刪除檔案: rm.
6. 列出遠方端伺服器目錄下的檔案名稱: dir/ls.
7. 下載檔案: get.
8. 上傳檔案: put.
9. 新增一個遠方端伺服器的目錄: mkdir.
10. 刪除遠方端伺服器的目錄: rmdir.