2010-01-07 聚會手記

上一週 || 下一週

前情提要

這一頁會固定於前一天週三中午附加在聚會通告的 Email 裡
若你也有想要分享的內容,也隨時歡迎你自助編輯加上你想分享的消息嘍 :-)

Mat

我上^n週提到的 inkboard 現在有 jaunty 跟 karmic 的版本嘍。

https://launchpad.net/~matlinuxer2/+archive/inkboard/+packages

C 語言的 volatile 的特性,這個通常在最佳化編譯時,比較有碰到。
如:

test.c:

int c;

void xxx(void){
  c=1;
  while ( c!= 0 );
}

void intq(void){
  c = 0;
}

test2.c:

volatile int c;

void xxx(void){
  c=1;
  while ( c!= 0 );
}

void intq(void){
  c = 0;
}

然後用 gcc 來最佳化編譯:

gcc -O1 -S test.c 
gcc -O1 -S test2.c

主要的差別是在最佳化的編譯,編譯器會認為 c!=0 恆真,而把他跳過。

c=1;
while ( c!= 0 );

而 volatile 的關鍵字可以提醒編譯器不要忽略。因為有時候變數會因為中斷而產生變化。
這個通常在最佳化時才會遇到…

可以得到 test.s test2.s 的差別:

--- test.s      2010-01-07 19:56:08.000000000 +0800
+++ test2.s     2010-01-07 19:56:07.000000000 +0800
@@ -1,4 +1,4 @@
-       .file   "test.c"
+       .file   "test2.c"
        .text
 .globl xxx
        .type   xxx, @function
@@ -7,7 +7,11 @@
        movl    %esp, %ebp
        movl    $1, c
 .L2:
-       jmp     .L2
+       movl    c, %eax
+       testl   %eax, %eax
+       jne     .L2
+       popl    %ebp
+       ret
        .size   xxx, .-xxx
 .globl intq
        .type   intq, @function

這裡可以看到有加上 volatile 的對照組,不會忽略判斷式。

jserv

eserv (最近將在 OSDC.tw 2010 發表的作品)

  • 前因:規劃 C 語言程式設計的課程,強調 John Dewey 博士注重「做中學」的教育方法,教育才要注重實際經驗,要從做中學習,給定一個具體而微的 Embedded AJAX 系統作出發,透過 gdb 去追蹤分析,進而作擴充,預期將掌握 UNIX 系統與 C 語言程式開發的技巧。具體來說,就是從簡單的 web server + CGI (純 C 語言 + POSIX 系統呼叫實做),以 AJAX 作為立即資料的呈現
  • 相關課程簡報:以 GDB 重新學習 C 語言程式設計
  • multi-thread, POSIX compatible
  • web server + cgi engine 合體, 只是不同 thread
  • 重寫系統到 27 KB 的 footprint。連背景圖都比程式大
  • CGI 的 callback function,用 C 程式來傳回 AJAX response,透過 jQuery,可以僅傳回所需資料字串即可,不用考慮複雜的 HTML
  • 可以用 GDB 作動態的偵錯,watch handle pointer, 可以看 CGI handler 什麼時候被設定或是修改

didiwiki: http://zh.wikipedia.org/zh-tw/DidiWiki

fourdollars

http://fd.idv.tw/radio/player.html
跨平台的 hichannel.
用 jqeury 直接塞 <object/>
想作成 firefox 的外掛,或是 gooogle chrome 的 extension.
console 版的也寫了

chrome 的元件:
在目錄下放 manifest.json
封裝 google chrome 外掛 .crx .pem
http://fd.idv.tw/radio/hichannel.crx

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License