# Day-4 区块引用系统

By [Fat Garage](https://paragraph.com/@fat-garage) · 2022-03-18

---

写作是线性的，串行的，而串行交流的一个副作用是你必须把想法强加到某种秩序中。

所以：故事。作者将连在一起的思想云平铺成线性故事（有损）。读者将这些线性故事拆开，并将它们缝合到他们自己的非线性的有联系的思想云中（有损）。

但每一个故事都只是穿越现实的超维景观的一个可能的路径。如果我想绕道呢？

> 在一个重要的意义上，根本就没有 "主题"；只有所有的知识，因为这个世界上无数的主题之间的交叉联系根本无法被整齐地划分开来。
> 
> \-- Ted Nelson，1974年，"计算机自由/梦想机器"

Ted Nelson将此称为 "框架问题（THe framing problem)"。我们可以用什么方式将故事解构为更小的思想积木块，从而拼凑成新的想法？

![Ted Nelson，1974年，"计算机图书馆/梦想机器"](https://storage.googleapis.com/papyrus_images/ae72c8f2929bab48b88df0c93465e9509793d2baddcbfafa795df9cdfcc1eb15.png)

Ted Nelson，1974年，"计算机图书馆/梦想机器"

实际上，我们一直都在这样做。在科学和其他学术研究中，它被称为 "引用"。只是我们的大多数工具在设计时似乎都没有考虑到这一点。

如何构建、解构和重构思想，使之成为新的思想？这是超文本背后的原始动机，而且有少数软件机制可以帮助我们做得比蓝色链接更好。下面是目前一些方法的综述。

将文件分解成更小的思想积木
-------------

也许制作思想积木最直接的方法是将大文件分解成较小的、可重复使用的块。

大多数书面文件都是由一系列较小的 "想法块"组成的，通常是段落。如果我们把这些文件拆开，让每个"想法块"成为一个思想乐高，一个我们可以处理的积木，会怎么样？

这可能是什么样子的？如果你把数据保存到文件中，而不是把文件保存到一个文件中，你可以把每个块（段落）保存到它自己的独立文件中。如果你使用的是数据库，你可能会在每个区块保存一个数据库条目。这些块中的每一个现在都是一个独立的单元，有一个你可以参考的地址。

在这个世界上，什么是文件？一个区块地址的列表。

如果我理解不错，这或多或少是Roam基于块的超文本工作方式。这种方法也与Vannevar Bush在As We May Think中设想的"超文本路径" 有几分相似。

![Xanadu项目模拟图](https://storage.googleapis.com/papyrus_images/309c5858bf646f29e31b1d8c6830566812354ec35b224ee2aae9bf83b4dadc70.png)

Xanadu项目模拟图

权衡利弊：虽然单个区块是有用的成分，但它们作为独立的作品并不总是有用。块状物（blocks）缺乏上下文（context），可能需要拼接成更大的叙事才有意义。与单个文件相比，一个装满了包含段落的ID'd文件的文件夹可能会让人不知所措。话说回来，许多应用程序都保存为自定义文件格式或不透明的数据库，所以这可能没有什么区别。但是，一般来说，作为一个读者，我想要的是文件，

**但作为一个作家，我想要的是块。**

紫色数字在散文中放置ID
------------

紫色数字是唯一的ID，它被自动生成并放置在段落中，使其具有唯一的地址。

为什么是紫色数字？这个概念早在2001年就被一款名为"紫色"的维基软件所推广。

_\*Purple是一套小型的快速黑客工具，其灵感来自于Doug Engelbart试图将他的Augment系统的寻址功能引导到HTML页面。它的目的很简单：生成可以在段落层面上寻址的HTML文档。它通过在每个文本节点的开头自动创建具有静态和分层地址的名称锚，并在每个文本节点的结尾将这些地址显示为链接来实现这一目的。_

紫色数字是稳定的。也就是说，它们一旦生成就保持不变，即使它们周围的文本发生变化。这给了你一个链接的 "钩子"，不会消失。

Obsidian使用紫色数字来实现基于块的寻址。

> _一旦你点击了回车键，一个指向该区块的链接就会为你生成，格式类似于\[\[filename#^dcf64c\]\]，其中dcf64c是刚刚为你生成的区块ID。_
> 
> _\-- Obsidian文档_

当你在Obsidian中创建一个段落的链接时，它会生成一个紫色编号，并将其粘贴在相关段落的末尾。

在HTML中，你可以通过将ID写入元素来实现紫色编号。

紫色数字是一个聪明的黑客，因为你可以把它应用到许多现有的系统中。你不必重新发明文档格式，也不必把它分割成许多部分。你只需在有用的地方贴上一些ID标签。这就像在一本书的页面上进行狗刨一样，可以找到回去的路。

**更多信息**：[ekim.com/software/purple/purple.html](http://ekim.com/software/purple/purple.html), [burningchrome.com/~cdent/mt/archives/000388.html](http://burningchrome.com/~cdent/mt/archives/000388.html), [burningchrome.com/~cdent/mt/archives/000387.html](http://burningchrome.com/~cdent/mt/archives/000387.html), [tbray.org/ongoing/when/200x/2004/05/29/urpleNumbers](http://tbray.org/ongoing/when/200x/2004/05/29/urpleNumbers)

偏移链接引用文件中的范围
------------

到目前为止，我们已经研究了将文档分解成小块的方法，但当你链接到一个区块时，从根本上说，你仍然是在原作者画的边界线内工作。如果你想跨越边界呢？如果对他们的工作有意义的边界对你的工作没有意义怎么办？如果你想引用一个作品的一部分，也就是想引用的部分达不到一个block的长度，或者一个半block的长度，怎么办？

Ted Nelson的Xanadu项目使用了一种聪明的技术，我称之为偏移链接，准确地划分出你想参考的文件的各个部分。

Xanadu的核心是一个叫做EDL的文件，即编辑决定文件。 EDL是一个链接列表，同时还有一个范围。这个范围描述了一个起始位置，从文件的开头偏移，加上一个长度。

> span: [http://hyperland.com/xuCambDemo/WelcXu-D1y,start=25,length=567](http://hyperland.com/xuCambDemo/WelcXu-D1y,start=25,length=567) span: [http://xanadu.com/xanadox/MoeJuste/sources/0-Moe.pscr.txt,start=7995,length=274](http://xanadu.com/xanadox/MoeJuste/sources/0-Moe.pscr.txt,start=7995,length=274) span: [http://hyperland.com/xuCambDemo/WelcXu-D1y,start=592,length=37](http://hyperland.com/xuCambDemo/WelcXu-D1y,start=592,length=37)

从概念上讲，偏移范围可以基于文本偏移（计算字符），或字节偏移（计算字节），或其他的东西。在Xanadu中，它们是文本偏移量，我记得。

EDLs是一种对峙标记。与HTML不同，标记不在文本中，而是在EDL中，EDL指向文本文件。我的想法是，客户端应用程序遵循这些链接，在偏移范围内查找文本，雕刻出那一点文本，并在渲染EDL时将其翻译出来。

![](https://storage.googleapis.com/papyrus_images/ac21d21597eb4fbdcadb5715848e753a6fd20f48d14421a0d58e75d7adc87610.png)

一个没有得到充分重视的截止标记的特点是，它允许你以许多不同的方式标记相同的源内容。你可以为不同的设备设置不同的站位标记，或者对相同的源文件进行不同的重新混合。偏移标记也不需要是一个严格的树形，它可以以有趣的方式重叠。

偏移链接的一个挑战是，它们非常脆弱。如果你所链接的文档发生了变化，哪怕是一点点，链接就会中断。你可以退回到链接整个文档，但这并不理想。

这里有一条我想在某个时候继续探讨的松散线索：偏移链接的脆性是由于可变性。我所链接的东西可能会发生变化，从我手下消失，而我永远不会知道。但是，如果我们把偏移链接与一个不可变的超媒体协议配对起来，会怎么样？

IPFS通过散列其内容来处理文件。散列是一种将数据转换为ID的确定方式。相同的数据，相同的ID。要在IPFS上查找一个文件，你可以使用这样的ID。

`Qme7ss3ARVgxv6rXqVPiikMJ8u2NLgmgszg13pYrDKEoiu`

是的，这很难看，但哈希值的美妙之处在于它们永远不会改变。同样的哈希值在IPFS上总是拉出完全相同的内容。如果内容改变了，地址也会改变。这使得IPFS上的内容是不可改变的。

一个由哈希值和偏移量组成的链接将永远指向完全相同的东西（或者只要该文件在网络上还活着）。

文本片段通过搜索选择摘录
------------

但是，还有一个方法可以减轻抵消的脆性。 网络平台孵化器社区小组最近推出了文本片段链接。这是自标签以来我最喜欢的网络功能。 其基本概念是，你可以通过在URL中加入你想引用的文本片段来引用文档的部分内容。下面是一个文本片段的链接。 `https://en.wikipedia.org/wiki/Vannevar_Bush#:~:text=wholly new forms of encyclopedias will appear%2C ready made with a mesh of associative trails running through them%2C ready to be dropped into the memex and there amplified` 点击它，它将准确地将你链接到我想与你分享的段落。 像EDL中的偏移链接一样，文本片段链接是一种对峙标记。你和我可以引用同一个文件，但指向不同的部分。与紫色数字不同，文本片段链接不需要被指向的文件的合作。 但文本片段的真正优势在于它们对变化有弹性。偏移链接对全局变化很敏感。对于偏移链接，在偏移量之上的文档的任何地方的变化都会破坏链接。相比之下，文本片段链接只对局部变化敏感。一个文本片段链接只有在被引用的特定文本片段从文档中消失时才会中断。 更妙的是，文本片段在我们已有的网络中工作。这是我在Chrome中创建的一个文本片段链接。 我认为文本片段可能是最美丽的黑客。它们通过利用现有的基础设施，把网络变成了一个还算马马虎虎的Xanadu。 **更多阅读**：web.dev/text-fragments, [wicg.github.io/scroll-to-text-fragment](http://wicg.github.io/scroll-to-text-fragment) 翻译自Gordon Brander：[Block reference mechanisms](https://subconscious.substack.com/p/block-reference-mechanisms?utm_source=url&s=r) 翻译：Jessie On lock down Day 4 最近在持续的想文字block的事情，关于idea的最小单元，可以被复用的功能，以及寻址性写作。 我给胖车库做了一个roam里面的用例：把所有的文章都输入到roam里面，然后进行块为单位的交叉引用。文章之所以非常难看懂，是因为缺乏语境，这个语境不是加一个蓝色链接或在文末写一堆references，而是在reason的过程中加入带有context的文字块。 线性的文章其实非常难写，需要做到有“逻辑”，这个过程中大脑做出了很多折中，你必须把想法强加到某种秩序中，强行解释、强行结尾。 这个痛点痛人已久。读者当然想要线性的叙事，因为大家都习惯如此，一旦叙事结构突变超出了这个习惯，没人愿意去花时间理解，甚至去像解谜一样阅读。但neuron minning（ideation Or something）的过程，写作者写东西的过程却更像思维块的叠加，是不成文的进行式创作（比如Paul Valery的笔记）。就像Gordon所说，“每一个故事都只是穿越现实的超维景观的一个可能的路径，但如果我想绕道呢？” 所以说，_寻址性的写作_更像是一个发现的旅程（the journey of discovery），也像我之前形容的在大脑中建筑（architecting in mind)。我要找到某个块，把它放到一个我的语境下，同时这个块又链接着其它语境。**但他在整个块的universe却拥有唯一的ID。** 那抽象出来，我想要为文字去做一种以块（block）为基本单位的可确权的数据库。每一个写作者用来进行思维编程（mind coding）的工具，roam已经做到了这种感觉，但是我希望某种专注在words block reference上，并且从头开始就是开放的去中心化的数据库系统。 这和群体智慧也没什么关系，就是一个可寻址的、可检索的分布式数据库。

---

*Originally published on [Fat Garage](https://paragraph.com/@fat-garage/day-4)*
