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

興趣是最好的老師,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 告訴我們。