2008年9月13日 星期六

NS2內DSDV疑似bug造成無窮迴圈的修正

最近在跑NS2,一開始跑很久都跑不完,
我還不以為意,以為是scenario太複雜,所以要跑很久...。
直到那天我放著模擬跑,人出去看電影,回來發現竟然還在跑(驚!),
我才覺得不對勁(也太遲鈍了吧.....囧)
反覆檢查後發現,程式在DSDV內會進入無窮迴圈,導致怎麼跑都跑不完。
於是就把dsdv.cc打開來修改一下:
ns-2.x/dsdv/dsdv.cc

void DSDV_Agent::processUpdate (Packet * p) function內,
約791行附近,有個 if 判斷這麼寫著:

// see if we can send off any packets we've got queued
if (rte.q && rte.metric != BIG)
{
Packet *queued_p;
while ((queued_p = rte.q->deque()))
// XXX possible loop here
// while ((queued_p = rte.q->deque()))
// Only retry once to avoid looping
// for (int jj = 0; jj <>length(); jj++){
// queued_p = rte.q->deque();
recv(queued_p, 0); // give the packets to ourselves to forward
// }
delete rte.q;
rte.q = 0;
table_->AddEntry(rte); // record the now zero'd queue
}


猜測這邊就是infinite loop形成的原因。
本來應該是要將queue裡面積存的packet取出然後送出,
可是會造成while永遠為true,形成無窮迴圈,bug就產生啦。
將它改成以下,應該就沒問題了


// see if we can send off any packets we've got queued
if (rte.q && rte.metric != BIG)
{
Packet *queued_p;
printf("DEGUB => in DSDV_Agent::processUpdate:795, rte.q->length()= %d\n",rte.q->length() );
//printf is only for debug :P

Packet** temp_array = new Packet*[rte.q->length()] ;

for(int i=0; i< rte.q->length(); i++){
temp_array[i] = rte.q->deque();
}

for(int i=0; i< rte.q->length(); i++){
recv(temp_array[i], 0);
}

delete rte.q;
rte.q = 0;
table_->AddEntry(rte); // record the now zero'd queue
}


//--
萬分感謝千益學弟,以及gdb的幫忙^_________^

至於blog中顯示程式碼區塊的方法,請參考:p
http://hdj-berkeley.blogspot.com/2008/06/blog.html

2008年8月18日 星期一

UltraEdit、JCreator 顯示行數,列印行數

UltraEdit:
1. 首先要先顯示行數
檢視/顯示行號 View/Display Line Number
2. 列印設定
檔案/列印設定(組態)/頁面設定/列印行號 打勾

JCreator:
1. 顯示行數
Configure/Option/Documents/Default(當然也可以選擇針對特定檔案更改)
裡面在Compatibility, show line number 打勾即可
2. 列印設定
同上 /Default/Printer
Print line number 打勾即可


參考網頁:
http://www.jcreator.com/forums/index.php?showtopic=1202
http://john.cs.olemiss.edu/~sbs/ultraedtFAQ.html

2008年8月14日 星期四

讓 UltraEdit 認得 tcl 語法

打開 UltraEdit 的語法檔案 wordfile.txt
一般是在 C:\Program Files\IDM Computer Solutions\UltraEdit-32\wordfile.txt
將以下的文字複製後,貼在 wordfile.txt 最後面即可。

/L20"Tcl/tk" Line Comment = # String Chars = "' Escape Char = \ DisableMLS File Extensions = TCL TK
/Delimiters = ~!@%^&*()+=|\/{}[]:;"' <> ,?#
/Function String = "proc ^([a-zA-Z_0-9]++ {[ a-zA-Z_0-9{}]++^)"
/Function String 1 = "method ^([a-zA-Z_0-9]++ {[ a-zA-Z_0-9{}]++^)"
/Function String 2 = "^(constructor^) {*}*{"
/Function String 3 = "^(destructor^) {}"
/Function String 4 = "public ^(variable[ ^t]+[a-zA-Z_0-9]+^)"
/Function String 5 = "public ^(common[ ^t]+[A-Z_0-9]+^)"
/Indent Strings = "{"
/Unindent Strings = "}"
/Open Brace Strings = "{" "(" "["
/Close Brace Strings = "}" ")" "]"
/Open Fold Strings = "{"
/Close Fold Strings = "}"
/C1"Commands"
after append array auto_execok auto_load auto_mkindex auto_reset
bgerror break
case catch cd class clock close common concat constructor continue
destructor
else elseif eof error eval exec exit expr
fblocked fconfigure file fileevent flush for foreach format
gets glob global
history
if incr info inherit interp
join
lappend lindex linsert list llength load lrange lreplace lsearch lsort
method
open
package parray pid private proc protected public puts pwd
read regexp regsub rename return
scan seek set socket source split string subst switch
tcl_endOfWord tcl_startOfNextWord tcl_startOfPreviousWord
tcl_wordBreakAfter tcl_wordBreakBefore tell time
trace
unknown unset update uplevel upvar
variable vwait
while
/C2"Library Variables"
ErrorCode ErrorInfo
auto_execs auto_index auto_noexec auto_noload auto_path
env
tcl_library tcl_nonwordchars tcl_patchLevel tcl_pkgPath tcl_platform
tcl_precision tcl_rcFileName tcl_rcRsrcName tcl_version tcl_wordchars
unknown_active
/C3"Keywords"
bell bind bindtags bitmap button
canvas checkbutton clipboard
destroy
entry event
focus frame
grab grid
image
label listbox lower
menu menubutton message
option
pack photo place
radiobutton raise
scale scrollbar selection send
text tk tk_bindForTraversal tk_bisque tk_chooseColor tk_dialog tk_focusFollowsMouse
tk_focusNext tk_focusPrev tk_getOpenFile tk_getSaveFile tk_menuBar tk_messageBox
tk_optionMenu tk_popup tk_setPalette tkerror tkvars tkwait toplevel
winfo wm
/C4"Variable Substitutions"
** $
/C5"Delimiters"
!
%
&
(
)
*
+
,
// /
:
;
< = >
?
@
[
]
^
{
|
}
~



//參考網頁
http://hi.baidu.com/wirelesscat/blog/item/3ca99723cd1d05579822ed9a.html

2008年7月29日 星期二

查詢 SCI 或 SSCI

進入ISI Journal List
http://scientific.thomsonreuters.com/mjl/
點選 SCI (SCIE) 或 SSCI 即可

使用搜尋時有一點要注意,
例如在SCIE裡,Title Word 要搜尋
IEEE TRANSACTIONS ON MOBILE COMPUTING
請打 mobile 或是 computing,要分開打
不要連在一起搜尋 mobile computing,會搜尋不到....囧

參考網頁:
http://fjtclibblog.blogspot.com/2005/10/sci-ssci-ei-tssci.html
http://nrlab.csie.ntust.edu.tw/~hdj/twxoops/html/

2008年3月26日 星期三

2008年2月19日 星期二

中文數字大寫

中文數字的大寫

零、一、二、三、四、五、六、七、八、九、十、百、千
零、壹、貳、參、肆、伍、陸、柒、捌、玖、拾、佰、仟

從小到大,每次要寫都不記得,
放在這兒比較好找XDD



Related Posts with Thumbnails