首页 Home.

  • 做一个类 CAD 的图形编辑器,绕不开命令行坐标输入。老 CAD 用户不点鼠标,他们敲键盘:100,200 回车定点,@50,30 回车画相对位移,100<45 回车走极坐标,<45 回车再敲个长度确定方向加距离。同一个输入框,同一批字符,语义却各不相同。 这篇文章讲我怎么把这套输入系统从「正则加

  • 问题 一个自定义 DSL 的 LSP 服务(Go 实现)需要为编辑器提供语法高亮。高亮依赖一份"词表":哪些标识符是内置元素 哪些是指令 哪些是内置函数。 这份词表在后端 schema 包里已经有了——它同时服务于补全 hover 诊断。问题是前端 Monaco Editor 的 Monarch t

  • 最初的需求很简单:每天早上抓一批 RSS,过滤一遍,发到飞书群。后来一路改下来,变成了一套支持多源、多过滤器、多调度任务、多 AI 渠道、跨 VM 协程并发的装配式系统。这篇记录这条路上的几个关键转折点。 起点:一份 YAML 工作流 需求的雏形是一份 YAML:14 个 RSS 源、关键词粗筛、L

  • 一个 Minecraft 插件开发者绕不开的困境 写过 Bukkit 插件的人都遇到过这种情况:你想改的逻辑就在那里,源码摆在 Spigot 仓库里,每个人都看得到,但你改不动。 服务端给你的接口是一套事件 API。当某件事发生时——玩家加入、方块破坏、实体受伤——你能监听到一个事件对象,能取消、能

  • Minecraft 插件开发中,数据持久化是个绕不过去的问题。玩家数据要存、配置要存、状态要存,但插件的运行环境决定了你不可能引入 Hibernate 这种重量级框架——类加载隔离、JAR 体积、运行时依赖冲突,每一个都是坑。 database-ptc-object 是 TabooLib 框架中的对

  • 第一章我们搞清楚了 OpenGL 的底层原理——GPU 管线 矩阵变换 纹理采样这些对吧。但是 Minecraft 是怎么把那些 OpenGL 概念组装成一个能跑的渲染系统的呢?本文就带大家了解一下 Blaze3D。 我把朋友的笔记结合最新的 MC 客户端源码重新整理了一遍,补充了必要的前置知识,尽

  • 我把朋友的笔记结合最新的 MC 客户端源码重新整理了一遍,补充了必要的前置知识,尽量让没上过图形学课的同学也能跟上。 https://blog.fxmarkbrown.top/post/179 1.1 GPU 与图形渲染基础 这一切的一切都得从

  • 上一篇把命令路由从 on_message.lua 搬回 Go 之后,飞书群里的查询命令一直稳定运行。这篇讲一个让我调了半天的问题:按人查提交记录。 需求:在群里查某人今天做了什么 场景很直白。产品在飞书群里发一条 查询 @Ray_Hughes 昨日,机器人应该回一张卡片,列出昨天这个人在哪些分支推了

  • 上一篇说到把 Node 插件框架换成了 Lua 基座之后,所有命令分发都收敛到 on_message.lua 一个文件里。开始几条命令时一切都好,写到第十条就开始难受——一长串 if cmd == "..." elseif cmd == "...",参数解析散在各处,产品别名 resolve 在多个

  • 上一篇文章写了 responsevent——一个 Go 事件调度器 + Node.js 子进程插件的框架。设计上很漂亮:拓扑排序的插件链、stdin/stdout 的 JSON 协议、权限隔离、RPC 能力注入。做完之后用了一段时间,发现一个问题:部署摩擦没有变小,只是从「改 Go 代码」变成了「写