善意提醒

如果您打开本站很慢,布局排版混乱,并且看不到图片,那么可能是因为您还没有掌握用科学的方法上网的本领。

2026-04-30

洗手盆的故事

图片由 Google Gemini 3.1 Pro + Nana Banana 2 生成

早上到公司,去洗手。有同事在洗脸、刷牙,不知道是不是熬了通宵?
不过这使我回想起了一些事情,随后它们就像一串珠子,滑进来了我的脑海里面。那一瞬间,我有点走神了。


公司的洗手盆,是不锈钢制的,两个圆形的台下盆。以前不是这样的,老板应该是掏钱自己重新装修过。

自从 Covid-19 疫情以来,我已经养成了长途移动后必须洗手的习惯,「七步洗手法」,虽然不一定标准,但步骤都有到位。如果某次没洗,或者还没来得及洗,心里就会有疙瘩,喉咙也会开始发痒。

洗的时候,洗手液泡沫会溅到水盆边上,特别是四指交叉的那一步。还好水盆很深,不会溅到外面去。时间允许的情况下,我总是会用水流把这些泡沫冲走。如果后面站着一队人,可能就不一定这样做了。所谓「仓廪实而知礼节,衣食足而知荣辱」。资源不够充足,文明可能就要靠边站。而时间,也是资源的一种。


之前有因为二次创业而搬去外面的场所办公。那栋写字楼有三十年以上的楼龄,因此卫生间的装修比较陈旧,灯光也很昏暗。用的是陶瓷洁具,台上盆。台上盆这种工艺,在酒店用得多,可能比较好看,但并不实用。特别是盆比较浅的情况下,老是把水弄到外面来。我有个朋友,家里装修也是用了台上盆,后来后悔死了。

不过台下盆也有麻烦的地方。如果台面是大理石或岩板,就需要切割,而且往往要现场操作。上次来我家装修的师傅,看他切得到处都是粉尘,戴个 N95 口罩,感觉也挡不住。这个工种的健康肯定是会受到损害的。

那栋老写字楼的卫生间里面,发生过一些趣事。有一次我听见有人在厕所隔间里面打鼾,似乎是拉屎拉到一半睡着了?还有一次,一个同事跟我在里面碰见,洗手的时候提醒我说,两个盆里面有一个尽量少用。我问为啥,他说有一次看到一个人在盆里面洗自己的 Penis。

我听了下巴大概是掉了。有这种事?真是有够离谱的。但卫生间里面一共也就两个洗手盆,人一多起来也没法顾忌那么多。只能说知道了这事以后,尽量不碰盆子就是了。反倒是那些中午带饭在盆子里洗饭盒的同事们,听了这故事以后应该多长一点心。


告诉我这件事的那位同事,后来离职了。他的沟通有一些问题,导致大家渐渐地都不想跟他合作了。他还算「服」我,我是能跟他正常沟通的,但我也不能总是去当翻译。因此当找到了另一个可以接替他工作的人选之后,老板就把他资遣了。

他有一个在《三国》里面能找到的名字,也算是有点个性。在职期间还出过一次事情,貌似骑电瓶车把一个警察给撞了。我估计那个警察肯定是拦了他,可能是辅警。这事最后公司还出了面,没闹很大。我只听老板跟人解释说「撞的多少是个警察,得进去蹲几天」,可能就是指被治安拘留了吧。

被裁之后,我听说他去了德国。貌似带了家人过去,记得他有两个小孩,大概是奔着移民去的,或许家庭条件足够托举。我这人跟谁都不怎么联系,因此也只是听说而已。如果是真的,那我觉得还是不错的。他这样的个性,呆在国外比较适合。工作能力我不作评价,但至少我觉得国内环境应该不适合他。


相比起洗 Penis 来,大家在洗手盆里吐痰,貌似没那么不能接受了。当然,现在公司这个洗手盆是在卫生间外面,也不会有人干那种好玩得不得了的事情。

记得发姐有一次直播中,有观众来信提到,在国外,往洗手盆里面 Spit,被清洁工骂 Disgusting。当事人颇为不解,归结于国内外的文化差异。我也不知道对方是吐唾沫还是吐痰,很难说清吧。但我对这种事情,也是心存芥蒂的。不管吐什么,总之不是什么雅观的事情。实在不行,装作漱口也要好一点。

我知道有同事把牙具放公司,每天午饭后都刷牙。这其实是一个很好的习惯。不过午饭后的时间往往都是一堆同事在排队等着洗饭盒。如果饭后超过 15 分钟再刷牙,效果又没有那么好了,但总归好过不刷。

公司的洗手盆,每到了周五快下班的时候,就会有不少茶叶堆在里面。旁边本来有一个专门倒茶叶的容器,墙上也贴了告示说茶叶请倒在这里,不要倾倒入洗手盆内。我正想骂,发现那个容器不见了。观察了一阵子,似乎每到周末,打扫卫生的阿姨就把它收了起来,可能是怕周末两天出什么妖蛾子。然而这些茶叶不去这里就会去到那里,所以其实问题始终没有得到解决。这种现象似乎是我们这个社会的一个通病?


我家厨房装修,水斗用的「摩恩」,感觉还不错。当时也看到有卖公司现在用的这种圆形单盆,所以这勾起了我的回忆。

后来盐城房子装修的时候,也在京东上买了一模一样的型号寄过去。然而装修的老板拿到之后就告诉我们「不值这个价钱」。我们当时还以为是埋汰我们不用他推荐的品牌,然而实际一用就发现的确不一样,感觉更廉价。

太太觉得是遇到了假货。但后来我了解到了电商行业的一些情况后,跟太太说,可能是遇到了 A/B 货。看收件地址,上海和盐城,发不一样的货。当然,也有可能是品牌堕落,过了几年偷工减料了。谁知道呢?我们不是什么自媒体,不可能为了这个事情去花几千块搞求证。

城市,或者往大一点说,国家、地区,真的很重要!

2026-04-28

不用客气

看到有朋友在 Substack 上发 Note,说起轮椅出行遇到有台阶不平的地方,正在狼狈,有好心的路人大叔主动帮助,把轮椅拿过去,不胜感激。

我亦回想起,在 2023 年 2 月 20 日(记得这么清楚是因为有写日记以及 NotebookLM),我也在地铁站帮助过一位推婴儿车独自带娃出行的女士。

图片由 Google Gemini 3.1 Pro + Nana Banana 2 生成

当时我在刷卡进站过闸机,看到她在旁边踌躇,我过了闸机就马上转身到护栏处冲了她打了个手势,帮她把婴儿车拿了进来。她一个劲地感谢,我说了声不用客气就走了。

我对自己当时如此干脆的行动力还是有点惊讶的。回想了一下,我当时意识到了她的窘境:闸机太窄,推着婴儿车过不去。抱着孩子的话,最多只剩一只手,即使婴儿车没有很沉重,但也是弄不过去的。连着孩子一起举过去,估计她没那稳劲,而且这样也很危险。而路过的所有人都是过完闸机就匆匆走掉了,若非存心要帮忙,恐怕连放慢脚步都难。真正该出手的是地铁员工,然而安检的只管看他的 X 光机,拿着「裤腰带」的只管「为拦」人,一副「关我屁事」的样子,没心没肺像个神仙。这种情况下,如果没人主动提供帮助,她也很难向谁去请求援手。

我有闲暇,我不赶时间。上班通勤忙,但并没有忙到连一两分钟的事情都不能停下脚步来做。最重要的是,我判断,她确实需要帮助,以及,我的确能够安全地提供帮助。所谓,利人不损己,为何不为?别人为何不为,我不知道。但我可以做,我也就这样去做了。

没想到,仅仅是这种程度的善意,也能让对方感激不尽。但对这份感激,我其实是受之有愧的。我知道她接下来不管去哪里,全程都还要再经受很多「考验」。站厅里有直升电梯,所以她应该可以顺利搭电梯到站台,然后搭乘地铁去到她的目的地,但出站的时候,可能又会遇到问题。我毕竟还要上班去,也只能帮到这里。只希望她接下来还会遇到更多的好心人。

我对于上海在这方面的评价,其实并不高。每个地铁站,貌似都有一些无障碍设施,但又似乎都只能算是摆设。比如那种能通过大件行李物品的宽版闸机,并不是每个地铁站,每个出入口都有。盲道大多弯来拐去,翻山越岭。楼梯不是每一段都有举升机。感觉设计的人首要考虑的并不是让行动不便的人能更方便,而反而更像是在折腾他们。是什么「男生女生向前冲」的综艺节目吗?

若只是这些问题,还能算作硬件条件的缺失,可以指望慢慢改善。至于素质方面,地铁、公交上年轻人坐着刷手机,老年人站着的情况比比皆是。习惯了厦门那种风气,初来乍到的时候我很不适应。有上海人向我辩解,说「上海的年轻人上了一天班也很累」。好吧,就算是真的,那我也不喜欢。不过上海的老年人也有很多是很坏很不客气的,抢座霸座一只鼎,也不全是什么良善之徒。1966-1976 期间该读书的那一辈人,现在正是拿养老金的好年纪。

我还是挺怀念厦门的。年轻人上了公交车也都从最后一排开始坐起,为的是把前面的座位让给没有那么方便的人。公交车慢吞吞的,在老城区里面盘来盘去,反正也没有地方可以超车。整个城市给我的感觉就是没那么卷,有一种余裕在里面,不论是物质还是精神上。慢悠悠的日子,人们也都更加谦让友善。难怪易中天要削尖了脑袋往厦门钻。即使时隔多年再次造访,还是那种感觉,连空气都仿佛能让人松弛下来。

有一首歌,叫《从前慢》。如果能慢下来,大概人们就相互客气了吧?

2026-04-08

当 AI 遇上忒修斯之船

在软件中需要加入一些为用户个性化定制的内容推送,因此需要一个用户标识。

正常情况下,如果用户有登录,就是一个 UserID 的事情。然而我们这次的场景是匿名使用,所以没有这个 UserID 可以用,需要自己来生成一个。

以及,产品设计上希望能做到还是能大致识别到一个「人」。同一台机器上如果有多个我们的软件,最好能得到相同的 ID。因此最后商量下来决定采用设备 ID(或设备指纹)的方式。

如果是 Web 浏览器,算是有相对成熟的方案。浏览器指纹也不是一两个人在做了,「广告」这个需求天然就需要这种东西。然而我们是 MFC 程序,需要自己想办法。

我以前做 Shareware 的时候也大致接触过一些 DeviceID 的东西,知道这种事情吃力不讨好。很难覆盖那么多种类的硬件,特别有一些可能还是服务器上才能见到的东西。万一搞不好,说不定在某些特殊硬件上还要出什么状况,所以并不是一件容易的事情。所幸我们这次的事情并不是性命攸关的「注册码」,只是一个可有可无的身份标识,即使拿不到,也可以接受,因此压力没那么大。

很自然地,我想到了让 AI 来做这个事情。说到「见多识广」,可能没有人比得上它。知识结构也是它比较新,不用担心去网上找到的开源代码只能支持老旧硬件的事情。把需求描述给了它,很快就生成了一个函数,专门用来在 Windows 上得到 DeviceID。

自测的时候,问题来了:DeviceID 有时候会变。
其实这个问题一早就埋下了,是我需求没向AI说清楚,算我的锅。

说起来,这类需求虽然都可以描述为 DeviceID,但实际上是不同的:

  1. 用于区分两台设备;
  2. 用于追踪使用者。

两者是有大区别的。前一种就最好是有点变化就换个 ID,后一种则应该只要怀疑可能还是原来那台,那 ID 就不要动。

但是,这种事情确实不太好把握。加根内存条算不算新设备?可能不应该算。那换块硬盘呢?如果 CPU 升了个级,心脏都变了,还说没变化,有点说不过去吧?以及,如果用户把操作系统从正版的 Win10 家庭版给重装成了盗版 Win11 专业版呢?

图片由 Google Gemini 3 Pro + Nano Banana Pro 生成

我们的需求肯定是希望尽可能不要因为一丁点儿变化就换一个 DeviceID。但这事是一个「忒修斯之船」悖论。变到什么程度才算一台新设备?如果太过追求某一个极端,就会落入两头的陷阱。要确保 DeviceID 的「排他性」,就需要冒「稳定性」不佳的风险。

AI一开始给出来的方案,「稳定性」是不够好的。即使硬件和 OS 都没有发生变化,它也可能会变。据说是多核 CPU 的线程绑定带来的问题。麻烦在于,如果我不从需求侧来反推,以及没有进行足够数量的测试,很可能发现不了。

解决了这个问题,还有另外一个问题:如何保证这段用于生成 DeviceID 的代码,在各种硬件上都能稳定运行?

我们的要求很低:如果不能保证生成 DeviceID,那就别生成,或者生成一个可能会重复的,都 OK。这算是允许牺牲 DeviceID 的「稳定性」,来换取更好的「鲁棒性」。这个需求我从一开始就给了 AI,它的确也在代码上作了处理,我有看到。然而,如何保证呢?作更多的测试?

我目前能想到的:在调用的时候套一个 try...catch,不知道有没有用。另一个我知道肯定有用的办法,就是把这个事情扔给一个独立的进程来做,这样应该可以保证万无一失。软件运行架构会需要一点调整。我知道这样去做,AI 呢?你如果只是把它限制在写函数这件事情上的话,它肯定没法告诉你答案。

这种事情,让 Claude Code 来做,能更好吗?如果让 OpenClaw 放开手脚不限费用地去干,它最终能搞定吗?GIGO,如果人想偷懒的话,估计就会很难。