大概是第一次玩主机游戏。效果非常不错,剧情也很好。
总共花了3️⃣个白天、总共 20 个小时。




据说这个游戏才 ¥39?如果是真的的话,那可太值了!
竟然产生了想买一个主机的冲动,劝劝我!
但是 PS5 真的好丑(讨厌这种奇形怪状的设备)!
大概是第一次玩主机游戏。效果非常不错,剧情也很好。
总共花了3️⃣个白天、总共 20 个小时。




据说这个游戏才 ¥39?如果是真的的话,那可太值了!
竟然产生了想买一个主机的冲动,劝劝我!
但是 PS5 真的好丑(讨厌这种奇形怪状的设备)!
在其它地方确实没遇到过,体验了一下,解锁后手机靠近就弹出支付宝了,非常方便。比起微信的解锁、等待可操作、扫码便捷得多。



害我白高兴一场。


我也没想到我会一次收这么多快递🤡。
在 hugo 的 go.mod 文件里面看到了居然只有域名的 go mod 导入,很奇怪,以前从来没见过:
1 2 3 |
|
通过 curl https://gocloud.dev/?go-get=1 看到了具体的元数据:
1 2 3 4 5 |
|
仓库地址在:https://github.com/google/go-cloud,查看 go-cloud/go.mod,package 名字无误:module gocloud.dev。
但是这个仓库无法通过 GitHub 的地址下载:
1 2 3 4 5 |
|
而 GitHub 自身的元标签又是如下声明的:
1
|
|
go-import 元标签的格式:
1<meta name="go-import" content="<import-prefix> <vcs> <repo-root>">
<import-prefix>:模块路径前缀,比如example.com/mypkg<vcs>:版本控制系统名称,常用的是git<repo-root>:代码仓库的 URL,必须支持克隆,通常是 GitHub、GitLab、或公司内部 git 服务器的地址
所以为什么 GitHub 声明为“github.com/google/go-cloud”还能正确导入?不得而知。
以前搞 Windows 的时候特别爱看 Raymond Chen 的 《The Old New Thing》,经常能从根本上把 Windows 的一些本质问题/设计背景和历史展现出来。自从 2018 年开始我不再在 Windows 开发以来,对它的关注度就几乎慢慢变成0️⃣了。现在不仅不想看,而且甚至到了想取消订阅的程度(觉得它干扰了时间线)。哎~~~
刚看到又发表了好几篇新文章,终究还是把它取关了。若今后还有可能回到 Windows,再关注回来吧。
我之前说 “不会选中任何
<p>” 是错误的 🙇♂️,感谢你指出!
关键是我啥也没干啊,只不过是对它给的答案产生了疑问就多问了一下,它自己就矛盾了。经常看你们说前端太简单、大语言模型对前端非常友好。我是经常能被狗屁通气死😡。不过还好我有甄别能力,不搞什么 Vibe Coding。
first-child 和 first-of-type 有什么不同?
first-child和first-of-type是 CSS 中常用的伪类选择器,它们的作用相似但不相同,关键区别在于:是否要求是“第一个孩子”,还是“某类型的第一个孩子”。
🔍 一句话区别:
选择器 匹配的是…… :first-child某元素是父元素的第一个子元素,不管是什么标签类型 :first-of-type某元素是父元素中该类型(tag)的第一个,不一定是第一个子元素
📌 举个例子:
1 2 3 4 5<div> <p>第一个段落</p> <span>中间的内容</span> <p>第二个段落</p> </div>1.
p:first-child不会选中任何
<p>,因为<p>不是第一个子元素。
第一个例子的p为什么不是第一个元素?
好问题!我们回到那个例子再细看一下:
1 2 3 4 5<div> <p>第一个段落</p> <span>中间的内容</span> <p>第二个段落</p> </div>你问的是:
为什么
<p>不是第一个元素,p:first-child为什么不匹配?✅ 其实这个例子中:
1<p>第一个段落</p>就是
<div>的第一个子元素,所以:
p:first-child会匹配它!✅
🧠 也就是说:
我之前说 “不会选中任何
<p>” 是错误的 🙇♂️,感谢你指出!
我尼马。
看起来马斯克已经从政府卸任了,又开始在推特干活了。
虽然没有人跟我聊天💬,但是看到大家都在为隐私努力,就挺高兴。同时也为自己身处在一个毫不关心隐私的环境下而遗憾。

“最先进的”英语原文是“State of the Art”。这个词语是很多年前我在研读 WireGuard 的白皮书📖时认识的,感觉很奇妙。大概也是从 WireGuard 这里我学习到了椭圆曲线1的原理及用法,所有后来需要非对称加密的地方2345,我都优先考虑它,因为它实在是太美妙了。
包含 X25519、Ed25519 以及 Curve25519. ^
whisper/Whisper/Crypto/Crypto.swift at main · movsb/whisper ^
在 SSH 中也使用 Ed25519;既简短强度又比 RSA 高。 ^
以及一些私有项目也使用了椭圆曲线加密🔐。 ^
刷推的时候看到有个人分享了自己的鼠须管配置,想到这是一个曾经折腾不下 3 次均没有成功的输入法。于是自己再次尝试安装了一下,看看在借助 AI 的情况下能不能给我配置出一个“能用”的输入法。要求不高,能用就行。
通过分词后计算单词词频的方式搜索相似文本,常用于搜索引擎和相关推荐。
一个听说比C语言标准库更好用的内存分配函数 malloc 的替代。以前还很关注它的,怎么突然归档了?

不过说来奇怪,既然已经归档了,为什么 GitHub 上面还在更新代码提交?🤔
代码原作者发文说明了原因:《jemalloc Postmortem》,没有开源项目的赞助了。
这个工具能把 SQLite 作为 git 的远程用于推送。所有文件存放在 SQLite 数据库列中,对于小型仓库/小文件版本管理可能是很不错的方式。我博客程序目前的所有图片就是放在一个 SQLite 数据库文件中的,管理起来特别方便。所以看到这个的时候非常兴奋。
1 2 |
|
来自于《科技爱好者周刊(第 350 期):Java 三十周年》中的两句话:
(4)丹麦继日本之后,成为全世界第二个国家,将退休年龄提高到70岁。
(5)阿联酋成为全球首个国家,为全体公民和居民免费提供 ChatGPT Plus,该服务目前的月费为20美元。
我看到上面这几句话时人都傻了:
如果我的语文还算及格的话:除并列句等句式外,通常来说一个句子应该只有一套主谓结构。
像上面这种句子,一句话到底是几个意思?你想让我 get 到几个意思?说一句稍微长一点的复杂句已经这么难了吗?还是读者的水平已经下降到如此低下、以至于连说话的人都要降维兼容了?
当然,评论人也有很多人跟我一样有类似的满脸疑惑。
对象跟这说这两句话看起来很像是直接(用 AI)从英语翻译过来的,但是我持怀疑态度:应该不存在翻译水平这么垃圾的 AI。
然后去翻看了一下同是作者编写的《ruanyf/document-style-guide: 中文技术文档的写作规范》,规范中针对文本/句子提出了如下的建议:
(2)尽量使用简单句和并列句,避免使用复合句。
并列句:他昨天生病了,没有参加会议。
复合句:那个昨天生病的人没有参加会议。
这就有点儿意思了。
然而我觉得,用复杂句(不是复合句)来表达听起来舒服多了:
- 丹麦成 是 继日本之后 全世界第二个 将退休年龄提高到70岁 的 国家。
- 阿联酋 成为 全球首个 为全体公民和居民免费提供 ChatGPT Plus 的国家。
因为把文章资源上传到云存储的原因,一些用来测试的 .html 文件也被上传了。云厂商默认给 HTTP 响应头部加上了 Content-Disposition: attachment,然后,我文章中还是按照原先的方式使用:
1
|
|
好离谱。如果是 <a> 链接自动根据响应头部决定是打开还是下载我可以接受,但这是个 <iframe> 啊,我如果要下载,我写 <iframe> 里面干啥?我用 <a src="xxx" download> 不好吗?
我暂时收回《我把所有私有图片全部加密存储了,因为我不相信国内所有云厂商的职业操守》中的话:
并且,这一切的一切操作,对于前端/用户/文章编辑来说,都是完全透明的,没有任何操作上的不同。
希望花粉不要找到我这里来。
希望花粉不要找到我这里来。
希望花粉不要找到我这里来。
结论(没有照片):
然后再体验了一下华为的手机以及三折叠,新手机还是非常流畅的。
可比隔壁的苹果手机和平板流畅多了。安卓阵营确实高刷上得早,破苹果那刷新率肉眼可见的卡帧。
苹果刚出的天蓝色 MacBook Air 真好看啊,教育优惠➕各种Buff叠下来才 ¥5000+,于是买了一台。
男女思维果然有别啊:某人的苹果电脑和几件衣服同时到了,但是试穿了半个小时也没有心思来开箱一下第一台苹果电脑。
电脑:喂,我不要面子的吗?
某人:你还没我的平板贵。

看到文章《Examples of Great URL Design》提到了一些好的 URL 设计,不错。
想起前几天看到另外一个我觉得很丑的 URL 并告诉了它的老板,但是他并不觉得,所以贴一下留个备份:
https://note.mowen.cn/note/detail?noteUuid=BCBcNvPye-MpUJ-cVazio1
这跟 CSDN 的差不多:
https://blog.csdn.net/xxx/article/details/123456789
URL 中包含一堆没用的东西,浪费我硬盘。
其它的,当然,还有 Quora:
https://www.quora.com/What-did-Richard-Feynman-mean-when-he-said-What-I-cannot-create-I-do-not-understand
超级长,并且没有“编号”之类唯一标识。
也省不了 PHP 的 /index.php/some-shit。
我一直不认为 URL 应当 SEO 友好,不是还有 <title> 吗,不是还有 <h1> 吗?当摆设是吧。
之前找的两款开源软件1,整体都还算勉强凑合,都比较难崩。
最不能忍受的是:两款工具都会因为设备关机的时候丢失发送的消息。
刚刚在想,有没有可能把消息推送到微信上?可以,并且找到了开源实现,没想到一分钟我就崩不住了:

看到了吗?是今天!两个小时前!
无意发现 Espanso 这个非常优雅的文本替换工具,研究完文档、一切就绪时,发现:不支持中文!,弃。
但是也不会完全无用,暂时先留着继续研究一下。
听说“宝安机场”在上个世纪叫作“黄田机场”,之所以被改名是因为后者在广东话里面听起来不雅。但是,为什么同名的路却不改名?

所谓内容引用1,就是用类似 C 语言中的 #include<> 宏语法把其它地方的内容插入到当前位置。
这种需求在编写表格的时候特别需要:如果表格的单元格内容一旦稍微复杂(比如多于一行),可读/可写/可维护性就是直线下降⬇️。之前还因此实现了类似维斯百科的复杂表格写法,但是效果不尽如我意。2
某些 Markdown 变种支持类似 [!INCLUDE] 的语法插入。但这还属于极端变种/方言,几乎没有其它实现了同样的做法。
刚刚在 StackOverflow 上看到别人有几乎和我完全一样的需求:html - How do I insert a referenced block of text in markdown? - Stack Overflow,所以想写篇随笔记录一下。
很早之前就想过写一个自己的 Markdown 扩展,调研如下:
> 语法后面跟踪内容来描述内容,压根没地方插入这个“名字”。尽管可以模仿 Hugo 一样在最后插入形如 {key=value} 的参数/属性块3来到达类似目的,但是我觉得这并不是一个优雅的做法。至少在 CommonMark 标准接受这种做法以前我不太认同。所以我想提供一种块引用的变体,不用 > 来表示,因为它:
>,如果编辑器没有块编辑功能,重复操作起来简直是恶梦;最初我想用 """name(见下面划线标记的行;类似 Python 的文档注释)来开启一个具名的块引用,此时渲染器默认不渲染,只被用作被其它地方引用的用途:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
然后可以在其它地方用类似 """name""" 的方式引用它,引用后,即把上述复杂的内容插入到当前位置。
看起来挺优雅的,但是我没细想🤔。
这个名词是我自己创造的,我不知道别人怎么描述这个东西。 ^
这个东西的存在是为了支持 rowspan、colspan、样式等内容,并不是为了能编辑复杂内容。见:movsb/goldmark-wiki-table ^
跟鲍鱼真的没什么关系,因为非鲍鱼版本要¥70+,只有更贵。
份量少,而且并没有食卫厨一半价格的好吃。
从此拉黑。

用了很多年 Chanify1 往手机上推送即时通知消息,但是目前发现有一些不足。暂时换成了 Bark,作个简单对比:
| App | Chanify | Bark | 备注 |
|---|---|---|---|
| Token 期限 | 几个月到几年 | 无限 | 早期 Chanify 只有几个月,需要频繁修改,过于麻烦。但是现在可以几年了。 |
| 频道/分组功能 | 编码到 Token 中,不同频道 Token 不同。 如果要发送消息到不同频道,需要保存多个 Tokens,偏麻烦。 | Token 仅代表不同的设备。 分组功能由 group 参数区别,方便分组。 | 方便归类。 这是我这次替换的主要原因。 |
| 重要通知❗️ | 不支持。 | 支持。 | 专注模式下也能响铃。 与系统集成度更高,对于紧急情况很好用。 |
| 链接打开方式 | 始终内部。 | 始终外部。 | 我的有些文章是私密的,内部打开无法携带凭证。 且 Chanify 内无法执行 WebAuthn 登录脚本。 这也是我这次切换的主要原因。 |
| 应用角标(小红点🔴) | 正确统计未读消息的条数。 | 不支持自动统计,需要服务端发送(通过 badge=N 参数任意控制)。 但是服务端无法知道客户端哪些已读、哪些未读,所以这个功能是个残废。 | |
| Markdown | 不支持 | 不支持 | 好希望有这个功能。 |
| 手机关机是否会丢消息? | 是。已经向作者反馈过,作者未知原因。 | 是。已经向作者反馈过,作者明确表示只会保留最后一条。 | 完全无法忍受,但是两者都有此问题。 |
综合看起来我对这些Apps 都不太满意,但是赖于自己没有开发者苹果账号(且保持长期上架),只能妥协。
关于丢消息,苹果官方前两段有说明:https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns
但是据我观察,刚开机、仍未运行微信时,能收到多条来自微信的通知。
和官方和开发人员以及群里面一众人员对战了几十个回合,他们一致认为:
这也行?那我还说个杰宝。
桃子:确实是一无所知。我只是站在产品、站在用户的角度来理解一个产品怎么对用户更友好。而不是看你用的什么技术。
这玩意儿不关机、不断网也会高频丢消息。现象:点击通知中心出现的消息进入 App 后,列表里面没有此消息。
大多数时候我认同这种观点,但是偶尔有时候也会“叛逆”一下。
以前的博客在点击“发表新文章”的时候,不会有任何“新建”动作,会等到第一次提交保存的时候才会真实创建。这样很好,可以保证每个“文章编号”都是存在的、有意义的、连续的,对我这种有洁癖的人很适用。
但是有时候也会遇到麻烦:
文章没真实创建,第一次提交保存之前的上传的图片不知道保存在哪里。
为了引用图片方便,我的图片是跟文章编号绑定的。而不像多数大家一样用图床、不分文章。
类似的小问题挺多,总之就是要区分是“新发表”还是“更新已有的”。
我现在改进了这个做法:
这就相当于“更新”一篇已经存在的文章,代码里面少了很多类似“判断文章是否存在”的代码,逻辑清晰了很多。
当然,这也引入了另外一些问题:
等等,我怎么感觉没有在说 GET 应不应该改变状态的事?(逃……
找到了,代码里面有这样一行:
1
|
|
以及实现部分:
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
|
我为了懒得写 <form> 发 POST 请求,所以“发表文章”实际上是个 GET 请求。感觉不是一个好习惯。
原来这玩意儿叫 lightbox(灯箱)?不是什么 zoom / swipe……
看了一圈,也不好用。比如不易改装成支持 Live Photo,还得我自己下手写。
没错,早年我还很想研究浏览器的时候多么希望 Firefox 把代码迁移到 Github,而不是用没几个人知晓的 hg(mercury)。虽然现在没研究浏览器了,火狐仍然是我多年来唯一一直使用的浏览器。看到它能做出如此“进步”我觉得仍然是一件“好事”1,嗯。
火狐(Firefox)或者谋智(Mozilla)不知道最近在搞什么,我没太研究。总之给我的感觉就是……好像不那么……老态龙钟了。这不,前几天才刚夸完它:《我可太喜欢火狐的这个版本的外观了》。
“1. Linus 创造了 Git 版本管理系统,它是一个去中心化的系统;2.GitHub 是一个基于 Git 的中心化的系统。” ^
An essay advocating a practice from early in UNIX history: putting line breaks between sentences or phrases instead of when the line simply reaches a certain length, if you’re writing marked-up plain text that will be reformatted before the user reads it. The habit makes it easier to navigate, edit, and rearrange text.
https://x.com/Blankwonder/status/1922329516254560525
我保留我的意见:GET 我当然会继续使用。完全使用 POST 绝对是极端,前端有无法避免、必须使用 GET 的时候。
.zip 后缀的域名https://connor.zip/posts/2025-05-03-rune
又见一篇关于 Unicode/字符/字符串长度限制 的文章,非常长:The best – but not good – way to limit string length | adam-p。
当然,先前还有一篇非常好的:(译)2023 年每个软件开发者都必须知道的关于 Unicode 的基本知识 | 新世界的大门。
以及一个生成“长草”文字的在线工具:Zalgo Text Generator - Create Glitchy Text Online。
Ports that are blocked by browsers – Keenformatics – A (not so) tedious blog about informatics.
老早之前写 SSH 代理的时候就遇到过:尝试在浏览器中打开 localhost:22 就会报错,无法访问。
链接:https://github.com/go-yaml/yaml。
新宠:https://github.com/goccy/go-yaml。
用得有多广泛?至少很多重量级项目都是用的它,包括但不限于 K8s、Docker……
看了一眼新宠,第一眼确实感觉舒服很多,特别是错误输出,以及对标准的支持。
当然,对 Yaml 标准的支持我是不抱太多希望的,真的是够用就好。毕竟,Yaml 标准真的是太奇葩了,对动态语言来说,我觉得是火葬场般的存在。原项目通过了 295/402 个测试,新项目通过了 355/402 个测试。
这就换新。
写了这么多年 Go 刚刚才知道以 _ 和 . 开头的文件/目录不会被 go test ./... 执行……
1 2 3 4 5 6 7 8 |
|
真是离了大谱。手动执行某个单测不通过的时候才发现,一度非常震惊🤯,每次 CI 是怎么跑成功的?原来如此!天杀的。
更离谱的是,我自己也不知道是哪里学来的规矩,明明自己也这样写1:
355 356 357 358 359 360 361 362 363 364 |
|
我是草台班子。
难怪经常在火狐浏览器里面见到“Chrome”,这难道只是我想混淆的吗?
Chrome1
在浏览器中,chrome 指除了网页本身以外任何可视的部分(如 UI、工具栏、菜单栏、标签)。不要将这个术语与 Google Chrome 浏览器混淆。
在 SQLite3 数据库里面存了比较大的二进制数据,后面又追加了一个小字段数据到最后。一个现象是:查询此大二进制数据前面和后面字段竟然有 10 倍的性能差距(前者性能更好)。
1 2 3 4 5 6 7 8 9 10 11 |
|
本地非冷启动测试,取了多次测试的结果,均如上。服务器上能夸张到几秒到几分钟的差异。
差不多 1500 条数据,升级服务器的数据库居然花了七分钟,这能忍?
1 2 3 4 5 6 |
|
当然,升级后服务器也降到了 0.1 秒内。
奇奇怪怪。
:dogsbody 是什么意思?跟 dog 有什么关系?
ChatGPT:
“dogsbody” 这个词听起来像是和狗有关,但其实它有点讽刺意味,和“dog”只是间接有关。
dogsbody(英式英语,口语)指的是那种在单位里被安排去做杂活、没人想干的苦差事的人,也叫“跑腿的”、“打杂的”。
类似中文说的:
“dogsbody”这个词起源于英国海军,原来指的是一种很难吃的海军食物 —— boiled peas pudding(豌豆泥糊糊),大家嫌弃这个东西,就叫它“dog's body”(狗的食物)。
后来,这个词被用在海军里的年轻新兵身上,指那些被派去做苦差事的“可怜人”,因为他们地位低下,就像“吃狗粮”的人一样可怜。
久而久之,“dogsbody”就变成了指“干苦活但不受重视的人”。
“As an intern, I was just a dogsbody making coffee and photocopies all day.”
“当实习生的时候,我整天就是打杂的,泡咖啡复印文件。”
如果你在英剧、英式口语或办公室环境里看到这个词,基本就是指那种“啥活都干的底层员工”。