《HelloGitHub》第 45 期
興趣是最好的老師,HelloGitHub 就是幫你找到興趣!
簡介
分享 GitHub 上有趣、入門級的開源項目。
這是一個面向編程新手、熱愛編程、對開源社區感興趣 人群的月刊,月刊的內容包括:各種編程語言的項目、讓生活變得更美好的工具、書籍、學習筆記、教程等,這些開源項目大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社區中。
會編程的可以貢獻代碼
不會編程的可以反饋使用這些工具中的 Bug
幫著宣傳你覺得優秀的項目
Star 項目??
在瀏覽、參與這些項目的過程中,你將學習到更多編程知識、提高編程技巧、找到編程的樂趣。
???? 最后 HelloGitHub[1]?這個項目就誕生了 ????
以下為本期內容|每個月 28 號發布最新一期|點擊查看往期內容[2]?
C 項目
1、smartdns:一個運行在本地的 DNS 服務器。能夠提高網絡訪問速度等諸多妙用,架構圖如下:
2、xmake:一個基于 Lua 的輕量級跨平臺自動構建工具。支持在各種主流平臺上構建項目,主要用于解決 C/C++ 項目的跨平臺構建,同時支持與其他語言的混合編譯。工程配置語法簡單易讀,對初學者友好、上手方便
C# 項目
3、gui.cs:支持 Windows 和 Linux/Unix 的 .NET 終端 UI 工具庫。方便實現終端 GUI 工具,并且可以實現終端中用鼠標啦
4、Blog.Core:基于 ASP.NET Core 和 Vue 從零開始搭建前后端分離項目教程+實戰項目。該項目從 .NET Core 基礎講起,內容完整、系統,對初學者和有一定基礎的小伙伴都有借鑒和學習的價值
C++ 項目
5、ThreadPool:一個簡單的 C++11 線程池實現,代碼加起來不到 100 行。示例代碼:
// create thread pool with 4 worker threads ThreadPool pool(4);// enqueue and store future auto result = pool.enqueue([](int answer "") { return answer; }, 42);// get result from future std::cout << result.get() << std::endl;6、xournalpp:一款支持 PDF 手寫注釋的筆記軟件,支持 Linux、Windows、macOS 平臺。看書的時候喜歡標注、做筆記,那這款工具肯定適合你。
7、pika:一個企業級開源的可持久化的大容量(百G)redis 存儲服務。兼容 redis 的絕大部分接口,解決 redis 由于存儲數據量巨大而導致內存不夠用的容量瓶頸。并且可以像 redis 一樣,通過 slaveof 命令進行主從備份,支持全同步和部分同步
Go 項目
8、pg_flame:Postgres 數據庫性能分析工具,把 EXPLAIN ANALYZE 結果通過火焰圖展示
9、goproxy:Go 模塊安裝代理工具。還在因為安裝 Go 項目依賴失敗而抓耳撓腮嗎?快試試這個項目吧
10、gods:簡單易用的 Go 語言各種數據結構和算法,并封裝成了一個庫,開箱即食。示例代碼:
11、gowp:Go 高性能異步并發線程池。接口調用簡單、支持錯誤返回、無論排隊多少任務,都不會阻止提交任務。可用于控制并發訪問、并發執行。示例代碼:
12、gf:一款高性能、功能豐富的 Go Web 框架。特點:
模塊化、松耦合設計
模塊豐富,開箱即用
簡便及可維護性為宗旨
詳盡的開發文檔及示例
完善的本地中文化支持
等等
Java 項目
13、SnowJena:基于令牌桶算法實現的分布式無鎖限流框架。簡單易用的 API,開箱即用、支持熔斷降級、動態配置規則、可視化監控等功能。示例代碼:
public class AppTest {Logger logger = LoggerFactory.getLogger(getClass());/*** 本地限流*/@Testpublic void test1() {// 1.配置規則RateLimiterRule rateLimiterRule = new RateLimiterRuleBuilder().setLimit(1).setPeriod(1).setUnit(TimeUnit.SECONDS) //每秒令牌數為1.build();// 2.工廠模式生產限流器RateLimiter limiter = RateLimiterFactory.of(rateLimiterRule);// 3.使用while (true) {if (limiter.tryAcquire()) {logger.info("ok");}}} }14、holer:一個將局域網中的應用映射到公網訪問的端口映射軟件,支持轉發基于 TCP 協議的報文。內網穿透工具,包含 Web 后臺管理系統。用到的技術如下:
服務端采用 SpringBoot 和 Netty 實現
客戶端采用 Java Netty 和 Go 語言實現
15、miaosha:一款秒殺系統設計與實現。高并發大流量的秒殺是面試常見問題,該項目不僅有具體問題的解決思路,還有具體代碼實現和示例 demo,全部理解、學習后相信秒殺問題再也攔不住你啦
JavaScript 項目
16、postwoman:一款基于 Node.js 的免費開源、便捷美觀的 API 調試工具。它是調試接口的利器,能夠盡快的發現問題提高開發效率。相信體會過 Postman 的同學,看到這個項目的名字就已經躍躍欲試了
17、react-text-loop:實現文字循環展示的 React 組件
18、uform:一款面向企業級復雜場景的高性能表單解決方案。特性:
???? 高性能,字段分布式渲染,大大減輕 React 渲染壓力
???? 支持 Ant Design/Fusion Next 組件體系
???? JSX 標簽化寫法/JSON Schema 數據驅動方案無縫遷移過渡
???? 副作用邏輯獨立管理,涵蓋各種復雜聯動校驗邏輯
???? 支持各種表單復雜布局方案
19、rc-bullets:基于 CSS3 Animation 使用 React 構建的彈幕組件。支持功能:
管理彈幕:暫停、隱藏、清屏等
設置彈幕:速度、循環次數、延遲播放、自定義動畫類型等
20、react-loading:一款輕量、開箱即用并且支持按需加載的 React 動畫組件庫。示例代碼:
import React from 'react'; import { DisappearedLoading } from 'react-loadingg'; const Container = () => <DisappearedLoading ></DisappearedLoading>; export default Container;Kotlin 項目
21、SketchyComponent:一款 Android 上的手繪風格組件庫。該庫提供了一些基礎圖形和 icon,以及便捷的自定義能力。之前介紹過手繪風格的圖表庫大家很喜歡,這回是 Android 組件庫不知道對不對大家的胃口。示例代碼:
// 1. 創建 Sketchy 圖形 val skSquareDrawable = SkSquareDrawable().apply {// 2. 設置屬性fillColor = resources.getColor(android.R.color.holo_orange_dark) } // 3. 給 View 設置背景 text.background = skSquareDrawablePython 項目
22、memory_profiler:Python 程序內存占用分析工具。示例代碼:
# 采用裝飾器的方式引用,不影響現有代碼 @profile def my_func():a = [1] * (10 ** 6)b = [2] * (2 * 10 ** 7)del breturn aif __name__ == '__main__':my_func()# 運行命令:python -m memory_profiler example.py # 輸出: Line # Mem usage Increment Line Contents ==============================================3 @profile4 5.97 MB 0.00 MB def my_func():5 13.61 MB 7.64 MB a = [1] * (10 ** 6)6 166.20 MB 152.59 MB b = [2] * (2 * 10 ** 7)7 13.61 MB -152.59 MB del b8 13.61 MB 0.00 MB return a23、PySimpleGUI:Python GUI 編程庫,它是將 tkinter、Qt、Remi、WxPython 封裝成更人性化的接口。示例代碼和效果如下:
24、mitmproxy:基于 Python 語言開發的抓包工具。支持命令行、Web 平臺的形式展示抓包結果,還能通過 Python 引用庫來攔截、控制響應和請求。下圖展示為命令行使用界面(類 vim 操作)
25、PythonPlantsVsZombies:Python 語言編寫的植物大戰僵尸。學習如何使用 Python 編寫小游戲的極佳例子,運行步驟:
Ruby 項目
26、pghero:Postgres 性能監控服務。讓你對 pg 數據庫的性能了如指掌
其它
27、clean-code-javascript:《Clean Code JavaScript》(JavaScript 代碼整潔之道),這是根據《代碼整潔之道》作者多年經驗整理的 JS 代碼優化建議,但也僅僅只是一份建議。
28、wenyan-lang:文言文編程語言。文言文語法,可以編譯成 JavaScript、Python 或者 Ruby,你見過用文言文編寫程序嗎?快來試試吧。
29、short_url:Elixir 語言開發的支持自定義短碼的短鏈接服務。新手可以參考該項目源碼和原理解析,理解、實現短鏈接服務的同時,體驗用 Elixir 語言開發一個 Web 服務。
30、pytest-chinese-doc:pytest 自動化測試框架的官方文檔(5.1.3 版本)的中文翻譯。但不僅僅是簡單的翻譯:
更多的示例:所有的示例代碼都在 docs 目錄下,以章節劃分,盡量覆蓋每個知識點
更多的拓展閱讀:添加了學習時所查閱的資料、閱讀的源碼等,也是作者學習和思考的歷程
開源書籍
31、machine-learning-systems-design:一本關于機器學習系統設計的小冊子附有練習題
32、front-end-handbook-2019:《Front-End Developer Handbook 2019》(前端開發者手冊 2019 版)。該書適合任何階段的人用來了解前端開發實踐的指南,它概述和討論了前端工程的實踐:如何學習前端、在 2019 年進行前端實踐時應該使用哪些工具。
機器學習
33、SSD-Pytorch:完整的目標檢測項目。結構簡潔明了,中文注釋。適宜新手入門、目標檢測任務參考,甚至直接基于本項目實現目標檢測任務。示例代碼:
# 實例化模型:模型的具體各種參數在 Config 文件中進行配置 net = SSD(cfg) # 將模型移動到 GPU 上,cfg.DEVICE.MAINDEVICE 定義了模型所使用的主 GPU # 模型的參數更新會在主 GPU 上進行 net.to(cfg.DEVICE.MAINDEVICE)# 初始化訓練器:訓練器參數已通過 cfg 進行配置;也可傳入參數進行配置(但不建議) trainer = Trainer(cfg, max_iter=None, batch_size=None,train_devices=None, model_save_step=None,model_save_root=None, vis = None, vis_step=None) # 訓練器開始:在數據集上訓練模型 trainer(net, train_dataset)34、AIDungeon:一個基于機器學習的地下城文字游戲。此項目介紹了如何使用機器學習構建一個游戲,代碼簡單清晰適合 AI 愛好者深入研究
35、face_recognition:上手快速、簡單易用的人臉識別庫。該庫使用 dlib 頂尖的深度學習人臉識別技術構建,在戶外臉部檢測數據庫基準(Labeled Faces in the Wild benchmark)上的準確率高達 99.38%。同時提供了一個簡單的面部識別命令行工具,允許您對來自命令行的圖像文件夾進行面部識別。完整的開發文檔和應用案例,并且兼容樹莓派系統(對配置要求低),對于初學者來說可以通過這個項目感受人臉識別或機器學習帶來的樂趣。示例代碼:
最后
如果你發現了 GitHub 上有趣的項目,歡迎在 HelloGitHub 項目提 issues?告訴我們。
參考資料
[1]HelloGitHub:?https://hellogithub.com
[2]點擊查看往期內容:?https://github.com/521xueweihan/HelloGitHub#內容
關注公眾號加入交流群,一起討論有趣的技術話題
如果你發現了 GitHub 上有趣的項目,歡迎在 HelloGitHub 項目提 issues 告訴我們。
“閱讀原文”獲取更多信息、“在看”讓本文被更多人看到、“贊賞”支持我們。
總結
以上是生活随笔為你收集整理的《HelloGitHub》第 45 期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos添加第二张网卡
- 下一篇: 八卦는 生命의 運動 (韓長庚 易學原理