開源月刊《HelloGitHub》第 83 期

hellogithub 發佈 2024-05-01T03:07:06.426003+00:00

興趣是最好的老師,HelloGitHub 讓你對編程感興趣!簡介HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。這裡有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...

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

簡介

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

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


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

C 項目

1、sds:簡單的 C 語言動態字符串庫。Redis 作者寫的 C 語言字符串庫,它相較於 C 字符串,使用起來更加方便。具有速度快(常數複雜度獲取字符串長度)、二進位安全(圖片、音頻等)、兼容部分 C 字符串函數等特點。

sds mystring = sdsnew("Hello World!");
printf("%s\n", mystring);
sdsfree(mystring);

output> Hello World!

地址:Github.com/antirez/sds

2、sigma-file-manager:一款先進的文件管理器。這是一款免費的文件管理器,由開源社區維護。支持智能搜索、自定義主頁、文件共享、文件下載、智能拖放、文件保護等功能,適用於 Windows 和 Linux。

地址:github.com/aleksey-hoffman/sigma-file-manager

3、ttyd:簡單的網絡共享終端的命令行工具。基於 libuv 和 WebGL2 構建的 Web 共享終端工具,安裝簡單使用方便,支持 SSL、文件傳輸、Sixel 圖像輸出等功能。可運行在 Windows、macOS、Linux、OpenWrt 等作業系統上,適用於遠程運維、在線管理設備等場景。

地址:github.com/tsl0922/ttyd

C# 項目

4、ambie:Windows 上的白噪聲應用。一款播放白噪聲和自然聲音的應用,比如下雨、海灘等聲音,支持混合、在線下載聲音和專注功能。工作時使用可以幫助你集中注意力,還能在放鬆時使用有助於睡眠。

地址:github.com/jenius-apps/ambie

5、FluentTerminal:炫酷的 Windows 終端軟體。基於 UWP 的 Windows 終端應用,擁有強大的自定義主題模塊,能夠輕鬆定製出風格各異的主題。提供了中文選項,支持多窗口、SSH 和搜索等功能。

地址:github.com/felixse/FluentTerminal

6、gsudo:適用於 Windows 的 sudo 命令行工具。它是 Windows 上的 sudo,允許用戶以最高權限運行命令,擁有與 Unix/Linux sudo 類似的使用體驗,支持 CMD、Powershell、git-bash 等。

地址:github.com/gerardog/gsudo

C++ 項目

7、Clipboard:小巧便捷的命令行剪貼板。一款用 C++ 編寫的剪貼板工具,可以在終端的任何地方複製、剪切和粘貼東西,使用起來就像 GUI 一樣方便,相見恨晚的命令行工具,適用於 Windows、Linux 和 macOS 作業系統。

地址:github.com/Slackadays/Clipboard

8、doctest:超快的 C++ 單頭文件測試框架。這是一款輕量級、快速的 C++ 測試框架,它使用起來十分方便,引入頭文件即可使用,而且速度快、編譯時間短,支持 C++ 11/14/17/20。

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"

int factorial(int number) { return number <= 1 ? number : factorial(number - 1) * number; }

TEST_CASE("testing the factorial function") {
    CHECK(factorial(1) == 1);
    CHECK(factorial(2) == 2);
    CHECK(factorial(3) == 6);
    CHECK(factorial(10) == 3628800);
}

地址:github.com/doctest/doctest

9、pocketpy:為嵌入遊戲引擎而設計的 Python 解釋器。一個 C++ 實現的輕量級的 Python 解釋器,包含一個編譯器和基於字節碼的虛擬機,以及交互式命令窗的實現。所有功能均集成在單個頭文件 pocketpy.h 中,不包含外部依賴項可以很方便地嵌入應用,立刻擁有執行 Python 代碼的能力。

#include "pocketpy.h"

int main(){
    // 創建一個虛擬機
    VM* vm = pkpy_new_vm(true);
    
    // Hello world!
    pkpy_vm_exec(vm, "print('Hello world!')");

    // 構建一個列表
    pkpy_vm_exec(vm, "a = [1, 2, 3]");

    // 對列表進行求和
    char* result = pkpy_vm_eval(vm, "sum(a)");
    printf("%s", result);   // 6

    // 釋放資源
    pkpy_delete(result);
    pkpy_delete(vm);
    return 0;
}

地址:github.com/blueloveTH/pocketpy

10、QGIS:自由開源的桌面 GIS 軟體。該項目採用 C++ 語言編寫,GUI 部分使用的是 Qt 庫。它提供了 GIS 數據可視化、編輯和分析的功能,支持多種 GIS 數據格式,適用於 Windows、Linux、macOS、BSD 和行動裝置。

地址:github.com/qgis/QGIS

Go 項目

11、Dragonfly2:一款基於 P2P 的智能鏡像和文件分發工具。它提供了高效、穩定、安全的基於 P2P 技術的文件分發和鏡像加速系統,能夠提高大規模文件傳輸的效率和速率,最大限度地利用網絡帶寬,適用於應用分發、緩存分發、日誌分發和鏡像分發等領域。

地址:github.com/dragonflyoss/Dragonfly2

12、ghz:簡單的 gRPC 壓測工具。一款用 Go 開發的專門用來壓測 gRPC 服務的命令行工具,它使用簡單、高效、支持自定義參數。

地址:github.com/bojand/ghz

13、req:帶黑魔法的 Go HTTP 客戶端。該庫默認就很智能,比如自動解碼成 UTF-8 以避免亂碼、根據 Content-Type 自動解析響應、自動檢測伺服器端並選擇最優的 HTTP 協議、自動重試等,除此之外還提供了強大且便捷的調試功能。

package main

import (
    "github.com/imroc/req/v3"
)

func main() {
    req.DevMode() // Treat the package name as a Client, enable development mode
    req.MustGet("httpbin.org/uuid") // Treat the package name as a request, send GET request.

    req.EnableForceHTTP1() // Force using HTTP/1.1
    req.MustGet("httpbin.org/uuid")
}

地址:github.com/imroc/req

14、SQLc:將 SQL 轉成類型安全的 Go 代碼的工具。它可以將輸入的 SQL 語句,自動轉化成類型安全、可讀的操作資料庫的 Go 代碼,支持 MySQL、PostgreSQL 和 SQLite 資料庫。

地址:github.com/kyleconroy/sqlc

15、tinykv:構建分布式 Key-Value 資料庫的教程。介紹了如何用 Go 語言實現一個高可用、可水平擴展、支持分布式事務的鍵-值存儲服務。

地址:github.com/talent-plan/tinykv

Java 項目

16、BT:一個 Java 的 Bittorrent 庫。支持 DHT、磁力連結、加密等功能的 Java 庫,可以根據自己的喜好開發和定製 BT 工具,比如播種、下載種子等。

// Create a torrent
Path torrentroot = Paths.get("/home/torrents/mytorrent");
Path file1 = Paths.get("/home/torrents/mytorrent/file1.bin");
Path file2 = Paths.get("/home/torrents/mytorrent/file2.bin");
Path dirToAdd = Paths.get("/home/torrents/mytorrent/dir_with_files");
byte[] torrentBytes = new TorrentBuilder()
        .rootPath(torrentRoot)
        .addFiles(file1, file2, dirToAdd)
        .announce("example.com/announce")
        .build();
Files.write(Paths.get("/home/torrents/mytorrent.torrent"), torrentBytes);

地址:github.com/atomashpolskiy/bt

17、RoaringBitmap:更好用的 Java 壓縮位圖數據結構。位圖常用於大數據集的快速查找和去重,該項目提供的 RoaringBitmap 是一種壓縮位圖,相較於傳統的位圖數據結構,它更快、更節省內存,而且久經沙場值得信賴,比如 Spark、Hive 等知名項目上都有它的身影。

import org.roaringbitmap.RoaringBitmap;

public class Basic {

  public static void main(String[] args) {
        RoaringBitmap rr = RoaringBitmap.bitmapOf(1,2,3,1000);
        RoaringBitmap rr2 = new RoaringBitmap();
        rr2.add(4000L,4255L);
        rr.select(3); // would return the third value or 1000
        rr.rank(2); // would return the rank of 2, which is index 1
        rr.contains(1000); // will return true
        rr.contains(7); // will return false

        RoaringBitmap rror = RoaringBitmap.or(rr, rr2);// new bitmap
        rr.or(rr2); //in-place computation
        boolean equals = rror.equals(rr);// true
        if(!equals) throw new RuntimeException("bug");
        // number of values stored?
        long cardinality = rr.getLongCardinality();
        System.out.println(cardinality);
        // a "forEach" is faster than this loop, but a loop is possible:
        for(int i : rr) {
          System.out.println(i);
        }
  }
}

地址:github.com/RoaringBitmap/RoaringBitmap

JavaScript 項目

18、chatgpt-web:一款可自定義 API 的 ChatGPT 演示網頁。基於 Express 和 Vue3 構建的 GPT-3 模型演示網頁,支持接入 GPT-3 API 或網頁 ChatGPT。

地址:github.com/Chanzhaoyu/chatgpt-web

19、illa-builder:一款靈活、清秀的低代碼平台。由國內團隊開源的低代碼平台,它更新積極、處理反饋及時。功能上內置圖表、表格、表單等數十種常用組件,直接拖拽即可使用。還支持 GUI 連接資料庫或 API,分分鐘構建出企業內部應用,支持在線、雲服務和 Docker 本地部署多種使用方式。

地址:github.com/illacloud/illa-builder

20、memos:一款清爽的輕量級備忘錄中心。採用 React+Tailwind+TypeScript+Go 開發的備忘錄中心,相當於極簡的微博。支持私有/公開備忘錄、標籤、互動式日曆等功能,以及 Docker 部署。

docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos neosmemo/memos:latest

地址:github.com/usememos/memos

21、SingleFile:用於網頁存檔的瀏覽器擴展。可實現一鍵下載網頁,能夠將網頁上的文字、圖片等內容,完整地整合到單個 HTML 文件里,支持 Chrome、Firefox、Safari、Microsoft Edge 等主流瀏覽器。

地址:github.com/gildas-lORMeau/SingleFile

22、zx:Bash 很好但我選擇用 JavaScript 寫腳本。實現用 JavaScript 寫 shell 腳本的工具,支持 cd、fetch、within 等函數,無需引入就可以使用 fs、os、yaml 等庫。

#!/usr/bin/env zx

await $`cat package.json | grep name`

let branch = await $`git branch --show-current`
await $`dep deploy --branch=${branch}`

await Promise.all([
  $`sleep 1; echo 1`,
  $`sleep 2; echo 2`,
  $`sleep 3; echo 3`,
])

let name = 'foo bar'
await $`mkdir /tmp/${name}`

地址:github.com/google/zx

Kotlin 項目

23、ReadYou:一款 Material 風格的 Android RSS 閱讀器。界面簡潔清爽的 RSS 閱讀器,支持訂閱 RSS 連結、更新通知、沉浸式閱讀等功能

地址:github.com/Ashinch/ReadYou

Python 項目

24、edgedb:一款採用圖-關係模型的新型開源資料庫。一個底層由 PostgreSQL 提供支持的開源資料庫,在兼容關係資料庫特性的同時,結合了 ORM 的聲明模式和 GraphQL 式的深度查詢。自帶 WebUI 界面,支持在線編輯數據、查詢、關係可視化等功能。

type Person {
  required property name -> str;
}

type Movie {
  required property title -> str;
  multi link actors -> Person;
}

地址:github.com/edgedb/edgedb

25、eg:常用的 Linux 命令示例查詢工具。它提供了 Linux 命令的常見用法,不僅使用方便而且示例簡潔實用。

地址:github.com/srsudar/eg

26、manim:用於創建數學動畫的 Python 框架。它可以用簡單的代碼製作出精美的數學動畫,通過動畫的方式直觀地解釋一些複雜的數學問題。

from manim import *

class SquareToCircle(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        square.flip(RIGHT)
        square.rotate(-3 * TAU / 8)
        circle.set_fill(PINK, opacity=0.5)

        self.play(Create(square))
        self.play(Transform(square, circle))
        self.play(FadeOut(square))

# 運行:manim -p -ql example.py SquareToCircle

地址:github.com/ManimCommunity/manim

27、sunfish:100 多行代碼的 Python 西洋棋引擎。一個僅用 Python 標準庫和 131 行代碼實現的命令行西洋棋遊戲。它注釋豐富結構清晰,核心代碼由西洋棋邏輯、策略搜索和用戶界面三個部分組成。

地址:github.com/thomasahle/sunfish

28、xalpha:Python 寫的基金投資管理回測引擎。該項目可以獲取基金的信息與淨值,支持精確到分的投資帳戶記錄整合、分析和可視化,簡單的策略回測以及根據預設策略的定時投資提醒,適合資金反覆進出的定投型和網格型投資者。

jiaoyidan = xa.record(path) # 額外一行先讀入 path 處的 csv 帳單
shipan = xa.mul(status=jiaoyidan) # Let's rock
shipan.summary() # 看所有基金總結效果
shipan.get_stock_holdings() # 查看底層等效股票持倉

地址:github.com/refraction-ray/xalpha

Rust 項目

29、lemmy:Rust 寫的連結聚合論壇。該項目基於 Rust 的 Web 框架 Actix 和 Diesel ORM 庫構建,它是一個類似 Hacker News 的網站,用戶可以在上面訂閱感興趣的話題、發布連結、討論和投票。

地址:github.com/LemmyNet/lemmy

30、onefetch:查看 Git 倉庫信息的命令行工具。一款由 Rust 編寫的命令行查看 Git 信息的工具,它可以直接在終端中展示本地 Git 倉庫的詳細信息,比如開源協議、提交次數、代碼統計等信息。

地址:github.com/o2sh/onefetch

31、windows-rs:Rust 調用 Windows API 的庫。由微軟開源的 Rust 庫,為 Rust 開發人員調用 Windows API 提供了方便,極大地改善了 Rust 語言在 Windows 系統上的開發條件。

use windows::{
    core::*, Data::Xml::Dom::*, Win32::Foundation::*, Win32::System::Threading::*,
    Win32::UI::WindowsAndMessaging::*,
};

fn main() -> Result<()> {
    let doc = XmlDocument::new()?;
    doc.LoadXml(h!("<html>hello world</html>"))?;

    let root = doc.DocumentElement()?;
    assert!(root.NodeName()? == "html");
    assert!(root.InnerText()? == "hello world");

    unsafe {
        let event = CreateEventW(None, true, false, None)?;
        SetEvent(event).ok()?;
        WaitForSingleObject(event, 0);
        CloseHandle(event).ok()?;

        MessageBoxA(None, s!("Ansi"), s!("Caption"), MB_OK);
        MessageBoxW(None, w!("Wide"), w!("Caption"), MB_OK);
    }

    Ok(())
}

地址:github.com/microsoft/windows-rs

Swift 項目

32、Wave:輕鬆實現絲滑動畫的 Swift 庫。用於 iOS 和 macOS 的動畫引擎庫,可以輕鬆創建流暢、感覺很棒的動畫。它沒有外部依賴,可以很容易地引入進基於 UIKit、SwiftUI 或 AppKit 的項目。

if panGestureRecognizer.state == .ended {

    // Create a spring with some bounciness. `response` affects the animation's duration.
    let animatedSpring = Spring(dampingRatio: 0.68, response: 0.80)

    // Get the gesture's lift-off velocity, and pass it into the Wave animation.
    let gestureVelocity = panGestureRecognizer.velocity(in: view)

    Wave.animate(withSpring: animatedSpring, gestureVelocity: gestureVelocity) {
        // Update animatable properties on the view's `animator` property, _not_ the view itself.
        pipView.animator.center = pipViewDestination     // Some target CGPoint that you calculate.
        pipView.animator.scale = CGPoint(x: 1.1, y: 1.1)
    }
}

地址:github.com/jtrivedi/Wave

其它

33、blurhash:開源的圖片占位符算法和實現。該算法可將圖片編碼成一段僅 20-30 個字符的短字符串,解碼後可展示一張基於原圖的占位圖,從而提升用戶的訪問體驗。官方提供了 C、Swift、TypeScript 等程式語言的實現,除此之外還有豐富的第三方庫。

地址:github.com/woltapp/blurhash

34、esp32-weather-epd:自製電子墨水屏的天氣顯示器。這是由一塊支持 WiFi 的 ESP32 單片機和一個 7.5 英寸電子墨水屏組成的天氣顯示器。它能夠展示通過 API 獲得的天氣實況和預報,以及傳感器提供的室內溫度和濕度。

地址:github.com/lmarzen/esp32-weather-epd

35、localsend:AirDrop 的開源替代方案。可以通過本地網絡與附近的設備,安全地共享文件和消息,此過程不需要網際網路,不需要外部伺服器,支持 Windows、Linux、macOS、Android、iOS 設備。

地址:github.com/localsend/localsend

36、mactype:美化 Windows 字體的工具。一款 Windows 字體美體工具,可以解決 Windows 字體虛化的問題,實現類似蘋果 macOS 系統的字體渲染效果,安裝簡單效果驚人。

地址:github.com/snowie2000/mactype

37、raft.github.io:一個關於 Raft 共識算法的網站。該網站收錄了關於 Raft 的論文、課程、書籍等資料,以及相關開源項目和 Raft 的運行情況可視化,幫你徹底搞懂 Raft。

地址:github.com/raft/raft.github.io

開源書籍

38、algorithmica:《現代硬體的算法》。該書來自俄羅斯非營利性的教育組織 Tinkoff Generation,它培養了大約一半的俄羅斯奧林匹克信息學決賽選手。不管你是算法研究員還是學生,這本書都可以讓你學到更多提升程序性能的實用方法。

地址:github.com/algorithmica-org/algorithmica

39、comprehensive-rust:《Comprehensive Rust》為期四天的 Rust 課程。這是谷歌 Android 團隊使用的 Rust 課程,它涵蓋了 Rust 的基本語法到高級主題,如泛型和錯誤處理,還包括最後一天的 Android 特定內容。

地址:github.com/google/comprehensive-rust

40、scientific-visualization-book:《科學可視化:Python+Matplotlib》。這是一本關於使用 Python 和 Matplotlib 進行科學可視化的開源書籍。該書分為四個部分:第一部分 Matplotlib 庫的基本原理,第二部分致力於實戰開發,第三部分是更高級的概念,即 3D 圖形、優化和動畫,第四部分是展示集合。

地址:github.com/rougier/scientific-visualization-book

機器學習

41、cog:將機器學習模型打包到容器的工具。可通過配置將機器學習模型所需的環境和依賴,自動打包到容器里方便部署,讓你不再為編寫 Docker 文件和 CUDA 而痛苦,還能自動啟動 HTTP 接口服務方便調用。

$ cog build -t my-colorization-model
--> Building Docker image...
--> Built my-colorization-model:latest

$ docker run -d -p 5000:5000 --gpus all my-colorization-model

$ curl localhost:5000/predictions -X POST \
    -H 'Content-Type: application/json' \
    -d '{"input": {"image": ".../input.jpg"}}'

地址:github.com/replicate/cog

42、stable-diffusion-webui:Stable Diffusion 模型的 WebUI 界面。這是一個實現在瀏覽器上使用的 Stable Diffusion 模型的項目,支持通過文本/圖片生成圖片、嵌入文本、調整圖片大小等功能。

地址:github.com/AUTOMATIC1111/stable-diffusion-webui

最後

以上就是本期的所有內容了,感謝您的閱讀。

如果覺得本期內容還不錯的話 求轉發、求分享 ❤️

關鍵字: