油猴使用坚果云WebDAV同步脚本
注册坚果云
进入坚果云首页,注册账户,然后下载客户端(注意开启webdav需要客户端上操作):

在客户端左下角设置中,配置“第三方应用管理”:

添加应用,并记录下应用密码:

配置油猴
进入油猴插件的“实用工具”,在“云”配置中修改类型为WebDAV,然后输入账号和密码即可:

进入坚果云首页,注册账户,然后下载客户端(注意开启webdav需要客户端上操作):

在客户端左下角设置中,配置“第三方应用管理”:

添加应用,并记录下应用密码:

进入油猴插件的“实用工具”,在“云”配置中修改类型为WebDAV,然后输入账号和密码即可:

在github上拉取最新版本代码:https://github.com/cloudflare/cfssl.git,然后进入代码目录执行make all编译二进制。编译成功后会在当前目录下的bin/目录下生成几个二进制:
bin
├── cfssl
├── cfssl-bundle
├── cfssl-certinfo
├── cfssl-newkey
├── cfssl-scan
├── cfssljson
├── mkbundle
└── multirootca// todo
// todo
填写需要生成的证书的信息:
{
"CN": "example.com",
"hosts": [
"example.com",
"www.example.com"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"ST": "California",
"L": "Mountain View",
"O": "Your Org Name",
"OU": "Your Org Unit"
}
]
}生成csr:
./cfssl genkey certs/server.json | ./cfssljson -bare server签发证书:
./cfssl sign -ca certs/intermediate.crt -ca-key certs/intermediate-key.pem -config certs/rootca-config.json -profile server server.csr | ./cfssljson -bare server参数说明:
opencore在开机控制台显示的分辨率和实际系统起来后设置的并不是同步的,这会导致登陆时看到的界面和登录后看到的界面有个差距,每次都要跳一下。
但好在opencore有配置可以调整这个分辨率,在UEFI设置 => 显示输出 => 控制台分辨率中可以调整。

因为家里宽带申请到了公网IP,希望可以直接通过公网IP访问回家。但是公网IP并不是固定的,每隔一段时间就会变化一下,导致需要频繁变化访问回家的公网IP,着实不爽。于是就想着使用ddns来解决这个问题。本想着是自己写个程序,通过dnspod的api接口来动态更新ip,但是程序写到一半后发现群晖已经就有这个功能了,于是干脆就直接用群晖的功能来做dns了。
群晖的ddns配置在控制面板-外部访问中,默认支持了多家云厂商的ddns,国内常见的如:

因为我的域名都托管在了腾讯云,腾讯云的dns解析就是dnspod,因此可以直接使用dnspod.cn来配置ddns。
首先,进入到dnspod控制台页面,点击右上角个人头像,选择“API密钥“:

进入到API密钥页面,将tab栏切换到DNSPod Token(注意,不是腾讯云API密钥),然后点击下面的创建密钥来生成token:

创建完成token后,会分配一个ID和Token:
这里要注意的是需要将token保存下载,因为系统不会保存token信息,以后在控制台也无法查到,所以务必要妥善保存。

将id和token分别填入到群晖中的用户名和密码栏目,主机名称填写对应的域名,如www.xxxx.com,服务供应商选择DNSPod.cn(不要选DNSPod.com了)。提交即可完成ddns配置:

如果配置成功,在控制面板中就能看到ddns的状态是正常,此时说明ddns就生效了:

使用Dockerfile构建完镜像后,发现镜像特别大:
[cherry@k8s-yasuo:~]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php-fpm 7.4.0-alpine-ext d9c182c6c1ae 18 minutes ago 447MB这是一个基于alpine构建的php-fpm镜像,构建前镜像大小是90M,被我魔改后竟然达到了450M,简直不可思议。不觉明厉之下,决定研究一下为什么镜像达到了这么大。
使用docker history image可以查看镜像的每一层的构建大小:

最上面的三条就是我新增的三个RUN指令生成出来的层,可以看到,2b5947710812这个层是占用了350M,因此可以断定这个指令执行有问题。这个指令执行的是更新alpine的源然后安装上一些php的库:
RUN set -eux; \
echo "https://mirrors.tencent.com/alpine/v3.14/community/" >>/etc/apk/repositories; \
apk add --no-cache ghostscript imagemagick; \
apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
freetype-dev imagemagick-dev libjpeg-turbo-dev libpng-dev libzip-dev;本来我期望是在这个RUN执行完成之后再执行一条apk del的命令来删除新增的库:
RUN apk del --no-network .build-deps但是我忽略了一个问题,docker构建镜像时,每个RUN指令都会生成一个层,后面的指令生成的层是基于上个层来的。也就是说,即使第二个RUN指令删除上个RUN指令添加的文件,此时依旧还是包含了上一个层生成的数据。
解决办法:把两个RUN指令合成为一个。
关闭服务:
systemctl stop docker.service
systemctl stop docker.socket修改/usr/lib/systemd/system/docker.socket文件:
[Socket]
ListenStream=/var/run/dockershim.sock重新加载配置:
systemctl daemon-reload启动服务:
systemctl start docker.socket
systemctl start docker.service修改环境变量,在/etc/profile中添加:
export DOCKER_HOST="unix:///var/run/dockershim.sock"如果不修改环境变量,执行docker命令时会报错无法连接上docker,因为socket路径不对:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)
Server:
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
errors pretty printing info 使用emby导入媒体库的时候,发现所有导入视频的缩略图全是某公众号的广告页面:

实际上的视频并没有这个页面,对于有强迫症的我来说实在无法忍受这个东西,于是就想想办法去掉。然而展示出来的缩略图是没办法直接修改的,用PR捉摸了好久也是没有找到修改的办法。最后准备放弃的时候,在播放器中意外发现了原因竟然是视频中多了一个视频轨道导致的:

可以看到,视频中是有2个轨道的,第一个轨道是实际的视频内容。而第二个轨道就是一张PNG类型的图片,点开来看刚好是上面的视频缩略图。因此就可以判断缩略图肯定是取决于这个轨道了,只要去掉它就好了。
想去掉这个轨道,最开始想的办法是使用PR来删掉,但是鼓捣了半天也没有让PR把这个轨道分离出来,最后不得不另想它法。最后想到的方法是使用ffmpeg来完成这个操作,ffmpeg是一个开源的视频编辑工具,可以对视频进行剪辑和转码等操作。
首先先使用ffmpeg -i 01.mp4命令来查看当前视频的信息,命令输出显示当前视频确实是有3个流的:

第一个流是视频流,第二个是声音流,而第三个也是视频流,它是一个PNG图片,也就是我不希望看到的缩略图图片。
我的目标就是要干掉它,操作命令:
ffmpeg -i 01.mp4 -map 0:0 -map 0:1 -vcodec copy -acodec copy P01.mp4参数的意思:
-i: 输入文件-map 0:0: 第1个输入文件的第一个流,也就是主要的视频流。-map 0:1: 第1个输入文件的第二个流,是视频的声音。-vcodec copy: 拷贝选择的视频流。-acodec copy: 拷贝选择的声音流。整个命令的作用就是:将第一个视频流和第一个声音流拷贝到新的文件中去,相当于就去掉了当前视频中的最后一个流了。
执行后,就会生成一个新的视频文件P01.mp4到当前目录。将新生成的视频文件重新导入到媒体库后,缩略图就正常显示了:

点击左上角Iterm2任务栏,依次选择Preferences - Profile:

点击左下角的+新增一个配置项,在右边的command处输入ssh登录的命令:
ssh root@x.x.x.x -p xxxxx然后把tab页面切换到Advanced,点击Edit进入触发器编辑页面:

新弹框中新增一个触发器,触发器的作用是匹配终端输出的字符串然后执行相应动作。触发字符串是password:,Action选择Send Text,Parameters填入登录密码,密码最后以\n结束表示输完密码后换行:

配置好后退出,在任务栏的Profile中选择创建好的配置就可以自动登录到设备了:

画二叉树的时候,总是无法对齐圆点得到对称的节点。例如:
graph test {
graph [dpi=80]
node [shape=circle];
1 -- 2, 3;
2 -- 4, 5 [color=red,penwidth=3.0];
3 -- 6, 7 [color=red,penwidth=3.0];
4 -- 8;
}画出来的效果:

红色标出来的4个线条,长度不一样,子节点看起来不对称,就导致整个二叉树看起来也不够美观。
可以在子节点中加一个中间节点,把线条的weight设置成10,然后隐藏中间的节点和连线:
graph bin_tree {
node [shape=circle];
1 -- 2, 3;
2 -- 4;
// 隐藏中间节点的连线
2 -- m2 [weight=10 style="dashed"];
2 -- 5;
3 -- 6;
// 隐藏中间节点的连线
3 -- m3 [weight=10 style="dashed"];
3 -- 7;
4 -- 8;
// 隐藏中间节点
m2, m3 [label="" style="dashed"]
}效果:

weight属性的作用是设置线条的权重,权重越大,线条越垂直。
如果希望完全隐藏中间节点,只要把对应节点和线条的属性设置为invis即可:
style="dashed" -> style="invis"使用clion的过程中,发现每创建一个文件,系统就会自动在头部生成注释信息:
//
// Created by <username> on 2020/2/7.
//这个是因为开启了代码模板导致的,配置在:
Settings → Editor → File and Code Templates → Includes → C File Header
直接把这个配置删掉就可以了,注意是删掉里面的内容,不要把这一栏删掉了。
参考
Turning off “created by” header when generating files in CLion