« November 2006 | 主頁面 | January 2007 »

December 31, 2006

跨年夜的 101 煙火秀

IMG_8860.JPG

感謝熊的熱情招待, 讓我們一夥人能到他尚未裝璜完工的新家屋頂上, 就近觀看跨年夜的 101 煙火秀.

出門前還和瓜先在家裡小睡一下, 免得等一下體力不支. 不禁感慨自己年紀有點大了, 不像以前大學的時候可以從下午玩到午夜, 撐到凌晨再去吃永和豆漿. 現在連跨個年都要先補眠一下.

我們跟宗宏夫婦一起坐計程車到松山高中, 才到東興路口就看到滿滿的人潮跟車潮, 決定放過計程車司機一馬, 在這裡下車.


IMG_8808.JPG

從松山高中前的電動天橋上望下去, 基隆路上滿滿的車潮. 此時是晚上十一點半, 基隆路車行地下道已經封閉了, 不知道他們要去哪裡 ?

***

IMG_8841.JPG

我們剛到的時候, 101 的燈光依舊閃耀.

IMG_8850.JPG

接近午夜時分, 101 外牆的燈光突然全部熄滅, 暗示著即將到來的倒數計時.


IMG_8852.JPGIMG_8853.JPG
IMG_8854.JPGIMG_8855.JPG
IMG_8856.JPGIMG_8857.JPG
IMG_8858.JPG

燈光熄滅後, 開始倒數的最後 10 秒. 101 外牆有一圈一圈的煙火, 一層一層炸上去. 最後一張是主煙火開砲前的那一瞬間. 然後就...

IMG_8861.JPG

炸了!

接下來的 180 秒, 三千萬新台幣在空中飛舞真是好看:

IMG_8864.JPGIMG_8865.JPG
IMG_8870.JPGIMG_8874.JPG
IMG_8876.JPGIMG_8889.JPG
IMG_8914.JPGIMG_8923.JPG
IMG_8928.JPGIMG_8951.JPG
IMG_8966.JPG

December 27, 2006

海纜斷了, 網路沒了

fiber_cable.jpg

前天晚上的地震把中華電信的海纜震壞了, 今天早上到公司發現對外的網路全沒了, 全公司哀鴻遍野. IT 說, 我們亞太地區的機房都在新加坡, 某些 proxy 在香港, 所以... 現在什麼都沒有了.

在 BJ 的指點下, 看到了 TWGate 的對外流量 MRTG:

Singapore-MRTG.png

相當戲劇性地, 昨天地震後幾個小時, 往來新加坡的流量就從一百多 Mbps 降到沒有了. 不過我很好奇的是, 為什麼是在地震之後好幾個小時網路才死掉, 而不是立即斷線呢 ?

***

上班沒網路, 日子實在太難過了. 同事們決定來自力救濟:

PICT0286.JPG

我們拔了桌上的電話線, 插到 notebook 的 modem port 上, 撥 KKman 的免費撥接上網...

真是沒想到, 那個 modem port 居然還有再用到的一天. 感謝公司配給我們便宜的傳統兩線式話機, 才能拿來接 modem. 要是像以前在 Sony 時用數位式的分機, 就難了.

連線速度: 52Kbps!

December 17, 2006

不騎比騎一半更丟臉

PICT0271.JPG

自從 BJ 上次跟我攻五指山失敗後, 他就對爬山有心理障礙. 昨天晚上在討論今天騎車的目的地時, 為了凹他再來爬五指山, 我祭出 "騎一半" 的策略: 先開車到伯爵山莊大門, 再騎上去.

老婆也說出 "不騎比騎一半更丟臉" 的話鼓勵他, 於是就這麼成行.

五指山公路從大湖山莊街底開始到山頂, 全長 12km, 伯爵山莊的大門差不多就在一半的地方. 總爬升約 600m, 但是前六公里要爬 400m, 後六公里只爬 200m, 因此從伯爵山莊騎上去可以說是輕鬆愉快.

一路上坡度都不超過 5%, 而且大部份的地方都只在 2%-3% 之間, 因此我們只要小心維持心跳, 甚至還可以一邊騎一邊聊天.

PICT0275.JPG

在第一個行動咖啡館旁邊有個視野良好的平台, 看到了從烏雲中透出來的陽光.

PICT0281.JPG

五指山山頂的涼亭. 在山頂吃完燒仙草和地瓜湯後, 決定帶 BJ 去風櫃嘴朝聖一下.

PICT0283.JPG

來過幾次風櫃嘴, 每次都是大霧茫茫的, 但是今天的天氣真是好得不得了. 這是風櫃嘴的三岔路口. 正面是我們來的地方, 右邊下去是外雙溪, 左邊往萬里.

PICT0285.JPG

就這樣, BJ 也上了風櫃嘴.

December 15, 2006

閃閃動人的電漿杯

IMG_8525.JPG

記得去年在 Tom's Hardware Guid 上看到2005 年的聖誕禮品最佳購物指南, 裡面有這個東西: Plasma Mug. 聖誕節快到了, 總是要買點有趣的東西來玩玩. 所以我跟 ThinkGeek 訂了這玩意兒.

十一月底就下訂了, 沒想到 ThinkGeek 給我拖拖拉拉, 一直到前幾天才送來.

馬克杯的本體是一個雙層的透明玻璃杯, 中間看起來空空的, 但實際上有填充一些低壓的惰性氣體. 另外它有一個黑色的杯墊, 要裝八顆三號電池. Oh my God, 要我一時去哪裡生這麼多顆電池呢 ? 雖然它有 DC input jack, 但是那個插座中間的 pin 特別粗, 我試遍了零件箱裡所有的 DC 頭都插不進去. 只好乖乖把我所有的 eneloop 都拿出來給它用.

IMG_8512.JPG

看起來就像個燒杯一樣, 沒什麼特別的.

但是當我把杯墊上的電源開關打開...

IMG_8515.JPG width="400" height="600" />

神奇的事情發生了. 本來空無一物的杯壁中間發出了橘色的光芒, 感覺非常夢幻. 而且當我用手指去觸碰杯子時, 這些橘色的光芒會被我的手指吸過來.

把燈關掉來看.

IMG_8519.JPGIMG_8520.JPG

IMG_8521.JPGIMG_8522.JPG

用慢速快門拍攝的時候, 我可以用手指引導那些光芒在不同的位置出現, 就可以拍出不一樣的照片.

***

接下來是原理解說.

其實這東西神奇的地方不在杯子本身, 而在那個黑黑的杯墊.

杯墊裡面有一個返馳變壓器, 返馳變壓器的驅動電路, 以及一塊很大的金屬極板. 返馳變壓器工作在數十 KHz 左右的頻率, 利用一次端電壓不連續時磁場崩潰的效應, 可以在二次端感應出非常高的電壓, 通常在數 KV 到數十 KV 左右.

輸出的交流高壓被引到那塊金屬極板上, 因為電壓的作用, 極板上就會感應出交流電場. 電場的強度由電壓決定, 而磁場的強度由電流決定, 因此在這樣的前提下, 極板上會感應出一個阻抗很高的電磁場. 所謂阻抗高, 就是電壓相對於電流來說很大, 或是電場相對於磁場來說很強.

這個電場會輻射出去, 擾動杯壁中的惰性氣體分子. 雖然氣體分子本身不帶電, 但是如果電場夠強, 就可以把它外面的電子給搖下來, 惰氣就從氣體變成電漿啦, 這就是為什麼它叫做 "電漿馬克杯" 的原因. 當然, 有電子被打下來, 就會有電子被吸回去, 這是一個動態的平衡, 電子在從高軌道跌回低軌道的時候, 就會把多出來的能量變光子丟出來, 於是我們就看到閃閃動人的光芒啦.

因為電場是交流的, 所以其實杯子裡面並不會有恆定方向的電流流動, 而比較像是電漿被電場拉著在某個很小的範圍內抖動. 至於用手去摸杯壁為什麼會改變光芒的形狀, 是因為手會改變電場的分佈, 因此就會引導電力線走不同的路.

***

既然這個杯墊產生的交流電場可以激發杯子裡填充的惰氣, 那能不能來激發其它的東西呢 ? 我決定拿日光燈管來試試.

我找了一跟壞掉的 T5/8W 燈管. 這根燈管有一端的燈絲已經燒掉了, 所以放在燈具裡點不起來. 我把燈管靠近杯墊...

IMG_8528.JPG

嘿嘿, 真的會亮耶. 燈管上黑掉的地方就是燒掉的燈絲.

再拿一顆省電燈泡來試試. 這次出場的是特力屋的 110V/16W 省電大便燈.

IMG_8532.JPG

為了表示我沒有作弊, 把燈打開拍一張:

IMG_8534.JPG

看清楚喔, 我沒有偷偷接電在燈泡上喔.

再來幾種不同的玩法, 合體!

IMG_8551.JPGIMG_8552.JPG

IMG_8554.JPGIMG_8556.JPG

真是太好玩啦!

December 10, 2006

CSS 與 JavaScript 的樂趣

PICT0269.jpg 阿爽出生的時候, 我用 Web Diary Pro 架了第一版的寶寶日記. 那時候對網站沒有什麼太多的概念, 只要求 Web Diary 能動就好, 除了把寫在 Perl source 裡的日文換成中文外, 其它什麼都不敢動. 看到那個 style.css 也是敬而遠之, 連用 vi 把它打開的勇氣都沒有.

今年年初, 將 Web Diary 換成 Movable Type 後, 為了 MT 模板的問題, 硬著頭皮開始研究 CSS, 才知道原來 Web Diary 目錄下的那個 style.css 就是它的 CSS 檔呀.

 開始研究 CSS 後, 彷彿讓我發現了一個新天新地. 原來我對 html 的了解與觀念已經過時了, CSS 是用來將網頁的表現方式從內文中抽離的好工具: html 裡應該只有文件的內容本身, 而字型, 顏色, 甚至排版, 應該都交給 CSS. 好處是, 我可以在不更動 html 的狀況下, 只修改 CSS 就讓整個網站煥然一新. 前一陣子阿快日記的改版就是這樣做到的.

***

把 MT 昇級到 3.3 版之後, 有一些小問題令我不太滿意. 其中一個就是檔案上傳的時候, 上傳的目錄預設是不顯示出來的, 要按一個 link 它才會顯示出來, 這樣讓我每一次上傳圖片的時候都要多按一下, 很討厭.

我到 MT 裡面去挖了那個 template 出來, 發現它除了 html 以外, 還有一堆像程式的東西. 原來那些碼叫做 JavaScript 呀. 我想起來, 我在 MT 裡裝的那個 EnhancedEntryEditing 插件, 用到的那個 TinyMCE 編輯器, 不也是 JavaScript 寫的嗎 ? 我問了 Google 大神後, 大概知道 JavaScript 是一種嵌在 html 裡的 scipt, 在 client 端由 browser 執行. 我終於知道為什麼現在的瀏覽器似乎都很複雜了, 因為要跑這麼複雜的 script 呀.

看了網路上一些範例後, 覺得 JavaScript 實在是很有趣的東西. 而且有一個特點是: 因為它是解譯執行的 script, 不經過 compile, 所以 OOP 裡很多概念都可以輕易實作出來, 包括動態生成程式碼這種對 compiler 來講幾乎是不可能的事都做得到. 我決定買幾本書, 好好來研究一下這東西.

JavaScript 的語法跟 C 很像, 但是帶入了更多 OOP 的觀念. 雖然我對 C 不熟, 但多年來在 VB 裡面打滾, 讓我對 OOP 的概念不會太陌生, 所以對於像 property, method, member function, 甚至於 DOM 和 event listener 這些元素都還蠻能理解的. 當我看完 event listener 的章節後, 又看到一個新天新地, 發現原來在 browser 端執行的 script 可以做這麼多的事. 我再回頭去挖 MT 裡的那個問題: 上傳時要多按一下 :

mt_upload1.PNG

我用 Firefox 的 DOM inspector 去挖, 發現按下那個 link 時, 有一個 div 的 class 會改變, 而這個 class 對應到 CSS 裡設定顯示或不顯示下半部關於 upload path 的設定. 而這個 class 的改變, 則是有一個用 JavaScript 寫成的 event lister 在監聽那個 link 的 mousedown 事件. 在 template 裡呼叫的 JavaScript function 叫 toogleActive, 沒有嵌在模板裡, 而是放在整個 MT 的 JavaScript library 檔中: mt-static/mt.js:

toogleActive.PNG

後來我發現, 其實我不用動這個 JavaScript function, 只要把那個 div 的預設 property 改成 active 就好了. 這個 toggleActive 其實只是交替把 active 這個 class name 加上去或拿掉而已.

***

解決了這個問題後, 我又想動另一個問題: MT 在每次 upload 檔案完成後會幫你產生 html, 讓你可以把顯示圖片用的 html 直接貼到編輯的文章中. 但是很不方便的是, 它產生的 html 是放在一個 text area 中, 我得先用 mouse 把它選起來, 再按 ctrl-C 或是用右鍵功能表把它 copy 到剪貼簿.

upload_1.PNG

我查了一下 text area 這個物件在 JavaScript 裡有什麼 property 或是 method 可以用, 這是以前在寫 VB 時的習慣. 因為有時候在 OOP 的程式語言中, 物件的用法跟我原來想像的可能會差很多. 比如說我很期望 text area 這個物件會有一個 method 叫 copyToClipboard, 這樣我就可以用 getElementById('textareaname').copyToClipboard() 這樣的方法把它的內容丟到剪貼簿裡.

不過事與願違, 沒有這個 method. 跟剪貼簿有關的物件掛在 windows 物件下, 我得用 window.clipboardData 這個物件, 它有一個 method 叫 setData, 可以用來傳入資料到剪貼簿中. 另外我希望在把資料傳進去的同時, text area 裡的文字可以是被選取的狀態, 這樣可以暗示使用者 (其實只有我跟 Guava) 是那些區域被送到剪貼簿去. 我找到了一個叫做 select 的 method, 但是它並不適用在 text area 的物件上, 而是適用在一種叫 textRange 類別的物件上, 而 textRange 則是由像 text area 這種物件呼叫 createTextRange 這個 method 產生的.

之所以要多這一層, 是因為 textRange 物件可以用來改變選取範圍. 到這裡, 所所需要的方法跟物件都有了, 所以我就在檔案上傳完成的 template 裡加上這樣一段 JavaScript, 並且加上一個 "傳送到剪貼簿" 的按鈕, 用 onclick 事件去呼叫它:

code2.PNG

寫完的東西看起來像這樣:

 upload_2.PNG

 就這樣, 完成了一個很方便的功能. 接下來還要做些什麼呢 ? 讓我再想想. 如果各位讀者哪天發現阿爽日記或是我的部落格多了什麼奇怪的, 會飛會跑的東西, 不要懷疑, 一定是我用 JavaScript 在做實驗啦.

***

附記: 我在研究 CSS 跟 JavaScript 時看的書. 現在電腦書能看的實在不多了啊.

  • Web CSS 網頁樣式設計學 [博碩]
  • CSS 您一定會遇到的問題與解答 [上奇]
  • DHTML 網頁設計師手札 [上奇]

最後這本一定要提一下, 這本書翻自 Sitepoint 的 DHTML Utopia: Modern Web Design Using JavaScript & DOM, 是 JavaScript 入門的一本好書. 但是... 被上奇翻譯的很糟不說, 校稿根本沒在校. 全書共十章, 每一章都有三到五處不等的錯字, 而且一看就知道打字的人是打注音輸入法...

December 8, 2006

跑快一點吧, Movable Type

wmem.PNG

不久前有提過, 因為我們家的部落格是架在 Movable Type 上, 而 Movable Type 又是 Perl 寫成的, 所以速度實在是快不到哪裡去. 每次貼完文章在等它重建的時候, 都會無聊到得開另一個視窗上上別的網站才等得下去.

Movable Type 的管理介面嚴格來說做得算相當不錯的, 但是反應速度太慢真的會影響到寫作的意願, Guava 也跟我抱怨過很多次, 說網站的速度慢到她不想寫寶寶日記.

顯然上次把後台資料庫換成 MySQL 這帖藥並沒有奏效, 我得想其它的方法.

我決定先試試把整個 VMWare 上的 Linux 虛擬機器搬到快一點的機器上. 現在用的機器只有 P3 1.1G 就算了, 記憶體只有 768MB, 我只能切 256MB 給 VMWare. 很少看到 Linux 的機器會真的動用到 swap partition 的, 但是這台機器只要 MT 一啟動 rebuild, 就會動到 swap.

老婆的新機器很不錯, 雖然不是 Core 2 Duo 的, 好歹也是 Pentium 4 3G, 最棒的是我那時候很豪氣地幫她裝了 2GB 的 RAM. 這麼大的記憶體, 不拿來跑 VMWare 真是太可惜了. 所以我就把 Linux server 的虛擬機器搬到老婆的新機器上來跑.

用 VMWare 的好處就是, 虛擬機器真的就只是一個很大的檔案, 所謂把機器搬過來, 其實只是 copy 一個很大的檔案過來, 用這台機器的 VMWare 去開它而已, 完全沒有任何其它的設定要改. 我把原來的虛擬機器 shutdown, 把機器的檔案 copy 過來, 再調整虛擬機器的 RAM 為 1GB, 最後把 VMWare 開起來, 總共不到 10 分鐘.

我原本預期這樣做了之後, 整個 MT 的速度應該會飛起來, 結果沒有.

整個 Linux server 的速度是有快那麼一點點啦, 至少 boot 的時間變短了, 但是網站的反應速度一點都沒變快, 而且在 Movable Type 管理後台的反應也差不多.

到底是什麼原因讓我們網站的速度這麼慢呢 ?

***

我突然想到, Movable Type 產生出來的網夜是靜態的 HTML, 也就是說讀者在看阿爽日記的時候, Movable Type 其實是不介入的, Perl 也沒有在執行, 真正在忙碌的只有 Apache 而已. 如果連看網站都跟進 MT 管理後台一樣慢的話, 搞不好人並不是 Perl 殺的, 而元兇可能是 Apache.

我在網路上找各種關於 "Apache performance tuning", "Apache speed up", "Apache response time" 的資訊, 發現大家都有提到一個問題: Linux kernel 的 TCP write buffer. 在 Linux 的 kernal 中有一個 buffer 是用來堆 TCP write 吐出來的資料, 而 kernal 裡的 TCP/IP stack 會從這個 buffer 拿資料去處理. 如果這個 buffer 滿了, Apache 在寫資料的時候就會被 block 住, 一直要等到 kernal 把 buffer 空出來後才能繼續處理 TCP write. 在等待的時候, Apache 吐網頁的動作會被停下來, 而且它會用 polling 的方式等這個 buffer, 不會先做其它事情.

這顯然是一個 pipelined I/O 的老課題, 解法應該是要讓 output buffer 大到足以容納絕大部份的一次性吞吐量. 我再查了一下, 這個 kernal buffer 有 /proc 變數可以改, 所以我下了兩行指令:

echo 262144 > /proc/sys/net/core/wmem_max

          echo 262144 > /proc/sys/net/core/wmem_default


然後再把 httpd service 重新開起來. 進 MT管理後台.

哇塞, MT 的反應速度真的飛起來了, 原來我們家的 FTTB 上傳 2Mbps 的速度有這麼快, 所有的管理畫面在 refresh 的時候幾乎沒有 lag, 讓人懷疑它到底是不是用 Ajax 寫的網頁... 當然不是啦, MT 是百分之百的純 Perl CGI.

這兩個數字的單位是 byte, 意思是 kernal 分配給每一個 socket 的 write buffer. 我隨便選了 256K bytes 這個數字, 我想除了有照片的網頁以外, 256K bytes 應該都夠把一整頁吐完吧.

 

December 5, 2006

好久不見的 VGF-AP1

PICT0261.JPG

前年在 Sony 員購的時候買的, VAIO VGF-AP1. 取這個名字似乎意味著它是由開發 VAIO 小組做出來的, 有別於做 Walkman 的小組. 當時買的瑕疵品屬於 "包裝缺損, 輕微刮傷", 但是拿回來之後我怎麼找都沒找到哪裡有刮傷. 七千五百塊入手, 當時的市價還要一萬五左右, 這也算是以前當 Sony 員工的一點小小福利吧.

因為最近辦公室搬家, 我把桌面重新整理了一下, 就決定把它拿出來用.

PICT0265.JPG

AP1 是硬碟式的 PMP, 不過雖然它有 20GB 的硬碟, 但是只能放音樂跟照片, 沒辦法放影片. 我拿到機器時, 裡面的 firmware 還是舊版的, 只能吃 ATRAC 格式的音樂. 沒多久後, 一度執迷不悟的 Sony 終於向 MP3 低頭, 放出了新版, 支援 MP3 格式的 firmware.

另一個缺點是, 它只能用 Sony 的 SonicStage 這個軟體把音樂丟進去. 雖然它用 USB 連上電腦的時候, 會被認成是一個 USB Mass Storage Class 的裝置, 但是如果直接打開那個磁碟, 會看到一堆跟天書一樣的目錄和檔案, 如果把 MP3 直接丟進去, 就跟丟到垃圾桶裡去一樣, 一點用也沒有.

我已經很習慣 iTunes 整理音樂的方式, 反而對 SonicStage 不是很滿意. 雖然它已經進化到 4.x 版, 使用介面也做了大幅的改進, 但是對 album 的整理及分類仍然沒有 iTunes 做得那麼好, 反應速度也不怎麼樣. 目前還沒有找到好方法可以讓 SonicStage 存取由 iTunes 整理好的 MP3 檔案, 所以只能兩邊各 maintain 一套.

畫面上可以看到中文, 很神對不對 ? 其實那是 Unicode 的功勞. AP1 跟 SonicStage 都是 Unicode-based 的系統, 因此在 Windows XP 下, 中文或日文對它們來講都一樣. 不過 AP1 裡的漢字只包含了日文 JIS 內碼的漢字, 遇到日文沒有的漢字它就沒輒了, 所以有一些常用的中文字像 "黃" 或是 "妮" 它就顯示不出來.

PICT0266.JPG

除了耳機插孔, 整台機器就只有這一個 connector. 要充電, 要接 USB 都要從這裡. 這個插座是跟底座接合用的, 它沒有其它的 cable. 它有 USB OTG 的功能, 可以把數位相機的照片餵給它存起來, 但是... USB type A 的座做在底座上, 也就是說如果要帶它出門當相片碟用的話... 要連底座一起帶. 實在不知道 Sony 在想什麼, 公司會陪錢不是沒有原因的...

PICT0267.JPG

它的操作界面是一個長了 25 顆小豆豆的 touch pad, 每一顆小豆豆下面應該都有一個 metal dome, 有按鍵一般的力回饋. 當手指在上面移動的時候, 畫面上會出現對應的 menu. 這個操作介面的 idea 相當不錯, 有點跟 iPod 的平面滾輪互別苗頭的味道, 但是實際上用起來精確度卻嫌不足.

它似乎是用電容式的非接觸式感應去偵測使用者手指所在的位置, 第一次開機時還需要 calibration. 但即時 照著它的指示做完校正後, 我還是常常遇到手指明明在這個豆豆上, 畫面上卻亮另一個按鍵的毛病.

***

這台 VGF-AP1 已經是好幾年前的產品, 但即使 PMP 這幾年進步很多, 它還是有很多功能現在看起來還不錯的. 不過 VAIO 的小組似乎沒有繼續在這上面著力, Sony 接下來出的 PMP 都是 Walkman 系列的, AP1 這個型號並沒有後繼機種.

總之, 它還算是一台不錯的 PMP, 20G 對我來講應該也要花上蠻長的時間才餵得飽吧.