2011年4月8日 星期五

好物分享-輕便傘車


Syncon欣康HS00107鋁管加寬型傘車



Inglesina Trip系列

SSH第一台推車是在他五個多月時買的,用沒幾次就被我收在儲藏室,因為太重了。當時買的是Inglesina Trip系列,重量6.3 公斤,扛著上下樓梯很吃力,出門就算收納起來要拿上公車也超不方便,所以乾脆不用。最近因為需要又重新拿出來使用,還是覺得太重了,因此上網買了第二台手推車。這次我選擇收納後可揹式的欣康輕便傘車,才4.5公斤,在Y拍買1290元,承重18公斤,帶ssh出門時最怕他突然想睡覺,以他現在14公斤的體重,抱著他走5分鐘就氣喘吁吁,現在有這台輕便傘車就方便多了。當初第一台會買Inglesina是因為它是義大利製,跟Combi或Aprica大陸製相比,感覺錢花得比較有價值。但重達6公斤的推車,若是在有電梯的公寓使用就很好用,因為Inglesina的輪子偏大,在凹凸不平的路面上很好推,至於欣康傘車則是一切從簡,麻雀雖小,五臟俱全,該有的功能都有,唯一缺點就是收起來時不能獨立站立,要靠著牆壁,不然就是用揹的,推車本身就有揹帶,我覺得用揹的還算方便。

2011年3月27日 星期日

中興月子中心

第二胎還是選擇到中興月子中心。雖然早在去年9月就已預約訂房,但是中興不收訂金,只單純登記預產期,等生產當日再電話告知入住日期。結果我想入住的時間沒有空房,只好在生產醫院自費延住一天。所以有沒有房間,完全看運氣。

相較於三年前,制度上有些微改變。現在是餵奶時間一到,護士電話通知,攜帶母嬰卡到嬰兒室推嬰兒車將寶寶推回房內餵奶,餵完奶再自行推回去,餵奶多久要自行記錄。除了先生以外,訪客一律在會客室,不能進房間,不過我看到很多媽媽還是帶家人、朋友進入房內,所以管制得不是很嚴。

房間設備上,有雙人床,雙門小冰箱,20吋電視,熱水瓶,梳妝台,2張沙發椅,衣櫥,小板凳(哺乳時墊腳用),枕頭,V型餵乳枕(偏軟),厚薄棉被各一條,吹風機等用品。我建議自行準備硬一點的授乳枕,第一胎我買六甲村的樂活枕,這一胎我買妳心親密餵奶墊,這款偏硬,餵奶時寶寶不會一直往下滑。房間大小約9坪,空間相當大。沐浴清潔用品要自備,雖然每周提供1包平板衛生紙,但我覺得不夠用,建議準備一串抽取式備用,中興的床很軟,軟到床邊緣根本坐不住,我不喜歡,尤其我剖腹產,太軟的床讓我起身很費力,常因為起身而拉扯到傷口,所以餵奶我都坐在沙發椅上,沙發是硬的,背部墊個枕頭,用硬一點的「妳心餵奶墊」,腳再踩小板凳,這種姿勢餵奶很舒服。

兩間擠乳室,備有四台美樂-醫院專用型吸乳器自行準備吸乳罩就可以自由使用。吸乳器不是借回房內用,而是到擠乳室用。中興提供三個小玻璃奶瓶供媽媽裝母奶。擠出的母奶可存放在嬰兒室,半夜不想親餵時,可由護士代為瓶餵。

餐點方面,跟以前差不多,早中晚三餐外加兩份點心。點心是早上10點、下午3點各一次。早點是鹹的,像豬腳花生湯、香菇雞湯,還加一壺養生茶飲,像紅棗桂花飲、薑棗甜茶,這是三年前沒有的;午點是甜的,有紅豆湯圓、紫米桂圓粥等,每天都不一樣。用餐時間把餐車推到外頭,服務員會將餐車推進房內,以免很多媽媽不知道餐點已經送來了而耽誤了用餐。有些媽媽不訂月子中心餐點,而是另訂外面的月子餐,像廣和, 郭老師之類的,中興備有加熱區,有微波爐,電鍋可使用。另外有泌乳茶可供訂購,一杯75元,想衝奶量的媽媽可以先訂1杯喝喝看,看敢不敢喝再決定是否續訂。我三年前有喝過,口味可以接受,所以一連訂了7天,每天2杯,泌乳茶會在下午3點時連同午點一起送來。由於晚餐5點半就送來,之後要到隔天早上8點才有早餐,這10多個小時很容易餓,尤其如果你半夜要起床親餵的話,真的會感覺餓,所以我另外準備水果、鮮奶、豆漿、沖泡式黑芝麻糊及土司備食。萬一真肚子餓,可以吃點充飢。但若半夜不親餵,那建議晚餐後就不要再進食,因為月子餐一天總熱量已有2800卡,足夠哺乳媽媽的營養需求與熱量供應。

月子中心每天提供一套哺乳衣,入住期間都要穿著中興提供的衣服。每天有清潔人員來房內倒垃圾,加滿熱水瓶開水。每周更換床單一次,提供一包衛生紙,每周三次至房內拖地及清洗廁所。

入住期間,護理員會教導如何餵母奶,檢查子宮恢復情形,每天量血壓、耳溫。寶寶只有媽媽跟爸爸可以抱,爸爸要穿隔離衣才能抱寶寶。每週一至週五,下午三點都有媽媽教室。

費用方面一天總價4220元,內含房間費2866元,嬰兒照顧費754元,餐費600元。如果不訂餐可扣除餐費,若是寶寶照黃疸,到樓下嬰兒病房治療時,也可扣除嬰兒照顧費。媽媽生病可直接掛號到樓下就醫,像我剛入住時就感冒咳不停,護士幫我掛耳鼻喉科,診號到了再下樓去看診,不必久等。

每個媽媽有一次「嬰兒沐浴課程」可體驗,爸爸跟媽媽可一起參與,可以進到嬰兒室,親自幫寶寶洗澡,記得三年前第一胎上嬰兒沐浴課程時超緊張,第一次幫ssh洗澡手忙腳亂,即使護士從旁指導,我依然洗得戰戰兢兢,結果洗太久,ssh全身失溫變成紫色,還好護士趕緊包上浴巾,寶寶很快就回溫恢復正常膚色。沐浴課週一至週日每天都可以上。我的經驗是,入住當天就趕快跟護理站登記,因為週六日的時間很快就被預約。

坐月子期間,洗頭髮也是令許多人困擾。像這次生第二胎適逢寒流,洗頭怕著涼,加上剖腹產要10-14天才能淋浴,洗頭根本不可能。還好中興B1有美髮部,洗頭130元,也可以到病房服務,價錢再高一點,我產後第5天時在醫院洗過一次,180元,住進月子中心後,產後第9天到中興B1去洗頭,感覺比生產醫院洗得更仔細。B1還有超商跟維康藥局,附近有杏一藥局,拿月子中心發的母嬰卡到維康跟杏一購買皆可打9折,杏一還可幫忙送貨至月子中心,記得第一胎時,我需要購買一支吸鼻器,大約一百多元,我只需打電話給杏一,跟他說我要一支跟月子中心一樣的吸鼻器,沒多久就有專人送至我房間,方便又快速。

出院要提前三天告知,費用可刷卡,可報稅,中午前出院。有些媽媽提早出院後還繼續訂中興的月子餐,我覺得挺不錯的,早餐150,午餐225,晚餐225,我覺得早餐不需要,可只選擇訂午晚餐,但要自付快遞運送費。

剖腹生產,麻醉出槌

這次剖腹產,在麻醉過程中,出了狀況。由於第一胎已有經驗,我知道施打麻醉時,產婦要弓著身體,呈現蝦子狀,額頭要盡量貼到膝蓋,打完麻醉後要立即躺平,沒多久雙腿就會失去痛覺,
無法抬高。可是,第一次麻醉時,當麻醉師要我試著抬起右腳時,我居然可以抬得很高,我跟麻醉師說,我還可以踢球呢!我說我的雙腿沒有麻掉的感覺,麻醉師趕緊捏我肚皮測試,發現我肚皮部位仍有痛覺,麻醉師臉色黑青,無奈地說,要重新麻醉。

第二次麻醉,改變姿勢。我坐起來,抱著枕頭,額頭靠近膝蓋,盡量彎身讓背部弓出來。還好第二次麻醉不會痛,也順利成功。只是手術過程中遇到出槌狀況,心裡真的超緊張,我當時很怕醫生會改成全身麻醉。

2011年3月16日 星期三

設定 screenrc hardstatus 的 STRING ESCAPES

忘記之前有沒有貼過,更新一下加料版的 ~/.screenrc ,用 screen -DR 啟動

# http://jonny.ubuntu-tw.net/2011/03/screenrc-of-vimperator-like.html
# http://blog.eater.org/2008/12/new-screenrc-hardstatus-string.html
# http://www.debian-administration.org/articles/560
vbell off
defutf8 on # default new window encoding
defscrollback 8192
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' # 開啟 256 色模式
hardstatus string "${USER}@%H %-Lw %{= BW}%54> [current: %n ] *%t%{-} %+Lw%< %= Date: %Y/%m/%d Time: %0c Loading: %l"

新加了 defutf8 on 之後 screen -UDR 改成 screen -DR 可以不用加 U 選項,新加 defscrollback 8192 將 Ctrl + a + ESC 的 Page Up/Down buffer 由 100 行改 8192 行,Ctrl + q 或 Ctrl + a + q 離開。另外就是 hardstatus 加比較多料,主要分成三段:

一、登入帳號跟主機名稱
"${USER}@%H "

二、 參考別人從 screen manpage 改的各個 screen window,目前 window 會加 [] 包住,對 screen manpage 的 STRING ESCAPES 還是不太瞭解,要再花時間看
"%-Lw %{= BW}%54> [current: %n ] *%t%{-} %+Lw%<

三、新增日期時間跟 Load average 會隨 window 增加被擠到後面
"%= Date: %Y/%m/%d Time: %0c Loading: %l"

參考以下作者的修改:
  1. 凍仁的 Ubuntu 筆記: screenrc of Vimperator-like
  2. blog.eater.org: New screenrc & hardstatus string
  3. An introduction to the visual features of GNU Screen
  4. man screen

2011年3月10日 星期四

喉舒樂口含錠

杏輝出的喉舒樂口含錠不可咬碎或吞食,待口水溶解殺菌喉片。

根據官網的產品說明:
主要成份是 Cetylpyridinium chloride對各種病原性細菌,殺菌作用迅速有效,不但對口腔咽喉之疼痛,腫脹炎症有治療效果,且對口腔發酵有抑制之效能,故對口臭之消除有效。

用法用量:
成人1回1錠,小兒1日1/2錠,1日3~4回含於口中,使徐徐溶解睡前服用,有效成份能高度保持於唾液中,效果更好。

注意事項:
1.使用本劑若有發疹等過敏現象發生,請即停止使用。
2.本劑對口腔,咽頭會有刺激感覺。        
3.將喉舒樂含於口中,請勿咬碎或吞服


摘譯
Cetylpyridinium chloride 英文維基百科:
根據維基百科解釋,Cetylpyridinium chloride 常見於漱口水、牙膏、口含錠、喉嚨噴劑、呼吸噴劑、鼻噴劑產品中,是能殺死細菌與微生物的醫藥用殺菌劑。

已經被證實有效防制牙菌斑、減緩牙齦發炎。某些農藥殺蟲劑中也會採用為成份之一。

然而根據 WebMDeMedicine 的說法
Cetylpyridinium chloride 跟氯已定一樣,也有造成牙齒咖啡色斑的副作用,另外據說也會造成味覺障礙

假如吞食或是成為氣體吸入體內會造成中毒

2011年2月27日 星期日

台灣製造的不鏽鋼保溫提鍋

因為要準備第二胎期間,阿母要幫艾媽提愛心魚湯的工具,我們找了一些適合單手提帶、可保溫、安全衛生的不鏽鋼保溫鍋給大家參考。當然也特別找了都是台灣製造的精品。

1. 繕寶 2 公升裝 799 元

2. 三光 2 公升裝 680 元

3. 鍋寶 1.8 公升 699 元

4. 鍋霸 1.4 公升 650 元

原本是想在百貨公司買,有考慮買瑞士製造的不鏽鋼提鍋,但動輒近萬元的大提鍋,一來價位高貴我們無力負擔,二來寬鍋口的要提帶也不方便,不然就是用保溫壺再內裝不銹鋼提鍋,價格都在兩千元附近。除了瑞士製造以外,大多品牌都是中國製造,讓人不敢用,反而在巷子裡的水電行找到台灣製造的精品,建議需要買的人先逛逛水電、五金行、大賣場,百貨公司反而找不到物美價廉的台灣精品。

2011年2月18日 星期五

懷孕後期

孕期進入倒數50天,除了例行產檢外,待產包也已打包妥當,希望能照預期日子進行剖腹生產。

懷孕後期,身體不適處很多,別的孕婦是腰痠背痛,我是腰一點都不酸,屁股倒是痛得很,可能因為我已經沒有腰了,但為什麼屁股會痛呢? 我就不懂了。行動上變得很慢很慢,我是急性子,平常走路快,說話快,做甚麼都快,現在則是想快也快不了。由於第一胎早產經驗,這一胎我是更謹慎小心,力求足月生產。

最近頻尿嚴重,一個晚上要起床解尿8-10次,每次翻身都屁股酸痛,天冷還要起床上廁所真的好痛苦。有時睡到一半還會覺得呼吸困難,也因為睡眠品質不好,很容易變成惡性失眠。至於很多孕婦會遇到的半夜腳抽筋情況,我在加強補充鈣之後,已不再發生。

開始天天跟ssh作心理建設,讓他明白我即將入院生產加坐月子,有一小段日子不能24小時陪伴他,從他的表情來看,我想他懂得我意思。

2011年2月3日 星期四

Grace Hopper 名言摘譯

Why don't you just go ahead and do it? Remember,
It is always easier to ask for forgiveness than it is to get permission.
為何你不動手去做呢?要記得:取得諒解總是比取得允許容易。

A ship in port is safe, but that is not what ships are built for.
人們造船並非為了停泊在港口中,而是要駕馭驚濤駭浪。

From then on, when anything went wrong with a computer, we said it
had bugs in it.
從此以後當電腦出錯,我們就說有 bug。

The most dangerous phrase in the language is, "We have always done it
this way."
最危險的一句話是:我們一直都是這麼做的。

Humans are allergic to change. They love to say, We have always done it
this way. I try to fight that. That's why I have a clock on my wall that
runs counter-clockwise.
人類對於改變很敏感。他們總是說:我們一直都是這麼做的。我嘗試挑
戰這種想法。這也是為何我的時鐘是逆時鐘轉的。

Leadership is a two way street, loyalty up and loyalty down. Respect
for one's superiors; care for one's crew.
領導統馭是雙向車道。對上忠誠也要對下忠誠。尊重上級,關懷部屬。

One accurate measurement is worth a thousand expert opinions.
一次精準的測量價值等同一千筆專家意見。

Someday, on the corporate balance sheet, there will be an entry which
reads, Information; For in most cases, the information is more valuable
than the hardware which processes it.
總有一天企業的資產負債表上會有"資訊"這個欄位。因為使用這硬體處理的
資訊價值,將會超過硬體本身的價值。

We are flooding people with information. We need to feed it through a
processor. A human must turn information into intelligence or knowledge.
We've tended to forget that no computer will ever ask a new question.
人們總是得到過多資訊,這些資訊將需要輸入處理器。由人類將這些資訊
轉變為智慧與知識。我們容易忽略電腦不會問新問題的缺陷。

To me programming is more than an important practical art. It is also a
gigantic undertaking in the foundations of knowledge.
對我來說程式設計不只是實用的藝術,也是建構知識基礎的巨大任務。

They told me computers can only do arithmetic.
他們跟我說電腦只能做計算。

In pioneer days they used oxen for heavy pulling, and when one ox
couldn't budge a log, they didn't try to grow a larger ox. We shouldn't
be trying for bigger computers, but for more systems of computers.
在探險拓荒時代,人們使用牛群拖重物,當一頭牛搬不動木頭,他們並
不會找更大的牛來搬。因此我們不應該朝向更大型電腦的方向走,而
是建立更龐大的(電腦組成的)系統。

Life was simple before World War II. After that, we had systems.
二次大戰前的電腦是簡單的。在那之後我們有了電腦系統。

We went overboard on management and forgot about leadership.
It might help if we ran the MBAs out of Washington.
我們太注重管理反而忽略領導統御。也許華盛頓沒有企管碩士會好一點。

At any given moment, there is always a line representing what your
boss will believe. If you step over it, you will not get your budget. Go
as close to that line as you can.
任何情況下,你的老闆對你的信任總會有限度。如果你超過他對你信
任的程度,將得不到一毛預算可用。在這範圍內盡你所能的逼近信任
的極限。

I seem to do a lot of retiring.
我好像一直在退休。

I handed my passport to the immigration officer, and he looked at it
and looked at me and said, "What are you?"
我把護照拿給入境海關人員後,他看著護照再看看我,問說:你是哪個行業的?
(指她作為時代先驅,常人無法理解她的工作內容。)

參考連結:

編譯器與 Debug 的傳奇:女牛人Grace Murray Hopper 小傳 (簡中)

BCC-16(in Chinese) 計算機概論十六講 POOL 3.06 Grace Hopper

Grace Hopper - wikipedia


葛麗絲。霍普 - 中文維基百科

2011年1月23日 星期日

自動販賣機整理資料

1. 飲料販賣機
(1). 統一速邁,
網址: http://www.vender.com.tw/auto-sale.htm

(2). 黑松販賣機:
網址:http://www.heysong.com.tw/business.htm
聯絡方式:
線上申請:http://www.heysong.com.tw/business1_2.asp
電話:黑松股份有限公司 自販業務部 (02)2706-2191 分機 340~343
本公司亦很樂意隨時為您聯絡並提供自動販賣機完善的服務與解答。

(3). 可口可樂販賣機:
網址:http://www.coca-cola.com.tw/contact/vending.aspx
聯絡方式:
週一至週五08:30~17:30 請聯絡: 自販客服人員-林小姐
TEL:(03)270-0584
E-mail: RitaLin@swirebev.com
非以上時間請於09:00~21:00聯絡: 自販業務發展經理-魏先生
Cell phone: 0915-028536
歡迎介紹,經效益評估後完成裝機,我們將贈送您一份小禮物 (市值約NT500)

(4). 快買特市集(讀者提供)
網址: http://www.qmart.com.tw/VMManager/index.jsp

2. 其他民生用品販賣機:
(1). 面紙、口罩、衛生綿 ...etc 非插電式自助販賣機。
(2). 魚、鳥飼料販賣機
(3). 加水機
(4). 自動抽籤機:http://www.dafo.com.tw/pro03.htm
(5). 雨傘(國內有廠商做嗎?)
(6). 手機充電器(桃園國際機場有)
(7). Payeasy 美妝機

3. 娛樂用遊戲機
(1). 甲蟲王者
(2). 夾娃娃機
(3). 點唱機
(4). 兒童可乘坐的遊戲機

2011年1月7日 星期五

閱讀:現代龍馬何處尋 - 寫在日本第三次開國前夕

趁著龍馬熱潮,在找"學會思考,你贏定了"時,翻到這本書,試讀幾篇覺得不錯就一起買回家看,結果是比"學會思考"一書還有趣的書,在一周通勤時間內看完。

跟台灣同樣夾在美國與中國兩大國之間,作者張瑞昌先生藉由認識日本的在地採訪,讓我們在各篇閱讀中,每每想到台灣的相似之處;外交上與兩大國斡旋的借鏡,從阿扁開國開始政治親美、經濟親中的務實政策,到馬英九的政治、經濟皆親中的重大政策轉變讓人無法一時適應,而閱讀張瑞昌先生的短篇集,則讓人看到更理性務實的島國外交運作。

內政上政黨之間的權力鬥爭,或同黨人士的內鬥,日劇 Gold 描述的曾經放棄奧運金牌夢想的泳(勇)者回歸戰場重返榮耀、職棒熱潮的明星偶像、釣魚台列島的領土爭議、上一輩對日據時期與國民黨來台後的愛恨情仇,最終回歸庶民生活的描寫,訴說著平民百姓的點點滴滴,處處引起共鳴。

這是本不管是哈日族,仇/恨日族,都值得花時間去瞭解的日本觀察記錄。

記得楊淑君的跆拳道爭議中,網路上也有聲音說出,要我們平心理性看待與台灣政經情勢類似的南韓,而非受人煽動的一味反韓。期待也有記者能對韓國進行同樣深入的親身訪問與觀察。

參考:

博客來書籍館 現代龍馬何處尋 - 寫在日本第三次開國前夕

張瑞昌@中時部落格

2011年1月5日 星期三

RFID 產業與 Google Android 2.3 NFC 關係

Barcode 條碼、RFID(電子標籤)的技術組成分為

1. RF tag(標籤)

源由:Barcode 條碼,發展以地域分類:
  1. 美系:統一商品條碼"(Universal Product Code簡稱UPC)
  2. 歐系:歐洲商品條碼"(European Article Number簡稱EAN)
RFID 高頻標籤頻段:800MHz, 900MHz
UHF (超高頻) Class1 RFID
安全加密驗證:TI 與 Certicom 的研究
EPC(Electronic Product Code) code, next generation barcode(EGC Gen 2)
條碼標準概觀: http://www.gs1tw.org/twct/web/EPC/epc01.html
使用廠商:沃爾瑪、美國國防部、麥德龍、思科
tag 與 code的關係:RFID tag 這種封裝技術,載有 EPC code

2. RFID 專利持有公司
表一 RFID專利許可證合夥機構與RFID智慧產財權授權計畫之比較

RFID智慧產財權授權計畫 (Rapid Start RFID Licensing Program)
參與廠商: SAMSys, Zebra科技, 飛利浦半導體、夏普、Sensormatic以及TransCore公司
目的: 能夠更為明確那些廠商具有合法使用Intermec公司145項專利RFID技術的權利

RFID專利許可合夥機構 (RFID Patent Licensing Consortium)
參與廠商: Alien科技公司, Applied 無線辨識組織, Avery Dennison, Moore Wallace,
Symbol科技, ThingMagic, Tyco Fire & Security, Zebra科技
目的: 讓廠商簡化使用全部廠商之RFID專利,一共3,000多項專利.

Source : 財團法人國家實驗研究院科技政策研究與資訊中心 整理,2005年8月

3. 條碼與讀取器間問題:
  1. 多標籤碰撞解法與讀取速度的取捨
  2. tag 受應用材料影響頻率訊號
  3. 天線方向影響讀取率,假如 tag 與 reader 兩天線正交則無訊號

4. RFID 相對於傳統條碼的優點
  1. 可長距離(超過 7 公尺), 在 0.2秒(200milli seconds)有 95% 讀取率
  2. 可多標籤讀取

5. RF Reader(讀取器),
  1. Data logger, 以 cloud computing 術語來看是 (embedded) thin client

6. Middleware(中介系統軟層),
  1. 分為 Server 端與 Client 端兩大類

7. Application(終端應用程式與使用者介面)
  1. 系統廠或承包服務廠商撰寫

8. Network, Cloud computing, 物聯網
  1. 應用:物聯網(網路伺服器),
  2. 飲料應用條碼, 追溯條碼,
  3. 物流應用:大賣場(Wall-Mart)、貨運公司(DHL)
  4. 國際標準:EPCglobal Network Framework, 組織(GS1)
傳統的手機加 Camera 再下載條碼掃瞄軟體,就視為 reader 端。
最近 Google 在 Android 2.3 力推 NFC:
  1. 用在取代信用卡、現金的電子錢包上就偏 tag 端,而店家、廠商就需要使用 NFC reader 端機器來讀取手機上的 NFC tag。
  2.  用在廣告客製化上 Android 2.3 + NFC 也是 tag 端,廣告播放機則需要有 NFC reader.
2011/05/14 update

Google I/O 2011: How to NFC 的一小時現場 demo,可以看到目前 Google 是把 Android 的 NFC 功能當作複製 Android 使用者環境與行
為的工具,比如複製看到的文字、圖型檔案,應用程式,在對戰遊戲中
甚至可以直接 NFC 連線對戰,如果對方還沒安裝 NFC 也會自動導向該
遊戲的 Android Market(Google Play) 網頁,讓你直接下載新遊戲。

Google 的 NFC demo 除了前述功能外,還強調了克隆、複製 Android 使用情境。

Google I/O 2011: How to NFC
http://www.youtube.com/watch?v=49L7z3rxz4Q

2011/06/06 update:
Google 為了推廣 NFC 的電子錢包應用,五月推出了 Google Wallet 
應用推廣專頁,Google 錢包一推出就被 Paypal 告侵權,但 Google 目
前否認有竊取 Paypal 的商業機密。

2011/06/13 update:
Why is NFC so important? 一文中提出了 NFC 與 RFID 等相近協定的
差異之處,讓我們瞭解為何 NFC 的推出值得我們注意。
  1. NFC 在一個 reader 前可以當作被動的裝置,可以提供簡易的條碼序號,也可能當作一個無線信用卡,因此我們可以將 NFC 裝置當作電子錢包使用。有 NFC 被動裝置就可以在任何可以讀取 NFC 的機器購買東西。
  2. NFC 可以讀取被動裝置,因此 NFC 也可以讀取別人的信用卡資訊,也可以讀取折購優惠資訊,因此你的手機也可以讓你賣東西給任何擁有類似 Visa Wave 無線感應卡片的買家。
  3. NFC 支援 Reader 之間的溝通,因此任兩支手機可以透過 NFC 進行溝通,如果手機中儲存了電子金錢的資訊,就可以達到個人對個人的金流交易。
看完以上三點,很明顯的讓我們知道 NFC 的使用將有極大潛力改變未
來的金流方式。

參考:
  1. 中研院-RFID產業標準-EPCglobal Network介紹
  2. RFID產業組織提議成立專利權許可合夥機構
  3. 傳技資訊 RFID 產業發展現況與挑戰
  4. Google Wallet

2010年10月25日 星期一

16W羊膜穿刺柯滄銘

早早就預約滿16週後要去作羊膜穿刺。雖然未達高齡,第一孕期唐氏症篩檢結果機率也好幾千分之一,就連產檢醫師也沒主動建議我去作,只是語帶保留地說:如果擔心就去作沒關係。由於家人多持反對態度,自己又信心不足,直到檢查前一天都還在猶豫,拚命找理由說服自己。後來上網找了許多有關羊膜穿刺的資料,也看了很多網友經驗分享,我知道以目前醫療技術,羊穿是安全性很高的一種產檢,只要找對醫生,就不用過度擔心。我選擇去柯滄銘婦產科作羊穿,早有耳聞他的快、狠、準穿刺技術是公認的一流,連我的產檢醫師聽到我要作羊穿,也直接問我是不是去柯滄銘那裡。

羊膜穿刺當天,我電話預約掛號是下午3點20,我一直問護士需要下午門診時間一開始就去現場排隊嗎?因為網路上許多媽媽都強烈建議要提早到現場用健保卡排隊掛號,以免等太久,但是護士說不用,就照他幫我掛的時間去即可。於是當天我只提早10分鐘到,填完資料約再等10分鐘就輪到我了。當天是週六,理應人很多才對,但是我到現場發現人超少,只有2-3對夫妻在等。跟網路上說的完全不一樣,櫃檯掛完號後要先付清費用才作檢查,總共7850元。

進診間後,護士稍作說明羊膜穿刺是針對染色體作檢查,我只問她:作完要在家裡躺個三天嗎?護士回問我,羊膜穿刺就像抽血一樣,你抽血會在家裡躺三天嗎?我懂她的意思,就是我想太多啦!

躺在檢查床上後,老公可以陪同進去,護士再解說一次作羊膜穿刺是很安全的,一直教我放輕鬆,越放輕鬆越不會痛。柯醫師進來後,先照超音波,告知我懷孕週數、胎兒性別、體重身長、預產期後,護士開始在肚皮上塗碘酒消毒,他們會一直跟你聊天,轉移你的注意力,我只記得醫師下針時說:肥胖是一切疾病的根源。我想他會這麼說是因為:我太胖啦! 他可能很少看過才16週就這麼胖的孕婦,醫師一直說並不是媽媽吃多少,胎兒就吸收多少。雖然我眼前有液晶螢幕可看到抽羊水過程,但是我根本無心在看,我怕越看越緊張,好像不到一分鐘就抽完羊水,我又問一次醫師,需要在家裡躺個三天休息嗎?醫師說不用,還一派輕鬆地叫我去逛街。護士有提醒不要提重物,但可以抱小孩,他說抱小孩用腹肌肌肉,跟子宮無關。

整個過程連同等待時間約莫30分鐘,真的不覺得痛,只覺得內褲被碘酒黏在肚皮上,有點癢。建議穿深色衣褲,因為會塗很多碘酒在肚皮上。離開診所時還不到四點,跟我預計要花費的時間快很多。

護士說報告約要7-10個工作天才會出來,我真的等了2週才等到報告,收到報告前1-2天,如果無異常現象,診所會先用手機簡訊通知,短短幾個字-「正常男性染色體」,讓我一解等報告時的焦慮。

2010年10月21日 星期四

寫驅動程式的工作流程

常聽別人說寫驅動程式很簡單,但自己卻偶而才有這種感覺,因此整理至今為止,
在寫驅動程式可能需要注意,檢查的部份,若有新的心得再繼續更新修正與補充。

standard operating procedure(sop), work flow to write a device driver:

hardware
1. power on? reset timing sequence. study device spec, platform cpu/soc spec.
2. bus interface: host and device part, study bus spec
3. clock for device or device interface bus, study bus spec
4. power pin voltage in device datasheet spec?, study device spec

use multimeter(三用電表) to check voltage, current or resistance
use oscilloscope (示波器) to study and check clock timing, signal sequence and timing,
use Logic Analyzer(邏輯分析儀) to study and check bus protocol

software

5. board initial code:
struct machine_desc in arch/arm/include/asm/mach/arch.h
for example:
arch/arm/mach-s3c64xx/mach-smdk6410.c
search for MACHINE_START()
.init_irq for irq initialization
.map_io for memory mapped address space
.init_machine for board initial startup code and some early driver power on

6. gpio setting or multi-function pin, study soc spec, device spec

gpio_request() to reserve our gpio pins to prevent other drivers' disturbance

memory mapped i/o chip select timing setting, study device read/write timing
and SoC memory mapped timing sequence, memory mapped address space
assignment (resource in platform device)

use iotable_init() to define .virtual, .pfn, .length, .type in struct map_desc
irq(interrupt pin) from gpio pin (use gpiolib and resource in platform device)

use gpio_to_irq(), set_irq_handler(), enable platform interrupt vectors
assign platform_driver name to corresponding platform_device

use platform_add_devices() to add platform device drivers

7. device power/reset sequence, study device spec

8. device initial command, study device spec, sample driver reference

9. device register read/write verify, device register interace
(memory mapped i/o chip select setting, bus procotol spec, device init
command)

10. device setting command, study device spec

11. device driver export device node in /dev, information in /sys, /proc

12. make device nodes in /dev, by driver or mknod
check device file major/minor number in ~linux/Documentation/devices.txt

13. library cross compile, setting matched to /dev path?
export CC=/path/to/cross/tools; ./configure --build=x86-linux,
--host=arm-linux

14. application cross compile, set correct link path to library(prefix)
export CC=/path/to/cross/tools; ./configure --build=x86-linux,
--host=arm-linux --with_lib=/path/to/cross/compiled/lib

inspired by jserv: 分享是最好的記憶

希望人人都會寫驅動程式,只要有硬體設備,Linux 都可以支援。

2010年9月14日 星期二

Android 在高解析度畫面的處理方式

Samsung Galaxy Tab 採用 Android 作業系統後引起鄉民的廣大迴響,也值得 Android 開發者好好警惕,主要原因是 Android 原本就不是設計給平板電腦這類裝置使用,令人安心的大多數的應用程式仍然可以直接套用,潛在的問題也很容易解決。以下我們提出一個不只適用於平板電腦,也可以應用在各式各樣產品的解決方案:

這個平板電腦規格如下:
畫面解析度 1024x600,第一個有超過上千畫素的解析度大多數人都會抓住他的兩旁,橫著使用。

我們建議開發者花時間仔細研讀 supporting multiple screens 一文,我們也將會在持續改善該文章內容。Dan Morrill 的One Screen Turn Deserves Another 博客文章,也可以適用於直立式使用的情況。

像素密度的意義

當要開發應用程式的外觀時,主要是設計版面跟使用的圖資,而這兩項外觀重要原素就牽扯到螢幕的像素密度、尺吋大小、橫放或直立使用三因素。如果想要設及時髦又漂亮的外觀設計,則必須要完全理解這三個元素。

在三星的這個例子中有另一個意外的地方是他採用遠超過 Android 設定的 170 DPI,當然這是為了在該平板電腦上有更好畫面的設定。在大螢幕上如果設計不良很容易讓螢幕空曠區太大,中等解析度時按鍵與圖標之間距離太遠,但在高解析度時 Android 框架的擴展方式讓該產品畫面更漂亮。

身為業餘攝影師我想到拍照時的光圈、ISO、快門設定問題。當你想拍攝一位舞者,就必須加大光圈、ISO 調得更敏銳、快門加速等技巧。同樣的三星的 Galaxy Tab 使用較大螢幕就必須用更高解析度。

好消息是 Android 框架的程式碼判斷足夠判斷出該產品的最佳畫面,LifeSaver2 的應用程式畫面表現很棒,上面是在 Nexus One 下圖則是Galaxy Tab:




只要你確保提供三種不同解析度圖資,Android 框架就可以找到適合的擴展方式。
可能出錯的地方(你無法預期應用程式跑在哪一種螢幕上)

採用絕對值的 layout
採用絕對值畫素而非無關像素密度的設定
自行計算螢幕大小、自行載入圖資、而非經由框架載入

參考 supports-screens 我們建議你採用以下設定:

<supports-screens android:largeScreens="true" android:anyDensity="true" />

在 API 版本 4 以前的預設值都是 false,如此設定後在大多情況下都可以得到理想的畫面輸出。

測試

如果要確保畫面輸出,最好還是用模擬器輸出測試過,三星也有提供相關的外掛(add-on)讓你更容易測試。

幹嘛管這麼多?

主要是因為 Android 本來就只是設計給手機用的平台,為了因應現在的應用變化,才加入後續的調整與應用。但也拓展了你的應用程式可以應用在各種產品上的可能性。

原文網址:

Screen Geometry Fun

2010年9月11日 星期六

訓練你的自信心

回顧成長的過程中,除了技術與知識的學習漸漸瞭解該如何持續成長外,如何鍛練自信則一直是靠斷斷續續的座右銘,成功人士自傳與撰稿者事後諸葛的猜測與自我合理化,心理低潮時找家人朋友同學尋求慰藉...等方式。

要說有可以訓練自信的系統化科學方法,請參考神經語言規劃 (NLP),輕鬆一點的話,底下這類文章也對訓練自信有效。

摘譯如下:

自信是日常生活中的必備良藥,除了讓我們不會一直自我質疑,管理自己的恐懼,最重要的是可以花更多的時間去做對真自己真正重要的事。

但很少人知道心理上的自信心,就像生理上訓練身體肌肉一樣,只要有練就會累積更多自信心。不常常使用、展現你的自信心的話,將會失去自信。以下列出 63 種訓練自信心的方法,期待你成為擁有強大自信心的人。

1. 學習是好事,有任何新奇有趣的事物,就去報名或在家自學吧。

2. 暫時脫離自我,問問你的親朋好友有什麼需要你幫忙的事情。

3. 上健身房或保持運動習慣,鍛練強壯的身體才能做為自信最穩固的基礎。

4. 放下擔心的事物,看看網路上有什麼事件,想想你可以如何幫助別人?

5. 列出清單,釐清哪些是真正對你重要的事。跟你生活無關的就丟掉。

6. 列出你必須容忍的非必要事物,並記下如何降低這些事物對你的影響。

7. 回顧自己以前的成就、成功經驗,肯定自己以前付出的努力。這不是要你對別人感到自負驕傲,而是你對自己能力與信心的肯定。

8. 在社交場合不只跟熟悉的人打招呼,多去認識新面孔,去發掘更多新鮮有趣的人事物。

9. 下次當你想放棄某件事,或逃避某人、事物對你的挑戰時,記得改變想法,去做就對了。

10. 每天至少做一件讓你物質或心理上感到由衷高興的事。

11. 找尋讓你自我懷疑、猶疑不定的模式與想法來源;想像這是你最好的朋友經歷其中,並且準備放棄,你希望如何做出改變?

12. 邀約心中的夢中情人﹝前提是你還單身,我並不想讓你陷入麻煩﹞

13. 照顧好你的心靈,列出二十項可以滋養心靈的人事物,記得在心中保留空間給這些人事物。

14. 不要一直去猜想別人希望你做什麼,專注在自己身上。

15. 當每次出現"你不能擁有","你得不到","你不夠格得到"這類關鍵否定想法時,馬上丟棄,專注在如何得到、擁有的想法與行動上。

16. 不要把生活當作隨機、訴諸命運,每件事都是你清楚知覺,想要,喜歡去做的。

17. 下次面對風險、挑戰時,傾聽內心的聲音與對話,想想如何改善。要怎麼更簡單、容易處理這件事的方式。

18. 害怕別人覺得你很蠢、看到你犯錯嗎?其實這並不重要,每個人都曾經歷過,重點是不要因此停止努力,繼續把事情完成。

19. 停止為自己貼上沒自信的標籤與話語。事實上每個人都可以在日常生活中找到足夠的自信支持你的心靈,只要你留心注意就會得到,每個人都會有不消自我懷疑、完全自信的領域。

20. 自我懷疑有時候並非壞事,這也告訴你自己該在哪方面多加準備、努力付出。正面思考每件原本認為負面的人事物。

21. 回想你全力以赴、完全專注的經驗,想想你當在做什麼?是什麼原因讓你如此認真投入其中。

22. 每個人都會有許多過時的規則去決定自己可以做什麼?什麼不可以做?該做與不該做的事?正是這些規則限制了自己的思考與行為。捨棄這些過時的規則與限制,然後你才能做出真正自由的決定。

23. 你是否曾經因為放棄某個機會,或是不敢全心全力投入某件事而後悔不已?別再因此自責,這只會陷入惡性循環。狠下心面對已經造成的過錯與悔恨,你學到了什麼?下次你會如何思考?如何回應?

24. 當在做任何一件你感到害怕,不確定有足夠自信的事時,代表你正將自己推向新的境界,正在提升自己到另一個層次。

25. 如果曾經有人故意讓你難堪,或貶低你,要知道這是你欠自己一個公道,下次遇到同樣情況,別再讓人有機會再貶低、欺負你。你值得別人對你更好。

26. 調情是與別人連接的無害舉動,也很有趣。

27. 在人際關係中適時表露強烈的感情。

28. 承認並歡迎所有好與壞的遭遇。這讓你的內心不再因為不敢面對過去的遭遇而持續衝突。

29. 不論情況有多糟,永遠都要知道你有能力完善的處理好。

30. 不要對任何發生在自己身上的事大驚小怪,找出真正可以處理、解決生活問題的方法。

31. 不要一有利可圖就讓步,這通常表示你賤賣自己。

32. 當感到想跺腳發洩忿怒時,退一步並對自己說"我值得更好的"

33. 自信有時表現在勇於認錯,永遠做好承認錯誤,立即改正的準備。

34. 相信你的直覺。

35. 做某件事會感到恐懼是因為知道自己將接近現有極限,也是自信成長的良機。

36. 想像理想中的自己,充滿自信、成功、迷人、生氣勃勃的你,會想要給現在的自己什麼樣的建議?

37. 不要一直想攬下全部的事情自己做,尋求協助也是表現自信。

38. 明天試試一件值得冒險的事,不管大小,試試自己的極限。

39. 你需要跟支持、樂於鼓勵你的人在一起,而非一直低估你的人。

40. 別再掙扎於生活中令人討厭的事物,創造一個與你相稱、可以表現自我的環境。

41. 沒有人適合孤獨,我們必須藉由參與感才能有自信。想想你可參加哪些團體活動培養自信?

42. 當面臨挑戰與恐懼時,不要猶疑於優劣分析,勇於挑戰自己的恐懼。

43. 專注訓練能夠幫你贏得對你有意義事物的技能上,如果要大幅增進你獲勝的機率,最有幫助的訓練是什麼?

44. 身心是一體兩面。當你改善身體狀態也會獲得更有自信的心靈。

45. 當你已經灰心喪志、失去動機與鬥志時,不要放棄,因為這表示你已經完成事情最難的部份,只剩最後 10% 就能成功了。

46. 不要再拿自己跟別人比較。昨天的你就是今天要超越的指標。

47. 抬頭挺胸,唸出可以再改進的部份,唸出瞬間即逝的靈感。

48. 如果你苦思良久仍無法理解某件事物,先停止嘗試理解,但要全心全意的接受並將這件事銘記於心。

49. 對陌生人感到害羞也沒關係,這不影響你的自信。不要執著於你的害羞,當你不再去想害羞這件事,就是展現完全自信的時機。

50. 環境會影響你的心靈,找個早晨時間將凌亂、垃圾、文件資料做個整理,井然有序的桌面與工作環境讓你能夠保持心靈的純淨。

51. 列出這一生最讓你驚喜的項目,從最吸引你注意的前兩項,並努力地實現。

52. 別將你的快樂、幸福、自我價值建立在某種關係的角色,或是交由他人決定。先找出你最重視的價值,然後你的人際關係跟自信就自然而然的大幅增進。

53. 你的能力足以克任何弱點。人人都有弱點,但除非你允許,沒有人可以傷害你。

54. 將你人生中最重要的事延遲越久,越會讓你精疲力盡,也會讓你以為越來越難完成,趕緊處理並解放心裡的禁錮。

55. 讓你生命中最輝煌的時期、主軸、熱情、模式是什麼?如果發現失落了哪些部份,就該是改變價值觀回到輝煌時期的時候了。

56. 身體健康狀況很重要,因為當你的心靈跟身體無法同步改善時,當中的斷層會讓你無法維持自信。如果需要的話就該鍛鍊自己的身材,確保你的體態也能為自己帶來自信。

57. 自信是一件持續的過程,並沒有完結的終點。自信不是某項目標或終點可以讓你到達後就停止。持續全力以赴展示自己能力,你的自信就會適時的讓你更上一層樓。

58. 嘗試新的路逕、領域。過去已熟悉的平鋪之路會讓你暮氣沉沉,失去自信,挑戰新事物會激起更多自信。

59. 別因為怕麻煩就一味的答應別人的要求。你可以有禮貌的拒絕無理的要求,告之以理,也無需編造理由塘塞。

60. 觀察你尊重的,有自信的人,不要只是模仿他們,而是要去辨識出他們的言行跟你或一般沒自信的人有什麼差異,可以從中學到什麼?

61. 做事要預做規劃,從容不迫的順勢完成工作。觀察事情進展可以反饋給你的自信。

62. 當警覺陷入對自己的疑惑與恐懼時,轉移注意力到外界你可以銜接並進行互動的事物。

63. 失敗或搞砸事情時仍會自責嗎?雖然很難開懷面對,但自責絕對沒有用。要認知任何事情或好或壞,全繫於你是否實際的付出全力活出精彩的生活。

相關連結:

63 Ways to Build Self-Confidence
63 種建立自信心的方式

2010年7月29日 星期四

自製鹽酥雞


周末經過市區看到繼光街香香雞,買一份大的解解饞,ssh看到也搶著吃,我看他一塊接一塊,一下子100元的鹽酥雞就吃光了。想起我曾在這個部落格,carol自在生活,看過如何做鹽酥雞,於是自己動手做做看。

為了要炸鹽酥雞,我特地去買純葡萄仔油,因為炸物用油要找冒煙點高的,家裡的橄欖油不適合。整個食譜我都照carol部落格上來做,除了醃料我沒放米酒,因為我怕ssh吃了含酒的炸雞會太興奮睡不著覺。

第一次炸雞手忙腳亂,整個廚房搞得都是地瓜粉,瀝油盤又來不及買,先用電鍋用的蒸盤放在盤子上代替,只是我炸的過久,炸雞顏色不像繼光街香香雞那麼金黃,吃起來過硬。有了經驗後,我第二次再作時就縮短時間,果然炸雞比第一次好吃些,只是色澤還是達不到完美金黃色。

2010年7月1日 星期四

Flash 會繼續存活

YouTube API Blog: Flash and the HTML5 <video> tag

雖然蘋果電腦的 Steve Jobs 演講功力了得,可以說服信眾,但 Google 工程師 John Harding 在 Youtube API Blog 提出說明 HTML5 不錯,但仍無法滿足所有使用者需求,Flash 會繼續存活。

Youtube 的 html5 網頁中用到的影片。

影片編碼問題:

目前 Flash player 跟其他手機平台上都可以支援 Youtube 提供的 H.264 編碼影片。但是專利與授權問題導致某些瀏灠器無法支援 H.264,也因 HTML5 的標準中無法納入支援某些檔案格式的規範。Google 需要力推開放標準的 WebM 縮減 Youtube 使用的檔案編碼種類,裡面使用的編碼就是 Google 先前釋出的 VP8 codec,Adobe Flash player 也將會支援 VP8 codec。

檔案串流播放問題:
HTML5 中並未規定到檔案播放的緩衝存取與動態傳輸品質控管,而 Flash Player 中已可透過 ActionScript 控制透過 HTTP 或 RTMP 串流協定解決這個問題。而這類協定至今無統一的標準。

內容保護問題:
Flash 平台已經有 RTMPE 協定可以讓使用者在得到授權狀況下才可以播放影片內容。

封裝與內嵌功能:
Youtube 能夠內嵌影片到其他網站上,也可以允許 Google 封裝字幕、評比、廣告到影片中,目前大多數網站只允許透過 Flash 內嵌檔案,而 HTML5 的沙盒封裝與訊息傳遞仍未被廣泛使用。

全螢幕播放問題:
Flash 已經可以放大全螢幕播放,並支援硬體加速功能,而單靠瀏灠器時因 Javascript 受限,常無法使用瀏灠器的全螢幕功能。

相機與麥克風問題:
目前只有 Flash 可以支援直接從 WebCam 錄影上傳到 youtube, 撇開網頁不談相機也是許多手機軟體、視訊通話、視訊會議的必備功能。HTML5 才剛開始制定標準,但 Flash 早已有運行多年的完整解決方案。

相對來說 HTML5 雖然可以提供大多數影像播放功能,但只有 Flash 才有辦法提供 Youtube 播影片的完整功能。

2010年6月22日 星期二

彰化一日遊-吳晟書屋

五月中旬看到公視播出有關吳晟書屋的新聞後,就一直計畫前往。鄉土詩人吳晟在彰化溪州自家老宅前蓋了一棟新宅院,專門給書住。看到公視新聞時,sj很興奮地說,學生時代國文課有讀過吳晟老師的詩作「甜蜜的負荷」,很想找時間去這棟書屋看看,在吳晟blog上查到確切地址後便立即規劃彰化行程。

離開埤頭鄉-「稻米博物館」後,照著在地人指示路線走,轉往溪州鄉-「吳晟書屋」。從埤頭鄉到溪州鄉很近,我們沿路欣賞稻田,快到目的地時居然轉錯彎迷路了。都市人在鄉下迷路真的很緊張,很怕開車開到最後沒有路可開,不然就是開進稻田裡。還好路邊有個阿公騎摩托車跟田裡農夫在聊天,我只跟他說我要找吳晟的老家,也沒講住址,他馬上用手比著某個宅院說,那間就是吳晟的家。我一臉茫然,他說的方向有一堆房子,我根本不知道哪間三合院才是我要找的。阿公看我臉上寫著「聽無」兩個字,立刻發揮鄉下人熱情友善的一面,很豪邁地說要騎車在前面帶路,就這樣我們開車跟著好心在地人後面走,一下子就找到目的地了。

看到跟電視上一樣的書屋時,終於放下心中大石頭,我們找到了。當天有四、五部車停在三合院前,我心想今天來看書屋的人真多。奇怪的是,怎麼書屋裡沒半個人? 我問sj到底可不可以進去裡面參觀? 他說新聞上報導歡迎愛書人共襄盛舉,所以應該可以進去吧?!我看書屋沒上鎖,就大膽地走進瞧瞧。

書屋比我想像要大很多,感覺有三層樓高,屋子裡藏書豐富,經過歸納整理擺設整齊,看得出吳晟老師的用心,這些書都是無價之寶,ssh在書屋裡興奮地跑跳,我得小心他不要在這裡發揮撕書的功力。參觀書屋後準備離開時,三合院主人出現了,是吳晟老師的太太。我向師母說明我們的來意後才知道,原來書屋不是給像我們這種觀光客參觀的。一開始看到三合院前停了好幾部車也不是遊客的車。師母說,那些車都是他們自家人的車,兒子媳婦孫子全家大小都在三合院裡睡午覺。我聽完後開始緊張,這麼說來,我們是私闖民宅。新聞上的報導原意應該不是邀請大家去書屋參觀。我們大剌剌地把車開進別人家,又走進去逛了一圈,真是白目極了。鄉下地方有些人家是門戶不上鎖的,但不上鎖不代表你可以進去。搞清楚真相後,趕緊跟師母道歉,表明我們沒有歹念,不是小偷,只是把事情想的太簡單的都市傻子。

正連忙表示道歉之意時,吳晟老師也從三合院走了出來,他請我們到書屋泡茶聊聊天,過程中,他看到ssh很怕踩到樹葉,就跟我們聊到「標籤理論」。如果你在孩子面前一直說他很怕樹葉,或是說他就是不愛讀書.....等等話語,這就是給孩子貼上標籤,這樣孩子就會漸向大人貼的負面標籤發展,相反地,若是我們以正面鼓勵方式,常對孩子說,你好棒,肯定孩子的學習熱情與信心,孩子自然會充滿更多正面能量,滋養他在人生過程中面對各種挑戰的勇氣、耐心與毅力。

此外老師也提到對於母語保存的重要性,提醒我們在家裡多說母語,讓小孩從小在多語環境中成長,可以增強對於母語文化的保存。對於上幼稚園前是否自己帶小孩或是交給保姆帶?老師也偏好我們能夠在孩子上學前,多培養親子感情,給孩子更健全的兒時身心發展。

實際與在學時課文作者聊天談心的經驗,讓人感覺補滿了生命中原本缺少的某一塊,很高興有這個機會與吳晟老師一家人談天。

2010年6月21日 星期一

彰化一日遊-中興穀堡

終於等到週末好天氣,驅車前往彰化,此行有二個參訪目標,一是埤頭鄉「中興穀堡」,二是溪州鄉「吳晟書屋」。

中興穀堡位於彰化縣埤頭鄉,2010年1月中旬正式營運,是一座由民間企業成立的稻米博物館,歐式風格的城堡建築就蓋在稻米工廠內。進入博物館搭電梯從二樓開始參觀,二樓展區規劃完善,展示各種稻米農具與製米機具,細說稻米歷史,分辨稻米種類,告訴你哪一種米是由哪位農夫種植,什麼米能夠為國爭光外銷到日本去,從二樓窗戶往下看就是米倉現場作業,館方也提供各種米食DIY課程,只要預約就可以自己動手碾米、爆米香、做三角飯糰或客家麻糬,凡是跟米有關知識,這裡都學得到。像我這種都市裡的「莊腳俗」,參觀過稻米博物館後才懂得何謂「粒粒皆辛苦」。

一樓是販賣各種與米相關的商品,個人覺得米漿口味冰淇淋不錯吃,一隻40元,純米冰淇淋則不推薦,沒有米的味道,很像香草冰淇淋。糙米米麩跟米製牛軋糖是我覺得值得買的伴手禮,牛軋糖現場可以試吃,不仿吃過後再決定是否購買,我看SSH連吃兩塊,原來米製牛軋糖質地偏軟,小朋友也咬得動,才決定買回家解解饞。

耳熟能詳的「有點黏又不會太黏」,就是中興米的招牌廣告。聯米企業將事業重心北移至樹林,並成功行銷品牌「中興米」後,又回鄉彰化埤頭設廠,以濁水溪流域的優良稻米為原料,用心經營台灣傳統米文化,也逐步邁向年營業額高達20億的米食王國。

離開前,詢問館方人員如何前往溪州,在地人指引一條直達路線,不需再從北斗交流道上國道,因為埤頭鄉與溪州鄉相鄰,中興穀堡大門前那條路往左直直開就到溪州鄉。館員還教我們,北斗其實應該唸成「寶斗」,如果你念「北斗」,人家就知道你是外地來的,買東西會買貴。這種只有在地人才懂得知識,我們很幸運地學到了。


博物館入口處


二層高歐式城堡建築


自費體驗各種米食DIY,採預約制


員工辦公室


拍張照留念


一樓戶外庭園


買支米漿冰淇淋坐在這裡樂活一下


一樓庭園出口








園區處處都是可愛裝飾

2010年6月10日 星期四

別當自作聰明的程式設計師(我認錯)

Bruce Sterling 轉貼了一篇標題為 Mea Culpa (我認錯) 的程式設計師反省文。並重新定標題為別當自作聰明的程式設計師。原作者是從 1969 年就開始進入程式設計領域,已有超過四十年程式設計經驗的 Jonathan Edwards。Bruce Sterling 認為文中的反省並不只是作為單一程式設計師的反省文,而是整個軟體產業需要一起面對的共業。

摘譯如下:

程式設計因為需要高度的分析能力,常常讓我們陷入一個誤區,為了提高程式設計能力,而不斷讓優秀的程式設計師擁有強大的優越感,自認為高人很多等,特別是相對於平庸的程式設計師,我們都希望盡情炫耀自己的聰明才智,得到同儕的仰慕眼光。但在之後的大半輩子裡,我痛苦的領悟到程式設計的重點在於態度、而非聰明才智。

現實問題的磨難最容易激發出聰明才智的創意靈感,但結果的表象雖然讓人驚喜於充滿創意的解決方案,實際上卻是後續長期維護災難的開端。一個讓人眼睛一亮的程式設計方式,但卻可能深藏著無數的深層炸彈,在日後一一引爆。

而在日後維護過程中,可能我們又會自我優越的認為,只有我才能解決其他平庸者無法解決的精密設計疏失,比如特製的資料庫系統,多線程(multi-threaded)的作業系統。

後來我把整個系統轉移到新框架上,解決掉讓人困擾了二十年的長期維護工作。這痛苦的領悟與經驗讓我瞭解,程式設計不是當最聰明的人,程式設計告訴我的是軟體是如此的複雜,讓全世界最聰明的菁英都顯得微不足道;不要想單靠一己之力解決所有複雜的問題。程式設計的重點在於簡化與慣例。把這句話倒著刺青到你的額頭上,這樣每次看到螢幕中的你都可以提醒自己這項原則。其中最重要的是態度:努力工作、負責任、專注在實際問題,而非未經驗證的猜測。

程式設計其實跟其他的工程與設計不盡相同。其中的主流文化常常陷在前面說的自我感覺良好誤區。就像是格列佛遊記般,只是多了大括號,中括號,縮排位置,要不要加小括號等議題。我們唯一同意的是其他程式設計師有多愚蠢,但我們應該自己試著 Google 一下"愚蠢的程式設計師",就會看到自己也名列其中。

程式設計技術的提升仰賴於文化的提升,我們能做的就是在自己的工作中耐心、持續的付出、分享交流我們學習到的經驗與心得。

參考文獻:

  1. Programmers should stop being such smart-alecks
  2. Mea Culpa

2010年6月6日 星期日

OpenBSD 開發與版本控管流程

要如何做才能真正在每次版本發行時,能夠不再因為重大軟體瑕疵
而延遲、改變時程?

OpenBSD 的開發流程,告訴我們的是開發流程與軟體品質的密切關
係,OpenBSD 團隊如何克服開發、測試時人性懶惰的弱點?以及他
們考量哪些重點?做了什麼?80 位開發成員如何互動來確保軟體品
質。

首先是對發行版本這項工程的定義:用科學方法設計、開發結構、
機械、裝置或製造過程;不論是處理個別單一項工作,或是整合成
一體的工作;也是對於建構、操作有完整認知的過程;在特定控制
變因內預測行為;所有針對特定功能、經濟運作、保全生命財產安
全等都算是工程的定義。

一般商業公司有足夠的人力、資金、時間可以同時有開發、測試團
隊一起運作,但是開放源碼軟體在這種執行模式下會有問題...發行
的軟體版本通常是未經完整測試的產品,需要持續修正。

發行版本的理想程序是:全部程式碼都經過測試、經過最多人測試
、最短的測試時間、最少的痛苦除錯...當然實際上我們只能取到折
衷方案。

完美的發行理想程序可以帶給我們:沒有重大錯誤造成使用者退回
上一版、大部份的新開發功能都可正常使用、開發者開心、使用者
歡喜、可以在發行版本後快速回到功能開發。

但實際上常是發行版本後,進入維護版本的除錯無間地獄...

最常見的流程就是:開發 --> 準備發行版本放慢開發腳步 -->
Tag/branch release tree --> Test & Fix --> Product N
通常是在 branch 之後交由發行版本的團隊進行 build/test,然後發
現錯誤需要 bug fix merge 回 trunk,或需要由 trunk merge 到發
行的 branch,就一直循環....直到真正修完錯誤,或是大家都精疲力
盡,結果通常是:好吧,只能出這版了!

其中的問題點在於:
一、只有少數人在測試
二、開發者在要發行版本的 branch 除錯修改程式
三、發行後的重點變成維護產品 branch
四、流程容易拖延
五、許多開發者陣亡(指對這個產品的心靈已死)

OpenBSD 進入 Tag/branch 之前的開發流程:

減慢開發速度,進行回歸測試-->鎖定 API/ABI 不再變更-->
早期套件 build test -->鎖定 tree(需經認可後才能再更動)-->
開發者執行測試工作-->Tag/Branch-->解除鎖定-->修改細項-->
正常開發步調-->重大更新-->六月個的開發週期-->減慢開發速度

1.
其中的發行版本修改,都只需要做到微調的動作。並且我們會使
用自己的產品來進行開發(Eat our own dog food)。

2.
鎖定 API/ABI 的原因:此時上層軟體套件才可以編譯,並可同時
發現影響版本發行的重大議題。每天都會編譯程式碼。Daily snapshot.
在編譯軟體套件時發現的回歸測試錯誤,在此時就已經開始修正。
修正完畢後才進行 tag/branch, 接著 unlock 後就可以回到 mainline
持續開發。

3.
鎖定的動作是不預警的,因為人們容易忽略行事曆中的例行事項,
針對測試週期的結果,降低過多錯誤的開發者修改程式的權利。

4.
所有工程師都會參與發行版本時的每一步流程。這可以避免短缺的
測試人力。

5.
作者也承認是因為 OpenBSD 的管理作風比較接近獨裁(theo),因
此其他開放源碼專案可能無法直接套用這個方法,但是對於軟體開
發公司就相當有用了。

相關連結:

The OpenBSD release process, A success story

2010年6月4日 星期五

Ylian Saint-hilaire 在 Intel 的成功方程式

Ylian Saint-hilaire 在 Intel 創新未來部門決定哪些事情該做,又該
放下哪些工作的判斷方法上,提出了一套方程式。當然他也謙稱許
多教導人們成功的書籍都提出類似的方程式,而這只是個粗略的概
念,如果讀者想要套用數據進去,請自行負責判斷後果 :P

主要判斷的依據是看產出的智慧價值扣除花費的心力後,還有多少
價值的觀念為出發點:

智慧價值 - 花費的心力 = 創意 X 市場優勢 X 通路 X 商業利益

其中又把市場優勢細分為:

市場優勢 = 平台優勢 + 技術優勢 + 地位(品牌)優勢

商業利益的判斷也可以細分為:

商業利益 = 平台軟體服務 + 直接收入 + 產品附加價值

依此再配合個人或公司的情況代入數據後,也許下次做判斷,你
可以有更客觀的數據佐證,而非每每猶疑不定,決定了又怕後悔。

相關連結:

Intel Software Network Blogs: My formula for success by Ylian Saint-hilaire

2010年6月1日 星期二

巨無霸小黃瓜

老爸時常拿他用心栽培的蔬菜水果跟我細說園藝的樂趣。我是有聽沒有懂,因為不管是種花種草,還是種蔬菜種水果,我都沒有興趣,我討厭泥土裡的小蟲,任何活的植物到我手裡也一定變枯木。
熱愛種植的老爸,把陽台種滿蔬菜水果,最近,老爸細心呵護,為避免光害蟲害還特別套上紙袋的小黃瓜也陸續成熟。我帶ssh體驗如何收成,只是沒想到居然有一條長成這個樣,剛摘下拿給ssh時,他嚇的立刻躲開。這種 king size應該沒人敢吃吧。


跟30*30 cm磁磚格比較


跟光碟片比較


跟原子筆比較


再比一次


拿尺一量......35cm


正常小黃瓜跟巨無霸一比.....甘拜下風

2010年5月29日 星期六

linux USB hid driver cypress_m8.c

參考 USB Device Class Definition for Human Interface Devices(HID)
firmware spec version 1.11,範例 driver 是 USB Cypress M8 driver
~linux/drivers/usb/serial/cypress_m8.c,source code 中說有
文件就在 ~linux/Documentation/usb/usb-serial.txt。

主要是看 DeLorme Earthmate USB 的 usb hid 如何設定,她使用的
是 feature report 的方式,在 control pipe 傳送 5 bytes 資料。
對應到 USB HID spec 的 7.2 Class-specific Requests 裡面的 7.2.1
Get_Report Request 跟 7.2.2 Set_Report Request,透過 control
pipe 傳送 host <-> device 資料。

呼叫 usb_control_msg(),定義在 USB core 的實作中
~linux/drivers/usb/core/message.c:


/**
* usb_control_msg - Builds a control urb, sends it off and waits for completion
* @dev: pointer to the usb device to send the message to
* @pipe: endpoint "pipe" to send the message to
* @request: USB message request value
* @requesttype: USB message request type value
* @value: USB message value
* @index: USB message index value
* @data: pointer to the data to send
* @size: length in bytes of the data to send
* @timeout: time in msecs to wait for the message to complete before timing
* out (if 0 the wait is forever)
*
* Context: !in_interrupt ()
*
...
*/
int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
__u8 requesttype, __u16 value, __u16 index, void *data,
__u16 size, int timeout)



有兩種用法,差異在於傳輸方向,是以 host 為主體而有 in/out, set/get 不同。
一個是 host 傳到 device(out/set),另一個是 device 到 host(in/get)。

host->device 是 USB_DIR_OUT,使用 HID_REQ_SET_REPORT request
建立 send endpoint pipe 是用 usb_sndctrlpipe()

device->host 是 USB_DIR_IN,使用 HID_REQ_GET_REPORT request
建立 receive endpoint pipe 是用 usb_rcvctrlpipe()


retval = usb_control_msg(port->serial->dev,
usb_sndctrlpipe(port->serial->dev, 0),
HID_REQ_SET_REPORT,
USB_DIR_OUT | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
0x0300, 0, feature_buffer,
feature_len, 500);

retval = usb_control_msg(port->serial->dev,
usb_rcvctrlpipe(port->serial->dev, 0),
HID_REQ_GET_REPORT,
USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
0x0300, 0, feature_buffer,
feature_len, 500);


第一個參數就是 struct usb_device *dev,probe 時就可以取到
第二個是利用 MACRO 從 usb device 找到 usb device 的 endpoint pipe
第三個參數是 message request value,HID_REQ_SET_REPORT 或
HID_REQ_GET_REPORT
第四個是 message request type value,
USB_DIR_OUT | USB_RECIP_INTERFACE | USB_TYPE_CLASS, 或
USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_CLASS,

第五個參數是 message value 看 device hard code: 0x0300
第六個參數是 message index value hard code: 0

因為採用的是 feature report 的方式傳送 5 bytes 資料存在
第七個參數 feature_buffer 中,
第八個參數是 feature_len 是資料長度。
第九個參數是 500 micro seconds 的 timeout。

相關文章:

TI OMAP3 DM3730 USB host controller high full low speed?



相關連結:

http://www.usb.org/developers/devclass_docs/HID1_11.pdf

~linux/drivers/usb/serial/cypress_m8.c

~linux/drivers/usb/core/message.c

2010年5月28日 星期五

linux kernel read_proc() in procfs

在 ~linux/fs/proc/generic.c 中找 __proc_file_read() 的實作可以看到相關說明:
/*
* How to be a proc read function
* ------------------------------
* Prototype:
* int f(char *buffer, char **start, off_t offset,
* int count, int *peof, void *dat)
*
* Assume that the buffer is "count" bytes in size.
*
裡面有三種讀 read_proc 的方式說明,底下就是說明的程式碼,
也可以搜尋其他 driver使用 read_proc 的範例。
比如 ~linux/drivers/char/efirtc.c。
*/
n = dp->read_proc(page, &start, *ppos,
count, &eof, dp->data);
...
這邊是當 kernel 讀取 proc 檔呼叫 driver read_proc callback 的地方,也就是用法。因此可以倒推回去我們的 callback function 如何實作:

第一種是 driver 要回傳的資料量小於 read_proc 中的 buffer size(PAGE_SIZE)。
此時不管 *start,將 driver 要傳給 filesystem 的資料擺在 buffer 的 offset 位置,我們只看 offset 跟上次 callback 讀到的 buffer size, n 的差值,在接到的 offset 跟剩餘要傳的 n 差值(n - offset) 為零時,告知 filesystem 我們的 driver 已經傳完資料,才設定 *peof = 1; 否則繼續 callback。

第二種是當你有大量資料要傳輸時使用。
將 *start 設定為介於 buffer 跟零 之間的值,資料是從 buffer 起始位址開始填,return 每次要填的資料長度,如果你的資料還沒填完,第二次進入 read_proc 時 offset 值會增加 *start 的長度,直到你填完資料後再設定 *peof = 1; 就可以完成傳輸大量資料了。

第三種跟第一種一樣,只是把 offset 代換成 *start

參考文獻:
  1. procfs-guide.pdf 3.1 Reading data
  2. linux kernel source: ~linux/fs/proc/generic.c, ~linux/drivers/char/efirtc.c
  3. Linux Modules (3) - procfs

2010年5月27日 星期四

Google 的十項工作哲學

據說 Google 在面對未來的展望時,會以下列十項原則做為行動基準,摘譯如下。

我們奉為真理的十項行動準則:
一、 專注在使用者經驗上,接下來該做的事情自然清楚明白
二、最好是聚焦在一件事情上,然後做到最、最、最好
三、快比慢好,當有技術突破時,我們的搜尋速度每每創新紀錄。
四、民主機制在網路上行得通
五、不一定要在辦公桌才能得到答案,這是行動計算的時代。
六、不一定要黑心才能賺錢
七、永遠有更多的資訊供你去發現
八、對於資訊的渴求沒有 國界 之分
九、不一定要穿西裝才能認真。成功不是因為表面功夫做得好,強調團隊成果與個人成就感、自尊心才是重點。
十、 偉大仍不夠好。把某件事情做得偉大隻是起點,而非終點。我們總是設定超出目前能力範圍的工作目標,如此我們才能讓自己永續成長茁壯。

參考文獻:

boot code, bootloader, and Linux Kernel entry points

菠蘿麵包整理了 Android 開機流程 boot sequence
給個 boot rom, bootloader, Linux kernel, Android Init, Zygote, Dalvik,, System Server, 最後發出
ACTION_BOOT_COMPLETED 的 braodcast intent 觸發需要知道開機啟動的服務,其中從
硬體到使用者接觸到的應用程式的完整流程。

我們關注的是前面這段觀念:
硬體平台上的 boot ROM 儲存了 boot code,boot rom 本身也是在記憶體上執行,arm cpu
藉由 reset 0x0000, 0000 由 chip select 線路連結的開機媒介決定到哪一種 storage (Nor flash,
 Nand flash) 去讀取 boot loader。 將 boot loader 載入到實體記憶體後開始執行 boot loader ...

booting sequence documentation 則提到在 bootloader 到 linux kernel 端的開機介面
與流程:

ARM Linux kernel 對 bootloader 所需要的,就是藉由 bootloader 將 Linux kernel 從
storage 讀出載入到記憶體,設定某些暫存器,並呼叫 Linux kernel entry point,此
時還不需要啟動 MMU。

 Linux kernel 的 zImage 壓縮檔,就必須要跳到 arch/arm/boot/compressed/head.S
會使用  arch/arm/boot/compressed/misc.c (抄自 gzip 的某些函式介面) 裡面的
decompress_kernel() 其中會呼叫 arch_decomp_setup() 設定 debug FF/ST uart port,
或特殊的 Chip Select memory mapping,接著在開機印出 "Uncompressing Linux..."
字串後進行解壓縮。

ARM Linux boot sequence

另外關於 arm linux 的開機流程也有人寫了程式碼分析文:
ARM Linux boot sequence

zImage 解壓縮階段:
從跟 boot loader 串接,關閉 cpu cache, MMU, 設定 stack, kernel entry point 在實體
記憶體位置,設定 cpu 型號辨識,啟用 cpu cache, MMU, 設定 MMU page table
將 kernel zImage 解壓縮並載入到 RAM,進入 kernel start...

ARM 相關的 kernel code:
查詢 cpu 型號,啟用多核心支援,查詢(主機)板子的 machine 型號,MACHINE_DESC
macro 的定義。建立 MMU 的 page table,enable MMU,初始化 cache, write buffer。
繼續 enable MMU,設定 page table pointer (TTB),找到 page table 起始點,切換
MMU 進入 virtual address space, 回到已經過 mmap 過的 switch data。

複製 data segment 到 RAM
清空 BSS(寫零)
跳到 start_kernel 開始執行 Linux kernel 開機程序。也就是接 Intel 文件中的 C 程式碼
起始點。 

Linux kernel entry points

Intel 的 device driver debugging 可以找到幾個 Linux kernel source entry point。

開發新平台(OS Adaptation, OS bring up, customize core components)
其中一項重要的工作就是寫驅動程式,有些多媒體編解碼的最佳化,
也是在驅動程式端實作。

一些有用的 kernel 資訊如:active kernel threads, loaded kernel modules

x86 開機流程中 BIOS->OS boot loader --start_kernel()-->OS

sched_init() 是 scheduler initialization

mwait_idle() 是 OS 主要的迴圈(就像 micro controller 的 main loop)


相關連結:

Device Driver Debugging on Intel Atom processor based devices (pdf)

2010年5月24日 星期一

電影:超速先生

週末尾聲全家看著 MOD 的電影,超速先生,轉到時已經開播不知多久,但因為是安東尼霍普金斯主演,才繼續看下去。結局也不出所望的是部好電影,並且是根據真人真事改編而成的電影。

要說劇中主角的人生觀,可以套用安東尼霍普金斯在幕後花絮的一句話代表:現在的我可以掌控自己的人生,並且是一個非常快樂的人。

在完全無預期下看完本片,只能用驚奇連連來形容本片的劇情鋪設,每每以為伯特蒙羅即將因為某些挫折、困難而打道回府,但都在他的堅持、毅力,與樂觀不懈的態度、實際嘗試後迎刃而解,也因為他不斷的累積並一步一步改進自己的愛車,而在年屆 68 歲,騎著 47 年車齡的 Indian 達到世界最速車的紀錄頭銜,他在 1967 年創下的 1000cc 最速紀錄至今無人能破。

伯特蒙羅在家鄉期間,花了 20 年針對在 1920 年買的 Indian 重機進行改裝提升性能,1938 年起就陸續在紐西蘭創下八項紀錄,並在後續遠渡重洋到 Bonneville Salt Flats 位在美國猶它州的波尼維鹽原創下世界紀錄。他在鹽原十次參賽中,總共創下三項紀錄,其中的 1000cc 最速紀錄仍然高掛在榜首位置。

參考文獻:
  1. 超速先生 電影中文網站
  2. Burt Munro 維基百科

2010年5月8日 星期六

cross compile Android native C code

當需要建立一些指令列工具,需要自行 build code 在 Android
command line 上執行,或供應用程式透過 JNI 呼叫的函式庫時,
需要 cross compile android native C program

1. agcc, 一個幫你搞定 cross compile 所需複雜參數的 perl script,依照
Compiling for Android wiki 上的步驟,應該就可以成功

2. 如果幸運的話,你可以不用往下看,不然就繼續吧,假如 agcc
不能達要你的需求,網路上也有神人已經寫了 Makefile 再加上 1. 裡
面的其他設定設好,以及你所使用平台的 C runtime library,在
~android/bionic/libc/arch-arm/bionic 底下 copy crtbegin_dynamic.S,
crtend.S 到你的 utility source 目錄,一起 link 就可以從正確的 entry symbol
__start 執行。否則直接拿 x86 cross compile 給 arm 平台的程式時
會有類似以下的警告訊息:

warning: cannot find entry symbol _start; defaulting to 000082c8

3. add scripts to ease rebuild native C code and installation,要將 utility
包 到 system.img 時需要先移除 ~android/out/target/product/arm/system.img
再將新加的 utility 放到 ~android/out/target/product/arm/system/bin
重新 build android,因為前面已經將其他 object files build 完,所以只剩下
archive system.img 的工作。

因此再借用神人的 my_command_line utility Makefile 改成如下:


# ripped from http://forum.xda-developers.com/archive/index.php/t-623976.html
AR = arm-eabi-ar
AS = arm-eabi-as
CC = arm-eabi-gcc
CXX = arm-eabi-c++
LD = arm-eabi-ld

ANDROID_SOURCE_ROOT = /path/to/your/androidsource
NDK_KIT = $(ANDROID_SOURCE_ROOT)/ndk/
PLATF_KIT = build/platforms/android-4

ARM_INC = $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/include
ARM_LIB = $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/lib

PLATF_INC = $(NDK_KIT)/$(PLATF_KIT)/common/include

OUT_DIR = $(ANDROID_SOURCE_ROOT)/out/target/product/arm
OUT_SYSTEM_BIN = $(OUT_DIR)/system/bin/
ALL_SYSTEM_IMG = $(OUT_DIR)/system.img $(OUT_DIR)/obj/PACKAGING/systemimage_unopt_intermediates/system.img

PROJECT = my_command_line
SRCS = $(PROJECT).c util.c
OBJS = $(PROJECT).o util.o crtbegin_dynamic.o crtend.o
EXES = $(PROJECT)

all: $(EXES)
file $(EXES)

install: $(EXES)
cp -afv my_command_line $(OUT_SYSTEM_BIN)
cd ../; rm -fv $(ALL_SYSTEM_IMG)
@echo "Please re-run build_android.sh to rebuild system.img"

$(EXES): $(OBJS)
$(LD) \
--entry=_start \
--dynamic-linker /system/bin/linker -nostdlib \
-rpath /system/lib -rpath $(ARM_LIB) \
-L $(ARM_LIB) -lc $(OBJS) -o $(EXES)

$(OBJS): $(SRCS)
$(CC) -I $(ARM_INC) -I $(PLATF_INC) -c $(SRCS)
$(CC) -mthumb-interwork -o crtbegin_dynamic.o -c crtbegin_dynamic.S
$(CC) -mthumb-interwork -o crtend.o -c crtend.S
#crtbegin_dynamic.S and crtend.S copy from bionic/libc/arch-arm/bionic

clean:
rm -f $(OBJS) $(EXES)


另外寫程式要注意的是 ~android/bionic/libc/README 提到跟 standard C
library 差異處與特性:
- no support for locales
- no support for wide chars (i.e. multi-byte characters)
- its own smallish implementation of pthreads based on Linux futexes
- support for x86, ARM and ARM thumb CPU instruction sets and kernel interfaces

4. Thinker 發表的 Android Build System 分析一文相當值得細讀,善用
Android makefile 的 build system 可以省掉去瞭解這些編譯的細節。

5. Android Source Code 中的 NDK 也詳細介紹了使用 Android Java VM
的 JNI 介面與實作 shared library 的建議,在
~android/ndk/docs/OVERVIEW.TXT 中有說明,Google 一下也可以找到
中文翻譯資料,我就不翻了。 :P

結論是網路上神人很多,Google 搜尋跟這些神人也很熟。:P

相關連結:

Android 原生(Native) C 開發之八: Toolchain 環境搭建篇

從 gpio & I2C 硬體線路對應到檔案讀寫

0. 硬體電路的 schema
找到電路圖上的 gpio, i2c 線路圖上的 block 是接到 datasheet 上哪一個 slot

1. datasheet 中的 gpio chapter
針對 gpio controller 的 register 值依照 in/out, pull up/down, data 值設定

2. board initial entry point,比如 Samsung s3c6410
~linux/arch/arm/mach-s3c64xx/mach-smdk6410.c
MACHINE_START macro 定義 board information
可以看到註冊的 .init_machine 進入點 function 是 smdk6410_machine_init

Qualcomm 的 arm board initial 檔案則是在
~linux/arch/arm/mach-msm/board-msm7x27.c
定義了 QCT MSM7x2x (7225)
~linux/arch/arm/mach-msm/board-msm7x30.c
定義了 QCT MSM7x30
~linux/arch/arm/mach-msm/board-qsd8x50.c
定義了 QCT QSD8X50 (8250)

3. i2c
關於 i2c 參考 Documentation/i2c/instantiating-devices,可以看到 mach-smdk6410.c 定義兩個 i2c slot 0, 1 為 struct i2c_board_info,裡面定義這個 bus 上接的 i2c slave device(s) 名稱與 slave address 資訊,透過 S3C_EINT 對應到外部中斷 12,然後在 smdk6410_machine_init():

i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));

註冊兩個 i2c bus,0 跟 1。接下來 i2c device 的具體化由 i2c core 完成。

kernel driver 可以在 ~linux/drivers/i2c 目錄找到,可以使用 i2c-dev,直接 sudo modprobe -a i2c-dev,就可以在 /dev/i2c-0 存取 i2c bus。

參考 ~linux/Documentation/i2c/dev-interface 可以針對 /dev/i2c-0[1] 的 device file 使用 user space driver 的 ioctl 控制 i2c 設定與傳輸。

最簡單的動作是 ioctl(file, I2C_SLAVE, addr),就直接對 file read(), write() 就可以讀寫 i2c device 資料。

4. gpio
關於取得需要使用的 gpio 方式如下:

gpio_request(S3C64XX_GPN(5), "LCD power");
gpio_request(S3C64XX_GPF(13), "LCD power");
gpio_request(S3C64XX_GPF(15), "LCD power");

這是指取用 GPN pin 5 跟 GPF pin 13, pin 15 操作 LCD power

~linux/Documentation/gpio.txt 可以用 /sys/class/gpio/ 底下針對 gpiochip (controller) 或是 gpioXX (pin) 進行 user driver 的控制 in/out, high/low, trigger mode /sys/class/gpio/gpiochip0/ 中的 label 可以對應到 datasheet 的 controller 名稱,參考 arch/arm/mach-s3c64xx/include/mach/gpio.h 可以找到 S3C64XX_GPA, S3C64XX_GPB 等 gpio controller

S3C64XX_GPIO_A_NR (8) 定義 Bank A 有 8 根 gpio 腳位,依此類推對於 /sys/class/gpio/gpioXX/value read/write 就可以讀取 gpio 腳位high/low 或設定 high/low


2010年5月7日 星期五

Keil C C51 語法

1. 加上記憶體型態的變數宣告順序:

變數型態 記憶體型態 變數名稱;

變數型態指一般 C 語言的 int, char 等

記憶體型態指 code, data, bdata, xdata, pdata 等六種記憶體位置
,各型態記憶體位置,以 Silicon Labs C8051F320/1 為例:

內部記憶體:
0x00~0xFF 都可使用間接定址存取資料的 data 記憶體

data 記憶體內:
0x00 ~ 0x1F 是一般暫存器 0x20~0x2F 給 bit/bytes 直接定址 bdata
0x30~0x7F 是直接定址記憶體
0x80~0xFF 是給 sfr(special function register) 只能間接定址 Stack
Pointer 可以是在 data 記憶體內定址的 256 bytes 區塊

外部記憶體:pdata
0x0000~0x03FF 是 1K 的 pdata
0x0400~0x07FF 是 1K 的 USB FIFO

16K Flash 記憶體:xdata, code

0x0000~0x3DFF 是 16K 的 In-System Programmable 記憶體
也是 firmware update 使用區,參考 PSCTL 暫存器的 PSWE、
PSEE 位元保護寫入與讀取的動作。

0x3DFF~0x3E00 是 Security Lock Byte,理論上可以鎖定 64K
bytes 的連續記憶體

Security Lock Byte 可以指定要鎖定的 512 bytes
(page 0 = 0x0000~0x01FF)

鎖定的區塊比未鎖定區塊有較高優先權,可以讀、寫、刪鎖定與未鎖定的記憶體區塊。鎖定是防止透過 C2 interface 讀寫 flash 的燒錄器讀取韌體機密,但無法防止其他介面的讀寫,因此韌體在其他介面溝通時,如果有機密資料需要做加密傳輸。

鎖定區如果要強制讀取會透過電路先將 flash erase 才可以讀寫,可以做到保護鎖定區資料機密性的功能。在鎖定區的 loader,在進行韌體更新時,檢查是否是合法的 firmware,才進行更新,以防止燒錯 firmware,或是被 crack 修改到鎖定區內資料。

檢查是否是合法 firmware 可以用公開金鑰機制防護,在鎖定區內的 loader 存 private key,要燒錄到 flash 上的韌體存 public key。可以做到韌體加密與驗證合法韌體的功能。

0x3E00~0x3FFF 保留未使用

比如宣告

char xdata GPIO1 _at_ 0x100;

表示宣告為型態 char,在 external data memory 位置 0x100 的 GPIO1 變數

2. 宣告 register 與位元

sfr P0 = 0x80; // 宣告 P0 是 special function register,
// Port 0 位址在 0x80,8 bit constant, 位在 IDATA 型態的
// 0x80~0xFF 直接定址區
// 0x00 ~ 0x7F 位在 DATA 型態記憶體的直接定址區

sfr SCON = 0x98;
// 宣告 SCON 為 register,SCON register 值為 0x98

sbit B1 = SCON ^ 0;
//宣告B1 為 SCON sfr 的第0個位元( 1 byte = 0~7 bits)


3. 中斷函式宣告、註冊與定義

timer0_int() interrupt 1
{
// C codes
}


宣告函式名稱 timer0_int(),註冊在中斷 1,中斷 n 的向量(編號)

公式為 (中斷大小*n +3) + 中斷向量基底位址,中斷向量由 C51 compiler 計算。若一般中斷大小為 8,中斷向量基底位址為 0x4000,則宣告 timer0_int() 程式碼放在 code memory 位址 0x400B。

4. 在固定記憶體位置宣告 struct, memory mapped struct

struct MyStruct { char data;};

struct MyStruct xdata *sPtr;
// C51 依 xdata 配置視 sPtr 為指向一個 memory mapped struct

sPtr = (void xdata*) 0x8000;
// 這個 struct pointer map 到 0x8000 實體記憶體
// 類比 standard C lib 的 malloc heap memory


相關連結:

Silicon Labs C8051F320, C8051F321 Datasheet (pdf)

The C51 Primer (pdf)

SDCC small device C compiler Open Source 8051 C compiler

SDCC Open Knowledge Resource Open Source C libraries for 8051

Keil C51 第一家在 8051 平台推出 C compiler 的公司

8051 market in 2008

8051 C Compilers

http://o.keil.com/forum/docs/thread356.asp

2010年5月5日 星期三

2010宜蘭綠色博覽會

趕在這周末宜蘭綠博結束前,我帶著SSH去體驗一下大地之美。原來2010宜蘭綠色博覽會3/27就已開始,我根本不知道有這個活動,要不是老爸看電視得知且提議去走走,我可能就這麼錯過了。

非假日去的好處就是不塞車,門票又有優惠,刷中信卡還可打九折。如果你以為平常日遊客少,那可就大錯特錯。我們去的這一天,人還挺多的,很多幼稚園、小學生都是平常日到綠博來戶外教學。我覺得人多比較有玩的感覺。當天天氣晴空萬里,氣溫飆到33度,簡直熱到炸,才買好門票準備進園,就被烈陽曬得頭昏。

2010宜蘭綠色博覽會位於蘇澳鎮武荖坑風景區,依官網園區展示資訊來看,共九個主題館,若照著順序走,第一個是「水上人家」,以休閒農業傳遞出宜蘭的農村美,入口處有全台最大綠雕水車,園區還有一群鴨子悠遊水間,我這個天兵竟然鵝跟鴨子搞不清楚,大聲地叫SSH過來看鵝,後來聽到身旁小學生說:「怎麼鴨子這麼白?!」,我才知道我鬧了大笑話。本來買一包飼料要餵鴨子,希望把鴨子吸引過來靠近我們,結果SSH一拿到飼料就整袋丟進水裡,一群鴨子全嚇跑了,希望鴨子不要連塑膠袋也吃下去。

才逛完第一館,我們這群大人就熱到懶得走,只有SSH依然熱情不減,不畏酷陽,在大草坪上狂奔,後來看到有遊園車可坐,乾脆花個20元坐車直接殺到最後面,從後面玩回來。遊園車是直接開到最後面,中間的館不停,單程每人20元。但後來發現其實每個主題館之間距離並不遠,用走的當作散步應該還好,只是天氣太熱,我們偷懶不想走罷了。

坐車到最後區,一下車就有二個主題館-「綠色奧林匹克館」與「森活林場」,我都以視線帶過就當作參觀過,因為我們最有興趣的是「夢的迷宮」,這也是我們坐遊園車的主因。因為「夢的迷宮」位在最後區,這座以綠雕及花牆方式設計而成的大型花園迷宮,是將畢卡索的名畫-The Dream《夢》,放大4100倍,用各種花材布置,讓遊客走在花叢裡,也走進畢卡索的想像世界裡。剛開始我們一行人團體行動,後來漸漸走散,我跟著SSH後面走,看他走在迷宮裡,即使遇到叉路,也不加思索地憑直覺選定其中一條走,一下子就走到出口。倒是其他人真的迷失在花園裡,還靠手機聯絡才找到我們。原來畢卡索的抽象藝術,純真的二歲兒才懂。在迷宮前,有一以廢棄貨櫃改置成的觀景台,可讓遊客於平台上,欣賞整幅畫作。我們只在觀景台一樓買便當吃,因為當時不知道爬到最上層可以看整幅畫,以為那只是讓遊客休息吃東西的歇腳處,後來在綠博官網才知道,觀景台是主辦單位的用心,在最上層可以把整個「夢的迷宮」拍下來。

走完「夢的迷宮」,就跟烈陽投降,直接又坐遊園車回去,「開心牧場」與「蒲公英的悠活」就沒去參觀,以為這兩館很遠,其實後來看地圖,就在「夢的迷宮」附近,「開心牧場」是我很想去的其中一館,現場有擠羊乳活動,SSH很愛看動物,沒去成真的很可惜。

坐遊園車回到最前面,前區除了參觀過的「水上人家」,還有「幸福單車館」及「靓水旅域」,單車館展示各種年代單車,充分傳達綠博理念,講求環保,以騎單車代替開汽車。

「靓水旅域」則是以愛護水資源,認識水再生利用為主題。SSH應該是最不懂得水環保的小遊客,他在家超愛玩水,無形中很多水就被浪費掉。在SSH腦裡,水就是用來洗手、洗澡,他也已經會講水這個字,所以他在「靓水旅域」這個館倒是玩得挺愉快,看到水就把手伸進去洗一洗。

回家前去逛逛「綠色市集」,本來想買網友推薦的三星蔥,聽說一大把才80元,可惜沒看到在賣。市集裡有幾攤賣蘭花的,一小盆50元,喜歡園藝的倒是不錯選擇。

整個遊園時間大約2-3小時,看了六個主題館。我覺得有帶小朋友去要4小時才夠,因為總共九個館,我們有三個館沒去-「開心牧場」、「蒲公英的悠活」、「綠野舞台」。2010宜蘭綠博活動只到 5/9母親節,想去要快,母親節當天,媽媽免費喔!


藍天白雲正是遊綠博的好日子


2010宜蘭綠博3/27 ~ 5/9


第一館- 「水上人家」


綠雕水車


園區內處處可見花海


「水上人家」館內大水車


藍天 白雲 綠地


「綠色奧林匹克館」


「夢的迷宮」


「夢的迷宮」靈感來源


SSH努力走出迷宮

2010年4月23日 星期五

在 Facebook 該注意的七件事

1. 密碼的長度要夠長,至少取個八字元,複雜度要夠高,不要使用
依序或是字典可列舉的密碼。

2. 不詳列自己真實生日的年月日

3. Facebook 雖然之前有幾次洩露隱私的政策,但在部份人士抗議後
都有加了相對應可自保的隱私權設定,請花點時間去設定哪些要全
部公開,哪些只有朋友可以看,至於只有自己可以知道的,就不要
寫在網路上了 :-)

4. 不要將可愛的小朋友全名曝露在網路上,如果有好心的叔叔伯伯
阿姨哥哥姐姐幫小朋友可愛照片標上姓名,你可以移除標籤。

5. 不要公開宣告你即將離家遠行。即使忍不住要講也不要說出明確
日期。

6. 不要讓公開搜尋引擎找到你。你可以在隱私設定的部份改掉公開
搜尋,改為只讓朋友搜尋。

7. 不讓未成年子女私下玩臉書,臉書政策上限定未滿 13 歲不能單
獨使用,如果有未滿年限需要有家長監督帳號,隨時瞭解小朋友的
上網使用行為,以免小朋友被拐騙。

Seven Things You Need To Stop Doing On Facebook -- ChannelWeb

2010年4月21日 星期三

開放源碼的新方向(新希望?)

摘譯自 IBM Developers 後來中國好像有翻簡體版的,我就沒翻完了。

開放源碼不再只是硬核技客的專屬品。

摘要:雖然你不是管理階層,但還是需要降低生產成本。身為一個
軟體開發者,或是重量級使用者,或只是一個希望有足夠薪水支撐
生活的員工。這些是向你工作環境導入開放源碼的理想狀況。聽起
來好像是你要花上三個星期學寫程式與 makefile,但並不是這樣。
請你繼續閱讀,開放源碼可以讓你以更有彈性,更實際的方式提升
工作效率。

2010 年的開放源碼議題,不再是跟封閉源碼對立的關係。我們不會
鼓吹你全面使用 GNU 軟體,也不會教你詛咒 adobe 或 apple。

接下來要討論的是開放源碼可以為你解決的部份問題,當你需要解
決這些問題的時候,可以考慮採用開放源碼解決方案。比如你對於
微軟 IE 瀏灠器有意見,想找一個好用的整合開發環境(IDE),不想
付錢買 Photoshop,或只是想要有更快速回應的技術支援,我們都
建議你嘗試開放源碼軟體。

比較實際的做法通常是混搭的解決方案。如果你並不認同開放源碼
的哲學層次,而表示你是比較務實的解決自己面對的問題。你所使
用的大部份軟體可能都是封閉源碼的,有些是商業軟體,有些可能
是只有執行檔案的免費軟體,同時使用開放源碼跟封閉源碼並沒有
任何道德上的缺陷,也不需要有。

事實上混用開放源碼跟封閉源碼才是最佳的解決方案。比如使用微
軟視窗作業系統,但不使用 IE 而是採用開放源碼的 Firefox 瀏灠器
。開放源碼跟封閉源碼兩者並非水火不容。

你也可以隨意選擇要用多少開放源碼與封閉源碼軟體。你可能只會
用到 Firefox 單一項開放源碼軟體。也可能像 Ernie Ball 全面採用
開放源碼解決方案。不論是前者或後者,或是介於兩者之間,只要
能有效的解決問題都是很好的選擇。

開放源碼並非只跟開發者相關。許多開放源碼社群面對開發者外界
的使用者是很勢利眼的,如果在電子郵件論壇問了一個月前有人問
過並得到回應的問題,你會得到的回答是:菜鳥,請你回去搜尋郵
件論壇。就算是沒人回答過的問題,也會得到:這是開放源碼,你
自己可以改程式碼!這類的回答。這些都是開發者以自我為中心的
自大心態表現。

幸運的是現在這些心態上封閉的社群已經較少,或是面對使用者的
態度已經大幅改善。大部份的開放源碼社群現在有更多的使用者親
和力,甚至也結合 twitter, linkedin, Facebook 等社群網路和使用者
互動。軟體錯誤回報系統也是開放源碼社群必備的服務之一,你可
以在回報系統上回報錯誤,或者是提出新功能需求,而不用擔心受
到攻擊。事實上最成功的開放源碼系統,都極力擁抱錯誤回報系統
的運作,以確保軟體系統真的達到使用者需求。甚至可以接受使用
者建議的程式碼修改方式。

軟體社群的益處。這裡提到的軟體社群互動,已經可以用社群來形
容其活躍程度。當然這種回報系統可能得到丟了問題就消失無蹤的
使用者,但這是屬於少數狀況。大多數訂閱開放源碼計劃郵件論壇
的使用者都會一直持續觀注。這樣做可以發現遇到同樣問題的使用
者,或是在另一個層面遇到相同問題,得以進一步討論。

社群的意義就在於電子郵件論壇與支援網站的討論區上。你可以得
到許多程式好手,或資深使用者提供的珍貴意見,也可以分享自己
遇到的問題與解決方法。在討論共同問題時,如果你能先找到解決
方法,也可能藉由為別人提供解決方案得到些許收入。許多公司都
已經知道去關注開放源碼社群的主要問題,以提供解決方案獲利。

這些軟體社群活動帶來的經濟利益都是以前少有人注意的。不論是
開放的電子郵件論壇或因為得到眾人互動反饋,都讓開放源碼的發
展遠快於封閉的軟體開發環境。開放源碼社群另一個特點是使用者
之間的互動、不一定是使用者與開發者的互動,也帶動軟體快速發
展的趨勢。





Open Source in a new light?

比免費更好

也是摘譯,KK 的好文,網路上可以搜到蠻多摘譯版本,全翻完的不多。

網際網路像一台影印機。在網路最基礎的層次,會複製每個動作、字元,每一段我們
寫在網路上的思緒也都被複製著。為了要在網路兩端傳遞資訊,通訊協定需要經過中
間轉載點複製好幾次所要傳遞的資訊,才能完成這項任務。IT 公司倚靠販賣這些複
製資訊的主機設備賺了許多財富。每台主機要傳送的位元資料,最後都傳送到某個終
端。

數位經濟就在這些複製出來的資訊流中產生。跟工業時代不同的是,網路上複製的資
訊流都是免費的。

數位通訊網路的協定裡,會讓通訊資料封包找到最快速到達目的地的路徑,事實上你
可以把整個網際網路想像成一個超級大型派送系統。受歡迎的數位資料就像超導體中
的電力,會持續在網路上流傳不止。我們在現有的生活中就可以體驗到,當你把生活
上的資訊記錄在網路上,這些資料就會一直在網路上流傳,直到某天可能你會再收到
自己寫過的某些資訊。即使是一隻狗也知道他無法真正消除曾經放到網路上的資料。

這個超大的派送系統,已經成為我們經濟與財富的基礎。這些資料、想法、媒體支撐
鞏固了我們經濟體系中的每個角落。特別是跟出口相關的行業,這也是美國相對有優
勢的產業。我們的財富座落在一個龐大持續的全面複製機器上。

然而這個經濟體之前累積的財富,是基於販售稀有的資料拷貝上,因此網路的自由複
製本質相對的侵蝕原經濟體的財富秩序。如果我們努力的結晶被免費複製,要如何累
積財富呢?換句話說,怎麼靠賣免費的東西賺錢?

我有一個答案,我想到最簡單的說法如下:
當可以複製的資料拷貝數過剩,就沒有價值。
當可以複製的資料拷貝數過剩,那些無法被複製拷貝的資料,就更顯得稀有珍貴。

當資料都是免費複製拷貝,你必須賣那些無法被複製拷貝的事物。

 那麼有哪些事物無法複製呢?

有一些特質無法被複製,比如:信任。信任無法被複製,你也買不到信任。信任是需
要經由時間累積掙取得來。信任也無法被下載或假造、複製膺品(無法長久)。如果其
他方面都差不多,你會想要跟你信任的人事物打交道。因此信任就是在複製飽和的世
界中的無形資產。

還有一些類似信任無法被複製的特質,在網路經濟中更顯珍貴。我覺得檢驗這些特質
最好的方式,並非從製作人、製造廠商、或創造者眼光來看,而要從使用者的角度觀
察。我們可以從一個簡單的使用者問題開始:我們為什麼要為免費的事物付錢?當任
何人要買的東西都可以免費下載,他們會掏錢買什麼?

依我對網路經濟的研究,人們願意花錢購買可以免費取得事物的角度,大略可以分成
八種無形資產。

在現實中這八種無形資產比免費更好。八種無法被複製的價值。我稱為創造力
(generatives) 。一個必須要經由創造、成長、培養、灌溉的創造力價值特質或屬性。
創造力無法被複製、克隆、假造、複製、偽造、重製。 創造力是在特定地點隨著時
間獨特地產生。在數位的舞台,創造力的特質可以為免費的拷貝加值,因此成為可以
販賣的商品。

八種比免費更好的創造力

取得的即時性

產品客製化服務

解說演繹的服務

鑑別真實性的服務

提高可使用性

更高品質的具體解說演繹

互惠互利的資金贊助

可檢索取得的服務


比免費更好 Better than free

Better than free

3D 電影佔好萊烏2009 年營收 1/3

為何有這麼多公司對 3D 產業如此狂熱?這跟接下來要揭露的相關
數據有關。

根據國際 3D 協會的統計,3D 電影營收佔去年(2009)好萊塢的收
入的三分之一。今年將會再創新高。

當然大家印象最深的阿凡達功不可沒,為 3D 電影做了最大的宣傳
廣告,畢竟阿凡達是創電影史上營收新高的電影,也成為日後所有
3D 電影的先例,阿凡達開播首周票房中,3D 版本的營收佔八成。
阿凡達上映之後,觀眾更願意為 3D 立體效果花更多錢。

One Third of Hoolywood Revenue Comes from 3D

International 3D Society

3D Movie Fans Expand Box office Says Internation Society Study
(Opening Weekend Ticket Revenues in Millions 比較圖)

2010年4月5日 星期一

換喇叭鎖

這次是到 B&Q 買浴廁專用的安全鎖,換已經弄丟鑰匙的鎖頭,
以免 ssh 把自己鎖在房間內。

1. 先用新門鎖附的解勾鉗把原本鎖頭的門內握把卸下

2. 再用螺絲起子解下門內兩個螺絲就可以卸下門外握把,

3. 在門側邊用螺絲起子解下兩個螺絲起子就可以把鎖閂也
卸下

4. 把新鎖閂鎖上

5. 將新的門外手把靠上門,此時要按壓新鎖閂讓勾子伸出
勾住門外握把,要注意不要勾得太深,不然會發現新鎖閂
在門邊突出處不夠多,此時門關不起來,因為鎖閂不夠長

6. 門外手把跟鎖閂扣住,並試轉門把可以轉動鎖閂後,將
門內握把套盤組的螺絲鎖上,並扣上卡榫,最後握把順著
溝槽插入到底,並測試轉動可控制鎖閂。

大概是分這六個步驟就可以換喇叭鎖了。

各重要零件與名詞圖片

解勾鉗

解勾鉗

鎖閂

鎖閂

門外把手

門外握把

門內把手

門內握把

2010年3月17日 星期三

土地公生日快樂!

農曆二月二日是土地公生日,帶SSH到家附近的土地公廟拜拜。出門
前我就告訴他要去廟裡,他聽到拜拜兩個字,雙手就會十指交扣,像
是在跟你拜年恭喜的樣子,因為過年時教過他恭喜的手勢。以前他會
把拜拜跟掰掰搞混,現在則是恭喜跟拜拜動作一樣。

印象中,從小拜土地公拜到大。每月初一、十五,初二、十六都會拜
土地公。如果開店做生意,習俗上舊曆每月的初二、十六,商家都祭
拜財神爺(通常當地財神即為土地公),這種祭祀稱之「作牙」,又稱
「牙祭」、「作禡」。

土地,也可稱為福德正神,一般來說是基層的神明。民間常會自發
性地興建小型建築來供奉,算是分佈最廣的寺廟。

2010年3月14日 星期日

打理舊物付出行動

終於趁週末sjh有空,可以開車幫我一起把整理好的包包送到人本教育
基金會。我總共扛了五大袋,分兩次搬才順利把這一堆包包送達。沒
想到我年輕時還真能買,真愛買,有用的也買,沒用的也買,現在回
想起來真是後悔,如果這些包包能換成現金多好。

希望人本能努力用力把這些包包義賣出去,五月份義賣跳蚤市場開張
時,也歡迎大家共襄盛舉。

相關文章:

打理舊品不打小孩

2010年3月12日 星期五

開發電容式觸控螢幕的注意事項

1. iSupply 預測 2011 年底前會有 25% 的手機,會由原本電阻式觸控螢幕改採投射式電容觸控螢幕

2. 2010 年的電容觸控出貨量已由原本預估的一億,上修到一億八千八百萬片

3. 電容式觸控時產生的電容質約 0.5pF ~ 20pF

4. 精準度是看手指真實點到的位置,跟實際螢幕對應位置之間的誤差值大小而得。

5. 多指分辨度(Finger Separation)是判斷出兩指時,兩指相距的最短長度。有的以指尖中心點算,有的算觸碰表面邊緣最短距離。

6. 反應時間是手指碰到面板到控制器產生中斷訊號之間的延遲時間。其中包括:
    (1). X/Y 軸掃瞄速度
    (2). 偵測到手指觸碰
    (3). 判斷觸碰位置
    (4). 追蹤多指(finger tracking)
    (5). 中斷產生時間,通常小於 100 micro seconds (1/10^6)
    (6). 介面傳輸時間,I2C 約 400KHz,SPI 約 1 MHz

7. 更新(掃瞄)頻率是單位時間可以判斷出幾個點?關係到劃線時線條是否平滑?

8. 消耗功率是否節能減碳搶救地球暖化?通常是量測電流電壓來計算功率。在不同耗電模式可以只給足夠快的掃瞄頻率就好。

9. 手指電容值需要考慮玻璃厚度跟實驗量測統計數值。

10. 系統最低雜訊比是看沒有觸控時 ADC 會產生多少誤判?

11. 訊噪比(SNR)是真實觸控訊號與雜訊的比值

參考文獻:
  1. Not all touch screens are created equal: how to ensure you are
  2. developing a world-class capacitive touch product

2010年3月10日 星期三

打理舊品不打小孩

人本教育基金會2010義賣活動預計五月開市,跳蚤市場歡迎各位捐好
物。如果你也像我一樣,年少輕狂不懂事,衣服鞋子包包買一堆,捨
不得丟又好幾年沒在用,不妨打理一下,捐給人本作義賣吧!

以前超愛亂買東西,老爸常語重心長地說:喜歡不一定要擁有啊!!

我說:我知道啊! 喜歡不一定要擁有,是要 " 佔有 "

不知道我現在對兩歲的SSH講這句話,他能否了解作媽媽的用心良苦
呢?我猜很難吧! 不然他也不會在賣場玩具區大哭賴著不走。

2010年3月8日 星期一

台中二日遊

週六一大早出發去台中,中午左右先到大甲鎮瀾宮,參拜完後走到附近的三級古蹟-大甲文昌祠,SSH因為太早起,拜完媽祖就夢周公去了。

下午三點,帶SSH二訪國美館,一年多前他才六個月,我揹著他看展覽,現在他快兩歲了,在館外的草坪上奔跑尖叫,我得小跑步才跟得上他。

館內有一展覽區是用浴缸設計而成,創意十足。SSH整個人貼在浴缸裡,不停地扭動,我猜他心裡可能在納悶,為什麼這個大澡盆裡面沒有水呢?後來上網查了才知道,原來這是國美館2010年度大展。

 觀點與「觀」點—2009亞洲藝術雙年展

 展覽日期: 2009/10/24 ~ 2010/02/28

這項大展邀請了來自亞太地區20個國家的56位藝術家,144件作品,包含繪畫、裝置藝術、雕塑、數位藝術、動畫及紀錄片。我們玩的浴缸是由台灣藝術家設計的,這個藝術團體-建築繁殖場,是由台南藝術大學副教授-呂理煌於1999年所建立,2004年還代表台灣至義大利威尼斯參展。

因為浴缸實在太好玩,SSH知道我要帶他離開時,就賴在浴缸裡不願出來,國美館的行程就在SSH的嚎啕大哭加抵死不從下,強硬地結束了。離開國美館原本計畫往下一個行程-勤美誠品綠園道,恰巧同行家人邀約就改往新天地吃晚餐。

晚餐後終於等到motel可以check in的時間。簡愛是這次台中遊的下榻地。入住感覺還不錯,房間大小中等,附近很熱鬧,唯一缺點就是冷氣好冷,不管調幾度都像住在冰庫裡。

浴室空間相當大,浴缸可以全家一起泡澡,就在一家三口泡得正高興時,SSH卻異於常態,平時他泡澡時總是high到最高點,今天卻懶洋洋地,臉紅得好像燒燙傷,狀似缺氧。

後來連我也漸覺得頭昏,呼吸困難。原來是我這個天兵媽媽,想說冷氣那麼冷,怕洗完澡會著涼,就把空調關掉,結果空氣不流通,全家差點泡澡泡出人命。離開浴室後,SSH還是昏沉沉地停不起勁,不敢讓他就這樣睡著,趕緊帶他外出透透氣,所幸在外面吹吹風後,狀況好多了,再回motel時,他又會恢復充飽電狀態,一直興奮尖叫,我好怕motel會把我們趕出去。

隔天吃完motel招待的簡便早餐後,立即出發去高美濕地。沒想到高美濕地這麼冷。一家大小都穿短袖,SSH臉頰被寒風吹得好冰,我真是失算,平常很會幫SSH準備衣服,這次卻完全沒帶禦寒衣物,回台北途中,去新竹吃小吃才發現,怎麼新竹也一樣冷,原來週日開始變天,氣溫驟降,我臨時給SSH買件鋪棉外套穿。回台北後覺得怎麼跟出發時差這麼多,週六還熱得要命,高溫超過30度,週日回來後竟然冷到剩十幾度。

SSH這兩天為了玩都ㄍㄧㄥ住不睡午覺,回家後累翻了連睡14個小時。

2010年2月12日 星期五

清除舊的 grub 開機選單

最近在 Ubuntu update 完 kernel 後, 發現舊的也都還在 XD
然後 grub 開機選單就越來越長, 快要超過一頁了
如果要除掉舊的 kernel
假設是要刪除 2.6.31-14 kernel option

cd /boot
sudo rm -rf *2.6.31-14*
sudo update-grub2

2010年2月10日 星期三

ckermit to access serial port (gsm/gprs modem) in (embedded) linux

sudo apt-get install ckermit
cat ~/.kermrc

set modem type none ; There is no modem
set line /dev/ttyS0 ; Specify device name
set carrier-watch off ; If DTR CD are not cross‐connected
set speed 115200 ; Or other desired speed
set flow rts/cts ; If RTS and CTS are cross‐connected

; the following equivalent to kermit -8
set terminal bytesize 8
set command bytesize 8
set parity none ; (or "mark" or "space", if necessary)

set stop-bits 1 ; (rarely necessary)
set flow xon/xoff ; If you can't use RTS/CTS
connect ; Enter Connect (terminal) state

如果是要存取 gsm/gprs modem 的話,也可以試

set modem type user ; User defined
set modem name my-gsm ; gsm/gprs modem with AT commands
set modem capabilities at
set modem carrier-watch off
set modem kermit-spoof off
set modem flow-control none
set input echo on

set line /dev/ttyS0 ; Specify device name
set carrier-watch off ; If DTR CD are not cross connected
set speed 115200 ; Or other desired speed

; the following equivalent to kermit -8
set terminal bytesize 8
set command bytesize 8
set parity none ; (or "mark" or "space", if necessary)
set stop-bits 1 ; (rarely necessary)
set flow none
set local-echo on

; output AT\13 ; modem expect carriage return (13 in decimal or 0xD in hex)
lineout AT ; lineout would add carriage return for you
connect ; Enter Connect (terminal) state, you should see AT response OK

最後 sudo kermit 就可以 access

另外在 windows 上也可以用 putty 連線到 serial port, 選 serial 設定 baud rate 就可以 connect, 比一些 dummy terminal 好用一點, 至少有 copy/paste 可以用 :P

要 cross compile ckermit 時,需要先 build host 版本的 wuart, 把 wuart 保留一份 host build 的版本,在 cross compile target 中 failed 時手動換回 host 版本 wuart,再繼續 build 出 wermit, 要自己 rename 為 kermit :P

2010年1月26日 星期二

獨立 session 的 xorg.conf 雙螢幕設定

垂直雙螢幕不同的地方是多一個 Device Section, 雙螢幕各自有一組 Device-> Monitor-> Screen, 並且兩個 Screen 的解析度是各自設定的 (modes), 沒有 Virtual Display 的設定, 依照 ServerLayout 可以讓 Input Device 在兩個螢幕間移動, 但視窗在雙螢幕間無法拖拉跨越, 是類似 KVM 的功能。

xorg.conf

Section "Monitor"
#DisplaySize 300 230 # mm
Identifier "VGA Monitor"
VendorName "SAM"
ModelName "SyncMaster"
HorizSync 30.0 - 60.0
VertRefresh 56.0 - 75.0
Option "PreferredMode" "1024x768"
Option "Position" "0 0"
Option "DPMS"
EndSection

Section "Monitor"
#DisplaySize 300 230 # mm
Identifier "DVI-0 Monitor"
VendorName "SAM"
ModelName "SyncMaster"
HorizSync 30.0 - 60.0
VertRefresh 56.0 - 75.0
Option "PreferredMode" "1280x1024"
Option "Position" "0 768"
Option "DPMS"
Option "below" "VGA-0"
EndSection

Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV370 5B60 [Radeon X300 (PCIE)]"
BusID "PCI:5:0:0"
Screen 0
Option "monitor-VGA-0" "VGA Monitor"
Option "monitor-DVI-0" "DVI Monitor"
EndSection

Section "Device"
Identifier "Card1"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV370 5B60 [Radeon X300 (PCIE)]"
BusID "PCI:5:0:0"
Screen 1
Option "monitor-VGA-0" "VGA Monitor"
Option "monitor-DVI-0" "DVI Monitor"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "VGA Monitor"
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection

Section "Screen"
Identifier "Screen1"
Device "Card1"
Monitor "DVI Monitor"
SubSection "Display"
Depth 24
Modes "1280x1024"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" 0 768
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

垂直雙螢幕的 xorg.conf 設定

備份 Ubuntu 9.10 設定垂直排列雙螢幕, 兩顆螢幕都是接在同一張顯示卡,小螢幕在上, 大螢幕在下, 小螢幕解析度 1024x768 接 VGA output, 大螢幕解析度 1280x1024 接 DVIoutput, 另外有使用 gnome GUI 工具調整螢幕設定,或是 xrandr 指令, 以介面來區分:

xrandr --output VGA-0 --mode 1024x768 --output DVI-0 --mode 1280x1024 --below VGA-0

xorg.conf 中各個 section 定義

Monitor -> 螢幕

Device -> 顯示卡

Screen -> 顯示卡跟螢幕透過 VGA/DVI 介面的組合, 所以至少要有跟螢幕同等數目的 Screen 設定, virtual display設定到 2048x2048 可塞下多螢幕的解析度

xorg.conf 檔案

Section "Monitor"
#DisplaySize 300 230 # mm
Identifier "VGA Monitor"
VendorName "SAM"
ModelName "SyncMaster"
HorizSync 30.0 - 60.0
VertRefresh 56.0 - 75.0
Option "Position" "0 0"
Option "DPMS"
EndSection

Section "Monitor"
#DisplaySize 300 230 # mm
Identifier "DVI-0 Monitor"
VendorName "SAM"
ModelName "SyncMaster"
HorizSync 30.0 - 60.0
VertRefresh 56.0 - 75.0
Option "Position" "0 768"
Option "DPMS"
Option "Below" "VGA Monitor"
EndSection

Section "Device"
Identifier "Card0"
Driver "ati"
VendorName "ATI Technologies Inc"
BoardName "RV370 5B60 [Radeon X300 (PCIE)]"
BusID "PCI:5:0:0"
Option "monitor-VGA-0" "VGA Monitor"
Option "monitor-DVI-0" "DVI Monitor"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "VGA Monitor"
SubSection "Display"
Depth 24
# Modes "1024x768"
Virtual 2048 2048
EndSubSection
EndSection

Section "Screen"
Identifier "Screen1"
Device "Card0"
Monitor "DVI Monitor"
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" 0 768
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

2010年1月19日 星期二

使用 SLAM 的掃地機器人

採用 SLAM (Simultaneous Localization And Mapping) 同時定位
與環境側寫技術的新清潔機器人,一般常見的 iRobot 清潔機器人
將出現新競爭對手,來自史丹佛大學人工智慧實驗室的新創公司
Neato Robotics,新的探測採用雷射掃描,將可以探測未知的環境
地型並仍能定位出家具,移動物,門的位置,判斷該往哪邊前去
吸塵。

相關連結:

Simultaneous localization and mapping 維基百科

基於全向式影像之機器人 同時定位與環境地圖建立 黃富聖 pdf

Neato Robotics