- 技术博客
- 文档
- 知识库
【免费下载链接】HelloGitHub
:octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub.
导读:本文以 HelloGitHub 第 42 期月刊(英文版)为骨架,系统梳理本期收录的 30 个开源项目,涵盖 C、C++、CSS、Go、Java、JavaScript、Objective-C、Python、Ruby、Swift、AI 及其他类别。读者既能按语言栈快速定位感兴趣的入门级项目,也能通过文中保留的完整代码示例(LINQ 的 C 实现、数据可视化、版本更新框架、多音字拼音转换、文本分类器等)了解核心 API 的典型用法;文末还结合本仓库的收集脚本与生成脚本,说明这份月刊是如何被生产出来的。
HelloGitHub 与第 42 期概览
HelloGitHub 是一个以月刊形式分享 GitHub 上有趣、入门级开源项目的仓库,每月28 号更新一期,内容面向新手程序员、编程爱好者与开源社区参与者,多数项目上手门槛低、趣味性强。第 42 期按语言/领域分为 12 个大类,共收录 30 个项目,既有linq4c这样在 C 中复刻 C# LINQ 语法的硬核库,也有marktext、markdown-nice这类开箱即用的日常工具,还有nebula(图数据库)、tablesaw(数据框与可视化)、cherry(文本分类器)等可用于实战的组件。
| 类别 | 项目 | 一句话亮点 |
|---|---|---|
| C | linq4c | 在 C 中使用 LINQ 风格的链式查询(60+ 方法) |
| C++ | nebula | 可承载千亿顶点、万亿条边的开源图数据库 |
| CSS | iCSS | CSS 技巧与动画实现话题集合 |
| Go | starcharts | 一键生成 GitHub Star 增长曲线图 |
| Go | ultimate-go | 结合源码与计算机基础的 Go 学习总结 |
| Java | lila | 基于 Scala 的免费开源多语言在线国际象棋 |
| Java | simple-java-mail | 支持身份代理的轻量级 Java 邮件框架 |
| Java | tablesaw | Java 版数据框 + 可视化库,可与 Smile 机器学习库集成 |
| Java | XUpdate | Android 全量版本更新整体解决方案(SDK + 后台 + 管理界面) |
| JavaScript | leonsans | 可动态调节粗细、支持 Canvas 动画的 JS 字体 |
| JavaScript | markdown-nice | 自定义样式 Markdown 编辑器,一键发布多平台 |
| JavaScript | marktext | 跨平台所见即所得的开源 Markdown 编辑器 |
| JavaScript | star-battle | 基于 ES6 与 Canvas 的飞船射击游戏 |
| JavaScript | taro-music | Taro + 网易云音乐 API 的跨端小程序 |
| Objective-C | JHBlog | iOS 初级到中级的晋级知识集合 |
| Python | bokeh | 面向 Web 浏览器的交互式数据可视化库 |
| Python | GeneralNewsExtractor | 基于论文算法实现的网页正文抽取器 |
| Python | healthchecks | Python3 + Django2 的 Cron 定时任务监控工具 |
| Ruby | ruby-pinyin | 正确处理多音字的汉字转拼音库 |
| Swift | EFQRCode | 生成与识别二维码的纯 Swift 库,支持艺术二维码 |
| AI | albert_zh | 海量中文预训练 ALBERT 模型 |
| AI | cherry | 一行代码调用、十行代码自定义训练的多语言文本分类器 |
| AI | ChineseNLPCorpus | 中文自然语言处理数据集汇总 |
| Other | advanced-java | Java 进阶知识点集合(高并发/分布式/高可用/微服务) |
| Other | c9-python-getting-started | 微软出品的零基础 Python 入门教程 |
| Other | chinese-colors | 中国传统颜色在线手册 |
| Other | navi | 命令行辅助工具,告别忘记历史命令 |
| Other | Nodejs-Roadmap | Node.js 服务端技术栈学习指南 |
| Other | pull | 自动同步 fork 仓库、批量生成 PR 的 GitHub App |
| Other | reverse-interview | 面试反问环节的问题清单 |
一、C:在 C 中复刻 C# 的 LINQ 查询体验
linq4c:C 语言版 LINQ
linq4c 是 C# 中 LINQ(语言集成查询)的 C 语言实现,目前已实现 LINQ 的大部分方法(60+),且仍在不断完善中。它让习惯了函数式链式调用的开发者,在 C 语言中也能写出Where → Select → ToArray风格的查询管道。原文档给出了完整示例:
bool WhereCallback(void *item) { char *str= (char *)item; return str[0] == 'h'; } void *SelectCallback(void *item) { return newStr("%s_1", (char *)item); } char *str1 = "huang", *str2 = "hai", *str3 = "feng"; ArrayList array = arrlist_new(); arrlist_append(array, str1); arrlist_append(array, str2); arrlist_append(array, str3); Linq *lq = From(array); ArrayList result = lq ->Where(lq, WhereCallback) ->Select(lq, SelectCallback) ->ToArray(lq); for(int i = 0; i < arrlist_size(result); i++) { printf("%s\n", arrlist_get(result, i)); }从示例可以看出其核心用法:
From(array)将ArrayList包装成Linq查询对象;Where接受一个返回bool的回调函数,用于过滤(此处过滤首字符为'h'的元素,即"huang");Select接受一个返回void *的映射回调(此处给每个元素追加_1后缀,得到"huang_1");ToArray终止链式调用并物化结果,之后用arrlist_size/arrlist_get遍历输出。
它用回调函数模拟了 LINQ 的委托机制,适合想在嵌入式或纯 C 工程中复用函数式查询思想的开发者学习与使用。
二、C++:可承载千亿顶点、万亿条边的图数据库
nebula:Nebula Graph
Nebula Graph 是一款开源图数据库,目标是为超大规模的图数据提供高并发、低延时的读、写及计算服务。据原文档介绍,它是当时世界上唯一能够容纳千亿个顶点和万亿条边、并提供毫秒级查询延时的图数据库解决方案。其核心特点包括:
- 全对称分布式架构
- 可扩展
- 高可用
- 数据强一致
- 类 SQL 查询语言
适合社交关系网络、推荐系统、金融风控等需要处理复杂关系数据的场景。对想要入门图数据库、理解分布式存储引擎的开发者而言,它提供了一个可以直接运行、具备完整查询语言的开源样本。
三、CSS:从技巧到动画
iCSS:CSS 话题集合
iCSS 围绕 CSS 话题,系统讲述了 CSS 相关的技巧与动画实现。它不是一个库,而是一份持续更新的知识集合,覆盖选择器、布局、动效等主题,适合希望深挖 CSS 表现力、从「会写」进阶到「会设计」的前端开发者作为参考手册与灵感来源。
四、Go:星图生成与源码研读
starcharts:GitHub 星图生成器
starcharts 是一个用于生成 GitHub 项目 Star 增长曲线图(星图)的小工具。它可以自动拉取仓库的 Star 历史数据并绘制成图,常被项目维护者用来在 README 中展示项目热度走势,是了解 GitHub 开放 API、图表渲染流程的轻量入门项目。
ultimate-go:Go 源码学习心得
ultimate-go 是作者在学习 Go 过程中,对 Go 源码以及涉及的计算机基础知识的心得与总结,适合 Go 学习者阅读。它把语言特性、标准库源码和背后的计算机理论(如调度、内存模型、并发原语)结合起来讲解,帮助读者理解 Go 的设计思想而不只是 API 用法,是进阶阅读的路线图式资料。
五、Java:国际象棋、邮件、数据框与版本更新
lila:免费开源的在线国际象棋
lila 是一款基于 Scala 语言开发的在线国际象棋游戏,完全免费、开源、无广告,支持多语言,并提供在线试玩入口。它不仅是成品应用,其代码库本身也是一个大型 Web 项目范例,涵盖实时对战、用户系统、AI 对弈等模块,适合想学习 Scala 与 WebSocket 实时交互的开发者。
simple-java-mail:轻量级 Java 邮件框架
simple-java-mail 是一个轻量级 Java 邮件框架,支持复杂、自定义的发送电子邮件业务,包括:
- 经过身份验证的代理
- 附件
- 嵌入式图像
- 自定义标头和属性
- 强大的地址验证
其亮点是支持身份代理(authenticated proxy)等功能,可降低邮件被其他邮件服务拦截的概率,适合在需要精细控制发信链路、批量发送场景下替代繁琐的 JavaMail 原生 API。
tablesaw:Java 版数据框与可视化库
tablesaw 是一款包含数据框(DataFrame)和可视化库的 Java 实用工具,可用于加载、转换、过滤和汇总数据,支持描述性统计,并能与 Smile 机器学习库完美集成。原文档给出的示例代码展示了其「读取 CSV → 构建箱线图 → 弹出窗口展示」的完整流程:
public class BoxExample { public static void main(String[] args) throws Exception { Table table = Table.read().csv("../data/tornadoes_1950-2014.csv"); Layout layout = Layout.builder().title("Tornado Injuries by Scale").build(); BoxTrace trace = BoxTrace.builder(table.categoricalColumn("scale"), table.nCol("injuries")).build(); Plot.show(new Figure(layout, trace)); } }代码要点:
Table.read().csv(...)负责数据加载(此处读取 1950–2014 年美国龙卷风数据);Layout.builder().title(...)设置图表标题;BoxTrace.builder(分类列, 数值列)以「等级 scale」为横轴、「受伤人数 injuries」为纵轴构建箱线图轨迹;Plot.show(new Figure(layout, trace))一次性把布局与轨迹组合成图并展示。
对于数据分析师职业兴起背景下的 Java 工程师而言,掌握这类数据可视化库是必备技能。
XUpdate:Android 全量版本更新整体解决方案
XUpdate 是一套基于 Android 的全量版本更新整体解决方案。它除了提供 Android SDK 外,还附带了 Spring Boot 搭建的后台服务以及 Vue.js 编写的后台管理界面,主要解决中小企业 Android 版本管理混乱的问题,提供完全可插拔的版本更新能力,并配有大量文档。核心调用非常简洁:
XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl) .isAutoMode(true) // 如果需要完全无人干预、自动更新,需要 root 权限【静默安装需要】 .update();参数说明:
newBuild(getActivity()):以当前 Activity 为上下文构建更新请求;updateUrl(mUpdateUrl):指定版本检查接口地址;isAutoMode(true):开启自动更新模式,但无人干预的静默安装需要 root 权限;update():发起版本检查与更新流程。
框架采用「SDK + 服务端 + 管理端」三件套的形态,既适合中小团队快速落地,也适合学习版本更新、增量/全量发布等移动端工程实践。
六、JavaScript:字体、编辑器与游戏小程序
leonsans:可编程的 Sans Serif 字体
leonsans 是一个用 JavaScript 编写的 Sans Serif 半衬线字体(Leon Sans)。它允许动态更改字体粗细,并在 HTML 5 的 Canvas 元素中创建自定义动画、效果或形状,即「字体即程序」——文字可以被当作几何图形实时编程渲染。原文档特别提到,这个字体是作者为庆祝刚出生的婴儿 Leon 而创作的。
markdown-nice:自定义样式的 Markdown 编辑器
markdown-nice 是一款能够自定义样式的 Markdown 编辑器,支持在浏览器中实时保存内容和自定义样式,并支持上传图片、脚注、公式等能力。输出内容可以一键复制到微信公众号、知乎、掘金、博客园和 CSDN 等平台,能显著减轻公众号文章的排版与编辑工作,是内容创作者的高频效率工具。
marktext:优雅的跨平台 Markdown 编辑器
marktext 是一个简单且优雅的开源 Markdown 编辑器,支持 Linux、macOS 和 Windows。原文档列出的功能包括:
- 实时预览(所见即所得)和简洁明了的界面
- Markdown 扩展,例如数学表达式和 emoji 表情
- 输出 HTML 和 PDF 文件
- 各种编辑模式:源代码模式、打字机模式、专注模式
它定位为「桌面端原生应用」,适合把 Markdown 当作主力写作格式、希望在本地获得无干扰编辑体验的用户。
star-battle:Canvas 飞船射击游戏
star-battle 是一个使用 JavaScript ES6 与 Canvas 开发的飞船射击类游戏,并提供在线试玩入口。代码量适中、结构清晰,是学习 Canvas 游戏循环、碰撞检测、对象管理与 ES6 模块化的理想练手项目。
taro-music:Taro 网易云音乐小程序
taro-music 是基于 Taro 与网易云音乐 API 开发的网易云音乐小程序,技术栈为typescript + taro + taro-ui + redux,目前主要着重小程序端的展示。通过该项目可以学习上述技术栈的使用与实战,快速上手用 Taro 开发自己的小程序。原文档列出的已实现功能包括:
- 用户登录
- 我的关注列表
- 最近播放列表
- 歌曲播放页面
它是「一个真实业务形态的跨端小程序」范本,适合想了解小程序从数据请求、状态管理到页面渲染全链路的前端开发者。
七、Objective-C:iOS 晋级之路
JHBlog:iOS 开发者知识集合
JHBlog 整理了作者从初级 iOS 开发到中级的晋级之路所积累的相关知识集合,涵盖 OC 语言特性、UIKit 使用、常见面试题等主题,适合处于进阶阶段的 iOS 开发者按图索骥、查漏补缺。
八、Python:可视化、正文抽取与任务监控
bokeh:面向浏览器的交互式可视化
bokeh 是一个交互式数据可视化 Python 库,专注于在 Web 浏览器中实现美观、直接的数据可视化功能。使用它可以快速、轻松地创建交互式图表、仪表板和数据可视化程序,并原生支持流式数据集的可视化(数据不断追加、图表实时更新)。与静态绘图的 Matplotlib 相比,bokeh 更强调「浏览器交互 + 实时流数据」,适合构建数据看板与监控大屏。
GeneralNewsExtractor:基于论文算法的正文抽取器
GeneralNewsExtractor 是基于论文《基于文本及符号密度的网页正文提取方法》用 Python 实现的正文抽取器,可用来提取 HTML 中的正文内容、作者和标题。其核心思路是根据文本密度与符号密度识别网页主体区域,而不依赖特定站点的 XPath 规则,因而对新闻类网页具有较好的通用性。原文档还提到,HelloGitHub 作者原本也有实现该论文算法的想法但未能落地,最终由 kingname 完成了这个项目——这也是开源社区「想法共享、接力实现」的典型例子。
healthchecks:Cron 定时任务监控
healthchecks 是基于 Python3 和 Django2 的 Cron 定时任务监控工具,同时支持多种定时任务失败时的告警方式。其工作机制是:任务按时向 healthchecks 发送心跳(ping),若超时未收到心跳则判定任务失败并触发告警。它解决了「定时任务悄悄失败却无人知晓」这一运维痛点,适合个人服务器与团队内部使用。
九、Ruby:正确处理多音字的拼音转换
ruby-pinyin:汉字转拼音库
ruby-pinyin 可以把汉字转化为对应的拼音,并且能够较好地处理多音字情况。原文档给出的示例非常直观:
PinYin.of_string('南京市长江大桥', :unicode) return ["nán", "jīng", "shì", "cháng", "jiāng", "dà", "qiáo"] 能够正确的将"长"转为"chang2",而不是"zhang3"要点:
PinYin.of_string(text, :unicode)返回带声调符号(或声调数字,如chang2)的拼音数组;- 示例中「南京市长江大桥」的「长」被正确识别为
cháng/chang2(长江之「长」),而非zhǎng/zhang3(生长之「长」),说明库内置了多音字消歧策略。
对需要做拼音搜索、姓名排序、中文输入法等 Ruby 项目的开发者来说,这是一个开箱即用的基础库。
十、Swift:艺术二维码生成
EFQRCode:纯 Swift 二维码库
EFQRCode 是一个轻量级的、用来生成和识别二维码的纯 Swift 库。它可以根据输入的水印图和图标生成艺术二维码,即在标准二维码的基础上叠加 Logo 或水印而依然保持可识别性,适合 App 内分享、营销物料等场景,同时兼具二维码识别能力,是 Swift 开发者处理二维码需求的首选参考实现。
十一、AI:预训练模型、文本分类与数据集
albert_zh:中文预训练 ALBERT 模型
albert_zh 提供海量中文语料预训练的 ALBERT 模型。ALBERT 通过参数共享与嵌入矩阵分解大幅压缩了 BERT 的参数量,同时保持下游任务效果,因此中文场景下该仓库常被用作文本分类、命名实体识别、句子相似度等任务的底座模型,并附带了在中文任务上的评估结果,适合 NLP 初学者直接加载使用。
cherry:一行代码完成文本分类
cherry 是一款简单易用的 Python 文本分类器,支持多语言,自带两个预训练模型。使用预训练模型分类只需一行代码,用自有数据集自定义训练也仅需十行代码,且能轻松获得较高的精确率与召回率;同时支持自定义分词算法、分类算法等扩展。原文档示例:
>>> res = cherry.classify(model='harmful', text=['她们对计算机很有热情,也希望学习到数据分析,网络爬虫,人工智能等方面的知识,从而运用在她们工作上']) >>> res.word_list [(2, '她们'), (1, '网络'), (1, '热情'), (1, '方面'), (1, '数据分析'), (1, '希望'), (1, '工作'), (1, '学习'), (1, '从而')] >>> res.probability # 返回结果分别对应 赌博,正常,政治,色情 4个 类别的概率 array([[4.43336608e-03, 9.95215198e-01, 3.51419231e-04, 1.68657851e-08]])要点:
cherry.classify(model='harmful', text=[...])指定预训练模型并传入待分类文本;res.word_list返回分词结果及词频(用于解释模型依据);res.probability返回四个类别(赌博、正常、政治、色情)的概率分布,本例中「正常」类概率高达约 99.5%。
对于需要快速搭建内容安全过滤、评论审核等能力的团队,这是一个低成本起步的实用库。
ChineseNLPCorpus:中文 NLP 数据集汇总
ChineseNLPCorpus 是中文自然语言处理数据集的汇总仓库,收录了文本分类、情感分析、命名实体识别、关系抽取等常见任务的中文语料,省去研究者逐个站点搜集数据的成本,可作为中文 NLP 实验的数据源入口。
十二、Other:面试、学习路线与效率工具
advanced-java:Java 进阶知识点集合
advanced-java 是一份 Java 工程师进阶知识点集合,内容涵盖高并发、分布式、高可用、微服务等领域,并提供在线阅读入口。这些知识点不局限于 Java 语言,后端开发者都可以从中受益,常被作为系统性查漏补缺的面试与进阶资料。
c9-python-getting-started:微软零基础 Python 教程
c9-python-getting-started 是微软出品的零基础 Python 入门教程,内容浅显易懂,包含示例代码、演示 PPT 以及配套的视频教程,适合完全没接触过编程的初学者按官方路径逐步上手。
chinese-colors:中国传统颜色手册
chinese-colors 是「中国传统颜色」在线手册,提供在线体验入口,将「月白」「黛蓝」「胭脂」等中国传统色名与色值一一对应,既是设计灵感库,也是了解颜色命名文化的趣味项目。
navi:命令行辅助工具
navi 是命令行辅助工具,帮你快速找到历史输入过的命令、避免忘记命令语法。它通过交互式模糊搜索在命令备忘库与历史记录中检索,把「记命令」这件事交给工具,适合重度使用终端的开发者。
Nodejs-Roadmap:Node.js 技术栈学习指南
Nodejs-Roadmap 是 Node.js 技术栈学习指南,内容侧重于 Node.js 服务端,包含:Node.js 基础知识、Node.js 核心模块、主流框架实践、缓存、数据库、消息中间件、DevOps、HTTP 协议以及 Node.js 在微服务中的应用,并提供在线阅读入口,适合按路线系统学习服务端 Node.js。
pull:自动同步 fork 仓库的 GitHub App
pull 是一个 GitHub App,可以让 fork 的仓库自动同步、保持与原仓库一致。很多同学参与开源时会 fork 项目,但难以持续获取原项目的最新更新,该 App 正是为解决此痛点而生。据原文档介绍,截至目前已有数万仓库使用,已自动生成 70 万个 PR 且数量仍在增长。原文档同时提醒:如果 master 分支有更改,需要备份后再使用,具体注意事项以项目英文文档为准。
reverse-interview:面试反问问题清单
reverse-interview 面向「你还有什么要问我的吗?」这一面试收尾环节,整理了一份候选人可以向面试官提出的问题清单,帮助求职者反向考察团队文化、技术栈与职业发展空间,并提供了中文翻译版本。
附录:本期月刊是如何生产出来的
理解第 42 期的内容组织方式,有助于判断这些推荐条目的信息质量。本仓库提供了配套的两个脚本,构成了月刊生产的完整流水线:
项目收集:script/github_bot/github_bot.py 负责从 GitHub events API 拉取关注用户近一天(
DAY = 1,见 github_bot.py)的WatchEvent(即 star 事件),在check_condition中过滤掉自己账号的项目;随后在get_stars中逐项目查询 star 数,过滤掉低于临界值(STARS = 100,见 github_bot.py)的项目,并按 star 数从高到低排序;最终send_email将结果拼成 HTML 表格邮件发送给收件人。该脚本通过 QQ 邮箱的SMTP_SSL(hostsmtp.qq.com、port465)发送,配置项集中在 script/github_bot/README.md 中说明。月刊生成:script/make_content/make_content.py 负责把每期内容与通用模板拼接成最终月刊:模板中以
{{ hello_github_num }}和{{ hello_github_content }}两个占位符标记期数与正文位置(见 make_content.py),脚本读取模板与当期的content.md后替换占位符,生成HelloGitHub{期数}.md。运行方式为在仓库根目录执行python make_content.py 期数/all(all表示重新生成所有期),详细说明见 script/make_content/README.md。
也就是说,本期文档是「脚本收集候选 → 人工筛选撰写 → 模板批量生成」这一流程的产物,这正是 HelloGitHub 能保持每月 28 号稳定更新、且通用部分可批量维护的原因。
继续阅读
- 上一期:content/en/HelloGitHub41.md
- 下一期:content/en/HelloGitHub43.md
- 仓库总览:README.md(中文)与 README_en.md(英文)记录了 HelloGitHub 的项目定位、更新机制与历史期数索引;内容目录下的 content/en 目录按期存放全部英文版月刊。
说明:本文所有项目描述与示例代码均继承自原文档;涉及「千亿顶点/万亿条边/毫秒级查询」「数万仓库、70 万个 PR」等数据均为原文档中的项目官方表述,实际能力与运行效果请以对应项目仓库的最新文档为准。
- 技术博客
- 文档
- 知识库
【免费下载链接】HelloGitHub
:octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub.
相关推荐
HelloGitHub 第 97 期精选:40 个有趣且入门级的开源项目全景导读
HelloGitHub 第 97 期精选:40 个有趣且入门级的开源项目全景导读 本文以 HelloGitHub 月刊的 第 97 期(content/Hell
技术博客文档知识库HelloGitHub 第 109 期精选:43 个有趣且入门级的开源项目全景解读
HelloGitHub 第 109 期精选:43 个有趣且入门级的开源项目全景解读 本篇基于 HelloGitHub 第 109 期月刊的完整内容展开,系统梳理
技术博客文档知识库《HelloGitHub》第 43 期:30 个有趣、入门级开源项目精选指南
《HelloGitHub》第 43 期:30 个有趣、入门级开源项目精选指南 兴趣是最好的老师, HelloGitHub 让你对开源感兴趣!本文是 HelloG
技术博客文档知识库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考