約莫兩年多前開始,在網路上開始流傳一則笑話,笑話的大意是:有兩位網友剛認識,卻還不熟悉,在透過網路即時通訊軟體聊天的時候,其中一位因為使用微軟新注音輸入法,為了加快聊天速度,所以並沒有正確選字,就直接送出,用語中就出現了許多的性器官名稱,例如「韓劇跟西洋劇都一樣差勁」變成了「含巨根吸陽具一樣插進」,而造成了聊天的誤解。為什麼會造成這樣的誤解呢?就這篇笑話中表現的態度來看-那自然是微軟新注音輸入法的錯了。
而根據 Engadget 最近這篇文章:〈癮軟體:新酷音變更聰明了喔-新酷音共享詞庫080428更新〉,又提到了這個笑話,而且以這個笑話,直稱微軟新注音是一套「色情輸入法」。文中這麼說:「不用再擔心看到「肛潤睪丸」或「含巨根吸陽具都一樣插進」了Orz,好高興可以脫離色情輸入法的魔掌。 」
這就讓人相當好奇-用微軟新注音打字的正確率(或錯誤率)到底有多糟糕?
閱讀〈「含巨根吸陽具一樣插進」〉全文
(續前篇)Windows 系統中,關於系統音效檔案位置的相關資訊,是寫在 Registry 中,不過,如果是照著前篇實作,應該(會像我一樣)很快就會發現一個問題:在 Windows Vista 裡頭,這段資訊的寫法,與 Windows XP 不太一樣:Windows XP 寫在 MediaPath 這個字串值裡頭,Windows Vista 則是寫在 MediaPathUnexpanded 裡頭。
所以,要抓取 Windows Vista 的系統音效目錄,要用下面這段 code:
RegistryKey registryKey = Registry.LocalMachine;
registryKey = registryKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion", false);
string MediaPathUnexpanded = registryKey.GetValue("MediaPathUnexpanded").ToString();
m_mediaPath = Environment.ExpandEnvironmentVariables(MediaPathUnexpanded);
另外,就是要判斷現在到底是在 Windows Vista 上,還是 XP 上:
public static bool IsVistaOrLater
{
get
{
return Environment.OSVersion.Platform ==
PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 6;
}
}
public static bool IsXp
{
get
{
return Environment.OSVersion.Platform ==
PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 5;
}
}
在 Windows 作業系統中,會將一些預設的系統音效檔案,裝在 Windows 安裝目錄下的 Media 目錄裡頭—比方說,如果你將 WIndows XP 裝在C:\Windows 目錄下,那麼,就是 C:\Windows\media 這個目錄。如果您想要使用一些系統內建的音效檔案,除了 System.Media.SystemSounds 之外,大概就得往這個目錄找。
然而這個目錄不一定會是在同一個位置,因為 WIndows 系統很有可能安裝在其他的地方,System.Environment.SpecialFolder 所提供的幾個提供特殊目錄的路徑 Class Method 中,又剛好沒有提供 Media 這個目錄的路徑位置。
在 .Net Framework 中,想要知道這個路徑究竟該是哪個位置,就只能夠往 registry 動腦筋,至少我們可以從 registry 設定中,找到這筆資料。如果要透過 C# 實做,首先我們要引入 Microsoft.Win32 這個 name space:
using Microsoft.Win32;
然後使用 RegistryKey 這個類別,讀取 registry。
RegistryKey registryKey = Registry.LocalMachine;
registryKey = registryKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion", false);
string m_mediaPath = registryKey.GetValue("MediaPath").ToString();
最後就可以取得音效檔案的列表了。
DirectoryInfo dirInfo = new DirectoryInfo(m_mediaPath);
FileInfo[] fileInfo = dirInfo.GetFiles("*.wav");

CocoaKuler 是一個讓您可以在眾多 Mac OS X 軟體中取用 Kuler 色票的小程式。原本兩三週之前就計畫發佈了,不過又因為其他的事情,耽擱了一陣子。
閱讀〈CocoaKuler 1.0 Beta 1〉全文
從 10.5 Leopard 開始,Mac OS X 開始支援 Objective-C 2.0 語言,其中一項賣點就是支援一套 Garbage Collection 系統。於是,以後寫 Obj-C 程式的時候,就不用注意每一個產生的物件到底是會 autorelease 還是要自己 release,不用注意是不是有哪些物件忘記 release,從此寫程式不用顧及記憶體的問題,世界從此又變得更為光明美好…
才怪。
這兩天的測試結果,大概發現了幾件事情:首先,雖然 Leopard 支援 GC,但是系統中大部份的應用程式,還是透過非 GC 的方式寫出來的,但是,就是有軟體是用 GC 狀態下寫的,例如 Xcode 3,在這類的軟體中,就會出現這樣的問題:在 Leopard 上面編成了使用 GC 的應用程式,也只能夠載入透過 10.5 SDK 編譯出來的各種 plugin,而如果 plugin 裡頭又用到了非 GC 的 Class,那麼,這個 plugin,就足以造成應用程式 crash…。
就拿 Xcode 3 來說好了。基本上,Xcode 3 也不能夠載入多少 plugin,但是我偏偏寫了一個可以讓 Xcode 3 載入的 plugin,就是前面說到的 ColorBy.ColorPicker 這個 Color Picker;而一般來說,寫程式好像也不太需要一天到晚挑顏色,但是我這個 Color Picker 就好死不死,就是打算寫給 Xcode 用的。而如果你妄想著這一個 Color Picker 還可以在 Tiger 上與 Leopard 上都可以使用,所以用 10.4u SDK 編,你可以在所有其他應用程式中看到你的 Color Picker,但,很抱歉,就是不會出現在 Xcode 3 裡頭。
至於在 Leopard 上面,可能在程式裡頭,用到什麼哪些沒有支援 GC 的東西呢?至少 IKImageFlowView 就不支援;換言之,如果你想要在 Color Picker 上面做出 Color Flow 效果,就等著在某些應用程式裡頭爆炸。而 Apple 官方也只有在 Finder 與 iTunes 裡頭用到 Cover Flow,也就是,官方也還只有在 Carbon 程式裡頭用 Cover Flow 啊…。
(順道一提。想來,Color Picker 也應該能夠拿來做一些有趣的壞事,在整個作業系統中,可以在所有應用程式裡頭都用到的東西,除了輸入法之外,就是 ColorPicker。)

下載 0.1 版:http://zonble.googlecode.com/files/colorBy.colorPicker.0.1.zip
.colorPicker 是副檔名,不過,軟體的全名就叫做 colorBy.colorPicker,意義是:「從 colorPicker 產生 color」。簡單講,這是一個給 Cocoa Developer 用的 Color Picker,幫你把你選到的顏色,轉換成 NSColor 程式碼。下載解壓之後,將 colorBy.colorPicker 放到自己目錄下的 ~/Library/ColorPickers 目錄,或是 /Library/ColorPickers 目錄;之後,只要在任何 Cocoa 軟體中,打開 Color Picker,就可以看到多出一個分頁。點選分頁即可使用。目前只有在 Leopard 上面試過,照理說 Tiger 也能用。
閱讀〈colorBy.colorPicker〉全文