《HelloGitHub》第 40 期
興趣是最好的老師,HelloGitHub 就是幫你找到興趣!
簡介
分享 GitHub 上有趣、入門級的開源專案。
這是一個面向程式設計新手、熱愛程式設計、對開源社群感興趣 人群的月刊,月刊的內容包括:各種程式語言的專案、讓生活變得更美好的工具、書籍、學習筆記、教程等,這些開源專案大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社群中。
- 會程式設計的可以貢獻程式碼
- 不會程式設計的可以反饋使用這些工具中的 Bug
- 幫著宣傳你覺得優秀的專案
- Star 專案⭐️
在瀏覽、參與這些專案的過程中,你將學習到更多程式設計知識、提高程式設計技巧、找到程式設計的樂趣。
? 最後 HelloGitHub 這個專案就誕生了 ?
以下為本期內容|每個月 28 號釋出最新一期|點選檢視往期內容
C 專案
1、SuperWeChatPC:這是一個超級微信電腦客戶端。沒錯,是超級!因為它不僅是一個微信電腦客戶端,還支援以下功能:
- 無限多開
- 訊息防撤銷
- 語音訊息備份
- 等等
專案裡還有相關技術內幕的文章連結,快前去學習吧
2、TDengine:一個專門針對物聯網等行業以及應用監控進行設計優化的大資料平臺。它的資料庫插入、查詢操作比其它的資料庫快了 10 倍!消耗的成本也非常低,和其他典型的此類解決方案相比。TDengine 只需要不到 1/5 的計算資源,它還提供了 Java、C/C++、Python、Go、RESTful API 等用於開發的介面。還在為資料的寫入、讀取、計算的效能發愁嗎?有了它相信你的頭髮存活率會大大提高
C# 專案
3、Common.Utility:專案作者日常工作總結和網上收集、整理的 C# 各式各樣的功能類庫。類與類之間沒有聯絡,可以單獨引用至專案。程式碼中包含註釋,便於使用和學習
4、FightLandlord:該專案採用 .NETCore 跨平臺技術,實現鬥地主服務端。已實現功能:洗牌、發牌、搶地主、鬥地主、提示出牌、遊戲結束等。後續計劃增加機器智慧出牌,我是不是應該說:star 過 xx 實現智慧出牌功能,才能讓大家有動力 star ?
C++ 專案
5、muduo:一個依賴 Boost 的非阻塞 IO 和事件驅動 C++ 網路庫。實現了對底層系統呼叫的封裝、高效能非同步日誌的設計、Reactor 多執行緒併發模式設計、簡單的 HTTP 協議的解析。適合開發 Linux 下的多執行緒服務端應用程式,通過閱讀原始碼還可學習到 C++ 語言、Linux 網路程式設計等後端知識
Go 專案
6、nps:一款功能強大、輕量級的內網穿透代理伺服器。支援 TCP 和 UDP 流量轉發、支援內網 HTTP 代理、內網 socks5 代理、snappy 壓縮、站點保護、加密傳輸、多路複用等功能。擁有 web 圖形化管理,整合多使用者模式。可以自搭建內網穿透代理服務,用來替代付費的內網穿透服務。又不像其他類似專案依賴命令列,它有圖形頁面。安裝:
go get -u github.com/cnlh/nps
go build cmd/nps/nps.go # 服務端程式
go build cmd/nps/npc.go # 客戶端程式
7、scope:k8s 系列的容器間關係依賴視覺化元件,通過圖的方式解釋微服務之間複雜的相互依賴關係。同類目前只有 scope 對於微服務之間的依賴的 debug 是非常有意義的。由於是用圖的方式表示,意味著可以用圖演算法找最短路徑、聚類、把耦合緊密的服務合併。通過計算圖密度,還能揭示微服務之間的聯絡緊密。安裝如下:
# 安裝
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch
# 最後訪問 http://localhost:4040
8、pan-light:基於 Golang + Qt5 的百度網盤不限速客戶端。對比之前命令列版本的百度盤客戶端,該專案擁有圖形介面,更加友好、方便、易於使用,到 release 頁面下載執行即可使用
9、mux:一個基於 Golang 語言的 HTTP 路由庫。由於支援各種正則匹配路由,使得對應處理函式複用率大大提高。相比於 Gin、beego 等框架,這個專案基本上跟標準庫的 http.ServeMux
和 mux.Router
保持一致,比標準庫更強大的是它支援的正則匹配路由、自定義保留欄位、巢狀路由等功能。示例程式碼:
func main() {
r := mux.NewRouter()
r.HandleFunc("/", HomeHandler)
r.HandleFunc("/products", ProductsHandler)
r.HandleFunc("/articles", ArticlesHandler)
http.Handle("/", r)
}
r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)
10、lazydocker:帶命令列 UI 的 docker 管理工具。可以通過點點點來管理 docker,卻又不需要裝 rancher 這樣的企業級容器管理平臺
11、gocui:命令列 UI 庫。提供了類似 HTML canvas 的 API 用來在終端中繪製 UI,使得內容可以分塊展示,甚至可以在某些終端中支援點選事件。如果你想做一個 redis-cli 或者其它炫酷、支援點選事件的命令列 UI 程式。但是又不想陷入手繪 UI 的困境,該庫可以幫你解決這些煩惱
Java 專案
12、mall:一套基於 SpringBoot+MyBatis 的電商系統,包括前臺商城系統及後臺管理系統。功能完備是學習和實踐電商的好專案。專案結構:
mall
├── mall-common -- 工具類及通用程式碼
├── mall-mbg -- MyBatisGenerator 生成的資料庫操作程式碼
├── mall-admin -- 後臺商城管理系統介面
├── mall-search -- 基於 Elasticsearch 的商品搜尋系統
├── mall-portal -- 前臺商城系統介面
└── mall-demo -- 框架搭建時的測試程式碼
13、QuestionAnsweringSystem:一個 Java 實現的人機問答系統,能夠自動分析問題並給出候選答案。在 2011 年的美國熱門電視智力問答節目《Jeopardy》中,由 IBM 開發的 AI 問答系統 Watson 戰勝了人類選手,而 QuestionAnsweringSystem 則是 Watson 的 Java 實現。從今天的眼光去看,它可能已經不夠那麼智慧,不過由於它的簡便性和易於部署執行,因此非常適合新手把玩,趕緊去你的應用中整合一個炫酷的智慧問答系統吧
14、arthas:阿里開源的 Java 診斷工具。當線上出現了奇怪的異常時,無需發版就能截獲執行時的資料,包括引數、返回值、異常、耗時等等。上手簡單、文件完備、無程式碼侵入式的可以對正在執行的 jvm 程式進行監控,簡單易用的命令列工具。線上出 bug 了,有了 arthas 先喝口咖啡壓壓驚,問題分分鐘定位不是夢
15、wormhole:一個簡單、易用的 API 管理平臺。目的是為了降低後端服務開發與前端呼叫的耦合性,通過該框架使整個專案的開發、協作更加完善。客戶端開發人員從管理平臺查詢需要的介面資訊進行呼叫,服務端開發人員定義好介面後同步到管理平臺中,管理平臺可以統一對介面的訪問設定等。一個讓前端和後端能夠成為“好朋友”的框架✌️
JavaScript 專案
16、javascript-questions:JavaScript 進階問題列表,包含答案。中文版閱讀
17、zdog:想在你的 Web 應用上應用 3D 圖形嗎?想用你熟悉的技術實現炫酷的 3D 效果嗎?沒錯 zdog 就是你的首選。這是一款用於用於 Canvas 和 svg 的 JS 3D 渲染引擎,你可以使用它輕鬆建立扁平化風格的 3D 模型。這個庫只有 2800 行程式碼,並且最小體積為 28KB。並且它還提供了對開發者十分友好的宣告式 API,並沒有特別複雜的配置只要你會 JS 你就可以使用它。下圖都是使用 zdog 完成的作品
18、licia:比較實用的 JS 工具庫,內建了很多可能在工程中經常會用到的工具函式。該庫提供 npm 安裝,可以很好的融合到現代前端工程的開發中,從而提高開發效率。示例程式碼:
const uuid = require("licia/uuid");
const dateFormat = require("licia/dateFormat");
const now = require("licia/now");
const randomBytes = require("licia/randomBytes");
console.log(randomBytes(5));
console.log(uuid());
console.log(dateFormat(now(), "yyyy-mm-dd"));
19、cdfang-spider:成都房源統計的資料視覺化專案。該專案統計了成都開盤以來所有的房源資訊,幫助想在成都買房的同學提供一些視覺化的資料分析,比房協網官方的資料更直觀,分析更透徹。此專案包含了一套完整的原始碼,以及詳細的專案搭建文件,開發者可以根據搭建文件一步一步搭建這個專案。可以幫助開發者學習前端,後端,資料庫端,單元測試,持續整合等全套知識。基於此專案,你可以做任何地區的房源資訊視覺化,讓資料說話
20、x-build:面向小型專案的腳手架工具,通過終端命令最快在幾秒鐘初始化專案目錄。該庫內部整合了 webpack、babel、eslint 等前端常用的工具。通過該專案可以瞭解腳手架的開發,並且可以熟悉如何在工具中整合 webpack 這對自定義腳手架開發很有幫助
21、vue-unit-test-with-jest:一個 Vue 的單元測試專案,列出了 Vue 開發時大多需要測試的環節,並附有測試程式碼及說明文件。現在前端開發的技術越來越多,但是我們只是注意到了開發階段並沒有做好對應的單元測試步驟,我們可以通過這個專案學習如何針對 Vue 專案做單元測試。示例程式碼:
import { shallowMount, createLocalVue } from '@vue/test-utils'
import FilterTest from '@/components/FilterAddWatchTest.vue'
...
// 測試內容:filter ---- filter 不能通過 wrapper 或者 vm 獲取,只能通過元件獲取
// filter 需要測試函式的所有可能性
it('filter test', () => {
// console.log(FilterTest.filters)
expect(FilterTest.filters.formatText('12345678')).toBe('12...78')
expect(FilterTest.filters.formatText('12345')).toBe('12345')
expect(FilterTest.filters.formatText()).toBe('')
})
...
22、styled-components:如果你是寫 react 的開發人員一定不要錯過這個庫,它使用 ES6 模板字串完成在 react 中的 css-in-js 的實現,更順暢地在 React 中寫樣式。css-in-js 是前端圈中很火的話題,css-in-js 認為樣式應該在元件檔案中,而不是單獨的一個樣式檔案,這樣只是物理上的區分,並不是實際上的元件封裝
Objective-C 專案
23、GHDropMenuDemo:一款適用於多種場景、使用簡單的篩選選單元件。方便整合、快速選擇出篩選項、對原有專案無汙染
PHP 專案
24、CRMEB:基於 ThinkPhp5.0 + Vue + EasyWeChat 開發的一套開源、免費新零售商城系統(集客戶關係管理+營銷電商系統)。能夠幫助企業基於微信公眾號、小程式、PC、APP 等,實現會員管理、資料分析、精準營銷的電子商務管理系統。滿足企業新零售、預約、O2O、多店等各種業務需求,反正就是功能強大、適用於多種場景的商城系統
Python 專案
25、cufflinks:基於 plotly 和 pandas 的繪相簿。Pandas 是處理資料的常用庫,cufflinks 可以讓 pandas 處理後的資料更直觀的展示。通過該庫你可以用極少的程式碼,實現絢麗和多樣的資料視覺化圖形
26、one-python-craftsman:如何編寫優秀的 Python 程式碼?優秀的程式碼就是由無數優秀的細節組成的。這個專案就是詳細講解 Python 那些細節,比如何時使用異常、怎麼給變數起名、怎麼編寫條件分支等等,看似簡單的可能也是最難的地方。本專案作者是資深的 Python 開發,內容貼近實際工作和業務場景,相信認真學習完本專案,你的編碼能力一定會得到很大提升,幫你在 Python 的開發道路上走的更高、更遠
Ruby 專案
27、rubocop:一個 Ruby 靜態程式碼分析器和程式碼格式化程式。開箱即用,強制執行社群 Ruby 樣式指南中列出的許多指導原則。RuboCop 非常靈活,大多數行為都可以通過各種配置選項進行調整。除了報告程式碼中的問題外,還可以自動為您解決一些問題。使用最廣、效率超高的 Ruby 靜態程式碼檢測工具。示例程式碼:
$ gem install rubocop
$ cd my/cool/ruby/project
$ rubocop
Swift 專案
28、uPic:一款 macOS 端的圖床客戶端,支援多種免費、付費的圖床,讓你方便快捷的上傳圖片,醉心於內容創作的工具
其它
29、git-open:用 git 命令 push 完程式碼,想看倉庫網頁內容是否更新成功還需要再去開啟網頁檢視。有了這個專案,直接輸入 git open 命令瀏覽器就能自動開啟對應的倉庫的網頁,支援 GitHub、GitLab、Bitbucket。是不是很方便?還等什麼快去試試
30、getAwayBSG:專案名為“逃離北上廣”,該專案通過爬取的招聘和房價資料。給準備逃離北上廣等一線城市,卻又找不到去除的 IT 人士提供了一些視覺化資料作為建議
31、Student-resources:這個世界對學生總是非常友好,尤其是大學生。學生們總能獲得各種各樣的優惠,本文介紹的就是利用學生身份可以享受到的相關學生優惠權益,但也希望各位享受權利的同時不要忘記自己的義務,不要售賣、轉手自己的學生優惠資格,使得其他同學無法受益。像 GitHub、Microsoft、AWS、JetBrains 以及最近開始的蘋果學生優惠大促銷,大學生(中學生也可以,小學生比較難)們都可以盡情享用啦!最後祝各位學生學業進步,讓自己的生活更精彩
32、from_coder_to_expert:2019 年各網際網路大廠最新內部技術分享的文件、PDF、PPT 集合。從程式設計師到 CTO,從專業走向卓越
33、sqli-labs:非常詳細的 SQL 注入教程。值得想要入門安全行業的同學閱讀和學習(英文)
開源書籍
34、flutter-in-action:《Flutter 實戰》,線上閱讀
35、go101:《Go語言101》是一本著重介紹 Go 語法和語義的程式設計指導書,中文版線上閱讀
機器學習
36、TabNine:基於 OpenAI 的語言模型的程式碼補全工具。支援 23 種程式語言、5 種編輯器(VS Code、Sublime Text、Atom、Emacs、Vim)、使用簡單,效果驚豔
37、hub:一個包含計算機視覺、自然語言處理領域的諸多經典模型的聚合中心。這年頭有很多 Hub,什麼 GitHub、SciHub、xxxxHub 等等,但是最近圖靈獎得主 Yann LeCun 強推的 PyTorch-Hub。無論是 ResNet、BERT、GPT、VGG、PGAN 還是 MobileNet 等經典模型,只需輸入一行程式碼,都能實現一鍵呼叫!媽媽再也不用擔心你的模型啦!示例程式碼:
1、查詢可用的模型
使用者可以使用 torch.hub.list() 這個API列出 repo 中所有可用的入口點。
比如你想知道 PyTorch Hub 中有哪些可用的計算機視覺模型:
>>> torch.hub.list(‘pytorch/vision’)
>>>
[‘alexnet’,
‘deeplabv3_resnet101’,
‘densenet121’,
…
‘vgg16’,
‘vgg16_bn’,
‘vgg19’,
‘vgg19_bn’]
2、載入模型
在上一步中能看到所有可用的計算機視覺模型,如果想呼叫其中的一個,也不必安裝,只需一句話就能載入模型。
model = torch.hub.load(‘pytorch/vision’, ‘deeplabv3_resnet101’, pretrained=True)
至於如何獲得此模型的詳細幫助資訊,可以使用下面的 API:
print(torch.hub.help(‘pytorch/vision’, ‘deeplabv3_resnet101’))
如果模型的釋出者後續加入錯誤修復和效能改進,使用者也可以非常簡單地獲取更新,確保自己用到的是最新版本:
model = torch.hub.load(…, force_reload=True)
對於另外一部分使用者來說,穩定性更加重要,他們有時候需要呼叫特定分支的程式碼。
例如 pytorch_GAN_zoo 的 hub 分支:
model = torch.hub.load(‘facebookresearch/pytorch_GAN_zoo:hub’, ‘DCGAN’, pretrained=True, useGPU=False)
3、檢視模型可用方法
從 PyTorch Hub 載入模型後,你可以用 dir 檢視模型的所有可用方法。以 bertForMaskedLM 模型為例:
>>> dir(model)
>>>
[‘forward’
…
‘to’
‘state_dict’,
]
如果你對forward方法感興趣,使用 help 瞭解執行執行該方法所需的引數。
>>> help(model.forward)
>>>
Help on method forward in module pytorch_pretrained_bert.modeling:
forward(input_ids, token_type_ids=None, attention_mask=None, masked_lm_labels=None)
…
38、DG-Net:深度學習模型訓練時往往需要大量的標註資料,但收集和標註大量的資料往往比較困難。作者在行人重識別這個任務上探索了,利用生成資料來輔助訓練的方法。通過生成高質量的行人影象(行人兩兩換衣),將其與行人重識別模型融合,同時提升行人生成的質量和行人重識別的精度
- 不需要額外標註(如姿態 pose、屬性 attribute、關鍵點 keypoints 等),就能生成高質量行人影象。通過交換提取出的特徵,來實現兩張行人影象的外表互換。這些外表都是訓練集中真實存在的變化,而不是隨機噪聲。
- 不需要部件匹配來提升行人重識別的結果。僅僅是讓模型看更多訓練樣本就可以提升模型的效果。給定N張影象,我們首先生成了 NxN 的訓練影象,用這些影象來訓練行人重識別模型。(下圖第一行和第一列為真實影象輸入,其餘都為生成影象)
- 訓練中存在一個迴圈。生成影象餵給行人重識別模型來學習好的行人特徵,而行人重識別模型提取出來的特徵也會再餵給生成模型來提升生成影象的質量。
39、LIS-YNP:一個包含基礎教程、提高參考資料、有趣實踐專案的 PyTorch 教程。人生苦短,我用 PyTorch
“看完了,還不夠? | 還不過癮,那就看看每天更新的前端日報吧 ”
如果你發現了好玩、有意義的開源專案 點選這裡 分享你覺得有趣的專案。
公眾號
最近開了公眾號,後續公眾號會針對月刊推薦過的內容精選、梳理,做成系列的文章釋出。月刊也會同時釋出在公眾號,便於第一時間閱讀。
歡迎關注 HelloGitHub 公眾號,獲取更多開源專案的資料和內容。
宣告
歡迎轉載,請註明出處和作者,同時保留宣告。