MoreRSS

site iconKai Xia | 夏恺修改

工程师在澳大利亚墨尔本。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Kai Xia | 夏恺的 RSS 预览

Pensieve: 2610

2026-10-30 08:41:00

所读所观所玩

这个月玩了不少游戏, 读书也不少. 游戏来说, 买了Dredge, 也通关了, 但是没觉得是一个特别优秀的游戏, 而只能说是普通. 感觉可玩性方面不如潜水员戴夫, 剧情也不算特别深. 值得学习的地方在于恐怖氛围的塑造. 当然, 就我打折后花的$13而言, 还是挺划算的. 回头刷了下沙漠老鼠团, 起因是自己想做的游戏里面有些数值的东西想从这个游戏里面收集一些灵感. 这个游戏之前通关过, 所以这次重玩算是驾轻就熟. 最主要的收获是后期的装置和前期的装置在recipe上有特意的重叠, 能够更有效地使用收集到的素材. 但是整体的可玩性和故事完全是一塌糊涂. 暗黑三的新赛季玩了一下跑马天拳, 纯AOE的伤害也能打到这么高的层数, 真是叹为观止. 在升级宝石的过程中, 凭着身上四件太古, 146层八分钟打完, 感觉没什么可以追求的了, 就没继续冲层/撕票了. 倒数第二个游戏是星布谷地的一个内测. 实在有点玩不下去, 没有什么特别有进展的感觉. 这个游戏和米哈游其他的游戏有点不太一样, 更多强调的是放松和休闲. 它不是让你可以休闲, 而是在一定程度上逼你休闲: 即使你想肝, 每天能做的事情也很有限. 后面这个游戏正式上线我大概也不太会去玩.

读书方面, 有四本书. 首先是接着上个月的进度, 读完了吴晗的朱元璋传. 这本谈不上推荐, 讲故事能力远不如当年明月, 而学术角度却又流于形式而没有特别深入地剖析史实, 有些地方当时特定历史时期的痕迹比较重, 不是吴晗本人的错, 但是读起来总会有不适. 接下来不推荐的一本书是臭食志, 全程端着老干部的架子, 写出来的内容流于铺陈, 写美食没让人有食欲, 更多只是值得网上发帖的记录, 不要读. 接下来仍是一本不太推荐的创业可以学: 面向创业者的认知白皮书, 最大的问题是AI的痕迹太重. 对于这种内容为主的书, 我们也没有去要求作者能妙笔生花, 只是能把主题论述清楚就好, 但是作者更多只是结合自己的观点让AI来写内容, 轱辘话说了不少, 但是信息密度不算高. 最后是本月可以推荐的一本斯坦贝克的小红马. 这本的情节不复杂, 但是细节描写很值得学习, 繁而不乱. 斯坦贝克好到什么程度呢? 我在让AI写小说的时候, 让AI模仿斯坦贝克, 生成出的内容立刻就高级了很多.

电视方面, 我重看完了李亚鹏版的笑傲江湖. 仔细体会了一下这儿对剧情的改编. 我能够理解为什么这样去改, 因为金庸原著在推剧情方面有些硬伤, 但是真的不觉得央视的改编是完美的. 小说里, 令狐冲/任盈盈的出场都有点晚, 对于一个影视作品来说, 不太合适. 央视改编后, 这部分的状况有明显改变, 而且也能够让令狐冲和任盈盈之间建立一些默契, 对于后面推情节是有助益的. 但是, 这样改编也在很大程度上改变了整个叙事结构. 比如让令狐冲去福建, 然后令狐冲基本全程旁观, 这就属于典型的不合理.

Apple TV

这个月还买了一个Apple TV, 于是顺便记录一下自己的配置. 我的需求大概是能够播放我的穷人版NAS(可以跑SMB/WebDAV的路由器接了硬盘)里的视频内容, 也能够看电视和玩游戏. 这些要求Apple TV都能轻松做到, 但是做到和做好之间还是有一点差距. 比如用VLC能够很简单地开始播放影视作品, 但是后来发现VLC连记录某个电视剧播放的进度都做不到, 而且每次都还得去重复选择收藏夹里的影视作品, 就感觉capability做好了, 但是UX上有很大的缺陷. 于是看看有什么其他的选项. 首先排除的是Infuse, 感觉没必要为了这样的需求而去付订阅费. 然后试了下Jellyfin, 仍然感觉不靠谱. 我的路由器只有1G内存, 运行Jellyfin的时候会有OOM. 而且我实在有点难以理解为什么收集一些metadata会需要这么多的CPU/内存. 后来找了下推荐, 看到了老东家出的网易爆米花, 功能上完全符合我的要求了: 添加一个网盘/内部服务, 然后app自动导入里面的媒体资源, 并加上metadata, 然后有一个比较好的界面来展示. 一个缺陷是对于一些非著名影视作品的识别不够完善(比如一些OCW的课程视频等等), 而且似乎对从资源处加载自定义meta的支持貌似不足. 另外一个强人所难的想法是希望网易能够把这些metadata可选地写回到资源所在的云盘, 这样可以用其他方式来管理. 影视作品搞完了, 我还在路由器上跑了这儿的一个IPTV频道服务, 让我能够在Apple TV上看国内的电视台. 最后是装RetroArch, 找了恶魔城晓月, 基本玩通关了, 关键魂也都收集到了, 但是没去打最终的boss.

站在电车里, 我在手机上改代码

2026-09-29 14:03:00

对于我而言, 这是另外一个Aha时刻. 18个月前, 当我第一次开始用Claude Code的时候有这样的感觉. 而今天早上当我在电车上, 在手机上让deepseek harness(后面简称为dsh)帮我去改一段代码, 然后切app去读书, 一会儿后回到浏览器, 发现活已经干完了. 这个感觉就是很开心.

首先说下dsh是什么, 以及广义上harness是什么. harness(直译是挽具)是用来让人能更好地和LLM协作的外围工具. 从最宽泛的意义上讲, 你在和AI对话的时候, 已经使用过挽具了. 比如, 你在和AI对话的时候, 一般的聊天窗口都会把所有已有的聊天记录全部发到LLM, 这样LLM才能更好地在一定上下文下跟你好好说话. 这个把所有已有对话记录全部一次性合并起来发给LLM, 当然也可以被认为是挽具的一种. 对于软件工程而言, harness有更多的意义. 比如harness去硬盘上读了一段代码后发给LLM, 同时附上适当的提示词, 让LLM可以继续跟去下一个文件或者去执行某个命令等等. 这些都不属于LLM的直接范畴(就好比不是马身体的一部分), 但是对于结果来说又是很重要的. 配了好的挽具, 牛马才能多快好省地干活, 为资本家创造价值. 而在软件工程上, 配了更好的harness, 你的LLM才能更好地发挥自己的作用: 省token, 并生成出更好的代码. deepseek harness顾名思义, 就是deepseek家出的harness. 八月中发布以后我也一直在使用.

我为什么会看好dsh呢? 因为它太hackable了! 手上一个相对较新的dsh安装, 里面有28个会话层面的插件, 还有165个核心层面的插件. 比如会话层面的插件有叫tool-subagent, 有叫tool-todo, 还有叫tool-web; 而核心层面的插件比如session-title, settings-file, storage, tool-bash, skill, goal等等. 你所能想到的功能都被实现成了插件, 这也意味着, 至少在理论上, 你可以替换掉所有这些组件的功能, 意即, 你可以用非常低的成本来定制dsh的行为. 说个具体的例子, 我希望我的dsh里面主界面上应该只有一个聊天窗口, 不绑定任何workspace, 我可以在里面下达命令, 然后就会有一个LLM来判断我的意图, 并启用另外一个agent在某个合适的目录里开始这个工作, 并在需要我介入的时候找我. 这个东西如果我要在claude code里面实现, 大概率只有把claude code包起来. 但是在dsh里面, 几个prompt之后, 这个功能就出来了. 又比如, 我实际上只有Codex的订阅, 没办法直接接入到dsh, 于是装了一个插件就实现了codex auth.

接下来开始重头戏, 我是怎么样在手机上跑dsh的. 首先, 要让dsh直接在手机上运行没有任何意义, 因为dsh很可能会执行编译, 测试或者运行其他系统命令的工作. 在一个iPhone的沙盒里面, 这些都很难做到. 所以, 我们会需要让dsh跑在一台服务器上, 而且更重要的, 我们要确认这个dsh能够被安全地访问.

服务器方面, 我用了一台Oracle Cloud里的免费服务器, 4核心, 24G内存, 100G硬盘, 服务器运行在悉尼, 访问速度挺不错. 对于一个免费服务而言, 挺物超所值的(就不要钱!). 顺便说下, 现在注册Oracle账号要薅羊毛, 注意要用Pay as you go, 否则会和我一样, 重试API请求一整晚都排不到空闲机器.

然后是服务器管理, 我用的是自己相对比较熟悉的Ansible. 之前我维护我的VPS也都是用这样的模式. ssh连上去, 然后用Ansible来初始化并保证配置收敛. 好处在于某天如果服务器故障, 我可以起一台新的, 在Cloudflare里面改一下域名到IP的映射, 然后一切如旧. 缺点是配置收敛有时候需要靠习惯. 比如今天早上是我正式远程使用这个解决方案的第一天, 路上发现服务器上没装golang, 我通过ish连上了服务器, 安装了这些包, 但是我回头得记得改Ansible, 把golang的安装加到服务器初始化的配置里面去.

接下来是相对比较困难的部分了, 你如何保证这个服务是安全的? 如果你就直接打开服务, 暴露到公网, 那么有恶意用户访问的时候, 直接就有了这台服务器的远程命令执行权限. 我们可以依赖HTTPS+basic auth的形式来保证这个安装的安全, 但是这样在网络层面上仍然是有攻击点的. 所以, 我采用的方案是使用ZeroTier, 我也用这个服务有一段时间了, 目前很满意. 比如, 我上个月在香港转机的时候, 要使用OpenAI时发现被地域限制了, 当时就是通过ZeroTier提供的内网IP来ssh起socks代理来解决的.

使用了ZeroTier后, 虽然这台机器本身有公网IP, DSH本身只监听服务器本机, 再由入口层限制只有ZeroTier网段内的设备可以访问. 我可以在连上ZeroTier的前提下, 用一个类似172.16.35.45的内网IP来访问dsh了. 但是显然把这个IP绑到一个域名会更好, 反正我自己有一个域名, 加一个子域名也就是几分钟的事情, 所以就顺手添加了. 另外需要指出的是, 服务器上安装ZeroTier启动后加入指定的网络时, 会需要在ZeroTier的界面里允许这台新服务器加入网络.

到这个时候, 我们的服务器安全已经做好了网络层面的防护, 只有被信任的设备可以访问这个dsh服务. 在应用层面, dsh本身还提供了一层防护, 启动dsh进程后, 标准输出里面会带上一个类似token的URL, 如果直接访问dsh的服务而不带上这个token, 会被认为是非法访问. 所以安全防护来说, 我们在外部访问层面的防护已经差不多了. 但是, 这只是防护工作的一半. 和传统的应用不一样, 对于LLM应用, 我们不仅要防外部入侵者, 也需要防范随时可能发疯的LLM.

接下来是系统层面的隔离. 我没有打算把dsh关在一个容器里面, 因为这台服务器已经被我视为一个不安全的边界了, 在里面增加一层docker只会让AI和系统有更多的摩擦, 在核心能力上, 没有特别大的收益(至少和可能的摩擦比). 但是, 我还是可以把这个dsh进程关在一个不能登录的用户(dsh)里面. 这个在Linux下实现起来很简单. 而且一个额外的好处是, 我可以更好地限制这个用户能获得到的Github权限. 我在这台服务器上安装dsh, 一定会在上面有比较多的代码层面的交互. 为此, 我如何限制这台机器不能做我能在github上的所有操作, 就很重要. 推荐的办法是用一个github app, 给这个repo有限的权限(只能对特定的repo去pull/push等), 然后将这个app的相关认证密钥信息交给这台机器的另外一个用户, 并且通过不同用户的隔离来实现dsh用户能够按需获得有一个小时生命周期的token, 能够去做它需要做的事情, 但是没法去做限定范围外的操作. 在最坏的情况下, dsh用户可以获得这个app的全部权限, 但是其能造成的不良影响仍相对有限.

折腾完这些后, 还有一些额外的小功能需要折腾. 前面提到了, 我需要使用Codex Auth, 所以需要在新服务器上登录一次. 又比如, 我需要改变dsh的默认行为, 让访问dsh时使用的域名不是localhost的时候, 也能有所有的功能(而不是所有配置存在内存, 刷新页面就失效), 官方没有这个功能, 自己让LLM写插件也就几分钟的事情. 最后, 默认的dsh网页没有对手机端做任何优化, 这也是需要修的.

做完了所有这些, 我终于可以在电车上让LLM好好写代码了. 最棒的事情是, 所有的事情都是远程完成的, 不依赖任何客户端的连接. 不管你在干啥, 只要任务已经派发出去, LLM就会在服务器端孜孜不倦地干活.

Pensieve: 2609

2026-09-25 17:13:00

所读所观所玩

这个月在微信读书里读完了一些不知所谓的网络小说(CS之神和奇锋录), 正在读吴晗写的朱元璋传.

游戏来说, 接着上个月的进展, 刷完了丝之歌的绝大部分成就(剩一个纯收集向的True Hunter懒得去刷了, 懒得再用钢魂爬一次无名村庄). 三十个小时的速刷成就, 钢魂通过成就和蘑菇先生结局都是在同一个save里完成的, 当然自不必说我用了很多S&L. 以至于后面都是直接在一个bash session里面加上了alias:

alias restore='rm -rf 105248233 && tar xfz 105248233.tgz && open -a "Hollow Knight Silksong.app"'
alias backup='tar cfz 105248233.tgz 105248233'

另外也还捡起来Darkest Dungeon来玩. 得到了一些游戏设计上的想法. 我发现对比这些游戏的数值设计很有意思. 比如伤害计算, 比如如何让暴击感觉更有意义(而不是像Diablo3里面暴击变成毫无意义的). 比如如何让少量的数值增加可以有更明显的效果等. 对于不同的游戏类型, 需要有不同的数值设计. 但是这个游戏给我的纯粹也就只是启迪而不是乐趣了, 因为后面的很多战斗比较重复, 甚至刷关卡的时候会睡着.

电影电视方面, 首先是一两个月后, 我终于在Netflix上看完了费马料理. 除了有几句台词有记忆点, 其余的都没啥了. 莫名其妙地把数学和料理结合起来, 导致里面的不少人物都不真实, 感觉不是一个好主意. 然后是两部电影, 大佛普拉斯和穿普拉达的魔鬼2. 前者还不错, 有风格也有故事, 后者更多是在强行卖阵容了, 剧情比较胡乱.

deepseek-harness

这个月除了在做个人项目以外, 重点在玩deepseek-harness. 我本身对给他奠基的那篇论文并没有特别感冒, 并不认为它解决了什么实际的问题, 但是deepseek本身提供的hackability让我很开心. 比如, 很多其他harness里面的一些你没法自定义的组件, 都可以按自己的方式来定义, 感觉就是脱离了IDE的世界而进入了neovim. 比如, 你如果有Codex的订阅, 你想在Claude里去使用这样的API, 那么显然对不起, 你得去找多少不那么靠谱的中转站. 又比如, 你想去自定义一下对于执行命令的白名单, 你也可以不用太依赖harness给你提供的预制选项.

牛群冯巩相声

突然想起来要听牛群冯巩的相声了, 这是在磁带机年代就陪伴着我的声音. 于是从网上找到一个比较全的, 晚上跑步的时候边跑边听. 但是回头看, 这些相声的品质真不怎么样. 比如我当年很喜欢的亚运之最, 回头来看都是吹捧和宣扬, 没多大意思, 其他很多表演在当年看起来就兴致昂扬, 现在看起来就是无比尴尬. 我觉得, 唯二可能能超脱那个时代的是小偷公司和冒号. 这两段都是很好的讽刺. 小偷公司里面前面是铺垫, 捧哏, 最后落到官僚主义上面来, 有一点点生硬, 但是仍属于正常过渡. 后一个段子里的领导冒号在那个时代可以算是家喻户晓了, 不过新一代的观众对这些可能都没听说过. 也无妨, 时代在前进.

蔡州

八月底回武汉的旅途里做了很多编辑修订润色的工作, 算是把这部小说写完了. 可以在这儿读到, 有什么反馈欢迎给我邮件. 初衷就只是写完了忘川后, 想再把里面的人利用一下, 谈不上说要构造一个universe, 只是觉得, 这四大高手再加上韩玒, 肯定还会有些其他的故事. 于是看着当时的那些大事, 写了这篇. 南宋是一个很奇妙的历史时期, 历史课本上往往就从北宋建国的那些澎湃的烛影斧声快进到了末年的大厦将倾, 最多政治经济上提一下王安石和欧阳修, 我总感觉对不起那个时代的璀璨群星们.

Pensieve: 2608

2026-08-30 12:19:00

所读所观所玩

这个月在微信上读完三本书, 一本好, 两本差. 好的一本是顾随讲苏东坡, 如果是实体书, 应该是很薄的一本小册子, 不过全是文言文, 所以一共花了两个多小时才读完. 讲得的确很出色, 对苏东坡的批评和赏析也很到位. 比如, 这首洞仙歌我小时候肯定读过, 能够重新回味和欣赏是很不错的体验:

水殿风来暗香满。 起来携素手,庭户无声,时见疏星渡河汉。

我自己没觉得这首词的其他句子特别出彩, 不过这两句是真不错. 前一句写夏夜的风, 不仅有味道, 连祛暑的凉意都带来了一些. 后一句就像素描一样, 而且还有视角的变化, 就好像电影推长镜头一样. 作为一个纯文本的创作, 真厉害.

第二本是回味了两章大唐双龙传(徐子陵学真言, 杨公宝库)后跑去读日月当空. 这本实在应该算是大唐双龙传的DLC, 感觉就是一个一入场就是入微境界的项少龙的故事, 平衡性很差. 最后一本是比较水的小猫不语, 只是一味地爱你, 这本短到我都不能说我是等飞机时读完的, 而应该说是登机排队时就读完了. 也挺水, 不值得读.

游戏来说, 这个月重新捡起丝之歌来刷成就, 目前照着攻略和这个视频攻略刷完了5小时通关的成就(三个多小时完成), 只记得在Groal那边死成狗, 不断S&L才算是过关, 后面打高庭的时候实在扛不住, 于是花了点时间去Mount Fay拿到二段跳, 还刷了蟑螂内脏拿到尖刺工具才算是通过. 后面开始跟着这个攻略刷钢魂模式100%通关, 现在就等着完成一些收集任务后去开Act 3了. 特别强调, 这次通关流程里面, Groal是一次过的, 很开心(当然也有其他死成狗的地方, 比如First Sinner).

回武汉

临时有事回了趟武汉, 很幸运地刷了一圈自己想吃的东西, 包括: 莲蓬, 菱角, 茭白, 鸡毛菜, 龙须酥, 老四川牛肉干, 豆皮, 面窝, 糊米酒, 烧梅等等, 很多都是只有在武汉才能吃到的. 另外去医院检查身体和洗牙的时候发现, 国内技术进步到让人觉得不适了: 我常年在澳大利亚生活, 没有国内这些医院的门诊病历了. 去就诊排号的时候, 我本以为还会买一个病历然后填些个人信息, 结果收费员让我直接刷脸, 就正确得出了我的姓名, 真厉害也真恐怖.

墨尔本大学的hackathon

这个月受邀担任了墨大学生社团举办的黑客马拉松导师, 几次去墨大给这些学生答疑. 这个hackathon的网站在这儿. 几点小想法:

  • 很多学生都不知道自己该学什么, 即使是相对和业界贴得更紧的海外大学, 业界最新实践和学校提供的课程间仍然有一个比较大的gap. 比如, 云计算和云平台的使用等等. 我一定程度上能够理解这些, 因为学校的课程往往会希望有更长的生命周期, 所以相对会更保守. 然而, 业界对这些技术的需求也仍是不容忽视的. 我们校园招聘的新同学很多人没用过AWS, 只能在入职后自学.
  • 这次hackathon有一个很取巧而又很新颖的地方. 这个学生社团之前组织过一个产品向的hackathon, 有不少从产品角度的成品和半成品. 这次hackathon里, 学生们可以利用之前的产品, 只是要在三天内完成技术选型和实现. 为了平衡, 学生团队需要通过投标的方式来评估之前的产品值得多少分, 然后用分数来投标. 比如两个组A和B, A认为当前竞标的产品潜力很大, 投了12分, 而B更看好另外一个产品, 于是只是投了8分. 此时, A会赢得竞标, 可以在这个产品的基础上开发, 不过最后的产出里会扣除投标的分数, 比如对于A, 他们的满分就只有100-12=88分了.
  • 相当多学生的演讲技巧近乎于零, 完全没有从观众的角度考虑如何呈现一个故事, 更有甚者, 很多人完全没有彩排过整个slide的时长, 所以最后pitch的时候, 至少有一半的组没有在规定时间内完成自己的讲解.

ChatGPT Live

OpenAI家的这个产品在上个月发布了, 但是我的个人账号到接近月底才被灰度. 相比于之前一代, 这次进化让我觉得提升很明显, 包括:

  1. 我说话有中英文混杂, 它也开始有(这好像在之前的版本里也会有, 不过并不明显).
  2. 我说话的过程中经常可以听到它的”嗯”, 技术上不难实现, 但沉浸感就很好.
  3. 我有一次打断了它. 它当然 正在说: “就是有什么更好的方法,嗯,能够推进,但同时又能有每一个人自己的想法”, 我接话说, 创作的自由, 它也能立即反应说, 对, 创作的自由. 这让我真的很受震撼, 因为这是在零点几秒内给我的回复, 让我感受不到这是一个和AI的聊天. 因为之前的AI聊天体验大都基于LLM根据纯文本生成内容, 然后调用类似语音合成的方式来将文本念出来. 这一般是一个相对较长的过程, 而这次的零点几秒的反馈让我惊艳.
  4. 难得有一个AI model会跟我说: “我刚准备说这个!”.

Pensieve: 2607

2026-07-27 07:35:00

所读所观所玩

这个月在微信读书上读完了四本书, 都一般, 没特别出彩. 最好的一本是漫画分镜头表现教程, 看这本的原因是下个月开头组织的一个Game Day里面大家都会用AI来去生成一些多媒体内容(漫画, 视频等), 这本书能够提供一些分镜头方面的知识储备. 而且这本书算是超出期待, 在于不光演示了正确地画法, 而且还演示了如果不这样做会怎么样. 第二本是金圣叹选评杜诗, 作为金圣叹的粉丝, 我本来对这本有比较高的期待, 但是他所选取的杜诗没让我领略到杜甫的好. 倒是附录里的一句歪诗让我印象很深刻: “子美篇篇老, 陶潜顿顿饥”. 剩下两本都是技术相关, 一本是汉语写的Claude Code实战: Harness工程之道, 这本书比较有意思的地方在于没读到多少AI味, 但是不少技术细节有些缺漏, 看不明白作者的深浅. 最后一本是更像是工具书的Three.js权威指南, 这本书虽然是人写的, 但是更像是AI的输出一般, 一味堆材料, 没有起伏, 比较无味.

游戏来说, 这个月无聊重新捡起暗黑三, 用死灵又玩了一遍150层大秘境. 总共大概也就花了十几个小时吧. 整个游戏最好玩的部分是刚刚到70到能速刷T16的部分. 后面的冲层真的挺无聊, 就是按部就班地升级宝石, 给身上的装备打卡, 然后能速刷120后就可以试着冲150了, 一千巅峰就差不多够了. 而且真正抓的时候很多时候是在撕票, 就很没意思. 最好玩的那个部分玩家能明显地感觉到提升感, 而一千巅峰后的提升就很不明显了.

kitty配置不当导致的故障一则

有了AI之后, 我越来越懒, 配置文件的管理都是交给AI来更改了. 这个月也是在AI的帮助下, 解决了一个困扰了我数个月的小故障.

问题是这样的: 我在使用kitty这个终端模拟器的时候, 本地的日常操作都很正常, 但是连到一台远程由coder管理的devbox的时候, 经常ascii码会错乱, 比如复制内容的时候会带上ascii控制字符, Ctrl-C/Ctrl-D无效等等. 往往都是得关Tab来断开连接. 我一般是多个tab操作, 与此同时, 我devbox上的Claude Code进程里的输出却完全没问题.

如果你认为我说得比较模糊, 那么你完全正确, 因为真实世界就是可能有很多个因素会导致某个结果, 但是在你排除了其他各种原因前, 所有的原因都是混杂到一起的, 就像你在观察一个量子系统前, 系统的态矢量不会坍缩到某个确定的本征态一样. 对于这样一个系统, 可能有影响的因素有:

  • kitty版本
  • ssh control master
  • coder版本(coder是负责管理devbox的进程)
  • 远程服务器上的bash配置
  • 远程服务器上的ps1代码逻辑
  • 其他未知幺蛾子

我对ps1有点信心, 因为这个软件的ascii控制字符我很仔细地调校过, 而且这么多个版本都没出故障. 然后, 当然一开始要怀疑自己的代码了, 而且最近有rust的第三方库更新. 我让AI帮我审核了一遍, 答复说应该没问题.

然后我认为是kitty版本的问题, 我记得之前从0.45.0升级到0.46.0的时候发现了这个问题, 当时回退到0.45.0就正常了, 所以我当时猜测是kitty版本导致了问题. 后来发现0.45.0也能触发这个故障, 于是排除了这个可能.

因为claude code里面的输出都完全正常, 所以我猜测是不是ssh control master导致了这个故障, 两个ssh会话共享一个连接时, 是不是有些内容错乱的问题? 虽然这样的想法很玄幻(因为openssh如果有这种bug, 早应该被修好了), 但是我还是认真地测试了下, 发现control master完全关闭后也还是有一样的乱码情况.

为此, claude开始指导我, 让我用下面这样的代码来运行kitty, 这样能够捕获所有输入输出流:

kitty --dump-bytes=/tmp/kitty-dump.bin --dump-commands > /tmp/kitty-commands.log 2>&1

AI当然会犯错, 比如它看到我的prompt里面有一个分支名叫kaix/dynamic⁁ess, 信誓旦旦地告诉我, 这就是是kitty跨窗口串台的证据, 其实这是我自己写的ps1代码里对过长分支名做截断显示的正常逻辑(用⁁作为截断标记), 并不是bug.

下一个发现是, 我在devbox上尝试重现问题的时候, 发现我在我自己的Home里面随便操作, 没导致问题, 而一旦我进入了我们公司的monorepo, 就有问题了. AI指导我操作了一圈, 还是没发现具体的问题.

这个时候, 我开始问AI, 为啥系统自带的Terminal做这些操作都一切正常, 而当我用kitty的时候就会有故障呢? 这个时候, 我发现了另外一个线索, 因为我在kitty下已经习惯了用Cmd+K来执行清屏操作(映射到clear_terminal reset active), 而这可能是导致后面出乱码的直接原因, 而Apple Terminal我用得很少, 在里面也是缩手缩脚, 肯定不会有这个肌肉记忆来帮我清屏, 所以一切正常. 让AI进一步帮我分析了一下, 果然. 问题是我本地有清屏, 但是这个操作并没有把任何操作指令发到远程服务器上去, 因此两边会不同步. 为了验证这个猜想, 我慢悠悠地在Home下执行了一次ls, 然后Cmd+K清屏, 然后再ls, 此时复制的结果就出问题了, 类似^[[200~bin/git-misc^[[201~. 而且, 这个粘贴结果只有在当前这个被reset过的session里是这样, 贴到kitty其他的tab都是正常的.

知道了问题的原因, 修起来就容易多了, 我们不应该那么粗暴地重置状态, 按照AI推荐的这个组合就好很多了:

map cmd+k                combine : clear_terminal scrollback active : clear_terminal to_cursor active : send_text normal,application \x0c

这样长是因为我的确很多时候习惯了Cmd+K清屏后跑命令, 然后Cmd+A来复制所有内容.

Pensieve: 2606

2026-06-28 14:38:00

所读所观所玩

这个月比较浮躁, 个人项目进展不尽如人意, 读书一般, 有不少本读了一半, 游戏玩得不少.

先说读书, 这个月读完了中岛敦的山月记. 这本书挺有意思, 作者是日本人, 但是里面的故事都是中国的人物和背景, 译者也很贴切地用了很多古汉语, 颇有以假乱真之效. 这本里面除了山月记这个进了日本学生教材的篇章外, 其余几篇也都还不错. 比如篇幅最长的故事是讲子路的生平. 大概想要表达的是子路是一个很有勇力但是内心很纯良的人, 一生追随孔子, 孔子也很喜欢这个徒弟的率真. 最后子路在一个政变中舍生取义, 临死前还不忘把地上的冠帽端正地戴好. 另一个印象深刻的寓言是对纪昌学射的扩写, 本身写得四平八稳. 中岛敦在故事里面增加了一个小细节, 纪昌百步穿杨时拉弓的胳膊上放了一杯水, 箭无虚发的同时杯中水不动分毫. 我有点猜测要么这个故事和头文字D有着共同的来源, 要么头文字D里AE86车座上的那杯水来源于这儿的中岛敦(当然也还有可能是大家都是原创了, 但我希望不是). 山月记的故事写的是唐朝末年, 一个才华横溢但是自视过高的人追求诗作而荒废了自己的家庭职责, 而后陷入自卑怯懦, 乃至离群而去, 化身为虎, 为恶一方. 而后他少年时的朋友恰好路过, 在这个虎人尚有意识的时候和他攀谈了几句, 了解了来龙去脉. 一辈一辈的日本学生都是读着这篇长大的. 这篇有一定的现实意义, 因为成篇大概是二战期间, 里面化身为虎的事例对军国主义的遗毒的清理多少有一些积极作用. 整本书回头看, 让我想起了鲁迅的故事新编, 并没有什么真正地过人之处, 只是对古早故事的一个扩写和衍发而已. 另外, 有些句子, 也是让人很有错位感, 比如下面这句

一日子路走在街上, 遇到三两旧日朋党. 他们虽说不上是无法无天, 也算是肆意放荡的侠义之辈.

这段就更像是一个日本人写出来的, 带着很重日本感的中国古代场景.

游戏的话, 主要在玩死亡细胞, 之前只是普通难度通关, 这次花时间刷刷刷后, 能够多次2BC通关了. 对于我而言, 这个游戏的优点是很上瘾, 但与此同时, 我也觉得游戏的深度不是特别够. 首先游戏的节奏感很好, 大部分关卡能够在大概十分钟内完结, 关卡中间会有一个休息室来放松. 游戏的机制也鼓励你在游戏过程中全神贯注来拿到无伤击杀的奖励. 然后是武器种类的多样化很厉害, 几十种武器, 各自有不同的手感, 触发暴击的方式也都不一样. 再接下来打击感做得像教科书, 声音动画的反馈都很到位. 主要让我不太满意的地方是武器词条里的随机性太大, 以至于很多时候我都不敢去洗词条. 再就是, 武器种类太多, 很多时候缺乏对玩家的引导, 比如我上手了某个装备试了试觉得手感不对可能就放弃了, 但是也许真的只是我不会玩而已. 比如回旋镖, 我的期待是丢出去打人, 试了第一关觉得手感不佳就没特别关注了, 偶尔拿到一个传奇级的回旋镖再逼着自己使用的时候才发现, 这个回旋镖打到怪物的时候会有一个计数器, 计数器结束之前, 如果怪物没死, 回旋镖会反复攻击同一个怪物. 这对于打boss就太友好了.

电影来说, 这个月重看了三个白痴和失恋三十三天, 现在回头才发现都是三.

顺便的, 也算是玩吧, 试用了Siri AI. 我的感觉仍然是很人工智障:

  • 第一次让它打开音乐开始播放, 很正确地打开Apple Music了, 没有播放我常播放的音乐, 这不算大问题. 我让它开始播放Hollow Knight, 结果也开始播放了, 好评. 然而, 这货是没有记忆的吗? 我第二天让它去播放Hollow Knight的音乐(没提示Apple Music), 结果它去尝试Youtube了, 并告诉我没有Youtube订阅, 因此无法继续.
  • Siri可以很放心地给我创建reminder, 我有点飘地让它给我创建多个reminder. 为此, 我一开始就说我有多个reminder需要创建, 说完第一个reminder, 我在说第二个reminder的时候发现Siri AI大人已经给我创建完毕并退出了! 我很愤怒地又一次唤醒Siri, 并让它给我创建两个reminder, 刚准备教育它让它后面注意, 结果它又退出了, 我这个PUA技能还没甩出去结果对方下线遁.

跑步记

我晚上一般都会在公寓的健身房里健走和跑步. 这一次, 得朋友推荐, 得知墨尔本每周六早上有例行的跑步活动. 我去了一次, 大概记录如下:

跑步的地方是在CBD北大概3公里的Princes Park, 从我的住处出发还需要换乘一次电车. 而实际上最大的挑战是周末电车的时间间隔太久了, 万一运气不好赶不上适当的电车, 会需要等好久. 于是, 早上七点半, 我手里拿着Snicker和一瓶水, 戴着hoodie的帽子, 看着一辆电车缓缓向我驶来的时候, 心里才放松了下来. 在电车上看了看whatsapp, 发现我认识的两个人今天都不会参加, 于是我跟自己说, 就自己跑跑吧.

到了公园, 发现那边已经聚集了大概一百个人. 大都是西人, 东亚面孔不多, 年龄大概是20-50间, 有带着teenager的, 还有牵着绳子带着狗的. 我到的时候已经是八点整了, 有穿着制服的志愿者开始拉好绳子, 组织起队伍. 我站到队伍后面, 等了一两分钟, 就开始跑起来了.

前面我跑得还是挺轻松的, 毕竟每天晚上在健身房也仍是在健走/跑步. 跑的时候都是用脚尖, 很享受跑步的感觉, 跑完了一公里之后感觉有一点点吃力了, 开始主动呼气, 并用脚后跟落地的跑法, 省力一些. 坚持到了大概1500米的时候, 感觉有点吃力了, 就改成步行, 休息了一两分钟后又开始跑. 不过这个时候开始有点下雨了, 于是我又戴上hoodie的帽子. 我没跑完全程的5千米, 只跑了大概2.5千米. 看着雨没有歇的意思, 我看着地图, 转了个弯, 去了电车站, 回家了.

2026 Australia-China Innovation Summit

受波色创投邀请, 这个月23号我请假一天参加了一个澳中创新峰会, 主要是关于AI的. 这个峰会是由澳大利亚维多利亚州政府和香港特别行政区政府联合举办, 而由波色创投承办的. 主要是为了促进两地在创新科技方面的交流与合作. 参会人员包括来自澳大利亚和香港的政府官员, 企业代表, 学术界人士以及创业者. 其中代表维州政府的是Steve Dimopoulos, 代表香港政府的是孙军(顺便说, 正好是今天date输出的一部分). 整个会议前面是访谈和各种发言, 中间有很多时间供大家social和networking, 认识了很多新朋友. 下午还有新startup的pitch, 全天收获不少.

主要的感想是企业界对AI的认识更多是一种实用主义的策略, 并没有去真正理解AI的工作原理, 而只是用宏观上的方法去评价一个AI是不是可靠. 这样的认识也许够用, 但是技术出身的我, 总觉得还没理解到数学那个层面就不能算.