yen@harvey:~$ ls ~/articles

Articles

思考、随笔、技术文章,记录我正在想的事情。

一条流水线,绝大多数环节是朴素的齿轮和管道,只在最末端挂着一个发光的盒子。

AI/思考

LLM 是最后手段,不是默认手段

我本来打算把整个项目交给 agent 跑,结果 Codex 的套餐没撑过几个视频就见底了。这篇记一下那之后我是怎么一处一处把 LLM 从流水线里请下神坛,退回到无聊的死代码——以及我至今不敢确定,这到底是工程判断,还是只是我钱包的形状。

· 8 min read
阳光房间里专注于笔记本电脑的开发者,旁边摆着绿植。

AI/思考

AI Coding 真的提高效率了吗?

用了一年多,体感上执行效率几乎全是正收益。但我学到的全在那个「几乎」里——负收益不在它写代码的地方,而在它太想替我做决定、我却没察觉的时候。

· 4 min read
一台终端里满屏的删除日志,旁边是一个安静地躺在 Git 仓库里的 Markdown 文件。

开发日志

最好的备份,是没有需要备份的东西

2024 年,我把博客弄丢了两次——先是图床,后是数据库。两次我都怪「以后再备份」,可后来想明白,真正该删掉的不是侥幸心理,而是那些需要被备份的状态。

· 5 min read
深夜屏幕上并排的两个窗口,一边是我潦草的需求,一边是整整齐齐、一次就过的代码。

AI/思考

那半年,一个冷漠的程序员把我惯坏了

一个不会累、不会烦、代码一遍就过的程序员,把我惯坏了。我躲在后方动动嘴,它冲上去,把我卡住的东西轻飘飘解决掉——这是我被 Claude 惯坏的那半年。

· 3 min read
两个事务同时把点赞数从 100 改成 101,最终少算了一次。

学习笔记

包进事务,点赞就不会数错了吗

ACGHub 里到处是计数——点赞、收藏、回答数。我一直觉得:读出来 +1 再写回去,只要包进 BEGIN…COMMIT,事务保证原子性,就不会出错。这篇拆的就是这个「就不会出错吧」——它其实会,而搞懂它为什么会,得先把我对 MVCC 的误解也一起纠了。

· 5 min read
数据库前面挡着一层缓存,墙上有三道裂缝,分别标着穿透、击穿、雪崩。

后端/性能

缓存不是加一层就完事

给 ACGHub 列表加完索引,单条查询是快了,可 DB 再快也扛不住次次都查,于是我上了 Redis。结果一加缓存,就冒出三个新名字——穿透、击穿、雪崩。这篇趁还没被它们坑到,先把三个雷标清楚。

· 4 min read
一本翻开的字典,按拼音排得整整齐齐;旁边一摞没有目录、胡乱堆着的散页。

后端/性能

我加了索引,为什么还是慢

ACGHub 的帖子列表随数据涨慢了下来,我想当然地给查询条件加了索引——结果一点没快。问题出在我对「索引是什么」的想象:我一直以为它是个哈希表,可哈希表恰恰给不了我最需要的那样东西。

· 6 min read
辽阔晴空下仰望白云的人物,开阔而明亮的动画风景。

产品思考

我理想中的 ACG 社区形态

标题写得挺大,其实动手那晚我脑子里没有什么「形态」——只有一条在贴吧被秒删的技术帖攒下的一肚子气,和一个刷梗图时冲动抢注的域名。所谓理想,低到只是:一个不会随便删我帖的角落。

· 3 min read
屏幕上一行本该是中文的文字,变成了一串问号方块和「锟斤拷」。

学习笔记

乱码不是字坏了,是尺子拿错了

乱码烦了我好多年——打游戏、改配置、传服务器,每次都靠玄学糊弄过去。直到把「字 → 码点 → 字节」这条链拆开,才明白:字从来没坏,是我每次都拿错了解码的那把尺子。

· 7 min read
写满行列式与矩阵演算草稿的桌面,笔尖停在一个被划掉的数字上。

随笔

手算线代的那个学期,我是一块很烂的 GPU

数字都在 1 到 100 之间,运算简单到侮辱智商,可我还是一遍遍算错、崩溃、重来。一个学计算机的人,被按在桌上当一块很烂的 GPU——慢,还老出错。而我完全不知道,这些矩阵将来铺在哪儿。

· 2 min read
深夜的宿舍里只有显示器亮着,屏幕上是一局又一局重复的对战。

随笔

那一年,战雷是我的止痛药

没课就昼夜颠倒,有课就课间趴桌上补觉。那年吃掉我最多时间的是战雷——肝经验、肝银狮,一局接一局。我一直跟自己说那是爽,后来才敢承认,那不是爽,是麻醉。

· 2 min read
游戏渲染设置面板,抗锯齿下拉框展开,列出 SSAA / MSAA / FXAA / SMAA / TAA 五个选项。

学习笔记

为什么游戏设置里有五种抗锯齿

大一打游戏翻设置,抗锯齿那栏点开是 SSAA / MSAA / FXAA / SMAA / TAA 一长串全是缩写。好奇查了查才发现,它们其实都在跟同一个东西较劲——锯齿,而锯齿的根,是采样不够。

· 6 min read