《HelloGitHub》第 56 期

興趣是最好的老師,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:基於 Bootstrap 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 告訴我們。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章