文本通讯录

手机上最重要的数据就是通讯录了.当然,现在人们手中不止一个数字设备,在我前文中说到,我日常使用四个数字设备,台式电脑,笔记本电脑,手机,平板.当然,很多人还不止一部手机.所以,通讯录的维护,备份,同步就成了一个问题。你可能会问,难道不是有云端备份同步吗?我今天就要讲一下云端通讯录同步的使用问题,以及我为什么抛弃了云端方案,回归简单文本。

现有方案

其实,我早在没有使用智能手机的年代就开始使用云端服务来管理通讯录了,到今天已经超过15年。但是这个过程中我碰到了许多问题。下面我一一介绍一下现在存在的解决方案。

LDAP

LDAP是上世纪90年代的最新科技,其实并不是一个同步手段。你的通讯录只存在于云端,不存在于本地,由系统管理员统一维护。当然,Exchange也类似。这个方法其实仅适用于组织机构而不适合个人使用。一旦断网,就什么都没有了。

CardDAV

CardDAV是一个开放标准,有很多自由软件的服务端及客户端。利用这些,你可以在任意客户端保持通讯录同步。但这也有问题。第一你需要一个服务。当然可以使用一些开放的服务,但他们总有一些可靠性问题,还有隐私问题。当然,你也可以自己架设服务,毕竟现在VPS这么便宜。但这有一个技术门槛,而且感觉为了这么点事不值当。第二,你需要在各种平台,各种软件里安装插件,记得更改密码等等,这些都是维护成本。

手机自带服务

OPPO手机有OPPO云,华为手机有华为云,都可以轻松一点在多机同步通讯录。但这些都是私有服务,使用非开放标准。OPPO云华为手机用不了,华为云OPPO手机用不了,而且PC端都用不了,更不用提自由软件平台了。

Apple

如果你生活在Apple世界里,当然可以用Apple服务。可惜我不是,而且我不能想像被一个厂商永远束缚是什么样的生活。

Google

当然,也可以使用第三方服务例如Google,协议开放,支持所有客户端。但可惜的是,中国国内用不了。而且,你真的那么愿意信任Google吗?

小众服务

也有第三方小众服务,而且在雷达屏幕之下,尚未被中国长城屏蔽。国内原生的,使用开放标准协议的小众服务我至今没有找到过。另外,可靠性和隐私都是问题。

我的处境

之前,由于历史原因,我同时使用三到四种服务。可惜的是,这多种服务之间是互相隔离的,我在手机上看到的是所有服务的并集。如果一不小心几个服务之间的通讯录条目有重叠,结果就很有意思了。我在手机上输入新的通讯录条目也要谨慎小心,要输到我真的想输的子集里。否则同步之后,在不同服务中迁移条目相当困难。还有一次我在异国他乡,一段时间没有数据连接,突然间一部分通讯录条目蒸发不见,好几天都没有发现。

我终于意识到唯一可靠的就是本地存的通讯录。我需要的不是同步,而是能够简单把整个通讯录拿出来,整理,再放回去。毕竟,通讯录数据量很小。我经过一番整理后的通讯录不到一千个条目,其中大多数人我都不知道是谁了。总体通讯录vCard文件输出只有100KB,在这个年代这个数据量可以忽略不计了,我就是每天拷贝一次,消耗的时间和数据流量仍在噪声里。增量同步完全没有经济意义。

最后,目前我使用的所有平台所有软件都支持vCard文件导入导出,这已经是业界通用的标准了。数据格式已经不存在兼容性问题。

新的方法

现在,我的通讯录的标准版本保留在我的云主机上,以org-mode文本格式存放。我之前介绍过Org-mode,它的一个功能是在文本文件中维护一个小型半结构数据库,并提供结构化编辑和快速查询的方法,这正是我对通讯录的要求。我用git对这个文件做版本控制,并把它和我云主机的所有文件一同备份。我另外写了一个简单perl脚本,把org文件转换为通用的vCard文件,拷贝到我所有终端。在终端上我不定期的把本地的通讯录清空,然后一股脑把整个通讯录导入。

目前,这个方法运行良好,我已经停用了所有通讯录同步服务。还有几个小问题:

  • 要尽量避免在手机终端上编辑通讯录,所有数据录入在云主机emacs上完成。当然我所有平台,包括手机都可以ssh我的云主机。
  • 手机导入过程不是完全自动化,还需要手动选中所有条目,删除,再从文件中导入。要是能脚本控制的话就好了。
  • 手机导入速度有点慢。我导入前通讯录全空,但手机导入速度仍只有每秒几条,速度不够理想。好在一旦开始就不需要管了。

行事历呢?

通讯录和行事历是个人信息系统里的哼哈二将。理论上,行事历也可以做与通讯录同样的处理。行事历的iCalendar文件的格式和vCard文件类似,各平台兼容性也很好,而且数据量还更小。但是,行事历的变化比通讯录快的多,稍稍过时的通讯录问题不大,但稍稍过时的行事历问题就大了。但行事历有一大好处,就是它其实不需要多平台同步,一直留在我手机里就好了,反正我也离不开手机不是?所以不需要同步,只需要备份。能常常把iCalendar文件导出再备份就好,这实现很简单,也不需要云服务。

结束语

我的方法不一定适合别人,看起来也像回到了80年代。但是技术上不一定越新潮越好用,鞋子合不合脚只有自己知道。