<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zonble’s promptbook</title>
	<atom:link href="http://zonble.net/feed" rel="self" type="application/rss+xml" />
	<link>http://zonble.net</link>
	<description>所有的悲劇一開始都叫做 Work Around</description>
	<lastBuildDate>Sun, 28 Oct 2012 17:52:23 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>在 Mac OS X/iOS 上指定中文排序</title>
		<link>http://zonble.net/archives/2012_10/1504.php</link>
		<comments>http://zonble.net/archives/2012_10/1504.php#comments</comments>
		<pubDate>Sun, 28 Oct 2012 17:52:23 +0000</pubDate>
		<dc:creator>zonble</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[我的電腦]]></category>

		<guid isPermaLink="false">http://zonble.net/?p=1504</guid>
		<description><![CDATA[前一陣子遇到一個需求：我們現在有一個 array，裡頭是一堆中文字串，現在我們想要讓這些中文字串按照一些個定的 [...]]]></description>
				<content:encoded><![CDATA[<p>前一陣子遇到一個需求：我們現在有一個 array，裡頭是一堆中文字串，現在我們想要讓這些中文字串按照一些個定的中文索引方式排序，像是使用筆劃、拼音…等等。搞了半天，發現只要在 compare 的時候，選擇特定的 NSLocale 就好了，但是蘋果自己的文件中，居然對於有這些 Locale 可以設沒什麼著墨，顯然很多時候光看蘋果的文件是不夠的。</p>
<p>我們先來看段使用筆畫排序的程式碼：</p>
<pre class="brush: objc; title: ; notranslate">
NSArray *a = @[
	@&quot;落魄江湖載酒行&quot;,
	@&quot;楚腰纖細掌中輕&quot;,
	@&quot;十年一覺揚州夢&quot;,
	@&quot;贏得青樓薄倖名&quot;];
NSLocale *strokeSortingLocale = [[NSLocale alloc] initWithLocaleIdentifier:@&quot;zh@collation=stroke&quot;];
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(@&quot;%@&quot;, s);
}
</pre>
<p><span id="more-1504"></span></p>
<p>在 Mac OS X/iOS 中，所有與各種不同國家、語言中使用的不同曆法、日期格式、數字格式相關的資訊，也就是 NSDateFormatter、NSNumberFormatter、NSLocale 這些 class 底下，其實呼叫的是 IBM 的 OpenSource 專案 <a href="http://site.icu-project.org">ICU</a>，所以呢，ICU 支援哪些 <a href="http://userguide.icu-project.org/locale">Locale</a>，NSLocale 裡頭就可以使用哪些 Locale。</p>
<p>在 ICU 的 Locale 中，我們需要注意的，就是可以在語系（像是 zh）與地區（像是 TW）之後，還可以繼續加上 keyword，keyword 可以是曆法、排序方式、貨幣與數字格式，於是指定以筆畫順序排序的中文語系，就會寫成 zh@collation=stroke。ICU 還支援拼音（pinyin）、Big5 編碼順序（big5han）、GB2312 編碼順序（gb2312）以及部首筆畫順序（unihan）。</p>
<p>由於系統裡頭已經有了一份 ICU library，我們也可以直接呼叫 ICU 的 C 或是 C++ API，做我們在上面做的這件事情。但是在 Mac OS X/iOS 上面想要使用系統內建的 ICU library 還頂麻煩，雖然我們可以讓 linker 直接去連結 libicucore.dylib，但是系統裡頭卻沒有放 ICU 的 header，所以還是要去下載一份 ICU 把 header 挖出來用，另外還要設一些 compiler 參數（詳情可以參考 Lukhnos 去年的這篇 <em><a href="http://blog.lukhnos.org/post/6441462604/using-os-xs-built-in-icu-library-in-your-own-project">Using OS X’s Built-in ICU Library in Your Own Project</a></em>），或，我還有一小段<a href="https://github.com/zonble/NSString-CustomCompare/blob/master/NSString%2BCustomCompare/NSString%2BCustomCompare.mm">程式</a>，大概示範了怎樣使用 ICU 的 C 與 C++ API 排序。但，既然這麼麻煩，我們還是直接呼叫 Cocoa Framework，寫 Objective C 就好了。</p>
<p>說到 ICU 就要講一下前幾年遇到的一個慘痛經驗。前幾年參與一個專案，看到蘋果當時在 Objective C 上面時做了 Garbage Collection，就高高興興拿來寫了個 Mac App，結果呢，蘋果做出來的 GC 真是一踏糊塗，在打開了 ObjC GC 的狀況下，如果不是在 main thread 呼叫架構在 ICU 上的 Foundation Class，像是前面提到的 NSLocale、NSDateFormatter，記憶體就開始狂洩不止，也難怪蘋果最後放棄了在 run time 做 GC 這條路，選擇了 ARC，在 compile time 幫你加上 retain、release，但 ARC 也有一堆亂七八糟的疑難雜症就是了。</p>
]]></content:encoded>
			<wfw:commentRss>http://zonble.net/archives/2012_10/1504.php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>牛肉麵應該如何稱呼</title>
		<link>http://zonble.net/archives/2012_10/1500.php</link>
		<comments>http://zonble.net/archives/2012_10/1500.php#comments</comments>
		<pubDate>Thu, 04 Oct 2012 16:25:32 +0000</pubDate>
		<dc:creator>zonble</dc:creator>
				<category><![CDATA[無以名狀]]></category>

		<guid isPermaLink="false">http://zonble.net/?p=1500</guid>
		<description><![CDATA[《蘋果日報》刊載了一篇東吳大學曾泰元副教授的投書〈談談滷肉飯的英譯〉，裡頭提到： 事實上，更極端作法就翻成lu [...]]]></description>
				<content:encoded><![CDATA[<p>《蘋果日報》刊載了一篇東吳大學曾泰元副教授的投書<a href="http://www.appledaily.com.tw/appledaily/article/headline/20121004/34551321/">〈談談滷肉飯的英譯〉</a>，裡頭提到：</p>
<blockquote><p>事實上，更極端作法就翻成lu rou fan，這強調文化主體性，這在跨文化的詞彙翻譯裡常見，然而國人自信心不足，總覺得要「道地的英文」才有檔次，因此先天上加以排斥。</p></blockquote>
<p>這種排斥心理表現地最明顯的，我想莫過於在牛肉麵上頭。過去幾年台北市舉辦牛肉麵節，將牛肉麵直接音譯成 New Row Mian，就引來不少笞罰；說，直接寫 New Row Mian，外國人看不懂，想要舉辦一個國際性的活動，怎麼可以弄一個外國人看不懂的名字呢？</p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/P6EMBJX0IlU" frameborder="0" allowfullscreen></iframe></p>
<p>那牛肉麵應該叫什麼呢？牛肉是 Beef，麵是 Noodle，牛肉麵當然應該叫做 Beef Noodle，對吧？</p>
<p><span id="more-1500"></span></p>
<p>但，對於台灣平常店家販賣的牛肉湯麵這種食物，如果以英語世界的腦袋思考，對於主體到底是何物其實有完全不同的認知。對我們來說，牛肉麵是一碗湯麵，但人家的認知卻是，這是一碗麵條湯，講 Beef Noodle 人家會以為是牛肉乾拌麵，要講 Beef Noodle Soup 才是比較精準的翻譯—吃牛肉麵不是吃麵，是吃一碗湯。但，想來我們想要辦一個屬於麵的節慶，而不是湯的祭典。</p>
<p>而就算是 Beef Noodle Soup 也無法表達、讓人直接聯想台灣牛肉麵的特色—大塊切片的燉煮牛肉、紅燒湯汁，同樣的名字也可以是加上大量香茅的越南牛肉河粉，或是其他種類的牛肉麵。</p>
<p>同樣是麵食，日本拉麵的英文就叫做 Ramen，烏龍麵就叫做 Udon，這樣的名稱也沒有什麼不夠國際化的問題，在歐美的日式食堂菜單上就是寫 Ramen 就是寫 Udon，那牛肉麵為什麼就不能音譯？</p>
<p>而將牛肉麵音譯成 New Row Mian，舉辦 New Row Mian Festival 真正的問題在於：台灣到底想要使用哪套拼音系統？而不管是要用那套拼音系統，也都不該拼出這種拼音。而台灣本地的肉牛極其稀少，牛肉完全仰賴進口，就算牛肉麵有多麼普及，牛肉並不是來自台灣的土地，但，政府卻出面把牛肉麵當作是台灣的代表美食。</p>
]]></content:encoded>
			<wfw:commentRss>http://zonble.net/archives/2012_10/1500.php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guest Editor</title>
		<link>http://zonble.net/archives/2012_07/1496.php</link>
		<comments>http://zonble.net/archives/2012_07/1496.php#comments</comments>
		<pubDate>Mon, 23 Jul 2012 16:34:04 +0000</pubDate>
		<dc:creator>zonble</dc:creator>
				<category><![CDATA[無以名狀]]></category>

		<guid isPermaLink="false">http://zonble.net/?p=1496</guid>
		<description><![CDATA[荒廢一陣子沒動筆，難得寫點東西自娛娛人，就遇上莫名其妙的事情。 當然，你身在中華民國，莫名其妙的事情永遠不嫌多 [...]]]></description>
				<content:encoded><![CDATA[<p>荒廢一陣子沒動筆，難得寫點東西自娛娛人，就遇上莫名其妙的事情。</p>
<p><span id="more-1496"></span></p>
<p>當然，你身在中華民國，莫名其妙的事情永遠不嫌多，例如今天《蘋果日報》上面有這麼一則<a href="http://www.appledaily.com.tw/appledaily/article/sports/20120723/34387008">新聞</a>： </p>
<blockquote><p>曾在2010年廣州亞運拿下自由車公路賽金牌的我國女將蕭美玉，這次倫敦奧運取得個人場地、公路賽2項參賽資格，這讓她昨天出發時，必須帶著4輛(2輛公路、2輛場地)總價130萬台幣的賽車，她笑說：「以前比賽時都有機械師幫忙組裝，這次都得自己來了。」</p></blockquote>
<p>我們到底是打算怎樣讓選手參加奧運？</p>
<p>回到正題。前兩天把前一篇文章丟到網路上面之後，就有個網站轉載了那一篇，轉載的時候改動了標題，前面加上了「觀點」這類的字樣，另外找來一張不清楚哪裡弄來的圖片搭配，又加了一段圖說；最後在作者欄的地方，把不才小弟我寫成是這個網站的  Guest Editor。這下非得抗議不可了，對方也道歉了，但對方似乎根本沒有意識到問題到底出在哪裡。</p>
<p>我們來看看 Guest Editor 是什麼意思。首先是 Editor，在中文稱之為編輯，泛指各種將各種原始素材彙整、加工成最終媒體產物的工作，包含選稿、下標到版面設計…等等。要不要將拙作放在網站上也不是我決定的，改動標題、增加圖片，我也完全不知情，所有編輯台上的工作都與我無關，為什麼我會變成這麼個 Editor？</p>
<p>再來是這個 Guest。我所知道的 Guest Editor，大概就是 2006 年 U2 主唱 Bono 在英國報紙 The Independent 擔任了一日主編，編了一期非洲愛滋病專刊，但是這種作法在台灣印象中並沒有看過；而從字面來說，Guest 就是被主人邀請、招待的人，而比照像是什麼客座教授、客座講師這類的用法，Guest Editor 所代表的是不在建制之內，勞健保不是掛在這個地方，實際上卻做幫這個機構做了等同原本編輯的工作。而這又是個商業機構，也就暗示了—當這個 Guest Editor 有錢可以拿。</p>
<p>就一個在網路上面隨便寫點東西的人來說，兄弟啊，你們憑空製造了一個寫作的目的。至於就一個手上還有好幾個專案的苦哈哈上班族來說，你們則是羅織了一個不存在的兼差。</p>
<p>我猜想對方的初衷並沒有這麼個意思，但是沒有這個意思卻要用有這個意思的詞彙，我也只能夠理解成對方的文字能力很差；而如果這是個經過整個機構內部討論出的結果，我也就只能夠理解成這個機構上上下下的文字能力都很差。</p>
<p>而如果對方都不了解這麼做對你在職場上面會有什麼傷害，我也就只能理解成這些人都沒有什麼工作經驗，但是如果都沒什麼工作經驗，我也就不能理解他們在網站上，是憑靠什麼分析產業脈動與趨勢了。</p>
<p>以上。</p>
]]></content:encoded>
			<wfw:commentRss>http://zonble.net/archives/2012_07/1496.php/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>有人問我什麼是 Scrum</title>
		<link>http://zonble.net/archives/2012_07/1489.php</link>
		<comments>http://zonble.net/archives/2012_07/1489.php#comments</comments>
		<pubDate>Sat, 21 Jul 2012 04:59:41 +0000</pubDate>
		<dc:creator>zonble</dc:creator>
				<category><![CDATA[我的電腦]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://zonble.net/?p=1489</guid>
		<description><![CDATA[如果要給 Scrum 這個字一個簡短的解釋，那就是「Stop Crazy, Restless but Unnecessary Meetings」，少開會沒事，沒事少開會。如果我們想要了解一把槌子，我們首先要了解的是這把槌子要拿來搥的是怎樣的釘子，如果我們想要了解一門方法，首要工作就是這門方法打算解決怎樣的問題。Scrum 所要解決的問題就是：在上班時間中，太多的會議造成工程師最後沒辦法把程式寫出來。]]></description>
				<content:encoded><![CDATA[<p>Scrum 並不能夠幫助你寫出更好的程式碼，也不能夠保證你發想的軟體產品可以在市場上獲得成功，基本上在任何處理跟人有關的議題時，任何方法都不能夠保證可以收到什麼功效。而 Scrum 在軟體開發過程中可以提供的幫助是，如果你的團隊真的懂怎麼寫程式的話，起碼可以讓他們有多一些時間可以把程式寫出來。</p>
<p>如果要給 Scrum 這個字一個簡短的解釋，那就是「Stop Crazy, Restless but Unnecessary Meetings」，少開會沒事，沒事少開會。如果我們想要了解一把槌子，我們首先要了解的是這把槌子要拿來搥的是怎樣的釘子，如果我們想要了解一門方法，首要工作就是這門方法打算解決怎樣的問題。Scrum 所要解決的問題就是：在上班時間中，太多的會議造成工程師最後沒辦法把程式寫出來。</p>
<p><span id="more-1489"></span></p>
<p>軟體開發團隊的工作，大抵上就是找一群人來，朝著同一個目標各自從自己的體內擠出一些東西來，也就是，工程師這行基本上跟一部顏射 A 片裡頭背景那群汁男優差不多，流…血流汗，最後產品上市你也不會露臉，人家只需要你有用的部位而已。</p>
<p>做這麼一份工作，需要的是一段時間專心，需要時間進入情境，中間若遇到任何打擾—有人跑來指導你不該這麼弄應該怎麼弄，或是這部片先不拍了所有人先去另外一個攝影棚—就得從頭來過，如果軟掉了，一定要重新花上一段時間才能硬起來。而當你在嘗試設計一個架構，或是在檢查一個很深的 bug 的時候，你卻經常被打斷，老闆要你聽他昨天晚上夢見的天才商業計畫，或是不斷追加規格，要求添加一個老闆心中覺得很簡單，但是工程規模其實是要將軟體整個重寫的功能，甚至是昨天告訴你要做的事情，今天告訴你應該先去做另外一件事。這樣要怎麼做事呢？</p>
<p>我們來看 Scrum 的流程。Scrum 將整個軟體開發週期，切分成許多較小的衝刺期（Sprint），意義就在於，在衝刺期內就不要再開會、不要再修改規格、不要再任意繼續添加新的商業規則到目前的成品中，先完成目前制定的目標再說。但是我們還是要追蹤目前進度啊？那也不該開會，只要每天開始上班的前幾分鐘大家各自簡短報告就好，而且要站著報告，因為必須是站著，大家才會想儘快結束。</p>
<p>在 Scrum 流程中設計了一個叫做 Scrum Master 的角色，是整個 Scrum 流程的主導人，負責規劃有哪些階段的衝刺期以及目標，每天早上的工作進度也是向他匯報。但 Scrum Master 最重要的工作不是這些，而是防止老闆或是公司其他管理階層人員經由會議等方式騷擾正在埋頭苦幹的工程師。老闆想知道進度，想改什麼功能，有什麼新需求想要有人評估，問 Scrum Master 就好，不要直接找工程師；Scrum Master 在一早取得團隊的基本情報後，接下來一整天就是以這些情報對老闆營造幸福的錯覺。當勇者在前方打仗的時候，Scum Master 要負責對後方亂源施展癱瘓魔法。</p>
<p>Scrum 自然不能保證專案可以獲得商業上的成功。我們試想以下兩種狀況：老闆有十個點子，但是只有其中一項可以成功，但是卻打算十個點子都想要做，結果所有人疲於奔命，但是最後一個點子都沒做出來，就把公司資金燒完了—說到這個，不久前林益世他老母居然真的把美金拿去燒，想燒錢，我可以開網路公司幫忙燒啊！</p>
<p>或，十個點子中，只選擇了其中一項，最後做出來上市，但賣得一踏糊塗。Scrum 可以幫助你走向後面這一種失敗，而雖然兩種狀況都是失敗，只少後面這種失敗稍微優雅點，而且好歹還是有一些實際的產出，後著跟前者比起來，至少還留下了一些可供憑弔的紀念品。</p>
<p>與其將 Scrum 當作是一門軟體工程方法，不如想像成是一種調整辦公室文化，阻止管理階層胡亂管理的反管理（Counter Management），管理眾人之事的人其實更需要被眾人管理。所以如果你是因為聽說 Scrum 這種方法不錯，於是首先在公司裡頭召開了 Scrum 方法導入籌備會議，挑選了幾個經理或是資深工程師擔任 Scrum Master，甚至是老闆自己跳下來當 Scrum Master，再定期召開 Scrum 方法導入考核會議…這樣做，絕對無法導入 Scrum。</p>
<p>事實上，狀況會變得更糟。你會發現老闆的餿主意一個都沒有少，原本的會議也一個都沒少，但是每天開始上班的時候卻又多了一個會議。</p>
<p>Scrum Master 在 Scrum 流程中及其重要，必須具備可以阻止老闆一切愚蠢行為的影響力，能夠讓老闆言聽計從：公司的原有成員都無法擔任 Scrum Master，因為他們都無法阻止老闆的干涉，必須要找公司外面的人。最適合擔任 Scrum Master 的人選莫過於老闆的小三，元配不一定有用，但是這也不太實際，畢竟小三不見得在同一個行業裡頭，所以，如果你想要導入 Scrum，你一定要以高薪聘請顧問不可。</p>
<p>顧問的武器就是以各種光環震攝老闆。一般常見的光環是證照，而既然我們希望這光環又熱又亮，想來這證照也就一定不可能便宜；再來就是要三不五時自然流露出些超凡脫俗鶴立雞群的人格特質，在冰冷的工程世界中卻富涵深厚的人文關懷，在討論記憶體配置問題的時候，卻可以聯想到濟慈與王爾德的詩，讓老闆情不自禁由衷信服。</p>
<p>而想要導入 Scrum 最好的方法，莫過於直接聘請不才小弟我擔任顧問，端出各種防止老闆干擾工程師的方法，從把老闆帶去信仰新興邪教，到拔指甲、挑腳筋以及更多更獵奇的手段，一應俱全；報酬方面，我也一定會向你索收喪盡天良的金額。</p>
<p>以上。</p>
]]></content:encoded>
			<wfw:commentRss>http://zonble.net/archives/2012_07/1489.php/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>政府</title>
		<link>http://zonble.net/archives/2012_06/1486.php</link>
		<comments>http://zonble.net/archives/2012_06/1486.php#comments</comments>
		<pubDate>Sat, 23 Jun 2012 15:28:02 +0000</pubDate>
		<dc:creator>zonble</dc:creator>
				<category><![CDATA[下里巴人]]></category>
		<category><![CDATA[無以名狀]]></category>

		<guid isPermaLink="false">http://zonble.net/?p=1486</guid>
		<description><![CDATA[他每天都在幹我 他每天都在幹我 從我開始懂事的時候 就知道他在幹我 他每天都在幹我 他每天都在幹我 從我還不懂 [...]]]></description>
				<content:encoded><![CDATA[<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F50590191&#038;show_artwork=true"></iframe></p>
<p><span id="more-1486"></span></p>
<p>他每天都在幹我<br />
他每天都在幹我<br />
從我開始懂事的時候<br />
就知道他在幹我</p>
<p>他每天都在幹我<br />
他每天都在幹我<br />
從我還不懂事的時候<br />
他就已經在幹我</p>
<p>我有收入他也幹我<br />
我沒收入他也幹我<br />
我有房子他也幹我<br />
我沒房子他也幹我<br />
閉上眼從背後幹我<br />
睜開眼就直接幹我<br />
他每天都在幹我</p>
<p>日出又日落，他天天都在幹我<br />
他天天幹我，還問我享不享受<br />
我享不享受，還不是天天幹我<br />
他很習慣這樣幹我</p>
<p>日出又日落，他天天都在幹我<br />
他天天幹我，還問我享不享受<br />
我享不享受，還不是天天幹我<br />
我也習慣讓他幹我</p>
<p>日出又日落，日出又日落<br />
他天天都在幹我<br />
日出又日落，日出又日落<br />
他天天都在幹我</p>
<p>他很習慣這樣幹我<br />
我也習慣讓他幹我</p>
<p>我很習慣讓他幹我<br />
所以他就繼續幹我</p>
]]></content:encoded>
			<wfw:commentRss>http://zonble.net/archives/2012_06/1486.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
