開源月刊《HelloGitHub》第 82 期

語言: CN / TW / HK

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

簡介

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

http://github.com/521xueweihan/HelloGitHub

這裏有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等,涵蓋多種編程語言 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("http://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 http://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 上有趣的項目,就點擊分享給大傢伙吧。

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

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