普通视图

发现新文章,点击刷新页面。
昨天 — 2025年10月27日Limboy

记一次与 Coding Agent 合作实现 Feature 的过程

2025年10月27日 08:00

背景

在实现一个用 SwiftUI 构建的 iOS App 的过程中,我想让 Agent 帮我加一个 Feature:让 Calendar 可以滑动查看上一月/下一月。本以为是个简单的一个需求,过程的艰辛却远超我的预期。这也体现了纯 Vibe Coding 的一个局限:当 AI 撞墙时,即使指令给得再小、再清晰,它都很难独立完成任务。

Gallery image 1

第一次尝试

用的 Claude Code w/Sonnet-4.5,以为是个简单的需求,就给了一个最直接的 prompt:

Make the Boolean Type Calendar Scrollable. Scroll left/right to view previous/next month.

经过几次迭代后,这个 Calendar 可以滚动了,但很卡,于是我把这个信息告诉它,让它进行优化。

there's a scroll glith on boolean type calender view, when I scroll the calender past half, and release, it will lag twice, then slide to the end. think carefully to fix this bug.

又经过了几次迭代,它还是没能 fix 这个卡顿的问题,于是我重置了代码,进行了第二次尝试。

第二次尝试

对于同样的 Feature 不同的 Agent 可能会有不同的解法,所以这次切换到了 Codex w/gpt-5-codex,给了同样的 prompt,除了耗时更长外,结果并没有什么不同。此时我知道,这件事它可能不简单。

第三次尝试

这次只能亲自动手了,卡顿一般跟 re-render 有关,于是我查看代码,将 Calendar 对应的代码,简化成了 Color.random()(Color 本身并没有这个方法,所以加了一个 extension),发现在滑动时,Color 变了好几次,说明这些 View 被 SwiftUI 认为是不同的 View,所以重新创建了。得到这个信息后,让 Calude Code 再次进行优化:

the boolean calendar view is a bit lag while scrolling, it seems to be the view don't have a consistent id, so they re-render while page change. reduce the re-render by giving them appropreate ids.

有了这个信息后,Claude 再次进行优化,几次迭代后,优化完成,它非常自信的告诉我 re-render 的问题解决了,这次应该会非常丝滑。我结合 Self._printChanges(),发现确实重复生成/渲染的问题解决了,但,这个卡顿还在!

第四次尝试

这就很奇怪了,难道是这个用 SwiftUI 实现的 Calendar 有性能问题?为了验证这个想法,我让 CC 简化代码,用最简单的色块代替 Calendar,看看滚动起来是否顺畅。

now it works, but the lag persistent. can we first identify what's causing the lag, by simplify the scenario like use a random color, etc?

CC 听取了建议,把 Calendar 变成了纯色块,滑动是顺畅了,但有个问题,滑动过一半后,色块的颜色就变成了下一个 Calendar 的色块,我分析了下,应该是滑动过半后,page 自动变成了 next page,而这个色块会监听这个值的变化,于是也就变了。把这个信息给 CC 后,它很快就 fix 了。

- the prev/next button works perfect.
- but the scroll still has a problem, it seems to be caused by the page variable, once it pass half, the page change, and current scrolling item will be replace to that page.

给出的结果非常好,没有丝毫卡顿,极其丝滑。

第五次尝试

这么看来确实是 SwiftUI 实现的这个 Calendar 模块有问题,于是我想用 UIKit 重新实现一个,再嵌到 SwiftUI 里,看看是否能解决性能问题。

it seems the SwiftUI's Calendar is the root cause of glitch, maybe we can use UIKit to represent this calendar?

这个改动其实挺大的,所以 CC 也是尝试很多轮后,结合我的反馈,才终于基本可用了,中间还因为用满了 5 小时的 Token 限制,休息了一会。

yeah, its smooth, but after scroll end, the calendar doesn't refresh, all blank day, the title updated though.

---

the behavior is after scroll ended, it first display blank date, then immediately updated with some data, but it's not the final data, it will refresh quickly again to reveal the final data, so visually, like it blinks.

---

yes, it's better now, but the colored background only appear when scroll end, visually its not too good, can we pre fill the calendar?

---

the previous month's colored circles appear immediately, but the month before still blank and fulfilled after scroll end.

---

better, but ${currentMonth}-3 is still blank first when scrolled.

看起来确实丝滑了,实现方案是预加载 3 个 Calendar 的数据,当这 3 个 Calendar 滑动起来,这些蓝色块、红色块会被预先填上,但滑动到第 4 个 Calendar 时会出现先显示空 Calendar,然后再渲染色块的现象。

第六次尝试

CC 的这个策略看起来有点 rigid,能不能先预加载 3 Calendar,当滑动到倒数第二个预加载的 Calendar 时,再往前加载 3 Calendar?

can we make it simpler? because the scroll always from large month to small month (if scroll back to large month, it's already loaded), so why not just prefetch previous 3 months, if scroll to the prefetched month - 1, then start prefetch next 3 months?

很不幸,CC 在 Operate 的过程中触发了 Weekly Limit,好在还有 Codex,于是切换到 Codex,继续这个 CC 未完成的任务。

I'm in the middle of optimizing boolean type calendar scroll performance, I want the strategy be: first preload previous 3 months data, when user scroll to the second to last preloaded data's month, preload next 3 month. help me implement this strategy.

半小多时后,结果出来了,符合需求,但 Token 也用了近 20%(PS:这也是我打算退订 Codex 的一个原因:慢,有时 Token 消耗地还快)。

小结

这个看似简单的需求,如果过程中缺少人的协作,很难达到满意的效果。尽管 AI 在代码生成和辅助开发方面能力强大,但在面对复杂、深层或性能敏感的需求时,它仍然是一个强大的工具,而非完全独立的解决方案。它需要有人能够帮忙诊断问题、制定策略,并在必要时进行干预和引导。纯粹的 Vibe Coding 适用于简单、明确的需求,但对于有挑战的任务,人与 AI 的高效协作,即 “人机协作编程”,才是提升效率和解决问题的关键。

昨天以前Limboy

构建自己的反思系统

2025年10月17日 08:00

未经审视的人生是不值得过的。

我们都听过这句话,可能还会有小小的触动,但之后该刷手机还是刷手机,该工作还是工作。

但如果你真的把它当回事,这可能会是你为自己做的,回报率(ROI)最高的投资之一。

开会

把自己的人生旅程想象成一个项目,这个项目的合伙人,是你自己——-过去的你、现在的你,以及未来的你。

而反思,就是你们每周一次的董事会议。你们坐下来,诚实地对话,为了一个共同的目标:让这个项目变得更好。

这是你与未来自己的合作。你现在的每一个决定,都是在为未来的自己铺路,或者挖坑。

遗忘和混乱

如果不主动管理自己的生活会怎样?

帕金森定律说:工作会自动膨胀,直至填满所有可用时间。生命也是如此。琐事、噪音、他人的议程……如果你不主动捍卫自己的时间和精力,就会被它们吞噬殆尽。

遗忘和混乱是人生的默认设置。一个反思系统,就是对抗这种熵增的工具。

不要等到撞上南墙(比如经历人生重大变故),或者在泥潭里动弹不得时,才想起需要一张地图。这张地图,现在就可以开始画。

一个强迫你诚实的系统

一个好的反思系统,会强迫你梳理清楚,自己最关注的是什么。

当你必须写下来,那些模糊的想法就无处遁形,你无法再欺骗自己。

把它当作一个产品来对待。量化关键指标,将进度可视化,记录关键决策。不是为了给别人看,而是为了让你对自己一目了然。

系统会帮你找到自己行为中的 Bug,发现那些让你在错误道路上越走越远的模式。

它让你清晰地回答这两个问题:

  • 我是谁?
  • 我正在变成谁?

让它运转起来

最关键的不是某一次彻夜长谈式的深度反思,而是持续。

让反思成为生活的一部分。像刷牙一样自然,像吃饭一样必须。

不需要完美。只需要开始,然后坚持。

这套反思系统,不会给你人生的标准答案。

但它会确保,那个最重要的问题,始终被提出。


附录

以下是一些可以参考的每日/每周/每月反思问题。

每日反思

类别 问题
习惯 冥想
习惯 运动 (例如:30分钟,具体类型)
习惯 阅读 (例如:15分钟)
习惯 写日记/反思
习惯 饮水 (例如:8杯水)
习惯 屏幕时间 (例如:低于X小时)
习惯 没有吃垃圾食品
习惯 高质量睡眠 (例如:7-9小时)
效率与专注 我是否按照计划的日程行事?
效率与专注 我完成了多少个番茄工作法会话?
效率与专注 我今天是否容易分心?
成果和进步 今天我完成了哪些重要的任务或目标?
成果和进步 我今天有哪些小小的胜利?
学习与成长 我今天学到了什么新东西?
幸福感与情绪 今天我的整体情绪如何 (1-10分)?
幸福感与情绪 今天有哪些事情让我感到感恩?
幸福感与情绪 今天有哪些事情挑战了我的耐心或造成了压力?
反思与改进 今天我有哪些地方可以做得更好?
反思与改进 明天我将做一件什么不同的事情?
关键指标 睡眠时长 (小时)
关键指标 饮水量 (杯/升)
关键指标 深度工作时长 (小时)

每周反思

类别 问题
成果与进步 本周我最主要的3项成就是什么?
成果与进步 我是否在关键项目/目标上取得了进展?
成果与进步 我获得了哪些新技能或知识?
挑战与反思 本周我遇到了哪些主要的困难或挑战?
挑战与反思 什么事情让我感到最大的压力或沮丧?
挑战与反思 我从这些挑战中学到了什么教训?
习惯与日常 我坚持了哪些日常习惯?
习惯与日常 我哪些日常习惯做得不好?为什么?
习惯与日常 我目前的日常安排是否支持我的目标?
幸福感与平衡 本周我的精力水平如何 (1-10分)?
幸福感与平衡 我是否为休息、爱好和社交留出了时间?
幸福感与平衡 本周有哪些事情给我带来了快乐或让我感到充满活力?
计划与优先级 我是否有效地安排了任务和时间优先级?
计划与优先级 有哪些任务延续到下周了?为什么?
展望未来 下周我最重要的3项优先事项是什么?
展望未来 我将对我的计划或习惯做出哪些调整?
关键指标 平均每日睡眠时长 (小时)
关键指标 总运动时长 (小时)
关键指标 总深度工作时长 (小时)
关键指标 社交互动次数

每月反思

类别 问题
主要目标与进展 本月我的主要目标是什么?
主要目标与进展 我是否实现了它们?如果没有,为什么?
主要目标与进展 我在长期目标上取得了哪些重大进展?
学习与成长 本月我获得了哪些新技能、知识或见解?
学习与成长 我完成了哪些书籍、文章或课程?
挑战与挫折 我面临的最大障碍或失败是什么?
挑战与挫折 我是如何应对它们的?我学到了什么?
习惯与系统 哪些习惯变得更强或更稳定了?
习惯与系统 哪些习惯仍然需要更多关注或调整?
习惯与系统 我目前的系统 (例如:计划、组织) 有效吗?
人际关系与联系 本月我如何培养了重要的人际关系?
人际关系与联系 我是否结识了新朋友或加强了现有联系?
财务 (可选) 本月我的支出与预算相比如何?
财务 (可选) 我在财务目标上取得了进展吗?
幸福感与自我关怀 本月我的整体身心健康状况如何?
幸福感与自我关怀 我是否优先考虑了自我关怀和休息?
反思与感恩 本月我最引以为豪的事情是什么?
反思与感恩 本月我最感恩的事情是什么?
展望未来 下个月我最重要的3个目标是什么?
展望未来 我将实施哪些新习惯或系统?
展望未来 下个月我希望重点改进的一个领域是什么?
关键指标 平均生产力得分 (例如:1-10)
关键指标 总学习时长 (小时)
关键指标 新建立的联系数量

避风塘 V2

2025年9月24日 08:00

关于避风塘这个网站的由来,可以见我之前的一篇文章,主要是方便有发布日常/想法的诉求,又缺少合适载体的同学。这次升级让它变得更丰富了些。

添加了音乐模块

Gallery image 1
Gallery image 2

这些音乐列表跟这个博客用的是同一套,也是这么多年自己积累下来的歌单,所以非常个人。「钢琴」和「爵士」比较适合作为工作时的背景音乐。

添加了 YouTube 模块

Gallery image 1
Gallery image 2

这些 YouTube 的 Channels 和 Playlists 也是自己平时收集的,时不时会看看,也一并放出来了。

添加了通知模块

Gallery image 1

这样当别人对帖子点赞或评论时就不会错过了。

支持导出自己的帖子

登入账号后,浏览自己的页面,会看到一个「导出帖子」的按钮,点击之后,所有的帖子会被整理到一个 markdown 文件里,

# limboy 的帖子导出

导出时间:2025-09-24T13:35:46.696Z

共 114 条

## 2025-09-24 12:47

看了黑灯的脱口秀专场(录像),确实很不错。

---

## 2025-09-17 04:53

终于把 Shogun[1] 看完了,之前看过小说,非常精彩。剧版刚出来时,看过两集,品质过硬,但因为没出完,加上忙别的事,就耽搁了。

演员几乎完全符合我看完小说后觉得的每个人应有的样子,尤其是虎永和鞠子,无论是形象还是表演,都堪称完美。

就不剧透了,imdb 上的一位用户的评论我觉得很合适:

> No spoilers from me because to watch it unfold is such a delight, it would be rude to steal that pleasure.

[1]: https://www.imdb.com/title/tt2788316/

---

## 2025-09-13 15:08

摸索出了一个「睡不着觉,是否该起床」的判断方法:完成 100 个呼吸。也就是数自己的呼吸,从 1 数到 100。如果数完了,就起床;没数完,要么睡着了,要么就是走神了,从头再来。

...
❌
❌