Through the Years (2018) - S3RL & Zero-2 ft Yurino

Alfons, B3nte, Jessica Chertock - Puppeteer (with B3VA) [Official Audio]

Mashup of absolutely every TheFatRat song ever (Super Extended)

Ravers MashUp - S3RL

Dead Or Alive - You Spin Me Round (Like a Record) (Official Video)

S3RL Always Presents…

S3RL Presently Presents…

TheFatRat 1 Million Subscriber Mega Mix

TheFatRat - End Of The Decade (Mixtape)

カッコイイ曲メドレー ☆BESTⅡ+Ⅲ☆ 東方Vocal神曲 Ver2017 【ZETA】

BFF - S3RL

Earth B♭ - S3RL ft Lexi

75 Minutes of Calming Minecraft Music

我想把世界上所有全明星都杀了

我喜提生日

只会摇头晃脑的小初音也想跳宅舞那咋办嘛 · 1/6

【初音ミク】跟笨蛋一樣(da me da ne)

【初音ミク交响乐2019】1/6 -out of the gravity- feat. 初音ミク 【オーケストラ ライブCD】

【初音ミク】太阳系迪斯可【ナユタン星人】[ 转载中文字幕 ]

初音未来——太阳系迪斯科 现场版

初音未来 千本樱【60帧演唱会版】 现场版

【GUMI】KING【Kanaria】

你在看别的女人吗? 【男配音】 VRChat

《 你 在 看 别 的 女 人 吗?》

哥 谭 厨 师

电棍、七海专区

因为纯度太高所以单独开个专区记录

🦈有有有…..有起了病吧🐒

🦈Ring Ring Ring🐒

🦈不该🐒

🐒shape of ybb🦈

🦈寄明月🦈

🦈怪物🐒

电棍:国玉的战争 电棍:国玉的战争(不跑调版)

电棍:向♿奔去(修复版)

电棍:大耳朵获嘉

【电棍】“再见了妈妈,今晚我猪鼻巴巴”

往期优秀作品推荐

2021年8月

Windows默认远程桌面的帧率限制是30fps, 可通过以下方法提升远程桌面的体验:

注: 以下改动均需要再远程目标机上修改, 重启后生效

  1. 调整fps限制到60

编辑注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations, 新增DWORD32键: DWMFRAMEINTERVAL, 修改值为 15 (十进制)

  1. 优化远程桌面编码

打开组策略管理器, 点击: 计算机配置-管理模板-Windows组件-远程桌面服务-远程桌面会话主机-远程会话环境,在右侧找到 为远程桌面连接设置 H.264/AVC 444 图形模式的优先级, 双击打开改为已启用

  1. 远程主机有显卡硬件的时候的进一步优化

在刚刚的组策略中启用 将硬件图形适配器应用于所有远程桌面服务会话配置远程桌面链接的 H.264/AVC 444 硬件编码

测试

可以在远程桌面上打开 TestUFO 查看当前远程会话的最高刷新率并评估体验.

参考

Improve Microsoft Remote Desktop RDP frame rate up to 60fps!

Frame rate is limited to 30 FPS in Windows 8 and Windows Server 2012 remote sessions

RDP 优化操作 微软远程桌面 开启显卡加速、60FPS、USB设备重定向

Windows远程桌面开启60帧,打造云游戏主机,随时随地畅玩大作

批量向MySQL插入数据时, 自增ID的变化根据策略的不同可能会体现出不同的反应.

有三种innodb_autoinc_lock_mode设置,

  1. traditional (0)

  2. consecutive (1)

  3. Interleaved (2)

当配置为interleaved会出现并发插入的时候, 自增ID出现一定长度的断层.

参考

When I INSERT multiple rows into a MySQL table, will the ids be increment by 1 everytime?

MySQL 14.6.1.6 AUTO_INCREMENT Handling in InnoDB

原文地址: 从软件历史看架构的未来:编程不再是精英们的游戏 - InfoQ

站内备份地址

看法

看完这篇文章之后,不得不称赞是一篇极具有前瞻性的好文,同时我开始担忧起自己的职业生涯了😢

不过,这篇文章里提到的云不可知是我认为最具琢磨的一点。如果所有服务,RDB,KV,Cache等都能通过某种语言无关的方式,比如基于http通信,使用标准化的OpenAPI等进行交互,或者类似于sidecar的方式注入到service mesh部署的服务森林中,这无疑降低了程序员的入门门槛,降低了成本和出错的概率,缩小了错误扩散的面积,对产业前进是好处。但同时也让程序员的定义发生了变化。程序员不再需要长期的高等教育培训,也不需要再掌握多门语言多种技术,更不需要所使用技术的原理,这仿佛确实变成了切切实实的CURD boy或者更进一步,脚本小子。如果人人都会这种东西,那是什么让每个人在行业中具有不可替代性呢?

命令替换

ifconfig, netstat 默认不再安装, 需要手动安装net-tools包. 官方建议的替代命令是ipss.

ifconfig的直观替代命令是ip -s -h addr, 其中-s展示接口流量统计信息, -h展示为人类可读形式.

ping命令在inetutils-ping包中.

ip命令在iproute2包中.

腾讯云新购云主机常用初始化方式:

1
2
sudo apt update && sudo apt autoremove -y && \
sudo apt upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"

安装 Podman

1
2
3
4
5
6
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add -
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install podman

安装 podman-docker, 并启动podman服务.

注: 随着podman-docker版本的不断更新, 此处的链接可能会发生变化. 若404请访问Index of /ubuntu/pool/universe/libp/libpod/获取最新的deb包列表.

1
2
3
curl -vL http://mirrors.cloud.tencent.com/ubuntu/pool/universe/libp/libpod/podman-docker_3.2.1+ds1-2ubuntu3_amd64.deb -o podman-docker.deb
sudo dpkg -i podman-docker.deb
sudo systemctl enable --now podman

安装 docker-compose.

pip版本一般要比apt版本更新.

1
2
sudo apt install -y python3-pip
sudo pip install docker-compose

修改默认启用cgroups版本为v2

vim /etc/default/grub

systemd.unified_cgroup_hierarchy=1 添加到 GRUB_CMDLINE_LINUX 或者 GRUB_CMDLINE_LINUX_DEFAULT 中.

sudo update-grub && sudo reboot 必须重启才能生效.

Rootless容器无法添加资源限制

查看是否为用户启用了控制器代管:

cat "/sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers"

若输出中缺乏对应的控制器, 创建文件/etc/systemd/system/user@.service.d/delegate.conf

1
2
[Service]
Delegate=memory pids cpu io

参考

[Optional] cgroup v2

containers/podman: troubleshooting.md

ss(8) — Linux manual page

ip(8) — Linux manual page

修订记录

创建日期: 2021-08-12 15:45:00 (UTC+0)

使用多个显示器

在远程桌面,【显示】中选中【将我的所有监视器用于远程会话】

使用多个但不是全部显示器

保存远程桌面配置到一个rdp文件, 用文本编辑器打开, 添加如下配置:

1
2
use multimon:i:1
selectedmonitors:s:0,1

其中use multimon:i:1表示是否启用多显示器功能, selectedmonitors:s:0,1表示选中显示器0和显示器1作为远程桌面使用. 可以通过mstsc /l命令查看显示器ID.

要注意的是选中的显示器必须是在mstsc列表中相邻的, 不然会报错.

参考

Remote desktop use two out of four monitors

How to remote desktop fullscreen RDP with just SOME of your multiple monitors

Podman版本: 3.0.1

Linux版本: Ubuntu 18.04.6 LTS

内核版本: 4.15.0-161-generic

运行 podman ps -apodman images 都会失败无法执行, 报错: Error: failed to mount overlay for metacopy check with "nodev,metacopy=on" options: invalid argument

原因: 内核版本太低, 不支持metacopy选项. 但是该机器目前不能下线所以转而通过调整配置解决.

解决方案: vim /etc/containers/storage.conf

修改mountopt选项, 删除metacopy.

参考

containers/podman #8118: Error: failed to mount overlay for metacopy check with “nodev,metacopy=on” options: invalid argument

系统 Ubuntu 20.04.3 LTS

安装cockpit后, 软件列表刷新一直报错, 提示cannot refresh cache whilst offline.

解决方法: 在netplan中调整渲染器(renderer)为NetworkManager, ubuntu默认的渲染器为networkd. 配置类似如下:

1
2
3
4
5
6
network:
ethernets:
ens18:
dhcp4: true
version: 2
renderer: NetworkManager

参考

Cockpit – “cannot refresh cache whilst offline”

ubuntu:latest镜像终端无法显示中文字符, 有以下两种方法可以尝试:

  1. 直接修改LANG环境变量为C.UTF-8
  2. 若第一种方法无效, 需要安装中文字符包并生成中文字符缓存后再设置LANG.
1
2
apt update && apt install -y language-pack-zh-hans
locale-gen zh_CN.UTF-8

再设置LANGzh_CN.UTF-8即可.

参考

docker 学习 - 解决ubuntu镜像中文乱码问题

解决docker容器中文乱码,修改docker容器编码格式

参考的文章已经讲的特别清晰了, 本篇主要是把原文里简述的部分稍微展开描述.

Easier Setup

本文中提到的Chain功能, 可通过wg-ops工具更简单的实现. 使用该工具可避免一些常见的容易犯错的点.

Step-by-Step Setup

1. 搭建Client

peer为NodeA, allowed-ips设为0.0.0.0/0, 即全部流量. 假设网卡名称为wg0. 如果不想转发本地流量, 请设置allowed-ips为0.0.0.0/1, 128.0.0.0/1

注意当allowed-ips设为全部流量转发的时候, 可能需要添加DNS选项才能正确解析. DNS解析请求会走隧道.

2. 搭建Node A

先与client建立连接, allowed-ips设为client的ip即可 (按需设置). 假设网卡名称为wg1

再与NodeB建立连接, allowed-ips设为NodeA的ip + Client的ip. (按需设置). 假设网卡名称为wg2

3. 搭建Node B

与NodeA建立连接, allowed-ips设为NodeA的ip. (按需设置). 假设网卡名称为wg3

4. 在NodeA上配置转发

1
2
3
echo "1 middleman" >> /etc/iproute2/rt_tables
ip route add 0.0.0.0/0 dev wg2 table middleman
ip rule add from <NodeA对Client的allowed-ips> lookup middleman

注意此处ip rulefrom要配置为NodeA原本对Client的allowed-ips, 从而让Client来的流量可以按照middleman表来进行路由.

1
wg set wg2 peer <NodeB的公钥> allowed-ips 0.0.0.0/0

这句话主要是将面向NodeB的wg2接口的WireGuard路由调整为0.0.0.0/0. 注意, 此处并没有调整系统路由表. 所以如果用ip route命令查看的时候, 当前系统里原本面向NodeB的路由还是原来的路由, 因此NodeA上的其他流量不会被全部转发到NodeB.

1
sysctl net.ipv4.ip_forward=1

启动IP转发.

5. 在NodeB上配置转发

1
sysctl net.ipv4.ip_forward=1

启动IP转发.

1
2
iptables -A FORWARD -i wg3 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

调整iptables规则, 允许来自wg3的流量转发. 第二句指定系统将eth0网卡作为转发流量的出口. 如果物理网卡名字不同需要调整为目标网卡名称. (否则不会报错, 但是没有效果)

完成以上配置后即可达到流量转发的效果!

可以通过traceroute命令来验证.

选择性转发配置

如果想让来自Client的流量只经过NodeA转发, 但是某些想经过NodeB转发, 那么在step-by-step里第4步, ip route命令改为:

1
ip route add <想经过NodeB路由的IP> dev wg2 table middleman

除此之外还要在NodeA上调整iptables从而允许流量转发至互联网:

1
2
iptables -A FORWARD -i wg2 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

更多/更少节点时如何配置

更多节点: 在靠近Client端的节点按照NodeA配置, 在靠近互联网的节点按照NodeB配置, 中间的节点只需要按照NodeA配置即可.

更少节点: 如果Client只经过一跳就到达互联网, 则不需要NodeA的ip ruleip route配置, 只需要在NodeA上配置允许转发到互联网的iptables规则即可.

配置样例

Client

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = ...
Address = 10.100.0.2/32

[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = ...
PersistentKeepalive = 30

NodeA

wg0 (面向客户端)

1
2
3
4
5
6
7
8
[Interface]
PrivateKey = ...
Address = 10.100.0.1
ListenPort = 51820

[Peer]
PublicKey = ...
AllowedIPs = 10.100.0.2

wg1 (面向下一个节点)

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = ...
Address = 10.200.0.2
ListenPort = 51821

[Peer]
PublicKey = ...
AllowedIPs = 10.200.0.1
Endpoint = ...
PersistentKeepalive = 30

NodeB

1
2
3
4
5
6
7
8
[Interface]
PrivateKey = ...
Address = 10.200.0.1
ListenPort = 51820

[Peer]
PublicKey = ...
AllowedIPs = 10.200.0.0/24, 10.100.0.0/24

这里要注意, 因为我们没有在NodeA上配置iptables规则让来自10.100.0.0/24网段的IP包以10.200.0.2为源地址发出, 所以我们要在NodeB上配置允许IP来自10.100.0.0/24网段, 尽管在NodeB与NodeA之间使用的是100.200.0.0/24网段.

参考

Wireguard VPN: Chained Setup - The poetry of (in)security ——这篇写的真的太棒了

Wireguard VPN: Typical Setup - The poetry of (in)security

iamckn/chained-wireguard-ansible - GitHub

nealfennimore/wireguard.conf - GitHubGist

traceroute(8) — Linux manual page

ip-route(8) — Linux manual page

ip-rule(8) — Linux manual page