歡迎您光臨本站 註冊首頁
  
這個 系列的文章 展示如何使用基於 Linux 的 Nokia N810 Internet Tablet 及其內置 GPS 接收器構建感知全球定位系統(GPS)的應用程序。在這個分 3 部分的系列文章的最後一篇,您將完成開發 GPS 行程跟蹤器(trip tracker)的最後一步,並準備發布它。

這個分 3 部分的系列的 第 1 部分 和 第 2 部分 介紹了用於為 Nokia N810 Internet Tablet 構建感知全球定位系統(GPS)的應用程序的工具和技巧。編寫該程序的想法源自跨國家庭旅行和一個經常被問到的問題:“我們到了沒?”如果有一個內置了 GPS 的可編程設備,就很容易得到答案。只需裝載一些路標,就可以放心地出發。

當應用程序的第一次迭代完成時,顯然需要做出一些改進,使程序可用性更好。實際上這與其他軟體產品沒什麼不同。關鍵是為收集用戶反饋提供方便,然後對程序作必要的更改,融入新的特性。要想讓用戶滿意,修復所有 bug 也是非常重要的事情。

在開始發布新的應用程序之前,有很多問題需要解決。可以選擇在任意數量的軟體發布站點上託管項目,不過對於像本文中這樣的項目,Maemo 站點 是最好的選擇,因為它惟一的目標平台就是 Nokia Internet Tablet 系列。如果想收集用戶反饋,那麼需要提供一個 Web 站點,或者至少提供一個 e-mail 地址。

部署

Maemo 平台使用 Debian 包發布軟體。在確定如何打包要發布的應用程序方面,Nokia 為 tablet 開發人員提供了很好的幫助。Maemo.org 站點提供了一套完整的教程來指導您完成該過程,同時最新發行版(Diablo)還附帶了共 545 頁的參考手冊。實際上,為了讓應用程序正確運行,需要創建一個 .deb 文件並包括所有必要的內容。

由於這個應用程序使用 Python,為了確保程序能夠運行,還必須做一些事情。大多數現代 Linux® 發行版在默認安裝中都包括 Python,所以通常可以認為已經有了 Python 解釋器。運行基於 Python 的應用程序需要在主要源文件的開頭包括像下面這樣的一行代碼,從而啟動 Python 解釋器:

#!/usr/bin/python2.5  

對於運行最新版本的 OS2008 的 N810,應該在默認位置 /usr/bin 安裝 Python version 2.5.2。第一行中的 #! 指示命令行解釋器嘗試執行 /usr/bin 目錄中的文件 python2.5。然後,它將文件剩下的部分作為 Python 解釋器的輸入。

主腳本或源文件必須將其文件屬性設置為允許執行。可以用 CHMOD 命令手動設置,或者使用安裝工具自動完成。Python 提供了多種方法用於安裝應用程序,包括將源文件編譯成一種更緊湊的格式。對於本項目,我決定採用標準的 Python 安裝工具,不編譯代碼。

Python Distribution Utilities(Distutils)提供了基本工具用於將文件複製到適當的位置,並最終安裝軟體(請查看 參考資料 中一篇優秀 Distutils 教程的鏈接)。這裡只需創建如清單 1 所示的一個名為 setup.py 的文件。


清單 1. 用於安裝程序的 Python setup 常式(setup.py)
				  from distutils.core import setup    setup(name='pyRWeThereYet',         version='1.0.0',         scripts=['pyRWeThereYet'],         data_files = [                      ('share/pixmaps',             ['RWeThr_icon_26x26.png']),                      ('share/applications/hildon', ['pyRWeThr.desktop']),                      ]        )  

PyMaemo 教程(請參閱 參考資料)很好地描述了這個過程,並提供了一個樣例 “hello” 應用程序。在 N810 上安裝應用程序的另一種方法是使用 .install 文件來完成 “一鍵式安裝”。該文件是一個簡單的文本文件,其中包含關於可將應用程序下載到其中的儲存庫的信息。

最後,需要在設備上測試部署,不過可以使用 Scratchbox 或 ESbox(用於 Eclipse 的插件,參見 參考資料)發現 bug。可以在不使用設備的情況下逐步完成整個測試,直到一切都符合預期。對於整個開發過程也是如此,但是,對於像 GPS 這樣需要依賴硬體的,還是需要使用設備。

bug 報告和修復

大多數開源項目都使用某種 bug 報告和跟蹤工具來幫助管理用戶提出的意見。比較著名的有 Sourceforge,將開源項目放到 Sourceforge 上是不錯的選擇。Google 也有類似的東西(請參閱 參考資料)。Maemo.org 為與 Maemo 開發平台相關的項目在 Garage 站點(請參閱 參考資料)上提供了基本相同的功能。

wiki 也是一種很好的方式,它可以方便收集用戶反饋和提供程序文檔和信息。Trac 是一個基於 Web 的軟體項目管理工具,其中包括一個用於管理項目文檔和筆記的 wiki(請參閱 參考資料)。對於開發人員來說,跟蹤 bug 和改進請求以及做出的相應更改十分重要。可以在具有團隊 Read-Write 訪問權的 Wiki 上完成這些事情。

源代碼控制是跟蹤軟體修改的一個關鍵。對於本文這樣的小項目而言,執行源代碼控制有點小題大作,但是對於具有較多模塊的項目而言,這樣做可以節省時間。如果源代碼很好地實行了模塊化,那麼需要有一種方式來跟蹤應用程序在每次發布時包含了哪些模塊(和版本)。

Concurrent Versioning System (CVS)是最早的版本控制包之一。CVS 是開放源代碼的,幾乎可用於任何平台。Subversion(SVN)則是另一款可用於所有平台的開源工具。GIT 是用於版本控制的最新工具之一,它最初是由 Linus Torvalds 創建的。對於有快速合併和分支之類需求的分散式團隊來說,它有很多特別有用的特性(請參閱 參考資料,獲取這些工具的鏈接)。

Eclipse 集成開發環境(IDE)為 CVS 和 Subversion 提供了掛鉤(hook)。如果您想詳細研究這個過程,IBM® developerWorks® 上有一篇很好的文章討論如何結合 Eclipse 使用 CVS。對於 Subversion 支持,則有 Subclipse — 一個 Eclipse 插件,其中包括一個圖形化修改工具(請參閱 參考資料)。用於 Eclipse 的 GIT 插件也正在開發中,您可以在 GitWiki 站點 上了解它。





迭代開發

以迭代方式開發應用程序就是根據用戶反饋做出增量改進。第 1 步是產生一個初始發行版供用戶測試。對於我來說,用戶就是我的家人,反饋形式就是直接交流。應用程序的第 1 版可以運行,但是沒有提供一種方式讓用戶輸入路標。您可以獲得與前一個地點的距離,但是僅此而已。無論如何,它實際上只是一個概念證明,因此 0.1 版的預期是非常低的。

這為很多軟體開發項目提供了一個很好的觀點。當有了程序的一個版本時,收到像 “這個程序確實簡潔,但是可以讓它這樣做嗎?” 這樣的反饋並不鮮見。需求誘導(requirements elicitation)這個過程讓軟體設計師或工程師可以嘗試發現特定應用程序的所有功能和特性。但是這種方法的問題在於,用戶常常並不真正知道他們想要什麼,經常改變想法,或者想到其他的東西。

對於這個項目,新的需求實現起來並不難。0.2 版增加了按經度和緯度輸入感興趣的位置的功能。可以添加感興趣的地點的確不錯,但是如果輸錯了地點,或者需要編輯或刪除已有的條目,又該如何呢?這些新的需求又導致了 0.3 版。對輸入欄位進行某種檢查,這是一個不錯的主意。對於北美而言,經度和緯度數字有一個合理的上下限。增加這些檢查后,又引出一個用戶 bug 報告,稱發現一個潛在的有誤的距離計算。最後發現起因是用戶在輸入經度時有誤(少了減號 [-]。

理解實現新需求的成本對於在合理的時間內產生新的版本非常關鍵。有些特性請求偏離了原始的應用程序,常常超出了時間和資源可以承受的範圍。還有一些特性請求則超出了硬體可以提供的容量。對於本項目,除非將設備連接到手機,否則不可能提供持續的實時位置更新 — 雖說這並非完全沒可能,但是要支持這一個特性請求,需要增加大量的代碼。





最終發布

對於任何軟體項目,一個最大的挑戰是知道何時宣告勝利。Google 實行的做法是在很長時間內使項目處於 “beta” 階段。對於本項目,當修復了當前所有的 bug,並且實現了所有用戶改進時,就可以歸檔最終的發行版。

為了使應用程序儘可能地接近商業質量,還需要做一些收尾工作。在 N810 應用程序啟動器中創建一個入口點,將使用戶可以更容易地啟動程序。Maemo 使用 .desktop 文件確定啟動應用程序所需的細節。對於這個 GPS 應用程序,它看上去如清單 2 所示。


清單 2. desktop 文件的內容
				  [Desktop Entry]  Version=1.0.0  Encoding=UTF-8  Name=GPS Are We There Yet?  Exec=/usr/bin/pyRWeThereYet  Icon=hello_icon_26x26  Type=Application  

在 freedesktop.org wiki 站點可以發現更多關於 .desktop 文件的信息。另一個很好的收尾工作是提供一個圖標。對於 Maemo 環境,需要創建一個 26 X 26 像素的圖像,並將它保存為 Portable Network Graphics(PNG)格式。可以使用 GNU Image Manipulation Program (GIMP)之類的程序創建自己的圖像,也可以用 Google 找到一個接近的圖像,再相應地作一些修改。





結束語

這個分三部分的系列文章探討了為 Nokia N810 開發應用程序的過程,探討時更強調中間的步驟,而不看重最後的結果。為小型設備開發應用程序要面臨獨特的挑戰,但是與任何其他平台相比並無太大差別。做好任何軟體開發項目的訣竅無非是在每個階段做出明智的決定。

構建軟體應用程序是一門科學。有很多方式可以實現您對軟體的任何想法。創建視覺上引入注目的用戶界面(UI),在這一點上有設計眼光的人比通常的軟體開發人員做得更好。同樣的道理,您應該會希望讓擁有數學背景,而不是英語專業的人來計算您的工資扣款。

實際上,開發軟體是具有清晰定義的步驟的一個過程。您使用的方法學可能與其他開發人員不同,但是實際上都要完成相同的任務。使用戶參與到開發當中,或者至少使用最早的原型和 alpha 版本獲得用戶的反饋,這樣有望使項目步入正確的軌道。

為 Nokia N810 開發應用程序是一種享受。開發人員工具和社區論壇為此提供了大量的資源。它仍是當前市場上最小的基於 Linux 的計算機之一。雖然與其他同類相比,它也許不是最強大的設備,但是它擁有實現本項目的 GPS 距離計算器所需的所有功能。

我要感謝和承認我 19 歲的兒子 Micah 所做的貢獻,他幫忙完成了本系列文章中用到的 Python 代碼。他還針對 N810 配置了 Eclipse 集成開發環境,並完成了對不同版本的所有測試。(責任編輯:A6)



[火星人 ] 為 Nokia N810 開發感知 GPS 的應用程序,第 3 部分: 完成最後的任務已經有522次圍觀

http://coctec.com/docs/linux/show-post-68935.html