这个系列总结一下自己的笔记系统。 先说下目前采用的笔记方案。
- 日记和一些个人文档,使用Joplin+webdav的同步。
- 个人笔记,使用OneNote。
- 网络信息收集,有道云笔记。
- 笔记的临时分享。SimpleNote。
演化
小学时候因为61节发了一个小的日记本开始写日记,但是没坚持多久就放弃了,中学时候班主任要求写日记,后来老师不再要求了,但是已经形成习惯就一直到大学毕业开始工作很长时间。
那时候都是用纸质笔记本,现在偶尔翻起来随着时间的流逝而有着不同的感受。后来开始陆续用Lotus Note,eDairy在电脑上开始用电子格式来记录。但是由于电脑故障没有备份的那部分就永久的丢失了。
然后是智能手机时代,尝试了wiz大概一年多,再后来换到手机版的素记。对于Wiz虽然有同步功能,也支持跨平台,最终让我放弃的还是对隐私的顾虑,虽然wiz宣称支持证书对单个文件进行加密,但是毕竟处理过程不可见,存储的格式和内容也不可见,对于不可见的东西还是对宣称的东西多一点敬畏。
素记是纯手机app,并且通过icloud实现备份,对于可以要求交出用户数据的FBI说no的apple,我主观上还是会多一点信任。放弃素记主要是因为内容导出不方便,并且在导出时候只支持email和pdf,前者会自动保存在邮箱系统的draft里而同步,后者有一个长内容截断的bug。基于以上的考虑,会在选择方案时候主要考虑如下因素。
需求
- 私密性: 只有在授权的情况下才可以查看内容。
- 可用性: 不会因为设备的丢失或故障导致内容丢失。
Joplin
Joplin是一个开源的笔记软件,可以看到实现的细节,这保证了在对于信息的处理上对于隐私的保护要好太多。在默认的情况下,所有的信息是保存在本地磁盘,所以对于私密性的要求上,只要设置了bios开机密码和开启bitlocker,应该可以在易用性和私密性之间达到一个很好的平衡了。
因为内容是放在个人电脑上,但是并不是所有时间都方便使用,所以如果可以在多终端访问就好了。Joplin支持多端系统包括ios。考虑到可用性,能够在手机和电脑之间进行同步这个特性就非常期待了。而云端同步也是不少笔记软件的一个基本功能,但是基于上述的描述也自然的会不考虑商业和闭源的产品了。
同步
Joplin支持第三方的云同步产品,比如DropBox,OneDrive等。一开始我采用的是OneDrive作为云同步服务,但是可能是服务器在境外的原因吧,同步的过程非常慢,并且很容易失败,目前没有自动重试的机制,会出现版本冲突的情况。
所以考虑使用国内的服务,但是支持webdav的不多,坚果云算是其中一个吧,Free版本每个月有1G的上传和3G的下载流量限制,但是也是足够了。
坚果云设置
- 首先需要申请一个坚果云的账号。
- 登录后在右上角点账号下拉菜单,选择账户信息
- 选择安全选项
- 点添加应用
- 将生成的密码保存
Joplin设置
设置中选择"Synchronization"。目标选择”WebDav“,然后分别填入如下信息。
- WebDAV URL: https://dav.jianguoyun.com/dav/Joplin
- Username: 坚果云的用户名
- Password: 上述步骤中的密码而不是登录密码
更新: 坚果云速度不错,但是免费账户有api call限制,文档多或者重新同步会出现api call limitation的问题。所以后来换到box的webdav。 地址为
https://dav.box.com/dav/<note folder>
加密
但是和其他笔记内置的同步不同的是,Joplin在第三方存储的内容对你是可见的。当文档同步后,可以在坚果云的存储中看到同步的文件和内容。因为云存储只管保存,所以为了能够实现内容的加密,Joplin的端到端(E2E)加密特性就派上用场了。端到端加密简单来说从发送到接受和传输这三个点上,信息都是加密的。有些笔记软件只有在传输中使用加密比如https,但是服务端的存储是明文的,就不能称为端到端的加密。
设置
如果同时使用PC和手机那么需要在每个系统上配置加密。
- 在"选项"中选择Encryption项。
- 添加密钥,密钥要尽可能随机和长。如果有密码管理器可以自动生成。
然后Joplin会在上传之前进行加密。同步完后可以在坚果云中看到上传文件和内容,只不过内容都是经过加密后的密文,比如内容中encryption_cipher_text后的内容。
除了使用坚果云的web页面查看内容外也可通过webdav的命令行客户端cadaver查看。
#<yum|apt> insatll cadaver
1root@WingedExtrasmall-VM:~# !247
2cadaver https://dav.jianguoyun.com/dav/
3WARNING: Untrusted server certificate presented for `*.jianguoyun.com':
4Issued to: *.jianguoyun.com
5Issued by: Sectigo Limited, Salford, Greater Manchester, GB
6Certificate is valid from Wed, 19 Feb 2020 00:00:00 GMT to Fri, 18 Feb 2022 23:59:59 GMT
7Do you wish to accept the certificate? (y/n) y
8Authentication required for nutstore on server `dav.jianguoyun.com':
9Username: <name>
10Password:
11dav:/dav/> cd Joplin
12dav:/dav/Joplin/> ls
13Listing collection `/dav/Joplin/': succeeded.
14Coll: .lock 0 Jan 8 15:39
15Coll: .resource 0 Jan 8 15:39
16Coll: .sync 0 Jan 8 15:39
17Coll: locks 0 Jan 8 15:39
18Coll: temp 0 Jan 8 15:39
19 0127a81ed6f8436d9d4ed1d06cb35875.md 2565 Jan 11 13:58
20 04679d74dd6745189a65e02258c4d81e.md 10513 Feb 5 00:06
21...
22 0c85ea74db704bec9af93beea9e45c6e.md 8777 Feb 18 15:39
23 10280d2aa22942c68d45d284c499a6e1.md 2805 Jan 30 09:11
24 11752bc4ff294901864084b003da17af.md 5229 Apr 1 20:09
25
26dav:/dav/Joplin/> cat 04713a61b6304b64a771cd8110a68dc6.md
27Displaying `/dav/Joplin/04713a61b6304b64a771cd8110a68dc6.md':
28id: 04713a61b6304b64a771cd8110a68dc6
29parent_id: bc83d3359854430ba5ebd9210c0afec9
30item_type:
31item_id:
32item_updated_time:
33title_diff:
34body_diff:
35metadata_diff:
36encryption_cipher_text: JED0100002205189e051f8419465d8163193121aebaa8002b78{"iv":"qbKqFQ0PpzcvdCtfpJ0/og==","v":1,"iter":101,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"JYz4+COWpU4=","ct":"TklWn+/rRwVSacuNfaYbCkYgw/hG4GTc87StmZkVaNkxQuSkXFzffiqa7h0qSAxwBBYvHd4IJNcy7yCLaTgx3vfJRNWa0XWknbbfA6G5tKaeC+LMBo0F40HvrJvDONJ44jR...CZ69IVs3E2vgLhk7kLSEjZGcVDU="}
37encryption_applied: 1
38updated_time: 2021-04-24T14:43:10.957Z
39created_time:
40type_: 13dav:/dav/Joplin/>
这样,一个免费的,具有良好的私密性的,同时又兼顾了备份的笔记系统设置完成。每天睡前反思一天中发生的事情,利用手机总结一天所失所得,或者在电脑上回顾,不用再有私隐和数据丢失方面的顾虑。感谢Joplin的开发者。
不足
目前的方案中仍有两个地方有待改进,这两个都是关于本地安全的。
- PC端本地数据明文存储
Joplin PC端的内容是存储在SQLite文件数据库,任何一个有系统访问权限的用户都可以查看数据库内容。这无疑在安全性会有些降低。而wiz还有onenote这样的是可以支持给单独文件进行设置密码或者加密。
1sqlite> select title,body from notes where title="测试标题";
2title|body
3测试标题|测试正文
4测试正文
5测试正文
6sqlite>
对于这样的问题,开发团队给出的解释是本地安全是操作系统的事情而不是Joplin的,所以如果对本地安全有需求的可以通过TrueCrypt这样的磁盘加密技术来保证本地的安全。这样说也没毛病,但是我还是觉得每次打卡joplin之前先mount一个加密盘有点繁琐,如果能在打开数据库时候输入加密密钥那就完美了。基于这一点,不要在不是自己完全拥有控制权的电脑上使用。
- PC和手机应用解锁
这个和第一个问题类似,最后更新是在2020年11月,但是topic已经被close,可以预见在短期内应该不会解决吧。对于开源项目,使用、参与讨论也算是一种支持。