HelloGitHub 第 64 期:从 GPS 码表到分布式事务,41 个有趣开源项目实战解读

原创2026-10-01 13:40:44388 阅读
文章标签:技术博客文档知识库

HelloGitHub 第 64 期:从 GPS 码表到分布式事务,41 个有趣开源项目实战解读

兴趣是最好的老师,HelloGitHub 以月刊形式分享 GitHub 上有趣、入门级的开源项目。本文基于第 64 期英文版内容(content/en/HelloGitHub64.md),按语言与主题分类带你纵览本期 41 个项目:既有可直接上手的工具与库(GPS 自行车码表、背单词软件、图像处理库),也有适合深入学习源码的高阶项目(逆向工程实现局域网对战、分布式事务管理器、AST 处理工具等)。读完本文,你能快速定位自己感兴趣的领域,并掌握其中多个代表性项目的核心用法与代码要点。

期刊背景与阅读方式

HelloGitHub 是一份按月更新的开源项目精选月刊,每月 28 号发布新一期。第 64 期英文版共收录 41 个项目,覆盖 C、C#、C++、CSS、Go、Java、JavaScript、Kotlin、Python、Swift、AI 及 Other(工具/游戏/资料)等大类,每类按序号列出项目名称、一句话定位与亮点说明,多数项目附有运行截图或演示 GIF。

在原文档中,每个项目均以「名称 + 简介」的形式呈现,其中部分项目给出了可直接运行的代码片段(如 C++ 的 xpack、Go 的 dtm、Python 的 Pillow 与 tqsdk-python、JavaScript 的 sjcl、Swift 的 SwifterSwift)。本文在完整保留这些原始信息的基础上,补充了项目定位解析、代码逐行说明与适用场景,方便不同技术栈的读者各取所需。

本期在仓库中的组织结构与其他各期一致:每个月的期刊是一个独立的 Markdown 文件,存放在 content/en/ 目录下;而月刊内容的生产与项目素材的收集,分别由 script/make_content/ 与 script/github_bot/ 两个脚本支撑(详见文末「HelloGitHub 月刊是如何生产的」一节)。

编程语言类项目

C:X-TRACK —— 开源的 GPS 自行车码表

X-TRACK 是一个开源的 GPS 自行车码表项目,功能齐全且拥有美观的界面,支持离线地图、轨迹显示等功能,适合骑行爱好者与嵌入式开发者研究。原文档提供了在线演示视频可直观了解其 UI 与交互效果。

C#:ToastFish 与 XboxDownload

  • ToastFish:利用 Windows 通知栏背单词的软件。能够选择单词集合,并在背完后进行测验,把碎片时间利用起来,属于「小而美」的桌面工具。
  • XboxDownload:Xbox 下载助手,支持 Xbox 游戏加速下载、比价等功能,适合主机玩家与网络工具开发者参考。

C++:逆向工程实战与结构体序列化

Plants-vs.-Zombies-Online-Battle 是本期的重头戏之一:项目在没有游戏源代码的前提下,通过逆向工程和代码注入实现植物大战僵尸的局域网对战模式。成功加载后,解密模式的最后一关会变为网络对战关卡——其中一名玩家放置植物进行防御,另一名玩家放置僵尸进攻。项目结合逆向工程、C++ 和汇编相关技术,在无源码情况下为游戏增加功能,是逆向工程爱好者不可错过的学习素材。

xpack 是一个实现 C++ 结构体与 JSON/XML/BSON 互转的库,C++ 初学者可以通过该项目学到高阶的宏技巧和初级的 SFINAE 写法。原文档给出的核心用法如下:

#include <iostream>
#include "xpack/json.h" // 包含该头文件

struct User {
    int id;
    std::string name;
    XPACK(O(id, name)); // 添加宏定义XPACK在结构体定义结尾
};

int main(int argc, char *argv[]) {
    User u;
    string data = "{\"id\":12345, \"name\":\"xpack\"}";

    xpack::json::decode(data, u);          // json转结构体
    cout<<u.id<<';'<<u.name<<endl;

    string json = xpack::json::encode(u);  // 结构体转json
    cout<<json<<endl;
    return 0;
}

代码要点:

  • 在结构体定义结尾添加 XPACK(O(id, name)) 宏,即可声明需要参与序列化的成员;
  • xpack::json::decode(data, u) 把 JSON 字符串反序列化进结构体,xpack::json::encode(u) 则把结构体序列化为 JSON 字符串;
  • 只需包含 xpack/json.h 一个头文件即可使用 JSON 能力,XML/BSON 的用法与之类似。

CSS:normalize.css —— 消除浏览器默认样式差异

normalize.css 是一个用来消除浏览器默认样式的 CSS 库。不同浏览器对同一个元素会有不一样的默认样式(例如超链接的颜色),相较于 reset(重置样式)的粗暴做法,normalize.css 采用更和平且高效的方式解决默认样式差异,尽可能让同一个 CSS 文件在不同浏览器上显示效果一致。作为前端工程的「标配」依赖,它几乎是每个 Web 项目的起步依赖之一。

Go:分布式事务、PaaS 平台与 IM 推送

dtm 是 Go 语言实现的分布式事务管理器,优雅地解决了微服务架构下幂等、空补偿、悬挂等分布式事务难题,提供简单易用、高性能、易水平扩展的分布式事务解决方案;除 Go 外,还有 Python、PHP、Node.js 等语言的客户端。原文档给出的 Saga 模式示例:

  // 具体业务微服务地址
  const qsBusi = "http://localhost:8081/api/busi_saga"
	req := &gin.H{"amount": 30} // 微服务的载荷
	// DtmServer为DTM服务的地址,是一个url
	saga := dtmcli.NewSaga("http://localhost:8080/api/dtmsvr").
		// 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCompensate"
		Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req).
		// 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransInCompensate"
		Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req)
	// 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务
  err := saga.Submit()

要点解析:

  • dtmcli.NewSaga(dtmServerURL) 创建 Saga 事务,其中 http://localhost:8080/api/dtmsvr 是 DTM 服务的地址;
  • 每个 Add(正操作URL, 补偿操作URL, 载荷) 声明一个子事务:正常时按顺序执行正操作,任一子事务失败时 DTM 会自动调用已执行子事务的补偿操作完成回滚;
  • saga.Submit() 提交整个事务,由 DTM 统一协调所有子事务的成功或回滚;
  • 该模式天然规避了分布式事务中常见的幂等、空补偿、悬挂问题,是理解 Saga 分布式事务的绝佳入门代码。

其他 Go 项目:

  • erda:企业级一站式 PaaS 平台。基于 Kubernetes 的以应用为中心的 DevOps,支持微服务治理的多云架构,让复杂业务的开发、运维、监控和问题诊断更简单高效,并能减轻混搭技术底座与云平台的运维难度,附带漂亮、简单易用的界面。
  • goim:轻量级、高性能、支持集群的 IM 和实时推送服务。纯 Golang 实现,支持广播消息、房间推送、安全验证和多协议支持等功能,还有基于 Kafka 的异步消息推送。
  • hugo:Go 语言的静态网站生成器。其工作方式是先在本地把内容文件生成静态网页(HTML+CSS),再把生成好的页面上传到服务器;用户只需选择喜欢的主题即可专注于内容创作。Hugo 拥有丰富的插件和主题,即使没有编程基础也能快速制作博客或网站。
  • TopList:各大网站热门头条的聚合网站,可在线预览。

Java:数据可视化、通用类库与分页插件

  • dataease:开源的数据可视化和分析工具,采用 SpringBoot + Vue.js 技术栈实现。原文档列出了四大特性:
    • 数据连接:支持关系型数据库、Excel 等文件、Hadoop 等大数据平台、NoSQL 等各种数据源;
    • 图表展示:支持 PC 端、移动端及大屏;
    • 制作图表:支持丰富的图表类型、支持拖拉拽方式快速制作仪表板;
    • 数据引擎:支持直连模式、本地模式。
  • guava:Google 开源的 Java 三方类库,提供集合、I/O、缓存、并发等开箱即用的工具方法,任何 Java 应用都可以通过依赖方式引入;其源码本身也非常值得学习。
  • Mybatis-PageHelper:MyBatis 通用分页插件,官方提供了详细的使用方法,是 Java 后端分页查询的常用组件。

JavaScript:前端小项目、实时协作编辑器与 AST 工具

  • 50projects50days:50 个采用 HTML + CSS + JS 的前端小项目集合,包含网页源码和效果展示,是标准入门级前端项目。通过查看效果让新手感受前端的美妙,简单的源码降低了上手写代码的门槛。
  • etherpad:支持实时协作的富文本 WYSIWYG 编辑器。
  • gogocode:简化 JavaScript 抽象语法树(AST)处理的工具,借鉴了类似 jQuery 的语法和字符串构建 AST 的思想,大大降低学习成本与开发复杂度。官方团队在其基础上还开发了 Vue2 转 Vue3 的插件,是前端工程化、代码迁移场景的实用工具。
  • rubick:基于 Electron 开发的开源插件化工具箱。作者最初是 uTools 用户,因 uTools 未开源又想接入公司内部工具而诞生了 Rubick;它实现了 uTools 的大部分功能,可以适配 uTools 丰富的开源插件,享受「用完即走」的便利。
  • sjcl:斯坦福大学开源的 JavaScript 加密库,用于 JS 的加密和解密,体积小且支持多种加密算法。核心 API 仅需两行:
sjcl.encrypt("password", "data") //加密数据
sjcl.decrypt("password", "encrypted-data") //解密数据

Kotlin:thunderbird-android

thunderbird-android 是开源的 Android 电子邮件客户端,适合对邮件客户端实现、移动端安全与同步机制感兴趣的 Android 开发者阅读源码。

Python:大数据、自动化、OJ、图像与量化交易

bigdata_analyse:大数据分析实战项目集合,包含淘宝、租房、招聘等数据的分析实例,不仅有 Python、SQL、HQL 的实例代码,还附上了数据集下载地址,是入门大数据分析的实操素材。

JDMemberCloseAccount:用 Python 操作 selenium 的实战项目,以全自动退出京东加入的店铺会员为例,系统介绍 Python 自动化(浏览器驱动、页面操作)的知识与方案,适合学习 UI 自动化的读者。

OnlineJudge:青岛大学开源的在线评测系统(OJ),采用 Django + Vue.js 实现。原文档列出的功能包括:

  • 基于 Docker 的一键部署;
  • 支持 ACM/OI 两种比赛模式、实时/非实时评判;
  • 丰富的可视化图表;
  • 支持多种编程语言:C/C++、Java、Python2/3;
  • 比赛用户 IP 限制(CIDR ranges)。

Pillow:最流行的 Python 图像处理库。它的诞生源于 PIL 年久失修(已于 2011 年停止维护),开源爱好者们在 PIL 基础上创建了 Pillow,支持丰富的图像格式和强大的图像处理功能。原文档给出的入门示例:

# 安装:pip install pillow
# 注意安装的版本,不同版本支持的 Python 版本也不同

from PIL import Image
# 打开 jpg 图像文件
im = Image.open('hellogithub.jpg')
# 转换成黑白图像
grayscale = tatras.convert('L')
# 展示图像
grayscale.show()

要点说明:Image.open() 打开图像文件,convert('L') 将图像转为灰度(黑白)模式,show() 调用系统默认图片查看器展示结果;注意安装版本与 Python 版本的匹配关系。

tqsdk-python:开源的 Python 量化交易框架,少量代码即可实现量化交易程序,支持历史数据、实时数据、策略回测、实盘交易、图形化界面展示等功能。原文档给出的跨期套利示例:

from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask

api = TqApi(TqAccount("H海通期货", "4003242", "123456"), auth=TqAuth("信易账户", "账户密码"))      # 创建 TqApi 实例, 指定交易账户
q_1910 = api.get_quote("SHFE.rb1910")                         # 订阅近月合约行情
t_1910 = TargetPosTask(api, "SHFE.rb1910")                    # 创建近月合约调仓工具
q_2001 = api.get_quote("SHFE.rb2001")                         # 订阅远月合约行情
t_2001 = TargetPosTask(api, "SHFE.rb2001")                    # 创建远月合约调仓工具

while True:
  api.wait_update()                                           # 等待数据更新
  spread = q_1910.last_price - q_2001.last_price        # 计算近月合约-远月合约价差
  print("当前价差:", spread)
  if spread > 250:
    print("价差过高: 空近月,多远月")
    t_1910.set_target_volume(-1)                              # 要求把1910合约调整为空头1手
    t_2001.set_target_volume(1)                               # 要求把2001合约调整为多头1手
  elif spread < 200:
    print("价差回复: 清空持仓")                               # 要求把 1910 和 2001合约都调整为不持仓
    t_1910.set_target_volume(0)
    t_2001.set_target_volume(0)

要点解析:

  • TqApi 指定交易账户与认证信息(TqAuth),get_quote() 订阅合约行情,TargetPosTask 是目标持仓调仓工具;
  • 循环中 wait_update() 等待行情更新,实时计算近月(rb1910)与远月(rb2001)合约价差;
  • 价差过高时做「空近月、多远月」,价差回落后清空持仓,是一个完整的最小量化策略闭环;
  • 需要注意:免费版本仅提供全部期货、商品/金融期权和上证 50、沪深 300、中证 500 的实时行情,付费版支持更多种类及更稳定的服务。

Swift:Firefox iOS 源码与 500 合 1 扩展库

  • firefox-ios:Firefox 浏览器 iOS 源码,适合对移动浏览器内核、渲染与隐私保护机制感兴趣的 iOS 开发者。
  • SwifterSwift:集成 500 多个原生 Swift 扩展的库,提供更方便的函数、语法糖、数据类型、UIKit 以及更高性能的 Cocoa 类,适用于 iOS、macOS、tvOS 等系统。原文档给出的对比示例:
// 原来使用 UIAlertController 实现提醒的代码如下:
let alert = UIAlertController(title: "测试", message: "HelloGitHub", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)

alert.addAction(okAction)
present(alert, animated: true, completion: nil)

// 改成 SwifterSwift 后:
let alert = UIAlertController(title: "测试", message: "HelloGitHub")
alert.show()

可以看到,原本需要手动创建 UIAlertAction、添加动作并 present 的多行代码,借助 SwifterSwift 的 show() 扩展方法可压缩为两行,直观体现了「500 合 1」带来的开发效率提升。

AI 类项目

  • DouZero_For_HappyDouDiZhu:基于快手开源的斗地主强化学习框架 DouZero,实现的欢乐斗地主 AI 助手,是强化学习在棋牌游戏落地的一个可玩实例。
  • HyperLPR:中文车牌识别开源框架,支持 Python、Android、C++ 等编程语言调用,接入简单、准确度较高,推荐给有车牌识别需求的小伙伴。
  • insightface:支持 2D & 3D 人脸分析的 Python 库,基于 PyTorch 和 MXNet 实现,采用先进的 ArcFace 人脸识别方法,高效实现人脸检测、识别等功能。
  • Statistical-Learning-Method_Code:用 Python 实现《统计学习方法》书中的算法,是理论结合代码的好搭档,适合机器学习入门者边看书边跑代码。

Other 类项目:游戏、学习路线与开发工具

  • adarkroom:《小黑屋》是一款有趣的文字冒险类游戏,支持中文,可运行在浏览器、iOS 和 Android 设备上;浏览器默认把游戏进度保存到本地,还支持存档导入/导出防止丢失。友情提示:事件触发需要时间,看滚动文字 + 点击「添柴」耐心等 30 秒就会触发新事件,适合喜欢养成类游戏的玩家(可在线试玩)。
  • developer-roadmap:开发者学习路线图,包含后端、前端、运维部署等方向的学习路径图(提供中文版本),帮你指明前进方向。
  • elasticsearch-dump:Elasticsearch 数据导入/导出工具,可用于 ES 的数据备份和迁移。
  • freeCodeCamp:免费学习编程的开源社区,创立于 2014 年,采用在线编程闯关的学习形式,中文站点于 2021 年上线。平台鼓励新手多动手写代码、运行代码,提倡 RSA 提问原则:先阅读文档资料,再求助于搜索引擎,最后实在没招了再提问,有助于培养良好的提问习惯。作为非营利组织,freeCodeCamp 不仅提供免费课程还开源了网站代码。
  • git-split-diffs:更直观展示代码改动的命令行工具。终端里 git diff 的默认展示不够直观,该项目将代码改动以类似 GitHub 网站的风格展示,还提供多种主题可选。
  • hyper:基于 Electron 的超高颜值终端工具,支持 Windows、Linux、macOS 等主流操作系统。
  • nocodb:开源的智能表格制作工具。它可以把数据库和图片等数据转化为表格方式展现,还提供团队协作、工作流接入以及更开放的 API 服务,让团队「在数据上工作,数据就在手边」,是知名电子表格-数据库混合体 Airtable 的开源替代品。

Book 类项目:安全速查表与编程好书

  • CheatSheetSeries:OWASP(开放式 Web 应用程序安全项目)速查表,由 OWASP 社区的安全专家编写,列举多种安全问题和解决方案,更好地保护你的 Web 应用(可在线阅读)。
  • http-api-guide:《HTTP 接口设计指北》,内容是设计 Web API 的一些建议。
  • understand_linux_process:《理解 Linux 进程》,帮助开发者系统理解进程模型与内核行为。

HelloGitHub 月刊是如何生产的

本期内容所在的仓库不仅保存了各期期刊文件,还提供了支撑月刊生产的脚本,理解它们有助于把握本期的「来龙去脉」:

  • script/make_content/:月刊生成脚本。README 说明后续月刊都通过 python make_content.py 期数/all 生成(需要放在项目根目录下运行),这样通用内容部分需要修改时,只需重新生成月刊,而不必手动修改已发布各期的内容。
  • script/github_bot/:项目素材收集脚本。它通过请求 GitHub API 获取关注的用户 star 的项目,按 star 数量从高到低过滤与展示,并支持定时邮件推送;使用时先 pip install -r requirements.txt 安装依赖,再在脚本中配置 GitHub 账号(ACCOUNT)、发件邮箱(MAIL,如 SMTP 465 端口)与收件人(RECEIVERS),最后运行 python github_bot.py。从开发日志看,该脚本自 2016 年起持续迭代,包括「根据 star 数从高到低展示」「增加收集项目 star 临界值」等能力。

这两部分脚本与各期期刊文件共同构成了 HelloGitHub 从「收集项目 → 生成月刊 → 发布」的完整链路,也让每一期(包括本期的 41 个项目)都有据可查、可持续更新。

小结

HelloGitHub 第 64 期覆盖了从入门级前端小项目(50projects50days、normalize.css)到企业级分布式系统(dtm、erda、goim)的完整光谱,并提供了大量可直接运行的代码示例:C++ 结构体序列化(xpack)、Go Saga 分布式事务(dtm)、Python 图像处理(Pillow)与量化套利(tqsdk-python)、JavaScript 加解密(sjcl)、Swift UI 扩展(SwifterSwift)。无论你是想找练手项目、学习源码,还是希望快速落地某个工具,都可以按语言分类在本期中定位到合适的起点。更多往期与后续内容可在仓库 content/en/ 目录中继续浏览。

登录后查看全文
HelloGitHub