从一个状态栏到一套框架:AI 如何改变了软件的写法
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 随着 LLM 编码能力的飞速提升,结合我近期的观察,技术圈似乎正在向同一个方向演进:利用 AI 构建高度客制化的个人软件。 这一趋势的背后有两个主要推手。首先,不少开源项目在大量接收 AI 生成的 PR 后,代码质量出现了肉眼可见的下滑——与其在泥沙俱下的代码海里做 Code Review,不如自己来。其次,大家逐渐意识到,与其苦等上游更新,自己 Fork 甚至从零重写来得更快,而且更贴合自己的实际需求。多年前人人皆可写软件的设想,似乎正以一种始料未及的方式悄然成真。 这也引发了我的深思:在 AI 时代,什么样的软件形态才是真正的未来? 从一个状态栏插件说起 最近因为订阅额度紧俏,我开始尝试在 pi 中使用 deepseek 作为一些简单的任务的替代品来节约 token 的使用,之所以使用 pi 而不是直接在 codex 或是 claudecode 里接入 deepseek 的原因有两点: codex 和 claudecode...
谈谈Codex的一些坑
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 最近高强度使用 Codex 桌面 app 进行开发(因为这真的很方便),你可以在一台电脑/手机上同时和多台电脑上的 agent 进行沟通,当然了,我也安装了一些插件,比如 github 插件,这就遇到了第一个坑:openai 提供的插件中会覆盖我们的一些项目配置,这在 agent 看来似乎优先级较高,比如我们要求在 PR 中按照我们给定的格式,并且按照中文,但是如果你开启了 github plugin 中的 yeet skill,agent 就会去读取其中定义的一些模式,从而违背项目的规则,这就很蛋疼。
github 图床迁移记录
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 最近写博客的时候大量上传了很多图片到我的 github 图床里,这种打擦边球的行为实际上是违反了 github 用户条例的,再加上今年 github 的基础设施状态疑似不是很好,以及前阵子我的小号有被封号的惨痛经历,这让我开始下定决心要转移我的图床。 既然决定要换,那就先来调研一下目前市面上有哪些可选方案。 方案调研 付费方案 对象存储 各家云厂商的付费方案大同小异,核心都是将资源托管在对象存储(如 OSS / S3)中,再通过 URL 进行外链访问。好处是你可以再接一个 CDN 资源给国内访问做加速,这样国内也能正常加载。坏处也比较明显: 要钱 不续费也不备份的话,图片就会消失,而且存储下线后,图片的映射关系就丢了 如果需要自定义访问域名则需要备案 这个问题倒还行,因为我之前因为折腾 cardconjurer 这个项目,已经完整地走过一遍阿里云 OSS 的方案流程了 ...
聊聊我的 VibeCoding 环境配置记录
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 正如之前所提,我为适配 ClaudeCode 专门配置了一套沙盒体系。最近,我打算借此机会系统地梳理一下这套环境目前的搭建现状与进展。 如果从一个完整的视角来看,这套体系其实应该分为沙盒、宿主机以及本地机器。 宿主机 我的宿主机是一台 MacOS 设备。也正是如此,其实不太需要过分担心最近 Linux 内核连发的那些 CVE 漏洞,因此直接选用 Docker 作为沙盒方案。 在宿主机层面,主要做了两项核心配置:网络代理与目录挂载。 代理网络分流 为了更好地适配 Claude Code 的请求,我对网络进行了针对性的分流处理,具体策略如下: 常规分流:根据预设规则,对常见域名进行基础分流。 定向代理:将 Anthropic 相关域名精准路由至固定节点,保证 API 连通性。 沙盒兜底:针对沙盒所在的 IP 网段设置特殊规则作为兜底,将其流量同样指向特定的节点。 目录挂载 起初,为了让沙盒重启后状态不丢失,我直接把整个 Home...
我的 Github 凭证怎么总失效?原来是 VSCode 搞的鬼
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文。 写在前面 最近在折腾容器内开发,工作流很简单:容器先在外部跑起来,我再用 VS Code 的 Dev Containers: Attach to Running Container... 直接连进去。 结果踩了一个极度别扭的坑: git pull、git ls-remote 看起来都正常 但一到 git push 就开始报认证错误 更气人的是,我明明前面已经把仓库切成了 PAT,过一阵子又像是“被切回去了” 一开始我也以为是最常见的那几类问题: PAT 过期了 GitHub 权限不对 容器环境重启后没把凭证保存住 但顺着日志往下挖,最后发现这次还真不是 PAT 本身的问题,而是 VS Code Remote / Dev Containers 自动注入的 git credential helper 在接管认证链路。 这篇文章完整记录了整个排查过程和最终结论,希望能帮大家少在这类“明明配过,结果又像没配”的灵异问题上浪费时间。 ...
血泪教训:Agent 提 PR 太快把号干封了,聊聊我的 MCP + 沙盒防封折腾记录
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文。 写在前面 作为一个折腾爱好者,最近在弄让 AI Agent 自动跑项目、提 PR 的工作流。结果一开始没做频率限制,专门给 Agent 用的 GitHub 小号用裸的 gh CLI 短时间内狂刷 PR 和评论,直接被 GitHub 的防滥用风控当场封禁(Suspended)。 痛定思痛后,我决定引入 MCP(Model Context Protocol)来接管 GitHub 操作,因为官方 MCP 自带了完备的限流和退避机制。但同时,为了让 Agent 还能正常执行 git push,我依然在容器的环境变量里留了一个 PAT(Personal Access Token)。 结果在观察日志时,我发现了一个更危险的现象:大模型一旦发现 MCP 工具调用失败或者图省事,它就会直接去翻环境变量里的 PAT,然后自己手搓 curl 脚本去直连 GitHub API!而且它的脚本一旦报错,它为了修 Bug...
代码里没写下来的那条规矩:AI 时代被放大的老 bug
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 本文部分内容采用 AI 辅助生成,核心素材与推演逻辑均提炼自排查该 Bug 时的真实 Session 对话文本。 越读越烂,返工一下 —— 2026.4.20 一个矛盾的回复 事情的起因源于 cc-connect 的一个 bug:同一分钟内,Telegram 群收到两条互相矛盾的回复 一条说"会话已结束" 另一条说“前一条请求仍在处理”。 显然这是矛盾的。 我很快梳理出了问题的链路,并提交了响应的 PR。 问题排查 第一层,agent 进程没死透。 agent/claudecode/session.go 的 readLoop 用 bufio.Scanner 读 stdout。Claude CLI 退出时,若有子孙进程继承了 stdout fd,管道不会 EOF,scanner 就一直阻塞。cs.ctx.Done() 触发时,defer 里虽然会关 channel,但那一路逻辑分支没有关 stdout,于是 readLoop...
论文阅读:The Google File System
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 GFS 是什么 GFS 是 Google 为了应对海量数据增长,通过分布式软件架构抵消廉价硬件的不可靠性,并针对其特定业务(大文件追加、流式读取)量身定制的高扩展存储系统。 预设的情景提到 Google 的大多数场景都是顺序读,这是什么场景? Google 早期的大量任务(如构建搜索索引、数据分析)主要依赖 MapReduce 等分布式处理框架,这些程序通常会扫描整个数据集。它们从文件的开头开始,一直读到结尾,将数据分块处理 架构 GFS 的架构如下图所示 一个 Master 节点 元数据全部在内存中进行处理,但会以追加 LOG 的形式持久化到磁盘 块位置通过查询得到,无需存储 控制流和数据流分离避免主节点成为瓶颈 若干个 ChunkServer (默认三副本不同机架) Q:为什么往磁盘中写 LOG,而不是用数据库的形式管理 LOG 呢? A:磁盘可以对大量 LOG 直接进行一次性的追加写,这样只需要等磁盘旋转一次,但是数据库是 B...
论文阅读:MapReduce
MapReduce 的目的 当时互联网刚刚兴起,需要一套系统来处理海量的数据计算问题,同时要做到简单易用,且有足够的容灾能力 创新点 提出了一种新的编程范式,使用 map 将大规模问题转换为子问题,然后用 reduce 将子问题的解汇总,将所有任务抽象为了这两个动作。 map 和 reduce 操作可以用下式概括: map(k1,v1) → list(k2,v2)reduce(k2,list(v2)) → list(v2)\begin{aligned} \text{map} &\quad (k_1, v_1) &\;\rightarrow\; \text{list}(k_2, v_2) \\ \text{reduce} &\quad (k_2, \text{list}(v_2)) &\;\rightarrow\; \text{list}(v_2) \end{aligned} mapreduce(k1,v1)(k2,list(v2))→list(k2,v2)→list(v2) map...
以一种访问权限不允许的方式做了一个访问套接字的尝试处理
有一个项目需要运行在本地 http 服务器的 8080 端口上,之前还好的,今天突然就提示 以一种访问权限不允许的方式做了一个访问套接字的尝试, 在管理员模式下运行 netstat -ano | findstr 8080 没有任何输出 上网搜索发现这可能是一个规则问题 https://stackoverflow.com/questions/54671199/kestrel-unable-to-start 尝试执行 netsh interface ipv4 show excludedportrange protocol=tcp,发现 8080 端口不知道为什么被排除了,使用以下指令成功修复: net stop winnatnetsh interface ipv4 show excludedportrange protocol=tcpnet start winnatnetsh interface ipv4 show excludedportrange protocol=tcp 参考 (Windows)以一种访问权限不允许的方式做了一个访问套接字的尝试处理 Kestrel...











