杜郎俊赏 - dujun.io

解决 SVG 转字体出现空白的问题

svg-fixer封面
我在制作专栏图标时发现有的 SVG 转为字体时,某些交接处会出现空白: 检查发现某些路径(path)重叠会发生这个问题: 我首先尝试消除重叠,使边缘贴合,然后发现自己完全没能力完成这样精准的绘制。最终我还是找到了解决办法:SVG Fixer。实现原理是: Convert SVG Strokes To Fills Attempts to fix your svg by turning it into a fill / single path (and making it font compatible as a bonus). 安装和使用方法: #安装 npm i -g oslllo-svg-fixer #使用 oslllo-svg-fixer -s ./1.svg -d ./

2025-02-04

内嵌抖音视频

抖音开放平台提供了内嵌抖音视频的方法,详见《通过VideoID获取IFrame代码》。 示例代码: 与B站不同,抖音iframe没有做自适应,需要结合自己网站调整样式。下面以我的网站为例。 手机端代码: .douyin { width: min(324px, 100%); margin-inline: auto; overflow: hidden } .douyin iframe { aspect-ratio: .4821 } 电脑端代码: .douyin { width: max(730px, 100%); margin-inline: auto } 写这篇文章的起因是我刷到了上面这条搞笑视频,想写文章分享。之前在风记星辰那里看到过内嵌抖音视频,参考他的样式,并研究了抖音官方文档,实现了期望效果。不过有一个坑是父级元素宽度小于730px会强...

2025-01-12

iOS Safari 回退导致 alert 失效

我在文章页增加了解析运行 html 和 js 源码的功能。然后发现一个诡异的问题,在手机端 Safari 按回退和前进键会导致 alert 失效。验证了电脑端和手机端各种浏览器,仅手机端 Safari 复现这个问题。 我查到的解释是: alert/confirm/prompt dialogs will not be displayed if the user has navigated back to a pushState location. Once a user has navigated back (at any point), calling alert(…), confirm(…), or prompt(…) will not display dialog boxes. confirm(…) will always return false, and prompt(…) wil...

2024-11-10

ddns-go 配置三级域名

为了方便网址分发,注册了免费三级域名 dujun.ggff.net 备用。域名接入 Cloudflare,并用 ddns-go 做动态解析。 按照经验填写域名和泛解析: dujun.ggff.net *.dujun.ggff.net 结果发生报错:“在DNS服务商中未找到根域名: ggff.net”。因为之前 dujun.eu.org 和 dujun.us.kg 就是这样填写的,同样是三级域名,我搞不清问题出在哪里。最后在 issues 找到了答案,有些三级域名要这样配置: :dujun.ggff.net *:dujun.ggff.net

2024-10-29

全屏事件触发 resize 事件

我之前发现播放视频时进入全屏会闪退。奇怪的是 Chrome 和 Firefox 存在这个问题,但 Safari 正常。正因为如此对我造成了误导,没有找到问题所在。直到今天发现了这个乌龙。 拖动改变浏览器窗口大小时会造成图文排版变形,所以我监听到 resize 事件就会重新渲染页面——表现之一就是视频进入全屏时“闪退”成了非全屏窗口,video 元素被清除了,重新渲染为缩略图 img。 那么解决这个问题就是监听到 resize 事件时增加一个判断是否全屏。 is_fullscreen = () => !!( document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement...

2024-10-25

Redis 禁用持久化

我用 Redis 做缓存,纯内存运行,不需要持久化。原先只需要修改 redis.conf 两处配置: 禁用RDB持久化:注释 save 开头的配置项 禁用AOF持久化:appendonly 改为 no Redis 升级到新版后,我查日志发现仍然有"DB saved on disk",也就是禁用 RDB 失效了。对比新版配置发现,不能只注释掉 save,还要明文写入: save "" 然后要删除已经生成的 RDB 文件,否则重启后还会从磁盘加载数据。执行命令 config get dir和config get dbfilename找到文件删除。 最后重启服务使之生效。

2024-10-15

Docker 限制容器内网络带宽

要限制 Docker 容器内的网络带宽,没有原生命令支持,需要借助工具。最方便并且对原有部署改动最小的办法是创建 tc-docker 特权容器来限制其他容器的带宽。 Docker CLI 创建 tc-docker 特权容器,保持后台运行,管理其他容器的网络带宽: docker run -d \ --name tc-docker \ --network host \ --privileged \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var/run/docker/netns:/var/run/docker/netns:shared \ codyguo/tc-docker 在原有的 docker run 命令中增加 label 参数进行带...

2024-10-13

Debian Server 安装桌面环境

有些云厂商只提供 Linux 镜像,不提供 Windows 镜像。此时如果需要桌面环境,可以 dd 成 Windows。但对于低配服务器,在 Linux Server 安装桌面环境是更合适的选择。 我习惯用的服务器系统是 Debian。对比几款常用的桌面环境,在资源占用低和美观易用的妥协中,最终选择了 Cinnamon。 #安装 Cinnamon 桌面环境 sudo apt install task-cinnamon-desktop #安装 XRDP 服务 sudo apt install xrdp

2024-10-12

乱码导致 json_encode 失败的解决方法

发现访客日志缓存失效,定位到写入 redis 时数据经 json_encode 变成了空字符。调用 json_last_error_msg() 打印出报错信息为:"Malformed UTF-8 characters, possibly incorrectly encoded"。 解决办法是增加参数 JSON_INVALID_UTF8_IGNORE,过滤掉乱码字符: json_encode($value, JSON_INVALID_UTF8_IGNORE);

2024-09-19

极简界面内嵌B站视频

如果文章中嵌入了B站视频,但并不想引导到B站——只作为“图床”使用,可以使用极简界面。 B站官方的嵌入代码形如: 改写为: 只需要替换地址并增加两个参数,其中: 原地址:player.bilibili.com/player.html 替换为:bilibili.com/blackboard/html5mobileplayer.html 增加参数1:hideCoverInfo=1 表示隐藏播放量等信息 增加参数2:danmaku=0 表示默认关闭弹幕 原始内嵌播放器效果(增加了禁止自动播放autoplay=0): 极简内嵌播放器效果:

2024-08-28

分页: 1 2 3 4