tech-sjh

2010年12月19日 星期日

小孩差點在台北市遠百寶慶店前被擄走

今天晚上全家在遠百寶慶店前,流浪動物之家辦的貓狗領養活動時
,發生 SSH 差點被人擄走的事件。

一開始是 Irene 帶著 SSH 在貓狗籠前玩耍,我們其他人就先到靠近
停車場邊找位子休息,我則是在習慣性的環顧四周環境。

不久後來了一位高約 180 身材高大,身著灰色西裝衣褲,右手戴金
光閃閃(夜市假錶?)手錶的禿頭男,他一靠近時,看似在講電話的
,很大聲的烙著很爛的英文,說什麼" Hello, ...oh...well...I don't
know you....XD#)@#*$",我就感覺這個人有鬼,第一個印象這人
不是蠢蛋就是騙子,於是走過去附近繞著觀察。

擄人男一開始只是靠近 SSH, Irene 當時就離 SSH 約一公尺的身後,
擄人男就站在 SSH旁邊,雙手靠在流浪狗圍欄,我感覺擄人男靠
SSH 太近了,就站到 SSH 後面在 Irene 前面顧著,過了半分鐘,
擄人男忽然蹲下,伸出右手把SSH 整個人抱住,我嚇了一跳,第
一個反應就是雙手抱住 SSH 把 SSH 趕緊搶回來,並大叫 SSH 的
名字擄人男才放開,此時趕緊離開現場,並告知家人這件事情。

結論是台北治安沒我想像中好阿,防走失帶還是有必要的,有小
孩的大家要小心喔。

2010年12月16日 星期四

24W張東曜高層次超音波

一個多月前早已預約,22w-24w要到張東曜的「台兒診所」作高層次超音波檢查。先在網路掛號,然後診所會主動打電話跟你確認時間,我約到平常日的晚診6點半。檢查日前一週,診所會再電話提醒你要準時赴診。

當天我6點就到了,等到7點半才輪到我。我一進診所發現有3-4對夫婦在候診室,其中一位孕婦還說她是預約5點的診,當下我就知道今天有得等了。果然我跟公婆,還帶著SSH一起苦等了一個多鐘頭。輪到我時先量體重,簡單填寫資料,然後進診間先由女醫師進行內診,褲子要完全脫下,量子宮頸長度來判斷是否會早產。接著女醫師開始詳細照超音波,她檢查很仔細,仔細到我以為今天就是她幫我作高層次超音波,我一直問等一下張東曜醫師是否會幫我檢查,她說一定會,張醫師會再作double check,照超音波時,婆婆跟ssh也可一起進去,ssh很興奮,檢查室的電視螢幕超大,女醫師還抱著ssh讓他看如何操作電腦,在給女醫師作檢查時,baby很合作,所有器官都順利看得清楚,後來輪到張東曜醫師來檢查時,已經快9點,剛開始還好,後來baby就趴著,完全無法照超音波,醫師為了讓baby翻身還用力揉我肚子,婆婆在旁很緊張問說這樣揉沒問題嗎? 醫生說:肚子軟才有辦法揉,太硬就沒辦法。可能我夠胖,肉多又軟,只是這麼用力揉也無法令baby翻身,醫師只好叫我到外面走動,解尿排空膀胱,他要先幫別人作,因為同時有好幾位媽媽輪流檢查。就這樣我進去出來診間好幾次,直到晚間快11點才順利檢查完畢。

檢查完後醫師會解說報告內容,但不是張東曜本人解說,報告數據多又複雜,我幾乎都看不懂,只聽到「一切正常」,我想這樣就足夠了。離開前才結帳,總共3100元。我好像是當天最後一個離開的,從6點到11點,足足5小時,累翻了。

2010年12月12日 星期日

SSH又愛上刷牙了


多謝burt's bees牙膏,讓ssh又愛上刷牙

SSH最近又再度愛上刷牙。之前有好一陣子很抗拒,無論我怎麼哄騙,他就是不刷牙。後來稍微合作一點是因為我給他抹上大人用的牙膏,涼涼的薄荷香很對他的味,只是我發現,他刷得如此起勁是因為他都把牙膏吃下去,他不願漱口,根本就是在吃牙膏。大人用的牙膏幾乎都含氟,那是不能吃的,雖然SSH吃的量很少,但是他天天刷牙就天天吃,長期下來恐怕會吃出問題。由於幼兒牙齒發育尚未完全,長期使用成人用牙膏可能造成氟過量,而氟過量則可能導致牙齒黃化、齒斑、齒洞的「氟斑症」現象。像經濟部標準檢驗局就曾抽樣檢查市售牙膏,一般有標示含氟者,其總含氟量必須符合800至1500ppm的規定,而抽檢大部分兒童用牙膏,含氟量均低於400ppm,但有些兒童牙膏,像德恩奈兒童牙膏、歐樂B兒童牙膏,其含氟量在1000ppm上下,與成人用牙膏含氟量差不多,雖然不能說不合格,但標準局建議14歲以下兒童,最好選用含氟量較低的兒童用牙膏。

市面上也有一些不含氟的兒童牙膏,像貝恩nenedent 木糖醇兒童牙膏--不含氟配方 ,德國進口,原本我打算買的就是這款,後來發現BURT'S BEES有推出一款小朋友牙膏(藍莓果醬)-不含氟,美國製,不添加色素和人工甘味劑,適用2歲以上,是兒童牙膏市場上第一個拿到NPA認証的牙膏。試用之後我跟SSH都很喜歡,周年慶特價2條599,有了它,SSH會主動要求刷牙,前排牙齒齒垢也確實清除不少,解決了我困擾已久的問題,我不用再上演全武行,死命架著SSH脖子強逼他刷牙了。

2010年11月7日 星期日

SSH如廁習慣

SSH不包尿布後,因為不習慣坐小馬桶,所以想尿尿時,我會帶他到廁所讓他站著尿,他喜歡尿完後自己拿蓮蓬頭沖水洗地。我訓練他尿尿時要將衣服拉高,不然上衣不小心會沾到尿。最近我發現他尿尿時會用手扶著小雞雞,我很納悶他為甚麼會這樣做,因為我沒有這樣教啊?

後來我發覺他常會在他爸爸尿尿時,站在廁所外面看,原來是有樣學樣。

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年10月15日 星期五

SSH著迷iPad

SSH一連玩五小時的iPad都不會膩。我想跟他商量借我玩一下也不行。以前SSH玩notebook時,常會玩一玩就來求救,因為他不小心開啟太多視窗,但是玩iPad卻自己從頭玩到尾,而且喜歡一個人玩,我只能在一旁看,不能碰。iPad電力真是超持久,剩50%電力時還能玩5-6個小時。





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)
,輕鬆一點的話,底下這類文章也對訓練自信有效。

摘譯如下:

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

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

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

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月13日 星期日

SSH學習日記-安靜

在餐廳吃飯時,SSH興奮地大聲尖叫,家人教他要安靜,SSH聽到「安靜」這個詞是他沒學過的,馬上現學現賣,以更高的分貝大聲地說「安靜」,得意的模樣是想表現他又學會新單字了。只是身旁的我們就糗大了,臉上已經不知道幾條線,我很擔心若是去圖書館時他也這麼說,那就換圖書館員臉上N條線了。

超愛說話的SSH,鐵定是遺傳我,無時無刻都在講。二歲幼兒正處於好奇寶寶階段,學習能力強,記憶力絕佳,又愛模仿,大人說話時,他們都在聽一句話裡有沒有新單字是他沒學過的。像我說「去costco買雞肉捲」,他就學會「costco」跟「雞肉捲」;「開車去加油站加油」,每經過加油站必說「加油」。記得有一次在公車上,SSH也是高分貝地講個不停,前座的小女生就跟她的媽媽說:「我覺得他好吵喔」,SSH聽到,馬上學起來並且大聲地說「好吵」,還連說兩次,我知道他是高興學會說「好吵」這個詞,根本不懂人家是在complain。

2010年6月10日 星期四

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

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

摘譯如下:

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

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

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

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

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

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

相關連結:

Programmers should stop being such smart-alecks

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。

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

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

相關連結:

procfs-guide.pdf 3.1 Reading data

linux kernel source:
~linux/fs/proc/generic.c
~linux/drivers/char/efirtc.c

Linux Modules (3) - procfs

2010年5月27日 星期四

Google 的十項工作哲學

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

我們奉為真理的十項行動準則:

一、 專注在使用者經驗上,接下來該做的事情自然清楚明白

二、最好是聚焦在一件事情上,然後做到最、最、最好

三、快比慢好,當有技術突破時,我們的搜尋速度每每創新紀錄。

四、民主機制在網路上行得通

五、不一定要在辦公桌才能得到答案,這是行動計算的時代。

六、不一定要黑心才能賺錢

七、永遠有更多的資訊供你去發現

八、對於資訊的渴求沒有 國界 之分

九、不一定要穿西裝才能認真。成功不是因為表面功夫做得好,強調團隊成果與個人
成就感、自尊心才是重點。

十、 偉大仍不夠好。把某件事情做得偉大隻是起點,而非終點。我們總是設定超出目前
能力範圍的工作目標,如此我們才能讓自己永續成長茁壯。

相 關連結:

Ten things we know to be true

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 最速紀錄仍然高掛在榜首位置。

相關連結:

超速先生 電影中文網站

Burt Munro 維基百科

2010年5月19日 星期三

SSH學習日記-好熱

SSH跟我一樣怕熱不怕冷,他睡覺從來不蓋被子,最近天氣漸熱,睡午覺時已經開始開冷氣,每次我要開冷氣時,都會邊抓脖子邊教他說因為好熱,所以開冷氣。抓脖子是教他好熱的肢體動作,我常會用「因為...所以...」這樣的句型來教他。像是因為下雨,所以拿雨傘,聽說常用因果關係教寶寶說話,有助於邏輯能力發展。

今天帶他在外吃飯時,由於非用餐時間,店內客人少,老闆沒開冷氣,我們母子倆邊吃滷肉飯,邊流汗,後來SSH熱到不行,就抓脖子,說「好熱」,然後指著店家的冷氣說「冷氣」。看來SSH已經懂得「好熱」的意思,之前都是教他物品的名稱,大多是名詞,最近開始教他形容詞,好熱就是他最常說的詞,我想是因為他愛吹冷氣的緣故吧!

2010年5月12日 星期三

SSH上超市學單字

自從進入語言爆炸期,SSH看到任何東西都想知道它的名稱。超市經常是我們消磨午後時光的地方,最近他學會「玉米」、「紅蘿蔔」、「豆漿」、「吐司」、「多多」、「菜」(花椰菜簡稱)、「肉粽」(台語)、「瓜瓜」(西瓜簡稱)、「魚」、「肉」、「檸檬」、「apple」、「banana」、「oreo」、「燈泡」、「芭樂」(台語)、「肉鬆」....等。

一進超市會自動去推手推車,再拿籃子,然後開始把他想買的東西通通放進購物籃,我得跟在後頭把東西放回原位。超市有很多東西都用保鮮膜包裝,像是冷藏魚肉等,SSH最愛用手指頭把保鮮膜搓破,我實在很頭疼。像最近盛產西瓜,超市有切好1/4塊的紅色大西瓜,用保鮮住,SSH一看到就一口咬下去,連著保鮮膜一起吃,我只好硬著頭皮把大西瓜買回家。

除了學會很多食物單字外,超市的停車場停放許多車子,SSH也因此學會各大車廠的logo。他最懂得「TOYOTA」、「Nissan」跟「Mitsubishi」,有些我教他中文,像「Volkswagen」我教他念「福斯」,「Ford」就念「福特」,這樣的訓練是想刺激他學習的興趣,加強記憶力及聯想力,就像有些寶寶很會念唐詩一樣,他們不一定認識字,但會模仿大人發音來學習跟記憶很多詞彙。

前幾天SSH說要喝多多,我帶著他去開冰箱,當我說「拿多多」時,他也跟著說,之後幾天只要他想喝,他就會改口說「拿多多」,而不再只是「多多」二字。這表示他已經從單字進入片語階段了。

教寶寶說話的10堂課」書中的第五堂課就是應用篇-把超級市場變成超級教室。書中運用5個方法 ─ 命名、描述、比較、說明、給指令,教導父母如何把上超市購物的例行活動,變成和孩子間學習與互動的特別時間。我買這本書後照著書中方法教SSH學說話,剛開始效果不明顯,但持續一段時間後,SSH說話的能力確實有進步。

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月22日 星期四

SSH開車門

我實在不敢相信,SSH坐在汽車安全座椅上也能開車門。這真的很危險,不要以為寶寶做不到,對二歲兒來說,Nothing is Impossible。

汽車安全座椅大都安裝在後座兩側,寶寶坐在汽座上,手稍微伸長一點就能碰到車窗開關及車門鎖,如果碰到像SSH這種很愛破解門鎖的小朋友,說不定哪天他又學會解開汽座安全帶的鎖扣,後果真的不堪設想。

解決方法就是,不要比小孩笨。趕快從車內把安全鎖鎖上。重點是,作這個動作時,不要讓你的寶貝看到,因為他們學習能力太強了。

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月17日 星期六

SSH破解安全門欄

才剛學會開喇叭鎖,不到兩天,又學會開安全門欄了。SSH剛學會走路時買的安全門欄,撐不了一年就被破解成功。以前他都是用蠻力,死命地搖晃門欄,想說這樣可以打開,但今天不一樣,他是用正確方法,也就是把門往上提,輕而易舉就學會怎麼開,我想應該是我每次開門時他都在一旁觀察學習,SSH現在正處於愛模仿大人言行的階段,他無時無刻都在觀察、模仿與學習,久而久之,他進步的速度會超越我的想像。

我現在比較害怕是,他已經開始研究門欄的第二道防線-安全鎖,以他的聰明機靈,不用多久,應該整個門欄都會被他拆了。

延伸閱讀:
SSH的安全門欄

2010年4月15日 星期四

SSH征服喇叭鎖

從SSH可以開啟主臥的喇叭鎖來看,我認為他又長高了,力氣也變大了。以前他打不開主臥的門,因為鎖頭比較緊,這幾天發現,他自己可以關門、上鎖、再開門,得意的模樣,像是在對我說,他征服喇叭鎖了。

之前怕 SSH把自己反鎖在房內,還特地把書房換成浴廁專用喇叭鎖,結果現在是他故意把我鎖在房外,這樣他可以隨心所欲地在書房玩,反正他已經會開關喇叭鎖,平常我不讓他進書房,越不讓他碰的地方,他越想碰。所謂道高一尺,魔高一丈,他下一個想征服的目標,應該是阻擋他進入廚房的安全門欄。

2010年4月13日 星期二

SSH學習日記-OREO

SSH常跟著我上超市買東西,我邊買就邊教他認識食物,教他學著說
出食物的名稱。最近他學會說-「OREO」。每次一到超市,我問他想
買甚麼時,他除了最愛的多多與布丁外,一定會去找OREO。說也奇
怪,兩歲兒的記憶力還真驚人,他總是記得OREO擺在哪裡,更厲害
的是,我不讓他買時,他會自己拿去櫃檯給店員。如果我還是堅持不
買的話,他會在櫃台前方上演「趴地秀」,所謂「趴地秀」,就是整
個人貼在地上,賴著哭鬧,雖然很難纏,但還好他不是拿著餅乾直接
走出去。

2010年4月9日 星期五

ECFA 對台灣與中國關係的影響

1. 六月前將簽訂的 ECFA,兩岸自由貿易協定,預計將提振台灣與
中國貿易金額達一千零九十億美金。

2. ECFA 將提振台灣經濟,但被中國視為長期目標:統一中國的前哨
站。

3. 受到情勢緊張的年底地方選舉影響,以及立法院席次的考量,台
灣可能對 ECFA 採取拖延擱置,或是減少原先約定的簽定內容。

4. 簽訂 ECFA 的實質影響?由於協商時間短暫,預計條文將會比一
般自由貿易協定更簡略,畢竟自由貿易協議對一個國家而言事關重
大,不可能在短時間就決定這種重大事項。

實際的貿易交流仍需要更多細項的條文簽定後才能決定,民進黨的
反對與公投議題也可能使 ECFA 胎死腹中。

5. ECFA 的政治意義?台灣總統馬英九必須證明簽訂 ECFA 對台灣
有利的說法,而不是葬送台灣本身的經濟與政治利益給中國。在人
民的預期中會是狂飆的股市與更多的工作機會。無法簽訂 ECFA 也
會讓馬英九失信於人民。

6. 中國廉價品會因 ECFA 大舉侵掠台灣市場嗎?除非馬政府確實有
在簽訂條約時保障台灣廠商,否則台灣勢必面對紡織類、廉價品的
大量傾銷。可以做的預防是限制進口數量,與較高關稅的保護。

ECFA 簽訂也可能不會提到上述條文,而留待後續細項條文繼續簽
訂。

7. ECFA 在台灣年底選前可能有何效益?台灣股市將更穩定,對於
高科技、石化業、汽車零件、金融服務業將特別有利。

較低關稅也可能讓台灣廠商可以顧用更多員工,降低失業率。低廉
中國貨傾銷也可以讓台灣消費者買到更便宜的貨物。

政治上也可以讓中國在台灣人民心中留下好印象。

8. 中國會讓台灣跟其他國家簽訂自由貿易協定嗎?中國可能會私底
下默許台灣與美國、東南亞國協簽訂自由貿易協定。但中國之前已
經對其他國家威脅不准與台灣簽訂 FTA 自由貿易協定,藉此限制
台灣在國際上的能見度。

在預期 ECFA 會簽訂的前提下,台灣同時也在跟美國、日本、新加
坡討論簽定 FTA 自由貿易協定。

ECFA 對台灣與中國關係的影響 - 路透社新聞
Q+A-What happens after China, Taiwan sign trade pact? - reuters

2010年4月8日 星期四

SSH學習日記-水

SSH最近勤唱「魚兒魚兒水中游」,只是每次唱都把「水」這個字自
動跳過,可能這個字不好發音,他想偷懶就直接省略。

今天他看我在倒除濕機的水時,我趁機會教他說「水」,他馬上就學
會了。後來洗澡時看到浴盆裡滿滿的水,他也很得意地一直說「水」
,我猜他是很高興自己會說這個字。

SSH學習日記-魚兒魚兒水中遊

路過南京東路三段的寢具店-「思夢軒」時,發現店內擺置
一個超大魚缸,裡頭養了十來條金魚,我特意停下腳步,教
SSH認識魚,順便教他唱「魚兒魚兒水中遊」。

以前教他念「魚」這個字時,他不一定會想跟著念,但是當
他真的看到魚缸裡有好多魚游來游去時,他就顯得比較有興
趣,學習當然也就加倍積極。

2010年4月5日 星期一

換喇叭鎖

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

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

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

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

4. 把新鎖閂鎖上

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

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

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

各重要零件與名詞圖片

解勾鉗

解勾鉗

鎖閂

鎖閂

門外把手

門外握把

門內把手

門內握把

2010年4月4日 星期日

SSH學習日記-nana

怎麼以前沒發現,原來大安森林公園地下停車場是用水果來標示區位
。取車時,發現SSH一直說「nana」,仔細聽才知道,原來他看到牆
壁上的香蕉圖案,平常吃香蕉時就教他念banana,只是banana是三個
音階,他還不會,我就先教他學nana。今天他看到香蕉圖案馬上就聯
想到他學過的單字。

2010年3月25日 星期四

SSH學習日記-舉手招公車

也許SSH早就會舉手招公車了,只是我到今天才發現。平常等公車時
我都目不轉睛地看我要坐公車來了沒,深怕錯過了要再等很久,今天
在公車站發現,怎麼每台公車一靠站,SSH就舉起手來揮舞,原來他
在學我招公車的動作。

平常坐公車、捷運時,我都讓SSH拿著悠遊卡去刷卡,買東西時,教
他把要買的東西拿去櫃檯,付錢時讓他學著把錢拿老闆,每天生活中
有很多事情,只要安全無慮的,都可以讓他學著做。以前SSH每到超
商總會直接把布丁或養樂多直接拿出去不然就當場喝起來,現在他學
會要先拿去給老闆,付錢之後才能享用。

2010年3月18日 星期四

經濟學人 2010 一、二月摘譯

2009 年回顧與 2010 展望

1. 歐巴馬撤銷聯邦資助的幹細胞研究禁令,生物科技會持續有進
展;解除部份對古巴的限制;允許愛滋病患旅客入境美國;推動
國會進行健保改革;關閉關塔那摩境外監獄;保證減少美國碳排
放量;提拔美國第一個拉丁美洲裔的最高法院法官。

2. 美軍在六月開始從伊拉克大城市撤軍;阿富汗戰爭的聯軍損傷
人數大增,致使一再說要逐漸撤軍的歐巴馬違背諾言,反而增軍
三萬到阿富汗。

3. 中國經濟持續成長,出、入口都在鉅烈縮減後開始反轉增漲,
中國對原物料的巨大需求也造成各種原物料的漲勢。

4. 經濟衰退造成全世界失業率持續上升,各國政府不得不提出各
種干預市場措施,企圖控制失業潮避免造成社會動盪不安。美國
國會通過了七千八百七十億美元的振興方案;英格蘭銀行也提撥
三千三百億元資金以供英國渡過經濟危機。這些措施暫時讓表象
舒緩,避免讓經濟衰退進入大蕭條時期。

但是這些挽救措施也造成經濟赤字再度飆升,單獨美國的赤字就
高達一兆四千億美金。國際貨幣基金組織、歐洲中央銀行都在此
時疾呼各種政府不要為了一時的搶救經濟,造成更大的經濟赤字


美國銀行、花旗銀行等在金融風暴時接受金援的各大銀行,在經
過壓力測試確定可以應付下一波金融風暴時,也開始償還這些金
援的資金,股市隨之回升。

美國女性勞動力可望在 2010 年超越男性。超越 50% 的比例。

5. 六月法航噴射客機在橫越大西洋時發生墜海事件,造成 228
人死亡,是近十年來最嚴重的飛安事件。

6. 澳洲二月發生有史以來最嚴重的森林大火,造成 170 人死亡。

7. H1N1 流行感冒已擴散漫延,被世界衛生組織宣佈為全球流感。
目前全球有 9,500 人可能是因為感染 H1N1 死亡。

8. 全球暖化議題上,各國政府在哥本哈根氣候變遷會議上,受到
各環保團體的壓力,要求達成減低碳排放量協議。但各國其實主
要還是在等美國國會即將投票讚成或反對碳交易市場的存廢,才
決定是否正式面對全球暖化議題。2010 年 11 月 29 日在墨西哥
舉辦的下一次會議,將討論如何達成這些減低碳排放標準的具體
作為與資金運用方式。

9. 南非六、七月即將舉辦世界盃足球賽。估計吸引的電視觀眾人
次將達到三百億次。

10. 中國上海即將舉辦世界博覽會,應該也會創下最大規模的紀
錄。

11. 英國即將舉辦一般選舉,巴西會舉辦總統大選,年中美國黨
派可望由中間偏左轉變為中間偏右。國際上緊張情勢仍會集中在
伊朗、伊拉克、阿富汗等地。經濟與商業上的不確定性仍然很大
,政府仍需要努力解決民眾財務緊縮的問題,及攀升的債務。

12. 已開發國家的經濟衰退受惠於開發中國家強勁的成長動力,
可望在 2010 年持續 2009 年的成長,各國 GDP 與股市正式確定
是 V 型反轉。投往開發中國家的私人投資資金也預計會在 2010
達到六千七百二十億美金。

13. 台灣與中國可望持續提升友好關係,陳雲林來台簽定漁、工
業協議外,也談到農作物的檢疫議題。但國民黨在台灣支持度達
到馬英九當選後的新低點。陳雲林將與江柄坤在 2010 上半年在
中國境內舉辦 ECFA(Economy Co-operation Framework
Agreement) 高峰會。

馬英九期望可以在高峰會簽訂協議,但仍要看中國臉色。簽訂
ECFA 是馬英九對中國關係的重要基礎。卻始終沒有透露太多
細節。馬英九認為台灣遭受經濟危機受創後,可能會受到一月
中國與東南亞國協簽訂的自由貿易協定邊緣化。因為中國對東
南亞國協施壓,不讓各國與台灣簽訂自由貿易協定。馬英九希
望簽訂 ECFA 後中國會允許各國與台灣簽自由貿易協定,但這
只是馬英九一廂情願的想法。假如成真,新加坡可能會是第一
個跟台灣簽訂自由貿易協定的國家。

目前台灣輸入中國貨物比東南亞國協多出 5%~15% 的關稅,其
中包括紡織品、汽車零件、石化工業產品,以及各項其他服務
。而簽訂 ECFA 可立即解決這些問題。

中國方面則是希望政治上的統一,也不信任馬英九,因為馬英
九曾說過不會在他任內統一。但相較於民進黨政治人物,馬英
九仍是不得不接受的選擇,因為中國也希望台灣人民感受到中
國對台善意,同時幫助馬英九連任台灣總統職位。

但馬英九在 ECFA 的議題上,卻無法同時得到中國與台灣人民
的認同,在馬英九強勢推動 ECFA 的同時,他從 58.5% 的民意
支持度掉到任內最低的 47.9%,民進黨卻同時創新高到 45.5%
,因此如何推動 ECFA 又保持連任總統,成為馬英九最大的難
題。

14. 付費電視最大市場的美國,也即將在 2010 改變,而且美
國海外市場規模最終可能超過本土市場達九百六十億美金。
2007 年到 2009 年的付費電視市場中,波蘭年均成長率達到
12.4% 已有超過 75% 的付費收視戶,印度年均成長率 6.2%
有將近 75% 的付費收視戶,中國年均成長率 6.3%,有將近
50% 的付費收視戶。電視節目內容因為都有本土化的編輯篩
選,所以並沒有真正達到文化入侵的影響層次,但實境秀則
是在世界各地風行無阻。

15. Taser 電擊槍是繼 Google(一般搜尋)、Hoover(公司產業
資訊搜尋)之後另一個成為動詞的公司。美國 18,000個執法
單位中有 14,000 個單位採買了 Taser,有 50% 以上的執法
人員配槍之外也配有 Taser。但讓他們在 2010 年可能有十
倍成長達到十億營業額的主力,是附加攝影機的即時錄影上
傳網站功能,單一支 Taser 賣價 1,700 美金,加月費 99 美
金附加錄影上傳影像功能。

16. 南韓國有電力公司擊敗 GE、日立,贏得阿拉伯聯合大
公國四座核電廠合約,除了建造費用兩百億美金,還包括
往後六十年每年兩百億美金的維護費用。

17. 污水處理成為綠能源的最新發展方向,德國已經可以處
理 60% 的污水排泄物產生能源;捷克、英國、荷蘭在這方
面也緊追在後。預估 2010 年底英國可將 75% 的污水用來
產生綠能,相當於三十五萬個家庭的用電量。

18. 各國 GDP 在 2010 預測值是美國 +2.7%,日本 +1.5%
,中國 +8.6%,英國 +1.3%,歐盟 +1.2%,俄羅斯 +2.5%
,澳洲 +2.7%,香港 +2.7%,印度 +6.3%,印尼 +4.5%,
南韓 +2.8%,台灣 +3.5%。

19. 各國最近失業率是美國 10%,日本 5.1%,中國 10%
,英國 7.8%,歐洲 10.0%,澳洲 5.5%,香港 4.9%,印
度 10.7%,印尼 8.1%,南韓 3.5%,台灣 5.8%。

相關連結:

經濟學人:2009 年世界展望

2010年3月17日 星期三

SSH學習日記-baby

午間看到一則新聞,台中一名41歲婦人生產時突然羊水栓塞,緊急大
量輸血後救回一命,母子平安。我當時正在想,什麼是羊水栓塞?

SSH突然對著電視說:baby!

原來電視出現這名媽媽抱著剛出生寶寶的畫面。baby這個字是前幾天
教他的,之前都是拿雜誌上小寶寶的照片教他認baby,今天跟著我一
起看新聞剛好看到有小寶寶的畫面,才會突然脫口而出。

土地公生日快樂!

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

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

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

SSH戒尿布-災難不斷

戒尿布訓練邁向第二天。一個字形容:「慘!」

前三次都有成功,接下來就開始狀況連連,災難不斷。他大便下去時
剛好我在陪他玩你追我跑的遊戲,他邊跑邊poop,一坨便便從褲管掉
出來,我還沒發覺,等到一腳踩下去時才知道為時已晚。母子兩人雙
腳都沾到黃金,我一聲令下叫SSH不要動,他還是繼續跑來跑去,地
上沾得到處都是。等我把他清洗完畢,回到客聽想處理災難現場時,
我居然找不到那一坨大便,我百思不解,我好怕SSH把它藏到沙發底
下,因為他平時最喜歡把玩具往沙發底下塞。

2010年3月16日 星期二

SSH戒尿布-學習褲

有些寶寶會穿學習褲來訓練戒尿布,所謂學習褲就是有一層防水層,
比較厚的內褲。防水層約能容納一次尿量,可以避免寶寶不小心尿在
褲子上時,尿尿從邊縫流出來,或是在玩地上的尿。媽媽可以比較從
容地處理尿濕褲子。

SSH是穿一般內褲來訓練。普通內褲3件100元,準備個10-15件應該夠
應付,我是先買個3件試試,第一天才半天就濕了2件。我覺得一般內褲
比較透氣,可以讓SSH分辨不穿尿布是甚麼感覺。

2010年3月15日 星期一

SSH戒尿布-第一天

今天午睡睡醒後開始幫SSH戒尿布。兩個小時尿了三次。三次都有成
功,第四次卻失敗,因為他大便了,第五次則是尿在嬰兒床。前三次
都是我問他:要不要尿尿?他嘴巴上雖沒回應我,但我觀察他的動作,
只要發現他用手抓小雞雞,我就帶他去廁所,結果他真的都有尿。本
想訓練他坐小馬桶,無奈他抵死不從,只好讓他用站的尿。

今天戒尿布第一天,雖然只實行半天,成果尚可。總共換了兩條褲子
,一件床單。我發覺,第四次失敗原因是,我沒有像前三次一樣很頻
繁地問他要不要尿尿,第五次也是因為他尿下去時我剛好不在旁邊。
這表示剛開始戒尿布時我必須常提醒SSH是否有尿意,因為他可能忙
著玩會忘記說,另外我也得更注意他的動作,是否有表現出想尿尿的
姿勢,希望在天氣變熱前能戒尿布成功。

2010年3月14日 星期日

打理舊物付出行動

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

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

相關文章:

打理舊品不打小孩

SSH學習日記-讚!

我豎起大拇指,想教SSH比出「讚!」的手勢,他卻比出食指,表情超
得意(其實是一臉臭屁),我心想,之前教他比123,他可能把「1」跟
「讚!」搞混了。不過,也無所謂啦,誰說「讚!」一定要用大拇指表示
,說不定SSH會引領潮流,哪天大家都跟著他豎起食指,大聲喊「讚!」

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)是真實觸控訊號與雜訊的比值

相關連結:

Not all touch screens are created equal: how to ensure you are
developing a world-class capacitive touch product

2010年3月10日 星期三

打理舊品不打小孩

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

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

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

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

SSH學習日記-丟掉

SSH最近學會說丟掉,邊說邊把東西丟進垃圾桶。之前常會把掉在地
上的東西撿起來吃,為了訓練不要吃地上的髒東西,我在他面前把垃
圾撿起來,牽他的手把垃圾丟進垃圾桶。

結果,SSH舉一反三,當我說媽媽手髒髒,還不能抱抱時,他也牽我
的手,要把我丟進垃圾桶。如果我不把手假裝放進垃圾桶,他會大聲
嚷嚷:髒髒! 丟掉!

SSH學習日記-叩叩叩

今天用之前網購的童書-「聲音從哪裡來?教SSH認識各種聲音時,
我說,敲門聲音就是-叩叩叩,正要帶他去敲房間門來實際聽聽真正
敲門聲,這天才小寶寶居然用手敲自己的頭,還一邊敲一邊說叩叩叩
。我當下很納悶,為甚麼他會這麼做呢??

仔細回想,原來是他之前在學剝蛋殼時,我教他先用蛋敲自己的頭,
這樣比較好剝,我記得當時我就是將煮熟的白煮蛋輕輕地敲他的頭,
邊敲邊說叩叩叩,今天他聽到我說叩叩叩,馬上聯想當時剝蛋殼情景
。難怪他會敲自己的頭,因為媽媽這樣教的呀 !


相關文章:

SSH學習日記-丟掉

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年3月3日 星期三

SSH台大趴趴走

以前走台大常會走到迷路,進去跟出來總是不同的門,這次帶SSH去
台大散步,我就決定只走直線,保證大門進大門出。

今天依然是高溫的好天氣,走不到一小時就滿臉通紅。帶幼兒逛台大
要非常小心,因為腳踏車超多,稍不留意就會被撞到。

SSH走到圖書館前的階梯就累了,坐在階梯上跟一位女學生用火星語
自我介紹,他自言自語講得很快樂,對方則是傻笑以對,因為地球人
聽不懂火星語。

2010年2月28日 星期日

SSH剪頭髮

SSH髮量少,髮質軟,從出生到現在只剪過三次頭髮,兩次理光頭,
一次我剪的,剪的像狗啃。老一輩人說,多剃幾次光頭,寶寶的頭髮
就會變硬變茂密,我深信不移,每到夏天就把SSH理成小光頭。果然
經過兩次光頭洗禮,SSH頭髮變多了,多到人家都說他是女生。我怕
他將來會性向不明,過完年立刻帶去剪頭髮。

時下最夯的百元快剪就是最好的選擇。幫小寶寶剪頭髮就是要快、狠
、準。SSH只乖乖配合前10分鐘,接下來就全身扭動加狂哭,我使盡
渾身解數想分散他的注意力,仍然搞不定,在一陣混亂下,我也搞不
清楚剪髮師傅是如何順利剪完的。我只知道SSH已經氣到雙手握拳,
哭的滿臉通紅。

果然給師傅剪的就是不一樣,走在路上人家都知道他是男生,幫他洗
頭也快多了。

相關文章:

SSH剃胎毛囉

SSH花燈初體驗

才剛抵達國父紀念館,人多到根本找不到要看的花燈在哪時,一直聽
到廣播在放送協尋走丟的小朋友,我緊緊抱著SSH,深怕他不耐煩想
下來走,像他這麼小的寶寶,萬一走失了,鐵定找不回來。本來跟著
人群走,逐一欣賞花燈,想說可以擠到主燈前面,但越靠近主燈,就
越動彈不得,我抱著小孩不想擠太進去,只好放棄,繞到花燈背面,
我跟SSH說,其實花燈背面跟正面看起來差不多啊。才剛說完,SJH
馬上吐槽說,他長大後會反駁你:哪有差不多,根本就差很多。我心
想,SSH還小,今年元宵可以先騙他,明年就得乖乖地帶他殺出重圍
,擠到主燈前面才行了。

還好回程途中有看到花燈正面,是方型的老虎,挺有創意的。

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

版權宣告、免責聲明


姓名標示、非商業性、相同方式分享3.0台灣授權條款授權。
免責聲明: 本文所載資料僅供參考,並不構成投資建議,
讀者閱讀或使用該資料所導致結果需要自擔風險與責任,
作者概不承擔閱讀人行為之任何風險與責任。
除非有特別宣稱,作者言論並不代表所屬任何團體、公司、或其他人意見。