《HelloGitHub》第 78 期

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

簡介

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

//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 -> 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 -> {
            //手寫模式
            app.get("/hello1", ctx -> 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 對象。它提供了很多人性化的時間處理方式,比如時間加減、多長時間的描述以及時區的處理等等。

>>> import pendulum

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

>>> tomorrow = pendulum.now().add(days=1)

>>> past = pendulum.now().subtract(minutes=2)
>>> past.diff_for_humans()
'2 minutes ago'

>>> delta = past - last_week
>>> delta.hours
23
>>> 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集全/精校] 。YouTube上的電腦科學速成課(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 上有趣的項目,就點擊分享給大傢伙吧。

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

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