Dash Express

作者:Kyle Rankin

我每天在车里度过大量时间。像许多在旧金山湾区工作的人一样,我的通勤距离很长——单程 60 英里。我已经学会了调整通勤时间以避开最糟糕的交通,但我仍然每天在车里花费大约三个小时。我尝试过各种 GPS(全球定位系统)设备,但由于我的大部分时间都花在去同一个地方,我通常不需要很多驾驶方向。GPS 设备会一直闲置,直到我旅行或去一家新餐厅,但这只是偶尔发生。

Dash Express 简介

现在,我至少和下一个 Linux 极客一样喜欢小玩意,所以当我第一次听说 Dash Express GPS 时,我立刻被它吸引住了。基本上,Dash 创造了一种新的 GPS 设备,目标是通勤市场。这款 GPS 增加了一个 GPRS 蜂窝连接,因此它在您驾驶时始终保持互联网连接。互联网连接可用于获取新的软件更新和地图,但互联网连接的主要卖点之一是改进的交通、路线和搜索数据。Dash 网络匿名跟踪每个 GPS 设备,并将其数据与交通传感器和其他数据点结合起来,以评估最新的交通数据,然后与每个 Dash 用户共享。

当您进行搜索时,互联网连接还允许 Dash Express 从其他互联网服务获取信息。除了内置的兴趣点数据库外,您还可以搜索 Yahoo,查找从最近的咖啡店到附近最好的寿司店的任何信息,因为 Yahoo 搜索不仅返回位置,还返回每个结果的评分。

对于我和其他 Linux 用户来说,Dash 最有趣的方面之一是该设备的开源性质。首先,硬件本身运行 Linux。该硬件实际上类似于 OpenMoko 手机中使用的硬件。此外,Dash 还开放了其 API,因此感兴趣的各方可以注册成为开发者,并编写自己的应用程序在 Dash Express 上运行。在本评测的后面部分,我将谈谈我自己编写 Dash 应用程序的经验。

价格

当然,GPS 设备和蜂窝连接不是免费的。Dash Express 目前零售价为 299 美元,包括三个月的免费蜂窝连接。之后,蜂窝连接的费用为每月 12.99 美元(按月合同)、每月 10.99 美元(一年合同)和每月 9.99 美元(两年合同)。如果您选择不续订蜂窝连接,该设备仍然像标准 GPS 一样工作,但您将无法再使用 Send2Car、Dash 应用程序、Yahoo 搜索和其他需要互联网的功能。

标准 GPS 功能

尽管互联网功能可能看起来很酷,但 GPS 设备仍然需要能够找到您的目的地并正确地为您规划路线。此外,如果您不续订蜂窝连接,您希望知道该设备仍然有用。但是,首先,让我指出房间里的大象。关于 Dash Express,您首先会注意到的事情之一是,与其他现代 GPS 设备相比,它很大(4.8 英寸宽 x 4.1 英寸高 x 2.8 英寸深,重 13.3 盎司)。虽然设备的正面与其他设备的大小大致相同,但它的厚度与几代前的 Garmin GPS 相当。除了厚度之外,设备的顶部实际上向后延伸了几英寸,呈 L 形,并容纳了扬声器。不幸的是,这意味着您无法将 Dash Express 存放在口袋里,甚至可能无法存放在小型手套箱中。

安装非常简单,开箱即用,该设备将连接到蜂窝网络(或开放的 Wi-Fi 接入点)以实现任何互联网功能。与某些其他 GPS 设备相比,界面本身得到了简化,并且几乎完全依赖触摸屏进行输入,除了设备顶部的物理菜单和音量按钮。当您计算路线时,您将从主地图屏幕上看到和听到逐向导航。界面非常简洁(图 1),大部分屏幕被地图占据。

Dash Express

图 1. Dash Express 界面

作为一款独立的 GPS,Dash 只能算一般。有几次我搜索一家企业,结果发现当我到达那里时,它已经倒闭了。路线规划也不是完全完美,似乎更倾向于更大的高速公路和更直接的路线,即使它们速度较慢。我的城镇在高速公路上有四个不同的出口,但即使第一个出口是最快的,Dash 总是通过不同的出口规划路线。在我的通勤路线上有一个特别糟糕的瓶颈,偶尔会堵塞数英里。在瓶颈之前有一条通往我家的备用路线,通常需要更长的时间,除非瓶颈处交通非常拥堵,但 Dash 似乎没有意识到这是一条备用路线。

Dash 似乎正在积极处理路线问题。您可以直接从设备报告问题,它会将所有日志和有关您当前位置的其他信息打包成 tar 文件,并通过蜂窝连接发送给 Dash。一旦您回到家,您将在您的收件箱中看到一封电子邮件回复,您可以访问 Dash 的网站填写您的问题的详细信息。事实上,我报告了一个关于绕过瓶颈的路线问题,Dash 很快做出了回应。显然,其地图和路线的下一个迭代版本在内部没有这个问题,因此据推测,我的问题将在下次更新时得到修复。

连接的 GPS 功能

有很多不同的 GPS 设备可供选择,但 Dash Express 是第一款在其设备中包含蜂窝连接的设备。这确实是使其与竞争对手区分开来的主要功能,因此这种额外的功能更具吸引力就显得尤为重要。那么,互联网功能表现如何呢?

当 Dash Express 有蜂窝信号时,您将在主菜单的搜索按钮上看到“已连接”字样。没有蜂窝信号时,您只能执行本地搜索,其余搜索选项将灰显。连接后,搜索窗口中的默认输入框会在 Yahoo 中搜索您输入的关键词。除了 Yahoo 搜索外,还有许多已保存的搜索类别,包括机场、食品、加油站和电影院。“加油站”和“电影院”已保存的搜索特别使用了互联网连接。“电影院”搜索不仅会显示您所在地区的电影院,还会列出当前的放映时间。对于“加油站”搜索,每个结果还包括当地的汽油价格以及收集该信息的最新时间。您还可以按价格对结果进行排序,这使得快速轻松地找到您所在地区最便宜的汽油成为可能。

互联网连接最受吹捧的功能之一是实时交通信息。正如我之前提到的,Dash 匿名收集所有 Dash 设备的位置信息,并将其与可信的道路传感器、商业车队的信息和其他数据源相结合,以创建它所谓的 Dash 网络。在主地图屏幕上,每条有交通数据的街道都会以颜色编码显示。绿色代表交通良好;黄色表示轻微拥堵;橙色,中度交通;红色表示交通拥堵。此外,当交通信息来自其可信的 Dash 网络时,Dash 使用实线,而当信息来自不太可信的来源时,则使用虚线。因此,基本上,如果其他使用 Dash Express 的人在我前面的同一条路上,我可以获得非常准确的交通信息。当您开车前往目的地时,如果 GPS 设备检测到前方有交通,您将在屏幕上收到警报,并可以选择计算备用路线。

Send2Dash 是更直接的互联网功能之一。通常,GPS 更令人讨厌的功能之一是在触摸屏上输入地址。使用 Send2Dash,您可以登录到 Dash 网站上的自定义门户,输入地址,然后将其发送到您自己的 Dash,它会在下次启动时显示。这使得构建地址簿变得非常简单方便。甚至还有一个 Firefox 插件,因此您可以突出显示地址,然后右键单击并选择“发送到汽车”。

Dash 上支持互联网的功能——特别是增强的搜索——是非常棒的功能,尤其是“加油站”搜索。Yahoo 搜索作为内部目的地地图的补充和第二意见也运作良好。然而,交通状况喜忧参半。当它准确时,它就成了救命稻草。需要一些时间和对地图的熟悉才能解释轻度、中度或重度交通的真正含义,以及对虚线这种不太可靠的交通线路给予多少权重。但是,一旦您弄清楚了,您就可以在通勤时提前搜索,并且经常在问题影响您之前发现问题。

不利的一面是,交通信息并不总是像我希望的那样“实时”。我见过一两种情况,我处于相当严重的拥堵甚至停滞的交通中,Dash 在几分钟后才更新。当然,也许我是在湾区帮助其他 Dash 社区的煤矿里的交通金丝雀。我知道 Dash 正在努力改进交通报告,但就目前而言,我建议使用 Yahoo Traffic Incidents Dash 应用程序等来补充 Dash 数据。

Dash 应用

就像苹果的 iPhone 一样,Dash 允许第三方编写自定义应用程序“Dash 应用”以在设备上使用。这些应用程序可以轻松地从 Dash 的 Web 门户添加,到目前为止,所有应用程序都是免费的。有很多有趣的应用程序,但以下是一些更值得注意的应用程序

  • Trapster—搜索和报告您路线上的测速陷阱和闯红灯摄像头。

  • Weatherbug—您所在位置或目的地的天气预报。

  • Yahoo Traffic Incidents—您路线上的事故或交通减速。

  • Trulia—当地可用的房地产及其价格。

  • Baktrax—当地广播电台列表以及它们播放的最后几首歌曲。

总而言之,Dash 应用程序是目前拥有 Dash Express 的更令人信服的理由之一。正是这些程序将 Dash 从您迷路时使用的标准 GPS 转变为您每天在仪表板上使用的 GPS。

开发 Dash 应用

今年早些时候,Dash 向社区开放了其 API,因此任何人都可以注册成为网站上的开发者并编写自定义 Dash 应用程序。从那时起,API 得到了更新和扩展,增加了一些新功能,并且似乎仍在积极开发中。即便如此,Dash 论坛中似乎已经涌现出一个非常活跃的开发者社区,并且网站上已经提供了相当多的社区开发的 Dash 应用程序。

我想看看开发我自己的 Dash 应用程序有多容易,所以我下载了最新版本的 API 文档,在网站上注册成为开发者,并从我在论坛上找到的示例 PHP 程序开始。本质上,当您使用 Dash 应用程序进行搜索时,Dash Express 会向您指定的 Web 服务发送 HTTP GET 请求,其中包含一些变量,包括 Dash 的 GPS 位置以及可能来自 Dash 本身文本输入窗口的自定义值。您的 Web 服务以一些基本 XML(结构在 API 文档中定义)格式回复其结果,然后 Dash 会显示这些结果。以下是 Dash 接受的 XML 输出示例

<?xml version="1.0" encoding="UTF-8"?>
<resultSet><serviceId>10114</serviceId><count>1</count>
<sort>di</sort>
<result><title>Title</title>
<point>38.2440154167-122.6531425</point>
<description>requestType->search   serviceId->10114
point->38.24401541666667 -122.6531425   count->20   
offset->0   sort->null signature->ed002f9a2f86013c9affd8d9e1b9f90e   
</description><address>12000 San Jose
Blvd</address><city>Jacksonville</city>
<regionCode>FL</regionCode><countryCode>US</countryCode>
<postalCode>32223</postalCode></result></resultSet>

这么多年过去了,我仍然倾向于使用 Perl 来处理这类事情,所以我做的第一件事是将示例 PHP 脚本移植到 Perl。一旦我让它正常工作,我决定尝试编写一些真正有用的东西。我还没有准备好深入研究从 Google 地图等网站获取位置数据,所以我决定编写一些更基本的东西。我计划编写一个应用程序,它将当前里程作为输入,然后从基本 CSV 文件中读取数据,并报告在正负 10,000 英里范围内到期的任何维护。CSV 文件中的第一列是维护到期时的里程,第二列是维护的描述,第三列是可选的,但有一个 1 或 0,具体取决于任务是否完成。以下是文件中的一些示例行

151000,Change Oil,1
156000,Change Oil and Filter,1
161000,Change Oil
160000,Replace Tires
180000,Replace Coolant
160000,Replace Air Filter

列表 1 显示了从文件中读取数据并为 Dash 输出 XML 的脚本。

列表 1. 脚本

#!/usr/bin/perl

use CGI qw(:standard);

my $infile = 'maintenance.txt';
my $mileage_range = "10000"; # Only show entries within this range

if(param())
{
   $requestType = param("requestType");
   $serviceId = param("serviceId");
   $point = param("point");
   $count = param("count");
   $offset = param("offset");
   $sort = param("sort");
   $signature = param("signature");
   $mileage = param("q");
   my %hash;
   my $items = 0;

   parse_infile($infile, \%hash);

   foreach (sort keys %hash){
      if(abs($_ - $mileage) < $mileage_range){
	 next if($hash{$_}{'c'} == 1);

	 $delta = $_ - $mileage;
	 if($delta >= 0){
	    $title = "$_ - $hash{$_}{'desc'}";
	    $desc = "<![CDATA[<html>In <b>$delta</b>
 ↪miles:<br>$hash{$_}{'desc'}</html>]]>";
	 }
	 else {
	    $title = "PAST DUE: $hash{$_}{'desc'}";
	    $desc = "<![CDATA[<html><font color=#FF0000>
  ↪<b>" . abs($delta) . "</b> miles <i>PAST DUE</i>
  ↪</font>:<br>$hash{$_}{'desc'}</html>]]>";
	 }

	 $output .= output_result($title, $desc);
	 $items++;
      }
   }

   print header('text/xml');
   print '<?xml version="1.0" encoding="UTF-8"?>'
            . "\n<resultSet>"
            . "<serviceId>$serviceId</serviceId>"
            . "<count>$items</count>";

   print $output;
   print '</resultSet>';
   exit;
}

sub output_result {
   my $title = shift;
   my $desc = shift;
   my $output;

   $output =  "\n<result>"
            . "<title>$title</title>"
            . "<description>$desc</description>"
            . '</result>';

   return $output;
}

sub parse_infile {
   my $infile = shift;
   my $href = shift;
   my ($mileage, $desc, $completed);

   open INFILE, $infile or die "Can't open $infile: $!\n";
   while(<INFILE>){
      chomp;
      $mileage = $desc = $completed = "";
      ($mileage, $desc, $completed) = split ',', $_;
      $$href{$mileage}{'desc'} = $desc;
      $$href{$mileage}{'c'} = $completed;
   }
   close INFILE;
}

它非常基本,但它可以工作。从测试 PHP 脚本到编写最终应用程序的整个过程只花了大约两个小时。一旦您编写了程序,您就可以通过 my.dash.net 网站上的界面创建新的 Dash 应用程序实例,并将其添加到您保存的搜索中。您还可以选择将程序保留给自己,或者您可以将其公开,以便任何 Dash 用户都可以使用它。

为 Dash 开发应用程序的简易性对我来说绝对是一个加分项。其 API 仍然存在一些限制(例如,在撰写本文时,用户输入只有一个文本框可用),但 API 似乎仍在大量开发中,并且已经进行了功能更新。即使是现在,如果您有一些想象力和一些编程能力,您也可以编写一些非常有用的应用程序。

破解 Dash

好吧,我忍不住了。这是一个我知道运行 Linux 的设备,它不仅具有 GPRS 连接,还具有 Wi-Fi 连接。一定有办法在这个东西上获得 Linux 提示符。

首先,我让 Dash 与我的家庭 Wi-Fi 关联,然后尝试 SSH 连接到它。事实证明,它实际上确实在监听 SSH;但是,我不知道密码(甚至是否有密码,我还没有机会尝试 SSH 暴力破解攻击),并且它可以使用 SSH 密钥。

Dash Express 的侧面确实有一个 USB 端口,甚至还附带了一根 USB 电缆,用于将其连接到您的计算机,但目前,除了为电池充电外,该端口没有其他官方用途。当您将其连接到 Linux 时,dmesg 给出了一些希望

Sep  1 21:53:11 minimus kernel: [ 1447.814648] 
 usb 2-1: new full speed USB device using uhci_hcd 
  and address 2
Sep  1 21:53:11 minimus kernel: [ 1447.880419] 
 usb 2-1: configuration #1 chosen from 2 choices
Sep  1 21:53:11 minimus kernel: [ 1448.182503] 
 usb0: register 'cdc_ether' at usb-0000:00:1d.1-1, 
 CDC Ethernet Device, d6:a5:89:03:18:fe
Sep  1 21:53:11 minimus kernel: [ 1448.182834] usbcore: 
 registered new interface driver cdc_ether
Sep  1 21:53:12 minimus dhcdbd: message_handler: 
 message handler not found under /com/redhat/dhcp/usb0 
 for sub-path usb0.dbus.get.reason

因此,该设备确实显示为某种 USB 以太网设备。在互联网上进行了一些研究后,我找到了一个页面,描述了 OpenMoko 手机如何具有类似的连接,但不幸的是,如果 Dash Express 为自己分配了一个静态 IP,它并没有使用与 OpenMoko 相同的 IP。我在所有私有 IP 空间上尝试了 nmap 主机发现,甚至从 USB 网络收集了几分钟的数据包,看看是否有任何线索,但到目前为止,我还没有能够进入该设备。

结论

总的来说,Dash Express 是一款非常有趣的 GPS 设备。我内心的 Linux 用户想要支持弱者,特别是如果这个弱者使用 Linux 作为设备上的操作系统。我内心的程序员真的被开放的 API 以及在设备上编写自己的应用程序并使用来自开发者社区的应用程序的能力所吸引。我内心的通勤者喜欢旨在提供准确交通数据的设备。我内心的电子产品发烧友喜欢在 GPS 设备中添加互联网连接的概念,并且真的对这种改进带来的潜力感兴趣。

归根结底,潜力是 Dash Express 的关键词。今天,Dash 是一款非常有用的 GPS 产品,具有一些先进的搜索功能和 Dash 应用程序,这是其他竞争对手所没有的——只是在一些更基本的 GPS 功能方面存在一些粗糙之处。这个平台的整体潜力对我来说是最有吸引力的。我知道粗糙的部分正在积极地改进,与此同时,社区已经为该设备添加了一些很棒的新免费功能。只要 Dash 能够对其用户特别是其开发者保持响应(并且也许让我们 Linux 极客一窥幕后),我认为它就是极客的 GPS。

资源

Dash 官方网站: www.dash.net

Dash 用户门户: my.dash.net

Kyle Rankin 是旧金山湾区的高级系统管理员,并且是许多本书的作者,包括 O'Reilly Media 出版的 Knoppix HacksUbuntu Hacks。他目前是 North Bay Linux Users' Group 的主席。

加载 Disqus 评论