星期三, 10月 15, 2008

料理大挑戰:紅麴油飯

繼上次做過油飯後,之後又陸陸續續做了幾次,大致上油飯的做法是沒什麼問題了。後來和在台灣的老媽通電話時,老媽說下次他們來看我時,會帶紅麴給我,這樣就可以做紅麴油飯了。因此,在紅麴到手後,今天第一次嘗試加了紅麴的紅麴油飯。



由於之前已經把台灣來的蝦米和香菇都用完了,所以這次的材料裡面,香菇是在韓國超市裡面買的,大陸產的韓國牌子香菇。為何會用大陸產的,其實是因為找遍了附近的兩間韓國超市以及大華超市後,發現不論是韓國還是日本廠牌的香菇,全部都是來自大陸,沒得選擇。而蝦米則是採用在韓國超市買的,Made in Taiwan 的蝦米,不過那家公司其實在台灣根本沒聽過。

新的食材除了從台灣來的紅麴米以外,還加了五小顆從台灣來的日本干貝。所有乾貨,像是香菇、蝦米、干貝等,全部先泡水約一個小時,糯米也先要泡水,不過我只有泡了約一小時。紅麴米因為是第一次用,不知道份量該多少,所以只有用一小撮,大約是一茶匙的量,也先加了點水泡了一下。這次的肉是採用在 Costco 買的豬肉,處理時也先把大部分殘存的油筋給切掉了。(沒辦法,年紀有一點了,要開始注意飲食了...嗯...)

食材浸泡完畢,完成其他前處理後,再來就是要開始炒配料。肉最先下鍋,炒時加了一點油,加油蔥酥、五香粉、黑白胡椒粉、以及少許烹大師來調味。炒得半熟後,加入香菇和蝦米,拌炒一陣子之後,加入撕碎的干貝絲繼續拌炒。

過程中我還有繼續加油蔥酥以及五香粉。待配料大致上炒得差不多,肉幾乎都熟了以後,就要連同泡米的水一起,加入泡了一個小時的糯米,以及這次的主角--紅麴米。

紅麴米和糯米下鍋後,加了點醬油和五香粉,接著就是最累的部分,要持續拌炒混合炒鍋中的所有配料和糯米。

拌炒到糯米半熟,且鍋中的水幾乎收乾後,把整個鍋裡的糯米和配料倒至內鍋中,放進電鍋內煮熟。

電鍋跳起後不要立刻開蓋,關閉電源後,讓油飯在電鍋中繼續悶煮 10 分鐘,確保糯米完全煮透後,就大功告成了。

煮好的紅麴油飯成品照片:


由於紅麴的量似乎稍微少的點,因此糯米上色的程度似乎不夠高,不過吃起來也相當不錯!

紅麴油飯挑戰成功!

繼續閱讀全文

星期四, 5月 15, 2008

料理大挑戰:油飯

最近一直蠻想念台灣的油飯的。雖然這邊的韓國超市買得到台灣做的『台南免煮飯』系列的油飯,不過一方面蠻貴的,另一方面吃那個會讓我想起當兵時的往事,所以就想自己煮煮看。跟老姊討教了煮法,上次打電話回家時,媽媽也指點了些細節,而前幾天剛好跑了趟韓國超市,材料都買齊了,因此今天下午就來煮煮看。



油飯的基本煮法並不難,我用的是雞胸肉,用豬肉應該也不錯,不過去韓國超市時,沒看到比較好處理的豬肉,所以還是買了雞胸肉。其他材料還有油蔥酥、蝦米、乾燥的香菇等等。調味方面,用了五香粉、黑白胡椒,少許的薑絲,以及少許烹大師。完全沒有用鹽,只有用醬油調色。油蔥酥我是買現成的,之前有買過紅蔥頭,不過因為我住的是套房形式的公寓,自己炸油蔥酥花時間又不方便,所以就去韓國超市找現成的,沒找到台灣來的,只有看到泰國、越南、以及中國製的,中國製的我沒信心,越南的太大罐,所以後來買了罐比較小罐的泰國製油蔥酥。做法大致上就是先把糯米泡水,在泡水的同時將雞肉等需要切塊或切絲的材料準備好,雞肉先下鍋炒至半熟,加入蝦米、香菇、薑絲、油蔥酥繼續拌炒,同時加入五香粉、胡椒粉、烹大師等調味料。炒至差不多,同時糯米也泡水夠久後,將糯米含水一起倒入鍋中,加入少許醬油後,與材料繼續拌炒。炒到鍋中的水收到差不多乾後,將鍋中的米和材料一併到入內鍋,外鍋加水後進電鍋中煮。煮完最好是悶個十多分鐘,以確保米飯煮熟煮透。

由於這是我第一次自己煮油飯,本來就不期望一次就會很成功,不過大致上還算成功。

從照片上看起來似乎還不錯,但是照片有點失焦糢糊。不過實際上我覺得這次只有成功一半。大致上糯米都有熟,不過有些部分有一點沒有熟透。此外,因為是第一次嘗試,有些東西的份量不知道該用多少,所以就憑感覺隨便抓,結果是有些東西太多,有些東西不足。糯米的量這次抓太多,主要是覺得久久做一次,所以就取多一點,因此用了四量杯的量。本來估計因為我的內鍋和電鍋都是六人份的,因此四量杯的量應該不會超過,不過事實證明差一點就超過電鍋的負荷了。此外,由於我的炒鍋是一般的炒鍋,不是很大很深,所以在拌炒米和材料時,換用了另一個比較高的湯鍋,但是這樣導致拌炒得不是很透徹均勻,所以才會進電鍋煮了之後還是有部分沒有很熟透的感覺。醬油的量似乎可以再多一點,不過這次的量就我自己的口味來說,算是可以接受,我吃得比較清淡,但是其他人可能會覺得不鹹。

總之,不能期望第一次就非常成功,我又不是料理天才,只是個懶惰的工程師而已。有過一次經驗後,下次應該會比較能掌握要領了。

繼續閱讀全文

星期六, 4月 26, 2008

蓋世奇才

今天又有朋友去租了剛發行沒多久的 "Charlie Wilson's War" (台譯片名:『蓋世奇才』)的 DVD 來看。圖片引用自 Wikipedia。

基本上這部電影似乎在台灣和美國都有不錯的評價,在 IMDB 上有 7.5 顆星的高度評價,在 Rotten Tomatoes 上也有高達 82% 的正面評價。故事大致上是根據 George Crile 在 2003 年的書『Charlie Wilson's War: The Extraordinary Story of the Largest Covert Operation in History』所改編的真人真事故事,敘述國會議員 Charlie Wilson 如何與 CIA 暗中資助阿富汗對抗蘇聯入侵,甚至最終導致蘇聯解體,以及間接引發 911 恐怖攻擊的整個過程。

也許是國情不同,加上語言的障礙和對冷戰歷史的認識不足,這類牽涉到美國政府各種檯面下的政治軍事運作題材的電影,其實我常常會看得不是很懂。當然演員的表現都相當不錯,Tom HanksJulia Roberts 當然都不用說,其他一些輔助角色,例如飾演 CIA 特工 Gust AvrakotosPhilip Seymour Hoffman 因此片被提名為奧斯卡金像獎最佳配角(不過沒有得獎)。飾演 Charlie Wilson 助手 Bonnie Bach 的義大利籍女演員 Amy Adams 則也是熟悉的『新面孔』,她在這片中的造型說實在的,比在 Ehchanted (台譯:『曼哈頓奇緣』) 中好看許多,雖然戲份不算很多,但有讓人眼睛一亮的感覺。

這部電影雖然算是不錯的片子,不過我個人不是相當喜歡這類型的題材。也許如果對冷戰時期,蘇聯入侵阿富汗期間的歷史有更充足的認識之後,會比較容易看懂片中許多的黑色幽默的喬段,會感覺更好些吧?

繼續閱讀全文

星期四, 4月 24, 2008

真是不順

最近真是大事沒有,但小事諸事不順啊!

雖然我不是唸電子電機方面的,但也許是因為親戚朋友中,包含我爸,很多都是電子電機背景的,從小耳濡目染之下,對這些東西雖不專精,但還蠻有興趣的。因此之前在看一些書時,裏面提到了 Parallax 公司的 BASIC Stamp 微電腦模組

這個模組實際上是把已經內建有 PBASIC 直譯器的單晶片微電腦 (通常是 PIC,有些使用 SX),搭配電源、提供時脈的振盪器、以及記憶體,以 DIP 包裝方式包成的微電腦模組,相關細節在 Parallax 以及 Wikipedia 上有更詳細的說明。使用 BASIC Stamp 而不直接使用 PIC 等單晶片微電腦的好處是,BASIC Stamp 簡化了開發微處理器相關應用所需的設備及時間,降低了進入這個領域的門檻,因此類似的微電腦模組相當受歡迎。由於書中提到了這個模組,所以我就去買了 BASIC Stamp 的 Discovery Kit 開發套件來自修。不過套件買回來以後,由於我的習慣是會先大概把文件看過以後再動手,所以久久沒有把套件中的 USB 介面的 Board of Education (BOE-USB,是一個整合了程式燒錄器、除錯、快速原型開發的工作板)和 BASIC Stamp 2 模組拿出來測試。昨晚心血來潮,動手把這兩樣東西拿出來,接上電腦來測試。結果......當然是失敗啦!不然標題就不會是「真是不順」了。

BOE-USB 使用了 FTDIFT232R 這顆轉換 RS232 至 USB 介面的晶片。由於 FTDI 許多相關晶片的 Virtual COM Port (VCP,指將 USB 等其他介面模擬為 RS232 序列埠的虛擬序列埠介面) 驅動程式已經內建在 Linux Kernel 中,因此在把 BOE-USB 接上 USB Hub 之後,Kernel 順利的偵測到 FT232 並載入 ftdi_sio.ko 模組。

[14798.736000] ftdi_sio 5-2.1:1.0: FTDI USB Serial Device converter detected
[14798.736000] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/ftdi_sio.c: Detected FT232RL
[14798.736000] usb 5-2.1: FTDI USB Serial Device converter now attached to ttyUSB1

到這邊為止都沒啥大問題。不過由於 Parallax 並沒有正式支援在 Linux 系統下 BASIC Stamp 的開發環境,不過他們有釋出在 Linux 下編譯 PBASIC 程式的封閉原始碼函式庫,因此我使用了幾個 Open Source 的 BOE/BASIC Stamp 編譯/通訊程式來測試 (例如 Adrian Schneider 的 stampbc)。很不幸的,依照 BASIC Stamp 入門套件中附的手冊的步驟,來偵測電腦和 BASIC Stamp 模組是否正常連線,同時偵測 BASIC Stamp 的類型和韌體版本時,卻是失敗的。

$ ./stampbc -j -p /dev/ttyUSB1
trying to identify the stamp
** no stamp or unable to identify

重新把這些工具編譯成可以用 gdb 除錯的執行檔後,用 gdb 追蹤,發現程式與 BOE-USB 對應的序列埠間的通訊是正常的,但是 BOE-USB 上的 BASIC Stamp 2 模組的回應卻是不正確的。再試了好幾次,也用了一些手冊上沒寫的『非標準』程序測試,依然失敗之後,我只好假設是這些自由軟體工具有問題,所以只好重新開機回 Windows XP 下,使用 Parallax 提供的官方版本 BASIC Stamp Editor。沒想到連 Windows 的 BASIC Stamp Editor 都無法識別 BASIC Stamp 2 模組,代表電腦和 BOE-USB 以及其上的 BASIC Stamp 2 無法建立正確的通訊連線。

在不管是 Linux 或 Windows 上的軟體都測試失敗之後,我不經要懷疑,硬體受損的可能性。雖然我在整個過程中對硬體的處理都相當小心,不過最有可能的狀況是某些元件因為靜電的關係燒毀。為了確定原因,只好今天跑了一趟 Fry's,去買了另一套 Board of Education Full Kit 的簡化版套件,利用其中的 BOE-USB 和 BASIC Stamp 2 模組,和我原來買的套件做交叉測試。沒想到交叉測試的結果是...完全失敗。

在這麼多的測試和努力以後,連最基本的建立連線都失敗,我實在想不出到底問題在哪裡。在死馬當活馬醫的心態下,把我原來的套件的 BOE-USB 和 BASIC Stamp 2 再度組裝起來,再次反覆測試。就在用各種方式試了十多次,始終都是失敗的狀況下,某一次突然成功了...而這之後再測試,就能夠順利偵測到 BASIC Stamp 2 的類型和韌體版本了......

$ ./stampbc -j -p /dev/ttyUSB1
trying to identify the stamp
-- stamp is a BS2, firmware 16

這真是讓我無言以對,連 BOE-USB 都在跟我作對嗎?明天又要跑一趟 Fry's 去把今天買的 Board of Education Full Kit 退掉了。

看樣子也許最近真的該小心一點了,除了沒事躺著也會中槍以外,似乎又有之前一堆硬體莫名其妙近乎同時一起出狀況的情形了。

繼續閱讀全文

星期一, 4月 21, 2008

全面反擊

今天在朋友家看了由 George Clooney 主演的 Michael Clayton,台灣似乎翻譯成『全面反擊』。
圖片引用自 Wikipedia。

這部片子一開頭,採用了最近越來越多電影採用的倒敘手法,先是看到由 George Clooney 飾演的 Michael Clayton 的車子被安置了汽車炸彈,而他幸運的逃過一劫,然後再回溯到幾天前整個事件的起頭。隨著劇情的推移,觀眾會了解到 Michael Clayton 為某一家法律顧問公司工作,但他的工作不是單純的律師,而是 "fixer"。整個故事圍繞在他們公司的首席律師 Arthur Edens 在幫他們主要客戶 U-North 工作時崩潰。一開始 Michael 因為 Arthur 過去有過類似的病史,加上 Arthur 最近停止服藥,因此和大部分的人一樣認定 Arthur 的行為確實是精神崩潰。不過隨著 U-North 的異常舉動,加上 Arthur 意外的『自殺』,他漸漸懷疑事有蹊蹺,開始暗中調查 Arthur 的真正死因,原來是本來應該是他們客戶的 U-North 因為以非法手段得知了 Arthur 握有他們公司產品有問題的內部備忘錄文件,且 Arthur 試圖將這件事情公諸於世,因此 U-North 的 chief counsel,Karen Crowder 雇用了兩個殺手殺掉 Arthur。不過 Michael 沒料到的是,就在他知道了事情真相的同時,兩個殺手也盯上了他,在他車上安裝了炸彈。不過陰錯陽差,殺手安裝遙控炸彈的同時,也在他車上的 GPS 系統上裝了追蹤裝置,但由於 Michael 比殺手預期的早回到車上,導致追蹤裝置並沒有確實裝好。就在 Michael 因為想到一些事情下車去的同時,兩位殺手也因為追蹤裝置的失誤,只知道 Michael 在附近,但不確定確實的位置,所以就乾脆引爆了炸彈,也因此讓 Michael 逃過一劫。在看到自己的車子被裝炸彈後,Michael 確認了 U-North 確實有在暗地裡做小動作,而且本來應該是委託他們把事情『修正』的,偏偏卻用了最糟的手段,企圖除掉本該是盟友的敵人。因此,Michael 利用這種情勢,讓 U-North 認為他已經死於汽車炸彈,然後和他在 NYPD 擔任警探的哥哥合作,取得 Karen 承認暗殺他及 Arthur 的錄音證據後,NYPD 將 U-North 負責人以及 Karen 逮捕。Michael 最後坐上計程車,漫無目的的在紐約街頭遊蕩,表情由嚴肅,慢慢轉變為釋懷的露出淺淺的笑容。

這一片算是法律相關的驚悚片,幾位主角的演技都相當不錯,充分表現出該角色在當時狀況下應該會有的各種反應。George Clooney 飾演的 Michael Clayton 有別於一般英雄式的男主角,他在自身難保的狀況下,還必須完成身為 fixer 所必須處理的各種要求,因此在冷靜的外表下,其實隱約的有衝動的一面,而 George Clooney 相當不錯的詮釋了這樣的角色,尤其是最後在計程車上那代表心境轉變的一抹微笑,相當傳神。飾演主要反派 Karen Crowder 的英國女演員 Tilda Swinton 表現也相當出色,她的角色是極度那種極度小心,所有事情都必須按照計畫進行,否則就會很慌張的那種人,因此在最後發現 Michael 並沒有死,手上拿著關鍵性的備忘錄,出現在她眼前時,完全的亂了手腳,Tilda Swinton 也忠實的表現了這樣的情緒。她的表現也讓她第二度被提名為金球獎最佳女配角。此外,Tilda Swinton 可能有人會覺得很眼熟,事實上她就是飾演納尼亞傳奇 (The Chronicles of Narnia: The Lion, the Witch and the Wardrobe) 裏面的主要反派的白女巫 Jadis

這部電影在 IMDB 上有 7.6 顆星的高度評價,在 Rotten Tomatoes 上則有高達 91% 的正面評價,算是相當不錯的一部電影。真要挑缺點的話,只有兩個地方讓我覺得不太好,一個就是殺手翹開 Michael 的車子,在 GPS 系統上安裝追蹤系統時,head unit 似乎太容易拆了。另一個則是引用濕婆 (Shiva) 為死神,這不太對。現在的車輛,由於 head unit 往往是最容易被偷的部分,因此大部分的車在設計上,就會讓 head unit 沒辦法那麼簡單的就被拆下來,要拆 head unit 往往需要把面板的大部分拆開才行,即使很熟練,也大概要有幾分鐘的時間,而電影中該殺手拆裝速度太快,不夠真實。至於濕婆,在印度教以及印度神話中,濕婆是破壞神,並不單純是死神。此外,在印度教中,認為破壞與創生是一體兩面的事情,因此濕婆也代表了創生的意義。電影中直接說 Shiva 是死神的說法其實不完全正確。除了這兩點以外,我覺得這部電影沒有什麼明顯的缺點,算是相當值得一看的電影。

繼續閱讀全文

星期日, 4月 20, 2008

最後的蘇格蘭王

最後的蘇格蘭王 (The Last King of Scotland) 是朋友推薦我看的,一部以同名小說改編的,講述烏干達在 1970 - 1979 年間的獨裁政權 Idi Amin 的故事。
圖片引用自 Wikipedia

整個故事是以一位虛構的年輕蘇格蘭醫生 Dr. Nicholas Garrigan 為主軸,講述他所看到的 Idi Amin。也許是因為小說作者本身是記者的關係,可以看出來劇情走向不會像某些片子那樣,刻意的去表達某些意念,而是相對客觀的以這位虛構的醫生的立場來看整件事情:由一開始因為年輕以及過度的理想主義,他成為 Amin 的私人醫生,甚至逐漸深入變成 Amin 的心腹,以致於 Amin 逐漸不在掩飾他為了鞏固以軍事叛變取得的政權的正當性,而轉變為獨裁者的過程,以及到最後看清了 Amin 獨裁以及殘忍的本性,卻因為過度深入而無法脫身,直到 Dr. Junju 以死為代價協助他脫逃的整個過程。

片中除了描述 Amin 從奪得政權,到因為隨時擔心被背叛以及暗殺,導致成為殘酷殺戮的獨裁者以外,比較可以明顯感覺到的,還有透過 Dr. Nicholas Garrigan 的眼中,表現出對於英國等歐美國家私底下為了政治利益而暗中操作非洲國家的批判。演員的表現都相當不錯,尤其是在片尾有放真實的 Amin 的紀錄片,可以發現飾演 Idi Amin 的 Forest Whitaker 真的有幾分神似真實的 Amin。飾演 Dr. Nicholas Garrigan 的英國籍蘇格蘭演員 James McAvoy 表現也相當不錯,有把那種過度理想、衝動又不負責任的年輕人的感覺給表現出來,而且查了 Wikipedia 以後才發現,原來他就是演那尼亞傳奇 (The Chronicles of Narnia: The Lion, the Witch and the Wardrobe) 裏面的 Mr. Tumnus,也就是那個 Lucy 在 Narnia 第一個遇到的那位農牧神 (Faun)

總結來說,雖然這不是一部我會主動想去看的類型的片子,不過算是相當不錯的片子,而且在 Rotten Tomatoes 上有 88% 的正面評價,IMDB 上也有 7.8 顆星的高度評價。

繼續閱讀全文

星期六, 4月 12, 2008

昔別君未婚 兒女忽成行

杜甫的『贈衛八處士』裡的『昔別君未婚 兒女忽成行』兩句,大概是我這幾天的心情的最佳寫照了。

這篇其實應該是前天要寫的,只是當時剛好網路不明原因斷線了好幾個小時,等連上線以後就忘了。

前天偶然間注意到,一位我在台大唸化工所碩士班時的同學,他私底下也是我的好朋友,他的 MSN Messenger 上的 mood 寫:『單身生涯倒數。』這讓我有些驚訝,想說難道他要結婚了嗎?丟訊息跟他確認以後,還真的是這樣呢!

其實看到這樣的消息,我的感覺是五味雜陳。當然我相當為我朋友感到高興,他年紀其實比我大,他是先當過兵且工作過一段時間後,才又回來唸研究所的,所以應該是學長級的同學。他能夠在最近完成終生大事,這相當值得高興。不過令我驚訝的是,在一年前我回台灣時,還看不出也預期不到他一年後竟然就結婚了,沒想到動作還蠻快的啊!果然不愧符合台語的諺語『靜靜吃三碗飯』,真是深藏不露啊!

不過在高興與驚訝之餘,其實也感到有些惆悵。就在一兩年前,我的另一位從國中開始的死黨也是結婚了,而且是在美國結婚的。當時我人已經在美國唸書了,不過我並沒有在事前接到通知,而是一樣事後在 MSN Messenger 上看到他的暱稱以及頭像,主動發訊息問他,才知道他已經在一週前結婚了。雖然他事後我問他時,他說他覺得我那時候學校很忙,加上他們決定結婚得有點倉促,所以就沒有通知我了,不過老實說我當時覺得蠻沮喪的。當然他有他的理由,但是像結婚這麼大的事情沒有通知我,直到我自己發現,讓我感覺我作為朋友相當的失職。我絕對相信我朋友有他的苦衷,事實上我後來也大概知道真實的原因,只是當時真的覺得蠻沮喪的,覺得我做人有點失敗。至於這一次我的研究所同學結婚,雖然我沒有等到事後才發現,不過其實又讓我想起了我死黨的這件往事,所以感覺很複雜。

人類果然不是邏輯的產物。人與人的相處,有太多的顧慮,有各式各樣不同的想法在互相參雜。人無法離群索居,因此會想要互相靠近;然而,靠得太近,又會因為想要保有自我而彼此互相傷害。豪豬的兩難,實在是個無解的難題。跟人相處實在是太累了,還是跟電腦溝通容易。

繼續閱讀全文

星期五, 4月 11, 2008

料理大挑戰:輕乳酪蛋糕 -- 80% 成功版


這不是我第一次做輕乳酪蛋糕了,也不是第一次寫 blog 紀錄做出來的成果了。不過之前的結果跟這次的比起來,只能算是 50% 成功的例子而已。

廢話不多說,直接來看照片。

首先是蛋糕脫模前:

由於這一次我沒有讓表面上色,所以整個蛋糕看起來都是乳白色的。沒想到這造成的照相時的一些麻煩,因為是用傻瓜相機,閃光燈沒辦法做柔光,因此即使把閃光燈亮度調低,在開閃光燈的狀況下,蛋糕主體會曝光過度,讓顏色嚴重失真。不開閃光燈的結果就是看起來暗暗的,但顏色比較接近真實。

接下來是脫模之後:

表面上看起來似乎有花紋的原因是,我不想浪費麵糊,所以最後把裝麵糊的鋼盆底,比較黏稠的麵糊給刮進去的結果。由於那些麵糊和蛋白混合的比較不均勻,所以看起來比較『稠』,烤起來就會變得比較實,顏色比較深一些。

接下來當然要切一塊起來看看:


從切面可以看出來,這次的蛋糕比起之前的,要更為鬆軟,更接近在台灣可以買到的日式輕乳酪蛋糕。這也是為何我說之前的成果只能算是 50% 成功而已。再來一張切面的特寫:


其實我這次的配方幾乎跟之前的是一樣的,但為何會看起來差蠻多的呢?其實關鍵在於怎樣打蛋。正所謂江湖一點訣,蛋白打得好不好,會嚴重的影響最終的成果,難怪有人說,蛋白打得好,就離做成功不遠了。之前就一直覺得很奇怪,為何我做出來的成果會跟印象中的差很多,口感太過緊實,而沒有那種鬆軟又入口即化的感覺呢?經過多次失敗的試驗,以及搜尋了更多文章之後,確認問題出在蛋白沒打好。由於輕乳酪蛋糕的特性,蛋白必須打至『溼性發泡』,不過之前一直不確定怎樣叫作溼性發泡。經過試驗以及找到一些比較詳細的說明以後,大概可以知道該打到怎樣的程度了。以往都用電動打蛋機來打,電動打蛋機是很方便省力,但缺點是比較難以控制蛋白打發的程度。這次改用手動打蛋,相當累人,但是比較容易掌握狀況,不至於打過頭,所以才會比較接近成功。不過雖然如此,我是覺得還有改進的空間,因為試吃以後覺得有一點分層的情況出現,且蛋糕的口感還是不夠鬆軟。不過至少找到問題的癥結了,接下來就比較容易調整了。

繼續閱讀全文

星期日, 3月 30, 2008

缺水的部落格

這個部落格其實蠻缺水的,不過我另一個英文版的更慘。畢竟英文不是母語,就算寫得再熟,也還是沒有直接用中文來得順。

缺水的原因,一方面是我腦袋空空,另一方面是我在某個 BBS 上有個人版,很多時候一些東西直接貼上個人版會比較快。
繼續閱讀全文

星期六, 2月 02, 2008

使用 wmctrl 來旋轉 compiz 的桌面方塊


Compiz 或 Compiz-Fusion 的 Cube plugin 是個相當有趣的特效 plugin,透過 Cube 以及 Rotate plugin,桌面可以虛擬成一個立體方塊,方塊四周的4個面變成 4 個虛擬桌面,這個我在『我也來貼圖 - Linux 的 3D 桌面』中有提過。旋轉立體方塊可以透過設定好的滑鼠或者鍵盤快速鍵來達成,這在一般的使用狀態下已經足夠了,但假設想要寫 script 來控制時,那該怎麼做呢?

要使用 script 來控制 Cube 的旋轉,方法其實很多,例如透過 Compiz 提供的 DBus 物件來達成。除此之外,方便好用的 wmctrl 雖然沒有直接支援 Cube 的旋轉,但透過一些分析,其實還是可以用 wmctrl 間接控制 Cube 的旋轉。


為了能夠用 wmctrl 控制 Cube 的旋轉,首先我們必須先看看到底 Compiz 是怎麼處理 Cube 的。以我的系統為例,我使用 Ubuntu 7.10 中的 Compiz-Fusion,螢幕解析度設定為 1024×768,先看看在 Cube 的第一個面時,使用 "wmctrl -d" 會看到怎樣的訊息:

$ wmctrl -d
0 * DG: 4096x768 VP: 0,0 WA: 0,25 1024x718 N/A

wmctrl -d 輸出的資訊裡,"DG" 是桌面大小 (Desktop Geometry),"VP" 是 Viewport 座標 (Viewport Position),WA 則是工作區域 (WorkArea) 的座標及大小,最後則是 Desktop 的名稱。從上面的資訊看起來,Compiz 實際的 Cube 實際上只有管理一個寬度很寬的 Desktop 而已,那我們看到的各個面到底是怎麼回事呢?為了搞清楚狀況,將 Cube 向右旋轉到第二面以後,再次以 wmctrl 來看看 Desktop 資訊:

$ wmctrl -d
0 * DG: 4096x768 VP: 1024,0 WA: 0,25 1024x718 N/A

發現了嗎?切換到不同面時,wmctrl -d 顯示的資訊裡,唯一改變的是 Viewport 的位置!換句話說,Compiz 的 Cube 實際上只有管理一個很寬的桌面,然後各個面其實只是不同的 Viewport 而已!這也解釋了為何應用程式視窗可以跨過兩個相鄰面的邊界了!既然知道 Compiz 實際上是這樣管理 Cube 的,那要用 wmctrl 來達成 Cube 的旋轉,其實就只是使用 wmctrl 來切換 Viewport 位置即可!

我寫了個簡單的 BASH script 來做這件事情:

#!/bin/bash
#
# compiz-rotate-wmctrl - Rotate the cube using wmctrl
#
# Author: Shang-Feng Yang
# Released under GPLv3

VER="1.0"


function rotate() {
  # The target face number (begins with 0)
  TVPN=$(( $1 % ${NF} ))

  # The X coordinate of the target viewport
  TVPX=$(( ${TVPN} * ${WW} ))

  # Change to the target viewport
  wmctrl -o ${TVPX},0
}

function usage() {
  echo -e "$(basename $0) v${VER}\n"
  echo -e "Usage:\n"
  echo -e "\t$(basename $0) {left|right|#}\n"
  echo -e "\tWhere:\n"
  echo -e "\t\tleft - rotate the cube to the left"
  echo -e "\t\tright - rotate the cube to the right"
  echo -e "\t\t# - rotate to #th face (begins with 0)\n\n"
  echo -e "Author: Shang-Feng Yang <storm dot sfyang at gmail dot com>"
  echo -e "Released under GPLv3"
}

# The action to be performed. $ACT could be 'left' or 'right' to rotate
# left or right, accordingly. $ACT could also be the number of the face
# to rotate into.
ACT=$(echo $1 |tr '[A-Z]' '[a-z]')

[ "x$ACT" == "x" ] && { usage; exit 1; } || {
  case $ACT in
    left|right|[0-9]|[0-9][0-9])
      ;;
    *)
      usage
      exit 1
      ;;
  esac
}


# The informations about the desktop
INFO=$(wmctrl -d)
# The width of the desktop
DW=$(echo "${INFO}"| awk '{sub(/x[0-9]+/, "", $4); print $4}')
# The width of the workarea
WW=$(echo "${INFO}"| awk '{sub(/x[0-9]+/, "", $9); print $9}')
# The number of faces on the cube
NF=$(($DW/$WW))
# The X coordinate of the viewport
CVPX=$(echo "${INFO}" |awk '{sub(/,[0-9]+/, "", $6); print $6}')
# Current number of the face in all faces (begins with 0)
CVPN=$(( ${CVPX} / ${WW} ))

[ "$ACT" == "right" ] && {
  ACT=$(( ${CVPN} + 1 ))
} || {
  [ "$ACT" == "left" ] && {
    ACT=$(( ${CVPN} - 1 ))
  }
}

rotate ${ACT}


使用方式如下:

  • 不給任何參數,或者參數給錯時時,會顯示簡單的使用說明:

    $ compiz-rotate-wmctrl
    compiz-rotate-wmctrl v1.0

    Usage:

    compiz-rotate-wmctrl {left|right|#}

    Where:

    left - rotate the cube to the left
    right - rotate the cube to the right
    # - rotate to #th face (begins with 0)


    Author: Shang-Feng Yang <storm dot sfyang at gmail dot com>
    Released under GPLv3


  • 使用 left 將 Cube 向左旋轉一個面:

    $ compiz-rotate-wmctrl left


  • 使用 right 將 Cube 向右旋轉一個面:

    $ compiz-rotate-wmctrl right


  • 直接給定某個面的編號時,會直接旋轉至該面,編號由 0 開始:

    $ compiz-rotate-wmctrl 3




這樣的 script 可以用在什麼地方呢?通常是用在一些特殊場合,例如透過非正規方式控制電腦時,像是透過網路遙控,或者使用觸控螢幕時,使用 script 會比較方便。

繼續閱讀全文

星期三, 1月 02, 2008

測試編碼轉換用的 BASH script

最近因為某些狀況,雖然有一些編碼偵測的工具可以用,例如 Mozilla 計畫的 Charset DectorJserv 兄的 charset-dector 等等,但某些情況下並不適用。所以就希望能有測試所有編碼轉換的方法。

所幸 UN*X 的 Shell Script 的威力強大,加上 glibc 提供的 iconv 工具程式,讓要達到測試多種編碼轉換,變得相當容易。雖然直接用 command line 下指令也可以,不過我覺得還是寫成 script 方便重複使用,會是比較好的方式。以下我稱之為 convtest 的 BASH script,就是我之前寫的測試用工具。


#!/bin/bash
#
# convtest:: 編碼轉換測試工具
#
# Shang-Feng Yang <storm dot sfyang at gmail dot com>
#
# License: GPL

TOENC="utf8"

STR="$1"

[ "x${STR}" == "x" ] &&{
INPUT="$(cat - |sed -e 's/\n/\\n/g')";} || {
INPUT=${STR}; }

for FROMENC in $(iconv -l | sed -e 's|\(.\+\)/.*/.*|\1|g'); do
    echo "Encoding=$FROMENC"
    echo -e "${INPUT}" | iconv -c -f ${FROMENC}\
     -t ${TOENC} 2&gt;/dev/null
    echo -e '\n\n'
done


這個 script 還有很多可以改進的地方,像是輸出編碼的自動偵測等等,不過通常這種測試,在非 Unicode 的 locale 下並沒有太大的意義。使用方式很簡單,可以直接把要轉換的字串當作參數傳入:


$ convtest &lt;測試字串&gt; | less


也可以把要轉換的內容用管道以輸出導向的方式傳入:


$ cat target.txt | convtest |less


繼續閱讀全文