Archives
接二連三的編碼錯亂
wordpress.com 編碼亂掉後, 緊接著發現由 feedburner 所讀取的 feed xml 內容也會變成亂碼, 而 copyblog.pl 也因為 utf-8 亂掉而會造成 XML parsing 的問題. wordpress.com 的文章既然回復不了, 就從 blogger.com 把文章 import 進來, 只是變成多了一堆重複的文章出現. 還要找時間把編碼有問題亂掉的砍掉, 但是 category 部分因為是 import 的而都是變成 talk. feed 編碼沒問題後, copyblog.pl 也沒問題了.
iBook and 19 inch WXGA LCD
敗(buy)了一台 19″ WXGA 螢幕接上 iBook,果然 Mac OS X 配上寬螢幕才是王道。不過只能用 Mirror 或是 Dual Display 方式,沒辦法外接時就把 iBook 內建的 LCD 關閉。而且如此一來在設定時螢幕擺放的位子跟 expose 效果有差別。
預設 expose 顯示桌面時,會把視窗往螢幕四個方向移動移出螢幕顯示出桌面,並且有相當平滑的動畫。當設定螢幕位子是 WXGA LCD 在左,iBook LCD 在右的 dual display 方式,雖然 menu bar 和視窗都是在 WXGA display 上,expose desktop 視窗動作幾乎一律會往左邊跑,因為右邊是延伸區域。若是擺回 iBook LCD 在左,WXGA LCD 在右,則動畫上視窗移動大都會往右邊跑,除了非常接近左邊或是有跨到 dual display 中線的視窗之外。使用上來說沒有差別,純粹只是效果上的問題,以及理論上 WindowServer 移動視窗的距離遠一點,多消耗一點 CPU 和 GPU resources 應該感覺不太出來。
另外一個是對於 hot corner 跑不出來的問題,設了 dual display,若是 WXGA LCD 在左和 iBook LCD 在右的順序,menu bar 在 WXGA LCD 上,則 menu bar 右上方的 hot corner 會失效,可是右下方的 hot corner 卻可以用。而反過來是 iBook LCD 在左和 WXGA LCD 在右的順序,一樣 menubar 在 WXGA LCD,卻會變成 menubar 左上方的 hot corner 失效,左下方一樣正常。
Uncyclopedia 偽基百科
Uncyclopedia(正體中文:偽基百科), 真是服了它. 不過內容蠻有趣的.其中
維基百科是一個抄襲偽基百科架構的可惡網站,一樣採用wiki架構,一樣堅持所有人都可以編輯,唯一不同的是,維基百科堅持不有趣路線,所以比較多好人都去那邊了。
哈哈哈
x86 Virtual PC
根據這篇 MSDN blog 的文章Optimization levels under Virtual PC, Virtual PC 預設是 User Mode (ring 3) 的 code 就直接以 CPU 來執行, 因此不需要指令集的模擬. 但是 kernel & driver 部分(ring 0)還是需要透過模擬. 而 User and kernel mode optimizations, 則是都透過虛擬化技巧完全由 CPU 執行. 因此在 Virtual PC for x86 上, 不管是前者或後者, 執行的速度都會比 PowerPC 快的原因, 畢竟 PowerPC 不能直接執行 x86 CISC 還是得透過模擬. 期待 native Virtual PC for Mac 在 Intel Core Duo 機器上, 執行速度也因為這個 migration 而加速許多.
但是 Virtual PC 慢的原因還有 Video 部分的原因, 畢竟用透過軟體模擬的畫面比不是直接硬體 IO, 況且模擬的顯示卡只有 S3 Trio. 因此經驗上在 x86 上裝 Virtual PC 跑 console linux, 用 gcc compile 跟 native OS 幾乎是 1:1 的速度, 而只要一跑 GUI, 而且是 32bit 模式, 畫面速度就會直直落.
99 元的 BT Dongle
Yahoo 拍賣上買的另外一隻新的 USB BT Adaptor,準備是給 windows 使用的,不過順便拿到 Mac OS X 上看看能不能使用。其實 Mac OS X 可以使用,但是不支援 Headset,可以連結到我的 SonyEricsson Z520i 沒問題。先前買給 iBook 用的是 SMC BT-10,這隻就可以使用 Headset。於是找一下差異在哪。99 元這隻的 USB BT Adaptor 是使用 SiliconWave 的晶片,SMC BT-10 是 Cambridge Silicon Radio 的晶片。把手機的 Headset 連線到電腦時,會看到 console 的 dmesg 有這些訊息:
[IOBluetoothSCOAudioDevice][start] 0×23d4c80 (IOService) [IOBluetoothSCOAudioDevice][initHardware] 0×23d4c80 [IOBluetoothSCOAudioDevice][createAudioEngine] [IOBluetoothSCOAudioEngine][init] [IOBluetoothSCOAudioEngine][initHardware] 0×1b41400 [IOBluetoothSCOAudioEngine][pauseAudioEngine] - numActiveClients = 0 - state = 0 - pendingPowerState = 1 [IOBluetoothSCOAudioEngine][createAudioStreams] sampleBuffer = 0xdd0c000 (0×3c00 bytes) [IOBluetoothSCOAudioEngine][initHardware] - done. [IOBluetoothSCOAudioEngine][init] [IOBluetoothSCOAudioEngine][initHardware] 0×1b41400 [IOBluetoothSCOAudioEngine][pauseAudioEngine] - numActiveClients = 0 - state = 0 - pendingPowerState = 1 [IOBluetoothSCOAudioEngine][createAudioStreams] sampleBuffer = 0xdd10000 (0×3c00 bytes) [IOBluetoothSCOAudioEngine][initHardware] - done. [IOBluetoothSCOAudioDevice][registerForDeviceNotification]
接著使用內建的 Bluetooth Explorer 把 Local Bluetooth Device Information 叫出來,Extended SCO 和 Transparent SCO 這兩個 Supported Hardware Features 都是黑色的字體。而 SiliconWave 的晶片,這兩個 Features 則都是灰色的,表示不支援。不過至於在 Windows 上是如何支援 headset,就不得而知。
Windows on Mac
完全符合自己預期的破解方式, 利用模擬的 BIOS 來載入 NT. 只是沒想到一點, 原來 Bochs 模擬器的 BIOS 和 VGA BIOS 就可以拿來改, 不需要自己寫模擬 real mode interrupts. Modern OS 都是 protected mode, 不論系統是 BIOS or EFI, OS 都是靠自己的 drivers 去驅動和使用硬體, 因此只要 OS kernel 和 drivers 能夠起來, BIOS 和 EFI 就都已經是過往雲煙. 除非是 windows 95/98/ME, 他的 dos box 還是真的 dos mode, 是利用 virtual 86 模式去跑, 故系統中還是會用到原本 real mode 的 bios interrupt services. 而 2000/XP/Vista 等等核心, console box 真的就是 console 而已, 不是 dos, 而 BIOS/EFI 大概只會在設定系統參數和作 boot loader 才使用吧. 另外比較奇怪的是 NT 開機的方式, 一定會在 C 的 primay partition 裝 NTLDR, 不論系統是裝在非 C 的其他空間, 還是會在 C 裝必要的東西, 而且還要透過傳統 MBR 的 bootloader 才能開機. 因此還得透過模擬 BIOS 去載入 MBR, MBR 去載入 NTLDR, NTLDR 才又從 real mode interrupt 去載入 kernel & drivers. 如果完全不用這個程序, 把 NTLDR 和相關 drivers (2000/XP 經由 Safe mode 可以看到 windows 載入哪些必要檔案後才進入啟動程序)直接就放在記憶體中開始執行, 應該就不用去模擬 BIOS, boot loader, 和 MBR 之後的 real mode 開機過程.
忙裡偷閒 (*24 雷*)
之前趁放假把 iTerm 的 patch 更新到 0.8.2,不過非常不幸的,原來 iTerm 網頁上的 source code tarball 沒有更新,還是舊的。忙了半天,結果等於白忙一場。這幾天趁有空把 iTerm 直接從 SourceForge 的 CVS server 直接 check out 出來改。陸陸續續把幾個需要 patch 的地方趁有空就補一下,目前應該沒有什麼問題吧,花點時間再試用看看。而且 iTerm 把一些 VT100Screen 的 data structure 做些小變動,還花了點時間在調整些微的 code。不過發現 XCode 還是在 2.1,之前抓的 XCode 2.2 沒有更新,現在還是要在重抓一次再來編譯 iTerm。
不過 Mac OS X 上的 FileMerge 算不錯用的工具,拿來比對 source code 和 merge 蠻方便的。這個工具算是從 NeXT 時代就有了,現在繼續沿用到 Mac OS X。當然在 Linux 上也有類似的東西,像是 meld,不過缺點就是要裝 python 和 gnome。Windows 上也有類似的東西,當然就是軟體與 $$ 的關係而已。
當然不可避免的,每個禮拜二就是該看 24 的時間。這禮拜一次播出兩集,本來蠻興奮的,至少少一次苦苦等待的感覺。不過看完之後卻是大大的落寞感,因為 CTU 被 comproised,Nerve gas 釋放到整棟大樓,除了幾個重要的人外,應該整個 CTU 都掛光了。這個都是討人厭的哈比人 Lynn 造成的,除了那一次在機場意外發現 Jack 的暗號用語外,其他時間都在拖油瓶。6:00pm~7:00pm 結尾就是 nerve gas 造成的大屠殺,最後連 Edgar 都來不及進入 sealed room,和 Chole 隔著玻璃對看,接著就倒下掛了,最後還給他來個 Slient Clock 紀念一下。畢竟 Edgar 也是大家看蠻久的角色,也是很重要的一員,竟然很出乎意料且遺憾地在這個時間點走了。
不過還是有點小 bugs,Nerve gas 是在約 6:43:09pm 的 clock tick 之後,搬上去通風口才被設定啟動,倒數 15 分鐘,不過到後來約 6:57:32pm 就散發出去了,有點太早的樣子。再來大家擠在完全 sealed room,毒氣進不來是沒錯,但是不少人擠在裡面會不會缺氧掛點。
ps: Wordpress.com Invitation 新增一枚,意者請 mail 。
Object-Oriented Programming
我是在寫 OO 嗎?我覺得不是。如果說只是把中文辭彙換成英文,文法還是中式,你會說我在講英文嗎?寫過 MFC 或是 Cocoa 的人都可以發現,MFC 使用的是 Document/View 架構,Cocoa 是 MVC(Model-View-Controller) 的架構。舉 Safai 為例,Safari 做的是 Controller 角色,負責視窗和各種按鈕間的動作,WebKit 做的是 Document (WebDocument) 和 View (WebHTMLView) 的工作,如此組合出一個完美組合的軟體,甚至在 Safari 裡面可以有各種的 Plugin,像是 QuickTime, MediaPlayer, Acrobat PDF Reader 等等。當 user 按下 Go back 按鈕,Safari 送出 message call 給 WebView 的 goBack 後,WebView 再由他內部的 backForwardList 去得到 backItem,再由 goToItem 去回到前一頁。應該不會有人覺得一件簡單的事情,怎麼要用到那麼多層的 class?(Safari -> WebView -> WebBackForwardList),怎麼不在 Safari 這邊解決掉就好了。反正 Safari 叫 WebView 到網址就載入那個網頁和 render 出來,WebView 只要負責畫網頁不就好了?如果像這樣子,class 之間的分工清楚,各司其職,才叫做 OO 的話,那不就變成每個要用 WebKit 做 Web Browser 的都要自己寫 BackForwardList?或許在非 GUI 的領域可能可以如此,但是在 GUI 裡面,我看到的不是 Document/View 就是 MVC。如果一件事情分三個人做,叫做累贅,那把他們合在一起好了。假使今天有人叫做 Adium 要用 WebView 來呈現 RichText 訊息,那大家看到的大概會是對話框裡面有個 Safari 而不是漂亮的 Conversation format。而且 WebKit 的 Reusability 應該等於 0,因為沒辦法直接用 WebKit 來變成 customized widget。而這樣的 OO 等於是廢物。
工作上,或許來說充其量,只不過是用 C++ 寫些很像物件的東西,使用一些包成物件的東西。但是對我來說,感覺就是根本不是 OOP。我只覺得我在寫 C。
MS 設計 iPod 包裝
如果由 Microsoft 來設計 iPod 的包裝外觀的話,可能就會如同 這個影片:microsoft ipod packaging parod 所呈現的,充分展現出 MS 風格的包裝外觀和主義。
Safari2PNG
寫了一個 Safari 的 InputManager,用來把 Safari 的網頁直接存成圖檔。這個功能應該有類似的程式做過,像是 webkit2png.py、Paparazzi,不過這些都只能直接從指定的網址抓下來;SnapWeb 這個軟體則比較界面化的 WebKit,而且雖然可以在裡面操作然後抓圖,但是遇到較大的網頁可能會錯誤,或是剛好在 Safari 遇到的就無法立即使用,而且需要註冊。比較想做的是瀏覽時候,可能在某些需要登入或是 form POST 結果的網頁中把圖抓下來。因此最好在選單中有個選項可以使用,然後把正在觀看的網頁抓下來。
目前初步的結果已經有了,但是遇到不少問題,也解決了不少,剩下某些問題待解。抓下來的網頁內容圖片就像這樣子。
KDE on MacOSX
KDE Qt/Mac 是利用 Qt/Mac 的版本,讓 KDE 能夠在 Mac OS X 使用 Aqua 的界面執行。雖然 fink 已經有 KDE,不過我想他是透過 KDE for X11 和 Qt/X11 來執行。但是有個問題還是存在,就是 Qt/Mac 對於中文輸入支援上還有問題,所以 KDE Qt/X11 和 KDE Qt/Mac 用起來的感覺應該差不多吧,只差在 widget 不一樣。
GTalk in GMail
GMail 已經整合了 GTalk,除了可以把 GTalk 的對話內容存到 GMail 裡面,方便儲存和尋找外,還可以在 GMail 裡面直接跟對方傳訊息。平常大都會用的是 Safari 或是 Opera, 可惜這兩者進到 GMail 裡面並不會有這樣的功能,雖然一開始用 Safari 在 GMail login 畫面有提到,可是進到裡面,還是跟傳統上沒什麼太大差別。直到在公司使用電腦,利用 Firefox 來讀 GMail 的信,才發現 GTalk 被整合進來了,而且進到 GMail 就會讓自己的 GTalk 帳號上線,並且可以與 contact 用戶直接傳訊。而且蠻簡單、方便的,把網頁瀏覽在 GMail 的地方,就能有打字、訊息過程的小格子,比起 MSN Messenger 真是簡樸多了,其實溝通時的功能也就是這樣而已。只是因為他是擺在 GMail 中,不像 MSN Messenger 收到訊息通知可以跳出視窗,可能使用上有些缺點。而簡單的說這也是一種 Web 版本的 GTalk 吧。圖中的是 Mac OS X 下的三種瀏覽器畫面,只有 Firefox 能順利使用。
富x邦金控網站被植入Rootkit !!
http://x-solve.com 上面的文章 公告(2006-0214):富x邦金控網站被植入Rootkit !! 還是沒事不要用 IE 到處亂逛比較好.
好漂亮的數據
台鐵春節疏運的列車到站準點率是 94%,看到真是夠吐血,從來坐台鐵的火車大多數都沒有準點過,即使是非人潮擁擠時刻,而且大多數坐車時候誤點都是 10 分鐘以上。唯一準點的班次,就是從台北那幾站搭的列車,因為離發車地點近當然不太會誤點。再者車票上打的乘車時間是開車時間,所以應該是從台鐵網頁上的時刻表上到站時間作為基準,才算準點。但是即使是最佳狀況下,往往大都還是開車時間後才進站。而且列車的優先是自強>莒光>復興>…,在某些車站或區段時會有同向超車,讓經過該段的車次,時間相近且優先權高的列車先過。因此只要自強一誤點,後面的誤點只會更嚴重不會沒事。台鐵這種很漂亮的 94% 準點率不知道是怎麼得來的。
Themes from Wordpress.com
Wordpress.com 的限制就是沒辦法讓使用者自行使用 themes,非得從他所提供的那些 themes 上去選擇。今天又看了一下,多了幾個新的 themes,套用看看試了幾個,不過喜歡的樣式那個卻沒有 search 功能 =_=#。有些在 preview 上有 calendar 的,真正弄上去卻沒有,可能有些 plugin 也是無法由使用者自行安裝使用的。
JavaScript speed
JavaScript Speed Test 上測得的各家瀏覽器 JavaScript 效能。iBook 1.2GHz,Opera 8: 9.14sec, Safari: 10.85sec,Opera 9: 13.82sec, Firefox 1.5.1: 22.13sec。雖然是 JavaScript 的 benchmark,但是其中包含有 browser window 的產生、關閉、DOM 物件的建立、移動等等。