《HelloGitHub》第 89 期
阅读原文时间:2023年08月28日阅读:1

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

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

https://github.com/521xueweihan/HelloGitHub

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


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

C 项目

1、barco:用 C 语言从头写一个 Linux 容器。该项目仅依赖底层的 Linux 功能,用 C 语言实现的一个 Linux 容器,可用来了解更多关于 Linux 容器和内核的技术细节。

$ sudo ./bin/barco -u 0 -m / -c /bin/sh -a . [-v]

22:08:41 INFO  ./src/barco.c:96: initializing socket pair...
22:08:41 INFO  ./src/barco.c:103: setting socket flags...
22:08:41 INFO  ./src/barco.c:112: initializing container stack...
22:08:41 INFO  ./src/barco.c:120: initializing container...
22:08:41 INFO  ./src/barco.c:131: initializing cgroups...
22:08:41 INFO  ./src/cgroups.c:73: setting memory.max to 1G...
22:08:41 INFO  ./src/cgroups.c:73: setting cpu.weight to 256...
22:08:41 INFO  ./src/cgroups.c:73: setting pids.max to 64...
22:08:41 INFO  ./src/cgroups.c:73: setting cgroup.procs to 1458...
22:08:41 INFO  ./src/barco.c:139: configuring user namespace...
22:08:41 INFO  ./src/barco.c:147: waiting for container to exit...
22:08:41 INFO  ./src/container.c:43: ### BARCONTAINER STARTING - type 'exit' to quit ###

# ls
bin         home                lib32       media       root        sys         vmlinuz
boot        initrd.img          lib64       mnt         run         tmp         vmlinuz.old
dev         initrd.img.old      libx32      opt         sbin        usr
etc         lib                 lost+found  proc        srv         var
# echo "i am a container"
i am a container

2、quake2-rerelease-dll:《雷神之锤 2》官方重制版源码。《雷神之锤 2》是 id Software 在 1997 年发布的一款第一人称射击游戏,被许多玩家视为经典。该项目是官方 2023 年重新发布的 《雷神之锤 2》游戏源码。

3、trurl:解析和操作 URL 的命令行工具。该项目是 cURL 作者的新作,可用来解析 URL、替换/提取/设置 URL 中的参数。

C# 项目

4、GeekDesk:小巧的 Windows 桌面启动工具。这款名为极客桌面的免费工具,拥有极简的界面,支持搜索全盘文件、一键呼出、自定义壁纸、定时提醒等功能。

5、Starward:一款开源的 miHoYo 游戏启动器。这是一款支持米哈游旗下所有桌面端游戏的启动器,支持下载游戏、记录游戏时间、切换账号、保存抽卡记录、米游社工具箱等功能,可运行在 Windows 10 及以上的操作系统。

C++ 项目

6、citra:开源的任天堂 3DS 模拟器。能够完美运行几乎所有 3DS 游戏的模拟器,支持 Windows、Linux、macOS 和 Android 操作系统。

7、implot:实时绘图的 GUI 库。该项目可根据用户交互和数据更新,实时更新图像的 Dear ImGui 绘图库,支持 GPU 加速、多种绘图类型、混合绘图等功能。仅需少量的代码,就能集成实时数据可视化的功能。

int   bar_data[11] = ...;
float x_data[1000] = ...;
float y_data[1000] = ...;

ImGui::Begin("My Window");
if (ImPlot::BeginPlot("My Plot")) {
    ImPlot::PlotBars("My Bar Plot", bar_data, 11);
    ImPlot::PlotLine("My Line Plot", x_data, y_data, 1000);
    ...
    ImPlot::EndPlot();
}
ImGui::End();

8、wslg:在 Windows 上运行 Linux 图形化应用的工具。该项目是微软开源的支持在 Windows 操作系统上,运行 Linux GUI 应用的工具。提供了原生和自然的 Linux GUI 应用使用体验,比如跨 Windows 和 Linux 应用的剪切粘贴等功能。WSLg 已内置在 Windows 10 及以上的系统中,可直接通过 wsl 命令启动。

Go 项目

9、etree:更好用的轻量级 Go 语言 XML 库。虽然 Go 语言内置了处理 XML 的库,但在使用时必须按照嵌套层级定义结构体非常繁琐。这个项目的设计灵感来源于 Python 语言的 ElementTree 库,可以在无需定义结构体的情况下灵活的读取、生成 XML 文档。来自 @两双筷子sqldc 的分享

doc := etree.NewDocument()
doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
doc.CreateProcInst("xml-stylesheet", `type="text/xsl" href="style.xsl"`)

people := doc.CreateElement("People")
people.CreateComment("These are all known people")

jon := people.CreateElement("Person")
jon.CreateAttr("name", "Jon")

sally := people.CreateElement("Person")
sally.CreateAttr("name", "Sally")

doc.Indent(2)
doc.WriteTo(os.Stdout)

10、golang-design-pattern:Go 语言设计模式的实例代码。该项目是作者阅读《研磨设计模式》一书的读书笔记,并用 Go 语言实现了书中涉及的 23 个设计模式。

11、ls-lint:检查目录和文件命名风格的工具。这是一款 Go 编写的目录和文件名 Lint 工具,它依赖少、速度快,可通过 yml 配置文件自定义检测规则和忽略目录,适用于 Git Hooks、GitHub Action、Docker Image 等多种场景。

ls:
  .js: snake_case
  .ts: snake_case | camelCase
  .d.ts: PascalCase
  .html: regex:[a-z0-9]+

ignore:
  - node_modules

12、webp_server_go:一款开箱即用的 WebP 服务器。WebP 是谷歌开发的一种为了提升图像加载速度的图片格式,该项目是用 Go 写的 WebP 服务,无需二次开发就能实现将 JPG、PNG、BMP、SVG 等格式的图片,转化成 WebP 格式的服务,能够有效地减小图片体积、节省带宽、提升图片加载速度。

Java 项目

13、Jailer:一款强大的数据库提取数据工具。用于数据库子集和关系数据浏览的工具,支持按照表之间关系浏览数据库、生成 DML 拓扑关系等功能。可用来从生产数据库中提取出,支持测试一条完整业务线所需的数据库表和数据。

14、OneAccount:一款简约的 Android 记账应用。这是一款支持自定义支出/收入分类、定时提醒、预算设置、花费统计等功能的记账 APP。

15、triplea:一款 Java 的回合制战争游戏。这是一款免费、开源的战争棋盘类游戏,玩家可以在游戏中模拟第二次世界大战、拿破仑战争等经典战役,支持 Windows、Linux 和 macOS 操作系统。

JavaScript 项目

16、biomes-game:一款开源沙盒 MMORPG 游戏。这是由已被 OpenAI 收购的 Global Illumination 公司,采用 React+Next.js+TypeScript 和 WebAssembly 等技术,构建的大型多人在线角色扮演游戏。玩家可以在游戏里探索世界、建造房子、交易、社交等,无需下载打开浏览器就可以玩。

17、docsify:开箱即用的文档网站生成器。该项目可以帮你快速生成文档网站,开箱即用无需构建,写完文档即可发布。支持全文搜索、自定义主题、丰富的 API、Emoji 等实用功能。

18、poster-design:一款强大的在线设计图片工具。采用 Vue3+Vite2+Vuex+ElementPlus 技术实现的在线海报图片设计工具,可用于生成电商分享图、文章长图、视频/公众号封面等。

19、warriorjs:一个有趣的 JavaScript 编程 RPG 游戏。在游戏中你将通过 JavaScript 语法指挥战士与敌人战斗、营救俘虏,一步步走向塔顶,获得传说中的 JavaScript 之剑。

20、WeHalo:清爽的微信小程序版博客。该项目是基于 Halo 博客后端的微信小程序,可以轻松地将博客内容搬到微信小程序上,支持个人名片、博文展示、评论、搜索文章、自定义导航栏等功能。来自 @umail.com 的分享

Python 项目

21、DrissionPage:类似 selenuium 的网页自动化工具。这是一个基于 Python 的网页自动化工具,支持 Chromium 内核浏览器。它将控制浏览器和收发请求两大功能合二为一,并提供了统一、简洁的接口。来自 @马小六 的分享

# 下载星巴克产品图
from DrissionPage import SessionPage
from re import search

# 以s模式创建页面对象
page = SessionPage()
# 访问目标网页
page.get('https://www.starbucks.com.cn/menu/')

# 获取所有class属性为preview circle的元素
divs = page.eles('.preview circle')
# 遍历这些元素
for div in divs:
    # 用相对定位获取当前div元素后一个兄弟元素,并获取其文本
    name = div.next().text

    # 在div元素的style属性中提取图片网址并进行拼接
    img_url = div.attr('style')
    img_url = search(r'"(.*)"', img_url).group(1)
    img_url = f'https://www.starbucks.com.cn{img_url}'

    # 执行下载
    page.download(img_url, r'.\imgs', rename=name)

22、learndb-py:从头用 Python 写一个数据库。该项目是用 Python 从零实现一个关系型数据库,从而更好地了解数据的内部构造,此数据库仅可作为学习和练手项目,无法应用在生产环境。

23、nvitop:用 top 命令的方式查看 NVIDIA GPU 和进程状态。这是一款 NVIDIA 设备和进程监控工具,拥有多彩高亮的界面,实时更新的进程和设备信息,支持过滤进程、鼠标控制、发送信号等功能。

24、upiano:运行在命令行里的电子琴。这是一个小型的电子琴命令行应用,它安装简单、运行方便,支持鼠标和键盘两种操作方式。

25、watchgha:在本地查看 GitHub Action 运行状态的工具。仅需一条命令就可以实时显示当前分支,在 GitHub Action 上运行状态的命令行工具。

Ruby 项目

26、OpenFarm:一个教你如何种植农作物的网站。这是一个关于种植农作物的知识库,你可以在里面找到如何种植西红柿、土豆、草莓等植物的步骤,这一切都是免费的。

Rust 项目

27、rjvm:用 Rust 写一个迷你 JVM 的学习项目。这是一个用 Rust 写 JVM7 的练手项目,已实现 Java 基础类型、异常处理、堆栈跟踪、垃圾回收、解析 .class 文件等功能。

28、starship:轻量、速度超快的高颜值终端。这是一个 Rust 写的高颜值、适用于各种 Shell 的终端,它开箱即用,可定制各式各样的提示符,适用于 Windows、Linux、Android 和 macOS 系统。

Swift 项目

29、Mist:自动下载 macOS 系统固件的工具。这款工具可以列出所有可供下载的 macOS 固件/安装程序的信息,包括名称、版本号、发布日期和大小。

30、SkeletonView:一款优雅的 Swift 骨架屏库。骨架屏是在页面展示所需的数据还未加载完成时,先展示出页面大致结构的一项技术。这个 Swift 骨架屏库容易上手、接口友好,支持所有 UIView、自定义动画等功能。

其它

31、beepy:一款全键盘便携式的 Linux 计算机。这是一个结合了黑莓键盘、400*200 LCD 显示屏、2000mAh 电池的板子,售价 79 美元。插上树莓派 Zero W,立马变成了一个黑莓版的 Linux 游乐场。

32、cloc:计算代码行数的工具。这是一款可以统计源码中空白行、注释、不同编程语言代码行数的工具。

33、How-To-Secure-A-Linux-Server:一份 Linux 服务器安全指南。这是一份专注于保护非企业场景下的 Linux 服务器安全的操作指南,它虽然不够专业但对于个人来说足够了。

34、linux-tutorial:一份实用的 Linux 教程。不同于大而全的 Linux 教程,该项目的内容主要侧重于实用性,内容包括 Linux 常用命令、Linux 系统运维、软件运维、常用 shell 脚本等。来自 @孤胆枪手 的分享

35、weekly:独立开发产品变现周刊。关于独立开发者、产品变现相关内容的周刊。

开源书籍

36、lean-side-bussiness:《精益副业:程序员如何优雅地做副业》。该书扩展了《程序员如何优雅地挣零花钱》的内容,引入了精益创业流程,将其优化为副业专用精益副业流程,并增添了独立开发变现和网课变现实践的内容。

37、putting-the-you-in-cpu:当你运行程序时发生了什么?这是一份关于程序是如何跑起来的迷你书,内容涉及计算机基础、操作系统、Linux 如何加载可执行文件等。

38、theByteBook:《深入架构原理与实践》。随着云计算的兴起,技术架构的关注点也从集群可用性治理,发展到云原生和 FinOps 成本管理。该书涵盖了网络、容器、网关、微服务与分布式、云原生、质量监测和成本管理方面的内容,帮助读者快速理清云时代下的技术架构体系。

39、typescript-tutorial:阮一峰的 TypeScript 教程。这是一份面向初学者的 TypeScript 开源教程,内容涵盖 TypeScript 的基本概念和用法。

机器学习

40、audiocraft:Meta 开源的文本生成音乐的库。该项目可根据文本提示词生成高质量、高保真的音频和音乐,比如吹着风吹口哨、一段适合海滩场景的流行舞曲,生成效果十分惊艳。

41、Fooocus:一款开箱即用的图片生成软件。该项目在设计时吸收了 Stable Diffusion 和 Midjourney 的优点,它安装简单、操作方便,省去了复杂的参数调节步骤。用户只需要输入提示词,就可以生成与 Midjourney 水平相当的图片。支持本地部署、离线使用,最低配置要求 8GB 内存和 4GB 的 Nvidia 显卡。来自 @刘三非 的分享

42、machine-learning-notes:徐亦达的机器学习课程。该项目是香港浸会大学(HKBU)徐亦达教授开源的关于机器学习、概率模型、深度学习的讲义和视频课程链接。

感谢乐于分​享开源项目的小伙伴们,欢迎更多的开源爱好者来 HelloGitHub 自荐/推荐开源项目。如果你发现了 GitHub 上有趣的项目,就点击这里分享给大家伙吧!

以上就是本期的所有内容了,往期内容点击阅读,如果你觉得本期内容还不错的话 求赞、求分享

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