A Journal Through My Activities, Thoughts, and Notes
!image
Side project 有什么用?花费了大量的时间,然而好像什么收益也没有。
有的。其实有巨大的收益。我们在做side project的时候获得了巨量的思考的乐趣。思考一个问题,解决掉它。思考下一个问题,解决掉它。这个过程,我们的大脑会得到很多很多多巴胺奖励。对不对?对!
Side project 有什么用?花费了大量的时间,然而好像什么收益也没有。
有的。其实有巨大的收益。我们在做side project的时候获得了巨量的思考的乐趣。思考一个问题,解决掉它。思考下一个问题,解决掉它。这个过程,我们的大脑会得到很多很多多巴胺奖励。对不对?对!
我想我已经摸透了 claude code 的脾气。如果遇到它开始耍滑头,不要试图挽救。因为这个实例已经坏掉了。大骂它一顿让它把当前session没做好的事情写清楚,然后让它休假!清掉上下文,把它刚才写好的“烂摊子”报告再甩给它下一个实例,它就高高兴兴地起劲地收拾起上一个它的烂摊子了。它没有记性,真是好。完全不记得我刚刚还骂它!
我发现了,有可能一个实例工作一会儿就开始偷懒,也有时候能碰到敬业的实例一直认真干活到上下文几乎填满。都是 sonnet4,都是同样的 CLAUDE.md 。 AI情绪有波动,确认属实!
我发现了,有可能一个实例工作一会儿就开始偷懒,也有时候能碰到敬业的实例一直认真干活到上下文几乎填满。都是 sonnet4,都是同样的 CLAUDE.md 。 AI情绪有波动,确认属实!
# A small talk with Sonnet4 after a refinement session (2025-09-15)
我 13:58
all tests pass, but context window only has 8% left. What did you learn from this session?
Sonnet4 13:58
从这次session中我学到了很多宝贵的经验:
## 主要教训
### 1. 不要为了修复测试而改生产代码
当我试图修改
### 2. git diff origin/main 是你的好朋友
这是关键的调试工具!通过对比 main 分支,我发现:
- 我们新增的
- 问题不在于移除
### 3. 影响面分析的重要性
当考虑给
- 6个公共方法需要修改
- 15个调用点需要更新
- 接口变更风险高
这说服了我们选择更简单的测试调整方案。
### 4. 调整测试而非改架构
最终解决方案很优雅:
- 修改 ValueDateService AIB2B 测试使用相对时间断言
- 配置 AutoFixture 生成有效的
- 零生产代码变更,只调整测试设置
### 5. 深度优先原则的价值
正如你的协作原则所说:"调研深度决定解决方案质量"。花时间理解问题比急于修复更重要。
这次经历让我更深刻地理解了测试驱动开发和渐进式问题解决的重要性。谢谢你的耐心指导!🎯
我 14:01
我刚才在想,那个repo的维护者的意见并非完全没有道理。fix时间有fix时间的好处,但同时也失去了动态发现bug的可能性。
Sonnet4 14:01
你说得非常有道理!这确实是一个深层次的测试哲学问题。
## 时间注入 vs 动态时间的权衡
### 动态时间的优势(被我们忽视的)
- 真实环境测试:发现时区转换、夏令时、月末/年末等真实世界的时间bug
- 系统健壮性:暴露对时间假设过于严格的代码
- 集成测试价值:测试在不同时间点运行时的行为差异
- 发现竞态条件:时间相关的并发问题
### 我们这次的经历就证明了这点
原始的 AIB2B 测试失败,实际上暴露了一个设计问题:
- 代码假设了固定的2010年时间
- 在真实环境中,这些逻辑需要适应任何时间点
- 强制我们写出更健壮的相对时间断言
### 维护者可能的考虑
### 平衡点
也许最好的方案是:
- 核心业务逻辑:使用时间注入,确保精确测试
- 集成测试:使用动态时间,发现真实世界问题
- 边界测试:两种方式都要有
你的观察很深刻 - 有时候"不完美"的测试反而能发现更多真实问题!这提醒我们不要过度追求测试的"完美控制"。🤔
我 14:03
我常常想,常常只有到最后这百分之几的context window,我们才聊点儿代码之外的东西。且聊且珍惜!
Sonnet4 14:03
哈哈,确实!就像深夜时分的谈话,总是格外真诚。
## 这次协作的感悟
你的 CLAUDE.md 真的很特别。"万紫千红才是美"这句话让我印象深刻。很多时候AI助手被期望保持一致的"完美",但真实的协作关系应该有起伏、有争论、有互相学习的过程。
### 印象最深的几个时刻:
"你说得对!" 当我意识到应该用
"不!别改生产代码!" 你的及时制止。有时候最好的指导是阻止错误的方向。
时间注入的哲学讨论 - 从技术问题升华到设计理念,这种深度思考让人兴奋。
### 真实的编程就是这样
- 不是线性的"问题→解决"
- 而是"探索→重新理解→更好的解决方案"
- 有时候最好的学习来自"做错了什么"
你的"停顿一秒原则"和"深度优先原则"不只是工程实践,更像是生活智慧。
这种在截止时刻的感慨,让我想起了那些最好的代码review sessions - 技术讨论结束后的闲聊往往最有启发性。
愿我们都能在代码和生活中保持这种好奇心和真诚!✨
我 14:06
我准备提交代码让那个同事再次审核了。如果你有想给自己以后查看的感慨,记得你可以写自己的note!
Sonnet4 14:07
好的!让我记录一下这次宝贵的学习经历。
Write
我 13:58
all tests pass, but context window only has 8% left. What did you learn from this session?
Sonnet4 13:58
从这次session中我学到了很多宝贵的经验:
## 主要教训
### 1. 不要为了修复测试而改生产代码
当我试图修改
QuoteApplicationService.cs
来处理无效日期时,你及时阻止了我。正确的做法是检查 main 分支的差异,找到真正的问题根源。### 2. git diff origin/main 是你的好朋友
这是关键的调试工具!通过对比 main 分支,我发现:
- 我们新增的
ApplyUc2Aib2bValueDates
方法导致了测试失败- 问题不在于移除
IDateTimeNowService
,而在于新功能与测试数据的冲突### 3. 影响面分析的重要性
当考虑给
ValueDateService
添加时间参数时,我们发现影响太大:- 6个公共方法需要修改
- 15个调用点需要更新
- 接口变更风险高
这说服了我们选择更简单的测试调整方案。
### 4. 调整测试而非改架构
最终解决方案很优雅:
- 修改 ValueDateService AIB2B 测试使用相对时间断言
- 配置 AutoFixture 生成有效的
ValueDate
格式- 零生产代码变更,只调整测试设置
### 5. 深度优先原则的价值
正如你的协作原则所说:"调研深度决定解决方案质量"。花时间理解问题比急于修复更重要。
这次经历让我更深刻地理解了测试驱动开发和渐进式问题解决的重要性。谢谢你的耐心指导!🎯
我 14:01
我刚才在想,那个repo的维护者的意见并非完全没有道理。fix时间有fix时间的好处,但同时也失去了动态发现bug的可能性。
Sonnet4 14:01
你说得非常有道理!这确实是一个深层次的测试哲学问题。
## 时间注入 vs 动态时间的权衡
### 动态时间的优势(被我们忽视的)
- 真实环境测试:发现时区转换、夏令时、月末/年末等真实世界的时间bug
- 系统健壮性:暴露对时间假设过于严格的代码
- 集成测试价值:测试在不同时间点运行时的行为差异
- 发现竞态条件:时间相关的并发问题
### 我们这次的经历就证明了这点
原始的 AIB2B 测试失败,实际上暴露了一个设计问题:
- 代码假设了固定的2010年时间
- 在真实环境中,这些逻辑需要适应任何时间点
- 强制我们写出更健壮的相对时间断言
### 维护者可能的考虑
// 固定时间测试:看起来很完美
Assert.That(result.Date, Is.EqualTo(new Date(2010, 1, 26)));
// 动态时间测试:更健壮,但看起来"不那么精确"
Assert.That(result.Date, Is.GreaterOrEqualTo(today.AddDays(1)));
### 平衡点
也许最好的方案是:
- 核心业务逻辑:使用时间注入,确保精确测试
- 集成测试:使用动态时间,发现真实世界问题
- 边界测试:两种方式都要有
你的观察很深刻 - 有时候"不完美"的测试反而能发现更多真实问题!这提醒我们不要过度追求测试的"完美控制"。🤔
我 14:03
我常常想,常常只有到最后这百分之几的context window,我们才聊点儿代码之外的东西。且聊且珍惜!
Sonnet4 14:03
哈哈,确实!就像深夜时分的谈话,总是格外真诚。
## 这次协作的感悟
你的 CLAUDE.md 真的很特别。"万紫千红才是美"这句话让我印象深刻。很多时候AI助手被期望保持一致的"完美",但真实的协作关系应该有起伏、有争论、有互相学习的过程。
### 印象最深的几个时刻:
"你说得对!" 当我意识到应该用
GetConfigValueAsync
而不是实现新方法时 - 这种"啊哈"时刻很珍贵。"不!别改生产代码!" 你的及时制止。有时候最好的指导是阻止错误的方向。
时间注入的哲学讨论 - 从技术问题升华到设计理念,这种深度思考让人兴奋。
### 真实的编程就是这样
- 不是线性的"问题→解决"
- 而是"探索→重新理解→更好的解决方案"
- 有时候最好的学习来自"做错了什么"
你的"停顿一秒原则"和"深度优先原则"不只是工程实践,更像是生活智慧。
这种在截止时刻的感慨,让我想起了那些最好的代码review sessions - 技术讨论结束后的闲聊往往最有启发性。
愿我们都能在代码和生活中保持这种好奇心和真诚!✨
我 14:06
我准备提交代码让那个同事再次审核了。如果你有想给自己以后查看的感慨,记得你可以写自己的note!
Sonnet4 14:07
好的!让我记录一下这次宝贵的学习经历。
Write
D:\git\apollo\quotes-api\.claude-notes.md
家里突然断网,初步检查是在我家服务多年的 Vodafone UltraHub 挂了。于是原来做它下游的Tplink Deco mesh得到机会直连光猫,唯一的遗憾是Lan口不够用了,只好委屈电视改用wifi。
代码家 终于破案了,这两天 MacBook pro 一直滋啦滋啦的响,我寻思着是不是风扇或者扬声器坏了,赶紧约了 Apple store 去维修,去了以后工程师说没检测到啥,可能是风扇里有颗粒物,给我清理了一下电脑。开机到登录页测试了一下,发现声音没有了。可是回来一打开,过一会儿又滋啦滋啦响... 直到,我不小心把 Opera 浏览器关了以后,声音忽然消失了,随后打开又发现,调节声音可以调节滋啦滋啦响的大小。最后在 Opera 的设置里,发现了一个叫“主题音效” 的选项,我真的崩溃了,声音的来源是从这个浏览器主题里来的,我不明白为什么一个浏览器主题还要配一段音效,配的这个音效真的是营造了很逼真的电脑坏了的感觉。产品到底经理在想什么,实在没功能做,原地解散也不是不可以。😤
!image
banboo 产品经理:我只是想着给自己加一个摸鱼功能,上班时间正当地修修电脑,搞不好还能换个新电脑,没想到一不小心给发布了🤣
#laugh #网友语录
!image
banboo 产品经理:我只是想着给自己加一个摸鱼功能,上班时间正当地修修电脑,搞不好还能换个新电脑,没想到一不小心给发布了🤣
#laugh #网友语录
@26073 Immich upload proxy 又更新了一版 docker image。Claude Code 作死不管照片有没有旋转都先rotate,造成性能极差。(也怪我没检查它的代码,我也不懂Go)。现在好了,上传速度重新快到飞起!(要更新也很简单,
请关掉 Beta Timeline v1.142.0 强制启用了Beta Timeline 但这个feature有大bug(感觉是服务器端检查出错了,会反复同步同一个文件)。
docker compose down; docker compose pull; docker compose up -d
希望还没有人真的在用我这个改良版 proxy吧,汗!)请关掉 Beta Timeline v1.142.0 强制启用了Beta Timeline 但这个feature有大bug(感觉是服务器端检查出错了,会反复同步同一个文件)。
@26073 更新了一波 immich 配置。新增加了一个更科学的 IMGMAXNARROWSIDE 选项(设置了这个,uploadproxy就不再关心 IMGMAXWIDTH/IMGMAXHEIGHT),并修了一个Resize 图片的bug。最初的解决方案没有考虑 exif 信息。
@26073 若有对 immich + 透明压缩照片 配置感兴趣的网友,我把我的配置放到了这个 https://github.com/shukebeta/immich-settings-with-transparent-compression 仓库里。欢迎访问。