開源專案月刊《HelloGitHub》第 60 期

HelloGitHub發表於2021-03-29

興趣是最好的老師,HelloGitHub 就是幫你找到興趣!

簡介

分享 GitHub 上有趣、入門級的開源專案。

這是一個面向程式設計新手熱愛程式設計對開源社群感興趣 人群的月刊,月刊的內容包括:各種程式語言的專案讓生活變得更美好的工具書籍、學習筆記、教程等,這些開源專案大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社群中。

  • 會程式設計的可以貢獻程式碼
  • 不會程式設計的可以反饋使用這些工具中的 Bug
  • 幫著宣傳你覺得優秀的專案
  • Star 專案⭐️

在瀏覽、參與這些專案的過程中,你將學習到更多程式設計知識提高程式設計技巧找到程式設計的樂趣

? 最後 HelloGitHub 這個專案就誕生了 ?


以下為本期內容|每個月 28 號釋出最新一期|點選檢視往期內容

C 專案

1、si78c:用 C 語言實現的《太空侵略者》命令列遊戲

2、rtty:能夠通過 Web 登入 Linux 終端的開源專案。採用 C 語言實現,算上依賴庫體積不到 100KB,可用於嵌入式 Linux 裝置。擁有 Web 管理介面,用此專案可以方便地遠端維護 Linux 裝置

C# 專案

3、osu:支援多平臺的同人節奏免費開源遊戲。遊戲中玩家隨著音樂的節奏,點選介面上圈圈、隨著軌跡拖拽和旋轉。從最初(07 年)僅支援 Windows 平臺,到目前已經擴充套件到支援 Linux、macOS、iOS、Android 等平臺,並且還在持續維護和開發,我試玩了下感覺很有意思,快下載下來玩玩吧!

4、nopCommerce:免費開源的 ASP.NET 電子商城平臺。該專案始於 2008 年,由專業團隊開發和維護,大而全的商城專案。支援 Windows、Linux、macOS 平臺,還有支援開箱即用的 Docker 部署方式

5、Ryujinx:用 C# 寫的任天堂 Switch 遊戲機模擬器。該專案還處於實驗階段,穩定性欠佳同時機器配置要求 8G 以上的記憶體,有探險精神的小夥伴可以試試

C++ 專案

6、Serial-Studio:一款 C++ 寫的資料視覺化桌面工具。支援多平臺,效果和操作步驟如下:

7、jwEngine:一個跨平臺、輕量級、支援 C++ 和 Lua 的 Web 框架。支援 TCP、KCP、WebSocket、HTTP 等協議,底層採用 libuv 非同步 IO 提高併發,避免多執行緒上下文切換開銷和破壞程式碼美感,網路部分和邏輯部分使用一個主事件迴圈驅動。支援 Lua 提高開發效率,適用於小型遊戲開發,示例程式碼:

event_init()

server = NetServer:new()
server.on_accept = function(conn)
end

server.on_close = function(conn)
end

server.on_msg = function(conn, msgtype, pack)
end

server:listen("127.0.0.1", 3001, false)

event_run()
複製程式碼

Go 專案

8、dns:簡單易用高效能的 Go DNS 庫。示例程式碼:

package main

import (
    "github.com/miekg/dns"
    "net"
    "os"
    "log"
    "fmt"
)

func main() {
    config, _ := dns.ClientConfigFromFile("/etc/resolv.conf")
    c := new(dns.Client)

    m := new(dns.Msg)
    m.SetQuestion(dns.Fqdn(os.Args[1]), dns.TypeMX)
    m.RecursionDesired = true

    r, _, err := c.Exchange(m, net.JoinHostPort(config.Servers[0], config.Port))
    if r == nil {
        log.Fatalf("*** error: %s\n", err.Error())
    }

    if r.Rcode != dns.RcodeSuccess {
            log.Fatalf(" *** invalid answer name %s after MX query for %s\n", os.Args[1], os.Args[1])
    }
    // Stuff must be in the answer section
    for _, a := range r.Answer {
            fmt.Printf("%v\n", a)
    }
}
複製程式碼

9、pretty:漂亮的 Go Printf 開源三方庫。示例程式碼:

package main

import (
	"fmt"

	"github.com/kr/pretty"
)

func main() {
	type myType struct {
		a, b int
	}
	var x = []myType{{1, 2}, {3, 4}, {5, 6}}
	fmt.Printf("%# v", pretty.Formatter(x))
}

Output:
[]pretty_test.myType{
    {a:1, b:2},
    {a:3, b:4},
    {a:5, b:6},
}
複製程式碼

10、act:該專案可以讓你在本地除錯 GitHub Actions 指令碼。GitHub Actions 是 GitHub 提供的倉庫自動工作流程功能,使用者可以利用 GitHub 提供的免費計算機資源輕鬆實現 CI/CD,還可以用來做很多有意思的事情。但是在編寫 actions 指令碼時,想除錯指令碼或得到執行結果,只能 push 到遠端倉庫等待執行結束,沒有辦法在本地除錯和檢視結果。有了 act 這個專案,就可以在本地輕鬆除錯 actions 啦,是不是很棒

Java 專案

11、QNotified:讓執行在安卓系統上的 QQ 變得更好用的開源 Xposed 模組。Xposed 是一個執行於 Android 作業系統的 Hook 框架,可以理解為安卓作業系統的外掛!安裝本工具後,可在 QQ 自帶的設定中點選 QNotified 即可開啟“超級”模式。支援:

  • 防撤回
  • 被刪除好友通知
  • 遮蔽 @全體成員 或者 群紅包 的通知
  • 批量撤回訊息
  • 等等

JavaScript 專案

12、MarioHTML:用 TypeScript 寫的馬里奧網頁遊戲。線上試玩

13、semaphore:好看的 Ansible UI 專案。受夠了 Ansible 老氣的介面了嗎?那就試試這個專案吧

14、ChatUI:專注於對話領域的 UI 開源專案。可以幫助使用者快速搭建體驗友好的機器人對話介面,特性:

  • 最佳實踐:基於阿里小蜜業務積累和打磨的對話式互動最佳實踐
  • TypeScript:使用 TypeScript 開發,提供完整的型別定義檔案
  • 響應式:響應式佈局,在無線和 PC 端都可以友好展現
  • 主題:支援靈活的樣式定製,以滿足業務和品牌上多樣化的視覺需求
  • 國際化:支援多語言和本土化特性
import Chat, { Bubble, useMessages } from '@chatui/core';
import '@chatui/core/dist/index.css';

const App = () => {
  const { messages, appendMsg, setTyping } = useMessages([]);

  function handleSend(type, val) {
    if (type === 'text' && val.trim()) {
      appendMsg({
        type: 'text',
        content: { text: val },
        position: 'right',
      });

      setTyping(true);

      setTimeout(() => {
        appendMsg({
          type: 'text',
          content: { text: 'Bala bala' },
        });
      }, 1000);
    }
  }

  function renderMessageContent(msg) {
    const { content } = msg;
    return <Bubble content={content.text} ></Bubble>;
  }

  return (
    <Chat
      navbar={{ title: '智慧助理' }}
      messages={messages}
      renderMessageContent={renderMessageContent}
      onSend={handleSend}
    ></Chat>
  );
};
複製程式碼

15、edex-ui:一款跨平臺基於 Electron 的炫酷終端工具。好萊塢級別的終端使用體驗,擁有漂亮的啟動動畫、浮誇的音效,還能夠直觀地展示檔案目錄、系統資源、網路等資訊

16、cool-admin-midway:一款基於 Node.js+midway.js 的後臺許可權管理系統。它開源免費不僅能夠快速開發增刪改查的需求,還支援 Serverless、Docker 等多種方便的部署方式,不管是用來學習如何開發管理後臺,還是快速開發都是不錯的選擇

PHP 專案

17、PHPMailer:應該是最流行的 PHP 發郵件的開源庫。很多知名 PHP 開源專案中都有它的身影,比如:WordPress、Yii 等,支援你對發郵件的所有開發需求。看看示例程式碼,就知道使用起來有多簡單啦:

<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

//Load Composer's autoloader
require 'vendor/autoload.php';

//Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
    //Server settings
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
    $mail->isSMTP();                                            //Send using SMTP
    $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
    $mail->Username   = 'user@example.com';                     //SMTP username
    $mail->Password   = 'secret';                               //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
    $mail->Port       = 587;                                    //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above

    //Recipients
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
    $mail->addAddress('ellen@example.com');               //Name is optional
    $mail->addReplyTo('info@example.com', 'Information');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');

    //Attachments
    $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name

    //Content
    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
複製程式碼

18、dompdf:一個 HTML 轉 PDF 的 PHP 庫。示例程式碼:

// reference the Dompdf namespace
use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
複製程式碼

19、video_spider:視訊去水印工具。原理很簡單就是根據輸入的視訊的地址,返回原平臺無水印的視訊源地址。目前支援 15 個視訊平臺,線上嘗試

Python 專案

20、ArchiveBox:基於 Python 實現的網站歸檔平臺。就是可以自動把網頁(HTML、PDF、圖片等)變成靜態頁面,下載到本地儲存和管理的工具。可以用來做映象站、檔案館、離線閱讀等

21、Airtest:適用於移動端應用的跨平臺 UI 自動化框架。基於影像識別定位元素,可能都不需要一行程式碼就可以很方便地用它來測試 APP 或刷遊戲

22、lux:一個用於資料科學方面的 Python 開源庫。這個庫適用於實驗室分析資料的場景,基於 Jupyter 的資料視覺化和操作介面,再加上 pandas 豐富的資料接入方式以及強大的資料處理能力,讓資料的分析變得簡單從而可以更加直觀地找到資料背後藏著的“真理”

23、qutebrowser:基於 PyQt5 編寫的 Vim 操作方式的瀏覽器。支援 Linux,Windows 和 macOS 作業系統,可以先安裝體驗下。然後再看看原始碼學習如何用 Python 寫瀏覽器

Swift 專案

24、flappy-fly-bird:用 Swift 寫的 Flappy Bird 遊戲

25、Hue:一個集合多功能於一體的著色工具。在 iOS 開發中非常好用,可以快速簡單的進行 UI 的顏色設定、透明度修改、設定漸變顏色、修改圖片的顏色等。相比於使用 Swift 原生繁重複雜的 RGBA 顏色 API,Hue 僅需要一行程式碼,簡潔易用。示例程式碼:

// 設定 16 進位制顏色
let white = UIColor(hex: "#ffffff")
let black = UIColor(hex: "#000000")

// 設定 alpha
let colorWithAlpha = myColor.alpha(0.75)

// 設定漸變
let gradient = [UIColor.blackColor(), UIColor.orangeColor()].gradient()

let secondGradient = [UIColor.blackColor(), UIColor.orangeColor()].gradient { gradient in
  gradient.locations = [0.25, 1.0]
  return gradient
}
複製程式碼

其它

26、azuredatastudio:微軟開源的資料庫桌面管理工具。該工具支援 SQL Server、Azure SQL DB 和 SQL DW 資料庫,Windows 下的安裝包僅不到 100 MB,還支援另外兩大作業系統 macOS 和 Linux。如果開發中用到了上面的幾種資料庫,就試試這款免費的資料庫桌面管理工具吧

27、what-happens-when:該專案詳細地解釋了當你在瀏覽器中輸入 google.com 按下回車後發生了什麼。中文

28、Docker-OSX:讓你用 Docker 跑 macOS 作業系統的專案。僅需 2 條命令分分鐘讓你起來一個 macOS 作業系統,聽著刺激吧!搞起來:

# 拉映象
docker pull sickcodes/docker-osx:latest

# 執行
docker run -it \
    --device /dev/kvm \
    -p 50922:10022 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e "DISPLAY=${DISPLAY:-:0.0}" \
    sickcodes/docker-osx:latest
複製程式碼

29、cats-of-jasnah:專為 3 歲左右孩子做的網頁遊戲。遊戲很簡單就是看圖中有幾隻符合條件的貓,比如:有幾隻藍色的貓?問題是通過語音提問,選擇正確後會進入下一關。通過該專案不僅可以提高小孩的顏色辨識和識數的能力,還可以鍛鍊英語聽力。線上試玩

30、joplin:一款免費的開源筆記和待辦事項應用。首先它是一款自由的 Markdown 的筆記軟體,支援 Windows、macOS、Linux、Android、iOS 等主流作業系統,再加上支援自定義網盤同步,也就是說你可以無縫在這些平臺上自由創作,並且文字加密保證安全。推薦給喜歡寫作的小夥伴

機器學習

31、best-of-ml-python:優秀的 Python 機器學習相關開源庫集合。該專案會根據收錄的開源專案各項指標計算得出一個評分,並定期更新

32、tinygrad:一款小型的開源深度學習框架。它程式碼不足 1k 行足夠簡單,支援深度模型推理與訓練。示例程式碼:

from tinygrad.tensor import Tensor
import tinygrad.optim as optim

class TinyBobNet:
  def __init__(self):
    self.l1 = Tensor.uniform(784, 128)
    self.l2 = Tensor.uniform(128, 10)

  def forward(self, x):
    return x.dot(self.l1).relu().dot(self.l2).logsoftmax()

model = TinyBobNet()
optim = optim.SGD([model.l1, model.l2], lr=0.001)

# ... and complete like pytorch, with (x,y) data

out = model.forward(x)
loss = out.mul(y).mean()
optim.zero_grad()
loss.backward()
optim.step()
複製程式碼

33、Paddle:百度開源的深度學習框架。開發便捷的產業級深度學習框架,支援千億特徵、萬億引數、數百節點的大規模訓練。官方還為使用者提供了免費的算力可用於學習和訓練,社群活躍教程齊全對新手友好

34、fawkes:通過 AI 技術保護個人照片隱私的開源專案。芝加哥大學 Sand Lab 團隊發起的專案,通過 AI 技術對圖片的畫素進行一些微調,人眼很難看出修改前後的區別,但對於人臉識別系統來說微調前後是天壤之別的,從而達到保護你照片隱私的效果


最後

如果你發現了 GitHub 上有趣的專案,歡迎在 HelloGitHub 專案提 issues 告訴我們。

以上就是本期的所有內容了,看完還不過癮?

關注 HelloGitHub 公眾號不僅可以收到第一時間的更新。點選選單欄->推薦->月刊

往期月刊所有的內容盡收眼底一次看過癮!還有更多開源專案的介紹和寶藏專案等待你的發現。

相關文章