興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!
HelloGitHub 分享 GitHub 上有趣、入門級的開源專案。
這裡有實戰專案、入門教學、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!
以下為本期內容|每個月 28 號更新
1、EasyLogger:超輕量級 C/C++ 紀錄檔庫。佔用資源少適合物聯網和微控制器等專案,功能簡單容易上手,能夠通過外掛形式擴充套件功能。特性:
2、foolrenderer:用 C 語言從零實現的軟體渲染器。不用圖形 API 僅用幾千行 C 程式碼,實現了一套類似 OpenGL 的基本圖形功能,以及應用於遊戲開發的實時渲染技術,如陰影、切線空間法線對映、基於物理的材質系統等。該專案包含豐富的註釋和數學計算推導過程的說明,可用於幫助理解和學習 GPU 的基本工作原理、基礎渲染知識和著色器原理。
3、unicorn:輕量級的多平臺、多架構 CPU 模擬器框架。基於 QEMU 開發的 CPU 模擬器,多用於逆向、執行惡意程式碼等。特點:
4、Bili.Uwp:非官方的 B 站桌面應用。基於 UWP 框架開發的嗶哩嗶哩 Windows 使用者端,簡單易用、介面清爽,適用於 Windows 10/11 桌面系統和 Xbox。
5、Stockfish:強大的國際象棋引擎。它在眾多國際象棋引擎評級列表中均名列前茅,棋藝基本上是吊打職業選手。它不僅可以對戰,還支援棋局分析、評估棋藝,幫助國際象棋愛好者提升棋技。雖然這是一個引擎不能單獨執行,但是社群提供了豐富的 GUI 軟體下載就能用,甚至還可以用來解說國際象棋比賽。
6、annoy:用於近似最近鄰搜尋的演演算法庫。近似最近鄰(ANN)方法是指一系列解決最近鄰查詢問題的近似演演算法,多用於內容推薦、搜尋等場景。該專案是封裝好的 C++/Python Annoy 演演算法庫。Annoy 是用樹為資料結構的 ANN 演演算法實現,它通過隨機投影建立二元樹構建索引提升查詢效率,採用優先佇列和「森林」查詢方法提高準確率,實現海量資料下的實時搜尋。
from annoy import AnnoyIndex
import random
f = 40 # Length of item vector that will be indexed
t = AnnoyIndex(f, 'angular')
for i in range(1000):
v = [random.gauss(0, 1) for z in range(f)]
t.add_item(i, v)
t.build(10) # 10 trees
t.save('test.ann')
# ...
u = AnnoyIndex(f, 'angular')
u.load('test.ann') # super fast, will just mmap the file
print(u.get_nns_by_item(0, 1000)) # will find the 1000 nearest neighbors
7、xbmc:強大自由的媒體中心軟體。這是一個媒體播放器軟體,但折騰一下就是家庭媒體娛樂中心。它不僅支援播放本地視訊,還能夠安裝各種外掛以及播放網路儲存裝置(NAS)、投屏、直播、電視、播客等源。能夠執行在 Linux、macOS、Windows、Android、iOS 等裝置,介面支援中文更多功能等待你的挖掘。
8、RedPanda-CPP:易用的輕量級 C/C++ 整合式開發環境。小熊貓 C++ 是一款專為程式設計新手和學生準備的 IDE,它沒有複雜的安裝和設定過程開箱即用。支援開發所需的自動補全、語法高亮、編譯執行和偵錯 C/C++ 程式等功能。不僅如此,它還整合了 ege、海龜作圖、raylib 等多種學習庫,以及試題集和 OJ 功能,便於程式設計新手學習和使用。
9、Cnblogs-Theme-SimpleMemory:一款以閱讀為主的部落格園面板。部落格園是一個部落格平臺,它支援使用者自定義面板。該專案就是一款開源的部落格園面板,檔案有詳細的安裝步驟,一看就會立馬就能用上。雖然面板會讓部落格的存取速度變慢一點,但是面板效果簡潔好看值得一試。
10、bk-cmdb:騰訊開源的設定平臺。面向資產及應用的企業級設定管理平臺,擁有主機管理、組織架構管理、通用許可權管理、操作審計等功能。該專案的程式碼稽核很嚴格,此舉不僅保證了專案的程式碼質量,還提高了程式碼的可讀性,推薦閱讀原始碼。
11、nightingale:開源的雲原生監控系統。支援 Docker 等多種部署方式,集資料採集、監控告警、視覺化為一體的企業級監控平臺。藉助高效能時序庫,可以滿足數億時間線的採集、儲存和告警分析的場景。該專案已在上千家企業部署落地,經歷了各種生產環境的檢驗。
12、CasaOS:簡單易用的家庭雲系統。只需一鍵即可安裝在 NAS、樹莓派等各種家庭智慧裝置上,讓你可以隨時隨地管理個人資料和裝置。
13、ddns-go:簡單易用的 DDNS 工具。眾所周知域名解析中域名對應的是固定 IP,但是本地機器的 IP 一般是動態的,所以無法完成域名解析實現公網存取。動態 DNS(DDNS) 技術就是用來解決動態 IP 的域名解析問題,該專案能夠自動獲取你本機的公網 IP,並自動更新到域名服務商,從而實現公網存取本地機器。
14、colly:可能是最知名的 Go 爬蟲框架。它擁有友好的 API 和豐富程式碼範例,短時間內即可上手。效能方面單核能達到 1K 請求/秒,還可以輕鬆管理請求方式、間隔和最大並行數,功能強大且優雅。
func main() {
c := colly.NewCollector()
// Find and visit all links
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.Visit("https://go-colly.org/")
}
15、plantuml:從文字描述生成 UML 圖的工具。該專案可根據簡單的文字描述畫出 UML 圖,支援順序圖、用例圖、時序圖等,除此之外還支援架構圖、甘特圖、思維導圖、實體關係圖等非 UML 圖。支援線上、命令列、桌面應用等多種使用方式,可根據情況自行選擇。
java -jar plantuml.jar 文字檔案
將得到一個同名的 png 檔案
16、doris:高效能的分析資料庫。一個基於 MPP 架構的高效能、實時的分析型資料庫,尤其是在海量資料和高並行場景下表現優異。目前,在眾多知名企業中均有使用,可用來構建使用者分析、紀錄檔檢索分析、人物誌等應用。
17、koodo-reader:先進的電子書閱讀工具。該閱讀器支援 EPUB、Kindle、PDF、漫畫等多種常見文字格式,介面清爽功能豐富,擁有自定義字型、新增筆記、書籤、劃詞翻譯、匯入圖書、資料同步等功能。提供了 Windows、macOS 和 Linux 使用者端,還支援網頁版可線上使用。
18、video.js:流行的 HTML5 視訊播放器。一款開箱即用的 Web 視訊播放器,它支援 HTML5 視訊和串流媒體格式,至今有超過 45 萬個網站在使用它。
19、vue-idle-game:掛機放置類小遊戲。用 Vue.js 寫的線上 RPG 遊戲,裝備完全隨機全靠刷,沒有任務就是刷。
20、nocobase:易擴充套件的無程式碼開發平臺。這個專案可以讓你不寫程式碼,僅通過點選和拖拽,分分鐘搭建出共同作業和內部管理系統。專案還處於早期開發階段,請勿用於生產環境。
21、van-blog:實用的一站式個人部落格系統。一款簡潔優雅的部落格系統,追求極致響應速度和部落格體驗。前後臺均為響應式,支援 Docker 一鍵部署。前臺為靜態頁面並支援增量渲染,按需構建更新頁面。拒絕花裡胡哨的功能,專注於個人部落格場景。
22、Unciv:一款類似《文明》的單機策略手遊。僅 6M 的回合制策略遊戲,玩家可以在遊戲中模擬建立帝國文明,相當於開源版的《文明》安卓手遊。雖然遊戲畫面是畫素風格,但並未影響遊戲體驗,遊戲支援中文、內容豐富可玩性非常高。
23、dooit:命令列待辦事項工具。用 Python 寫的互動式命令列 todo 工具,操作簡單支援快捷鍵和滑鼠,介面精緻可自定義主題和圖示。
24、gradio:用 Python 為模型建立演示介面。這是一個用於構建機器學習和資料科學演示的 Python 庫,它包含多種輸入和展示的元件,使用起來極其方便,只用幾行程式碼就可以建立出演示機器學習模型的 Web 介面。
import gradio as gr
def sketch_recognition(img):
pass# Implement your sketch recognition model here...
gr.Interface(fn=sketch_recognition, inputs="sketchpad", outputs="label").launch()
25、label-studio:開源的資料標註工具。支援音訊、文字、影象、視訊、時間序列等,多種型別資料的標註和註釋工具。
# 安裝
pip install -U label-studio
# 執行
label-studio
26、whoogle-search:自架純淨谷歌搜尋服務。這是一個注重保護使用者隱私的元搜尋引擎,它會返回過濾掉廣告後的 Google 搜尋結果,而且不追蹤 IP、不存 Cookie。支援 Docker 部署既簡單又快速,適合注重隱私的使用者。
27、nas-tools:NAS 媒體庫資源自動整理工具。支援資源檢索和訂閱、媒體庫整理和通知服務的 NAS 媒體庫工具,這是一個用愛發電的專案,可以不愛但請不要傷害。
28、libtmux:用 Python 操作 tmux 的庫。通過該專案就可以使用 Python 程式碼,自動操控 tmux 應用的對談、視窗、窗格。
import libtmux
server = libtmux.Server()
server.list_sessions()
# [Session($3 foo), Session($1 libtmux)]
29、cheats.rs:Rust 程式語言小抄。這裡不僅有 Rust 基礎語法,還有執行順序詳解和編寫時需要關注的注意事項。如果你覺得還不夠,該專案還包含了範例程式碼(EX)、書籍(BK)、標準庫(STD) 等 Rust 相關資料。
30、py-spy:用 top 的方式分析 Python 程式效能的工具。一款 Python 程式效能分析工具,它可以讓你在不重啟程式或修改程式碼的情況,直觀地看到 Python 程式中每個函數花費的時間。
# 安裝
pip install py-spy
# record 命令將組態檔記錄到檔案中,可用來生成火焰圖
py-spy record -o profile.svg --pid 程序ID
# top 命令實時展示函數花費時間
py-spy top --pid 程序ID
# dump 命令顯示每個 Python 執行緒的當前呼叫堆疊
py-spy dump --pid 程序ID
31、reqwest:Rust 語言的 HTTP 使用者端。純 Rust 編寫的 HTTP 使用者端,簡單好用、支援非同步、API 友好。
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::blocking::get("https://httpbin.org/ip")?
.json::<HashMap<String, String>>()?;
println!("{:#?}", resp);
Ok(())
}
32、SwiftMessages:一個非常靈活的 iOS 訊息庫。用 Swift 編寫的訊息元件,它可以將訊息靈活地顯示在螢幕頂部、底部、中央,還提供了幾款好看的佈局和主題,拿來即用十分方便。
// 例化一個訊息檢視
let view = MessageView.viewFromNib(layout: .cardView)
// 帶有警告樣式的主題訊息元素
view.configureTheme(.warning)
// 增加陰影
view.configureDropShadow()
// 設定訊息標題、正文和圖示
let iconText = ["