更新啦!第 59 期《HelloGitHub》開源月刊

HelloGitHub發表於2021-03-01

興趣是最好的老師,HelloGitHub 就是幫你找到興趣!

簡介

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

這是一個面向程式設計新手熱愛程式設計對開源社群感興趣 人群的月刊,月刊的內容包括:各種程式語言的專案讓生活變得更美好的工具書籍、學習筆記、教程等,這些開源專案大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社群中。

  • 會程式設計的可以貢獻程式碼
  • 不會程式設計的可以反饋使用這些工具中的 Bug
  • 幫著宣傳你覺得優秀的專案
  • Star 專案⭐️

以下為本期內容|每個月 28 號釋出最新一期|點選檢視往期內容

C 專案

1、TIC-80:復古遊戲引擎模擬器。TIC-80 支援 Windows、Linux、Mac 等主流平臺,通過它你可以執行多種復古小遊戲,覺得沒意思?它不僅可以玩遊戲還可以製作遊戲,支援多種程式語言,還有地圖、聲音編輯器等,就是一個回到過去的“神奇迷你電腦”

2、project-based-tutorials-in-c:用 C 語言寫玩具或專案的教程集合。教程分為遊戲開發、作業系統、計算機網路等分類,其中包含圖文、視訊、程式碼等資料

C# 專案

3、tilt-brush:Google 開源的 VR 繪圖工具。用它可以在虛擬三維空間中創作各種作品,支援主流的 VR 裝置

C++ 專案

4、winmerge:一個用 C++ 編寫的 Windows 比較和合並工具。它可以比較檔案和資料夾,以直觀的視覺化格式來顯示兩者甚至三者之間的差異,操作簡單

Go 專案

5、bild:純 Go 實現的多種影像處理演算法庫。示例程式碼:

package main

import (
    "github.com/anthonynsimon/bild/effect"
    "github.com/anthonynsimon/bild/imgio"
    "github.com/anthonynsimon/bild/transform"
)

func main() {
    img, err := imgio.Open("input.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }

    inverted := effect.Invert(img)
    resized := transform.Resize(inverted, 800, 800, transform.Linear)
    rotated := transform.Rotate(resized, 45, nil)

    if err := imgio.Save("output.png", rotated, imgio.PNGEncoder()); err != nil {
        fmt.Println(err)
        return
    }
}
複製程式碼

6、gin-vue-admin:一個基於 Gin+Vue 實現的後臺管理系統。看專案名字就知道它為什麼而生!該專案的作者還做了配套的免費教學視訊,找 Go 實戰專案的同學可以學起來了

7、pyroscope:基於 Go 的開源實時效能分析平臺。僅需在原始碼中新增幾行程式碼,pyroscope 就能幫你找出程式碼的效能問題、CPU 使用過高的原因,還有豐富的圖表和呼叫樹展示。支援 Go、Python、Ruby 程式語言,中文說明

8、macdriver:封裝 Apple/Mac 介面的 Go 庫。用它僅在 80 行程式碼內就能寫出個 macOS 選單欄「番茄時鐘」應用,檢視原始碼

Java 專案

9、Recaf:Java 位元組碼編輯器。讓你像寫普通程式碼的一樣編寫 Java 位元組碼,如果不懂這方面的知識,先不要輕舉妄動,可以去看看位元組碼的資料再回來把玩這個專案

10、jsoup:抓取和解析 HTML 的 Java 庫。可能很多人都知道這個庫,我就不多說什麼了。想知道上手有多快?看完示例程式碼你就算會用了

Document doc = Jsoup.connect("https://en.wikipedia.org/").get();
log(doc.title());
Elements newsHeadlines = doc.select("#mp-itn b a");
for (Element headline : newsHeadlines) {
  log("%s\n\t%s", 
    headline.attr("title"), headline.absUrl("href"));
}
複製程式碼

11、dbeaver:支援主流資料庫的桌面管理工具。一款用 Java 寫的資料庫管理工具,只要是 JDBC 支援的資料庫它都支援。雖然分免費社群版和付費企業版,但是免費的功能其實已經夠用啦

12、fizz-gateway-community:一個 Java 微服務閘道器。支援熱服務編排、自動授權選擇、線上測試、監控、管理後臺等功能,幫助企業治理 API 服務降低重複程式碼投入,提高服務穩定性

13、sa-token:一個輕量級 Java 許可權認證框架。它上手簡單易於擴充套件,可以快速解決:登入認證、許可權認證、Session 會話等一系列許可權相關問題。示例程式碼:

// 在登入時寫入當前會話的賬號 ID 
StpUtil.setLoginId(10001);	

// 然後在任意需要校驗登入處呼叫以下 API:如果當前會話未登入
// 這句程式碼會丟擲 `NotLoginException` 異常
StpUtil.checkLogin();	

// 還有以下功能
StpUtil.logoutByLoginId(10001);     // 讓賬號為 10001 的會話登出登入(踢人下線)
StpUtil.hasRole("super-admin");     // 查詢當前賬號是否含有指定角色標識, 返回 true 或 false
StpUtil.setLoginId(10001, "PC");        // 指定裝置標識登入
StpUtil.logoutByLoginId(10001, "PC");   // 指定裝置標識進行強制登出 (不同端不受影響)
StpUtil.switchTo(10044);                // 將當前會話身份臨時切換為其它賬號
複製程式碼

JavaScript 專案

14、mitojs:收集頁面上的使用者行為和報錯資訊的輕量級前端庫。我問了下專案維護者,資訊展示平臺和後端服務還未開源,還需要等公司定開源協議。那就先看下前端的功能吧:

  • 請求錯誤和程式碼報錯上傳
  • 收集使用者點選、跳轉行為
  • 支援 React、Vue、微信小程式

15、node-jvm:用 Node.js 實現 JVM 的專案。程式碼簡潔易懂,而且 examples 目錄下有執行 Java 程式碼的例子和所需檔案

16、majestic:美觀且便捷的 JavaScript 測試框架 Jest 的圖形介面工具。遵循“不寫測試的專案,不是好專案”的原則,測試是一定要寫的。如果有一個賞心悅目的測試執行介面,應該能略微減輕寫單元測試時,痛苦的心情吧

17、instant.page:通過預載入,提高網頁載入速度的 JavaScript 庫。它支援移動端和 PC 端,在 PC 端時當滑鼠懸浮在連結上和在移動端時連結可見後立即預載入,從而降低點選後網頁的載入時間。複製 HTML 程式碼片段加到網頁上即可生效

<script src="//instant.page/5.1.0" type="module" integrity="sha384-by67kQnR+pyfy8yWP4kPO12fHKRLHZPfEsiSXR8u2IKcTdxD805MGUXBzVPnkLHw"></script>
複製程式碼

18、folio-2019:一個開源的 3D 部落格專案。這個部落格我點進去後就驚呆了,使用者可通過操控一輛小汽車選擇要閱讀的文章,過程中還有汽車的聲音和磚塊碰撞的效果等,特別炫酷!快去體驗下吧!點選嘗試

PHP 專案

19、actionview:一個類 Jira 的開源問題需求跟蹤平臺。前端基於 React+Redux 後端採用 PHP 的 Laravel 框架實現

Python 專案

20、vcrpy:把 HTTP 的請求攔截下來,返回本地準備好的資料的庫。就像“插卡”一樣,使用裝飾器方式修飾的函式會被攔截下來,直接返回指定本地路徑的檔案中的資料,從而提高測試執行速度和確定性

@vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml')
def test_iana():
    response = urllib2.urlopen('http://www.iana.org/domains/reserved').read()
    assert 'Example domains' in response
複製程式碼

21、requests-html:好用的 Python 解析 HTML 庫。寫爬蟲的小夥伴都感受過解析 HTML 的痛苦,常用工具 BeautifulSoup、lxml、Scrapy 的 selector 等。今天你有了新的選擇 requests-html,支援 XPath、CSS 選擇器、動態頁面、過濾指定內容等。上手特別簡單和迅速,我的爬蟲專案 Hydra 中就用了它,解析 HTML 變得輕鬆了許多。下面是我覺得好用的函式示例:

# 找出元素下的所有連結
about.absolute_links
{'http://brochure.getpython.info/', 'https://www.python.org/about/quotes/', 'https://www.python.org/about/help/'}
# 匹配內容
>>> r.html.search('Python is a {} language')[0]
programming
# 直接提取屬性的值
>>> about.attrs
{'id': 'about', 'class': ('tier-1', 'element-1'), 'aria-haspopup': 'true'}
# 呈現載入 JS 後的動態內容
r.html.render()
複製程式碼

22、alive-progress:新!Python 炫酷進度條專案。支援 Python2.7-3.8 示例程式碼:

# 安裝:pip install alive-progress
from alive_progress import alive_bar

with alive_bar(total) as bar:  # declare your expected total
    for item in items:         # iterate as usual over your items
        ...                    # process each item
        bar()                  # call after consuming one item
複製程式碼

23、blind_watermark:給圖片加盲水印的 Python 庫。盲水印就是圖片有水印但人眼看不出來,需要通過程式才能提取水印,相當於隱形“蓋章”,可以用在資料洩露溯源、版權保護等場景。該庫出自阿里巴巴安全團隊,強大之處:

  • 解析水印圖時無需原圖
  • 水印圖剪裁、旋轉都不會破壞圖中的盲水印
  • 支援密碼加密
from blind_watermark import WaterMark

bwm_obj = WaterMark(password_wm=1, password_img=1)
# 原圖
bwm_obj.read_img('pic/原圖.jpg')
# 水印圖
bwm_obj.read_wm('pic/水印.png')
# 打水印後的圖
bwm_obj.embed('output/結果.png')
# 注意需要設定水印的長寬 wm_shape
bwm_objextract(filename='output/結果.png', wm_shape=(120, 120), out_wm_name='output/解出的水印.png', )
複製程式碼

24、PyG2Plot:基於 G2Plot 封裝的 Python3 視覺化庫。G2Plot 是螞蟻集團開源的一個基於圖表分類學的可視分析圖表庫,內建 25+ 常見圖表型別。該庫是 Python 對 G2Plot 的封裝,體驗良好,開箱即用

from pyg2plot import Plot

line = Plot("Line")

line.set_options({
  "height": 400, # set a default height in jupyter preview
  "data": [
    { "year": "1991", "value": 3 },
    { "year": "1992", "value": 4 },
    { "year": "1993", "value": 3.5 },
    { "year": "1994", "value": 5 },
    { "year": "1995", "value": 4.9 },
    { "year": "1996", "value": 6 },
    { "year": "1997", "value": 7 },
    { "year": "1998", "value": 9 },
    { "year": "1999", "value": 13 },
  ],
  "xField": "year",
  "yField": "value",
})

line.render_notebook()
複製程式碼

Swift 專案

25、Maccy:適用於 macOS 的輕量級剪貼簿管理工具。支援複製內容的歷史記錄、快速搜尋、快捷鍵選擇等

26、SQLite.swift:純 Swift 實現的輕量級 SQLite3 資料庫框架。採用鏈式程式設計的寫法,讓資料庫的管理變得優雅。程式碼容易理解,即使你不會 SQL 語句,也可以輕鬆查詢資料庫

import SQLite

let db = try Connection("path/to/db.sqlite3")

let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")

try db.run(users.create { t in
    t.column(id, primaryKey: true)
    t.column(name)
    t.column(email, unique: true)
})

// CREATE TABLE "users" (
//     "id" INTEGER PRIMARY KEY NOT NULL,
//     "name" TEXT,
//     "email" TEXT NOT NULL UNIQUE
// )
複製程式碼

其它

27、data-engineer-roadmap:資料工程師學習路徑圖

28、github1s:通過 VS Code 線上快速閱讀 GitHub 專案程式碼的工具。你是否煩心過 GitHub 的訪問速度和專案 clone 速度,在專案地址 github 後面加上 1s,即可線上閱讀程式碼無需等待

29、docker-curriculum:專為新手準備的 Docker 教程。線上閱讀

30、computer-science:開源社群大學,電腦科學自學的免費材料集合倉庫。該專案不僅包含了學習的視訊,還有學習計劃和時間安排,同時這些課程大多來自國際知名大學。唯一不足的點是材料都是英文的,我想了想還是決定推薦給大家,畢竟學好英語也是程式設計路上必經之路

31、awesome-macos-command-line:針對 macOS 系統做一些“酷”事情的 shell 命令集合。有些一條命令能解決的問題,就不需要點來點去,找來找去了

32、coding-fonts:極簡的程式設計字型介紹和展示網站。線上嘗試

33、AndroidSDK:包含完整 Android SDK 執行環境的 Docker 映象。適用於各種 Android 持續整合場景,甚至包括模擬器執行應用、介面自動化測試,也可以連線雲端進行自動化測試。Android 構建的容器映象解決方案之一(不違法許可協議的方案),並在 Docker 官方的 DockerCon EU 2017 進行過宣講

34、qwerty-learner:好用有趣的打字記單詞的線上網站。很多人直觀地覺得能扣籃的人打球好,打字快的人程式設計厲害。如此說來,多用這個專案不僅可以背單詞,還有助於提高程式設計能力呢

機器學習

35、avatarify:視訊會議實時換臉工具。利用機器學習訓練的模型,通過捕捉人臉動作並與圖片相結合進行實時渲染的方式,達到實時換臉的效果。支援 OBS、Zoom、Skype、Teams、Slack 等直播和會議軟體

最後

如果你發現了 GitHub 上有趣的專案,歡迎在 HelloGitHub 專案提 issues 告訴我們。

看完還不過癮?

關注 HelloGitHub 公眾號不僅可以收到第一時間的更新。點選選單欄->推薦->月刊 ,往期月刊所有的內容盡收眼底一次看過癮!還有更多開源專案的介紹和寶藏專案等待你的發現。

相關文章