前言

这是一个笔记软件比笔记多的时代。

从最初靠笔记发家的 Evernote,到中期的网红软件 Notion,还有最近爆火的 Obsidian。各种新概念也层出不穷,双链,块存储,网状,卢曼卡片盒...,不少人的知识没有多少,软件却换了一茬又一茬。

大学开始接触笔记软件的我,当然也属于上文中那些换了一茬又一茬的一员。
市面上所有支持 Vim 模式的软件基本尝了个遍。

然而当我又一次因为笔记迁移的数据兼容性折腾到半夜时,忽然在想是不是太过于痴迷软件本身,而忘记了笔记的初衷。重新思考过后,我决定放弃软件的形态,以此回归笔记本源

经过详细的需求分析与产品调研,并且认真使用了一年时间后,我认为我已经找到了笔记管理的最终形态。下文先回顾我的笔记软件变迁,之后详细介绍我自称为 VSNote 的工具,最后谈一谈我理解的生产力。

各种Note

SimpleNote

SimpleNote是我第一款笔记软件。

那时刚踏入大学不久,受限于繁重的大学课程压力,需要一个简单的工具来记录每天的作业 TODO。

20210907140941

此时的笔记软件的作用更类似于一个桌面便笺,无需大量的文字编辑工作,SimlpeNote 简洁的 UI 和全平台同步的功能十分切合我的需求。

WizNote

大三之后,开始为工作做准备。
此时我的笔记内容偏不再仅仅是每日 TODO,开始侧重于复习总结,知识整理等,需要大量的编辑。
SimpleNote 简陋的功能限制了其使用场景。
WizNote 的 Vim 编辑功能吸引了我。

20210907141243

相比于 SimpleNote,WizNote 是一个真正的知识管理软件,也是在它的陪伴下,18年秋招顺利上岸。

VNote

步入工作,生活琐事日益繁冗,积累学习亦不可懈怠。
恰巧为知笔记试用期结束,数据无法同步云端,遂寻找一款新的软件来支撑我的需求。

闲杂摸鱼之际,在 V2EX 发现作者推广这款名叫 VNote 的开源笔记软件。
深入调查一番,发现各方面都比较切合我的使用场景。

VNote 的一些主要 Feature :

  1. 可选 Vim 编辑模式。
  2. 基于 C++ QT 开发,跨平台无性能问题。
  3. 无服务端,无需担心数据泄露。
  4. 可以无限嵌套的笔记目录。
  5. 支持 PlantUML,Mermaid, LaTeX 插件。
  6. 主题,样式,快捷键高度可定制。
  7. 开源! 用着不爽,自己开发。

虽然 VNote 没有云端同步,但实际 Vnote 的笔记内容完全基于本地文件。只需要同步笔记文件夹,可以保证数据一致性。

毕业后的一年内,我一直在使用 VNote。用它写每日TODO,会议纪要,做学习笔记,甚至管理简历和面试记录。

20210904215456

如果你属于程序员群体,十分推荐尝试下这款笔记。

VSNote

VNote 版本从 2.x 向 3.x 升级的过程是无法向前兼容的,即 2.x 版本软件无法读取 3.x 版本的数据。
由于我使用用第三方软件同步笔记内容,在升级过程中新版本的数据目录并不会覆盖旧目录,只会覆盖旧目录中同名文件。
升级完成后,另一台终端无法导入笔记。这次事故,让我萌生了放弃笔记软件的想法。

从零梳理我的核心诉求:

  1. 支持 Vim 编辑文档
  2. 支持多种格式渲染
  3. 支持多终端同步数据

我发现需要的不是一个笔记软件,而是一个文本编辑器,一个格式渲染器,一个数据同步软件。

编辑 + 渲染 + 同步,这就是笔记工具仅有的三个核心。

整理以上要素后,方向也很明确了。
我最终决定 使用本地文件夹存放笔记内容,使用 Visual Studio Code 作编辑器+渲染器,使用 MEGA 同步数据。
我将其命名为 VSNote

本地文件夹作为笔记目录的最大优势是解耦,在此基础上可以很容易的开发各种流水线,解放生产力,后文会详细描述。

VS Code 作为宇宙最强编辑器,各种插件让笔记不在局限于 Markdown。PlantUML,Mermaid, 思维导图... 只要存在的文件格式都可以渲染。

MEGA 则是我非常喜爱的文件同步软件,免费用户有 50GB 的空间,而且没有速度限制 (PS: 和百度云盘非一类产品)。支持自定义同步内容,支持文件共享,各平台均有GUI。

在将 VNote 中的历史笔记分类整理后,保存到我的 VSNote 目录中,开启 MEGA 同步,至此我的"笔记软件"就完成了。
使用一段时间后,我发现没有了软件的限制,可以在 VSNote 中记录任何可记录的东西。

每日TODO

不少人可能会将 TODO 软件和笔记软件分开。真正使用时,大多数电脑或手机上的 TODO 软件免不了鼠标点来点去之后用键盘输入,然而从键盘到鼠标再到键盘的切换操作也是一种广义上的上下文切换,比较影响效率。
如果通过 VSNote 记录 TODO,是无需鼠标的,通过键盘驱动一切,同时将工具收敛到一起。

8月某个普通工作日的 TODO

我一般会将每个月 TODO 整理到一个文件中,每三个月一个目录,方便检索。
TODO 以文件的形式记录的另一个好处是基于此开发一些流水线,后文会详细提及。

工作记录

相对来说,工作记录是一块非常混乱的内容。里面夹杂着技术方案,需求收集,会议纪要,平台架构等各种乱七八糟的东西。

这些内容通常不需要去复习整理,但在需要的时候一定要能便捷的搜索到。

VS Note 自带全文搜索功能,只要几个模糊的关键字都可以很方便的检索。

软件配置

日常工作生活中,我会使用三个不同系统的桌面终端。
一台公司发的 MBP 办公使用,家中有台式 PC 用业余办公和娱乐,还有一台 Ubuntu 的 NUC 作远程开发机。
电脑多了之后,免不了的就是各系统上开发环境配置同步。

我的 VSNote 有一个专门的目录存软件的配置文件,利用文件系统中的 Inode 直接硬链接到目录下,MEGA 会直接同步文件内容做到自动同步,无需手动复制粘贴。

管理OKR

互联网公司的同学会比较熟悉 OKR 系统,每个季度制定 OKR 之后,需要自己规划各 Key 的时间进度。

此时甘特图是一个非常有效的进度管理工具,得益于 VSNote 多样的渲染格式,可以直接利用 Mermaid 渲染 Markdown 来制作甘特图。

如下是我利用 Mermaid “画”的某个季度的甘特图。

20210907141430

简历与面试

我一般每年更新一次简历,不是为了找新的工作,而是了解在过去一年学到了什么,有什么还需要去学的。

在 VSNote 有一个专用目录用管理简历和面试记录。
简历会直接使用 Markdown 编写,利用 VS Code 的插件导出成 HTML,做一些简单格式润色后保存为 PDF。

面试之后会用 VSNote 记录面经,吸取经验,同时管理每家公司的面试进度。

源码笔记

程序员免不了阅读优秀的开源工程源代码,利用 PlantUML 插件可以方便的绘制类图,架构设计图等。

20210907141955
backtrader 的部分元类继承图

如上是我在阅读 backtrader 代码时用 PlantUML 写出来的一个类继承图。
此时在图片的基础上再去理解各模块的含义,清晰很多。

借用 Evernote 的一句广告语,我认为只有抛弃软件的限制,才能随时随地,记录一切。

PS: 笔记管理使用的 VS Code 与敲代码的 VS Code 功能差异很大,引用的插件也几乎完全不同。为了提高软件响应速度,我会装两个版本的 VS Code。一个专门用于写代码,另一个记笔记。

流水线

软件工程中,存在一个 依赖反转 设计原则。
该原则规定:

  1. 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。
  2. 抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口。

非专业的同学可能较难理解,用一个类似但可能不太恰当的例子解释:

Windows 系统以其强大的硬件兼容性著称。虽然厂商的硬件设计各有差异,但是全都可以用于 Windows 中。

其原因就是有专门的组织会为硬件制定规范,例如 IEEE 制定了无线网卡的标准,英特尔制定了 SATA 的规范。

Microsoft 根据规范调用接口, 而硬件厂商在遵循规范的基础上实现自己的设计。如此有条不紊,系统运转正常。

Microsoft 无需为每个硬件都做单独的适配,这可以看作一种更高级形式的依赖反转。

Unix 在 "Everything is a file" 的哲学基础上,创造性的引入了“管道”的概念。
应用程序从实现依赖升级为抽象依赖,这应该软件工程学中最早的依赖反转思想。

回到本文,VSNote 直接用文件的形式保存笔记,这种表现形式不仅人是可读的,程序依然是可读的。从之前的笔记软件 API 依赖变成本地文件依赖,基于笔记开发自定义流水线,真正的”解放生产力“。

下面是我目前在使用的一些流水线

每日TODO提醒

此流水线会在每天早上通过 Telegram 发送今日要做的事情,效果图如下:

在 VSNote 中直接以文件的形式记录 TODO 后,每天通过定时任务解析文件,调用 Telegram API发送消息即可。

自动生成周报

此流水线会在每周五下班前自动生成工作周报。

上文中提到将每日 TODO 记录在文件中,不仅是为了提醒自己今天要做什么,也可以记录自己昨天做过什么。通过脚本提取,汇总这一周的 TODO,稍加修饰,即可完成本周周报。省下宝贵的十分钟去做爱做的事。

远程种子下载

此流水线可以远程添加种子下载。

家中宽带没有公网 IP ,在公司逛 PT 站时发现不错的资源可以将种子文件直接拖入已经定义好的目录中,MEGA 会直接将文件同步到家中服务器。
对应的守护进程监听文件变化,调用 PT 软件的 API,资源开始下载。

下班回到家就可以享用了。

定时同步Blog

此流水线的目的主要是简化我的 BlogGallery 发帖流程。

尽管各种静态博客框架已经尽可能简化部署流程,但仍然免不了要输入几个繁杂且冗余的命令中。
有了 VSNote 之后,只要文件夹中有新的博客文件或照片,后台程序都会执行 Deploy 流程。

过几分钟后打开网站,即可看到最新内容。

英语单词整理

此流水线会在每天凌晨通过 Telegram 推送今日遇到的陌生单词。

通过一个自己写的翻译程序查询单词后,单词会已追加的方式记录在笔记中。多终端使用时只要没有并发查询,不会产生冲突。类似 TODO 提醒,后台任务会在凌晨开始调度,通过 tg 发送消息,用作睡前复习。

生产力

不知道从什么时候起,各大科技厂商也喜欢用生产力装饰自己的产品。Microsoft 为自家 Surface Studio 的生产力,配备了专用的“选色硬件”Surface Dial。Apple 为了标榜 iPad Pro 的生产力,甚至欺骗广大消费者“你的下一台电脑,何必是电脑”。任何电子产品,好像只要有了生产力,就不会被当做娱乐工具。

但是我认为普通人追捧的生产力更像是一种欺骗自己的假象。因为电子产品是生产力,所以用着父母的钱心安理得的购买。因为笔记软件是生产力,所以浪费大量时间不断尝试下一个。引用一个不知出处的话,人类期待某种技术的革新能够颠覆性改善人类世界,但事实上,新的技术只是反过来再次强调了人类群体原生的缺陷。类似的,人类期待生产工具的进步掩盖刻在基因里的惰性,但事实上,新的生产力工具不是在吃灰就是在爱奇艺。( 我可没说iPad,            (・ェ・。) )

我想说的是,生产力不是生产的银弹。固然其可以在一定程度上提高效率,但质变的产生从来都不是因为生产力。牛爵爷用纸和笔推导出太阳的运行轨迹,两弹元勋们靠算盘造出原子弹,NASA科学家让 4KB 内存的计算机驱动航天飞机。真正的生产力一直都是人。

回到笔记软件的主题,本文的目的并不是向大家推销这个名为 VSNote 的工具。大多人的需求复杂度远远达不到需要用流水线来自动化的程度。我也认为 PlantUML, Mermaid 等工具非程序员几乎不会用到。与其追求一个完美的笔记软件,不如静下心来写一篇读书笔记。

当然,笔记软件导致的生产力差异确实客观存在,希望各位同学都能找到适合自己的软件,但不要为了软件而软件,回归笔记的本源。

后语

闲言碎语,博君一笑。才学疏浅,还望海涵。