《HelloGitHub》第 103 期

削微寒發表於2024-10-28

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

簡介

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

github.com/521xueweihan/HelloGitHub

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


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

C 專案

1、rawdrawandroid:僅用 C 語言開發 Android 應用。這是一個 Android 應用開發框架,可以讓開發者不用 Java,僅用 C 和 Make 開發 Android 應用。它輕量且跨平臺,支援 OpenGL ES、陀螺儀、多點觸控及 Android 鍵盤,並能直接訪問 USB 裝置。

2、taisei:免費開源的東方 Project 系列的射擊遊戲。該專案是基於東方 Project 世界觀的彈幕射擊類遊戲,擁有獨立原創的故事情節、音樂和遊戲機制。這款名為“泰西”的遊戲,採用 C11、SDL2 和 OpenGL 開發,完全免費且開源,支援在 Windows、Linux、macOS 和 Chrome 等瀏覽器上執行。

C# 專案

3、Bulk-Crap-Uninstaller:免費的 Windows 應用解除安裝神器。這是一個用 C# 開發的 Windows 軟體解除安裝工具,能夠快速刪除大量不需要的應用程式。它完全免費、開箱即用,支援批次和強制解除安裝、清理殘留檔案、檢測隱藏或受保護的已註冊應用等功能。雖然面向 IT 專業人員設計,但其簡單的預設設定,讓任何人都能輕鬆上手。來自 @獵隼丶止戈reNo7 的分享

4、Macro-Deck:將手機變成 Stream Deck 的工具。該專案可以將手機、平板等帶瀏覽器的裝置變成類似 Stream Deck 的遠端自定義按鍵板,實現一鍵執行單步或多步操作,適用於直播和簡化日常任務等場景。

C++ 專案

5、aria2:超快的命令列下載工具。這個跨平臺命令列下載工具由 C++ 開發,支援 HTTP(S)、FTP、SFTP、BitTorrent 等多種協議。它操作簡單、體積小、下載速度快,並提供後臺執行、速度限制、分段下載和 BitTorrent 擴充套件等功能。來自 @劉睿華 的分享

6、fast_float:速度與精準兼具的 C++ 數字解析庫。該專案是用於快速解析數字字串的 C++ 庫,實現了類似 from_charts 函式的功能。它是一個速度極快、僅標頭檔案的庫,比標準庫快數倍。支援解析 float、double 和整數型別的字串,已被廣泛應用在 Chromium、Redis 和 LLVM 等知名專案中。

#include "fast_float/fast_float.h"
#include <iostream>

int main() {
    const std::string input =  "3.1416 xyz ";
    double result;
    auto answer = fast_float::from_chars(input.data(), input.data()+input.size(), result);
    if(answer.ec != std::errc()) { std::cerr << "parsing failure\n"; return EXIT_FAILURE; }
    std::cout << "parsed the number " << result << std::endl;
    return EXIT_SUCCESS;
}

7、mame:開源的街機模擬器。這是一款支援海量街機遊戲的模擬器。它透過模擬多種硬體平臺,實現了在電腦上執行各種復古軟體的功能。不僅支援街機,還有老式電腦和遊戲機。

Go 專案

8、beszel:輕量級高顏值的 Docker 監控平臺。這是一個輕量級的伺服器監控平臺,包括 Docker 統計、歷史資料和警報功能。它擁有友好的 Web 介面,配置簡單、開箱即用,支援自動備份、多使用者、OAuth 認證和 API 訪問等功能。

9、envd:高效的 AI 開發環境搭建工具。這是一個為 AI/ML 專案提供可復現開發環境的命令列工具。只需簡單的配置語言和命令,即可快速建立基於容器的開發環境,支援遠端構建、依賴快取和匯入遠端倉庫等功能。

10、gophish:開源的網路釣魚平臺。該專案提供了一個開箱即用的網路釣魚平臺,可用於模擬釣魚攻擊。它擁有友好的 Web 管理後臺,支援郵件模板、批次傳送郵件、網站克隆和資料視覺化,適用於企業安全培訓和滲透測試等場景。

11、opentofu:實現基礎設施即程式碼的開源方案。該專案是一個開源的基礎設施即程式碼工具,專注於自動化地建立、管理和部署本地和雲服務基礎設施。作為 Terraform 的一個分支,它由社群驅動,支援使用高階配置語法描述基礎設施、生成執行計劃和構建資源依賴圖,從而減少人為操作失誤,實現複雜變更的自動化。來自 @劉睿華 的分享

12、photoview:極簡的照片管理平臺。這是一款用於自建雲相簿的 Web 應用,它擁有直觀的使用者介面和豐富的功能,支援自動整理照片、生成縮圖、共享相簿、EXIF 解析和多使用者管理。還提供了 iOS 應用,方便使用者在手機上訪問。來自 @劉睿華 的分享

Java 專案

13、GoGoGo:開源的 Android 虛擬定位應用。該專案是一個基於 Android 除錯 API 和百度地圖實現的虛擬定位工具,無需 ROOT 許可權即可修改地理位置。它支援位置搜尋和手動輸入座標,並提供了一個可自由移動的搖桿來模擬位移。

14、karate:開源的 API 自動測試框架。這是一款基於 Java 的 API 測試框架,可與 Spring Boot、Maven 等 Java 生態系統無縫整合。它整合了 API 測試自動化、模擬、效能測試和 UI 自動化等功能,支援使用類似 Cucumber 的語法編寫測試用例,並提供了一個跨平臺的可執行檔案,即使對 Java 不熟悉也能輕鬆上手。

JavaScript 專案

15、icones:極簡的圖示搜尋網站。這是一個用於快速查詢各種圖示的網站,支援分類過濾和多選模式。使用者可將選擇的圖示打包為字型或直接下載 SVG 格式。

16、media-chrome:打造現代化網頁播放器介面的元件庫。這是一個用於定製網頁音訊和影片播放器介面的庫,相容各種 JavaScript 框架。它高度可定製,開發者可以輕鬆調整元件的外觀和功能,支援字幕、投屏、快捷鍵、倍速、預覽縮圖、移動端和靜音按鈕等功能。

<media-controller audio>
  <audio
    slot="media"
    src="xxxxxx"
  ></audio>
  <media-control-bar>
    <media-play-button></media-play-button>
    <media-time-display showduration></media-time-display>
    <media-time-range></media-time-range>
    <media-playback-rate-button></media-playback-rate-button>
    <media-mute-button></media-mute-button>
    <media-volume-range></media-volume-range>
  </media-control-bar>
</media-controller>

17、Moe-Counter:可愛的網站計數器。該專案是一個用於統計頁面訪問人數的計數器。它不僅簡單易用,還提供多種可愛風格的主題,使用者可根據個人喜好進行選擇。

18、piscina:靈活高效的 Node.js 執行緒池。該專案是用 TypeScript 編寫的高效能 Node Worker 執行緒池,旨在簡化 Node.js 多執行緒程式設計。它提供簡單易用的 API,支援執行緒間通訊、動態調整執行緒池大小、取消任務、設定記憶體限制和非同步任務跟蹤等功能。

const path = require('path');
const Piscina = require('piscina');

const piscina = new Piscina({
  filename: path.resolve(__dirname, 'worker.js')
});

(async function() {
  const result = await piscina.run({ a: 4, b: 6 });
  console.log(result);  // Prints 10
})();

19、swapy:輕鬆實現拖動交換佈局的庫。該專案可以將任意佈局轉換為可拖動交換的形式,僅需幾行程式碼即可實現。它支援設定互動動畫,可以在 React、Vue、Svelte 等框架中使用,適用於各種需要互動式佈局的場景。

import { createSwapy } from 'swapy'

const container = document.querySelector('.container')

const swapy = createSwapy(container, {
  animation: 'dynamic' // or spring or none
})

// You can disable and enable it anytime you want
swapy.enable(true)

Kotlin 專案

20、etchdroid:在手機上製作 USB 啟動盤的工具。這是一個開源的 Android 應用,專為在手機上製作作業系統 USB 啟動盤而設計。它無需 ROOT 許可權,即可將作業系統映象寫入 USB 裝置,支援 Ubuntu、樹莓派等多個系統,適用在無法使用電腦時製作啟動 U 盤。

21、KeyMapper:Android 按鍵重對映應用。這是一個免費開源的 Android 應用,可以自定義 Android 裝置的按鍵、指紋和手勢操作。無需 ROOT 許可權,支援藍芽和有線鍵盤,提供靈活的按鍵重對映體驗。

Python 專案

22、backtrader:Python 量化交易回測框架。該專案是用 Python 編寫的回測庫,專為開發和測試交易策略而設計。它可以從 CSV 檔案、線上資料來源和 pandas 中提取資料,支援多策略同步執行、生成交易策略的視覺化圖表等功能。內建 100 多種指標,包括趨勢、成交量和波動性等指標。

from datetime import datetime
import backtrader as bt

class SmaCross(bt.SignalStrategy):
    def __init__(self):
        sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)
        crossover = bt.ind.CrossOver(sma1, sma2)
        self.signal_add(bt.SIGNAL_LONG, crossover)

cerebro = bt.Cerebro()
cerebro.addstrategy(SmaCross)

data0 = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1),
                                  todate=datetime(2012, 12, 31))
cerebro.adddata(data0)

cerebro.run()
cerebro.plot()

23、core:開源的智慧家居平臺。這是一個用 Python 編寫的智慧家居平臺,旨在整合不同品牌的智慧裝置,提供個性化的家庭自動化體驗。它解決了傳統系統互操作性(Interoperability)差的問題,允許使用者在同一平臺上自由控制和聯動 Apple HomeKit、米家、Aqara、塗鴉等裝置,極大提升了智慧家居的靈活性和便捷性。適合希望打破單一平臺限制的使用者,尤其是追求高價效比的 DIY 智慧家居愛好者。來自 @無間之鐘 的分享

24、paperless-ngx:紙質文件數字化存檔工具。這是一個基於 Django 的文件管理系統,可將紙質文件轉換成可搜尋的線上存檔。不同於普通的掃描器將實體書變為難以檢索的圖片或 PDF 格式,它透過文件掃描器實現電子化,轉化為易於檢索的格式。

25、pipreqs:快速生成 Python 專案依賴檔案的工具。該專案可以根據 Python 專案中的匯入語句,生成 requirements.txt 檔案。它能夠自動識別專案中使用的庫,無需安裝即可生成依賴庫列表。

26、pokeapi:寶可夢資料的 API 服務。這是一個基於 Django 構建的寶可夢資料 RESTful API 服務,為開發者提供全面的寶可夢資料庫,包括小精靈的動作、屬性、技能和進化資訊等詳細資料。

Rust 專案

27、insta:Rust 的快照測試庫。這是一個用於 Rust 專案的快照測試庫,特別適用於參考值非常大或經常變化的場景。它提供了 VSCode 外掛和命令列工具,當測試因參考值變動而失敗時,可以透過 review 命令檢視問題,並一鍵更新快照(參考值),從而快速透過單元測試。

fn split_words(s: &str) -> Vec<&str> {
    s.split_whitespace().collect()
}

#[test]
fn test_split_words() {
    let words = split_words("hello from the other side");
    insta::assert_yaml_snapshot!(words);
}

28、oha:Rust 驅動的 HTTP 壓測工具。這是一個用 Rust 開發的 HTTP 請求壓測工具,它操作簡單、帶 TUI 動畫介面,支援生成請求延遲、吞吐量等指標的報告,以及動態 URL 和更靈活的請求間隔(burst-delay)等功能。

29、steel:基於 Rust 的嵌入式 Scheme 直譯器。這是一個用 Rust 編寫的嵌入式 Scheme 直譯器,旨在提供輕量級且快速的指令碼語言支援。它解決了在嵌入式環境或小型應用中對高效、靈活指令碼引擎的需求。來自 @無間之鐘 的分享

Swift 專案

30、aural-player:靈感來自 Winamp 的 macOS 音樂播放器。該專案是受經典的 Winamp 播放器啟發,用 Swift 程式語言開發的適用於 macOS 的音樂播放器。它內建音效和均衡器,支援多種音訊格式、回放、歌詞顯示、自定義介面等功能。

31、DockDoor:適用於 macOS 的視窗預覽工具。該專案是用 Swift 和 SwiftUI 開發的 Dock 視窗預覽工具。只需將滑鼠懸停在 Dock 上的應用圖示,即可預覽其開啟的視窗,還支援類似 Windows 的 Alt+Tab 切換和自定義快捷鍵的功能。

人工智慧

32、moondream:小型的視覺語言模型。這是一個可在資源受限的裝置上執行的小型視覺語言模型,它能夠理解並生成與影像相關的自然語言描述,支援影像識別、生成描述和問答等功能。

from transformers import AutoModelForCausalLM, AutoTokenizer
from PIL import Image

model_id = "vikhyatk/moondream2"
revision = "2024-08-26"
model = AutoModelForCausalLM.from_pretrained(
    model_id, trust_remote_code=True, revision=revision
)
tokenizer = AutoTokenizer.from_pretrained(model_id, revision=revision)

image = Image.open('<IMAGE_PATH>')
enc_image = model.encode_image(image)
print(model.answer_question(enc_image, "Describe this image.", tokenizer))

33、Prompt_Engineering:全面的提示工程實戰指南。這份教程致力於幫助使用者掌握與大型語言模型(LLM)溝通的技巧。內容涵蓋從基礎到高階的提示工程技術,附有詳細的實現指南和示例程式碼。

34、spaCy:強大的自然語言處理 Python 庫。這是一個工業級的自然語言處理(NLP)庫,支援 70 多種語言的分詞和訓練。它採用 Python 編寫,可實現標註、解析和文字分類等功能,並支援模型打包與部署。

# pip install -U spacy
# python -m spacy download en_core_web_sm
import spacy

# Load English tokenizer, tagger, parser and NER
nlp = spacy.load("en_core_web_sm")

# Process whole documents
text = ("When Sebastian Thrun started working on self-driving cars at "
        "Google in 2007, few people outside of the company took him "
        "seriously. “I can tell you very senior CEOs of major American "
        "car companies would shake my hand and turn away because I wasn’t "
        "worth talking to,” said Thrun, in an interview with Recode earlier "
        "this week.")
doc = nlp(text)

# Analyze syntax
print("Noun phrases:", [chunk.text for chunk in doc.noun_chunks])
print("Verbs:", [token.lemma_ for token in doc if token.pos_ == "VERB"])

# Find named entities, phrases and concepts
for entity in doc.ents:
    print(entity.text, entity.label_)

35、ultralytics:先進的物件檢測和跟蹤模型。該專案是基於之前的 YOLO 版本,增加了新功能並改進了模型,在物件檢測、跟蹤、例項分割和影像分類等任務中表現出色。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")

# Train the model
train_results = model.train(
    data="coco8.yaml",  # path to dataset YAML
    epochs=100,  # number of training epochs
    imgsz=640,  # training image size
    device="cpu",  # device to run on, i.e. device=0 or device=0,1,2,3 or device=cpu
)

# Evaluate model performance on the validation set
metrics = model.val()

# Perform object detection on an image
results = model("path/to/image.jpg")
results[0].show()

# Export the model to ONNX format
path = model.export(format="onnx")  # return path to exported model

其它

36、BilibiliSponsorBlock:B 站影片空降助手。這是一款能夠自動跳過 B 站影片中恰飯片段和開場、結尾動畫的瀏覽器外掛,所有標註資料均由網友貢獻,支援 Chrome、Edge 和 FireFox 瀏覽器。

37、cognitive-load:降低開發者認知負荷的建議。這是一篇關於如何在軟體開發過程中,降低認知負荷的文章。即簡化程式碼、提高程式碼的可讀性,減輕開發者在閱讀和理解程式碼時的負擔。

38、dockerc:將 Docker 映象編譯為獨立可執行檔案的工具。該專案能將 Docker 映象轉化為二進位制可執行檔案,無需配置 Docker 環境或安裝依賴,簡化了軟體的分發和執行流程。來自 @kero990 的分享

39、kubernetes-goat:Kubernetes 安全攻防演練平臺。該專案是用於構建漏洞百出、易受攻擊的叢集環境,讓開發者可以在真實場景中學習 K8s 攻擊和防禦技巧。

40、pilipala:開源的 bilibili 第三方客戶端。該專案是用 Flutter 開發的 B 站第三方客戶端,支援 Android 和 iOS 平臺。它提供了推薦影片列表、熱門直播、番劇、離線快取、回覆評論、彈幕和搜尋等功能。來自 @Micro·J 的分享

41、Sensor-Watch:卡西歐 F-91W 手錶的開源電路板。該專案是為經典 Casio F-91W 手錶自制電路板,採用 ARM Cortex-M0+ 微控制器(SAM L22)。配備十位數段液晶螢幕、五個指示段、LED 背光和三個按鈕,支援使用者透過 USB 程式設計,在手錶上執行自定義程式。

42、themostdangerouswritingapp:挑戰寫作效率極限的工具。這是一個幫助使用者進入寫作“心流”狀態的 Web 應用。如果你停止輸入超過 5 秒,螢幕上的文字就會逐漸變得模糊,最終會徹底消失。來自 @孤膽槍手 的分享

開源書籍

43、udlbook:《Understanding Deep Learning》理解深度學習。該書是由 Simon J.D. Prince 編寫的一本關於深度學習的專業書籍,內容涵蓋深度學習的理論基礎、效能評估、卷積網路、Transformers、圖神經網路、生成對抗網路(GANs)、擴散模型(Diffusion Models)、強化學習等主題,並附有大量練習題。

最後

感謝參與分享開源專案的小夥伴們,歡迎更多的開源愛好者來 HelloGitHub 自薦/推薦開源專案。如果你發現了 GitHub 上有趣的專案,就點選這裡分享給大傢伙吧!

本期有你感興趣的開源專案嗎?如果有的話就留言告訴我吧~如果還沒看過癮,可以點選閱讀往期內容。

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

相關文章