《HelloGitHub》第 83 期

2023-02-28 09:00:27

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

簡介

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

https://github.com/521xueweihan/HelloGitHub

這裡有實戰專案、入門教學、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 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!

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

3、ttyd:簡單的網路共用終端的命令列工具。基於 libuv 和 WebGL2 構建的 Web 共用終端工具,安裝簡單使用方便,支援 SSL、檔案傳輸、Sixel 影象輸出等功能。可執行在 Windows、macOS、Linux、OpenWrt 等作業系統上,適用於遠端運維、線上管理裝置等場景。

C# 專案

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

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

6、gsudo:適用於 Windows 的 sudo 命令列工具。它是 Windows 上的 sudo,允許使用者以最高許可權執行命令,擁有與 Unix/Linux sudo 類似的使用體驗,支援 CMD、PowerShell、git-bash 等。

C++ 專案

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

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);
}

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;
}

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

Go 專案

11、Dragonfly2:一款基於 P2P 的智慧映象和檔案分發工具。它提供了高效、穩定、安全的基於 P2P 技術的檔案分發和映象加速系統,能夠提高大規模檔案傳輸的效率和速率,最大限度地利用網路頻寬,適用於應用分發、快取分發、紀錄檔分發和映象分發等領域。

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

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("https://httpbin.org/uuid") // Treat the package name as a Request, send GET request.

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

14、sqlc:將 SQL 轉成型別安全的 Go 程式碼的工具。它可以將輸入的 SQL 語句,自動轉化成型別安全、可讀的運算元據庫的 Go 程式碼,支援 MySQL、PostgreSQL 和 SQLite 資料庫。

15、tinykv:構建分散式 Key-Value 資料庫的教學。介紹瞭如何用 Go 語言實現一個高可用、可水平擴充套件、支援分散式事務的鍵-值儲存服務。

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("http://example.com/announce")
        .build();
Files.write(Paths.get("/home/torrents/mytorrent.torrent"), torrentBytes);

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);
        }
  }
}

JavaScript 專案

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

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

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

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

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

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}`

Kotlin 專案

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

Python 專案

24、edgedb:一款採用圖-關係模型的新型開源資料庫。一個底層由 PostgreSQL 提供支援的開源資料庫,在相容關聯式資料庫特性的同時,結合了 ORM 的宣告模式和 GraphQL 式的深度查詢。自帶 WebUI 介面,支援線上編輯資料、查詢、關係視覺化等功能。

type Person {
  required property name -> str;
}

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

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

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

27、sunfish:100 多行程式碼的 Python 國際象棋引擎。一個僅用 Python 標準庫和 131 行程式碼實現的命令列國際象棋遊戲。它註釋豐富結構清晰,核心程式碼由國際象棋邏輯、策略搜尋和使用者介面三個部分組成。

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

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

Rust 專案

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

30、onefetch:檢視 Git 倉庫資訊的命令列工具。一款由 Rust 編寫的命令列檢視 Git 資訊的工具,它可以直接在終端中展示本地 Git 倉庫的詳細資訊,比如開源協定、提交次數、程式碼統計等資訊。

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(())
}

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)
    }
}

其它

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

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

35、localsend:AirDrop 的開源替代方案。可以通過本地網路與附近的裝置,安全地共用檔案和訊息,此過程不需要網際網路,不需要外部伺服器,支援 Windows、Linux、macOS、Android、iOS 裝置。

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

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

開源書籍

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

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

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

機器學習

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 http://localhost:5000/predictions -X POST \
    -H 'Content-Type: application/json' \
    -d '{"input": {"image": "https://.../input.jpg"}}'

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

最後

如果你發現了 GitHub 上有趣的專案,就點選這裡分享給大傢伙吧!

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

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