轉移至MacOSX的入門必備小技巧

Monday, January 28th, 2008

最近又成功拐了一個朋友投向Mac的懷抱,我也發現在資訊系用Mac的人數不斷增加。但每次有人要跳槽到Mac上時,都找不到一篇適當的入門,所以我乾脆就跳出來先寫些東西記下來,可以給所有有類似需求的人參考。

我會裝的必備軟體

  • 中文輸入法: OpenVanilla。內建輸入法很爛,這非裝不可。
  • QuickSilver。這是必裝的軟體,鍵盤控的最愛,能讓你純用鍵盤操控一切。有些人說有Spotlight後就不用Quicksilver了,但那其實是個大誤會。Quicksilver並不只是個單純的軟體搜尋/啟動程式,只要google一下就能找到很多資訊,我就不詳細說明了。
  • DarwinPorts。類似FreeBSD上的ports,裝軟體能自動計算dependency把需要的東西一起裝回來裝好。裝command line/UNIX軟體很好用。
  • 沒了。Mac OS X內建Terminal, gcc(裝xcode後才會有), perl, ruby on rails, screen, vim..。寫程式吃飯的工具都內建,我其實OS裝完就能工作了XD

一些小秘訣

  • Safari debug menu裡藏了很多好東西(DOM inspector, Javascript console),一定要開。另外還有Safari加速法也很好用
  • 建議把Finder的路徑列打開(顯示方式/顯示路徑列)。這樣平常以icon模式瀏覽時,才方便把檔案拖到上層/上上層/上上…上目錄放。
  • Leopard在Finder中增加了Quicklook,非常好用。只要在檔案上按空白鍵,就能直接預覽內容。現在已經有很多Quicklook plugin出來了,推薦至少裝FolderBetterZip
  • 現在Ram很便宜,每台Mac幾乎都插了2G甚至4G的ram,這時就拿一小部份出來做ramdisk吧。推薦用免費的Esperance DV來做,把常用的cache都放進ramdisk可以讓程式執行速度大大提昇。
  • MacOSX的Cmd-Tab有個我特別喜歡的地方。按Cmd-Tab出現切換視窗的icon列表時,Cmd按住不放,這時是能用滑鼠移到icon上去選擇程式的。在同時開了一堆程式時非常好用,不用一直狂按TAB。
  • Cmd-`(ESC下面那個鍵)能在同一個程式的不同視窗間來回切換。我發現很多人不知道這個快速鍵,導致切換視窗很痛苦XD
  • Finder中Enter是改檔名,Cmd-O才是打開檔案/執行程式。另外Cmd-Up和Cmd-Down能切到上一層目錄/下一層目錄
  • 如果喜歡X11下很多window manager都支援的alt-左鍵拖視窗方法,可以裝NuclearMouse
  • Growl可以搭配Adium、iChat、iTunes等軟體在視窗角落做訊息提示,就像Windows MSN會在角落跳出的小視窗一樣。
  • 在command line下能用pbcopy/pbpaste來把資料送進剪貼簿,或從剪貼簿中讀出。使之支援中文的方法請看在macosx-terminal中使用剪貼簿
  • 如果要在Terminal下看Big5的東西,建議用patch後的screen來轉碼。如果只是要在OSX下上BBS,而且不在意telnet有可能洩漏你的密碼,(更正,Nally已經支援用ssh上BBS了)Nally是個不錯的選擇

先寫這些,以後不定時會再補充。

在MacOSX Terminal中使用剪貼簿

Wednesday, January 9th, 2008

Mac OS X的command line環境下,有兩個很好用的指令pbcopy和pbpaste。前者是用來將文字透過stdin放到剪貼簿中,後者是把剪貼簿的內容印出至stdout。
這樣就能很方便在shell script中將資料輸出至剪貼簿,再貼到別的程式當中。

要特別注意的是,pbcopy/pbpaste預設不能放一般UTF-8的文字(也就是不能放英文以外的文字)。
要用中文的話,只要把下面這設定放到~/.profile中就可以了。

export __CF_USER_TEXT_ENCODING=0x`printf "%X" \`id -u\``:0x8000100:0x8000100

NuclearMouse

Tuesday, January 8th, 2008

自從升到Leopard以後,OS X下的外掛程式Application Enhancer(APE)就不能用了,自然地,靠APE才能用的外掛們也就全部被廢了武功。
其中我最愛用的APE外掛是WindowDragon,可以在視窗任何地方按住cmd/alt就能拖拉、甚至縮放視窗。(這是之前用X window時就很依賴的功能..)
本來都快放棄這功能了,沒想到前幾天在看SIMBL時 (這又是另一個外掛framework),發現了也有人在SIMBL下寫了一個一模一樣的程式 NuclearMouse。NuclearMouse除了能拖拉視窗,調整大小外,還能調視窗的透明度喔。

Leopard的終端機和screen中文寬度修正

Sunday, December 9th, 2007

升級到Leopard後,意外發現內建的終端機(Terminal.app)也做了大改版。
加了TAB的支援,還有方塊選取功能(按住Opt再選,就不再是以行為單位選取,而是選任意的方塊),長時間使用佔用的記憶體更少了,而且也加強了對亞洲文字的支援。
對於我這種Terminal重度使用者來說,以上當然都是好消息。

但事實上當然沒這麼美好啦XD

第一,Terminal.app對於中文輸入法極不友善。只要在IRC或BBS等地,用中文輸入法就常會發現打到一半整個輸入框就消失的情形。從OpenVanilla team那邊得到的消息是:這是Terminal.app的錯,而且目前無解。

第二,對於亞洲文字的支援的確有加強,搭配screen做big5 -> utf-8的轉碼可以看到幾乎是完美的,只剩下”《”和”》”的寬度不對而已:

這問題蠻容易解決的。參考Eric的patch,用以下patch修正0x300a和0x300b的寬度就行了。


--- encoding.c.orig 2007-12-09 09:26:01.000000000 +0800
+++ encoding.c 2007-12-09 09:27:17.000000000 +0800
@@ -860,7 +860,8 @@
(c >= 0xfe30 && c < = 0xfe6f) || /* CJK Compatibility Forms */
(c >= 0xff00 && c < = 0xff5f) || /* Fullwidth Forms */
(c >= 0xffe0 && c < = 0xffe6) ||
- (c >= 0x20000 && c < = 0x2ffff)));
+ (c >= 0x20000 && c < = 0x2ffff))) ||
+ (c == 0x300a || c == 0x300b) ;
}
#endif

另外,在Leopard下自行編譯screen還會碰到找不到sys/stropts.h的錯誤訊息,只要加上這個patch就行了。

--- pty.c.orig 2007-12-09 09:30:14.000000000 +0800
+++ pty.c 2007-12-09 09:30:30.000000000 +0800
@@ -34,7 +34,7 @@
#endif

/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
-#ifdef HAVE_SVR4_PTYS
+#if !defined(__APPLE__) && defined(HAVE_SVR4_PTYS)
# include
#endif

另外如果是要拿Terminal.app上BBS的話,建議再加上Screen UAO patch (注意,不要用mhsin的cjkwidth patch。在Leopard下反而會再把寬度搞亂)。這樣就幾乎能正確看到大部分的特殊符號了。

如果不想自己patch和compile的人,可以直接抓我編好的binary: screen-leopard-patched.tgz。在/下解開,就會裝到/opt/local/bin下。如果想要直接取代內建的screen,把它link到/usr/bin/screen取代原先的版本就行了。

Mac OS X Leopard要延到10月才會出現了..

Friday, April 13th, 2007

唉,有消息指出,Leopard正式版要到10月才看得到了。本來還以為6月的WWDC就會發佈,沒想到因為做Leopard的人被拉去做iPhone裡的OS,於是就被迫延到10月…。
好想試試Time Machine啊,Leopard快出來吧~

Google Desktop for Mac

Thursday, April 5th, 2007

Google Desktop終於出了Mac版
話說Mac OS X早就有Spotlight,速度也還能接受,Google Desktop除了能整合gmail外(其實我根本不用gmail XD),好像沒什麼特別吸引人的地方..。所以我決定再觀察一下,如果有人發現好用的地方請再推薦給我吧 :-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,就甚麼格式都能看囉)上上網倒是綽綽有餘。

File System 2.0? SpotlightFS

Tuesday, February 13th, 2007

Google又在MacFUSE上做出了一個有趣的file system: SpotlightFS。這東西的使用方法和原理很簡單,在SpotlightFS volume下面建個目錄,然後SpotlightFS就會把這個目錄的名字放到spotlight裡去search,再自動產生出每個搜尋到的檔案連結。這個概念跟smart folder一樣,都是動態的把搜尋結果變成一個虛擬的目錄,但其實spotlight中的smart folder並不是真正的資料夾,只能透過finder去存取。而SpotlightFS是透過FUSE產生出真正的資料夾,所以不管任何程式甚至是command line都可以使用。

那這個東西會帶來甚麼樣的影響呢?傳統的檔案管理方式其實已經不敷使用了,現今資訊量越來越龐大,我們很難把每一個檔案精確的分到某一個目錄中。畢竟分類是一門困難的學問,很少人能一直用一致的方法去把檔案分門別類整理好;目錄分得越深越仔細,存取起來就越麻煩,同時也越可能出現同一個檔案同時屬於不同類別的麻煩情況。還好這也不是無解的問題,在Internet剛興起時,Yahoo!就是用這種人工分類法企圖整理Internet上的所有網站,只是….. 他們失敗了。Google的出現說明了搜尋才是終極的解決方案,而Spotlight其實就是檔案系統的Google。
而SpotlightFS的出現,又帶來另一種不同的檔案系統使用方法。透過SpotlightFS,我們可以用關鍵字來為檔案分類,將檔案放入所屬的關鍵字資料夾(也就是SpotlightFS底下的smart folder)中。和傳統的樹狀目錄結構最大的差異是,一個檔案可以有很多關鍵字,也就是可以同時被放在很多資料夾中。如此,樹狀結構就被壓平了。這概念聽起來很熟悉嗎?沒錯,這其實就是flickr和del.icio.us所用的tagging。所以呢,SpotlightFS其實也可以學學人家,稱為File System 2.0了。

假如Spotlight的速度夠快的話(顯然現在實在還不夠快…),那我們就再也不用在意檔案實體的存放路徑在哪裡了,只要為檔案標一些tag(怎麼標?在檔案上按⌘(蘋果鍵)+i,有個Spotlight註解的欄位,這裡就可以寫啦),就可以透過SpotlightFS的smart folder來存取檔案。甚至懶惰一點的話,連tag也不用標,反正Spotlight跟Google一樣是會搜尋檔案內文的。

只是,上面說了,現在Spotlight的速度實在還不夠快,要拿來作為everyday use實在有點痛苦。但話說回來,如果能讓SpotlightFS不要真的透過Spotlight搜尋內文,而只搜尋tag,那或許就真的能夠進入實用階段了…。

Mac的休眠模式(Hibernation)

Sunday, December 10th, 2006

在MacOSX下,預設的”睡眠”是所謂的Suspend to RAM,把不必要的系統裝置暫時關閉,只留下少量的電讓RAM裡面的資料不會消失。這種模式的好處是,進入睡眠和恢復的速度很快,可以把做到一半的工作和已經開啟的程式都保留住,等過一段時間又可以馬上回到同樣的系統狀態。但很奇怪的是,MacOSX預設沒有提供Suspend to Disk的模式,也就是真正的休眠,讓系統完全不耗電,就跟關機一樣,但開機後又可以回到之前的系統狀態。

因為我以前用notebook的習慣都是不關機的,每次不用電腦就是讓它進入休眠,這樣下次才不用重新再開一次需要的程式,也不用等待漫長的開機過程。所以沒有休眠實在很受不了。
好在MacOSX其實是有支援Suspend to Disk(Mac下叫Safe Sleep)的,只是預設沒有開啟,必須透過一點小hack才能打開這個功能。
開啟的方式可以在How to Safe Sleep (Hibernate) Your Mac一文看到。我試過這個方法後,覺得還是有點不滿意。這裡所謂的Safe Sleep是為了防止Mac在一般的睡眠模式睡到電池都耗光,而自動轉成hibernation的模式。也就是說平常按下睡眠它還是進入一般的睡眠模式,只有在電池快沒有,或是插頭拔掉的情況才進入hibernation。
但我想要的其實是可以自由選擇的hibernation。我如果只是要暫時休息,就可以選一般的sleep,如果是要回家睡覺,就可以選hibernation。可是按照這篇文章的方式是沒辦法這樣設定的。

還好有這需求的人不少,所以我後來又找到一個好東西: Deep Sleep。它是一個Dashboard Widget,只要按下它就可以直接進入hibernation,而平常按睡眠就是一般的睡眠。雖然不能直接修改OSX的關機對話窗,但這樣也是能滿足我的需求了。

Apple遙控器其實很有用..

Sunday, December 10th, 2006

現在Apple的電腦都會附送上一隻Apple遙控器,我本來一直以為只能拿來開Front Row,控制DVD撥放而已。剛隨意亂逛時發現這篇文章: Beyond the Front Row with the Apple Remote,才知道原來遙控器可以做很多事情,甚至連Keynote簡報也可以用遙控器控制。

要是沒有這些功能,我大概只會一直把遙控器收在袋子裡而且都不想打開吧XD..

OSX上的.app

Sunday, September 10th, 2006

剛才發現在MacOSX上,要自己做.app是非常簡單的…。

假設程式名為Hello,那麼只要有個Hello.app/Contents/MacOS/資料夾,以及放在裡面的一個可執行檔Hello,這樣就行了。
Hello可以是用gcc編譯出來的binary file,也可以是python或perl寫的script,總之能在shell底下用Hello.app/Contents/MacOS/Hello執行的就行啦。