有趣的開源專案集結完畢,HelloGitHub 月刊第 63 期釋出啦!

削微寒發表於2021-06-28

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

簡介

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

這裡有實戰專案、入門教程、黑科技、開源書籍、大廠開源專案等,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!

專案地址:https://github.com/521xueweihan/HelloGitHub

感謝大家點亮的每一個 Star ✨


以下為本期內容|每個月 28 號更新

C 專案

1、mgba:用 C 語言實現的 GBA 模擬器。喚起你童年回憶的同時,還能邊學邊玩,然後再約上三兩好友一起看看原始碼和實現,快樂就是這麼簡單

C++ 專案

2、rocksdb:用 C++ 編寫的高效能鍵值儲存引擎。該專案是由 Fackbook 資料庫團隊基於 levelDB 開發,鍵值均支援二進位制流,能夠充分利用多核 CPU 獲得高效能,併相容 levelDB 的 API 可謂是青出於藍而勝於藍。RocksDB 當下十分流行,一些開源資料庫底層儲存用的就是它

Go 專案

3、learngo:適合新手學習 Go 語法的開源專案。學習一門程式語言最好的方法就是動手寫,該倉庫擁有 1000 多個 Go 語法的問題,讓你可以跟著練並附有答案

4、tunny:可設定固定數量協程的 goroutine pool 庫。通過這個專案可實現 goroutine 重複使用,從而避免過度建立 goroutine 而造成的記憶體佔用過多等問題

package main

import (
	"io/ioutil"
	"net/http"
	"runtime"

	"github.com/Jeffail/tunny"
)

func main() {
	numCPUs := runtime.NumCPU()

	pool := tunny.NewFunc(numCPUs, func(payload interface{}) interface{} {
		var result []byte

		// TODO: Something CPU heavy with payload

		return result
	})
	defer pool.Close()

	http.HandleFunc("/work", func(w http.ResponseWriter, r *http.Request) {
		input, err := ioutil.ReadAll(r.Body)
		if err != nil {
			http.Error(w, "Internal error", http.StatusInternalServerError)
		}
		defer r.Body.Close()

		// Funnel this work into our pool. This call is synchronous and will
		// block until the job is completed.
		result := pool.Process(input)

		w.Write(result.([]byte))
	})

	http.ListenAndServe(":8080", nil)
}

5、glab:用 Go 寫的 GitLab 命令列工具。通過它除了能夠在命令列管理專案、issues、合併提交之外,還能夠檢視 CI 的執行狀態

  api:         Make authenticated REST/GRAPHQL
  auth:        Manage glab's authentication state
  issue:       Work with GitLab issues
  label:       Manage labels on remote
  mr:          Create, view and manage merge requests
  ci:          Work with GitLab CI pipelines and jobs
  release:     Manage GitLab releases
  repo:        Work with GitLab repositories and projects

6、fzf:能夠搜“一切”的模糊搜尋命令列工具。它能夠搜檔案、歷史命令、程式、git 提交記錄等資訊,支援預覽內容、整合到 Vim/Neovim 編輯器,而且搜尋速度極快

7、godis:用 Go 語言寫的 Redis 伺服器。它實現了 Redis 通訊協議併相容 redis-cli 客戶端,包含 5 種常用的資料結構和命令比如:TTL、釋出訂閱、地理位置以及 AOF 持久化等,Go 的初學者可以通過該專案能夠學習到關於 TCP、通訊協議實現、常用的資料結構等知識,Web 開發學煩了?換一個口味,寫個 Redis 作為實戰專案吧

Java 專案

8、ExoPlayer:谷歌官方開源的 Android 媒體播放器。易於定製和擴充套件,支援豐富的資料格式比如:FMP4、FLV、SmoothStreaming、MP3 等

9、traccar:GPS 追蹤平臺。此專案支援 170 多種 GPS 協議,1500 多種型號的 GPS 裝置,功能包含:實時 GPS 追蹤、資料統計報告、報警和通知等等

10、airbyte:一個開源的 EL(T) 平臺。能簡單快速地把使用者提供的應用、資料庫等地方的資料聚合到平臺,從而可以在一個平臺查詢、展示、更新、管理這些資料

11、Ward:擁有漂亮儀表盤的伺服器監控工具

JavaScript 專案

12、moovie.js:專注於電影的 HTML5 播放器。容易上手和使用,支援倍速播放、快捷鍵操作、字幕偏移即時調整等功能

13、nativefier:能夠把 Web 頁面變成本地應用的命令列工具。通過 Electron+Chromium 把網站包裝成本地 .app、.exe 等可執行檔案,支援執行在 Windows、macOS 和 Linux 作業系統上

14、lowdb:支援瀏覽器和 Electron 的輕量級 JSON 檔案資料庫。如果是建立沒有後端的小型前端專案,但還有儲存和管理資料的需求,那就快試試 lowdb 吧

import { join } from 'path'
import { Low, JSONFile } from 'lowdb'

// 新建 JSON 檔案用於儲存資料
const file = join(__dirname, 'db.json')
const adapter = new JSONFile(file)
const db = new Low(adapter)

// 把內容更新到 db.data 並寫入 JSON 檔案
db.data.posts.push({ id: 1, title: 'lowdb is awesome' }).write()
db.get('posts')
  .filter({title: 'lowdb is awesome'})
  .sortBy('id')
  .take(5)
  .value()

15、eruda:一個專為手機端設計的前端頁面除錯工具。類似手機端迷你版開發者模式,可用於在手機端除錯頁面。主要功能包括:顯示 console 日誌、檢查元素狀態、捕獲 XHR 請求、顯示本地儲存和 Cookie 等資訊

16、cusdis:這是一個介面清爽、注重隱私的輕量級部落格評論系統。可以很方便地與 React、Vue 或其他部落格系統結合,並且還提供了一個後臺來管理所有的評論。除此之外,還支援一鍵從 Disqus 匯入、郵件通知等強大的功能

Kotlin 專案

17、mirai:由 Kotlin 語言編寫的 QQ 機器人框架。該專案提供了 Android QQ 協議的 API,通過這些 API 可以實現自動化操作,比如:群管理等功能,注意!該專案不支援一切商業使用。最後專案的 Kotlin 程式碼寫的很好,感興趣的同學可以去看下原始碼

Python 專案

18、pygame:用來開發遊戲的 Python 庫。Pygame 已經持續更新多年,網上的教程和資料十分充足,雖然在遊戲開發領域 Python 只是個弟弟,但如果只是用這個庫開發個 2D 小遊戲還是很順手的。推薦給想用 Python 寫個小遊戲的朋友

19、GitHubPoster:能夠把多個平臺上的資料,生成類似 GitHub 綠牆影像的工具。比如能夠把發推的頻率、扇貝單詞打卡等情況生成類似 GitHub 綠牆影像,使用簡單感興趣的同學可以把玩一下

20、guietta:用於製作簡單 GUI 程式的 Python 庫。換一種簡單的方式寫 GUI(圖形使用者介面)程式

from guietta import _, Gui, Quit
gui = Gui(
	[ "Enter numbers:",  "__a__", "+", "__b__", ["Calculate"] ],
	[    "Result: -->", "result",   _,       _,             _ ],
	[                _,        _,   _,       _,          Quit ]
)

with gui.Calculate:
	gui.result = float(gui.a) + float(gui.b)

gui.run()

Ruby 專案

21、forem:用來構建社群的 Ruby 開源專案。一款開源、現成的論壇專案,能夠讓你快速搭建起來一個社群平臺。國外知名的程式設計師社群 dev 用的就是它

Rust 專案

22、rustdesk:免費開源的遠端桌面軟體。開箱即用無需任何配置,支援 Linux/Mac/Win/Android 等平臺。還能夠自行搭建伺服器,由使用者自己掌控資料,不必擔心隱私資料洩露的問題。在當下越來越多的遠端桌面軟體都收費的情況下的另一個選擇

23、indicatif:樣式豐富的 Rust 終端進度條庫

use indicatif::ProgressBar;

let bar = ProgressBar::new(1000);
for _ in 0..1000 {
    bar.inc(1);
    // ...
}
bar.finish();

24、azul:一個跨平臺的 Rust 和 C/C++ 的 GUI 框架。使用 WebRender 渲染引擎和 CSS/HTML-like DOM 構建,可用於開發漂亮的原生桌面應用程式

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

use azul::prelude::*;
use azul_widgets::table_view::*;

struct TableDemo {
    // cells: BTreeMap<TableCell, String>,
}

extern "C" fn layout(data: &mut RefAny, _: LayoutCallbackInfo) -> StyledDom {

    let mut table_view_state = TableViewState::default();
    table_view_state.set_cell_content(TableCellIndex { row: 2, column: 2 }, "Hello World");
    table_view_state.set_selection(Some(TableCellSelection::from(3, 4).to(3, 4)));

    TableView::new(table_view_state).dom().style(Css::empty())
}

fn main() {
    let app = App::new(RefAny::new(TableDemo { }), AppConfig::new(LayoutSolver::Default));
    app.run(WindowCreateOptions::new(layout));
}

Swift 專案

25、Grid:受 CSS Grid 啟發,用 SwiftUI 編寫關於檢視(view)佈局的開源專案

26、SwiftyJSON:一個 Swift JSON 三方庫,用更簡單的方式處理 JSON

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
  //Now you got your value
}

其它

27、aind:實現在 Docker 中啟動安卓應用的專案

docker run -td --name aind --privileged -p 5900:5900 -v /lib/modules:/lib/modules:ro ghcr.io/aind-containers/aind
docker exec aind cat /home/user/.vnc/passwdfile

28、librime:一款開源的中文輸入法。市面上的輸入法有很多,但你找到讓自己稱心如意的那款了嗎?或許通過今天的開源專案你就能找到它。RIME 這款開源的輸入法,它不追蹤輸入的內容原始碼完全開放,可自由切換繁/簡中文,選擇/設計輸入方案和主題,對繁體字輸入尤為優秀。作為輸入法給予使用者無限的自由和個性化,作為輸入法框架讓開發者有更多的發揮空間。比如支援不同作業系統的版本:Linux(中州韻)、Windows(小狼毫)、macOS(鼠須管)、Android(同文)由於自由度較高上手需要一些時間,這大概就是獲得自由的代價吧

29、android-foss:開源的安卓客戶端應用集合

30、secguide:騰訊開源的程式碼安全指南。該專案包含:C/C++、Python、JavaScript、Java、Go 等語言的安全編碼指南,內容簡單易懂能夠幫助開發者,在程式碼源頭規避安全風險減少漏洞

31、Kanmail:以看板的方式管理郵件的客戶端應用。適用於 Mac/Windows 作業系統,支援 Gmail、Outlook 等郵箱

32、hello-world:彙集了 800 多種程式語言 Hello World 的專案

33、material-theme-jetbrains:一款 JetBrains IDE 的 Material 風格主題

開源書籍

34、awesome-fenix:講述“如何構建大型且可靠的分散式系統”的開源書籍。推薦給想成為架構師的你,線上閱讀

35、google-sre-ebook:Google SRE 相關的書籍。Google SRE 是谷歌的專業運維團隊的工程師,他們有一個共同的名字:Site Reliability Engineer,而這本書由 Google SRE 們撰寫,分享了谷歌運維相關的一些技術和知識

機器學習

36、AugLy:Facebook 開源的一個資料增強 Python 庫。該庫目前支援音訊、影像、文字和視訊四種模式,一方面可以用現實資料對資料進行增強,另一方面還可以檢測出相似內容,消除重複資料帶來的干擾

37、Real-Time-Voice-Cloning:克隆某個人說話聲音的 AI 專案。僅需幾秒音訊,就能模仿出原音訊的人聲

最後

如果你發現了 GitHub 上有趣的專案,就分享給大傢伙吧。

以上就是本期的所有內容了,看完還不過癮?

關注 HelloGitHub 公眾號不僅可以收到第一時間的更新。點選選單欄->往期->月刊

往期月刊所有的內容盡收眼底一次看過癮!還有更多開源專案的介紹和寶藏專案等待你的發現。

相關文章