興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!
HelloGitHub 分享 GitHub 上有趣、入門級的開源專案。
這裡有實戰專案、入門教學、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!
以下為本期內容|每個月 28 號更新
1、gb-studio:簡單好玩的 Game Boy 遊戲製作工具。這是一款視覺化遊戲構建工具。無需程式設計基礎即可通過拖拽的方式,快速製作出復古風格的 Game Boy 遊戲。不僅支援匯出遊戲 ROM,還可以直接構建成線上遊戲。
2、jq:輕快的命令列 JSON 處理器。JSON 作為最常見的序列化格式,日常開發中經常會遇到。這個專案可以通過簡單的命令對 JSON 資料進行格式化、過濾等操作,還支援直接解析介面的 JSON 資料,十分靈活和方便。
3、libvips:極快的多執行緒影象處理庫。具有佔用記憶體小、處理速度快等特點的影象處理底層庫。它能夠處理多種影象和畫素格式,為了使用方便不僅支援命令列呼叫,官方還提供了 Ruby、Python 等多種程式語言的 SDK。
4、CrazyCar:一款用 Unity 製作的聯機賽車遊戲。這是一套完整的網路聯機遊戲解決方案,專案包含遊戲端、伺服器端、網路傳輸和管理後臺。遊戲支援計時賽、多人比賽、個人成就、資源熱更等特性,可以執行在 iOS/Android/Windows 裝置上。
5、Masuit.Tools:C# 開發工具箱。該庫包含了 C# 日常開發常用的操作類,比如字串處理、進位制轉換、日期處理、加密/解密、檔案壓縮、影象裁剪、斷點續傳、分散式 ID 等。
double milliseconds = DateTime.Now.GetTotalMilliseconds();// 獲取毫秒級時間戳
double microseconds = DateTime.Now.GetTotalMicroseconds();// 獲取微秒級時間戳
double nanoseconds = DateTime.Now.GetTotalNanoseconds();// 獲取納秒級時間戳
double seconds = DateTime.Now.GetTotalSeconds();// 獲取秒級時間戳
double minutes = DateTime.Now.GetTotalMinutes();// 獲取分鐘級時間戳
6、imgui:遊戲行業內流行的輕量級 C++ 圖形介面庫。這是個即時模式的 GUI 框架,控制元件都需要手繪。優點是更加靈活和輕量,可以快速構建功能簡單、體積小的 GUI 程式,但不適合用來實現複雜動畫的 GUI 應用,多用於開發遊戲內的 GUI 工具。
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
7、flatbuffers:谷歌開源的高效能序列化庫。類似 Protocol Buffers 的序列化格式,但解析速度更快、佔用記憶體更少,多用於對解析耗時敏感的 Android 應用和遊戲。
8、CppCoreGuidelines:C++ 核心指南。一份由 C++ 之父 Bjarne Stroustrup 領導的 C++ 編碼指南,目的是為了幫助大家更好地使用現代 C++。這個專案主要討論的是關於 C++ 編寫介面、記憶體管理、並行等方面的問題,適合有一定 C++ 基礎想要進階的小夥伴。
9、core:CSS 按鈕樣式集合。該專案實現了 100 種不同樣式的按鈕。
10、css-protips:CSS 專業技巧。一個幫你提升 CSS 技巧的收藏集。
11、wechat-backup:本地備份微信聊天記錄的工具。它能夠將手機上的微信聊天記錄,解密後儲存在電腦上,支援檢視、搜尋、恢復微信聊天記錄。
12、ptg:用 Go 寫的 GUI gRPC 使用者端。作者在偵錯 gPRC 介面時,發現沒有類似 postman 趁手的 gPRC 使用者端,所以就自己動手寫了一個然後開源了。
13、wild-workouts-go-ddd-example:Go DDD 範例專案。該專案通過一個預約系統的範例,展示瞭如何在 Go 專案中實現領域驅動設計(DDD)和讀寫分離架構(CQRS)。
14、gitleaks:一款靜態應用程式安全測試(SAST)工具。它可以檢測專案中是否包含密碼、API Key、token 等資訊,還能夠輕鬆整合到 Git Hook 和 GitHub Action,實現提交程式碼時自動檢測,通過告警和阻止 push 等方式,有效地防止敏感資訊洩漏。
15、mercure:一種用於實時通訊的開放式協定。該專案是基於 HTTP 和 SSE 的一種協定,然後用 Go 語言實現的實時推播服務。相較於 WebSocket 協定它使用起來更加簡單,使用者端發起訂閱就和請求普通的 HTTP 介面一樣,而且在 HTTP/2 下還可以雙向通訊。
16、picocli:構建 Java 命令列應用的框架。簡單易用寥寥幾行程式碼,就可以完成一個 Java 命令列應用程式。雖然由 Java 編寫但可以在 Groovy、Kotlin、Scala 中使用,支援命令自動補全、顏色、子命令、幫助資訊等功能。
import picocli.CommandLine;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;
import java.io.File;
@Command(name = "example", mixinStandardHelpOptions = true, version = "Picocli example 4.0")
public class Example implements Runnable {
@Option(names = { "-v", "--verbose" },
description = "Verbose mode. Helpful for troubleshooting. Multiple -v options increase the verbosity.")
private boolean[] verbose = new boolean[0];
@Parameters(arity = "1..*", paramLabel = "FILE", description = "File(s) to process.")
private File[] inputFiles;
public void run() {
if (verbose.length > 0) {
System.out.println(inputFiles.length + " files to process...");
}
if (verbose.length > 1) {
for (File f : inputFiles) {
System.out.println(f.getAbsolutePath());
}
}
}
public static void main(String[] args) {
// By implementing Runnable or Callable, parsing, error handling and handling user
// requests for usage help or version help can be done with one line of code.
int exitCode = new CommandLine(new Example()).execute(args);
System.exit(exitCode);
}
}
17、liteflow:輕快、穩定可編排的規則引擎。規則引擎能夠幫助系統解耦,實現通過修改規則就可以適應複雜多變的業務邏輯。這是一個功能強大的 Java 規則引擎,支援同步非同步混編、平滑熱重新整理,無需重啟應用即可讓新規則生效,規則語法簡單、檔案通俗易懂,學習門檻低容易上手。
18、forest:極簡的宣告式 Java HTTP 使用者端。一個開源的 Java HTTP 使用者端框架,採用宣告式的開發方式,分分鐘即可完成 HTTP 請求的定義、傳送、接收、解析、錯誤處理、紀錄檔列印等操作。
public interface AmapClient {
/**
* @Get註解代表該方法專做GET請求
* 在url中的{0}代表參照第一個引數,{1}參照第二個引數
*/
@Get("http://ditu.amap.com/service/regeo?longitude={0}&latitude={1}")
Map getLocation(String longitude, String latitude);
}
// 注入介面範例
@Autowired
private AmapClient amapClient;
...
// 呼叫介面
Map result = amapClient.getLocation("121.475078", "31.223577");
System.out.println(result);
19、regex-vis:線上視覺化正則編輯器。該專案可將輸入的正規表示式,自動生成對應的視覺化圖形,支援通過編輯圖形節點修改正規表示式,以及對正規表示式進行測試等功能。
20、vxe-table:好用的 Vue 表格元件。支援增刪改查、虛擬列表、巨量資料懶載入、資料校驗、分頁、彈窗等功能的 Vue 表格元件。
21、wangEditor:一款開源的 Web 富文字編輯器。基於 slate.js 和 snabbdom.js 實現的富文字編輯器,支援 JS、Vue 和 React 框架。開箱即用僅需幾行程式碼,就能實現一個功能齊全的富文字編輯器。
import '@wangeditor/editor/dist/css/style.css'
import { createEditor, createToolbar } from '@wangeditor/editor'
// 建立編輯器
const editor = createEditor({
selector: '#editor-container'
})
// 建立工具列
const toolbar = createToolbar({
editor,
selector: '#toolbar-container'
})
22、mjml:能夠快速製作出響應式郵件的框架。郵件樣式是一個讓人頭疼的問題,而通過這個專案製作的郵件,可以正常地顯示在不同的郵件使用者端。它還提供了線上編輯器,以及多種郵件模版和豐富的元件,能夠幫你快速製作出精美、行動端優先、響應式的郵件。
23、naive-ui:僅支援 Vue3 的元件庫。擁有完善的 TypeScript 型別推導的 Vue3 元件庫,擁有 80 多種元件、中文檔案,如果你想換換「口味」可以試試它。
24、typing-learner:可通過視訊生成單詞本的背單詞應用。該專案可將 MKV 格式的英文視訊製作成單詞庫,在記憶單詞時可通過臺詞和播放視訊片段,讓每個單詞都有語境,幫助理解和記憶英文單詞。
25、lemon-cleaner:蘋果電腦專屬的清理工具。騰訊開源的免費 macOS 裝置空間清理工具「檸檬清理」,支援深度清理、刪除重複檔案、解除安裝應用、狀態列顯示等功能,能夠一鍵輕鬆清理垃圾釋放空間。
26、course-tencent-cloud:PHP 寫的網課平臺。依託騰訊雲基礎服務架構,採用 Phalcon 框架開發的網課系統,支援付費、點播、直播、專欄、問答、會員、秒殺等功能。
27、diagrams:用 Python 程式碼圖解系統架構。程式設計師在做技術方案的時候,系統架構圖是必不可少的。該專案將繪製架構圖時所需的圖示,封裝成了對應的類極易呼叫,檔案還提供了豐富的範例,讓你分分鐘就能上手,輕鬆用 Python 快速繪製出一份精美且清晰的架構圖,這樣不僅能省去拖拽調整連線的步驟,而且程式碼還可以複用,以便應對不斷迭代升級的架構。
with Diagram("Advanced Web Service with On-Premise", show=False):
ingress = Nginx("ingress")
metrics = Prometheus("metric")
metrics << Grafana("monitoring")
with Cluster("Service Cluster"):
grpcsvc = [
Server("grpc1"),
Server("grpc2"),
Server("grpc3")]
with Cluster("Sessions HA"):
primary = Redis("session")
primary - Redis("replica") << metrics
grpcsvc >> primary
with Cluster("Database HA"):
primary = PostgreSQL("users")
primary - PostgreSQL("replica") << metrics
grpcsvc >> primary
aggregator = Fluentd("logging")
aggregator >> Kafka("stream") >> Spark("analytics")
ingress >> grpcsvc >> aggregator
28、orange3:互動式資料分析桌面工具。一款面向不會程式設計人群的資料探勘和資料視覺化工具箱。內建多種圖表型別、支援視覺化程式設計,無需寫程式碼即可做出簡單、實用的資料分析軟體,多用於教學和實驗室等場景。
29、MechanicalSoup:自動與網站互動的輕量級 Python 庫。我們寫爬蟲一般是請求+解析兩步走,該專案將 Requests(請求) 和 BeautifulSoup(解析) 兩大 Python 爬蟲常用庫,封裝成一個瀏覽器物件(StatefulBrowser),將上面說的兩步併成一步。後面僅需一個瀏覽器物件,就可以完成請求頁面、過濾內容、提交表單、跳轉地址等操作,使得程式碼更加簡單、操作更加方便。又因為它不依賴瀏覽器程序,所以相較於 Selenium 它更加輕巧,但缺點是不支援 JS 動態渲染的頁面。
import re
import mechanicalsoup
# Connect to Google
browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.google.com/")
# Fill-in the form
browser.select_form('form[action="/search"]')
browser["q"] = "MechanicalSoup"
# Note: the button name is btnK in the content served to actual
# browsers, but btnG for bots.
browser.submit_selected(btnName="btnG")
# Display links
for link in browser.links():
target = link.attrs['href']
# Filter-out unrelated links and extract actual URL from Google's
# click-tracking.
if (target.startswith('/url?') and not
target.startswith("/url?q=http://webcache.googleusercontent.com")):
target = re.sub(r"^/url\?q=([^&]*)&.*", r"\1", target)
print(target)
30、pandas-profiling:能夠自動生成 pandas DataFrame 分析報告的庫。雖然 pandas 自帶的 df.describe 函數可以方便地生成統計報告,但是資訊較少。該專案能夠自動生成一份 df 多維度的 HTML 分析報告,包含列的型別、缺失情況、數值分佈、行重複率、佔用記憶體大小等資訊,有助於更好地瞭解資料情況。
31、labelImg:圖形化介面的影象標註工具。用 Python 和 Qt 編寫的影象標註桌面應用,簡單方便下載就能用,適用於 Windows、Linux、macOS。標註資料支援 PASCAL VOC 格式的 XML 檔案和 YOLO 的 txt 檔案。
32、pueue:命令列任務管理工具。一個處理 shell 命令佇列的工具,支援後臺執行、定時執行、任務並行、暫停任務、任務崩潰恢復等功能。但它只是一個命令列工具,不能當作任務佇列來用。
33、MiaoYan:一款 macOS 上的 Markdown 編輯器。採用 Swift5 原生開發,適用於 macOS 的 Markdown 編輯器「妙言」。介面清爽好看,支援 PPT 模式、語法高亮、黑暗模式等功能。
34、LxgwWenKai:適合正文閱讀的開源中文字型。它是基於 FONTWORKS 出品的 Klee One 字型衍生品,並且針對簡體中文做了增補和優化,字型效果驚豔、完全免費且支援商用。
35、MaaAssistantArknights:明日方舟遊戲助手。基於影象識別技術,實現一鍵完成明日方舟遊戲的全部日常任務。
36、opensnitch:一個 Linux 應用防火牆。它能夠監視和控制應用的網路活動,相當於 Linux 版的 Little Snitch。
37、Publii:帶 GUI 的靜態網站生成工具。一款原生的靜態網站 CMS 工具,有了它無需程式設計基礎,即可通過圖形化介面,輕鬆地建立個人部落格、企業官網等,還支援一鍵釋出到 GitHub Page、GitLab、Netlify 等網站。
38、functional-programming-jargon:函數語言程式設計世界的行話。該專案希望通過介紹函數程式設計中的術語,讓學習函數語言程式設計變得容易些,範例程式碼均採用 JavaScript 編寫。
39、dive-into-webpack:《深入淺出 Webpack》。一本系統講解 Webpack 的書,內容涵蓋了 Webpack 的入門、設定、實戰、優化以及原理。
40、interviews.ai:《深度學習面試》。書中包含了數百個人工智慧領域面試時會遇到的問題(PRB)和解答(SOL),作者希望可以藉此幫助研究生/求職者,通過機器學習方面的面試。
41、flair:簡單易用的 NLP 框架。基於 PyTorch 的 NLP 框架,支援文字命名實體識別(NER)、詞性標註(PoS)、詞義消歧和分類。專案中包含詳細的使用教學,介紹瞭如何標記文字、訓練語言模型等。
from flair.data import Sentence
from flair.models import SequenceTagger
# make a sentence
sentence = Sentence('I love Berlin .')
# load the NER tagger
tagger = SequenceTagger.load('ner')
# run NER over sentence
tagger.predict(sentence)
42、paper-reading:深度學習論文精讀集合。李沐發起的深度學習領域經典、最新論文精讀視訊集合。
43、paper2gui:面向非程式設計人員的 AI 應用工具箱。該專案提供了多款免安裝下載即用的 AI 工具,功能涵蓋語音合成、視訊補幀、影象風格轉化、目標檢測、OCR 識別等方面,讓程式設計小白也能輕鬆擁有 AI 「魔法」。
如果你發現了 GitHub 上有趣的專案,就點選分享給大傢伙吧。
以上就是本期的所有內容了,往期內容點選閱讀
感謝您的閱讀,如果覺得本期內容還不錯的話 求贊、求分享 ❤️
作者:削微寒
掃描左側的二維條碼可以聯絡到我
本作品採用署名-非商業性使用-禁止演繹 4.0 國際 進行許可。