普通视图

发现新文章,点击刷新页面。
昨天以前OneV's Den

用好你的 jj - 重新思考 Agent 时代的版本控制

2026年3月16日 22:30
过去大半年我一直在高强度地用 AI agent 写代码,用着用着发现一个问题:“怎么组织 agent 吐出来的东西”这件事,比我原来想的重要太多了。 这话听着可能有点奇怪。大家关心的一般都是模型能力、prompt 怎么写、上下文够不够长……但真的和 agent 密集配合过一阵子之后,你会发现有个更底层的东西一直在拖后腿:版本控制。说得再具体一点,就是你拿什么样的心智模型来管理本地的代码变更。 我现在的结论是:Git 作为远端协作和代码托管的标准还是没什么好说的,但在本地工作流这头,jj (Jujutsu) 明显更适合现在这种人和 agent 来回切着干活的开发方式。这篇文章就是来安利这个的。 Git 在 Agent 时代的摩擦 Git 是个伟大的工具,这一点没啥好争的。但它的很多设计假设,是建立在二十年前”人类手工编程”的时代背景上——一个人坐在编辑器前面,想清楚要改什么,改完检查一遍,然后 add、commit、push。这套流程是给人类的线性思维量身做的:staging area 给你一个”最后再看一眼”的机会,branch 帮你隔离不同的工作流,stash 让你...

十倍性能优化!一次终端语法高亮库的 AI 折腾与收获

2026年1月4日 15:39
我最近写了一个小框架 Chroma,用 Swift 在终端里做代码高亮;顺手还以它为基底做了一个(实验性的)cat 替代品 ca,能以带高亮的方式在终端里显示代码文本内容 (几乎和 bat 一样,只是又一个“I can, why not”的项目)。这篇文章想做三件事:先简单宣传一下(真的很短),然后重点聊聊这次实践中的主要收获:在 AI 驱动的迭代方式下,把性能优化这件事做“到底”变得前所未有地容易;最后再补一些在做 ca 期间学到的命令行设计和主题生态方面的东西。 Chroma / ca:一个很小的 promotion Chroma 的目标非常朴素:给它一段代码和一个语言标识,它就返回一段可以直接 print 的 ANSI 彩色字符串。 语法高亮这种东西其实早就被写烂了:Rust 有 syntect,Python 有 Pygments,前端世界里更是 highlight.js 一类的工具满天飞。但我在 Swift 生态里一直没找到一个足够顺手、又能对终端输出细节(diff / 行号 / 行背景 / 缩进)有足够掌控力的选择,于是干脆自己(准确地说:靠 AI)糊了一个。...

2025 年终总结

2025年12月15日 09:20
提笔写下这篇总结的时候,窗外的银杏叶已经落得差不多了,天气也倏忽之间就冷了下来。东京的秋天走得安静,只留下满地金黄,但冬天却来得急躁,提醒人们时间确实在向前流动。 按照往年的惯例,我大概会用“懒癌发作”或者“没什么进取心”作为开场白:一方面习惯性自嘲,另一方面也给自己留点退路,装作好像只要态度足够散淡,变化就追不上来的样子。但回望 2025 年,我发现这些词突然变得不太合适了。并不是我变得勤奋了,而是这个世界的变化速度,已经快到了即使你选择“躺平”,也能清楚地感觉到身下的地板在带着你呼呼向前移动。 如果说前几年我们还在讨论 AI 能不能做事、会不会做事,那么到了 2025 年,这个问题几乎已经失去了继续讨论的意义。我们不再站在岸边观察潮水,而是已经身处浪潮之中。无论情愿与否,这一年,几乎没有人还能置身事外,所有人都成为了这场巨变的直接参与者。 今年的总结,我想试着从几个贯穿全年的主题出发,聊聊在这个智能骤然丰裕的时代拐点上,我的一些观察、困惑、犹豫,以及尚未成型的浅薄思考。 智能膨胀与元学习 两个娃一天天长大,也都进入了小学,姐姐更是为了准备初中考试开始了补习班生涯。她...

Magpie 和 「AI 贼船」- 再谈 vibe coding,当代码变得廉价时...

2025年10月13日 23:10
最近科技界一扫前些年死气沉沉的阴霾,各种新东西乘着 AI 的东风纷至沓来。我自己分享欲也有点爆表,所以闲暇时 vibe coding 了两个小项目,想要尝试拓展一下自己表达的边界和形式。这篇文章先简单介绍一下两个项目,然后谈谈(作为一个“资深”程序员)在开发过程中的一些体会和感受。 项目简介 Magpie 首先是驱动我个人链接收藏页面的 Magpie (喜鹊,没错我就是很喜欢用鸟来给项目命名的人),它是一个轻量级的链接收藏,后端接入 AI 模型,可以从链接 URL 中获取内容,自动提取标签以及合适的分类,甚至按需求写一些短评。你可以把它想成上个世代的各种 Read it later 服务的 AI 加强版,并且配套的管理后台、快捷指令和 Chrome 插件也都齐备了。 AI 贼船 其次是一个更简单一些的静态页面「上了AI的贼船」。我会不定期在这个页面分享我在使用 AI 工具进行日常开发,生活和娱乐等方面的心得以及实际的使用案例。在 build 时,我使用中文书写的内容会通过 LLM 自动翻译成其他支持的语言;当然,深浅颜色切换,feed 订阅这些基本要素也都完备。 ...

一个半月高强度 Claude Code 使用后感受

2025年8月3日 17:00
六月中旬某个闷热的夜晚,在初浅尝试使用 API Key 帮我迅速完成了一个任务后,我毫不犹豫地点下了 Claude Max 的订阅按钮。作为一个“买断制”时代的遗老,每月一两百美金的订阅对当时的我来说还是太超前了。但是在一个半月之后回头望去,看着那些按照 API 计价的被我烧掉的价值 3000 多美金的 token,我似乎捡到了一个超大便宜?不过最近 Anthropic 宣布了新的 weekly 限制,想来大概针对的就是我这种“重度”用户吧。所以近几天来我也在研究有没有其他替代方案,可以让我从这种限制中解脱出来。不过尝试了一圈下来(包括 CC 接其他 API,也包括像 Codex/Gemini/Qwen/Crush/Amp/AugmentCode 等等),似乎一时半会儿在这个领域 Claude Code (后文用 CC 指代) 还是没有竞争对手。既然还得续费,那不如阶段性地做一个总结,来记录下这一个半月使用 CC 的一些感受吧。 Vibe Coding 的迭代速度 说到 vibe coding,最让我震撼的其实不是模型有多智能或者是能完成什么尖端任务,而是由它带来的产品迭...

Foundation Models:苹果设备端模型的边界探索

2025年6月17日 20:00
WWDC 2025 上,苹果公布了设备端的 Foundation Models 框架,可以让开发者们使用离线模型完成一些基本的 AI 任务。虽然各个 session 已经详细介绍了基本用法,但作为开发者,我们更关心的往往是:这个框架的边界在哪里?什么情况下会出现问题?实际性能如何? 经过近一周的测试和探索,我有了一些有趣的发现。这些发现可能对你在实际项目中使用 Foundation Models 有所帮助。 重要提醒:本文所有结论基于 macOS/iOS/Xcode 26 Beta 1,实际发布版本可能会有变化。苹果在 lab 中也明确表示,模型会随着 iOS 版本更新而持续改进。 结论先行 Foundation Models 已经可以用于生产环境了吗? 我的答案是比较乐观:虽然还是 beta 1,但框架的稳定性出人意料地好。Apple 一改往年 beta 约等于 alpha 的特性,这次端出了大体能用的东西,让人喜出望外。不过,你还是需要了解它的边界和限制。 核心发现汇总: 内存消耗:总运行时内存约 1.0-1.5GB(模型权重 750MB + KV c...

MCP 是什么,现状和未来

2025年2月23日 11:20
MCP (Model Context Protocol,模型上下文协议) 是由 Anthropic 在 2024 年底推出的一种开放协议,它通过提供一种标准化的接口,旨在通过标准化的接口实现大语言模型 (LLM) 与外部数据源及工具的无缝集成。 最初推出时,仅有 Claude 的桌面应用支持,市场反响平平,且不乏质疑之声。但近期,随着诸多 AI 编辑器 (如 Cursor、Windsurf,甚至 Cline 等插件) 纷纷加入对 MCP 的支持,其热度逐渐攀升,已然展现出成为事实标准的潜力。本文将帮助你快速了解 MCP 是什么、它的功能,以及笔者对未来的预测与展望。 三分钟看懂 MCP LLM 的模型参数蕴含丰富的通用知识,但通常无法掌握以下两类信息: LLM 无法访问你的专属内容,例如文件系统中的文件、数据库里的订单,或私有 wiki 和笔记中的文本。 若无法联网,LLM 也无法获取实时信息,例如当前股价、最新财报、明日天气预报或前沿科技新闻。 此外,LLM 的核心功能是生成 token 和提供答案,因此它无法直接执行一些精细且需操作的具体任务,这也不是当...

编译器,靠你了!使用类型改善状态设计

2024年11月11日 20:00
在程序的开发和运行过程中,人往往是最不可靠的环节:一个不小心,逻辑错误(也就是 bug!)可能会悄然保留下来并进入最终的产品。与此相对,编译器要可靠得多。如果程序中存在错误,编译器通常会直接阻止生成产品。Swift 拥有非常强大的类型系统,通过它,我们可以尝试将一些运行时的逻辑“封装”到类型系统中,从而在编译期提前发现潜在的问题和错误。这种依靠类型系统来“保存”逻辑的设计方式可以称为类型状态。 一个简单例子:端到端加密 定义和使用 这个例子源自实际工作的需求。假设我们需要设计一个客户端之间的消息系统,并支持端到端加密:也就是说,这些消息可能包含用户的隐私敏感内容。在用户设备上,这些消息可以以明文形式显示,但一旦需要离开用户设备、发送到服务端(并进一步传递到另一个目标客户端),则必须加密。如果错误地将未加密的信息发送出去,可能会带来安全隐患,甚至损害用户的信任。 一个“简洁”的设计思路是设计一个带有状态的 Message,它包含文本并用一个状态来表示是否已加密: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 struct Message { e...

深入理解 Observation - 原理,back porting 和性能

2023年8月7日 08:15
SwiftUI 遵循 Single Source of Truth 的原则,只有修改 View 所订阅的状态,才能改变 view tree 并触发对 body 的重新求值,进而刷新 UI。最初发布时,SwiftUI 提供了 @State、@ObservedObject 和 @EnvironmentObject 等属性包装器进行状态管理。在 iOS 14 中,Apple 添加了 @StateObject,它补全了 View 中持有引用类型实例的情况,使得 SwiftUI 的状态管理更加完善。 在订阅引用类型时,ObservableObject 扮演着 Model 类型的角色,但它存在一个严重的问题,即无法提供属性粒度的订阅。在 SwiftUI 的 View 中,对 ObservableObject 的订阅是基于整个实例的。只要 ObservableObject 上的任何一个 @Published 属性发生改变,都会触发整个实例的 objectWillChange 发布者发出变化,进而导致所有订阅了这个对象的 View 进行重新求值。在复杂的 SwiftUI 应用中,这可能会导致严...
❌
❌