普通视图

发现新文章,点击刷新页面。
今天 — 2026年4月16日首页

快倒闭的硅谷神鞋,转行 AI 股价暴涨 7 倍,龙虾之父都懵了

作者 莫崇宇
2026年4月16日 10:57

如果你是一家连年亏损、销售额腰斩、连线下门店都要全部关停的卖鞋公司,你要怎么做才能让公司股价在一天之内原地起飞,暴涨 700%?

答案是:停止卖鞋,然后大声喊出那五个拥有起死回生魔力的字母:AI+GPU。

现实充满了黑色幽默小说里的桥段,曾经被誉为「硅谷足力健」、深受科技大佬喜爱的环保跑鞋品牌 Allbirds,在经历了灾难性的业绩滑坡后,做出了一项违背常理的决定:

他们不仅以 3900 万美元的跳楼价贱卖了自己的品牌和核心资产,还要拿着新融来的 5000 万美元,转身变成一家名为「NewBird AI」的算力公司。

按照官方的宏大叙事,他们要成为「一家完全集成的 GPU 即服务(GPUaaS)和 AI 原生云解决方案提供商」。

消息一出,沉寂已久的 Allbirds 股票就像是被注入了某种兴奋剂,开盘即暴涨,盘中一度飙升 721%,公司市值约为 1.845 亿美元,而就在前一天收盘时,它的总市值还不过区区 2100 万美元,每股股价徘徊在 3 美元以下。

在 AI 浪潮席卷全球的今天,我们见过太多跟风炒作的故事,但 Allbirds 依然让人觉得荒谬不已。当一家连鞋底都做不好的公司,开始教人怎么训练大模型时,这场 AI 狂欢,或许已经来到了最危险的边缘。

硅谷曾经最酷的鞋,是如何跌落神坛的

要理解这场闹剧的荒诞程度,我们得先短暂回顾一下 Allbirds 曾经的辉煌。

十年前,Allbirds 凭借一款名为 Wool Runner 的羊毛跑鞋横空出世。在那个极简主义和环保叙事大行其道的年代,它精准地踩中了硅谷精英们的审美痛点。

没有显眼的 Logo,号称「世界上最舒服的鞋」,采用美利奴羊毛和甘蔗提取物制造——穿上它,你仿佛就拥有了和史蒂夫·乔布斯一样特立独行的灵魂。

从拉里·佩奇到莱昂纳多·迪卡普里奥,名人们的免费带货让 Allbirds 迅速破圈。2021 年,它顶着「环保科技公司」的光环成功 IPO,市值一度逼近 40 亿美元。

但潮水退去,裸泳者终将现身。

当消费者的新鲜感褪去,Allbirds 暴露出了致命的短板:产品单一、耐用性差、款式缺乏创新。人们很快发现,这双号称科技感满满的鞋,穿久了不仅容易变形,还会在大脚趾处磨出一个尴尬的洞。

2022 年至 2025 年间,Allbirds 的销售额断崖式下跌了近 50%,从 2.98 亿美元萎缩至 1.52 亿美元,其始终未能实现盈利,股价也从巅峰期的近 30 美元一路跌入几美分的「仙股」深渊。

今年 2 月,Allbirds 关闭了全部美国全价门店,彻底放弃了线下阵地。

走投无路之下,Allbirds 于 3 月 30 日宣布,将以区区 3900 万美元的价格,把公司名称、知识产权和剩余的鞋履业务资产,打包卖给品牌管理公司 American Exchange Group。后者旗下还管理着 Aerosoles 和 Ed Hardy 等品牌。

一个估值曾高达 40 亿美元的独角兽,最终落得个被「论斤贱卖」的下场。

至此,「Allbirds」这个名字已经属于别人了。继续卖鞋的事,交给 American Exchange Group 去操心。而那个被掏空了一切实体业务、只剩下纳斯达克上市资格的空壳,则握在管理层手里,等待一次新的机会。

脱去了鞋履业务的沉重外壳后,管理层惊奇地发现,自己手里居然还捏着一个在如今市场上最值钱的东西——一个干净的、合法的、可以直接用来炒作的上市公司壳资源。

卖完鞋,他们决定去抢 GPU 租赁的生意

在甩卖资产后不到三周,Allbirds 的现任 CEO 乔·维纳乔(Joe Vernachio)抛出了一个惊天计划:他们从一位神秘的匿名投资者那里筹集了 5000 万美元,准备将这个空壳公司改名为 NewBird AI。

在官方的新闻稿中,他们使用了最高规格的互联网黑话来包装这个计划:

「NewBird AI 将利用初始资金收购高性能 GPU 资产……满足客户对专用 AI 计算能力的需求。」

「全球企业对 AI 算力的需求空前高涨,而北美数据中心的空置率已降至历史新低,高端硬件的采购周期不断延长。」

「我们将采购高性能、低延迟的 AI 计算硬件,通过长期租赁协议,填补超大规模云厂商无法覆盖的市场空白。」

更耐人寻味的,是他们向股东提交的章程修正案。

由于拟议中的 AI 算力业务「较少关注环境保护这一公共利益」,管理层正式请求股东批准删除公司章程中一切关于「为环境保护公共利益而运营」的相关表述。那个当年靠着绿色环保故事打动投资者的 Allbirds,连最后一块遮羞布也要摘掉了。这一切将提交至 5 月 18 日的股东大会进行表决,届时原有股东还将获得一笔特别股息作为补偿。

乍一看,Allbirds 转型的逻辑似乎很通顺。毕竟现在全宇宙最稀缺的资源就是算力,OpenAI 和 Anthropic 们为了争夺 GPU 恨不得打破头。但稍加思索,你就会发现其中的巨大割裂感。

这可是算力租赁市场啊!这是一个由亚马逊 AWS、微软 Azure 和 Google Cloud 统治的万亿美元级战场。即使是那些专门做 GPU 租赁的垂直新贵(如 CoreWeave),其融资金额也是动辄几十上百亿美元起步。

NewBird AI 手里只有可怜的 5000 万美元。在当前的市价下,这点钱甚至不够买半个机房的高端 GPU 集群,更别提后续高昂的电力成本、冷却设施和网络带宽维护费了。

更关键的是,一家做羊毛鞋起家的公司,到底有什么底气和技术储备去管理极其复杂的 AI 数据中心?他们能解决 GPU 集群的低延迟互联问题吗?他们懂得如何优化大模型训练的并行计算吗?

答案显然是,他们什么都不懂,他们也不需要懂。

对于这场令人啼笑皆非的「转型」,沃顿商学院教授 Gad Allon 的评价可谓是一针见血:「把这称为『转型』(Pivot),简直是太抬举 Allbirds 了。」

在商业逻辑中,转型意味着公司将现有的某些能力,比如技术、人才还是渠道都得重新部署到一个新的市场中。比如 Netflix 从租 DVD 转型做流媒体,因为他们掌握了用户的观影偏好。

「但 Allbirds 在 AI 领域没有任何能力。」Gad Allon 毫不留情地扯下了这块遮羞布,「他们唯一拥有的,就是一个公开上市的资格。在目前的市场环境下,这居然成了唯一重要的资产。」

这并不是孤例。在科技圈的历史上,每当一个超级风口出现时,总会伴随着群魔乱舞的「僵尸品牌借尸还魂」现象。

比如数字媒体公司 BuzzFeed 宣布计划采用 ChatGPT 协助内容创作后,股价在两天内暴涨 307%,而且市场的亢奋维持了没多久,等到分析师们开始追问商业模式的细节,股价便从高点迅速抹去 40%。

根据 The Verge 报道,就在最近,同样由 Chardan Capital(也是本次 Allbirds 交易的配售代理)操盘的另一笔交易中,制造 Evie 智能戒指的健康科技公司 Movano,突然宣布与一家名为 Corvex 的 AI 云计算公司合并。

在他们最新的合并公告中,曾经引以为傲的「健康监测」和「智能戒指」字眼被抹得一干二净,取而代之的全是 AI 概念。因此,与其说 Allbirds 是为了解决什么「算力短缺」的行业痛点,更不如说这是一场利用上市公司的壳资源,精准收割市场情绪的资本游戏。

尽管逻辑上漏洞百出,但在 NewBird AI 宣布成立的那一天,市场依然一度用暴涨 700% 的真金白银为它投下了赞成票。

为什么?因为在这个被 AI 叙事高度绑架的时代,散户和投机者们正陷入一种极度的焦虑中。

他们害怕错过下一个英伟达,害怕在这个人类历史上最大的财富列车上找不到座位。于是,只要一个股票代码旁边沾上了「AI」、「GPU」或者「大模型」的边,无论它的基本面烂到什么程度,都会有人愿意为了那万分之一的暴富可能而买单。

过去,创业公司生产产品;现在,购买 GPU 才是最好的估值叙事。

对于 Allbirds 来说,卖掉那个千疮百孔的鞋履品牌,换取一个在 AI 赌场里继续摇骰子的机会,或许是管理层能做出的最「理性」的续命决策。

只是,当踏踏实实做好一双能让人穿得舒服的鞋,其价值竟然远远比不上画几张虚无缥缈的 GPU 租赁蓝图。潮水终有再次退去的一天,到那时,不知道这家叫做 NewBird 的「算力巨头」,下次又会寻找怎样的风口。

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

昨天以前首页

AI 编程时代,我挖出了一本 1999 年的“删库跑路”指南

作者 bigwhite
2026年4月6日 08:27

本文永久链接 – https://tonybai.com/2026/04/06/how-to-write-unmaintainable-code

大家好,我是Tony Bai。

在这个由 Claude、GPT、Gemini等大模型定义的 2026 年,我们似乎已经习惯了 AI 那种近乎“洁癖”的编码风格:优雅的接口设计、滴水不漏的错误处理、以及永远对齐的工整格式。

AI 正在用它那冰冷的、毫无感情的逻辑,将软件工程推向一个前所未有的标准化时代。

但就在前几天,我在一个尘封的互联网角落里,挖出了一本写于 1999 年的上古奇文——How To Write Unmaintainable Code》(如何编写不可维护的代码)

这篇文章的作者 Roedy Green,怀着一种极其黑色幽默的极客精神,手把手教导当年的 Java 程序员们,如何写出能让“接盘侠”当场崩溃、从而保证自己“终身就业”的屎山代码。

当我用 AI 时代的眼光,去重新审视这本 27 年前的“反向圣经”时,我感到既荒谬又亲切。它就像一面镜子,照出了在没有 gofmt、没有 AI、没有 Claude Code 的“古法编程”时代,我们曾如何野蛮生长,以及 Go 语言在设计之初,就已经用多么前瞻性的眼光,封印了那些曾经肆虐一时的“魔鬼”。

今天,就让我们开启一场技术考古之旅,用现代 Go 语言,来“复刻”一下这些差点失传的“防御性”编程之术。

底层哲学:把你的同事想象成一个“管中窥豹”的傻子

Roedy Green 在开篇就点明了核心:维护者看代码,就像通过一个卫生纸筒的中心在看世界,视野极其狭窄。

你的任务,就是让他永远无法拼凑出完整的画面。

古法复刻:让同事“提刀来见”的 骚操作

命名之罪

  1. 用 l 冒充 1,用 O 冒充 0:利用字体的模糊性,制造视觉混乱。
    go
    // 古法复刻
    var l int64 = 11 // 这是 11 还是 1l?
    var speed int = O1 // 这是 O1 还是 01?
  2. 创造极其相似的变量名:仅通过大小写或一个不显眼的字母进行区分。
    go
    // 古法复刻
    var swimmer, swimner string // 99% 的 Code Review 都会看走眼
    var hashTable, HashTable *map[string]int
  3. 滥用缩写,且不保持一致:在不同的地方使用同一个单词的不同缩写,让全局搜索彻底失效。
    go
    // 古法复刻
    func GetUserAuth(...) {}
    func GetUsrAuthorization(...) {}
    var athnClient *Client
  4. 使用与业务逻辑无关的变量名:比如,在屏幕上显示“Postal Code”(邮政编码),但在代码里把它命名为 zip。
  5. 在函数名中使用极其抽象的词汇:比如 HandleIt, ProcessData, DoStuff。让调用者永远猜不透这个函数到底干了什么。

注释之罪

  1. 在注释里撒谎:最简单的一招,改了代码,但不更新注释。
  2. 写废话注释:为每一行显而易见的代码配上同样显而易见的注释,用大量的噪音淹没真正有价值的信息。
    go
    // 古法复刻
    i++ // i plus 1
  3. 永远不要注释一个变量:它的单位、取值范围、边界条件,全让维护者自己去猜。

结构之罪

  1. 极限压行:在一行里塞进尽可能多的逻辑,挑战显示器的宽度极限。
  2. 深度嵌套:以能嵌套 10 层以上的 if-else 为荣,坚决不使用 early return或happy path。
  3. 滥用全局变量:永远不要使用局部变量,把一切都提升为包级变量,让并发的 Goroutine 们去为了争夺它而自相残杀。

    // 古法复刻
    var tempResult string // 提升为包级变量
    
    func HandleRequestA() {
        tempResult = "result_from_A"
        // ...
    }
    
    func HandleRequestB() {
        tempResult = "result_from_B"
        // ...
    }
    // 当这两个函数并发执行时,一场血案即将发生。
    
  4. 复制-粘贴-修改:当有相似功能时,坚决不抽象,直接复制粘贴。在一个代码库里埋下 5 份只有细微差别的一模一样的代码,等待日后引爆。
  5. 一个函数只做一件事?不,一个函数必须干三件事! 让一个名为 IsValid() 的函数,在校验的同时,偷偷地把数据写入数据库。

Go 语言的反击

当然原文中,Roedy Green的“骚操作”不止这些。

但其中的一些“防御”手段对今天的Go语言来说,并不生效。

你会发现 Go 语言在设计之初,就已经对这些“手段”进行了“免疫”,比如:

  • 关于缩进与格式:Roedy Green 痛斥当年程序员通过“故意错位”的缩进来制造 if-else 匹配的视觉陷阱。
    • Go 的反击:对不起,我们有 gofmt。在 Go 的世界里,关于代码格式的“圣战”在第一天就结束了。无论你的代码写得多乱,Ctrl+S 的瞬间,一切都会变得整齐划一。
  • 关于花括号:原文建议省略非必须的 {}。
    • Go 的反击:Go 语言强制要求 if, for 后面必须跟 {},从语法层面彻底消灭了这种的“防御”写法。

现代化的“魔鬼”:用 Go 复刻那些更高级的骚操作

当然,Go 也不是万能的。很多源自 Java/C++ 时代的“高级骚操作”,在 Go 里依然可以“继续存在”。

  1. 伪装成构造函数
    go
    // 古法复刻:这个函数名和类型名完全一样,但它不是构造函数!
    type User struct{ name string }
    func User(name string) { /* ... do something evil */ }
  2. 滥用 interface{}:把所有的函数参数都定义成 interface{},然后在函数内部进行大量的类型断言(Type Assertion)。这能完美地把编译时错误,转化为运行时 panic。
  3. 颠倒参数顺序:定义一个 DrawRectangle(height, width int) 函数。在几个版本之后,神不知鬼不觉地把它改成 DrawRectangle(width, height int),但函数名保持不变。
  4. 魔数(Magic Numbers):在代码里硬编码大量的数字 100,但就是不定义一个常量。更高级的玩法是,偶尔用 99 代替 100-1,用 50*2 代替 100。
    go
    // 古法复刻
    if len(users) > 99 { // 这里是 > 99
    // ...
    }
    for i := 0; i < 100; i++ { // 这里是 < 100
    // ...
    }
  5. 迷惑性的函数重载(Go 版本):Go 没有函数重载,但我们可以用“接口”来模拟。
    go
    // 古法复刻
    func Process(input interface{}) {
    switch v := input.(type) {
    case string: // 处理字符串
    case int: // 处理整数,但逻辑和 string 完全不同
    // ...
    }
    }

    当你的同事传入一个他以为是数字的字符串 “123″ 时,他将收获一个意想不到的结果。

小结:在 AI 时代,我们为什么要回顾“屎山”?

重温这本 27 年前的“反向圣经”,在今天这个 AI 编程时代,显得格外有意义。

AI 的出现,正在把“编写可维护代码”的门槛,拉到前所未有的低点。一个初级程序员,在 AI 的辅助下,也能写出格式工整、变量命名规范的代码。

但这是否意味着“屎山”将成为历史?

恰恰相反。AI 在解放我们生产力的同时,也正在“批量化”和“隐蔽化”地制造着“新时代的屎山”。AI 可能会生成一段逻辑上看似完美,但在高并发下会引发严重数据竞争的代码;它也可能会为了实现一个简单功能,引入一个庞大且带有安全漏洞的第三方库。

这本古老的指南提醒我们:技术的进步可以消灭“语法层面”的丑陋,但永远无法替代人类工程师在“架构层面”的审美与抉择。

在 AI 时代,我们不再需要像 Roedy Green 那样,靠着“加密代码”来保住饭碗。但我们比以往任何时候,都更需要理解那些“不可维护代码”背后的设计缺陷,从而在 Code Review 中,扮演好 AI 的“最终质检员”角色。

代码的整洁与混乱,终究是一场关于“责任心”的博弈。无论时代如何变迁,这,或许是软件工程永恒的真理。

当然,如果你真的想了解古法编程时代的更多“骚操作”,可以看看Roedy Green的原文:https://www.doc.ic.ac.uk/%7Esusan/475/unmain.html


今日互动探讨:

在你见过的 Go 项目中,遇到过哪些让你拍案叫绝、或者让你想“提刀来见”的“屎山代码”骚操作?

欢迎在评论区分享你的“开眼”经历!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

© 2026, bigwhite. 版权所有.

承认吧,AI 写的代码,平均质量已经超过了 80% 的人类程序员!

作者 bigwhite
2026年2月5日 07:18

本文永久链接 – https://tonybai.com/2026/02/05/ai-code-quality-surpasses-80-percent-of-human-programmers

大家好,我是Tony Bai。

随着 Claude Code、Gemini Cli、OpenCode 等 AI 智能体编程工具的爆火,技术圈里出现了一种流行的论调:

  • “AI 写的代码质量不高,全是 Bug。”
  • “简单的还行,复杂的还得靠人。”
  • “AI 也就是个实习生水平。”

这些批评有道理吗?当然有。AI 确实会产生幻觉,逻辑偶尔会断裂。

但这种批评忽略了一个最基本的事实:我们拿来对比的基准(Baseline),往往是我们心目中“理想的资深工程师”。

请现在、立刻、马上打开你公司的 Github私有库或GitLab,随便点开一个两年前的遗留项目,看看里面的代码:

  • 那些随意的变量命名 tmp, data1;
  • 那些长达 800 行、没有任何注释的上帝函数;
  • 那些为了赶上线而写死的 Magic Number;
  • 那些复制粘贴了 5 遍却忘了改参数的逻辑……
  • … …

这才是人类编码的常态。

如果我们摘下“幸存者偏差”的滤镜,从全局视角的大数定律来看,一个残酷的真相正在浮出水面:

AI 写的代码,虽然缺乏神韵,但其平均质量,可能已经超越了80%的人类程序员。

人类的“熵增” vs. AI 的“基准线”

人类写代码,本质上是一个对抗熵增的过程。而人类在这个过程中充满了弱点:

  • 情绪与疲劳:下午 5 点写的代码,质量通常低于上午 10 点。为了赶着回家,我们会下意识地省略错误处理(catch (e) { // TODO })。
  • 知识盲区:即使是高级工程师,也记不住所有正则表达式的语法,或者某个冷门 API 的最佳实践。
  • 懒惰:没人喜欢写文档,没人喜欢写单元测试。

相比之下,AI 简直就是代码规范的狂热信徒。

  • 标准化:只要你 Prompt 给对了,它生成的代码默认符合 PEP8、Google Style、Effective Go 或任何你指定的规范。
  • 全面性:它不厌其烦地写 Docstring,写类型注解,写样板代码。这些人类最讨厌干的脏活,是 AI 的舒适区。
  • 无情绪:它不会因为被产品经理气到了,就故意写一段晦涩难懂的代码报复社会。

AI 也许写不出 Linux 内核那样的神作(上限),但它绝对不会写出连缩进都乱七八糟的垃圾。它极大地拉高了代码质量的底线。对于商业软件而言,底线的提升,往往比上限的突破更有价值。

自动驾驶的启示:一场“平庸”的胜利

我们可以用自动驾驶来做一个绝佳的类比。

每当特斯拉撞上路桩,媒体都会大肆报道。人们会说:“你看,机器还是不靠谱。”

但我们忽略了,此时此刻,全世界有成千上万的人类司机正在因为酒驾、看手机、打瞌睡、路怒症而制造车祸。

统计数据最终会证明:只要 AI 的故障率低于人类的平均故障率,它就是巨大的进步。

编程也是一样。

AI 编程的终局,不是写出完美无瑕的代码,而是写出比“人类平均水平”更可靠的代码。

当 AI 写的代码自带测试、自带文档、没有低级语法错误时,它就已经赢了。它消灭了“垃圾代码”。这将是一场“平庸的胜利”——软件工程将不再依赖个别天才的灵光一闪,而是依赖工业化、标准化的稳定产出。

范式转移:从“写代码”到“审代码”

如果承认 AI 已经是中级工程师水平,那么人类的角色必须发生根本性的转变。

以前,我们是 Coder(代码作者)。现在,我们被迫成为了 Reviewer(审查者)和 Architect(架构师)。

这其实对人类提出了更高的要求。

  • 阅读理解能力:AI 一秒钟生成 100 行代码,你是否有能力在 10 秒内看出其中的逻辑漏洞?
  • 系统设计能力:既然“搬砖”的工作 AI 做得比你好,你必须去思考“砖头该怎么垒”——系统架构、数据模型、业务边界。

更关键的是“自动化验证”。

既然人类读代码的速度跟不上 AI 写代码的速度,我们就必须建立一套“机器审查机器”的机制。

  • AI 写代码,AI 写测试。
  • AI 写实现,Compiler/Linter 做检查。

未来的软件质量,将不取决于你手写了多少行代码,而取决于你设计了多严密的护栏(Guardrails)和验收标准(Spec)。

小结:拥抱“无人编程”时代

我们可能正在经历软件工程领域的“无人驾驶时刻”。

初期,我们需要“安全员”(人类程序员)手扶方向盘,随时准备接管。

但随着模型能力的迭代(如 GPT-5.2、Gemini 3.0 Pro、Claude 4.5 Opus等),接管的频率会越来越低。

最终,“人类手写代码”可能会被视为一种不安全的行为——就像现在“酒后驾车”一样。

因为人类是不稳定的、不可控的。而经过严格 Prompt 工程和测试约束的 AI,是稳定、可控、可追溯的。

承认 AI 比我们写得好,并不丢人。

这意味着我们可以从繁琐的语法细节中解放出来,去追求那 1% 的“神来之笔”——创造力、同理心和对未来的想象。


你怎么看这个“80%”?

你认同这个残酷的结论吗?在你看来,AI 生成的代码最让你放心的地方在哪里?最让你担心的地方又在哪里?欢迎在评论区开启你的辩论模式!

如果这篇文章戳中了你的“痛点”,别忘了点个【赞】和【在看】,并转发给你的开发伙伴,看看他们敢不敢“承认”!


如何做 AI 的“安全员”?

AI 的代码质量已经超越了大多数初级工程师。作为一个“AI 时代的 Tech Lead”,你该如何建立一套机制,来驾驭这股庞大的算力?

在我的极客时间专栏《AI 原生开发工作流实战》中,我们不谈如何写代码,而是谈如何审代码,如何构建 Test-Driven 的自动化护栏

  • 如何利用 Claude Code 自动生成高覆盖率的测试用例?
  • 如何构建 AI Code Reviewer 来预审代码?
  • 如何用 Spec 约束 AI,防止幻觉?

让我们一起,从“写代码的人”,进化为“定义代码标准的人”。

扫描下方二维码,开启你的进阶之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

© 2026, bigwhite. 版权所有.

你的 CLAUDE.md 写错了:为什么指令越多,AI 越笨?

作者 bigwhite
2026年1月29日 07:18

本文永久链接 – https://tonybai.com/2026/01/29/write-a-good-claude-md

大家好,我是Tony Bai。

在使用 Claude Code、Cursor 或 Gemini Cli 等 AI 编程工具时,你是否遇到过这样的情况:

明明在项目根目录写了 CLAUDE.md(或 AGENTS.md),洋洋洒洒列了几十条项目规范:“使用 TypeScript”、“不要用 any”、“单元测试覆盖率要达标”……

但 AI 就像个叛逆的实习生,经常对这些指令视而不见,反复犯同样的低级错误。

是你写的 Prompt 不够严厉吗?还是模型不够聪明?

最近,HumanLayer 团队发布的一篇深度分析文章揭示了真相:

问题恰恰在于你写得太多了。

Claude Code 的内部机制会给模型注入一条系统级提醒:

“IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant.”
(重要:此上下文可能与您的任务无关。除非高度相关,否则请忽略。)

这意味着,你的 CLAUDE.md 越臃肿,包含的无关信息越多,它被系统判定为“噪音”并整体忽略的概率就越大。

今天,我们来聊聊如何用工程化的思维,重构你的 AI 上下文管理。

第一性原理:AI 是无状态的“新员工”

要写好 CLAUDE.md,首先要理解 LLM 的本质:它是无状态的(Stateless)

每次你开启一个新的 Session,对于 AI 来说,都是入职第一天。它对你的代码库一无所知。CLAUDE.md 是它唯一的“入职手册”和“长期记忆”。

但这并不意味着你要把公司历史全塞给它。一个优秀的入职手册应该包含什么?

HumanLayer 的文章中 总结了 “The Trinity”(三要素)

  1. WHAT(地图): 技术栈是什么?项目结构是怎样的?(特别是 Monorepo,告诉它哪里是 App,哪里是 Lib)。
  2. WHY(目标): 这个项目的核心价值是什么?核心模块的职责边界在哪里?
  3. HOW(工具): 怎么构建?怎么跑测试?用 npm 还是 bun?

除此之外的任何废话,都是在消耗 AI 宝贵的注意力。

最佳实践一:少即是多 (Less is More)

研究表明,即便是最前沿的推理模型(Thinking Models),能稳定遵循的指令上限也就在 150-200 条左右。而小模型(如 Haiku 或 GPT-4o-mini)的遵循能力随着指令数量增加呈指数级下降

更糟糕的是 “位置偏见(Position Bias)”。LLM 高度关注开头(System Prompt)和结尾(最新对话),夹在中间的 CLAUDE.md 如果过长,极易沦为“被遗忘的中间层”。

因此,请遵循以下黄金法则:

  • 不要试图涵盖所有边缘情况。
  • 将根目录的 CLAUDE.md 控制在 300 行以内,HumanLayer 的生产环境甚至控制在 60 行以内
  • 每一行都要问自己:“如果没有这句话,AI 真的干不了活吗?”

最佳实践二:渐进式披露 (Progressive Disclosure)

如果你确实有很多规范要交代,怎么办?

答案是:不要把所有鸡蛋放在一个篮子里。

想象一下,HR 会在入职第一天把 500 页的《数据库运维手册》扔给一个前端开发吗?不会。

你需要构建一套“渐进式”的文档体系:

1. 建立文档库:

在项目中创建一个 .ai/docs/ 目录,存放特定领域的指南:

  • testing.md:详细的测试编写与运行指南。
  • database.md:Schema 定义与迁移规范。
  • architecture.md:核心架构图与数据流。

2. 建立索引:

在主 CLAUDE.md 中,只保留“触发器”:

  • “编写或运行测试前,请务必阅读 .ai/docs/testing.md。”
  • “涉及数据库变更时,请参考 .ai/docs/database.md。”

这样,当 AI 只是在写一个前端组件时,它的上下文窗口就不会被无关的后端 Schema 污染。保持注意力的纯净,是提升 AI 智商的关键。

最佳实践三:别把 AI 当 Linter 用

这是最常见的资源浪费:在 CLAUDE.md 里写了 50 行关于代码风格的规定——“缩进用 2 个空格”、“花括号不换行”、“变量名用驼峰”……

请记住:LLM 是昂贵的推理引擎,不是廉价的格式化工具。

让 AI 去关注缩进,就像让法拉利去送外卖,既贵又慢。而且,AI 即使知道规则,也经常因为概率性生成而“手滑”。

正确的解法是:Tooling > Prompting。

  1. 配置工具: 使用 Prettier, Biome, ESLint, govet 等确定性工具来处理格式。
  2. 设置 Hook: 配置 Claude Code 的 Stop Hook。如果 AI 生成的代码格式不对,让 Linter 报错,把错误信息喂回给 AI。
    • AI: (生成代码)
    • System: “Lint Error: Missing semicolon.”
    • AI: “Ah, fixing it.”

AI 极其擅长修复报错,但并不擅长凭空遵守“隐形的规则”

小结:杠杆的层级

在 AI 原生开发中,CLAUDE.md 处于“杠杆层级”的顶端。

  • 写错一行代码 = 1 个 Bug。
  • 写错一行 CLAUDE.md = 成百上千次错误的规划、错误的检索、错误的代码。

不要盲目依赖 /init 自动生成的文件,那只是个起点。你需要像维护核心代码一样,精心雕琢你的 CLAUDE.md。

现在,打开你的项目,检查一下那个文件。

删掉那些废话,把长文档拆分,把格式化交给工具。

给你的数字员工减负,它才能跑得更快。

资料链接:https://www.humanlayer.dev/blog/writing-a-good-claude-md


你的 CLAUDE.md 有几行?

读完这篇文章,不妨现在就去检查一下你项目里的 CLAUDE.md。它是清爽的“入职手册”,还是臃肿的“裹脚布”?你目前的行数是多少?

欢迎在评论区晒出你的“瘦身”成果!让我们一起给 AI 减负。

如果这篇文章帮你解决了 AI “不听话”的难题,别忘了点个【赞】和【在看】,并转发给你的团队,规范大家的 Prompt 工程!


构建工程化的 AI 工作流

CLAUDE.md 只是构建 AI 原生工作流的起点。

  • 如何配置 Hooks 来实现自动化代码审查?
  • 如何编写 Sub-Agents 来处理隔离的脏活累活?
  • 如何设计 Slash Commands 来固化团队的 SOP?

如果你想深入掌握 Claude Code 的高阶玩法,不仅仅是写 Prompt,而是构建一套“自动纠错、按需加载”的工程化体系。

欢迎关注我的极客时间专栏AI 原生开发工作流实战

我们不聊虚的,只讲能在生产环境中落地的 AI 工程实践。

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

© 2026, bigwhite. 版权所有.

腾讯突发“神仙操作”,4195个开源项目一夜归零!表面是打击外挂,实则是为了垄断AI时代的“数字石油”,你的聊天记录到底属于谁?|GitHub DMCA、WeChat、Tencent

作者 范, 路
2026年1月20日 08:44

腾讯向GitHub投诉,封闭了4,195个仓库,这到底是一个什么神仙操作?

大家好,欢迎收听老范讲故事的YouTube频道。

腾讯跑去向GitHub投诉,居然引用了数字千年版权法案,要求删除4,195个仓库。现在这些仓库基本上都已经被删掉了。所谓的数字千年版权法案,是1998年美国通过的版权法案。

社区反响:怎么轮到流氓报警了?

以前咱们都说腾讯四处抄袭,都说“狗日的腾讯”,怎么现在轮到流氓报警了?腾讯这次给出的理由,是这些项目以及项目的分支,违反了腾讯设立的安全围栏,获取了用户的聊天记录。

社区中骂声一片,主要观点如下:

  • 腾讯你自己的产品做的不好,用别人帮你把功能补上了,你还不乐意,你还来封堵。
  • 聊天记录本来就应该是属于客户的,并不是属于你腾讯的,你有什么权利替客户主张?
  • 有很多骗子和黑灰产,你腾讯你不去抓,和开发者和用户过不去,你到底想干嘛?

这个是社区里边普遍的声音。

事件时间线

  • 1月8号:腾讯向GitHub提出的投诉;
  • 1月12号:GitHub开始通知开发者删库;
  • 1月18日:面向大众的一些科技媒体开始报道这个事情,事情开始在各种社交媒体上爆发。

详解数字千年版权法 (DMCA)

咱们现在要讲一下数字千年版权法。这个法里头最常被引用的两个条款,一个是512条款,一个是1201条款。

1. 512条款:侵权与避风港原则

512条款叫侵权,他侵犯了我的版权,主要是针对平台和服务商的。有人上传了盗版侵权的内容,我要投诉他下架,主要干这个使的。

这个时候这些平台跟服务商就会去引用“避风港原则”,说这个事我不知道,我也查不过来,你向我投诉了,我就把它下架掉。这个基本原则叫“民不举官不究”。

咱们比如说吧,现在你想看什么美剧怎么办?上B站上去看。B站上每一次有新的美剧,都会给你放盗版的,等到有人投诉的时候,他再把这些东西删掉。他是这样的一个运作方式。这些平台方会在接到投诉以后,对内容进行下架,然后通知——就是谁上传的我要通知一下。如果有抗辩,说这东西不是盗版,我自这里有授权书,或者东西是我自己生成的,那么还是可以酌情给你恢复回来。

2. 1201条款:反规避条款

第二个条款经常被引用的,这一次腾讯所引用的叫1201条款,它叫反规避条款。任何违规者,以及提供规避工具的和服务的这些人,这是这个条款所去针对的。

这个条款的意思,就是你绕过了技术壁垒和保护,绕过了版权保护墙,获得了版权保护墙之后的这些信息。就是你提供技术、提供各种方法都不行,我们就可以去引用这个数字千年法案去投诉你。

GitHub 对“两用技术”的态度

这个里头有很多叫“两用技术”,就跟咱们讲这个两用物资似的,你既可以军用也可以民用。但是这里讲的两用技术是,既可以去做好事,也可以去做坏事的这些技术。

通常GitHub会默认开发者都是好人,只有证据扎实、影响巨大才会去处理。一般情况下,你说我这个项目放到GitHub上去以后,有人可能拿它去做坏事,GitHub通常是不会去管的。如果证据扎实、影响巨大的话,就会忽略做好事那部分,直接把库删掉。这一次腾讯就已经达到目的了。

哪些项目被干掉了?

大家注意,GitHub里面结构是这样的:每一个项目,我们要开一个仓库,把这些源代码都存在里头,存不同的版本。GitHub的仓库有两种,一种叫开放仓库,一种叫私有仓库。这一次主要针对的都是开放仓库。

这一次被干掉的,大部分叫fork项目,叫分支项目。什么意思?就是你有一个开放项目,说我可以从微信里边导这个聊天记录出来,别人看了不错,我也要去改,那我不会在你原来的项目上改,我会在你这个项目的基础上做一个分支,相当于是我在这个基础上做了一个拷贝的影子一样,然后我在这个分支上再去干活。所以它为什么有4,000多个仓库?大量的都是分支分出来的。有一些大家比较喜欢的项目,会有上百个分支出来。

主要被投诉的项目类型如下:

第一种:腾讯客户端 Hook

Hook是钩子的意思,就是我们来去监控腾讯客户端,在里边去做一些事情。它基本上是一个hook和机器人的架构,就是我先在这挂一钩子,发现有什么事的时候,我后边的一个自动程序就可以去处理。这种项目这一次都被投诉了。

第二种:运行进程导出 Key 及解密数据库

腾讯在微信里头,实际上是有一个数据库的,来存我们各种各样的聊天记录、联系人,还有我们在里边买东西存这些信息。要想解开这个数据库的密码,是必须要有一个动态的密码,或者叫动态的key。

这种东西只能去监控他的微信聊天的、微信程序的这个后台进程,然后从这个里边能够截取出这个key来。拿到这个key,就可以解开这个数据库,就可以知道你跟谁聊过什么天了。它是这样的一个工作原理。这一类的项目也统统都被投诉了。

第三种:聊天记录导出与备份

我们用手机的时候,有一个很痛苦的事情是什么?就是微信聊天数据特别特别大。像我每一次换手机的时候,那个我的微信聊天数据大概能有个十几个G或者更大一些。他又不在这个服务器端给你提供备份的这个功能,因为实在是备份不起。所以每一次换手机,备份或者叫迁移这个聊天记录是非常非常痛苦的。

那么有一些工具说“来我帮你做迁移吧”,我帮你把这个微信聊天记录通通都迁移到服务器上,或者迁移到你自己的一个网盘上,等你下一次有新手机或者有一些新的应用的时候,我们帮你再把这个东西复原上去。它有这样的工具,这一次也都被投诉了。

第四种:iOS 备份解析导出

我们的手机,特别iPhone手机,你连到Windows或者连到macOS的这个电脑上以后,它会把整个手机里边的信息做一个备份下来。这个备份里头,你如果把它拆开了,有一部分——或者说叫很大一部分吧——就是微信聊天记录。这一块也有人专门做了工具,说我来帮你把这个文件拆开了,我把微信聊天记录给你找出来。这个也被投诉了。

第五种:数据清理和分析类

像我们以前就是做清理大师嘛,就是做这种清理工具的。那你像微信这么多聊天记录里头,到底哪个能删、哪个不能删?我们是会有一套的办法去分析,说哪个数据是比较旧了,哪些是附件可以让它失效把它删掉,哪个是这个联系人的头像可以把它删掉。

你就想吧,你如果把联系人头像删了,会造成什么样的问题?如果这人你再也不见了也无所谓;如果你下次又需要跟这哥们聊天了,我们需要再去消耗你的流量,重新向微信服务器去申请这个头像去。你如果要清理微信聊天记录的话,首先要分析微信聊天记录的结构,哪些文件到底是存的什么东西,然后才能去删嘛。这一部分也通通都被腾讯投诉删库了。

就刚才我们讲的这些项目,大家听名字就能知道,基本上都是两用项目。它是有正规用途的,不是上来说我一定要窃取你的信息。

DMCA 1201 条款的典型案例

给大家举几个典型的数字千年版权法案1201条款的案例吧。

  • YouTube-dl (YouTube download):这个项目也被投诉过。它实际上是干嘛?就是从YouTube你拿链接以后,它把你这个视频给你down下来,离线下载到本地。这个肯定是违反了YouTube的使用规则的,这没什么好说的。它是谁投诉去了?美国唱片业协会跑去投诉去了。这个项目在下架之后,经过整改又重新上架了。
  • 任天堂破解程序:有人把怎么去破解Switch那个程序上传到DISCORD上去了。这个项目被任天堂投诉了以后,全部下架,没有再恢复。

GitHub主要的判断标准是绕过限制的这个技术手段是否被充分的证明了。说你是不是真的绕过这个技术手段了,你一定要把这个过程写的很清楚。

YouTube-dl的是通过了整改,它原来是在YouTube-dl那个源代码里头有一个测试用例……现在他把这测试用例改了,说我们就不再给大家演示这东西了,这个东西具体能干什么自己去猜去。它实际上功能都没有任何修改,用户依然可以自行使用去下载那些有版权的内容。只要是做到这一步,GitHub就允许它重新上架了。

为什么选在这个时间点?

腾讯这次的投诉还是非常有效果的,大批的仓库已经被封闭了。还有一些仓库是自主关闭的,就是没有等通知自己就把它删掉了,估计腾讯在国内也找到他们了。

这些两用技术——可以做好事也可以做坏事的技术,在政策里头GitHub明确表示:允许双用途内容与安全研究,默认善意,只有在广泛正在发生的滥用时才可以限制访问。腾讯就证明了,说这些仓库正在被大规模的分支(有一些仓库可能有上百个分支),这一次GitHub就给它处理掉了。

大家有没有想过,为什么现在这样的一个时间点,腾讯就跑出来折腾?腾讯是1月8号去投诉的,刚刚过完元旦。大家是不是最近在玩一个很有趣的游戏?这个游戏叫做“用微信聊天记录生成年度报告,然后再把这些微信聊天记录喂给AI做总结”。很多人都在玩这个,因为我已经在微信的朋友圈里头看到一堆人在晒了,你看我去年都聊了这些人,我跟谁谁谁关系怎么样。

腾讯肯定不希望你去做这个事。腾讯认为,所有的微信聊天记录都是他的,他要拿这东西去训练大模型,去做各种事情,你是不能把它拿出来的。

腾讯其实从去年就在尝试投诉,但是去年GitHub没理他。为什么?因为去年腾讯走的不是数字千年版权法,它走的是隐私保护。他认为说这些人侵犯了用户的隐私,GitHub就没有理他。本来这些微信聊天记录是腾讯自己视为禁脔,准备拿去训练大语言模型的,被导出去,那真的是叔可忍婶不可忍。1月8号就引用了数字千年版权法案再来了一次,这一次终于好使了。

“南山必胜客”的往事

腾讯历史上其实干过一些类似的事情,我不知道还有没有人记得。

  • 珊瑚虫QQ:这个版本实际上就是第三方写的,调用腾讯的各种API,给腾讯做了一个非常简洁的QQ版本,没有广告非常清爽。腾讯处理的方式就直接起诉,把这哥们罚了120万(2008年干的活),而且判了三年有期徒刑。
  • 微信群控软件:也是被腾讯起诉,被罚了260万。
  • 自动抢红包程序:有些人说我做个钩子在里边干嘛?就是自动抢红包,发现哪个群里有红包我自己就进去抢去——这个是被罚了475万。

腾讯只要发现有人敢在他自己的地盘里干坏事,他就一定会冲上来起诉你,没有什么好商量的。南山必胜客在这种案子里面还是无往而不利的。

后续这件事情会怎么发展?开发者有10-14天的时间可以提起抗辩。目前还不清楚是否已经有开发者去提起抗辩了,大概率没有。即使有的话,抗辩成功的可能性也很小。

腾讯是出于好心吗?黑灰产的真相

腾讯这一次到底是不是出于好心?别每次腾讯干点什么事咱就骂他。

首先要讲,微信上面的黑灰产还是很猖獗的。为什么?原因很简单,第一个是用户量巨大,功能非常复杂,超级APP嘛,从头到脚没有什么东西它是不干的,里头还有支付能力,里边是有钱的。所以大量的手机卡号注册的这种假微信账号,都是在机器人程序的控制下干着活。

其实真正的黑灰产,有可能会用这些开源库作为基础,但是一定不是在开源库的上面就直接用的,他们一定是有自己的私有的代码库。但是这些黑灰产是不是使用了这些开源库,你是没有办法去证明的。真正的黑灰产代码,绝对不会存在这些公开的代码仓库里边。

对于真正的黑灰产,腾讯其实也一直在努力进行防护,只是效果还有待观察,可能还要再等一等看。至少目前为止吧,在微信里边、在QQ里边,上当受骗的人还是每天都在产生。

数据主权之争:平台方的核心利益

这次腾讯干的活,主要还是面向用户聊天记录进行主权宣誓。微信怎么能这么坏?明明是我的聊天记录,凭什么你替我去维权,还把我自己用的开开心心的这种微信聊天记录备份工具给我封掉了?

这个先别急着骂。我们在X上发的推文是不是属于我的,还是属于马斯克的?我们在Reddit里头发的帖子,到底是属于谁的?大家想一想,他们是直接封闭了原来免费开放的API,然后开始去卖数据去了。

  • Reddit直接把用户数据卖给谷歌、卖给OpenAI了。
  • X直接把自己卖给xAI了。xAI之所以能发展这么快,就是因为有大量X上的数据在帮助它做训练。

所以所有的平台都认为这些数据是属于他们的,不光是微信这样,包括X和Reddit都是这么干的。AI时代,数据主权一定是平台方争夺的核心利益。

这里边比较奇葩的是谁?是谷歌。自己基本上不出来投诉,即使是那个广告拦截插件,谷歌会出来呼吁大家不要上广告拦截插件,但是他绝对不去投诉这些广告拦截插件。反正谷歌说你们这些事情,我就认为都是两用的技术,你们都在用它做好事就完了,我就不管你了。

总结

最后总结一下吧。元旦过后,大家玩微信聊天记录统计玩的正开心的时候,腾讯向GitHub投诉了,有开源项目绕过了腾讯的技术壁垒,窃取了受保护的内容。他引用了千年数字版权法的1201条款(叫反规避条款),要把他们都干掉。GitHub就从善如流了,4,195个仓库被封闭。

AI时代,聊天记录这种数字资产是任何平台都不会放弃的。

好,这个故事就跟大家讲到这里。感谢大家收听,请帮忙点赞、点小铃铛,参加DISCORD讨论群。也欢迎有兴趣、有能力的朋友加入我们的付费频道。再见。


背景图片

他、她、㐅也、男也……

作者 fivestone
2025年11月25日 13:23

在 2025.9.9 发布的新版国际统一字符编码 Unicode 17.0 里,新增了 4803 个字符,出现了汉字的「㐅也」和「男也」,这下人称代词齐了~


追踪这两个新字被提交到 Unicode 的过程。这一批新字,在 2024.6.26 被正式提交(Proposal on new CJK Unified Ideographs Extension for IRG WS2021),而早在 2021 年,就已经出现在表意文字研究小组(Ideographic Research Group,IRG)的讨论区 WS2021 里。从上面的 Proposal 可以直接点击进入每个字的讨论页面。

提案序号UK 编号Unicode 编号
㐅也00029UK-20538U+323BF
男也02584UK-20227U+32C3C

从讨论过程和提交的字源证据中,可以看出,提交「㐅也」和「男也」的,大概不是同一批学者。「男也」是对新文化运动中涌现出的文字的拾遗补缺;而「㐅也」则是专门为了非二元性别而造出来的。

男也:

众所周知,(女也,她)是刘半农大力推出来的。早在 1918 年,周作人就在《新青年》上聊过,刘半农想要造一个「她」来翻译 she。1920 年,刘半农发表了《“她”字问题》,和脍炙人口的《教我如何不想她》,代表着女性代词「她」被广泛接受。

这场关于女性代词的讨论,在当时影响很大。不难想象,有了「女也」之后,就有人想要有「男也」,而且,是打着「专门提升女性地位,是对男性不公平」的旗号。提交的最早的关于「男也」的字源证据,是 1922.9.14 《现代妇女》的稿件。文章里主要谈的是:有了专门的女校之后,很多男人觉得不公平,认为被女性抢占了教育资源。然后顺便提到:

某报上有位先生,做了篇文章,中间用了许多『男也』字,累铸字房的工人忙得汗如雨下。——据说是替『她』字复仇的。

后来也有一些看起来没那么男权味道的讨论,在区分「女也、男也」的同时,还有「子也、牛也」……甚至出现在 1935 年的《初中精讀國文範程》(潘尊行編著)。但后来为什么只有「女他」成为了常用字,就不得而知了。

㐅也:

「㐅也」的提交者是英国汉学家 Andrew C. West(魏安)(1960-2025),今年 7 月刚刚去世。最早关于「㐅也」的字源证据,是 2019.2 香港的《性别空间 2018 年度报告》。

「㐅也」并不是从久远的文献中翻出来的,而是根据现代需要造出来的全新的字,这在 Unicode 的编码中很少见。在提交页面上,也有过一些讨论,譬如这个字是应用于跨性别群体、还是更广泛的非二元性别群体;以及「㐅」会不会让人感觉到「非人」的贬义。但都没有太大的阻碍。反对者王谢杨在 2011 年刚出草案时,就在知乎上吐槽过这是否算政治正确需要再缓一缓,但正式页面的讨论直到 2023 年才出现。


那么,如何输入这些新字呢?从字形被加入 Unicode 编码,到这个编码出现在各种常用字体字库,乃至出现在常用的中文输入法里,用纯文本发出去直接被对方看到,中间还有很长的过程。

想要尝新的话,「字雲 Jigmo」和「全宋體」都已经做好了 Unicode 17 新增的这些汉字(后者似乎有一些版权问题)。 下载安装字体后,就可以在各种文本或图片编辑器里使用、打印或者截屏输出了。

如何输入 Unicode 字符?在微软 Office 里,可以输入 Unicode 编码(譬如 32c3c)然后在末尾按下(Alt + x);也可以直接复制下面的乱码文字。

「男也」=「𲰼」
「㐅也」=「𲎿」

HeoAwards2025:年度我喜欢的博主

2025年11月4日 14:18
这篇文章介绍了HeoAwards年度推荐博主活动,作者以设计师视角从近千个友链中精选优秀网站,旨在让更多小众但出色的站点被发现并互相学习。推荐的博客如青灯暮雨、CWorld、亦小封、云心怀鹤、CHACAT、kzhik、TEMPLUM.CN、皮普的数字花园、阿杰Jack、唯知笔记、莱姆Lime与手里有只毛毛虫等,都以极简美学、独特交互和深度思考体现设计的温度与理性。HeoAwards强调克制、平衡与原创精神,是一次对网页设计与独立创作的年度致敬。

Nisl pretium fusce id velit

作者 Yawata
2023年7月30日 15:51

Nisl pretium fusce id velit ut tortor pretium viverra suspendisse. Urna id volutpat lacus laoreet non. Dictum fusce ut placerat orci nulla pellentesque dignissim. Feugiat nisl pretium fusce id velit ut tortor pretium. Ut lectus arcu bibendum at varius vel pharetra. Sit amet justo donec enim diam vulputate ut. At quis risus sed vulputate. Semper eget duis at tellus at urna. In nulla posuere sollicitudin aliquam ultrices sagittis orci a. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque. Molestie at elementum eu facilisis sed odio morbi. Tellus cras adipiscing enim eu turpis egestas pretium. Tristique magna sit amet purus gravida. Libero id faucibus nisl tincidunt eget nullam non nisi. Urna molestie at elementum eu facilisis. Amet luctus venenatis lectus magna fringilla urna porttitor rhoncus dolor. Sed pulvinar proin gravida hendrerit lectus a. Donec et odio pellentesque diam. Mattis nunc sed blandit libero volutpat. Velit euismod in pellentesque massa placerat duis ultricies.

Nisl pretium fusce id velit最先出现在Moby

Jazz guitar foundations

作者 John Chou
2021年8月22日 21:55

Note of preparatory courses of Cai Jian (蔡剑) jazz guitar lessons by Qihao Chen (陈启豪).

Course 1

Four stages of practice:

  1. Learn the thing from unknown to known
  2. Get familiar with it on the instrument
  3. Apply it to your playing like melodic sequence
  4. Internalization

The first step of learning jazz guitar

Know every note of strings and frets on the standard tuning guitar.

  • CAGED system
    • Think about the positions on fretboard corresponding to the note invervals
    • Playing a scale can reflect the sequence of intervals
  • 3NPS (3 Notes Per String)

Chord

Two important factors:

  • Root note
  • Type of chord

Think of the C major chord by harmonizing C note in C major scale, so the other notes in the scale with third intervals are E and G. Same thing to the other notes or scales, we have these common chords:

  • Triads: major (1, 3, 5), minor (1, b3, 5), augmented (1, 3, #5), diminished (1, b3, b5)
  • 7th chords: major (1, 3, 5, 7), dominant (1, 3, 5, b7), minor (1, b3, 5, b7), half diminished (1, b3, b5, b7), diminished (1, b3, b5, bb7), minor major (1, b3, 5, 7), augmented major (1, 3, #5, 7)

Figure out the root position of chords

  1. Know the members of chord due to its type
  2. Find the root notes on 4th to 6th strings
  3. Find the position of other notes due to the intervals

In this way we can infer 5 common patterns (R, 5, 7, 3 and R, 7, 3, 5) by CAGED system of each type of chords.

Chord-scale system

The chord is equal to the scale and vice versa. Think that a heptatonic scale (like diatonic scale) is consist of 4 notes of the 7th chord which the root note is harmonized with other 3 extensions. In the other hand, 4 notes determine the type of chord, and 3 extensions determine the type of scale. Like playing a maj7 could be Ionion or Lydian mode scales, plus a #4 extension makes it a Lydian.

Rhythm

  • Beat: the unit of time for music, BPM (Beats Per Minute)
  • Metre: the regularly recurring patterns and accents such as bars and beats
  • Rhythm: the combination of beat and metre over time

Homeworks

  1. C major scale on CAGED system:
    • Cover all notes of 5 positions
    • Start and end from other notes instead of the root note
    • Various scale patterns
  2. Find the note position due to interval
    • Imagine you have two pairs of cards, one pair are ascending and descending order cards, another one are interval cards like minor 2nd, major 2nd, minor 3rd, …, etc
    • Pick the root note and each one card from two pairs like F on 6th string, ascending and perfect 5th
    • Find the the ascending perfect 5th note of F on 6th string

Tips

  • Try to think faster before playing.
  • Inversion of interval of two notes, 9 = perfect 4th and perfect 5th = major 3rd and minor 6th
  • Maybe you can try this mini app Fingerboard mate

Course 2

Modes

Older than natural major/minor scales.

Tonic relative to major scaleNameInterval sequenceTonic 7th chord
INatural major scale, Ionian mode1, 2, 3, 4, 5, 6, 7△7
IIDorian mode1, 2, b3, 4, 5, 6, b7-7
IIIPhrygian mode1, b2, b3, 4, 5, b6, b7-7
IVLydian mode1, 2, 3, #4, 5, 6, 7△7
VMixolydian mode1, 2, 3, 4, 5, 6, b7dom7
VINatural minor scale, Aeolian mode1, 2, b3, 4, 5, b6, b7-7
VIILocrian mode1, b2, b3, 4, b5, b6, b7-7b5

C major scale we practiced before has same notes to the D dorian, E phrygian, F lydian, G mixolydian, A aeolian and B locrian.

Practice hints with fifth circle

  • Start from dorian and mixolydian modes which are ofren used for minor and dominant chords
  • Change root note and practice with corresponding interval sequence on C major scale on CAGED system
  • Modulation: play each key along with fifth circle on one position area of CAGED system
  • Write down the notes of major scale, modes name and corresponding tonic chords to help remembering
  • Play tonic chord before and after scale/mode
  • Practice root position for one kind of chords along with fifth circle on one position area of CAGED system, like play major chords in 12 keys on C position then go to other positions, then change to minor chords, dominant chords…

Subdivision

Dividing the beat into smaller units. Swing 8th are perfoming by one 1/3 triplets and another 2/3 triplets, counting triplets beats in mind.

Comping

Providing background like chords, timing, etc to make improvised solo or meldoy lines a complete work. It also has lots of possibilities as same as solo to create or renew the song. Recommend the guitarist Freddie Green to know more.

Homeworks

  1. Know well about the name and interval sequence of 7 modes
    • Random root note with random mode to practice
    • Play swing 8th
  2. Proficient in playing major II-V-I chords in each key
    • Random root note
    • Play swing 4th (mute the third beat in triplets)

Course 3

Minor II-V-I

In the natural minor scale (1, 2, b3, 4, 5, b6, b7), the tension can’t be resolved due to both V and I are minor chords. Thus leverage the harmonic minor scale (1, 2, b3, 4, 5, b6, 7) to make V to be dominant chord, but also keep the II and I chords in natural minor scale to construct the minor II-V-I.

Comparing to the V in major scale (1, 2, 3, 4, 5, 6, b7), the V in harmonic minor scale (1, b2, 3, 4, 5, b6, 7) has b9 and b13 notes which is called altered. Typically, a dominant seventh chord is considered altered if either or both the 5th or 9th are chromatically raised or lowered (#9 or b9 and #11 or b13).

In result, the minor II-V-I is m7b5-dom7alt-min7. You can also change the I to minMaj7 if you prefer harmonic minor scale.

Phrygian dominant mode

There are also 7 modes based on harmonic minor scale, the most common one is the 5th mode phrygian dominant. When you see a G13 chord, it must comes from a major scale. And when you see a dom7b9, you can infer that it comes from the V in minor scale, then you can play phrygian dominant.

Moreover, the basic patterns to play minor II-V-I are locrian for minor II, phrygian dominant for minor V and aeolian or dorian for minor I.

Avoid note

Avoid note will change the functionality of chords.

  • For major and dominant chords, the avoid note is 4th diatonic scale step (11), the available extensions are 9, #11, 13.
  • For minors chords, the avoid note is 6th scale step (13), the available extensions are 9, 11. There is an exception, it can work if the minor chord acts as dominant function. For instance, replace V dominant by IV minor and the progression turns to be IV major, IV minor and I major, sounds great.

Avoid notes for modes of the C major scale:

Scale degreeChordModeAvoid noteAvailable tensions
1Cmaj7IonianFourth scale step, F9, 13
2Dm7DorianSixth scale step, B9, 11
3Em7PhrygianSecond and sixth scale steps, F and C11
4Fmaj7LydianNo avoid note9, ♯11, 13
5G7MixolydianFourth scale step, C9, 13
6Am7AeolianSixth scale step, F9, 11
7Bø7LocrianSecond scale step, C11, ♭13

Steps to learn a standard

  1. Listen multiple versions of the song with lead sheet, figure out the form of the song.
  2. Practice the melody and chords of the song.
  3. Practice scales and arpeggios through the chords.
  4. Improvisation. This a really comprehensive topic, try to find the 3rd notes of every chords at first.

Homeworks

  1. Harmonic minor scales on CAGED system with 5th dominant 7th chord, for example A harmonic minor scale with E7 on 5 positions.
  2. II-V-I progression of relative keys. For C major and A minor keys, the progression is Dm7-G7-C-Bm7b5-E7Alt-Am7. Try chord progression in other keys as well as arpeggios.

Course 4

Melodic minor scale

  • The ascending melodic minor scale, aka jazz minor scale: 1, 2, ♭3, 4, 5, 6, 7
  • The descending melodic minor scale: 1, 2, ♭3, 4, 5, ♭6, ♭7

Modes of the ascending melodic minor scale:

ModeNameAssociated chords
IAscending melodic minorC minor major 7 (9, 11, 13) or C minor 6 chords (functions as i minor)
IIPhrygian ♮6, Dorian ♭2, Assyrian, or PhrygidorianD7sus (♭9, ♯9, 13) chord, with ♭2 as a non-chord tone producing a minor ninth
IIILydian augmented or Lydian ♯5E♭ major 7♯5 (9, #11) chord (functions as a III+)
IVLydian dominant, Lydian ♭7, Acoustic scale, Mixolydian ♯4, Overtone, or LydomyxianF7 (9, ♯11, 13) chord (functions as a dominant, secondary, or substitute dominant)
VMixolydian ♭6, Melodic major, fifth mode of Melodic minor, Hindu, or MyxaeolianG7 (9, ♭13) chord (functions as a dominant with ♭13 as a non-chord tone or the fifth avoided in the chord voicing as they produce a minor ninth)
VILocrian ♮2, Half-diminished, or AeolocrianA minor 7♭5 (9, 11, ♭13) (functions as a ii chord in the fifth mode of melodic minor)
VIISuper Locrian, Altered dominant scale, or altered scaleB7 (♯ or ♭9, ♯11, ♭13) chord (functions as a dominant with the fifth of the chord replaced by ♯11 or ♭13, may also be used to harmonize a vii7♭5 chord in melodic minor)

Tritone substitution

If two chords share the same 3rd and 7th notes, they will have similar sound thus can replace each other. For example, we can play IIm7-bII7-I△7 instead of IIm7-V7-I△7 to make bassline changing smoothly.

Lydian dominant is the most important mode of melodic scale, the only difference with mixolydian mode is #4 note. One common scenario to apply this mode is with tritone substitution, an approach to help finding the positions on fretboard quickly. If you want to play the V dominant altered scale on V7 chord, it’s exactly the bII lydian dominant scale on bII7.

Homework

Melodic minor scales on CAGED system with related tonic chords.

References

音乐基础速查笔记

作者 John Chou
2021年7月18日 16:47

和弦

七和弦

和弦英文名音程关系标记(以C和弦为例)
大七和弦Major seventh chord1、3、5、7Cmajor7、Cmaj7、Cma7、C△7
增大七和弦Augmented major seventh chord1、3、#5、7Cmaj7#5、C△7#5
小七和弦Minor seventh chord1、b3、5、b7Cminor7、Cmin7、Cmi7、Cm7、C-7
属七和弦Dominant seventh chord1、3、5、b7Cdominat7、Cdom7、C7
半减七和弦Half-diminished seventh chord1、b3、b5、b7Cm7b5、C-7b5、Cφ7
减七和弦Diminished seventh chord1、b3、b5、bb7Cdimish7、Cdim7、Co7
小大七和弦Minor major seventh chord1、b3、5、7CminMaj7、CmMaj7、CmM7
变化属七和弦Alt chord包含变化延伸音的属七和弦

斜线与转位和弦

  • 斜线和弦(Slash chord):将和弦原有的根音换成其他音,如 Dm/G 表示将 Dm 和弦的根音换成 G
  • 转位和弦(Chord Inversions):当和弦最低音为根音时称为原位和弦,最低音为其他构成音时称为转位和弦

密集与开放排列

  • 密集排列和弦(Close position chord):和弦音的排列从最低音到最高音不超过一个八度
  • 开放排列和弦(Open position chord):和弦音的排列从最低音到最高音超过一个八度

Drop和弦

  • Drop2 chord:将密集排列七和弦第二高音降低一个八度
  • Drop3 chord:将密集排列七和弦第三高音降低一个八度
  • Drop2&3 chord:将密集排列七和弦第二、三高音降低一个八度
  • Drop2&4 chord:将密集排列七和弦第二、四高音降低一个八度

251进行

  • 大调 251 进行:大调顺阶和弦的二级、五级和一级的和弦进行,如 C 大调的 251 进行为 Dm7、G7、Cmaj7
  • 小调 251 进行:爵士乐小调 251 即兴中,5 级和弦选择属和弦而非顺阶的小和弦,如 C 小调的 251 进行为 Dm7b5、G7、Cm7

重属和弦与三全音替代

  • 重(次)属和弦(Secondary dominant chord):解决到主和弦以外的其他调内和弦(半减七、减七和弦除外)的属和弦
  • 三全音替代(Tritone substitution):使用距离原本属和弦根音三全音位置的属和弦替代

和弦琶音、延伸音

  • 和弦琶音(Arpeggio):由和弦内音组成的一串音,通常用于即兴中构建乐句
  • 和弦延伸音(Tension):非和弦基础部分构成的音,为和弦增添了额外的色彩

音阶

自然大小调

音阶英文名音程关系
自然大调(I级)Natural major scale, Ionian mode1、2、3、4、5、6、7
大调II级调式Dorian mode1、2、b3、4、5、6、b7
大调III级调式Phrygian mode1、b2、b3、4、5、b6、b7
大调IV级调式Lydian mode1、2、3、#4、5、6、7
大调V级调式Mixolydian mode1、2、3、4、5、6、b7
自然小调、自然大调VI级Natural minor scale, Aeolian mode1、2、b3、4、5、b6、b7
大调VII级调式Locrian mode1、b2、b3、4、b5、b6、b7

和声小调

音阶英文名音程关系适用和弦
和声小调(I级)Harmonic minor1、2、b3、4、5、b6、7minMaj7
小调II级调式Locrian 61、b2、b3、4、b5、6、b7min7b5
小调III级调式Ionian augmented/#51、2、3、4、#5、6、7maj7#5
小调IV级调式Dorian #41、2、b3、#4、5、6、b7min7
小调V级调式Phrygian dominant1、b2、3、4、5、b6、b7dom7, susb9
小调VI级调式Lydian #21、#2、3、#4、5、6、7maj7
小调VII级调式Super locrian b71、b2、b3、b4、b5、b6、bb7dim7

旋律小调

TBC…

其他常用音阶

音阶英文名音程关系
大调五声音阶Major pentatonic scale1、2、3、5、6
小调五声音阶Minor pentatonic scale1、b3、4、5、b7
大调布鲁斯音阶Major blues scale1、2、b3、3、5、6
小调布鲁斯音阶Minor blues scale1、b3、4、#4、5、b7
全半减音阶Whole half diminished scale1、2、b3、4、b5、#5、6、7
半全减音阶Half whole diminished scale1、b9、#9、3、#11、5、13、b7
全音阶Whole tone scale1、2、3、#4、#5、#6
增音阶Augmented scale1、b3、3、5、#5、7
Bebop dorian1、2、b3、3、4、5、6、b7
Bebop dominant1、2、3、4、5、6、b7、7
Bebop major1、2、3、4、5、#5、6、7
Bebop melodic minor1、2、b3、4、5、#5、6、7

音程推导

intervals-calculation-1

intervals-calculation-2

小工具(一)

作者 dfine
2019年8月19日 01:57

太久没回来了,其实很多次想写但是无法静下心来,思绪如开始停更的三月里乱飞的柳絮,总感觉经历了很多,但却没有力气吐出一个字。终于处暑,昔时聚在一起的人们也已经走得差不多了,终于也想起了,该随便写点什么了。

就推荐一些小工具吧,这段时间发现的,感觉挺有意思的。以后也不知道会不会继续,先假设是个连续剧吧,写完拖更的那种。

FlashCards

一个类似单词卡的小工具,也可以用来放代码,示例仓库FlashCards
方法很简单,直接用Docker启动,可以放在自己的电脑上,也可以放在自己的服务器上,挂一个端口,然后可以Web端远程访问。另外,单词数据可以直接上传Github仓库,环境不需要。
这样随时随地,就是一个私人的Note?
搭好之后访问大概是这样:

终端美化LSD

主要功能是将Linux下的ls命令输出结果美化一下,不同的文件类型会有不同的图标,不过目前颜色还不支持修改。大概效果如下:

仓库地址在此
不过需要安装NerdFonts

Tree2dotx

就是将树形结构描述转化为DOT描述。 DOT语言是一种文本图形描述语言,可用于画有向无向图、流程图,语法比较简单,网上一搜就有,这里不做介绍。
比如将当前目录下的文件转成关系图,使用tree2dotx工具,命令为:

1
tree | tree2dotx > out.dot

Graphviz

Graphviz(Graph Visualization Software)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,官网在这,可以从DOT文件生成图像,常见的有png/gif/svg等。
如果将之前的树形目录保存为关系图,只需要继续将上面的命令重定向即可。

1
tree | tree2dotx | dot -Tpng -o list.png

保存为list.png文件,大致就是这个样子:

Gprof

一个代码性能分析工具,结合Gdb可以很方便的分析所写的代码。
主要方式是在使用gdb编译时加上-pg参数,然后正常运行程序,最后会出现一个gmon.out的文件,里面就是各个函数的信息。
结合Graphviz,可以得到函数关系调用图。

1
gprof -b ./test gmon.out | gprof2dot | dot -Tpng -o test.png

其中gprof2dot工具可以通过pip安装。
最后结果如下:


里面有各个函数调用次数、运行时间等情况,保存为svg也可以在浏览器中看。

EMMMM, To be continued…

❌
❌