《HelloGitHub》第 76 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!

简介

HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。

//github.com/521xueweihan/HelloGitHub

这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift…让你在短时间内感受到开源的魅力,对编程产生兴趣!


以下为本期内容|每个月 28 号更新

C 项目

1、gb-studio:简单好玩的 Game Boy 游戏制作工具。这是一款可视化游戏构建工具。无需编程基础即可通过拖拽的方式,快速制作出复古风格的 Game Boy 游戏。不仅支持导出游戏 ROM,还可以直接构建成在线游戏。

2、jq:轻快的命令行 JSON 处理器。JSON 作为最常见的序列化格式,日常开发中经常会遇到。这个项目可以通过简单的命令对 JSON 数据进行格式化、过滤等操作,还支持直接解析接口的 JSON 数据,十分灵活和方便。

3、libvips:极快的多线程图像处理库。具有占用内存小、处理速度快等特点的图像处理底层库。它能够处理多种图像和像素格式,为了使用方便不仅支持命令行调用,官方还提供了 Ruby、Python 等多种编程语言的 SDK。

C# 项目

4、CrazyCar:一款用 Unity 制作的联机赛车游戏。这是一套完整的网络联机游戏解决方案,项目包含游戏端、服务器端、网络传输和管理后台。游戏支持计时赛、多人比赛、个人成就、资源热更等特性,可以运行在 iOS/Android/Windows 设备上。

5、Masuit.Tools:C# 开发工具箱。该库包含了 C# 日常开发常用的操作类,比如字符串处理、进制转换、日期处理、加密/解密、文件压缩、图像裁剪、断点续传、分布式 ID 等。

double milliseconds = DateTime.Now.GetTotalMilliseconds();// 获取毫秒级时间戳
double microseconds = DateTime.Now.GetTotalMicroseconds();// 获取微秒级时间戳
double nanoseconds = DateTime.Now.GetTotalNanoseconds();// 获取纳秒级时间戳
double seconds = DateTime.Now.GetTotalSeconds();// 获取秒级时间戳
double minutes = DateTime.Now.GetTotalMinutes();// 获取分钟级时间戳

C++ 项目

6、imgui:游戏行业内流行的轻量级 C++ 图形界面库。这是个即时模式的 GUI 框架,控件都需要手绘。优点是更加灵活和轻量,可以快速构建功能简单、体积小的 GUI 程序,但不适合用来实现复杂动画的 GUI 应用,多用于开发游戏内的 GUI 工具。

ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);

7、flatbuffers:谷歌开源的高性能序列化库。类似 Protocol Buffers 的序列化格式,但解析速度更快、占用内存更少,多用于对解析耗时敏感的 Android 应用和游戏。

8、CppCoreGuidelines:C++ 核心指南。一份由 C++ 之父 Bjarne Stroustrup 领导的 C++ 编码指南,目的是为了帮助大家更好地使用现代 C++。这个项目主要讨论的是关于 C++ 编写接口、内存管理、并发等方面的问题,适合有一定 C++ 基础想要进阶的小伙伴。

CSS 项目

9、core:CSS 按钮样式集合。该项目实现了 100 种不同样式的按钮。

10、css-protips:CSS 专业技巧。一个帮你提升 CSS 技巧的收藏集。

Go 项目

11、wechat-backup:本地备份微信聊天记录的工具。它能够将手机上的微信聊天记录,解密后保存在电脑上,支持查看、搜索、恢复微信聊天记录。

12、ptg:用 Go 写的 GUI gRPC 客户端。作者在调试 gPRC 接口时,发现没有类似 postman 趁手的 gPRC 客户端,所以就自己动手写了一个然后开源了。

13、wild-workouts-go-ddd-example:Go DDD 示例项目。该项目通过一个预约系统的示例,展示了如何在 Go 项目中实现领域驱动设计(DDD)和读写分离架构(CQRS)。

14、gitleaks:一款静态应用程序安全测试(SAST)工具。它可以检测项目中是否包含密码、API Key、token 等信息,还能够轻松整合到 Git Hook 和 GitHub Action,实现提交代码时自动检测,通过告警和阻止 push 等方式,有效地防止敏感信息泄漏。

15、mercure:一种用于实时通信的开放式协议。该项目是基于 HTTP 和 SSE 的一种协议,然后用 Go 语言实现的实时推送服务。相较于 WebSocket 协议它使用起来更加简单,客户端发起订阅就和请求普通的 HTTP 接口一样,而且在 HTTP/2 下还可以双向通信。

Java 项目

16、picocli:构建 Java 命令行应用的框架。简单易用寥寥几行代码,就可以完成一个 Java 命令行应用程序。虽然由 Java 编写但可以在 Groovy、Kotlin、Scala 中使用,支持命令自动补全、颜色、子命令、帮助信息等功能。

import picocli.CommandLine;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;
import java.io.File;

@Command(name = "example", mixinStandardHelpOptions = true, version = "Picocli example 4.0")
public class Example implements Runnable {

    @Option(names = { "-v", "--verbose" },
      description = "Verbose mode. Helpful for troubleshooting. Multiple -v options increase the verbosity.")
    private boolean[] verbose = new boolean[0];

    @Parameters(arity = "1..*", paramLabel = "FILE", description = "File(s) to process.")
    private File[] inputFiles;

    public void run() {
        if (verbose.length > 0) {
            System.out.println(inputFiles.length + " files to process...");
        }
        if (verbose.length > 1) {
            for (File f : inputFiles) {
                System.out.println(f.getAbsolutePath());
            }
        }
    }

    public static void main(String[] args) {
        // By implementing Runnable or Callable, parsing, error handling and handling user
        // requests for usage help or version help can be done with one line of code.

        int exitCode = new CommandLine(new Example()).execute(args);
        System.exit(exitCode);
    }
}

17、liteflow:轻快、稳定可编排的规则引擎。规则引擎能够帮助系统解耦,实现通过修改规则就可以适应复杂多变的业务逻辑。这是一个功能强大的 Java 规则引擎,支持同步异步混编、平滑热刷新,无需重启应用即可让新规则生效,规则语法简单、文档通俗易懂,学习门槛低容易上手。

18、forest:极简的声明式 Java HTTP 客户端。一个开源的 Java HTTP 客户端框架,采用声明式的开发方式,分分钟即可完成 HTTP 请求的定义、发送、接收、解析、错误处理、日志打印等操作。

public interface AmapClient {
    /**
     * @Get注解代表该方法专做GET请求
     * 在url中的{0}代表引用第一个参数,{1}引用第二个参数
     */
    @Get("//ditu.amap.com/service/regeo?longitude={0}&latitude={1}")
    Map getLocation(String longitude, String latitude);
}

// 注入接口实例
@Autowired
private AmapClient amapClient;
...
// 调用接口
Map result = amapClient.getLocation("121.475078", "31.223577");
System.out.println(result);

JavaScript 项目

19、regex-vis:在线可视化正则编辑器。该项目可将输入的正则表达式,自动生成对应的可视化图形,支持通过编辑图形节点修改正则表达式,以及对正则表达式进行测试等功能。

20、vxe-table:好用的 Vue 表格组件。支持增删改查、虚拟列表、大数据懒加载、数据校验、分页、弹窗等功能的 Vue 表格组件。

21、wangEditor:一款开源的 Web 富文本编辑器。基于 slate.js 和 snabbdom.js 实现的富文本编辑器,支持 JS、Vue 和 React 框架。开箱即用仅需几行代码,就能实现一个功能齐全的富文本编辑器。

import '@wangeditor/editor/dist/css/style.css'
import { createEditor, createToolbar } from '@wangeditor/editor'

// 创建编辑器
const editor = createEditor({
  selector: '#editor-container'
})
// 创建工具栏
const toolbar = createToolbar({
  editor,
  selector: '#toolbar-container'
})

22、mjml:能够快速制作出响应式邮件的框架。邮件样式是一个让人头疼的问题,而通过这个项目制作的邮件,可以正常地显示在不同的邮件客户端。它还提供了在线编辑器,以及多种邮件模版和丰富的组件,能够帮你快速制作出精美、移动端优先、响应式的邮件。

23、naive-ui:仅支持 Vue3 的组件库。拥有完善的 TypeScript 类型推导的 Vue3 组件库,拥有 80 多种组件、中文文档,如果你想换换“口味”可以试试它。

Kotlin 项目

24、typing-learner:可通过视频生成单词本的背单词应用。该项目可将 MKV 格式的英文视频制作成单词库,在记忆单词时可通过台词和播放视频片段,让每个单词都有语境,帮助理解和记忆英文单词。

Objective-C 项目

25、lemon-cleaner:苹果电脑专属的清理工具。腾讯开源的免费 macOS 设备空间清理工具「柠檬清理」,支持深度清理、删除重复文件、卸载应用、状态栏显示等功能,能够一键轻松清理垃圾释放空间。

PHP 项目

26、course-tencent-cloud:PHP 写的网课平台。依托腾讯云基础服务架构,采用 Phalcon 框架开发的网课系统,支持付费、点播、直播、专栏、问答、会员、秒杀等功能。

Python 项目

27、diagrams:用 Python 代码图解系统架构。程序员在做技术方案的时候,系统架构图是必不可少的。该项目将绘制架构图时所需的图标,封装成了对应的类极易调用,文档还提供了丰富的示例,让你分分钟就能上手,轻松用 Python 快速绘制出一份精美且清晰的架构图,这样不仅能省去拖拽调整连线的步骤,而且代码还可以复用,以便应对不断迭代升级的架构。

with Diagram("Advanced Web Service with On-Premise", show=False):
    ingress = Nginx("ingress")

    metrics = Prometheus("metric")
    metrics << Grafana("monitoring")

    with Cluster("Service Cluster"):
        grpcsvc = [
            Server("grpc1"),
            Server("grpc2"),
            Server("grpc3")]

    with Cluster("Sessions HA"):
        primary = Redis("session")
        primary - Redis("replica") << metrics
        grpcsvc >> primary

    with Cluster("Database HA"):
        primary = PostgreSQL("users")
        primary - PostgreSQL("replica") << metrics
        grpcsvc >> primary

    aggregator = Fluentd("logging")
    aggregator >> Kafka("stream") >> Spark("analytics")

    ingress >> grpcsvc >> aggregator

28、orange3:互动式数据分析桌面工具。一款面向不会编程人群的数据挖掘和数据可视化工具箱。内置多种图表类型、支持可视化编程,无需写代码即可做出简单、实用的数据分析软件,多用于教学和实验室等场景。

29、MechanicalSoup:自动与网站交互的轻量级 Python 库。我们写爬虫一般是请求+解析两步走,该项目将 Requests(请求) 和 BeautifulSoup(解析) 两大 Python 爬虫常用库,封装成一个浏览器对象(StatefulBrowser),将上面说的两步并成一步。后面仅需一个浏览器对象,就可以完成请求页面、过滤内容、提交表单、跳转地址等操作,使得代码更加简单、操作更加方便。又因为它不依赖浏览器进程,所以相较于 Selenium 它更加轻巧,但缺点是不支持 JS 动态渲染的页面。

import re
import mechanicalsoup

# Connect to Google
browser = mechanicalsoup.StatefulBrowser()
browser.open("//www.google.com/")

# Fill-in the form
browser.select_form('form[action="/search"]')
browser["q"] = "MechanicalSoup"
# Note: the button name is btnK in the content served to actual
# browsers, but btnG for bots.
browser.submit_selected(btnName="btnG")

# Display links
for link in browser.links():
    target = link.attrs['href']
    # Filter-out unrelated links and extract actual URL from Google's
    # click-tracking.
    if (target.startswith('/url?') and not
            target.startswith("/url?q=//webcache.googleusercontent.com")):
        target = re.sub(r"^/url\?q=([^&]*)&.*", r"\1", target)
        print(target)

30、pandas-profiling:能够自动生成 pandas DataFrame 分析报告的库。虽然 pandas 自带的 df.describe 函数可以方便地生成统计报告,但是信息较少。该项目能够自动生成一份 df 多维度的 HTML 分析报告,包含列的类型、缺失情况、数值分布、行重复率、占用内存大小等信息,有助于更好地了解数据情况。

31、labelImg:图形化界面的图像标注工具。用 Python 和 Qt 编写的图像标注桌面应用,简单方便下载就能用,适用于 Windows、Linux、macOS。标注数据支持 PASCAL VOC 格式的 XML 文件和 YOLO 的 txt 文件。

Rust 项目

32、pueue:命令行任务管理工具。一个处理 shell 命令队列的工具,支持后台执行、定时执行、任务并行、暂停任务、任务崩溃恢复等功能。但它只是一个命令行工具,不能当作任务队列来用。

Swift 项目

33、MiaoYan:一款 macOS 上的 Markdown 编辑器。采用 Swift5 原生开发,适用于 macOS 的 Markdown 编辑器「妙言」。界面清爽好看,支持 PPT 模式、语法高亮、黑暗模式等功能。

其它

34、LxgwWenKai:适合正文阅读的开源中文字体。它是基于 FONTWORKS 出品的 Klee One 字体衍生品,并且针对简体中文做了增补和优化,字体效果惊艳、完全免费且支持商用。

35、MaaAssistantArknights:明日方舟游戏助手。基于图像识别技术,实现一键完成明日方舟游戏的全部日常任务。

36、opensnitch:一个 Linux 应用防火墙。它能够监视和控制应用的网络活动,相当于 Linux 版的 Little Snitch。

37、Publii:带 GUI 的静态网站生成工具。一款本地的静态网站 CMS 工具,有了它无需编程基础,即可通过图形化界面,轻松地创建个人博客、企业官网等,还支持一键发布到 GitHub Page、GitLab、Netlify 等网站。

38、functional-programming-jargon:函数式编程世界的行话。该项目希望通过介绍函数编程中的术语,让学习函数式编程变得容易些,示例代码均采用 JavaScript 编写。

开源书籍

39、dive-into-webpack:《深入浅出 Webpack》。一本系统讲解 Webpack 的书,内容涵盖了 Webpack 的入门、配置、实战、优化以及原理。

40、interviews.ai:《深度学习面试》。书中包含了数百个人工智能领域面试时会遇到的问题(PRB)和解答(SOL),作者希望可以借此帮助研究生/求职者,通过机器学习方面的面试。

机器学习

41、flair:简单易用的 NLP 框架。基于 PyTorch 的 NLP 框架,支持文本命名实体识别(NER)、词性标注(PoS)、词义消歧和分类。项目中包含详细的使用教程,介绍了如何标记文本、训练语言模型等。

from flair.data import Sentence
from flair.models import SequenceTagger

# make a sentence
sentence = Sentence('I love Berlin .')

# load the NER tagger
tagger = SequenceTagger.load('ner')

# run NER over sentence
tagger.predict(sentence)

42、paper-reading:深度学习论文精读集合。李沐发起的深度学习领域经典、最新论文精读视频集合。

43、paper2gui:面向非编程人员的 AI 应用工具箱。该项目提供了多款免安装下载即用的 AI 工具,功能涵盖语音合成、视频补帧、图像风格转化、目标检测、OCR 识别等方面,让编程小白也能轻松拥有 AI “魔法”。

最后

如果你发现了 GitHub 上有趣的项目,就点击分享给大家伙吧。

以上就是本期的所有内容了,往期内容点击阅读

感谢您的阅读,如果觉得本期内容还不错的话 求赞、求分享 ❤️