程式設計師的開源月刊:HelloGitHub(第 54 期)

削微寒發表於2020-09-28

興趣是最好的老師,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 https://github.com/rust-lang/rustlings
cd rustlings
git checkout tags/4.0.0 # or whatever the latest version is (find out at https://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 告訴我們。

相關文章