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