博客

最新文章和资源

31 May 2026
HyperFrames-Gradle: 将 AsciiDoc 转换为 MP4 视频

Le plugin `hyperframes-gradle` transforme l'AsciiDoc en vidéo MP4 via HyperFrames. AsciidoctorJ porte le DSL de configuration. Le bridge Node.js est isolé derrière ProcessBuilder. Ce plugin comble le trou entre slides et vidéos standalone. Voici pourquoi il existe, comment il s'articule avec capsule-gradle, et ce qu'il apporte au pipeline de production de contenu.

18 May 2026
我的 LLM 消耗审计:SQLite、OpenCode、Ollama Cloud,以及我的专业订阅为何在全球市场掀起浪潮

我打开了 OpenCode 的 SQLite 数据库,以审计我在 73 天内的实际消费。26 亿 token,1 022 个会话,总 API 成本为 0.22 欧元。与 Anthropic Claude(超过 30 万美金)、OpenAI GPT、Groq、HuggingFace、Together AI 以及中国供应商进行了全面比较。结果:我每月 20 欧元的 Ollama Cloud Pro 订阅是全球市场上最划算的方案,包括对抗中国直供的产品。

14 May 2026
L'Architecture « 插件独立+消费者根 » : 为什么我的Gradle构建会重复?

一个克隆,一个 `./gradlew tasks`,您的 Gradle 插件即可运行。零配置,无需阅读 README。这是我在我的 6 个 foundry/public/ 插件上部署的架构:一个最小化的消费者根目录 + 一个自治的 `{name}-plugin/` 文件夹。为什么这种“表面重复”模式是 Gradle 插件开发中最高效的做法——具备原生的 dogfooding、构建隔离以及清晰的 DAG 契约。

12 May 2026
知识图谱作为推荐引擎:我是如何杀死按时间顺序的「相关文章」的

当前 cheroliv.com 上的“相关文章”只是最近发布的 4 篇文章。这是一个被三层推荐引擎纠正的语义误差:显式引用 (xref)、新兴本体 (NLP 聚类) 和时间回退。全部接入 graphify 的知识图谱,被 bakery 消费 — — engine 对这一切一无所知。

11 May 2026
比 Claude 和 GPT 高效 27 到 45 倍:一支由 23 个经过微调的 AI 专家组成的舰队如何碾压市场

效率系数为27倍至45倍,相较Claude、GPT等同类产品:一支由23个在我的工作区上微调的AI专家组成的团队如何碾压市场。架构、数据集、训练和完整部署。

08 May 2026
用于并行运行两个 Ollama Pro 实例的 Gradle Maison 插件

一个自制的 build.gradle.kts 用于通过 Gradle 任务控制两个 Ollama Pro 实例——启动、停止、登录、拉取模型以及健康检查。让基础设施由构建工具驱动。

08 May 2026
在同一台机器上使用 Docker 累积两个 Ollama Pro 订阅

Docker 允许在同一台机器上通过隔离身份密钥和网络端口来复制 Ollama Pro 订阅。以下是逐步操作方法。

07 May 2026
安装 Kitty 终端并将 Zsh 配置为 Xubuntu 下的默认 shell。

本文介绍了在 Ubuntu 上安装和配置 Kitty 终端的完整步骤。

06 May 2026
DGX Spark vs Cloud vs LLM 订阅 — 扼杀本地硬件梦想的经济基准

价格为 $4 699 的 DGX Spark,$20/月的 Ollama Pro,云端 $1.38/小时 的 H100——算下来很快。此基准测试比较了2026年可用的所有选项,以运行大语言模型,从推理到微调。结论:Spark 是奢侈品,而不是划算的工具。2026 年购买本地硬件的真实原因不是经济因素——而是政治因素。

04 May 2026
LLM治理矩阵 — 为什么您的AI安全始于树形结构

如果您的 AI 安全不依赖于提示词,而是依赖于文件系统呢?这份架构宣言定义了一个 4×4 矩阵——物理区域 × LLM 访问权限——它在机械上使秘密泄露、开源/闭源的混合以及将观点伪装成事实的发布成为不可能。无需编写提示词。无需记住规则。只有文件夹。

03 May 2026
OSS/CSS 细粒化 — 为什么我把 foundry/ 切成两半

foundry/` 将开源代码和私有代码混合在同一文件夹中。RAG 和知识图谱无法区分。解决方案?把这块功能区分成两部分——OSS/ 用于公众(Apache 2.0,免费索引),CSS/ 用于闭源(仅私有数据集)。不再需要让 LLM 小心,文件系统会为它处理。并且我趁机把 cheroliv.com 放回它本该所在的位置:在 office/sites/.

02 May 2026
自动化认识论分区 — 大语言模型如何保护我的心灵花园

STIMULUS 模式不仅仅是捕获原始想法并将它们稀释到工作区文档中。它增加了一层关键:LLM 负责将每条信息分类为 Vision(可在博客上发布)、Opinion(仅限私人圈子)或 Strategy(稀释受限)。这种自动化的认识论隔离正是使人能够在 0 圈自由思考而无需担心不适当发布的原因。

01 May 2026
我们的第一位雇员:数据集匿名器 — MVP0 试用期

在进行RAG、微调或SaaS之前,需要干净的数据。我们在试用期的第一位雇员——匿名化器——能够检测并清理多技术源(SQL、pgvector、ONNX、Graphify、JSON、YAML、AsciiDoc)中的PII。这就是MVP0。没有它,其余的要么非法,要么在技术上会退化。下面是这一模块如何将普遍问题转化为可市场化的产品。

01 May 2026
我们的第一位雇佣者:数据集匿名化工具 — MVP0 处于试用期

在进行 RAG、微调或 SaaS 之前,必须要有干净的数据。我们试用期的第一位员工 — — 匿名器 — — 在多技术源(SQL、pgvector、ONNX、Graphify、JSON、YAML、AsciiDoc)中检测并清理 PII。这就是 MVP0。没有它,其余的要么非法,要么在技术上受损。下面是说明这个模块如何将一个普遍问题转化为可销售产品的方法。

30 April 2026
开发者的秘密花园:空间本体如何在无需提示工程的情况下对齐LLM

如果对齐LLM的最佳方式不是提示,而是文件系统会怎样?我的工作区被组织成四个同心信任圆圈,从最私密到最公开。LLM不需要记住规则——它在每个文件路径上都能看到这些规则。以下是这种空间本体论如何使代理治理比一块文本规则更稳健。

29 April 2026
Supabase迁移到Firebase:在无后端的情况下将联系表单接入Firestore

我的联系表单已经在模拟环境中运行了数月。最初的 Supabase 方案被放弃,转而使用 Firebase。我讲述项目的创建、Firestore 的配置、提交 JavaScript 的重写、死代码的清理,以及这次迁移所体现的 “完成我们所开始的事” 心态。

28 April 2026
DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1 : 三款LLM接受Vibe Coding长上下文的考验

在三周的时间里,我在使用 Opencode 开发 Gradle 插件的会话中运行了三种主要模型。上下文 30K tokens,治理模式为 Eager/Lazy/Hot/Warm/Cold,进行重构任务、TDD 和架构设计。以下是存活下来的模型——以及其他模型为何失控的原因。

27 April 2026
代理上下文审计:当您自己的治理成为问题——以及如何在不失去任何东西的情况下修复它

在两篇关于代理上下文的结构化和备份的文章之后,我发现记录该方法的文件本身已经成为最大的 token 消耗者。对一个 627 行的 AGENT_MODUS_OPERANDI 进行逐段审计,识别重复项,并提供一种百科式拆分方案,既保持工程完整性,又不让上下文饱和。

26 April 2026
滑动窗口与寒潮:当代理上下文爆炸时,需在不丢失的情况下进行归档

经过几个月的 Opencode 会话后,治理文件激增。自动加载了 5200 行。我正在构想一种滑动窗口机制和 "vague froide identique" ,以维持轻量级活跃上下文而不丢失任何内容。

25 April 2026
当 Gradle 9、Docker 29 和 Testcontainers 自找麻烦时:调试 JHipster 构建

一次 `./gradlew build` 在连续的十一项错误中失败,从不存在的变量 `reportsDir` 到 Docker Engine 29 拒绝 `docker-java` 1.32 客户端。以下是针对在 Gradle 9、Java 21 和 Testcontainers 2.0.5 上的 JHipster 构建的完整调试日志。

24 April 2026
使用 AsciiDoc 管理 AI Agent:我的 Eager/Lazy 策略,旨在实现无上下文泄漏的 Opencode 会话

面对 AI 代理在会话之间出现的内容丢失(context leak)问题,我开发了一套基于 AsciiDoc 文件的手工治理策略。其核心原理是:一个自动加载的 Eager 仪表盘,一份按需调用的 Lazy 用户手册,以及一套不可或缺的会话结束流程。

22 April 2026
为什么 `serve` 显示了一个丑陋的网站,而 `publishSite` 完美无缺

我的 Gradle JBake 插件的 `serve` 任务显示了矩形按钮、难以辨认的文本以及部分缺失的 CSS,而 `publishSite` 则生成了完美的网站。根本原因:JBake 的 CLI 参数使用了错误的语法。以下是完整的诊断以及我如何修复它。

21 April 2026
OpenCode 和不完整的 PATH : 为什么您的工具不在代理的 shell 中

OpenCode 执行的非交互式 shell 不会加载 .zshrc,导致 agent 的 PATH 中缺失 SDKMAN、NVM、~/apps 和 pnpm。完整问题诊断、SDKMAN 与 NVM 行为对比,以及通过 .zshenv + 指向 ~/.nvm/current 的符号链接的最终解决方案。

19 April 2026
在 Gradle 工作流中集成 Graphify:一条命令实现从知识图谱到 PlantUML 图

Graphify 从您的代码库中提取知识图谱。Gradle PlantUML 插件将此图谱转换为确定性的 PlantUML 图表。完整流水线:pip install graphify → graphify . --no-viz → ./gradlew generateKnowledgeGraphDiagram → 在 Git 中进行版本管理的 PNG 图表。

19 April 2026
在 Gradle 工作流中集成 Graphify:一条命令实现从知识图谱到 PlantUML 图表

Graphify 从您的代码库中提取 Knowledge Graph。Gradle PlantUML 插件将该图谱转换为确定性的 PlantUML 图表。完整流水线:pip install graphify → graphify . --no-viz → ./gradlew generateKnowledgeGraphDiagram → PNG 图表已在 Git 中版本化。

18 April 2026
fg 命令的超级技巧:当 Ctrl+Z 拯救你的终端会话

你在终端里运行了一条卡住的命令吗?Ctrl+Z 可以暂停它,fg 可以恢复。了解 fg、bg 和 jobs 如何提升你的终端生产力。

17 April 2026
VS Code 在 Home 中:本地安装和无需 sudo 的字体自定义

在你的 Linux 主目录中安装 VS Code,以便在不使用 sudo 的情况下保持完全控制。然后自定义菜单和文件资源管理器的字体——这是一段充满困难的旅程,最终得到可读的 UI。

16 April 2026
将 Asciidoctor RevealJS 插件迁移到 buildSrc Kotlin : 对 Groovy API 进行逆向工程

如何将 AsciidoctorJRevealJSTask 任务的配置从根 buildscript 迁移到独立的 buildSrc Kotlin 插件,用其通过字节码内省发现的底层机制替换 Groovy DSL ruby { gems() }。

15 January 2026
JBake 架构作品集 - 愿景与用例

了解我如何在 Gradle 插件的测试中解决一系列复杂的 Mockito mock 问题,从错误 "Wanted but not invoked" 到连环的 "Unfinished Stubbing"。

14 January 2026
混合架构:两全其美,使用 Supabase 与 Spring Boot

将 Supabase 用于简单的 CRUD,将 Spring Boot 用于复杂的逻辑。务实的混合架构,可扩展且经济。

14 January 2026
混合架构:兼具 Supabase 与 Spring Boot 两者之长

结合 Supabase 实现简单的 CRUD,使用 Spring Boot 处理复杂逻辑。实用的混合架构,可扩展且经济。

15 November 2025
预加载的艺术:使用 JavaScript 和 CSS 消除主题的 “Flash”。

07 November 2025
Gradle 插件功能测试中的高效日志

完整指南:在Gradle插件的功能测试中使用SLF4J和Logback搭建健壮且独立的日志系统

01 November 2025
在 AsciiDoc 中显示彩色方块:实用指南

实用指南:如何在 AsciiDoc 中使用带有内联 HTML 和 CSS 的 pass:[] 宏嵌入颜色样本。兼容 JBake 和所有处理器。

20 October 2025
使用 Thymeleaf 对静态 JBake 网站进行国际化

使用 Thymeleaf 在 JBake 中实现国际化的完整指南:用于 UI 的消息文件,多语言文章的文件夹组织。

05 October 2025
在Ubuntu上安装并验证Tor浏览器

完整过程:在 Ubuntu 上下载、验证并启动 Tor Browser,并思考加密验证以及在 Tor 网络中进行道德和教育性导航。

27 September 2025
第5条:共享的 libs.versions.toml 的冒险

深入研究 Gradle 版本目录(libs.versions.toml)及其在复合构建中的共享方法——以我们在 site‑baker 插件中遇到的一个具体问题为例。

26 September 2025
第4条:Gradle配置缓存的陷阱

一次意外的调试冒险,让我们深入到Gradle配置缓存的细节。了解为什么我们的构建表现奇怪以及我们是如何解决问题的。

25 September 2025
文章 3:使用测试驱动开发(TDD)在 Gradle 插件中集成 Jackson 进行 YAML 解析

了解如何在Gradle插件中使用Jackson库将YAML配置文件解析为Kotlin对象,并在遵循测试驱动开发(TDD)方法的过程中进行集成。

24 September 2025
第二条:使用TDD方法开发Gradle插件

在本文中,我们将探讨如何使用测试驱动开发(TDD - Test-Driven Development)的方法为 Gradle 插件建立一个坚实的开发基础。

23 September 2025
文章 1 : 创建一个 Gradle 插件,从 A 到 Z,使用命令 `gradle init

使用标准任务 `init` 初始化 Gradle 插件项目的分步指南,了解生成的结构并运行首次构建命令。

22 September 2025
第 0 条:创建 Gradle 插件的环境设置

在编写我们的第一个插件之前,我们需要准备我们的机器。本指南将向您展示如何安装和配置必需的工具:一个JDK,IntelliJ IDEA,Gradle和JBake。

19 July 2025
CI/CD Python – 第三部分:使用 Poetry、Docker 和高级发布深入学习

第三部分 - 使用 GitHub Actions 构建强大的 CI/CD 流水线的完整指南,从代码检查和自动化测试到在发布时自动部署到 PyPI。

18 July 2025
第2部分:工业化和保障高级Python CI/CD管道

第二部分 - 使用 GitHub Actions 构建健壮 CI/CD 流水线的完整指南,从代码检查和自动化测试到在发布时自动部署到 PyPI。

17 July 2025
第一部分 : 为Python和PyPI搭建一个简单的CI/CD流水线

第一部分 - 使用 GitHub Actions 构建强大 CI/CD 流水线的完整指南:从代码检查、自动化测试开始,一直到在版本发布时将包自动部署到 PyPI。

16 July 2025
开发音乐 Discord 机器人:功能架构和日志驱动开发

15 July 2025
在Ubuntu下降低并监控笔记本电脑的温度

14 July 2025
调试日志:利用 Bootstrap 5 控制 Firefox 的反复无常

13 July 2025
使用 `gradle.properties` 解决 Gradle 单元测试挑战

发现一种有效的技术,用于单元测试依赖 `gradle.properties` 的 Gradle 插件。本文解释如何使用 `ExtraPropertiesExtension` 来模拟属性,确保测试隔离、可靠且易于维护,并通过 PlantUML 图示说明。

11 July 2025
使用 Kotlin DSL 和 buildSrc 优化 Gradle 任务管理

使用 buildSrc 和 Kotlin DSL 优化 Gradle,以获得可重用的任务和更干净的构建。

09 July 2025
基于JBake和JGit的可配置Kotlin Gradle插件的TDD

本文介绍了用 Kotlin DSL 编写的 Gradle 插件的完整设计与测试(TDD)流程。该插件基于 *JBake* 自动生成静态站点,并通过 *JGit* 实现 *Git 部署*,全部源自一个 YAML 配置文件。

20 June 2025
AsciiDoc : 发现并掌握语法,实现高效文档编写

深入了解AsciiDoc的语法,学习编写清晰、结构化且强大的文档,以满足您所有的文档和出版需求。

28 May 2025
在 Ubuntu 上将本地服务暴露到互联网:完整的端口转发指南

如何配置端口转发,使在 Ubuntu 上运行的本地服务可以从家庭网络外部访问。

17 November 2024
调试 Mockito:在 Gradle 插件测试中解决 “Wanted but not invoked” 错误

了解我如何在 Gradle 插件的测试中解决一系列复杂的 Mockito Mock 问题,从 “Wanted but not invoked” 错误到层出不穷的 “Unfinished Stubbing”。

24 September 2024
Kotlin Arrow : 掌握在 Either 单子中的导航

发现使用 Kotlin Arrow 库高效导航 Either 单子左侧和右侧的高级技巧。

23 September 2024
实用指南:在 Linux 中搜索文件

学习如何在 Linux 中使用 Zsh 高效地通过 find、locate 和 grep 搜索文件。

23 September 2024
Linux 备忘录

Unix/Linux 与 Bash 终端的简单备忘

01 February 2024
为 Windows 主机公开 Linux 子系统端口

为 Windows 主机暴露 Linux 子系统端口,使用命令 `wsl --install

30 January 2024
安装 Pandoc

安装 Pandoc,它是一个文档转换工具,适用于 Linux 和 Windows WSL

25 December 2023
在 JavaScript、TypeScript 和 Python 中实现 kotlin.Triple

我们建议在 JavaScript、TypeScript 和 Python 中实现 kotlin.Triple

22 December 2023
Google Apps Script 介绍

Google Apps Script 完整介绍

20 December 2023
Google 表单脚本与自动化速成培训

Google 表单脚本与自动化快速培训

19 November 2023
Python 备忘录

简单的Python备忘

24 August 2023
网页开发

Web开发培训

21 August 2023
交换卡牌游戏(TCG)

训练交换卡牌游戏(TCGs)

19 August 2023
TypeScript 备忘录

简单的 TypeScript 备忘

14 August 2023
CSS备忘录

简单的 CSS 备忘录

13 August 2023
HTML备忘录

简单的 HTML 备忘录

04 August 2023
JavaScript 备忘录

简单的 JavaScript 备忘录

31 December 2022
范围备忘录

关于项目范围的简单备忘录

29 May 2022
Kotlin备忘录

简单的 Kotlin 备忘录

28 May 2022
JVM备忘录

简单的 JVM 备忘录

23 May 2022
Gradle 备忘录

简单 Gradle 备忘

17 May 2022
�训练 - kotlin: 枚举, 密封类

Kotlin 编程:枚举,密封类

12 May 2022
培训 - Kotlin

Kotlin 编程,计划。

09 January 2022
备忘录设计系统

简单备忘录:设计系统中的有用链接和参考资料

03 November 2020
Kubernetes, Microk8s, Docker: 入门

安装、设置微型 Kubernetes、Docker,并在 Linux/Unix 上启动 HelloWorld

28 September 2020
Gradle: 从 Gradle 任务执行外部进程

如何从 Gradle 任务启动外部二进制文件

27 September 2020
Kotlin:NotImplementedException,NotImplementedError

尚未实现,允许抛出正确的异常。

26 September 2020
解压

应用程序 untar

25 September 2020
Gradle:即使测试是最新的,也要重新运行测试

在命令行中添加参数 --rerun-tasks。

24 September 2020
Docker 不会安装应用程序,而是拉取它。

docker 优化

23 September 2020
Gherkin 在法语中:

BDD, cucumber, gherkin 的法语版

22 September 2020
Gradle cli: 覆盖一个参数

./gradlew -Pparam_component=CUSTOM

21 September 2020
Git 备忘录

简单的 git 备忘录

20 September 2020
从 URL 吸取

wget URL吸尘器

19 September 2020
创建一个可启动的磁盘

制作自己的可启动磁盘

18 September 2020
使用 CLI 在目标文件夹中解压

在命令行中解压

17 September 2020
在目录列表中显示文件大小的总和

文件夹中文件大小的总和

16 September 2020
删除 GitHub 上的分支

备忘录补充 git

15 September 2020
Asciidoc/Markdown 备忘录

简单备忘录 AsciiDoc/Markdown

19 August 2019
Debian: 在命令行中安装 .deb 文件

通过命令行安装 .deb 包

16 August 2019
Gradle: resources 文件夹在 IDE 中可见

向 Gradle 构建的类路径添加一个文件夹

14 August 2019
Groovy 脚本,grab 和 ivy 配置

gradle groovy ivy

13 August 2019
Groovy: 一点代数,最大公约数和最小公倍数

Groovy中的代数

12 August 2019
Bash:使用 find 按扩展名查找文件并输出到文件

一点bash和find

01 August 2019
使用瀑布模型管理数字项目

一点数字项目的方法,使用瀑布模型

30 July 2019
列出 PostgreSQL 实例中的数据库

Postgres 的摸索

29 July 2019
Groovy: 递归重命名文件

Groovy 中的递归

19 July 2019
Groovy: 按条件搜索文件,复制所选

使用 Groovy 按模式搜索文件

18 July 2019
Groovy: 文件操作、搜索和删除

在Groovy中进行文件操作和字符搜索

17 July 2019
Groovy: 替换字符串中的字符序列并从文件加载 Properties

操作 Properties 和在 Groovy 中进行模式搜索

10 July 2019
Groovy: ASCII字符

Groovy、循环以及 ASCII 代码的操作