基于 JavaScript 的 Hexo Fluid 主题 banner 随机背景图实现为什么要换掉随机图片 API因为 API 太慢了。根据 PageSpeed 的测速,使用 API 的图片加载时间来到了整整 2.5s,这似乎有些不可忍受。Vercel 冷启动问题当初年少无知,为了实现 banner 随机背景图,选择了使用 vercel 创建随机图片 API。这带来了一些问题,首先 vercel 在站点一段时间没人访问以后会进入一种类似休眠的模式,下一次启动将会经历一个冷启动(cold start)的过程。我认为这对于一个图片背景的随机 API 而言是不可忍受的。观察图上就可以发现,第一次访问时花费了 1.9 秒,第二次只需要 0.5 秒,这是因为第一次是冷启动,需要花费更多时间。多一次网络请求抛开冷启动不谈,引入 API 就会导致一次额外的网络请求。访客的浏览器将会先请求随机图片 API,然后根据 API 返回的 302 相应去请求真正的图片,而且这一过程是没法并行的,只...
使用向日葵智能插座 C2 用电记录推算宿舍上次烧水时间我宿舍里入口处有一张公用的桌子,上面有一个烧水壶。根据生活经验,当用手摸烧水壶外壳能感受到明显热量时,水壶内的水大概是两小时内烧的,绝对能喝;但如果用手摸烧水壶外壳感受不到明显热量时,水壶内的水就不知道是什么时候烧的了,可能是三小时前,也可能是三天前。此时,在不寻求外部科学仪器介入的情况下,唯一能做的是询问寝室成员上一次水是谁烧的,是什么时候烧的。但寝室成员并不总是能够及时回答,可能在睡觉,也可能不在寝室里,还有可能出现记忆错乱。因此,我们需要一种可靠的方案获取上一次烧水时间。前两天陪黄老板出门吃宵夜的时候和他提到了这个难题,我提出在烧水壶附近加装物理按钮,按动时向局域网内的 HomeServer 发送请求记录准确的烧水时间。他提出可以在烧水壶前加装智能插座,使用智能插座的耗电量来推算上一次烧水时间。这是一个可行方案,上次烧水时间不需要分钟级的精准度,小时级的精准度在这个需求上完全够用,这...
使用 Caddy 反向代理 dockerhub 需要几步?几个月前,由于众所周知的原因,中国大陆境内失去了所有公共的 dockerhub 镜像(或者说是反代)。网上随即涌现了一批自建 dockerhub 反代的,有用 Cloudflare Workers 的,也有用 nginx 的,甚至还有自建 registry 的。我使用 caddy 去反代 dockerhub 的原因很简单,一是配置简单,二是通过一台国内访问质量良好的境外服务器进行反向代理的访问质量会比 Cloudflare 减速器好很多。在网上一阵搜索后,并没有发现任何使用 caddy 去反向代理 dockerhub 的文章, 于是本文应运而生。遇事不决先抓包为了弄清楚 docker 从 dockerhub 拉取镜像的过程,需要先对网络请求进行抓包。具体的抓包方案我使用的是 mitmproxy,手动信任 ssl 证书的操作在「在 Linux 下使用 mitmproxy 抓取 HTTPS 流...
将 Rustdesk 中继服务从 Arch Linux 迁移至 Debian这次迁移主要是两方面原因,一来是我安装了 Arch Linux 的 VPS 要过期了,续费价格过高,没有续费的动力;二来是手上的 VPS 越来越多,逐渐意识到 Arch Linux 作为滚动发行版,每次安装新的软件都要 Syu 甚至重启系统,实在没有太多的精力去维护,这也是为什么 Arch Linux 仅适合桌面发行版。原本在 Arch Linux 上部署的 rustdesk server 我是按照这篇文章「(水文)在archlinux上部署rustdesk服务端」部署的。本身没什么技巧,直接从 AUR 安装现成的 rustdesk-server-bin,使用 systemctl 启用 rustdesk-server-hbbr.service 和 rustdesk-server-hbbs.service 两个服务即可。Rustdesk 现在为 Debian 提供了官方的中继服务器的 deb...
自建图床小记五——费用自建的图床自 8 月 13 日正式启用以来,已经过去一周多了,具体的费用是多少呢?原先设计的 0 额外投入有没有实现呢?这是我的博客访问统计,在这一周多的时间内,一共有 1.27k 次页面访问,被 671 个访客访问了 769 次,平均下来每天也有一百多次的页面访问。Cloudflare Workers 和 Cloudflare R2 的免费额度全部够用,用量全部小于免费额度的 1%。又拍云联盟每年可以领取 67 元的代金券,平均每天控制在 0.18 元内即可实现白嫖。可以看到,这一套图床在我博客当前和可见的未来的访客情况下,在不被人恶意刷流量的情况下,是不需要投入除域名续费以外的其他成本的。
自建图床小记四——上传脚本编写与图片迁移前面三篇小记分别讲述了图床的整体架构、用 Workers 构建 Restful API 和 自动更新部署 SSL 证书,这一篇c处理由此带来的图片上传问题,主要是要为 Typora 编写自动上传脚本,并为博客原有的图片进行迁移。自动上传脚本主要还是给 Typora 用,实现这种效果#!/bin/bash HOST="upload.example.com" CDN_HOST="cdn.example.com" UPLOAD_PATH="uploads/$(date +%Y/%m/%d)" AUTH_TOKEN="1145141919810" webp=false markdown=false force=false keep=false while getopts ":mwfkp:" opt; do case $opt in m|markdown) markdown=true ;; w|we...
自建图床小记三—— SSL 证书的自动更新与部署为什么要自动更新?众所周知,为站点开启 https 访问需要获得对应 host 的 ssl 证书,而如果希望证书被访客的浏览器所信任,需要拿到由 Certificate Authority (CA) 签发的 ssl 证书。在前一阵子那波 BAT 等大厂提供的云服务停止发放免费的由 TrustAsia/DigiCert 签发的一年有效期免费 ssl 证书之后,市面上已经没有被广泛信任的 CA 签发的免费的一年有效期的 ssl 证书了,于是不得不用回由 Let's Encrypt/ZeroSSL 等 CA 签发三个月免费证书。但话又说回来,三个月有效期确实不太够,一年有效期的证书就一年一更,手动申请部署也不麻烦;三个月有效期的证书手动就有点麻烦了——我一般会在证书到期的前 15 天进行更新,防止最后几天自己太忙了没时间管。这套图床架构的自动更新有没有困难?境外通过 Cloudflare Saa...
自建图床小记二——使用 Workers 为 R2 构建 Restful API访问 R2 的两种方式一般来说,想要访问 Cloudflare R2 中的文件,会有两种方式。一种是在 R2 的设置界面设置自定义域另一种是通过 Cloudflare Workers 进行访问那么应该选择哪种?选择 Cloudflare Workers!为什么是 Cloudflare Workers?要回答这个问题比较困难,但可以回答另一个问题——「为什么不设置自定义域实现直接访问?」自定义域的访问存在限制设置自定义域的访问方式存在较多的限制,让我们先来复习一下上一篇博客中提到的 DNS 解析方案 1在这里,我们需要将图床访问域名通过 NS 接入 DnsPod 实现境内外的分流,但 R2 所允许设置的自定义域必须是通过 NS 接入 Cloudflare 的,这存在冲突。那如果我们先将自定义域设置为通过 NS 接入 Cloudflare 的工具人域名,再将图床访问域名通过 CNAME 解析到...
自建图床小记一——图床架构与 DNS 解析一直以来,我使用的都是使用付费的第三方图床,可惜最近几年为了节省成本,境内的稳定性出现了一些问题。过去一年中光是我本人遇到的无法访问的情况就有三四次,其中两次持续时间超过 2 小时,甚至有网友特意来 at 我告知我博客使用的图床出问题了,还有两次是在我作品验收前 24 小时内出现,幸亏我及时切换了资源链接。此外,境外 CDN 也从原先的 Cloudflare 换掉了,目前海外的解析结果似乎只有一个在美国的节点,其余地区(尤其是日本香港新加坡等常用的落地地区)的访问质量不佳,Google 的 page speed test 甚至提示我的图片拖慢了网站加载速度。基于上述种种原因,我开始选择自建图床,前前后后折腾了快一周后,新图床终于投入使用,目前我的博客已经完成了所有图片资源的切换。架构设计这一套架构使用 Dnspod 免费版实现在境内外的解析分流,将境内的流量导向又拍云 CDN 为境内的访客...
在 Linux 下使用 mitmproxy 抓取安卓手机上的 HTTPS 流量纵使安卓下有小黄鸟 HttpCanary 这种抓包神器,但手机一块 6 英寸的小屏实在是不方便分析流量情况,还得是 PC 的屏幕更大一些,处理起流量信息来更得心应手一些。把话说在前面,目前的安卓抓包有不小的限制Android 7 以下的版本: 直接以普通用户的权限安装 ssl 证书即可被信任Android 7 以上的版本: 安全性较低的应用: 需要使用 root 权限将证书移动至 /system/etc/security/cacerts使证书被系统信任安全性较高的应用(比如微信 7.0 以上的版本): 在满足上一条条件的情况下,需要阻止第三方应用使用自带的 ssl 证书信任范围(绕过 SSL Pinning)。通常情况下需要额外的手段对目标应用进行篡改,比如使用 justTrustMe 这个 xposed 模块,或者 frida。除此之外,Linux 版本 >= 5.5 的安卓设备也可以使...
1234514