2008年2月28日 星期四

內部類別存取外部類別

內部類別可以直接存取外部類別的成員變數以及函式,然而若要存取外部類別的參考,如:

class outer {
class inner {}
}

inner這個類別需要外部類別的參考
outer.this

2008年2月27日 星期三

打東東

不知道為什麼,就是超喜歡打東東這個話笑耶~~~

有個研究人員到南極去調查企鵝,想瞭解企鵝們平時的休閒活動是什麼。
第一隻企鵝說它的休閒活動是睡覺、游泳、打東東;第二隻說,捕魚、游泳、打東東;第三隻說,看書、游泳、打東東;第四隻說,玩球、游泳、打東東;第五隻說,唱歌、游泳、打東東;......
這個研究人員得到一個結論:企鵝們最愛做的事,是游泳和打東東。
就在研究人員準備回家之前,又遇到最後一隻企鵝,他心想,剩最後一隻了,也來問問看吧~
那企鵝說:我的休閒活動是玩球、睡覺、唱歌、捕魚、和~~游泳。
研究人員覺得很奇怪:為什麼你跟大家不樣,沒有打東東呢?

那企鵝說:我就是東東!

2008年2月25日 星期一

模擬程式完畢

花了將近一個禮拜的時間,終於寫完了這個模擬程式。在這一個星期裡,每天一到實驗室就是打開電腦Coding->Debughing->Coding->Debugging->…,無止盡的循環,整個心情都搞的很差。如今,終於告一段落了,剩下的只是整理出數據來,再把論文這個部份補齊就應該可以交差了。

目前有思考幾個數據呈現的方式
<橫軸,縱軸>
<實驗次數1~10, 換手次數> (柱狀圖?)
比較不同random的地圖的影響,應該每次都要比原來的好
<模擬時間?~?, 換手次數> (折線圖?)
比較時間對換手次數的影響,應該要模擬愈久,改善更多

以上的數據皆可在根據threshold及reliable_threshold做改變來加以深入討論。
threshold變小AP換的次數應該會減少一點點,因為比較晚再做AP Selection。
reliable_threshold變小(???)

2008年2月24日 星期日

陣列排序

我們可以透過實作java.lang.Comparable介面來建立比較的函式。實作此介面的好處可以很方便的使用sort的函式來幫我們排序。

例:假設AccessPoint有三個參數(x, y, strength),x、y為座標,strength為訊號強度。若我們有一個AccessPoint的陣列,希望將它依訊號強度大小排序:

public class AccessPoint implements Comparable {
public double x, y, strength;

public AccessPoint(double x, double y, double strength) {
this.x = x;
this.y = y;
this.strength = strength;
}
public int compareTo(AccessPoint ap) {
return (strength < strength ="="">

AccessPoint[] ap = {new AccessPoint(1, 2, 5), new AccessPoint(2, 3, 2)};
//遞增排序
Arrays.sort(ap);
//反向排序
Arrays.sort(ap, Collections.reverseOrder());

2008年2月23日 星期六

還是模擬程式進度

感覺整個模擬程式最難的地方已經完成了,那就是推薦清單的產生以及如何根據前一個AP來給相對應的清單。程式剛寫好時,測試的時候出現錯誤訊息,但其實這本來就是預期會發生的,多少會有些地方寫錯了,再慢慢debug就好了。只是這個bug讓我找的超久的,一度讓我以為我該不會找不到了吧!好在現在開發軟體都愈做愈好,最終我還是解決了。
接下來要寫的就全在Mobile Node方面的Code了,只要能解決模擬移動就應該可以完工了。但最重要還是數據,千萬別和我預期相反阿~~~

2008年2月22日 星期五

模擬程式進度

換手次數的模擬程式新增了方位的判斷,接下來就是要讓程式自動產生推薦清單了。今天寫的程式用到了餘弦定理,用角度來判斷方位。其實,餘弦定理早忘光了XD。

唉,高中數學都忘光了~~~有數學底子的果然還是比較適合唸資訊。

2008年2月21日 星期四

回復grub

當重灌Windows時,會發現grub不見了,以下為回復的方法。

首先先拿一片Live CD。進入後,開啟終端機執行下列指令:
# sudo grub update
接著提示符號會變成grub>

grub> root (hd0,2)
輸入含有/boot目錄的硬碟分割區代號

grub> setup (hd0)
安裝到MBR

陣列和指標的差別

檢視初始化一個字串到字元陣列和初始化一個字串到一個指向字元的指標的差別:
char arrayString[] = "I like playing baseball";
char *ptrString = "I like playing basketball";


最主要的差別就是在於arrayString是一個constant,而ptrString是一個variable。

我們可以將arrayString指定給ptrString
ptrString = arrayString;

但不能將ptrString指定給arrayString
arrayString = ptrString;
// 因為等號左邊必須是變數,或更一般的說法是lvalue

2008年2月20日 星期三

Predictive AP selection模擬程式動筆

論文換手次數的部份一直是被攻擊的地方,說是沒有數據來證明會比較好,所以只好自己來寫個模擬程式。
至於為什麼不用ns2、OMNet++等模擬軟體呢?最主要的當然是太難不會用,其次是我要的數據跟底層協定的實作比較無關,而是想比較Predictive AP selection和只考慮訊號強度的換手頻率。所以目前是打算用Java寫一個。
今天的進度是寫好了自動放置AP來產生一個涵蓋全地圖的訊號範圍。然後也可以任意撒AP到隨機的座標上。

Layout Manger

每個在Layout上的Component都有四個size(height, width)

  • Component.getMinimumSize() - 最小的極限值
  • Component.getMaximumSize() - 最大的極限值
  • Component.getPreferredSize() - 理想的大小
  • Component.getSize() - 目前實際的大小
而Layout Manager做的事就是決定每一個Component的大小以及放置的位子。當呼叫Container.validate(),則Container的Layout manager就會經由getMinimumSize()、getMaximumSize()、getPreferredSize()的提示,透過setBounds(x, y, width, height)來設定每一個Component真正的大小以及位置。而Layout manager所做的這些事是透過呼叫
  • layoutContainer(Container c)
然而,container也需要有getMiniumumSize()、getMaximumSize、getPreferredSize()這些函式,因為他也是個Component包住整個Container。所以Layout manager也必須考量Container內所有的Component的總大小來容納它們。這些事情是間接透過更上層的Layout manger來做到的
  • preferredLayoutSize(Container c)
  • maximumLayoutSize(Container c)
  • minimumLayoutSize(Container c)

2008年2月19日 星期二

狀況極差

彷彿又回到第一次上台報到的情況,今天整個人在Group Meeting的狀況非常的糟。明明就是自己的進度報告,但看到投影片時卻不知所云,報告的零零落落,該講的忘記講,被問問題的時候,腦筋又轉不過來,一片空白。好在不是在Lab Meeting發生,不然可能就下不了台了。但離下次的Lab Meeting也剩不到一個月的時間了,不能表現像今天這樣了。
我想,其中一個原因應該是一整個下午在弄Java的Layout manager的程式碼,到最後還是沒寫好,心情整個很差,讓我也沒有心思再去準備晚上的報告。但不管怎麼說,反正就是自己準備不夠,要好好反省一下。
雖說狀況很差,不過今天的Group Meeting從學長以及同學、學弟們的問題得到很多的收穫,尤其是我論文最後的換手次數的問題,大概有新的想法可以寫程式模擬取得一些數據來。

初級、中級、高級

看到踩地雷的選項有分初級、中級以及高級,字的後面有加上一個英文縮寫,分別是(B)(I)(E),B一看就猜出是Beginner,然而I和E就是想不出來,所以就查了一下:

  • 初級 Beginner or Elementary
  • 中級 Intermediate
  • 高級 Advanced

看起來高級縮寫應該是A才是。
踩地雷這裡的E應該指的是Expert,專家級。

2008年2月16日 星期六

高油價

今天去加油站給機車加個油,結果共花了我整整180元,又破了我的記錄了,荷包大失血。
記得大一那時候九五一公升也才十九元,現在一公升卻飆到三十元,真是可怕。看來走路才是王道,不僅僅是省錢而已,最重要的是還可以愛護我們的環境。




非必要的時候就儘量別騎車囉~~~

2008年2月14日 星期四

UVa Online Judge System

UVa Online Judge System是一個線上解題的系統,系統裡收集了許多比賽的題目,如ACM。可以用C、C++或是JAVA來寫,是一個練功的好地方。
許多人在高中就開始碰了,我實在是太落伍了,所以趁現在來插花一下。
挑了簡單的Volume I 100 - The 3n + 1 problem寫寫看,這樣挫折才不會那麼大。
寫完和測試完之後,題目的右上角有一個submit的按扭,即可把我們的程式碼貼上去。接著就可以看到結果了。

開學了

最後一個寒假就這麼結束了,回家將近兩個星期,其中有整整一個星期是待在鄉下宜蘭過年,剩下的時間則是待在台北。本來是可以待更久的,天算不如人算,偏偏老闆約明天下午的時間,要交進度給他。唉,提早回去也就算了,重點是去哪生進度阿,哪有人在過年時間寫論文.....我只有把我的英文摘要翻譯成中文摘要,看來只好硬著頭皮交出去了。

兩個小時又三十分鐘的車程,我又回到了台中。從大學到現在的研究所,生活在台中已經整整五年多了,或許再過一個學期,我可能即將要離開這個熟悉的地方,心中多少有些不捨。

2008年2月12日 星期二

scarf

scarf
n. 圍巾、披巾、頭巾

Scarf can give you almost a different style when you wear it even with a normal dress.

2008年2月11日 星期一

2008 過年

每年過年都在宜蘭渡過,今年當然也不例外。在小年夜的前一晚就回到了宜蘭。
由於我哥我姊都是除夕那天才開始放假,所以前兩天我都只是坐在客廳看著電視渡過。

到了除夕這天,親友團一個接著一個來報到,整個家突然熱鬧了起來,光我們這群表兄弟姊妹就十多人了,年夜飯擺了兩大桌,一桌大人,一桌就是我們這群。一堆大魚大肉的,看的是眼花潦亂。然而,除夕的重頭戲當然就是紅包囉!記得以前我們這群表兄弟姊妹都是一起領紅包的,今年,只剩我一個大豐收了,他們每個人都工作了,唯讀我還在唸書,一個人就領了九個紅包,荷包滿滿滿。

初一的行程還是和往年一樣,一早就到各廟宇拜拜,而廟裡都會提供平安粥供大家食用。所以,我們一早的行程就在不同的廟裡吃了四碗,一次將早中餐解決。




到了下午,一群表兄弟姊妹們決定去友愛看電影,我爸開著一台車,裡面竟載了九個人。一到了友愛,人山人海,尤其是電影院。然而,大家想看的電影都不太一樣,所以我們就分三團,一團是看功夫灌籃,另一團是看蓋世奇才,最後則是曼哈頓情緣。我是選擇看最後一部啦!

初二起床,爸要載我們去吃魚丸米粉,本想去吃阿添魚丸米粉,結果到了那,竟然沒開。於是只好到另一間楊彩卿魚丸米粉。還是阿添魚丸米粉比較合我胃口。下午,一整天都飄著細雨,完全沒有其它行程。晚上則我和我爸、媽、大姑等打牌渡過。唯一的收穫是我學會玩十三支了。

初三起床,換我哥載我們這群表兄弟姊妹們吃魚丸米粉。這次不是到楊彩卿魚丸米粉,而是去陳茂庚魚丸米粉。依我吃完後的感想,在我心中的排名是阿添 > 陳茂庚 > 楊彩卿。下午的時候,發現天氣還不錯,於是就去了傳統藝術中心。人山人海,整個超大的停車場都快爆了。我們就在那走馬看花。神奇的是這裡竟然也有賣包心粉圓。以前去羅東夜市時一定會去吃的,原來這裡也新開了一家,所以當然不能錯過了!大家都點熱的,只有我點冰的,大家都不瞭解冬天吃冰才是最好吃的。





初四就回台北啦!雖然好久沒開車,不過還是平安到家了!

2008年2月2日 星期六

2008-02-01 爬山+尾牙+老師生日+唱歌

二月一日是個忙碌的一天。為了要吃一年一度的尾牙,竟還必須先征服大坑2、3號。
之前爬過1、2號,從頭到尾幾乎都要拉著繩子,不然一踩空可能就要跟這個世界說再見,所以當然這次的登山也不例外。
這一天的氣候和我想的不太一樣,竟然艷陽高照,而我卻在出門前換了長袖還加上一件厚外套,真是失策。這也讓我一開始爬的時候,不是很順,有點中暑的感覺。好在休息一會,漸漸跟上腳步。

我們是三上二下,二號是比較陡,有些地方感覺都快成90度了。不過下山比上山輕鬆多了,一口氣沒有休息就到了山腳下。

征服了大坑2、3號,接下來就是重頭戲尾牙宴囉。這次比較特別是老師的生日也是這一天,所以就一起慶祝。十二菜一湯,一開始上菜的時候,還拚命的吃,結果後面的幾道菜就吃不太下。威廷和小書書中途跑去買了蛋糕,要給老師驚喜。




眼看吃完,行程就快結束了,大家又提議要去唱KTV。一開始好像博班都說要去,但到最後,只來了小毛學長,而老師也有來露臉一下,唱了一首歌。然後說要先出去一下,結果就沒回來了XD。



KTV還是我第一次去耶,氣氛果然是非常歡樂,威廷和大鳥~~~讚。

update-alternatives

Debian提供了update-alternatives的工具,可以用來管理套件的版本。例如:系統有三套Java的套件GIJ、GCJ和Sun Java,如何能自由且快速的切換不同版本。

首先,先看一下java指令的路徑
# which java
/usr/bin/java

# ls -l /usr/bin/java
/usr/bin/java -> /etc/alternatives/java
# ls -l /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/java-gcj/jre/bin/java


我們可以看到java的指令用一個symbolic link連到/etc/alternatives/java,而/etc/alternatives/java又是一個symbolic link連到/usr/lib/jvm/java-gcj/jre/bin/java。
所以update-alternatives就是將/etc/alternatives/java改掉。


# update-alternatives--display java
java - status is auto.
link currently points to /usr/lib/jvm/java-gcj/jre/bin/java
/usr/bin/gij-4.2 - priority 42
slave java.1.gz: /usr/share/man/man1/gij-4.2.1.gz
/usr/lib/jvm/java-gcj/jre/bin/java - priority 1042
/usr/lib/jvm/java-6-sun/jre/bin/java - priority 63
slave java.1.gz: /usr/lib/jvm/java-6-sun-1.6.0.00/jre/man/man1/java.1.gz
Current `best' version is /usr/lib/jvm/java-gcj/jre/bin/java.


可以看到目前系統有gcj和Sun Java,而=由於status是auto,而gcj的優先權最高,所以可以最下面顯示目前最佳的版本是gcj。若要改變成java-6-sun:

update-alternatives --config java

即可選擇java-6-sun。