2009年6月5日 星期五

lighttpd web server - configure 篇 (issues)

其實在一個embedded system裡,要用lighttpd來達到所有web ui的工作,真的還滿複雜的,這裡說一下我所遇到的難題。

1. FireWare upgrade:
在案子開發初期,要能有FW upgrade功能是一定要的!! 但很其怪的是,我cgi那裡,明明就有很明確的把要lighttpd從client那裡要檔案,但為什麼總是傳一傳就斷了呢?! 我想了半天,也許是lighttpd本身default的最大上傳檔案size有限制,所以我在 lighttpd.conf裡,加了以下:

server.max-request-size = 900000000
server.network-backend="write"
server.upload-dirs=( "/tmp" )

這裡的意思是,讓lighttpd能接受的檔案變大。 再來就是告知lighttpd在有檔案進來時,要存在哪裡。

加了這一段後,再大的檔案都丟的進來,當然啦,不能大過你自已設的 max-request-size

這個問題我是靠"lighttpd upload limitation" 來找到答案的!

2. 在我們這裡遇到一個非常奇妙的事,就是只要用IE來access 板子上的htm檔,他就會被cache住,而且都不會去reload。使得我們有很多很奇怪的issue發生;像是: reset to default。因為檔案被cache住,所以就算底層的data已經被改成default, 但你從網頁看,所有欄位資料還是原本的,造成reset to default FAIL!

後來,發現,從lighttpd出去的封包裡,server-header裡,並沒有"cache-control=no-cache";於是,我抱著試驗的心態,把以下的 mod_setenv和一些configure加上去

server.modules 裡,要加 "mod_setenv", 然後還要加上這些configure

$HTTP["url"] =~ "^/(.*)" {
setenv.add-response-header = ( "Cache-Control" => "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=-1" )
}

我稱之他為 "lighttpd cache-control" !

lighttpd web server - configure 篇 (default)

前一篇說了怎麼porting lighttpd,這裡就說一下,要怎麼讓這隻daemon很聽說的動起來。

首先,要注意到,這隻lighttpd要能起來,必須要吃一個叫 lighttpd.conf的檔案,也就是俗稱的conf 檔,上網找,可以找到很多很多sample.

基本上,在doc子目錄下面,你可以找到算是滿不錯的解釋,來教你怎麼大致上使用這個conf檔,來控制lighttpd. 像是,如果你要有user loggin的功能,你就把最上面那個 mod_auth 前的 #拿掉,在lighttpd起來時,他就會有loggin的功能了。 順帶一提,如果你要有loggin 功能,你必須提供 lighttpd.user的user:password的檔案,這樣子,lighttpd才知道你所能接受的使用者名稱和密碼。

如果你只是需要一個web server,那現在你只要執行 "lighttpd -f /etc/lighttpd/lighttpd.conf",你的lighttpd 就應該能被叫起來,這時,你從別台電腦連上去,應該就能在web browser裡能link得到了。

好了,基本的config到這裡應該是夠了,如果有遇到什麼問題,可以提出來大家討討論。

lighttpd web server - porting 篇

因為工作的關係,最近在研究一個很輕巧,很好用,而且功能算強大的web server - lighttpd (lighty)

在embedded system porting lighttpd 說實話算是很簡單,在這裡大約介紹一下

1. 到網路上下載 lighttpd,我的版本是 1.4.20. 下載連結請找google大神。
2. 如果只想在x86上面跑,沒有需要cross compile,或是不需要針對function做一些增減的話,可以直接make; make install.
3. 如果是要在embedded system上跑的話,必須要先編寫makefile, 我這裡提供一下範例

TARGETDIR=$(shell pwd)/target
SSL_CFLAGS += -I$(ROOTDIR)/lib/libssl/include/

CONFIGURE_CFG = \
--host=$(CROSS_COMPILE:-=) \
--target="" \
--build="" \
--htmldir="/www" \
--disable-ipv6 \
PCRECONFIG="$(ROOTDIR)/lib/pcre-7.8/pcre-config" \
PCRE_LIB="-L$(ROOTDIR)/lib/pcre-7.8/.libs -lpcre"

# --with-pcre="$(ROOTDIR)/lib/pcre-7.6" \

CONFIGURE_CFG += \
--with-pcre \
--without-bzip2 \
--without-zlib \
--with-openssl \
--with-openssl-libs=$(ROOTDIR)/lib/libssl/ \
--with-openssl-includes=$(ROOTDIR)/lib/libssl/include/

all: wwwlink Makefile
AM_MAKEFLAGS="-f Makefile" \
$(MAKE) -f Makefile

# CFLAGS="$(SSL_CFLAGS) -I$(ROOTDIR)/lib/pcre-7.6/" LDFLAGS="$(SSL_LDFLAGS) -L$(ROOTDIR)/lib/pcre-7.6/.libs -lpcre" LIBS="$(SSL_LIBS)" \
CFLAGS="$(SSL_CFLAGS) -I$(ROOTDIR)/lib/pcre-7.6 -DHAVE_PCRE_H=1 -DHAVE_LIBPCRE=1" \
LDFLAGS="$(SSL_LDFLAGS) -L$(ROOTDIR)/lib/pcre7.6/.lib -lpcre" LIBS="$(SSL_LIBS)" \
CFLAGS="$(SSL_CFLAGS) -I$(ROOTDIR)/lib/pcre-7.6 -DHAVE_PCRE_H=1 -DHAVE_LIBPCRE=1" LDFLAGS="$(SSL_LDFLAGS)" LIBS="$(SSL_LIBS)" \


wwwlink:
-rm -f www
ifeq ($(CONFIG_CTM_WWW_DIR),)
@if [ ! -d $(PRODUCTDIR)/www ] ; then \
echo "ERROR: There is no www directory in $(PRODUCTDIR)/www." ; \
exit 1 ; \
fi
ln -sf $(PRODUCTDIR)/www www
else
@if [ ! -d $(PRODUCTDIR)/$(CONFIG_CTM_WWW_DIR) ] ; then \
echo "ERROR: There is no $(CONFIG_CTM_WWW_DIR) directory in $(PRODUCTDIR)/$(CONFIG_CTM_WWW_DIR)." ; \
exit 1 ; \
fi
ln -sf $(PRODUCTDIR)/$(CONFIG_CTM_WWW_DIR) www
endif


Makefile:
chmod u+x ./configure; \
CFLAGS="$(SSL_CFLAGS) -I$(ROOTDIR)/lib/pcre-7.8/ -DHAVE_PCRE_H=1 -DHAVE_LIBPCRE=1" LDFLAGS="$(SSL_LDFLAGS)" LIBS="$(SSL_LIBS)" \
./configure $(CONFIGURE_CFG)

clean:
rm -rf $(TARGETDIR)
rm -f www
AM_MAKEFLAGS="-f Makefile" \
$(MAKE) -f Makefile distclean

preinstall:
rm -rf $(TARGETDIR)
mkdir -p $(TARGETDIR)
DESTDIR=$(TARGETDIR) \
AM_MAKEFLAGS="-f Makefile" \
$(MAKE) -f Makefile install

romfs:
$(ROMFSINST) -p 755 src/.libs/lighttpd /usr/bin/lighttpd
$(ROMFSINST) -p 755 src/lighttpd-angel /usr/bin/lighttpd-angel
mkdir -p $(ROMFSDIR)/lighttpd_www
$(ROMFSINST) www /lighttpd_www
$(ROMFSINST) -s /var/config.bin /lighttpd_www/config.bin
$(ROMFSINST) -p 755 lighttpd.conf /usr/lighttpd_old.conf
$(ROMFSINST) -p 755 lighttpd.user /usr/lighttpd.user
$(ROMFSINST) -p 755 src/.libs/mod_indexfile.so /usr/local/lib/mod_indexfile.so
$(ROMFSINST) -p 755 src/.libs/mod_access.so /usr/local/lib/mod_access.so
$(ROMFSINST) -p 755 src/.libs/mod_auth.so /usr/local/lib/mod_auth.so
$(ROMFSINST) -p 755 src/.libs/mod_cgi.so /usr/local/lib/mod_cgi.so
$(ROMFSINST) -p 755 src/.libs/mod_ssi.so /usr/local/lib/mod_ssi.so
$(ROMFSINST) -p 755 src/.libs/mod_dirlisting.so /usr/local/lib/mod_dirlisting.so
$(ROMFSINST) -p 755 src/.libs/mod_staticfile.so /usr/local/lib/mod_staticfile.so
$(ROMFSINST) -p 755 src/.libs/mod_evasive.so /usr/local/lib/mod_evasive.so
$(ROMFSINST) -p 755 src/.libs/mod_setenv.so /usr/local/lib/mod_setenv.so
$(ROMFSINST) -p 755 src/.libs/mod_redirect.so /usr/local/lib/mod_redirect.so
$(ROMFSINST) -p 755 server.pem /usr/server.pem

4. 請注意,我在這裡遇到的第1個問題是,pcre的問題,看的出來,lighttpd和pcre有dependence的關係,要能成功的讓lighttpd 找到 pcre的resource,你必須要像我這樣寫,不然,lighttpd會去reference到你本機的pcre,也就是說,就算你build 好了,丟到板子上,也不會動,因為他會說 pcre is not supported.

5. 在romfs方面,則要看你想包什麼功能進去,所以這裡建議,用到什麼包什麼,不要全部包包進去,除非沒有空間限制。

6. 到這裡,打make下去,應該在 src/ 下找到 lighttpd-angel, 和 src/.lib/ 下找到 lighttpd 和一堆 mod_xxx.so。 這些都是最後要等到target board上的必要檔案。

Porting 到這裡,應該算是成功,接下來就要看你把檔案等到target board上能不能動了。

2009年6月4日 星期四

前十字韌帶「又斷」了

其實早就知道右膝又出毛病,也許是因為不想接受手術失敗的結果,所以一直都是不用想他。

唉,可是,我才30出頭,就不能跑跳,會不會也太難過了一點?! 好吧,牙一咬,就跟韓偉醫師橋了開刀的時間。韓醫師的診所也許是因為是自費的關係,很多事情進行的會比一般健保醫院來的快很多,像是照MRI,我記得之前在北醫看診時,要先看診3週,才能約MRI的時間,也就是「至少」要等4週才能看到片子,知道膝蓋裡的情況。

而韓醫師這裡呢?星期5看診,就約了隔週2照MRI,照MRI當天可以拿到片子,如果你看得懂的話,可以先帶回家看一下。當週的星期五,韓醫師就會針對MRI的結果解說。然後告知手術是要怎麼進行,會做些什麼事,你是釘子會從哪裡進,哪裡出。新的韌帶會接在哪個位置,以及半月板需不需要修復等等...  我是覺得很仔細,很令人放心。

好啦~ 開刀前一天晚上8點,到台北市中山醫院報到,抽抽血,辦辦paperwork... 很快就到病房,護士也都很nice,會告知隔天幾點開刀,幾點要換衣服,有的沒的一堆...

開刀當天,因為是10點刀,6,7點就叫我換衣服,打點滴,還有做最後術前教育,像是麻醉有的沒的一堆...

最令人感到驚訝的是,8點接到韓醫師的電話,來詢問還有沒有什麼疑問,有沒有需要什麼的.. 實在又是一整個令人很放心,覺得這位醫生還滿細心的。

嗯,不一會兒,輪到我進手術房了,冰冰冷冷的手術房裡擠了不少人,有護士,有麻醉醫師,有助理醫師,有的沒的,當然,韓醫師己經在手術房等我了。 手術前又是一陣介紹,要麻醉,會怎麼麻醉;接下來韓醫師還是會問,有沒有什麼問題..  我這時不免心裡想著:「都己經躺在手術房了,還能有什麼問題?」 可是,還是那句,很令人放心!

半身麻醉後,身旁的護士說:「我現在要打針讓你睡一下囉!」 真的,就在當她問完那句話後,我就在倒數,看我幾秒會睡著,結果,不騙人,就當我決定要開始讀秒後的下一個知覺就是 ... 醒來時,韓醫師在說:「手術快好囉,你看,這些白白的東西就是你的韌帶哦!」 我才意會過來,啊,手術己經要到尾聲了...

不一下子,手術好了,傷口也縫好了,眼睛閉起來瞇一下;一下子,就發現人在復原室,然後韓醫師正拿著幾張照片在跟我解譯剛才做了些什麼。這個時候,整個人昏沉沉的,也不太記得他說了什麼。

記得才沒瞇多久,人就被推回病房,大概昏了有好幾小時吧,然後伴隨著麻藥退去的是一陣陣的嘔心想吐。好加在我忍住了,差不多到隔天早上才真的正完全恢復,不會想吐,然後正常吃喝東西。

而我的膝蓋呢?! 一直包著冰敷器,很重,然後傷口又會痛,所以我都不太想動,但護士小姐說,如果我不下床尿尿,他就要來催尿了!嚇的我趕緊東抓西扶,搖搖晃晃的去尿尿。 沒錯,手術當天就可以下床走動了,只是當然用的不是那支會痛的腳,但說真的,沒有真的痛到哪裡去,可以用那隻腳站立,會覺得傷口漲痛漲痛,但不至於到痛到站不了。

接下來進入了1整個星期平躺的恢復期,住院我只住了3天,韓醫師就說可以出院了;吩復我要24hr的冰敷。真的! 那個冰敷器可以說是救命用的啊! 每次半夜冰敷器裡的冰都溶了,不夠冰的時候,膝蓋馬上發熱,只要冰塊一下去~~ 哇哈哈,一整個舒服!

術後到現在己經1個月,大概能彎100度左右,能正常走路和上樓梯;因為大腿沒啥力,下樓梯可能還要一陣子。但至少我現在能強烈感受到新做上去的韌帶很緊! 因為我是2次手術,所以一開始的2個星期,韓醫師限制我不能彎,所以現在有點緊! 聽我朋友說,第1次手術的人,第2週就要彎到90度囉!

總結是,手術我認為很成功,但復健真的很痛很辛苦!

至於費用方面,在這裡寫個大概,有需要的人可以看看當做 reference.

手術費+冰桶+住院3天 : $65000 左右
護膝: $46000
看診第1次 $1200,之後每次 $1000
復健1次 $1200,可使用新光教育會館的遊泳池

診所全名:新光骨科運動醫學中心
採預約制,所以,要先電話預約,walk in是沒辦法看的,可以google 一下囉!

算一算,要10多萬,如果沒保險,說真的,是個非常重的負擔,好在,我自己有保險,然後公司團保也可以給付,所以自己要出的錢其實還好。

最後,非常感謝韓偉醫師給予我一個新的膝蓋!

2009年5月4日 星期一

前十字韌帶「斷」了

莫約5年前,我跟狗媽歡歡喜喜公証結婚後,我隻身回到了美國,把大學最後一年給好好的念完。
剛回美國等開學的那幾天,閒來無事,跟同學們照常在球場上拼個你死我活,但也許是長途飛機帶給的我的疲勞還沒散去,或是我那天打球打太拼了還怎麼樣,就在一個很基本的轉身過人時,聽到從體內傳來一聲﹣﹣﹣ 趴..

當場,我就倒地不起了,痛到說不出話來,當場被人抬了出去。

在接下來的幾天,哦! 不,是幾個星期裡,只要跟腳有關的事,我都做不到,就連一早起床要把腳抬起來,都是件很困難的事...

1,2個月後,腳的疼痛感消了不少,但整個膝蓋還是明顯腫腫的,只是,又能走能跳了! 當然,馬上就到球場去報到了,但是,發現到,我的膝蓋竟然沒辦法負荷我跳躍後落地的體重。每次只要我搶一個籃板,跳起來一著地,膝蓋馬上會歪一邊,就像是折到一樣的感覺... 那時我就覺得,大事不妙。

沒辦法,只好忍住不打球了;有一天,遇到一個念運動管理系的同學,聊到我膝蓋的事,他說他有曾經有堂課有教他們如何診斷,所以他就幫我拉了拉膝蓋,不拉還好,一拉之後,他很明確的告訴我:「同學,你的前十字韌帶斷了,因為你的膝蓋實在太鬆了!」

當下其實沒有什麼太大的感覺,只是覺得人在美國,要動什麼手術都好麻煩.... 好在,年底就要回台灣補請喜酒,好吧! 到時再說吧。

時間飛逝,一下子,我人就在台北醫學院照MRI了,醫生看了片子後說,你的韌帶己完全消失,要不要動手術重建?我心想,我才多大年紀而己,沒有韌帶不能打球還行嗎?當然要重建啊!

可是..醫生接著說,我需要你3個月的時間,動手術和復健。

唉,沒辦法了,我還必須回美國完成大四下的學分,好吧,當下就跟醫生約了5月,跟他說我會回來找他。

又是一個時光飛逝,不一下子,我就己經辦好住院,在北醫等著醫生幫我的膝蓋付予一個新的未來。

我記得那次是住院10天,手術是半身麻醉,一開始會睡一下下,睡醒後會聽到醫生在那裡又敲又鎚的,反正就是他很忙的在幫我做新的韌帶。

術後前幾天會包石膏,大概3,5天吧,會換上自費買的可調角度的護膝,然後就出院,其實我記得我沒什麼在復健耶,而且我的腳也沒有太痛,只是彎曲和申直時會稍稍卡卡的。只是啊,術後大腿那裡的積水一直都散不掉,我記得連續2,3次都去找醫生抽水,感覺手術很不成功。

重點來了,其實從術後一直到我3,4個月後把護膝拿掉後,我真的都沒有覺得我的膝蓋有多緊,但我都是相信醫生,沒有去懷疑所謂的「手術失敗」的可能。

一直到前一陣子,我的膝蓋動不動就會卡筋,不然就是很容易就去折到,不得不讓我回想起,多年前韌帶斷的時候的感覺......

就在上個月,我為了要把嬰兒椅從車子的後車箱抽出來,一個不小心腳滑了一下,「咔」的一聲,心想,可惡,怎麼又卡筋了,結果,這次卡筋,整個膝蓋腫了起來,痛了我好幾天。心想,不對啊... 這感覺,跟當初沒韌帶是一模一樣啊!! 不行不行,我必須想辦法去給醫生看看才行。

所以我就找了台灣做十字韌帶重建很有名的韓偉醫生,因為本身有保險,加上公司也有保險,2個保險的加持下,我自費去找韓醫師看診,不會花太多錢,所以我就去了,韓醫師聽了我的來意,就說..嗯,看來你的韌帶又出了問題,然後他在我的膝蓋上摸了一摸,拉一拉,然後微微的笑著說:「你的韌帶又斷了,因為這膝蓋實在太鬆了!」

天啊,不是吧.......又斷了?!?!?!?

2009年1月17日 星期六

終於.... 敗了

終於,我也走到這一步了。

我從沒說我自己是什麼攝影人士,充其量只是個敗家愛玩新鮮玩意兒的敗家老爺罷了。

從最初的EOS 400D,到底片的EOS 1V,雄雄發現,底片很好玩,因為有相館師傅幫我修圖,省得我在那裡調這調那的,而且,師傅調的又美又漂亮,所以我寧可多花點錢買底片洗底片,我也要玩底片,不玩數位。

可是... 最終還是敵不過數位的便利,去年拿了獎金去敗了EOS 5D,玩了半年,唉,怎麼拍出來的東西都平平的,真的是﹣so lame... 也就是無趣。

看著我那幾乎半個冰箱的底片,實在有點悲從衷來的感覺,帶著1V上街,等於是告訴整條街的人,你在拍照,因為實在太招搖,太醒目了。 生性敗家的狗爸我,便動起RF機的腦筋...

你看,如果能用台RF機,就算背脖子上,人家也不會像看到記者那樣的眼神看你,因為RF機通常不大,而且沒什麼聲響。好吧,就弄台RF機回來吧。以狗爸該死的敗家個性,唉,要看就要看最TOP的,所以,下面這台東西,會出現在狗爸的桌上,也不會太令人訝異吧。

Leica M6


這台算是M6前期產品,以型號來看的話。所以缺點是,如果逆光拍攝,RF觀景窗會整個像白內障那樣,看不到東西,但是,因為Leica M6後期有一批相機的內部構造使用塑膠材質,所以,狗爸寧可白內障的leica,也不要有塑膠材質零件的leica。

有相機不能沒有鏡頭啊! 
老樣子,喜歡的鏡頭買不起,所以咧... 就挑一顆leica鏡頭線上最便宜的一顆,summicron 50吧..



敗家加上虛榮,買了leica怎麼可以不買白金漢包呢?!
好吧!要,就一次到位吧.. 
千辛萬苦買到的Billingham for Leica


果然,再入手leica m6後,對器材的追求有停止了,但會停多久呢?沒人知道..
但可以肯定的是,狗爸開始認真思考倒底是在拍什麼小朋友?!花了醬多錢,倒底拍了什麼好東西?!

嗯... 真的是要好好的停下腳步來仔細思考了..

我﹣倒底在拍什麼東西啊?!