Klapring

写于一周年 - 新的故事行将启航

小屋也算是迎来一周年纪念日了,真是可喜可贺可喜可贺。

其实我自己早已记不清小屋到底是什么时间建的了,最早使用的主题的相关仓库都已经删掉了,没法通过查 commit 记录来获取时间,所以就用了小屋第一篇文章的发布时间来作为小屋的建立时间。

这篇文章也是 7 月初就开了草稿――因为我知道自己有多能拖更 塞尔维亚游记拖了多久了都,8月再开坑包写不完的。开坑的契机则是看到首页侧边栏的建站时间已经变成了一年(dayjs的相对时间默认逻辑似乎是满 10 个月就显示一年),才意识到已经建站快一周年了。

回望过去一年

新的一年开始前,总得回头看看吧。有的博主会把过去一年以来的站点数据都搬上来,不过我在从 Hexo 迁移到 Astro 之后,直到最近部署了 GoatCounter 为止,将近半年的时间里没有使用网站统计工具,我之前用的自建 Unami 也把库都删了,所以这里没什么可以放的。不过也可以放一点 GoatCounter 一个月以来的访问统计数据:

GoatCounter 后台截图:「Pages」页面访问排行,列出首页与两篇文章的访问次数和迷你柱状曲线。
图 1 GoatCounter 访问量曲线数据

第二名真是毫不意外,这种东西看的人就是多。第三名倒是有些小意外,没想到 Typst 会是第三名虽然和前两名有断崖般差距。从 GoutCounter 的操作系统统计数据来看,GoatCounter 统计到的大部分访问量应该都是活人贡献的,毕竟 AI 爬虫怎么想都会用Linux 吧()。

GoatCounter 后台截图:「Systems」访客操作系统统计,Windows 占 75%,其后是 Android、macOS、Linux 等。
图 2 GoatCounter 操作系统数据

统计的部分到这里就差不多了,一个月的数据也没啥好看的,只写这么点东西也不够一篇文章的量,索性再详细聊聊建站原因里写过的东西吧。去年8 月的暑假,抱着分享我辛辛苦苦写的课程作业的想法,先是去了CSDN,结果我当时没有密码管理器,把以前注册的账号密码给忘了;然后去了博客园,结果当时博客园正处于困难阶段,到处筹钱,加上还要实名申请发博客的功能,也就放弃了这个选项;最后便盯上了独立博客,使用搜索引擎找到了静态博客里用得最多的 Hexo,挑了个还将就的主题 Fluid,便使用 GitHub Pages 搭建了这个博客,发布了我的第一篇文章

显然,这种专业性稍微强一点的东西,除了和我一样被计算数学折磨的冤种外,是没什么人看的。于是我就水了一个独立博客建站必备经典款文章,顺便给博客加上了 Twikoo 评论系统,以及去 Bing 把博客给收录了(还多水了一篇文章)。

Fluid 主题挺美观的,该有的什么 SEO 啊什么 PWA 啊都有,但一些花里胡哨的功能就比较欠缺了。在进行一些简单魔改后,我决定换成一个自带更多花里胡哨功能的主题。Hexo 博客里,比较出名的就是张洪Heo 的了。我从星港的主题链接了解到了 Solitude 主题,其效果足够炫酷,所以最终选择了这一主题。

Solitude 主题的持久度比较高,我用了刚好半年时间(2024.09 - 2025.03)。刚开始对于这个主题我还是非常喜欢的,经过了一番简单的魔改,把它变成了自己喜欢的样子。但很快,Hexo的弊病就暴露出来了。

Hexo 是一个比较古老的静态站点框架――React 和 Hexo 是同一时代的产物,而React 就是现代 Web 框架本身。所以,Hexo 使用的是现代 Web 框架以前的字符串拼接技术生成 HTML,并且至今也只支持直接使用 CommonJS。后者在 hexo-highlighter-shiki 的初步开发中给了我不小苦头,最后还是抄了别人的代码,靠 ESBuild 打包解决了问题。在和 Shiki 进行搏斗的时候,我在文档里看到 Astro 是默认使用 Shiki 进行代码高亮渲染的,所以心中也就种下了改用 Astro 写一个自己的博客主题的想法。

真正付诸实践则是在 25 年的 1 月初,此时的我考研失败,只有毕业论文需要花时间,于是便开始鼓捣起了博客。当时的我对 Astro 几乎没有了解,对 TypeScript 的了解仅限于给 Solitude 魔改和贡献时的那一小点积累,从 GitHub 上拉了 Fuwari 的源码下来就直接边抄边写边学,少量借用 LLM 补全,花费两个多月完成了一个基本可用的博客主题 Astral Halo

在完成绝大部分需要的功能以后,博客的开发也就放慢了脚步(事实上,抛开周年纪念前的小装修不谈,上次修改博客源码已经是一个月前了)。博客文章也放慢了脚步,六月七月都是月更状态。并不是我没写东西,只是单纯没写完不能发出来,比如拖了大半年的塞尔维亚旅游回忆的中下两篇其实都写了一半多点,还有另外两篇完成度比较高但是一直拖着没写完的文章没发。开的只有标题和一点点思路的坑也有四五个,没有整理和扩充的随笔草稿也一大堆,只是单纯的不想动。除去杂谈和经验以外,我还是希望写点新的东西的,比如找一个自己比较感兴趣又比较小众的东西,深挖一下历史,然后写出来,目前开的坑有:排版、终端、TSF11 Trans Sexual Fiction/Fantasy 作品。写完不一定会发出来,尤其是最后那个肯定是含NSFW22 Not Safe/Suitable For Work 内容的,发出来需要做一些心理准备。

新的开始

可能有人注意到了,小屋文章的永久链接不一样了。小屋最初使用 Hexo 的 abbrlink 插件,为每个文章生成随机字符串,作为永久链接使用。当时的考量是这样一来,修改标题也不会影响链接,不会导致标题和链接对不上。后来我才发现这是个伪需求――我压根不会去改已发布文章的标题,文章更新量也轮不到我费心思去想不重复的标题。所以正好在一周年之际,我把博客文章的永久链接换成了有意义的英文字符串。

当然永久链接需要处理的事情也不能少――我在修改旧文章永久链接时,也加上了对旧永久链接的重定向,就像之前我更换博客主题并舍弃部分主题特定文章时那样。好在文章不算太多(拖更还骄傲上了),花了一点时间挨个在 astro.mjs 里加上了路径重定向。此外,我还删掉了一些现在看来并无用处的和重复的标签,重新整理了一遍过去的文章。

下一步准备使用 API 重构一下目前使用 RSS 制作的 GoToSocial碎语页面,目前出于半成品状态,正在和一些 corner case 进行搏斗。此外还准备把图片灯箱33 指「点击图片放大查看」的功能库从虽然超轻量但是功能太少不好用的 Medium Zoom 换成 GoToSocial 前端也在用的 PhotoSwipe,以便适配修改后的碎语页面,顺便还自动适配了 Artalk 的评论里的图片灯箱功能 虽然只有我能直接发图片。还有一个受纸夜姐姐44 Typst 最常用的 LSP tinymist 的主要开发者启发的使用 Typst 来直接编写博客文章的想法,不过目前 Typst 的手机端编辑体验实在烂透了,暂时不做过多打算。

此外,本站也正式开源了。但这不是中文通常意义下的「开源」,而只是公开网页构建必须源代码。这意味着你可以从这份源代码中构建一个原封不动的本站同款站点,但你不会看到我在我自己博客站点分支中的实际提交,而是定期同步的、清理了与网站生产构建无关部分的提交。用这种方式来开放源代码获取,是因为我当初把草稿部分也纳入了 Git 管理,因此我的实际提交中包含不少我还没写完的草稿,这些内容我不想公开。公开则是因为我写了 GoToSocial 的贴文展示页面,而这部分代码我不准备放到 Astral Halo 的主线中。

后话

这篇文章最后一行字编写于 2025-08-19 04:22:00 (UTC+8:00),从七月初断断续续写到现在,只能说拖延症和死线冲刺还在发力。