《HelloGitHub》第 82 期

2023-01-28 09:00:18

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

簡介

HelloGitHub 分享 GitHub 上有趣、入門級的開源專案。

https://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("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 上有趣的專案,就點選分享給大傢伙吧。

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

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