生活中总有各种各样的事情,让我深感信息管理的混乱。就是那种「我知道它就在这堆里面,但就是找不到」的沮丧。
1. 我们为什么需要「信息管理工具」?¶
管理「我的」信息。
我们所要管理的并非是外部信息(那些是搜索引擎做的事),而是管理「我的」信息。
哪些是「我的」信息呢?我访问过的网页、我花出去的钱、我到过的地方、我家小朋友何时拉的粑粑💩……
我们需要这样一种「黑魔法」:只要是我碰过的东西,都会沾上印记。
我们干嘛需要这种东西?如果你是我这样健忘且粗枝大叶的人,也许你有过这种时刻,脑子里突然蹦出一个念头:咦,我一个月话费到底是多少?
如果这时候,「你的人^assistant」马上奉上一张纸,打印着你 2012 年以来的话费记录:

虽然忍不住对移动一顿 @#¥% ,但内心操控感会不会噌噌地往上涨呢?
如果你家小朋友好几天没拉粑粑💩了,你嘟囔一句「几天没拉了啊?」。这时候,「你的人」马上递给一张图,「大大,这是小的统计」。那是一种什么感受!

可就是这类「自己费劲去做也能做,但太麻烦了不想做」的事,把我们的生活质量拉低了一个档次。好吧,明说就是「要是有人伺候着就好了」。说得好听点,叫做「增强对生活的把控」。
不光如此,「你的」数据还能告诉你真实的自己。你以为一年看 50 本书已经耗费心力了吧,「你的人」告诉你,看书只占用了不到全年 9% 的时间,你每次拿起书本平均 xx^put-down 分钟就会放下……

你以为的并非都是你以为的。即便这样,我们仍然想要这样的服务。

幸运的是,我们身处的时代已经为我们准备好了这样的条件。
希望我已经说服你了——我们想要这种对过去的掌控感,我们想要重来一次,在未来。
2. 我们不需要什么样的「信息管理工具」?¶
记得机器猫里有这么个故事:大雄想做一部动画长篇,机器猫就给了他一台动画制作机……
故事的最后,播放参与名单的时候,所有的事务都写的动画制作机,除了一个「按钮人——机器猫」。于是大伙就追问大雄干了啥!
我们总说想要一个「好用的」信息管理工具。但到底我们想要的是什么?这是一个值得深思的问题。显然,我们并不想要一个「动画制作机」——包办一切,「体贴」地连我们的存在价值都抹去了。
3. 我们想要什么样的「信息管理工具」?¶
- 高阶梦想:我只管提问,你🤖,负责回答;
- 低阶目标:我能够很方便地(在 1 秒以内)获得信息来支撑 /
推进我的想法;
当然,我们期望的是一个「助理」——「你你你,去帮我找个什么什么数据」——那感觉不能再爽。
但就目前的技术手段而言,「智能助理」仍是那些大厂们都还在探索的事情。语音识别、自然语言理解……
这些似乎已经成熟的技术,其实离我们还很远。
然而,如果我们把努力的重心放在方便地检索信息上,将会收获一个不错的结果。
这个时代,如果你会编程,至少在「找数据」这件事上可以享受过去贵族般的享受。也许你会说,只要会 Google 一样能做到,那么我想强调的是很多「定制的需求」。
4. 如何设计这样的「信息管理工具」?(需遵循哪些原则?)¶
一个好的信息管理系统,至少应该满足这么三条:
- 一切皆可追踪;
- 能以你能想到的、尽可能小的粒度记录;
- 支持二次开发 / 可扩展;
4.1. 信息管理,最怕就是没信息可管理
为什么需要「追踪一切」?举一例:当你看到一篇很有用的文章,把它加入搜藏列表。之后你时不时会点开看一下。直到有天你突然发现,应该把这些点击都记录下来,这样你就能查看你各个时段的关注啦、需求啦、网页的价值啦……
记录一切就是为了以后不后悔。信息管理的基础是数据,没有数据何谈管理。当时看不到价值的数据,以后想到用处了却没留下记录,岂不是人生杯具?!
「一切皆可追踪」要求底层有一个统一的数据结构。最好是做到任何细小的操作都有记录。这方面做得最好的要算 GitHub 了。不管是提交修改,还是建立 Issue ,都有唯一标识,都可以评论、备注。最方便的是,因为有唯一标识,所以任意一步操作都可以引用。
4.2. 今天记得有多细,日后用得有多爽
而这一步有多大,也就是「记录的粒度」有多细,直接决定了我们洞察数据结构的精细程度。比如:我们年终的时候发现「MD,又重了,就怪平时喝可乐🥤多了😒」。于是突发奇想,想看看「今年到底喝了多少可乐🥤」。「想也不难,我每一笔开销都入账了的」。但一翻账本傻眼了,只记了喝饮料,但没记到底喝的是可乐🥤,还是咖啡☕️。由此可见「记录粒度」对我们聚合数据的影响。
在粒度上做到极致典范的一款软件,当数 Vim 。让我们「要素粒度」的角度来审视 Vim 的设计:

就操作的「粒度」而言,Vim 不管是对「操作」的粒度,还是对「操作对象」的粒度,都提供非常精细的操作手段。
就拿「移动」为例。如果「移动」的是「字符」呢,左移
h,右移l;如果「移动」的是「词」呢,那就多了,移到当前词头b,当前词尾e,后一词词头w,前一词词尾ge;如果「移动」的是「句子」呢,行首0行尾$,连行首的非空白首字符都有特定操作^……比如「查找」。行内查找可以用
f<char>。大范围搜索可以用/<string>。再比如「选取」。除了可以选取分隔符标识的内容,还可以选取文本块(如:当前字、词、句、段落)。
当然,如果事事都记得如此之细,记录成本又上去了。怎样平衡「记录成本」v.s.「记录粒度」?这又是一个大坑。原则上,我们应该尽力提高信息输入的效率。比如:如果我能对着超市小票拍张照,app 就自动读取所有的条目,那就既降低了「记录成本」,又提升了「记录粒度」,但代价是「开发一款识别率很高的扫描 app 」。可我们不能只是坐等技术进步的福利,在技术条件没有达到的情况下,我们如何去平衡这些要素呢?后面会有提到。目前阶段,我们最好的做法是,先拍个照、存个档,以后有时间呢再人工输入细节,总之得留底。
4.3. 扩展!扩展!扩展!我要无限的扩展可能
「支持二次开发」就是要求开放接口。开发者肯定不可能满足用户所有的需求,因为这些需求在开发时都未必存在。
记不起谁[^who]说过「编程,其实质是一种信息管理手段」:
[^who]: 好像是在 Playground 里面看到的吧。
Programming at its core is about
managing information.
... the primary objective of
programming is taking information in one form and converting it into a more
useful form.
好的工具应该都是「语言」级别的——提供一组词汇 / 概念,外加一组规则供用户随意组合。对了,又要提到 Vim :
%原本用于一组「开闭括号」间跳转,后面可以通过插件matchit扩展为可在一组「匹配关键词(e.g.if/end)」间跳转。正是这种概念的自然延伸让 Vim 长成了一颗参天大树。
信息管理工具的现状是:我负责记录 / 录入,交给你🤖去整理。我们以后希望以后慢慢把「信息输入」这块也交给机器🤖去做。我们希望一个碗、一双筷、一个杯子、一双跑鞋…… 甚至是一个坐便器[^shit],都能变成数据源。当然,这不在本文讨论范围内啦。
[^shit]: 对于老年人 / 或者便秘的人来说,或许知道「什么时候拉一次粑粑」是一个严肃且严峻的问题呢。
5. 具体有哪些需求?¶
- Task Management;
- Data collection;
- Knowledge extraction;
5.1. 任务管理 精力管理
任务管理的本质是「精力管理」。
我花了不少时间学习任务管理,还买了一些课程。最后给我的感觉是——臣妾做不到啊!!!我现在也用任务管理,但我只记录 Done List 。也就是只有我真真正正做完一件事了,我才会把它记下来。如果想到 / 被吩咐要做个什么事情,我会随手一记。这还算任务管理吗?!对我来说,如果一件事被漏掉了,那说明它也不那么重要。
我对「未来的任务管理工具」的期望是:感知我所处的环境,推送给我当下最适合的任务。比如:在我累得像条狗🐶的时候,给我推送些#brain dead#^brain-dead(不用脑子🧠)的事情。所以,考虑到自己的精力水平 & 技术水平,我只做 Done List 。
@JailbreakHum 的付费专栏「用更现代的方式做任务管理」。
这看似和上面对信息管理系统的第一条(事无巨细地完整记录下来)要求相悖,但要注意——那是对机器🤖的要求,不是对人的要求。我们就是要这么区别对待!
然而,如果你想要一个完整的「任务管理」,可以借鉴「复式记账法」的思路,在「To Do」&「Done」两个账户之间捣。这样还顺手做了「成就记录」。「现金流表」就是「成绩账本」。而且可以根据「任务量 / 完成时长」计算「成就金额」⋯⋯
5.2. 信息搜集
5.2.1. 别人家信息的搜集
这是现有工具做得比较好的一块,大致分为两类:
- 粗粒度信息(e.g. 网页)的管理;
- 细粒度信息(e.g. 片段 / 文摘)的管理;
网页搜藏就不多说了,只是提醒一点:如果自架系统的话,最好把「所有的」对外链接做一个跳转。这样就可以留存「从内部访问外部的记录」了。
片段 / 文摘的管理,做得比较好的要算 Instapaper 。它会把你搜藏的文章抓下来,然后你可以做高亮标记。我实在太喜欢这个功能了。虽然我几乎没有回头看过自己标注的东西,但那种在电子设备上涂涂画画的感觉简直帅呆了。可惜,去年快年底的时候 404 了。于是我搭了一个自己的「书签搜藏」,只是一直没把「高亮标记」这个功能做出来。
5.2.2. 自家信息的搜集
这是繁杂且现有工具做得不到的一块。自家信息大致分为两类:
- 流式信息:e.g. 流水账 / 日志;
- 融入了个人智能的知识:e.g. 总结;
流式信息不多说了,说说怎么培植自己的智慧树。这块的难点在于「如何构筑体系?」。常用的手段是建 wiki 。
Wiki 到底是什么意思?我举一例。网络协议下到底层,讲的是物理结点怎么互联互通。每个物理结点都会向路由发(数据)包,路由拆包一看,是寄给谁谁谁的。这下犯难了:我哪知道那谁谁谁是谁谁谁🤬 这里有一个天才到想法💡:你要我转发包,首先得自报家门,吿我你谁谁谁。而路由手里有本小本本——谁谁谁原来是谁谁谁。时间一久,谁谁谁是谁谁谁就全搞清楚了。这叫做「反向学习算法」。

为什么说这是个天才的想法?它解决了碎片如何构建出大厦的难题。每次往来的时候,留个心眼,下次没准用得着。
Wiki 就是基于这样的原理(我的理解):我未必一开始手里就有那个小本本,但时间一长,小本本就自然到我手里了。
回到严肃的 wiki 用法讨论上,有这么几种变型:
- Check List(核查清单)
- Q & A(应答库)
- Issues(错误库)
前两种是「正向学习」,第三种是「反向学习」。「正向学习」补全领域内框架,「反向学习」校正输出。
5.3. 信息提取
这是现有工具做得比较浅的一块。但主要原因是,我们对自身了解很少。人工智能界有句笑话:有多少人工,就有多少智能。就像 Linus 的那些评论一样——话糙理不糙。目前,本质上说,人工智能所表现的智能大多是人的智能。以搜索为例,大家都知道 Google 的网页相关性排序算法 PageRank ,但其背后是汇集了每一个网站建立者对网页价值的判断,归根结底还是人的判断。但这有什么好遮遮掩掩的呢!利用好人的算力,不就开创了 Google 这样的事业了吗!
5.3.1. 境界一:找得到
找得到是最起码的要求。但很多 app 就是黑洞,数据根本导不出来。后面还会专门提到。
5.3.2. 境界二:聚合方便
很多 app 提供了一些可视化的图表工具,但都是程序内置的,并不能做到想 Excel 的数据透视那样强大。我们并不需要做得这么强大,但提供一些自定义组合的机制并不难做。
不要小看了「方便一点」。且不说有时候不那么方便就直接导致最后不了了之了,就说想法周转率也能有极大地提高。
5.3.3. 境界三:知识生成
(根据日志自动聚合)
5.3.4. 境界四:信息联想
很多 app 都号称能做「信息联想」,比如:Evernote, DEVONthink^devonthink,但貌似都没有太好的解决方案。
是鹦鹉螺,德国团队出的,很贵。卖点是「通过词汇关联,自动提供相关文章聚合」,但中文就⋯⋯ 当时我死活想不起来名字,搜了半天也搜不到。看,这就是信息联想出问题了。
5.3.5. 境界五:自动化
只有在能做到信息提取的基础上,才能谈自动化。
6. 现有工具的痛点在哪?¶
简单地说,有这么 4 个环节:
- 录入:龟速的输入;
- 链接:散落一地的数据;
- 聚合:;
- 感知:;
6.1. 鼠标🖱️点点点
只要细看老人学用鼠标🖱️,就会很自然地产生这样的反思:鼠标🖱️这种东西真心反人类!完全不能想象,鼠标🖱️怎么就从其前身——光笔(很像现在的触摸笔)演化成了现在的模样😱 当你操作鼠标🖱️时,手感觉的平面 & 眼睛感觉的平面完完全全是两个不同的空间,而你的大脑🧠不得不做一层映射。
现在的绝大多数系统(尤其是办公系统)都是基于这么反人类的工具设计的,极大地拖慢了信息输入的效率。既然如此,我们何不跳过龟速的鼠标🖱️点点点,直接利用键盘⌨️输入呢?!原因很简单,现有系统不支持。比如:填写窗体时,很多系统都不支持tab键跳转,enter提交窗体也就别想了。再比如:很多系统非得鼠标🖱️点击才能刷新数据。就再别提「根据内容动态调整输入界面」了⋯⋯ 我去嘞~~这都什么年代了,能不能小更新一把!
为什么不能学学人 EpiData 🤯 上古时代就创造了如此高效的输入体验!
- 通过脚本订制录入界面;
- 完全键盘⌨️输入;
- 输入动态提示;
- 快速创建输入模版;
足矣!
其实,触屏手机📱才是输入的利器。看 Weight Diary 的输入界面,好看不说,还方便:



好的录入就应该做到这样:
- 直达:不需要在路径上耗费多余的点击;
- 按输入流程顺序安排数据域,一气呵成,不会跳来跳去;
- 带记忆:只需在上次类似环境中做一点微调即可完成输入;
6.2. 拿回自己的数据
现在大厂都尖得很,握着数据不肯放出来。所以,哪怕是自己的数据,如果没付费,都不好弄回来。我甚至想过,通过截屏读取自己的 mobike 出行信息。可为什么要打通数据?试想一下,当想出去旅游了,你的「助理」马上去翻你在 Zaker 里面收藏「一生必去的 10 个地方」之类的文章,然后把这些地点提取出来,到知乎上去搜「某某景点值得去吗?」这类回答⋯⋯ 当我们一无所知的时候,听听别人的劝也是好的。何况还是你自己亲自筛选过的建议。
当我们闲下来,突然想起来忽视了家里小朋友的成长,决定给小朋友拍拍照。这时候,你的「助理」马上去翻你在微博上的图片搜藏(之所以不去翻朋友圈,是因为上面礼节性点赞太多了),把那些个创意挨个呈领导阅。爽不爽!

自己的数据更对你的癖好,对你的价值更高。所以,当然要拿回自己的数据喽。
真实,是一个超级高维的东西。我们体察到的都只是它的某一些切面。只有从多个角度思考、观察,才能模模糊糊感受到它的全貌。所以,数据,尤其是不同维度的数据当然是多多益善啦。
只是……
你知道为什么好多游戏允许你免费玩吗?因为你在玩的同时,也是在给那些人民币玩家做陪练。所谓「有钱的出钱,有力的出力」,在游戏领域发挥得淋漓尽致。之后我们还会从游戏当中汲取更多的关于「信息管理工具」设计的思路。
所以,如果你没掏钱,又想把自己的数据拿回来,那就只能下笨功夫了。比如:学脚本去抓数据啊。
或者,忍痛割舍那些连不通的 app 。找一个地方统一存放。
6.3. 低龄的聚合😒
现在我们能做什么聚合呢?统计统计频率,分析分析主题,除此之外,寥寥无几。
6.4. 事事都要我提醒你,要你个跑腿的干啥😤
今天传了一下午的文件,打开文件➡️加盖电子印章➡️搜索收文单位➡️点击发送⋯⋯ 你丫看我操作到第五十回都还学不会?就不能在我做第三次的时候,主动问我「主人,剩下的文件是不是要按照这么➡️这么➡️这么弄啊?」。然后我指点你一二,这一步得这么弄⋯⋯
主动一点,OK ?!
7. 目前这种现状下的近似解决办法¶
要么将就,要么改造,要么另起炉灶。
7.1. 对现有工具的考察 / 能否通过组合现有工具实现
7.2. 自己动手,丰衣足食
7.2.1 拦截自己的数据
Google 通过你的搜索动作可以画出你的「画像」。可你自己却拿不到,这不讽刺吗?那为什么我们不中途拦截一下,捕获自己的搜索动作呢?
操作起来并不复杂,在本机上架一服务器,就干一件事——跳转。比如:让http://localhost/search?q=%s跳转到你喜欢的一款搜索引擎上。然后把浏览器的默认搜索引擎改为这个[^safari]。这样,在跳转之前,我们可以记下搜索了什么关键词。而且丝毫不影响你的搜索体验。如果你有台服务器,那就不光可以记录本机上的搜索动作,任意平台下都可以记录下来。

[^safari]: 呃,Safari 就不支持自定义搜索引擎😒 好吧,你完全可以用 Chrome 嘛😅
7.2.2. 自定一套规范来实现聚合
翻回那句玩笑话「人工智能,有多少人工,就有多少智能」。我们要想自己的这套系统智能一点,要么等大厂,要么靠自己。但大厂太远,救不了近火。既然目前还没有既经济又省力的方法提取数据的结构,那我们就人工标记呗。比如:打上 #+1创意# #ISSUE# #TIP# #DEADLINE: 3 d later#之类的标签,这样就很容易用编程语言提取出高层的结构来。
可就是是要投入自己的算力,也有一套巧办法——用游戏化的思维去改造。虽然本质上仍然是「人工标记」,但我们会做得很嗨皮。
不扯那些玄乎的,我们所要做的仅仅需要设计一套「成就系统」,让我们不仅愿意干,而且喜欢上。
7.2.2.1. 游戏的魅力
记得去年年初玩「饥荒」的时候,我和妮妹两个连番混战,玩得不知天日。最后饿不行了,才停手。游戏为什么能如此这般吸引我们?简单地说,游戏让我们 high 。解释一下,游戏有一整套成熟的机制不断触发我们的 G 点:
- 首先是「实时的反馈」让我们像捡了钱一样,不停地想要^smaller;
- 其次是「新手引导」&「难度匹配」让我们跳一跳刚刚好能够着,极大地满足了我们的成就感。同时,「熟悉而又不一样的套路」让你欲罢不能。反观学校的教育,尤其是「计算器科学」的教育,刚刚教完你「1 个苹果🍎 + 1 个苹果🍎 = 2 个苹果🍎哦~~」,接着就让你算三重积分。
- 再次是「丰富的组合」激发你无尽的探索欲望;
这就是游戏设计师的手法?实时的反馈、宏大的愿景、丰富的组合⋯⋯ 不不不不,这些都不是底牌。设计游戏的奥秘在于,把游戏世界塞进一个模型里头,然后掰碎了藏到游戏世界里面。玩家找到那个模型,也就理解了整个游戏世界,因为那个世界的每一样事物都可以在模型中找到对应。那时,玩家就是世界的神。
其实,游戏是一套组织资源的方法论。游戏试图把一切都具现化,包括努力。玩家的每一步行动都会得到评估,并即刻反馈给玩家。玩家可以看到一切的资源,不管是有形还是无形。
而且,游戏设计师试图拉低一切要素的成本。比如:失败的成本、搭讪的成本、跳出生活圈的成本、和过去的自己合作的成本。在这里,一切元素都可以自由流动,且可为玩家所用。
这就是让玩家沈浸其中的秘密,把他们奉为神。
那我们怎么把这一套搬过来呢?其实不用全搬,只要设计好一套「成就系统」激励用户按照规则投入算力就行了。
7.2.2.2. 如何设计「成就系统」?
成就大致分为三类:流程类成就 + 触发类成就 + 挑战类成就。
- 流程类成就:就是做任务。只要参与,就「发钱」;只要操作,就给点数。设计的时候只要记得「反馈粒度要尽可能小」。而且强烈建议事先制定好一套「级别规则」:让用户(好吧,就是自己)攒点数有个盼头。
- 触发类成就:主要是解决日常太枯燥的问题。时不时来点新鲜感。比如:反复做某事 100 次。因为一般不会刻意去为了这个成就做,但当累积到了(这时其实你早忘了),突然蹦出来「发钱」,会让人欣喜不已。
- 挑战类成就:其实不需要太难,就是那种「看起来不可能做到,但其实坚持下去不难」的挑战。好吧,我也没设计过。就随便列几个梦想就行了。做得到,我去,牛逼啊!做不到,有难度嘛,正常正常。
7.2.2.3. 重要是把钱花出去
每一个「成就系统」不可或缺地都会有一个「成就商店」——让你把攒的点数花出去。你有试过剥瓜子含嘴里不嚼碎吗?反正我是没成功过,每次剥上几颗就不知觉地吞了,拦都拦不住😪
至于「成就商店」里面列什么,不重要,随便列几项你没有抵抗力的事情(比如:一餐不超过多少多少的甜品🍰)就行了。我敢保证,用不了多久,你就会赤字了。
好吧,恭喜你进入「攒点数」→「花」→「不够花」的「良性」循环了。
7.2.2.4. TIP: 强烈推荐
kramdown 对 Markdown 做了一些轻度扩展。这样,即使构建复杂系统也完全够用了。大家可以先看看这篇「kramdown v.s. Markdown 差异比较」。
这里只介绍一个不起眼的扩展{::nomarkdown} ... {:/nomarkdown}。这个扩展的作用是:不对标记中间的部分做
Markdown 渲染。我第一次看到的时候,想「这功能有啥用😒」。后来在实现「自定义标签」时尝试了好多方式都不够优雅。最后想起了这个功能,通过它,就可以轻易实现「自定义标签」😱
比如:我想把工作中遇到的问题都搜集起来,每遇到一个问题,就做个标记。以后只要搜索这个标记,就可以很轻易地实现「问题汇总」了。具体可以这么做:
- 把问题部分用
ISSUES&/ISSUES括起来。但问题是 kramdown 不识别这个扩展啊?! - 在 kramdown 渲染之前,把
ISSUES&/ISSUES分别替换为{::nomarkdown} <div class="issues" id="issues-aptx4869"> {:/nomarkdown}和{::nomarkdown} </div> {:/nomarkdown}; - 好了,剩下的你懂了吧😏 这样不仅保留了 Markdown 的风味,而且实现了对 Markdown 的扩展,并且可以通过「锚
#issues-aptx4869」定位标记的内容;
8. 也许她是这个丑样¶
以我给自己写的「工作日志管理系统」为例。说明一下,因为是在工作机上用的,不能太花哨,不然领导还以为我上网呢。
首先上「工作规范」,以 Markdown 为基础,规范了如何做信息标注:

简陋的成就系统:

目前使用中发现的问题:
- 工作中使用最多的 .doc 文件还没有打通。没办法,工作机上逃不开 Office ;
- 「项目追踪模块」还不是很好用,主要是思路还没完全厘清;
- 完全没有权限控制;
- ……
后记
其实大前年^the-day就在想「怎么做一个「信息管理工具」」了。断断续续一直到最近^principles才想基本明白。
最初是因为很喜欢饭否的体验,想做一个「记流水账」式的「微博类的数据挖掘 App 」。具体怎么做还没想好,倒是想了些逗逼的名字,像「智慧树🌲」都算正常的,有「叨逼叨」「叨^2」「叨方」「喂^hey」什么的😓
后来试了不少「Power Tools」,发现还是最喜欢这种「日志式输入」的方式。
一开始是计划做 app 的,毕竟手机📱才是搜集数据的利器。但无奈学艺不精,又恰逢入职新单位。写个网页版的应应急吧。毕竟和工作相关的处理大部分都在工作机上完成。
计划等我用上个年把再开源。那时候,我对「信息管理工具」的理解应该成熟了吧。
