《HelloGitHub》第 76 期

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

簡介

HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。

//github.com/521xueweihan/HelloGitHub

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


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

C 項目

1、gb-studio:簡單好玩的 Game Boy 遊戲製作工具。這是一款可視化遊戲構建工具。無需編程基礎即可通過拖拽的方式,快速製作出復古風格的 Game Boy 遊戲。不僅支援導出遊戲 ROM,還可以直接構建成在線遊戲。

2、jq:輕快的命令行 JSON 處理器。JSON 作為最常見的序列化格式,日常開發中經常會遇到。這個項目可以通過簡單的命令對 JSON 數據進行格式化、過濾等操作,還支援直接解析介面的 JSON 數據,十分靈活和方便。

3、libvips:極快的多執行緒影像處理庫。具有佔用記憶體小、處理速度快等特點的影像處理底層庫。它能夠處理多種影像和像素格式,為了使用方便不僅支援命令行調用,官方還提供了 Ruby、Python 等多種程式語言的 SDK。

C# 項目

4、CrazyCar:一款用 Unity 製作的聯機賽車遊戲。這是一套完整的網路聯機遊戲解決方案,項目包含遊戲端、伺服器端、網路傳輸和管理後台。遊戲支援計時賽、多人比賽、個人成就、資源熱更等特性,可以運行在 iOS/Android/Windows 設備上。

5、Masuit.Tools:C# 開發工具箱。該庫包含了 C# 日常開發常用的操作類,比如字元串處理、進位轉換、日期處理、加密/解密、文件壓縮、影像裁剪、斷點續傳、分散式 ID 等。

double milliseconds = DateTime.Now.GetTotalMilliseconds();// 獲取毫秒級時間戳
double microseconds = DateTime.Now.GetTotalMicroseconds();// 獲取微秒級時間戳
double nanoseconds = DateTime.Now.GetTotalNanoseconds();// 獲取納秒級時間戳
double seconds = DateTime.Now.GetTotalSeconds();// 獲取秒級時間戳
double minutes = DateTime.Now.GetTotalMinutes();// 獲取分鐘級時間戳

C++ 項目

6、imgui:遊戲行業內流行的輕量級 C++ 圖形介面庫。這是個即時模式的 GUI 框架,控制項都需要手繪。優點是更加靈活和輕量,可以快速構建功能簡單、體積小的 GUI 程式,但不適合用來實現複雜動畫的 GUI 應用,多用於開發遊戲內的 GUI 工具。

ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);

7、flatbuffers:Google開源的高性能序列化庫。類似 Protocol Buffers 的序列化格式,但解析速度更快、佔用記憶體更少,多用於對解析耗時敏感的 Android 應用和遊戲。

8、CppCoreGuidelines:C++ 核心指南。一份由 C++ 之父 Bjarne Stroustrup 領導的 C++ 編碼指南,目的是為了幫助大家更好地使用現代 C++。這個項目主要討論的是關於 C++ 編寫介面、記憶體管理、並發等方面的問題,適合有一定 C++ 基礎想要進階的小夥伴。

CSS 項目

9、core:CSS 按鈕樣式集合。該項目實現了 100 種不同樣式的按鈕。

10、css-protips:CSS 專業技巧。一個幫你提升 CSS 技巧的收藏集。

Go 項目

11、wechat-backup:本地備份微信聊天記錄的工具。它能夠將手機上的微信聊天記錄,解密後保存在電腦上,支援查看、搜索、恢復微信聊天記錄。

12、ptg:用 Go 寫的 GUI gRPC 客戶端。作者在調試 gPRC 介面時,發現沒有類似 postman 趁手的 gPRC 客戶端,所以就自己動手寫了一個然後開源了。

13、wild-workouts-go-ddd-example:Go DDD 示例項目。該項目通過一個預約系統的示例,展示了如何在 Go 項目中實現領域驅動設計(DDD)和讀寫分離架構(CQRS)。

14、gitleaks:一款靜態應用程式安全測試(SAST)工具。它可以檢測項目中是否包含密碼、API Key、token 等資訊,還能夠輕鬆整合到 Git Hook 和 GitHub Action,實現提交程式碼時自動檢測,通過告警和阻止 push 等方式,有效地防止敏感資訊泄漏。

15、mercure:一種用於實時通訊的開放式協議。該項目是基於 HTTP 和 SSE 的一種協議,然後用 Go 語言實現的實時推送服務。相較於 WebSocket 協議它使用起來更加簡單,客戶端發起訂閱就和請求普通的 HTTP 介面一樣,而且在 HTTP/2 下還可以雙向通訊。

Java 項目

16、picocli:構建 Java 命令行應用的框架。簡單易用寥寥幾行程式碼,就可以完成一個 Java 命令行應用程式。雖然由 Java 編寫但可以在 Groovy、Kotlin、Scala 中使用,支援命令自動補全、顏色、子命令、幫助資訊等功能。

import picocli.CommandLine;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;
import java.io.File;

@Command(name = "example", mixinStandardHelpOptions = true, version = "Picocli example 4.0")
public class Example implements Runnable {

    @Option(names = { "-v", "--verbose" },
      description = "Verbose mode. Helpful for troubleshooting. Multiple -v options increase the verbosity.")
    private boolean[] verbose = new boolean[0];

    @Parameters(arity = "1..*", paramLabel = "FILE", description = "File(s) to process.")
    private File[] inputFiles;

    public void run() {
        if (verbose.length > 0) {
            System.out.println(inputFiles.length + " files to process...");
        }
        if (verbose.length > 1) {
            for (File f : inputFiles) {
                System.out.println(f.getAbsolutePath());
            }
        }
    }

    public static void main(String[] args) {
        // By implementing Runnable or Callable, parsing, error handling and handling user
        // requests for usage help or version help can be done with one line of code.

        int exitCode = new CommandLine(new Example()).execute(args);
        System.exit(exitCode);
    }
}

17、liteflow:輕快、穩定可編排的規則引擎。規則引擎能夠幫助系統解耦,實現通過修改規則就可以適應複雜多變的業務邏輯。這是一個功能強大的 Java 規則引擎,支援同步非同步混編、平滑熱刷新,無需重啟應用即可讓新規則生效,規則語法簡單、文檔通俗易懂,學習門檻低容易上手。

18、forest:極簡的聲明式 Java HTTP 客戶端。一個開源的 Java HTTP 客戶端框架,採用聲明式的開發方式,分分鐘即可完成 HTTP 請求的定義、發送、接收、解析、錯誤處理、日誌列印等操作。

public interface AmapClient {
    /**
     * @Get註解代表該方法專做GET請求
     * 在url中的{0}代表引用第一個參數,{1}引用第二個參數
     */
    @Get("//ditu.amap.com/service/regeo?longitude={0}&latitude={1}")
    Map getLocation(String longitude, String latitude);
}

// 注入介面實例
@Autowired
private AmapClient amapClient;
...
// 調用介面
Map result = amapClient.getLocation("121.475078", "31.223577");
System.out.println(result);

JavaScript 項目

19、regex-vis:在線可視化正則編輯器。該項目可將輸入的正則表達式,自動生成對應的可視化圖形,支援通過編輯圖形節點修改正則表達式,以及對正則表達式進行測試等功能。

20、vxe-table:好用的 Vue 表格組件。支援增刪改查、虛擬列表、大數據懶載入、數據校驗、分頁、彈窗等功能的 Vue 表格組件。

21、wangEditor:一款開源的 Web 富文本編輯器。基於 slate.js 和 snabbdom.js 實現的富文本編輯器,支援 JS、Vue 和 React 框架。開箱即用僅需幾行程式碼,就能實現一個功能齊全的富文本編輯器。

import '@wangeditor/editor/dist/css/style.css'
import { createEditor, createToolbar } from '@wangeditor/editor'

// 創建編輯器
const editor = createEditor({
  selector: '#editor-container'
})
// 創建工具欄
const toolbar = createToolbar({
  editor,
  selector: '#toolbar-container'
})

22、mjml:能夠快速製作出響應式郵件的框架。郵件樣式是一個讓人頭疼的問題,而通過這個項目製作的郵件,可以正常地顯示在不同的郵件客戶端。它還提供了在線編輯器,以及多種郵件模版和豐富的組件,能夠幫你快速製作出精美、移動端優先、響應式的郵件。

23、naive-ui:僅支援 Vue3 的組件庫。擁有完善的 TypeScript 類型推導的 Vue3 組件庫,擁有 80 多種組件、中文文檔,如果你想換換「口味」可以試試它。

Kotlin 項目

24、typing-learner:可通過影片生成單詞本的背單詞應用。該項目可將 MKV 格式的英文影片製作成單詞庫,在記憶單詞時可通過台詞和播放影片片段,讓每個單詞都有語境,幫助理解和記憶英文單詞。

Objective-C 項目

25、lemon-cleaner:蘋果電腦專屬的清理工具。騰訊開源的免費 macOS 設備空間清理工具「檸檬清理」,支援深度清理、刪除重複文件、卸載應用、狀態欄顯示等功能,能夠一鍵輕鬆清理垃圾釋放空間。

PHP 項目

26、course-tencent-cloud:PHP 寫的網課平台。依託騰訊雲基礎服務架構,採用 Phalcon 框架開發的網課系統,支援付費、點播、直播、專欄、問答、會員、秒殺等功能。

Python 項目

27、diagrams:用 Python 程式碼圖解系統架構。程式設計師在做技術方案的時候,系統架構圖是必不可少的。該項目將繪製架構圖時所需的圖標,封裝成了對應的類極易調用,文檔還提供了豐富的示例,讓你分分鐘就能上手,輕鬆用 Python 快速繪製出一份精美且清晰的架構圖,這樣不僅能省去拖拽調整連線的步驟,而且程式碼還可以復用,以便應對不斷迭代升級的架構。

with Diagram("Advanced Web Service with On-Premise", show=False):
    ingress = Nginx("ingress")

    metrics = Prometheus("metric")
    metrics << Grafana("monitoring")

    with Cluster("Service Cluster"):
        grpcsvc = [
            Server("grpc1"),
            Server("grpc2"),
            Server("grpc3")]

    with Cluster("Sessions HA"):
        primary = Redis("session")
        primary - Redis("replica") << metrics
        grpcsvc >> primary

    with Cluster("Database HA"):
        primary = PostgreSQL("users")
        primary - PostgreSQL("replica") << metrics
        grpcsvc >> primary

    aggregator = Fluentd("logging")
    aggregator >> Kafka("stream") >> Spark("analytics")

    ingress >> grpcsvc >> aggregator

28、orange3:互動式數據分析桌面工具。一款面向不會編程人群的數據挖掘和數據可視化工具箱。內置多種圖表類型、支援可視化編程,無需寫程式碼即可做出簡單、實用的數據分析軟體,多用於教學和實驗室等場景。

29、MechanicalSoup:自動與網站交互的輕量級 Python 庫。我們寫爬蟲一般是請求+解析兩步走,該項目將 Requests(請求) 和 BeautifulSoup(解析) 兩大 Python 爬蟲常用庫,封裝成一個瀏覽器對象(StatefulBrowser),將上面說的兩步並成一步。後面僅需一個瀏覽器對象,就可以完成請求頁面、過濾內容、提交表單、跳轉地址等操作,使得程式碼更加簡單、操作更加方便。又因為它不依賴瀏覽器進程,所以相較於 Selenium 它更加輕巧,但缺點是不支援 JS 動態渲染的頁面。

import re
import mechanicalsoup

# Connect to Google
browser = mechanicalsoup.StatefulBrowser()
browser.open("//www.google.com/")

# Fill-in the form
browser.select_form('form[action="/search"]')
browser["q"] = "MechanicalSoup"
# Note: the button name is btnK in the content served to actual
# browsers, but btnG for bots.
browser.submit_selected(btnName="btnG")

# Display links
for link in browser.links():
    target = link.attrs['href']
    # Filter-out unrelated links and extract actual URL from Google's
    # click-tracking.
    if (target.startswith('/url?') and not
            target.startswith("/url?q=//webcache.googleusercontent.com")):
        target = re.sub(r"^/url\?q=([^&]*)&.*", r"\1", target)
        print(target)

30、pandas-profiling:能夠自動生成 pandas DataFrame 分析報告的庫。雖然 pandas 自帶的 df.describe 函數可以方便地生成統計報告,但是資訊較少。該項目能夠自動生成一份 df 多維度的 HTML 分析報告,包含列的類型、缺失情況、數值分布、行重複率、佔用記憶體大小等資訊,有助於更好地了解數據情況。

31、labelImg:圖形化介面的影像標註工具。用 Python 和 Qt 編寫的影像標註桌面應用,簡單方便下載就能用,適用於 Windows、Linux、macOS。標註數據支援 PASCAL VOC 格式的 XML 文件和 YOLO 的 txt 文件。

Rust 項目

32、pueue:命令行任務管理工具。一個處理 shell 命令隊列的工具,支援後台執行、定時執行、任務並行、暫停任務、任務崩潰恢復等功能。但它只是一個命令行工具,不能當作任務隊列來用。

Swift 項目

33、MiaoYan:一款 macOS 上的 Markdown 編輯器。採用 Swift5 原生開發,適用於 macOS 的 Markdown 編輯器「妙言」。介面清爽好看,支援 PPT 模式、語法高亮、黑暗模式等功能。

其它

34、LxgwWenKai:適合正文閱讀的開源中文字體。它是基於 FONTWORKS 出品的 Klee One 字體衍生品,並且針對簡體中文做了增補和優化,字體效果驚艷、完全免費且支援商用。

35、MaaAssistantArknights:明日方舟遊戲助手。基於影像識別技術,實現一鍵完成明日方舟遊戲的全部日常任務。

36、opensnitch:一個 Linux 應用防火牆。它能夠監視和控制應用的網路活動,相當於 Linux 版的 Little Snitch。

37、Publii:帶 GUI 的靜態網站生成工具。一款本地的靜態網站 CMS 工具,有了它無需編程基礎,即可通過圖形化介面,輕鬆地創建個人部落格、企業官網等,還支援一鍵發布到 GitHub Page、GitLab、Netlify 等網站。

38、functional-programming-jargon:函數式編程世界的行話。該項目希望通過介紹函數編程中的術語,讓學習函數式編程變得容易些,示例程式碼均採用 JavaScript 編寫。

開源書籍

39、dive-into-webpack:《深入淺出 Webpack》。一本系統講解 Webpack 的書,內容涵蓋了 Webpack 的入門、配置、實戰、優化以及原理。

40、interviews.ai:《深度學習面試》。書中包含了數百個人工智慧領域面試時會遇到的問題(PRB)和解答(SOL),作者希望可以藉此幫助研究生/求職者,通過機器學習方面的面試。

機器學習

41、flair:簡單易用的 NLP 框架。基於 PyTorch 的 NLP 框架,支援文本命名實體識別(NER)、詞性標註(PoS)、詞義消歧和分類。項目中包含詳細的使用教程,介紹了如何標記文本、訓練語言模型等。

from flair.data import Sentence
from flair.models import SequenceTagger

# make a sentence
sentence = Sentence('I love Berlin .')

# load the NER tagger
tagger = SequenceTagger.load('ner')

# run NER over sentence
tagger.predict(sentence)

42、paper-reading:深度學習論文精讀集合。李沐發起的深度學習領域經典、最新論文精讀影片集合。

43、paper2gui:面向非編程人員的 AI 應用工具箱。該項目提供了多款免安裝下載即用的 AI 工具,功能涵蓋語音合成、影片補幀、影像風格轉化、目標檢測、OCR 識別等方面,讓編程小白也能輕鬆擁有 AI 「魔法」。

最後

如果你發現了 GitHub 上有趣的項目,就點擊分享給大傢伙吧。

以上就是本期的所有內容了,往期內容點擊閱讀

感謝您的閱讀,如果覺得本期內容還不錯的話 求贊、求分享 ❤️