程式設計師的開源月刊:HelloGitHub(第 54 期)
- 2020 年 9 月 28 日
- 筆記
- HelloGitHub
興趣是最好的老師,HelloGitHub 就是幫你找到興趣!
簡介
分享 GitHub 上有趣、入門級的開源項目。
這是一個面向編程新手、熱愛編程、對開源社區感興趣 人群的月刊,月刊的內容包括:各種程式語言的項目、讓生活變得更美好的工具、書籍、學習筆記、教程等,這些開源項目大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社區中。
- 會編程的可以貢獻程式碼
- 不會編程的可以回饋使用這些工具中的 Bug
- 幫著宣傳你覺得優秀的項目
- Star 項目⭐️
在瀏覽、參與這些項目的過程中,你將學習到更多編程知識、提高編程技巧、找到編程的樂趣。
🎉 最後 HelloGitHub 這個項目就誕生了 🎉
以下為本期內容|每個月 28 號發布最新一期|點擊查看往期內容
C 項目
1、libevent:C 語言實現的輕量級、高性能事件通知庫。基於事件驅動,支援多種 I/O 多路復用技術:epoll、poll、select、kqueue 等。libevent 就是這些系統基礎庫的統一封裝,提供更高級的 API 並解決跨平台的問題
C# 項目
2、dotnet-docker:.NET Core 和 Tools 的 Docker 鏡像
3、machinelearning:微軟開源的 C# 機器學習框架。支援的機器學習類任務:分類、回歸、聚類等,教程和影片。示例程式碼:
var dataPath = "sentiment.csv";
var mlContext = new MLContext();
var loader = mlContext.Data.CreateTextLoader(new[]
{
new TextLoader.Column("SentimentText", DataKind.String, 1),
new TextLoader.Column("Label", DataKind.Boolean, 0),
},
hasHeader: true,
separatorChar: ',');
var data = loader.Load(dataPath);
var learningPipeline = mlContext.Transforms.Text.FeaturizeText("Features", "SentimentText")
.Append(mlContext.BinaryClassification.Trainers.FastTree());
var model = learningPipeline.Fit(data);
var predictionEngine = mlContext.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var prediction = predictionEngine.Predict(new SentimentData
{
SentimentText = "Today is a great day!"
});
Console.WriteLine("prediction: " + prediction.Prediction);
C++ 項目
4、drogon:一款 C++ 的非同步非阻塞高性能 Web 框架。功能強大、上手容易,使得用 C++ 語言構建各種類型的高性能 Web 應用,變得更加方便。示例程式碼:
#include <drogon/drogon.h>
using namespace drogon;
int main()
{
app().setLogPath("./")
.setLogLevel(trantor::Logger::kWarn)
.addListener("0.0.0.0", 80)
.setThreadNum(16)
.enableRunAsDaemon()
.run();
}
CSS 項目
5、css-diner:通過遊戲方式在線學習 CSS 選擇器知識。初學者可以通過簡單的動畫介面,學習 CSS 多種選擇器語法是如何篩選出頁面的元素,雖然是英文網站但還算通俗易懂。在線嘗試
Go 項目
6、go-micro:一款 Go 插件化的基礎框架。我只知道它是個 Go 微服務框架,基於它可以快速構建微服務。示例程式碼如圖所示
7、pgweb:基於 Go 實現的跨平台 PostgreSQL 資料庫管理工具。通過本地起服務+瀏覽器的方式解決了跨平台的問題,啟動命令:
三種方式:
參數:pgweb --host localhost --user myuser --db mydb
URL:pgweb --url postgres://user:password@host:port/database?sslmode=[mode]
Socket:pgweb --url "postgres:///database?host=/absolute/path/to/unix/socket/dir"
8、go-admin:基於 Gin+Vue+Element UI 的前後端分離許可權管理系統。文檔齊全、還有影片教程適合新手學習,特點:
- 遵循 RESTful API 設計規範
- 基於 Gin Web API 框架,提供了豐富的中間件支援(用戶認證、跨域、訪問日誌、追蹤 ID 等)
- 支援 Swagger 文檔
- 等等
9、now:Go 語言的時間工具庫。項目簡單、程式碼易懂,示例程式碼豐富:
import "github.com/jinzhu/now"
time.Now() // 2013-11-18 17:51:49.123456789 Mon
now.BeginningOfMinute() // 2013-11-18 17:51:00 Mon
now.BeginningOfHour() // 2013-11-18 17:00:00 Mon
now.BeginningOfDay() // 2013-11-18 00:00:00 Mon
now.BeginningOfWeek() // 2013-11-17 00:00:00 Sun
now.BeginningOfMonth() // 2013-11-01 00:00:00 Fri
now.BeginningOfQuarter() // 2013-10-01 00:00:00 Tue
now.BeginningOfYear() // 2013-01-01 00:00:00 Tue
now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday
now.BeginningOfWeek() // 2013-11-18 00:00:00 Mon
now.EndOfMinute() // 2013-11-18 17:51:59.999999999 Mon
now.EndOfHour() // 2013-11-18 17:59:59.999999999 Mon
now.EndOfDay() // 2013-11-18 23:59:59.999999999 Mon
now.EndOfWeek() // 2013-11-23 23:59:59.999999999 Sat
now.EndOfMonth() // 2013-11-30 23:59:59.999999999 Sat
now.EndOfQuarter() // 2013-12-31 23:59:59.999999999 Tue
now.EndOfYear() // 2013-12-31 23:59:59.999999999 Tue
now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday
now.EndOfWeek() // 2013-11-24 23:59:59.999999999 Sun
Java 項目
10、roncoo-pay:開源的 Java 互聯網業務支付系統。擁有獨立的賬戶體系、用戶體系、支付接入體系、支付交易體系、對賬清結算體系等,想學習支付相關技術的同學可以看看這個項目。項目結構如下:
roncoo-pay
|
├── roncoo-pay-app-notify //商戶通知模組
|
├── roncoo-pay-app-order-polling //訂單輪詢模組
|
├── roncoo-pay-app-reconciliation //交易對賬模組
|
├── roncoo-pay-app-settlement //交易結算模組
|
├── roncoo-pay-common-core //公共基礎模組,不需要單獨部署
|
├── roncoo-pay-service //核心業務模組,不需要單獨部署
|
├── roncoo-pay-web-boss //運營後台模組
|
├── roncoo-pay-web-gateway //支付網關模組
|
├── roncoo-pay-web-merchant //商戶後台模組
|
├── roncoo-pay-web-sample-shop //模擬商城模組
11、screw:簡單好用的資料庫表結構文檔生成工具
JavaScript 項目
12、tesseract.js:支援多種語言的文字識別的 JS 庫,能夠方便、準確的把圖片中的文字解析提取出來(就能複製了)。基於 Tesseract OCR 引擎實現的 JS 版本,方便前端實現文字識別功能和在瀏覽器中直接使用。在線嘗試
13、mind-elixir-core:一款免費開源的思維導圖 JS 庫。在線嘗試
14、IconPark:該開源庫提供了 1200+ 高品質圖標,還有一個介面便於訂製圖標。強大之處是可以通過改變一個 SVG 文件的屬性來變換出多種主題,支援導出 SVG、PNG、Vue 和 React 圖標組件等。極大的方便了設計師和開發者,讓他們有更多時間逛 HG 了
15、next:一套企業級中後台 UI 解決方案,致力於解決設計師與前端在工作協同、產品體驗一致性、開發效率方面的問題。就是設計師修改顏色之類的,可以生成一個 NPM 主題包,前端拿到這個包就可以直接還原設計師的設計
Kotlin 項目
16、DateTimePicker:一個簡約、漂亮的日期時間選擇器。支援 100% 自定義 UI,內置日期時間選擇彈窗基於 Google BottomSheetDialog
Python 項目
17、real-live:一個網路直播聚合平台,能夠觀看影片直播、高清電視和收聽廣播電台等。目前支援 30+ 個影片直播、50+ 個高清電影片道和 70+ 個廣播電台,比較全面的 Web 項目,用到的技術棧:
- 前端/客戶端:Qt、Vue、Flutter 等
- 後端:MySQL、Redis、Kafka/RabbitMQ、Elasticsearch 等
18、taichi:一個高性能圖形學編程框架。它可以將你編寫的 Python 程式碼轉換成高效的彙編程式碼,在多 CPU 和 GPU 上運行,相當於是在用 Python 的語法寫著色器。Taichi 解決了圖形學配環境難,程式碼移植性差等問題,只需 pip install taichi
即可安裝,編寫的程式在 Windows、Linux、OSX 上均可運行,降低了新手學習圖形學的門檻。示例程式碼:
import taichi as ti
ti.init(arch=ti.gpu) # 指定編譯後的函數在 GPU 上執行
n = 320
pixels = ti.field(dtype=float, shape=(n * 2, n)) # 提前聲明數組存儲類型,大小
@ti.func # 該函數將是被調用的過程函數
def complex_sqr(z):
return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])
@ti.kernel # 該函數將被 Taichi 編譯
def paint(t: float):
for i, j in pixels: # 最外層循環會自動並行化
c = ti.Vector([-0.8, ti.cos(t) * 0.2])
z = ti.Vector([i / n - 1, j / n - 0.5]) * 2
iterations = 0
while z.norm() < 20 and iterations < 50: # 其他語法和原生 Python 基本一致
z = complex_sqr(z) + c
iterations += 1
pixels[i, j] = 1 - iterations * 0.02
gui = ti.GUI("Julia Set", res=(n * 2, n))
for i in range(1000000):
paint(i * 0.03)
gui.set_image(pixels)
gui.show()
19、readthedocs.org:知名文檔社區網站(readthedocs.org)的開源源碼。該網站上託管了:Scrapy、requests、bootstrap-datepicker 等知名庫的文檔,我看了下項目是基於 Django 開發的,文件有些多看起來需要點耐心
20、learn-python3:一份 Python3 的教程,請查收。該教程採用 Jupyter notebooks 形式,便於運行和閱讀。並且還包含了練習題,對新手友好。缺點的話就是英文的教程,但是我都能看懂你肯定也可以
21、Computer-Networking-A-Top-Down-Approach-NOTES:《電腦網路-自頂向下方法》編程作業。包含問題和 Python 程式碼解答,Wireshark 實驗部分為官方文檔的翻譯。
Rust 項目
22、rustlings:該項目通過一個個簡單練習小 demo,讓初學者學習 Rust 的語法。通過簡單的命令即可安裝本項目,然後修改每個小練習,達到編譯通過或者目標輸出,通過後會進入下一關,有種闖關的成就感。運行方法:
安裝:
git clone //github.com/rust-lang/rustlings
cd rustlings
git checkout tags/4.0.0 # or whatever the latest version is (find out at //github.com/rust-lang/rustlings/releases/latest)
cargo install --force --path .
安裝完後,運行:
rustlings watch
Swift 項目
23、ZLPhotoBrowser:輕量級照片選擇框架。它使用簡單、功能豐富,支援預覽/相冊內拍照及錄影片、拖拽/滑動選擇、編輯裁剪圖片/影片等功能。示例程式碼:
// 使用起來非常簡單
let ac = ZLPhotoPreviewSheet()
ac.selectImageBlock = { [weak self] (images, assets, isOriginal) in
// your code
}
// 快速選擇方法
ac.showPreview(animate: true, sender: self)
// 進入相冊選擇方法
ac.showPhotoLibrary(sender: self)
其它
24、Halfrost-Field:前阿里巴巴資深後端工程師「霜神」的技術部落格,分享前、後端的技術乾貨。作者日常工作語言是 Go,在進入阿里巴巴之前,做了幾年前端工作。文章內容包含:機器學習、Go、JS、iOS、網路協議等系列
25、ntfstool:一款為蘋果電腦提供 NTFS 讀寫支援的免費工具。有了它就可以很方便的在蘋果電腦上讀寫,從 Windows 系統拷貝數據的 U 盤和移動硬碟等。安裝說明
26、hexo-theme-matery:一款採用 Material Design 和響應式設計的 Hexo 部落格主題。特點:
- 響應式設計,部落格在桌面端、平板、手機等設備上均能很好的展現
- 首頁輪播文章及每天動態切換 Banner 圖片
- 時間軸式的歸檔頁
- 詞雲的標籤頁和雷達圖的分類頁
- 豐富的關於我頁面(包括關於我、文章統計圖、我的項目、我的技能、相冊等)
- 支援文章置頂和文章打賞
- 等等
27、highlight.js:讓網頁上的程式碼實現高亮的 JS 庫,給程式碼點顏色瞧瞧。支援多種程式語言和樣式,使用簡單。示例程式碼:
<link rel="stylesheet" href="/path/to/styles/default.css">
<script src="/path/to/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<pre><code>...</code></pre>
28、lite:一款用 Lua 編寫的超級輕量級的文本編輯器。在 Windows 下的 exe 文件雖然只有 300KB 左右,但顏值、功能和速度卻一點都不差,甚至還支援使用自定義插件、配色主題等功能。小而美的文本編輯器
29、L-ink_Card:該項目包含了製作一個迷你 NFC 智慧卡的程式碼和教程。野生鋼鐵俠稚暉出品的演示影片,他還製作了很多別的有趣的東西,大家可以去看看很有意思
開源書籍
30、trpl-zh-cn:《Rust 程式設計語言(第二版)》中文翻譯。在線閱讀
31、jshistory-cn:《JavaScript 20 年》中文版。在線閱讀
機器學習
32、nsfw-filter:基於 tensefow.js 實現的過濾 NSFW(裸露、暴力等)圖片的瀏覽器插件
33、computervision-recipes:電腦視覺系統最佳實踐,包含各種 CV 示例項目。示例使用 PytTorch 深度學習庫+ Jupyter 文件,涵蓋:影像分類、相似、識別、追蹤等方面,適合對影像方面感興趣的小夥伴閱讀和學習
34、seq2seq-couplet:基於深度學習的對對聯項目,你出上聯它自動生成下聯。我嘗試了下,對得三觀很正,還挺有意思。在線嘗試
最後
如果你發現了 GitHub 上有趣的項目,歡迎在 HelloGitHub 項目提 issues 告訴我們。