興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!
HelloGitHub 分享 GitHub 上有趣、入門級的開源專案。
這裡有實戰專案、入門教學、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!
以下為本期內容|每個月 28 號更新
1、linked-list-good-taste:Linus Torvalds 解釋編碼品味的連結串列論證。在 2016 年的 TED 訪談中,Linus Torvalds 談到了他認為好的編碼品味,並舉了一個例子:在單向連結串列中移除專案的兩種實現。為了從連結串列中刪除第一項,其中一個實現需要處理特殊情況,而另一個則不需要,Linus 更喜歡後者。
2、rpi4-osdev:為樹莓派 4 編寫作業系統的教學。這是一份 RealVNC 的 CTO 在樹莓派 4 裸機上,編寫作業系統的教學。內容分為 15 個章節,每章完成作業系統的一個部分,並提供了原始碼和講解。
3、xdotool:模擬鍵盤和滑鼠操作的命令列工具。該專案可以通過命令的方式,模擬鍵盤輸入、滑鼠點選,以及移動、聚焦和調整視窗大小等操作,搭配上 shell 就是 DIY 的按鍵精靈,支援 Ubuntu、macOS、FreeBSD 等系統。
// 打字
xdotool type "HelloGitHub"
// 組合鍵
xdotool key ctrl+l
// 移動滑鼠
xdotool mousemove x y
// 關閉視窗
xdotool selectwindow windowclose
4、DnsServer:一款適用於多平臺的 DNS 服務。它開箱即用無需設定,並提供了友好的 Web 介面和監控,支援 Docker 部署以及 Windows、Linux、macOS 和樹莓派作業系統。
5、Flow.Launcher:Windows 的快速檔案和程式啟動器。這是一款可以讓你的工作流程更加絲滑的工具,相當於 Windows 上的 Alfred。它能夠快速啟動應用,方便地搜尋檔案、書籤等內容,支援擴充套件外掛、預覽檔案、系統命令、遊戲模式等功能。
6、Playnite:一款開源的電腦遊戲管理工具。支援同步 Steam、Epic、GOG、Battle.net 等平臺的遊戲,匯入後該工具會自動從 IGDB 獲取遊戲資訊,為你的遊戲提供一個統一的介面。它的程式碼完全開源保證了你的賬號安全,而且支援包括中文在內的多種語言,適用於 Windows7 及以上的作業系統。
7、dragonfly:一款為取代 Redis 而生的記憶體資料庫。它與當下最流行的兩款記憶體資料庫 Redis 和 Memcached 的 API 完全相容,所以無需修改程式碼即可完成遷移。效能上更是爆炸,官方表示單範例可支援數百萬量級的 QPS,而且吞吐量是 Redis 的 25 倍,並可以應對 TB 級別的記憶體資料集。
8、moonlight-qt:讓你可以在幾乎任何裝置上玩 PC 遊戲的工具。該專案基於 NVIDIA GameStream 協定,通過串流的方式實現在 iOS、Android、電視等裝置上玩電腦的 3A 大作。此過程手機無需下載和執行遊戲,只需接收遊戲畫面、反饋操作指令。雖然安裝過程有點複雜需要花些時間,但是為了躺著玩 PC 遊戲一切都是值得的,感興趣的小夥伴折騰起來吧!
9、oceanbase:一款國產的原生分散式資料庫。這是由螞蟻集團開源的一款基於 Paxos 協定和分散式架構的企業級分散式關係型資料庫。它同時支援 OLTP 和 OLAP 的混合負載,具有高可用、高效能、水平擴充套件、相容 SQL 語法等特點。
10、rr:Linux 上的輕量級 C/C++ 偵錯工具。這是一款 Linux 上的輕量級偵錯 C/C++ 程式碼的工具,支援錄製、重放和反向執行等操作,提供了一個可反覆偵錯的環境,大大提升了偵錯效率。
11、alist:一款支援多種儲存的檔案列表程式。它支援一鍵安裝,能夠方便地聚合散落在各處的檔案,輕鬆實現檔案線上檢視服務。支援包括本地儲存、阿里雲盤、百度網路硬碟、OneDrive 、WebDAV 等多種儲存方式。
12、gorss:一款用 Go 編寫的命令列 RSS 閱讀器。它簡單易用隱蔽性強,支援預覽內容、瀏覽器開啟連結、自定義快捷鍵、主題、單詞高亮等功能。
13、gosec:Go 語言原始碼安全檢查工具。該專案通過掃描 Go 程式碼的 AST 檢查原始碼是否存在安全問題,能夠發現原始碼中寫死密碼、XSS 和 SQL 注入等問題。
14、skopeo:能夠管理遠端倉庫的容器映象的工具。它能夠檢視遠端倉庫的容器映象資訊,以及執行復制、同步、刪除等操作,支援 docker.io、quay.io、私有倉庫等。
$ skopeo inspect docker://registry.fedoraproject.org/fedora:latest
{
...
"Architecture": "amd64",
"Os": "linux",
"Layers": [
"sha256:2a0fc6bf62e155737f0ace6142ee686f3c471c1aab4241dc3128904db46288f0"
],
"LayersData": [
{
"MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"Digest": "sha256:2a0fc6bf62e155737f0ace6142ee686f3c471c1aab4241dc3128904db46288f0",
"Size": 71355009,
"Annotations": null
}
],
"Env": [
"DISTTAG=f37container",
"FGC=f37",
"container=oci"
]
}
15、yaegi:一款優雅的 Go 語言直譯器。它是一個純 Go、僅依賴標準庫實現的 Go 直譯器,擁有簡單易用的 API,完全支援 Go 程式語言規範,以及 Go 1.18 和 1.19 版本。
package main
import (
"github.com/traefik/yaegi/interp"
"github.com/traefik/yaegi/stdlib"
)
func main() {
i := interp.New(interp.Options{})
i.Use(stdlib.Symbols)
_, err := i.Eval(`import "fmt"`)
if err != nil {
panic(err)
}
_, err = i.Eval(`fmt.Println("Hello Yaegi")`)
if err != nil {
panic(err)
}
}
16、AndroidBitmapMonitor:Android 的圖片記憶體分析工具。它可以幫助開發者快速發現應用內載入的圖片是否合理,比如大小是否合適、快取是否及時清理、是否載入了當前並不需要的圖片等等,支援線上下和線上使用。
17、frostmourne:汽車之家開源的監控平臺。採用 SpringBoot+MyBatis+XXL-JOB 構建的監控系統,支援接入 ES、HTTP、Prometheus、MySQL/TiDB 等多種資料來源,以及釘釘、飛書、簡訊等多種報警訊息傳送方式。
18、koishi:一款極易擴充套件的聊天機器人框架。它提供了便利的控制檯和外掛市場,讓你無需程式設計基礎也可以開箱即用,幾分鐘內搭建出自己的聊天機器人,支援 QQ、Telegram、Discord、飛書等聊天平臺。
19、nginx-proxy-manager:一款強大的 Nginx 視覺化管理平臺。它開箱即用支援 Docker 一鍵部署,可以讓使用者通過 Web 介面線上設定、管理 Nginx 服務,支援轉發、重定向、SSL 證書、高階設定等功能。
20、qinglong:支援多種指令碼語言的定時任務管理平臺。這是一款定時執行指令碼的平臺,提供了線上管理指令碼、環境變數、檢視紀錄檔、秒級定時任務等功能,支援 Python3、JavaScript、shell 等指令碼語言。
21、snk:「吃光」你所有的 GitHub 貢獻。它可以根據 GitHub 上的貢獻圖,自動生成蛇的行走路徑,一口氣吃光所有「綠塊」,支援生成 gif 或 svg 格式的動圖。
22、uptime-kuma:一款極簡的 uptime 監控工具。該專案可以用來監控服務正常執行時間,它介面美觀、支援 Docker 一鍵部署,提供了中文介面、通知、多狀態頁面等實用功能。
23、dujiaoka:PHP 寫的開源自動售貨系統。採用 Laravel+Bootstrap 實現的自動售賣虛擬產品的平臺,比如兌換碼、賬號之類的數位商品,顧客付款後可以自動發貨,已整合微信、支付寶、Paypal 等多種支付方式。
24、bar_chart_race:基於 Python 的動態條形圖。通過該專案可以用 Python 建立條形圖比賽動畫,顯示資料排名的動態條形圖,直觀地展示資料變化過程。
25、dataset:為懶人準備的運算元據庫的 Python 庫。它基於 SQLAlchemy 構建了一個簡單的資料層,可以讓查詢、寫入、更新資料庫中的資料,就像讀寫 JSON 檔案一樣簡單,支援 SQLite、PostgreSQL 和 MySQL 資料庫。
import dataset
db = dataset.connect('sqlite:///:memory:')
table = db['sometable']
table.insert(dict(name='John Doe', age=37))
table.insert(dict(name='Jane Doe', age=34, gender='female'))
john = table.find_one(name='John Doe')
26、GreaterWMS:可商用的開源倉庫管理系統。該專案是採用福特亞太區售後物流倉儲供應鏈流程的倉庫系統,它提供了客戶管理、訂單管理、庫存管理、供應商管理、盤點等模組,支援手機、電腦等多種裝置。
27、secretflow:螞蟻開源的隱私計算框架。隱私計算即通過技術的手段實現資料在參與方可用不可見,讓資料在安全和不洩露隱私的情況下流通、開放。該專案採用 Python 語言編寫,支援包括 MPC、FL、TEE、HE、DP 在內的多種主流隱私計算技術。
28、shynet:極簡的網站分析平臺。這是一個基於 Django 構建的網站分析平臺,它很小、夠用、介面友好、不追蹤 cookie、支援多使用者,追蹤指令碼不到 1KB。
29、carbonyl:執行在終端裡的瀏覽器。這是一款基於 Chromium 的命令列瀏覽器,可以在終端裡用瀏覽器的方式存取網頁,支援圖片、動圖、視訊、音訊等內容。
30、lsd:下一代 ls 命令。這個專案是用 Rust 重寫的類似 ls 命令的檢視目錄清單的工具,同時增加了顏色、圖示等新功能,更加賞心悅目。
31、typst:比 LaTex 更好學的標示語言。這是一款新的基於標示語言的排版系統,它比知名的 LaTex 更加簡潔、更容易上手,輸出的公式也很漂亮,還可以更換各種字型。
32、DevToysMac:macOS 上的程式設計師瑞士軍刀。該專案是 DevToys 的 macOS 版本,無需安裝下載解壓後即可使用。它同樣實現了程式設計師日常開發會用到的功能,比如時間戳轉化、Base64 編/解碼、JSON 格式化等。
33、wikipedia-ios:維基百科官方開源的 iOS 使用者端。維基百科是一本線上的百科全書,這是它的 iOS 使用者端,支援搜尋資料、熱門文章、儲存文章、多語言、夜間閱讀等功能。
34、.tmux:一份好看且通用的 tmux 組態檔。Tmux 是一個終端複用器,該專案包含了一份可以讓 tmux 更漂亮、更好用的組態檔,以及詳細的安裝步驟。
35、ark-pixel-font:開源的泛中日韓畫素字型。為遊戲開發提供了一套可用於正文的畫素字型,目前完成了 1 萬個左右的漢字(12px)。
36、bpf-developer-tutorial:從入門到進階的 eBPF 開發者教學。這是一個基於 libbpf 和 CO-RE(一次編譯,到處執行) 的 eBPF 教學,包括 eBPF 基本概念、程式碼範例、實際應用等內容,通過 20 個 eBPF 的小工具,來幫助開發者快速上手 eBPF。
37、ENGAGE:自制無電池的 GameBoy。該專案實現了沒有電池、僅通過太陽能和遊戲操作供電的 GameBoy。它可正常執行俄羅斯方塊遊戲,遇到電量耗盡時能儲存遊戲的當前進度,即重新啟動遊戲後,下落的方塊會處於同一位置。是不是聽起來很酷?這裡包含製作該裝置所需的一切,感興趣的同學可以試一試。
38、GameDevMind:全面的遊戲開發技術圖譜。該專案用思維導圖的方式,展示了遊戲開發需要具備的能力,包含技術棧、方法、工具、流程、管理、運營等方面。
39、immersive-translate:沉浸式雙語網頁翻譯擴充套件。這是一個免費的翻譯外掛,可以在保留原文的情況下顯示譯文,支援接入 10 多種翻譯服務,適用於 Chromium、Firefox、Safari 等瀏覽器。專案處於閉源開發的狀態,想要貢獻程式碼的同學需要先申請。
40、PPHC:《高並行的哲學原理》。這本書討論的是 Web 服務高並行問題,內容由淺入深地介紹了 Apache、Nginx、epoll、交換機、k8s、資料庫、分散式、微服務架構等解決高並行問題的技術和方案。
41、py_regular_expressions:《Python 正規表示式從入門到精通》。這本書包含數百個範例和練習,涵蓋了 Python 正規表示式從初級到高階的用法。
42、Bringing-Old-Photos-Back-to-Life:通過深度學習修復老照片的工具。由微軟開源的深度學習專案,可用於修復破損的老照片,修復效果顯著。
43、ChatGLM-6B:清華 KEG 開源的雙語對話語言模型。這是一個基於 GLM 架構、具有 62 億引數的中英雙語對話語言模型,支援在單張 2080Ti 上進行推理使用。
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好