将博客所有文章按 markdown 格式化

从上上周开始,把博客从 WordPress 迁移到了 Hugo。如前所说,AI 已经帮助把大部分的元数据给整理好,包括用 Disqus 的评论数据。

不过博客里包括了若干个平台的内容,之前的排版都千奇百怪,用 HTML 控制符不说,有的所有内容都在一行内,再加上中间有一段时间用微软的 Windows Live Writer 写的,总不是 markdown 友好的格式,甚至还有一些 * 或别的字符变成 markdown 控制符的情况,索性把所有内容都整理了一遍

曾经写过字的地方包括

到现在居然只有 QQ 空间还活着,而且注意上面都是 http 而没有 https

以前还在珞珈山水水木清华 BBS 上有很多内容,大多没有留下来,保留到本站的用类 telnet 的黑底等宽代码块的方式展示,尽量保持原来的感觉

曾经最喜欢的音乐平台是虾米,2013 年到杭州在阿里参加新人培训时,同组的还有虾米的同事,可惜后面就没有然后了,博客里留的链接或播放器也都再也打不开。曾经也用过百度音乐、5sing,也都打不开了

有一些插入的视频链接也失效了,整理时还注意到 2014 年时,B 站的域名还不是 bilibili.com 而是 bilibili.kankanews.com,都是时代的眼泪

自己写字的风格也变了很多。有时候大段,有时候很短,段落之间有只用一个换行黏在一起,或有按 markdown 空行分段。标点用法上,最开始用英文半角且标点后不空格,后来是英文半角接空格,再后来应该是中文字体们终于靠谱点,加上不再唯视觉导向而是遵循中英文排版更通用的规范,才主用中文标点

至于内容,不管是青春热血,还是傲娇中二,或是冲动犯浑,又或无病呻吟,虽然很多看着就羞耻,不过都是过去真实的自己,二十多年的记录,还是留着吧

外接键盘映射苹果 Globe/Fn 键

曾经在 macOS 实用小工具记录 2 里提到苹果修改了锁屏快捷键,可以用 Ctrl+Cmd+Q 锁屏,而不用模拟之前的 Power 键,对 Karabiner 不再有需求,结果最近还是装了回来

macOS 26 开始的全屏快捷键变化

在 macOS 26 Tahoe 之前,对应用全屏(新建占据整个桌面)的快捷键是 Ctrl+Cmd+F,这个在外接键盘上也能直接按出来,但后面改成了 Globe+F,这个 Globe 键就是苹果笔记本电脑或原装外置键盘上原来的 fn 键,上面有个小地球图标的,俗称地球键

这下好了,要全屏要么点窗口左上角的红绿灯按钮,要么用苹果笔记本机身键盘上的 Globe+F 的快捷键,在外接键盘上都无法使用

在外接键盘上切换全屏的尝试

macOS 系统设置里改快捷键

这个方式是说在 macOS 的系统设置里,增加一个「切换全屏」或「Enter Full Screen」的快捷键,然后映射成自己想要的键

我自己试过一下,不是那么灵光,也不太好用,放弃

使用第三方窗口管理工具如 Rectangle

Rectangle 是我近年来替换 Spectangle 后的窗口管理工具,本来随着新版本 macOS 把左半屏、右半屏、最大化等几个操作支持后,连这个工具都可以不用,但偏偏 macOS 原生的都是 Ctrl+Globe+LeftCtrl+Globe+RightCtrl+Globe+F,都还是无法在外接键盘上使用的

等为了在外接键盘上更方便使用窗口布局且不用去改系统快捷键,把 Rectangle 装回来后,发现 Rectangle 无法支持系统级的全屏操作,所以这条路也走不通

使用 QMK/VIA 改键位映射

我现在在办公室使用的 Keychron K8P 支持 QMK/VIA,那么去 usevia.app 可以快速改键映射

但是苹果这里又搞事情,原生的 Globe 键并没有相关键位码,网络上找到的方法要么是通过 QMK 改固件,要么说的用 Any 键传入 0x2100 但现在也不生效,至少没法起到 Globe 键的作用

使用 Karabiner-elements 改键位映射

参照 https://github.com/the-via/releases/issues/92#issuecomment-3805418968 这个 VIA 项目里 Issue 的讨论,最后还是用 Karabiner Elements 解决问题

我把自己 K8P 的截屏快捷键先改成 F24(默认行为是发送 Cmd+Shift+4 调用系统截屏快捷键),然后再到 Karabiner Elements 里把 F24 映射成 fn (globe),现在尝试按 F24+F,可以在支持的应用里切换全屏

现在就是这个键并不在右手小拇指周边,不是太方便,本来考虑把 Fn+L_Option 改成 F24 来达到映射,后来发现不行,因为按下 Fn 后,原来 F 键的逻辑也变了,这时候键盘工作在第二层键位上,而 F 键默认是在改键盘灯光 RGB 的参数

剩余对当前 macOS 里全屏快捷键的吐槽

之前 Ctrl+Cmd+F 的快捷键用的好好的,偏偏要改一个外接键盘无法支持的 globe+F,而且原来的快捷键几乎所有的应用都支持,改的这个好多应用又不响应,比如 VSCode 就不行,Ghostty 也不行

多年前让苹果成为开发者友好的设备,据说是 @dhh 及 Ruby on Rails 这帮人推动,现在 dhh 也对目前 macOS 的状态不满,在推动 Omarchy 项目,看看会不会三十年河东三十年河西,回头 Linux 变成开发者更友好的环境

将博客迁移到用 Hugo 驱动

过去这些年一直用 WordPress 做博客的后端,其实也没什么不好的,任何一个浏览器打开就能写和管理,虽然后端重了点,但一次配置好也不用怎么折腾,现在的 VPS 跑个 PHP 和 MySQL 还是够的

前两年考虑要不要彻底使用 Markdown 来做内容管理,同时把整站变成不用那么多依赖的情况,比如挂 GitHub Pages 上用 Jekyll 直接生成。后面找了下发现 Hugo 这个基于 go-lang 的本地生成服务,当时还尝试看看要不要迁移,不过文档写得总是容易,对我这个历经二十多年,里面糅合了好多历史平台的内容,跑完第一步后就懒得将其往前推进到一个明确可用状态

今年各种 AI 能力突飞猛进到真的可以干活了,于是找 Codex,在 GPT 5.6 Sol 的帮助下,先确认是可以迁移的,需要备份保留哪些数据,怎么转移和验证,并逐步算完成了迁移和整理吧

既有数据迁移倒是还快的,毕竟想要啥我都能给出来,不管是 WordPress 所在目录和之前各种静态文件所在的 wp-content,还是 MySQL 数据库表,或者是 WordPress 导出的 wxr,还包括用作评论的 Disqus 的所有导出数据

接下来的验证整合,确实验证了各种历史沉淀,光是博文,就从最早的教育网博客,到 Live Space、百度空间、QQ 空间、人人网、Blogspot、自建 WordPress 等等

评论早年很多平台的应该都被丢失了,最早接的第三方评论系统应该是多说,这个没了后应该一直用的 Disqus,在整理过程中还把 Disqus 历史迁移没匹配上的好些内容也给匹配上了,AI 真强大

再就是把历史的外链图片都想办法补到本地,包括之前用新浪微博当图床的,还好现在微博还在把相册下载到本地能匹配上,还有用人人当图床的,从我几年前备份的人人网数据里匹配到一些,但也有之前备份就有遗漏的找不到,还好从我自己的照片库,再把当年发文时配的原图人肉找到,在 Live Space 阶段的图,通过 OneDrive 的日志图片找到绝大部分,很诡异的有一张图不在这个目录,还好通过 OneDrive 按日期的照片墙,最终也找到了那张,在 Google Photo 的图现在还能访问,AI 就直接帮忙下载备份到本地了,有两张曾经传在教育网博客的无关紧要的示意图,找不到就算了,还有之前用 163 相册的图,就从自己的照片库里去匹配上,最终还有曾经在水木的一张图也不可能找到,就算了吧

在样式比对时,修复了部分代码块和引用块的问题,同时还发现历史一些应该是通过 Live Writer 发的旧文,是一个单行超大的 HTML 语法,曾经在 WordPress 上转 Markdown 应该也是转到懒得转,这次先把和引用块的临时处理下,后面应该可以借助 AI 的能力可以快速批量处理

不过,加上本地搜索功能后,开发环境需要的依赖还是不少的,从 AI 帮项目生成维护的 README 里就能看到

必须工具

  • Git;
  • GNU Make 或兼容的 make
  • Python 3.11 或更高版本;脚本只使用标准库,不需要 pip/virtualenv;
  • Node.js 20 或更高版本及 npm;只用于按 package-lock.json 安装和运行 Pagefind;
  • Hugo Extended;当前验收版本为 0.165.0,建议其他机器使用相同版本,至少必须在
    hugo version 输出中包含 extended
  • 部署机器还需要 OpenSSH client,以及包含安全更新并支持 --link-dest 的 rsync。

可选工具:Docker 或本机 nginx,用于正式切换前的 nginx 配置和 HTTP 冒烟测试。

git 作为版本管理没有什么好解释的,AI 用 make 来串起各种动作,拿 python 运行各种转换和校验脚本,node 是为了安装运行本地搜索支持工具 Pagefindhugo 是本次核心迁移组件,另外用 sshrsync 是为了推送发布到 VPS

大头基本完成,后面应该就是把单页目录样式小组件做下样式和功能优化,把整站的主题做做美化,再把历史文章都想办法转成 Markdown 格式,就安心写东西吧

孩子们迷上了疯狂兔子人SuperBunnyMan

前几年在 B 站上看有直播玩疯狂兔子人(Super Bunny Man)这个游戏的切片,当时感觉有血腥画面,加上主播太聒噪,并没有让玩

Steam 链接 https://store.steampowered.com/app/673750/

今年应孩子们再三要求,买了,因为操作相对简单,只需要摇杆左右,加一个 A 跳,和 LB 抓,两个娃都玩得不亦乐乎,并且在玩到特别熟练前通过奇怪的卡 bug 方式把一些正常玩还拿不到的奖励也拿满了,把所有关卡都解锁,虽然后面各种玩熟练后也能正常解锁

后面娃们不满足玩既有地图,说有没有 DLC 出新的地图,或者可以自己编辑,于是找到了 https://github.com/flarfo/SBM-Custom-Levels 这个可以自定义地图的第三方扩展,娃们又自己制作了一些互殴的地图,继续玩得不亦乐乎,目前都玩超过 100 小时了

只是不管是游戏本体还是第三方扩展,目前都不维护也没有活跃的社群,个人感觉如果有活跃的社群来交换地图会更好玩

同一网页引入两个不同版本jQuery引发的问题

昨天在前端工程遇到一个以前没有想到过的问题

在维护了十多年的主项目上,最近完成了把 Knockout.js 从用户侧前端子工程 acorn 完全移除的工作,原来的要么迁移成 React 实现,要么把自家运营运维侧的工作移到 staff 子工程。在 staff 子工程里目前还有 Knockout.js 的前端页面逻辑和组件,以及一些以前仿照 bootstrap 写的样式和 js 组件,以及基于 jQuery 的日期选择器 datepicker 和时间选择器 timepicker

但昨天发现某个页面一个封了 datepicker 的 input,通过 data-bind=“textInput” 跟 knockout.js 绑定有奇怪的行为。鼠标点选,input 输入框内文本改变,用 $(el).val() 取的值也正常,但 ko 绑定的值不变。如果直接在 input 框里输入,ko 绑定的值就能正常更新

直接 input 输入可以改变 ko 绑定值,说明 ko 绑定没出问题,鼠标点选后 ko 绑定值不变,说明监听机制哪里有问题。因为这一波迁移里把原来多个版本混用的 ko 统一到了 3.x,先查是不是 ko 跨版本有监听事件的变化,ko 官网没说,某 AI 说 ko 3.x 开始还是现代浏览器有啥啥啥事件不再绑定,但尝试手工验证, $(el).trigger("input")$(element).trigger("change") 这些明确说应该有效的,也不能让 ko.observable 的值更新

自己看业务代码和 datepicker 的代码(都是十年前自己写的),git 记录都显示没变啊,调试过程该有的事件都正常触发。把问题代码涉及的链路和表现丢给 Codex GPT-5.4 xhigh,一开始还说需要检查 ko 绑定机制和 vm 初始化顺序,但这些跟之前正常工作时都没变化。后面揪出来在 jinja2 模板层,渲染 HTML 时引入了两次不同版本的 jQuery,在 ko 绑定时用的第一版,后续 datepicker 初始化时关联到第二版,两边 $.event 不通?两套 jQuery 各自维护了自己的事件缓存和 handler 列表,所以 datepicker 库通过第二套 jQuery 发出的事件到不了 ko 在第一套 jQuery 上注册的 handler,而人肉改 input 里的内容走的浏览器原生 DOM 事件,ko 用的那一版 jQuery 有正常监听能生效。最终移除没必要多引入了一次的 jQuery 后,确保 Knockout.js 和 datepicker 使用的是同一版 jQuery 后恢复正常

前端这些诡异的大坑啊,以前为了弥补浏览器能力不足而需要 jQuery 去封装的各种基础能力,现代浏览器都原生支持(主要是选择器和事件触发监听),未来能走原生都走原生吧

断电长按电源键可解决绝大部分USB-C/雷电口设备问题

个人和公司都遇到过笔记本电脑或显示器或别的设备的 USB-C 或雷电口,不能充电、传输信号等问题,大部分情况下,断电后长按电源键做重置就可以解决绝大部分问题

  • 断电

    • 笔记本电脑需要拔外接电源,最好在 BIOS 里断掉内置电池供电,取下一切连在笔记本电脑上的外设,包括但不限于 U 盘、无线鼠标接收器、网线等
    • 显示器拔掉电源线,最好也把所有数据线也拔掉
  • 长按电源键

    • 笔记本电脑在 BIOS 断内置电池的情况下长按电源键不会开机,保持按下 10 秒以上,最好 15 秒或 20 秒。如果没有 BIOS 断内置电池的机型,大概率长按下会先开机,再自动关机,不管他一样按够时间
    • 显示器就是长按电源键,按够时间
  • 恢复

    • 笔记本电脑插外接电源适配器,正常开机就行
    • 显示器插好电源线和数据线,正常开机就行

原理:设备的 USB-C 控制器或雷电控制器进入了奇怪的工作状态,断电长按电源键是让其恢复默认状态,就是重置

优派VX2478-4K-HD使用12V5A电源可以消解绝大多数故障

公司在 2020 年开始分批采购了不少优派 VX2478-4K-HD 这款 23.6 英寸的 4K 显示器,官网在 https://www.viewsonic.com.cn/products/lcd/VX2478-4K-HD

从前两年开始,我们陆续有同事反馈这个显示器点亮后需要很久才能让电脑有显示信号传输过来,开机后也不会立即出现优派那三只彩色小鸟的 Logo,一度以为这么快就到使用寿命,后来在 https://www.v2ex.com/t/1068514 这里看到一个闲鱼大佬神奇的说法,这款机型的电路设计有问题,把原装的 19V 2.2A 的外置电源适配器换成 12V 5A 的就好

实践的确如此,我司已经有超过 70% 的这款显示器通过更换电源重获新生,淘宝上买的广东汕头发货十几块钱的「台达12V5A电源,接口55*25」都能用

使用 Advanced Font Settings 在 Chrome 系浏览器中正确显示中日韩字体

众所周知浏览器在某些场所会错误判断当前文字隶属的语言,然后会调用不同的语言对应的字体来显示,比如中日韩(CJK)共享的大量汉字,在不同的语言里显示字体不一样就会看着很别扭,对,就是 Twitter,现在叫 x.com 的上面,经常看到犬牙交错别扭的显示

哪怕在浏览器里修改了字体,但只对操作系统默认语言生效,并不对所有语言都有效,还是可能会回落到其他语言的默认字体上,所以需要 Advanced Font Settings 这个插件来解决显示不一致的问题

CJK 地区比较推荐使用 Noto 系列的字体,可在 GitHub 上 noto-cjk 这个仓库免费下载使用,虽然有下载说明,但我个人体验下来还是有一些奇怪,只下载通用文件可能是不够的,需要下载区域或语言特定的字体,所以我装完后一共有十个字体

  • Noto Sans
    • Noto Sans JP
    • Noto Sans KR
    • Noto Sans SC
    • Noto Sans TC
  • Noto Serif
    • Noto Serif JP
    • Noto Serif KR
    • Noto Serif SC
    • Noto Serif TC

在 Advanced Font Settings 里对默认语言选 Noto Sans / Noto Serif 不带后缀的这个,特别是浏览器和系统语言是英文的情况。其他几个语言必须要选带后缀的字体才能正确显示,对应关系分别为

  • 韩语 Korean: Hangul - KR
  • 日语 Japanese: Japanese - JP
  • 简体中文 Simplified Chinese: Simplified Han - SC
  • 繁体中文 Traditional Chinese: Traditional Han - TC

设置好后可以访问 /blog/font_test.html 来确认是否都正常渲染

记一次 VPS 全挂加数据恢复

最近 CloudCone 这个 VPS 供应商出了一次大锅,所有机器全挂加数据全丢,截止到本文发布时还没好,参考他们截止到发文时的故障说明 https://status.cloudcone.com/incidents/346624

用来使用各种 AI 工具的梯子没了找别的就是,但个人网站和一些数据都还在上面,还好很久之前配置了一个小脚本自动备份到 Dropbox,看了下网站数据基本都在,最近的 MySQL 备份好像挂了,但期间也没写几篇 blog,而且 RSS 输出的可以通过 Feedly 找回,人肉再补发一下好了

长滩游 part0

又一份十年前的草稿,直接发吧,看简要记录也有了,多年过去也没必要扩写,这个系列也不会有更多 part

加入美登后维持每年一次出境游的惯例,2015-2016 是在 2016 年春节后去了菲律宾的长滩岛。当时有简单记录一下给第二波的人做引导 https://www.yewen.us/blog/2016/03/tips-for-boracay/,为了给自己一个纪念,也为了顺带宣传下公司福利,好好记一下

本来看预定的时间快到莫莫预产期,今年出境游就算了,还是安心在家呆着吧,家喵表示你跟家里人都说下免得自己怨念,结果喵妈倒是很鼓励的说让他出去玩啊,你离预产期还有好一段呢,怕什么怕,于是变成了喵把自己坑掉,狗出去了快一周

一开始定地点还纠结了好久,因为公司业务特点没法大家一起走,必须分两拨,这样每一次人不会太多,找旅行社定制行程就有点贵,加上预算和办签证的时间限制,日本台湾啥的也去不成,最后定了长滩岛,一开始笨狗只想到了美帝哪里有个长滩,一查才发现原来是菲律宾的一个旅游海岛。公司通过途牛还是哪里找的自由行,说是自由行,其实从杭州出发一直到酒店入住,全程都有导游陪同。国内段一个,负责出入境到那边下飞机出机场,不过后面也会一直跟到酒店;在菲律宾时一个,出了机场在菲律宾境内就听他的。回程类推

出发那天按国内导游的指示说晚上十点要集合,其实是大约十点半才开始值机安检,我们第一波走的太谨慎,到机场太早然后干等了很久,而且我们很失误没有带点 UNO 啥的消遣,在机场傻等了很久。在机场碰到一个伦敦小哥,很热情跟周围各种人搭讪,笨狗本来只是顺便帮忙替他和周边的国人翻译了一段,后面无聊也跟他瞎扯了好一会,也挺有意思的,那哥们做运动服饰生意,过来杭州周边拜访供应商,前面去过深圳广州上海,到杭州吐槽地方都太远了,住处出来要坐好久车,去拜访的供应商估计都在诸暨义乌这些地方,来回是够折腾,然后那几天刚好杭州冷的要死,小哥一身单衣在雨天逛的西湖,想想都哆嗦,在机场碰到是他要去清迈了,刚好我们去年也去过清迈,又有共同话题,小哥一直表示那边要暖和且便宜舒服很多,杭州真的是冻死了,跟他解释杭州在中国一般是被认为是南方,被他吐槽特么冷成这样你告诉我这是南方?作为 IT 男,很关心了下对方在大陆怎么解决通讯问题,看起来是买了张类似神州行的不记名卡用,那个小哥主要用的 What’s App,居然没有被墙,想加我们但是我们好像没一个人装了这货

这种相对便宜的行程必然是红眼航班,半夜的飞机凌晨到。来回说是旅行社包机,其实就是各种渠道凑的散团最后会由两三个导游带着,同行的其他人多半素质堪忧,比如各种大声喧哗、飞机上各种来回乱跑,这次还遇到在你前后脱鞋睡觉熏死你的奇葩。因为大陆和菲律宾的关系紧张,个人签证似乎很难办,团签也是另外的纸条,不会在护照上留下任何菲律宾的出入境痕迹,出行前护照什么的一开始都在国内导游身上,等他办好登机牌后才发护照和登机牌给我们,所以还必须得跟着导游走才行。关于这种又想赚游客钱但是又要维持国体的事情,大家后面也欢乐的吐槽了好久,似乎越南也是类似的?南海周边国家都这样么?

新同事 Luffy 在前公司离职前刚好赶上他们也是去长滩岛旅游,他们回来的飞机就是我们走的飞机,按他们的时刻表应该是晚点了挺久,但按我们出发的时刻表似乎没晚点,他们返程时正是杭州最冷的时候,估计下飞机后冻的够呛。去的航班是亚航旗下某个菲律宾小廉航的 A319 执飞,全机经济舱,路上发了份很难吃的饭,一小瓶封口像哇哈哈钙奶的矿泉水,跟熊吐槽为啥要这么发水,给个普通瓶装的没喝完下飞机还能继续喝,难道瓶盖成本这么高?

凌晨四五点到达卡里波国际机场,下飞机的时候天已经蒙蒙亮,一出机舱潮热扑面而来,过关出机场我们这个散团被一辆当地大巴接上,后面到酒店的行程就是在当地导游的指挥下前进。去长滩岛有两个机场,一个是我们去的这个距离还有大几十公里外的卡里波,好处是国际机场可以直飞,坏处是从机场到上岛的码头要坐快两个小时大巴,另一个离上岛码头很近,但是机场小只能菲律宾国内飞过去要转机,不过看更近的那个机场似乎在扩建,不知道会不会以后也能直飞过去

当地的导游看起来应该是东南亚的华裔,或者闽南语地区过去的人,中文说的一股港台腔,在大巴上忽悠我们不要在当地随便报旅游项目,会有人身危险什么什么的,他们那边有更合规合理的项目怎样怎样,我们大家都没理他。菲律宾比索在国内只能换到 1000 面额的大钞,菲律宾又有一个很奇葩的出入境外汇现金限额,出行前我们每人拿了 1w 的比索和 200 美金,一路还想如果要零钱买水或付小费怎么办。当地导游在大巴上很体贴的跟我们说他可以提供换汇服务,人民币兑比索 6.50(中间价一般在 7 以上),不过如果有比索没花完,回程时还可以找他按这个汇率换回人民币,我们都没换返程时也没见人真的跟他大额换回,估计也就是个说头。另外当地导游允许每人从他那换 1000 的零钱,给的大概是 500/200/100/50*2/20*5 这样的。从卡里波去上岛的码头半路经过一个小服务区,大概也就国内一个加油站的规模,下车找当地导游换零钱,买水再破开,目测当地饮品价格跟国内差不多,类似的旅游点或宰客区更贵。关于各种游记上提到路上搬行李的小费,导游表示他都统一给了,回程时每人给他 100 整就好,每次 20,来回上下岛共四次,酒店搬行李一次

出发前在万能的淘宝预定了个一日浮潜跳岛行程,准备了手机卡和充值卡。感觉菲律宾的移动运营商在游客友好度上完全不考虑,非得是一个裸 SIM 卡然后充值,继而发短信选不同的流量或通话套餐,但是为啥不直接弄个一周预充值的套餐,大家不用思考,价格也差不多。我们用的是 Globe 这家运营商,下飞机后在大巴上插卡充值选套餐,发现淘宝卖家说可以多个套餐叠加的其实并没有,最后只用了 supersurf200 这个 200 比索 5 天无限流量的套餐,反正在那边也不会打电话发短信,有信号的地方互相微信视频联系,没信号的地方电话短信也没用

到达长滩码头时惊呼海怎么可以这么清,真的是水晶一般透亮,直接能看到海底

再转乘小货车改装的双条车到酒店,吃饭,回屋睡觉,隔音差,出门只能靠酒店的班车,下午出门沿海滩瞎逛下,买椰子喝水,在菜场的 smoke 吃饭,咸,在 Dmall 买大桶水带回