知识消化系统 v1


#1

介绍

做为一个游戏开发者,日常用到的技术点非常多;做为一个技术爱好者,总是各类知识充满好奇。 但是呢,知识也太多了吧!笔记总结记了一大堆,真用到的时候,记哪儿了,记了啥,完全想不起来啊。

相当长的时间里,会为“如何记录”、“如何记住”、“如何整理”、“如何查找”、“如何使用”知识而烦恼。 其实一直在找答案,调整和改进,下半年针对知识的学习和使用效率方面,对自己做了一个全面的观察。 最近终于形成了一套比较有章法的知识收集、管理和使用流程。给它起个名叫“知识消化系统v1”。

整个知识消化系统中,最核心的是emacs这个文本编辑器。如果没听说过,或不了解的话可以先不管它是什么。可以先不管它,把关注点放在“知识消化系统”本身上面。

笔记 - 打造便捷的知识仓库

在讲到笔记之前,先看看这个问题: 从水果店买一些苹果回家,该怎么带回去?

  • 如果只有一个或两个苹果,用手拿就可以了
  • 如果有十几个,用用袋子提
  • 几百个几千个的话,就要用车运了 这个问题,是为了说明一个前提:同样的问题,如果某个条件的数量级不同,其答案可能不同。

“如何记笔记”这个问题,也是类似的。如果我们记笔记,唯一要求是把一些看到的内容,写在某个地方。 解决的办法是,找一个笔记本/打开一个文件,把内容填进去,合上笔记本/保存文件。 但是笔记不可能只有一条。只有一条笔记时

  • 有数十条笔记时,我们开始思考如何分类
  • 有数百条笔记时,我们开始思考如何检索

我目前的笔记条目数,是:4535条。目前可以很好地解决“分类”和“搜索”的问题。

笔记的分类

还记得某天,打开Evernote。花了半天时间整理了200条笔记,为它们建立了笔记本,分类放进去。 这样的事情做过几次之后,发现时间花得很不值得。 花半天时间归类200条笔记,笔记列表看起来是舒服了,但是以后真的会逐个笔记本,逐篇笔记翻看吗? 半天时间花完,记住了哪些笔记内容呢? 仔细想想,会发现归类的意义并不大。

另外从"分类"本身来说,其实无法准确定义笔记的类别,有的笔记同时覆盖了"A"和"B"两个类别。 归入"A"就无法再归入"B"了。比"分类"更好的整理方法是"标签"。

但是,明明有比"标签"更好的整理方法啊,就是----“不整理”。笔记的类别,应该由它自己的内容定义。 获取笔记真正定义的方法是:“全文检索”。

一个无法避免的问题是,用什么软件来记笔记? 支持"全文检索"的笔记软件很多,相信大家都在不同的笔记软件中辗转过,这个支持markdown,那个支持代码高亮,还有一个支持在线协作。 如果你去搜索类似“笔记软件”甚至“技术”+“笔记”之类关键词,你很难看到emacs。 它有门槛,但有条件的同学,务必尝试下emacs。它提供给你的是满足你对笔记软件的“一切”需求的可能性。

知识消化系统的笔记,本质上是“文件系统笔记”,即把笔记记录在一个个文本文件里。

疯了吧… (请耐心继续看)

笔记不做分类,我们通过“搜索”来解决“分类”的问题。

笔记的搜索

说到笔记中最最重要的功能,必然是搜索了,看图

全文检索

KnowTK_full_text_search

简单的命名和内容规则

KnowTK_search_by_category 通过文件名来实现传统的"分类"

Anki - 辅助脑

Anki是一个基于“遗忘曲线”的卡片记忆工具。 如果说,笔记的目的是对知识进行归纳提取连接成知识网, Anki类工具的目的则是辅助记忆知识的最小单位–知识条目 比如: 一个单词、一个术语、一个概念 技术的海洋里,这样的知识条目太多太多。 一个很常见的情况是,花很多时间研究一门技术,过了两个月,就变得模糊了。一年之后再用起来,相当于重新学一遍。 为了不repeat your self,我们需要Anki

在我的知识消化系统中,先把知识录入笔记,将其中不可再分的知识条目标注出来,快速导出给Anki

Chrome Page Note

浏览网站时,总会遇到一些庞大繁杂的技术文档,精彩的论坛讨论。 突然,你看到一个页面中的内容,似曾相识。再读一遍很花时间,于是你开始在笔记中搜索关键词来确认这件事。 找到最后,也不确定自己到底有没有记录。

针对这个问题,我们需要“Page Note”,即记录页面笔记。 Chrome Store里,有两个Page Note类插件。其完善程度并不高,而且无法与知识消化系统整合啊。 所以自己做一个:

  • 整理页面知识时,把url一起存在笔记里。
  • 当打开一个页面时,会在笔记中查询url的关键部分,如果找到了,在chrome上标记一个数字,页面被多少笔记引用了 KnowTK_chrome_page_note

TO-DO - 探索和兴趣

日常会遇到很多想要尝试的技术或深入挖掘的情况。可以工作太紧张,琐事又太多,怎么办呢? 可以用"知识消化系统"管理兴趣类TO-DO。

所谓的兴趣类TO-DO,很难给出优先级和重要性。如果一定要给,也都是“低”吧。工作类的TODO,我不在笔记里管理。 这里也注意一下量级的问题, 我目前的TO-DO数量是396个。

曾经我用taskwarrior管理TO-DO,它有一个review功能,可以进行逐条TO-DO的review,更新状态之类的 但是很快就发现,清理探索性TO-DO的速度远远跟不上它们增加的速度。这种情况下review它们成了一种负担

目前对探索性TO-DO的处理方法是: 有空就在手机上翻翻,发现当下想做,而且时间允许,那么就开始这个TO-DO 没有流程负担,可以更专注于 也可以利用碎片时间,给TO-DO补充参考资料等等

KnowTK_todo

材料

  • Emacs (with: SilverSearcher deft-mode)
  • Anki (with: Anki-Connect)
  • Chrome (with: Chrome Extension)

#2

怎么和手机搭配呢?


#3

这里有个回答哈:


#4

笔记系统应该形成闭环,积极的合并整理再输出是非常必要的. 当然有的时候会出现难以取舍的情况, 所以建议建立一个 archive system, 就我个人而言,一个topic 的核心笔记永远不超过2张A4纸, 笔记内容应针对方法而不是过程. 4000多条,都看完要多久…


#5

挺有用的帖子

欢迎大家讨论


#6

感觉 deft 不是很有用,有没有 org dashbord 之类的东西?


#7

我感觉org-journal也不错呀。


#8

同步数据到 anki 的部分是自己写的么?

我目前是用 anki-editor 在做这个事情,定义好和对应的 anki note 对应的 capture 模板,然后用 anki-editor-push-notes 同步到 anki 上去,类似这个样子

(add-to-list 'org-capture-templates
             '("c" "Cards"))

(defun generate-anki-note-body ()
  (interactive)
  (message "Fetching note types...")
  (let ((note-types (sort (anki-editor-note-types) #'string-lessp))
        (decks (sort (anki-editor-deck-names) #'string-lessp))
        deck note-type fields)
    (setq deck (completing-read "Choose a deck: " decks))
    (setq note-type (completing-read "Choose a note type: " note-types))
    (message "Fetching note fields...")
    (setq fields (anki-editor--anki-connect-invoke-result "modelFieldNames" `((modelName . ,note-type))))
    (concat "  :PROPERTIES:\n"
            "  :ANKI_DECK: " deck "\n"
            "  :ANKI_NOTE_TYPE: " note-type "\n"
            "  :END:\n\n"
            (mapconcat (lambda (str) (concat "** " str))
                       fields
                       "\n\n"))))

(add-to-list 'org-capture-templates
             `("cp" "Person"
               entry (file+headline "~/Dropbox/org/cards.org" "Person")
               ,(concat "* %^{heading|Item} :note:\n"
                        "%(generate-anki-note-body)\n"
               )))

#9

有道理,也许和我们工作内容不同有关系。现状是4k条了,但是读写的体验都很舒服 :smile:


#10

以前用的Evernote,当时发现deft可以取代Evernote的搜索功能时,才决定迁移过来的。 所以对deft的需求,仅仅是搜索而已~


#11

想过把日记也迁过来,但这事儿完全不着急。先收藏了~


#12

看起来都很厉害的样子,感觉个人的 org 还停留在初级阶段啊


#13

我用的是自己写的,格式是:

格式1 - 新条目,尚未导出到anki
卡片正面     卡片反面      toaki  

格式2 - 已经导出到anki
卡片正面     卡片反面       aki

格式3 - 新双向条目,尚未导出到anki
卡片正面      卡片反面     toaki2

...

把标记藏在笔记里,都放在行尾,读笔记时不碍眼,图个清爽 论功能,是没法和anki-editor比的


#14

可以参考下你 deft 搜索那个函数么,谢谢


#15
(defun ironman-deft-search-for(filter)
  (interactive "MFilter: ")
  (spacemacs/deft)
  (deft-filter filter t)
  )

#16

好吧居然这么简单😥️。

改天我还是去稍微看看 lisp,不能每次像现在这样每次现查现改🤣


#17

对于有很多文件的我来说,Deft太慢了,Initialize就超级卡。我还是使用的外部搜索工具。 ripgrep是目前最快的。我用它在一个搜索中同时搜索多个单词,让单词在一个匹配文件中 递增性匹配。这样就快多了。而且搜索结果是慢慢出来的,不会一下子卡住。我把所有我知 道的知识内容都用Org Mode整理了。所以搜索必须要适合大量文件和recursive,以及快速。 以后打算把我自己的Org Mode Knowledge Graph放在服务器上搜索。


#18

我用老王写的

color-rg

更可视化


#19

deft 对中文支持怎么样?支持分词吗?有用索引没?自己建笔记系统,检索一直是个痛点。还有一个是多平台同步。


#20

其实我觉得Evernote默认的笔记本与标签同时存在的设置反而容易让使用者陷入混乱。比如说,我一开始用了一段时间之后才发现,我有的标签的名字和笔记本的名字相同。后来我是看了这篇博文 https://michaelhyatt.com/evernote-tags/ 之后才确定了我使用Evernote的方式,并一直坚持下来了。简单点说,就是所有笔记放在同一个笔记本内,使用不同的标签来进行归类。由于标签可以有子标签(就像文件夹有子文件夹一样),一个笔记可以有多个标签,这种方式其实给自己的检索带来了很大的方便。在实际应用中,我在维护“标签树”上稍微花了点精力,具体而言就是尽力减少一个标签有多于一个父标签的情况。其他的就不需要耗费太多时间了。