開源百寶箱《HelloGitHub》第 64 期

HelloGitHub發表於2021-07-28

興趣是最好的老師,HelloGitHub 讓你對程式設計感興趣!

簡介

分享 GitHub 上有趣、入門級的開源專案。

HelloGitHub 有實戰、教程、黑科技、開源書籍、企業級開源專案,涵蓋多種程式語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對程式設計產生興趣!

專案地址:github.com/521xueweiha…

感謝大家點亮的每一個 Star ✨


以下為本期內容|每個月 28 號更新

C 專案

1、X-TRACK:開源的 GPS 自行車碼錶。功能齊全且擁有美觀的介面,支援離線地圖、顯示軌跡等功能。線上觀看

C# 專案

2、XboxDownload:Xbox 下載助手。支援 Xbox 遊戲加速下載、比價等功能

3、ToastFish:利用 Windows 通知欄背單詞的軟體。能夠選擇單詞集合,並在背完後進行測驗

C++ 專案

4、Plants-vs.-Zombies-Online-Battle:在沒有遊戲原始碼的前提下,通過逆向工程和程式碼注入實現植物大戰殭屍區域網對戰模式。成功載入後解密模式的最後一關,會變為網路對戰關卡。玩法為其中一個玩家放置植物進行防禦,另一玩家放置殭屍進攻。專案結合逆向工程、C++和彙編相關技術,在無原始碼的前提下為遊戲增加功能。對逆向工程感興趣的小夥可以看看原始碼

5、xpack:實現 C++ 結構體和 JSON/XML/BSON 互轉的庫。C++ 初學者可以通過該專案學到高階的巨集技巧和初級的 SFINAE 寫法

#include <iostream>
#include "xpack/json.h" // 包含該標頭檔案

struct User {
    int id;
    std::string name;
    XPACK(O(id, name)); // 新增巨集定義XPACK在結構體定義結尾
};

int main(int argc, char *argv[]) {
    User u;
    string data = "{\"id\":12345, \"name\":\"xpack\"}";

    xpack::json::decode(data, u);          // json轉結構體
    cout<<u.id<<';'<<u.name<<endl;

    string json = xpack::json::encode(u);  // 結構體轉json
    cout<<json<<endl;
    return 0;
}
複製程式碼

CSS 專案

6、normalize.css:用來消除瀏覽器預設樣式的 CSS 庫。不同瀏覽器對於同一個元素會有不一樣的預設樣式,比如:超連結線的顏色。相較於 reset(重製樣式)解決辦法,normalize.css 採用更加和平且高效地方式,解決了瀏覽器預設樣式的問題,儘可能讓同一個 CSS 檔案在不同的瀏覽器上顯示效果一樣和正常

Go 專案

7、goim:輕量級、高效能、支援叢集的 IM 和實時推送服務。純 Golang 實現支援廣播訊息、房間推送、安全驗證和多協議支援等功能,還有基於 Kafka 的非同步訊息推送

8、dtm:Go 語言實現的分散式事務管理器。優雅的解決了微服務架構下冪等、空補償、懸掛等分散式事務難題,提供了簡單易用、高效能、易水平擴充套件的分散式事務解決方案,除 Go 外還有 Python、PHP、Node.js 等語言的客戶端

  // 具體業務微服務地址
  const qsBusi = "http://localhost:8081/api/busi_saga"
	req := &gin.H{"amount": 30} // 微服務的載荷
	// DtmServer為DTM服務的地址,是一個url
	saga := dtmcli.NewSaga("http://localhost:8080/api/dtmsvr").
		// 新增一個TransOut的子事務,正向操作為url: qsBusi+"/TransOut", 補償操作為url: qsBusi+"/TransOutCompensate"
		Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req).
		// 新增一個TransIn的子事務,正向操作為url: qsBusi+"/TransOut", 補償操作為url: qsBusi+"/TransInCompensate"
		Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req)
	// 提交saga事務,dtm會完成所有的子事務/回滾所有的子事務
  err := saga.Submit()
複製程式碼

9、erda:企業級一站式 PaaS 平臺。基於 Kubernetes 以應用為中心的 DevOps 且支援微服務治理的多雲架構,可以讓複雜業務的開發、運維、監控和問題診斷變得更簡單、更高效。能減輕使用不同的工具混搭技術底座和雲平臺的運維難度,同時還有漂亮、簡單易用的介面設計

10、hugo:Go 語言的靜態網站生成器。靜態網站生成器就是在本地把內容檔案生成靜態網頁(HTML+CSS),然後把生成好的頁面上傳到伺服器的工具。這種工具能夠幫你輕鬆且快速地上線網站,而使用者僅需選擇喜歡的主題,便可以專注於內容創作。Hugo 作為最流行的靜態網站生成器之一,擁有豐富的外掛和主題,就算沒有程式設計基礎也能幫你快速製作出滿意的部落格或者網站

11、TopList:各大網站熱門頭條的聚合網站。線上預覽

Java 專案

12、Mybatis-PageHelper:MyBatis 通用分頁外掛,使用方法

13、guava:Google 開源的 Java 三方類庫。該庫提供包括集合、I/O、快取、併發等開箱即用的工具方法,任何的 Java 應用都可以通過依賴的方式引入該專案。作為 Google 的開源專案,本身的原始碼也是非常值得開發者學習

14、dataease:開源的資料視覺化和分析工具。採用 SpringBoot+Vue.js 技術棧實現,通過豐富的視覺化圖表讓資料更加直觀

  • 資料連線:支援關係型資料庫、Excel 等檔案、Hadoop 等大資料平臺、NoSQL 等各種資料來源
  • 圖表展示:支援 PC 端、移動端及大屏
  • 製作圖表:支援豐富的圖表型別、支援拖拉拽方式快速製作儀表板
  • 資料引擎:支援直連模式、本地模式

JavaScript 專案

15、etherpad-lite:支援實時協作的富文字 WYSIWYG 編輯器

16、sjcl:史丹佛大學開源的 JavaScript 加密庫。用於 JS 的加密和解密,體積小且支援多種加密演算法

sjcl.encrypt("password", "data") //加密資料
sjcl.decrypt("password", "encrypted-data") //解密資料
複製程式碼

17、rubick:基於 Electron 開發的開源外掛化工具箱。起初專案作者是 uTools 的使用者但 uTools 沒有開源,他又想接入公司內部的工具,然後 Rubick(拉比克)就誕生了。它實現了 uTools 的大部分功能,可以適配 uTools 豐富的開源外掛,享受用完即走的便利

18、50projects50days:50 個採用 HTML+CSS+JS 的前端小專案集合。專案包含網頁原始碼和效果展示,標準入門級的前端開源專案。通過檢視效果讓新手感受前端的美妙,簡單的原始碼降低了上手寫程式碼門檻。或許其中某個網頁的效果也會讓工作多年的你大呼哇塞

19、gogocode:簡化 JavaScript 抽象語法樹(AST)處理的工具。借鑑了類似 jQuery 的預發和字串構建 AST 的思想,大大簡化了學習成本、降低了開發複雜度,官方團隊在此基礎上還開發出了 Vue2 轉 Vue3 的外掛

Kotlin 專案

20、FengYunWeather:開源的安卓天氣 APP。使用 Kotlin 語言編寫,採用 MVVM 架構和 OkHttp、coil、Room 等框架,程式碼邏輯清晰,適合新手入門和學習

21、k-9:開源的 Android 電子郵件客戶端

Python 專案

22、tqsdk-python:開源的 Python 量化交易框架。使用少量程式碼即可實現量化交易程式,還支援歷史資料、實時資料、策略回測、實盤交易、圖形化介面展示等功能。但免費版本僅提供全部的期貨、商品/金融期權和上證50、滬深300 和中證500 的實時行情,付費版支援更多種類以及更加穩定的服務

from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask

api = TqApi(TqAccount("H海通期貨", "4003242", "123456"), auth=TqAuth("信易賬戶", "賬戶密碼"))      # 建立 TqApi 例項, 指定交易賬戶
q_1910 = api.get_quote("SHFE.rb1910")                         # 訂閱近月合約行情
t_1910 = TargetPosTask(api, "SHFE.rb1910")                    # 建立近月合約調倉工具
q_2001 = api.get_quote("SHFE.rb2001")                         # 訂閱遠月合約行情
t_2001 = TargetPosTask(api, "SHFE.rb2001")                    # 建立遠月合約調倉工具

while True:
  api.wait_update()                                           # 等待資料更新
  spread = q_1910.last_price - q_2001.last_price        # 計算近月合約-遠月合約價差
  print("當前價差:", spread)
  if spread > 250:
    print("價差過高: 空近月,多遠月")
    t_1910.set_target_volume(-1)                              # 要求把1910合約調整為空頭1手
    t_2001.set_target_volume(1)                               # 要求把2001合約調整為多頭1手
  elif spread < 200:
    print("價差回覆: 清空持倉")                               # 要求把 1910 和 2001合約都調整為不持倉
    t_1910.set_target_volume(0)
    t_2001.set_target_volume(0)
複製程式碼

23、Pillow:最流行的 Python 影像處理庫。它的誕生是由於 PIL 的年久失修,現已於 2011 年停止維護,所以開源愛好者們就在 PIL 的基礎上建立了 Pillow。該庫支援豐富的影像格式和強大的影像處理功能,如果你要用 Python 處理影像,它絕對是不二之選

# 安裝:pip install pillow
# 注意安裝的版本,不同版本支援的 Python 版本也不同

from PIL import Image
# 開啟 jpg 影像檔案
im = Image.open('hellogithub.jpg')
# 轉換成黑白影像
grayscale = tatras.convert('L')
# 展示影像
grayscale.show()
複製程式碼

24、JDMemberCloseAccount:用 Python 操作 selenium 的實戰專案。該專案以全自動退出京東加入的店鋪會員為例,介紹了 Python 自動化的知識和方案

25、bigdata_analyse:大資料分析實戰專案的集合。該專案包含了淘寶、租房、招聘等資料的分析例項,不僅有 Python、SQL、HQL 的例項程式碼,還附上了資料集下載地址。想學習大資料的同學們,萬事俱備就差你來學了

26、OnlineJudge:青島大學開源的線上評測系統(OJ),採用 Django+Vue.js 實現。功能如下:

  • 基於 Docker 的一鍵部署
  • 支援 ACM/OI 兩種比賽模式、實時/非實時評判
  • 豐富的視覺化圖表,一圖勝千言
  • 支援多種程式語言:C/C++、Java、Python2/3
  • 比賽使用者 IP 限制 (CIDR ranges)

Swift 專案

27、SwifterSwift:500合1 的原生 Swift 擴充套件庫集合。整合了 500 多個原生 Swift 擴充套件的庫,提供了更加方便的函式、語法糖、資料型別、UIKit 以及更高效能的 Cocoa 類,提高 Swift 的開發效率實現 1+1>2 的效果。適用於 iOS、macOS、tvOS 等系統

// 原來使用 UIAlertController 實現提醒的程式碼如下:
let alert = UIAlertController(title: "測試", message: "HelloGitHub", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)

alert.addAction(okAction)
present(alert, animated: true, completion: nil)

// 改成 SwifterSwift 後:
let alert = UIAlertController(title: "測試", message: "HelloGitHub")
alert.show()
複製程式碼

28、firefox-ios:Firefox 瀏覽器 iOS 原始碼

其它

29、nocodb:開源的智慧表格製作工具。我最初以為 nocodb 只是資料庫桌面管理工具,後來我發現自己狹隘了。它不僅可以把資料庫和圖片等資料轉化成表格的方式展現,還提供了團隊協作、工作流接入以及更加開放 API 服務。讓團隊在資料上工作,資料就在手邊“即視即用”。知名電子表格-資料庫混合體 Airtable 產品的開源替代品

30、elasticsearch-dump:Elasticsearch 資料匯入/匯出工具,可以用於 ES 的資料備份和遷移

31、freeCodeCamp:免費學習程式設計的開源社群。它創立於 2014 年,期間幫助了無數程式設計愛好者學習程式設計,中文站點於 2021 年上線。freeCodeCamp 採用線上程式設計闖關的學習形式,遇到問題還可以通過活躍的社群答疑解惑。平臺鼓勵新手多動手寫程式碼、執行程式碼,提倡 RSA 即:遇到問題先閱讀文件資料,然後求助於搜尋引擎,最後實在沒招了再提問,這樣有助於培養良好的提問習慣終身受益。同時作為非盈利組織,freeCodeCamp 不僅提供了免費學習的課程還開源了網站程式碼

32、developer-roadmap:開發者學習路線圖。這是一份包含後端、前端、運維部署等方向的學習路徑圖,幫你指明前進的方向。中文

33、adarkroom:《小黑屋》是一款有趣的文字冒險類遊戲。支援中文能夠執行在瀏覽器、iOS 和 Android 裝置,瀏覽器上預設會儲存遊戲進度到本地,另外還支援存檔匯入/匯出防止丟失。友情提示:沒玩過的同學剛開始容易摸不著頭腦,因為事件觸發需要時間,看滾動的文字+點選“添柴”耐心等 30 秒,就會觸發新的事件了。如果你喜歡養成類遊戲,那它一定會是你的菜。線上試玩

34、hyper:基於 Electron 的超高顏值終端工具。顏值即正義不僅在找物件時有用,挑工具時也同樣奏效。它支援包括 Windows、Linux、macOS 等主流作業系統快下載試試,讓你的終端漂亮的不像實力派

35、git-split-diffs:更加直觀展示程式碼改動的命令列工具。在終端上使用 git diff 檢視修改時,預設的展示效果並不直觀,該專案將程式碼的改動以類似 GitHub 網站的風格展示方便檢視,還有多種主題可供選擇

開源書籍

36、understand_linux_process:《理解 Linux 程式》

37、http-api-guide:《HTTP 介面設計指北》內容為設計 Web API 的一些建議

38、CheatSheetSeries:OWASP(開放式 Web 應用程式安全專案)速查表。專案由 OWASP 社群的安全專家編寫,列舉了多種安全問題和解決方案,從而更好地保護你的 Web 應用。線上閱讀

機器學習

39、HyperLPR:中文車牌識別開源框架。支援 Python、Android、C++ 等程式語言呼叫,接入簡單準確度較高。推薦給有車牌識別需求的小夥伴

40、insightface:支援 2D&3D 人臉分析的 Python 庫。基於 PyTorch 和 MXNet 實現,採用先進的 ArcFace 人臉識別方法,高效地實現了人臉檢測、識別等功能

41、Statistical-Learning-Method_Code:用 Python 實現《統計學習方法》書中的演算法

42、DouZero_For_HappyDouDiZhu:基於快手開源的鬥地主強化學習框架,實現的歡樂鬥地主 AI 助手

最後

如果你發現了 GitHub 上有趣的專案,就分享給大傢伙吧。

以上就是本期的所有內容了,看完還不過癮?

關注 HelloGitHub 公眾號不僅可以收到第一時間的更新。點選選單欄->往期->月刊

往期月刊所有的內容盡收眼底一次看過癮!還有更多開源專案的介紹和寶藏專案等待你的發現。

相關文章