在 Mac OS X/iOS 上指定中文排序

前一陣子遇到一個需求:我們現在有一個 array,裡頭是一堆中文字串,現在我們想要讓這些中文字串按照一些個定的中文索引方式排序,像是使用筆劃、拼音…等等。搞了半天,發現只要在 compare 的時候,選擇特定的 NSLocale 就好了,但是蘋果自己的文件中,居然對於有這些 Locale 可以設沒什麼著墨,顯然很多時候光看蘋果的文件是不夠的。

我們先來看段使用筆畫排序的程式碼:

NSArray *a = @[
	@"落魄江湖載酒行",
	@"楚腰纖細掌中輕",
	@"十年一覺揚州夢",
	@"贏得青樓薄倖名"];
NSLocale *strokeSortingLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh@collation=stroke"];
a = [a sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
	return [obj1 compare:obj2 options:0 range:NSMakeRange(0, [obj1 length]) locale:strokeSortingLocale];
}];
for (NSString *s in a) {
	NSLog(@"%@", s);
}

Continue reading

有人問我什麼是 Scrum

Scrum 並不能夠幫助你寫出更好的程式碼,也不能夠保證你發想的軟體產品可以在市場上獲得成功,基本上在任何處理跟人有關的議題時,任何方法都不能夠保證可以收到什麼功效。而 Scrum 在軟體開發過程中可以提供的幫助是,如果你的團隊真的懂怎麼寫程式的話,起碼可以讓他們有多一些時間可以把程式寫出來。

如果要給 Scrum 這個字一個簡短的解釋,那就是「Stop Crazy, Restless but Unnecessary Meetings」,少開會沒事,沒事少開會。如果我們想要了解一把槌子,我們首先要了解的是這把槌子要拿來搥的是怎樣的釘子,如果我們想要了解一門方法,首要工作就是這門方法打算解決怎樣的問題。Scrum 所要解決的問題就是:在上班時間中,太多的會議造成工程師最後沒辦法把程式寫出來。

Continue reading

Mac OS X Lion 的 Sandbox 模式與輸入法

這篇文字想來對絕大多數人都沒什麼用處,不過就是自己留一篇筆記。

把工作機升級到 Mac OS X Lion 之後,在一些應用程式當中,例如系統內建的文字編輯工具(TextEdit.app)以及預覽程式(Preview)中,就遇到無法使用輸入法的問題—點選輸入法選單,我要用的輸入法選項就是灰色的,無法選用。說起來奇怪,應該不是輸入法程式本身有什麼問題,因為在其他應用程式中可以正常使用,而且之前在測試 Beta 版本的 Lion 時,也沒有遇到這個問題,用搜尋引擎找個一輪,也沒有看到其他人遇到這種狀況。

Continue reading

那些讓人皺眉的 REST API

這年頭無論是在桌面或行動環境裡頭做些 Native 的應用程式,都免不了要橋接一些 Web Service 的 API。做個生產力工具嘛,也需要把檔案儲存在雲端裡頭,甚至直接透過網路同步,做個遊戲嘛,也需要把分數上傳到 Facebook 還是 Twitter 上面,美其名叫做分享,比較貼切的說法該是炫耀。

這幾年工作下來,也陸陸續續遇到一些 API,有的是開放的,有的是文件上面就打上個「極機密」字樣。不管是哪種,其中不少,實在讓人不禁眉頭一皺。

Continue reading

Mainnav 的單車碼表,還有 Mac

我買了一組 Mainnav 的 MG600 這款 GPS 單車碼表,可是 Mainnav 並沒有提供 Mac OS X 版本的軟體,可以透過 USB 讀取 GPS 碼表裡頭的資料,Mac 使用者在台灣難免要自力救濟,所以趁著過年這段不必被專案追殺的時間,寫了一套軟體自己用。

MNX

剛好學弟問到這個東西,在這邊簡單寫一下。

Continue reading

在桌面應用程式中使用 WebKit (5) - Mobile Safari 的 Plug-in

這一篇的內容對很多人來說大概沒什麼用,因為就算照著這篇提到的東西,寫了點程式出來,實際上也沒多少機會可以在使用者的裝置上應用,可是呢,只要討論 Cocoa,好像大部分人都興趣缺缺,談到 iPhone 卻又興致盎然。

※ iOS 的 WebKit Plug-in 基本上是一樣的

前一篇提到,我們可以直接在 Xcode 當中,透過 Xcode 本身所提供的專案範本,產生 WebKit Plug-In 專案,我們現在來做點好玩的事情。-我們把原本專案裡頭所有跟 Cocoa 相關的東西都拿掉,像是 Import Cocoa Framework 的地方,改成 Import UIKit,NSView 改成 UIView,NSRect 改成 CGRect,把 Base SDK 從 Mac OS X 改成 iPhone Simulator,在 iPhone 上面沒有定義 WebPlugInViewFactory,我們先拿掉,或是自己定義一個,裡頭只要宣告 + plugInViewWithArguments: 即可。

Continue reading