Pages

Sunday, October 31, 2010

Xcode 是 iPhone project 的樞紐中心

當 Xcode 打開 iPhone project,會顯示出所有可看到的檔案。我們也會搭配其他 SDK 提供的工具使用,像是 Interface Builder 和 Simulator,但是所以有檔案都是包含在 Xcode 裡面可看到。


一個 Project 都會包含這樣檔案內容與分類。(ReadMe.txt, Classes, Other Sources, Resources, images, Frameworks, Products)
  • Classes: 你的 App 會用到的 Objective C 檔案,大部份的程式會寫在這邊。
  • Other sources: 包含了 main function 和 precompiled info。
  • Resources: 包含了 Interface Builder (.xib) 檔案、圖片檔、資料和其他 App 會需要用到的。
  • Frameworks 顯是一個列表,有哪些 libraries 會用到。Xcode 不只單是 Text 編輯器。Xcode 包含了範本 templates 可以作為起頭寫一個 Application。依據你的 application,可能會用到全部,也可能用到部份,但是總是會從其中一個開始起頭。



當基本的 app 範本就定位,可以使用 Xcode 再做更多的事情:

維護 project resources。Xcode 會建立 project 所需要的目錄結構,然後將一系列檔案配製在這些子目錄。Xcode 也支援版本控管工具,像是 Subversion,可以用來 checkout 和 commit 任何 project 裡面的異動。編輯 code 和 resources。

使用 Xcode 來編輯 application 程式碼。支援不只只有 Objective-C 的程式語言。Xcode 還包含內建編輯一些 resources 檔案,像是 plists。但是另外像是 UI 比較複雜的 (.xib) 檔案則是透過雙鍵去啓動適當的編輯器,像這邊是會打開 Interface Builder。有些檔案類型卻只能觀看,像是圖片,或者聲音檔案。

建置與測試你的 application。Xcode 包含了所有編譯 compilers 所需來建置程式,產生出 application。當 application 編譯完成,Xcode 可以裝進 iPhone Simulator 或者實體 iPhone 裝置。Xcode 包含了可以從圖形界面和 command-line 界面 debugger 來 debug 程式。可以打開 profiling 工具像是 Instruments 來檢查記憶體使用狀況或者效能狀況等等。

準備好銷售 Application。當 application 測試完畢準備要賣它,Xcode 管理 provisioning profiles 和 code signing certificates 讓你可以把程式放進實體裝置或者上傳給 Apple 審核再到 iTunes App Store 準備賣。


更多資訊可以參考 Head First Iphone Development - Xcode is the hub of your iPhone project。

Sunday, October 24, 2010

互動設計的程序

產品開發必須從了解需求開始,但是這些需求從哪裡來?哪邊可以問?支持互動設計的哲理是以使用者為中心 (User-Centered) 的設計,整個開發過程都和使用者有關。決定互動設計完不完整,所以找出使用者和期望,才能有具體的進展。

互動設計會涉入由產品預設用途、目標族群以及相關實際考量和形成的發展計畫,可供選擇設計方案被提出,並且由使用者加以評估。

互動設計有基本進行的活動分為:『確認並建立需求』、『發展設計選擇方案』、『製作設計的互動型式』、『設計評估』。

而這過程有些特色是要『以使用者為焦點』、『特定的使用性及使用者經驗目標』、『重複』進行。Gould and Lewis 1985 提出,在嘗試創新時,因為很少一開始就能產生完整或成熟的創造,需要時間、革新、嘗試錯誤及很多的耐性,也因為設計師從未能在第一次就得到最佳方案,重複是無可避免的。

當我看到整理筆記重點到這裡,發現這其實跟我們軟體開發程序是很像的,因為他也是會搭配上一些開發的模式,在往後面翻些章節,就是專門在探討各個階段的特色和注意事項。所以這章從源頭探討要有什麼活動才能開始設計。

更多資料可以參考 互動設計(二版) - aNobii - 互動設計程序

Thursday, October 14, 2010

Discovery 重機具大驚奇

Discovery 有個節目叫做『重機具大驚奇』,介紹美國各地的重工業區採用了哪些大型的機器設備,透過科技與機械來面對艱難的任務。不論是切蓋大樓大橋的梁柱,或者鑽岩石土地,或者採集花崗岩蓋道路用,這些都依賴非常強的工具才能造就好的產出。

透過這節目,觀察到採用好的科技是相當的重要,操作人員才能順利進行,才能順利進行工作項目。但是好的工具還是會碰到各種情境的挑戰,所以也不是說操作人員偷懶讓機器自己跑不管就能有好的產出,過程依然要不斷去思考,怎麼做可以避開這個問題,怎麼樣的狀況讓我們卡住,如何突破與解決。例如當鑽研的機器一直往下面鑽地,會碰到很堅硬的石礫,所以怎麼樣的讓他排出,不要卡住鑽研的機具,是相當重要。當割鋼鐵的鋸子溫度不斷的升高,研究是什麼原因讓溫度上升的,透過了解與觀察,找出解決方法,發覺到透過水柱的幫忙,讓卡在鋸子之間的鋼鐵碎片可以沖掉,溫度也就可以下降了。

透過此節目,可以學到:
  • 選擇重要好用的工具值得。只要是有他功能必要性,該投入的成本購買是划算的。因為操作的人員可以上手,操作順暢,能有好的產出。
  • 生產不順利就要找出問題點。如果過程中會卡住,造成產出無法順利進行,這時候要研究每個環節,是哪一個環節影響了,透過找出解決方法,這樣當卡住的問題解決了,產出就能順利進行。
  • 工作流程要保留彈性。不論是機具或是做事的態度,因為客戶會碰到改需求和訂單的可能,所以只要生產者有此概念,做好風險管理,是相當重要的。
只要進度可以在時程內做完,操作人員可以提早獲得休息,產出也足夠滿足客戶所需,這樣就是全贏的理想局面了。

Thursday, October 7, 2010

使用者挫折

大家過去操作電腦系統或者任何軟體,多少會遇到挫折,這種影響範圍可以讓使用者從稍微驚訝到變成生氣,甚至對系統軟體失去信心也有可能,有太多這種數不清的狀況了:
  • 當軟體運作不正常或者網頁丟出錯誤畫面、系統出現當機。
  • 系統操作不是使用者實際所要的
  • 使用者碰到不預期的結果
  • 系統沒有提供足夠的訊息讓使用者知道該做什麼
  • 畫面跳出含糊的、愚蠢的或者責備的錯誤訊息對話方塊
  • 當介面外觀太吵雜、太花俏樣子
  • 當一個系統所需要使用者執行許多步驟,某個地方出現錯誤需要從新再次操作
通常引起使用者錯誤,原因包括不良的設計、無設計、不注意設計、不加思索設計,很少卻是故意引起這樣子的,然而事情已經發生了,造成使用者反應而放棄使用此軟體系統。所以針對這部份也都有輕重性的影響,以下為整理項目。

當不符合使用者所預期的,取而代之花俏莫名的畫面。(輕微)
例如連結網頁上的一些超連結,結果最後出現沒有資料或者此頁面未完成等等。

如何避免這情況,就是避免此種狀況發生,減少這種動線發生。

當外觀不能讓人愉悅時。(中度)
網站過多文字圖像,找不到要的資訊、讀取速度較慢。太多動畫,讓人容易分心。大量音效背景音樂,特別是選像操作或是完成工作。過度膨脹,太愛多圖像或是選單。幼稚設計,不斷彈出對話方塊。不良配製,導致使用者容易輸入錯誤。

如何避面以上狀況,介面要設計簡單、高感知、講究的且遵循使用者行為習慣,詳細考量到圖像設計原則等。

更新軟體時候,使用者要執行過於複雜的任務。(中高度)
通常使用者不希望執行太困難的任務工作,因為花費許多時間和使用者操作工作,甚至原本使用者使用好好的功能,變成升級之後還要學習新功能,重則還影響到正常運作導致失敗。另外有的例子是當要裝一個外掛,到了某某網站上,這麼多種也不知道挑哪一種,裝好了才發現選錯不適合的。

為了避免這種方式,使用者不需要花費這麼多的複雜任務,更新軟體應該是要容易,大量自動化程序。設計師要想清楚更新軟體時一些取捨問題,能越自動到選對的類似外掛,自動配製到對的檔案路徑和進一步說明不同的檔案類型。

當系統當機或是錯誤畫面,並且提供非預期的錯誤訊息。(高度)
錯誤訊息在電腦使用者介面已經有很長的歷史,並且對於使用者不是容易理解的。早期都是顯示簡短的錯誤訊息。無論訊息多麼簡短,卻造成使用者必須花更多時間去理解。對於開發者可能很容易理解錯誤訊息,但是對於使用者卻不是這樣子,一個好的自然設計是,顯示簡短錯誤訊息,但是可以照著指示找到更多資訊。錯誤訊息中使用開發者專業術語是會引起使用者挫敗最主要原因,當使用者接收到錯誤訊息,還要同時理解語意含糊訊息意義。如果錯誤訊息裡面,又包含了責備語氣,例如『非預期的錯誤』這樣也是責備使用者意思,意味著這是使用者造成不是電腦。

如何避免,理想是錯誤訊息應該是要視為如何解決錯誤的訊息。解釋發生了什麼事情,說明產生原因,告知使用者執行什麼動作。

以下取自 Shneiderman 1998 如何設計一個好的錯誤訊息的準則:
  • 訊息應該是謙卑並且指示使用者需要做的事情,而不是責備使用者。
  • 避免使用毀壞性的錯誤、無效的壞的、非法的字眼。
  • 避免一長串編碼數字語大寫字母。
  • 使用者可以控制聲音警告,而不是發出聲音讓使用者感到尷尬。
  • 訊息應該明確而不是含糊不清。
  • 訊息應該提供協助的圖示,讓使用者可以獲得與情境相關的協助。
  • 訊息應該提供多種層級,簡短的訊息也可以有多一點的補充。
良好的使用者介面可以讓使用者感到愉快,具有美學介面也會讓人愉快,表達性的介面提供使用者確切的回饋,更是可以帶來樂趣的,相對的不好的介面容易讓使用者產生挫折。看看互動設計整理的條目,再回頭對照到日常開發或者接觸到的軟體系統,就會發覺,其實還有很多我們值得改善的空間,才能讓使用者使用起來會順心。

更多資料可以參考 互動設計(二版) - aNobii - 了解界面如何影響使用者

Tuesday, October 5, 2010

80/20 and Parkinson's law

為了讓做事情有效率,只做關鍵事項,讓剩下多餘的雜事可以捨棄掉,而且用最恰當的時間分配,而不是漫無目標的讓時間就這樣流失掉、浪費掉,我們有兩個定理可以一起來分析,分別是 80/20 法則和帕金森定律。

帕雷托法則(Pareto principle),也稱為80/20法則,此法則指在眾多現象中,80%的結果取決於20%的原因,而這一法則在很多方面被廣泛的應用。如80%的勞力成果取決於20%的初期努力、20%的人做了80%的工作等等。這個法則最初是義大利經濟學家維弗雷多·帕雷托(Vilfredo Pareto)在1906年對義大利20%的人口擁有80%的財產的觀察而得出的,後來管理學思想家約瑟夫·朱蘭(Joseph M. Juran)和其他人把它概括為帕雷托法則。英國一位管理學者帕金森 (Parkinson) 提出一個有名的管理定律,他說「工作會去填滿到可用的時間」( Work expands so as to fill the time available for its completion. )。 這句話的解讀意思是:「時間有多長,工作就會有多長」,如果一個人預期一天要工>作十二小時,他就想辦法填滿這段時間,包含打混摸魚,發呆沒有認真思考。但是若每天只有八小時可利用,他就會設法提昇效率,將要完成的工作在這八小時內做完。

所以現在想兩者套用在一起,我們可以來訂出兩個概念:
1. 針對最重要的事情,用有效的時間,完成限量的工作。(80/20)
2. 縮短工作時數,去達到限量又重要的任務。(Parkinson's law)

針對這樣我們可以最棒的 solution 是定義出:少數困難的任務,但是可以貢獻出最大的收入,且將這任務安排的時間在非常短,且可以看到 Deadlines 到期日。

如果是職員可能會想說每天就是朝九晚五的這樣上下班,而自己出現在辦公室就只是為了做出奴役,所以就懶散把這樣都填滿,因為總覺得有很多時間可以浪費。如果還未訂出事情的重要性,那麼不重要就會變成重要。不訂定到期日,那麼事情就會一拖再拖,慢慢拖,直到未來不確定的項目也淹沒過來。最後會發現每天還有很多沒有完成項目。

所以我們最重要的,要去思考自己現在是否落在這樣的圈套,如果是,快快救救自己吧!重新定義,自己做起時間的主人。

更多資訊可參考 The 4-hour Workweek - aNobii - The End of Time Management

Sunday, October 3, 2010

Objective-C 的歷史演進

C 是個 compiled, procedural programming language,在 1970s 早期由 AT&T 發展出來。Objective-C 是後來 Brad J. Cox 發展出來,把 C 語言再加上了物件導向 object-oriented 概念。將 C 語言混合建築成原始的 Smalltalk。Smalltalk 是早期其中一個知名的物件導向程式語言,在 Palo Alto Research Center (Formerly Xerox PARC) 發展出來的。Cox 將 Smalltalk 的 object 和 message passing 分層建構在 C 語言之上建立出新的語言。這點讓程式設計師可以持續使用熟悉的 C 語言開發,又可以使用物件導向。

在 1980s 年代,Object-C 被主要當作開發語言應用在 NeXTStep 作業系統,也就是 Steve Job 發起的電腦公司 NeXT。NeXTStep 不論精神上和始祖上,皆是 OS X 的前身。一直到現在 iOS 上用的 Cocoa Touch class name 是用 NS 為開頭,像是 NSString 和 NSArray,這都是可以對追朔回到 NeXT。現在最新語言是 Objective-C 是 2.0,在 October 2007 和 OS X Leopard 一起 released 的。強調擁有
"modern garbage collection, syntax enhancements, runtime performance improvements, and 64-bit support" 的新特色。

今日主要應用於 Apple 的 Mac OS X 和 iOS 兩種環境,Objective-C 是 Apple's Cocoa API 主要用的語言。