印度民主深度研究,一个七十八岁的「不可能」还在运行
先说一件让我自己也愣住的事。 我在写这篇东西之前,在社交媒体上看到一个说法流传得挺广,大意是,印度每次大选,光因为选举暴力死的人就有两万。 看到这个数字的时候,我的第一反应是「卧槽真狠」,第二反应是「等等,这怎么可能」。印度的人口总数是 14 亿左右,中国全国一年各种原因的非正常死亡加起来也就几十万的量级。一次选举死两万人,就相当于在六周时间里、几百个选区里,打出一场小型战争的伤亡。这个量级要是真的,那印度民主就不是「失灵」,是「持续性内战」。 然后我花了整整一个下午翻 V-Dem、Freedom House、ACLED、印度选举委员会(ECI)、印度内政部、还有 ADR 这帮机构的报告,把从 1984 年开始的历次大选的真实死亡数字一个一个比对了一遍。 结果是,这个「两万人」的说法,基本上是个谣言。 但这个谣言有意思的地方在于,它虽然把数量级夸张了 50 到 1000 倍,它想表达的那件事,其实并不完全是空穴来风。印度民主的确有真正的、触目惊心的病灶,只是这些病灶并不长在「大选死人」这件事上,而是长在更深的地方。 所以这篇文章,我想做一件比较麻烦的事。先把印度民主这套东西从头到...
从 Skill 到 Skills 2.0:Anthropic 这半年怎么把 Agent Skills 做进软件工程
为什么需要 Skills 用 Claude Code 或者 Cursor 写一段时间代码,总会碰到同一种场景:模型通用能力很强,但一旦要求按公司内部流程办事,比如按团队的 commit 规范写一条 commit message、按固定模板出一份项目周报、按财务系统的字段填一份报销单,它立刻变回一个刚入职三天的实习生——不会写倒不是主要问题,它只是不知道这边是怎么干这件事的。 Anthropic 2025 年 10 月开始填这个坑,做出来的东西叫 Agent Skills。 时间线 2025 年 10 月 16 日:Skills 诞生 Anthropic 工程博客发了《Equipping agents for the real world with Agent Skills》,署名 Barry Zhang、Keith Lazuka、Mahesh Murag,文末缀了一句 “who all really like folders”。 文章对 Skill 的定义很朴素:一个 Skill 就是一个文件夹,里面有一个 SKILL.md,外加可选的脚本、参考文档和资源文件。SKILL.md ...
Karpathy 视角下的 LLM 编码缺陷:四条行为准则的深度解析
LLM 编码的自作主张 长期用 Claude Code、Cursor、Copilot 写代码的人大概都熟悉一种感觉:模型并不是不会写,而是写得太多、太聪明、太自作主张。让它修一个 bug,它顺手把无关代码风格也改了;让它加一个简单功能,它给你抽象出三层接口和一套配置系统;让它重构 X,它没问清楚 X 的边界就开始动手。 Andrej Karpathy 在 X 上发过一段对这类问题的精炼归纳,forrestchang 把它整理成了一个 GitHub 仓库 andrej-karpathy-skills,提供一份 60 多行的 CLAUDE.md,外加 Claude Code Plugin 的安装方式。这个仓库的内容可以同时用于 Claude Code、Cursor 以及任何支持 CLAUDE.md 形态的 LLM 编码工具。 这篇文章想讨论三件事:Karpathy 到底诊断出了哪四个偏差、对应的四条行为准则怎么用、以及一个更实际的问题——这套准则到底应该装成 skill 还是直接写进 CLAUDE.md。 Karpathy 观察到的四个系统性偏差 仓库 README 引用了 Karp...
共和党还剩几个派系?——MAGA、Freedom Caucus 与特朗普的党内权力
一个流行的说法是:共和党已经不是原来那个共和党了,它是"MAGA 党"。 这个说法一半对、一半不对。从 2016 年到 2025 年,共和党在党纲、人事、候选人提名、外交立场上都被特朗普翻了个底朝天,2024 年党代会通过的新党纲整篇读下来像是他本人的竞选演讲。但共和党并没有"合并"成一个 MAGA 整体,它内部的派系其实比民主党还多、还乱。特朗普不是消灭了派系,而是压过了派系,所有派系都必须围绕他重新定义自己的位置。 几个绕不开的问题:共和党现在到底有哪些派系?"MAGA 党"这个说法成立到哪一步?特朗普对党的控制力深到什么程度?那个动不动就上新闻的 Freedom Caucus(自由连线/自由党团)到底是干什么的? 一、先搞清一个常识:美国国会的"党"不是铁板一块 和很多东亚国家的政党不同,美国两党都没有党中央、没有党纪处分,也没有"开除党籍"这回事。国会山上真正在运作的不是"党",而是一堆自愿组成的党团(caucus)。一个议员同时加入三四个 caucu...
美国警察暴力与大规模监禁深度调查
每当 George Floyd、Tyre Nichols 这样的名字登上头条,一个老问题就会被重新提起:美国警察每年到底打死多少人?其中多少死于枪杀? 这个问题听起来应该有标准答案。美国是世界上数据最透明的国家之一,但联邦政府长期拿不出一份准确的官方数字。真正可靠的数据来自《华盛顿邮报》、《卫报》和一群志愿者搭起来的民间数据库,它们与 CDC 官方统计之间的鸿沟,是这个国家在公共安全治理上最尴尬的一道伤口。 本文用多个独立来源交叉核对,回答两个核心问题:一年死多少?多少死于枪?顺带解释,为什么这个看似简单的数字,在美国是一道几十年没解决的统计难题。 讨论警察暴力绕不开它的另一头——监狱。前端是警察在街头打死公民,后端是国家把公民关到老,两件事共享同一套刑事司法系统、同一套政治激励。所以本文分成两部分:前七节谈警察致死,后九节谈大规模监禁。只写一半,就永远只看到了半张脸。 第一部分 · 警察暴力 一、每年约 1,300 人死于警察之手 根据 Mapping Police Violence(MPV,由 Campaign Zero 维护)的 《2024 Police Violence...
沉默的杀手:美军在东南亚留下的未爆弹药深度调查
半个多世纪前,美军在东南亚投下了人类历史上最密集的炸弹雨。战争早已结束,但炸弹从未停止杀人。 本文基于 Landmine & Cluster Munition Monitor、美国国务院、联合国开发计划署(UNDP)、国际红十字委员会(ICRC)、老挝国家监管局(NRA)等权威机构的公开数据,系统梳理美军在老挝、越南、柬埔寨三国留下的未爆弹药(Unexploded Ordnance, UXO)规模、持续伤亡,以及国际社会的回应。 一、历史背景:人类史上最猛烈的轰炸 1.1 老挝——“地球上被轰炸最多的国家” 1964 年至 1973 年间,美国在老挝发动了一场未经国会授权的秘密战争(Secret War)。根据美国国会记录(Congressional Record, 1975 年 5 月 14 日)和 Legacies of War 的数据: 投弹总量:超过 200 万吨弹药 轰炸任务:580,000 次——相当于每 8 分钟投下一架飞机的炸弹载荷,持续 9 年不间断 集束弹药:投下超过 2.7 亿枚集束子弹药(submunitions),当地人称之为"bo...
苹果印度产能转移深度调查:一场价值千亿美元的制造业大迁徙
2025 年 3 月的一个深夜,一架满载 iPhone 的货运包机从印度金奈起飞,直奔美国。这批价值 20 亿美元的手机,是苹果有史以来最大规模的一次印度空运。在特朗普关税大棒即将落下的前夜,库克用一种近乎"抢跑"的方式,向全世界宣告了一个事实:iPhone 的制造版图,正在发生不可逆转的重构。 这不是一个简单的"搬工厂"故事。这是一场涉及地缘政治博弈、供应链重塑、劳动力素质鸿沟、基础设施短板的复杂系统工程。苹果的原计划是什么?印度扩产进度顺利吗?遇到了哪些始料未及的问题?本文试图用数据和事实,还原这场价值千亿美元的制造业大迁徙的全貌。 为什么要离开中国? 要理解苹果的印度战略,首先要理解它为什么要离开中国——或者更准确地说,为什么要降低对中国的依赖。 一场疫情暴露的致命弱点 2022 年底,郑州富士康因疫情封控导致大规模生产中断。这座被称为"iPhone 城"的超级工厂,巅峰期拥有超过 35 万名工人和约 38 条产线,承担着全球 iPhone 产量的半壁江山。当它停摆时,苹果在圣诞旺季遭遇了严重的供货危机。 这一事件...
Java栈帧省略机制详解:为什么异常堆栈会消失?
引言:诡异的异常堆栈消失现象 线上服务报错时,你打开日志准备排查问题,却发现异常堆栈信息神秘消失了: 1java.lang.NullPointerException 只有短短一行异常类名,没有完整的堆栈跟踪。你可能会怀疑:是日志框架出问题了?还是被什么拦截器截断了? 其实,这是 JVM 的一个性能优化机制,叫做 OmitStackTraceInFastThrow(快速抛出时省略堆栈跟踪)。从 JDK 5 开始引入,默认启用。 本文将深入剖析这个机制的设计动机、工作原理、触发条件,以及如何正确应对。 一、问题场景:异常堆栈去哪了? 1.1 复现现象 用一段简单的代码就能复现: 123456789101112public class ExceptionOmitDemo { public static void main(String[] args) { String msg = null; for (int i = 0; i < 500000; i++) { try { ...
Coding Agent 代码检索技术全景:从 GREP 到知识图谱
Coding Agent 的核心能力之一是在陌生代码库中快速定位相关代码。无论是修复一个 bug、实现一个新功能,还是回答一个架构问题,Agent 的第一步几乎总是:找到相关的代码在哪里。 这个看似简单的问题,实际上是整个 Agentic Coding 领域最基础也最棘手的挑战。不同的 Coding Agent 给出了截然不同的答案——Claude Code 坚持用 grep,Cursor 构建了基于 Merkle 树的向量索引,Aider 用 PageRank 算法生成 RepoMap,Graphify 则把代码库变成了一张知识图谱。 这些方案之间是什么关系?是同一层次的竞争方案,还是不同层次的互补技术?各家的取舍逻辑是什么?未来的发展方向又在哪里? 本文从技术原理出发,逐层拆解当前主流的代码检索方案,分析它们的设计哲学与工程取舍,最终给出一个统一的分层理解框架。 全景导图 %%{init: {'theme':'base', 'themeVariables': {'primar...
Agentic Coding 深度解析:从架构原理到多 Agent 协作
AI 编程工具的演进,正在经历一次根本性的范式转变:从"补全光标处的代码",到"自主完成端到端工程任务"。这种转变有一个专有名词——Agentic Coding。 围绕 Coding Agent 的讨论,常见两种极端:将其神化为自主智能体,或将其贬为"不过是提示词工程"。两种判断都失之简单。理解这个转变,需要从三个层面展开:工具层(OpenCode 的能力边界)、框架层(多 Agent 协作编排)、方法论层(如何让 Agent 真正服务于工程流程)。本文从真实的架构出发,拆解 Claude Code、OpenCode 等工具的实现模式,厘清各自的设计取舍,深入探讨子 Agent 的本质与多 Agent 协作的核心问题。 什么是 Agentic Coding 传统 AI 编程助手的工作模式是响应式的:开发者提问,AI 回答;开发者选中代码,AI 补全。人始终是执行者,AI 是辅助工具。 Agentic Coding 的工作模式是自主式的:开发者描述目标,Agent 自主规划步骤、调用工具、执行操作、验证结果,直到任务完成...









