2026-01-01 08:00:00
好久没写生活向的内容了,把之前清单里的这篇拎出来解决掉。
1.不锈钢咖啡滤网
当时买来做手冲咖啡用,想着替代一次性的纸质滤纸更环保些。滤网也确实很细,只是用了一段时间之后下水的速度非常非常慢,过滤时间变长导致咖啡口感相当差劲。卖家产品说明里写用洗洁精泡泡就好,但我是洗洁精、刷子、小苏打甚至柠檬酸都挨个试了一遍全不凑效,一气之下扔了。扔完发现我应该留着它做希腊酸奶用的……
2.可量化油壶
这种油壶一般是倒油口那里做了个缓冲区,但是这就导致其实有一部分油会和空气接触氧化,而且我买的那款断口不利索,每次壶嘴那里都要残留点油渍,相当烦人。一壶油用完还得彻底清洗壶身再晾干,实在过于麻烦。之后我意识到,以我几乎三餐都自己做但一年也才用 500 ml 不到植物油的用量(烹调和烘焙偶尔还会用到黄油),无论如何都难以超过摄入警戒线,直接把油壶扔掉,每次只买 250 ml 小包装的橄榄油/亚麻籽油。
3.一次性吸管
好多好多年前逛宜家,朋友说买包吸管日常备着我就顺手也抓了一袋,完全用!不!上!最后在夏天喝冰拿铁时硬是用个超级高的杯子每次拿吸管搅搅,五六年了终于用完了。
4.pixel pen
Google Pixel Slate 官方标配里是没有这支手写笔的,看别人用平板都似乎很潇洒地写/画,我抱着或许也用得上的想法给 pixel slate 也配了支笔。好几年了,用的次数可能两只手就数得过来。其实要算起来,这台机器也算是一个失败购物,纯娱乐,生产力是(几乎)一丁点也没有,我觉得不需要它也可以。但我就是好奇 ChromeOS 系统!而且它可以在平板上体验完整的 Chrome 浏览器,总比买台没用的安卓平板好吧(什么,iPad?本果黑拒绝为苹果花哪怕一分钱)。
5.无线迷你搅拌机
想得很美好,可以拿来打个葱姜蒜或者香料又或者牛油果的,但有这事前充电、事后刷机器的功夫,我拿菜刀拍几次或者勺子捣几下就结束了。不过我有洗碗机的话可能它的利用率又不一样吧。
6.罗技 K380 键盘
笔记本常年连着外接显示器就需要外接键盘,我对键盘没什么要求,试过机械键盘但还是最喜欢笔记本上那种薄膜键盘的手感,也不想多花钱就随便挑了这个大路货。最大的问题是,我其实不需要蓝牙!每次开了机都得等几秒钟它才能连上这个感觉很糟糕,既然我常年都不需要挪动键盘位置完全可以买个 2.4 G 或者直接上有线键盘。可能之后卖二手看看有没有人要,再换个不是只支持蓝牙的。
7.电动牙刷
我用过两个飞利浦(一个中端机型,一个低端机型)和一个小米。差不多十年前,花了四五百买的飞利浦非常精准地在刚过两年保修期的那个月坏掉了。网上一刷都是同样的控诉,但我不信邪又买了只低端的,再次,刚过保就出问题。这时国产品牌也铺天盖地出电动牙刷了,我就又换了只小米,again,两年魔咒。我气炸了,后来想想可能移动电池的寿命就是这么久,所以所有厂家都非常鸡贼地把保修期也定了这么长。现在我常年回购狮王细齿洁宽版,非常好用!而且用十年也比不上我第一支飞利浦牙刷的一半价格。想想过去真是个超级大傻子。
8.欧包藤篮
凡是做欧包的人很难不买这个塑形的藤篮,但问题在于,在欧洲人家似乎没有我们这边这可怕的梅雨潮湿诅咒吧?正常使用藤篮之后是不会洗的,多余的粉就留在里面防黏下次继续用。然而不管我怎么保存,总是要么生霉,要么生虫。干燥地区太阳下晒晒就没事,我这儿每年固定有一两月湿度可能到 90,怎么晒都没用啊!后来我意识到只要不追求欧包上那一圈圈的花纹,有没有这个篮子完全没差,所以现在我都用洗菜的滤水篮子垫张油纸做二次发酵,一样很成功。
9.五年日记笔记本
今年是第五年,几乎没写过。幸好我颇有先见之明没有花大价钱买 Leuchtturm 或者其他类似牌子,当时就想着这种严格规定日期的方式多半会引起我的逆反心,果然如此。打算当普通本子随便写写画画赶紧用完。之后就算我想实践五年日记的形式完全可以搭个静态站调调格式让它把不同年份同样日期的内容放在同一页面显示就行,别说五年,十年二十年也不成问题。
10.「人体工学」坐垫和靠背
前几年我达到了一种坐在椅子上超过半小时就背痛不止的程度,不管怎么调整坐姿都无济于事。恰好那几天看到少数派的购物分享就病急乱投医地买了,稍微好过了那么一丁丁点吧,但该痛还是痛。没想到之后在我非常三天打鱼两天晒网的锻炼之下,居然就不药而愈了。所以,锻炼比外物有用。真的不适到影响生活了,那还是赶紧先看医生。至于这个坐垫和靠背,加上之后我还必须得搭个脚踏,不然脚离地面的高度又过高了,而且锻炼之后脊背感觉靠在上面也不得劲儿,最后还是都扔掉了,坐姿靠自觉保持,不舒服了就站起来动一下。
居然正好攒了十条出来,虽然这期的标题是 shopping fails 1,但还是最好不要再有 2 。(多半会有的,人在河边走,哪能不湿鞋……)
2025-12-22 08:00:00
发现我还有这篇草稿,随便发一下好了。一些过去(已经不知道是多久之前攒下的)我觉得有意思的文章。
One Giant Stunt for Womankind
Blue Origin’s all-female flight proves that women are now free to enjoy capitalism’s most extravagant spoils alongside rich men. 之前看到所谓全女性成员的太空之旅,豆瓣还有某 KOL 写小作文煽情其中一位在遭遇性暴力用法律手段维护自己后重新追逐她的「宇航员」梦想。前半部分没有问题,后半部分则问题太大了。和富人的「娇妻」(aka 贝索斯的现任)以及一众社会名流(比如 Katy Perry) 搭乘富人玩具上天那不叫探索太空,更不叫追逐「宇航员梦想」,充其量只是太空乘客好吗。接着就刷到了这篇报道,真是讽刺好笑。
水垢与帝陵:世界上不同的美
很神奇,刷到这篇文章时我正在读王南的《大汗之城》,其中提到北京城当初的规划,或者说中国古人的建筑审美,就是「虽为人作宛若天开」,建筑不应孤立存在,而是和周边景观相辅相成。而这篇文章的中心也正是这个,由自然界的万千美感延伸到建筑设计。更为神奇的是,这是将近十年前的文章,却又被转发到了我的豆瓣首页,内容也并不显得过时。这才是互联网真正应该存在的「长尾效应」。
分享40个科幻短篇
mark 下日后读。
Owls in Towels
一个收集裹在毛巾里的猫头鹰的网站。
余生
《四个春天》导演的家庭故事的后续。看得泪流不止。
到底什么是绝版书
多抓鱼的一篇推送,二手书平台写这个相当有发言权。
三文鱼,真的“自由”了吗?
购买之前需要多想一步。或者,我们真的需要吃这么多三文鱼(以及鳗鱼、高级牛肉等等等等)吗?看到一些人整天嚷嚷着就是要吃肉以及吃这些野外种群已经相当不乐观的动物,我真的忍不住我的白眼。
行走唐陵20年
正好可以和之前读过的《六朝遗石》两厢对照。
以及最后一篇是豆瓣新推出的官方 club 「友邻moment」的推文,我看了下这个系列都相当有意思,但我不想加入它们这个所谓俱乐部只想看长文,研究了下虽然前端页面豆瓣是给这种 club 账号设计了不同的显示效果,但本质还是一个用户 id,用豆瓣的日记 RSS 逻辑一样可以订阅文章更新,所以,感兴趣可以用这个地址订阅: 豆瓣友邻 moment RSS 。
2025-12-22 08:00:00
本月总结主打一个言简意赅。
3.5 星。
前男友那一章真的是突兀且不合时宜,而且作为读者谁有义务去记你死掉的前男友啊?Who cares?可好些人为此打一星也太过了吧。而且异性恋怎么了,难道非得是“酷儿”“性少数”才能当单身女性代表发言?有些人的差评是不是太离谱。
讲中年单身女性的处境和各种思考倒是相当让人感同身受,我们需要有人讲述这样的生活。
两星。
寡淡无趣。几乎每一篇都像是碎片胡乱拼起来的,连个像样的表达都没有,要谈论什么是不是应该有一个比较明晰的、一以贯之的自我呢?未免太过空洞。我不会再看铃木凉美了。
印度人在埃及。(是不是看这个前提就觉得想看了?)或者说,是一个印度学者在埃及做田野调查以及做历史研究。
现代线比历史线精彩一点。但到底为什么这些学者非要沉迷于毫无必要的双线叙事?详细内容看下面两篇书评就好,我懒得多费唇舌了。
留学生的法国生活记录。前几篇文化观察类的还挺有趣,越往后越流水账,尤其日本旅游那篇,抻得老长却又极其无聊。尤其是其中出现了一些出版界的人名(很好认,即使她没写全名我也知道是谁),我会忍不住想,如果不是作者本身就在这个行业内,以这个水准能出书吗?
其实还有更多吐槽但写出来太费劲儿了,谁来找我 Discord 聊天吧我可以连说一小时(什么)。
三星。
在书里写“饮酒可能对健康有益”的作者我觉得没法信任,你说呢?
整本书的核心观点就是饮食要尽可能多样化,以及多吃发酵食物。但其中也有不少言论和我之前读的营养学/饮食相关书籍理论相悖,而多看几本更是发现在营养学这一领域经常彼此矛盾,兼收并蓄姑且听着吧。
看到养猫但不处理有毒植物还狡辩说“没有植物就不是自己”很生气,原本三星半,现在三星。有几篇写死亡还不错,但我还是不会再看伊藤比吕美的书了,总是这种超短小杂志连载合集,很没劲,这稿费赚得太容易了吧?
俏皮话很多,讽刺拉满,可惜也只有这些,还没到结局气就已经泄了,感觉有头无尾,概念取胜。
三星。
有些新鲜观点,但越写越离题万里。
八月读的 The Barnabus Project 的后续故事,我不喜欢这个走向。也懒得放图了。
画面细腻梦幻美丽,故事么略有点说教,不过还在接受范围之内。就是不知道怕虫的人看到这么细致的笔触全是在展示各类昆虫身体细节会不会疯掉。




无字绘本。游泳池里的幻想世界。画得不差,笔触细腻,但和我脑电波对不上
下面这张不知为什么会让我想起爱死机里 Zima Blue 那一集。

一个关于思念的故事。画面极其梦幻美丽,情节虽然有点老套──但有效。我在最后没忍住也落泪了。



有点荒诞过头,不是我的菜。
最早研究“活着的”树叶的女科学家 Meg Lowman 的传记绘本。到热带雨林中、上到树冠上观察研究树叶的状态。比如树叶的寿命,最短可能只有几个礼拜,最长达到了惊人的 19 年。也是她首先提出了安装丛林观光云梯(姑且这么翻吧我不知道术语该是什么)的想法,为雨林地区发展出旅游项目,从而让一部分森林逃离了被砍伐的命运。
Lowman 的个人网站: canopymeg!。


画风特别,甚至有点水墨画的写意味道,可惜文字全是心灵鸡汤,喝一口觉得鲜,整本都是未免有点腻。很温柔不错,但我无法被说服。以及,这个手写体真是让我认得眼睛都快瞎了!


2025-12-21 08:00:00
简单记一下最近的博客变化,不详细写了,基本都是 AI 干的活儿。
series shortcode。放一下 series 的代码。
在博客 layouts/shortcodes 下新增 series.html 文件:
<style>
.callout {
border-left: 4px solid #2d6cdf;
background: #eef3fb;
padding: 1rem;
margin: 1rem 0;
border-radius: 4px;
font-family: sans-serif;
}
.callout p {
margin-top: 0;
margin-bottom: 0.5rem;
}
.callout ul {
margin: 0;
padding-left: 1.5rem;
}
.callout li {
margin-bottom: 0.25rem;
}
.callout a {
color: #2d6cdf;
text-decoration: none;
}
.callout a:hover {
text-decoration: underline;
}
</style>
{{ if .Page.Params.series }}
{{ $currentTitle := .Page.Title }}
{{ $seriesName := index .Page.Params.series 0 }}
{{ $seriesSlug := $seriesName | urlize }}
<div class="callout notice">
<p><strong>本文属于 {{ $seriesName }} 系列,前情提要或后续更新请见:</strong></p>
<ul>
{{ if (index .Site.Taxonomies.series $seriesSlug) }}
{{ range (index .Site.Taxonomies.series $seriesSlug).Pages.ByDate }}
<li>
{{ if eq .Title $currentTitle }}
{{ .Title }}
{{ else }}
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
{{ end }}
</li>
{{ end }}
{{ end }}
</ul>
</div>
{{ end }}
对应文档 front matter 增加 series property,并在文档内使用 /{/{< series >}/}/ 即可(去掉反斜杠)。Hugo 会自动读取博文的 series 信息并将所有同系列文章按创建时间生成序列显示(但是它好像识别不了中文名称,我也懒得修了,都写英语吧……)。
2025-12-21 08:00:00
本文属于 Waline 系列,前情提要或后续更新请见:
2025.12.30 Update:
根据 Waline 的 issues 请问是否有办法设置不收集评论者的IP、UA和所属地信息? · walinejs · Discussion #1315 · GitHub 也可以直接添加 hooks 禁用。如果不需要通过 IP 禁用特定评论防止 spam 可以直接采用这种方式。
之前我一直犹豫没换评论系统的缘故就是 Waline 和 Twikoo 默认会前台展示 IP 和 UA(user agent),后面换了才知道即使前台显示关闭,后台还是会记录具体 IP,这实在是让我难受。我猜多数用这俩评论系统的博主以及留言的人也不一定会知道具体的 IP 会一直被保留在数据库里吧。
理智上我知道这些信息是多数网站都会记录的,但直接交给个人还是感觉不一样。评论系统收集这些也的确有正当性──避免 spam、及时封禁。可我就是不想保留访客的这些资料。琢磨了一阵子后我想着改写 Waline 的评论写入逻辑有点麻烦,那就不如我写个定时跑的任务来自动清除数据库的 IP 和 UA 字段。本质上 Waline 也是用 access key 来和数据库互动,那我也用同样的手段来管理好了。
以及,AI 创作声明:
由于之前和 Gemini 都说的英文,等到我想着整理一份中文步骤发现实在太累,所以下面都是 AI 写的,我只大概改了改(写得比我快多了……)。
本教程适用于:
核心功能:使用 Vercel Cron 定期清理数据库中 90 天前的评论数据,将敏感信息(IP 地址和浏览器 User Agent)抹除。
在 GitHub 上托管的 Vercel 项目仓库中新建一个 Serverless Function,例如:
/api/cleanup.js
将下面代码完整粘贴进去:
const AV = require('leancloud-storage');
const DAY = 24 * 60 * 60 * 1000;
const BATCH_SIZE = 200;
let initialized = false;
function initAV() {
if (initialized) return;
AV.init({
appId: process.env.LEAN_ID,
appKey: process.env.LEAN_KEY,
masterKey: process.env.LEAN_MASTER_KEY,
serverURL:
process.env.LEAN_SERVER_URL ||
`https://${process.env.LEAN_ID.slice(0, 8)}.api.lncldglobal.com`,
});
initialized = true;
}
async function cleanOldComments(cutoff) {
const Comment = AV.Object.extend('Comment');
let cleaned = 0;
while (true) {
const q = new AV.Query(Comment)
.lessThanOrEqualTo('createdAt', cutoff)
.exists('ip')
.limit(BATCH_SIZE)
.select([]);
const results = await q.find({ useMasterKey: true });
if (results.length === 0) break;
results.forEach(o => {
o.set('ip', null);
o.set('ua', null);
});
await AV.Object.saveAll(results, { useMasterKey: true });
cleaned += results.length;
}
return cleaned;
}
module.exports = async (req, res) => {
if (req.headers.authorization !== `Bearer ${process.env.CRON_SECRET}`) {
return res.status(401).json({ error: 'Unauthorized' });
}
initAV();
const cutoff = new Date(Date.now() - 90 * DAY);
try {
const cleaned = await cleanOldComments(cutoff);
res.status(200).json({
message: cleaned ? `Cleaned ${cleaned} records.` : 'No records to clean.',
});
} catch (e) {
res.status(500).json({ error: e.message });
}
};
在 Vercel 项目中添加以下环境变量:
| 变量名 | 说明 |
|---|---|
LEAN_ID |
LeanCloud App ID |
LEAN_KEY |
LeanCloud App Key |
LEAN_MASTER_KEY |
LeanCloud Master Key |
CRON_SECRET |
自定义字符串,用于校验 Cron 请求 |
前三个变量在部署 Waline 时已添加过,无需再变动。CRON_SECRET 的值可随意自定义。
在项目根目录更新 vercel.json:
{
"name": "comment",
"version": 2,
"github": {
"silent": true
},
"builds": [
{
"src": "robots.txt",
"use": "@vercel/static"
},
{
"src": "index.cjs",
"use": "@vercel/node"
},
{
"src": "api/cleanup.js",
"use": "@vercel/node"
}
],
"rewrites": [
{
"source": "/api/cleanup",
"destination": "api/cleanup.js"
},
{
"source": "/((?!robots\\.txt$).*)",
"destination": "index.cjs"
}
],
"crons": [
{
"path": "/api/cleanup",
"schedule": "0 0 1 * *"
}
]
}
即,在 builds、rewrites 下新增 cleanup.js 路径,以及增加定时任务 crons,我这里选择的是 "0 0 1 * *" 每月一号跑一次,可根据自己需要变更。
手动执行方式:命令行 curl 执行或者 Vercel Dashboard 的 Cron “Run now”。
2025-12-20 08:00:00
其实很多年前就知道我和村上八字不合,但之前逛到一个人气挺高的博客,博主说村上的新书依然是一出她就必买,每天睡前读一点,是再熨帖不过的陪伴,我就没管住这好奇的手。
结果是──才几十页就被臭味熏了出来,真是被不信邪非要看上一眼的自己气笑了。这什么黏黏糊糊腻腻歪歪的东西。另外作者能力不够就别随便乱用第一人称了,所有的「我」都只是作者的声音,而非小说人物的,而且开篇没两句就说「对少女的胴体有欲望再正常不过吧」(大意)。不是,这个所谓的「我」和那个「女孩」才见面几次?情节情节没有,感情感情不见,怎么就又开始了那常见的臭烘烘的青春期男性欲望?更何况人物完全面目模糊,我只能想到这背后是七十岁的男作者,更恶心了。
在 上一期弃读清单 刚提到这个作者的另一本书《醒来的森林》,没想到这么快又见面了。这次依然是译者问题。作者是美国早期很有名的博物学家,而且这个书名看着好可爱,我自然生出了兴趣。我的习惯是豆瓣页面有译者信息通常会点进去看看主页,大致看一下书单和评论以及日常发言,审美太过相悖或者语言习惯我不欣赏的一般就会放弃。
这位译者倒是没什么其他动态,但是我一看她给何雨珈译的好几本扶霞的书都打了低分,并且用词相当不客观,甚至让人怀疑是不是她和何雨珈有私怨。尤其是《君幸食》这本,她居然能罔顾事实非说辛追夫人墓出土的那个带有「君幸食」字样的狸猫盘子只是个猫粮碗,明明博物馆官方介绍以及研究者论文都写了这是当初出土的一大批漆器食器之一(是的我还去查了论文),以此攻击作者和译者没文化(还顺带攻击何雨珈只知网上晒猫当网红),这也太过匪夷所思了。更离谱的是,因为我给《君幸食》写了一点挑错的笔记,她还来留言说作者和译者水平差劲这书没有价值(我打了四星你没看见吗),真是让人瞠目结舌。
如此行事,让我顿时打消了读她的译文的念头。
所谓日本治愈系作家真是写得浅薄。这生活流水账还不如我自己写得好看。
非常有兴趣的主题,但看到豆瓣讨论帖: 鸟名翻译的一塌糊涂 ,还是读原文吧。
主题挺吸引人,读了几十页后决定放弃。
历史非虚构被写成三流美剧节奏,一惊一乍,要是有摄像机已经能想到它会怎么推大特写又怎么戛然而止播片尾曲和下集预告。这很廉价。
可怕的无意识呓语,空洞。
听了一点怎么作者好像就只会兜售冥想,又是那种毫无价值的美式 self help 鸡汤。