一个向所有人公开的像素画板

今天介绍的是一个r/place的一个开源克隆项目,r/place 是 Reddit 每年愚人节期间举行的一个大型、协作性的在线艺术实验。它提供了一块巨大的空白数字画布,Reddit 用户可以在上面放置单个像素,通过集体努力和协调来创作巨幅像素艺术。

r/place

我的示例:https://pixel.youzhi.icu/ace

如何搭建

安装Go编译

sudo apt-get update && sudo apt-get -y install golang-go 

克隆仓库

git clone https://github.com/rbxb/place.git

来到项目根目录

cd ./place

换国内源

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

开始go编译

go build ./place.go

创建画布在8080端口

./place -root web/root -port :8080 &>place.log &

其他配置选项:

-root字符串
包含 Web 文件的目录。(默认为“./root”)

-count 数字
最大连接数。(默认 64)

-width 数字
创建画布的宽度。(默认值 1024)

-height 数字
创建画布的高度。(默认值 1024)

-load 字符串
要加载为画布的 png 图片。(如果未设置,则创建一个空白画布)

-save 字符串
保存画布的名称。(默认“./place.png”)

-log 字符串
要写入的日志文件。(如果未设置,则将记录到命令行)

-port 字符串
服务器监听的端口。(默认值“:8080”)

-sinterval 数字
保存间隔(秒)。(默认 180)

-wl(无值)启用白名单

-whitelist 字符串白名单路径。(默认“whitelist.csv”)

-loadRecord 字符串 要加载的记录图像的路径。(如果未设置,则创建空白记录)

-saveRecord 字符串保存记录图像的路径。(默认“record.png”)

白名单

您可以选择添加白名单。启用白名单后,只有拥有密钥的用户才能在画布上绘图。服务器还会记录每个像素的绘制者。

要使用白名单,首先创建一个 csv 文档。每个用户都有一个个人密钥和一个 ID,用于在记录中识别他们。密钥应为一个长字符串,ID 应为 [1,65535] 范围内的整数。

我建议使用 uuid 作为键。例如:

2237701c-7558-4424-95e1-beee4f6a406a,1
f9e41cf2-0e5d-43f2-bffd-5e2f1aab0a3b,2
4917ba68-41be-4956-93a7-0563257ff182,3
79df0674-f6d5-4556-baad-992e81f72bb2,65535

记录图像中的像素颜色与白名单中的ID相对应。

uuid可以在以下网站生成
https://1024tools.com/uuid

使用 -wl 参数启用白名单后,它会在工作目录中查找名为“whitelist.csv”的文件。当然,你也可以设置自己的路径:

./place -wl -whitelist my_white_list.csv

您还可以使用 -loadRecord 加载现有记录图像,这与加载画布的 -load 类似

./place -load place.png -wl -loadRecord record.csv

如果不包含 -wl 参数,白名单和记录将被忽略。

维护

我建议设置一些脚本来轻松重启服务器或回滚画布。

重启服务器
此脚本会终止服务器并使用旧画布重新启动。这不会重置画布。
在我的服务器上,我将此脚本设置为 cron 作业,每晚运行以删除所有残留的 websocket 连接。

cd ./place/web; pkill place; cd ..; ./place -root web/root -port :8080 -load place.png &>place.log &

回滚画布
该脚本将画布回滚到之前保存的图像。

cd ./place/web
pkill place
cd ..
cp place_rollback.png place.png
./place -root web/root -port :8080 -load place.png &>place.log &