《HelloGitHub》第 56 期

削微寒發表於2020-11-27

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

相關文章