有趣的開源月刊《HelloGitHub》第 78 期

語言: CN / TW / HK

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

簡介

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

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

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


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

C 專案

1、gifsicle:壓縮和編輯 GIF 圖片的工具。它是一款體積小、功能強大的 GIF 圖片處理工具,不僅可以壓縮 GIF 圖片,還支援合併多個 GIF、匯出所有幀、檢視圖片資訊、減少幀數、設定迴圈次數、延遲、編輯某一幀等功能。

# 安裝
brew install gifsicle
# 檢視
gifsicle -I input.gif | head
# 優化/壓縮
gifsicle input.gif -O3 -o output.gif

2、CPU-X:一款顯示電腦 CPU、主機板等資訊的免費工具。能夠顯示裝置的 CPU、主機板、記憶體、顯示卡、作業系統等資訊,支援 GUI 和命令列兩種啟動方式,適用於 Linux 和 FreeBSD 作業系統。

3、acl:一款跨平臺的網路通訊庫和伺服器框架。它既可以做網路通訊的客戶端,也可以編寫伺服器端,支援 HTTP、SMTP、ICMP、MQTT、Redis、Memcache 多種常見協議,以及 XML、JSON、BASE64 等編碼格式。

  • lib_acl:最基礎的庫
  • lib_protocol:實現了 HTPP 協議及 ICMP/PING 協議
  • lib_fiber:該庫為支援協程庫,直接 hook 系統 read/write 等 API,與 epoll 配合支援高併發網路程式設計

C# 專案

4、XCharts:Unity 資料視覺化圖表外掛。一款基於 Unity UGUI 的圖表外掛,它功能強大、簡單易用,支援折線圖、柱狀圖、餅圖、雷達圖、散點圖、熱力圖、環形圖、K 線圖等多種圖表。

5、WinDynamicDesktop:類似 macOS 動態桌面的工具。該專案是將 macOS 動態桌面功能移植到 Windows 10,它可以基於你的位置計算出日出和日落的時間,並根據當前時間動態改變桌面桌布,已上架 Microsoft 應用商店。

6、Text-Grab:一個輕量級的 Windows OCR 工具。它基於 Windows 10 系統自帶的 OCR API 實現,可以將看到的所有文字轉化成文字,而且啟動速度快、無需常駐後臺、可離線使用。

C++ 專案

7、kys-cpp:遊戲《金庸群俠傳》的 C++ 復刻版。基於 SDL2 開發的《金庸群俠傳》遊戲,資源大部分來自 DOS 版本,目前已完工可以正常執行。

8、Cemu:任天堂 Wii U 遊戲機模擬器。用 C++ 編寫的開源 Wii U 模擬器,能夠執行絕大多數的 Wii U 遊戲和自制遊戲,支援 Windows、Linux、macOS 作業系統。

9、wiliwili:專為手柄控制設計的第三方 B 站客戶端。一個用 C++ 編寫的適用於 Nintendo Switch 的 B 站客戶端,擁有接近 B 站官方 PC 客戶端的瀏覽體驗,同時支援觸屏與手柄按鍵操控。

10、aseprite:開源、專業的畫素畫編輯軟體。一款主要用於畫素畫和 Sprite 動畫的影象編輯軟體,它擁有圖層、自由手繪模式、陰影墨水、自定義筆刷、輪廓線、寬畫素、命令列介面、Lua 指令碼等特色功能。該軟體雖然專業版收費但並不貴,也可選擇免費版但無法儲存作品。

CSS 專案

11、30diasDeCSS:在 30 天內用 HTML 和 CSS 建立 30 個迷你專案的挑戰。該專案包含了 30 個用 HTML+CSS 構建的迷你專案,每個專案通過動圖直觀地展示了實現的效果,不僅包含全部原始碼還指出了用到的知識點。

Go 專案

12、HackBrowserData:一款瀏覽器資料匯出工具。能夠匯出本地瀏覽器的密碼、歷史記錄、Cookie、書籤、下載記錄、localStorage 等資料的命令列工具,支援多平臺下的多種主流瀏覽器。

13、fq:一條命令檢視二進位制檔案。用於檢視和處理二進位制檔案的命令列工具,安裝簡單使用方便,支援 mp4、flac、mp3、jpeg 等多種格式的檔案。

14、statsviz:實時展示 Go 程式執行時指標的 Web 應用。該專案通過圖表視覺化的方式,實時展示 Go 程式執行時的堆、物件、Goroutines、MSpan/MCache 等資訊。

mux := http.NewServeMux()
statsviz.Register(mux)

15、v2:極簡的 feed 訂閱工具。該專案的“簡”是由內而外,內部程式碼部分不使用 Web 框架和 ORM 僅採用 Go+PostgreSQL+JS 實現,介面樸實無華、功能精簡實用,支援快速自建、源管理、自動獲取內容、快捷鍵、使用者系統等,這一切不多不少剛剛好。

16、cobra:當下最流行的 Go CLI 框架。功能強大且極易上手的 Go 語言 CLI 庫,可用於快速構建命令列程式,被 K8s、Hugo、GitHub CLI 等眾多知名 Go 專案所採用,支援自動提示、自動構建專案、巢狀子命令等功能。

var rootCmd = &cobra.Command{
  Use:   "hugo",
  Short: "Hugo is a very fast static site generator",
  Long: "A Fast and Flexible Static Site Generator built with love by spf13",
  Run: func(cmd *cobra.Command, args []string) {
    // Do Stuff Here
  },
}

func Execute() {
  if err := rootCmd.Execute(); err != nil {
    fmt.Println(err)
    os.Exit(1)
  }
}

Java 專案

17、hippo4j:帶有監控報警功能的動態執行緒池框架。支援執行時動態變更執行緒池引數,可實時檢視執行緒池執行時資料,適配 RocketMQ、RabbitMQ、Tomcat 等中介軟體,解決了執行緒池引數不易評估以及執行時黑盒的問題。

@Bean
@DynamicThreadPool
public Executor sendMessageConsumeDynamicThreadPool() {
    String threadPoolId = "send-message-consume";
    ThreadPoolExecutor sendMessageConsume = ThreadPoolBuilder.builder()
            .threadPoolId(threadPoolId)
            .threadFactory(threadPoolId)
            .dynamicPool()
            .build();
    return sendMessageConsume;
}

18、ghidra:一款免費開源的軟體逆向分析工具。該專案由美國國安局開源,可用於分析編譯後的程式碼。

19、caffeine:Java 的高效能快取庫。借鑑了 Guava 和 ConcurrentLinkedHashMap 的設計經驗,青出於藍而勝於藍的 Java 本地快取庫,擁有更高的快取命中率和更快的讀寫速度。

LoadingCache<key, graph> graphs = Caffeine.newBuilder()
    .maximumSize(10_000)
    .expireAfterWrite(Duration.ofMinutes(5))
    .refreshAfterWrite(Duration.ofMinutes(1))
    .build(key -&gt; createExpensiveGraph(key));

20、solon:一款 Java 輕量級應用開發框架。可用來快速開發 Java Web 專案,主框架僅 0.1 MB。類似 Python Flask 的微型框架,提倡按需組合外掛。

@Controller
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app -&gt; {
            //手寫模式
            app.get("/hello1", ctx -&gt; ctx.output("Hello world!"));
        });
    }

    //註解模式
    @Get
    @Socket
    @Mapping("/hello2")
    public String hello2(@Param(defaultValue = "world") String name) {
        return String.format("Hello %s!", name);
    }
}

JavaScript 專案

21、notesnook:一款端到端加密的筆記軟體。這款筆記軟體以保護使用者隱私為主要特點,採用了安全的 XChaCha20-Poly1305 和 Argon2 演算法對資料進行加密。它不僅安全還擁有豐富的功能,但免費版功能閹割嚴重,比如不支援 Markdown、插入圖片等重要的功能。

22、jsoncrack.com:優雅的 JSON 資料視覺化工具。該專案不是簡單的展示 JSON 資料,而是將其轉化為類似腦圖的形式,支援放大/縮小、展開/收縮、搜尋節點、匯出圖片等操作,還可以快速部署成服務。

23、sakana:可愛的 Sakana 模擬器。Sakana 是出自動漫《莉可麗絲》的一個梗,可愛的動作加上 Sakana 這句話,使得這個場面迅速走紅,這個專案可以讓你輕鬆再現這個瞬間。

24、m3u8-downloader:m3u8 影片線上提取工具。m3u8 影片格式常用於直播服務,其原理是將完整的影片拆分成多個 .ts 影片碎片,其中 .m3u8 檔案會詳細記錄每個影片片段的地址。影片播放時,會先讀取 .m3u8 檔案,再逐個下載播放 .ts 影片片段。該專案就是基於上述原理實現的 m3u8 影片提取工具,使用方便無需安裝開啟網頁即可下載完整的影片。

// 下載整合後的 TS 檔案
downloadFile(fileDataList, fileName, fileType) {
    this.tips = 'ts 碎片整合中,請留意瀏覽器下載'
    const fileBlob = new Blob(fileDataList, { type: 'video/MP2T' }) // 建立一個 Blob 物件,並設定檔案的 MIME 型別
    const a = document.createElement('a')
    a.download = fileName + '.' + fileType
    a.href = URL.createObjectURL(fileBlob)
    a.style.display = 'none'
    document.body.appendChild(a)
    a.click()
    a.remove()
}

25、tldraw:一款實用的微型線上繪圖工具。這是一個”麻雀雖小,五臟俱全“的繪圖工具,支援插入便籤、儲存進度、生成圖片、多人協作等實用的功能。

PHP 專案

26、Piwigo:一款開源線上相簿應用。採用 PHP+MySQL 開發的管理照片的 Web 專案,它功能強大安裝簡單,擁有豐富的主題和靈活的外掛,可輕鬆完成個性化定製。支援 iOS 和 Android 客戶端,讓你可以隨時隨地上傳、管理照片。

Python 專案

27、pendulum:讓 Python 處理時間更簡單的庫。該專案不僅提供了更加簡單易用的 API,而且還相容 datetime 標準庫,可以直接替程式碼中的 datetime 物件。它提供了很多人性化的時間處理方式,比如時間加減、多長時間的描述以及時區的處理等等。

&gt;&gt;&gt; import pendulum

&gt;&gt;&gt; now_in_paris = pendulum.now('Europe/Paris')
&gt;&gt;&gt; now_in_paris
'2016-07-04T00:49:58.502116+02:00'

&gt;&gt;&gt; tomorrow = pendulum.now().add(days=1)

&gt;&gt;&gt; past = pendulum.now().subtract(minutes=2)
&gt;&gt;&gt; past.diff_for_humans()
'2 minutes ago'

&gt;&gt;&gt; delta = past - last_week
&gt;&gt;&gt; delta.hours
23
&gt;&gt;&gt; delta.in_words(locale='en')
'6 days 23 hours 58 minutes'

28、pg_activity:類似 top 的 PostgreSQL 資料庫命令列監控工具。一條命令就能實時檢視 PostgreSQL 資料庫狀態和每條 SQL 語句執行詳情、耗時、佔用資源、讀/寫速度等資訊的工具。

29、Games:純 Python 實現的桌面小遊戲集合。該專案包含 20 多個不重樣的趣味小遊戲,它們都是採用 Python 開發執行簡單,用到的庫包括 cocos2d、pygame、PyQt 等。雖然這些遊戲可玩性較低,但專案簡單十分適合新手學習。

30、django-silk:Django 的效能分析工具。它可以將 Django 服務的平均耗時、請求次數、查詢 SQL、程式碼效能分析等資訊展示到一個頁面,開發者有了這些資訊就能夠更快地找到 Django 服務的效能瓶頸和響應慢的原因。

# 安裝
pip install django-silk

# 中介軟體的方式使用
MIDDLEWARE = [
    ...
    'silk.middleware.SilkyMiddleware',
    ...
]

INSTALLED_APPS = (
    ...
    'silk'
)

31、OCRmyPDF:可以把 PDF 檔案變成可搜尋檔案的工具。它使用 Tesseract OCR 引擎,將 PDF 的內容識別成文字,然後給 PDF 檔案增加 OCR 文字層。從而實現可搜尋和複製 PDF 的內容,已支援 100 多種語言。

Ruby 專案

32、wpscan:一款 WordPress 安全掃描工具。該專案可用於發現 WordPress 構建的網站存在的安全隱患,掃描項包括 WordPress 漏洞、已安裝的外掛和主題、弱密碼等。

Rust 專案

33、espanso:Rust 寫的智慧文字擴充套件工具。文字擴充套件器是可以幫你提高輸入效率的工具,當你輸入一個特定的關鍵詞時,它可以自動檢測到並將其替換為預設的內容。這個專案幾乎可以和任何程式一起使用,適用於 Windows、macOS 和 Linux。

34、easy_rust:用簡單的英語寫的 Rust 教程。雖然當下已經有很多的 Rust 教程,但是大多都是以英語為主,這對不擅長英語的程式設計師並不友好,所以作者寫了一份僅用簡單的英語講解 Rust 的教程,已有中文翻譯版。

Swift 專案

35、TinyPNG4Mac:適用於 macOS 的 TinyPNG 第三方客戶端。TinyPNG 是一個提供免費影象壓縮服務的網站,該專案是其第三方 macOS 客戶端,可以讓你無需開啟瀏覽器、無需手動下載圖片,僅通過簡單的拖拽就能完成對 JPEG、PNG 圖片的壓縮。

其它

36、WebKit:蘋果開源的 Web 瀏覽器引擎。它被用於開發 macOS 和 iOS 上的 Safari、App Store、Mail 等應用。WebKit 不僅出現在蘋果的生態中,其分支 Blink 專案也是 Chromium 的重要組成部分,它又是各大主流瀏覽器的核心。

37、missing-semester:大學計算機教育中缺失的一課。大學裡的計算機課程往往只專注於講授資料結構、作業系統這些知識,對於程式設計開發中常用的工具則留給學生自行學習。在 MIT 這個課程中,你可以瞭解和掌握命令列(shell)、文字編輯器(Vim)、版本控制系統(Git)等強大的工具,越早接觸越能更加熟練地使用它們,有助於未來的職業生涯。

38、nginx-tutorial:免費的 Nginx 極簡教程。這是一套簡單的 Nginx 教程,包含 Nginx 的安裝、常用命令、反向代理、負載均衡等知識點,能夠幫助新手快速入門 Nginx。

39、Crash-Course-Computer-Science-Chinese:電腦科學速成課[40集全/精校] 。油管上的電腦科學速成課(Crash Course Computer Science)中文字幕翻譯版,影片從電晶體講到了作業系統和人工智慧,但並不會教你如何程式設計屬於科普類影片。

40、bats-core:Bash 自動化測試系統。它通過測試用例驗證 Bash 指令碼的執行結果是否符合預期,原理是基於 Bash 的 errexit(set -e) 選項判斷測試用例的執行成功與否。

#!/usr/bin/env bats

@test "addition using bc" {
  result="$(echo 2+2 | bc)"
  [ "$result" -eq 4 ]
}

@test "addition using dc" {
  result="$(echo 2 2+p | dc)"
  [ "$result" -eq 4 ]
}

41、The-Art-of-Linear-Algebra:圖解線性代數。《Linear Algebra for Everyone》是一門廣受好評的線性代數公開課,該專案是基於這門公開課,編寫整理而成的圖文並茂的學習筆記。

開源書籍

42、patterns-of-distributed-systems:《分散式系統模式》中文版。該書嘗試將副本同步、可靠性、網路延遲等分散式系統共性問題歸納總結,並參考像 Kafka、Zookeeper 等分散式系統的實現過程,給出分散式系統中同類問題的通用解決方法/模式。

43、Cookbook:《資料工程師 Cookbook》。這本書會告訴你,如果想要成為一名出色的資料工程師,到底需要學習哪些知識。

機器學習

44、stable-diffusion:可以根據文字生成圖片的模型。只要輸入一段文字描述,就能得到一張由 AI 生成的圖片,除此之外該專案還支援將粗糙的草圖轉化成精緻的藝術圖片。

# make sure you're logged in with `huggingface-cli login`
from torch import autocast
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
	"CompVis/stable-diffusion-v1-4", 
	use_auth_token=True
).to("cuda")

prompt = "a photo of an astronaut riding a horse on mars"
with autocast("cuda"):
    image = pipe(prompt)["sample"][0]  
    
image.save("astronaut_rides_horse.png")

45、style2paints:一款給線稿上色的 AI 輔助工具。能夠幫助使用者給沒有上色的圖片,快速完成上色的 AI 工具,上色效果廣受好評,完全免費開箱即用。

最後

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

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

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