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


興趣是最好的老師,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 公眾號不僅可以收到第一時間的更新。點擊菜單欄->推薦->月刊 ,往期月刊所有的內容盡收眼底一次看過癮!還有更多開源項目的介紹和寶藏項目等待你的發現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM