写给未来的blog:关于引用、结构、导航与 AI
早年,车东 提出过一个愿景:「让互联网:良好引用,良好结构,良好导航」, 这句话一直让我印象深刻。一直以来,对互联网内容的彼此可以有效引用、结构清晰、可以被(人类和机器) 理解和持续访问而不是被时间与系统更新湮灭,是我和许多 blog 作者的理想。在我自己的 blog 中, 我也一直在尝试实现这三个目标。
早年,车东 提出过一个愿景:「让互联网:良好引用,良好结构,良好导航」, 这句话一直让我印象深刻。一直以来,对互联网内容的彼此可以有效引用、结构清晰、可以被(人类和机器) 理解和持续访问而不是被时间与系统更新湮灭,是我和许多 blog 作者的理想。在我自己的 blog 中, 我也一直在尝试实现这三个目标。
借着 Vibe Coding 的东风,我为 blog 重新设计了一套模板,希望解决一些此前用的基于 ink 模板中存在的一些问题,并彻底清理掉一些历史包袱。
这件事还要从 Search Console 的 Core Web Vitals 报告说起。报告显示,旧主题使用的 Noto Serif SC 网页字体加载缓慢, 并在渲染过程中导致了显著的累积布局偏移(CLS)问题。
在调整网站 CSS 的过程中,我逐渐意识到原有主题模板存在不少结构性问题;与其零碎修补,倒不如直接推倒重来。 我的想法是,首先用 Hugo 新建一个最新版的最小模板,然后逐渐在上面添加我需要的功能,于是我列了一个需求 wishlist 清单:
⚠️ 免责声明
本文仅为作者基于个人经历所作的记录与分享,不构成任何形式的医疗建议或专业指导。作者并未接受相关专业培训,且文中所引用或提及的资料仅供参考,作者不对其完整性、准确性或适用性承担任何责任。涉及健康、医疗或相关法规的问题,请务必向具有资质的专业人士咨询。
根据CDC的统计数据, 全美十八岁以上接近一半的人口有糖尿病(占比11.6%)或前期糖尿病(占比38.0%),属于非常常见的疾病。 在亚裔人口中比较常见的是二型糖尿病,其特点是身体无法有效利用胰岛素(「胰岛素抵抗」),导致血糖在血液中累积, 从而引起血糖水平增加。 与低血糖不同,血糖水平升高通常不会立即导致特别明显的症状,但长期高血糖会损害眼睛、肾脏、神经和心脏等重要器官, 增加心脏病和血管疾病的风险。与直接致死的那类疾病不同,我认为糖尿病的可怕之处在于,它可能导致失明、或因反复感染造成肢体坏死等后果,这些都会在生命末期给患者带来巨大的长期痛苦。 因此,有必须采取措施避免出现糖尿病,或是尽量把它拖到人生比较末端的位置。
几年前我在体检中发现了血糖偏高的问题,除了服用药物和一些生活习惯的改变之外, 也增加了每隔一段时间抽血检查糖化血红蛋白水平来观察病情。与反映抽血当时血糖水平的空腹血糖不同, 糖化血红蛋白(A1c) 反映的是红细胞生命周期内的血浆葡萄糖平均浓度水平,因此美国糖尿病协会将其占比作为诊断糖尿病的一项标准。
前几天有小伙伴在整理某个代码仓库的时候,希望把仓库里的代码和数据分离以便于管理。 由于他使用的是 git,所以很快大语言模型便引导他用上了包括 filter-repo 在内的一系列禁术, 其间就有了一段关于是应该使用 git submodule 还是 git subtree 的讨论。
先说我的结论,对于绝大多数人,特别是已经动了重写历史这种念头的人来说, 理想的选择是 git submodule。
有时,我们会希望分发包含大量重复文件的 tarball。绝大多数情况下,tarball 都会进行压缩, 进行适当的预处理有助于显著地提高压缩效率。
数据压缩的基本原理是利用数据中的冗余,通过更短的编码或规则表示重复或可预测的内容, 从而减少存储或传输所需的空间。简单的例子中,比如连续重复的字符「AAAAAA」可以表达为「6A」, 然而,当重复数据分布在较长范围内时,压缩算法很难直接发现和利用这些远距离的关联, 因为需要额外记录位置或匹配信息,这种匹配开销很大,做的话会严重影响压缩速度并且可能收益不高。 对于文本文件来说,其中的许多内容会高频率地出现,而如果一个 tarball 中包括数个内容一样的大型二进制文件,压缩算法很难有效地检测并对他们进行正确的处理。
随着年龄的增长,我已经不怎么正经玩游戏了,不过由于独立日这段时间有两个星期只有我自己在家, 加上最近在 YouTube 上看到了游戏中第三章男女主酒吧对手戏的片段感觉制作相当不错, 所以在 Steam 上买了一份。
情感反诈模拟器(原名「捞女游戏」)是一款真人互动式影游, 其剧情画面是活的演员预先录制而非即时渲染。 这种形式有点类似于九十年代出现的互动式DVD(DVDi), 不过看起来分支可以比那时复杂许多,甚至可以加入一些业务逻辑。 这个游戏本身看起来是用 Electron 实现的,对代码做了少许混淆(bytenode),在运行过程中大部分时间实际上是在播放影像。 早期版本曾经可以直接在游戏启动器(使用的是明文的 JavaScript)中暴力注入一段启用远程调试的代码, 从而用一个单独的浏览器就可以调试游戏了,后来更新的版本中游戏制作者将入口堵住了🤣。 不过,这个游戏吸引我的并不是它采用的技术,所以关于技术的讨论到此为止。
🚨 警告
以下内容可能包含剧透,并且可能涉及不适合未成年人观看的内容,请仔细斟酌是否要继续阅读。
说明:这是关于北美时间2024年3月28日披露的 xzutil 后门事件的一些事后复盘。 关于漏洞本身的一些更为详细的背景和细节以及其发现过程, 在 Bryan Cantrill 和 Andres Freund 的这次 访谈 中有相当详尽的说明。由于漏洞并非我们发现,在此便不再赘述漏洞本身的细节。
值得庆幸的是,我们有足够的理由认为这次事件中 FreeBSD 并没有受到影响,但这里有相当大的运气的成分, 整体而言,我们的流程并非无懈可击,因此有必要进行一些总结。
自称叫「Jia Tan」的开发者花费了两年的时间逐渐取得了上游社区的信任,并最终成为了 xzutils 的维护者。
攻击者在 2024 年 2 月 23 日在源代码中的一处二进制文件中放置了后门,并随后发布了 xz 5.6.0。 攻击者发布的源代码包中,以巧妙地方式增加了激活后门的脚本。值得注意的是,这些脚本从未进入过 xzutils 的 Git 代码库,因此躲过了包括 FreeBSD 在内的开发者进行的日常代码审计(值得说明的是,由于这些脚本通常是自动生成的, 体积庞大且随 autoconf 等工具的版本变化很大,因此其内容审计难度较大。比较稳妥的做法是从人类易读的 autoconf 文件中重新生成这些脚本)。
由于后门代码最初版本的 bug,攻击者在接下来的两周时间进一步对后门进行了修补以增加其发现的难度。
主要的 Linux 发行版,包括 Debian 和 RedHat,均在其开发版本中跟进了这些变动。 由于 systemd 的插件设计,这些变动导致后门被插入到了这些 Linux 发行版中的 sshd 服务中。 由于后门引入了一系列计算密集的代码,人们逐渐注意到了一些奇怪的性能问题。
最终,PostgreSQL 开发者,就职于微软公司的 Andres Freund 在经过了一段时间的性能追踪之后, 正式确认了 xzutils 后门的存在,并立即通知了主流发行版的安全团队。
我本人也在第一时间收到了通知。当时是太平洋时间的中午,我没有携带解密所需的密钥, 但由于这一讨论相当热烈,加上邮件标题并不加密,因此我大概知道了发生了什么事。
delphij.net 搬到美国之后,一直是在大河的 FMT-1 的 sirius.delphij.net 上运行的。 这台机器是 iXsystems 组装,于2010年5月20日上线的,采用 Intel Xeon L5630 处理器, Supermicro X8STi 主板,当时配了24GB内存,4块1.5TB硬盘,后将硬盘替换成了3块2TB+ 1个SSD。
以往我是不直接在 eBay 上购买二手硬件(这不包括美国比较常见的「翻新refurbished」硬件, 这类卖家往往是比较专业的回收处理机构)的,原因是购买此类硬件多少有点像拆盲盒: 二手硬件的质量往往缺乏统一且一致的标准,并且通常只提供较短的退货窗口。
不过 上回书 说到我收了一台二手的 Dell R640 服务器,既然选择了消费降级索性一降到底试试看买二手内存和存储。
最近从张师傅那里获得了一台来自政府换新时拍卖的二手 Dell VxRail E560, 这是 Dell/EMC 「超融合」概念的机器,实际硬件和 Dell PowerEdge R640 是一样的。
由于我并不需要使用 VxRail E560 系列增加的一系列 VMWare 功能, 将其变回 PowerEdge R640 可以让管理员获得更多的对于固件的控制。 这里记录一下过程。