程式設計師的開源月刊《HelloGitHub》第 66 期

語言: CN / TW / HK

興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!

簡介

分享 GitHub 上有趣、入門級的開源專案。

這裡有實戰專案、入門教程、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!

十一假期就要來了,假期最重要的還是休息。本期遊戲專案有點多,外出路上帶上一個開源專案,不無聊!

最後,提前祝我們的祖國生日快樂、繁榮昌盛!HelloGitHub 的小夥伴們假期愉快!


以下為本期內容|每個月 28 號更新

C 專案

1、HEX-LINK:自制電腦遊戲的體感裝置。該專案包含製作時需要的硬體設計和全部原始碼

.
├─firmware # 軟體(根據自己使用的工具選擇如下一種工程即可)
│  ├─ArduinoIDE_Proj # Arduino IDE版工程 
│  │  ├─Additional_Libraries # 裡面的資料夾需要複製到Arduino IDE安裝目錄下的libraries資料夾
│  │  ├─Hex_Link_Leonardo # 需要下載至接收端的程式
│  │  └─Hex_Link_Nano # 需要下載至傳送端的程式
│  ├─Bootloaders # 需要下載至晶片的arduino bootloader 
│  └─Vscode_PlatformIO_Proj # VScode PlatformIO版工程 
│      ├─Hex_Link_Leonardo # 需要下載至接收端的程式
│      └─Hex_Link_Nano # 需要下載至傳送端的程式
├─hardware # 硬體(PCB工程)
│  ├─BOM   # PCB的物料清單,包含參考的購買連結(連結僅作參考,在其他任何店鋪購買相同型號即可)
│  ├─Hex_Link_Rec # 接收端PCB工程
│  ├─Hex_Link_Trans # 傳送端PCB工程
│  └─Nano_Jtag_Pin # 轉接板:用來燒錄Nano bootloader的Jtag口轉接板
├─model # 接收端外殼3維模型
│  ├─Solidworks_Project # 2018版本Solidworks工程
│  └─STL_TAP # STL檔案,可直接用於3D列印.TAP檔案是頂層亞克力板的CNC加工檔案
├─references # 參考文件
└─tools # 額外的指令碼工具

C# 專案

2、SteamTools:集合多種 Steam 客戶端工具的工具箱。該工具支援 Window、Linux、macOS、Android 作業系統,包括遊戲庫存管理、解鎖成就、史低價格、出售庫存物品等功能,還有豐富的外掛等待你發掘

3、xLua:為 C#、Unity、.Net 等環境增添 Lua 指令碼程式設計的能力,使得 Lua 程式碼方便地與 C# 相互呼叫

XLua.LuaEnv luaenv = new XLua.LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
luaenv.Dispose();

4、BBDown:命令列嗶哩嗶哩影片下載工具

C++ 專案

5、libqalculate:使用 C++ 編寫的多功能計算器桌面應用、庫和 CLI 程式。它易於使用功能強大,支援大型可定製函式庫、單位計算和轉換、符號計算(包括積分和方程)。作為使用者你可以直接在命令列中使用,作為開發者你也可以在自己的專案中使用這個庫。官方還製作了 QtGTK 兩個版本的 GUI 計算器應用

6、btop:介面酷炫的命令列資源監視器。可以顯示處理器、記憶體、磁碟、網路和程序的使用情況和統計資訊,還支援滑鼠操作

7、TinyWebServer:Linux 下的 C++ 輕量級 Web 伺服器。該專案不僅可以用來搭建 Web 服務,也適合 C++ 初學者作為網路程式設計實戰專案。作者還寫了文章講解相關程式碼和原理,幫助初學者更好的掌握網路程式設計相關知識

CSS 專案

8、css_tricks:常用 CSS 樣式示例集合

Go 專案

9、video-srt-windows:自動識別影片語音生成字幕檔案的工具。採用 Go+walk 開發所以僅支援 Windows 系統,原理是請求線上語音轉文字的服務,超出免費額度需付費。另外還加入了匯出字幕檔案和翻譯功能

10、go-daily-lib:每天學習一個 Go 語言庫。內容包含標準庫和三方庫,每個庫對應一篇介紹和上手的文章

11、Open-IM-Server:基於 Go 實現的輕量級即時通訊(IM)專案。具有高效能、易擴充套件、安裝簡單、私有化部署等特性,同時包含多種客戶端 SDK。從伺服器到客戶端一體的開源即時通訊(IM)解決方案

12、go-fly:基於 Go 語言實現的線上客服系統,採用 Gin+MySQL+JWT+WebSocket 等技術棧實現

13、viper:用來搞定 Go 應用中配置的庫。支援多種配置檔案型別、監控並重新載入配置檔案、遠端讀取配置系統等

viper.SetConfigName("config") // 配置檔名,不包括字尾
viper.SetConfigType("yaml") // 配置檔案的字尾
viper.AddConfigPath("/etc/appname/")   // 查詢配置檔案的目錄
viper.AddConfigPath("$HOME/.appname")  // 支援查詢多個目錄
// 異常處理
if err := viper.ReadInConfig(); err != nil {
	if _, ok := err.(viper.ConfigFileNotFoundError); ok {
		// 如果沒有找到配置檔案
	} else {
		// 找到了配置檔案,但出現了其他錯誤
	}
}

Java 專案

14、o2oa:國產的 OA 系統。功能齊全支援考勤、會議管理、雲盤等,適用於企業 OA、協同辦公

15、IJPay:Java 支付工具庫,輕鬆完成支付模組開發。封裝了常用的微信、QQ、支付寶、銀聯、PayPal 支付等支付方式的各種常用介面。不依賴任何 MVC 框架,輕鬆接入到 Java 專案

16、VirtualApp:Android 系統的沙盒程式,App 虛擬化引擎。它建立了一個虛擬空間,在那裡可以任意安裝、啟動、控制、解除安裝應用。虛擬空間與外部隔離相當於沙盒環境,可在安卓上實現應用多開、靜默安裝等黑科技

JavaScript 專案

17、sharedb:基於 JSON 資料 OT 演算法的實時資料庫。簡單來說就是實時協同資料框架,可用來實現當頁面因使用者操作發生資料變化時,實時把資料同步展示到其它使用者頁面上,其中 OT 演算法就是解決此協同過程中問題的通用演算法。常見的場景比如:多使用者之間的狀態同步、線上協作文件、離線後資料改動同步等

18、30-Days-Of-JavaScript:30 天 JavaScript 程式設計挑戰。該教程雖然是英文教程但是圖文並茂通俗易通,內容循序漸進包含練習題,適合零基礎想要學習 JavaScript 的同學

19、YesPlayMusic:高顏值的第三方網易雲播放器。它不僅擁有簡潔美觀的外觀,還有豐富的功能

  • 支援 Windows/macOS/Linux
  • 私人 FM/每日推薦歌曲
  • 網易雲賬號登入
  • 歌詞顯示
  • 自定義快捷鍵和全域性快捷鍵
  • 等等

20、javascript:Airbnb 開源的 JavaScript 風格指南。中文

// 採用陣列解構
const arr = [1, 2, 3, 4];

// bad
const first = arr[0];
const second = arr[1];

// good
const [first, second] = arr;

21、spy-debugger:遠端除錯手機頁面和抓包的工具。操作簡單僅需手機和電腦在同一個 WIFI 下,即可在實現真機除錯頁面

Kotlin 專案

22、Component:Android 的元件化框架,幫助開發者在實現專案元件化。它的強大在於功能齊全、更新及時,支援 Kotlin、AndroidX、RxJava、協程等

Objective-C 專案

23、iOSInterviewQuestions:iOS 面試題集合(附答案)

Python 專案

24、Pokemon-Terminal:適用於多種終端的口袋妖怪主題工具。支援 iTerm2、ConEmu、Terminology、Windows 的終端,已經收集了 719 個小精靈

25、mypy:Python 靜態型別檢查庫。既然 Python 是一門動態型別語言,為啥還要檢查型別呢?有了靜態型別檢測則無需執行程式碼,就可以發現程式中潛在的錯誤。還可以加入到 git hook 中,實現在提交程式碼前自動檢查。詳情檢視這篇文章

26、CPython-Internals:圖文並茂的 Python 原始碼閱讀筆記專案。閱讀的是比較新的 CPython 3.8 版本,重點是專案一直在更新維護

static void take_gil(PyThreadState *tstate)
{
    /* 忽略 */
    while (_Py_atomic_load_relaxed(&_PyRuntime.ceval.gil.locked)) {
    	/* 只要 gil 是鎖住的狀態, 進入這個迴圈 */
        int timed_out = 0;
        unsigned long saved_switchnum;

        saved_switchnum = _PyRuntime.ceval.gil.switch_number;
        /* 釋放 gil.mutex, 並在以下兩種條件下喚醒
           1. 等待 INTERVAL 微秒(預設 5000) 
           2. 還沒有等待到 5000 微秒但是收到了 gil.cond 的訊號
        */
        COND_TIMED_WAIT(_PyRuntime.ceval.gil.cond, _PyRuntime.ceval.gil.mutex,
                        INTERVAL, timed_out);
        /* 當前持有 gil.mutex 這把互斥鎖 */
        if (timed_out &&
            _Py_atomic_load_relaxed(&_PyRuntime.ceval.gil.locked) &&
            _PyRuntime.ceval.gil.switch_number == saved_switchnum) {
            /* 如果超過了等待時間, 並且這段等待時間裡 gil 的持有者沒有變更過, 則嘗試讓當前持有 gil 的執行緒進行釋放gil
            把 gil_drop_request 值設為 1, 持有鎖的執行緒看到這個值的時候, 會嘗試放棄 gil */
            SET_GIL_DROP_REQUEST();
        }
        /* 繼續回到 while 迴圈, 檢查 gil 是否為鎖住狀態 */
    }
    /* 忽略 */
}

Rust 專案

27、nushell:一種更加人性化的新型 shell

Swift 專案

28、Clipy:macOS 的剪貼簿擴充套件應用。支援展示剪貼簿歷史記錄、內容模版等功能

其它

29、QWidgetDemo:Qt 編寫的示例集合。每個示例都可獨立執行、程式碼簡潔易懂,適合初學者學習

30、xemu:免費開源的 Xbox 模擬器,支援 Windows、Linux、macOS 系統

31、yabai:適用於 macOS 的平鋪式視窗管理器。該工具可以輕鬆實現視窗平鋪不重疊,不用滑鼠僅通過鍵盤移動、調整、切換、全屏、自動佈局等管理視窗的操作

  • Control+Option+A/D:啟用 平鋪/浮動 模式
  • Option+h/j/k/l:使 左/下/上/右 側視窗成為活動視窗
  • Shift+Option+h/j/k/l:向 左/下/上/右 移動當前活動視窗
  • Command+Option+n:建立新桌面,並將當前活動視窗移動至新桌面

32、awesome-for-beginners:對初學者友好的開源專案集合。如果你想參與到開源專案的建設,可以在這個集合中尋找專案,祝你早日完成第一個貢獻(PR)

33、lifeRestart:線上文字遊戲《人生重開模擬器》。純文字遊戲只需開局選天賦分配初始屬性,後面就是看歲月如白駒過隙,轉眼就過完了這一生,不滿意的話可以輕鬆重開新的人生。遊戲憑藉詼諧幽默的文案和出乎意料的結尾,廣受好評。線上試玩

34、chinese-dos-games:中文 DOS 遊戲集合。線上試玩

開源書籍

35、introduction-to-front-end-engineering:一本小書《帶你入門前端工程》。該書是作者對過去兩年前端工程化實踐的經驗和心得總結,線上閱讀

36、pumpkin-book:《機器學習公式詳解》西瓜書公式推導解析。線上閱讀

機器學習

37、invoice:增值稅發票 OCR 識別專案。包含訓練好的模型和微服務,啟動後可直接通過介面呼叫

38、GameAISDK:基於影象識別的 AI 自動化框架,支援吃雞類、射擊類、MOBA 類等遊戲型別。內建多種影象識別演算法和 AI 演算法,不用摳圖完全基於影象識別的 AI 訓練和框架

39、genshin_auto_fish:基於深度學習的原神手遊自動釣魚工具。其中用 YOLOX 搞定魚的定位和型別的識別以及魚竿落點的定位,用 DQN 搞定自適應控制釣魚過程的點選,讓力度落在最佳區域內


如果你發現了 GitHub 上有趣的專案,就分享給大傢伙吧。

以上就是本期的所有內容了,看完還不過癮?

關注 HelloGitHub 公眾號不僅可以收到第一時間的更新。點選選單欄->往期->月刊

往期月刊所有的內容盡收眼底一次看過癮!還有更多開源專案的介紹和寶藏專案等待你的發現。