為什麼我用Mac

Wednesday, May 26th, 2010

這篇文章其實已經醞釀很久了。起因是前幾個月看了tinyfool的为什么我认为每个程序员都应该用Mac OS X?youxu的开发人员为何应该使用 Mac OS X 兼 OS X 小史,我當時就很想順便分享一下我的經驗,但那時忙著Sikuli實在沒法靜下心來寫文章,直到最近稍微閒下來了才又想起這件事。

我從2005升上研究所前買了第一台Mac mini到現在已經五年了,說起來其實沒有很長,但自從2005年起,我就成了非Mac不用一族。但用Mac是一回事,我要先澄清我不算是狂熱的Apple粉絲,我除了Apple的電腦外,只有跟朋友以超低友情價買過一台開學優惠送的ipod touch來玩,除此之外,我沒有iphone、沒有ipad、也沒有Apple鍵盤滑鼠以外的周邊產品。在2005年以前,我高中和大學約6年都是用Linux作為主要工作環境。我一路從Slackware、RedHat、Mandrake(後來改名Mandriva)、玩到Debian、Ubuntu,那段時期我有數台24hr online的Linux server,還換過3台laptop,但都是裝Linux。在更之前呢,從國小的386 PC算到高一將近10年就是用DOS和Windows了。

這篇文章主要想分享的是作為一個programmer使用各種作業系統開發的經驗,不是想要說服大家全改用Mac。雖然從時間上看起來我用DOS和Windows最久,但我真正開始大量寫程式是國中開始用Visual Basic的事,所以我在DOS和Windows平台的開發經驗其實算是最少的。而大學階段是我最密集寫程式的時候,所以我的經驗和使用的工具也都是以UNIX派的為主,不見得適用所有人。

我在DOS+Windows、Linux、Mac這三大主流平台上都混過一段時間,這個遷徙的歷史其實也代表了我個人心態上的轉換。

在剛開始學電腦的時候,我是純粹的使用者。我用電腦玩遊戲,國中幫老師用excel做全班的成績單,閒來無事就隨手玩玩photoshop、3D studio等軟體自娛娛人。我記得在386的DOS時代要玩個遊戲還挺不簡單,雖然很多遊戲都說只要打play.bat就可以玩了,但事實上總要修改config.sys和autoexec.bat裡的一些記憶體或音效卡的設定才能玩。所以那個時代的使用者其實大都是玩家級的人物,多少都對Adlib、EMS、XMS、可恨的640K限制有些了解才有辦法「玩」電腦。

國中開始寫程式之後,我的心態就不太一樣了。像一般玩家般玩電腦已經不能滿足我,我開始熱切的想了解電腦內部運作的一切原理,想了解每個程式是怎麼寫出來的,每個零件是怎麼運作的,每一個細節我都想知道。而我剛好就在這段時間接觸到Slackware Linux。

Slackware Linux其實是一個不太好用的Linux distribution,可能很多人也沒聽過它。現在的Ubuntu和Windows沒兩樣,一直按「next」就能裝完整個系統並開始使用。但那時的Linux裝完後可是「什 麼 都 沒 有」。沒有X11,更別提其上的GNOME或KDE;文字編輯器只有vi(不是vim)和joe;沒有make、沒有gcc、…,總之,真的什麼都沒有。那個時候裝Linux其實是為了自己架MUD server,但當時Linux的安裝教學都說裝完的一件事就是自己重新compile kernel。(因為預設的kernel很陽春,幾乎什麼driver都沒有,不自己compile的話很多硬體都動不了。)其實當時我覺得這還蠻酷的,make config打完出現數百個選項可以慢慢勾選,讓我這種想要一窺作業系統裡面在搞什麼鬼的人非常過癮。(一開始我還不知道有make menuconfig可以用,所以其中一個選項不小心選錯就會非常痛苦要整個重來……)但過了一段時間我就發現,MUD server沒架起來,但倒是很會重編Linux kernel和設定xf86config。

國中我還在用Visual Basic寫程式時,其實沒有注意到「平台」不同的影響,因為當時我只用Windows和VB寫程式,也不會其他語言,更不用提在不同平台寫程式。一直到上高中學了C,開始寫比賽的程式時,才讓我注意到Turbo C和gcc雖然都可以compile C的程式,但有某些header檔(像是conio.h)是只有Turbo C中才能用的。發現這件事後,我才突然搞懂library是什麼,還有Linux下有一堆libxxxx及libxxxx-dev的套件是在做什麼的。

Windows和Linux的關鍵差異 – 資訊透明度 – 也就在這裡顯現出來。在我學VB的時候,我把當時一本VB5的經典書籍從頭到尾全讀過了,但我竟然對library一點概念都沒有。我以為我能用的東西就是VB提供的那些元件,後來我多學了一點後發現我還能呼叫Windows API做一些VB辦不到的低階功能,我從來沒想過要去利用別人已經寫好的程式和函式來節省自己的開發時間。簡單說,我以為要造一輛車子,就是要從輪子甚至是螺絲釘自己做起。

某方面來說這是個好事,因為我的第一個VB遊戲「黑白棋」,就是這樣一個個pixel從無到有自己畫出的。但如果要寫更大的程式,每次都從輪子做起就不是個好主意了。接觸到Linux後,我也學了很多open source界的「哲學」,其中最重要的就是重用別人的輪子。

記得很久以前在Redhat和Mandrake上裝軟體非常痛苦,雖然每個程式都被包裝成一個RPM檔,但RPM之間的相依性常會讓人發瘋。每裝一個軟體都有可能會跳出數個相依的library或套件需要安裝,然後使用者必須自己去找這些相依的RPM,更糟的是這些相依套件可能會沒完沒了的依賴更多其他的套件…。(還好後來改用Debian就不用再被這個RPM地獄折磨了。)

這個過程讓我深刻的體會到,軟體應該是像金字塔一樣一層疊著一層往上蓋的,Linux套件的包裝方式清楚的讓使用者能夠看出來一個軟體是利用了哪些library建構起來的,如果自己想寫有類似功能的程式,很容易就可以找到相關的library來用。但在Windows下就不是這麼一回事了。Windows的軟體是為end-user設計的,目標使用者很可能什麼都不懂,所以發佈軟體時應該要把所需要的library或套件全部包進去變成一個龐大的自動安裝程式,使用者只要一直按下一步就可以裝完了。這讓使用者變得比較輕鬆,但同時也一些對開發者有益的細節也隱藏起來了。

Windows的軟體大多是完全不透明的,安裝時你不知道它裝了什麼,也不知道它寫了什麼到registry,更別提要知道他的某某功能是怎麼做的。但Linux是在另一個極端,每個程式的一切都是透明易懂的,RPM或DEB套件裡有什麼東西一個指令就一清二處,每個套件需要用到哪些相依套件也是明明白白。此外,Linux下的設定檔都是純文字,只要文字編輯器就可以修改,不但方便編輯,也方便寫自動化的script或是備份系統。當然,更不用提Linux下幾乎所有程式都是open source的,只要有興趣,隨時可以打開每天在用的軟體的source研究它是怎麼做的。這些事情在Windows底下則是天方夜譚,所有的細節都被自然的包裝和隱藏起來了。這種透明度的差異對於充滿好奇心的程式設計師會產生南轅北轍的影響,當你接觸的東西越開放,就能自然而然接觸和學習電腦從裡而外的各種知識;但當你接觸的東西越封閉,就只能受限於黑盒子的限制而當個單純無知的使用者。

高中時轉到Linux作為工作環境還有另一個很大的原因:「效率」。Linux的世界是架構在文字設定檔和command line工具上的,整個OS的操作都可以用command line解決。更方便的是搭配shell script或是Perl、Python這種script language,可以輕易把系統裡各種小工具結合起來完成複雜的工作。command line有個很大的好處,你每天用的操作介面,和寫自動化script的介面是完全一樣的。也就是說,你只要把每天打的指令串起來放進一個檔案,就自然變成了shell script,而日後只要執行這個script就能自動完成需要一連串指令的工作。這種工作方式滿足了我身為一個「懶人」的慾望,因為我懶得每天用手親自重複做同樣的事情,所以我寫script將這些事自動化。當script寫的越多,就會面臨越複雜的工作,這時就會想要學更多”UNIX power tools”的用法(這是O’REILLY的一本好書)或是更強大的「黏合」語言(像是Perl)來組合不同工具。透過這種正向循環,可以不斷刺激自己提昇工作效率:事情做得越快,就可以想得更多,解決更複雜的問題,進而就能學得更多,做得更快。

大學那幾年我成了虔誠的Linux command line信徒,不管是什麼樣的事情我都可以用各種小工具加上Perl或shell script來解決,而Windows在這方面就完全比不上Linux。Windows的哲學是一套軟體可以做N種事情,但如果你想做的事情不在它原本設計的功能裡,只能兩手一攤什麼事也做不了。

資訊的透明度和command line帶來的高效率讓我非常享受在Linux上工作的樂趣,然而Linux也不是沒有缺點。當我學得越多,對系統底層的好奇心漸漸被滿足後,Linux的缺點就漸漸暴露出來,其中最讓我受不了的是殘破不全的driver支援。讓我印象最深刻的是在802.11b無線網路剛開始流行時,我花了很多時間在找driver和當白老鼠compile最新的driver,重編kernel幾乎是每日例行公事。除了無線網卡外,就算是有線網卡Linux都不見得支援,最惡名昭彰的莫過於Dlink系列的卡,他們的530TX甚至還被暱稱為惡魔卡。(這張便宜的卡在當時非常流行,但偏偏在Linux上就是不能用…)

雖然我是個programmer,但我同時也是一般user。在我想要快樂用電腦看電影或上網時,還要不時的處理系統內部的問題其實有點惱人,更別提當我只想寫一般的桌面程式或是Web app時,為什麼我還得跟Linux kernel奮戰呢?

除了硬體相容性外,Linux這種過於開放的平台還有個大問題是缺乏統一且一致的user experience design,導致usability常常奇差無比,而這也是很多open source軟體普遍共有的問題。程式設計師在乎的是功能面的設計,每個人做自己想要或喜歡的功能,雖然看起來和樂融融,但很少project有專門的團隊負責思考user是誰,他們想要什麼,以及他們會怎麼用這個軟體。同樣的功能但由不同的介面呈現,帶給使用者的感覺也會有天南地北的差異,而由千百個open source軟體拼湊起來的Linux系統帶給使用者的就是千百種不同的設計和使用方式。(後來Ubuntu的出現大大的改善了這個問題,但那時我早已跳到Mac上了…。)

就在Linux的缺點慢慢浮現後,我同時也注意到身邊很多FreeBSD/Linux hacker們開始改用Mac OS X。深入了解後,我很快發現Mac是一個完美解合Linux的效率和開放,同時又兼顧了精心設計過的user experience design的平台。Mac作業系統核心是BSD的近親Darwin,上層有跟Linux相同的command line shell,所以我以往在Linux慣用的設定檔和程式(bash、screen、vim…)全都可以直接帶到Mac上使用。(更棒的是還能像在Debian下一樣用apt-get install或是port install一個指令就自動裝完所有相依套件)

而在command line的上面則是Apple設計的GUI系統,美觀、一致、充分為使用者「設計」過的介面,輕易的就打敗我在Linux上較調半天的FVWM設定。(我換過和較調過無數的window manager,從enlightenment、GNOME、KDE、Window Maker、FVWM…)除此之外,我也不用再自己重編kernel和找driver,每一台Mac都是買來後一打開就能用了。

後來Mac用久了,漸漸發現更多Mac的好處,尤其是對於programmer而言。

每一台Mac都有附Mac OS X的安裝光碟,裡面同時附帶Xcode。而只要把Xcode裝上去後,我整台Mac就已經準備好可以讓我工作了。Xcode是Apple開發的IDE,可以開發各種常見的程式語言,但其實我不用這個。我都用Xcode底層的command line工具,像是gcc、make、svn,加上OS X內建的screen、vim、perl、python、apache(只用這些的話其實連Xcode都不用裝,每一個OS X都內建),我就有了完整的程式開發環境,而且我甚至還不需要連上網路就可以有這些。除此之外,Xcode裡還附帶很多好用的開發、除錯工具,像是我最愛的Shark(非常好用的profiling和memory debug工具)、或是Malloc Debug(找memory leak的好東西)、BigTop(監看每一個process耗用的資源記錄)。

自從我轉到Mac後,後來因為需要寫跨平台程式而切到Windows時,都覺得極端痛苦。因為Windows是給一般使用者的系統,而且所有程式都是獨立分開的,每次光要把開發環境準備好就要先耗上一整天在下載和安裝。後來我學乖了直接裝cygwin弄一個假的UNIX環境出來,但cygwin畢竟還是跑在Windows上,系統設計的哲學不同讓cygwin還是格格不入。(像是Windows就是沒有用文字檔存放系統設定,所以也沒辦法用一般的文字工具自動操作;Windows也沒有提供夠多的command line工具可以控制系統;Windows也沒有符號連結(symbolic link),我之前想用Bazaar check out一個有符號連結的repository就爆炸了…)

從Linux轉到Mac,讓我可以花更多時間專注在我想寫的程式上,而不是拿去研究driver的相容問題,或是Linux kernel新增的設定選項。對於一個應用程式或網頁程式的開發人員來說,這些底層的細節都是不重要的。雖然說Windows也把系統底層的細節藏起來了,但它實在藏的太徹底了。萬一偶爾需要看系統底層的訊息來debug,在Mac上還是跟Linux一樣直接到/var/log下grep一下就有了,但在Windows上除了「回報給微軟」外,也沒太多辦法可以自力救濟。

Mac上很多設計也改變了我使用電腦的方式。例如說QuickSilver讓我可以用鍵盤快速啟動任何程式,甚至是做更複雜的操作。Spotlight讓我不再需要思考怎麼把檔案文件分類整理到不同folder裡,需要什麼就像用google一樣只要直接用spotlight找就好了。Mac上的繪圖、設計軟體都有很貼心的設計,例如OmniGraffle的自動對齊線,可以幫忙使用者輕易設計出平衡、一致、美觀的圖像、網頁、或是圖形介面。Mac上幾乎什麼都可以自然地用drag and drop操作(例如Safari很早以前就可以把檔案拖到網頁裡上傳),但很奇怪Windows上就是有些地方可以有些不行。

整體來說,Mac是一個融合Windows和Linux雙方優點的平衡點,我可以像一般使用者一樣不費心力的操作電腦,也可以用高效率的command line處理複雜的任務,甚至是在需要的時候扮演hacker挖掘底層的錯誤訊息,或是利用Darwin Ports安裝和修改我需要的open source軟體。但除了Mac外,其實我還是有在用Linux,只是都跑在遠端的server上而已。主要原因是在沒有圖形介面時,Mac就沒有什麼優勢了。所以到現在即使我的laptop都改用Mac,我也還是會有一個terminal連到我的Linux server上。(雖然說主要是拿來掛IRC和BBS的…)

Nokia N82入手!

Friday, August 1st, 2008

之前對iPhone 3G流了很久的口水,但因為AT&T在Boston及Cambridge地區收訊實在糟得不得了,所以昨天終於下定決心放棄iPhone,回頭找尋Nokia手機,如果必要再買iPod Touch就好。

Nokia一直是我最愛用的手機品牌,大學時用過一年多別牌的手機(BxxQ),慘痛的經驗讓我更堅定非Nokia手機不用的執念。(Well, Apple是個例外 哈哈:D)去年Nokia N95剛出來時,500萬畫素的照相功能加上內建GPS、Wifi的S60 Smartphone平台,讓我非常心動,可惜那時要去當兵,只能繼續忍著用沒相機的陽春手機。過了一年,終於退伍可以認真考慮入手Nokia N95,但這時竟然被我看到了Mobile01的N82敗家分享

Nokia N82在功能性方面和N95相當,甚至還有N95沒有的氙氣閃光燈和AGPS,更棒的是N82是直立機,沒有用久就容易出問題的滑蓋!(N95還是雙滑蓋,意思就是滑蓋壞掉的機率是單滑蓋的兩倍..XD)最神奇的是,N82竟然還比N95便宜!!!唯一可以挑剔一下的就只有2.4吋螢幕稍微小了一點,除此之外這N82簡直就是夢幻級的超級手機。

既然所有條件都符合,此時不敗更待何時,敗家就是要靠衝動。於是,在我昨天早上決定要買後,到了晚上,包好膜的全新N82黑魂版就躺在我的書桌上啦 :-D (敗家行動力滿分)

Nokia現在對於Mac蠻友善的,官網就有提供許多Mac上用的軟體。iSync Plugin裝完後就能用iSync同步通訊錄和行事曆的資料;Nokia Multimedia Transfer可以同步iTunes的音樂、影片,還有iPhoto裡的相片,雖然不像iPod或iPhone直接被iTunes支援,但透過Nokia的程式也還是能輕易的完成Mac和手機的資料交換。

目前我還沒辦法在Mac上做的只剩下Nokia Map Loader。還好這只是用來下載地圖資料,第一次把常去的地圖先下載完後,平常就很少會需要開它了,所以不算是太麻煩的問題。

另外順便列出一些我這兩天找到的S60好軟體,如果有用S60的朋友們知道什麼好軟體也歡迎推薦:

  1. Opera Mobile 內建的browser實在太爛了,一定要換一個的啊。Opera Mobile我在N82上跑有時會自己crash,原因還不明。後來發現Opera Mini就穩多了,目前我是兩個都裝著用。
  2. Gmail Java版client 這個版本可以連任何用Google Apps架起來的私人版gmail,要直接用手機連m.google.com/a才看得到。用這個看mail比瀏覽器方便多了。
  3. Google Maps for S60(支援GPS喔!)
  4. Skype mobile 最近Skype官方出了S60的client(以往S60都得透過fring轉接,效果並不好),目前官網沒寫支援N82,但我抓N95的回來安裝也是能用。
  5. 來電過濾(Call filter) 直接從N82的下載功能抓到的
  6. Sport Tracker 這玩意超棒的,裝上後只要帶著手機去慢跑,就能自動紀錄走過的路徑、速度、距離,如果有每天運動的習慣就能看到每天的統計圖,可以讓單純的慢跑也變得比較有趣一點。
  7. CorePlayer 超級厲害的萬用media player,幾乎所有格式都能撥。

SmartSleep for Mac

Sunday, June 29th, 2008

Mac預設的睡眠是指暫時不用電腦時,讓電腦進入一個比較不耗電的狀態,記憶體的內容會保留著,並且還會把記憶體整個寫到硬碟中,這樣即使電池都用光了還是能從硬碟中的sleepimage回復到當時的狀態。Apple會這樣設計我猜是想讓使用者完全不需要用到「關機」,不用電腦就進入睡眠,也不用管電池有沒有電,反正最後都還是能回復過來。

但我比較偏好將兩種睡眠模式(以下分別稱為sleep和hibernate。前者是會耗電保留記憶體內容:後者將記憶體寫到硬碟,完全不耗電)分開使用。因為Macbook本來就常常會帶來帶去,如果只是要短暫移動到另一個地方,我喜歡只用sleep,這樣螢幕一蓋上就能馬上拿著走。如果知道會有一長段時間不再開電腦,我就會用hibernate,沒必要同時保持在sleep下耗電。

如果用預設的睡眠(同時做sleep和hibernate),其實要等白色電源燈開始呼吸時,也就是sleepimage已經寫入硬碟後才是真正進入睡眠,這時也才能移動機器。(在硬碟寫入時移動機器很容易把硬碟搞壞喔)

現在Macbook標準配備是2GB RAM起跳,每次等hibernate都要等上將近一分鐘,如果是4GB的RAM更是要等上兩倍的時間….。此外,硬碟裡還要空出跟記憶體相等大小的磁碟空間給sleepimage用。也就是說如果你從來沒把電腦放著睡到沒電,那你就白白浪費了數G的硬碟空間放從來沒用到的sleepimage…。

我以前都是在Terminal用pmset指令去調整睡眠模式,但說實在有點麻煩,而且我很難教其他人這樣用XD 還好有人寫了個好東西SmartSleep。SmartSleep是Mac OS X下的一個設定面板,可以改變預設的睡眠行為,能調整成sleep only、hibernate only、default sleep & hibernate、或是smart sleep。smart sleep是這軟體特有的設定,基本上就是設定一個sleep & hibernate level,只要電池剩餘電量大於這個level,就使用sleep only;如果在5%到這個level中間,就用sleep & hibernate;低於5%時則用hibernate only。

我現在平常都只用sleep only(記得透過SmartSleep順便把sleepimage刪掉),因為很少到沒法插電的地方,所以即使用sleep會耗一些電也不是那麼重要了。

New York Times首頁的Apple廣告

Friday, March 21st, 2008

現在The New York Times的首頁上有個非常有趣的Apple新廣告。

同樣是Mac與PC的對話,但這次卻是在NYTimes首頁上佔掉了上方一整排的banner和頭條右方三分之一寬的空間,更有趣的是這兩塊空間是互相連結的!
廣告大意是上方banner一開始顯示的是CNET.com對Windows Vista的評論:

“Vista… one of the biggest blunders in technology” — CNET.com

於是PC說:「啊!又是個說Vista壞話的評論。應該要來更新一下…。」就在PC切換了「立即更新」的開關後,又出現了一個壞評論:

“It’s time for a Vista do-over” — PC Magazine

於是PC又走回去再次切換更新開關。這次來了個正面評價,結果沒想到是…

“Mac OS X Leopard: A perfect 10″ — InfoWorld

這個廣告的內容,還有利用兩個相互連結的flash都十分有創意,更厲害的是Apple竟然能說服NYTimes把這廣告擺上他們的首頁。(我想這恐怕不是砸大錢就能做到的) 只能說Apple的行銷功力實在是太厲害了啊!

Mac OS X下的Ramdisk解決方案

Sunday, March 9th, 2008

我常常在注意我電腦的資源使用情況,尤其是CPU和RAM的使用狀況,因為這兩項資源跟系統流暢度有非常密切的關係。最近觀察我Macbook(2.0Ghz Core 2 Duo, 2GB RAM)平常的情況,雖然平常大概會同時開13個以上的應用程式,但CPU的兩個核心平均負載大概都在20~30%以下,而RAM更是有700MB的剩餘空間。

總而言之,我的電腦太快了,RAM太多了。

嫌CPU一直閒著沒事做的話,有很多類似Seti@home之類的耗電程式可以隨時讓CPU 100%運轉。嫌RAM太多的話,可以把一部分的RAM挪出來當作一般磁碟使用,這種磁碟則稱為Ramdisk。

在Mac OS X下要做Ramdisk方法很多種,在此大概做個簡單介紹。

方法 1: 直接在Terminal下指令。(超硬派作法,geeks only)

Mac的terminal下可以做到很多神奇的事,甚至像是建立ramdisk這種程式都有提供。我想會用這方法的人是少之又少,我就不解說了。詳細指令可參考Create a RAM Disk in Mac OS X這篇文章。

方法 2: Espérance DV

這是個有點古老的Ramdisk軟體,但功能還頗完整。可以自動儲存和恢復Ramdisk的內容,也能設定把Safari Cache/Icons和xcode編譯的暫存區放到Ramdisk中。但我在Leopard中,自動儲存和恢復的功能一直沒辦法正常運作,另外它內部設定的Safari資料夾也是舊的。總之這軟體在Leopard中已經殘廢一半,而且沒有持續更新傾向..。

方法 3: Ram Disk Utility PRO

這是難得一見由台灣人開發的Mac軟體。功能強大,可以自由設定要同步進Ramdisk的目錄,空間快不夠還會有警告。雖然這軟體蠻完整的,但有幾個小地方我不太喜歡,導致我用過一次以後就不想開了XD

  • 每同步一個目錄就要建一個Ramdisk,而且Ramdisk圖示還不能隱藏,所以只要同步目錄一多就會看到一大堆Ramdisk volume…。
  • 它是獨立執行的應用程式,一login就要一直開著,在dock和alt-tab中都會佔掉一個位子。
  • 它是要註冊的shareware….

說來說去,上面三個方法都各有缺點。我理想中的解決方案是這樣的:

  • 像Espérance DV一樣是Preferences Pane裡面的元件,設定完就能關掉。
  • 同步的目錄可以自由設定,且用symbolic link連結至Ramdisk內就好。
  • Ramdisk圖示要能在桌面和Finder中隱藏。
  • 登入時自動建立Ramdisk,同步已設定的目錄。
  • open source software

剛好我最近空閒時間蠻多的,於是就決定自己動手比較快。可以順便一邊學Objective C和Cocoa,還能一邊解決這個小困擾,怎麼算都划得來。

因為建立Ramdisk已經有Espérance DV能做了,所以本來我只打算寫ramdisk內的目錄同步部份,就把這程式叫做RamdiskSync。沒想到後來寫一寫欲罷不能,就把它變成一個獨立的Ramdisk建立和設定工具了XD

RamdiskSync的詳細介紹就留待下篇再說了。

iPhone SDK

Sunday, March 9th, 2008

Apple最近終於公開了iPhone SDK,除了提供廣大程式設計師在iPhone上開發程式外,還順便提出了一個讓開發人員能直接在iTunes Stores販賣作品的business model。

在iPhone程式開發上,iPhone開發模式跟現有的Mac OS X應用程式沒兩樣。從下面的系統架構圖可以看出來,第一層一樣是Objective C + Cocoa(iPhone上叫Cocoa Touch, 多支援一些iPhone特有的功能,像是multi-touch、加速感應器)。中間有Media Layer提供影音、3D動畫(OpenGL ES)、繪圖的API,以及Core Services提供較為高階的網路連結、資料庫(SQLite),比較特別的是這層還提供了iPhone透過wifi及手機基地台做的地理定位資訊(Core Location)。最底層是提供低階OS功能的Core OS,包括檔案存取、Threading..等等。

整個開發平台對於熟悉Mac OS X的開發人員來講其實非常容易上手,EA甚至在兩個星期內就在iPhone做了Spore的簡易移植,SEGA也移植了Super Monkey Ball(並且是靠加速度感測器來操作的!),從影片demo的效果看起來實在非常驚人。流暢的3D動畫和OpenAL提供的立體音效,再加上內建的3軸加速度感應器和multi-touch screen,即使iPhone不拿來打電話,以後也必定是一個可期待的攜帶型遊戲平台。

除了提出開發平台外,Apple還順勢提出讓iPhone Developer能販賣作品的平台,一方面能把SDK賣給想靠開發iPhone程式賺錢的程式設計師,另一方面也讓這些程式設計師能夠靠販賣iPhone程式獲取收益(跟Apple 7/3拆帳,每個月領一次),實在是很聰明的策略。

iPhone一旦多了官方SDK後,可預期的是iPhone上的native app會如雨後春筍般大量出現,另外也可能吸引到其他Smartphone平台的開發者投入iPhone及Mac平台的開發。(在demo中,從EPOCRATES來的speaker說:「這些動畫效果都是由內建的API自動提供的,我們沒有多寫任何一行程式碼來做這些事。但它們真的讓程式看起來很酷。」)

老實說,看了這些demo後,我也想去敗一台iPhone了…。

Mac新廣告

Sunday, May 13th, 2007

Mac最近的系列廣告(PC人 v.s. Mac人)一直有新作出來,這次的新版本狠狠的諷刺了Vista的超多版本,會讓人忍不住會心一笑 XD
說真的Vista實在太多版本了。我雖然不太用Windows,但靠著四處瀏覽的眼角餘光所瞄到的資訊,也能應付大多數人碰到的Windows問題。但這次Vista可把我難倒了,版本實在分得太多,已經完全無法讓我用眼角餘光就搞懂這些東西。說真的,我也不認為會有多少人會真的想認真去研究它們到底有哪裡不同。不過是個作業系統嘛,搞這麼複雜幹麼?

加RAM的時候到了!

Sunday, April 22nd, 2007

剛看到優仕推出超吸引人的Mac加RAM方案,拿原本的兩條512MB RAM去換成2G RAM只要$1990 !
我當初買Macbook時沒加RAM,要加RAM最大的麻煩就是如何處理掉原來的兩條512MB RAM。現在終於給我等到了一個好機會啊!雖然目前1G還蠻夠用的,但不管如何還是先換再說啦 :-D

AppleTV能跑全功能的Mac OS X了!

Wednesday, April 4th, 2007

根據AppleTV Hacks的文章,已經有人研究出來怎麼hack AppleTV,讓一般的Mac OS X能在上面執行了。也就是說,以後可以花美金$299買AppleTV來接上客廳的40吋大螢幕(現在好像沒有50吋不能叫大螢幕了)當一台便宜的Mac用…。
雖然AppleTV的硬體不怎麼樣(1Ghz的Intel CPU,256MB RAM),但如果只是要拿來看影片(只要能跑MacOSX,就甚麼格式都能看囉)上上網倒是綽綽有餘。

Mac下的Latex中文解決方案: XeTeX

Thursday, March 1st, 2007

Latex的多國語言處理一直是一個很讓人頭痛的問題,剛才想在Mac下裝CJK Latex,雖然有人寫了詳細的教學文件,但裝起來還是編不過台大的碩士論文範本。搞了半天,我終於決定放棄Mac上的CJK Latex….。
後來發現有人推薦XeTeX,號稱可以直接使用系統字型,甚麼安裝設定都不用。因為我是直接拿MacTex.dmg安裝包來裝的,裡面早已經包好XeTeX,直接在TexShop裡選XeLaTe再編譯就行了。

XeTeX支援UTF-8,所以可以輕易混雜多種語言,再加上直接支援Mac系統上的任何字型,用起來真是超級方便。最簡單的XeTeX template如下:


\documentclass{article}
\usepackage{fontspec}
\setromanfont{LiHei Pro} % 儷黑Pro
\setmonofont{Courier New} % 等寬字型
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt

\begin{document}

在Mac下的XeTeX裡寫中文~

\end{document}

其中有兩行line break的設定是為了解決XeTeX中文的斷行問題,其餘的部份就是用fontspec package來設定字型。romanfont是預設使用的字型,monofont是預設的等寬字,不指定的話只要用到等寬字就會看到亂碼..XD 而在文章內部另外指定字型的方法也很簡單,可以參考下面的圖。我同時用了中文和日文,並且指定日文使用Osaka字型。

用CJK Latex安裝字型實在很麻煩,所以一直只能用傳統的楷體和明體,連個黑體都沒辦法用。現在有了XeTex,甚麼誇張的字型都能用,實在是方便不少。而且也不是只有Mac上有XeTeX,現在Linux和Windows也都有了。所以我決定拋棄CJK Latex,投向XeTeX的懷抱啦 :-D

BTW,如果不用TexShop,在command line下面只要用xelatex編譯.tex也是可以的。

非買Macbook不可的理由

Thursday, December 14th, 2006

因為我在家裡和學校都有電腦可以用,所以我的notebook最大的用途其實只有拿來做presentation。在沒有Macbook的情況下,我只能在Mac mini上用keynote把投影片做好,再轉成Quicktime放到notebook上才能做present,或是就直接在notebook上忍受著Powerpoint醜醜的版面和字型….。

Mac上的Keynote除了預設的投影片樣式和字型都強過Powerpoint外,其實更吸引我的是Macbook+Keynote就能做到雙螢幕presentation;投影機打出來的是給聽眾看的投影片,而Macbook上顯示的是一些只有講者看得到的資訊,例如計時器、講稿的提示、下一張投影片等等。這樣的好處是我可以在present時偶而偷瞄一下時間,看看下一張投影片是什麼,不但能更準確的掌握整個presentation流程,也不怕忘記接下來要講甚麼。除此之外,再加上Macbook附送的Apple Remote(就是那個小小的遙控器),就可以到處走來走去,不用一直站在電腦前面按空白鍵了XD
而在Windows下用Quicktime來撥放keynote的投影片還算勉強可以用(至少不用忍受醜醜的版面和字型),但沒有雙螢幕顯示,也沒有Apple Remote可以遙控簡報,相較之下還是遜色了許多。

現在有了Macbook + Keynote,不但到處都可以工作(看來我還真的蠻常需要做簡報的..@@),而且上場present時也輕鬆愉快多了。我完全相信光衝著這點,就非買Macbook不可了(當然Macbook Pro也可以XD)。常常需要做簡報的人,一定要親自體驗一下這樣子的組合,用過後一定就再也不想打開Powerpoint了。