【番外】Roam Research 数据备份与共享:本地联动 Hookmark、DEVONthink、Obsidian 等笔记工具

🐣 Roam 漫游生产力吕立青_JimmyLv2023-6-12 10:14

BibiGPT AI 摘要

【漫游生产力】Roam Research 数据安全与备份 ,这个视频介绍了如何对Roam Research进行数据安全备份,并支持联动 Hookmark、DEVONthink、Obsidian、Logseq 等本地工具。

精华亮点

  • 🔑作为卡片盒,Roam Research的数据安全备份非常重要。

  • 📁每天对当天的直播进行回顾和复盘,思考迭代改进。

  • ☁️在云端对笔记内容进行备份,GitHub Action简单易用。

  • 🌉本地双向链接和备份,数据安全和同步有保障。

  • 🚀使用Hook、DEVONthink、Obsidian和Logseq等工具带来更多联动的可能性。

#BibiGPT https://b.jimmylv.cn @吕立青_JimmyLv

0. 直播复盘

大家晚上好,欢迎来到立青的直播间。这是一个21天的Roam Productivity直播挑战,我会逐一介绍Roam Research的使用方式和我的一些心得。

昨天我们讲了Roam Research的登录注册以及一些样式优化和插件等等。今天我们继续讲数据安全的重要性,作为你的笔记软件、第二大脑和卡片盒,Roam Research需要合理地规划笔记数据的备份。

每天直播结束后,我都会回顾当天的内容。这是一个简单的框架,分为well、less well和suggestion。我会在群里征求大家的意见,如果有听众朋友对整场直播或我以往的B站视频有任何反馈,都可以在评论区留言。

首先,让我们来看看well的部分。其实昨天是第零天,今天才是正式开始。昨天勇敢地迈出了第一步,期待我能坚持21天。

另一个是我剪出了视频,昨天大家可以在B站上观看。剪辑的工作流是我不断优化过的,因为如果我直接手动剪辑,会非常痛苦。直播大概一小时15分钟左右,最终成品只有40分钟左右。这中间的空白部分是工具自动剪辑掉的,我使用的工具可以识别口癖等,大大提高了剪辑速度。因此,在昨天晚上,也就是今天凌晨,大家能够看到昨天直播的回放视频。这不仅仅是一个回放,我把视频里的空白或冗余部分全部剪掉,这样录播比直播更棒。直播的好处是你可以直接给我反馈,然后我可以针对性地回答问题。

在“less well”方面,第一个是未直播视频号。我原本想同步直播,但发现验证之后它竟然无法开播。另外一个问题是在剪辑视频时我的IDE没有关闭,占据了大量内存,导致视频卡顿。今天我会注意这个问题。昨天我发现有一段录屏,在我实际操作演示时并没有展现出来,会让听众感到奇怪,今天我已经修正了这个问题。

昨天的直播确实也超时了15分钟,这个15分钟在当时直播的时候并没有太大感觉,但大家可以想象一下,我每多录10分钟,背后的剪辑时间也会成倍增加。直播时长越长,剪辑视频时长就越长,也就意味着今后我还会将视频转成文字稿,那么文字稿也会变得更长,这其实是有连带作用的。

最后是“suggestion”建议方面,我会及时收集群友和听众们的反馈,当然我也会在自己的视频中学习。来自群友的一个视角是,对于小白用户来说,大家都还不熟悉Roam Research,所以我应该更多地从用户的角度考虑,应该怎样介绍Roam Research,以及如何把每一堂课的范围缩小到更小。比方说,昨天就超纲讲了一些内容,比如roam/css和roam/js等。

总之,每天持续不断地迭代,基于上一天的反馈进行改进,从而每天这小小的5分钟可能会让我在21天之后变得更加流畅,或者成为一个熟练的直播 Up 主。

1. 本地备份 Local Graph

今天的主题是备份。昨天我们提到了offline模式,也就是我们有一个本地数据库,我直接新建了一个panda3 专门用来做演示。今天我想给大家讲的就是备份文件的后缀是edn,这个文件其实是每次保存在你的本地的,我们可以称之为第一层的备份。后面我还会讲到云端备份,以及如何联动其他的工具软件,甚至还能够共享发布,借助于AI对话等等。

另外,如果你把某一张图片直接拖入Roam Research的界面,比方说我现在就接上一张图,我通过一个拖拉拽的方式拖到这边,你看到它直接就上传了。它的速度其实比我们使用网页版要快得多得多。我们可以看一下它的路径是什么。它的路径其实是一个本地路径。我们可以通过审查元素的方式查看图片的具体位置。我们可以看到它实际上是Roam Research在本地启动了一个localhost 3333端口的本地静态资源服务器,从而我们可以通过连接的方式直接访问到这张图片。

相对应的,如果我们打开Roam Research并且拖入一个PDF,比方说我们直接拖入这本PDF《架构之美》,我们可以看到它也是正常显示的。我们还可以对它进行标注,不过等到之后再来做具体的讲解。我们可以首先看一下,它同样是一个类似的路径。如果我们把这个路径直接复制,替换刚刚我们图片的路径,你可以看到,它同样能够正常打开,并且能够显示对应的目录等等。

这就意味着,如果我们可以再试一下,再拖入一张图片,速度非常快。那么我们可以得出一个推论,这些图片绝对是存储在本地的某个位置的。注意,我们在右上角选择导出,然后查看对应的备份的时候,就可以直接打开本地文件的相应路径。而这个路径里面,其实就已经包括了刚刚自动备份的每一个edn文件。

相应的,我们可以查看图片上传所对应的一个文件夹,文件路径叫做 local-graph-uploads 。你可以看到里面有对应的几个本地文件的路径。你可以看到我的pandas3,也就是刚刚上传的这些文件,都被存储到了这里。这两个MP4文件是成功了的,只是可能由于UI卡顿,它没有做显示。

通过演示,方便大家理解Roam Research本地文件的管理方式,从而可以做一些有趣的设置。

1.1 一切皆文件:联动 Hookmark

比如,我们可以做到一件有趣的事情:使用坚果云或其他工具,直接备份整个 uploads 文件夹。这样,你既备份了 backup 里面Graph的 edn 文件,又备份了所有图片的相关备份,包括 PDF、MP3、MP4 等等各种类型。你可以上传或拖拽到整个 graph 里面的内容。

另外,如果你在使用 Typora 写 Markdown 时不想操心图片的位置,可以把每次插入图片的路径修改成让 local-graph-uploads 这个文件夹。这是一个非常 tricky 的小技巧,但奇妙之处在于,比如在 Typora 这样的工具中,每次上传图片时,可以 copy 到某一个路径。我们可以选择 copy 到 Roam Research 对应的 graph 的路径,这样你所有的本地文件就是使用同一份了。这意味着我们可以在本地把所有内容通过文件的方式管理起来,直接把所有本地的内容全部连接到一起。

当然,我们也使用 Hookmark 把路径关联到 hook 中,然后可以通过 hook 直接在这边新建一个新的 Markdown 文件。这个 Markdown 文件与下面的 uploads 文件夹 hook 到一起,也就是说本地的文件相互链接。这样做的好处是,如果我做视频需要用到一些素材,我可以把截图直接拖入到 Roam Research,然后可以查看到对应的图片的路径。但这个路径,它是发生在对应的位置,我并不知道它实际的路径是什么。我们可以用 hook 直接生成一个 Markdown 的 URL,然后贴回到这个位置。

当然,最理想的情况下是,如果 hook 能够直接把这个链接变成一个图片的链接,它也能正常显示的话,那就是终极目标了。现在我们可以通过这种方式,把所有的文件链接起来。当我直接在这边按下快捷键 q ,就可以直接打开对应的图片了。

这些文件,我们可以在本地把所有的文件都整理和 hook 到一起。所以我们可以在系统级实现双向链接,就是这个文件夹和文件 Markdown 文件相互链接。我也可以从这个文件直接跳回到对应的文件夹,在 Roam Research 里面又可以直接跳转到 TheBrain 里面某一个对应的知识点。

这是一个稍微有点炫技的演示,但是终究是想让大家理解一下,如果你做了全部的本地化之后,你的数据安全或备份就能够做到极致。你可以把这些文件进行云盘的备份,或者定期转移到磁盘,或者上传到 GitHub 等云端的位置。

另外,每一个 Graph 自动备份的 edn 文件实际上是 ClojureScript 的一个特有的格式,但是实质上跟一个 JSON 的格式差不太多。如果你想在本地做格式的转换,可以通过一些脚本,直接把它变成 Markdown 或者是可读的一些格式。

2. 云端备份 GitHub Action

讲完本地备份,让我们再使用一种更轻松、更简单的方式进行云端备份,可以让我通过云端备份获得所有markdown文件并存储至本地。

具体实现方法在这个代码库: https://github.com/JimmyLv/roam2github-actions/actions 我基于国外网友的一个项目进行了一些改造,使其支持了图片备份。但是如果要做到极致,可以参考群友的另一个项目,叫做RoamFilebaseBackup。

首先,我可以创建一个Github Action,自动备份markdown文件。这个markdown文件存储在我的私有库中。这里的Action是一个public的仓库。这里有一个Action脚本,它每两个小时会对我的所有Roam Research内容进行导出。

这个导出脚本实际上是在模拟我们在网页端的鼠标、键盘操作。比如,我们可以手动操作一下,点击"export",然后在导出时选择edn文件,导出到任意的位置。而这个脚本其实做的事情是一样的。

你可以看到我的仓库 GitHub Action中有一个Roam Backup的脚本,这里面其实就是模拟了一些具体的click操作,比方说它click extracting或者是formatting,你可以看到它其实下载了Roam Research的一个zip文件,然后把这个文件进行提取,提取之后,把这里的 EDN 文件进行了格式化,导出成Markdown 文件。

3. 联动DEVONthink &其他笔记工具

导出完成后,你就可以在我的仓库中看到一个名为Roam Backup的文件夹。这个文件夹中存储了我所有的EDN文件、JSON文件和Markdown文件。你可以简单地打开它们,就可以看到所有关于我的文件都存储在这里,包括Daily Note、Project以及我执行的项目或者一些关键的页面等等。

通过备份Markdown文件到GitHub之后,接着可以使用脚本通过 git pull 的方式将GitHub的Git仓库拉取到本地。我们可以在本地通过Obsidian直接打开这样一个文件夹。所有Markdown文件都可以被Obsidian直接预览。

当然,使用DEVONthink也可以打开这些文件,可以直接在DEVONthink里面进行预览。速度非常之快,因为它是纯本地化的。如果没有使用DEVONthink,我们也可以直接在Markdown里面打开Obsidian。通过打开Obsidian,然后选择对应的仓库,在左上角选择对应的备份的文件夹,就可以在这里直接打开预览它了。

备份好的 Markdown 文件也可以通过Alfred的快速查找的功能查找。在本地使用Typora打开也很方便。所以,我们可以基于本地文件直接预览Roam Research里面的所有内容。一旦文件化之后,一切皆文件,我们就可以使用任意的软件或工具去打开它。

那么在这个时候,我们会有一个疑问:这个文件是怎么自动同步到本地的Obsidian呢?

3.1 xbar 自动拉取 GitHub 仓库

比如,在 Roam Research 中写好内容后,我们怎样直接将其拉取到本地呢?下面来介绍一下 Xbar 工具。它是一个菜单栏工具,可以自定义菜单栏功能。例如 Xbar 在每个功能菜单中,可以选择性输出一个字符或者图标,图标对应的就是设置好的插件,用于执行脚本。

打开 Xbar 插件浏览器,里面包含了各种脚本。备份所用的脚本是 Roam Research 的 GitHub 仓库的 git pull 自动拉取功能,自动将其拉取到本地文件夹。例如,定期将 Roam Backup 文件夹进行本地拉取。可以通过点击每 30 分钟这样的方式设置执行频率。设置好后,它就会每 30 分钟执行脚本。这样,我们就能定期将文件从 GitHub 拉取到本地文件夹,然后可以在 Obsidian 或 DEVONthink 中打开,甚至还可以在 Logseq 中打开。

4. 共享发布:集体智慧

最后,我们还可以使用Logseq将Roam Research中的某些页面发布到线上。Logseq能够实现数字花园的概念,你可以将大量笔记导出为HTML格式,然后使用Logseq获得双向数字花园的感觉。

我甚至对页面滚动进行了优化处理,使其横向展开,这样我们就可以横向滚动查看相应的内容。我们可以一次性打开多个内容,横向查看每个内容下面的内容和链接的引用。总之,这样我们就有了数字花园的笔记空间。当然,Logseq的知识图谱也可以正常显示。每次切换时,它都会展示更细致的图表。

当我们在云端备份Roam Research的内容并将其同步到本地时,甚至将本地文件发布到云端时,我们就拥有了一个公开的数字花园。信息和卡片笔记都在不断地流转。当然,这纯粹是从技术层面解决问题,我们不应该过度关注这些技术细节,而是应该思考这些技术如何帮助我们更好地分享和沉淀笔记。关于这些内容,我将在后面的直播课程中详细讲解。

我们之前也在实践中尝试过共同编辑 #RoamCN Graph 并共享同一份公共图谱或知识库。我之前还尝试过将其发布到Github上。我们整理了很多 Roam Research 教程和插件,只不过大部分信息可能已经过时了,所以接下来有可能重新启动这个计划。

关键点在于,我们可以在 GitBook 页面的右上角使用搜索按钮,通过AI进行智能问答。我们可以问一下“Roam Research周报是什么”,就会看到它下面出现了很多感兴趣的内容。我们还可以点击“什么是Roam Research”,让它智能回答。我们希望构建一个公共的知识库,对于小白用户来说,可以直接提问,人工智能会汇总相关的知识点,然后给出一个非常简要的答案。

彩蛋:BibiGPT 例行节目

好了,今天的内容到这里就结束了。总结一下,我们还介绍了Roam Research备份的Markdown文件如何与DEVONthink、Obsidian和Logseq进行联动,并介绍了Xbar这个工具,它可以帮助我们快速地将文件拉到本地或发布Logseq的数字花园。虽然在技术层面上比较复杂,但是通过直播已经有了基本的视频素材,后面只需要把我要讲述的逻辑串联起来就好了。希望我们可以共同建立一个笔记工具的集体数字花园。

最后一个惊喜,我想跟大家一起回顾 BibiGPT 里每天最热门的视频。在 BibiGPT 里,我做了一个最热门视频的总结,每天都会有一个往期最热的总结。BibiGPT 还统计了全站整体最热门的视频,也就是总共被总结了1000多次、几千次的总排行榜,包括之前 GPT-4 的视频或者是我讲解 BibiGPT 的视频。

大家还可以通过 订阅 BibiGPT RSS ,查看每一期的最热门视频来获取最新更新。例如,我们可以看看昨天 6 月 5 日的热门视频,查看哪些视频在昨天的总结中次数最多。

第二个视频讲解立体几何的四大模型,以及与之相关的几何问题。讲解了高考的立体几何,也提到了立体几何里面可以借助具体的四大模型,然后衍生出来的几何题目,在理解题目来源的基础上,对外接球球心的计算。所以,我们可以直接点进去,看具体的内容。我怀疑它这里的字幕,应该是有一些不对的。所以,它的识别应该是有一些错误的。我们可以回顾一下,它的这个视频的字幕。你也可以看到思维导图了,但是对于我们想看的内容,我们还可以针对性地提出自己的问题。比方说,明天就高考了,在这里也预祝一下高考的朋友们能够顺利取得好的分数,虽然我的观众们不可能还会参加高考。

那我们随便来问一下,明天就要高考了,请告诉我最需要记忆的立体几何模型吧。这个其实就是演示说,针对于你感兴趣的知识源,你可以直接向视频进行提问。BibiGPT AI 会自动根据你所提出的问题来对内容进行解答。它得出了一个相对来说比较完整的一个答案。我们还可以直接点击出处,跳转到对应的位置。你可以看到 24 分 28 秒的时候,它讲述的内容其实就包括追的外界球问题或者是集合体的外界球等等。我们可以直接从这个位置来对想看的内容进行跳转。

如果我们在明天就要高考了,我们最需要记忆的模型是特殊集合体,比方说长方体、正方体、长角体等等,然后研究集合体的外周、外界球问题,我们要确定集合体的特殊图形,然后集中对应的模型。如果遇到有很多直角的锥,可以往长方体方向去补,在考试中如果遇到了正方形 ABCD,我们需要去搞清楚它是什么样的特殊集合体,一般算出它的长度和角度后就可以知道它是由什么样的集合体衍生出来的。它甚至还提到了,如果还有不确定的地方,可以参考模拟题和高考题。

第三个是我不了解的领域,但它是 Blender 3D 建模 0 基础入门公开课程的一部分。视频长度为16分53秒,被浓缩成了一个简短的概述,介绍了 Blender 界面的基本操作和场景对象的快捷操作。它还包括一些亮点,例如如何操作鼠标、如何使用快捷键和小键盘数字以及如何演示具体场景。这是全 B 厂最用心的 Blender 3D 建模 0 基础入门开发课程。

让我们继续回顾一下当天的热门视频。其实我还是比较好奇,大家在平台上会去看哪些各种各样的视频的。比方说,这里第三个视频是通胀率全球第一的黎巴嫩,到底是什么样的视频,有 21 次的总结。这里提到黎巴嫩通胀率居全球第一,达到了 269%。可能是因为基督教和穆斯林之间的宗教平衡非常脆弱。下面也会给到一些 highlight,也就是亮点。

在 BibiGPT 重新生成总结有个小 tips,我稍微改一下这里的句子长短,因为不然的话,他会用之前的缓存,这个缓存其实是骗了。所以我们就修改一下句子的长短,让他重新生成一个我们想要看到的更准确的摘要。

好,我们就过下一个视频。下一个视频又讲到了荧光定量的 PCR 原理与分析方法。这个是我可能完全不懂的领域了。还有一个就是,当离开大厂后该如何创业,具体是来自于沈帅波的采访。这边也提到了一些视频当中的亮点。第 6 个视频是讲的南洋和襄阳的经济发展差距,抖音和微信在社交领域的竞争,京东与当当签订战略合作协议等等。最后一个是关于军事的一个合集。

BibiGPT 重新兼容 apikey & Open API 的规划

目前我是重新兼容了使用自己的 API Key 的功能,所以当你有自己的 API Key 的话,你可以直接填到这里的展开的输入框当中,然后点击保存。注意不要点击激活,激活的是我在平台上售卖的 license key,这其实是一种老的方式,我会考虑把它直接弃掉。目前购买市场是直接可以自动充值的,不用填写任何的 license key。

但是如果你有自己的 OpenAI sk-xxxxx 的 apikey 的话,你可以直接填到这儿,就可以直接使用了。目前是不收费、免费使用的,不过由于之前有人在恶意的爬我的接口,所以做了每天 20 次的一个限制。如果你有遇到了,可以直接跟我私信。也是为了防止服务器资源被滥用。

这位朋友提到了,能不能通过离线API来使用网页。其实,我是有想做一个功能的,就是对于每个用户,会生成一个自定义的open API。比方说, /open/summarize ,然后summarize比方说你可以加上URL等于一个网页,但这个接口现在还没有。我只是示例这个意思,然后通过这样一个URL,每个用户都会有一个独一无二的URL。

比方说对于我自己来说, /open/summarize/123 ,通过这样一个路径,你就可以直接访问到对应的阶层数据,也就是总结后的结果。之后每一位用户都可以有自己的一个独立的API,所以你可以有很多好玩的地方,比方说你可以通过Alfred直接通过比方说BB加入一个B站或YouTube的链接,你就可以直接通过API的方式调用到整个网站的一个内容。

从而每个用户都会有自己的一个独立的Open API的一个URL,然后后面加上URL,比方说是B站的一个链接或者是网页的一个链接,你就可以获得这样一个总结的结果,甚至包括字幕的列表等等。

有了这样的方式之后,好玩的地方还很多,比方说你可以批量总结的N个视频,或者是你可以跟你的笔记软件直接集成,比如可以在Roam Research直接通过一种方式,比方说通过 bb 快捷触发一个弹窗,加上一个链接,然后我们就可以直接在下方获得这个视频的总结,这样我们就可以直接在不离开笔记软件的同时来调用总结的接口。所以,这是之后我必须要实现的一个功能,也请大家敬请期待啦。

---

那么,今天的视频就到这里了。算是完成了我所有想讲的内容。虽然一路上还是有些磕磕碰碰,但是很开心大家陪我度过了过去的一小时26分钟。非常非常感谢!如果有不好的地方,确实也是因为真的没有准备,我都是在之前大概半小时开始做PPT。但在前期,还是会在脑子里不断地去过一些我要讲的内容了。

总之,这是我想逼自己的一种创作方式,就是我直接把我要创作的内容通过直播的方式讲出来,并且立下了公开的flag,21天我不坚持也不行。

所以,我们就来看看在每天的这种反思和迭代当中,会不会让我的直播变得更加顺畅。所以之后应该会变得越来越好的,至少这一点上还是比较有信心的。

好,那么今天的视频就到这里了,我们明天再见。明天还是同一时间8点到9点,坚持21天直播挑战,咱们下期再见。拜拜。