2026.3.7

 • 

DSCF8135
Echo Chamber Vol.2 的 dryrun 拿到了 - 发了些书的照片在 Instagram 上面。和 Vol.1 一样,这本书是某种自出版的尝试 - 内容基本上就是我在 Ghost 上写的博客,我 Day One 里写的日记,我在推特上发的牢骚,以及我在 Instagram 上发的照片,按照时间汇集在一起装订成册,只不过 Vol.1 是 2021 年的内容,大约有 70 页,而 Vol.2 则是 2024 和 2025 一起,共 238 页。这次仍然是 Sketch 做的,每个 artboard 上按照 bleed 和 trim 的尺寸放了些 guideline,内容就在 guideline 里面排版,然后导出 artboard 为图片后有一个 python script 直接转成适合上传到 Blurb 的 PDF 格式。用一个矢量 UI 设计软件来做 InDesign 的工作,也算是难为 Sketch 了,但毕竟是顺手的工具,需要自动化也可以直接让 claude 生成个插件,因此除了 Sketch 有的时候会崩溃外,并没有特别的困难。
有些朋友看到了这本书后问怎么做出来的,我都会说是 Blurb 打印的,以及 Blurb 也有拖拽方式的编辑工具,不需要按照我做 Sketch 这种死磕,然后我会推荐所有朋友去打印自己的 zine - 即使内容是无病呻吟也好,全是照片也好,都无所谓,书寄到手上还是有分量的,这个分量本身就已经足够了。
然后回到 Echo Chamber 本身,装订书然后自发行原本只是一个特定的 yearly project 想法 - 当时的愿景是,21 年的 yearly project 是这个,22 年可以做些其他的,每年都做一个好玩的事情。但后面的事情就是我并没有时间去做其他的 yearly project - 我没有买便宜的 miata 或者 s2000,我没有考手动挡,我没有在半夜没有守卫的停车场里漂移转圈,我也没有拓写 J 的故事变成剧本,去拍独立电影,我也没有开 Youtube 频道介绍我的胶片相机收藏,或是买个 DJ 机器打碟,或是发布我的太空游戏 Epoch。但至少我现在装订了 Echo Chamber Vol.2,因此似乎证明了事情还有余地,如果我想的话还是可以把其他的事情给做了,即使不是以一年一个的方式。

29

 • 

29 了。
写这句话的时候自是没有什么实感 - 倒不是因为我习惯了 28 岁的自己,而是越往后,每年所代表的成分就越是模糊 - 我和 28 相比,成分表里添加了什么,减少了什么?很多时候我也不清楚,幼年的时候一岁就是爬和走的区别,少年的时候一岁就是懵懂和晨勃的区别,青年的时候,一岁所代表的变化就愈发模糊了,你问我 28 相比 27 的区别是什么,我可以和你说很多,过去的 28 岁尝试换工作,给压我价格的猎头发通牒;在政治因素恶化的一年里拖延着,但总算开始了申请移民的第一步;和交恶过的朋友和好;不同场合开车被撞了两次,因此打报警电话,和保险扯皮,和修车厂沟通,买了第二辆车作为替代,以及在收集材料准备和肇事者打官司。这些对我来说都是新的经历,是 27 岁或者之前的年份里没有过的。但这些事情都是我知识树里的一部分,是所谓 ‘成年人’ 本来就应该知道如何应对的事情,因此作为我自己,我并没有觉得有什么显著的,值得一提的变化。
因此,在对 ‘成年人’ 期待的阴影下,一切事情都没有那么明确起来,没有什么事情是特别值得开心或者庆祝的,这些事情本身就是 ‘成年生活’ 预期的一部分。因此,我得以有充分的理由松懈起来 - 如果生活给我的奖惩机制并不明确,那我似乎也并不需要努力去尝试,人生不总是福布斯 30 in 30,我也早过了迷信这玩意的年龄了。
如果说这个做法有什么问题的话,可能就是他人的期待并不会因此而降低。家人会说什么时候做什么事情,回国面试会卡你的年限,去有些国家移民还会根据年龄打分。他人总是会看你多少岁,然后尝试理解你应该承担的义务。因此,即使我小心翼翼地在每段和人的关系开头广而告之 - 我多少岁了,我仍然是一个非常困惑的人,我并不比五年前的我自己成熟多少,同时我也不希望自己拿着年龄狐假虎威,去创造关系的不平衡。但仍然,似乎生活里的人们都还是对我有隐含的期望,我所未曾答应过的 ‘成年’ 责任。

28 | 27 | 25 | 23 | 21 | 20

Echo Chamber Vol.2 序

 • 

Screenshot-2026-02-28-at-12.57.38-AM

2022 年做 Echo Chamber Vol.1 这本实体书的时候 subtitle 写的是 'a yearly project of a random guy in his 24'。彼时自己也大概想不到,27 和 28 岁的自己聊人生是一样的困惑,聊成见是一样的笃定,聊日常是一样的话唠,聊自己是一样的沉默。
时间推移,Echo Chamber 愈发变成一个自我推理的地方。我在上面记录自己的生活,甚至是一种 clinical 的态度来纪实,不在乎以后的自己会不会觉得难堪,不觉得以后的自己会不会觉得自己幼稚,我只希望在我感受这些事情的时候能尽可能的留存下来,这也差不多是 Echo Chamber 作为博客能持续十年多的根本 - 我希望这个东西能 outlive 我,如果哪天我死了,或者不提如此大惊小怪的假设,就说如果哪天我变得无聊了,变得妥协了,开始顾左右而言他了,那至少我留下来过一些东西,类似于玩游戏的时候留下来的存档,我得以通过阅读曾经的写作来摸回我曾经来过的道路。

Echo Chamber Vol.1 序

2026.2.20

 • 

cayman 终于拿到了。周三事情安排的很紧张,中午在面试别人,面完候选人说完再见关了视频,打车赶去修车厂,车上大叔放着印度音乐吵了一路,拿到车后确认了下东西都完好,开始往回开,然后发现行车记录仪没响应,我又是走的保险箱接线,估计是修车厂给我拔了,于是更加小心,怕刚出修车厂又被撞了还没证据。三点左右路上有人开始下班回家,因此在路上堵了一会,但总算在下一场会开始之前回到了家。以为会上会问我没做完的东西,但似乎会议组织者更关心另外一件事情,因此我的内容就水水过,周五交就没什么大问题。然后开完会,下班,启动另外一辆车去 fedex 退一个很大,只能靠 expedition 运过去的包裹,装到后备箱的时候开始不禁想,这就是美国语境下有两辆车的生活吗,不禁也太奢侈了。然后顺便买了点面包,回家路上接了个长电话,一边开车一边打,直到在家旁边的停车位停稳了,一边听人说话一边看着雨点在玻璃上滴下来。

The wrong kind of Progressive Disclosure

 • 

今天是周五。上班的时候看车里的 airtag 从 Porsche Fremont 挪回了修车厂,于是我在下班前又打电话给修车厂,期待着对面能说“车好啦,来拿”。


对方让我 hold 了一会,然后和我说,车是回来了,不过要交新的 supplement,差不多 2800 多,包含了矫正和拖车,要等保险批准才能给我车。我问怎么又有矫正不是之前被 approve 的 supplement 里面已经包含了吗。对方说嗯嗯,之前是 approve 了四轮定位,这个在 Porsche Fremont 的 calibration 是单独的,详细条目里面有一些 sensor 的校准啊,车灯的校准啊,还有其他的,比如 window standardization。我内心就啊?这玩意你还要收钱?就是长按电动窗户按钮的事情,之前自己换电瓶就干过的,一分钟不要,你要单独收钱?


然后对面继续读条目,读到 passenger side wheel,意识到这又回到之前已经被保险 approve 的四轮定位的部分了,于是说等她 touch base 和其他人沟通下,我说好。于是又 hold 了一会,她回来了,说他们装完车之后扫 fault 发现 sports chrono clock 和 sound composer 都有问题,于是就拿给保时捷 dealer 去看了,最后发现是个 blown fuse。我听到这脑子就更大了,和她说,第一,sports chrono clock 我是 aftermarket 件,明眼人一看都能看出来的,只有 clock 没有方向盘的模式选择,就只是个简单的表接到 PCM 而已,如果有 fault 是正常的,你就算是修车之前也有这个 fault 的,第二,sound composer 的 module 在后车厢,是我自己之前手动把连接断了的,因为不想听假的引擎声音,结果你说保险丝烧了,你就是再怎么换保险丝也没办法修好啊,你要接这个 module 的排线啊,你现在车从 dealer 修完拿回来扫 OBD 肯定还是有这个 fault 啊。


对面停顿了下说,嗯嗯,等我下我会把 supplement forward 给你,然后呢,这个 fuse 啊,的确是他们找到的问题导致了 fault code,这部分我没办法帮你据理力争,因为我也不在 dealer 当时做矫正的现场啊。但是呢,我们仍然要等保险公司批准打钱给我们,云云。我无语到不知道要说什么,你都给送去 dealer 做完了,现在我问了才和我说你在搞这些事情,人工成本都付了,也晚了,只能等保险。于是只能说那你至少有消息了告诉我吧。


对面就非常积极的说,是是是,我现在就给保险打电话,和他们说有个新的 supplement,不过呢,你也知道他们有向上汇报的链条的,毕竟修了这么多东西,打钱也要几天,所以是要一段时间的。不过呢,我周一会帮你打电话和他们说的,毕竟这是最后一次补交账单了。我说好吧,那我就等周一的消息了,希望能有。我没和对方说的是她周四和我说周五会给我消息,但周五一天没消息,最后还是我自己打的,因此对她周一会给我回话并没有期待,但这种话当面说就还是太猛了。对方全然没感受到我语气里的毫无期待,说好的,好的,祝你有个愉快的周末。我说你也是,有个愉快的周末,然后就挂了。


然后我邮件打开了所谓的最后一次 supplement 研究多出来的 2800 刀里面有啥,保时捷 dealer 不知道搞了什么要两千块钱,也没具体条目,不知道 window standardization 要多少钱,不知道换了也没用的 fuse 要多少钱,不知道他们拿 PIWIS 扫我自己装的 sports chrono 表又花了多少钱,总之两千块,然后修车厂 sublet 所以加了 25% 的额外收费。然后两次拖车,每次 299。我算了下,修车厂到 dealer 的 service department 只有不到 5 mile,开下最多十五分钟,因此 299 除以 15 分钟再乘 60 就是时薪 1200 刀了,太可怕了,你雇我自己去开自己的车好了。


然后就又是没有 Cayman 开的一天。回头想想,和修车厂打交道非常有 Progressive Disclosure 的哲学,一开始非常简单的告知,就是补个账单打钱的事情,然后我问说不是已经批准了吗,对面开始说细节,车窗要重置,sports chrono 有问题,保险丝烧了,然后我又继续追问这就不是保险丝的事情,保险丝就算真烧了你换了也没用啊,不接回原本的线你不还是有问题,然后对方就左右而言他,很像是面试别人 API Design 问到 edge case 卡壳的时候会有的表现。而这整个节奏本身也太符合 Declarative Framework 需要的哲学了,你不问我就不说,你问我就一点点展开,你问多了我就整个 PDF 给你你爱看不看,哇你这个修车厂的前台来苹果做 SwiftUI 好了,保证比我们所有人都要强,我们这帮人为了各自的哲学在 API proposal 上吵来吵去什么是最优雅的 Progressive Disclosure,最后被修车厂一通一点点透漏信息的电话比下去了。

2026.2.12

 • 

湾区又开始下雨了,想要洗车的想法因此开始推迟。Expedition 的雨刮太老了,下雨天喷玻璃水越刮越模糊,摸了下发现橡胶条刺刺拉拉的,像是某种藤蔓植物的枝干。于是买了新的前后 wiper blade。下了班到家拆开快递开始换,结果卸 blade 的时候把 arm 上的 snap claw 给折断了。估计是原厂件十几年过去已经老化变脆没有韧性了,就等我那么一用力。家里随便找了个塑料片切成小块拿去垫着 claw 另一侧 tab 的卡口,算是把 blade 塞了进去,松松垮垮的,但至少暂时不会掉下来。然后担心上高速万一真的掉了,于是又去下单了雨刮 arm,十几块钱的通用件,养这个车还是太便宜了,和 Cayman 完全不能比,那个车买个雨刮要上百。
Cayman 还在修车厂 - 确切来说在 Porsche Fremont 做四轮定位中,算是整个维修最后一步了,这也是非常离谱的一个事情,车被撞之后我打电话给 dealer,他们把我 refer 到这个所谓他们唯一信赖的修车厂,结果修车厂换完轮毂自己做不了四轮定位,又要扔给 dealer 的 Service Department。每次打电话沟通得到的时间都在一步步往后推,原本周三就应该结束在 dealer 的作业,车就回到修车厂做最后取车的准备,结果今天打电话,对面告诉说周五才能结束四轮定位,以及四轮定位算是 sublet 的一部分,修车厂从 Porsche Fremont 拿到账单后会开一个新的 supplement 给保险等打钱。我问那你能让我在你们等打钱的时候让我先把车开走吗,对面说要看管理层怎么说。反正这周五拿车的希望是渺茫了,我也对这家修车厂也已经不报什么希望了,就没什么好事。
同事问我说你车还在修吗,我说是,但还好我一直在开很皮实的 Expedition。买来五十天了,这五十天要是租车又是几千块的支出,已经够我又买一辆 Expedition 了。说回来买第二辆车真的是做的最正确的决定了,甚至应该更早一些,比如十一月初租的车又被撞的时候就应该彻底死心放弃等待,立马买第二辆车的。爸妈也逐渐理解我为什么当时一直躁动不安,想要买卡宴 957 GTS,想要买陆地巡洋舰 100,想要买 LX470,想要买路虎 L322,最后妥协挑了个便宜的 Expedition 也要买上第二辆车,因为国内外太不一样了,国内修车一周差不多了,这边等个车灯就要一两个月,然后又是各种和人扯皮的事情,修车的人不怎么上心,只好自己多注意些。这半年和美国不同服务业的人打交道的时候一直有这种感觉,保险也好,修车厂也好,移民律师也好,都是得过且过,小问题明显一眼看得到的非要提醒才会修正,真正能保护自己利益的只有自己。
有的时候会觉得和这些人在鸡同鸭讲,但有天走路上被人塞了张纸,是一个在线教会的,上面大字写着:

Are you 100% sure you will go to heaven the moment you die?
XXXXX Online Church
Join us Monday 7:30 - 9:00 PM, ZOOM ID: XXX XXX XXXX

看完我扔也不是拿着也不是,似乎相比和服务业的那些人沟通,作为一个无神论者和传教士沟通可能会更加的鸡同鸭讲。因此对比起来,和修车厂争执忘买车灯是谁的问题也好,和移民律师挑刺说不要用野鸡网站作为引用也好,和老不接电话的保险公司打电话说别给我关掉我的 claim 也好,这些事情都没有那么的麻烦,没有那么的 existential 罢了。

2026.2.5

 • 

因为最近把 Epoch 拾起来,换了个平台在 Playdate 开发的原因,偶尔会在其他地方发些 devlog。于是就有人好奇问我这个游戏到底是什么,也因此和他们解释了一番 Epoch 是什么曾经的 Epoch 开发到过哪个阶段,以及 Epoch 和 Lonely Planet 的关系
给 Epoch 加第三人称的视角时候顺便加了一个飞船查看器,就是简陋的一个 45 度角 top down 视角,飞船就一直水平旋转,类似于某些车里 360 度倒车影像会有的动画。说是飞船,其实就是代码里定义的一堆简单的顶点和三角形,因为 Playdate 软件渲染而不是硬件渲染的原因,这些三角形其实都是手动在屏幕上映射的位置,然后用线框连接起来,十分简陋,连 z sorting 和 culling 都没有。对我来说,已经暂时够了。
因为 Epoch 是过程生成的原因,不管是以前做 Unity 版本还是现在做 Playdate 版本,地形都是根据种子随机的,因此有的时候会有意想不到的地形。这当然不是什么值得骄傲的东西,毕竟是 Infinity: TQFE 和 No Man Sky 等等一众游戏玩剩下的。只是有的时候会想,有没有可能在自己写的游戏里遇到曾经梦里遇到过的地方。很久很久以前可能是小学,有天梦到在看一个土坡,可能是沙子做的也可能就是泥土,很错愕地凸起来一块,周围什么也没有了,就只是平地。但背景响着神秘的中东风格音乐,然后视角也像是游戏里的一般,环绕着土坡不停地旋转,活像是 nvidia 驱动里附赠的某个 tech demo 或是什么显卡跑分软件的场景,想想也挺合理的,游戏行业在 2000 - 2010 年老喜欢做那种丛林沙漠一类的演示软件。我至今都没明白这个梦到底有什么含义,但有种浪漫或者神秘主义色彩的解释是,这是 Epoch 某年某月开发中的一瞥,因为地形是过程生成随机出来的,刚好在那个节点随机到这么一个地形地貌,又被我的 terrain shader 上了层土黄的色,而我只是刚好提前了十几年看到它而已。
我的记忆里也不只这一个莫名其妙的意象,还有那种 1990 - 2000 年的机场,夕阳落日,大号宽体客机起飞的长焦特写,昏暗的跑道和橘黄色的天空在引擎的热浪下扭曲起来。这就是又一个神奇的印象了,我小时候没坐过飞机,唯一的解释是可能小时候看了什么美剧录像带,脑子里给记了下来。总不可能说,再过几年,在我没防备的时候,我在某个机场转机的时候被当头一棒,看到一模一样的场景。

2026.2.3

 • 

kodak_400_c_41_10381_119448_268428_000000670011--1-

  • itchio 给我发了个邮件,打开一看是之前关注过的一个 playdate 上的潜艇游戏的 devlog,游戏叫 Atlantic '41。想说是不是要给 epoch 的 playdate 版本也做一个 itchio 主页更新下进度,但想了下,十年前也是如此兴致勃勃在 indiedb 上架设了 epoch 的 unreal 版本主页,后面自然是没有结果。还是等系统再完善些再挂出来好了。
  • 昨天上着班老板过来和我说周三有个 demo,问我能不能搞,我说能搞是能搞,但依赖挂了不少,依赖没修完之前我都是被 block 的状态。老板于是问我要了一些我 file 的依赖不工作的工单。今天我下班之前和老板说我还在看,但不知道来不来得及。老板和我商量了下,估计就先不把我加到 demo 名单里,如果有什么变数再当个惊喜。得,周三 demo 不一定能做成,周四原本还要和老板聊升职,这时间卡的。
  • 之前在 kickstarter 上支持了一个墨水屏电子相框的项目,似乎项目成了,等什么时候问我要邮寄地址。
  • 自从修车厂一再错过答应的取车时间,最后上周五闹出来买车灯没买灯泡的闹剧,并且他们邮件回我说了些非常离谱的说辞之后,我就对这个 Porsche Fremont 所谓的唯一指定的修车厂信任崩塌了。我在他家之前还单独开了一个 work order 是趁着修车顺便帮我装新的 headliner,现在想自己有点傻逼,这活还不如自己干算了,给这家掏上一千多块钱,还不知道装的什么样子,别给我整出来把后玻璃戳烂或者 headliner 刮到的事情。当时给他们 headliner 让他们装的时候是保险扯皮最累的时候,因此想着不 DIY 直接让专业人士一起办了就算了,只是当时没预料丢给修车厂也过了两个多月了,他们还在修,修到最后和我说忘了买灯泡,要保险重新批才能给钱买。现在每天晚上就是十分的暴躁,想要去手撕修车厂,撕完拿到车了我还要去手撕对面保险,问对面要 loss of use 以及 diminished value。
  • 昨天给 Expedition 加油,油泵枪可能坏了,老没加满就自己跳闸,因此被迫手持加了好几分钟,最后加了二十七八加仑,一百二十刀。这车理论上有三十三加仑(一百二十六升)的油箱,加完打着火,看着油表满了,里程预估回到 430 mile,一本满足。虽然其他事情不顺,但这个平均油耗 11 mpg 也就是百公里二十一升的大车表现还算稳定,我需要在哪他都能开过去。上次开去北边的山里走 trail,路特别窄,一堆车七扭八歪地停在路边,我寻思了下,找了个没人停的土坡直接让大车的一侧骑着坡度停了下来,下车的时候旁边有个一家三口,女生走在前面,男生推着婴儿车跟在后面路过我们。可能是觉得倾斜了二三十度停车非常 impressive,我们刚下车,听到男生和女生说了句 Damm we should get one of these,给我和 Chloe 笑到不行。
  • 想重新看一遍红猪动画片。听了 Prove ItNO FUTUREFriendsCUNTY,以及 May the butterflies kiss on our noses

2026.1.30

 • 

这周三的时候打电话给修车厂,告诉我 Cayman 周五估计能拿,于是就还挺开心。但本着一贯的保守原则,今天也就是周五的早上打电话给修车厂确认下,结果果不其然又推迟了,意思是说组装阶段扫 OBD 发现了一个 fault code,然后要换灯上面的组件云云,然后要给保险提交新的申请,过不了的话还要我自己掏钱。我反驳说你不是之前买了一整个车灯的 assembly 吗,到底还要什么组件还那么贵,你给我一个具体的零件号。于是过了一段时间邮件给我了,包括零件组装的 diagram。这一看发现当时修车厂只买了 assembly,但是日间行车灯,疝气大灯灯泡以及车灯控制模块都是单独的部件,这帮人忘了一起买了,直到这周才发现。然后他们也没办法利用车上的老部件,因为我之前买了第三方的假 PDLS 样式的 LED 矩阵大灯换上去的,所以没有疝气大灯灯泡可以让他们拆下来用。但还是,我明白后已经不生气了,甚至无语到想笑,我不认真看条目就算了,你一个修车厂定零件的时候没注意过没有买灯泡吗,然后还要把整个 assembly 装上去,然后启动车扫描 OBD 码才能发现 assembly 里面少个灯泡?这不是肉眼就能发现的问题,都干啥吃的。

然后其他似乎也没什么好说的,值得一提的就是 Epoch 的星球渲染不再只是线框画 quad 了,而是真正的用 dithering pattern 配合简单的光影模型在做三维效果,跑起来差不多 20fps,尚且能用。

epochplaydate1

2026.1.26

 • 

epochplaydate

公司的事情一堆,周末原本要写的也没写。至于生活过的倒是还行,cayman 似乎下周就要修好了,然后和 chloe 早上去了 mountain view 的 farmers market 买了点吃的,好久没干这么健康的事情了。
然后最近开了个新坑来对抗公司事情多的消极怠工情绪,尝试在 Playdate 上写一个太空游戏,AI 写代码还挺不错的,至少要我手动实现一个 quadtree 地形我估计要折腾好几个小时,claude 直接几个提示后就差不多了。查了下 Playdate 的速度和 90 年代 Intel Pentium PC 或者 PS1 / DS 游戏机差不多,但毕竟纯软件渲染,不知道能不能真正的做出来一个完全过程生成的宇宙。至于名字,估计还是沿用十年前的那个未完工的游戏名字叫 Epoch,这么一说又要伤感起来了,十年前读大二,用 Unity 给 iPhone 6S 做太空游戏,结果因为各种事情没发布,出了校门就更没时间了。结果折腾来来去去,十年之后,正经工作也干了三四年了,还是没什么空,每天都在给公司项目加班,只有周末能给 Playdate 写写更加像素版本的太空游戏。