2007年7月29日 星期日

新生訓練投影片:Zigbee and Z-Stack

上週給實驗室碩一(零)新生上的zigbee簡單介紹,內容大約半小時,簡單地講了什麼是Zigbee還有Z-Stack,及以實驗室的一套Zigbee開發套件。

投影片

學 java script

為了趕流行,也為了重學 Web Design 的技術,最近也開始重新學 java script 了,上一次學這東西已經是高中的時候了。在Web2.0風行的今日,只好重新溫習這個簡單又複雜的工具,配合 HTML,CSS 與 XML,也順便了解一下目前網頁開發技術,不然要變成古代人了。

工具書呢,當然挑選 O'Reilly 的 Java Script : The Definitive Guide 5/e:



希望我的學習效率能好一點。

題外話,歐萊禮的書愈來愈有質感了,整個排版,紙質,內文,還外加個書套,真的是一整個專業,這一年內入手的三本O'Reilly書籍都是這種新式風格,目前資訊類的書,大概只有侯捷與歐萊禮能夠這麼吸引我了。

IPC通訊:pipe system call

繼 mkfifo 後,在閱讀 Linux Kernel 3/e 時又發現了一個好物:pipe

雖然也是 pipeline 的東西,但它是一個 system call,也就是可以直接在程式中使用它,以前所用的 IPC 溝通方法不外乎 shared variables,沒有注意到 pipe 這個好用的工具,這麼一來就不用額外建立 node 了,也不用開兩個processes來處理了。

pipe的使用方法很簡單, 在 code 裡直接呼叫 pipe,但要傳入一個大小為 2 的 int array,array[0]當作讀出的管線,array[1]當作寫入的管線,就可以fork出來或用thread,讓兩個行程互相通訊了。

在此要注意的是,在 POSIX 裡所定義的為Half-duplex pile(半雙工管線),也就是要使用某個fd(file descriptor)時,就要關另外一個,若是想要雙向通訊時,就要開兩個pipe;然而在某些UNIX實作了Full-duplex pile(全雙工管線),可以同時讀寫兩個FD。

那麼最重要的,pipe在Linux中是如何實作呢,可惜答案並不是雙向的,不過也不會像POSIX所定義的那麼麻煩,不同於POSIX,在Linux裡使用某個FD時,並不需要關掉另一個,不過若要雙向通訊,還是必需建立兩個pipe就是。

簡單的程式範例:
int fd[2];

int i;

if (pipe(fd)) /* create pipe */
fprintf(stderr, "pipe error\n");

else
if (fork()) /* parent will be reader */

{
close(fd[1]); /* close the `write' pipe */

read(fd[0], &i, sizeof (int)); /* read an integer */

printf("Read the value %d\n", i);

}

else /* child: the writer */

{
close(fd[0]);

srand(time(NULL));

i = rand();

printf("Writing the value %d\n", i);

write(fd[1], &i, sizeof (int));

}

2007年7月28日 星期六

WSN TestBed 架構圖

wsn.jpg

其實這個 TestBed saturn 學長 的畢業論文,前兩天他把架構圖給畫好了,看了一下覺得功能寫得太完美了吧,接下來是我要完成耶@@,例如資料庫的部分,目前應該是還沒用到(還是已經偷偷弄好了?),不過系統上的功能已經差不多都可以上線了,最重要的是,學長都把最難搞的網路線及電線佈好了,未來我應該只要改良,以及加入一些人文上的機制,應該就差不多了吧?

用 mkfifo 來重導 I/O

在我們Lab的WSN TestBed系統中,每顆node其實都用有線網路接回主機,但是node的I/O介面並不是RJ-45的接頭(Octopus I與Octopus II分別是rs232及USB),那麼要怎麼走Ethernet呢,答案就是用Convertor,像是這個 UT-620,就是將RS232轉成Ethernet的東西,由於其Driver都只有給windows的,那我在 ubuntu 上要怎麼用呢?

這個Convertor有個web的管理介面,看了一下裡面有一些設定TCP/IP的選項(設定ip及port,還月TCP或UDP),心裡高興了一下,難道這麼簡單嗎,於是馬上寫了個簡單的socket程式與它溝通,結果真的是這樣,OK,那麼我就只要在Linux裡弄個虛擬的tty device不就得了?接著開始研讀手邊的 Linux Device Driver 3/e ,發現寫 Driver 還蠻不容易的,很多C/C++的Library都不能用,連socket都不行,要用KSocket(在Kernel中用的),這根本是太噁心了,誰會想為了這一個小功能去學Kernel Socket,因此我停了許久,後來終於在ptt LinuxDev版認識了 mkfifo (Linux裡的工具)。

mkfifo是用來做為兩個process溝通的橋樑,屬於IPC的東西,作法就是用mkfifo建立一個虛擬的pipeline file, A process 將資料寫到這個pileline,另一個B process也可以從這個pipeline讀出東西,這豈不是我要的功能嗎?

mkfifo 用法很簡單, mkfifo --mode=MODE <pipeline name>,就可以了

希望USB也是如此....

2007年7月17日 星期二

PHP 4 end of life announcement

PHP官網發出來的消息,在PHP5釋出三年後的今天,PHP4已經正式走入歷史,不再開發,而新的PHP6也準備要釋出,記得我開始接觸PHP時還沒有版本的代號出現,若照推算應該是在PHP1的年代吧,沒錯,我對網頁開發的技術還是等留在古代,看來應該找時間好好地重新學習PHP才是。

2007年7月11日 星期三

ubuntu 7.04 處理 USB 裝置的 bug ?

昨天把tmote-sky插到電腦上的USB時,居然找不到/dev/ttyUSBX,仔細一看才發現,/dev/ttyUSBX只出現短短約一秒鐘,然後就不見了,可是在另一部電腦上做同樣的事卻是正常的,而兩部電腦的作業系統都是ubuntu,不過一台是7.04一台是6.10,難道7.04版本的處理方式不同於6.10?google了一下卻找不到相關的討論串,加上/dev/ttyUSBX有出現,只是又消失了,判斷應該是因為某個原因crash掉了,最後終於在tinyos-help上找到有人也提出相關的問題,試了一下就解決了 :D

步驟如下:
1. 移除 brltty 套件 (看了說明,應該是用不到的東西)

2. 重新安裝 udev 套件

3. 重開機

2007年7月8日 星期日

行事曆軟體 Sunbird 0.5

上週由Mozilla所推出的行事曆軟體Sunbird 0.5,在這個版本中,除了提高了穩定性及效能外,也支援了各家行事曆軟體的格式,方便使用者能從其它軟體輕鬆地轉移過來,而我認為最大的特色,就是能與google行事曆做同步,不過要另外裝plugin就是,以往要用google calendar時,一定要在能上網的地方用,現在可以先寫在本機上,等到上線時再更新上去,方便不少。

2007年7月7日 星期六

NetBeans 6.0 M10 釋出

喜歡用java開發軟體的人不可錯過的一套IDE:Netbeans,除了Eclipse外,Netbeans也是一套非常不錯的open source IDE,前幾天M10終於釋出了,這個版本是6.0正式版前最後一個milestone版本,看了一下發佈的消息,6.0這個版本不只可以開發java,也支援了Ruby,(J)Ruby,Rails,掛上plugin也可以開發C/C++,UML等等,寫C/C++能自動產生Makefile,也有了ctag+cppcomplete的功能(應該說是code complete),一個好用的IDE該俱備的功能它幾乎都有了,正式版釋出後,其它的IDE大概也可以丟了吧XD