6 分钟
市面上各种 agent 用过不少,cursor、claudecode、codex、opencode、trae、openclaw、pi……其实也没感觉哪个对其他有降维打击,反而各有各的不爽: 要么有模型限制,换别的兼容接口要各种转接,运行过程不透明——之前做了 linko,初衷也是为了搞清楚各种 agent 都在干嘛。 要么天天升级弄出各种奇怪 bug,要么过度臃肿,要配各种看着有用实际用起来又没什么卵用的插件。
所以,在 2026 年这个时间点,自己从 0 开始做一个 agent 到底有门槛吗(不限于 coding)?于是 4 月的时候开始做了 tachi。 结论是:做一个匹配个人需求和工作流 …
3 分钟
做了个新玩具 linko, 本质上是个透明 mitm proxy, 但给他加上了可视化 ai agent 和 llm api 之间对话的能力.
限制:
目前只支持 MacOS (透明代理的实现用了MacOS 上的pfctl, linux 的支持很简单, 有空可以加下) 支持的 llm api 只有 anthropic 的接口格式, 任意兼容的第三方接口应该都可以(测试过minimax 和 deepseek) 原理上和 charles 之类的工具的主要区别在"透明", 不需要客户端指定http_proxy(有些工具不支持), 通过防火墙强行劫持https流量, 来做流量解密. …
5 分钟
几年前写过个工具 gospy, 用于从旁路 dump 一个 golang 进程的 runtime 信息(包括 goroutine, memory 等), 大致原理见以前的文章.
基本功能能用, 但没继续做下去, 除了没时间外, 其他还有几个问题:
不支持 MacOS (主要是没搞懂 MacOS 下怎么读取进程内存). DWARF 解析写的过于繁琐, golang 版本更新时, 解析逻辑很难调整. 对写 UI (包括 terminal UI 和前端) 实在没兴趣, 不写又没法暴露功能, 也懒得去做通过 http 接口暴露数据. 前阵子试了下通过 aider 来写代码, 效果非常惊艳, 对我来说, …
4 分钟
产品里用了一年多的 etcd, 碰到过一些 bug, 整理下,其中用些在最新版本里已经修复了, 会标注下.
添加 etcd 节点相关 bug 添加 etcd 节点的过程一般是先 member add, 然后启动新节点上的 etcd,这样的问题是在 member add 和新 etcd 启动 之间整个 etcd 集群处于 quorum - 1 的状态, 此过程增加了集群的不稳定性,如果新节点由于配置错误起不来,现存节点再挂一个 就可能导致整个集群不可用.
从 3.4 开始 etcd 引入了 learner 的概念, member add –learner, 可以将新节点添加成 …
10 分钟
patroni 的安装跳过, 它只是个 python 包, 把依赖装好就行, 同时要求装好 postgres-server, patroni 运行过程中会调用 pg_ctl 等命令: https://patroni.readthedocs.io/en/latest/README.html 每个 patroni 管理一个 pg 实例, 两者必须部署在同一节点上, patroni 需要能:
访问 pg 的监听端口 读写 pg data dir (patroni 会重写 postgres.conf, pg_hba.conf 等文件) 配置文件 配置文件是yaml 格式, 具体见 …
3 分钟
EKS control plane 的升级是比较简单的, 直接在 aws console 上点下就可以了, 但 worker node 是自己用 asg(autoscaling group) 管理的, 升级 worker node 又不想影响业务是有讲究的.
跑在 EKS 里, 且希望不被中断 traffic 的有:
stateless 的 api server, queue consumer 被 redis sentinel 监控着的 redis master/slave 用于 cache 的 redis cluster 写了个内部工具, 把下面的流程全部自动化了. 这样升级 eks 版本, …
4 分钟
k8s 1.20 的 release note 里说 deprecated docker: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation
对 docker 和 k8s 关系比较了解的人一看就知道是废弃 dockershim, 正常操作, 具体有什么影响, 建议阅读:
https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/ …
4 分钟
天气渐凉, 无奈得拿出了秋裤. 偷懒好久没写博客了, 回顾下这阵子做了什么.
工作 年底打算把之前用的 dedicated ec2 instance 全部换掉, 几年前为了 HIPAA 合规做的, 但 AWS 的 BBA 里后来不要求 dedicated instance 了, 换成普通的, 可以省掉每月1400多刀的固定 dedicated fee, 同类型的 ec2 instance 可以再省10%左右. 为了这个, 打算把部分遗留在 vm 上的东西迁移到 k8s 里, 减少之后更换 instance 的工作量.
cronjob 尝试用 argo 来调度 cronjob.
还是有不少坑的: …
3 分钟
巩固下基础知识.
现代系统都运行在保护模式(protected mode)下, x86_64 下用户态程序启动时候都会被分配一片虚拟内存, 大小是 2^47 (128TiB), 但目前 cpu 只能映射 2^46 (64TiB), 通过 page table 将虚拟内存中的地址(vma)和物理地址映射起来. 以前的 BIOS 跑在 实模式下(real mode), 直接访问物理内存, 不过只能访问前 2^20(1MiB) 的空间.
Linux 下 /proc/$pid/maps 文件内容就是进程的虚拟内存分布. 每一列含义通过 man 5 proc 看, 不重复了.
网上的例子都有点过时, 在 …
3 分钟
在 k8s 上部署 redis cluster 后, 感觉 redis-cli 管理 redis cluster 非常别扭, 写了个 kubectl 的插件 kubectl-rc 来辅助管理 redis-cluster.
redis-cli 难用在哪 不直观 & 不统一 部分 cluster 信息是直接通过 redis protocol 获得的, 比如 cluster nodes, cluster slots, 但部分管理命令又是通过 redis-cli --cluster 执行的.
cluster nodes, cluster slots 这些命令输出的又是 ip 和 node …