博客
最新文章和资源
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.
我的 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 订阅是全球市场上最划算的方案,包括对抗中国直供的产品。
L'Architecture « 插件独立+消费者根 » : 为什么我的Gradle构建会重复?
一个克隆,一个 `./gradlew tasks`,您的 Gradle 插件即可运行。零配置,无需阅读 README。这是我在我的 6 个 foundry/public/ 插件上部署的架构:一个最小化的消费者根目录 + 一个自治的 `{name}-plugin/` 文件夹。为什么这种“表面重复”模式是 Gradle 插件开发中最高效的做法——具备原生的 dogfooding、构建隔离以及清晰的 DAG 契约。
知识图谱作为推荐引擎:我是如何杀死按时间顺序的「相关文章」的
当前 cheroliv.com 上的“相关文章”只是最近发布的 4 篇文章。这是一个被三层推荐引擎纠正的语义误差:显式引用 (xref)、新兴本体 (NLP 聚类) 和时间回退。全部接入 graphify 的知识图谱,被 bakery 消费 — — engine 对这一切一无所知。
比 Claude 和 GPT 高效 27 到 45 倍:一支由 23 个经过微调的 AI 专家组成的舰队如何碾压市场
效率系数为27倍至45倍,相较Claude、GPT等同类产品:一支由23个在我的工作区上微调的AI专家组成的团队如何碾压市场。架构、数据集、训练和完整部署。
用于并行运行两个 Ollama Pro 实例的 Gradle Maison 插件
一个自制的 build.gradle.kts 用于通过 Gradle 任务控制两个 Ollama Pro 实例——启动、停止、登录、拉取模型以及健康检查。让基础设施由构建工具驱动。
在同一台机器上使用 Docker 累积两个 Ollama Pro 订阅
Docker 允许在同一台机器上通过隔离身份密钥和网络端口来复制 Ollama Pro 订阅。以下是逐步操作方法。
安装 Kitty 终端并将 Zsh 配置为 Xubuntu 下的默认 shell。
本文介绍了在 Ubuntu 上安装和配置 Kitty 终端的完整步骤。
DGX Spark vs Cloud vs LLM 订阅 — 扼杀本地硬件梦想的经济基准
价格为 $4 699 的 DGX Spark,$20/月的 Ollama Pro,云端 $1.38/小时 的 H100——算下来很快。此基准测试比较了2026年可用的所有选项,以运行大语言模型,从推理到微调。结论:Spark 是奢侈品,而不是划算的工具。2026 年购买本地硬件的真实原因不是经济因素——而是政治因素。
LLM治理矩阵 — 为什么您的AI安全始于树形结构
如果您的 AI 安全不依赖于提示词,而是依赖于文件系统呢?这份架构宣言定义了一个 4×4 矩阵——物理区域 × LLM 访问权限——它在机械上使秘密泄露、开源/闭源的混合以及将观点伪装成事实的发布成为不可能。无需编写提示词。无需记住规则。只有文件夹。
OSS/CSS 细粒化 — 为什么我把 foundry/ 切成两半
foundry/` 将开源代码和私有代码混合在同一文件夹中。RAG 和知识图谱无法区分。解决方案?把这块功能区分成两部分——OSS/ 用于公众(Apache 2.0,免费索引),CSS/ 用于闭源(仅私有数据集)。不再需要让 LLM 小心,文件系统会为它处理。并且我趁机把 cheroliv.com 放回它本该所在的位置:在 office/sites/.
自动化认识论分区 — 大语言模型如何保护我的心灵花园
STIMULUS 模式不仅仅是捕获原始想法并将它们稀释到工作区文档中。它增加了一层关键:LLM 负责将每条信息分类为 Vision(可在博客上发布)、Opinion(仅限私人圈子)或 Strategy(稀释受限)。这种自动化的认识论隔离正是使人能够在 0 圈自由思考而无需担心不适当发布的原因。
我们的第一位雇员:数据集匿名器 — MVP0 试用期
在进行RAG、微调或SaaS之前,需要干净的数据。我们在试用期的第一位雇员——匿名化器——能够检测并清理多技术源(SQL、pgvector、ONNX、Graphify、JSON、YAML、AsciiDoc)中的PII。这就是MVP0。没有它,其余的要么非法,要么在技术上会退化。下面是这一模块如何将普遍问题转化为可市场化的产品。
我们的第一位雇佣者:数据集匿名化工具 — MVP0 处于试用期
在进行 RAG、微调或 SaaS 之前,必须要有干净的数据。我们试用期的第一位员工 — — 匿名器 — — 在多技术源(SQL、pgvector、ONNX、Graphify、JSON、YAML、AsciiDoc)中检测并清理 PII。这就是 MVP0。没有它,其余的要么非法,要么在技术上受损。下面是说明这个模块如何将一个普遍问题转化为可销售产品的方法。
开发者的秘密花园:空间本体如何在无需提示工程的情况下对齐LLM
如果对齐LLM的最佳方式不是提示,而是文件系统会怎样?我的工作区被组织成四个同心信任圆圈,从最私密到最公开。LLM不需要记住规则——它在每个文件路径上都能看到这些规则。以下是这种空间本体论如何使代理治理比一块文本规则更稳健。
Supabase迁移到Firebase:在无后端的情况下将联系表单接入Firestore
我的联系表单已经在模拟环境中运行了数月。最初的 Supabase 方案被放弃,转而使用 Firebase。我讲述项目的创建、Firestore 的配置、提交 JavaScript 的重写、死代码的清理,以及这次迁移所体现的 “完成我们所开始的事” 心态。
DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1 : 三款LLM接受Vibe Coding长上下文的考验
在三周的时间里,我在使用 Opencode 开发 Gradle 插件的会话中运行了三种主要模型。上下文 30K tokens,治理模式为 Eager/Lazy/Hot/Warm/Cold,进行重构任务、TDD 和架构设计。以下是存活下来的模型——以及其他模型为何失控的原因。
代理上下文审计:当您自己的治理成为问题——以及如何在不失去任何东西的情况下修复它
在两篇关于代理上下文的结构化和备份的文章之后,我发现记录该方法的文件本身已经成为最大的 token 消耗者。对一个 627 行的 AGENT_MODUS_OPERANDI 进行逐段审计,识别重复项,并提供一种百科式拆分方案,既保持工程完整性,又不让上下文饱和。
滑动窗口与寒潮:当代理上下文爆炸时,需在不丢失的情况下进行归档
经过几个月的 Opencode 会话后,治理文件激增。自动加载了 5200 行。我正在构想一种滑动窗口机制和 "vague froide identique" ,以维持轻量级活跃上下文而不丢失任何内容。
当 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 构建的完整调试日志。
使用 AsciiDoc 管理 AI Agent:我的 Eager/Lazy 策略,旨在实现无上下文泄漏的 Opencode 会话
面对 AI 代理在会话之间出现的内容丢失(context leak)问题,我开发了一套基于 AsciiDoc 文件的手工治理策略。其核心原理是:一个自动加载的 Eager 仪表盘,一份按需调用的 Lazy 用户手册,以及一套不可或缺的会话结束流程。
为什么 `serve` 显示了一个丑陋的网站,而 `publishSite` 完美无缺
我的 Gradle JBake 插件的 `serve` 任务显示了矩形按钮、难以辨认的文本以及部分缺失的 CSS,而 `publishSite` 则生成了完美的网站。根本原因:JBake 的 CLI 参数使用了错误的语法。以下是完整的诊断以及我如何修复它。
OpenCode 和不完整的 PATH : 为什么您的工具不在代理的 shell 中
OpenCode 执行的非交互式 shell 不会加载 .zshrc,导致 agent 的 PATH 中缺失 SDKMAN、NVM、~/apps 和 pnpm。完整问题诊断、SDKMAN 与 NVM 行为对比,以及通过 .zshenv + 指向 ~/.nvm/current 的符号链接的最终解决方案。
在 Gradle 工作流中集成 Graphify:一条命令实现从知识图谱到 PlantUML 图
Graphify 从您的代码库中提取知识图谱。Gradle PlantUML 插件将此图谱转换为确定性的 PlantUML 图表。完整流水线:pip install graphify → graphify . --no-viz → ./gradlew generateKnowledgeGraphDiagram → 在 Git 中进行版本管理的 PNG 图表。
在 Gradle 工作流中集成 Graphify:一条命令实现从知识图谱到 PlantUML 图表
Graphify 从您的代码库中提取 Knowledge Graph。Gradle PlantUML 插件将该图谱转换为确定性的 PlantUML 图表。完整流水线:pip install graphify → graphify . --no-viz → ./gradlew generateKnowledgeGraphDiagram → PNG 图表已在 Git 中版本化。
fg 命令的超级技巧:当 Ctrl+Z 拯救你的终端会话
你在终端里运行了一条卡住的命令吗?Ctrl+Z 可以暂停它,fg 可以恢复。了解 fg、bg 和 jobs 如何提升你的终端生产力。
VS Code 在 Home 中:本地安装和无需 sudo 的字体自定义
在你的 Linux 主目录中安装 VS Code,以便在不使用 sudo 的情况下保持完全控制。然后自定义菜单和文件资源管理器的字体——这是一段充满困难的旅程,最终得到可读的 UI。
将 Asciidoctor RevealJS 插件迁移到 buildSrc Kotlin : 对 Groovy API 进行逆向工程
如何将 AsciidoctorJRevealJSTask 任务的配置从根 buildscript 迁移到独立的 buildSrc Kotlin 插件,用其通过字节码内省发现的底层机制替换 Groovy DSL ruby { gems() }。
JBake 架构作品集 - 愿景与用例
了解我如何在 Gradle 插件的测试中解决一系列复杂的 Mockito mock 问题,从错误 "Wanted but not invoked" 到连环的 "Unfinished Stubbing"。
混合架构:两全其美,使用 Supabase 与 Spring Boot
将 Supabase 用于简单的 CRUD,将 Spring Boot 用于复杂的逻辑。务实的混合架构,可扩展且经济。
混合架构:兼具 Supabase 与 Spring Boot 两者之长
结合 Supabase 实现简单的 CRUD,使用 Spring Boot 处理复杂逻辑。实用的混合架构,可扩展且经济。
预加载的艺术:使用 JavaScript 和 CSS 消除主题的 “Flash”。
Gradle 插件功能测试中的高效日志
完整指南:在Gradle插件的功能测试中使用SLF4J和Logback搭建健壮且独立的日志系统
在 AsciiDoc 中显示彩色方块:实用指南
实用指南:如何在 AsciiDoc 中使用带有内联 HTML 和 CSS 的 pass:[] 宏嵌入颜色样本。兼容 JBake 和所有处理器。
使用 Thymeleaf 对静态 JBake 网站进行国际化
使用 Thymeleaf 在 JBake 中实现国际化的完整指南:用于 UI 的消息文件,多语言文章的文件夹组织。
在Ubuntu上安装并验证Tor浏览器
完整过程:在 Ubuntu 上下载、验证并启动 Tor Browser,并思考加密验证以及在 Tor 网络中进行道德和教育性导航。
第5条:共享的 libs.versions.toml 的冒险
深入研究 Gradle 版本目录(libs.versions.toml)及其在复合构建中的共享方法——以我们在 site‑baker 插件中遇到的一个具体问题为例。
第4条:Gradle配置缓存的陷阱
一次意外的调试冒险,让我们深入到Gradle配置缓存的细节。了解为什么我们的构建表现奇怪以及我们是如何解决问题的。
文章 3:使用测试驱动开发(TDD)在 Gradle 插件中集成 Jackson 进行 YAML 解析
了解如何在Gradle插件中使用Jackson库将YAML配置文件解析为Kotlin对象,并在遵循测试驱动开发(TDD)方法的过程中进行集成。
第二条:使用TDD方法开发Gradle插件
在本文中,我们将探讨如何使用测试驱动开发(TDD - Test-Driven Development)的方法为 Gradle 插件建立一个坚实的开发基础。
文章 1 : 创建一个 Gradle 插件,从 A 到 Z,使用命令 `gradle init
使用标准任务 `init` 初始化 Gradle 插件项目的分步指南,了解生成的结构并运行首次构建命令。
第 0 条:创建 Gradle 插件的环境设置
在编写我们的第一个插件之前,我们需要准备我们的机器。本指南将向您展示如何安装和配置必需的工具:一个JDK,IntelliJ IDEA,Gradle和JBake。
CI/CD Python – 第三部分:使用 Poetry、Docker 和高级发布深入学习
第三部分 - 使用 GitHub Actions 构建强大的 CI/CD 流水线的完整指南,从代码检查和自动化测试到在发布时自动部署到 PyPI。
第2部分:工业化和保障高级Python CI/CD管道
第二部分 - 使用 GitHub Actions 构建健壮 CI/CD 流水线的完整指南,从代码检查和自动化测试到在发布时自动部署到 PyPI。
第一部分 : 为Python和PyPI搭建一个简单的CI/CD流水线
第一部分 - 使用 GitHub Actions 构建强大 CI/CD 流水线的完整指南:从代码检查、自动化测试开始,一直到在版本发布时将包自动部署到 PyPI。
开发音乐 Discord 机器人:功能架构和日志驱动开发
在Ubuntu下降低并监控笔记本电脑的温度
调试日志:利用 Bootstrap 5 控制 Firefox 的反复无常
使用 `gradle.properties` 解决 Gradle 单元测试挑战
发现一种有效的技术,用于单元测试依赖 `gradle.properties` 的 Gradle 插件。本文解释如何使用 `ExtraPropertiesExtension` 来模拟属性,确保测试隔离、可靠且易于维护,并通过 PlantUML 图示说明。
使用 Kotlin DSL 和 buildSrc 优化 Gradle 任务管理
使用 buildSrc 和 Kotlin DSL 优化 Gradle,以获得可重用的任务和更干净的构建。
基于JBake和JGit的可配置Kotlin Gradle插件的TDD
本文介绍了用 Kotlin DSL 编写的 Gradle 插件的完整设计与测试(TDD)流程。该插件基于 *JBake* 自动生成静态站点,并通过 *JGit* 实现 *Git 部署*,全部源自一个 YAML 配置文件。
AsciiDoc : 发现并掌握语法,实现高效文档编写
深入了解AsciiDoc的语法,学习编写清晰、结构化且强大的文档,以满足您所有的文档和出版需求。
在 Ubuntu 上将本地服务暴露到互联网:完整的端口转发指南
如何配置端口转发,使在 Ubuntu 上运行的本地服务可以从家庭网络外部访问。
调试 Mockito:在 Gradle 插件测试中解决 “Wanted but not invoked” 错误
了解我如何在 Gradle 插件的测试中解决一系列复杂的 Mockito Mock 问题,从 “Wanted but not invoked” 错误到层出不穷的 “Unfinished Stubbing”。
Kotlin Arrow : 掌握在 Either 单子中的导航
发现使用 Kotlin Arrow 库高效导航 Either 单子左侧和右侧的高级技巧。
实用指南:在 Linux 中搜索文件
学习如何在 Linux 中使用 Zsh 高效地通过 find、locate 和 grep 搜索文件。
Linux 备忘录
Unix/Linux 与 Bash 终端的简单备忘
为 Windows 主机公开 Linux 子系统端口
为 Windows 主机暴露 Linux 子系统端口,使用命令 `wsl --install
安装 Pandoc
安装 Pandoc,它是一个文档转换工具,适用于 Linux 和 Windows WSL
在 JavaScript、TypeScript 和 Python 中实现 kotlin.Triple
我们建议在 JavaScript、TypeScript 和 Python 中实现 kotlin.Triple
Google Apps Script 介绍
Google Apps Script 完整介绍
Google 表单脚本与自动化速成培训
Google 表单脚本与自动化快速培训
Python 备忘录
简单的Python备忘
网页开发
Web开发培训
交换卡牌游戏(TCG)
训练交换卡牌游戏(TCGs)
TypeScript 备忘录
简单的 TypeScript 备忘
CSS备忘录
简单的 CSS 备忘录
HTML备忘录
简单的 HTML 备忘录
JavaScript 备忘录
简单的 JavaScript 备忘录
范围备忘录
关于项目范围的简单备忘录
Kotlin备忘录
简单的 Kotlin 备忘录
JVM备忘录
简单的 JVM 备忘录
Gradle 备忘录
简单 Gradle 备忘
�训练 - kotlin: 枚举, 密封类
Kotlin 编程:枚举,密封类
培训 - Kotlin
Kotlin 编程,计划。
备忘录设计系统
简单备忘录:设计系统中的有用链接和参考资料
Kubernetes, Microk8s, Docker: 入门
安装、设置微型 Kubernetes、Docker,并在 Linux/Unix 上启动 HelloWorld
Gradle: 从 Gradle 任务执行外部进程
如何从 Gradle 任务启动外部二进制文件
Kotlin:NotImplementedException,NotImplementedError
尚未实现,允许抛出正确的异常。
解压
应用程序 untar
Gradle:即使测试是最新的,也要重新运行测试
在命令行中添加参数 --rerun-tasks。
Docker 不会安装应用程序,而是拉取它。
docker 优化
Gherkin 在法语中:
BDD, cucumber, gherkin 的法语版
Gradle cli: 覆盖一个参数
./gradlew -Pparam_component=CUSTOM
Git 备忘录
简单的 git 备忘录
从 URL 吸取
wget URL吸尘器
创建一个可启动的磁盘
制作自己的可启动磁盘
使用 CLI 在目标文件夹中解压
在命令行中解压
在目录列表中显示文件大小的总和
文件夹中文件大小的总和
删除 GitHub 上的分支
备忘录补充 git
Asciidoc/Markdown 备忘录
简单备忘录 AsciiDoc/Markdown
Debian: 在命令行中安装 .deb 文件
通过命令行安装 .deb 包
Gradle: resources 文件夹在 IDE 中可见
向 Gradle 构建的类路径添加一个文件夹
Groovy 脚本,grab 和 ivy 配置
gradle groovy ivy
Groovy: 一点代数,最大公约数和最小公倍数
Groovy中的代数
Bash:使用 find 按扩展名查找文件并输出到文件
一点bash和find
使用瀑布模型管理数字项目
一点数字项目的方法,使用瀑布模型
列出 PostgreSQL 实例中的数据库
Postgres 的摸索
Groovy: 递归重命名文件
Groovy 中的递归
Groovy: 按条件搜索文件,复制所选
使用 Groovy 按模式搜索文件
Groovy: 文件操作、搜索和删除
在Groovy中进行文件操作和字符搜索
Groovy: 替换字符串中的字符序列并从文件加载 Properties
操作 Properties 和在 Groovy 中进行模式搜索
Groovy: ASCII字符
Groovy、循环以及 ASCII 代码的操作