興趣是最好的老師,HelloGitHub 就是幫你找到興趣!
簡介
分享 GitHub 上有趣、入門級的開源專案。
這是一個面向程式設計新手、熱愛程式設計、對開源社群感興趣 人群的月刊,月刊的內容包括:各種程式語言的專案、讓生活變得更美好的工具、書籍、學習筆記、教程等,這些開源專案大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社群中。
- 會程式設計的可以貢獻程式碼
- 不會程式設計的可以反饋使用這些工具中的 Bug
- 幫著宣傳你覺得優秀的專案
- Star 專案⭐️
在瀏覽、參與這些專案的過程中,你將學習到更多程式設計知識、提高程式設計技巧、找到程式設計的樂趣。
? 最後 HelloGitHub 這個專案就誕生了 ?
以下為本期內容|每個月 28 號釋出最新一期|點選檢視往期內容
C 專案
1、ucore:清華大學作業系統課程,配套實驗專案。推薦給有計算機結構原理、C 和彙編、資料結構基礎並對作業系統感興趣的同學,專案中包含教學視訊、練習題、實驗指導書等
C# 專案
2、RevokeMsgPatcher:適用於 Windows 系統下電腦版微信、QQ 的防撤回工具
3、ContextMenuManager:一個純粹的 Windows 右鍵選單管理程式。功能:
- 啟用或禁用檔案、資料夾、新建、傳送到、開啟方式等右鍵選單專案
- 右鍵選單專案進行修改名稱、修改圖示、導航登錄檔位置、永久刪除等操作
- 右鍵選單自定義新增專案,自定義選單命令
C++ 專案
4、spdlog:快速、上手簡單的 C++ 日誌庫。示例程式碼:
#include "spdlog/spdlog.h"
int main()
{
spdlog::info("Welcome to spdlog!");
spdlog::error("Some error message with arg: {}", 1);
spdlog::warn("Easy padding in numbers like {:08d}", 12);
spdlog::critical("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42);
spdlog::info("Support for floats {:03.2f}", 1.23456);
spdlog::info("Positional args are {1} {0}..", "too", "supported");
spdlog::info("{:<30}", "left aligned");
spdlog::set_level(spdlog::level::debug); // Set global log level to debug
spdlog::debug("This message should be displayed..");
// change log pattern
spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
// Compile time log levels
// define SPDLOG_ACTIVE_LEVEL to desired level
SPDLOG_TRACE("Some trace message with param {}", 42);
SPDLOG_DEBUG("Some debug message");
}
5、srpc:搜狗基於 C++ Workflow 的高效能 RPC 框架。與 thrift/brpc 協議相容,支援 protobuf/thrift IDL一鍵遷移,核心程式碼量僅 1w 行。示例程式碼:
class ExampleServiceImpl : public Example::Service
{
public:
void Echo(EchoRequest *request, EchoResponse *response, RPCContext *ctx) override
{
response->set_message("Hi, " + request->name());
}
};
int main()
{
SRPCHttpServer server;
ExampleServiceImpl impl;
server.add_service(&impl);
server.start(1412);
pause();
server.stop();
return 0;
}
訪問:
curl 127.0.0.1:1412/Example/Echo -H 'Content-Type: application/json' -d '{message:"from curl",name:"CURL"}'
CSS 專案
6、tailwindcss:基於比元件更小、更靈活的工具類(utility-first)思想的 CSS 框架。這個思想簡單來說就是用 class 保證靈活、便於自定義元件,而不是在元件基礎上實現個性化。網上對這個框架褒貶不一,但我覺得挺好想學一下
Go 專案
7、inlets:基於 Go 實現的免費內網穿透服務,即將本地服務暴露到公網。如果覺得之前的內網穿透工具不好用、還貴的話,可以試試這個專案,使用說明
8、syncthing:一個採用 Go 語言編寫的免費、跨平臺的檔案同步工具。它不需要安裝,只需要下載對應系統的壓縮包解壓後就可以直接執行和使用。擁有命令列、Web 和桌面程式多種操作模式,同時支援內網和網際網路的檔案同步,可以用來搭建私有網盤。又一個代替付費網盤的選擇,如果考慮到昂貴的寬費用。可以把 syncthing 做為區域網下手機、電視和電腦共享檔案的開源解決方案
9、lazykube:支援滑鼠操作和管理 K8s 的命令列工具。對比 k9s 命令列工具,可以不用去記那麼多快捷鍵,直接用滑鼠操作。解決公司不使用 rancher 和 dashboard 管理 K8s,只能通過堡壘機訪問的場景。使用該工具只需要終端和滑鼠,當然用到搜尋功能時還是需要鍵盤的 ?
10、go-zero:一個可靠的 Go 語言 Web 和 RPC 框架。就算是 Go 新手基於該框架,也可以快速寫出高效能可擴充套件的微服務。示例程式碼:
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
ctx := svc.NewServiceContext(c)
server := rest.MustNewServer(c.RestConf)
defer server.Stop()
handler.RegisterHandlers(server, ctx)
server.Start()
}
Java 專案
11、Mindustry:一款 Java 編寫的免費沙盒塔防遊戲。支援多平臺:Windows、Linux、macOS、Android
12、fiction_house:一個基於 SpringBoot 實現的小說和漫畫線上閱讀網站。網站功能齊全、資源豐富,同時支援 Web、安卓、微信小程式多平臺。服務端分為網站和管理後臺,採用 SpringBoot、MyBatis、MySQL、Redis 等技術實現,可當作 Java 新手實戰專案學習
JavaScript 專案
13、AdminLTE:基於 Bootstarp 4.5 和 jQuery 的後臺管理前端模版
14、blockly:不會程式設計也可以寫程式碼,通過拖拽模組自動生成程式碼的 Web 編輯器。谷歌開源的一個視覺化程式設計的前端專案,支援自動生成:Python、JavaScript、PHP 等程式語言的程式碼,線上嘗試的地址網路不好,可以通過 npm install blockly
安裝後使用和學習
15、screenity:一個強大的螢幕錄製和標註的 Chrome 外掛。特性:
- ? 可以錄製任何應用的內容,包含“色相頭”
- ✏️ 在螢幕上的任何地方,新增文字和箭頭等註釋
- ? 突出你的點選操作、游標
- ? 支援匯出為 mp4、gif 等常用格式
- ✂️ 修剪或刪除錄影
16、vue-luck-draw:一個基於 Vue 的大轉盤/九宮格抽獎外掛。線上嘗試,特性:
- 可自由配置獎品、中獎概率等
- 支援同步、非同步式抽獎
- 適配移動端
- 等等
17、piano:基於 Omi 和 Omi Snippets 構建的鋼琴應用。你不需要懂樂理知識,僅用鍵盤即可彈奏簡單而熟悉的音樂,也藉此專案感謝音樂和程式設計的陪伴!也致敬各位奮鬥於 996 的程式碼家和打工人,音樂不曾辜負任何人,正如 Leehom Wang 歌曲中唱到:如果世界太危險,只有音樂最安全,帶著我進夢裡面,讓歌詞都實現!上面這段是作者寫的推薦語,我本來想從專案的角度再誇下這個專案,但我放棄了。雖然我之前推薦過的那個鋼琴專案彈的比這個要好聽,但我更喜歡這個專案。因為我從他的專案中感受到滿滿敬意和“愛”,致敬每一位奮鬥的“程式碼家”,HG 愛你們。線上嘗試,示例程式碼:
playSong(song) {
this.setSong([...song])
let offset = 0
let time = 0
let playSong = async () => {
// 右邊是從外部來中斷遞迴
if (offset < song.length && this.store.data.song.length > 0) {
switch (typeof song[offset]) {
// 簡譜2演奏方法 根據 ++12345--6. 簡單旋律情況
case 'string':
let letters = song[offset].match(/[0-9]/g)
switch (letters.length) {
case 1:
time = this.handleString(song, offset)
break
default:
time = this.handleStrings(song, offset)
break
}
break
// 簡譜1演奏方法 根據 CDEFGAB,複雜旋律情況,比如有和絃
case 'object':
console.log(song[offset]['note'])
time = song[offset]['time'];
this.playNote(song[offset]['note'])
break;
case 'number':
// 休止符
switch (song[offset]) {
case 0:
time = 1000
break
}
break
}
await new Promise((resolve) => {
let timer = setTimeout(() => {
clearInterval(timer)
resolve()
}, time)
})
offset++
// 自定義事件,跟下面底部的音符自動跳動結合
this.add()
playSong()
} else {
// 暫停播放
clearTimeout(this.timer)
this.store.data.song = []
this.store.data.count = 0
return
}
}
playSong()
}
Objective-C 專案
18、Sloth:一款 macOS 系統下顯示程式開啟的檔案、socket、管道等資訊的工具。就像桌面版的 lsof,快來試試吧
PHP 專案
19、freenom:自動續期 Freenom 免費域名的工具。Freenom 是一個提供免費頂級域名的商家,不過申請的域名需要每年定時續期,否則會被回收。有了這個專案,白 piao 頂級域名就是那麼簡單
Python 專案
20、running_page:一個展示個人跑步主頁的 Python 專案。特性:
- GitHub Actions 管理自動同步跑步程式及自動生成新的頁面
- Gatsby 生成的靜態網頁,速度快
- Mapbox 進行地圖展示
- 支援 Nike、Runtastic、佳明、Keep 的資料
- 自動備份 gpx 資料,方便備份及上傳到其它軟體
21、gopup:採集各種權威公開資料的 Python 庫。示例程式碼:
# 安裝:pip isntall gopup
import gopup as gp
covid_baidu_df = gp.covid_baidu(indicator="熱搜謠言粉碎")
print(covid_baidu_df)
22、flask-state:一款輕便的機器狀態監控 Flask 外掛。示例程式碼:
flask_state.init_app(app)
// npm
import 'echarts';
import 'flask-state/flask-state.min.css';
import {init} from 'flask-state';
// Create a DOM node with ID 'test'. After init() binds the node, click to open the listening window
init({dom:document.getElementById('test')});
23、python-cheatsheet:全面且實用的 Python 備忘錄。這個東西特別適合我這個上了年紀的人,比如:忘記怎麼用 Python 寫正則、要搞個進度條忘記庫的名字和基本用法、用 pandas 處理資料忘記方法需要的引數等等。正當我覺得自己需要“回爐重學”的時候發現了這個專案,有了它上面的問題都可以找到拿來即用的程式碼片段。我又是那個快樂的 Pythoneer 了,示例程式碼:
# $ pip3 install tqdm
>>> from tqdm import tqdm
>>> from time import sleep
>>> for el in tqdm([1, 2, 3], desc='Processing'):
... sleep(1)
Processing: 100%|████████████████████| 3/3 [00:03<00:00, 1.00s/it]
Swift 專案
24、eul:一款極簡免費的 macOS 狀態監控工具。我就在用,強烈推薦給你
其它
25、winapps:一個讓你在 Linux (Ubuntu/Fedora) 系統裡使用 Windows 辦公軟體的專案。支援 Microsoft Excel、Word、PowerPoint、Adobe Photoshop 等
26、Front-End-Interview-Notebook:一份非拼湊、優秀的前端面試複習筆記。以提問方式發出問題,並給出了作者的答案,內容涵蓋:HTML、CSS、JS、演算法、計算機網路等方面。作者拿到了很多大廠 offer,然後把這些東西總結整理下來送給準備面試、換工作的前端小夥伴
27、pi-hole:一個免費開源、部署簡單的 DNS sinkhole 專案。沒關係,我也不明白 DNS sinkhole 是個啥,就知道用它可實現路由器層遮蔽廣告的功能。需要先在樹莓派安裝這個專案,然後配合支援自定義 DNS 的路由器,就可以實現該網路下的全裝置廣告自動遮蔽。詳細步驟
28、CopyTranslator:支援網頁和 PDF 的劃詞翻譯工具。有了它就可以解決閱讀 PDF 檔案時,要翻譯大段內容情況下的亂碼、換行、翻譯不準的問題
29、styleguide:谷歌的程式碼風格指南。每個大型專案都有自己的程式碼風格,當程式碼的風格統一時將更容易被理解。本專案是谷歌專案的程式碼風格說明,包含:C++、C#、Swift、Python、Java 等語言
30、upptime:一個免費開源的網站正常執行時間(uptime)監控服務。之所沒有任何費用是因為實現方法都是完全基於 GitHub 提供的免費服務,比如:使用 GitHub 的 Action 每隔 5 分鐘訪問一次目標網站,獲取網站最新的狀態。然後通過 GitHub Issues 記錄和報告異常,最後在 GitHub Pages 上視覺化展示網站的執行狀態。就很“綠色無公害”,我特別喜歡
機器學習
31、examples:關於視覺、本文等方面的 PyTorch 的示例集合。包含:使用 Convnets 的影像分類(MNIST)、生成對抗網路(DCGAN)等
32、EasyOCR:支援多種語言的即用型的 Python OCR 庫,包括中文、日文、韓文等。示例程式碼:
import easyocr
reader = easyocr.Reader(['ch_sim','en']) # need to run only once to load model into memory
result = reader.readtext('chinese.jpg')
# 輸出
[([[189, 75], [469, 75], [469, 165], [189, 165]], '愚園路', 0.3754989504814148),
([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.40452659130096436),
([[517, 81], [565, 81], [565, 123], [517, 123]], '東', 0.9989598989486694),
([[78, 126], [136, 126], [136, 156], [78, 156]], '315', 0.8125889301300049),
([[514, 126], [574, 126], [574, 156], [514, 156]], '309', 0.4971577227115631),
([[226, 170], [414, 170], [414, 220], [226, 220]], 'Yuyuan Rd.', 0.8261902332305908),
([[79, 173], [125, 173], [125, 213], [79, 213]], 'W', 0.9848111271858215),
([[529, 173], [569, 173], [569, 213], [529, 213]], 'E', 0.8405593633651733)]
33、DeepLearningProject:哈佛大學開源的深度學習教程
最後
如果你發現了 GitHub 上有趣的專案,歡迎在 HelloGitHub 專案提 issues 告訴我們。