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

HelloGitHub發表於2021-03-01

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

簡介

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

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

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

在瀏覽、參與這些專案的過程中,你將學習到更多程式設計知識提高程式設計技巧找到程式設計的樂趣

? 最後 HelloGitHub 這個專案就誕生了 ?


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

相關文章