《HelloGitHub》第 76 期
- 2022 年 7 月 28 日
- 筆記
- HelloGitHub
興趣是最好的老師,HelloGitHub 讓你對編程感興趣!
簡介
HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。
這裡有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift…讓你在短時間內感受到開源的魅力,對編程產生興趣!
以下為本期內容|每個月 28 號更新
C 項目
1、gb-studio:簡單好玩的 Game Boy 遊戲製作工具。這是一款可視化遊戲構建工具。無需編程基礎即可通過拖拽的方式,快速製作出復古風格的 Game Boy 遊戲。不僅支援導出遊戲 ROM,還可以直接構建成在線遊戲。
2、jq:輕快的命令行 JSON 處理器。JSON 作為最常見的序列化格式,日常開發中經常會遇到。這個項目可以通過簡單的命令對 JSON 數據進行格式化、過濾等操作,還支援直接解析介面的 JSON 數據,十分靈活和方便。
3、libvips:極快的多執行緒影像處理庫。具有佔用記憶體小、處理速度快等特點的影像處理底層庫。它能夠處理多種影像和像素格式,為了使用方便不僅支援命令行調用,官方還提供了 Ruby、Python 等多種程式語言的 SDK。
C# 項目
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();// 獲取分鐘級時間戳
C++ 項目
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:Google開源的高性能序列化庫。類似 Protocol Buffers 的序列化格式,但解析速度更快、佔用記憶體更少,多用於對解析耗時敏感的 Android 應用和遊戲。
8、CppCoreGuidelines:C++ 核心指南。一份由 C++ 之父 Bjarne Stroustrup 領導的 C++ 編碼指南,目的是為了幫助大家更好地使用現代 C++。這個項目主要討論的是關於 C++ 編寫介面、記憶體管理、並發等方面的問題,適合有一定 C++ 基礎想要進階的小夥伴。
CSS 項目
9、core:CSS 按鈕樣式集合。該項目實現了 100 種不同樣式的按鈕。
10、css-protips:CSS 專業技巧。一個幫你提升 CSS 技巧的收藏集。
Go 項目
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 下還可以雙向通訊。
Java 項目
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("//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);
JavaScript 項目
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 多種組件、中文文檔,如果你想換換「口味」可以試試它。
Kotlin 項目
24、typing-learner:可通過影片生成單詞本的背單詞應用。該項目可將 MKV 格式的英文影片製作成單詞庫,在記憶單詞時可通過台詞和播放影片片段,讓每個單詞都有語境,幫助理解和記憶英文單詞。
Objective-C 項目
25、lemon-cleaner:蘋果電腦專屬的清理工具。騰訊開源的免費 macOS 設備空間清理工具「檸檬清理」,支援深度清理、刪除重複文件、卸載應用、狀態欄顯示等功能,能夠一鍵輕鬆清理垃圾釋放空間。
PHP 項目
26、course-tencent-cloud:PHP 寫的網課平台。依託騰訊雲基礎服務架構,採用 Phalcon 框架開發的網課系統,支援付費、點播、直播、專欄、問答、會員、秒殺等功能。
Python 項目
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("//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=//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 文件。
Rust 項目
32、pueue:命令行任務管理工具。一個處理 shell 命令隊列的工具,支援後台執行、定時執行、任務並行、暫停任務、任務崩潰恢復等功能。但它只是一個命令行工具,不能當作任務隊列來用。
Swift 項目
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 上有趣的項目,就點擊分享給大傢伙吧。
以上就是本期的所有內容了,往期內容點擊閱讀
感謝您的閱讀,如果覺得本期內容還不錯的話 求贊、求分享 ❤️