site logo

Marico's space

39 stars,我的第一位开源贡献者,和一条让我反复回看的消息

编程技术 2026-06-22 14:49:29 4

几周前我发了篇文章讲 ZamSync,一个用 Rust 写的同步引擎,给不丹那些跑在 2G 网络下、传输到一半就断电的地区诊所用的:

说实话没抱太大期望。我只是 EPITECH Nancy 大二的学生,没有粉丝量,不懂怎么推广自己的东西。在原文里我也说了,就是想把做的东西展示出来,看看有没有人关心这个问题。

结果完全超出预期,哈哈!

数据盘点,毕竟大家都爱看数字 💝

  • 39 个 GitHub star——来自素未谋面的人
  • 2 位外部贡献者——fork 了仓库、写代码、提了 PR
  • 1 条消息——在 GitHub 讨论区里,我反复回看好几次
  • 128 个测试用例——全平台通过
  • 6 个 fork——有个开发者在做离线优先的密码管理工具,看到有人觉得你的代码有用到专门 fork 一份,那种感觉说不出的奇妙

这些数字确实不大,我知道 :) 但这是我第一个开源项目。之前看过我代码的只有老师。当我看到来自另一个国家的陌生人在宿舍凌晨两点写的代码上提了 PR……除了"超现实"我真的找不到别的词来形容。

收到 PR 的那一刻

有个叫 KairosOps 的开发者提了 PR #93,修了一个 bug:Windows 上的 SQLite 路径被错误地加上了前导斜杠,把 C:/path/db 变成了 /C:/path/db。是个真实的 bug,用 #[cfg(windows)] 守卫干净利落地修好了,还补了一个覆盖两个平台的单元测试。

我才 19 岁,就有人给我的项目贡献代码了!(当时真的激动到不行,有人看到我的 issue 还主动提了修复 😭)

当天就合并了。

那条让我破防的消息

有个叫 per-oestergaard 的人在 GitHub 讨论区留了这么一段话:

"你好。我看了你的文章,就是想说,你提出了一个重要的问题,还创造了解决方案,这真的很棒。希望你能顺利实现它。很遗憾我没有渠道可以支持这个项目。"

就这些。就这么一段话。没有技术反馈,没有代码,就是一个看了不丹地区诊所故事的人,觉得这个问题值得被解决,花了 30 秒说出来。

我独自开发 ZamSync 已经好几个星期了。写测试、午夜修边界情况、写没人会看的文档,这种埋头苦干的日子久了,有时候真的会忘了为什么在做这件事。那条消息让我想起来了——有人觉得这个问题真实存在,值得去解决。这就够了,够我继续走下去。

首发之后都更新了什么

继续写代码,下面是这段时间交付的东西:

内置状态面板(阶段 20)

ZamSync 现在带了一个浏览器面板,访问 /ui 就能看到。不用 React,不用构建,不用 CDN。就是二进制直接服务一个深色主题的 HTML 页面,显示实时事件计数、WAL 大小、运行时间,还有通过 SSE 推送的实时事件流。

SSE 重连逻辑这块我挺满意的:指数退避从 1 秒到 30 秒,配合 Visibility API 支持,切换标签页时不会继续给服务器施压,还有去重逻辑确保重连不会重复播放已收到的事件。

类型化的 HTTP 错误码(阶段 21)

API 现在返回结构化的 JSON 错误,包含稳定的机器可读错误码:

{ "error": "SCHEMA_VIOLATION", "message": "missing required field: patient_id"
}
Enter fullscreen mode Exit fullscreen mode

四个错误码:INVALID_JSON(400)、SCHEMA_VIOLATION(422)、WAL_UNAVAILABLE(503)、INTERNAL_ERROR(500)。这些错误码是累加的,永远不会重命名。客户端代码可以安全地做 switch 处理。

文档站

ZamSync 现在有了一个正经的文档站,用 mdBook 构建的,就是 Rust 官方文档和 rust-analyzer 用的那个工具。三页内容:介绍、REST API 参考,还有一份完整的错误码指南,包含重试模式示例。每次推送到 main 分支都会自动部署到 GitHub Pages。

接下来怎么走

技术目标没变:我想把 ZamSync 提交给不丹卫生部,作为他们 ePIS 地区同步问题的基础设施。我只是个学生,不是医疗行业从业者,在那边也没有任何关系。不知道具体怎么推进,但我会一直做下去,直到这个方案无可辩驳地成熟可用,然后再想办法。

路线图上下一个阶段:

  • Async Tokio——用协程替代 OS 线程,这样 512MB 内存的 ARM 设备能同时服务多个对等节点
  • 冲突检测——当两个诊所同时编辑同一条患者记录时发出警告
  • 密钥轮换——在不丢失事件历史的前提下重新生成节点密钥

如果你从事全球健康、低资源 IT 相关工作,或者和低带宽地区的医疗系统有任何联系,我真的非常希望能聊一聊。邮箱是 matheo.delbarre@epitech.eu

一点个人感想

我做这个项目的起因是看到了不丹 ePIS 的困境,心想"我能试着解决这个问题"。当时我连 WAL 是什么都不知道,没用过 HLC 或 Version Vector,也没往 ARM 平台部署过 Rust 二进制文件。就是直接开干,一路走过来。

看到陌生人发现这个项目、fork 它、贡献代码、抽空说这东西有意义——这改变了我对自己在做什么的看法。这不再是一个副业项目了。这是我做过的最认真的一件事,我想把它做完。

如果你想帮忙:

  • 给仓库点个 star——看起来是小事,但对在 awesome-rust 这样的榜单上露面真的很重要,那个榜单要求 50 个 star,我现在是 39 个
  • 贡献代码——有开放的 good-first-issue,合并很快
  • 转发分享——如果你认识做离线优先系统、农村医疗科技或者 Rust 的朋友,把链接发给他们
  • 点赞评论——这能帮助更多人看到这个项目
  • 写信给我——邮箱是 matheo.delbarre@epitech.eu,我还是学生,有时间,非常希望能和做类似问题的人交流

谢谢你们读到这里。谢谢你们的 star、留言和 PR。如果你是那个花了 30 秒说这个问题值得解决的人,也谢谢你。它确实值得。

——Mathéo Delbarre