上图中,我在笔记本中搜索编程 Python, 在毫秒级的时间里,从 11509 条笔记中,搜出了所有包含 编程/Python 的笔记。

一些问题

我是谁

我是 Evernote 多年老用户,积累了一万多条笔记。

为何放弃 Evernote?

放弃 Evernote,倒不是因为它在产品层面有什么值得吐槽的地方。Evernote 基本满足我日常的所有需求。尤其最近还支持了 markdown。 它肯定是最好的商业笔记软件之一。

放弃 Evernote 的主要原因是我开始关注隐私,最近围绕加密和隐私这个话题写过一些文章:

如果碰巧你也是一个喜欢记笔记或备忘录的人,可能会经常在不同客户端之间同步笔记。有时趴在床上读完书,习惯在平板上写写读书心得;有时在旅途中,记录一些感触;有时在电脑上, 记录一些信息片段。

Evernote 客户端之间数据同步是经由它的云端。根据不同国家的法规,公司的数据需要不同程度上开放给政府审查,对此有兴趣的朋友,不妨去翻翻相关法律法规。此外,在机器学习的驱动下,偷窥用户数据,进而从中淘金,在各大公司里,进展得如火如荼, 看看最近 Siri 和亚马逊干的事,便知道下限有多低了。

苹果已经是在商业公司里,最关注用户隐私的公司之一了。

倒不是说 Evernote 也和这些公司一样混蛋,Evernote 一直给人一种小而美的感觉,我喜欢这个产品,很感谢他们的辛勤劳动,也情愿相信这是一家伟大的公司,但这并不能说服我去信任一个明显存在风险的机制 – 非开源软件, 云端同步数据。

当我在 Evernote 里写下一些思考的时候,总觉别扭,于是私密的东西,我宁可记录在纸上。记录在云端,怕冷不防背后冒出一双眼睛,就像晚自习看小说时,身后的班主任。

那些说你之所以怕被人看到笔记和想法,就是心里有鬼的人。真希望能少做些有罪推定,希望你今后有了孩子,能忍住控制欲,别偷窥 ta 的日记本。

尽管偷窥在这儿有时候是一种文化,我们从小到大,在社会生活的各个方面,也见得多了,但它毕竟是偷窥啊,不能因为这么干的人多就变得合理,不能因为这么干的公司都很成功就变得合理,不能因为整个环境都这样干就变得合理。当然,也不能因为"他们"说这是为你好或者为大家好就变得合理。无论"他们"有多大的权力。

我无法把自己一些私人的想法,交出去让人审查,在我看来这是自由的底线之一。

关于这点,约翰·斯图尔特·密尔《论自由》里已经做了充分阐述.

我深信,在今天,围绕隐私问题的争论,和密尔所处的时代,围绕自由问题的争论是极度相似的。

隐私关乎数字时代的自由。

因为上述的讨论,只能放弃使用商业笔记软件。

Why not OneNote/有道云笔记

原因在上边已经说了。

并不是这些软件的功能不好,只考虑功能,他们几乎都是最佳选择之一。如果考虑隐私,就只能放弃。

对笔记软件的需求

为了实现隐私的目标,客户端开源是必要的,否则你并不能知道软件在背后都干了啥。但开源的笔记软件也有很多,我试用过不少,可能多数都用过。在遇到Joplin之前,一直没一款中意的。

我对笔记软件的需求不算挑剔, 列举出来,无非以下几点:

  • 支持 markdown
    • 注: 大多数开源笔记软件都支持 markdown,商业软件反而许多不支持,Evernote 最近才支持。
  • 支持标签
    • 注: 方便日后整理笔记。
  • 支持快速的搜索
    • 注: 笔记数量一多,大多数开源软件就非常卡
  • 支持保存文件(粘贴截图等)
    • 注: 许多开源软件只允许你粘贴图片连接。但保存本地截图却是我的日常需求。
  • 导出为 PDF
    • 注: 有时要将笔记内容分享给同事,PDF 比 markdown 文本易读。这功能在 Evernote 中需要付费。
  • 跨平台同步功能
    • 注: 我平时使用 MacOS 和 iOS 两个系统,希望有跨平台客户端,他们之间能够同步笔记。而且最好允许我自己架设同步服务器。
  • 支持端对端加密
    • 注: 最好支持端对端加密,这样可以将数据存在不信任的云上;此外也保证在非信任网络里,同步笔记时能确保安全性。

为满足这些需求,我试用过许多开源笔记软件,大多数使用时间都没超过 2 天。我甚至还自己写过一个笔记本软件: WNE(WNE Not Evernote),用了几个月后,又回到 Evernote,原因是不够易用,比如搜索用的是ack-grep

易用性当然也是核心需求。

Joplin

Joplin 是目前满足我所有需求的开源笔记软件。所以我在 APP Store 里的第一个满分评价,就给了它,我评价里说: 关注隐私的Evernote替代物中,Joplin也许是最好的

从 Evernote 中迁移数据

如果你与我一样,是 Evernote 老用户,安装完 Joplin 之后,第一件事,便是从 Evernote 导入笔记 到 Joplin。

我在 Evernote 里有 11509 条笔记,将其从 Evernote 导出到 Joplin,只花了几分钟。笔记导入 Joplin 的时间要短于从 Evernote 导出的时间。

将笔记导出 Evernote

关于如何从 Evernote 导出所有笔记,可以参考如何备份(导出)和恢复(导入)笔记和笔记本

将笔记导入 Joplin

官方文档说的很清楚了: 打开File > Import > ENEX,选择你从 Evernote 导出的文件即可。

跨平台同步笔记

Joplin 支持多种方式同步笔记:

  • Dropbox
  • NextCloud
  • WebDAV
  • OneDrive
  • 文件系统

你可能会疑惑,Dropbox、OneDrive 不都是商业云服务吗?为何一个关注隐私的项目要支持这些云服务?那不如直接使用 OneNote 算了。

情况是这样的,当你使用了端对端加密后,数据只有你自己能加解密。所以可以放心地使用不受信任的网络和云服务,把它当作中间管道使用即可。

我的选择

我的选择是WebDAV,WebDAV 是个开放协议,是 HTTP 的扩展,有利于用户间协同编辑和管理存储在万维网服务器文档。WebDAV 协议为用户在服务器上创建、更改和移动文档提供了一个框架。

同步笔记正是创建、更改和移动文档的一个例子。

我的思路是电脑上跑一个 WebDAV 服务,然后将其用作服务器,在 Joplin 不同客户端之间同步数据。

Joplin 目前支持以下 WebDAV 服务:

  • Apache WebDAV Module
  • Box.com
  • DriveHQ
  • Fastmail
  • HiDrive from Strato. Setup help
  • Nginx WebDAV Module
  • NextCloud
  • OwnCloud
  • Seafile
  • Stack
  • WebDAV Nav, a macOS server.
  • Zimbra

我准备跑一个轻量级且开源的WebDAV服务, 选择了wsgidav (因为比较熟悉 Python),它只是一个Python库。

使用起来很简单:

1
2
3
4
5
# 安装
pip3 install cheroot wsgidav
pip3 install python-pam
# 运行
wsgidav --host=0.0.0.0 --port=8002 --root=/tmp --auth=pam-login

启用pam-login认证之后,WebDAV 服务的登录名/密码就是你当前电脑的登录名和密码。

WebDAV 服务运行起来之后,在 Joplin 客户端做个配置,就可以用起来了。

ps: 如果你是非技术用户, 不建议你自己运行WebDAV服务,简单的方案是,开启端对端加密,然后使用 Dropbox/OneDrive/NextCloud,它同样是安全的。

端对端加密

端对端加密在 Joplin 是个可选项,操作起来十分方面,只是打个勾而已,文档在这儿:关于端到端加密(E2EE),需要注意的是,加密是个重计算量的活,如果你的笔记和我一样多,第一次同步数据最好在睡前,可能要花上一个晚上时间。

Joplin的端对端加密截至2021年还是不稳定:

注意事项

丢失数据

使用 WebDAV 来同步笔记,有个问题需要留意,官方在 FAQ 里有列出: 更改 WebDAV URL 后,我的所有笔记都被删除!

同步数据前,一定记得先导出数据,做个备份!

后记

OneNote

如果你是OneNote用户,关注隐私,也可以很轻松切换到Joplin。现将笔记导出导入到Evernote,再按照上文操作即可。

其他笔记软件用户同理。

参考