《HelloGitHub》第 43 期
掃描二維碼
隨時(shí)隨地手機(jī)看文章
興趣是最好的老師,HelloGitHub 就是幫你找到興趣!
簡介
分享 GitHub 上有趣、入門級(jí)的開源項(xiàng)目。
這是一個(gè)面向編程新手、熱愛編程、對(duì)開源社區(qū)感興趣 人群的月刊,月刊的內(nèi)容包括:各種編程語言的項(xiàng)目、讓生活變得更美好的工具、書籍、學(xué)習(xí)筆記、教程等,這些開源項(xiàng)目大多都是非常容易上手,而且非常 Cool。主要是希望大家能動(dòng)手用起來,加入到開源社區(qū)中。
會(huì)編程的可以貢獻(xiàn)代碼 不會(huì)編程的可以反饋使用這些工具中的 Bug 幫著宣傳你覺得優(yōu)秀的項(xiàng)目 Star 項(xiàng)目??
在瀏覽、參與這些項(xiàng)目的過程中,你將學(xué)習(xí)到更多編程知識(shí)、提高編程技巧、找到編程的樂趣。
???? 最后 HelloGitHub[1] 這個(gè)項(xiàng)目就誕生了 ????
以下為本期內(nèi)容|每個(gè)月 28 號(hào)發(fā)布最新一期|點(diǎn)擊查看往期內(nèi)容[2]
C 項(xiàng)目
1、tmux:一個(gè)終端復(fù)用工具,可極大的提高工作效率。
提供了強(qiáng)勁的、易于使用的命令行界面 可橫向和縱向分割窗口 窗格可以自由移動(dòng)和調(diào)整大小,或直接利用四個(gè)預(yù)設(shè)布局之一 可在多個(gè)緩沖區(qū)進(jìn)行復(fù)制和粘貼 可通過交互式菜單來選擇窗口、會(huì)話及客戶端 等等
長按識(shí)別二維碼,直達(dá)項(xiàng)目
C# 項(xiàng)目
2、BenchmarkDotNet:功能強(qiáng)大的用于基準(zhǔn)測試 .NET 庫
長按識(shí)別二維碼,直達(dá)項(xiàng)目
C++ 項(xiàng)目
3、CppNet:一個(gè)封裝在 Tcp 協(xié)議上的 Proactor 模式 multi-thread 網(wǎng)絡(luò)庫。包含 OS 接口調(diào)用、回調(diào)處理、定時(shí)器、緩存管理等,這里有從操作系統(tǒng)到應(yīng)用層的所有網(wǎng)絡(luò)細(xì)節(jié),便于初學(xué)者學(xué)習(xí)和實(shí)踐。
簡單:只導(dǎo)出了最少量的接口,其聲明都類似系統(tǒng) socket API。對(duì)客戶端而言,只新增了一個(gè) buffer 類型 快速:采用性能最優(yōu)的 epoll 和 IOCP 做事件驅(qū)動(dòng),驚群處理交由內(nèi)核。每個(gè)連接都獨(dú)享一個(gè)內(nèi)存池,從內(nèi)存池中申請的內(nèi)存都由智能指針管理 清晰:結(jié)構(gòu)上分為事件驅(qū)動(dòng),會(huì)話管理,接口三層,通過回調(diào)向上通知。模塊之間職責(zé)分工明確,最大的類不超過 500 行代碼
長按識(shí)別二維碼,直達(dá)項(xiàng)目
4、dbg-macro:打日志是 C++ 開發(fā)中必不可少的一種 debug 方式,dbg-macro受 rust-lang中 的 dbg 啟發(fā),提供比 printf 和 std::cout 更好的宏函數(shù)。主要有如下特點(diǎn):
美觀的彩色輸出(當(dāng)輸出不是交互式終端時(shí),顏色將自動(dòng)禁用) 兼容 C++11,并且是 header-only 支持基礎(chǔ)類型和 STL 容器類型的輸出 除了基本信息外,還輸出變量名和類型 啟用 DBG_MACRO_DISABLE 生成 release 版
// You can use "dbg(..)" in expressions:
int factorial(int n) {
if (dbg(n <= 1)) {
return dbg(1);
} else {
return dbg(n * factorial(n - 1));
}
}
int main() {
std::string message = "hello";
dbg(message); // [example.cpp:15 (main)] message = "hello" (std::string)
const int a = 2;
const int b = dbg(3 * a) + 1; // [example.cpp:18 (main)] 3 * a = 6 (int)
std::vector<int> numbers{b, 13, 42};
dbg(numbers); // [example.cpp:21 (main)] numbers = {7, 13, 42} (size: 3) (std::vector<int>)
dbg("this line is executed"); // [example.cpp:23 (main)] this line is executed
factorial(4);
return 0;
}
長按識(shí)別二維碼,直達(dá)項(xiàng)目
5、CppCon2019:C++ 2019 大會(huì)的幻燈片和相關(guān)材料集合
長按識(shí)別二維碼,直達(dá)項(xiàng)目
Go 項(xiàng)目
6、RedisShake:阿里開源的用于 redis 數(shù)據(jù)同步的工具。原理圖如下:
長按識(shí)別二維碼,直達(dá)項(xiàng)目
7、bigcache:基于 Go 語言的高性能大緩存庫。在 Ubuntu 18.04 LTS,機(jī)器配置 i7-6700K CPU @ 4.00GHz with 32GB of RAM 上性能測試結(jié)果:
go version
go version go1.13 linux/amd64
cd caches_bench; go test -bench=. -benchmem -benchtime=4s ./... -timeout 30m
goos: linux
goarch: amd64
pkg: github.com/allegro/bigcache/v2/caches_bench
12999889 376 ns/op 199 B/op 3 allocs/op
4355726 1275 ns/op 337 B/op 8 allocs/op
11068976 703 ns/op 328 B/op 2 allocs/op
10183717 478 ns/op 304 B/op 2 allocs/op
13165708 401 ns/op 24 B/op 2 allocs/op
10137682 690 ns/op 136 B/op 2 allocs/op
11423854 450 ns/op 152 B/op 4 allocs/op
34233472 148 ns/op 317 B/op 3 allocs/op
34222654 268 ns/op 350 B/op 3 allocs/op
19635688 240 ns/op 200 B/op 6 allocs/op
60547064 86.1 ns/op 152 B/op 4 allocs/op
50701280 147 ns/op 136 B/op 3 allocs/op
27353288 175 ns/op 24 B/op 2 allocs/op
PASS
ok github.com/allegro/bigcache/v2/caches_bench 256.257s
長按識(shí)別二維碼,直達(dá)項(xiàng)目
8、pacgo:基于 Go 實(shí)現(xiàn)的終端吃豆人游戲
長按識(shí)別二維碼,直達(dá)項(xiàng)目
9、go-admin:基于 Golang 語言的數(shù)據(jù)可視化與管理平臺(tái)。特性如下:
????高生產(chǎn)效率:10 分鐘內(nèi)做一個(gè)好看的管理后臺(tái) ????主題:默認(rèn)為 adminlte,更多好看的主題正在制作中,歡迎給我們留言 ????插件化:提供插件使用,真正實(shí)現(xiàn)一個(gè)插件解決不了問題,那就兩個(gè) ?認(rèn)證:開箱即用的 rbac 認(rèn)證系統(tǒng) ??框架支持:支持大部分框架接入,讓你更容易去上手和擴(kuò)展
長按識(shí)別二維碼,直達(dá)項(xiàng)目
10、zerolog:一個(gè)速度快、專門用于輸出 JSON 格式日志的庫。還在為解析不規(guī)則的日志而煩惱嗎?有了 zerolog 你可以跳起來了!當(dāng)然它還有低效但可在控制臺(tái)輸出漂亮日志的模式,快去試試吧。示例代碼:
ackage main
import (
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func main() {
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
log.Info().Msg("hello world")
}
// Output: {"time":1516134303,"level":"info","message":"hello world"}
長按識(shí)別二維碼,直達(dá)項(xiàng)目
Java 項(xiàng)目
11、AutoUpdateProject:一個(gè)簡單易用、接入方便、UI 多樣的 Android 內(nèi)實(shí)現(xiàn)在線更新的庫。示例代碼:
//更新庫配置
UpdateConfig updateConfig = new UpdateConfig()
.setDebug(true)//是否是Debug模式
.setBaseUrl("http://www.cretinzp.com/system/versioninfo")//當(dāng) dataSourceType 為 DATA_SOURCE_TYPE_URL 時(shí),配置此接口用于獲取更新信息
.setMethodType(TypeConfig.METHOD_GET)//當(dāng) dataSourceType 為 DATA_SOURCE_TYPE_URL 時(shí),設(shè)置請求的方法
.setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_URL)//設(shè)置獲取更新信息的方式
.setShowNotification(true)//配置更新的過程中是否在通知欄顯示進(jìn)度
.setNotificationIconRes(R.mipmap.download_icon)//配置通知欄顯示的圖標(biāo)
.setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置 UI 的樣式,一種有 12 種樣式可供選擇
.setRequestHeaders(null)//當(dāng) dataSourceType 為 DATA_SOURCE_TYPE_URL 時(shí),設(shè)置請求的請求頭
.setRequestParams(null)//當(dāng) dataSourceType 為 DATA_SOURCE_TYPE_URL 時(shí),設(shè)置請求的請求參數(shù)
.setCustomActivityClass(CustomActivity.class)//如果你選擇的 UI 樣式為 TypeConfig.UI_THEME_CUSTOM,那么你需要自定義一個(gè) Activity 繼承自 RootActivity 并參照 demo 實(shí)現(xiàn)功能,在此處填寫自定義 Activity 的 class
.setModelClass(new UpdateModel());
AppUpdateUtils.init(this, updateConfig);
長按識(shí)別二維碼,直達(dá)項(xiàng)目
12、spring-analysis:Spring 框架源碼講解。包括:spring-core、spring-aop、spring-context、spring-taskspring-mvc 等部分
長按識(shí)別二維碼,直達(dá)項(xiàng)目
13、eladmin:基于 Spring Boot 2.1.0、Vue 的前后端分離的后臺(tái)管理系統(tǒng),支持?jǐn)?shù)據(jù)字典與數(shù)據(jù)權(quán)限管理、一鍵生成前后端代碼、前端菜單動(dòng)態(tài)路由等?;?Spring Boot2.1.0 框架,涉及的技術(shù)棧:非關(guān)系數(shù)據(jù)庫 redis、接口測試工具 swagger、druid 數(shù)據(jù)源驅(qū)動(dòng)、郵件依賴(javax.mail)、三方支付和云存儲(chǔ) SDK、頁面模板引擎 freemarker。技術(shù)棧豐富,初學(xué)者可以作為實(shí)戰(zhàn)項(xiàng)目學(xué)習(xí)和使用
長按識(shí)別二維碼,直達(dá)項(xiàng)目
JavaScript 項(xiàng)目
14、nzh:阿拉伯?dāng)?shù)字與中文數(shù)字相互轉(zhuǎn)化的 JS 庫。示例代碼如下:
var nzhcn = Nzh.cn; // 使用簡體中文, 另外有 Nzh.hk -- 繁體中文
nzhcn.encodeS(100111); // 轉(zhuǎn)中文小寫 >> 十萬零一百一十一
nzhcn.encodeB(100111); // 轉(zhuǎn)中文大寫 >> 壹拾萬零壹佰壹拾壹
nzhcn.encodeS("1.23456789e+21"); // 科學(xué)記數(shù)法字符串 >> 十二萬三千四百五十六萬萬七千八百九十萬億
nzhcn.toMoney("100111.11"); // 轉(zhuǎn)中文金額 >> 人民幣壹拾萬零壹佰壹拾壹元壹角壹分
長按識(shí)別二維碼,直達(dá)項(xiàng)目
15、request:JavaScript 簡單、易用的 HTTP 請求客戶端。示例代碼:
const request = require('request');
request('https://hellogithub.com', function (error, response, body) {
console.error('error:', error); // 如果請求發(fā)生錯(cuò)誤將被打印
console.log('statusCode:', response && response.statusCode); // 輸出返回的狀態(tài)碼
console.log('body:', body); // 輸出返回的 HTML
});
長按識(shí)別二維碼,直達(dá)項(xiàng)目
16、SandDance:微軟開源的數(shù)據(jù)可視化庫。使用單元可視化,將數(shù)據(jù)庫中的行一對(duì)一映射到屏幕中。在進(jìn)行數(shù)據(jù)交互時(shí),視圖可無縫平滑過渡,展示效果炫酷
長按識(shí)別二維碼,直達(dá)項(xiàng)目
17、chart-race-react:一個(gè)簡單易用的 Bar Chart Race(長條圖賽跑動(dòng)畫) React 組件。示例代碼:
import ReactDOM from 'react-dom';
import BarChart from 'chart-race-react';
ReactDOM.render(<BarChart ></BarChart>, document.getElementById('root'));
長按識(shí)別二維碼,直達(dá)項(xiàng)目
18、fiora:一個(gè)功能豐富、支持多端的在線聊天室。它界面小清新,支持基本的聊天功能的同時(shí)還有好玩的消息朗讀功能。項(xiàng)目上基于 TypeScript + React 16.9 代碼邏輯清晰、注釋較為完善,適合用來學(xué)習(xí) node.js、 TypeScript、React 等技術(shù)
長按識(shí)別二維碼,直達(dá)項(xiàng)目
Python 項(xiàng)目
19、TagUI-Python:一個(gè) Python 自動(dòng)化操作的庫。比如:自動(dòng)打開網(wǎng)頁并截圖,示例代碼:
t.init()
t.url('https://www.google.com')
t.type('q', 'decentralization[enter]')
t.snap('page', 'results.png')
t.close()
長按識(shí)別二維碼,直達(dá)項(xiàng)目
Ruby 項(xiàng)目
20、shift:一個(gè) Ruby 語言寫的在線 MySQL 數(shù)據(jù)庫遷移工具
長按識(shí)別二維碼,直達(dá)項(xiàng)目
Swift 項(xiàng)目
21、Percent:讓 Swift 語言支持百分比類型,消除精度缺失的煩惱。示例代碼:
import Percent
10% + 5.5%
//=> 15.5%
-10% / 2
//=> -5%
長按識(shí)別二維碼,直達(dá)項(xiàng)目
其它
22、curlconverter:把 curl 命令轉(zhuǎn)化成各語言的代碼的工具,支持 Python、JavaScript、PHP、R、Go 等語言。
長按識(shí)別二維碼,直達(dá)項(xiàng)目
23、hub:通過命令行的方式來操作 GitHub,支持絕大多數(shù)的操作。比如:創(chuàng)建遠(yuǎn)程倉庫、刪除遠(yuǎn)程倉庫、提交 PR、管理 issue 等,常用操作:
創(chuàng)建遠(yuǎn)程倉庫:hub create github-repository 刪除遠(yuǎn)程倉庫:hub delete github-repository fork 項(xiàng)目:hub fork
長按識(shí)別二維碼,直達(dá)項(xiàng)目
24、cascadia-code:微軟開源的一套等寬字體,有趣的是可以組合字符創(chuàng)建新的字形。組合效果如下:
長按識(shí)別二維碼,直達(dá)項(xiàng)目
25、Administrative-divisions-of-China:中國行政區(qū)劃(五級(jí)):省級(jí)、地級(jí)、縣級(jí)、鄉(xiāng)級(jí)和村級(jí)的數(shù)據(jù)集和爬蟲程序
長按識(shí)別二維碼,直達(dá)項(xiàng)目
26、vim-airline:一個(gè)讓每個(gè) Vim 窗口的底部,都有一個(gè)漂亮狀態(tài)行的插件。展示信息和效果如下圖:
長按識(shí)別二維碼,直達(dá)項(xiàng)目
開源書籍
27、python_ebook:Python 編程相關(guān)的電子書資源集合項(xiàng)目
長按識(shí)別二維碼,直達(dá)項(xiàng)目
28、book:(英文)《Cosmic Python》講述如何管理復(fù)雜性的 Pythonic 應(yīng)用程序結(jié)構(gòu)的書籍
長按識(shí)別二維碼,直達(dá)項(xiàng)目
教程
29、BigData-Notes:大數(shù)據(jù)入門教程,該教程介紹了大數(shù)據(jù)常用技術(shù)棧的基礎(chǔ)和核心知識(shí)。內(nèi)容涵蓋:Hadoop、Spark、Storm、HBase、Hive、ZooKeeper、Kafka 等
長按識(shí)別二維碼,直達(dá)項(xiàng)目
機(jī)器學(xué)習(xí)
30、Ultra-Light-Fast-Generic-Face-Detector-1MB:1MB 大小的輕量級(jí)人臉檢測模型。該模型是針對(duì)邊緣計(jì)算設(shè)備,基于 libfacedetection 替換壓縮網(wǎng)絡(luò)設(shè)計(jì)實(shí)現(xiàn)
長按識(shí)別二維碼,直達(dá)項(xiàng)目
31、dimensionality_reduction_alo_codes:該項(xiàng)目使用 Python 實(shí)現(xiàn)了 11 種經(jīng)典的數(shù)據(jù)抽?。〝?shù)據(jù)降維)算法。同時(shí)附有相關(guān)資料、展示效果,適用于機(jī)器學(xué)習(xí)初學(xué)者和剛剛?cè)肟訑?shù)據(jù)挖掘的小伙伴
長按識(shí)別二維碼,直達(dá)項(xiàng)目
參考資料
[1]
HelloGitHub: https://hellogithub.com
[2]
點(diǎn)擊查看往期內(nèi)容: https://github.com/521xueweihan/HelloGitHub#內(nèi)容
關(guān)注公眾號(hào)加入交流群,一起討論有趣的技術(shù)話題
如果你發(fā)現(xiàn)了 GitHub 上有趣的項(xiàng)目,歡迎在 HelloGitHub 項(xiàng)目提 issues 告訴我們。
“閱讀原文”獲取更多信息、“在看”讓本文被更多人看到、“贊賞”支持我們。