ASCII Art 產生器(Mac OS X 用)

前兩天心血來潮寫了一個小東西-ASCII Art 產生器(下載)。顧名思義,這個小東西就只有那麼一個功能-把圖片檔案轉換成以文字構成的 ASCII Art。

照理說應該 10.4 以上的麥金塔電腦就可以用(不過我現在手邊沒有安裝 10.4 的機器,所以我只能保證在 10.5 與 10.6 可以用);程式碼都在 Github 上,如果想要自行編譯,您需要安裝 Xcode 3.0 以上版本(不過我現在用的不是 3.0,用的是 3.1.4…反正去找最新的 Xcode 來用就對了。)

WebKit 對於開啟新視窗事件的處理

如果想要在網頁中插入開啟新的瀏覽器視窗的語法,有兩種簡單的作法,一種是直接在連結語法中加入 target="_blank",例如 <a href="http://zonble.net/" target="_blank">,另外一種方法則是呼叫 Javascript 的 window.open() 函式。

而雖然這兩者的目的是開啟新的瀏覽器視窗,但是在當你在寫一個使用了 WebKit 的 Cocoa 應用程式的時候,對於這兩個事件,則需要分別給予不同的實作-在 WebView 物件中觸發前者時,WebView 會去呼叫 Policy DelegatewebView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener: 這個 Method,但是後者-Javascript 的 window.open()-則會跳過 Policy Delegate,直接向 UI Delegate 呼叫 webView:createWebViewWithRequest:

意思就是,在使用者在你的應用程式中的 WebView 中,點選了一個包含 target="_black" 的連結的時候,WebView 首先會詢問你所指定的 Delegate Object,然後你可以根據狀況判斷,而做出對應的處理-應該開新視窗、開新的瀏覽器分頁(如果你寫的是一套具備分頁功能的瀏覽器應用程式)、或是使用系統預設的瀏覽器開啟。

但是遇到 window.open() 則不然,這個狀況是-事件發生的 WebView 已經決定要因此產生新的 WebView 物件,你需要在 webView:createWebViewWithRequest: 的實作中,回傳一個 WebView 物件,而這個 WebView 物件就會開始載入 window.open() 所傳入的、那個要開啟的 URL。而我們會在這個地方遇到一個問題-基本上我覺得應該算是蘋果的 Bug-在 webView:createWebViewWithRequest: method 中所傳入的那個 NSURLRequest 物件,居然是 NULL!

繼續閱讀

Leopard 的 Garbage Collection

從 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。)

colorBy.colorPicker

colorBy.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 也能用。

繼續閱讀

CoverFlow + DigGirl

自從找出了 CoverFlow 效果的這個 Class – IKImageFlowView,就開始到處試著用用看;而如果用 CoverFlow 瀏覽 DigGirl 透過 RSS 發佈出來的資料,就會像下面這個樣子:

DigGirl Cover Flow

在圖上面點兩下,會開啟相簿的網頁。而 DigGirl 的 RSS 裡頭只有提供縮圖,在 CoverFlow 裡頭看的時候,效果似乎也不是那麼理想啊…。

下載(僅供 Mac OS X 10.5 使用)

Update:

0.2 版,使用高解析度的圖片顯示。