级别: 中级 Paul Ferrill, CTO, ATAC
2009 年 4 月 08 日 这个 系列的文章 展示如何使用基于 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 解释器:
对于运行最新版本的 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 集成开发环境,并完成了对不同版本的所有测试。
参考资料 学习
获得产品和技术
讨论
关于作者  | |  | Paul Ferrill 已经为计算机出版物撰写文章超过 20 年了。他最初为 PC Magazine 撰写关于 LANtastic 和 Novell Netware 的早期版本等产品的评论。Paul 拥有 BSEE 和 MSEE 学位,曾经为许多计算机平台和体系结构编写过软件。 |
对本文的评价
|