summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-02-15 11:51:04 +0800
committereltrac <hi@eltr.ac>2026-02-15 11:51:04 +0800
commit96dc63ee32525a99b1f4651a72f3ec53044430c8 (patch)
tree696db9f6a50e46164a0a742b431aa3f9ea1be7cc
parent0388e2b7e61334bca74bfd3299e0dc8a267eb079 (diff)
parenta7d632331058b76b3e704deb642008420da125cc (diff)
Merge branch 'restructure'
-rw-r--r--assets/css/utils/_utility.scss10
-rw-r--r--config/_default/params.zh.toml6
-rw-r--r--content/categories/_index.md7
-rw-r--r--content/categories/game++/_index.md6
-rw-r--r--content/categories/代码炼金术/_index.md4
-rw-r--r--content/categories/艺术脑袋/_index.md4
-rw-r--r--content/categories/雨天集/_index.md4
-rw-r--r--content/essays/go-philosophy.md24
-rw-r--r--content/essays/libra-js-开发日志.md4
-rw-r--r--content/essays/如何优雅地部署一个静态网站.md1
-rw-r--r--content/essays/零JavaScript的博客统计图表.md2
-rw-r--r--content/featured.md4
-rw-r--r--content/posts/IN-LIBRIS-LIBERTAS.md1
-rw-r--r--content/posts/webpage-as-lists.md2
-rw-r--r--content/posts/weekly/29.md4
-rw-r--r--content/posts/weekly/68.md27
-rw-r--r--content/posts/为什么不玩扑克呢.md4
-rw-r--r--content/posts/为战斗献上心脏.md2
-rw-r--r--content/posts/今夜不爱就死.md1
-rw-r--r--content/posts/健康的灵魂是世上最无趣之物.md3
-rw-r--r--content/posts/大概是下雨的关系.md2
-rw-r--r--content/posts/我的 RSS 解决方案.md3
-rw-r--r--content/posts/撞到人要说对不起.md1
-rw-r--r--content/posts/有才华的同人作品是怎样的.md1
-rw-r--r--content/posts/死亡浪漫主义-II.md9
-rw-r--r--content/posts/这个世界会累死完美主义者吗.md1
-rw-r--r--content/posts/逃离独居生活.md3
-rw-r--r--content/posts/逃离群居生活.md1
-rw-r--r--content/tags/_index.md7
-rw-r--r--i18n/en.toml1
-rw-r--r--i18n/en.yml77
-rw-r--r--i18n/zh.toml1
-rw-r--r--layouts/_partials/components/date.html2
-rw-r--r--layouts/_partials/taxonomy/all-categories.html39
-rw-r--r--layouts/_partials/taxonomy/pagefind.html7
-rw-r--r--layouts/featured.html18
-rw-r--r--layouts/tags/taxonomy.html14
-rw-r--r--layouts/taxonomy.html28
-rw-r--r--layouts/term.html1
39 files changed, 142 insertions, 194 deletions
diff --git a/assets/css/utils/_utility.scss b/assets/css/utils/_utility.scss
index 7b7c53c3..9993d080 100644
--- a/assets/css/utils/_utility.scss
+++ b/assets/css/utils/_utility.scss
@@ -33,3 +33,13 @@
.xerox {
filter: url(#x);
}
+
+.writing-vertical {
+ writing-mode: vertical-lr;
+}
+
+@media (min-width: 768px) {
+ .md\:writing-vertical {
+ writing-mode: vertical-lr;
+ }
+}
diff --git a/config/_default/params.zh.toml b/config/_default/params.zh.toml
index a1973a05..51da385d 100644
--- a/config/_default/params.zh.toml
+++ b/config/_default/params.zh.toml
@@ -1,11 +1,11 @@
description = "欢迎来访,这里只有真情流露和赤裸的思考。"
[[nav]]
-name = "精选"
-link = "/featured/"
+name = "切行"
+link = "/tags/"
[[nav]]
-name = "搜寻"
+name = "泳道"
link = "/categories/"
[[nav]]
diff --git a/content/categories/_index.md b/content/categories/_index.md
index 1080d041..a7729170 100644
--- a/content/categories/_index.md
+++ b/content/categories/_index.md
@@ -1,3 +1,8 @@
---
-title: 分类
+title: 泳道
---
+
+在软件工程师常用的统一建模语言(UML)中,有「泳道」这个概念。在有多个实体、对象和流程的活动图中,划分泳道能帮读者快速识别某个模块的在业务逻辑中的具体职责。
+
+比起自由的切行,这里有更多的秩序。
+
diff --git a/content/categories/game++/_index.md b/content/categories/game++/_index.md
deleted file mode 100644
index 428b6f84..00000000
--- a/content/categories/game++/_index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Game++
-description: 写游戏开发日志的地方。
-aliases:
- - "Game++"
----
diff --git a/content/categories/代码炼金术/_index.md b/content/categories/代码炼金术/_index.md
new file mode 100644
index 00000000..6cac9913
--- /dev/null
+++ b/content/categories/代码炼金术/_index.md
@@ -0,0 +1,4 @@
++++
+title = "代码炼金术"
+description = "_Who are we to fight the Alchemy?_"
++++
diff --git a/content/categories/艺术脑袋/_index.md b/content/categories/艺术脑袋/_index.md
deleted file mode 100644
index c79a890c..00000000
--- a/content/categories/艺术脑袋/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 艺术脑袋
-description: 有时我的大脑会以为它很懂艺术。
----
diff --git a/content/categories/雨天集/_index.md b/content/categories/雨天集/_index.md
new file mode 100644
index 00000000..ffe0bfc1
--- /dev/null
+++ b/content/categories/雨天集/_index.md
@@ -0,0 +1,4 @@
++++
+title = "雨天集"
+description = "_真希望雨能下不停。_"
++++
diff --git a/content/essays/go-philosophy.md b/content/essays/go-philosophy.md
index 5481655d..2284f090 100644
--- a/content/essays/go-philosophy.md
+++ b/content/essays/go-philosophy.md
@@ -9,7 +9,7 @@ draft: false
toc: true
aliases:
- /posts/go-philosophy
-categories: Coding
+categories: 代码炼金术
---
@@ -267,7 +267,7 @@ func Process(data string, logger Logger) {
短小的接口看起来没用,但接口完全可以像搭积木一样把方法堆叠起来,比如下面这个类型就既是 `Writer` 又是 `Closer` 还是 `Logger`。
```go
-type FileWriter struct {
+type FileWriter struct {
f *os.File
}
@@ -282,7 +282,7 @@ func (*fw FileWriter) Log() { ... }
```java
// 在 Java 中实现接口
-class FileWriter implements Writer {
+class FileWriter implements Writer {
public void write() { ... }
}
```
@@ -350,7 +350,7 @@ func (c *Config) Path() string {
`interface{}` 常常被用来接收不确定类型的值,很多时候这种操作是必要的,但 Rob Pike 指出,很多人滥用了空接口类型,他说:
> You might as well write in Python.
->
+>
> 你还不如去写 Python 呢。[^2]
将代码保持在 Go 严格的类型系统中,有助于保持程序的安全性。除此之外,空接口最大的问题是「不够清晰」——清晰的代码可读性是 Go 语言的核心之一。使用空接口类型让函数的输入和行为都变得不可预测,代码更难阅读,而且更难发现 Bug。
@@ -471,10 +471,10 @@ console.log(OK ? "It's okay" : "It's not okay")
这看起来还挺清晰的,但 Go 的设计者发现有不少人会用三目表达式来编写令人费解的控制结构。
```js
-const someString = isAnimal
+const someString = isAnimal
? (isElephant ? "I'm an elephant" : "I'm just a dumb animal")
- : (CheckIfItIsAPlant()
- ? "I can't speak. I'm a plant"
+ : (CheckIfItIsAPlant()
+ ? "I can't speak. I'm a plant"
: "Fuck, I'm not even a plant?")
```
@@ -538,19 +538,19 @@ func doSomeReflection(i interface{}) {
// 获取 i 的类型
// 一个定义在 main 包里、名为 User 的结构体会返回 main.User
t := reflect.TypeOf(i)
-
+
// 获取 i 的底层类型
// 同样一个名为 User 的结构体,会返回 struct
k := reflect.KindOf(i)
-
+
// 获取 i 的值
v := reflect.ValueOf(i)
// 如果要获取值的类型,就可以这样写
vk := reflect.ValueOf(i).Kind()
-
+
// 如果 i 是一个结构体,可以用这个方法获取它的字段数量
nf := reflect.NumField(i)
-
+
// Field() 方法用于获取字段,配合上面的方法可以遍历结构体
for n := 0; n < numberOfFields; n++ {
// 这里会输出该字段的类型和值
@@ -671,7 +671,7 @@ func safelyDo(work *Work) {
这句话直接翻译过来是:文档是给用户的。
> A lot of time when people write documentation, they say "this is what the function does", and they don't think about "what the function is for".
->
+>
> 很多时候人们写文档,会写「这个函数会做这个事情」,而他们不会想「这个函数是拿来干嘛的」。
这条也更像是工程智慧,而非语言的基础知识。在我的理解力,「这个函数是拿来干嘛的」其实是提供了相关的上下文,即「为什么一开始要设计这个函数」「为什么用户会用到这个函数」。在上一小节的例子中,`safelyDo()` 函数封装了 `do()` 函数,用于恢复可能出现的 `panic`,如果只考虑「做什么」,文档就应该是这样:
diff --git a/content/essays/libra-js-开发日志.md b/content/essays/libra-js-开发日志.md
index 5209b800..7e63231d 100644
--- a/content/essays/libra-js-开发日志.md
+++ b/content/essays/libra-js-开发日志.md
@@ -7,7 +7,7 @@ draft: false
toc: true
aliases:
- /posts/libra-js-开发日志
-categories: Coding
+categories: 代码炼金术
---
博客从去年十二月开始就一直在用 [Fancybox](https://fancyapps.com/fancybox/) 作为博客的图片灯箱插件,之前还在用 Typecho 搭建博客的时候就在用这个库。所谓灯箱,其实就是点击图片之后将图片放大并居中显示,就像现实世界中的广告灯牌一样。不过我其实一直很想要把 Fancybox 换掉,因为它太臃肿了,包含了很多我不需要的功能(比如 1:1 放大、镜像翻转、前后切换等等),体积接近 100 KB;不仅如此,Fancybox 实际上是一个商业库,并不是免费开源的。出于这些原因,我决定自己从零开始做一个灯箱插件。<!--more-->
@@ -184,7 +184,7 @@ animate(startingState, finalState) {
[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame) 是这样描述这个方法的:
> The frequency of calls to the callback function will generally match the display refresh rate. The most common refresh rate is 60hz, (60 cycles/frames per second), though 75hz, 120hz, and 144hz are also widely used.
->
+>
> 调用回调函数的频率一般会和显示器的刷新率匹配。最常见的刷新率是 60 赫兹(每秒 60 个循环/帧),不过 75 赫兹、120 赫兹和 144 赫兹也被广泛使用。
我不确定描述是否属实,因为测试时动画偶尔会掉帧,往往是在第一次执行动画时,这有可能是浏览器或者操作系统为了平衡性能和管理系统资源导致的偶发性问题吧,不过我只是在画 2D 图像啊…… 如果图片要移动的距离比较长,也容易出现卡顿或者闪现,这是因为动画的帧数是写死的,太长的话,每帧之间的差异也就会大一些。总之,使用 `requestAnimationFrame` 的方法不太美妙。
diff --git a/content/essays/如何优雅地部署一个静态网站.md b/content/essays/如何优雅地部署一个静态网站.md
index 7920f79e..740081fc 100644
--- a/content/essays/如何优雅地部署一个静态网站.md
+++ b/content/essays/如何优雅地部署一个静态网站.md
@@ -2,6 +2,7 @@
title = '如何优雅地部署一个静态网站?'
tags = ['DevOps', 'Geek', 'Web']
slug = 'deploying-static-sites'
+categories = '代码炼金术'
date = 2026-01-28 18:07:29
draft = false
toc = true
diff --git a/content/essays/零JavaScript的博客统计图表.md b/content/essays/零JavaScript的博客统计图表.md
index d985b880..9b6f0ba1 100644
--- a/content/essays/零JavaScript的博客统计图表.md
+++ b/content/essays/零JavaScript的博客统计图表.md
@@ -9,7 +9,7 @@ toc: true
slug: zero-js-chart
aliases:
- /posts/zero-js-chart
-categories: Coding
+categories: 代码炼金术
---
diff --git a/content/featured.md b/content/featured.md
deleted file mode 100644
index 37964861..00000000
--- a/content/featured.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 精选
-layout: featured
----
diff --git a/content/posts/IN-LIBRIS-LIBERTAS.md b/content/posts/IN-LIBRIS-LIBERTAS.md
index 9eb69613..ce7a3152 100644
--- a/content/posts/IN-LIBRIS-LIBERTAS.md
+++ b/content/posts/IN-LIBRIS-LIBERTAS.md
@@ -6,6 +6,7 @@ draft: false
tags:
- 阅读
toc: true
+categories: 年终总结
aliases:
- /posts/in-libris-libertas
---
diff --git a/content/posts/webpage-as-lists.md b/content/posts/webpage-as-lists.md
index 02f7869d..0e068e66 100644
--- a/content/posts/webpage-as-lists.md
+++ b/content/posts/webpage-as-lists.md
@@ -3,7 +3,7 @@ title = '网页即列表!'
subtitle = '用 Clojure 构建静态网站'
slug = 'webpage-as-lists'
tags = ['编程','Web','Lisp']
-categories = 'Coding'
+categories = '代码炼金术'
date = 2026-02-13 22:30:17
draft = false
toc = true
diff --git a/content/posts/weekly/29.md b/content/posts/weekly/29.md
index a6c2cd36..d8038769 100644
--- a/content/posts/weekly/29.md
+++ b/content/posts/weekly/29.md
@@ -31,7 +31,7 @@ aliases:
- 修复了[所有文章页面](/posts/)列表中的日期显示(感谢 [Zeee](http://velasx.com) 指出问题!)
- 移除了 tocbot.js,使用 Hugo 静态生成的目录,编写了简单的脚本和 CSS 实现 tocbot 提供的部分功能(平滑滚动和根据视口位置高亮显示目录链接等),减少了页面中的 JavaScript 加载
-- 增设了[精选页面](/featured/)
+- 增设了[精选页面](/featured/)[^2]
### 小说创作
@@ -188,3 +188,5 @@ aliases:
- ~~这周没读几篇文章所以只能多写点琐事凑数了~~
[^1]: 在我设定下的 Backrooms,很少有大型的人类聚落和基地(如果有的话这群人还在里面受什么苦啊!),原因之一就是植殖癌会摧毁大面积的人造建筑,导致人类只能尽可能地在已有的结构中生存。
+
+[^2]: 2026/2/15: 已经移除独立的精选页面,请查看[精选标签](/tags/精选/)下的文章。
diff --git a/content/posts/weekly/68.md b/content/posts/weekly/68.md
index 8428f8b6..741aeed4 100644
--- a/content/posts/weekly/68.md
+++ b/content/posts/weekly/68.md
@@ -15,11 +15,7 @@ toc = true
---
-嘿!我[上周](/posts/weekly/67)在周刊的开头表示自己正在重新思考博客的一些 UI/UX 设计,并且在联邦宇宙上发起了[投票](https://akk.eltr.ac/objects/b6776592-efc0-495f-9647-b3c46fa56385),结果令我震惊——原来我才是异端吗?!
-
-macOS 会根据当地日出日落时间在亮色和暗色模式之间切换,我也花了不少心思让 NeoVim 和自己的网站自动跟随系统配色,结果调查之后才发现,原来大部分人都不会切换操作系统的明暗配色!而且,还有一部分人出于隐私考虑,禁止网站读取操作系统的明暗模式(因为暗色模式的用户很少,追踪器可以用这个特征生成指纹),所以也有手动切换的需求。
-
-总而言之,现在你可以在网站首页的导航栏下找到一个选择框,可以在「自动」「亮色」和「暗色」三种模式之间切换。
+新年好,各位!这期周刊发布的时候,应该正好是除夕。
继续阅读周刊吧!
@@ -66,7 +62,7 @@ macOS 会根据当地日出日落时间在亮色和暗色模式之间切换,æˆ
> [!note] 📜
> [What to Use Instead of PGP](https://soatok.blog/2024/11/15/what-to-use-instead-of-pgp/)
-PGP(Pretty Good Privacy)是诞生于上世纪九十年代的加密软件,可以用来给文本、邮件、文件和磁盘分区等签名、加密和解密。PGP 本来是个商业软件,后来出现了 OpenPGP 这个开放的标准,GNU Privacy Guard(俗称的 GPG)和 Sequoia PGP 等软件实现了这个标准。不过,使用 OpenPGP 基本上是绕不过 GPG 的,就像使用联邦宇宙也绕不开 Mastodon 一样,使用率最高的软件几乎可以决定事实标准。上面的两篇文章观点一致,PGP、OpenPGP、GPG 等所有相关的软件,全都有不可忽视的缺陷,所有人都不应该继续使用它。
+PGP(Pretty Good Privacy)是诞生于上世纪九十年代的加密软件,可以用来给文本、邮件、文件和磁盘分区等签名、加密和解密。PGP 本来是个商业软件,后来出现了 OpenPGP 这个开放的标准,GNU Privacy Guard(俗称的 GPG)和 Sequoia PGP 等软件实现了这个标准。[^4]不过,使用 OpenPGP 基本上是绕不过 GPG 的,就像使用联邦宇宙也绕不开 Mastodon 一样,使用率最高的软件几乎可以决定事实标准。上面的两篇文章观点一致,PGP、OpenPGP、GPG 等所有相关的软件,全都有不可忽视的缺陷,所有人都不应该继续使用它。
Latacora 的《The PGP Problem》这篇文章发表于 2019 年,第二篇文章由 Soatok 撰写,撰写的原因是:*Latacora 那篇文章发布都五年了,你们这些人怎么还挤破了头去用 PGP?*
@@ -78,7 +74,7 @@ Soatok 表示,对于密码学专家来说,「PGP 很难用并且有缺陷」
>
> 我们不能只是为了让 Unix 书呆子们对它们的玩具感觉良好就接受差劲的加密系统。
-要解决瑞士军刀「样样都会但是每样都干不好」的问题,方法当然是给特定的用途找正经的工具来用,比如用 Magic Wormhole 加密传输文件(或者 `ssh` + `rsync` 也行)、用 SSH 密钥给 Git commit 签名、用 Sigstore 给软件包签名、用 Signal 进行加密通信而不是用 PGP 加密电子邮件。[^2] 不过,比起常规的加密和签名,PGP 实际上还提供了一个密码学意义上的、去中心化的身份认证系统,这点似乎还没有特定的软件或标准可以替代。
+要解决瑞士军刀「样样都会但是每样都干不好」的问题,方法当然是给特定的用途找正经的工具来用,比如用 Magic Wormhole 加密传输文件(或者 `ssh` + `rsync` 也行)、用 SSH 密钥给 Git commit 签名、用 Sigstore 给软件包签名、用 Signal 进行加密通信而不是用 PGP 加密电子邮件。[^3] 不过,比起常规的加密和签名,PGP 实际上还提供了一个密码学意义上的、去中心化的身份认证系统,这点似乎还没有特定的软件或标准可以替代。
总而言之,PGP 已经是老古董了,近年来给它打上的新补丁看起来也无济于事,有不少缺陷。最好在特定的用途下使用更现代的软件替代,而不是用一个 PGP 密钥对走天下。仔细想想,我一开始接触到 PGP 和 GPG 也只是为了给 Git commit 签名,而这点完全可以用 SSH 密钥代替。
@@ -114,7 +110,7 @@ Well, that's pretty fucked up.
> [!note] 📻
> [《独树不成林》302-国家应该立法禁止青少年使用社交媒体吗?](https://www.xiaoyuzhoufm.com/episode/698d4f2666e2c3037721b330)
-近期澳大利亚正式推行了青少年社交媒体禁令,十六岁以下的儿童不能使用社交媒体。[^3]这一举动也引起许多国家效仿,因为他们发现社交媒体禁令在实操层面是可行的,澳大利亚在推行禁令的时间里几乎没有误封成年人的账号。至于为什么要禁止青少年使用社交媒体,主要的影响来自社会心理学家乔纳森·海特的《焦虑的一代》,这本书从教育和技术等角度解释了智能手机和社交平台如何塑造童年,以及如何对青少年造成了伤害。青少年中普遍存在的心理问题其实**并非**是社交媒体单方面导致的,还有,比方说,鼓励式教育。童年中挫折的缺失,使得青少年在长大后无法面对真实世界——当我听到美国的大学甚至要求老师为课堂内容设置内容警告(trigger warning)的时候,我真的笑出声了。
+近期澳大利亚正式推行了青少年社交媒体禁令,十六岁以下的儿童不能使用社交媒体。[^2]这一举动也引起许多国家效仿,因为他们发现社交媒体禁令在实操层面是可行的,澳大利亚在推行禁令的时间里几乎没有误封成年人的账号。至于为什么要禁止青少年使用社交媒体,主要的影响来自社会心理学家乔纳森·海特的《焦虑的一代》,这本书从教育和技术等角度解释了智能手机和社交平台如何塑造童年,以及如何对青少年造成了伤害。青少年中普遍存在的心理问题其实**并非**是社交媒体单方面导致的,还有,比方说,鼓励式教育。童年中挫折的缺失,使得青少年在长大后无法面对真实世界——当我听到美国的大学甚至要求老师为课堂内容设置内容警告(trigger warning)的时候,我真的笑出声了。
联系到[上一期周刊](/posts/weekly/67/#如何逃离自说自话的认知体系)提到的《独树不成林》第 299 期播客中的观点,互联网上争吵不断、社交媒体越来越烂的根本原因是人们无法在互联网上建立共识,而受到不健全教育摧残的青少年又开始在社交媒体上要求网友设置内容警告、照顾自己的情绪,无疑造就了一个更加乌烟瘴气的互联网。
@@ -169,6 +165,14 @@ Well, that's pretty fucked up.
如果你想的话,可以关注我的 [Codeberg 资料页](https://codeberg.org/eltrac),这里还没有太多的东西,但是会慢慢丰富起来的。
+### 现在可以手动切换亮色和暗色模式
+
+嘿!我[上周](/posts/weekly/67)在周刊的开头表示自己正在重新思考博客的一些 UI/UX 设计,并且在联邦宇宙上发起了[投票](https://akk.eltr.ac/objects/b6776592-efc0-495f-9647-b3c46fa56385),结果令我震惊——原来我才是异端吗?!
+
+macOS 会根据当地日出日落时间在亮色和暗色模式之间切换,我也花了不少心思让 NeoVim 和自己的网站自动跟随系统配色,结果调查之后才发现,原来大部分人都不会切换操作系统的明暗配色!而且,还有一部分人出于隐私考虑,禁止网站读取操作系统的明暗模式(因为暗色模式的用户很少,追踪器可以用这个特征生成指纹),所以也有手动切换的需求。
+
+总而言之,现在你可以在网站首页的导航栏下找到一个选择框,可以在「自动」「亮色」和「暗色」三种模式之间切换。
+
### 咖啡因……
回家之后离开了自己的吧台和咖啡器具,我像头慌不择路的驴一样翻出了一台半年没用过的廉价美式滴滤机。由于我连称都没有,磨豆也只能用我爸那台意式咖啡机上自带的磨豆组件,更是控制不好分量和水量,于是就…… 毫不意外地喝多了。
@@ -186,10 +190,13 @@ Well, that's pretty fucked up.
## 切片
- 本周发现,我一直在用并且非常喜欢的 RSS 阅读器 NetNewsWire,竟然比我老!它今年 [23 岁](https://netnewswire.blog/2026/02/11/netnewswire-turns.html)了。不过说实话,有什么好震惊的,~~我本来就还年轻啊~~。
+- 情人节那天,Internet Archive 发布了一些复古的、保留到现在的[情人节插画设计](https://archive.org/details/%40iasocial/lists/13/valentines-2026),这些绘画风格很吸引我。我最喜欢的是[这张](https://archive.org/details/JohnMartinsBook192302),是一本儿童杂志的封面。
[^1]: Scramble 作为动词的意思是「爬」,Scrambler 可以理解为「爬行者」;在通信领域,Scrambler 指无线电的「保密器」,这层意思和小说中的设定可能会更契合一些。顺带一提,我之前也用 Scramble 这个词生造了一个叫作 Scramby 的词用来写怪谈作品,你可以在 Backrooms 读到:[Entity 60 - "Scramby"](https://backrooms-wiki.wikidot.com/entity-60)。
-[^2]: 顺带一提,Soatok 作为密码学专家(cryptographer),似乎也不太喜欢 Matrix 这个通信协议,他在 2024 年 8 月写过一篇[文章](https://soatok.blog/2024/08/14/security-issues-in-matrixs-olm-library/)解释 Matrix OLM 库的安全性问题;不过,时间已经过去一年多了,文章所述问题是否被解决,我就不太了解了。他比较认可的加密通信软件是 Signal。不过他也承认,对于那些不愿意使用手机号注册的非常在意隐私的技术用户而言,Signal 不太合适,也没有其他更好的选择。所以…… 还是继续用 Matrix 吧……
+[^2]: 来源:[BBC News (Internet Archive)](https://web.archive.org/web/20260130142200/https://www.bbc.com/news/live/cwy54q80gy9t)
+
+[^3]: 顺带一提,Soatok 作为密码学专家(cryptographer),似乎也不太喜欢 Matrix 这个通信协议,他在 2024 年 8 月写过一篇[文章](https://soatok.blog/2024/08/14/security-issues-in-matrixs-olm-library/)解释 Matrix OLM 库的安全性问题;不过,时间已经过去一年多了,文章所述问题是否被解决,我就不太了解了。他比较认可的加密通信软件是 Signal。不过他也承认,对于那些不愿意使用手机号注册的非常在意隐私的技术用户而言,Signal 不太合适,也没有其他更好的选择。所以…… 还是继续用 Matrix 吧……
-[^3]: 来源:[BBC News (Internet Archive)](https://web.archive.org/web/20260130142200/https://www.bbc.com/news/live/cwy54q80gy9t)
+[^4]: 最开始写下这行文字时,我的了解不算全面,这里需要补充一些信息。如今的 GnuPG 实际上已经不支持最新的 OpenPGP 标准了,而是转而制订了新标准 [LibrePGP](https://librepgp.org/),这个标准分裂了。Sequoia 实现的才是最新的 OpenPGP 标准。嗯…… 总之 PGP 系的软件和标准还挺乱的。
diff --git a/content/posts/为什么不玩扑克呢.md b/content/posts/为什么不玩扑克呢.md
index 0f4eec44..0189d571 100644
--- a/content/posts/为什么不玩扑克呢.md
+++ b/content/posts/为什么不玩扑克呢.md
@@ -1,7 +1,7 @@
---
title: 为什么不玩扑克呢?
subtitle: 游戏《Expoker》设计日志
-categories: Game++
+categories: 代码炼金术
tags:
- 游戏
date: 2025-02-12 09:06:30
@@ -200,4 +200,4 @@ Joker 牌只有两张,是一种稀缺资源。前面提到配置稀缺资源çš
[^1]: [Ace - quword](https://www.quword.com/ciyuan/s/ace)
-[^2]: *啊?你问《Warstro》怎么办?呃…… 改天再说吧* \ No newline at end of file
+[^2]: *啊?你问《Warstro》怎么办?呃…… 改天再说吧*
diff --git a/content/posts/为战斗献上心脏.md b/content/posts/为战斗献上心脏.md
index 33ff1f4f..148217f7 100644
--- a/content/posts/为战斗献上心脏.md
+++ b/content/posts/为战斗献上心脏.md
@@ -1,7 +1,7 @@
---
title: 为战斗献上心脏!
subtitle: 游戏《Heart Hunter》开发日志
-categories: Game++
+categories: 代码炼金术
tags:
- 游戏
date: 2025-03-18 10:08:06
diff --git a/content/posts/今夜不爱就死.md b/content/posts/今夜不爱就死.md
index 5e09a557..523f3021 100644
--- a/content/posts/今夜不爱就死.md
+++ b/content/posts/今夜不爱就死.md
@@ -1,7 +1,6 @@
---
title: 今夜不爱就死
subtitle: 赏析 Lady Gaga 新单曲《Abracadabra》
-categories: 艺术脑袋
tags:
- 音乐
- 文化
diff --git a/content/posts/健康的灵魂是世上最无趣之物.md b/content/posts/健康的灵魂是世上最无趣之物.md
index 48f3ce41..ea5d969c 100644
--- a/content/posts/健康的灵魂是世上最无趣之物.md
+++ b/content/posts/健康的灵魂是世上最无趣之物.md
@@ -1,7 +1,6 @@
---
title: 健康的灵魂是世上最无趣之物
subtitle: 观《魂断威尼斯》有感
-categories: 艺术脑袋
tags:
- 性少数
- 健康
@@ -43,7 +42,7 @@ aliases:
身体的衰退很显然是衰老带来的影响,在回忆片段中,阿弗雷德也直言不讳地指出古斯塔夫年事已高,而老年让他变得不再纯洁。
> There's no impurity so impure as old age.
->
+>
> 世上没有不洁比得上老年。
身体上的衰退还有两种体现。首先,是古斯塔夫来到威尼斯的原因——修养身心。朋友阿弗雷德为古斯塔夫请来医生之后,医生发现他的心脏并不健康,认为他需要好好休息,所以,古斯塔夫就去到了威尼斯的一家酒店度假。其次是故事中发生在威尼斯的疫情,这里电影还映射了一些社会现实,由于威尼斯是一个极度依赖旅游业的城市,传染病的消息一旦传到游客耳中,必定会影响当地经济,所以,电影里几乎所有人都在欺骗古斯塔夫,最后古斯塔夫应该是死于霍乱,不过究竟是不是病死的,电影没有指明(但根据酒店里某个工作人员告诉古斯塔夫的内容,最开始得霍乱死的人,有一个黑瘦的船夫和一个卖水果的商贩,而古斯塔夫在一开始就是乘船来的,船夫的形象与描述吻合,在海滩上时,他也吃过其他游客都谨慎不愿意买的草莓)。所以,身体患上传染病大概也是一种衰退。
diff --git a/content/posts/大概是下雨的关系.md b/content/posts/大概是下雨的关系.md
index 191c2f99..0567a103 100644
--- a/content/posts/大概是下雨的关系.md
+++ b/content/posts/大概是下雨的关系.md
@@ -6,7 +6,7 @@ tags:
date: 2025-10-23 23:07:10
draft: false
toc: false
-categories: 乱章
+categories: 雨天集
aliases:
- /posts/大概是下雨的关系
---
diff --git a/content/posts/我的 RSS 解决方案.md b/content/posts/我的 RSS 解决方案.md
index 91855aa6..2fc364f3 100644
--- a/content/posts/我的 RSS 解决方案.md
+++ b/content/posts/我的 RSS 解决方案.md
@@ -1,11 +1,12 @@
---
date: 2024-11-07
-description: 小小 RSS,竟然这么棘手?
+subtitle: 小小 RSS,竟然这么棘手?
draft: false
title: 2024 年,我的 RSS 解决方案
toc: true
tags:
- Geek
+categories: 生产力报告
aliases:
- /posts/我的-rss-解决方案
---
diff --git a/content/posts/撞到人要说对不起.md b/content/posts/撞到人要说对不起.md
index ae8d476a..be16c2cc 100644
--- a/content/posts/撞到人要说对不起.md
+++ b/content/posts/撞到人要说对不起.md
@@ -8,6 +8,7 @@ date: 2025-12-25T01:39:00
draft: false
toc: false
slug: love-lost-in-xmas-eve
+categories: 乱章
aliases:
- /posts/撞到人要说对不起/
---
diff --git a/content/posts/有才华的同人作品是怎样的.md b/content/posts/有才华的同人作品是怎样的.md
index 43f7513d..eb3154ef 100644
--- a/content/posts/有才华的同人作品是怎样的.md
+++ b/content/posts/有才华的同人作品是怎样的.md
@@ -3,7 +3,6 @@ title: 有才华的同人作品是怎样的?
subtitle: 《魔法坏女巫》教你写同人
description: 去年年底一个人去电影院看了《魔法坏女巫》,主要是为了 Ariana Grande 去的,看了之后才惊喜地放下这部电影居然是《绿野仙踪》的同人作品,更惊喜地是,这部电影实际上是同名百老汇音乐剧改编,早在
2003 年就首映了。
-categories: 艺术脑袋
tags:
- 写作
- 创作
diff --git a/content/posts/死亡浪漫主义-II.md b/content/posts/死亡浪漫主义-II.md
index fafd07ed..a29999f8 100644
--- a/content/posts/死亡浪漫主义-II.md
+++ b/content/posts/死亡浪漫主义-II.md
@@ -5,6 +5,7 @@ tags:
- 自杀
- 写作
date: 2025-08-19 11:29:00
+categories: 乱章
draft: false
aliases:
- /posts/死亡浪漫主义-ii
@@ -42,13 +43,13 @@ aliases:
讨论自杀的时候,我们不该只关注自杀的手法和细节,这点与破解谋杀案恰恰相反。自杀这一行为最值得关注的是动机,即个体在什么时候想死,那种想法是怎么来的,又是如何消失的,那种想法在脑中浮现时是何种质感?一个人想要终结自己的生命,就证明他觉得人生不值得活了,那么对自杀者来说,什么样的人生是值得活的,现在的人生与那样的人生又有何种区别?自杀想法在脑中涌现时,个体的认知和思维会被缩得很小,看不到过去和未来,也无法对自己的人生和值得过的人生有个准确的判断,但当下的那种「无意义感」一定足够强烈,强烈到终结生命也无所谓。==我喜欢有关死亡的故事,因为一个人如何死去,就反映了他曾经怎样活过。==
> 雨下得不大,然而不撑伞也不是什么明智之举。
->
+>
> 但是,我没有撑伞。
->
+>
> “会着凉的。”
->
+>
> 古寺站在伞下这样忠告我。
->
+>
> “就算死了也无所谓。”
{{< right "——乙一《[未来预报](/library/2025/寂寞的频率/#i--未来预报)》" >}}
diff --git a/content/posts/这个世界会累死完美主义者吗.md b/content/posts/这个世界会累死完美主义者吗.md
index dc0d1e90..e933cf4e 100644
--- a/content/posts/这个世界会累死完美主义者吗.md
+++ b/content/posts/这个世界会累死完美主义者吗.md
@@ -6,6 +6,7 @@ tags:
date: 2025-12-18T00:14:00
draft: false
slug: exhausted-perfectionist
+categories: 乱章
aliases:
- /exhausted-perfectionist
---
diff --git a/content/posts/逃离独居生活.md b/content/posts/逃离独居生活.md
index c12c3b8f..edf9e567 100644
--- a/content/posts/逃离独居生活.md
+++ b/content/posts/逃离独居生活.md
@@ -5,6 +5,7 @@ tags:
- 生活
- 人际交往
date: 2025-09-11 17:44:00
+categories: 乱章
draft: false
toc: true
aliases:
@@ -82,7 +83,7 @@ O 带着失望而我带着~~心理创伤~~离开之后,我们就跟着中介åŽ
周四让 O 问了问那边的客服,表示可以今天再联系,O 还把我的微信号发给了对方,之后他就出门了。后来很快收到了一条短信,是中国移动发过来的,提醒我有一条新来电,但是我没有接到这个电话,未接来电也没有显示,而且来电号码显然是个人号,不清楚是不是被当作骚扰电话屏蔽了。作为一个有电话恐惧症的人,我又被狠狠地创伤了…… 我不理解为什么这样的业务不能通过短信或者微信联系确认,等待一个不知道什么时候会打过来的电话,错过了还得回拨,这真的很可怕!
-下午接到了顺丰快递员的电话,问我方不方便送货上门,之后很快就收到了之前买的千兆路由器……
+下午接到了顺丰快递员的电话,问我方不方便送货上门,之后很快就收到了之前买的千兆路由器……
![](https://r2.eltr.ac/picgo2025/IMG_5312.jpg "和 O 的聊天记录。")
diff --git a/content/posts/逃离群居生活.md b/content/posts/逃离群居生活.md
index 96518a19..d1378d1a 100644
--- a/content/posts/逃离群居生活.md
+++ b/content/posts/逃离群居生活.md
@@ -5,6 +5,7 @@ tags:
- 人际交往
- 大学时代
- 生活
+categories: 乱章
date: 2025-05-29 15:07:00
draft: false
toc: true
diff --git a/content/tags/_index.md b/content/tags/_index.md
index 40362fd3..c18eaa5f 100644
--- a/content/tags/_index.md
+++ b/content/tags/_index.md
@@ -1,3 +1,8 @@
---
-title: 标签
+title: 切入与切出
---
+
+在电子游戏中,程序员使用名为「Clipping」的编程模式,来保证玩家保持在游戏世界中的物理屏障上,而所谓的「穿模」和「穿墙」,就被称作「No-clip」。在 [Backrooms](https://backrooms-wiki-cn.wikidot.com/) 社区,这个概念被译作「切行」。
+
+我把内容网站的标签当成「切面」,在一个切面上你能透过时间线、文章系列等连贯的空间结构,窥探具有相同主题的文本。所以,如果你想的话,就在下面这些链接中切入到你感兴趣的切面上吧。
+
diff --git a/i18n/en.toml b/i18n/en.toml
index 13b286f2..87f5a81c 100644
--- a/i18n/en.toml
+++ b/i18n/en.toml
@@ -24,7 +24,6 @@ licenseStatement = "Licensed under {{ . }}"
[postNav]
latest = "Latest"
categories = "Categories"
-featured = "Featured"
settings = "Settings"
[moreLinks]
diff --git a/i18n/en.yml b/i18n/en.yml
deleted file mode 100644
index 6a8b8b55..00000000
--- a/i18n/en.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-lang: en
-seeArchive: See all pages
-theme:
- auto: AUTO
- light: LIGHT
- dark: DARK
-archivePage:
- postCountMonthly: '{{ . }} POSTS'
- postCountAnnual: '{{ . }} TOTAL POSTS'
-postPage:
- commentNotLoaded: if comment is not loaded, please try refreshing
- staticCommentsSectionHeader: These are static comments that are stored in frontmatter of this page. They used to be in different comment platforms, but now they are integrated into the page's content.
- originallyPostedOn: 'originally posted on {{ . }}'
-footer:
- wordCount: '🪦 {{ . }} words are buried here'
- licenseStatement: 'Licensed under {{ . }}'
-searchInstruction: '⌘+K to search'
-postNav:
- latest: 'Latest'
- categories: 'Categories'
- featured: 'Featured'
- settings: 'Settings'
-moreLinks:
- posts: 'All Posts'
- cards: 'All Cards'
-backToHome: 'Back To Home'
-termPage:
- cards: 'Cards about this topic'
- books: "Books I've read about this topic"
-RSS: RSS
-statsTooltip: Insights
-library:
- viewAllThisYear: All Books This Year
-back2top: I'll take you up!
-emailMe: If you prefer one-on-one communication, or just want to say hello, feel free to email me at
-termFilterButton:
- hideWeekly: I'll deal with scarecrows.
- reverseOrder: Push to reverse time.
-homePageQuote:
- content: 'To labor in the arts for any reason other than **love** is prostitution.'
- source: '——《The War of Art》'
-settings:
- title: Settings
- fontSize: Font Size
- loremIpsum: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- sampleText: Aa
- otherOptions: Other Options
-fuzzyTimes:
- afterMidnight: After Midnight
- earlyMorning: Early Morning
- morning: Morning
- noon: Noon
- afternoon: Afternoon
- evening: Evening
- night: Night
- midnight: Midnight
-actionMenu:
- email: "or send me an email!"
- interact: Interact
- fediverse: Fediverse
- openToot: Open T{oot
- fediversePlaceholder: your instance, optional
- webmention: Webmention
- webmentionPlaceholder: Your post URL
- send: Send
-rss_comment_link: "Come and leave a comment"
-webmention:
- fetching: Fetching Webmention...
- formDesc: You can write an article to respond to this post, or post something on social media, then submit the link of the related page here to send me Webmention.
- formPlaceholder: URL of your post
- submit: Ping me!
- likedBy: %d people liked this page
- mentionsHeading: Mentions
- interactOnFediverse: Interact on Fediverse
-music:
- netease: Netease
- openIn: 'Open in {{ . }}'
diff --git a/i18n/zh.toml b/i18n/zh.toml
index 6235b973..2fffac0d 100644
--- a/i18n/zh.toml
+++ b/i18n/zh.toml
@@ -30,7 +30,6 @@ licenseStatement = "以 {{ . }} 协议授权"
[postNav]
latest = "最新"
categories = "搜寻"
-featured = "精选"
[moreLinks]
posts = "所有文章"
diff --git a/layouts/_partials/components/date.html b/layouts/_partials/components/date.html
index 5b8b8278..5fcb8c65 100644
--- a/layouts/_partials/components/date.html
+++ b/layouts/_partials/components/date.html
@@ -20,7 +20,7 @@
<time class="post-date"
datetime="{{ .Date.Format "2006-01-02 15:04:05 MST" }}"
data-pagefind-sort="date[datetime], weight[data-weight]"
- data-weight="{{ if .Params.featured }}30{{ else }}20{{ end }}">
+ data-weight="20">
{{ if eq .Site.Language.Lang "zh" }}
{{ .Date.Format "2006年1月2日" }}
{{ else }}
diff --git a/layouts/_partials/taxonomy/all-categories.html b/layouts/_partials/taxonomy/all-categories.html
index cdcc9c5c..85a228fe 100644
--- a/layouts/_partials/taxonomy/all-categories.html
+++ b/layouts/_partials/taxonomy/all-categories.html
@@ -1,21 +1,28 @@
<!-- Display Categories -->
-<section class="flex flex-wrap justify-between gap-4">
-{{ range sort .Site.Taxonomies.categories ".Count" "desc" }}
- <a href="{{ .Page.RelPermalink }}"
- class="block hover:no-underline hover:-transform-translate-y-2 transition-transform"
- style="view-transition-name: category-{{ .Page.Title }};">
- <div class="taxonomy-categories-item">
- <h3 class="category-title my-1">
- {{ with .Page.Params.icon }}
- <span class="inline-block">{{ . }}</span>
- {{ end }}
- <span class="xerox">{{ .Page.LinkTitle }}</span>
- </h3>
- <p class="mt-0">{{ .Page.Params.description | markdownify }}</p>
- </div>
- </a>
-{{ end }}
+<div class="md:relative outbox md:h-[20rem] md:w-full">
+<section class="md:overflow-x-auto md:absolute md:left-0 md:right-0">
+ <div class="flex flex-wrap justify-between md:flex-nowrap md:gap-6">
+ <hr />
+ {{ range sort .Site.Taxonomies.categories ".Count" "desc" }}
+ <a href="{{ .Page.RelPermalink }}"
+ class="block hover:no-underline hover:-transform-translate-y-2 transition-transform
+ md:writing-vertical"
+ style="view-transition-name: category-{{ .Page.Title }};">
+ <div>
+ <h3 class="mx-2">
+ {{ with .Page.Params.icon }}
+ <span class="inline-block">{{ . }}</span>
+ {{ end }}
+ <span class="xerox">《{{ .Page.LinkTitle }}》</span>
+ </h3>
+ <p class="m-0 text-secondary mt-4">{{ .Page.Params.description | markdownify }}</p>
+ </div>
+ </a>
+ <hr />
+ {{ end }}
+ </div>
</section>
+</div>
<p class="mt-4">
<a class="small-button" href="/categories/uncategorized/">
diff --git a/layouts/_partials/taxonomy/pagefind.html b/layouts/_partials/taxonomy/pagefind.html
new file mode 100644
index 00000000..2c41457d
--- /dev/null
+++ b/layouts/_partials/taxonomy/pagefind.html
@@ -0,0 +1,7 @@
+<div id="pagefind" class="py-3"></div>
+<script src="/pagefind/pagefind-ui.js"></script>
+<script>
+ window.addEventListener('DOMContentLoaded', () => {
+ new PagefindUI({ element: "#pagefind", showSubResults: true });
+ });
+</script>
diff --git a/layouts/featured.html b/layouts/featured.html
deleted file mode 100644
index 75fba67e..00000000
--- a/layouts/featured.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{{ define "main" }}
- <article>
- {{ partial "header" . }}
-
- <div class="markdown-content" style="line-height: 2">
- {{ .Content }}
- </div>
-
- <section id="featured-posts">
- <div class="posts-list">
- {{ range .Site.Taxonomies.tags.精选 }}
- {{ partial "items/post" (dict "ctx" . ) }}
- {{ end }}
- </div>
- </section>
- </article>
-{{ partial "footer.html" . }}
-{{ end }}
diff --git a/layouts/tags/taxonomy.html b/layouts/tags/taxonomy.html
new file mode 100644
index 00000000..a0c38a40
--- /dev/null
+++ b/layouts/tags/taxonomy.html
@@ -0,0 +1,14 @@
+{{ define "main" }}
+<article>
+ {{ partial "header" . }}
+ <div class="post-content markdown-body text-size-md md:text-size-lg leading-loose">
+ {{ partial "utils/render" .Content }}
+ </div>
+ <h2>切面</h2>
+ {{ partial "taxonomy/all-tags" . }}
+ <hr />
+ <h2>开始速切!</h2>
+ <p class="text-secondary text-sm">快速切换到你想去的地方。</p>
+ {{ partial "taxonomy/pagefind" . }}
+{{ partial "footer.html" . }}
+{{ end }}
diff --git a/layouts/taxonomy.html b/layouts/taxonomy.html
index 453bb430..1a00ef86 100644
--- a/layouts/taxonomy.html
+++ b/layouts/taxonomy.html
@@ -1,21 +1,11 @@
{{ define "main" }}
-<article>
- {{ partial "header" . }}
-
- <div id="pagefind" class="py-3"></div>
-
- {{ partial "taxonomy/all-tags.html" . }}
- <hr />
-
- <h2>文章系列</h2>
- {{ partial "taxonomy/all-categories.html" . }}
-</article>
-
-<script src="/pagefind/pagefind-ui.js"></script>
-<script>
- window.addEventListener('DOMContentLoaded', () => {
- new PagefindUI({ element: "#pagefind", showSubResults: true });
- });
-</script>
-{{ partial "footer.html" . }}
+ <article>
+ {{ partial "header" . }}
+ <div class="post-content markdown-body text-size-md md:text-size-lg leading-loose">
+ {{ partial "utils/render" .Content }}
+ </div>
+ <h2>文章系列</h2>
+ {{ partial "taxonomy/all-categories.html" . }}
+ </article>
+ {{ partial "footer.html" . }}
{{ end }}
diff --git a/layouts/term.html b/layouts/term.html
index 4ce6cb99..b0f66d5b 100644
--- a/layouts/term.html
+++ b/layouts/term.html
@@ -1,7 +1,6 @@
{{ define "main" }}
<article>
{{ partial "header" . }}
- {{ partial "home/home-nav" . }}
{{ partial "term/term-header" . }}
<section>
{{ with .Content }}