星期三, 12月 08, 2010

下載並轉換 Youtube 的 annotation 至 SRT 格式

很久沒寫網誌了,尤其是英文版的。基本上沒有太多太值得寫文章紀錄的事情,而且我實在太懶了,有些本來想寫的,拖太久以後也就算了。所以現在比較常在 Google Buzz 上寫簡單的紀錄就算了。

廢話說完,進入正題。Youtube 上越來越多人不用他的 caption (字幕)功能來加字幕,反而喜歡用 annotation (浮動註釋)功能來做。網路上其實已經有很多線上或離線工具可以用來下載 Youtube 影片或字幕的工具,像是 get_flash_videos、clive、youtube-dl、Google2SRT、Youtube Subtitle Ripper等等,但是對於如何下載並轉換 annotation 的資訊則很少見。不過今天我找到解決方案了。


首先,我從這篇文章的使用者評論中,知道了怎樣下載 annotation。我也寫了個簡單的 bash script 用 wget 來下載 caption 和 annotation,不過那個 script 實在是太簡單了,所以就不紀錄了。下載回來的 annotation 是 XML 格式的,所以接下來的問題就是如何轉換成一般字幕格式。

現在大部分的播放器都支援許多純文字格式字幕,而轉換的方法在 Google2SRT 的程式碼中應該可以找到,不過我還是自己寫了個 bash script 來把 annotation 由 XML 格式轉換到最簡單的 SRT 字幕格式。

我寫的這個 bash script 稱為 ann2srt,使用 XMLStarlet 來解析 XML。除此之外,其他就只有用到 bash 內建指令,以及一些 coreutils 中的工具,像是 cuttr。由於 XML 格式的 annotations 並沒有照時間順序存檔,所以目前轉換出來的 SRT 字幕自然也沒有照時間順序排列,因此可能在某些播放器上會有相容性的問題。雖然加上排序的功能並不是很難,但是因為 mplayer 顯然可以正確處理亂序的 SRT 字幕,所以就先這樣吧!ann2srt 的程式碼如下:


#!/bin/bash
#
# Convert the youtube annotation into SRT subtitle
#
# By Shang-Feng Yang <storm_dot_sfyang_at_gmail_dot_com>
# Version: 0.1
# License: GPL v3

function usage() {
echo -e "Usage:\n"
echo -e "\t$(basename $0) ANNOTATION_FILE\n"
}

function parseXML() {
cat ${ANN} |xmlstarlet sel -t -m 'document/annotations/annotation' -v 'TEXT' -o ',' -m 'segment/movingRegion/rectRegion' -v '@t' -o ',' -b -n
}

function reformatTime() {
H=$(echo $1 |cut -d ':' -f 1)
M=$(echo $1 |cut -d ':' -f 2)
S=$(echo $1 |cut -d ':' -f 3)
printf '%02d:%02d:%02.3f' ${H} ${M} ${S} |tr '.' ','
}

ANN=$1
SRT=$(basename ${ANN} .xml).srt
IFS=$'\n'
I=0

[ -f ${ANN} ] || { usage; exit 1; }
[ -f ${SRT} ] && rm ${SRT}

for LINE in $(parseXML); do
(( I++ ))
C=$(echo ${LINE} |cut -d ',' -f 1)
B=$(echo ${LINE} |cut -d ',' -f 2)
E=$(echo ${LINE} |cut -d ',' -f 3)
echo -e "${I}\n$(reformatTime ${B}) --> $(reformatTime ${E})\n${C}\n" >> ${SRT}
done


mplayer 的使用者請注意:播放時請使用 -ass 選項開啟 SSA/ASS 支援。由於 annotation 的特性所至,在同一時段可能會有不只一個 annotation 顯示在畫面上,而 mplayer 內建的 SRT 解析器遇到這種狀況時會只顯示其中一個,但使用 -ass 的話,所有時段重疊的 annotation 都會顯示出來。

SRT 是相當簡單的字幕格式,不支援任何特效,所以 annotation 的位置及顏色等資訊無法也一併轉換。如果我接下來有改版的話,大概會改成轉換成 SSA/ASS 格式吧...

繼續閱讀全文

星期二, 4月 07, 2009

OpenMoko.com 將暫停 GTA03 的發展

本來要紀錄在我在某 BBS 的個人板上的,可是不知道為何,最近該 BBS 系統不是很穩定,剛剛寫文章寫到一半又當掉了。剛好很久沒有寫 Blog 了,為了證明這個 Blog 還活著,所以就寫在這邊吧!

又隔了幾個月沒去注意 OpenMoko 的動向,沒想到今天看到癮科技的文章,竟然說『OpenMoko 取消 Neo FreeRunner 的開發 ("OpenMoko FreeRunner development canceled, staff slashed")

事實上,該篇文章的標題並不正確。文章內文寫到,OpenMoko 實際上是中斷 GTA03 的發展,並且裁員 50%。該公司的 CEO Sean Moss-Pulz 說,他們會繼續發展他稱為 "Plan B" 的硬體系統。文章最後則指出,OpenMoko 跟癮科技的編輯連絡過了,現在已經上市的 Neo FreeRunner 還會繼續出貨,只是後續的新機種 (GTA03) 將不會上市。文章最後還附上了 Marketing VP Steve Mosher 的訪談錄影:

訪談的內容大致上是說:

  • 他們過去主要的重心放在3個不同的計畫上:Neo FreeRunner、"Project B" (對,不是癮科技文章中說的 "Plan B")、以及 GTA03。

  • 今年(2009)年初,他們發現同時進行3個計畫的負擔太大,所以要想辦法降低負擔。

  • GTA02,也就是 Neo FreeRunner 由於賣得不錯,所以他們的首要目標是繼續支援 Neo FreeRunner 的相關發展。

  • 剩下可以降低負擔的辦法,就只剩下 "Project B" 和 GTA03 兩者。由於開發 GTA03 所需的資源總和是開發 "Project B" 的 3 倍,加上 GTA03 的設計似乎一直沒有明確定案,設計與開發時程一再更改,因此決定暫停 (suspend) GTA03 的發展計畫,將重心擺在 FreeRunner 以及 "Project B" 上。

  • 至於 "Project B" 是什麼?目前不能對外公開,預訂會在今年 8 月份對外發表該產品,並且預計在今年第四季上市。

  • 關於裁員的部分,大部分被裁掉的似乎是 GTA03 開發團隊中,負責軟體開發的外包人員,而這些人主要是在台灣...

  • 這位 VP 還講了些他對 OpenMoko 開放式的開發方式、以及與社群互動的感想等等有的沒的,我就不翻譯紀錄了。



大致上來說,癮科技的這篇文章雖然有講到重點,但是標題下得不對,文章內容也有些鬆散,因此我也到 OpenMoko 計畫的 Wiki 以及 OpenMoko.com 上看看有沒有相關的說明,不過兩者的首頁都沒有任何相關的訊息。直接在 Wiki 上搜尋 GTA03,會被導向到另一個計畫代號為 "3D7K" 的頁面,而如果是由 Wiki 首頁的 Index -> Phone_development 連結裡的 "GTA03" 段落,連結到 "GTA03 revisions" 頁面的話,會發現該頁面的內容完全被刪除了,只剩下一個導向到 "3D7K" 頁面的連結而已。

簡單瀏覽一下 3D7K 頁面的開頭:

3D7K (previously known as GTA03) is the codename of a phone that is currently in development by Openmoko. It will not ship in 2009.

這段文字中,在 "previously known as GTA03" 處有連結指向 mailing list 上的某一篇,由 OpenMoko.com 的 Andy Green 發表的,標題為 "Heads-up: GTA03 is dead, long live 3d7k" 的文章

Openmoko has decided to abandon the moniker "GTA03" and use instead
"OM_3D7K".

This was generated literally by picking the first character off car
registration plates that passed by I am told.

此外,在 "not ship in 2009" 處還有另一個連結,指向 OpenMoko CEO Sean Moss-Pulz 在 2009 年 4 月 2 日的 OpenExpo 上的投影片的 PDF 檔,並且根據該投影片的內容,說 3D7K 的硬體並不會在 2009 年內上市。由這段的內容,大致上可以推斷,OpenMoko CEO 以及 Marketing VP 所說的 "Project B" 應該就是代號為 3D7K 的硬體了。

然而,稍微檢視一下目前收集到的資訊,其實可以發現 3D7K 頁面的第一段資訊有兩點矛盾。首先,關於 GTA03 的去留,Andy Green 在 mailing list 上是使用了 "abandon" 這個字眼,也就是『捨棄』的意思,但是根據上面 Marketing VP Steve Mosher 的訪談,他對 GTA03 的說法卻是 "suspend",是『暫停』發展。從上面提到的 CEO Sean Moss-Pulz 在 OpenExpo 的投影片中,也看不出他們是完全放棄 GTA03。事實上,根據投影片第 21 和第 22 頁的內容,GTA03 的發展比較像是被無限期凍結,直到 3D7K 發展『成功』,並且 Openmoko 軟體平台與 GTA02 的發展都已經成熟。至於另一個矛盾,或者說理解錯誤的地方,是 3D7K 頁面對於 3D7K 不會在 2009 年內上市的說法,這部分明顯的和 Steve Mosher 的訪談內容 (2009 年8月產品發表,2009 年第四季上市) 互相衝突。至於哪個說法是對的呢?我覺得 Steve Mosher 的說法才是對的,因為編寫那段文字的人,很明顯的是把那份投影片的第 22 頁的內容給錯誤引用!第 22 頁是說,『GTA03 不會在 2009 年上市』,而不是說 3D7K 不會在 2009 年內上市。

總結一下,大致上可以確定幾點:

  • GTA03 的發展無限期凍結,由 "Project B" 取代。"Project B" 預計在今年 8 月份對外發表,並於第四季上市。

  • "Project B" 可能就是代號為 "3D7K" 的硬體。

  • 計畫代號為 GTA02 的 Neo FreeRunner 將繼續販售。

  • Neo FreeRunner 在美國的售價向下調整為 US$299.00



總而言之,雖然 GTA03 的發展被凍結,但是至少 OpenMoko 計畫本身並沒有完全停擺,而且 Neo FreeRunner 的售價又下降,只是從網頁上看不出來現在在販賣的 Neo FreeRunner 是 GTA02 的第幾個版本,如果是 GTA02v5 的話,也許可以考慮買來測試看看了。

繼續閱讀全文

星期三, 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


繼續閱讀全文

星期二, 12月 25, 2007

建立在好意的基礎上的,難以承受的壓力

很多時候,會有人基於好意幫忙介紹很多事情,像是介紹工作和介紹對象等等。但有很多時候,這種好意對於當事人來說,卻是難以承受的壓力。

最近我就遇到這種狀況了。有某位長輩基於好意要幫我介紹對象,而這個長輩其實我不算很熟,但偏偏在當場,有位跟那位長輩很熟,跟我也蠻熟的朋友在當場起鬨,導致我本來就已經很難回絕了,現在變成更糟,已經幫我預訂好某天跟對方見面。這種狀況對我來說相當頭痛,因為對方是長輩,而且也是基於好意,本來就已經相當難處理了,偏偏又有人搧風點火,變得我在那個時間幾乎非出現不可。這跟被迫相親之類的,似乎相差不遠?

也許是個性加上環境的問題,我對於追女朋友這件事情,高中以後倒沒有很重視,總覺得到大學再說。到了大學,又覺得認真唸書比較重要,加上又是唸工學院,而且因為高中的『薰陶』,變得我在大學變成獨行俠,而且又剛好大學我系上這一屆,小團體形成得非常快,跟我比較熟的也大都是獨行俠類型的同學,所以就又錯過了。到了研究所,更是一頭鑽進去,幾乎每天整天沒課就待在研究室裏面,甚至到了連當時的指導教授都叫我沒事出去玩玩的地步。中間是有對某個學妹有點意思,不過說實在的我不太知道該怎樣跟她相處,我話不多,她也不是話很多的人,雖然那位學妹一開始好像也有意思,但後來我去當兵時有試著寫信給她,但她就完全沒有回應,所以就散了。當完兵之後,回系上當助教準備出國時,又因為很多原因,搞得那一年內忙得要死,TOEFL 和 GRE 都沒時間準備,自然也不會有時間想這些有的沒的,而且身為助教,要儘可能保持客觀公平,自然不能夠隨便有啥舉動。之後由於當助教那一年相關準備幾乎都等於沒做,又花了一年準備和申請,然後出來。到了這邊,一方面機會更少,另一方面當時也沒有覺得有看到適當的對象,且花了大錢出來不是來玩的,自然要拼了命去唸書,所以就又擱下了,一直拖到現在。

說了這麼多,基本上就是我不是很喜歡被半強迫的去認識異性,尤其是我本身話又不多,很容易冷場,要我主動去攀談,對我來說相當不容易。所以對方的這個基於好意的舉動,對我來說卻是難以承受的壓力。看來只好走一步算一步了。也許是放棄在這邊硬撐,到其他州去找工作的時候了。

繼續閱讀全文

不能說的秘密就是『完全「參考」日劇名場景』?

剛剛看到了周杰倫的『不能說的秘密』,老實說,相當令人失望。

失望的原因有很多,例如最後拆除房子的特效,由於使用了淡江中學當外景,自然不能真拆,所以有一些拆除外牆,以及最後拆除琴房等的鏡頭,一看就知道是電腦合成影像,而且合成的品質跟中間幾個也是電腦合成的部分比起來,粗糙很多等等。不過最讓我覺得失望的原因,在於在片子一開頭的不到 15 分鐘裏面,就出現了至少3個相當『用心』徹底『參考』了日劇版『世界の中心で、愛をさけぶ (在世界中心呼喊愛)』裏面,好幾個男女主角互動的名場景。參考的程度甚至到達了連道具或動作,以及相關台詞等,幾乎都與劇中完全相同的地步!

有興趣的人請看看該日劇,看看朔太郎和亞紀相處的片段裏面,亞紀的那個慣用惡作劇,以及朔太郎第一次騎腳踏車載亞紀回家的那幾個片段,然後再比對不能說的秘密開頭 15 分鐘的幾個片段,就會知道我在說什麼了。

繼續閱讀全文

星期日, 12月 16, 2007

BSD Talk #132 的 RMS 訪談聽譯

前幾天,偶然間看到有人說,在 BSD Talk #132 裡,有 Richard Stallman 的訪談錄音,問說有沒有人可以翻譯一下。剛好我有空,就花了約兩天試著翻譯了一下。

原始的 Ogg 格式錄音檔的下載連結,可以在 BSD Talk #132 的文章裡面找到。由於似乎是電話訪談,Richard Stallman (RMS) 的聲音聽起來不是那麼清楚。RMS 個性似乎蠻急的,常常會插話或者打斷主持人的發問,且有時候講得太快又不清楚,導致翻譯上的困難。我已經盡可能的將所有對話內容做翻譯了,我相信有翻譯到的內容應該至少有 95% 以上。至於翻譯的正確性,我是不敢打包票說 100% 正確,但至少大致上是正確的。至於表現方式,由於我還沒有時間修改 blogger 的樣版,所以可能有點醜。不過就先這樣吧!有機會我再改個適合的 CSS 讓排版好看些。以下是我的翻譯,其中 BSD 是 BSD Talk 的主持人,而 RMS 則是指 Richard Stallman。


BSD: 歡迎收聽 BSD Talk #132。現在是 2007 年 10 月 12 日,星期五。今天我和 Richard Stallman 進行了訪談,他要求他的訪談內容只能夠使用自由聲音壓縮格式來散佈,所以 mp3 檔案只有簡介,必須下載 ogg 檔案才能聽到完整的訪談內容。總之,接下來是訪談內容。

BSD: 今天的 BSD Talk,我們邀請到了 Richard Stallman。歡迎光臨!
RMS: 大家好。
BSD: 也許先跟我們做個簡單的自我介紹,以及說說你最近在忙些什麼。
RMS: 我在 1983 年開始了自由軟體運動,而且我決定要發展一個完全自由的作業系統叫作 GNU。今天,大多數使用 GNU 系統的人不知道它叫 GNU,因為他們以為它叫 Linux。
BSD: 能否請你說說在 80 年代的電腦使用情境,有什麼系統可用或有什麼系統...
RMS: 在那個年代,有許多不同的電腦硬體以及作業系統。微軟在當時並不重要,他們發展給『玩具』電腦用的『玩具』作業系統,因此他們和我的動機無關。不過不管是哪一種作業系統,最重要的是沒有一個系統尊重使用者的自由,使用者不可能有完全掌控自己電腦以及共享軟體的自由。這是我想要改變的。我想要活得自由,我想要能夠修改不是我自己原創的軟體,並且和其他人一起發展軟體,共享與散播這些成果。我不想接受『禁止分享』的這個現狀。然而,我要如何才能打破現狀呢?最直接的途徑是不要使用電腦,否則在 1983 年,沒有其他方法可以避免這些限制。唯一可能創造其他途徑的方法,就是建立一個自由的作業系統,而這就是我當時決定要去做的事情。
BSD: 當你決定開始設計發展你的系統時,你是否有以哪個特定的作業系統當做你的發展範本或目標呢?
RMS: 嗯...一開始,我只是想要建立一個自由的系統,因此技術上來說,這個問題純粹只是次要的技術問題。我一開始偏好我有用過的 MIT Lisp 主機系統,不過這個系統在一般硬體上並不適用。另一個我想到的可行設計方案是製作一個像 Unix 的系統,而這個也是後來的定案。我叫這個系統為 GNU 的意義是 GNU's Not Unix,GNU 不是 Unix。這是一種表明系統源自 Unix 的幽默命名方式。
BSD: 你所努力的目標除了一個可運作的系統之外,還包含了一個符合你的理念的軟體授權是嗎?
RMS: 我致力於發展自由軟體,當然有許多途徑可以達到這個目標。即使在那個時候也存在著某些自由軟體。我有看過一些軟體授權說,你可以任意處置該軟體。我也看過有些授權允許修改過的延伸版本變成非自由軟體。我覺得這樣是自欺欺人。我的目的是給使用者完全的自由,使用那樣的軟體授權,將無法避免依照該授權釋出的軟體再度被封閉起來,因為可能有人會改進該軟體後,釋出不能自由修改的版本,導致使用者取得這個改進版後,失去了自由修改的自由。又或者可能發生複製自由軟體後,宣告複製的版本不可自由使用,導致任何在自由版本做的修改,複製版本可以自由取用,讓非自由版本的開發者佔盡便宜,但反之則不然。因此我覺得使用這種樣子的授權,我將總是面臨這些問題,且自由也將受到損害。因此,我想要有個辦法來避免這種狀況,而我想到提出的辦法,就是我們稱為 Copyleft 的想法,而這個想法以 GNU General Public License, GPL 實現。Copyleft 的想法是說,這個授權本身要求,任何源自使用 GPL 授權的程式碼所發展或延伸的軟體,也都必須是使用 GPL 的自由軟體。
BSD: 我猜在那個時期,保護個人使用電腦的自由這件事並沒有造成廣泛的沖擊,因為在那個時期,並沒有多少人有機會直接使用電腦。
RMS: 是的,能直接使用到電腦的是少數人。不過因為我剛好是屬於這少數人之一,且我又想保有自由,因此自由軟體對我來說是根本的需求。我要不是發展一個自由的作業系統,不然就是停止使用電腦。一個是解放不自由的家園,另一個則是逃離家園。解放不自由的家園自然是比較好的選擇,而電腦對我來說就是我的家園。因此,即使知道不是所有人都生活在我的家園中,我仍然想要有自由。今天,幾乎所有富裕國家的人都生活在電腦的這個家園上,因此解放電腦世界的禁錮,擁有使用電腦的自由就變成了一件非常重要的事情了。
BSD: 特別就我而言,我發現身為美國公民,有越來越多公民權的行使牽涉到電腦的使用,像是投票、線上註冊車籍資料、繳稅、和市政府打交道等等,都必須使用電腦。因此我若選擇不用電腦的話,就必須在有限的辦公時間裡,直接跑去市府各相關辦事處去處理這些事情。因此即使同樣是身為公民,如果我選擇不使用電腦的話,我將面臨種種的不便。
RMS: 是的。在此同時,在世界上的許多地方,政府機關使用執行 Windows 的伺服器,而你只能用執行 Windows 的電腦連上這些伺服器。因此,這些政府機關基本上已經沉淪到強迫民眾去使用不自由也不尊重自由的作業系統的地步了。
BSD: 我猜要讓人們理解到,為何在他們日常生活中,使用自由軟體是很重要的這件事情,是相當不容易的。因為有很多人認為,他們只是想要買台可以讓他們存取 e-mail 的電腦而已...
RMS: 沒錯,很多人認為電腦只不過是一個工具而已,但他們卻不會捫心自問,是誰決定了他們用這個工具可以和不可以做哪些事情呢?他們不會捫心自問,到底是誰控制了你的電腦呢?一旦你開始省思這些問題時,你就會發現自由軟體對於自由社會來說,是最基本的要求,因為電腦被用來輔助自由社會中各種主要活動。因此若電腦不是使用自由軟體的話,那就代表你沒有主導這些活動,而是封閉軟體的發展者在主導一切。
BSD: 我想,會考慮到軟體授權方式的有兩類人 -- 一般使用者以及軟體發展人員。也許讓軟體發展人員去思考軟體授權的問題會比較容易,因為他們是授權規範的主要對象...
RMS: 是的。因為如果你知道怎樣寫程式,而且你又想要修改程式時,你立刻會發現你可能面臨沒有原始程式碼可用的問題;或者是被告知你不能修改程式;或你發現你被禁止去執行修改後的程式;又或者被告知說,你可以修改,但你不能散播修改後的成果,你只能自己私底下使用。在這些情況下,程式發展者有相當大的權力限制使用者能做些什麼。然而,若是自由軟體的話,是由使用者來決定軟體到底該怎樣運作和有怎樣的功能。就算使用者本身不寫程式,使用者仍有權力參與決定軟體未來發展方向的討論。
BSD: 基本上你花了很多時間與程式設計師會面。在你與他們會面時,你怎樣讓他們了解到,將軟體以自由軟體授權的方式釋出有好處呢?
RMS: 事實上我並不常這麼做。我不會主動提出說,當你發展軟體時,為何需要特別去尊重其他人的自由的這個觀點。重點是這是你身為現代人應有的責任,你不應該去限制其他人的自由。非自由軟體這個議題是個社會層面的問題,它的影響相當深遠。這才是我想要論述的,不論對象是程式設計師或者非程式寫作人員,這個議題都是一樣的。因此,我告訴人們的是,如果你尊重其他人的自由的話,你將會成就更多。......
BSD: 我了解了。有許多不同的軟體授權能達成你的目標,或者至少尊重其他人的自由...
RMS: 沒錯,有許多的軟體授權是尊重使用者的自由的,因此使用者能保有最基本的自由。要寫一個尊重使用者自由的軟體授權有很多途徑,因此產生了許多不同的自由軟體授權。然而,這些自由軟體授權彼此間最主要的分水嶺在於,一部分授權使用了 Copyleft 的理念,但其他則否。擁有 Copyleft 理念的軟體授權強調,任何人散佈任何版本的自由軟體時,也必須尊重他們所散佈對象的自由;而不具有 Copyleft 理念的軟體授權則不這樣要求。因此舉例來說,BSD 授權就不是一個 Copyleft 軟體授權。
BSD: 那麼,對於想要寫自由軟體的人來說,你有什麼建議呢?因為至少在美國,非程式設計師也有許多方法能夠對軟體的自由造成妨害,像是透過專利等等。
RMS: 是有許多潛在的威脅。我想我該指出,最基本的威脅,是像將某些基本的檔案格式或者通訊協定當作機密,導致程式發展人員根本無從下手寫程式。這種類型的妨害並不是透過文字的手段,而只是將必要資訊封閉起來而已,但卻極端的妨害自由軟體的發展。然而,除了這個問題之外,自由軟體的發展,還面臨了透過合法途徑達成的各種妨害手段。專利是這種手段的其中之一。美國的政策企圖讓軟體技術與軟體功能特色也能夠申請專利。當這些都能夠申請專利時,那代表任何使用這些技術或者實作這些功能特色的人,都會挨告。就技術上來說,大型的軟體往往包含了數以千計的點子,因此有可能一個軟體就同時造成了數以百計的專利限制。此外,在某些案例中,美國政府以數位千禧年著作權法案 (Digital Millennium Copyright Act, DMCA ) 為手段,協助廠商使用數位手銬來箝制其公民對數位媒體的使用自由。數位千禧年著作權法案中規定,若發布的作品使用 DRM (Digital Rights Management) 的話,那麼散佈任何可以讓使用者避開 DRM 限制的東西都是違法的。例如,散佈可以用來讀取使用保護技術加密的 DVD 的自由軟體,在美國境內是違法的。
BSD: 在美國,我們所享有的合理使用受著作權保護作品的法律權力,而這個權力會這麼輕易的就被簡單的著作權保護機制所限制而無力化,讓我覺得實在很有趣...
RMS: 合理使用這件事情是著作權法中所付與的權力,而 DMCA 則是不同的法。他們說,本質上他們並沒有剝奪合理使用的權力,合理使用是說以合法的手段存取受 DRM 保護的作品。然而,實際上,合法存取受 DRM 保護的作品似乎是不可能的,因為散佈能這麼做的軟體或硬體是不合法的。所以,除非你自己找到存取 DRM 保護作品的方法,自己寫程式或者製作硬體來實作這些方法,否則你將無法行使理論上你仍然擁有的合理使用權力。這就像是在說,開車是合法的,但賣車是違法的。
BSD: 我們討論的這兩個法都是美國的法律...
RMS: 嗯。令人難過的是,如果某些事情在美國是不對勁的,美國政府並不會試著去修正它,取而代之的是試著將這個問題擴大到全世界。美國政府往往透過強制簽訂相關條約的方式,很有效的將這個議題擴展到世界上其他國家中。這些條約通常還會要求所有條約國也同樣制定類似 DMCA 的法案。
BSD: 所以人們試圖改變現狀。我相信有許多不同的方向可以嘗試,你是選擇怎樣的方法來改變這種情況呢?
RMS: 我試著知會在其他國家的人們,關於這個他們可能將會面臨的危險,這樣他們才有反抗的機會。
BSD: 另外,有另一個我談談的主題是,現在有一大堆各式各樣的軟體授權,而有些人創作了顯然非常近似於自由軟體授權的軟體授權。我並不想說也許他們試圖用這種方式來糢糊焦點,但是我覺得是有這種可能...
RMS: 我不知道。軟體授權太多了,我搞不懂你指的是哪個。
BSD: 這些授權要求提供原始碼,但試著將『開放』的字眼以『免費』取代。
RMS: 這是兩件不同的事情。軟體授權所要求的事項是一回事,而授權書所選用的字眼與概念則是另一回事。我認為最好把這兩個問題分開來討論。有人在談論 GPL 時,將 GPL 描述為開放原始碼軟體授權。嗯,基本上 GPL 被 OSI 認定為是開放原始碼軟體授權的一種,因此雖然我當初設計時,並沒有刻意將它設計為開放原始碼軟體授權,但它確實是開放原始碼軟體授權的一種。然而,你是怎樣看待自由軟體的價值與概念,和你是怎樣看待開放原始碼軟體的價值,這是不同的問題。不論你所持的價值觀為何,GPL 就是 GPL。你可以稱它為開放原始碼授權,也可以稱它為自由軟體授權。GPL 兩者都是。不過,關於什麼是 GPL,以及 GPL 規定了些什麼,這是一個問題;而關於我們是否重視自由的這個價值,則是另一個問題。....
BSD: 假設你使用某個作業系統的發行版本 (distribution),例如像是 Ubuntu,或者是...
RMS: 那是 GNU/Linux (GNU-plus-Linux) 系統之一。
BSD: 是的。或者使用像是 FreeBSD 時,你很難看到在安裝光碟上的套件都是採用同樣的單一授權,很多時候各個套件會採用各種不同的授權...
RMS: 沒錯,因為作業系統是許多程式的集合,而這些程式不見得都會有一樣的授權方式。事實上它們『不會』有一樣的授權方式。
BSD: 有時候,要決定某個軟體套件是否該包含進系統中,是相當不容易的,因為必須考量授權的相容性...
RMS: 一般來說是的。為了讓討論有內容,我想你應該講得更明確些,你指的是什麼?
BSD: 我想我要說的是,你是否覺得,引用更寬鬆或者更嚴格授權的軟體的程式碼到軟體中,會有所風險?
RMS: 我想我搞不清楚你指的到底是哪個軟體授權?
BSD: 一個常見例子是 Sun Microsystems 的 ZFS,它是採用 CDDL
RMS: 我不記得 CDDL 是怎樣的授權。事實上我不記得它是否是自由軟體授權之一。我必須去查查看自由軟體授權列表,因為我不記得 CDDL 的內容是什麼。不過基本上,當你要混用使用不同授權方式的程式碼到單一程式中時,那你就必須處理授權相容性的問題。因為為了能夠合法的結合這些程式片段,整合後的程式碼必須滿足各片段使用的各種授權的各項要求。
BSD: 若有一個程式片段使用的授權方式並不是那麼尊重自由...
RMS: 喔,很抱歉,你是說使用非自由的軟體授權?
BSD: 是的。
RMS: 如果是非自由軟體授權的話,那你根本就不該使用那個程式碼。因為這麼做是不道德的。除此之外,這個軟體授權絕對不相容於 GNU GPL。....
BSD: 我想,有些發行版本認為,與其不使用不自由的軟體,他們寧願根據客戶需求而包含些非自由軟體到他們的發行版本中,以便讓...
RMS: 是的,有些不道德的發行版本會這麼做。有很多這麼做的發行版本。事實上,大部分的發行版本也都確實包含非自由軟體在其中。這代表,如果你安裝了任何一個發行版本提供的非自由軟體套件的話,你的系統就不是一個完全尊重自由的系統了。因此,對於這些發行版本,我們唯一能做的,就是不建議使用他們。我不能推薦人們去使用不是完全自由的軟體集,因為如果我這樣做了,那麼人們就可能會去取得這些發行版本,安裝了些他們找到覺得不錯的非自由軟體,導致他們因為我的建議而去用到了非自由軟體。我不希望這種事情發生,所以我不推薦任何包含了非自由軟體的軟體集。這是我所深信且身體力行的道德標準。基於此,根本就沒必要討論如何使用非自由軟體,因為你根本就不該去用。你不該去散播,也不該建議其他人使用這些非自由軟體。我對各種 BSD 發行版本感到不愉快,因為在他們的套件安裝系統中 -- 某些情況下,這個系統叫作 Ports,我不確定是否所有 BSD 都使用這個名詞稱呼他們的套件安裝系統 -- 全都包含了些非自由軟體,因此我無法推薦這些 BSD 發行版本。對於這個事實,我覺得很難過。我並不是因為 BSD 不是 GNU 而拒絕接受 BSD 系統,雖然 BSD 是個不同的作業系統,但本質上,BSD 也是個自由作業系統。因此基本上我應該要能夠推薦 BSD 才對。但是,沒有一個發行版本是完全自由的。我很希望有一個我能夠推薦給其他人的,完全自由的 BSD 發行套件。
BSD: 你對那些認為,要達到完全自由的目標,必須借重客戶才行的人,想要說些什麼嗎?例如...
RMS: 我想這是個錯誤。他們以捨棄長期成果為代價,以取得短期的成功。我從我開始建構 自由軟體社群開始,就身處於社群之中,我知道我們的弱點是什麼。我們最主要的弱點在於,當我們面對實用性與便利性的需求時,我們有忘卻自由的傾向,我們忘了我們想要自由的初衷。這是很可怕的,沒有什麼比忘了你的目的還來得可怕。所以,在我看來,藉由不告知使用者其最終目標是完全的自由,以取得更多使用者來用這個發行套件的這個方法,可以預見的,會導致社群變成一個成員並不知道最終目標是自由的使用者社群。然後,社群成員將不會也不想要知道這個最終的目標。因此,就我的所見所聞告訴我,這樣做是個錯誤,因為事實上這樣的事情真的在 GNU/Linux 系統上發生了。許多人試著推廣 GNU/Linux 以增加使用者數量,他們認為目標是在增加使用者的數目。在這其中,有部分人試著以這樣的論點來佐証這種做法是正確的 -- 當我們擁有更多的使用者以後,我們將更容易建立一個更好的系統,以便讓所有人都使用這個系統。確實,就某方面來說,這種做法對真正的目標是有點幫助的;但問題是,當你藉由不告訴這些使用者自由才是真正目標,以便能增加使用者數目時,這些使用者就有可能會認為,要改善系統的好方法,是增加更多的非自由軟體!而這個狀況事實上是一再的發生。因此,我所得到的結論是,藉由不教育使用者思考自由的真諦,以達到自由的最終目標的這個想法,是徹底的錯誤。教育人們堅守自由的正確方法應該是,建立典範,並且讓他們知道你到底在爭取些什麼。因此,你必須解釋自由的真諦,並且讓人們知道你真的在乎自由;而讓人們知道你真的在乎的方法,則是讓人們了解,你會略過雖然在實際上真的比較方便,但卻是捨棄自由的這些途徑。這是你表現自由真的對你非常重要的方法,即使知道這條路比較難走,但我仍然會這麼做,因為這才是邁向我爭取自由的目標的正確道路。如果你口口聲聲說想要自由,但你卻為了換取些許便利而實際上放棄了自由的話,那麼你讓人們看到的是,其實你並不是真的那麼在乎自由的。而如果你根本不談論自由的話,大部分的人可能根本就不會去思考這個問題,他們只會去考慮他們自身遇到的各種問題而已。
BSD: 我想,藉由放棄這些便利性,以 Flash 為例,這樣的不便想必激發了你去發展 Flash 的自由軟體版本吧?
RMS: 正是如此!如果你認為使用非自由軟體是個好辦法的話,你很可能會就只是接受現況;然而,若你知道使用非自由軟體是個問題,那你才會有動機去試著解決問題,而這個問題的答案則是使用相對的自由軟體來取代。
BSD: 那麼,自由軟體社群至今的努力成果如何呢?我們是否有所進展呢?
RMS: 有的。譬如和 10 年前比起來,我們現在的狀況遠比當時好多了。我們有更多的自由軟體可用;我們有更便利好用的自由作業系統,尤其是對電腦不是那麼熟悉的使用者來說。此外,社群的規模更大,且有更多人知曉了我們想爭取自由的理念。我們看到社群跟以往比起來,變得更強健了。
BSD: 感謝你今天花時間接受我的訪談。
RMS: 樂意之至 (Happy Hacking!)。
BSD: 非常感謝!
RMS: 再見!

BSD: 如果你想要在網站上回應你的意見,或者想要存取過去的內容,請至 bsdtalk.blogspot.com。若你想寫 e-mail 給我,請寫信到 bitgeist@yahoo.com。感謝收聽 BSD Talk #132。


繼續閱讀全文

星期四, 11月 29, 2007

開啟 Windows Mobile 的 "Run" 對話框

Windows Mobile 雖然在不少方面都和一般電腦用的 Windows 類似,但有一個很大的不同,在於 Windows Mobile 的 Start (開始)選單中,並沒有 Command Prompt (命令提示字元) 或 Run (執行) 等項目。這在一般情況下不是問題,但有時候希望傳遞命令列參數給某些程式時,由於缺乏命令列介面,就很難達成這項需求。解覺得辦法可以從兩方面下手,一個是使用 "DOS-like command prompt and (DOS) scripting on the Pocket PC - a roundup" 文章中提到的 cmd.exe 替代方案來開啟命令列介面;另一個則是使用 Windows Mobile 中隱藏的 Run 對話框。

開啟 Run 對話框的方法主要是參考以下兩篇文章/討論串:

文章中提到的步驟如下:

  1. Go to the home screen, press and hold the `action' key (that's the middle button of the direction keys). By default the Pocket PC 5.0 emulator uses the right Alt key for `Action'.

  2. Tap and hold the clock in the top right.

  3. Select `Run'


大致上是這樣,雖然有一點小細節被省略了,在第一篇的討論串中有提到。不過實際上我測試過,在任何應用程式裏面,只要 panel 右邊是顯示電池電量圖示或者時間的話,基本上都可以。所以例如我的 Today 會在 panel 右邊顯示電池圖示,此時要叫出 Run 對話框只要
  1. 按住 Action 鍵。

  2. 點選並按住電池圖示(或如果是顯示時鐘的話,點選並按住時鐘)。

  3. 放開 Action 鍵。此時會跳出 popup menu,裏面會有 "Run" 和 "Clock" 兩個項目。

  4. 點選 Run。

這樣就可以叫出 Run 對話框,因此就可以輸入要執行的程式以及命令列參數了。

在試驗這個技巧時,我意外的發現了 Windows Mobile 內藏的一個叫作 "Internal Use Spy" 的『小工具』。這個工具會顯示出現在視窗的一些資訊以及 Handle,並且會有選項問說要不要 dump parent。在 " Internal Use Spy: A nice hidden debugging tool for Pocket PC 2003 device and Pocket PC 5.0 device" 這篇 blog 文章中有一些說明以及圖片,我就不多說了。我有試過點選 Yes,結果什麼事情都沒發生,所以不太確定到底點 Yes 有什麼用就是了。

繼續閱讀全文

星期一, 10月 29, 2007

投稿會被接受嗎?

睡前看了一些 10 月號的 Linux Journal,然後躺在床上翻來覆去睡不著,就想說為何不試試看投稿 Linux Journal 的 Tech Tips 專欄呢?

Linux Journal 有一個 Tech Tips 專欄,是專門收集各種小技巧文章的專欄。雜誌上對於如何投稿並沒有寫得很清楚,只有給了一個 e-mail address 以及說投稿時將 tips 和連絡方式寄到該位址去。在搞不清楚到底該附怎樣的連絡方式之下,到他們網站看看,也沒有找到進一步的說明。既然如此,那就只好實際試試看啦!相信如果投稿有被接受的話,應該會用 e-mail 跟我連絡,那時候再問清楚看需要怎樣的連絡方式資料給他們。

不過該投稿什麼好呢?雖然我在某個 BBS 上有個人板,我也常在上面紀錄一些小技巧,不過想來想去,還是先拿以前寫過的一個 "voice-clock" 的 BASH script 開刀好了。voice-clock 是一個利用 Festival 的 text2wave 來達到語音報時用的小程式:

#!/bin/bash

function usage {
echo -e "Usage:\n\n\t$(basename $0) date|time\n\n";
}


[ "x$1" == "x" ] && {
usage;
exit 1;
}

TEXT2WAVE="text2wave -scale 3.5 - "
TIME="$(LC_ALL=C date '+%l:%M %p')"
DATE="$(LC_ALL=C date '+%A, %B %d, %Y')"
PLAYER="aplay"

case $1 in
[Dd][Aa][Tt][Ee])
echo ${DATE} | ${TEXT2WAVE} | ${PLAYER} 2> /dev/null;
;;
[Tt][Ii][Mm][Ee])
echo ${TIME} | ${TEXT2WAVE} | ${PLAYER} 2> /dev/null;
;;
*)
usage;
exit 1;
;;
esac

把程式貼上去,寫了些簡介,剛剛把信寄出去了,不知道會不會被採用?我是覺得被採用的機會應該不會太低,因為連用 sox 來合併聲音檔案都會被收了,這個 script 應該不會比簡單的下指令來合併檔案來得差吧?哈哈!希望是這樣啦!

祝我好運吧!

繼續閱讀全文

星期四, 10月 25, 2007

Heroes 裏面的『虛擬』網站

之前在看日劇『不能結婚的男人』時,發現了製作單位特地為在畫面中出現的一個網址建立了一個虛擬的網站,沒想到剛剛在『補看』NBC 的 Heroes 第 1 季第 12 集時,也發現了類似的東西。

本來以為 NBC 的 Heroes 第一季只有 11 集,且在去年 12 月底播完第一季。不過後來發現其實第一季變成了 23 集。雖然不清楚原因,不過我想也許是收視率不錯,所以 NBC 改變了播放的策略吧?總之,我本來只有看到第 11 集。剛剛在補看第 12 集時,發現在 Noah Bennet 侵入 Mohinder Suresh 的住所,要求 Mohinder 協助他不成,遞了一張名片,上面有一個網址和電話:



基於好奇寶寶的本性,自然要去『測試』看看啦!沒想到這個網址還真的可以連到一個網站去



網頁上有公司的照片,以及一個與節目中名片上相同的免付費電話 (1-800-PRIMA16),不過我不敢真的打打看。其實最妙的是,網頁最下方有一個連結是『Information Concerning Noah Bennet』,開啟連結指向的網頁,裏面說明了 Noah Bennet 不再是 Primatech Paper Company 的員工了,這和目前正在上演的第二季劇情符合,Noah Bennet 似乎在第一季某一集時,離開那個當作偽裝用的公司,全家搬遷逃跑到加州去了。

沒想到連美國的製作單位也開始會為劇中出現的網址建立虛擬的網站了,真是有趣!

繼續閱讀全文

星期四, 9月 27, 2007

標準的白爛老美作風

今天下午出門去買點東西,結果回來的時候,發現前幾天不知道什麼原因始終大開的社區大門,攔車子用的那個升降橫桿沒放下來,但大門關起來了,因此就乖乖的把車停在門前 RFID 感應器旁邊刷卡。依照習慣,以往大門開的速度比較慢,所以一刷完我就把車往前推到門口。可是左等右等,始終不見大門有要打開的意思。好在後面沒車,所以又倒車回感應器,又刷了兩次,大門依然一動也不動。此時後面已經有車子來了,只好門前回轉,把位置讓出來。本來以為後面那台車也應該進不去,沒想到他一刷卡,門就開了...

看到後面的可以開,我的卡不行時,覺得很奇怪,不過卡在車道上也不是辦法,大門前車子越來越多,只好開出去找地方回轉。開出去繞了一小段,找到地方回轉了,且剛好大門前又沒車,不過我後面也跟著另一個住戶要進去。再刷了兩次,還是一樣沒反應。本來想說如果沒車的話,就直接回轉走給訪客走的門。不過很不剛好的,又是一堆車尾隨我們後面來。但這次我後面那位太太的卡也刷不進去,看我停在旁邊,問我知不知道為何卡沒作用,要怎樣才能進去?其實我很想回,如果我知道的話我就進去了,不會在你面前回轉啊.....不過我是跟她說我也不知道到底是怎麼回事以及該怎麼辦。既然這個門不行,社區在高速公路旁邊還有一個側門,只好這次繞大圈一點,去側門試試看。當然結果可想而知,繞了一大圈到側門,一樣刷不進去,而且雖然側門沒車,但訪客用的電鈴竟然也故障?害我在那邊想要試試看用訪客電鈴打我自己,幫自己開門的,結果只有乾瞪眼。沒辦法了,只好還是又回到前門。

回到前門後,由於現在是下班時間,果然大門前車子變多了,也有幾個住戶跟我一樣排到訪客車道。不過很不幸的,我在訪客車道的電鈴前按我的呼叫號碼,結果也失效?用電鈴的住戶名字號碼檢索,也找不到我的號碼?搞了一陣子,受不了了,只好直接打給社區辦公室。打過去跟她說我的門禁卡沒辦法開啟大門,可否幫我開?她問說我昨天有沒有收到一封信?我說啥信?應該沒有吧?然後她又講了啥,但太小聲我聽不到,不過幫我開了門。一進去第一件事情,當然是直接殺到社區辦公室去,問問看到底怎麼回事?結果呢?真是個令人意想不到的答案:
前幾天他們的電腦系統當機,造成檔案損毀,有部分住戶的相關門禁資料完全遺失。

好樣的,這麼大條的事情竟然沒有先通知?萬一我今天晚上他們下班以後才要進來那怎麼辦?完全沒有辦法進來耶?難道要我撞門?我也懶得問到底為何沒有通知,她在我按電鈴時,用對講機問我有沒有收到信,應該就是通知了,但是為何會真的有受到影響的人反而沒收到信?可想而知,他們的信一定是根據電腦紀錄來發的,問題是資料遺失,所以呢...

果然是標準白爛老美的作風。這次算我運氣好,要是晚一個半小時回來,他們就下班了,到時候就欲哭無淚了。機車勒...

繼續閱讀全文