興趣是最好的老師,HelloGitHub 就是幫你找到興趣!javascript
分享 GitHub 上有趣、入門級的開源項目。html
這是一個面向編程新手、熱愛編程、對開源社區感興趣 人羣的月刊,月刊的內容包括:各類編程語言的項目、讓生活變得更美好的工具、書籍、學習筆記、教程等,這些開源項目大多都是很是容易上手,並且很是 Cool。主要是但願你們能動手用起來,加入到開源社區中。前端
在瀏覽、參與這些項目的過程當中,你將學習到更多編程知識、提升編程技巧、找到編程的樂趣。java
🎉 最後 HelloGitHub 這個項目就誕生了 🎉python
如下爲本期內容|每月 28 號發佈最新一期|點擊查看往期內容react
一、smartdns:一個運行在本地的 DNS 服務器。可以提升網絡訪問速度等諸多妙用,架構圖以下:android
二、xmake:一個基於 Lua 的輕量級跨平臺自動構建工具。支持在各類主流平臺上構建項目,主要用於解決 C/C++ 項目的跨平臺構建,同時支持與其餘語言的混合編譯。工程配置語法簡單易讀,對初學者友好、上手方便git
add_requires("libuv master", "ffmpeg", "zlib 1.20.*", "tbox >1.6.1") target("test") set_kind("shared") add_files("src/*.c") add_packages("libuv", "ffmpeg", "tbox", "zlib")
三、gui.cs:支持 Windows 和 Linux/Unix 的 .NET 終端 UI 工具庫。方便實現終端 GUI 工具,而且能夠實現終端中用鼠標啦github
四、Blog.Core:基於 ASP.NET Core 和 Vue 從零開始搭建先後端分離項目教程+實戰項目。該項目從 .NET Core 基礎講起,內容完整、系統,對初學者和有必定基礎的小夥伴都有借鑑和學習的價值面試
五、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;
六、xournalpp:一款支持 PDF 手寫註釋的筆記軟件,支持 Linux、Windows、macOS 平臺。看書的時候喜歡標註、作筆記,那這款工具確定適合你。下載地址
七、pika:一個企業級開源的可持久化的大容量(百G)redis 存儲服務。兼容 redis 的絕大部分接口,解決 redis 因爲存儲數據量巨大而致使內存不夠用的容量瓶頸。而且能夠像 redis 同樣,經過 slaveof 命令進行主從備份,支持全同步和部分同步
八、pg_flame:Postgres 數據庫性能分析工具,把 EXPLAIN ANALYZE
結果經過火焰圖展現
九、goproxy:Go 模塊安裝代理工具。還在由於安裝 Go 項目依賴失敗而抓耳撓腮嗎?快試試這個項目吧
十、gods:簡單易用的 Go 語言各類數據結構和算法,並封裝成了一個庫,開箱即食。示例代碼:
type Stack interface { Push(value interface{}) Pop() (value interface{}, ok bool) Peek() (value interface{}, ok bool) containers.Container // Empty() bool // Size() int // Clear() // Values() []interface{} }
十一、gowp:Go 高性能異步併發線程池。接口調用簡單、支持錯誤返回、不管排隊多少任務,都不會阻止提交任務。可用於控制併發訪問、併發執行。示例代碼:
package main import ( "fmt" "time" "github.com/xxjwxc/gowp/workpool" ) func main() { wp := workpool.New(10) //設置最大線程數 for i := 0; i < 20; i++ { //開啓20個請求 ii := i wp.Do(func() error { for j := 0; j < 10; j++ { //每次打印0-10的值 time.Sleep(1 * time.Second) } return nil }) } wp.Wait() fmt.Println("down") }
十二、gf:一款高性能、功能豐富的 Go Web 框架。特色:
1三、SnowJena:基於令牌桶算法實現的分佈式無鎖限流框架。簡單易用的 API,開箱即用、支持熔斷降級、動態配置規則、可視化監控等功能。示例代碼:
public class AppTest { Logger logger = LoggerFactory.getLogger(getClass()); /** * 本地限流 */ @Test public 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"); } } } }
1四、holer:一個將局域網中的應用映射到公網訪問的端口映射軟件,支持轉發基於 TCP 協議的報文。內網穿透工具,包含 Web 後臺管理系統。用到的技術以下:
1五、miaosha:一款秒殺系統設計與實現。高併發大流量的秒殺是面試常見問題,該項目不只有具體問題的解決思路,還有具體代碼實現和示例 demo,所有理解、學習後相信秒殺問題再也攔不住你啦
1六、postwoman:一款基於 Node.js 的免費開源、便捷美觀的 API 調試工具。它是調試接口的利器,可以儘快的發現問題提升開發效率。相信體會過 Postman 的同窗,看到這個項目的名字就已經躍躍欲試了
1七、react-text-loop:實現文字循環展現的 React 組件
1八、uform:一款面向企業級複雜場景的高性能表單解決方案。特性:
1九、rc-bullets:基於 CSS3 Animation 使用 React 構建的彈幕組件。演示地址,支持功能:
import React, { useEffect, useState } from 'react'; import BulletScreen, { StyledBullet } from 'rc-bullets'; const headUrl='https://zerosoul.github.io/rc-bullets/assets/img/heads/girl.jpg'; export default function Demo() { // 彈幕屏幕 const [screen, setScreen] = useState(null); // 彈幕內容 const [bullet, setBullet] = useState(''); useEffect(() => { // 給頁面中某個元素初始化彈幕屏幕,通常爲一個大區塊 let s = new BulletScreen('.screen'); // or // let s=new BulletScreen(document.querySelector('.screen)); setScreen(s); }, []); // 彈幕內容輸入事件處理 const handleChange = ({ target: { value } }) => { setBullet(value); }; // 發送彈幕 const handleSend = () => { if (bullet) { // push 純文本 screen.push(bullet); // or 使用 StyledBullet screen.push( <StyledBullet head={headUrl} msg={bullet} ></StyledBullet> ); // or 還能夠這樣使用,效果等同使用 StyledBullet 組件 screen.push({msg:bullet,head:headUrl,color:"#eee" bgColor:"rgba(2,2,2,.3)"}) } }; return ( <main> <div className="screen" style={{ width: '100vw', height: '80vh' }}></div> <input value={bullet} onChange={handleChange} /> <button onClick={handleSend}>發送</button> </main> ); }
20、react-loading:一款輕量、開箱即用而且支持按需加載的 React 動畫組件庫。示例代碼:
import React from 'react'; import { DisappearedLoading } from 'react-loadingg'; const Container = () => <DisappearedLoading ></DisappearedLoading>; export default Container;
2一、SketchyComponent:一款 Android 上的手繪風格組件庫。該庫提供了一些基礎圖形和 icon,以及便捷的自定義能力。以前介紹過手繪風格的圖表庫你們很喜歡,這回是 Android 組件庫不知道對不對你們的胃口。示例代碼:
// 1. 建立 Sketchy 圖形 val skSquareDrawable = SkSquareDrawable().apply { // 2. 設置屬性 fillColor = resources.getColor(android.R.color.holo_orange_dark) } // 3. 給 View 設置背景 text.background = skSquareDrawable
2二、memory_profiler:Python 程序內存佔用分析工具。示例代碼:
# 採用裝飾器的方式引用,不影響現有代碼 @profile def my_func(): a = [1] * (10 ** 6) b = [2] * (2 * 10 ** 7) del b return a if __name__ == '__main__': my_func() # 運行命令:python -m memory_profiler example.py # 輸出: Line # Mem usage Increment Line Contents ============================================== 3 @profile 4 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 b 8 13.61 MB 0.00 MB return a
2三、PySimpleGUI:Python GUI 編程庫,它是將 tkinter、Qt、Remi、WxPython 封裝成更人性化的接口。示例代碼和效果以下:
import PySimpleGUI as sg sg.theme('DarkAmber') # 設置主題顏色 # 界面內包含的東西 layout = [ [sg.Text('Some text on Row 1')], [sg.Text('Enter something on Row 2'), sg.InputText()], [sg.Button('Ok'), sg.Button('Cancel')] ] # 建立窗口 window = sg.Window('Window Title', layout) # 監聽事件 while True: event, values = window.read() if event in (None, 'Cancel'): # 用戶點擊取消按鈕事件 break print('You entered ', values[0]) window.close()
2四、mitmproxy:基於 Python 語言開發的抓包工具。支持命令行、Web 平臺的形式展現抓包結果,還能經過 Python 引用庫來攔截、控制響應和請求。下圖展現爲命令行使用界面(類 vim 操做)
2五、PythonPlantsVsZombies:Python 語言編寫的植物大戰殭屍。學習如何使用 Python 編寫小遊戲的極佳例子,運行步驟:
1. 須要 Python 3 2. 安裝依賴庫:pip install pygame 3. python main.py
2六、pghero:Postgres 性能監控服務。讓你對 pg 數據庫的性能瞭如指掌
2七、clean-code-javascript:《Clean Code JavaScript》(JavaScript 代碼整潔之道),這是根據《代碼整潔之道》做者多年經驗整理的 JS 代碼優化建議,但也僅僅只是一份建議。中文
2八、wenyan-lang:文言文編程語言。文言文語法,能夠編譯成 JavaScript、Python 或者 Ruby,你見過用文言文編寫程序嗎?快來試試吧。在線嘗試
2九、short_url:Elixir 語言開發的支持自定義短碼的短連接服務。新手能夠參考該項目源碼和原理解析,理解、實現短連接服務的同時,體驗用 Elixir 語言開發一個 Web 服務。在線嘗試
30、pytest-chinese-doc:pytest 自動化測試框架的官方文檔(5.1.3 版本)的中文翻譯。但不只僅是簡單的翻譯:
3一、machine-learning-systems-design:一本關於機器學習系統設計的小冊子附有練習題
3二、front-end-handbook-2019:《Front-End Developer Handbook 2019》(前端開發者手冊 2019 版)。該書適合任何階段的人用來了解前端開發實踐的指南,它概述和討論了前端工程的實踐:如何學習前端、在 2019 年進行前端實踐時應該使用哪些工具。在線閱讀
3三、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)
3四、AIDungeon:一個基於機器學習的地下城文字遊戲。此項目介紹瞭如何使用機器學習構建一個遊戲,代碼簡單清晰適合 AI 愛好者深刻研究
3五、face_recognition:上手快速、簡單易用的人臉識別庫。該庫使用 dlib 頂尖的深度學習人臉識別技術構建,在戶外臉部檢測數據庫基準(Labeled Faces in the Wild benchmark)上的準確率高達 99.38%。同時提供了一個簡單的面部識別命令行工具,容許您對來自命令行的圖像文件夾進行面部識別。完整的開發文檔和應用案例,而且兼容樹莓派系統(對配置要求低),對於初學者來講能夠經過這個項目感覺人臉識別或機器學習帶來的樂趣。示例代碼:
# 定位圖片中的全部人臉: import face_recognition image = face_recognition.load_image_file("your_file.jpg") face_locations = face_recognition.face_locations(image) # 識別人臉關鍵點,包括眼睛、鼻子、嘴和下巴 import face_recognition image = face_recognition.load_image_file("your_file.jpg") face_landmarks_list = face_recognition.face_landmarks(image)
「看完了,還不夠? <往期內容> | 還不過癮,那就看看天天更新的前端日報吧 <今日前端> 」
若是你發現了好玩、有意義的開源項目 點擊這裏 分享你以爲有趣的項目。
若是你發現了 GitHub 上有趣的項目,歡迎在 HelloGitHub 項目提 issues 告訴咱們。