阅读视图

发现新文章,点击刷新页面。

当GitHub二次验证丢失:我的完整恢复经历

数字时代的噩梦:当你精心设置的安全措施反而将你锁在自己的账户之外时,该怎么办?这是一次关于数字资产管理、备份策略和安全实践的深刻教训。

一、灾难降临:完美的安全闭环变成死循环

1.1 强制2FA时代的困境

随着GitHub强制实施双重认证,像大多数开发者一样,我选择了自托管的Vaultwarden(Bitwarden开源替代方案)管理TOTP验证码。这个方案看似完美——完全自主控制,既方便又安全。

1.2 单点故障的代价

直到那天,我的NAS存储池突然降级为只读模式,所有Docker服务(包括Vaultwarden)瘫痪。更糟的是:

  • 没有备份TOTP种子码
  • 忽略了GitHub的16位恢复码
  • 所有数字资产访问权限被切断

“安全措施反而成为最大的安全隐患”——这一刻我深刻体会到了这句话的含义。

二、绝境求生:没有恢复码的账户恢复之路

2.1 常规方案全部失效

恢复方式 可用性
恢复码 ❌ 未备份
备用设备 ❌ 单设备配置
短信验证 ❌ 不支持

2.2 意外发现的救命稻草

通过深入研究GitHub恢复策略,发现三种替代验证方式:

  1. 设备验证(需浏览器保留Cookie)
  2. SSH密钥验证(开发者专属通道)
  3. 个人访问令牌(PAT)

幸运的是,我部署博客时设置的SSH密钥成为了突破口。

2.3 详细恢复流程(实测有效)

1
2
# 关键步骤:SSH密钥验证
ssh -T git@github.com verify
  1. 访问GitHub恢复页面 → 选择"Try 2FA account recovery"
  2. 通过注册邮箱接收一次性密码
  3. 选择"SSH Key"验证方式
  4. 执行上述命令获取验证码
  5. 提交审核(实际处理时间:36小时)

三、重建更健壮的安全体系

3.1 立即实施的应急措施

✅ 重新生成TOTP种子码
✅ 多介质备份恢复码(电子+纸质+加密USB)

3.2 全新的备份架构

3.3 血泪换来的安全原则

  1. 3-2-1备份法则:3份副本,2种介质,1份离线
  2. 关键凭证隔离存储:TOTP种子不与密码管理器共存
  3. 定期恢复演练:每季度测试备份有效性

四、前瞻思考:安全与便利的永恒博弈

4.1 自托管服务的风险矩阵

风险类型 自托管方案 云服务方案
可用性 ❌ 单点故障 ✅ 高可用
控制权 ✅ 完全自主 ❌ 依赖厂商
维护成本 ❌ 需专业知识 ✅ 免维护

4.2 Web3时代的认证演进

  • 硬件安全密钥(FIDO2/WebAuthn)
  • 生物识别集成认证
  • 去中心化身份系统

五、终极建议:每个开发者都该做的5件事

  1. 立即打印恢复码:存放于保险箱或可信亲友处
  2. 配置多因素冗余:如Authy+硬件密钥组合
  3. 建立逃生通道:至少设置两种恢复方式
  4. 实施分级保护:关键账户使用独立安全方案
  5. 定期安全审计:每半年检查一次认证体系

最后提醒:最危险的安全错觉就是"这种事不会发生在我身上"。请今天就开始行动,别等灾难降临

链传动和轴传动

当年今日

因为小破车的掉链问题多次出现,让我想到了为什么现在的单车,尤其是便宜的单车,用的都是链传动呢?为什么不可以用轴传动?之所以有这个想法,是因为我在B站上搜索单车掉链解决方法的时候,给我推了某人魔改自己的单车,把链传动改成了轴传动的视频。我觉得那个人的做法比较粗糙,但是方案可行。周四下班回家的路上,我在淘宝上搜索了一下轴传动的单车,结果原来还真有那样的现货。首先搜索出来的结果是日本的某些品牌,国产的也有,有凤凰和永久都有这种类型的单车。唯一的问题就是,一台小破车才几百块钱,但是一台轴传动的通勤单车,至少要4位数。便宜的可能1000多,贵的可能两三千。从它们的结构看来,其实跟B站上我看到的那个魔改版本原理估计是类似的。我随便点进去了一个永久的轴传动单车,单车架居然用不锈钢。前轮的刹车我没有印象用的是什么方法,后轮用的是禧玛诺的变速器以及刹车。所以后轮他们到底用的是什么刹车方法呢?不是抱杀,不是碟刹,也不是钳刹,这种刹车方法之前我没见过。好像他们还用上了防爆死系统,就像汽车刹车那样。至于那个防爆死是用在前轮还是后轮,我不记得了。那个永久的单车看上去好像只是一个普通的通勤单车,但实际上有喜玛诺的三速变速系统,也就是说实际上封装在里面的那个齿轮不是单个,而是一个齿轮组,变速的方式就像变速车那样。因为那个齿轮组是封闭在车子内部的,所以看不到。

就机械结构来说,链条传动跟轴传动相比,链条传动的成本低很多,因为据说伞齿跟普通齿轮比起来,价格很高,但我觉得就耐用性来说。轴传动可能比链传动稳定靠谱,而且转换率更高,但关键是如果长期使用齿轮磨损以后怎么办呢?轴传动的单车,更换那些零件的成本肯定也会比链条传动的贵很多。这就像一个打赌,轴传动的一开始你就得用非常实在的料堆砌,基本得让这个车不会坏,或至少10年或者20年以上不会坏,那么才能收回成本,否则的话,还是链条传动的会划算些,因为就修理的成本来说会低很多。

网友跟我说,为什么那些很贵的山地车用的都是链传动呢?为什么他们不用轴传动?这就意味着可能在某些场合轴传动会有一定的局限性,在防震方面不如链传动吗?链传动的高级山地车齿轮组非常赏心悦目,变速范围可以很大,但是轴传动的单车,因为封闭在里面的空间就那么少小,不可能有很多的变速选择。因为这个原因,所以没有开发轴传动这个选项吗?为什么普通的通勤单车没有把轴传动作为一个常规的选项呢?首先原因是价格,第二个我感觉的是买通勤单车的人,估计就没考虑过自己要把一辆单车用10年20年30年,甚至一辈子,又或者是能传给下一代。所以把一辆单车弄得那么的牢不可破,有这个必要吗?

我之所以觉得链传动不可控的因素多,是因为我跟那个单车链条接触的时间短了。如果我修车也有超过10个小时的经验,估计我根本不会觉得链传动是个问题。于是这也给我带出了一个疑问,同样在那条路上颠簸,为什么电动车,即便是那些很破的电动车就没有出过故障呢?

20250328

今天翻相册,突然发现是个值得好好纪念的日子,上线个人第一个作品的第十一年。还能记起当时的快乐。

image.jpeg

我第一个发布的是个 Mac 应用,因为白天我是个 Mac 软件工程师。App 名字叫“知了”,这是个知乎日报第三方客户端,因为不想在网页刷了,索性做个 App 吧。

记得每天下班后在小区门口网咖休闲区点个☕️咖啡写代码,网咖服务员都混熟了,还能想起那个妹子的长相和声音。上线后发布到 V2EX 收到很多好评,于是很快又做了 iPad 版。本来随便画的 logo 像一只蟑螂,直到好心用户看不下去免费给我设计了这个小知了图形的 logo。

这是我第一个十万用户的 App,经常排到中国区 Mac 商店新闻榜单第一。也收到很多用户的打赏,过去几年和一些朋友闲聊,他们惊讶的发现,曾经也下载和使用过它,这种感觉就很奇妙🤯。

image.jpeg

3.0 版本脑图都被我找出来了,计划是做一个通用 rss 客户端,但是随着 App 下架,也就没机会继续做了。

image.png

十一年已经做了无数个小 App,到现在还在继续。说明这就是我热爱的事吧❤️。

晚上打麻将了!

祝媳妇生日快乐, 女人的年龄就是个数字


前两周是媳妇的生日。她是双鱼座,我是天蝎座,据说这两个星座还挺配的。

祝媳妇生日快乐!她21岁时和我在一起,23到25岁便经历了怀孕、生子。如今十几年过去了,孩子也长大了,媳妇也开始工作了。我们彼此默契,日常围着孩子转,有时候一个眼神就能读懂对方的想法。

虽然女人的年龄只是个数字,但这几年为了操持家庭,明显能感觉到媳妇的颜值和身材不如从前,身体状况也大不如前,经常生病。

我提前订了一个蛋糕,虽然媳妇说不用,还特意去 Waitrose 买了一个小蛋糕,但我觉得生日怎么也得有点仪式感,所以还是提前两天订好了。媳妇收到蛋糕时还是有点小惊喜。

当天晚上,我们去剑桥市中心 Trinity 附近的一家西班牙餐厅 Mercado 吃饭(之后细说)。

我问媳妇想要什么生日礼物,她说自己刷卡买点护肤品就行,就是那个 La Mer 还是 HR,价格不便宜,一小瓶就要 500 英镑,还是打折后的价格。不过媳妇说确实好用,反正她一直用这个品牌。每次我脸上长痘,她都会给我涂一点,确实立马就不痒了,第二天就消肿了。

flowers-birthday-scaled 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

下班后就在家门口的Coop超市买了花/5.5英镑

happy-birthday-my-little-girl-2025 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

媳妇生日快乐

roses-birthday-flowers-cat-scaled 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

玫瑰花对于猫是无毒的

wife-birthday 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

媳妇还是美美的

wife-birthday-cake 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

媳妇的生日蛋糕2025-老婆生快永远18

wife-birthday-cake-candle-blow-2025 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

媳妇在许愿,不知道许了啥,估计现在问她她都忘记了

wife-birthday-cake-fruit-scaled 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活

Panda水果/杂果生日蛋糕/50英镑/草莓蓝莓和葡萄

本文一共 579 个汉字, 你数一下对不对.
祝媳妇生日快乐, 女人的年龄就是个数字. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 祝媳妇生日快乐, 女人的年龄就是个数字 女人 媳妇 照片 生日 生活
The post 祝媳妇生日快乐, 女人的年龄就是个数字 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  4. SteemIt 高级定制微信文章列表 RSS/API/阅读器 v2.0 The Advanced Wechat Group Posts Feed/API/Reader v2.0 Abstract: I have added five parameters to the...
  5. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  6. 在英国带孩子去露营全攻略 之前就做了一些露营的准备工作, 因为大儿子Eric 很兴奋说是要去 Camping Holiday 估计是在 Papa Pig 里看到的. 英国有很多可以露营的地方, 最后面选了一个离家开车1个多小时. 看了评论还不错. 地址为: New Road,...
  7. 比特币最近波动有点大: 一天牛市一天熊 比特币10万美金以内都是最后上车的机会! 比特币近期的价格波动可以归因于多个关键因素,包括地缘政治动态、监管变化以及加密行业内的重大安全事件。其中一个主要影响因素是美国前总统唐纳德·特朗普对乌克兰和加密货币监管的立场变化。据报道,特朗普再次当选,他可能会推动减少美国对乌克兰的支持,这可能会影响全球金融市场和风险偏好。同时,特朗普正在将自己塑造为亲加密货币的候选人,表示有意让美国成为一个更加友好的加密货币环境。这一立场引发了市场对监管政策可能发生变化的猜测,导致市场情绪在乐观和不确定性之间波动。 特朗普对俄乌战争的态度 美国第43届总统唐纳德·特朗普已经在2025年1月当选并正式上任(第二次),那么他的政策可能会对比特币价格的波动产生更加直接和显著的影响。他政府对乌克兰和加密货币监管的立场已经不再是猜测,而是正在实际塑造市场的关键力量。 特朗普(Donald Trump)减少美国对乌克兰的支持,全球投资者可能会预期地缘政治稳定性发生变化,从而增加对比特币作为避险资产的需求。同时,他的亲加密货币立场可能正在推动市场的乐观情绪。如果他的政府推出有利于加密行业的监管政策,例如明确的合规指南或减少监管审查,可能会吸引更多机构投资者进入市场,并促进更广泛的加密货币采用。然而,政策的快速变化也可能导致短期市场剧烈波动,因为市场需要时间来消化新的政策动向。 朝鲜黑客盗取Bybit交易所15亿美元的ETH 另一个显著影响比特币价格的事件是近期涉及朝鲜黑客组织“Lazarus”的15亿美元以太坊被盗案件。据报道,Bybit交易所(全球第二)这些被盗的ETH已经被清洗,此次大规模黑客攻击引发了人们对加密行业安全性的担忧。此类安全事件不仅会削弱投资者信心,还可能引发更严格的监管审查,导致短期市场动荡。此外,被盗资金的大规模流动和出售可能对市场流动性造成冲击,进一步加大价格波动。随着这些事件的持续发酵,比特币价格正受到政治决策、监管预期以及安全挑战等多重因素的影响。 与此同时,与朝鲜黑客组织 Lazarus 相关的 15 亿美元以太坊被盗事件仍在影响加密市场。由于这些被盗 ETH 已被清洗,人们对加密行业安全漏洞的担忧持续存在,同时也可能引发更严格的监管审查。政治、监管和安全等多重因素交织在一起,共同导致了比特币近期的剧烈价格波动。...
  8. 公司请的专业摄影师 公司来了新的CEO管理之后,很多事情都不一样了, 特别是一些公司对外形象的事情就特别的在意, 比如公司网站用上SSL.现在公司还有空闲的位置,请速来(钱多人不傻). 一月份出差回LUTON,刚好公司请来摄影师给高层管理照像放网站上的,于是我也凑了凑热闹(但是却还不够资格被放在公司网站上),不过没关系,放这里也差不多. 人到中年, 沧桑感强了些. 更新更新: 同事用他NB的单反给谢菲尔得办公室的人也拍了一组这样的照片.看起来很不错, 很专业,灯光,道具应有尽有.我已经用在了LINKEDIN页面上,立马高大上. 本文一共 230 个汉字, 你数一下对不对. 公司请的专业摄影师. (AMP...

GTC 2025 见闻

参加了 NVidia GTC (GPU Technology Conference),由于英伟达的地位,这会也已经成了 AI 开发者最大的交流会,很多公司和业内人士都会过来分享、交流,大概写下会议中相关见闻感受。

Keynote

老黄没提词器洋洋洒洒讲了两个多小时,出了小状况还会开个小玩笑,大佬范很足,也满满的理工男既视感,非常多的数字和未经包装的细节,不过感觉会讲得有些啰嗦。

总的来说,核心论证的是世界对 GPU 诉求会越来越大,而 NVidia 在 GPU 这个领域会持续遥遥领先

GPU诉求

计算机的核心从 CPU 转向 GPU,上个时代依靠程序员写代码指挥 CPU 执行指令解决问题,构成了现在庞大的 IT 产业,程序员是中心。现在的时代逐渐转变,GPU 生产的 token 逐渐能解决越来越多的问题,能思考,能生成代码指挥 CPU 去执行解决问题,计算的核心一定会转向 GPU,世界对 GPU 的需求只会越来越高。

给 AI 分了四个阶段,Perception AI → Generative AI → Agentic AI → Physical AI,不是很认同,Agentic 和 Physical 都是 Generative AI 的延续,不过无所谓,可以看到 Agentic 这个概念实在是火爆。

Scaling Law 没有停止,Agentic AI 需要深度思考,深度思考有新的 Test-time Scaling Law,越多的 token 输出效果越好需,要多轮理解和工具调用对 token 的消耗更是指数级上涨。

Physical AI 要更好地理解现实世界,声音/视觉/触感,都会比纯文本思考对 token 消耗的诉求更高,像 2G 时代看文字新闻,3G 4G 图片,5G 视频一样。

这两个发展中的领域对 GPU 的需求只会越来越高,Deepseek 做的优化也不足以影响这个需求的增长,这个市场不容质疑。

NVidia 优势

GPU 需求量是高,但未来大家一定会买 NVidia 卡吗?当然。NVidia 这一代 blackwell 算力是 hopper 的 68 倍,下一代计划明年推出的 Rubin 算力是 hopper 的900 倍,一年一迭代,远比摩尔定律快的速度,还做了大量的大规模部署的优化,省电、稳定,号称买越多,省越多,赚越多,竞对看起来会很难追上。这些论述还是挺能让人 buyin 的。

Agentic AI

Agent 的相关 session 有接近 200 个,Agent 集合了几个元素:

  1. 概念火,一些涉及 Workflow/RAG 什么的 AI 应用都统一称为 Agent 了,GenAI 在各行业的落地都可以冠以 Agent 的名义,跟以前 H5 那样,不纠结于具体定义,只要有一个统一称呼。
  2. 人群广,Agent 目前主要是在上层的工程架构上,大量的工程师都能理解、参与讨论、建设,不像基础模型训练,多数人难以参与。
  3. 应用广,非研发也能大概听得懂,涵盖了 AI 在各行业的应用这个课题,各行业都会有兴趣了解 Agent 是什么,自己业务上能怎么用。

所以 Agent 相关的 session 大部分都很热门。听完一些的感受:

  1. 多数做企业服务、云的公司都在卷 Agent 的基建和解决方案,像基础设施公司 Fireworks AI、Nebius,数据库公司 Couchbase、datastax,企业服务公司 serviceNow、Dropbox,新兴公司 huggingface、langchain、langflow 等,都来分享推广在 Agent 这事上能提供的能力和服务。
  2. Agent 相关的建设都在刚起步,基本都是在分享概念、工程问题的优化和应用方案,没看到有涉及模型训练去优化 Agent 效果上限的相关分享。Agent 的一些关键课题上一篇文章有提到,基本差不太多。
  3. 也没有讨论 Agent 在工程和模型上的界限,后续端到端的模型进步,能吃掉多少 Agent 能做的事?这两天 4o 的图生成出来后,预计后面才会有更多的讨论。

NVidia AI 基础服务

NVidia 作为领头羊,是希望自己能覆盖 AI 全链路基础设施的,大力在 AI 的每一层都提供了相关框架、服务、能力,这次会议上也有非常多的分享和推广。

其中跟 AI 应用 / Agent 相关的几个基建:

  1. BluePrint:应用蓝图。给了很多 AI 应用场景的 example 工作流(也称为 Agent),例如 PDF 转博客、数字人应用等,提供工作流架构、数据集、源码,可定制,供开发者快速参考和部署。
  2. NIM(NVIDIA Inference Microservices**)**:模型推理。把模型推理封装在 Docker 容器里,可以直接快速部署,对外提供标准化API。也封装了模型在不同 GPU 型号下的优化,提升性能效率。
  3. NeMo(Neural Modules):模型训练。提供了相关工具用于构建、定制、训练 AI 模型,训练后的模型可以通过 NIM 部署。
  4. AgentIQ:开源 Agent 开发套件,支持组合链接不同框架创建的 Agent,提供性能 profiler、评估、UI 界面等工具。

这些基建的声量比较低,国内没怎么见到,不确定海外使用情况怎样。

多个 session 都在推广 NVidia 的 Video Search and Summarization Agent,串联从视频的获取→分割→VLM识别、CV物体识别和跟踪→数据处理存储和RAG召回→用户对话 整个流程,做到可以对视频提供实时分析和报警,也可以自然语言交互查询视频内容,边缘部署,适合用于监控,算是用 NVidia 技术栈做 AI 应用的一个标杆范例。

AIGC

关注了下视频 AIGC 相关的几个 Session

  1. 在好莱坞干了几十年的视觉效果的 Ed Ulbrich 开了个公司 Metaphysic,以前的电影特效制作成本巨大,对人的处理还很难跨过恐怖谷,而基于 AI 技术做特效,用完全不同的技术栈,效果好成本低,是一种颠覆。metaphysic 给娱乐行业提供人脸替换、数字人的服务,看起来是用的 GAN,在人物换脸技术上,GAN 还是更能做到稳定和实时,特别是实时这个点,基于 diffusion 很难做到。基于市场需求,利用已有的不同技术(甚至是上一代技术)深入解决问题,是有空间的。
  2. PixVerse Co-Founder 在一次对话中聊到,视频实时生成的能力差不多要 ready 了,目前 5 秒的视频可以做到5-10秒推理完成,可能会解锁新的人跟视频的交互方式。不确定质量怎样,质量达到一个阈值,以前设想的很多类似 自定义剧情走向 的新玩法新交互有很大空间。
  3. Adobe 和 OpenSora 都来分享了视频生成模型的训练和推理的方案和优化,鉴于已经不是SOTA模型,可参考性不高。TCL 分享了AI电影制作,很惊讶这公司竟然在做这个,更多的是在做链路串联,而不是端到端的视频模型。

其他

  1. OpenAI 只来了两个人给 blackwell 架构站站台,Anthropic 一个人也没来,从这上看,这行业最领先的技术还是很 close,毕竟是核心竞争力,而且很容易被复刻,不像上个时代,大规模并发架构等技术,更重的是实践中解决具体问题,大方案分享了问题不大。(所以 DeepSeek 开源最领先的技术带来的冲击才会那么大。)
  2. DeepSeek 就是 Reasoning Model 的代名词,开源模型的顶流,出镜率极高,老黄的 keynote、各种演讲里都有它的身影,而 llama 通常是作为上一代开源模型与它做对比,只要是提供开源模型部署服务的公司(HuggingFace/Fireworks等),分享里都会对 DeepSeek 极度推崇。
  3. 遇到不少学生来参加,有的来找方向,看看业界前沿在做什么,做学术交流,找合作机会,这个会是挺合适的。清华、中科大、SJSU。最大的问题是实验室没有足够的卡,这领域是必须校企合作,实验室才进行得下去了。
  4. 使用 Nvidia Jetson 做边缘计算也是预期后续空间比较大的方向,设备端部署模型,可以提升实时性和隐私性,多数分享是用在具身智能上,还有一个分享的场景是在货架上实时分析用户行为,更精准推送广告。
  5. 机器人、自动驾驶的 session 也很多,数字孪生是提得比较多的(用 AI 生成仿真环境,用于机器人训练),但现场没看到什么能震惊人的机器人,包括老黄演讲时演示的类 wall-e 机器人,惊艳不够,这一行感觉还早。

总体感受,眼花缭乱,人潮纷杂,在开拓视野以外,大会更多是一个社交场所,推广产品/技术/服务,促进合作,这类大会需要的是多创造一些面对面交流的机会。

花絮

  1. 现场有限量的原价 5080、5090,知道时已经不可能排队买到。
  2. 跟七年前参加 WWDC 在同一个地方,估计一直还是同一个承办公司,午餐还是那么难吃。
  3. 参观 NVidia 工区,老黄作为华裔也是信风水的,新办公楼会模拟依山傍水的设计,风水好。NVidia 搞渲染出身,渲染里三角形是最基本单元,所以办公楼都是三角形元素。办公环境很宽敞,但没啥人,总部居家办公没有限制,很多都不来公司。

我很爱我的车

“duang”一下,我的车又回来了! 我去探望刚回国看了双亲的前同事,聊了一会儿,还取了他帮我带回来的学习资料,最后的最后,他说“对了,你车修好了”。我一脸懵,没人告诉我啊!——好吧,有人告诉我了,是他介绍我去那家修车行的,中国人,很实在。 …

科技爱好者周刊(第 343 期):如何阻止 AI 爬虫

这里记录每周值得分享的科技内容,周五发布。([通知] 下周清明假期,周刊休息。

本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系(yifeng.ruan@gmail.com)。

封面图

杭州临平的"天空草莓"农场,草莓种在悬空的钢架上,可以按需升降。(via

如何阻止 AI 爬虫

AI 大模型公司,正在疯狂收集训练数据。

它们派出无数爬虫,在互联网上无节制地抓取数据。爬虫数量之多、频率之高,堪比 DDoS 攻击。

上周,代码托管网站 SourceHut 的站长,公开发表文章(下图),痛斥 AI 爬虫太过份,服务器无法承受访问压力,中断服务。

他非常生气,这些爬虫根本不遵守 robots.txt 文件,Git 仓库的每个页面、每个链接、每个提交都要爬取。

它们来自全球数万个 IP 地址,用户代理(user-agent 字段)也是随机的,伪装得像真实用户,难以有效拦截。

最可气的是,它们今天爬完了,过了六小时,又来爬同样的内容!

每一周,他要用20%~100%的工作时间,处理这些爬虫造成的服务器压力。SourceHut 已经中断服务好几次,对于一个 SaaS 工具,这是致命的。

最后,他说不只他遇到这种事,整个行业都深受其害。

"我的系统管理员朋友,都在处理同样的问题。每次我坐下来和他们喝啤酒或吃晚餐时,我们很快就会抱怨机器人。这些对话中的绝望是显而易见的。"

那么,有什么办法,可以对付这些 AI 爬虫?

最简单的方法,就是使用 Cloudflare 公司的免费防护,它的 CDN 可以帮你挡掉 AI 爬虫。

但是,有些企业级服务不适合使用 Cloudflare,这时你就必须自己来挡爬虫。

今天,向大家介绍一个专门对付爬虫的工具 Anubis

它是一个采用工作量证明的反向代理。所谓反向代理,就是目标网站的所有访问请求,都会重定向给它

你首先要架设一个它的实例,然后把这个实例放在目标网站之前,当作反向代理(比如像下面设置)。

reverse_proxy http://localhost:3000

于是,用户访问网站时,首先看到不是目标网站,而是 Anubis 的页面(下图)。

这个页面会在用户的浏览器上,执行一段 JS 程序,进行大量的数学计算。直到计算答案正确,才可以访问目标网站。

这个过程有时很耗时,可能需要1~2分钟。

(图片说明:上图的手机浏览器用了1分53秒,才计算完毕。)

对于爬虫来说,如果每个请求都要耗费大量计算,才能拿到数据,这会极大地消耗它的服务器资源,从而达到阻止爬虫访问的目的。

当然,真实的访问者也必须完成这样一个计算,这非常影响使用体验。但是,总比听任爬虫造成访问中断要好。

那么,Anubis 到底让爬虫计算什么?

具体来说,就是下面这行代码,计算一个哈希值。

const hash = await sha256(`${challenge}${nonce}`);

可以看到,它就是用 SHA256 算法,计算一个字符串的哈希值。

这个字符串由两部分组成,第一部分challenge,由用户的一些公开信息连接而成,包括用户的 IP 地址、浏览器 user-agent 字段、当前日期、Anubis 的公钥等。

第二部分nonce,表示迭代次数,第一次计算就是1,第二次计算就是2,以此类推。

Anubis 的默认设定是,计算出来的哈希值的前五位必须都为0,否则 nonce 自动加1,再次进行计算,直到满足要求为止。

有时,可能需要计算几百万次,才能得到合格的哈希值。熟悉比特币的同学,应该一眼看出来了,这就是比特币的算法。比特币是非常耗费算力的,所以 Anubis 也能很有效地消耗爬虫的 CPU。

当客户端终于算出满足要求的哈希值时(前五位为0),就会把这时的 nonce 值传给 Anubis 实例服务器,让后者验证哈希值是否正确。没问题的话,Anubis 就会将客户端重定向到目标网站,并在客户端写入一个 Cookie,以免后续请求再触发工作量验证。

这就是阻止爬虫的整个过程,不知道说清楚了没有,原理很简单,实施也不难。

事实证明,它很有效。一个站长说,两个半小时内,他的网站总共收到了81000个请求,其中只有3%通过了 Anubis 的工作量证明,这意味着97%的流量可能都是机器人!

这太疯狂了,可见现在的 AI 爬虫有多猖獗。如果你的网站也遇到了同样问题,又没法使用 Cloudflare,那可以试试 Anubis 的工作量证明。

科技动态

1、中国矿业大学研发了一款太空挖矿机器人

它共有6足,其中3个是前进的轮子,3个是挖矿的爪子。

2、英国民众本周纷纷报告,夜空中发现螺旋状的云

英国气象局调查后宣布,那是猎鹰9号火箭发射时,快速旋转的箭体喷出的尾气。

尾气在太空中瞬间冻结,经过太阳光反射,看上去像云一样。

3、科学家提出,生命起源地可能不是大海,而是封闭的大型碳酸钠湖泊。

因为生命起源的化学反应,需要很高的磷浓度,但是自然界(包括大海)的磷含量很低,只有富含磷的碳酸钠湖泊符合条件。

4、盈通公司推出一款有香味的 GPU

这款 GPU 内置了香味剂。运行时,它的散热风扇就会将香味吹出去。

5、其他

(1)根据 Cloudflare 统计,41%的互联网登录使用泄漏的密码,原因是大部分用户习惯复用同样的密码。

(2)中国睡眠研究会统计,2025年中国人夜间平均睡眠6.85个小时,比去年增加6分钟。入睡时间平均为0点18分,比去年晚了17分钟。

(3)一项研究提出,每天的进食时间限制在8小时之内,其他16小时不进食,有利于肥胖者减肥,改善健康。

文章

1、Gemini 2.5 Pro 模型

本周,谷歌发布它的最强模型 Gemini 2.5 Pro,迅速登顶。

著名程序员 Simon Willison 对其进行测评,评价很高。

另有一个程序员让其执行一个非常复杂的任务,它想了半天后说,这个任务太复杂,不可能在一个步骤中完成,只能做出一个简化版。

这让人非常震惊,因为以前的 AI 遇到做不了的事情,只会给出错误的答案,而现在竟然会在分析后,承认超出了自己能力。

2、谷歌将不开放安卓的开发(英文)

这篇报道称,谷歌将完全私有化安卓的开发,不再接受外部的代码提交,以避免安卓开源版 AOSP 与内部版本之间合并分支的麻烦。

以后,谷歌会把安卓新版本先提供给 OEM 厂商,然后再发一个不接受外部提交的开源 AOSP 版。

3、Next.js 的中间件漏洞(英文)

本周,Next.js 爆出一个高危漏洞。如果登录步骤是在中间件里面完成,那么可以绕过这个步骤,直接进入登录状态。本文简要介绍什么代码导致了这个漏洞。

4、TypeScript 如何写函数类型(英文)

本文是一篇初级教程,介绍函数的类型在 TypeScript 的三种写法。

5、我对 MCP 的批评(英文)

MCP 是 Anthropic 公司提出的一个 AI 应用的接口协议,作者认为它并不好用,给出了自己的理由。

6、只使用 ESM 模块(英文)

本文提出,现在可以放弃 JS 语言的 CommonJS 模块了,只使用 ESM 模块,一个原因是require命令已经支持加载 ESM 模块了。

工具

1、CSS FlexCode

开源的 VS Code 插件,通过图标生成 flex、grid 布局的 CSS 代码。(@xutao-o 投稿)

2、StreamCap

一个桌面应用(支持 Windows 和 Mac),基于 FFmpeg 进行直播录制,覆盖40+国内外主流直播平台。(@ihmily 投稿)

3、Bilibili History Analyzer

B 站历史观看记录管理工具,可以保存观看记录,支持视频下载、数据分析、AI 摘要等功能,采用 Python + SQLite 开发,分为前端和后端。(@2977094657 投稿)

4、GoRead

一个用 Go 语言编写的终端里面的 EPUB 阅读器。(@Ray-D-Song 投稿)

5、GateShift

一个 Go 语言写的命令行工具,用于一行命令切换网关,适合同时有 OpenWrt 路由和默认路由的环境。(@ourines 投稿)

6、Drawnix

开源的在线白板工具,集成了思维导图、流程图、画笔。(@pubuzhixing8 投稿)

7、小米笔记的 Obsidian 插件

它将小米云服务里面的小米笔记,转换为 Markdown 格式保存到 Obsidian 文件夹。(@emac 投稿)

8、wxlogin

一个基于 Next.js 的开源应用,基于微信公众号的网站登录,用户通过公众号获取验证码,从而在网页端登录。(@liyaodev 投稿)

9、Docxy

开源的 Docker Hub 镜像代理服务,可以通过它拉取容器镜像。(@harrisonwang 投稿)

10、Bondma

一个开源的多语言翻译管理平台,提供直观的 Web 界面。(@HeroIsUseless 投稿)

11、DeepPDF

免费的 PDF 文件翻译网站,比如英文 PDF 翻译成中文,保留排版不变。(@icaohongyuan 投稿)

12、RSSPod

收听、订阅播客的网站。(@Jaksay 投稿)

13、Supa Simple Socket

网友投稿的 WebSocket 的 JS 客户端库,支持心跳机制、断点重连、事件订阅和文件传输。(@JustinGastby 投稿)

14、Inscribed.app

一款在线工具,基于幻灯片制作创意草图和动画。 (@chunrapeepat 投稿)

15、LinkAndroid

开源的手机连接助手,方便连接 Android 和电脑。(@modstart 投稿)

16、Teleprompter.today

一个在线的提词器,为演讲者、视频创作者和直播主播提供文本提示,可以定制各种属性。(@s87343472 投稿)

AI 相关

1、Web Design AI Agent

开源的 AI 应用,根据文字描述和图片生成网页,使用 Claude AI 模型,部署在 Cloudflare worker。(@mggger 投稿)

2、AigcPanel

开源的 AI 数字人生成工具。(@modstart 投稿)

3、EmojiMyFace

免费的 AI 挡脸工具,将脸部替换成 Emoji 符号。(@Takea-nap 投稿)

4、aisubtranslate.top

AI 模型翻译字幕文件的免费网站。(@LetheTK 投稿)

资源

1、DNS 速度测试

这个网站测试从你的计算机到世界主要公共 DNS 服务器的速度。

另有一个类似的命令行工具 dnspy。(@xxnuo 投稿)

2、Orbit

该网站提供一种可视化的方式,发现你喜欢的新音乐。

3、Top Hacker News

该网站展示"黑客新闻"实时的热门文章,有插图和内容总结。(@heyppen 投稿)

4、MusicMint

一个 AI 音乐网站。(@250465043 投稿)

5、旅行插头顾问(Travel Plug Advisor)

该网站查询世界各地的插头类型和电压。(@imowen 投稿)

图片

1、地球和太阳的大小

太阳的大小远超地球,直径是地球是109倍,体积是130万倍。

上图中,左下角的蓝点就是地球。

所以,一丁点的太阳能,就足够地球使用。

2、AI 生成表情包

上周,OpenAI 开放了 GPT-4o 的图片生成功能。网友发现,只要上传一张图片,就可以用它生成表情包,效果极佳。

提示词是:"请把照片里面的角色画成 Q 版,并用12个动作和文字做成表情包。"

文摘

1、为什么重新发明轮子

我喜欢从头开始写东西,经常有人说,我在重新发明轮子。

我这样做有好几个理由。

(1)学习。通过重新发明轮子,我学到了很多东西,知道了工作原理,以及怎么动手做。

(2)定制。没有一种轮子适合所有情况。通过创建自己的轮子,我可以根据具体情况定制,让它更适合我。

(3)创新。现有的一些轮子很糟糕,重新发明轮子时,就有机会探索新的可能性。

(4)享受。事实上,前面三条理由可以不存在,重新发明轮子只是因为我喜欢动手,出色完成工作时,我会有一种满足感。

但是,我不推荐你也这样做。重新发明轮子并不都那么美好,有一些不可忽视的缺点。

(5)重新发明轮子可能很耗时,需要投入大量时间。

(6)最终产品可能不如现有解决方案。

(7)容易陷入无限递推的困境。为了制造轮子,我还必须重新发明锤子吗?

所以,如果你想重新发明轮子,一定要想清楚两点。第一,你有足够时间吗,尤其是涉及其他人的情况下。第二,重新发明的范围(或者说,你不打算重新发明什么),以免不必要地偏离主题。

言论

1、

一个优秀程序员,最开始是实施者(implementer),然后进化到解决者(solver),最后变成发现者(finder)。

-- 《实施者、解决者和发现者》

2、

如果你正在开发一款希望长久使用的产品,那么前端框架就是你最不需要做的技术决策。你争论哪一个框架好的时间,都是在浪费精力。

无论你选择什么框架,5年后都会过时,即使那时你选择的框架还存在,也会变得完全不同,这就是前端社区的运作方式。

-- 《前端跑步机》

3、

在2025年开发 Web 应用,有点像组装宜家家具。你必须拼凑和配置许多单独的服务:前端、后端、cdn、https、数据库、身份验证、付款......

你的工作不是写代码,而是配置、管道、编排、工作流、最佳实践。

-- Andrej Karpath,著名 AI 科学家

4、

愤怒是一种具有破坏性的情绪,会让人产生报复的欲望,这不利于你的根本利益。更理性的方法是,不要先想到报复,而要想想你与对方有没有共同利益,寻求合作和谅解。

-- 《超越愤怒》

5、

各种宗教都驱逐异教徒,不是因为他可能是错的,而是因为他可能是对的。

-- Edsger W. Dijkstra

往年回顾

xz 后门的作者 Jia Tan 是谁?(#296)

永不丢失的网络身份(#246)

掌机的未来(#196)

网课应该怎么上?(#146)

(完)

文档信息

  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
  • 发表日期: 2025年3月28日

真实的关注

这个话题是帮助别人咨询时扯出的一个话题。

咨询者问我:「什么才算是真实的关注?」

这是个好问题,看上去它仍然是一个没有标准的事情。所以本着一切没有标准的事情需要「同频」的原则,但同频又会遇到拒绝交流的情况,或是对方本就是一个巨大的「黑箱」,他不需要商量,而是需要你能猜中他的期待。

但这个时候,就会出现一个有趣的情况:

就拿「黑箱人格」举例,当对方决定要「猜」的时候,多半是已经意识到「黑箱」有了负面情绪,需要优先解决情绪问题的时候,便会问:「你是不是有什么不高兴?」

显然,这个问题看上去是一个在「现在」的提问,但它问的内容是「过去」的原因,是什么「过去」的事情导致了黑箱本身在「现在」感觉到了不愉快。那么黑箱会如何回答这个问题呢:「我为什么不开心你自己不清楚吗?」同样,这是一个在「现在」的提问,但仍然是回到了「过去」去寻找答案。然后,这两个人就这样吵开了。

显然,在「现在」突然意识到需要关注对方,往往是已经在「过去」发生了太多漠视对方的情况,那要解决这个问题最困难的是,两个人已经无法改变过去,同时当下扯出的一大堆狗屁倒灶,也都只会跟「过去」有关。

这件事可能有些抽象。


那说得具象一些。

两个人因为没有及时收拾脏衣服而发生了争吵。

一个人问:「你为什么没有收拾衣服?」这是一个在「现在」提出的问题,但问的是一个关于「过去」发生的事情。

于是对方回答:「我这两天不舒服,没来得及收拾。」好,现在他们两个得到了一个「过去」发生的原因。

这个人继续问道:「哪里不舒服?」这仍然是一个在「现在」对「过去」的提问。

于是对方回答:「我这两天状态这么不好,你难道没有看出来吗?」反问是一个非常标准的「现在」对于「过去」的询问,除非它是文学手法里用来同频的方式,例如「我觉得很好吃,你难道不觉得吗?」

好了,这两个人的战争一触即发——因为问题就发生在「问题」身上。

我们提出问题时,特别是在交流中提出的问题,常常是在「现在」对「过去」进行发问,但是追究原因也很难再改变既定事实,所以人们在回答「过去」的答案时,就会出现找借口、翻旧账、主观不可证的情况,因为「过去」的好处,就在于大家都知道事情已经发生了,用它来划分责任就能找到对错之分。

那如果向「未来」提问呢?于是,比如「以后我们把脏衣服固定放在哪一个区域呢?这样便于我们及时处理。」——好吧,这也不算是个好问题,因为如果对方正在气头上,这件事仍然会激发战争。那这就是吵架没吵到点上的问题,不属于今天要解决的内容。


从「问题」跳出来,关注也会发生同样的问题,当人们意识到关系出现问题时,想要开始真正关注对方时,也总是从「过去」中寻找那些未曾及时关注的点。虽说亡羊补牢未为晚也,但往往这个哲理之所以会成立的关键,是至少已经「亡羊」了,甚至是「亡到已晚」。

所以,发现有问题,再开始意识到问题本身不是坏事,甚至可以说是「必经之路」。但很多时候,真的发生了「亡羊」的事情,人们会本能地纠缠着「亡羊」本身进行分析。这是人们的「损失规避」认知造成的,即损失100元的痛苦远超过获得100元的快乐。然而,无视「时间维度」这个要素,人们就容易陷入到在「现在」向「过去」不断发问的情况。直到新的问题发生,然后变成一个「过去」的损失,又在「现在」重复提问。

这应该是我最「厌恶」的行为之一,在同一个坑里可以稳稳当当地摔三次,无法从这些重复摔进的坑里找到相同的本质。

但是,人们又无法无视「损失规避」的心态,就像你不可能给一个摔了一跤的人开始讲「防滑鞋」的重要性——无视当下的感受,就会变成常言道的「当爹」。所以就算要对「未来」提问,也无法无视「现在」的感受。这就把前几天的内容串起来了。

理性的人之所以更容易「还原事实」,是因为这不是一个对「过去」的发问,而是要从还原的事实里提出一个对「未来」的提问,即解决办法;但是感性的人,会需要大量时间花在「对齐感受」上,是因为感受是由大量的「过去」已经发生的事情堆积而来的,所以去「未来」是找不到任何解决方案的。

于是,在「现在」要对齐感受的同时,如果能让双方都进入到「未来」去寻找解决办法,或许才是真正能够解决问题的思维模型。

即:「我意识到你这几天状态不好,那先别洗衣服了,休息下,如果有什么不爽的事情你可以给我说,我随时都在。」状态不好是「过去」的状态,衣服没洗是「过去」的既定事实,所以「现在」先暂时不管过去的事情,如果「未来」需要我,我随时都在。


当然,我说的是「有效」沟通,而不是「正确」的沟通。

回到最开始的那个问题——什么才算是真实的关注?

如果无法在当下对齐感受,那就去「过去」对齐,因为翻旧账总能翻到一个最原始的「坎」,如果那个「坎」两个人每次吵架都可以回溯到那一刻,那就说明有人过不了那个「坎」,这不是装大度、所谓的原谅就可以解决的。往往这个「坎」和最底层的信任是挂钩的,无论对方现在做得再好,那个信任缺失就是每一次在「现在」提问都会潜意识指向的锚点。

剔除了「对齐感受」,那么就要回到理性的层面,去理解关注。

如果用公式来简单理解,即:关注=「现在」-「过去」+「未来」

  • 现在
    • 同频当下的情绪感受——回到同一个「时间维度」;
    • 停下来。比如「争吵时设定前序的冷静时期」,这里并不是指冷暴力,而是双方都知道需要先冷静一下;
    • 随时停下来确定彼此是在「交流」,而不是「宣讲」
  • 过去
    • -过去:避免让未被有效处理的过去持续对现在造成负面影响;
    • 尊重对方已经做出的决定;
    • 确定自己对对方的预判,例如我觉得他肯定在生气,所以我选择了闭嘴,那如果对方其实没生气呢?
    • 彼此情绪发生的原因,当然,这里也建议可以适当用翻旧账的方式;
    • 自己已经发生的行为,且可能导致更大的危害,需要告知对方,例如我就是出轨了,但是现在我们需要好好聊聊彼此的感情延续的问题;
  • 未来
    • +未来:加入面向未来的建设性方案;
    • 解决方案;
    • 这四个字可能有些冷冰冰的,但或许就是吵完架之后两个人做一顿饭菜这么简单的事情,也有可能是到「离婚」让彼此好好冷静一下这么残忍的结局。但解决方案就意味着双方要做出一个对「未来」的决定,它同样需要被理解和尊重;

当「过去」的事情得到了解决,又没有发生矛盾需要去构想「未来」,那关注就是一个「现在」这个时间维度需要构建的事情。

对了,这套系统也同样适用于避免「内耗」。

静态博客究竟适不适合你

Featured image of post 静态博客究竟适不适合你

什么是静态博客

如果你有兴趣建一个博客,或许已经听说过一些静态博客的工具,比如 Hugo, Hexo ,Jekyll。和传统“所见即所得”的博客平台(新浪博客、 Medium 、WordPress)不同,用户能完全掌控自己的源数据,通过一些设置和编程命令,就能将存在本地的文章转换为网站并发布出去。

去大理 Chapter 6

经典蓝调时刻

时隔近两年,本系列再次更新,连载强度堪比香港City Walk 系列。联程起点是昆明,本来没打算来大理,但是落地昆明后发现天气很差,看天气预报发现大理天气还不错,就买了临近的火车票来大理了,结果第二天早上醒来发现天气比昆明还差,云南的天气预报还是不能信啊。其实当日还可以直接飞香格里拉,但是那几天香格里拉气温太低了,想了想还是放弃了。

昆大丽通了高铁之后旅行便捷了太多,早些年我在云南旅行,城市之间不坐飞机的话就要拼车了,耗时极其恐怖,全仗着年轻硬扛,现在是肯定无法适应那种强度了,早些年没走上新藏线的遗憾现在也没那么遗憾了。

选择大理的另一个原因是英迪格五千分包价只要七百多,上次住的时候也挺舒服的,就果断选择大理了,实际住下来发现早餐水准有所下降,不过前台提了一嘴,给升级了270 度景观房,看在升级的份上其他的也不怎么在乎了。

大理站

新建的大理站看上去很气派,但是出站后打车十分混乱,而且很难叫到车,我走出去很远才叫了个车,英迪格离大理站不远,十分钟左右就到了。走出去这段路晚上几本上没啥人,临街商铺也没啥顾客,车也不是很多,略显萧条。

电网

路过电网的办公楼灯全是熄灭的,小城市满满的松弛感。一般人来大理绝对不会像我我一样只在下关晃悠的,把有限的假期放在类似的小县城还是过于奢侈。

下关街道

到酒店已经比较晚了,简单整理一下就睡下了,本来第二天想去苍山下的希尔顿打个卡,略微对比了价格,还是英迪格更划算一下,前台稍微谈心了一下,给了270 度景观房,因为房间要晚一些才能收拾出来,所幸打车去古城的星巴克坐了一下。

大理古城

我是直接打车到红龙井这边,突出一个人少,星巴克基本没有游客,有几个顾客是拿着笔电在这里办公的。来大理多次,几乎没遇见过完全通透的天气。

大理古城
大理古城

时间差不多了就打车回到下关,房间已经收拾好了,但是天气实在太差,景观一言难尽。

客房景观
下关区

晚饭时间出门觅食,按照导航走了个近路,没想到穿过了洱海公园,万万没想到洱海公园居然在山上,莫名其妙爬了个山,累的要死。天气很差,制高点景观也是相当一般。

洱海公园

下山之后路过在建的明珠广场。

在建设的明珠广场

下关街道,县城即视感。

大理
大理

吃完饭回到酒店已是蓝调时刻,这个时候稍微能看了一点。小光圈的劣势这时候就体现出来了,躁点满满。

客房景观
洱海

第二天起了个早,发现天气还算可以,比较通透,景观房的价值体现出来了。

洱海
清晨
清晨
清晨
客房景观
自拍一张

退房之前自拍了几张,没带三脚架,把相机放在门把手上,然后手机遥控,艰难拍摄了几张。

大理机场

回昆明用选择了用东航里程出票,实际飞行时间半小时左右,非常快,大理机场的休息室居然是在安检外的,过安检之后再小车登机,同时发现大理居然还有国际航线。同时发现这班客流量还挺大的,前舱全满。

大理吉隆坡航线
东方航空云南公司

大理出发的时候天气很好无风,很稳,没想到落地昆明的时候疯狂颠簸,起落架放下很久也没落地,非常担心落地再重新拉起来,好在盘旋了一会顺利落地了,再折腾一会真的要吐了。

张紧上油后

当年今日

没试过掉链子,没试过挂链子,也没试过给单车的链条上油。上周四在回家的路上我就已经买了单车的链条油。问单位机电科的人拿一些机油就能解决问题,但对我这个不想开口的人来说,我宁愿花几块钱。这个油也不仅仅是用在单车上,估计其它需要润滑的装置也能用得上,比如宿舍大门那个经常一到潮湿天气就会卡死大门锁。我并不知道链条油跟其它的润滑油有什么区别。

之前单位宿舍的台扇要手动一下才能转起来,又或者是到某个情况下,手动也转不起来了。那个时候我就会加点缝纫机油。油虽然上去了,但是感觉效果不能持续太久。据说缝纫机油就是这样,如果买一些专业性强一点的油可能不会。缝纫机油过上一段时间我又得加一些进去,否则那个风扇又会卡死了。正是因为风扇那个样子,所以后来我就又买了现在的那个台扇,体积更小,风量更大,噪音更小。现在宿舍的台扇,是我把一个类似循环扇的东西当台扇用。除了清洗不太容易以外,其它都还好。以前的那个台扇,最好的地方就在于拆卸比较方便,因为那个框是铁架的,所以清洗很简单,扇叶也能轻松拆下来,全部东西清洗几分钟就完了。但现在的那个风扇,要把前盖拆下来,得费一点劲,后盖直接是拆不下来的,扇叶也拆不下来,所以就只能用抹布擦,不能直接拿到水龙头下冲洗。不是所有循环扇都不能完全拆洗,但因为我比较抠门,所以我的那个款式估计就这样了。

自行车链条油买的时候广告说那个东西有润滑和防锈的作用。我把油涂上去的时候,链条其实表面已经是生锈的状态。我是星期一下午下班吃过晚饭后对单车进行链条装紧以及上油的。星期三下午,我要进行小破车的第二次测试。第二次测试也是以失败告终,这是更离谱,只骑了不到600米,在深粮物流门口链条就被颠掉了,但是这一次,当我想把链条挂回去,显然就要比第一次费劲很多。跟第一次最明显的区别在于当我把链条挂回去以后,我还能继续踩,我还能把车骑回去单位。星期一对链条进行张紧之后,我曾经把链条的状态图发给网友。如果看上去还没张紧到位,他肯定会让我重来,但显然看上去的确差不多OK了,但实际上还是会被颠掉。第二次测试开始之前,我拿了呆头扳手,测试了一下后轮两个固定螺母是否松,同时也检查了一下后轮的张紧螺母。为了防止那个张紧螺母及铁片掉出来,我还找了根固定线材的小铁线,在那里做了一个封堵设置。在深粮物流门口颠掉链的时候,我也拿出了呆头反手测试了一下后轮两个螺母,发现它们依然很紧固。所以这次链条被颠掉,不是因为颠着颠着后轮移位了。平路和山坡的时候都没有问题,但是深粮物流门口的那些颠簸实在太离谱了,深粮物流门口的颠簸只是新港南路第一关,后面还有很多关。从路程上算,我只走完了不到1/3。这一次我把链条想挂回去的时候,真的搞得自己一手都是油。我完全没想过原来那些链条的油是可以这么的润滑的,一直稳稳地附着在链条上。我摸的时候,那个东西已经把很多铁锈溶解了出来,所以手摸的那些东西的颜色就像巧克力一样。车架是白色的,但是因为被我的手碰过,它们就像是在泥地里淌过一样。

接下来我该怎么办呢?长一点的呆头扳手我已经买了。不锈钢的M10法兰螺母我也买了,但实际上我不确定我的这个小破车后轮的两个轴是M9.5还是M10。因为这两个尺寸都是有可能的,但是在单纯卖法兰螺母而不是自行车固定螺母的地方只有M9和M10两种尺寸。

下周一我不能进行第二轮的链条张紧了,因为那是一个月末日,我得进行我常规的月末焦虑。

欢见

四点过醒来。梦见埋伏在一堵墙侧边,日本鬼子从远处冲了上来,枪林弹雨,心生畏惧……

三月末,第一季度行将结束,有焦虑,有思念,有徘徊,或许个体生命不过是宇宙物质的短暂聚合,终将归于尘土。大抵不必过度执着于世俗的意义追寻,但依然无法简简单单的做自己。昨天刮风,此刻刮风,呼啦啦,窗户咯吱咯吱的响着。清醒而混沌,人啊,短短几万天,不应成为条条框框的奴隶或工具,要勇于感知自然的美好,看花开水流、观日出日落,要在有限的时光里感知无常、邂逅趣事。

IMG_20250322_081545.jpg

楼下咖啡馆门口放了一个展架,上书“欢见”二字,只一眼,心生喜悦,感恩遇见。人生是一场自我修行的旅程,面对焦虑与内耗,要将注意力收归自身,调整自己的心态。觉察思维、专注当下;放下执念、活在当下。要在平凡中寻得安宁,在每一个此刻中找到力量。要接纳生命的不完美,要在纷纷扰扰中保持内心的从容。蓝天,白云,老神仙,有所睹,有所思,看脚下,要在有限的时光里活得清醒而丰盛。

自建音乐串流服务探索

selfhosted-music-streaming-server

听歌这件事似乎变得越来越麻烦。

2014 年之前,我主要用 QQ 音乐听歌,那时随便一个平台都有着丰富的曲库。2014 年,我转到了眉清目秀的网易云音乐,那时的网易云音乐还很纯粹,后来国内音乐进入了「版权时代」,看着歌曲一天天变灰也坚持用着,直到开始不务正业引入短视频等各种臃肿功能,2018 年的下架周董歌曲「打包收费」事件,让我直接卸载了网易云音乐,即使还有很长时间的会员没到期。此时国内音乐进入了「独家版权时代」,不同时开几个平台的会员很难有好的体验。好在及时醒悟过来放弃了国内音乐平台,之后一直用着 Apple Music 搭配 Spotify,算是比较省心。不过为了给消费降级趋势出一份力,去年底也取消订阅了使用 8 年的 Apple Music。

其实也是发现自己对音乐曲库的需求越来越小了,平时基本在听老歌,听歌更多时候是为了作为 BGM 增加点氛围感。我对华语音乐的记忆似乎还停留在 10 年前,对外语音乐的记忆停留在 5 年前,可能一代人有一代人的歌,新一代的歌我也很难去欣赏。现在只是偶尔去听下自己关注歌手的新曲,或者 Spotify 推荐歌单。既然如此,不如自建音乐串流服务,整理出自己的专属曲库,体验应该也差不了太多。

自建音乐服务项目有不少,我主要是听个响,有损 MP3 320 Kbps / AAC 256kbps 足以,还省空间,所以 Roon 这类很贵专业的方案是直接跳过的。同时我的音乐文件都习惯先通过 MusicBrainz Picard 整理标记,所以对服务端功能也没太多要求。过去一年里陆续尝试过 Emby/Jellyfin, Navidrome, Gonic, LMS (Lightweight Music Server) 等服务,网上能搜到很多介绍文章,这里不再多说。同时也把 iOS App Store 里能搜索到的对应客户端几乎试了个遍。

就结论来说,过去大半年里我都用着 Navidrome 服务端搭配 Amperfy 客户端。整体比较满意,美中不足的是 Navidrome 还不支持读取外挂歌词文件(等了快一年的 PR,应该也快了)。因为这个问题有段时间换到过 Jellyfin 搭配 Manet/AmpFin,但体验下来还是不如 Navidrome + Amperfy 简单顺滑,加上 Amperfy 后来新增了 macOS 原生客户端支持,毫不犹豫的换了回来并使用到现在。

amperfy
Amperfy

当然,我也知道还有一个热门的组合没尝试,经常看到网友对 Plex 的音乐软件 Plexamp 赞美有加,但很多特性需要开通 Plex Pass 会员才支持,而我对 Plex 的印象一直不太好。以前搭建过 PMS (Plex Media Server),必须用 Plex 账号联网登录,各种隐私数据收集拉满,后来还禁止托管在 Hetzner 上。加上 Plex 一直在向流媒体服务转型,混乱的社交名流主页,对自建用户的体验越来越不重视,所以一直没尝试。但前几天看到 Plex Pass 即将涨价和阿根廷区低价 Lifetime Plan 的消息后,还是按耐不住,顺手搭上了末班车,可以说这次购买几乎是冲着 Plexamp 去的。

plexamp
Plexamp

几天体验下来,先说服务端 PMS,抛开我对 Plex 的「恶意」不谈,Plex 确实比 Emby/Jellyfin 更加好看和流畅,使用上也更省心,音乐库的管理功能上倒是都差不多。在歌词这一块,Plex 目前和 Navidrome 相反,不支持内嵌歌词,只支持外挂歌词,不过如果没有本地歌词 Plex 会自动通过 LyricFind 寻找(需要 Plex Pass),可惜对于中文歌曲支持一般。

再说客户端 Plexamp,基础功能大家都一样,Plexamp 的亮点在于 UI 设计、音乐无缝切换和基于音乐(库)分析的推荐/电台功能。手机端上的体验比较满意,但不多做夸奖。桌面端上就比较失望了,Electron 应用在我这里向来是扣分的,但也不是不能接受,除非太敷衍,Plexamp 桌面端几乎就是移动端的放大版,没做过多的适配。同时也遇到了不少 bug,比如左上角关闭窗口后,后台仍在运行,但无法恢复窗口显示,只能退出进程重新打开 怪不得默认隐藏窗口控件。也发现即使你下载了整个歌单,仍然只有从下载分栏进入歌单播放才会使用本地文件,如果从其他入口播放该歌单还是会再次下载缓存到硬盘(已在设置中开启始终优先选择下载的媒体),把缓存和下载功能分开看待的逻辑有点难以理解,于是我选择了直接把缓存拉满。更可惜的是我发现的不少 bug 都能在一些多年前的反馈帖子中找到,却不了了之或无人问津。

不过如果再次抛开我对 Plex 的「恶意」不谈,Plexamp 整体体验是不错的,对于多数想自建的用户来说算的上是比较出色的方案,无论是音乐库管理,UI 界面,还是功能性相比其他几个平台都有一定的优势。但 Plex Pass 会员现在并不便宜,如果只是为了音乐串流服务的话就不太值了。

总的来说,目前我应该会继续主力使用 Navidrome + Amperfy,等哪天 Plexamp macOS 客户端的体验更好了可能会全面切过去。其实对于自建音乐串流服务来说,选择平台往往是最简单的部分,最麻烦的还是资源获取与整理,无论是自购转录还是网上找都很花时间。好在我喜欢的歌不算太多,一年下来零零散散着整理也差不多了,不然还是建议直接订阅音乐流媒体更加舒畅。

小剧场:消失的 Plex 外挂字幕与 Plexamp 歌词

既然买了会员,也顺便再次试下 Plex 的影视媒体库,相比 Emby/Jellyfin 确实有独特的优点,但也有糟心的问题。测试网页播放时,发现 Plex 对于外挂 ASS 字幕的支持有个老问题,我的 PMS 搭建在 VPS 上,所以关闭了转码,直接通过串流播放,但 Plex 的逻辑是只要字幕包含不支持的特效就会强制转码烧录,在设置中修改 Plex Web 播放器的固化字幕选项为「仅图像模式」可以解决部分问题,但其他情况下还是会遇到错误提示「该服务器没有足够性能用于转化视频」,不加载字幕则可以正常播放,经测试同一个视频和字幕在 Jellyfin 网页播放没有问题 当然 Jellyfin 有他自己的祖传方块问题

那我放弃网页播放,改用第三方客户端(Infuse/Vidhub)播放。但这时发现连字幕的选项都没有了,直接无法获取。搜索半天在 Plex 论坛上发现有人提到可能是 Nginx 反代问题,试着添加下面配置后终于可以获取字幕了。

location /library/streams/ {
    proxy_pass_request_headers off;
    proxy_pass http://127.0.0.1:32400;
}

解决问题后,满意的打开 Plexamp 准备听音乐放松下,却发现所有歌曲都无法显示歌词了… 一开始还以为是客户端的 bug,重启重装研究了好一会才想到可能是修改 Nginx 配置导致的问题,注释掉后果然又可以正常获取歌词了。

于是猜测可能是某个 header 导致了无法获取字幕,测试以下配置:

location /library/streams/ {
    # 默认关闭转发 header
    proxy_pass_request_headers off;
    # 转发 Plex 自定义 header
    proxy_set_header X-Plex-Client-Identifier $http_x_plex_client_identifier;
    proxy_set_header X-Plex-Device $http_x_plex_device;
    proxy_set_header X-Plex-Device-Name $http_x_plex_device_name;
    proxy_set_header X-Plex-Platform $http_x_plex_platform;
    proxy_set_header X-Plex-Platform-Version $http_x_plex_platform_version;
    proxy_set_header X-Plex-Product $http_x_plex_product;
    proxy_set_header X-Plex-Token $http_x_plex_token;
    proxy_set_header X-Plex-Version $http_x_plex_version;
    proxy_set_header X-Plex-Nocache $http_x_plex_nocache;
    proxy_set_header X-Plex-Provides $http_x_plex_provides;
    proxy_set_header X-Plex-Device-Vendor $http_x_plex_device_vendor;
    proxy_set_header X-Plex-Model $http_x_plex_model;
    proxy_pass http://127.0.0.1:32400;
}

默认关闭 header 转发,只转发 Plex 自定义的 header,终于同时解决了两个问题。

EOF

如果你觉得这篇文章还不错,可以考虑支持作者

20250327

早上和强哥、Dora、Clu 一起在小峰的店里喝咖啡,中午吃了江南驿。

今天强哥就回北京了,下午带酷去玉鸟集。见到了网友,设计师友才。

今天在讨论,什么时候算十周年?如果从 Price Tag 开始算,明年就十周年了啊。翻翻照片,好多回忆,我就从一天几美金坚持到现在。

image.jpeg

20250326

起了个大早赶到求是大讲堂。今天是移动应用创新赛启动会,十周年果然阵仗很大。我们坐在 Tim Cook 后面一排,今天是第 2.5 次见到 Tim。

image.jpeg
image.jpeg

我和强哥、麦哥下午三个人一起有个圆桌讨论,关于产品、设计、技术、AI。能对下一代开发者有点点启发就行了。

20250325

又到相聚之日。广州一别没几天,Clu、强哥、Dora 来杭州了,接下来又是聊三天产品。

晚上麦哥请吃饭,快乐。龙虾刺身好吃,口感居然像是软一点的柚子。茅台二两已毫无压力。

image.jpeg
image.jpeg
image.jpeg
image.jpeg
image.jpeg
image.jpeg
❌