blob: 3d592e08899842e1cf060335296165d41095f717 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
+++
title = '极客死亡计划书 V'
subtitle = 'Stirring up some chaos.'
slug = 'site-report-5'
tags = [
"写作","虚构入侵"
]
categories = '极客死亡计划书'
date = 2026-03-08 20:27:07
draft = false
toc = true
toot = 'https://akk.eltr.ac/objects/f35a0017-8596-4c78-97ef-ec20560aac50'
+++
在周末打开终端,`cd` 进极客死亡计划的项目目录,然后打开 Neovim 开始在自己的代码里到处晃悠,删删改改,对我而言是很放松的体验。我时常在浏览器里注意到某个网页元素,回忆起源代码的位置,立马打开编辑器看看有没有需要去毛球(lint)的地方。这种感觉,其实很像是园丁在自己的花园里闲逛,做些简单的修枝剪叶吧?
总之,某个寻常的周末,我冲了一杯非常好喝的瑰夏,在书桌前坐下,开始在代码之间漫游,发觉修枝剪叶的工作都做完了,此时,一个积压在脑后已久的想法突然涌现。我拿起铲子,盯着其中两个花圃,兴致勃勃地说道:“好,那就开始铲土,重新想象园林设计吧!”——这两个花圃就是[前不久](/weekly/57/#博客的内容分区变动)才被移植过的「议论」和「散文」。是的,我把他们又合并了。<!--more-->
---
## 用词说明
为了避免误解,我们先理清一些术语。
下文的「分区」指 Hugo 的 [section](https://gohugo.io/quick-reference/glossary/#section),也就是顶层的内容目录,比如 `/posts` 下有 `/posts/xxx` 和 `/post/yyy` 等页面,这个 `/posts` 就是一个分区。
「分类」是指 Hugo 的 [taxonomy](https://gohugo.io/quick-reference/glossary/#taxonomy),本站有两种分类,一是「[文章系列](/categories/)」,二是「[标签](/tags/)」。不过,出于一些历史原因(其实就是我懒得改),「文章系列」这个分类的代码写作 `categories`,本意是分类。
---
## 命途多舛的极客死亡大地
最初,极客死亡计划上只有一个内容分区,即 `/posts` 分区,所有的文章都放在这下面,其他的页面是如 `/about` 和 `/linkroll` 这样的顶层页面。那是段纯真简单的时光,直到某个名叫 Eltrac 的疯子突然决定要把自己写的~~垃圾~~小说都搬过来,于是网站上就多了一个 `/fictions` 分区。
骇人听闻的事件没有停止,这个疯子决定要给自己读过的每一本书在网站上留一个位置。他先对[稻草人](/weekly/)下了手,心狠手辣地把「书评」分区从周刊手里夺走了,把那些残缺的短评放进了他引以为傲的、单独的 Markdown 文件里,大喊着「原子性!」「双向链接!」的口号,使用名为短代码的邪恶武器将书评嵌入了稻草人的身体里,随后又在他飘忽不定的思绪影响下,把那短代码从整个~~奥兹国~~代码库里剥去。由于操作习惯拙劣,Git 历史的可读性极低,他的罪行也就没有留下证据,那些被他摧残的文件都改了名,或者进了垃圾桶,连 `git blame` 的机会都没有!
简而言之,极客死亡计划又多了一个 `/library` 分区,纯真简单的小骷髅就这么被知识玷污了,眼神里失去了光!
这便是「议叙文大分裂事变」的历史背景,在那之后,Eltrac 短暂地休息了一会儿,可没过多久,他便又舞起键盘,对网站历史最悠久的古迹下了狠手。一向忠心耿耿 `/posts` 分区被他无情地斩成两半,有超过半数的页面作为 `/essays` 分区的新臣民被分离了出去,就这样背井离乡。大魔头对此的辩解是:
> 你也可以理解为,我把文章分成了 T 和 F 两部分(仔细想想,其实更像是 J 和 P 的两部分,判断和感知的区分)。做这个拆分是因为,我发现自己的 T 和 F 可能会在某个时间段宕机其中一个,把这个分开能让我更安心地在情绪崩溃时发疯、在好奇心超负荷运转时写一写没人关心的新话题。
{{< right "——《[稻草人周刊 Vol.57](/weekly/57/)》" >}}
何其可悲!何其可悲!仅仅是因为他自己沉迷于*愚蠢的*大众心理学理论(MBTI),就祸害了全体网站公民的身心健康!更不用说,此举损人不利己,如今大魔头每次在写作时,都会纠结要把他拙劣的文字放在哪边,`/essays` 和 `/posts` 说起来有别,但实际上本是同源,都是他那扭曲头脑不能停止转动的产物。不过,我们也不要太苛责这个敌人,毕竟他自己也尝到了苦头,那便是永远不能停止分类和修整的痛苦,如西西弗斯一般永世不能停下!别听那个叫加缪的老头儿乱说,天天推石头可不幸福!
终于,感谢上天的宽恕,误入迷途的魔头 Eltrac 得到了分类之神 cartlE 的指点。cartlE 刚莅临网站,就立刻发觉稻草人不应与 `/posts` 的子民待在一起。看着 Eltrac 在代码里给稻草人周刊写下的各种特例,神明 cartlE 皱起了眉头,发出疑问:“你是在解鸡兔同笼问题吗?把鸡放鸡笼里,兔放兔笼里不行吗?”
于是,`/posts/weekly` 从极客死亡计划的土地上消失了,取而代之的,是新成立的 `/weekly`。天下苦稻草人周刊久矣!为了恕罪,也向 cartlE 神明展示自己的悔意,Eltrac 立马给稻草人修好了[黄砖路](/weekly/),供他自由通行。
很快,高明的 cartlE 发现了 `/posts` 和 `/essays` 之间的裂谷,便命信息与沟通之神墨丘利去唤来双子座,让它用蟒蛇架起桥梁,把两块大陆合二为一了。终于,失散已久的家人又重聚了,现在 `/posts` 和 `/essays` 不再分裂,他们有了共同的新名字——`/article`。墨丘利还提议,尽管两个大陆合二为一,但旧的居民仍然保留旧的地址,避免书信不能送达,尤其是来自联邦宇宙和万维网提及的消息。[^1]新的居民以 `/article/xxx` 为地址,而旧的居民仍然保留 `/essays/xxx` 和 `/posts/xxx` 的地址。
为了展示自己真的回心转意,大魔王 Eltrac 主动提出,应该把 `/fictions` 分区更名为 `/fiction`,因为目前的其他分区分别是 `/article` `/weekly` 和 `/library`,只留一个复数形式的名字有些眨眼。神明 cartlE 听完,满意地离去了,并留下秘籍供 Eltrac 学习良好 Git commit 习惯的艺术。
就这样,暮光闪闪和他的小伙伴们终于让混沌之王无序痛改前非,懂得了友谊的魔力,小马国又恢复到了祥和之中。
*等等,你串台到哪儿去了?*
## ESC to Reality
*我的天哪,究竟是什么样的读者才能读懂上面那一大坨自我意识过剩的产物……*
让我按下 Escape 键(指切换为 Neovim 的 `NORMAL MODE`,正常模式),来认真解释一下极客死亡计划目前的内容分类设计。
首先,博客目前只有四个分区:
1. [文章](/article/):一般来说,我突然想写点什么东西发出来,都会放在这。
2. [周刊](/weekly/):每周一更新的刊物,包含这周读到的有趣的文章、听到的播客和发现的不错的项目等等,是我整理和收集信息的地方。
3. [书目](/library/):我读完一本书都会写书评放在这里。
4. [虚构](/fiction/):我写的各类小说。
其他分区几乎都是不言自明的,只有「文章」需要特别说明。正如《命途多舛的极客死亡大地》一节中所述,这个分区原本是 `/posts`,一开始被称作「议叙」页面,因为它既包含议论文,又包含叙事文和散文。后来,我觉得这两种文体或许需要分开,于是新增了一个 `/essays` 分区,把议论文都放到这里来。
其实在一开始创建 `/essays` 分区的时候,我就发现了问题,我很难判断一篇文章的归属,我记得当时我花了一个下午的时间给文章重新分区。这种分区在后来又造就了更多的问题,比如:同一个「文章系列」应不应包含来自两个分区的内容?我有一个文章系列叫《代码炼金术》,这里面可能包含我尝试新技术的经历和感受,重点在于「我做了什么」,写得比较散,应该归为 `/posts`;而有的时候,我可能发现了一种新的构建软件的方式,比如[用 Lisp 而不是 HTML 写网页](/posts/webpage-as-lists/),这种有深思熟虑且形成可复用的体系的文章,似乎应该归为 `/essays`。可是,它们都是和写代码相关的,不应该都放到《代码炼金术》这个文章系列里吗?如果一个文章系列里既有议论文,又有记叙文,那不是乱套了吗?
就算不考虑文章系列,确定一篇文章属于 `/posts` 还是 `/essays` 也不容易。前者是写「我做了什么」,后者是写「我思考并的出了什么」,实际上有相当一部分文章的写作逻辑是「我做了一件事情,并且借此有了新的思考,产生了新的想法」,那这还要怎么分区?
从盒子里跳出来想问题:给议论文和记叙文分区真的是有必要的吗?
最后我接受了自己的风格就是叙中有议、议中有叙的,于是把两个分区合并到了一起。不过周刊里的东西实在是太杂了,给它单独设立分区会更合理。
## Tag, You're It
你可能会以为,这个前不久还重新装修过[标签](/tags)和[文章系列](/categories)页面的 Eltrac,又要阴晴不定地把标签和文章系列的其中一个分类给扬掉了,毕竟已经有分区了,再算上这两个分类,网站实际上有三个维度的分类,这太复杂了!
当然,看到「你可能会以为」几个字就知道,我不会这么干。
保留文章系列其实很好理解,保留标签是为了什么?
之前在 [Jim Nielsen](https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/) 的博客上读到过这样的观点:你不需要创建标签,链接就是标签。这里的链接是指在文章中链接到的其他文章,文章之间相互引用所形成的关联,就足够让文章物以类聚了,不需要手动打标签,做额外的分类。这的确是很诱人的想法,所以我给博客做了[视觉化的双向链接图谱](https://www.geedea.pro/graph.html),然后就把「用链接替代标签」这事抛之脑后了。
不移除标签,首当其中的原因就是,双向链接图谱虽然很酷,但是不方便查询。如果真的要找我写的有关某一主题的文章,到像海一样的双链图谱里去找是低效的,这些文章之间也不一定有超链接关联。
再者,我的博客也不是维基百科。据说从维基百科的某个页面开始,一直点击页面中的第一个超链接前往不同的页面,最终会到达「哲学」这个词条。我添加超链接的习惯不如维基百科编辑者那样专业、审慎和克制,没法做到这么严谨的关联,说实话,也不需要这样严谨。
不过,要说最重要的原因,那还是因为我想要按照主题划分文章。我是个兴趣泛滥者,如果你关注我的博客足够长的时间,就会发现我既谈游戏开发,又谈前端开发,还做命令行工具;我不仅写计算机,还常常观察人类,并写下思考;我不仅对社会学、心理学和经济学这些科学感兴趣,还对文学、哲学和语言学感兴趣,我甚至还探索神秘学,会研究占星和塔罗牌;即便是文学这一个类别,我也会涉猎法国文学、拉美文学、日本推理文学和各种杂七杂八的门类。
五花八门的内容要是不按照主题分类,恐怕读者难以把握脉络,也难以找到自己真正感兴趣的内容。假设一个读者只是因为神秘学而关注我,他就可以去阅读[#神秘学](/tags/神秘学/)标签下的内容。标签实际上提供了内容的切片。
此外,并不止是文章,在我的设想里,网站的所有内容都通过标签来归类,而文章系列只是给文章的。如果你打开网站的标签页来看过,就可能发现 [#心理学](/tags/心理学/) 这个标签下不仅有我写的文章,还有《[被讨厌的勇气](/library/2024/被讨厌的勇气/)》《[天生不同](/library/2025/天生不同/)》《[如何在黑暗的房间里找到一只猫](/library/2025/如何在黑暗的房间里找到一只黑猫/)》等书籍的书评,实际上小说和周刊也按照标签归类。
标签页的截图,截于 2026 年 3 月 8 日")
不过,现实有些残酷,从 [GoatCounter](https://stats.geedea.pro/) 的统计数据来看,几乎就没有访客会点开任何一个标签页面,我设想中的「读者可以按照自己感兴趣的话题查看内容」这个需求用例实际上根本不存在。对我自己而已,我也很少在某天突发奇想「要不要看看自己写过什么和占星有关的文章呢?」,然后点开标签页面查看,对我自己的用处也不大。
所以,为什么要留着标签这个东西呢?管理标签费事费力,为了打标签,每次都要先查看已有的标签,用人眼浏览一遍,看看有没有能对得上的;还要克制住自己新增标签的欲望,避免出现太多只有一两篇文章的孤立标签;更麻烦的是,还要记住各个标签的语义,不能混用。标签也很难体现出层级关系,却在很多场景下不能避免进行细分,比如博客就同时存在「神秘学」「占星」和「塔罗」三个标签,而第一个标签实际上是后两个标签的大类——能不能合并成一个呢?它们真的经常出现。然而,有时候我只是广泛地谈一谈神秘学,比如《[好为人师如何帮我反思现代科学的局限性?](/essays/好为人师如何帮我反思现代科学的局限性/)》这篇文章,仅仅是在论述「适当的玄学和迷信为什么是有用的,甚至能达到理性的科学知识达不到的效果」这个观点;有时候,我又是在具体地谈[塔罗牌里某张牌的含义](/categories/塔罗牌漫谈/),这就没必要打上更宽泛的「神秘学」标签了。[^2]
无论以上这些问题的答案如何,都不能发现,标签的存在本身就引发了许多管理难题,而它带来的实际价值却非常少。很明显,我应该把它删掉。
可我偏不。
为什么?答案其实相当不理性,但也相当具有说服力:我不想把它删掉。我想我可能是喜欢标签体系带来的秩序感,也需要建立和维护秩序的感觉。另外,我总觉得,网站的分类就和图书馆一样,大部分找书的人其实都是找到具体书籍的编号之后,直奔书本所在地,但也不能忽视,有很少的一部分人愿意在某个主题的书架附近漫游,发现从未见过的书本。所以,标签可能大多数时候派不上用场,但对我而言,是不能没有的。
## 最后
所以,这大概就是新的秩序了。
《极客死亡计划书》系列文章的最后,还是要给下一期留个引子。我正在思考博客的交互设计。一两个月前就有关注我的读者可能有印象,以往博客文章的底部有一个「心脏」按钮,将鼠标移上去,显示的文字是「为这篇文章献上心脏」,点击之后,心脏图标会变红,文字会变为「你已经献上心脏了」。这其实是点赞按钮,任何人都可以点击它,让点赞数量增加 1。并且,读者点赞之后,页面的最下方会出现一整排「已经收集到的心脏」,有多少点赞数就有多少心脏。我印象最深的是,有一篇文章的点赞数量超过了 20,当时页面下面非常壮观。

可惜,「献上心脏」随着[评论系统的移除](/posts/site-report-4/)一同消失了,一直没有加回来的原因是,我在纠结如何把本身就有些复杂的新交互区设计得更简洁一些,增加元素不太明智。再者,现在博客本身也会同步来自联邦宇宙的点赞,功能上有些重叠。
不过,我想我大概还是会想办法把「献上心脏」加回来的,因为我的确需要一些实在的反馈,不只是访问统计数据。说实话,现在会在联邦宇宙上点赞和留言的读者不算多,至少我很久没看到点赞的数量超过 10 了。尽管,最健康的态度应该是完全不在乎这些数据,只关注和真实的人建立起的链接,但…… 我想我还需要再思考一下。
以前,网站的标签页面还有一个操作按钮,是一只乌鸦,按下之后会隐藏当前页面下的所有「稻草人周刊」。当时这么设计,是因为稻草人周刊混杂在文章分区内,本身的内容又很杂,容易让人抓不住重点,所以提供了一个筛选功能。当时我还费心设计了动画,把鼠标移动到乌鸦头上,页面里的稻草人周刊链接就会闪烁,点击之后这些链接就会收缩起来,直到消失;再次点击按钮,这些链接又会在入场动画之后出现。由于现在周刊是单独的分区了,没有混杂在文章里,这个按钮也就不再需要了。
这些好的改动,似乎磨灭了一些个性,有些不符合我在《[「极客死亡计划」的设计哲学](/essays/极客死亡计划的设计哲学/#8-适当地表达个性)》里提到的第八项原则。当时举的例子里,还留下的就只有 404 页面和 Batrick[^3] 了。
这些设计的去留和增改的确需要好好思考一下,不过这就是下期的内容了。
回见!
[^1]: OK,我知道我有点放飞自我了,所以我~~暂时脱离精神分裂状态~~来解释一下,这里说的是:我用 Gemini(双子座)生成了一个 Python(蟒蛇)脚本,让它把两个分区合成一个了,之所以提到墨丘利(Mercury),是因为双子座的守护行星是水星(Mercury)。由于 Webmention 依赖 URL 标识源地址和目标地址,如果改了地址,仅仅作重定向是不够的,会导致旧的 Webmention 失效,除非重新发送一遍,所以就用 Python 脚本给每篇文章都添加了 `url` 属性,这样就算文件放在 `/article/xxx.md` 下,URL 也还是 `/posts/xxx` 或者 `/essays/xxx`。
[^2]: 不要建议我用大语言模型自动打标签,如果我不能清楚明白每个标签的具体语义,那做分类还有什么意义?为什么要为了支撑一个已经丧失了意义的事物的存在,而浪费大量的算力?
[^3]: 如果你把页面往上滚动,就会看到一直蝙蝠从页面顶部飞下来,它是「返回顶部按钮」。点击它,Batrick 就会带你上去。
|