上週給實驗室碩一(零)新生上的zigbee簡單介紹,內容大約半小時,簡單地講了什麼是Zigbee還有Z-Stack,及以實驗室的一套Zigbee開發套件。
投影片
2007年7月29日 星期日
學 java script
為了趕流行,也為了重學 Web Design 的技術,最近也開始重新學 java script 了,上一次學這東西已經是高中的時候了。在Web2.0風行的今日,只好重新溫習這個簡單又複雜的工具,配合 HTML,CSS 與 XML,也順便了解一下目前網頁開發技術,不然要變成古代人了。
工具書呢,當然挑選 O'Reilly 的 Java Script : The Definitive Guide 5/e:

希望我的學習效率能好一點。
題外話,歐萊禮的書愈來愈有質感了,整個排版,紙質,內文,還外加個書套,真的是一整個專業,這一年內入手的三本O'Reilly書籍都是這種新式風格,目前資訊類的書,大概只有侯捷與歐萊禮能夠這麼吸引我了。
工具書呢,當然挑選 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就是。
簡單的程式範例:
雖然也是 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");
elseif (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日 星期六
用 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也是如此....
這個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 釋出
訂閱:
文章 (Atom)