星期三, 九月 16, 2009

VirtualBox、VMware Fusion、Parallels Desktop 三款虛擬機器對 USB 裝置支援的經驗

目前 Mac 上有三款虛擬機器軟體,開放原始碼(對很多人來說這只代表免費)的 VirtualBox,最早在 Mac 上推出的 Parallels Desktop,以及老牌的 VMware Fusion

這三套各有優缺,VirtualBox 是免費的,但是我覺得在恢復系統的速度上有點慢,另外詭異的中文翻譯也讓人不舒服。Parallels Desktop 有不少絢麗的功能,恢復系統的速度也很快,但是對比於 VMware Fusion,感覺程式比較不穩定一些。VMware Fusion 功能比起 Parallels Desktop 稍微樸實些,但是硬碟檔可以跟 Windows、Linux 上的共用。

這三套基本上都有支援外接 USB 裝置,例如隨身碟、鍵盤、WebATM 讀卡機,對內建 iSight 的支援也都有了,不過我因為 case 需要,要接的 USB 裝置很罕見,所以今天把三套都試了一下。

我要接的 USB 裝置是 Agilent 的 GPIB 接頭,是工業用儀器的專屬連接界面,型號是 82357A。這個裝置在三個虛擬機器中都可以正常安裝驅動程式,但是後續的使用上還是有些差異。
  • 在 VirtualBox 中,會在掃描連接的裝置時卡住,我用的 VirtualBox 版本是 3.0.4,下次用 3.0.6 試試看好了,但我想結果應該不會改變。
  • Parallels Desktop 下則是在安裝驅動程式時系統會卡住,需要等待一段時間,但是一旦裝好 driver,使用上一切正常,連接儀器也都沒有問題。
  • VMware Fusion 則是最順利的,安裝 driver 很快很正常,連接的儀器也都正常抓到使用。
總結來說,我想 VMware Fusion 對於 USB 的支援可能是比較完整的,不過應該很少人會像我一樣用到這種奇怪的裝置,所以假如你只是想要挑選一套虛擬機器來用,這篇文章寫的其實不用太列入考慮 :)

後記:其實 VMware Fusion 我用起來還是有個麻煩的地方,就是他共享資料夾的名稱中居然會擺個 .host 這樣的字串,讓我用 Dev-cpp 時沒辦法直接在共享資料夾中編譯程式,Parallels Desktop 與 VirtualBox 都沒有這問題。不過會在 Mac 上用虛擬機器跑 Windows,然後在 Windows 中用 Dev-cpp 開發工業用監測程式的人,應該沒有幾個吧...

標籤: ,

星期日, 五月 24, 2009

用 Objective-C 從二進位檔案(binary file)中讀入數值的 byte order 問題

要從二進位檔案中讀入數值,其中一個會遇到的問題就是 Little-endian 和 Big-endian,這和 CPU 的種類有關。Intel 系列的 x86 CPU 使用的是 Little-endian,而 PowerPC、ARM 等的 CPU 則是採用 Big-endian。endian 不同的問題,在以前 PPC 的時代算是相當重要,後來改用 Intel CPU 之後重要性就下降了許多,不過現在因為 iPhone 採用的 ARM 又是 Big-endian,所以這問題的重要性又大幅提升了,尤其許多新手設計師,之前可能根本沒碰過非 Intel 的平台,根本沒考慮過這問題,於是寫出來的程式就會讀到一堆詭異的數字。

首先我們要先界定 endian 的問題會影響到哪些資料型別。所謂 endian 不同,是因為高低位元在記憶體中表示的方式不同而造成的,Little-endian 將高位元放在記憶體位址較大的地方,Big-endian 則反之。舉例來說,0x00112233 這個 16 進位的數字,在 Little-endian 的機器上,在記憶體中呈現的是 33 22 11 00,而在 Big-endian 的機器上則呈現 00 11 22 33。因此,假如把在 Little-endian 機器上寫入的二進位檔拿給 Big-endian 的機器讀取,讀出來的數字就會出錯。

從這邊我們可以發現,要發生 endian 的問題,首先資料型別必須用超過 2 個 byte 來儲存才有可能,因此只用一個 byte 儲存的型別,例如 char,就沒有 endian 的問題。

至於 int、long 之類的整數型別,可以用 CFSwap[type][Big/Littile/Host]To[Big/Littile/Host] 系列函式來轉換。其中的 type 可能是 Int16、Int32 等等。使用方法如下:
int littleEndian = 1234;
int hostEndian = CFSwapInt16LittleToHost(littleEndian);
那麼 hostEndian 的變數值就是採用目前機器上的 endian 順序的 int。

不過浮點數就沒這麼輕鬆了。我們在前面的例子中還是用 int 來存放 littleEndian,因為就算 byte order 不對了,但它仍然是個 valid 的 integer,不過浮點數的每個 bit 有它不同的意義,因此一旦 byte order 解譯錯誤,它就可能變成 invalid float,導致程式直接當掉。

為了解決這個問題,Objective-C 中用了一個與 byte order 無關的資料結構來儲存這個資料,定義如下:
struct CFSwappedFloat32 {
uint32_t v;
};
typedef struct CFSwappedFloat32 CFSwappedFloat32;
可以看到,這個結構中就只有一個 data,uint32_t,Objective-C 就是用它來儲存這個 float 的資料(當然,此時系統並不會把它當成一個 float)。接下來的處理方式就是,將這個 uint32_t 裡面的 byte 頭尾互換位置,然後將這 32 個 bit(4 個 byte)轉化成 float。而這就是 CFConvertFloat32SwappedToHost 這個函式在作的事。整個的用法可以用以下的例子表示:
CFSwappedFloat32 littleFloat;
long buffer;
float hostFloat;

fread(&buffer, sizeof(long), 1, fp);
littleFloat.v = buffer;
hostFloat = CFConvertFloat32SwappedToHost(littleFloat);
當然,其中的 fread 可以用 memcpy、NSData 的 byte method 等等取代,只要把握住一個原則:「 CFSwappedFloat32 的內部是用 uint32_t 來儲存這個待轉換的 float」即可。

標籤: , , ,

NSNumber 與 NSInteger

在 Mac OSX 10.5 中新增加了 NSInteger 這個東西,但是這下就會跟 NSNumber 搞混,到底要用哪個?

基本上,NSInteger(以及類似的 NSUInteger)是為了解決在 32-bit/64-bit CPU 架構下,int 長度不同的問題,它的定義如下:

#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
也就是說,NSInteger 只是用 typedef 包裝過的 int/long,它是個基本資料型別(data type)。

NSNumber 則是個不折不扣的 Objective-C 類別,因此這兩者的使用時機就很明顯了,當你要把 integer 放到 Obj-C 的集合,例如 NSArray/NSSet 時,請用 NSNumber,不然其他的時候用 NSInteger 就好了。

標籤: , , ,

星期二, 二月 26, 2008

iPhone SDK 可能要延遲了!

不知道有多少朋友跟我一樣,最近一直盯著 Apple 主站和 ADC 的 iPhone Dev Center,等待著 Jobs 之前說會在二月發表的 iPhone SDK。

不過壞消息來了...根據 BusinessWeek報導,iPhone SDK 可能要延遲一到三週才會發表。

雖然 Apple 依照慣例不表示意見,但是 BusinessWeek 還是猜了一些原因,不過我們這些寫程式的都知道,東西沒有出來就是因為還沒完成,而為什麼沒辦法照既定時程完成...這可能要問天了吧....哈。

總之,希望 SDK 快點釋出,我用來當工作機的 iPod Touch 都買好了說...

標籤: , , ,

星期二, 十二月 11, 2007

在 Mac 上使用 VTK

VTK - Visualization Toolkit 是一套在醫學影像上不少人用的 Open Source 函式庫,因為課程需要所以前陣子找了要怎麼在 Mac 上使用的一些資料。

Installing VTK on Mac OS X - 教你怎麼在 Mac 上編譯並安裝 VTK。不過他是直接安裝,像我這種喜歡用套件管理系統的人,可能會比較喜歡用 Fink 來安裝。
幸運的是,Fink 中已經有了 VTK,只要啟用了 unstable 的套件之後就可以看到三個名為 vtk-py23/24/25 的套件,這三個套件都是 VTK,只是個別用來搭配 Python 2.3/2.4/2.5 罷了,選一個裝就可以了。不幸的是,VTK 本身有支援 Cocoa,但是預設是沒有開啟,而目前 Fink 套件樹中的也沒有打開這功能,而且他沒有包到目前最新的版本(5.0.3)。

所以我根據 Fink 中 VTK 的設定檔,把 Cocoa 支援打開,包了 VTK-5.0.3,設定檔可以由此下載。下載之後的檔案是個 zip 檔,其中包含了三個檔案,把它們放到 {fink_path}/fink/dists/local/main/finkinfo 中,然後把 VTK-5.0.3 的原始碼(下載)放到 {fink_path}/src 下,然後設定一下讓 Fink 去讀取本地的套件,應該就可以在套件樹中看到 vtk-py23/24/25 這三個套件,而且版本都是 5.0.3,最後下指令讓它編譯安裝(我是使用 Fink Commander 直接點選),等它編完安裝完就可以用了。

想要玩的朋友請接著看以下三篇文章,應該就可以順利使用 Cocoa 搭配 VTK 使用了。
Cocoa for Scientists (Part XIV): Beginning 3D Visualization - MacResearch
Cocoa for Scientists (Part XV): Continuing 3D Visualization - MacResearch
Cocoa for Scientists (Part XVI): Finalizing 3D Visualization - MacResearch

最後附上我寫的作業畫面:

標籤: , , ,

星期三, 十一月 07, 2007

Xcode 2.5 & 3.0 發表

Apple 前幾天發表了 Xcode 2.5 及 3.0,其中 Xcode 2.5 可以安裝在 10.4 Tiger 和 10.5 Leopard 上,而 Xcode 3.0 則只能安裝在 10.5 Leopard。

根據 Release Note,Xcode 2.5 除了修改了 2.4.1 的問題之外,最主要的功能就是在 Leopard 上為那些還沒有準備好要轉移到 Xcode 3 的專案提供一個比較平緩的轉移方式。

Xcode 3.0 則是一個大改版,包含了 Objective-C 2.0 的支援、Dashcode、Interface Builder 3 等等。

不過要注意的是,Objective-C 2.0 只能在 Leopard 上執行,因此必須搭配 10.5 SDK。假如要在 Leopard 上寫能在 Tiger 執行的程式,就必須嚴守 Objective-C 1.0 和 10.4 SDK 才行。

Xcode 可以在 Apple 的開發者網站下載。
Objective-C 2.0 的官方文件在 The Objective-C 2.0 Programming Language

標籤: , ,

星期四, 十月 25, 2007

iPhone/iPod Touch 軟體開發

雖然 Leopard 發行在即,但這兩天關於 iPhone/iPod Touch 的消息也不少。其中最重要的應該就是 Apple 決定釋出 iPhone 的 SDK,因此以後也可以自己寫 iPhone 的原生程式了,而且 iPod Touch 也適用。
Third Party Applications on the iPhone
Let me just say it: We want native third party applications on the iPhone, and we plan to have an SDK in developers’ hands in February. We are excited about creating a vibrant third party developer community around the iPhone and enabling hundreds of new applications for our users. With our revolutionary multi-touch interface, powerful hardware and advanced software architecture, we believe we have created the best mobile platform ever for developers.
It will take until February to release an SDK because we’re trying to do two diametrically opposed things at once—provide an advanced and open platform to developers while at the same time protect iPhone users from viruses, malware, privacy attacks, etc. This is no easy task. Some claim that viruses and malware are not a problem on mobile phones—this is simply not true. There have been serious viruses on other mobile phones already, including some that silently spread from phone to phone over the cell network. As our phones become more powerful, these malicious programs will become more dangerous. And since the iPhone is the most advanced phone ever, it will be a highly visible target.

Some companies are already taking action. Nokia, for example, is not allowing any applications to be loaded onto some of their newest phones unless they have a digital signature that can be traced back to a known developer. While this makes such a phone less than “totally open,” we believe it is a step in the right direction. We are working on an advanced system which will offer developers broad access to natively program the iPhone’s amazing software platform while at the same time protecting users from malicious programs.

We think a few months of patience now will be rewarded by many years of great third party applications running on safe and reliable iPhones.

Steve

P.S.: The SDK will also allow developers to create applications for iPod touch.
Apple - Hot News
這消息出來之後沒幾天,Apple 又在開發者網站上規劃了一個新的區域 - iPhone Dev Center,雖然目前只有 Web App 放在上面,但未來 SDK 公開之後應該也會以此為中心。

只是這個 SDK 不知道會不會只能在 Mac 上使用,還是會像 Safari 一樣推出 Windows 版呢?總之,應該趕快弄台 iPhone 或 iPod Touch 來玩了 :)

標籤: , , ,

星期日, 六月 24, 2007

Become an Xcoder 正體中文版 [12]

拖稿拖的很嚴重...不過我總算是全部整理完了。
BecomeAnXcoderTC.pdf PDF 版
BecomeAnXcoderTC_pages.zip Pages 原始檔

感謝大家的支持!

--
update:
本書的原始作者 CocoaLab 已經將正體中文版放到網站上了,大家也可以由 http://www.cocoalab.com/BecomeAnXcoder(TChinese).pdf 下載,應該會比從我這邊下載來得快。

另外我發現 CocoaLab 已經釋出了新的版本 1.13,雖然應該是大同小異,但我有空也會把正體中文版一併更新的。

標籤: ,

星期三, 三月 21, 2007

iTerm 0.9.2 與 0.9.5 正體中文化

iTerm 目前最新的版本是 0.9.5.0315,而我順便做 0.9.2 的目的只是想試試 Localization Suite 要怎麼用而已。

有需要的朋友請下載,或者過兩天官方網站上也會放上去。

iTerm_TC_0.9.2.dmg

iTerm_TC_0.9.5.dmg

標籤: ,

星期六, 十月 28, 2006

iTerm 0.9.0 正體中文化

iTerm 是個很有名的終端機程式,最近推出了 0.9.0 版。本來是有正體中文界面,但是我猜是香港人翻的吧,很多用語跟台灣不同。Applewoods 曾經在 0.8.1 的時候釋出了一個修改過的版本,但是好像也沒有持續維護或者送回官方,所以就自己動手了。

翻譯的時候參考了 Applewoods 的 0.8.1 、官方的 0.8.2,還有 Apple 自己的翻譯,並根據官網上的說明(A guide to package localization files using PackageMaker)打包成安裝檔,有需要的朋友請自行下載。

iTerm_TC.mpkg.zip

這份翻譯也已經送回了 iTerm 官方,沒意外的話過兩天應該也可以在官網看到。

最後附上兩張圖。

iTerm 0.9.0 正體中文版截圖 1

iTerm 0.9.0 正體中文版截圖 2

標籤: ,

星期一, 十月 02, 2006

Become an Xcoder 正體中文版 [11]

全部翻完了,趁著週末一路從 13 章翻到 15 章。

現在要進入最後的整理修飾階段,然後就可以推出整本的 PDF 檔了,屆時也會一併釋出我用來編輯的 Pages 原始檔。

BecomeAnXcoderTC_ch13.pdf
BecomeAnXcoderTC_ch14.pdf
BecomeAnXcoderTC_ch15.pdf

標籤: ,

星期日, 九月 24, 2006

Become an Xcoder 正體中文版 [10]

第 12 章翻譯完成,這是最後一個份量比較多的章節,事實上,整本書已經快要翻完了。

翻譯完之後我希望我自己也能開始寫個小程式(沒錯,我沒寫過 Mac 的程式,但是我一直想要寫寫看...)。
至於要寫什麼程式我已經有了完整的想法,也在規劃當中,這可能會是我第一個公開出來的程式吧!

還有,最近在 Google 上發現了有趣的現象。假如在 Google 搜尋 "become an xcoder“,第一個出來的是 CocoaLab 的連結,第二個就是我的 Blog,第三個則是前面提過的簡體中文版的連結。假如把搜尋範圍限定在中文網頁,則第一名是我的 Blog,第二名是簡體中文版的連結。如果更進一步把範圍縮小到繁體中文,理論上我應該會排在最前面,而簡體中文版則會被排除,沒想到卻是簡體中文版排第一,我排第二。

怪哉!

BecomeAnXcoderTC_ch12.pdf

標籤: ,

星期五, 九月 22, 2006

Become an Xcoder 正體中文版 [9]

一口氣翻好了 10、11 兩章,不過必須說明的是,我把 argument 的翻譯改成了 "引數",而不是先前翻的 "參數",參數應該是 parameters 才對。

其實很多術語的中文翻譯我是參考侯捷老師的 C++ Primer 3/e 中文版裡面的術語,不過因為平常這些術語我很多都是直接念英文,所以翻譯的時候可能會一下想不起來或誤植了錯誤的中文翻譯,這些都會在最後整本書翻完之後作修正。

BecomeAnXcoderTC_ch10.pdf
BecomeAnXcoderTC_ch11.pdf

標籤: ,

星期三, 九月 20, 2006

Become an Xcoder 正體中文版 [8]

第九章翻譯完成。

這章我覺得對初學者還蠻重要的,它教使用者如何使用 Xcode 內建的說明文件來尋找自己想要用的類別方法。

雖然良好的文件可以提升非常多的生產力,但是也要使用者知道如何去用啊!

BecomeAnXcoderTC_ch9.pdf

標籤: ,

星期五, 九月 15, 2006

Become an Xcoder 正體中文版 [7]

第七章翻譯完成,這章的份量大約是其他章的三倍吧...
講了物件、GUI、繼承、訊息傳遞等等,內容多的不可思議,雖然每個部份都是點到為止,但是對於沒有程式設計經驗的人而言應該還是頗吃力的。

BecomeAnXcoderTC_ch8.pdf

標籤: ,

星期四, 九月 07, 2006

Become an Xcoder 正體中文版 [6]

第六章和第七章翻譯完成,這兩章其實份量很少,但是已經把程式的流程控制講完了。

接下來的第八章是整本書中份量最多的一章,要開始建立一個有圖形界面的程式了。也因為要教怎麼使用 Xcode,所以圖很多。

總之,下一章是個大工程,不管對身為翻譯者的我,還是對讀者都是...

BecomeAnXcoderTC_ch6.pdf
BecomeAnXcoderTC_ch7.pdf

標籤: ,

星期一, 九月 04, 2006

Become an Xcoder 正體中文版 [5]

第五章翻譯完成,這章開始講解 Xcode 的基本用法。

不過我發現 Xcode 的界面好像有些變動,我現在用的 Xcode 2.4 跟英文版的截圖有些不同,但是我相信這不會造成什麼困擾。

BecomeAnXcoderTC_ch5.pdf

標籤: ,

星期五, 九月 01, 2006

Become an Xcoder 正體中文版 [4]

第四章翻完了,因為程式碼很多,所以需要翻譯的地方相對變少 :)

今天突然想到,這一串文章的標題應該改成 "Become an Xcoder 正體中文版",以避免跟簡體中文版搞混,所以一併修改了標題。

BecomeAnXcoderTC_ch4.pdf

標籤: ,

Become an Xcoder 正體中文版 [3]

第三章翻好了,這章講的是函式,算是開始步入比較重要的地方了。

不過翻著翻著,發現英文版有些地方沒寫好,包含程式碼的行數寫錯,還有標色錯誤的地方,不過基本上都不是太嚴重的錯誤,而且我也不清楚 CocoaLab 有沒有出新版把這些地方改掉,今天稍微翻了一下 Become an Xcoder 的 wiki,發現他們好像把每一章分成了幾個小節,不過內容應該是沒什麼改變,因為我注意到程式碼行數錯誤的地方都一樣。

其實 CocoaLab 有寄信給我,問我要不要直接把內容放上 wiki,但是我想等我全部翻完再一起放上去吧!這樣比較有整體感。目前我的規劃是最後完成的時候要以 PDF 跟 wiki 的形式釋出。

BecomeAnXcoderTC_ch3.pdf

標籤: ,

星期三, 八月 30, 2006

Become an Xcoder 正體中文版 [2]

今天把第二章也翻完了。

有興趣的朋友請下載:
BecomeAnXcoderTC_ch2.pdf

標籤: ,

星期二, 八月 29, 2006

Become an Xcoder 正體中文版 [1]


Become an Xcoder 是 CocoaLab 推出的一本 Mac 程式設計入門書,早在今年五月我讀到這本書的時候就興起了翻譯的念頭。最主要的,當然是因為它很簡單,所以我自認翻譯應該不成問題 XD

不過後來遇到期末考,林林總總的發生了一堆事,所以雖然我已經讀完這本書兩個月了,卻一直到最近才真正動手翻譯,目前已經把第一章翻完,我決定先把翻譯好的部份放出來,有任何翻譯不好的地方,希望各方能夠不吝指教。

BecomeAnXcoder正體中文版_導讀
BecomeAnXcoder正體中文版_ch0
BecomeAnXcoder正體中文版_ch1

英文原版請見 Become an Xcoder
另外,我已經跟 CocoaLab 連絡過,等我翻譯完,會將翻譯好的文章放回他們網頁上。

題外話,假如有人看得懂簡體中文的話,中國有群人已經翻譯好了整本,請參考MacX: Become An Xcoder!!中文版已公开下载

標籤: ,