把我的智能手表从云服务中解放出来

2020-07-25 06:27:01

我经常说,如果我们说服自己相信技术是魔术,我们就有可能成为它的人质。就在最近,我刚刚与这一命运擦肩而过,但幸运的是,我被开源拯救了。

在撰写本文时,Garmin正遭受大规模勒索软件攻击。我也恰好是Garmin本能手表的用户。我对它非常满意,而且在很多方面,这么小的一个包里装了这么多功能真是太神奇了。

为2018#RHKYCATIR活动,划着支腿独木舟环游香港岛《换装赛》!令人叹为观止的海岸线和无与伦比的海港景色。即使在台风摧毁了他们的很多设备后,@RHKYC仍然成功地完成了任务,这给他们留下了深刻的印象。👏👏感谢您的主持!Pic.twitter.com/ECh9nQHDVt。

我认为GPS手表是必不可少的安全设备,特别是对于船的掌舵来说,因为当你离开陆地超过几百米时,很难判断你的水速。如果你被困在逆流中,在没有情境感知的情况下,你最终可能会被冲进大海,甚至更糟。

新加坡周围的水流可能是极端的。当潮汐改变时,南中国海最终会通过新加坡海峡到达安达曼海,导致危险的水流随着时间的推移而转移。因此,在每次划桨之后,我都会将我的GPS数据上传到Garmin Connect云中,并检查路线,部分原因是为了注意到水流潮起潮落模式的危险变化。

虽然将这样的数据上传到Garmin云是一个明显且现实的隐私风险,但我们都熟悉其中的权衡:一天中只有24小时可以担心事情,而这项服务运行得非常好。

我们刚刚用特别不寻常的水流完成了一次划桨,我的划桨搭档想知道我们在几个棘手的地方的速度。我去检索数据和…。我发现加明受到了攻击。

Garmin被扣为人质,短暂地,我的划桨数据也是如此:我生活的一小部分已经成为技术的人质。

我的一群划桨朋友推荐我试试斯特拉瓦。好消息是,Garmin允许从Instsitive Watch中检索数据文件,以便上传到第三方服务。

坏消息是,当我试图在Strava上创建一个账户时,各种各样的警钟都响了。这个网站充满了黑暗的模式,当我点击拒绝Strava访问我的健康相关数据时,我遇到了这个棘手的系列对话框:

点击三次就可以选择退出,如果我没有注意,只是不停地点击底部的框,我可能会意外地选择退出。在这之后,我看到了一张令人毛骨悚然的关注名单(他们是如何从一封电子邮件中知道这么多关于我的信息的?),然后是一个棘手的对话框,如果回答错误,它会把你带到一个地方输入信用卡信息,作为你的“免费试用”的一部分。

因为Garmin至少在硬件上赚了钱,所以收集我的健康数据只是锦上添花;对Strava来说,我的健康数据就是蛋糕。我很清楚,Strava向其投资者推销,他们将通过将我的私人数据(包括我的健康信息)货币化来获得丰厚回报。

这对我来说是个艰难的拒绝。从Garmin到Strava不是把我从人质的处境中解放出来,而是像是走出煎锅,直接进入火里。

所以,尽管这是一个忙碌的下午,…。我计划后天再划船,如果在那之前能有我的船速分析就太好了。此外,斯特拉瓦的经历让我非常恼火,我忍不住开始四处寻找,看看是否能拼凑出我自己的隐私保护替代方案。

我非常高兴地发现了一个名为gpsbabel的开源实用程序(谢谢您gpsbabel!我捐了!)。它可以将Garmin的半(?)专有的“.FIT”文件格式解压成可互操作的“.GPX”格式。在那里,我可以拼凑零碎的XML解析代码,并通过Folium API将其与OpenStreetMaps合并,以创建数据的自定义地图。

尽管在尝试使用Google Maps API时“迷路”了,在我所有的地图分片上留下了一个糟糕的“仅供开发”的水印,但这只花了一个晚上-从各方面考虑,这不是我时间的最佳利用,但主要是找到正确的开放源码部分并用Python将它们粘合在一起(顺便说一句,Python是一种很好的粘合剂,但是一种糟糕的结构材料)。不要用Python建造摩天大楼)。代码质量非常糟糕,但是Python允许这样做,并且它完成了工作。考虑到这些警告,人们可以把它作为更好的东西的起点。

现在我已经完全控制了我的数据,我能够以对我有意义的方式将其可视化。例如,我将我的速度绘制为全程热图,圆圈与当时的速度成正比,悬停文本显示我的瞬时速度和心率:

这正是我需要的数据,格式是我想要的;不多也不少。另外,输出是一个单独的html文件,我只需一个简单的链接就可以直接共享。没有分析,就没有饼干。只是我选择与你分享的数据。

下面是我用来绘制地图数据的代码片段:

就像我说的,不是质量最好的代码,但它可以工作,而且编写起来很快。

更好的是,我不再将我的位置或健康数据上传到云上-在我生活中的另一个监控泄漏点,在质量或便利性上没有任何妥协的情况下,“变黑”有一种某种无形的满足感。

这也是一个有趣的元故事,说明今天的开源生态系统是多么健康和充满活力。当Garmin云崩溃时,我通过将各种开源框架剪切并粘贴在一起,在短短一个下午就替换了它最重要的功能。

开源的意义不在于照例从源代码编译我们的东西。这是一种意识,即技术不是魔术:在发生潜在的人质事件时,我们中的任何人都可以遵循一条面包屑的踪迹来解放我们的数字生活。如果我们愿意,开源使我们能够创建和运行我们自己的基本工具和服务。