稍微有點時間,來回覆一下一些朋友之前問到的問題。
一、可否能夠改寫OpenVanilla 通用輸入法表格編輯器—讓使用者在自行編輯輸入法表格的時候,只要先點選某個按鍵組合,然後便可以列出所有符合這個按鍵組合的對應輸出結果。如果某個輸入法的設計是會出現很多候選字(例如注音、拼音等),會需要這樣功能。
最近幾天花了點時間,是寫出了這樣的東西。能夠在選取某一筆資料之後,列出對應的資料,換句話說,就是要建立資料之間的關聯,也就是需要一些資料庫方面的功能;既然需要一些資料庫功能,又適用 Cocoa 開發,在改寫的時候,便使用了蘋果提供的 CodeData 架構,透過CoreData建立了一個簡單的Model,在讀入輸入法表格的時候,將資料轉換成NSManagedObject,一邊輸入一邊檢查:如果某個對應到按鍵組合的物件存在,那就使用這個物件,反之則建立物件,將對應的結果與之建立關聯,在GUI方面,則是用 Cocoa Binding 搞定…。
右圖便是開啟簡易輸入法的表格時的畫面。
雖然是做出來了,但是效能實在很不好,大概算了一下,如果要這麼做,處理一筆資料,大概要花上0.1到0.2秒的時間,而一般的輸入法少說都有一兩萬筆資料,更不要說有七八萬筆資料的輕鬆輸入法了;以兩萬筆來說,那就需要花上至少半小時才能夠載入,在選好要載入的檔案之後,就只能看到奪命小彩球一直轉,整台機器近乎呈現當機狀態。這樣的東西實在不太能夠拿出來見人,而總感覺問題應該出在 CoreData 本身。
蘋果的官方文件裡頭,似乎沒有關於 CoreData 到底可以拿來處理多大的資料的相關說明,或是可以怎樣調整用 CoreData 處理資料的效能,總之,在處理輸入法的資料這件事情上,想想還是別用 CoreData 的好。不過,在做其他事情上,CoreData 實在很方便,看完 Apple Developer Connection 網站上的這段影片範例:Building a Sample Core Data Application,就可以發現,如果想要用 CoreData 做一個像是 MacJournal 這樣的記事本軟體,只要在 Interface Builder 裡頭拉一拉,畫好圖,建立好 Binding,那麼,還真的是幾乎一行 code 都不用寫,就可以有一個簡單而堪用的程式。
在自己試著玩玩看 CoreData 的時候,不知怎麼的,總覺得 CoreData 讓我想到 HyperCard,現在在 Xcode 裡頭建 Model,然後在 Interface Builder 裡頭建立 Interface 與 Model 之間的 Binding,就跟在 HyperCard 裡頭建立一個 Stack 的 Background 一樣。而在 Interface Builder 裡頭把某個按鈕的 action 設定成選取 CoreData 的前一筆或下一筆資料,也與 HyperCard 裡頭翻閱卡片的狀況差不多。所以一時好玩,也隨便先拿 CoreData 玩了一個 HyperCard 裡頭附贈的行事曆與通訊錄的 Clone—怎麼說呢,總覺得,每天都可以看到新的技術,每天都在追逐新的規格,每天都在適應語言的改變,但是怎麼做來做去,從技術單一而且單純的時代,到技術多到一個爆炸的時代,卻總是在做一些相同的事情。
這兩個畫面之間,到底有有什麼實質的差別呢…?
二、在Vanilla Journal中,縮圖放大時是否可以更改,大圖還是有點小,找了許久,還是找不到哪裡可以調整大小?
我後來好像有把大圖的尺寸寫成一個可以調整的選項,但是什麼時候寫的,我也忘了…當然啦,這些改寫的紀錄應該都可以在 svn log 裡頭看到,但是一時懶得看。總之,這兩天我又放了一個 Vanilla Journal 的 tarball,放在 Google code 上,這個版本裡頭是有這個選項的。
但是升級的時候會有什麼問題…我也不清楚…。
再次聲明一次:「zonble出品,自己都沒信心」。
我過兩天會有將近一個月時間不在台灣耶…。
車子就給他開出國好了拉
這樣還可以順便試試看水陸兩用的性能