興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!
HelloGitHub 分享 GitHub 上有趣、入門級的開源專案。
這裡有實戰專案、入門教學、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!
以下為本期內容|每個月 28 號更新
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 等編碼格式。
4、XCharts:Unity 資料視覺化圖表外掛。一款基於 Unity UGUI 的圖表外掛,它功能強大、簡單易用,支援折線圖、柱狀圖、餅圖、雷達圖、散點圖、熱力圖、環形圖、K 線圖等多種圖表。
5、WinDynamicDesktop:類似 macOS 動態桌面的工具。該專案是將 macOS 動態桌面功能移植到 Windows 10,它可以基於你的位置計算出日出和日落的時間,並根據當前時間動態改變桌面桌布,已上架 Microsoft 應用商店。
6、Text-Grab:一個輕量級的 Windows OCR 工具。它基於 Windows 10 系統自帶的 OCR API 實現,可以將看到的所有文字轉化成文字,而且啟動速度快、無需常駐後臺、可離線使用。
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 指令碼等特色功能。該軟體雖然專業版收費但並不貴,也可選擇免費版但無法儲存作品。
11、30diasDeCSS:在 30 天內用 HTML 和 CSS 建立 30 個迷你專案的挑戰。該專案包含了 30 個用 HTML+CSS 構建的迷你專案,每個專案通過動圖直觀地展示了實現的效果,不僅包含全部原始碼還指出了用到的知識點。
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)
}
}
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);
}
}
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:一款實用的微型線上繪圖工具。這是一個」麻雀雖小,五臟俱全「的繪圖工具,支援插入便籤、儲存進度、生成圖片、多人共同作業等實用的功能。
26、Piwigo:一款開源線上相簿應用。採用 PHP+MySQL 開發的管理照片的 Web 專案,它功能強大安裝簡單,擁有豐富的主題和靈活的外掛,可輕鬆完成個性化客製化。支援 iOS 和 Android 使用者端,讓你可以隨時隨地上傳、管理照片。
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 多種語言。
32、wpscan:一款 WordPress 安全掃描工具。該專案可用於發現 WordPress 構建的網站存在的安全隱患,掃描項包括 WordPress 漏洞、已安裝的外掛和主題、弱密碼等。
33、espanso:Rust 寫的智慧文字擴充套件工具。文字擴充套件器是可以幫你提高輸入效率的工具,當你輸入一個特定的關鍵詞時,它可以自動檢測到並將其替換為預設的內容。這個專案几乎可以和任何程式一起使用,適用於 Windows、macOS 和 Linux。
34、easy_rust:用簡單的英語寫的 Rust 教學。雖然當下已經有很多的 Rust 教學,但是大多都是以英語為主,這對不擅長英語的程式設計師並不友好,所以作者寫了一份僅用簡單的英語講解 Rust 的教學,已有中文翻譯版。
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 上有趣的專案,就點選分享給大傢伙吧。
以上就是本期的所有內容了,往期內容點選閱讀
感謝您的閱讀,如果覺得本期內容還不錯的話 求贊、求分享 ❤️
作者:削微寒
掃描左側的二維條碼可以聯絡到我
本作品採用署名-非商業性使用-禁止演繹 4.0 國際 進行許可。