0%

前两天太忙了,今天补一下。

WireGuard 的一些问题

国内的 QoS

这几天测试阿里的香港轻量服务器和本地搭建的 WireGuard 隧道,发现高峰期只有 100Kbps 左右,国内运营商还是不待见 UDP 啊。不过 UDP 既然已经被 HTTP/3(QUIC) 和很多其他服务使用了,希望以后会好点吧。

DigitalOcean <-> Aliyun

这个链路也有个非常奇怪的现象,iPerf 通过 WireGuard 测速满了 3s (120Mbps) 会立刻没速度,经 iPerf3 单独测试发现 UDP 达到某个带宽阈值(106 Mbps 左右)就会大量丢包,暂时不知道是什么引起的。

昨天晚上稍微有点忙,没来得及写日记,今天补一下。

Yousa 投稿的收集

目前的进度是:2020 年截至发稿(2020 年 4 月 5 日)的所有投稿都已经收集完了。过几天应该还有一个投稿,等发了统一转换。

WireGuard

最近准备好好研究一下 WireGuard,不过 Windows 架设服务器似乎比较复杂,晚点再看看吧。

Introduction

最近发现了个好玩的东西:RSSHub。简单来说就是把一切你能想到和想不到的东西做成 RSS 订阅,方便统一管理。

Let's Go

安装 RSSHub

多亏了 Docker 这个强大的工具,部署 RSSHub 异常简单。按照官方教程使用以下命令即可(当然需要先安装好 Docker):

1
2
$ docker pull diygod/rsshub
$ docker run -d --name rsshub -p 1200:1200 diygod/rsshub

搞定。试试访问 http://your_server_ip:1200 即可查看效果。

关闭 RSSHub:

1
docker stop rsshub

更新 RSSHub

首先删除旧容器。

1
2
$ docker stop rsshub
$ docker rm rsshub

然后重新执行安装操作即可。

配置 HTTPS

完成上面步骤后,会发现服务器只接受 HTTP 连接。为了实现 HTTPS,我们需要用到 Caddy。

注意:使用 HTTPS,你必须拥有一个域名。先添加一个 A 记录,指向你的 RSSHub 服务器。

本文以 Caddy 2 测试版为例。

由于 Caddy 使用 Go 编写,它的部署十分简单。只需要下载一个可执行文件即可,这里略去。

然后在 caddy 所在目录下创建 Caddyfile 文件,内容如下(示例,请根据自己需求更改)。

1
2
3
https://rss.neteroster.live:2400 {
reverse_proxy 127.0.0.1:1200
}

然后运行 ./caddy start 就完成了。访问 https://rss.neteroster.live:2400 即可(替换成你自己的域名)。

原理是创建一个反向代理(Reverse Proxy),将 https://rss.neteroster.live:2400 反代到 http://127.0.0.1:1200,由于 Caddy 2 会帮助你全自动的(用 Let's Encrypt)签发 HTTPS 证书,所以整个部署流程显得非常流畅,行云流水。

不得不说,Caddy 2 是一个很强大的 Web 服务器,目前 Caddy 2 还处于测试(RC)阶段。留个坑,以后多多跟进开发进度。

  • RSSHub 的文档在这里:https://docs.rsshub.app/
  • Caddy 2 的官网在这里:https://caddyserver.com/

尾记 / 总结

本次部署用处非常大的三个工具是:Docker、RSSHub 和 Caddy 2。这三个工具使得部署异常流畅、稳定且简便。

配合 Telegram 的 RSS Notice 机器人 可以实现全平台无缝 RSS 通知。

收集 Yousa 的直播曲目

今天完成了收集泠鸢 Yousa 2020 的直播曲目,并用 FFmpeg 进行了响度均衡(参考前面的文章)。总大小 600+ M,还是有点超出预料的。

接下来还想收集 2019 年及更早的曲目。当然,在这之前,我想先保存 Yousa 的正式投稿

到时候等《折纸信笺》到了之后,打算把曲绘和歌曲自己剪成一个合集(当然这个不能发布)。

多说一句,提前听了《天文馆的猫》这首歌,真的很喜欢。安静的天文馆里,没有灯光,没有喧闹。只有从那窗口中透出的绚烂银河、电脑屏幕上黑色背景的星图、测绘仪器与计算机、服务器安静地交换数据使硬盘发出一下又一下的闪烁,还有身边的猫,喜欢的人。这就是我梦想中的浪漫啊!

喜欢的歌不能循环,不然会习惯,忘记它的美好。

// 来自 20200405 的附注:原来天文馆并不是天文台,打破了我的幻想 :(。不过怎么说呢,就算误解了感觉也还是很美好!

Introduction

因为最近想搞个项目,把泠鸢的所有直播歌曲都下载下来并批量处理,便诞生了这个项目。

Script

很简单,一行。

1
2
3
4
# This script is used to convert all .flv and .mp4 files in a folder to .mp3, and automatically adjust volume to ~23 LUFS.
# Put `ffmpeg.exe` in the same folder where this PowerShell script lies in.

Get-ChildItem | Where-Object {$_.Extension -eq ".mp4" -or $_.Extension -eq ".flv"} | ForEach-Object { ./ffmpeg.exe -i $_.Name -af "loudnorm=print_format=summary" -vn -sn -dn -f mp3 -ab 192000 ($_.BaseName + ".mp3")}

运用了 PowerShell 的管道。不得不说管道很强大!

把这个命名为 ConvertAll.ps1 然后把 ffmpeg.exe 和所有要转换的 .flv 放在和这个脚本同一个文件夹,运行即可。

关于 FFmpeg

最近发现 FFmpeg 真的是很强大的音频视频处理软件,有时间可以好好研究一番。

迫不及待等 Animenz 的新曲了

A 叔最近周更真是高产啊,技术和改编也越来越娴熟了。我猜这一周的作品是 Sincerely,这真的是一首很好听的曲子,希望 A 叔能给我带来惊喜!

DizzyLab | 设计优秀的国内同人音乐专辑平台

最近发现了 DizzyLab,一个数字专辑售卖网站。设计感很强,用户体验也不错,令人耳目一新,值得一看。尽管现在专辑数量还不是很多。

我认为国内需要更多这类高质量的、个人或小团队的创意出售平台。不仅是音乐,绘画、摄影作品等也应该要有。关键是要:高质量,而为了高质量,有偿便必不可少了。但是,个人和小团队的创意又可以使得定价不会太高。另一个为什么需要个人或者小团队的原因就是呢:创意需要多元化。而小团队创作有利于多元化的发展,更好迎合用户的需求,甚至创造需求。

今天发一篇以前自己写的小笔记。之后笔记也会慢慢都发上来。

Example

先来看一个例子。

Example T1. 已知函数 \(f(x) = e^x - ax^2 -bx - 1\),其中,\(a, b \in \mathbb{R}\),设 \(g(x) = f'(x)\),求函数 \(g(x)\) 在区间 \(\left[0, 1\right]\) 上的最小值。

Solution T1. 根据题,易得 \[ g(x) = e^x - 2ax - b \] 那么 \[ g'(x) = e^x - 2a \]\(x \in \left[0, 1\right]\) 时,\(g'(x) \in \left[ 1-2a, e-2a\right]\),也就是说当 \(1-2a\ge0\)\(g(x)\) 在区间内为增函数,\(g(x)_{\text{min}} = g(0)\)

得当 \(a \le \frac{1}{2}\) 时,\(g(x)_{\text{min}} = g(0) = 1-b\)

同理,当 \(e-2a \le 0\) 时,\(g(x)\) 在区间内为减函数,那么 \(g(x)_{\text{min}} = g(1)\)

得当 \(a \ge \frac{e}{2}\) 时,\(g(x)_{\text{min}} = g(1) = e - 2a - b\)

那么,当 \(a \in \left( \frac{1}{2}, \frac{e}{2} \right)\) 时,\(g'(x)\) 的零点就在 \(\left[ 0, 1 \right]\) 之内。我们现在求解其零点 \[ e^x - 2a = 0 \]\(x = \ln(2a)\) ,那么此时 \[ g(x)_{\text{min}} = g(\ln(2a)) = 2a - 2a\ln(2a) - b \] 至此已经把所有情况讨论完毕。

General Steps

这个求法的一般做法归纳如下:

  1. 求目标函数(求极值的函数)的导函数 \(f'(x)\)
  2. 分别讨论 导函数的零点在所给区间内导函数零点在所给区间左导函数零点在所给区间右
  3. 得出结论。

如果导函数是单调函数,可以写出其值域(这里以递增为例):在区间 \(\left[a, b \right]\) 内,导数值域为 \(\left[f'(a), f'(b) \right]\),再以值域边界的正负进一步讨论即可。

为什么要统一音量

相信大家都有遇到过这样的场景:不同音乐文件,响度(音量)差异很大,导致切歌的时候要手动调整音量,很麻烦。那么,是否有一种自动化调整的工具呢?

在查阅资料后,我发现 FFmpeg 有一个名为 loudnorm 的音频过滤器,能够实现要求功能。

这个过滤器按照 EBU R 128 规范 调整音量。具体规范可以阅读上面链接到的 Wiki。虽然我还没弄懂这份规范的具体内容和原理,我们还是可以用一用。

Let's go!

首先,你需要下载 ffmpeg并安装。

然后,运行如下命令即可将你的音频统一到 -23 LUFS 左右啦!

1
ffmpeg -i <input.file> -af "loudnorm=print_format=summary" -vn -sn -dn -f <outformat> <output.file>

其中,<input.file> 是输入文件,例如 input.mp3<outformat> 是输出格式,例如 mp3<output.file> 是输出文件名,例如 output.mp3

写个脚本统一所有音频也是轻轻松松。

Go further!

这个 loudnorm 过滤器还有很多参数,包括可以设定目标响度、设定动态调整还是线性调整(默认为动态,看网友推荐是线性两次效果最好)。

这里就挖一个坑,等待以后好好研究 EBU R 128 规范和这个过滤器啦!

来自 Animenz 的愚人节惊喜

为了庆祝愚人节,A 叔发布了他的最新改编:紅 蓮 の 弓 矢 再 放 送

其实就是把「紅蓮の弓矢」这首曲子改成大调演奏了。

不得不说 A 叔实在是创意十足啊,而且行动力也那么强。(虽然听着觉得好好笑 :) )

小调改大调就能产生这么明显的风格转移,不得不说音乐真的很有魅力。

技巧上依然是浓郁的 Animenz Style,左手大跳,快速的跑动,流畅的乐章,两个字:舒服!

Blog 字体已经进行了一些更换

目前的方案是,标题统一采用 Noto Serif SC(也称思源宋体),正文则是 Noto Sans SC(也就是思源黑体)。

为什么中文和西文不单独配置呢?答案是 NexT 目前还不支持,目前已经提交 Feature Request 到 Github 了。

今天就那么多啦~

Introduction

众所周知,「排列」是顺序的,而「组合」是无序的。这具体是什么意思呢?

比如我们有 5 个元素:A, B, C, D, E。

  • 如果我们「排列」其中的两个数(\(A_5^2\)),这时候 {A, B} 和 {B, A} 是分别计入总数的。
  • 如果我们「组合」其中的两个数(\(C_5^2\)),这时候 {A, B} 和 {B, A} 只算一种

小思考题

想一想 \(C_5^2\)\(C_5^1 C_4^1\) 有什么区别呢?

Answer: 实际上,你在运用两个「组合」的时候,你已经隐性的运用了一次「排列」。

特别小心连用组合造成的隐形排列

在有的题目中,我们经常多次使用「组合」挑选东西。但是,一旦你同时用以下方式使用组合,你很可能就做错了:

  • 连用 2 个或以上组合数。
  • 连用的这些组合是在挑选一类东西,或者这些组合挑选的元素种类有交集

那么,为什么连用组合挑选不同东西就没问题呢。这是因为,不同类东西,本身就具有「顺序」。

比方说,我有两类元素:(Type 1.) A, B, C, D, E;(Type 2.) 1, 2, 3, 4, 5。

要求:选择从两类元素中分别各选出 2 个元素。

你自然会想到 \(C_5^2 C_5^2\),这时候,你可以确保第二个组合不会选到 Type. 1 的元素,同理,第一个组合不会选到 Type. 2 的元素。每个组合选出的元素都是唯一的,且两个组合元素种类没有交集,这两个条件即会确保无重复的正确选择。