《HelloGitHub》第 89 期

2023-08-28 12:01:39

興趣是最好的老師,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 上有趣的專案,就點選這裡分享給大傢伙吧!

以上就是本期的所有內容了,往期內容點選閱讀,如果你覺得本期內容還不錯的話 求贊、求分享 ❤️