你好,这里是 Xuepoo
你可以叫我 “Swe-poo”。
我现在是一个软件工程的本科生,我在中学自己研究了六年的数学,然后大学选的是软件工程,所以思考事情更多的会用数学思维进行思考。
我喜欢研究一个软件为什么这样设计,也喜欢追问:如果不沿着已有的道路走,是否还有另一种可能?
不过,这里不打算只放一份严肃的技术简历,我也想留下自己喜欢的音乐、漫画、推理小说,以及那些来自早期计算机和互联网的、略显模糊的未来幻想。
我喜欢把复杂的事情想清楚,也喜欢做一些不需要理由、只是觉得有趣的东西。
从一行 C 程序开始
高考后的暑假,我开始自学 C 语言。进入大学后,我接触了 ACM、Codeforces 和程序设计竞赛,后来学习 Java Web,逐渐把兴趣从「如何解出一道题」延伸到「如何设计和维护一个真正的软件系统」。
因为我在中学到现在一直都是研究数学:几何、概率、函数、微积分、图论,自己总是会用数学的思维去思考问题,或者说会用自己学过、用过、做过的东西给代入新的设计中,以及那些可以把看似无关的事物联系起来的抽象结构。
就比如自己学了很多数学方法,在做题的时候可以用不同的方法来做,所以在软件开发中也可以这么做的,于是我开发的很多东西都是基础设施而不是应用层面了,很像是应用研究而不是软件开发。
自己做过的东西
在大三以前都是主要做的学校和校外的项目,在大三下之后主要是自己做自己感兴趣的项目,主要围绕自己兴趣然后以开源项目来做,这些很多都是跟我以前研究的数学联系很大。
自己感兴趣的领域非常多,比如 Web 前后端、大数据技术、云计算、计算机网络、Linux 操作系统、计算机图形学、AI Infra 等等。
目前个人维护了 30+ 个网站(主要在 Cloudflare 上),自己已经租了 6 个域名,在 AUR 上维护了 10+ 个软件,在 npm, PyPI, crates.io 等等平台共维护了 50+ 个库。
以下介绍下自己以前做过的几个很有特点的项目:
Vectomancy · 将图像转换成数学方程
Vectomancy 算是我维护的一个正式的项目,这个项目灵感来自 Wolfram Alpha 中的数学艺术,可以将任何一张图片通过计算成对应的数学方程,最早只有一个 cli 程序,后面编译成 Wasm 在网页端也可以用。
这个项目不是我做的最亮眼的,但是这个对我的意义是最大的,因为在这个灵感上我开发了 Topoglyph, VectoJS, CapGlyph 。
VectoJS · 基于 Canvas 的原生 UI Runtime
VectoJS 是一个 Canvas-native UI Runtime,采用虚拟数学树进行布局。
这个最早的灵感可以看 https://blog.xuepoo.xyz/posts/vectojs-de-dan-sheng-yuan-you/ 这个介绍,简单的说就是我想要把网页所有的部分都由 Canvas 进行渲染而不是用太多的 DOM 节点,这里面要考虑的东西非常多,比如如何进行交互、如何选择和渲染文本等等。
在网站有介绍里面的各个难点,这算是我在做之后的 Bitty 之前最难的项目了,这里面的设计运用了很多数学知识,而且涉及到了不同浏览器内核,这是我第一次认识到兼容性在软件开发中的困难。
这个项目也延伸到了流式 Markdown 渲染、弹幕设计、知识图谱、动画和各类可视化实验,这是我在自己开发过程中 Dogfooding 最多的项目,在软件测试、E2E等等部分花了非常多的时间。
这个是我做过的一个前端基础设施,但是其实里面全是数学、浏览器渲染底层、图形学的知识。
CarryCtx · 一个围绕 Agent 管理项目的工具
CarryCtx 是我在开发 VectoJS 的时候发现这几个问题:
- 项目越来越大,维护一个 HANDOFF.md 不够高效。
- 对于不同的 Agent 工具如 Claude Code, Codex, OpenCode 在管理同一个项目的上下文很难。
- 任务进度容易丢失,上下文会随着越来越多幻觉越来越大,尽管有上下文压缩。
于是我就想起了 Git 和 SQLite 的设计,于是把这两者结合起来做成了 CarryCtx,在这之后我所有的项目都是由这个来进行管理的,它已经在我后续的多个项目中长期使用,并逐渐成为我自己的日常开发工作流中不可缺少的一部分,算是目前我开发的最实用的软件。
这个项目网站的简介:一支编码 Agent 团队,靠的是一套没人能长期可靠记住的状态:有哪些任务、为什么存在、什么依赖什么、现在归谁、哪些已经试过。当指挥官负责规划、角色化的子 Agent 负责实现、评审者负责收尾时,这些意图会迅速超出任何一个聊天窗口的容量。Commit message 解释的是补丁,不是计划;Markdown 笔记一旦停止手动更新就会过时。
Bitty · 一个可编程的现代终端模拟器
Bitty 是我正在长期开发的 Rust 终端模拟器项目,之前我开发的 VectoJS 是我做过局部功能最难的项目,然后这个 Bitty 是我软件设计的最好体现,这个是跟我的专业强相关的项目,所以我把它作为了我的毕业设计。
这个灵感来自 Neovim,我想要做一个拥有足够可靠、尽可能小的 Core,把体验的自由留给可组合的机制与扩展,而不是不断把功能塞进核心。之后灵感还有 Emacs, Kitty/WezTerm/Alacritty, Hyprland。
我在做这个项目前是思考和调研了非常多的,我是知道这个绝对不容易做,它是微内核,分了非常多的软件架构,我不止是在 runtime 层面进行了创新,在 UI 架构、Extension 架构等方面都有独特的创新设计,其中这个 Extension 架构设计是我觉得我做的最好的,详细部分需要看看 https://bitty.run 中的文档了。
在做这个项目的时候压力非常大,因为中间有个网络栈的设计部分让我思考了非常久,最后才设计成现在这个样子,中间是经历过小幅度重构的。在这之后我才知道软件设计有多么重要,为什么自己沉迷于基础设施建设,喜欢用数学思维思考东西,我开始喜欢尝试用一句话概括一个软件最核心的设计思想:它本质上是什么,又通过什么机制实现自己的目标。一句话无法解释完整的系统架构,但如果连最重要的核心抽象都难以表达清楚,我就会重新思考自己的设计,比如这些:
- Git:以不可变哈希(SHA)寻址的有向无环图,本质是披着版本控制外壳的内容寻址对象文件系统。
- SQLite:剥离了网络协议栈与守护进程、把完整 ACID 关系引擎以库函数形式嵌进宿主进程的单文件存储引擎。
- Kafka:放弃队列消息状态维护,把全量事件流抽象为依赖顺序磁盘 I/O 与零拷贝的分布式持久化追加日志。
- LLVM:以强类型、与源语言和目标指令集皆无关的中间表示(IR)为绝对核心,把编译解耦成可组合的三段式流水线。
共同点:一句里同时给出“本质是什么”和“用什么机制换来它”,不含形容词,不含形容词式的“高性能/易用”。
我觉得一个软件就该这么做而不是说自己实现了多少功能,这正是我会考虑的部分,从这开始我才知道自己做的主要都是应用研究而不是应用层开发。
Wheel · 运行在 Bitty 上的 Agent
Wheel 是我在设计 Bitty 的时候想的,就是现在的程序都得有 AI,不然不会有用户来用,那么对于 Bitty 来说就有 bitty-ai 这个 extension,然后也有一个官方的 plugin 来作为 Agent 工具存在。
于是我就自己调研和设计,用到了自己以前学过用过的东西,也就是 Git 和图论,Wheel 最初来自我对 Bitty Panel、Workspace 和多 Agent 协作的思考。我希望把 Agent 看作具有不同职责、任务和协作关系的工作者,而不只是某个主 Agent 的一次工具调用。
设计逐渐演变后,Wheel 被定位为独立运行的 Coding Agent Harness。Bitty 可以提供交互界面和工作空间,而执行权限、任务策略和上下文管理由 Harness 自身负责。这也让我重新思考 Agent 拓扑、任务生命周期与运行时边界之间的关系。在这里 Agent 是像公司里面那样,各自都有对应的工位职位,有对应的任务,自己也可以跟上司交流,而不是现在的 Main Agent 调用 Subagent 这么一层,所以运用了很多图论的知识来设计这个拓扑结构。
然后在上下文管理这部分借鉴了 Git 的设计,这个部分设计是我独自想的,但是还在验证中。
这个项目和 Bitty 都是在预览阶段,还没有正式做完,Wheel 需要在 Bitty 实现 Daemon 后才算能做完。
Mathen · 从软件架构中寻找数学结构
Mathen 是一个仍在探索中的软件架构研究项目,这是我做过最高级、最酷、最前卫、最异端的项目。
我想研究:不同软件里反复出现的架构机制,能否在明确证据、假设和约束的前提下,被抽象、比较、组合和验证?
这个项目是我在开发 Bitty 后想出来的,我最开始是想要让 LLM 去用纯数学去理解 Git 等系统的设计,也就是最底层,而不是用代码或者流程图来理解,然后 LLM 给出的是非常多的数学分支,从不同的数学分支角度去做数学分析,出现了自己没有接触过的领域,比如序理论、格论、补丁群胚、非交换代数与同伦等等。
然后我就发现,LLM 正好适合解决这类对于需要深度和广度知识的问题,于是我就做了 Mathen,把两百多个系统用这种宏观角度给转换成微观角度然后再转换成宏观软件,最后变成一个知识图谱进行在新的约束环境下如何去发现新的软件设计。
这个过程现实非常多,但是一直没有人研究在软件上面,大家主要做算法这种局部的研究而不是软件架构本身的研究,因为这个部分非常难。可以用这个跟很多领域做类比,比如制药、细胞研究、材料制作等等需要从微观角度去找规律然后找到新的发现。
有个很好的例子是解析几何,解析几何诞生于 17 世纪,在这之前代数和几何都是非常成熟的了,但是在遇到很多工程问题用数学不好做,于是就诞生了解析几何用代数去描述几何。那么对于软件设计也是可以这么做的。
这个项目还在研究阶段,是我做过前景最大的项目,其实在这之前我做过最具前景的项目可能是 CapGlyph,但是这个需要花非常长的时间还需要申请专利,就暂时不做了。
其它做过的项目
除此之外,我还做过非常多别的,这里列举下:
- CtxCtl 给 AI 编码智能体用的上下文压缩层。
- CapGlyph 图像隐形结构水印——用于来源证明、泄露溯源及篡改检测,这个潜力在 Mathen 之前是最大的,但是我没时间做剩下的了,这是我第一次做跟信息安全相关的项目。
- Topoglyph 基于 Vectomancy 二次开发的图像处理工具,可以将任何图像转换成文字表示。
- CmdHub 这是我在 VectoJS 之前做的项目,旨在把所有的 cli 工具都记录起来,然后这样通过自然语言搜索就可以找到想要的工具和对应的子命令,这个愿景非常好,比如减少重复造轮子、及时找到自己想要的工具、让 Agent 快速知道一个工具要如何使用等等。但是最后因为海外支付一直没有通过就没有继续做了。
- oh-my-mystery 我喜欢推理小说,也喜欢知识图谱。Oh My Mystery 就是这两种兴趣相遇的结果:把作品、作者、系列和出版等信息组织成可以探索的关系网络,并尝试理解作品之间的联系。运用了我自己开发的 VectoJS 做的知识图谱,然后因为自己对于云计算很感兴趣,CmdHub 就是一个云原生程序,但是那个是用上 k8s 了,用到了 AWS EC2, AWS RDS, Cloudflare Pages, Cloudflare Turnstile 等等;但是对于这个 oh-my-mystery 我做了减法,它还是云原生,但是采用的是后端用的 Hono 在 Cloudflare Workers,数据库用的 Cloudflare D1 等等边缘的 Serverless 就行了。
当然还有别的,可能得看看 https://github.com/Xuepoo 就行了,但是剩下的应该都是一些小工具或者脚本,技术含量不是很高的那种。
代码之外的校园生活
除了个人项目,我负责实验室的日常管理、招新培训和活动组织,承担学院在线判题系统(OJ)的维护工作,组织过同学的交流和活动策划。在这些经历里也锻炼出了自己的团队组织和协调能力,喜欢把大家聚在一起把事情办成。
自己也是班上的心理委员,组织班上的心理沙龙,也实时关注班上的各个同学的心理情况。
在校园的生活感觉就是很忙,因为个人在中学阶段经历过不太好的事情,自己的 MBTI 人格是 ENFJ,有的时候会像是 INFJ,自己会去关注周围的事物,即使是很小的事情都可能联系很大,跟自己研究数学一样,喜欢去追求证明,任何事情都是可以有解释性的,在遇到身边人的纠纷的时候把自己带入他们的角度,去研究为什么会发生以及如何能让事情以最小的损失解决。
因为自己看到的东西还算是广,自己的脑洞比较大,很多时候可以把很难联系在一起的东西给联系在一起,就比如我开发的 CarryCtx。我挺敢于去做那些困难、有挑战且对自己有帮助的事情,只要觉得这件事能让自己成长,哪怕再硬的骨头我也愿意花精力去啃下来,也有好奇心和去尝试的勇气,不然自己做不了这么多有意思的开发。
一些不太「技术」的兴趣
这里兴趣有:
- 推理小说,所以我才有那个 oh-my-mystery 的项目,这个类型的小说就是专门为我设计的!
- 漫画/动画/电影,在高中有一个学期看过 1000+ 卷漫画。
- 音乐,在初中到高中听的大多数是纯音乐,之后了解各种风格,最喜欢 Jazz 类型。
当然自己经常会去想哲理、小说创作、音乐制作、了解历史之类的,感觉自己以后很可能是当个小说家去创作有意思的东西。
很多时候会用感性的思维去借助自己理性的东西去实现它。
找到我
- GitHub — GitHub 账号
- 个人邮箱 — xuepoofoter@gmail.com
- X (Twitter) — @Xuepoo_Foter
- Bilibili — Bilibili 空间
- 个人博客 — blog.xuepoo.xyz