興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!
簡介
HelloGitHub 分享 GitHub 上有趣、入門級的開源專案。
這裡有實戰專案、入門教程、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!
以下為本期內容|每個月 28 號更新
C 專案
1、bare-metal-programming-guide:裸機程式設計指南。這是一份教你如何在不依賴 IDE 的情況下,進行微控制器開發的教程。內容先是介紹了暫存器、向量表、啟動程式碼、連結指令碼等知識點,最後實現了一個帶裝置儀表盤的 Web 伺服器。
2、sumatrapdf:免費小巧的開源 PDF 閱讀器。這是一款體積小、佔用記憶體少、啟動速度快的 Windows PDF 閱讀工具,擁有日常所需的所有功能和簡約大方的介面,這一切不多不少剛剛好。
3、ZSWatch:自制開源智慧手錶。該專案是基於開源 Zephyr 的智慧手錶,裝置包含了一個解析度為 240x240 的 IPS TFT 圓形螢幕和 3 個按鈕(上一頁/下一頁/進入),支援計步、血氧儀、心率儀、藍芽等功能。
C# 專案
4、carnac:用於展示鍵盤按鍵操作的工具。這是一款能夠在桌面實時顯示鍵盤操作記錄的工具,多用於演示應用、錄製教程等場景,適用於 Windows 7 及以上的作業系統。
5、downkyi:一款多功能的 B 站影片下載工具。這是一款簡單易用的嗶哩嗶哩影片下載工具,它擁有簡潔的操作介面,使用起來十分方便。支援批次下載、音影片提取、去水印等功能。
6、SeeSharpSnake:用 C# 寫一個小於 8KB 的貪吃蛇。這個專案的重點不是教你如何用 C# 寫出一個貪吃蛇遊戲,而是講解怎麼將編譯後的 C# 貪吃蛇程式,從最初的 65MB 精簡成 8KB 大小、可以獨立執行的應用。
# To build the 4.7 MB version of the game
dotnet publish -r win-x64 -c Release /p:Mode=CoreRT
# To build the 4.3 MB version of the game
dotnet publish -r win-x64 -c Release /p:Mode=CoreRT-Moderate
# To build the 3.0 MB version of the game
dotnet publish -r win-x64 -c Release /p:Mode=CoreRT-High
# To build the 1.2 MB version of the game
dotnet publish -r win-x64 -c Release /p:Mode=CoreRT-ReflectionFree
# To build the 10 kB version of the game
dotnet publish -r win-x64 -c Release /p:Mode=CoreRT-NoRuntime
C++ 專案
7、cpp-httplib:一個檔案的 C++ HTTP/HTTPS 庫。這是一個用 C++11 寫的僅標頭檔案、跨平臺的 HTTP/HTTPS 伺服器端和客戶端庫,使用時十分方便,只需在程式碼中引入 httplib.h
檔案。
#define CPPHTTPLIB_OPENSSL_SUPPORT
#include "path/to/httplib.h"
// HTTPS
httplib::Client cli("https://hellogithub.com");
auto res = cli.Get("/periodical");
res->status;
res->body;
8、Ripes:RISC-V 的模擬器和彙編編輯器。該專案可以透過圖形化的方式,展示機器程式碼在各種微架構上執行的過程,可用於探索不同的快取記憶體設計對效能的影響等問題。
9、SFML:簡單高效的 C++ 多媒體庫。這是一個可用來簡化遊戲和多媒體應用開發的 C++ 庫,因其上手門檻低和良好的生態,成為了眾多 C++ 新手入門圖形化開發的首選。
CSS 專案
10、css:GitHub 開源的設計系統。由 GitHub 設計團隊開源和維護的專案,包含了 GitHub 的介面設計原則、使用指南和開箱即用的 UI 元件。
Go 專案
11、d2:一種可將文字轉換為圖表的指令碼語言。該專案是一種圖表指令碼語言,可將文字轉換為圖表。你只需描述想要的圖表,它就會生成對應的影像。
echo 'x -> y' > input.d2
d2 -w input.d2 out.svg
12、grpcurl:類似 cURL 但用於 gRPC 的工具。一款實現與 gRPC 伺服器互動的命令列工具,可以輕鬆請求 gRPC 服務,就像 gRPC 版的 cURL 一樣好用。
# 安裝
brew install grpcurl
# 使用
grpcurl grpc.server.com:443 my.custom.server.Service/Method
13、shifu:一款雲原生物聯網開發框架。這是一個生產級別的物聯網平臺,它可以將物聯網(IoT)裝置,封裝成 K8s 的最小的可部署的計算單元(pod),直接將裝置的能力和資料透過 API 開放出來,讓物聯網應用的開發變得更加簡單。
cd shifu
# 在叢集中安裝 Shifu
kubectl apply -f pkg/k8s/crd/install/shifu_install.yml
14、writefreely:一起寫作並建立一個社群。這是一個 Go 寫的部落格平臺,除了能夠建立基於 Markdown、極簡的獨立部落格之外,還可以建立類似部落格園的部落格社群。
15、yao:一款 Go 寫的應用引擎。透過該專案最快幾分鐘,就能從零構建出一套系統,適合用於開發介面服務、管理後臺、資料視覺化平臺、自建低程式碼平臺等系統。
Java 專案
16、HummerRisk:雲原生安全檢測平臺。該專案用非侵入的方式,解決雲原生環境的安全和治理問題。支援主流公/私有云資源的安全檢測、漏洞掃描、一鍵獲取報告等功能。
17、HydraLab:開源的智慧移動雲測平臺。這是一個基於 Spring Boot+React 構建的雲測服務,它部署簡單開箱即用,支援線上管理測試裝置、執行測試用例、測試結果視覺化等功能。
18、neo4j:目前最流行的圖資料庫。它是一款採用 Java 和 Scala 語言開發的原生圖資料庫,專屬的查詢語言 Cypher,能夠直觀且高效地查詢和處理資料之間的關係。
JavaScript 專案
19、html2canvas:實現瀏覽器內截圖的 JavaScript 庫。該專案可以讓你在瀏覽器內對整個網頁或部分內容進行截圖,原理是透過讀取 DOM 和樣式,將當前頁面渲染成一個畫布影像。
html2canvas(document.querySelector("#capture")).then(canvas => {
document.body.appendChild(canvas)
});
20、JavaScript-Algorithms:教你從零構建前端演算法體系。學習演算法不僅是為了面試,也是每個前端進階必備的技能之一。該專案包含了前端的進階演算法、常見面試題、手寫原始碼等,幫你構建完整的資料結構和演算法的知識體系。
21、pomotroid:視覺上令人愉悅的番茄時鐘。這是一款 Vue 寫的擁有超高顏值的番茄計時器,支援自定義時間、回合數、提示音、桌面通知等功能。
22、satori:能夠將 HTML 和 CSS 轉換為 SVG 的庫。由 Vercel 團隊開源的可根據 HTML 和 CSS 程式碼生成 SVG 影像的庫。支援 JSX 語法,使用起來十分方便和順手。
import satori from 'satori'
const svg = await satori(
<div style={{ color: 'black' }}>hello, world</div>,
{
width: 600,
height: 400,
fonts: [
{
name: 'Roboto',
data: robotoArrayBuffer,
weight: 400,
style: 'normal',
},
],
},
)
23、underscore:強大的 JavaScript 函式庫。該庫提供了 100 多個實用的函式,包括常用的 map、filter、reduce、invoke 以及更專業的輔助函式,比如函式繫結、JavaScript 模板功能、建立快速索引等,讓我們可以更加方便地在 JavaScript 中實現函數語言程式設計。
// countBy
_.countBy([1, 2, 3, 4, 5], function(num) {
return num % 2 == 0 ? 'even': 'odd';
});
// 輸出:{odd: 3, even: 2}
Python 專案
24、bandit:查詢 Python 程式碼中常見安全問題的工具。該專案是 PyCQA 出品的 Python 程式碼檢測工具,知名的 isort 和 flake8 就是他們開源的。
25、devguide:CPython 開發人員指南。這份指南來自 Python 官方,介紹瞭如何為 CPython 做貢獻,適用於任何階段的貢獻者。
26、Django-Styleguide:Django 使用姿勢指南。這是一份 Django 編碼風格指南,它來自於一線團隊的多年經驗總結,希望能夠幫助你構建出更好的 Django 應用程式。
27、numpy-100:Numpy 的練習冊。該專案包含了 100 個關於 Python 常用的資料處理庫 Numpy 的練習和解決方案。
# How to sum a small array faster than np.sum? (★★☆)
Z = np.arange(10)
np.add.reduce(Z)
28、prefect:Python 的資料流編排平臺。如果將獲取、清洗、處理資料的程式當作一個個分散的任務,該專案可以將這些任務整合到工作流中,實現在一個 Web 平臺部署、安排和監控它們的執行。
from prefect import flow, task
@task
def say_hello():
print("Hello, World! I'm HelloGitHub!")
@flow("Prefect Flow"):
def h_flow():
say_hello()
# run the flow!
h_flow() # "Hello, World! I'm HelloGitHub!"
Ruby 專案
29、YouPlot:Ruby 寫的命令列資料視覺化工具。該專案能夠在終端裡將資料轉化成彩色的圖表,支援條形圖、直方圖、箱型圖等型別的圖表。
Rust 專案
30、ChatGPT:第三方的 ChatGPT 桌面應用。把 ChatGPT 放到你的桌面,支援快捷鍵、斜槓命令、劃詞搜尋、匯出記錄等實用的功能,適用於 macOS、Windows、Linux 作業系統。
31、gitui:帶介面的 Git 命令列工具。該專案為 git 提供了終端介面,讓使用者可以更加順暢地使用 git。互動式的操作提示,讓你無需再記憶大量的 git 命令。
Swift 專案
32、vimac:用鍵盤代替滑鼠的 macOS 應用。它可以讓使用者實現僅透過鍵盤操作蘋果電腦,支援兩種操作模式。
- 啟用模式:將螢幕上可點選的位置,對映成鍵盤按鍵
- 滾動模式:使用 HJKL 按鍵,可完成區域滾動
其它
33、cdn-up-and-running:從零開始構建 CDN 的教程。為了讓你在實戰中學習 CDN 的工作原理,這裡會從建立一個單一的後端服務開始,逐漸擴充套件到多個節點、模擬延遲、視覺化、可測試的 CDN 服務。因為設計 CDN 會涉及 Nginx、Lua、Docker、Grafana 等知識點,所以學習該教程需要有一定的程式設計基礎。
34、fluentui-emoji:一套可愛的 emoji 表情。該專案是微軟開源的一套精緻、可愛的 emoji 表情包。
35、k8s_PaaS:教你用 K8s 部署一套完整服務的教程。透過該教程你可以學習到如何部署 Kubernetes 叢集,以及在此基礎上搭建由 Apollo、Jenkins、Prometheus 等服務組成的完整的軟體研發和部署平臺。
36、pi-apps:最受歡迎的樹莓派應用商店。這是一款完全免費、開源的樹莓派應用商店,它安裝簡單使用方便,內建了 200 多個應用程式,支援 32 位和 64 位的 Raspberry Pi OS。
# 下載
git clone https://github.com/Botspot/pi-apps
# 安裝
~/pi-apps/install
37、smiley-sans:一款完全開源、精雕細琢的中文黑體。這款字型名為「得意黑」,整體字身窄而斜,細節融入了取法手繪美術字的特殊造型。支援簡體中文常用字、拉丁字母、阿拉伯數字和各種標點符號。
開源書籍
38、essential-netty-in-action:《Netty 實戰》精簡版。該書是《Netty in Action》的中文精簡版,帶你快速掌握 Netty。
39、time-as-a-friend:《把時間當作朋友》。做事不一定要圖快,馬跑起來比駱駝快,但駱駝一生走過的路卻是馬的兩倍。
機器學習
40、annotated_deep_learning_paper_implementations:深度學習論文的實現集合。這是一個關於神經網路和相關演算法 PyTorch 實現的集合,程式碼裡還包含逐行的註釋。
41、Chinese-CLIP:OpenAI CLIP 模型中文預訓練版本。該專案使用了大規模的中文資料進行訓練(~2億圖文資料),提供了多個規模的預訓練模型和技術報告,讓使用者僅透過幾行程式碼就能完成中文圖文特徵提取和圖文檢索。
import torch
from PIL import Image
import cn_clip.clip as clip
from cn_clip.clip import load_from_name, available_models
print("Available models:", available_models())
# Available models: ['ViT-B-16', 'ViT-L-14', 'ViT-L-14-336', 'ViT-H-14', 'RN50']
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = load_from_name("ViT-B-16", device=device, download_root='./')
model.eval()
image = preprocess(Image.open("examples/pokemon.jpeg")).unsqueeze(0).to(device)
text = clip.tokenize(["傑尼龜", "妙蛙種子", "小火龍", "皮卡丘"]).to(device)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
# 對特徵進行歸一化,請使用歸一化後的圖文特徵用於下游任務
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
logits_per_image, logits_per_text = model.get_similarity(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs) # 圖文匹配機率 [[1.268734e-03 5.436878e-02 6.795761e-04 9.436829e-01]]
42、KuiperInfer:從零編寫深度學習推理框架的教程。手把手教你用 C++ 寫出一個深度學習推理框架,專案整體風格和結構借鑑了Caffe。初學者透過該教程不僅可以瞭解深度學習框架背後的知識,還能夠學會如何上手一箇中等規模的 C++ 專案。
最後
如果你發現了 GitHub 上有趣的專案,就點選分享給大傢伙吧。
以上就是本期的所有內容了,往期內容點選閱讀
感謝您的閱讀,如果覺得本期內容還不錯的話 求贊、求分享 ❤️