惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
Y
Y Combinator Blog
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
N
News and Events Feed by Topic
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
博客园 - 叶小钗
B
Blog
Vercel News
Vercel News
T
Tenable Blog
T
The Exploit Database - CXSecurity.com
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
Engineering at Meta
Engineering at Meta
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes
L
LangChain Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Check Point Blog
A
About on SuperTechFans
W
WeLiveSecurity
The GitHub Blog
The GitHub Blog

祝融说。

抱朴守缺。 肩吾 PinConsole Terminal Hole 共识并不平均,但是基本上均衡。 权力是共识切片的曲率。 存在不是「是什么」,而是一系列极小的,从分歧到共识再到分歧的,连续的构建过程。 分歧实际上是对共识往哪个方向延伸的拉力。 分歧是尚未落实的实在,是可能性基底中尚未被锁定的在共识中相互牵引的可用余量。 权力从来不是中立的,它是带有倾向性的「牵扯力」。 过程即完备,容错即自由。 第10章 逆向投喂:用真实数据让AI做出精准诊断 第11章 测试电网:用刚性指标代替肉眼审查 第12章 定期“垃圾回收”:别让系统背负AI制造的债务 第13章 防退化契约:确保每一次修改都是在进步 第14章 全生命周期演练:从零开始用“有效约束”交付一个项目 第15章 随身工具包:即查即用的约束指令库 第1章 这不是结对编程,这是“人机共生” 第2章 你必须警惕的三个陷阱 第3章 把话说死:用 Markdown 建立 AI 的“单源真相” 第4章 负空间设计:先规定“不准做什么”,再让它写代码 第5章 模块化解耦:让AI每次只面对一个小问题 第6章 上下文断头台:善用 `/clear` 斩断错误蔓延 第7章 剥夺执行权:强制 AI 像资深工程师一样“慢思考” 第8章 角色锁定:用一句话给AI戴上“思考帽” 第9章 遥测驱动:帮AI长出“千里眼”和“顺风耳” 结语:成为系统牧马人,而不是代码搬运工 第八章 金融与科技的“禁手”:现代战争的底层收敛 第二章 认知锚点:心理战中的“强制步” 第九章 历史的单行道:那些被剥夺国运的时刻 第六章 消费主义的迷宫:在货架上剥夺选择 第七章 战略逼压:没有硝烟的“切香肠战术” 第三章 构造绝杀:逻辑闭环的艺术 第十二章 绝对零度下的生机:成为“不可测”的人 第十一章 掀翻棋盘:非对称竞争与正交化打击 第十章 识破隐形控制:第一时间嗅到危险 第四章 标准的暴政:打造“不得不”的生态 第五章 锁死阀门:关系链与供应链的囚笼 第一章 降熵法则:时空维度的隐蔽控制 结语:愿你在这个被设定的世界里,永远握有掀桌的权力。 引言:自由意志的幻觉 项羽 当前的AI工程化本质上是受限于上下文长度而采用的「以提示词约束去置换确定性」的一种妥协。 即时反应是一种不假思索,它是观念通过最简单、轻易、高效的路径寻求表达。 青衫 第九章:估值的坐标:建立“内在记分牌” 第六章:资产重估的艺术:从“硬实在”到“认知折价” 第七章:预期差交易:坍缩“概率波” 第十一章:内在博弈:克服‘评估异化’ 第十章:交易的算法:逆人性的“人之道” 第五章:空间套利:高能耗产业的跨境建构 结语:构建你的“财富多重宇宙” Code-Coder 第八章:效率革命:细分赛道的“降本增效” 第二章:评估权的博弈:商业模式的权力差序 第三章:去伪存真:穿透“符号泡沫” 第四章:能源共识:黑金的物理法则 第一章:宏观观察者:借势“国家共识” 前言:从“市场囚徒”到“清醒的观察者” Code-Ledge-X Code-Lint-X
huan(幻)
祝融 · 2026-06-25 · via 祝融说。

一个用 Go 编写的静态站点生成器,最初作为 zhurongshuo.com 的 Hugo 替代品而生,现已成长为一个 AI 友好、内置双语翻译流水线的通用 SSG。

huan 将 Markdown + 单个 YAML 配置 + Go 模板编译为静态网站,其输出可与 Hugo 逐字节对比验证(在参照站点上 99.7% 字节一致,SEO 与 AI 两个维度 0 差异)。它是一个零运行时依赖的单一二进制文件,使用与 Hugo 同源的 goldmark 引擎,将 CJK 内容视为一等公民,并把部署、发布、LLM 翻译都集成在同一个 CLI 中。

huan 是什么?

huan 是一个用 Go 编写的静态站点生成器。它最初的目标是完全替代 Hugo 来构建 zhurongshuo.com——并带有一条硬性要求:每一个 HTML、RSS、sitemap、搜索索引的字节都必须可复现、可与 Hugo 输出对比验证。在该等价目标基本达成后,huan 已扩展为一个 AI 优先的通用 SSG。

核心特征:

  • 单一二进制,零运行时依赖,冷启动快
  • 使用 goldmark 渲染 Markdown——与 Hugo 同一个库
  • 使用 huan.yaml 作为配置(YAML,而非 TOML)
  • CJK 友好:字数统计、标题 ID、摘要截断都能正确处理中文 / 日文 / 韩文,无需额外配置
  • 默认 AI 友好:内置 llms.txt、内容 API(/api/{section}.json)、每页 Markdown 镜像——为 LLM 爬虫和 AI 消费者而设计,而不仅是 SEO 爬虫
  • 开箱即用的双语能力:一套 i18n 构建系统将 .zh-cn/.en 边车文件渲染为完整的本地化站点,并内置一个翻译插件用本地 LLM 补齐缺口
  • 统一插件系统:基于能力(capability)的扩展——Deployer(Cloudflare)和 Translator(Qwen3)内置并共享同一个注册表
  • 自包含的发布与部署:huan release 跨平台打包,huan deploy 通过直连 API 发布到 Cloudflare,并支持 tag 推送触发 GitHub Actions 自动发版
  • 等同 hugo serve 的开发体验:HTTP 服务器 + fsnotify 文件监听 + LiveReload WebSocket,亚秒级浏览器刷新
  • 可对 Hugo 验证:一条 diff 流水线将 huan 输出与 Hugo 逐字节对比,并在三个维度(肉眼 / SEO / AI)上拦截回归

huan 不是 Hugo 的 drop-in 替换。模板迁移一次即可,此后由 huan 接管整个构建流水线。


为什么是 huan?

Hugo 很优秀,但对于单一站点的需求而言,它携带了大量用不上的表面积。huan 存在的理由:

  1. 把 SSG 精简到真正会上线的子集。 没有主题市场,没有 HTML/RSS/sitemap/search 之外的输出格式矩阵——只保留进入生产的部分。
  2. 把 CJK 内容当作一等公民。 hasCJKLanguage、字数统计、摘要长度、标题 ID 生成默认就考虑中文。
  3. 默认 AI 友好。 自动生成 llms.txt、JSON 内容 API、每页 Markdown 镜像,让 AI agent 和 LLM 爬虫获得干净、结构化的内容访问。
  4. 让双语站点成为构建期问题,而非手工苦差。 用一种语言写作,放入 .en.md 边车文件(手写或 LLM 生成),huan 即产出带 parity 审计的本地化站点。
  5. 保持对 Hugo 可验证。 diff 流水线(scripts/diff-build.sh)将 huan 输出与 Hugo 逐字节对比;2026/2032(99.7%)字节一致基线作为回归门禁被持续跟踪。
  6. 保持开发循环快速。 huan serve 原子重建(重建期间无 404),保存 Markdown 文件后约 1 秒内刷新浏览器。

功能特性

命令

命令用途
huan build构建站点到 publishDir
huan serve启动带文件监听 + LiveReload 的开发服务器
huan new <kind>/<path>archetypes/<kind>.md 脚手架内容(多 archetype)
huan sync gallery为新图片脚手架 content/gallery/<name>.md
huan toc为 books / practices / products 生成 TOC markdown
huan export导出内容为 CSV 归档(通过 i18n collator 复现 zh_CN 排序)
huan translate qwen3通过本地 Qwen3 LLM 将源 markdown 翻译为 .en.md 边车文件
huan translate status报告所有源文件的翻译状态(已缓存 / 过期 / 缺失)
huan translate audit对运行中的 serve 审计 zh/en parity 与逐页语言正确性
huan deploy cloudflare {pages,r2,worker}部署到 Cloudflare Pages / R2 / Workers
huan plugin {list,info}查看已注册的插件
huan release交叉编译 + 打包 + 校验和到 release/<version>/
huan version / env / config / list自省命令

huan serve 参数:

参数默认值说明
--port1313监听端口
--bind127.0.0.1绑定地址(支持 0.0.0.0::
-D / --buildDraftsfalse包含草稿内容
--disableLiveReloadfalse关闭浏览器自动刷新
--disableWatchfalse不监听文件变化
--debounce400ms文件变化防抖延迟

渲染流水线

  • Markdown:goldmark,unsafe: true + 可配置 typographer;标题 ID 与 Hugo 算法对齐(处理 CJK + 中文标点 + HTML 实体)
  • Shortcode:内置 audioimg;可扩展注册表
  • 模板:Go html/template,约 40 个 Hugo 兼容函数(urlizesafeHTMLmarkdownifyScratchpartialwheresortindexlen,以及数学/字符串/路径辅助函数等)
  • 分类:tags 与 categories,含列表页与每个 term 页
  • 分页:/page/N//page/1/ 重定向到 /
  • 输出:HTML、RSS(按 section / 按 taxonomy / 按 term)、sitemap.xmlsearch.json
  • AI 输出:llms.txt/api/{section}.json、每页 index.md 镜像
  • 压缩:通过 tdewolff/minify 压缩 HTML / CSS / JS / JSON / SVG / XML
  • canonifyURLs:将根相对 URL 后处理为绝对 URL
  • i18n:YAML 消息包 + 完整双语构建系统

开发服务器内部

  • 带自定义 404 的 HTTP 静态文件服务器
  • 递归 fsnotify 监听器,可配置防抖
  • LiveReload WebSocket hub,每客户端独立广播通道(慢客户端不阻塞)
  • 原子重建:先写入同级 staging 目录,再用 rename(2) 换入——重建期间继续服务旧内容,无 404
  • 串行化重建(atomic.Bool busy + pending 标志)——连续编辑合并为一次重建
  • 重建错误以 LiveReload alert 消息广播;开发服务器继续运行
  • 始终从临时目录服务;绝不触碰真实的 publishDir

快速开始

安装

从源码(目前推荐):

git clone https://github.com/iannil/huan.git
cd huan
go build -o huan ./cmd/huan

通过 go install

go install github.com/iannil/huan/cmd/huan@latest

从发布 tarball(无需 Go 工具链):

# 1. 从 /release/<version>/ 或 GitHub Releases 下载 huan_<version>_<os>_<arch>.tar.gz
# 2. 校验 checksum(可选但推荐):
shasum -a 256 -c huan_<version>_checksums.txt
# 3. 解压:
tar xzf huan_<version>_darwin_arm64.tar.gz   # 产出 ./huan、./LICENSE、./README*.md
# 4. 移入 PATH:
sudo mv huan /usr/local/bin/
huan version                                  # 确认:"huan <version> (<git sha>)"

Windows 用户:下载 huan_<version>_windows_amd64.zip 并解压 huan.exe

go install / go build 路径需要 Go 1.26+;预编译 tarball 无 Go 依赖。

最小 huan.yaml

baseURL: "https://example.com/"
title: "My Site"
languageCode: "zh-cn"
publishDir: "public"
paginate: 10
hasCJKLanguage: true
summaryLength: 120

markup:
  goldmark:
    renderer:
      unsafe: true
    extensions:
      typographer: false

内容布局

my-site/
├── huan.yaml
├── content/
│   ├── posts/
│   │   └── 2026/
│   │       └── 06/
│   │           └── hello.md       # → /posts/2026/06/hello/
│   │           └── hello.en.md    # → /en/posts/2026/06/hello/(可选边车)
│   └── _index.md                  # 首页
├── layouts/                       # Go html/templates
│   ├── _default/
│   │   ├── single.html
│   │   └── list.html
│   └── partials/
└── static/                        # 原样拷贝

构建与预览

# 构建到 publishDir(默认 ./public)
./huan build

# 启动开发服务器(默认 http://localhost:1313)
./huan serve

# 常见 serve 变体
./huan serve --port 8080 --bind 0.0.0.0 -D
./huan serve --disableLiveReload    # 无 WS,仅静态文件
./huan serve --disableWatch         # 文件变化时不重建

对 Hugo 验证(回归门禁)

./scripts/diff-build.sh             # 完整重建 + 与 Hugo 字节 diff
./scripts/diff-summary.sh           # 仅结构化报告
./scripts/diff-patterns.sh          # 按模式归类 diff

翻译与 i18n

  1. 写一次。 用源语言撰写内容(如 hello.md)。
  2. 加边车。 在旁边放一个 hello.en.md——手写,或由翻译插件生成。huan 会将其渲染到本地化的 URL 前缀下(如 /en/...)。
  3. 用 LLM 补缺口。 huan translate qwen3 遍历每个源文件,通过 Ollama HTTP API 调用本地 Qwen3 模型,写出 .en.md 边车。它是增量的(按 source-hash 缓存)、结构感知的(校验 markdown chunk 结构往返一致)、可观测的(--progress-every 在长任务中打印吞吐 + ETA)。
  4. 审计 parity。 huan translate audit 爬取运行中的 huan serve,枚举 zh 与 en sitemap,报告缺失/孤立边车以及逐页语言正确性(英文页里残留未翻译中文,或反之)。只读,绝不修改内容。
# 翻译所有新增或变更的内容(增量)
./huan translate qwen3

# 预览将翻译哪些文件,不调用 LLM
./huan translate qwen3 --dry-run

# 翻译单个文件,强制重跑
./huan translate qwen3 --file posts/2026/06/hello.md --force

# 报告已缓存 / 过期 / 缺失的翻译状态
./huan translate status

# 对运行中的开发服务器审计 zh/en parity
./huan serve &
./huan translate audit --fail      # 存在任何 parity/语言问题则非零退出

Translator 能力是统一插件系统的一部分,因此可在 internal/translate/<provider>/ 下新增其他 provider(云端 API、其他本地模型),无需触碰构建流水线。


项目结构

huan/
├── cmd/
   ├── huan/              # CLI 入口(main.go + 各命令文件)
   └── equiv-check/       # 等价检查辅助二进制
├── internal/
   ├── build/             # BuildSite 核心 + 原子换入
   ├── config/            # huan.yaml 解析
   ├── content/           # 内容加载 + tree + frontmatter
   ├── markdown/          # goldmark 流水线
   ├── shortcode/         # audio / img
   ├── template/          # html/template 加载 + funcmap
   ├── taxonomy/          # tags / categories
   ├── pagination/
   ├── output/            # writer + canonify + minify + AI 输出
   ├── i18n/              # 消息包 + collator + audit + langdetect
   ├── translate/         # Translator 能力 + qwen3 provider
   ├── plugin/            # 统一插件注册表
   ├── deploy/            # Deployer 能力 + cloudflare provider
   ├── release/           # 交叉编译 + 打包
   ├── equiv/             # Hugo 等价检查
   ├── observability/     # 结构化日志 / 追踪
   ├── version/           # 构建版本信息
   └── serve/             # HTTP 服务器 + 监听 + LiveReload
├── scripts/               # diff-build.sh + diff-summary.sh + diff-patterns.*
├── docs/                  # 见 docs/INDEX.md
├── memory/                # 项目记忆(MEMORY.md + 每日笔记)
├── huan.yaml              # 示例配置
├── go.mod / go.sum
└── CLAUDE.md              # 贡献者指南(中文)

许可证

MIT © 2026 iannil