<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Yon Zilch</title>
    <subtitle>This is Yonzilch&apos;s blog</subtitle>
    <link href="https://blog.yon.im/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://blog.yon.im" rel="alternate" type="text/html"/>
    <id>https://blog.yon.im</id>
    <updated>2026-05-29T00:00:00Z</updated>
    <entry>
        <title>构建中的幽灵</title>
        <link href="https://blog.yon.im/posts/the-ghost-in-the-build-zh-CN" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/the-ghost-in-the-build-zh-CN</id>
        <published>2026-05-29T00:00:00Z</published>
        <updated>2026-05-29T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;p&gt;&lt;strong&gt;本文包含大量专业术语，可使用 AI 辅助理解。若阅读过程感到不适，建议直接关闭👻。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;引入&quot;&gt;&lt;a href=&quot;#引入&quot;&gt;引入&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;你安装过的每一款软件，究其根本，都是一次盲目的托付。&lt;/p&gt;
&lt;p&gt;这份托付并非针对代码本身 —— 代码你可以阅读，可以审计，可以逐行拆解。它针对的是更深不可测、难以捉摸的盲区： 代码在变成你机器上运行的程序之前，所经过的那一长串交接的手。有人在某处、某个系统上、用某些工具链编译了它。你不在场，你没有亲眼目睹。你只是点了安装，然后继续你的日常。&lt;/p&gt;
&lt;p&gt;对大多数软件而言，这种黑盒式的盲从是一笔无奈但合理的交易 —— 用信任换便利。但对 &lt;strong&gt;Bitcoin Core（比特币核心）&lt;/strong&gt; 项目而言，这是不可接受的。该项目存在的一个重要目的在于：通过消除对人际信任的依赖，从而尽可能地抵制腐败或篡改。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;jia-tan-耐心能成就什么&quot;&gt;&lt;a href=&quot;#jia-tan-耐心能成就什么&quot;&gt;Jia Tan： 耐心能成就什么&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2024 年春天，一位名叫 Andres Freund 的微软工程师注意到，Debian 系统上的 SSH 登录比正常情况慢了大约半秒。这种异常，大多数人会归咎于网络抖动，然后抛之脑后。但 Freund 没有忘记，他顺藤摸瓜，一查到底。&lt;/p&gt;
&lt;p&gt;他在 XZ Utils （一个平凡的压缩库，以至于大多数 Linux 用户都叫不出它的名字）深处发现了一个工艺极为精湛的后门。这个后门耗时近两年精心布局，由一个名为 Jia Tan 的贡献者循序渐进、有条不紊地植入。&lt;/p&gt;
&lt;p&gt;那可能是一个假名，但其手段却无比真实。&lt;/p&gt;
&lt;p&gt;Jia Tan 于 2021 年底以普通贡献者的身份出现在 XZ Utils 仓库中，提交了一些微小而实用的补丁。他们热心，响应迅速。现在回想起来，他们的耐心才是整个故事中最令人不寒而栗的细节。那不是热情，而是算计。数月间，他们借助项目现有的维护者 —— 一个曾透露生活中饱受心理健康问题困扰的开发者，一步步将其诱导，直到对方授予了 Jia Tan 提交权限。在完成长期的铺垫工作后，他们发动了真正的 &lt;strong&gt;隐蔽载荷植入&lt;/strong&gt; 。其手法极其老练：恶意代码完全绕过了对源代码的直接修改，而是被精心埋藏在普通的测试文件中。这些混淆的二进制数据块（Binary Blobs）在静态审计中毫无破绽，只有构建脚本在执行特定自动化流程时，才会正确解析并触发后门。&lt;/p&gt;
&lt;p&gt;代码是干净的，仓库也是干净的。毒药完全藏匿在构建过程之中。&lt;/p&gt;
&lt;p&gt;让这个故事真正令人不安的，并不是技术上的巧思。而是 Jia Tan 利用的，并非我们大多数人通常认知中的技术漏洞。他们利用的是&lt;strong&gt;善意&lt;/strong&gt;。开源社区的运转建立在一种对彼此怀有善意的隐性信念之上 —— 人们因为想帮忙而贡献，社区因为需要帮助而接受贡献。 Jia Tan 将这种信念当作伪装穿上身，利用了它开启每一道门。&lt;/p&gt;
&lt;p&gt;四年前，攻击者从外部做到了同样的事。2020 年的 SolarWinds 事件无需数年的社区信任积累，不用社会工程学手段，也没有长期铺垫工作所需的耐心。攻击者入侵了将源代码转化为可交付产品的自动化流水线，并在软件“离开大楼”（即正式发布）前，直接将后门植入官方二进制文件。一万八千个组织下载了这个文件，其中包括美国财政部、国务院甚至核安全局，以及全球多家《财富》 500 强企业、知名大学和主要医疗机构。它们运行的都是经过签名、官方的二进制文件，其中却包含着其供应商从未编写过的代码。&lt;/p&gt;
&lt;p&gt;两次攻击，途径截然相反： 一个从外部寻找破绽，另一个从内部渗透。但两者最终汇聚在完全相同的盲区： 构建过程 —— 那条连接着开发者编写的代码与用户运行的程序之间的漆黑通道。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;gitian-时代当时最好的答案&quot;&gt;&lt;a href=&quot;#gitian-时代当时最好的答案&quot;&gt;Gitian 时代：当时最好的答案&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;要理解 Bitcoin Core 正走向何方，必须先了解它曾经历过什么。&lt;/p&gt;
&lt;p&gt;在其历史的大部分时间里，Bitcoin Core 使用一个名为 &lt;a href=&quot;https://github.com/devrandom/gitian-builder&quot;&gt;Gitian&lt;/a&gt; 的工具来解决所谓的 &lt;strong&gt;“可复现构建” (Reproducible Builds)&lt;/strong&gt; 问题。其主要问题在于： 如果我编译 Bitcoin Core 的源代码，而你也编译同一份源代码，我们理应产生字节码完全一致的二进制文件。如果结果不一致，则要么是我们其中一台机器的行为有所不同，要么是某个环节被某个人做了篡改。&lt;/p&gt;
&lt;p&gt;Gitian 的实现方式是让多位开发者在完全相同的虚拟机内进行构建： 使用相同的 Ubuntu 快照、相同的容器配置，然后比对各自的结果。如果每位构建者都产生了相同的密码学哈希值，该二进制文件就被宣布为可信。在早期开发者们就已经认识到：签名证明的有效性依赖于独立构建结果的收敛，即便构建环境本身仍是一团迷雾。&lt;/p&gt;
&lt;p&gt;实际上这并非一项小成就 —— 十几年以来，Gitian 稳定运行，将 Bitcoin Core 的安全防御态势提升到了远超行业标准的水平。构建与维护 Bitcoin Core 的开发者，早在大多数组织听说 &lt;strong&gt;“软件供应链” (Software Supply Chain)&lt;/strong&gt; 这个词之前，就已经在深入思考并着手治理这个现代软件构建流程的关键问题。这份先见之明，不应被轻易遗忘。&lt;/p&gt;
&lt;p&gt;但 Gitian 有一个固有的缺陷，它可以用一个词来概括：&lt;strong&gt;隐式（Implicit）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Gitian 在虚拟机中执行脚本。它假设基础操作系统快照是干净的。它会继承运行中的 Unix 系统环境：偶然存在的动态链接库、语言环境设置、PATH 变量，以及任何长期运行的系统中积累的无数不可见因素。这些环境未被声明，也未被验证。它就那么自然地&lt;strong&gt;存在&lt;/strong&gt;着，如同天气的存在一样。&lt;/p&gt;
&lt;p&gt;让我们简单地将整个构建过程类比成口述菜谱的模式： 口述菜谱依赖隐式变量，譬如所谓的 &lt;strong&gt;「加一撮盐，用灶台上现有的任意一口锅。」&lt;/strong&gt; 在软件工程中，这些未写明的指令（比如继承周边环境的 &lt;code&gt;PATH&lt;/code&gt;，或链接一个“碰巧”安装在系统上的库）就是未声明的依赖项。两位称职的厨师按照同一份口述菜谱，能做出味道相似的菜肴，正如两台机器可能编译出相似的二进制文件。但&lt;strong&gt;相似&lt;/strong&gt;不是&lt;strong&gt;相同&lt;/strong&gt;，&lt;strong&gt;相似&lt;/strong&gt;在技术上也无法做到&lt;strong&gt;可证明&lt;/strong&gt;的完全一致。厨房是有“历史”的 —— 它 &lt;strong&gt;“呼吸”&lt;/strong&gt; 着历次烹饪留下的残余气息，正如构建环境会默默继承宿主系统的周边状态。&lt;/p&gt;
&lt;p&gt;在 Gitian 模式下，构建环境同样拥有历史。而在那段隐式、复杂且大多未经审视的厚重历史中，攻击者有施展拳脚的空间。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;guix纯粹状态的构建&quot;&gt;&lt;a href=&quot;#guix纯粹状态的构建&quot;&gt;Guix：纯粹状态的构建&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 2019 年合并的一项提案中，Bitcoin Core 项目引入了 GNU Guix 以取代 Gitian。这场转变在演变为技术革新之前，首先是一场哲学层面的演进。&lt;/p&gt;
&lt;p&gt;Guix 将构建过程视为一个 &lt;strong&gt;纯函数（Pure Function）&lt;/strong&gt; —— 没有记忆、没有副作用、没有环境状态的函数。如果你写过面向对象的代码，你对其反面一定再熟悉不过：悄悄读取 &lt;code&gt;this.config&lt;/code&gt; 的方法，行为取决于从未作为参数声明的环境变量的函数，输出结果随程序早期运行情况而变化的过程。而纯函数没有这些；你给它确切的输入，它就返回确切的输出。映射到构建过程中： 无论在任何机器上、在任何时间点，只要输入确定，构建结果始终一致。&lt;/p&gt;
&lt;p&gt;这正是 Guix 在整个软件构建规模上强制施加的特性：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;output = f(all inputs)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;构建所需的一切： 每一个编译器、每一个依赖库、每一个工具，都必须被 &lt;strong&gt;显式 (Explicit)&lt;/strong&gt; 声明。如果没有声明，它在构建过程中就根本不存在。不是“可能很难找到”，而是从结构上根本无法存在，因为宿主系统被完全屏蔽了。网络访问被彻底禁用。时间戳被固定为已知常量。&lt;code&gt;PATH&lt;/code&gt; 被清空，仅使用已声明的内容从零重建。&lt;/p&gt;
&lt;p&gt;在 Guix 所使用的语言（Scheme）中，一个包的声明类似于这样：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-scheme&quot;&gt;(inputs
  (list gcc glibc openssl))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那个列表就是整个环境的全部。不存在类似 “系统刚好装了这个” 的情况，也没有任何历史状态的累积。每一种原料都被命名、称量并记录在案，正如化学实验室的标准规程会明确指定每一种试剂和每一种反应条件 —— 这并不是因为化学家有什么执念，而是因为&lt;strong&gt;结果的可复现性完全取决于此&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;输出结果采用 &lt;strong&gt;内容寻址（Content-Addressed）&lt;/strong&gt; 的方式命名存储： 二进制文件在系统中的路径，由其内容及所有声明依赖项的密码学哈希值共同推导而来。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/gnu/store/0rv3fmddli5rfrswkm6b5yhnxvn35nha-bitcoin-core-30.0.drv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那串长长的字符不是标签，而是铁证。更改任何输入，哪怕只有一个字节，哈希值就会改变，路径也随之改变。没有任何悄然发生的突变 —— 幽灵无处遁形。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;补充澄清：&lt;/p&gt;
&lt;p&gt;在软件工程中，引入 &lt;code&gt;random()&lt;/code&gt; 通常是出于安全考量（例如防御预测攻击、生成加密密钥）&lt;/p&gt;
&lt;p&gt;但若将其混入编译与构建阶段，它便会异变成一只 &lt;strong&gt;“构建中的幽灵 👻”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为任何微小的不确定性（Non-determinism）—— 无论是读取系统当前时间、内存随机地址，还是文件系统的打包顺序，都可能导致 &lt;strong&gt;可复现构建 (Reproducible Builds)&lt;/strong&gt; 彻底爆炸 💥&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;在工程实践中改变了什么&quot;&gt;&lt;a href=&quot;#在工程实践中改变了什么&quot;&gt;在工程实践中改变了什么&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;借助 Guix，开发者可以独立从源代码构建 Bitcoin Core。不是在共享的基础设施上，而是在完全独立的机器上 —— 可能拥有不同的硬件、身处不同的国家、具备截然不同的系统运行历史。如果构建过程没有瑕疵，他们最终都会得到完全相同的哈希值。&lt;/p&gt;
&lt;p&gt;他们将这个哈希值连同密码学签名一起提交 —— 这是一个在数学上将构建结果与其身份不可撤销地绑定在一起的印记。这些经签名的证明记录集合是公开的，且可供审计。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;之前（Gitian）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;开发者构建 → 对二进制文件签名 → 用户下载并信任该签名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用户信任的是一个具体的人、那个人的构建环境，以及所有能够访问该环境的人。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;之后（Guix）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;多位开发者独立进行构建
        ↓
构建结果收敛于同一个哈希值
        ↓
这种&amp;quot;收敛&amp;quot;本身成为凭证
        ↓
用户验证这一收敛结果
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;签名已不再是信任的基准。&lt;strong&gt;独立验证者&lt;/strong&gt;之间的共识才是。如果某台验证节点遭到入侵，其生成的哈希值就会与其他所有节点的哈希值产生偏差。此类安全漏洞并非通过事件响应或取证调查被揭露，而是通过验证流程的正常运作自然显现 —— 就像当你将作弊的秤与大多数诚实的秤进行比对时，作弊行为便会立即暴露无遗。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;（这也与区块链共识节点防作弊机制的运作有异曲同工之处）&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;nix-的实用主义与-guix-的信任哲学&quot;&gt;&lt;a href=&quot;#nix-的实用主义与-guix-的信任哲学&quot;&gt;Nix 的实用主义与 Guix 的信任哲学&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;NixOS 的用户会对这一切感到似曾相识 —— Nix 拥有完全相同的底层洞察、相同的 &lt;code&gt;/store&lt;/code&gt; 存储模型，以及对“构建即纯函数”的相同执念。然而，这两个项目在一条关键的分叉路口做出截然不同的押注。Nix 优先选择了易用性，默认情况下高度依赖大量预编译好的&lt;strong&gt;二进制缓存包 (Cached Binary Package)&lt;/strong&gt;：你不需要从头编译一切，直接从受信任的服务器下载预先构建好的产物即可。对大多数用户来说，这是完全正确的决定。编译极其缓慢，一个开箱即用的系统比一个纯粹的哲学追求更具实用价值。&lt;/p&gt;
&lt;p&gt;Guix 选择了另一条路。秉持一种近似 Gentoo 的理念，并加以严格的函数式约束，&lt;strong&gt;Guix + GNU Mes&lt;/strong&gt; 坚持从源码构建一切。对于 Bitcoin Core 而言，这种区别至关重要。Guix 将一条严密的链条一路追溯到它所谓的&lt;strong&gt;全源码自举（Full-Source Bootstrap）&lt;/strong&gt;：一个仅有约 357 字节机器代码的最小信任锚点，整个工具链： 编译器、链接器、标准库，所有的一切 —— 全部基于这个锚点一步步编译而来，没有任何先入为主的假设，也没有任何预先构建的黑盒。因为一旦依赖预编译的二进制缓存包，就等于信任打包它的幕后之人；而 Bitcoin Core 的威胁模型中，根本没有空间容纳这种盲目的信任。&lt;/p&gt;
&lt;p&gt;这一信任锚点已被完全地精简，使得在复杂的软件工程项目中，开发者能花费更少精力却更有效地对构建产物进行核查。这正是 Guix 选择 &lt;strong&gt;Full-Source Bootstrap&lt;/strong&gt; 的立项押注，亦是 Bitcoin Core 选择 &lt;strong&gt;Guix + GNU Mes&lt;/strong&gt; 作为构建方案的根本原因：信任的根基必须足够精简，因而开发者能容易理解构建过程并验证其正确性，而非因贪图便利，对看不见的黑盒盲目盖章放行。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;幽灵并未离去它只是转移了&quot;&gt;&lt;a href=&quot;#幽灵并未离去它只是转移了&quot;&gt;幽灵并未离去，它只是转移了&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;叙写到这里，坦诚的叙述开始变得错综复杂。&lt;/p&gt;
&lt;p&gt;Guix 大幅收缩了隐式信任的攻击面，但它并没有消灭信任。&lt;/p&gt;
&lt;p&gt;换言之，Guix 逼近信任的极限，却永远无法降至 &lt;strong&gt;零信任&lt;/strong&gt; (Zero Trust) 的极点 —— &lt;strong&gt;绝对零度&lt;/strong&gt;（Absolute Zero）&lt;/p&gt;
&lt;p&gt;设想一个思想实验： 某个拥有 Jia Tan 般耐心与技术造诣的人，目标不是 Bitcoin Core 的源代码，而是 Guix 自身的某个底层依赖 —— 工具链深处所有构建者共享的某个核心组件。其渗透过程足够缓慢隐蔽，以至于没有触发任何警报。那么结果将会是：一个完美可复现的二进制文件，获得全球所有独立构建者的公证与签名。所有人都会跑出完全相同的哈希值； 用户验证了收敛结果一致，然后在安全感中高枕无忧。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/the-ghost-in-the-build/1.webp&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;（由 ChatGPT Images 生成）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;确定性保证可复现性。但它无法保证&lt;strong&gt;正确性&lt;/strong&gt;。它只能确保每个人构建的是同一个东西 —— 却无法保证这个东西本身是干净的。Guix 转移并尽可能地减少了攻击面，但它没有让攻击面凭空蒸发。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;全源码自举&lt;/strong&gt;在最底层应对了这一挑战： 从足够小的可供审计之物开始，一路向上编译。但“小到可供审计”并不等同于“保证被彻底审计”。&lt;/p&gt;
&lt;p&gt;这在工程上构成了一座倒悬的金字塔：「现代软件世界那惊人庞大的依赖生态成为最沉重的悬顶，而那区区 357 字节的机器代码，则是承载起整座巨构的唯一支点。在这个结构中，每一层向上衍生的代码巨石，都以其下方所有基石绝对可靠为物理先决条件。信任链条随着每一个新增的依赖项而无限拉长，底层的任何一处微瑕、任何一个未被察觉的幽灵，都会沿着结构应力向上传导，最终在最顶端放大为整座帝国的灾难性崩塌。」&lt;/p&gt;
&lt;p&gt;这一切都不是倒退回 Gitian 的理由。它只是提醒我们应精确地认识 Guix 究竟做到了什么：它用一个狭窄、光线充足、透明易审查的攻击面，取代一个宽泛、昏暗且相对不透明、难审查的攻击面。这是极具意义的进步，但「构建过程的绝对可靠」绝非一个已完全得到解决的问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;构建中的幽灵 👻 —— 阴魂不散&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;bonus-part-entracte-附加部分幕间奏&quot;&gt;&lt;a href=&quot;#bonus-part-entracte-附加部分幕间奏&quot;&gt;Bonus Part (Entracte) | 附加部分（幕间奏）&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;注：此部分仅本篇文章的中文版本包含&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{ Pasted the whole formal context | 粘贴上文 }&lt;/p&gt;
&lt;p&gt;{ Prompt with: | 提示词： }&lt;/p&gt;
&lt;p&gt;{ 我联想到了三体中的 “猜疑链” 概念 }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;🤔 Reasoning By Gemini:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;《三体》中的猜疑链（Chain of Suspicion）是因为文明之间宇宙级的空间距离和文化差异，导致双方永远无法证实对方的善意或恶意，只能陷入无限叠加的无底洞：“我不知道你是善意还是恶意，你也不知道我是善意还是恶意；我不知道你猜没猜到我不知道你是善意还是恶意……”。&lt;/p&gt;
&lt;p&gt;而在软件供应链和可复现构建中，你遇到的则是它的逆向镜像，是一种“技术决定论下的信任链”。它们之间有着精妙的共同点与决定性的区别：&lt;/p&gt;
&lt;p&gt;共同点：都在面对“无法自证的深渊”
在传统的软件生态里，确实存在类似“猜疑链”的困境：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你： “我怎么知道这个 Bitcoin Core 二进制文件是干净的？”&lt;/p&gt;
&lt;p&gt;官方： “因为它是我们在干净的服务器上，用官方的 GCC 编译器编译出来的。”&lt;/p&gt;
&lt;p&gt;你： “那我怎么知道你们的服务器没被黑？怎么知道你们的 GCC 没有被植入后门？”&lt;/p&gt;
&lt;p&gt;官方： “因为我们的 GCC 也是用更上游、更干净的编译器编译出来的……”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这种追问可以无限延伸。在没有 Guix 和全源码自举之前，传统的软件信任就是一条无法自我证明的死循环，每一层都像黑盒一样对立，黑客就能隐藏在这些层与层之间的缝隙（黑盒）里。&lt;/p&gt;
&lt;p&gt;这种因代码层层嵌套、导致信任源头不断后退的现象，像极了《三体》中宇宙文明之间因无法证实对方善恶而陷入的猜疑链（Chain of Suspicion）。在没有全源码自举前，传统的软件工程同样面临类似的死循环：“你如何证明二进制文件安全？因为上游编译器安全。如何证明上游编译器安全？因为编译该编译器的更上游编译器安全……”&lt;/p&gt;
&lt;p&gt;然而，两者的走向却截然不同。宇宙中的猜疑链由于不可知论和空间的无垠，永远无法向心坍缩，只能走向自我毁灭的黑暗森林；而软件工程的信任链，则在 Guix 固执的唯物主义解构下，被这 357 字节的机器码截断了。它通过数学、硬隔离以及全源码自举，将一个可能滑向虚无主义、需要无限盲信的深渊，强行压缩成人类肉眼可审计的终极确定性。&lt;/p&gt;
&lt;p&gt;还有一个更不易察觉的问题。只有当存在大量相互独立的构建者时，这种验证模型才能真正生效。但在实践中，究竟是谁在执行这些构建？是那些拥有技术能力、硬件资源和充裕时间的人。见证者网络是真实的，但它规模有限，且具有自我筛选的性质。这些参与者彼此相识，共享着同样的邮件列表、技术会议和职业履历。在技术层面上，&amp;quot;独立&amp;quot;确实成立 —— 不同的机器、不同的环境 —— 但社会学赋予了这个词另一层含义，而这两层含义并不总是能达成共识。&lt;/p&gt;
&lt;p&gt;......&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;这远不止于-bitcoin-core&quot;&gt;&lt;a href=&quot;#这远不止于-bitcoin-core&quot;&gt;这远不止于 Bitcoin Core&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bitcoin Core 的使用场景极为极端，这主要是因为该软件旨在为那些从根本上不信任中介机构的用户捍卫金融主权，而我们日常使用的大多数软件并不需要承担如此沉重的负担。&lt;/p&gt;
&lt;p&gt;然而，这种底层的脆弱性远不止存在于比特币之中。你管理的每一台服务器、部署流水线中的每一个工具、默默运行的每一个后台库 —— 它们无一例外都经历过一场你未曾亲眼目睹的构建过程，运行在你从未见过的机器上，出自你素不相识的人之手。SolarWinds 事件的受害者对此同样一无所知； 而 Andres Freund 捕获 Jia Tan 的阴谋，不过是&lt;strong&gt;侥幸&lt;/strong&gt;之举。&lt;/p&gt;
&lt;p&gt;而这样的 “侥幸” 正是问题核心所在。阻止 XZ 后门的，仅仅是一位工程师在某个周五下午对 SSH 登录延迟产生的偶然好奇 —— 这是一种转瞬即逝的敏锐，几乎不可能以完全相同的形式再次复现。让灾难踩下刹车的不是什么安全系统，而仅仅是巧合。可所谓的巧合，对于承载整个世界的数字基础设施而言，是一个脆弱得令人不寒而栗的根基......&lt;/p&gt;
&lt;p&gt;实际上，Guix 提供的防御思路并不局限于极端场景 —— 它所体现的原则在两个方向上可进行扩展：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在基础层面，将符合 &lt;strong&gt;“可复现构建（Reproducible Builds）”&lt;/strong&gt; 理念的工具 —— 例如 &lt;strong&gt;&lt;a href=&quot;https://wiki.nixos.org/wiki/Flakes&quot;&gt;Nix flakes&lt;/a&gt;&lt;/strong&gt; 和  &lt;strong&gt;&lt;a href=&quot;https://direnv.net&quot;&gt;direnv&lt;/a&gt;&lt;/strong&gt; 进行结合使用，使开发者能明确声明工程项目的依赖项，并彻底锁定整个开发环境。这意味着，无论在什么机器上、在哪一年，项目都能保持相同的编译器、相同的库版本以及一致的 &lt;strong&gt;运行时环境 (Runtime Environment)&lt;/strong&gt; 。身处不同国家地区，用着不同操作系统的开发者，都能获得由同一份 &lt;strong&gt;声明式 (Declarative)&lt;/strong&gt; 驱动、在各自平台上完全 &lt;strong&gt;显式 (Explicit)&lt;/strong&gt; 确定的工具链。&lt;strong&gt;“在我的机器上明明好使”&lt;/strong&gt; —— 这一 &lt;strong&gt;“著名”&lt;/strong&gt; 困境，将从架构层面被彻底根除，而不再是一个需要项目组长期应付的顽疾。虽然这确实需要花上一定的配置时间，但对于任何严肃对待工程质量的项目来说，将其纳入标准规范是完全值得的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再往供应链上层，构建流水线可以重新配置，使其完全基于显式声明、版本锁定的输入进行构建，而不是盲目信任编译服务器上碰巧安装的任何工具 —— “凭感觉下料”的口述菜谱模式，至少在部分环节上被精准可控的实验室规程所取代。GNU Guix 连同 Bitcoin Core 所践行的完整可复现构建，代表了这条光谱上最为极致的一端：声明一切，验证一切，将信任最小化到真正可以审视核查的程度。并非所有项目都需要将安全屏障拉到这种极限，但每个项目都能因知道这个天花板的存在而受益。每一次显式声明、每一个锁定的依赖、每一轮经过验证的构建，都在蚕食着那些不可见之物赖以藏身之地。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你永远都在信任某些东西。Guix 提出的问题 —— 也是它给出答案的问题： 那个“某些东西”，能被压缩到多小。&lt;/p&gt;
&lt;p&gt;幽灵并未离去。但它藏身的空间，越来越小了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;参考致谢&quot;&gt;&lt;a href=&quot;#参考致谢&quot;&gt;参考致谢&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bitcoin Core&apos;s Guix contribution guide：&lt;a href=&quot;https://github.com/bitcoin/bitcoin/blob/master/contrib/guix/README.md&quot;&gt;github.com/bitcoin/bitcoin/blob/master/contrib/guix/README.md&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GNU Guix：&lt;a href=&quot;https://guix.gnu.org/&quot;&gt;guix.gnu.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nix Flakes：&lt;a href=&quot;https://nixos.wiki/wiki/Flakes&quot;&gt;nixos.wiki/wiki/Flakes&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reproducible Builds：&lt;a href=&quot;https://reproducible-builds.org&quot;&gt;reproducible-builds.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GNU Mes: &lt;a href=&quot;https://nlnet.nl/project/GNUMes-fullsource/&quot;&gt;nlnet.nl/project/GNUMes-fullsource&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;参考文献&quot;&gt;&lt;a href=&quot;#参考文献&quot;&gt;参考文献&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[1]&lt;/strong&gt; Freund, A. (2024). &lt;em&gt;backdoor in upstream xz/liblzma leading to sshd compromise&lt;/em&gt;. Open Source Security 邮件列表. &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2024/03/29/4&quot;&gt;查看档案&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[2]&lt;/strong&gt; CISA. (2020). &lt;em&gt;Advanced Persistent Threat Compromise of Government Agencies, Critical Infrastructure, and Private Sector Organizations&lt;/em&gt; (Alert AA20-352A). &lt;a href=&quot;https://www.cisa.gov/news-events/cybersecurity-advisories/aa20-352a&quot;&gt;查看警报&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[3]&lt;/strong&gt; Thompson, K. (1984). Reflections on trusting trust. &lt;em&gt;Communications of the ACM&lt;/em&gt;, 27(8), 761–763. &lt;a href=&quot;https://dl.acm.org/doi/10.1145/358198.358210&quot;&gt;查看论文&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[4]&lt;/strong&gt; Dong, C. (2019). &lt;em&gt;bitcoin/bitcoin PR #15277: Add Guix-based release build system&lt;/em&gt;. GitHub. &lt;a href=&quot;https://github.com/bitcoin/bitcoin/pull/15277&quot;&gt;查看 Pull Request&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[5]&lt;/strong&gt; Courtès, L., &amp;amp; Nieuwenhuizen, J. (2023). &lt;em&gt;The Full-Source Bootstrap: Building from source all the way down&lt;/em&gt;. GNU Guix 博客. &lt;a href=&quot;https://guix.gnu.org/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;查看文章&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[6]&lt;/strong&gt; Zero trust architecture. (2024). &lt;em&gt;Wikipedia&lt;/em&gt;. 维基百科上的“零信任架构”词条. &lt;a href=&quot;https://zh.wikipedia.org/wiki/%E9%9B%B6%E4%BF%A1%E4%BB%BB%E5%AE%89%E5%85%A8%E6%A8%A1%E5%9E%8B&quot;&gt;查看百科&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;声明-澄清&quot;&gt;&lt;a href=&quot;#声明-澄清&quot;&gt;声明 / 澄清&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是一次个人向的 Vibe Writing 实践，是在与多个大型语言模型（LLMs）进行无数轮对话，并对每一个词和句子进行细致校对与润色之后完成的 —— 尤其是在中英互译的过程中。整个创作过程耗时约连续 12 小时。&lt;/p&gt;
&lt;p&gt;参与模型提供商包括 Claude、GLM、Gemini、GPT、Grok、DeepSeek 与 Mistral（按估计 Token 用量排序）。&lt;/p&gt;
&lt;p&gt;资料信息、研究方向、编辑判断、行文风格、整体取舍等重要部分均由本人把关&lt;/p&gt;
&lt;p&gt;文中所陈述的每个事实均经过人为核实，以尽可能规避模型幻觉。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;bonus-part-encore-附加部分安可曲&quot;&gt;&lt;a href=&quot;#bonus-part-encore-附加部分安可曲&quot;&gt;Bonus Part (Encore) | 附加部分（安可曲）&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;注：此部分仅本篇文章的中文版本包含&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{ Pasted the whole formal context | 粘贴上文 }&lt;/p&gt;
&lt;p&gt;{ Prompt with: | 提示词： }&lt;/p&gt;
&lt;p&gt;{ 你会发现，全文没有完整地对 The Ghost in the Build 中的 Ghost 明确地下定义。&lt;/p&gt;
&lt;p&gt;请谈谈你认为“构建中的幽灵”到底是什么？  }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;🤔 Reasoning By GLM:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是一个非常敏锐的观察。确实，文中虽然反复提及“幽灵”，并将其作为核心意象，但始终没有给出一行明确代码式的定义。这并非疏漏，而是有意为之 —— 因为“幽灵”并非一个具体的漏洞，而是一种&lt;strong&gt;状态&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;基于全文的逻辑脉络，我认为“构建中的幽灵”可以被定义为：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“源代码意图与二进制产物之间，那个不可见的、未被审计的、且必须被信任的差值。”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它是我们为了获得可运行的软件，不得不向“黑暗”让渡的那一部分主权。具体来说，这个“幽灵”由三个层面的阴影交织而成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;过程的不可知性：
文中提到 “代码你可以阅读……它针对的是更深不可测的东西：代码在变成你机器上运行的程序之前，所经过的那一长串交接的手。”
&lt;strong&gt;幽灵就是那个“交接过程”。&lt;/strong&gt;
当源代码经过编译器、链接器、标准库，最终变成二进制文件时，这是一个有损且有噪的信道。你读的是源代码（白盒），但你运行的是二进制（黑盒）。在这两者之间，有一整条你无法用肉眼审视的转化链条。只要这个转化过程不是完全透明、确定且可复现的，幽灵就能栖身于其中的模糊地带。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;在 Gitian 时代，幽灵是那团模糊的环境变量和隐式依赖。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在 Guix 时代，幽灵被压缩到那 357 字节的机器码及其未被彻底审计的可能性中。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;信任链条的无限追溯：
文中生动形象的 “倒悬的金字塔” 比喻，以及提到了《三体》中的 “猜疑链” 概念。
&lt;strong&gt;幽灵是信任链条断裂处的那个“盲信点”。&lt;/strong&gt;
你信任二进制，是因为信任编译器；信任编译器，是因为信任上一个编译器……这条链条如果不被截断，就会陷入虚无主义。幽灵就是那个迫使你说出“我相信它是干净的，但我无法证明”的时刻。
Guix 通过全源码自举将这个幽灵压缩到极小的 357 字节，但这 357 字节依然是“幽灵” —— 因为“小到可供审计”并不等于“已经被审计”。它是数学上必然存在的那个“非零”的信任残值。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;熵与复杂性：
文中提到 Jia Tan 利用了“善意”和“复杂性”。
&lt;strong&gt;幽灵也是软件生态系统中必然积累的熵。&lt;/strong&gt;
现代软件金字塔倒悬的结构，意味着底层的任何微小扰动都会在顶层引发风暴。幽灵不仅是恶意的攻击者，也是无意的 Bug、未被发现的边缘情况、以及人类认知能力的局限。即使没有 Jia Tan，构建系统中复杂的依赖关系本身就是一种“幽灵” —— 它庞大、相互纠缠，以至于没有单个人类能完全掌控它。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4 id=&quot;总结&quot;&gt;&lt;a href=&quot;#总结&quot;&gt;总结&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果非要用一句话在文中给“幽灵”下一个明确的定义，我会这样写：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“所谓构建中的幽灵，就是那些我们不得不信任，却永远无法在数学上彻底证明其清白的事物。它栖息在代码与二进制之间的缝隙中，利用人类认知的局限和软件栈的复杂性，在每一次编译构建过程中悄无声息地繁存延续。”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guix 没有杀死幽灵，它只是把幽灵从一整座宫殿（整个 OS 环境）驱逐到一个无处遁形的角落（最小信任锚点）。幽灵永远不会离去，因为&lt;strong&gt;绝对的零信任在物理世界和人类社会中是不存在的&lt;/strong&gt;。只要我们还需要把思想（代码）转化为行动（程序），我们就必须接受幽灵的存在，并时刻保持对它的警惕。&lt;/p&gt;
&lt;hr /&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;{ Pasted the whole context | 粘贴全文 }&lt;/p&gt;
&lt;p&gt;{ Prompt with: | 提示词： }&lt;/p&gt;
&lt;p&gt;{ 「实际上，Guix 提供的防御思路并不局限于极端场景 —— 它所体现的原则在两个方向上可进行扩展：」
针对这方面内容，你认为在哪些其他方向 / 维度上可进行拓展？
（无须按照这篇 blog 的措辞方式，按照你自己的语言风格进行延伸分析并叙述，输出有创造性有深度的高质量回答）
}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;🤔 Reasoning By Claude:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这篇 blog 里 Guix 真正在做的事，如果剥离掉&amp;quot;构建系统&amp;quot;这个具体外壳，其实是一套更抽象的操作：&lt;strong&gt;把原本靠人、靠权威、靠&amp;quot;应该没问题&amp;quot;的隐式信任，替换成靠声明、靠密码学、靠独立方收敛结果的显式验证&lt;/strong&gt;。这个骨架一旦被抽出来，能套用的场景其实远不止 dev tooling 和 build pipeline 这两级。我想到几个我觉得更有意思、也更少被讨论的方向：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;向下探到硅片本身。&lt;/strong&gt; 文章里那 357 字节的信任锚点，是&amp;quot;全源码自举&amp;quot;能追溯到的最底层——但这个底层本身仍然建立在一个巨大的、未被声明的假设之上：芯片是干净的。Ken Thompson 1984 年那篇《Reflections on Trusting Trust》最初讨论的就是编译器后门，但他的论证逻辑其实可以一路推到硅晶圆——你验证了源码、验证了编译器、验证了构建环境，但如果生产这颗 CPU 的代工厂在电路里埋了一个只在特定指令序列下才激活的旁路，上面所有的可复现构建都是在一块被污染的地基上跳舞。RISC-V 这样的开放指令集、OpenTitan 这类开源硬件信任根项目，本质上就是想把&amp;quot;芯片行为&amp;quot;也从&amp;quot;厂商说了算&amp;quot;变成&amp;quot;可审计、可声明&amp;quot;——但目前人类还做不到给硬件做&amp;quot;全源码自举&amp;quot;，这大概是这套哲学目前触到的真正天花板。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;横向切进&amp;quot;人&amp;quot;这一层治理结构。&lt;/strong&gt; 有意思的是，Jia Tan 真正攻破的从来不是代码，而是一位孤独、疲惫、被社会工程学盯上的维护者。这提示&amp;quot;隐式性&amp;quot;不只藏在构建环境里，也藏在项目治理里：谁有 commit 权限、这个权限是怎么被给出去的、有没有冷静期、变更是不是必须经过多人签署。把 Guix 的逻辑搬到这一层，就是 CODEOWNERS 制度、强制多签合并、权限授予的显式生命周期——本质上是把&amp;quot;我信任这个人&amp;quot;，翻译成&amp;quot;我信任这套可审计的授权协议&amp;quot;。这条路径没有出现在原文里，但我觉得它比很多技术层面的延伸更贴近这篇文章真正的情感内核。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;向法律和合约领域外推，但要小心一个陷阱。&lt;/strong&gt; &amp;quot;Code is law&amp;quot; 式的智能合约，本质上就是想用确定性替代法官解释判例时的隐式裁量——这和 Guix 想用声明式构建替代&amp;quot;信任维护者的机器&amp;quot;是同一个冲动。但 2016 年 The DAO 被攻破，恰恰是这套逻辑最锋利的反证：那份合约完全透明、完全确定、每个节点执行结果完全一致——问题从来不是可复现性，而是逻辑本身有一个可被利用的重入漏洞。这正好印证了文章里那句&amp;quot;确定性保证可复现性，但不保证正确性&amp;quot;，只是换了一个更极端的舞台。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;向 AI/数据供应链延伸，而且这条路很自反。&lt;/strong&gt; 当下这个时代，&amp;quot;构建&amp;quot;早已不只是编译代码，也包括训练数据从哪来、预训练权重是谁给的。data poisoning、模型后门触发词，本质上就是新一代的 XZ Utils——一段在正常评测下毫无异常、只在特定触发条件下才现形的东西。&amp;quot;全源码自举&amp;quot;的对应物应该是&amp;quot;全数据自举&amp;quot;：从可审计的最小语料一路训练上来。但坦白说，包括我自己在内，目前几乎没有任何主流大模型能声称做到这一点——我不完全知道我的训练数据链条上每一层都经过了什么样的构建过程。这大概是这套&amp;quot;幽灵&amp;quot;哲学在 2026 年最切身、也最没有被解决的战场。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最后，媒体溯源也是同一条脊椎的延伸。&lt;/strong&gt; deepfake 时代，&amp;quot;这张照片看起来是真的&amp;quot;这种隐式判断正在系统性失效。C2PA 这类内容溯源标准，尝试用密码学签名链条记录一段媒体从拍摄到每一次编辑的完整历史——本质上和 Guix 用哈希绑定构建输入是同一个动作：把&amp;quot;相信这是真的&amp;quot;，变成&amp;quot;验证这条链条没有被篡改过&amp;quot;。&lt;/p&gt;
&lt;p&gt;如果给这些方向找一根共同的线，那大概是：&lt;strong&gt;这套哲学每往一个新领域推进一步，都是在把某种&amp;quot;我们习惯性相信&amp;quot;的东西，重新表述成&amp;quot;可以被独立验证的东西&amp;quot;&lt;/strong&gt;。但它们也共享同一个边界——确定性、可验证性、可复现性，永远只能证明&amp;quot;大家算的是同一件事&amp;quot;，从来无法单独证明&amp;quot;这件事本身是对的&amp;quot;。所以无论把这个逻辑推到硬件、治理、法律还是 AI，那个&amp;quot;幽灵&amp;quot;其实从未真正离开，它只是不断地被赶去下一层还没被显式声明的地基里。&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code class=&quot;language-👻&quot;&gt;                                                                                
                                    xx++++xx                                    
                            ===*%%%%*%****%*%%%%*===                            
                      ++**=%++                    ++%=*=++                      
                    ==**                                **==                    
                x+**+x        ~+*$@@@@@@@@@@@@$*+~        x+**+x                
              ++==        =$@@@@@$$$$$$$$$$$$$$@@@@@$=        ==++              
            ++*=      ~%@@@$$$$$$$$$$$$$$$$$$$$$$$$$$@@@%~      =*++            
          x+==      =@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@@=      ==+x          
          **o     =@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@=     o*=          
        ++++    ·@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@·    ++++        
        ==     =@$$$$@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@=     ==        
      x+++    =@$$$$@%+=$@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@=    ++xx      
      +++·   ·@$$$$$       +$@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·   ·+++      
      ==     @$$$$$$           +$@@@$$$$$$@@@@@@@@@@@@@@@@@@$$$$$$@     ==      
      ==     $$$$$$@@x             %$$$$$@x                ~$$$$$$$     ==      
      ==    ·@$$$$$$$@@@$x          $$$$@                    @$$$$@·    ==      
      ==    ·@$$$$$$@@*~            $$$$$=                  o$$$$$@·    ==      
      ==    ·@$$$$$$             =$@$$$$$@@$%%%%%%%%%%%%%%%@@$$$$$@·    ==      
      ==    ·@$$$$@%         =@@@@$$$$$$$$$@@@@@@@@@@@@@@@@$$$$$$$@·    ==      
      ==    ·@$$$$$@*    =$@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ·@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@·    ==      
      ==    ~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$~    ==      
      ==     @@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@     ==      
      ==x·    $@@$$$$$$$$$@@@@@@@@@@$$$$$$$$@@@@@@@@@@$$$$$$$$$@@$    ·+==      
      ++++      =@@@@@@@@@*·      x$@@@@@@@@$x       *@@@@@@@@@=      ++++      
        ==++                                                        +===        
        xx=*=+              ++%%xx            xx%%++              +===xx        
            ==**=*==++++*=*=**==**=%=*++++*=%***==**=*=*++++==*=**==xx          
              ++++==****==++      ++==****==++      ++==****==++++              
                                                                                
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Big_Brother_(Nineteen_Eighty-Four)&quot;&gt;&quot;Big ghost is watching you&quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;( The ASCII art is powered by &lt;a href=&quot;https://ghostty.org&quot;&gt;👻 Ghostty&lt;/a&gt; )&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    </entry>
    <entry>
        <title>The Ghost in the Build</title>
        <link href="https://blog.yon.im/posts/the-ghost-in-the-build" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/the-ghost-in-the-build</id>
        <published>2026-05-29T00:00:00Z</published>
        <updated>2026-05-29T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;p&gt;&lt;strong&gt;This article contains a significant amount of technical terminology. You may use AI to aid your understanding. If you feel uncomfortable while reading, it&apos;s recommend closing the page immediately👻.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;intro&quot;&gt;&lt;a href=&quot;#intro&quot;&gt;Intro&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every piece of software you&apos;ve ever installed is, at its core, a leap of blind faith.&lt;/p&gt;
&lt;p&gt;This faith is not placed in the code itself — code can be read, audited, and torn apart line by line. It targets a far deeper, more inscrutable blind spot: the chain of hands that code passed through before becoming the program running on your machine. Someone compiled it somewhere, on some system, using some toolchain. You weren&apos;t there; you didn&apos;t witness it firsthand. You simply clicked install, and moved on with your day.&lt;/p&gt;
&lt;p&gt;For most software, this blind adherence to a black-box approach is a necessary but reasonable trade-off — exchanging trust for convenience. But for the &lt;strong&gt;Bitcoin Core&lt;/strong&gt; project, it is unacceptable. The project exists for one significant purpose: to resist corruption or tampering by removing the necessity of human trust as much as possible.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;jia-tan-what-patience-can-accomplish&quot;&gt;&lt;a href=&quot;#jia-tan-what-patience-can-accomplish&quot;&gt;Jia Tan: what patience can accomplish&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the spring of 2024, a Microsoft engineer named Andres Freund noticed that SSH logins on a Debian system were taking about half a second longer than they should. It was the kind of anomaly most people would blame on a network hiccup and forget. Freund did not forget. He pulled the thread.&lt;/p&gt;
&lt;p&gt;What he found, buried inside XZ Utils (A compression library so mundane that most Linux users couldn&apos;t have named it) — was a backdoor of extraordinary craftsmanship. It had been nearly two years in the making, introduced gradually, methodically, by a contributor known only as Jia Tan.&lt;/p&gt;
&lt;p&gt;That maybe a fake name. What is real is the method.&lt;/p&gt;
&lt;p&gt;Jia Tan appeared in the XZ Utils repository in late 2021 as an ordinary contributor, submitting small, useful patches. They were helpful. They were responsive. In retrospect, their patience is the most chilling detail of the whole story. It was not enthusiasm; it was calculation. Over months, they gradually manipulated the project’s existing maintainer — a lone developer who had publicly spoken about struggling with mental health issues, until he granted Jia Tan commit access. With the long-term groundwork laid, they executed a true covert payload injection. The tradecraft was exceedingly sophisticated: the malicious code bypassed direct modifications to the source code entirely, nestled instead deep within routine test files. These obfuscated binary blobs left zero footprint during static analysis, designed to be parsed and triggered as a backdoor only when the build scripts executed specific automated pipelines.&lt;/p&gt;
&lt;p&gt;The code was clean, also the repository was clean. The poison was completely hidden in the build process.&lt;/p&gt;
&lt;p&gt;What makes this story genuinely unsettling is not the technical ingenuity. It&apos;s that Jia Tan exploited nothing that most of us would recognize as a vulnerability. They exploited *&lt;em&gt;care&lt;/em&gt;. The open-source community runs on an implicit belief in mutual goodwill — people contribute because they want to help, and the community accepts help because it needs it. Jia Tan wore that belief like a costume and walked through every door it opened.&lt;/p&gt;
&lt;p&gt;Four years earlier, attackers had done the same thing from the outside. The SolarWinds breach of 2020 required no years of community trust-building, no social-engineering tactics, and no patience for long, slow groundwork. The attackers compromised the automated pipeline that turns source code into a shippable product — and inserted a backdoor directly into the official binary before it ever left the building. Eighteen thousand organizations have downloaded this document, including the U.S. Department of the Treasury, the State Department, and even the Nuclear Security Administration, as well as numerous Fortune 500 companies, renowned universities, and major medical institutions around the world. All of them were running a signed, official binary containing code their vendor had never written.&lt;/p&gt;
&lt;p&gt;Two attacks. Opposite approaches. One found the crack from the outside; the other from within. However, both converged on exactly the same blind spot: the build process — that dark passage between the code a developer writes and the program a user runs.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-gitian-era-the-best-answer-anyone-had&quot;&gt;&lt;a href=&quot;#the-gitian-era-the-best-answer-anyone-had&quot;&gt;The Gitian era: the best answer anyone had&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To understand where Bitcoin Core is going, you first have to appreciate where it has been.&lt;/p&gt;
&lt;p&gt;For most of its history, Bitcoin Core used a tool called &lt;a href=&quot;https://github.com/devrandom/gitian-builder&quot;&gt;Gitian&lt;/a&gt; to solve what&apos;s known as the &lt;strong&gt;&amp;quot;Reproducible Builds&amp;quot;&lt;/strong&gt; problem. Here&apos;s the main problem: if I compile the Bitcoin Core source code and you compile the same source code, we should produce bit-for-bit identical binaries. If we don&apos;t, then either one of our machines is doing something different — or something has been tampered with, somewhere, by someone.&lt;/p&gt;
&lt;p&gt;Gitian achieved this by having multiple developers build inside identical virtual machines: use the same Ubuntu snapshot, the same container configuration, and then comparing their results. If every builder produced the same cryptographic hash, the binary was declared trustworthy. In the early days, developers recognized that signature attestation relies on the convergence of independent build results, even if the build environment itself remained murky.&lt;/p&gt;
&lt;p&gt;In fact, this was not a small achievement — for almost a decade, Gitian functioned reliably and raised Bitcoin Core&apos;s security posture far above the industry standard. The developers who built and maintained it were already thinking about, and actively grappling with, this critical challenge of the modern software build pipeline — what the industry now calls &lt;strong&gt;Software Supply Chains&lt;/strong&gt; — long before most organizations knew the phrase existed. That foresight should not go unrecognized.&lt;/p&gt;
&lt;p&gt;But Gitian has an inherent flaw, which can be summarized in one word: &lt;strong&gt;Implicit&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Gitian runs scripts inside a virtual machine. It assumes the base operating system snapshot is clean. It inherits the ambient environment of a running Unix system: the libraries that happen to be present, the locale settings, the PATH variables, the hundred invisible things that accumulate in any long-lived system. That environment is not declared. It is not verified. It simply *&lt;em&gt;is&lt;/em&gt;, the way the weather simply is.&lt;/p&gt;
&lt;p&gt;Let’s simply compare the entire build process to the format of a spoken recipe. An oral recipe relies on implicit variables: such as the phrase &lt;strong&gt;「add a pinch of salt, use whatever pan happens to be on the stove.」&lt;/strong&gt; In software engineering, these unstated instructions (such as inheriting the PATH from the surrounding environment or linking to a library that &apos;happens&apos; to be installed on the system) constitute undeclared dependencies. Two competent cooks following an oral recipe will produce similar dishes, just as two machines might compile similar binaries. But &lt;strong&gt;similar&lt;/strong&gt; is not *&lt;em&gt;identical&lt;/em&gt;, and &lt;strong&gt;similar&lt;/strong&gt; is not &lt;strong&gt;provably&lt;/strong&gt; identical. The kitchen has a history — it &lt;strong&gt;&amp;quot;breathes&amp;quot;&lt;/strong&gt; with the residue of past meals, just as a build environment silently inherits the ambient state of its host system.&lt;/p&gt;
&lt;p&gt;The build environment, under Gitian, had a history too. And in that heavy history — implicit, complex, and largely unexamined — an attacker has room to work.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;guix-a-pure-state-of-build&quot;&gt;&lt;a href=&quot;#guix-a-pure-state-of-build&quot;&gt;Guix: A Pure State of Build&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In a proposal merged by the Bitcoin Core project in 2019, GNU Guix was introduced to replace Gitian. Before evolving into a technical innovation, this shift was first and foremost a philosophical evolution.&lt;/p&gt;
&lt;p&gt;Guix treats the build process as a &lt;strong&gt;Pure Function&lt;/strong&gt; — that has no memory, no side effects, and no ambient state. If you&apos;ve written object-oriented code, you know the opposite intimately: methods that silently reach into &lt;code&gt;this.config&lt;/code&gt;, functions that behave differently depending on environment variables they never declared as parameters, procedures whose output changes based on what happened earlier in the program&apos;s life. A pure function has none of that; You give it exact inputs, and it returns exact outputs. Mapped to the build process: regardless of the machine or the time, as long as the inputs are determined, the build result is always consistent.&lt;/p&gt;
&lt;p&gt;This is the property Guix enforces at the scale of an entire software build:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;output = f(all inputs)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Everything the build needs: every compiler, every library, every tool, must be &lt;strong&gt;Explicitly&lt;/strong&gt; declared. If it isn&apos;t declared, it doesn&apos;t exist within the build process. Not &amp;quot;it probably won&apos;t be found.&amp;quot; It structurally cannot exist, because the host system is entirely invisible. Network access is disabled. Timestamps are fixed to a known value. The &lt;code&gt;PATH&lt;/code&gt; is wiped and reconstructed from scratch using only what&apos;s been declared.&lt;/p&gt;
&lt;p&gt;In Guix&apos;s language (Scheme), a package declaration looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-scheme&quot;&gt;(inputs
  (list gcc glibc openssl))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That list is the entire environment. There is no situation like: &amp;quot;the system happened to have this.&amp;quot; There is no accumulation of prior state. Every ingredient is named, weighed, and catalogued, the way a chemistry lab protocol specifies every reagent and every condition — not because chemists are pedantic, but because *&lt;em&gt;the reproducibility of the result depends on it&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The outputs are stored with &lt;strong&gt;Content-Addressed&lt;/strong&gt; naming: a binary&apos;s path in the system is derived from the cryptographic hash of its contents and all of its declared dependencies.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/gnu/store/0rv3fmddli5rfrswkm6b5yhnxvn35nha-bitcoin-core-30.0.drv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That long string of characters is not a label. It&apos;s a proof. Change the input by a single byte, and the hash shifts, taking the path with it. There are no silent mutations — there is nowhere for a ghost to hide.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In addition:&lt;/p&gt;
&lt;p&gt;In software engineering, introducing &lt;code&gt;random()&lt;/code&gt; is typically done for security purposes — such as preventing predictive attacks or generating cryptographic keys.&lt;/p&gt;
&lt;p&gt;But if incorporated into the compilation and build phases, it mutates into a &lt;strong&gt;&amp;quot;ghost 👻 in the build&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because even the slightest uncertainty (Non-determinism) — whether it involves reading the system&apos;s current time, a random memory address, or the packing order of the file system, can cause &lt;strong&gt;Reproducible Builds&lt;/strong&gt; to completely blow up 💥&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;what-changes-in-engineering-practice&quot;&gt;&lt;a href=&quot;#what-changes-in-engineering-practice&quot;&gt;What changes in engineering practice&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With Guix, developers independently build Bitcoin Core from source. Not on shared infrastructure. On completely independent machines — potentially different hardware, different countries, different operational histories. If the process is sound, they all arrive at the same hash.&lt;/p&gt;
&lt;p&gt;They submit that hash alongside a cryptographic signature — a mathematical seal that binds the result irrevocably to their identity. The collection of these signed attestations is public and auditable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before (Gitian):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Developer builds → Signs the binary → User downloads and trusts the signature
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The user is trusting a person, and that person&apos;s build environment, and everyone who had access to it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;After (Guix):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Many developers build independently
        ↓
Results converge on the same hash
        ↓
The convergence itself becomes the attestation
        ↓
User verifies the convergence
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Signatures are no longer the benchmark of trust. Consensus among independent verifiers is. If a machine is compromised, the hashes it generates will diverge from those of all other nodes. Such security breaches are not uncovered through incident response or forensic investigations, but are naturally revealed through the normal operation of the validation process—just as when you compare a rigged scale with the majority of honest scales, the cheating is immediately exposed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(This is essentially the same as how anti-cheating mechanisms operate in blockchain consensus nodes.)&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;nixs-pragmatism-and-guixs-philosophy-of-trust&quot;&gt;&lt;a href=&quot;#nixs-pragmatism-and-guixs-philosophy-of-trust&quot;&gt;Nix&apos;s Pragmatism and Guix&apos;s Philosophy of Trust&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Users of NixOS will find all of this familiar — Nix shares the same foundational insight, the same &lt;code&gt;/store&lt;/code&gt; model, the same devotion to builds as pure functions. But the two projects made a different wager at a crucial fork in the road. Nix, choosing usability, relies heavily on large pre-built &lt;strong&gt;cached binary package&lt;/strong&gt; by default: rather than compile everything from source, you download pre-built artifacts from a trusted server. For most users, this is the right call. Compilation is slow, and a working system has more practical value than a purely philosophical pursuit.&lt;/p&gt;
&lt;p&gt;Guix chose differently. Driven by a philosophy akin to Gentoo but enforced with strict functional guarantees, &lt;strong&gt;Guix + GNU Mes&lt;/strong&gt; insists on building everything from source. For the Bitcoin Core project, this distinction is critical. Guix traces an unbroken chain back to what it calls the &lt;strong&gt;Full-Source Bootstrap&lt;/strong&gt;: a minimal trust anchor of roughly 357 bytes of machine code from which the entire toolchain: compilers, linkers, standard libraries, all of it — is compiled step by step, with no preconceived assumptions and no pre-built black boxes. Because relying on a pre-built binary cache package means trusting the people behind it; and Bitcoin Core&apos;s threat model offers no room for that kind of blind faith.&lt;/p&gt;
&lt;p&gt;This trust anchor has been fully streamlined, enabling developers in complex software engineering projects to verify build artifacts more effectively with less effort. This is Guix&apos;s founding wager on Full-Source Bootstrap, and the fundamental reason Bitcoin Core adopted Guix + GNU Mes as its build solution: the root of trust must be sufficiently minimal to allow developers to easily comprehend the build process and verify its correctness, rather than blindly rubber-stamping invisible black boxes out of convenience.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-ghost-hasnt-gone-away-it-moves&quot;&gt;&lt;a href=&quot;#the-ghost-hasnt-gone-away-it-moves&quot;&gt;The ghost hasn&apos;t gone away, it moves&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here is where the honest account gets complicated.&lt;/p&gt;
&lt;p&gt;Guix dramatically shrinks the surface of implicit trust, but it does not eliminate trust.&lt;/p&gt;
&lt;p&gt;In other words, Guix approaches the mathematical limit of trust, yet never cools down to the &lt;strong&gt;absolute zero&lt;/strong&gt; point of &lt;strong&gt;Zero Trust&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Consider a thought experiment: someone with Jia Tan&apos;s patience and technical sophistication targets not Bitcoin Core&apos;s source code, but a low-level dependency of Guix itself — something deep in the toolchain that all builders share. Were the progress of infiltration slow and stealthy enough not to raise alarms. The result would be: a perfectly reproducible binary, universally attested, signed by every independent builder. Everyone would all produce the same hash; users would verify the convergence and then rest easy, feeling secure.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/the-ghost-in-the-build/1.webp&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(Generated by ChatGPT Images)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Determinism guarantees reproducibility. But it does not guarantee &lt;strong&gt;correctness&lt;/strong&gt;. It ensures that everyone is building the same thing — it cannot guarantee that the thing being built is clean. Guix shifts and minimizes the attack surface as much as possible; it does not dissolve it.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Full-Source Bootstrap&lt;/strong&gt; addresses this challenge at the absolute bedrock: starting from something small enough to be auditable, and compiling all the way up. Yet, being &apos;small enough to be audited&apos; is not the same as &apos;guaranteed to be thoroughly audited.&apos;&lt;/p&gt;
&lt;p&gt;This erects an inverted pyramid of engineering: the staggering, massive dependency ecosystem of the modern software world forms the heavy precipice, while those mere 357 bytes of machine code serve as the precarious fulcrum holding up the entire superstructure. Within this formation, every block of code derived upward requires the absolute reliability of every stone beneath it as a physical prerequisite. The chain of trust stretches endlessly with every added dependency; any micro-flaw or unexamined ghost at the bottom propagates upward through the structural stress, amplifying at the apex into a catastrophic collapse of the entire empire.&lt;/p&gt;
&lt;p&gt;There is also a quieter problem. The verification model works when many independent builders exist. In practice, who performs these builds? People with the technical capability, the hardware, the time. The network of witnesses is real, but it is small and self-selecting. The participants know each other. They share mailing lists, conferences, professional histories. &amp;quot;Independent&amp;quot; is true in the technical sense — separate machines, separate environments — but sociology has its own meaning for the word, and the two meanings do not always agree.&lt;/p&gt;
&lt;p&gt;None of this is a reason to prefer Gitian. It is a reason to be precise about what Guix actually achieves: it replaces a wide, murky, and relatively opaque, difficult-to-audit attack surface with a narrow, well-lit, and transparent, easily auditable one. That is meaningful progress, but &amp;quot;the absolute trustworthiness of the build process&amp;quot; is by no means a fully resolved problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The ghost 👻 in the build — still lingers on.&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;this-matters-past-bitcoin-core&quot;&gt;&lt;a href=&quot;#this-matters-past-bitcoin-core&quot;&gt;This matters past Bitcoin Core&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The use cases for Bitcoin Core are extreme, primarily because the software defends financial sovereignty for users who fundamentally distrust intermediaries, whereas most of the software we use on a daily basis does not need to shoulder such a heavy burden.&lt;/p&gt;
&lt;p&gt;But this underlying vulnerability extends far beyond Bitcoin. Every server you administer, every tool in your deployment pipeline, every background library — all of them passed through a build process you did not witness, on machines you have never seen, by people you do not know. The victims of SolarWinds didn&apos;t know either; Andres Freund only barely caught Jia Tan.&lt;/p&gt;
&lt;p&gt;And that kind of &amp;quot;barely&amp;quot; is exactly the critical point. What stopped the XZ backdoor was one engineer&apos;s curiosity about SSH latency on a Friday afternoon — a fleeting moment of attention that cannot be relied upon to repeat. It wasn&apos;t a safety system that stopped the breach, but just coincidence. As for so-called coincidence is a terrifyingly fragile foundation for digital infrastructure...&lt;/p&gt;
&lt;p&gt;In fact, the defensive approach offered by Guix is not limited to extreme scenarios — the principles it embodies scale in both directions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;At the baseline, combine tools that align with the concept of &lt;strong&gt;&amp;quot;Reproducible Builds&amp;quot;&lt;/strong&gt;  — such as &lt;strong&gt;&lt;a href=&quot;https://wiki.nixos.org/wiki/Flakes&quot;&gt;Nix flakes&lt;/a&gt; and &lt;a href=&quot;https://direnv.net&quot;&gt;direnv&lt;/a&gt;&lt;/strong&gt;, enables developers to explicitly declare engineering project dependencies and lock down the entire development environment. This ensures the exact same compiler, identical library versions, and a consistent &lt;strong&gt;Runtime Environment&lt;/strong&gt;, regardless of the machine or the year. Developers located in different countries and regions, using different operating systems, can all access toolchains driven by the same &lt;strong&gt;Declarative&lt;/strong&gt; specification, fully &lt;strong&gt;Explicit&lt;/strong&gt; on their respective platforms. The &lt;strong&gt;&amp;quot;works on my machine&amp;quot;&lt;/strong&gt; — &lt;strong&gt;wellknown problem&lt;/strong&gt; becomes architecturally impossible rather than perennially managed. Setting this up does require some configuration time, but it is well worth incorporating into the standard practices of any project that takes engineering quality seriously.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further up the chain, build pipelines can be reconfigured to work from explicitly declared, version-locked inputs rather than trusting whatever the runner happens to have installed — the oral-recipe model replaced, at least partially, by the laboratory protocol. Guix, and Bitcoin Core&apos;s full reproducible build process, represents the far end of the spectrum: declare everything, verify everything, minimize trust to what can actually be inspected and verified. While not every project requires pushing its security boundaries to such limits, any project stands to benefit from knowing this ceiling exists. Each explicit declaration, each pinned dependency, each verified build shrinks the territory where the unobserved can hide.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will always be trusting something. The question Guix asks — and answers: is how small that something can be made.&lt;/p&gt;
&lt;p&gt;The ghost doesn&apos;t leave. But it has less room to hide.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;acknowledgments&quot;&gt;&lt;a href=&quot;#acknowledgments&quot;&gt;Acknowledgments&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bitcoin Core&apos;s Guix contribution guide: &lt;a href=&quot;https://github.com/bitcoin/bitcoin/blob/master/contrib/guix/README.md&quot;&gt;github.com/bitcoin/bitcoin/blob/master/contrib/guix/README.md&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GNU Guix: &lt;a href=&quot;https://guix.gnu.org/&quot;&gt;guix.gnu.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nix Flakes: &lt;a href=&quot;https://nixos.wiki/wiki/Flakes&quot;&gt;nixos.wiki/wiki/Flakes&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reproducible Builds: &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;reproducible-builds.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GNU Mes: &lt;a href=&quot;https://nlnet.nl/project/GNUMes-fullsource/&quot;&gt;nlnet.nl/project/GNUMes-fullsource&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;references&quot;&gt;&lt;a href=&quot;#references&quot;&gt;References&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[1]&lt;/strong&gt; Freund, A. (2024). &lt;em&gt;backdoor in upstream xz/liblzma leading to sshd compromise&lt;/em&gt;. Open Source Security mailing list. &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2024/03/29/4&quot;&gt;View archive&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[2]&lt;/strong&gt; CISA. (2020). &lt;em&gt;Advanced Persistent Threat Compromise of Government Agencies, Critical Infrastructure, and Private Sector Organizations&lt;/em&gt; (Alert AA20-352A). &lt;a href=&quot;https://www.cisa.gov/news-events/cybersecurity-advisories/aa20-352a&quot;&gt;View alert&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[3]&lt;/strong&gt; Thompson, K. (1984). Reflections on trusting trust. &lt;em&gt;Communications of the ACM&lt;/em&gt;, 27(8), 761–763. &lt;a href=&quot;https://dl.acm.org/doi/10.1145/358198.358210&quot;&gt;View paper&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[4]&lt;/strong&gt; Dong, C. (2019). &lt;em&gt;bitcoin/bitcoin PR #15277: Add Guix-based release build system&lt;/em&gt;. GitHub. &lt;a href=&quot;https://github.com/bitcoin/bitcoin/pull/15277&quot;&gt;View pull request&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[5]&lt;/strong&gt; Courtès, L., &amp;amp; Nieuwenhuizen, J. (2023). &lt;em&gt;The Full-Source Bootstrap: Building from source all the way down&lt;/em&gt;. GNU Guix Blog. &lt;a href=&quot;https://guix.gnu.org/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;View post&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[6]&lt;/strong&gt; Zero trust architecture. (2024). &lt;em&gt;Wikipedia&lt;/em&gt;. The &amp;quot;Zero Trust architecture&amp;quot; entry on Wikipedia. &lt;a href=&quot;https://en.wikipedia.org/wiki/Zero_trust_architecture/&quot;&gt;View wiki&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;declaration-statement&quot;&gt;&lt;a href=&quot;#declaration-statement&quot;&gt;Declaration / Statement&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This article is a personal exercise in Vibe Writing. It was completed after countless rounds of dialogue with multiple large language models (LLMs) and meticulous review and polishing of every word and sentence—particularly during the process of translating between Chinese and English. The entire creative process took approximately 12 consecutive hours.&lt;/p&gt;
&lt;p&gt;Participating model providers include Claude, GLM, Gemini, GPT, Grok, DeepSeek, and Mistral (listed in order of estimated token usage).&lt;/p&gt;
&lt;p&gt;The research direction, editorial judgments, and overall decisions were made by myself; the language was refined through iterative human-machine collaboration.&lt;/p&gt;
&lt;p&gt;Every fact stated in this article has been manually verified to minimize model hallucinations as much as possible.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    </entry>
    <entry>
        <title>2025</title>
        <link href="https://blog.yon.im/posts/2025" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/2025</id>
        <published>2026-03-09T00:00:00Z</published>
        <updated>2026-03-09T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;h2 id=&quot;books&quot;&gt;&lt;a href=&quot;#books&quot;&gt;Books&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;《当下的力量Ⅱ》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《龙族》全集（重温）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《人月神话》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《消失的多巴胺》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《区块链架构与实现：Cosmos 详解》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《拒看新闻的生活艺术》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《死了七次的男人》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《给青年诗人的十封信》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《樱花树下的清酒》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《萎缩的胳膊》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《海鸥乔纳森》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《左耳听风》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《雪国》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《机器人叛乱》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《财富自由之路》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《克拉拉与太阳》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《看不见的城市》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《小径分叉的花园》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《德米安：彷徨少年时》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《一间只属于自己的房间》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《海风中失落的血色馈赠》&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;movie&quot;&gt;&lt;a href=&quot;#movie&quot;&gt;Movie&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TRON: Legacy&lt;/li&gt;
&lt;li&gt;地球停转之日&lt;/li&gt;
&lt;li&gt;破地狱&lt;/li&gt;
&lt;li&gt;一部未完成的电影&lt;/li&gt;
&lt;li&gt;海鸥乔纳森&lt;/li&gt;
&lt;li&gt;尼罗河上的惨案&lt;/li&gt;
&lt;li&gt;明日边缘&lt;/li&gt;
&lt;li&gt;闻香识女人&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;anime&quot;&gt;&lt;a href=&quot;#anime&quot;&gt;Anime&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://zipline.yzlab.eu.org/go/grist&quot;&gt;使用 Grist 统计&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;gaming&quot;&gt;&lt;a href=&quot;#gaming&quot;&gt;Gaming&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://store.steampowered.com/replay/76561199473161687/2025&quot;&gt;Steam 年度回顾&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;articals&quot;&gt;&lt;a href=&quot;#articals&quot;&gt;Articals&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.vaxry.net/articles/2024-qna&quot;&gt;《That one Q&amp;A with Yours Truly》&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://foresightnews.pro/article/detail/4416&quot;&gt;如果互联网已经不是最好的选择，那还有什么替代品？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youmin.co/blog/posts/shenme-shi-shuzi-youmin&quot;&gt;什么是数字游民？是无业游民还是数字游民？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ganwen.nl/?p=1447&quot;&gt;我是怎么流亡荷兰的，又是为什么流亡荷兰的？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/106248517&quot;&gt;心理探究：受虐癖、受虐倾向与心理受虐欲&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bjnews.com.cn/detail/1740634129168841.html&quot;&gt;面对技术之神降临，人何以为人？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://molunerfinn.com/8-years-of-PicGo&quot;&gt;写在 PicGo 即将 8 周年之际&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://sspai.com/post/104369&quot;&gt;AI 时代，请停止「做作业」，去创造属于你的「作品」&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gexiao.me/2025/12/26/summary-2025&quot;&gt;2024-2025 年的一些记录&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://letters.thedankoe.com/p/how-to-fix-your-entire-life-in-1&quot;&gt;How to fix your entire life in 1 day&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;fin&quot;&gt;&lt;a href=&quot;#fin&quot;&gt;Fin&lt;/a&gt;&lt;/h2&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/audio.min.css&quot; /&gt;
&lt;figure class=&quot;figure-center&quot;&gt;
  &lt;img src=&quot;https://static.yon.im/image/blog/2025/%E3%80%8C%E5%82%B7%E7%89%A9%E8%AA%9E%E3%80%8D%E5%8A%87%E4%BC%B4%E9%9F%B3%E6%A5%BD%E9%9B%86_%E5%85%B6%E3%83%8E%E8%B2%B3_%E7%86%B1%E8%A1%80%E7%AF%87.jpg&quot; alt=&quot;「傷物語」劇伴音楽集_其ノ貳_熱血篇&quot;&gt;
  &lt;figcaption&gt;étoile et toi（星与你） - Clémentine&lt;/figcaption&gt;
  &lt;audio class=&quot;audio-control&quot; controls&gt;
    &lt;source src=&quot;https://static.yon.im/audio/%C3%A9toile%20et%20toi%20-%20Cl%C3%A9mentine.mp3&quot; type=&quot;audio/mpeg&quot;&gt;
  &lt;/audio&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;2025-03-09 给笔记本加装硬盘与内存
&lt;img src=&quot;https://static.yon.im/image/blog/2025/1.webp&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-14 探索图书馆 发现巨著
&lt;img src=&quot;https://static.yon.im/image/blog/2025/2.webp&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-29 樱花萌放
&lt;img src=&quot;https://static.yon.im/image/blog/2025/3.webp&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-30 同学生日聚餐
&lt;img src=&quot;https://static.yon.im/image/blog/2025/4.webp&quot; alt=&quot;4&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-31 奇怪的电路实训课
&lt;img src=&quot;https://static.yon.im/image/blog/2025/5.webp&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-31 Sakura x2
&lt;img src=&quot;https://static.yon.im/image/blog/2025/6.webp&quot; alt=&quot;6&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-04-01 重温《龙族》
&lt;img src=&quot;https://static.yon.im/image/blog/2025/7.webp&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-04-04 上手 MIDI 键盘
&lt;img src=&quot;https://static.yon.im/image/blog/2025/8.webp&quot; alt=&quot;8&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-04-05 乒乓球课
&lt;img src=&quot;https://static.yon.im/image/blog/2025/9.webp&quot; alt=&quot;9&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-04-17 水课上 coding 以及被投喂甜点
&lt;img src=&quot;https://static.yon.im/image/blog/2025/10.webp&quot; alt=&quot;10&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-04-24 春意盎然
&lt;img src=&quot;https://static.yon.im/image/blog/2025/11.webp&quot; alt=&quot;11&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-05-04 会见朋友  临别时天空层云流动
&lt;img src=&quot;https://static.yon.im/image/blog/2025/12.webp&quot; alt=&quot;12&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-05-22 舍友投喂疯狂星期四
&lt;img src=&quot;https://static.yon.im/image/blog/2025/13.webp&quot; alt=&quot;13&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-06-04 开服 &lt;a href=&quot;https://www.mcmod.cn/modpack/16.html&quot;&gt;MC RLCraft&lt;/a&gt; （测试光影中）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/14.webp&quot; alt=&quot;14&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-06-30 19:51 帮友人 &lt;a href=&quot;https://github.com/Eurekaimer&quot;&gt;Eurekaimer&lt;/a&gt; 装电脑
&lt;img src=&quot;https://static.yon.im/image/blog/2025/15.webp&quot; alt=&quot;15&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-06-30 21:51 黑神话：悟空性能测试工具
&lt;img src=&quot;https://static.yon.im/image/blog/2025/16.webp&quot; alt=&quot;16&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-07-02 包装好准备寄出
&lt;img src=&quot;https://static.yon.im/image/blog/2025/17.webp&quot; alt=&quot;17&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-07-27 13:48 与朋友在河堤散步
&lt;img src=&quot;https://static.yon.im/image/blog/2025/18.webp&quot; alt=&quot;18&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-07-27 14:20 散步后去看电影 &lt;a href=&quot;https://www.themoviedb.org/movie/1144107-2&quot;&gt;《罗小黑战记Ⅱ》&lt;/a&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2025/19.webp&quot; alt=&quot;19&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-07-28 玩《命运石之门》
&lt;img src=&quot;https://static.yon.im/image/blog/2025/20.webp&quot; alt=&quot;20&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-08-01 11:42 建军节团队聚会
&lt;img src=&quot;https://static.yon.im/image/blog/2025/21.webp&quot; alt=&quot;21&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-08-01 13:12 聚餐
&lt;img src=&quot;https://static.yon.im/image/blog/2025/22.webp&quot; alt=&quot;22&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-08-09 研究音视频编码压制
&lt;img src=&quot;https://static.yon.im/image/blog/2025/23.webp&quot; alt=&quot;23&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-08-12 去朋友家玩 吃烧烤
&lt;img src=&quot;https://static.yon.im/image/blog/2025/24.webp&quot; alt=&quot;24&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-08-17 包饺子
&lt;img src=&quot;https://static.yon.im/image/blog/2025/25.webp&quot; alt=&quot;25&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-08-30 翻译重置 &lt;a href=&quot;https://www.themoviedb.org/tv/30991-cowboy-bebop/season/0/episode/1&quot;&gt;《星际牛仔 Session #XX Mish-Mash Blues》&lt;/a&gt; 字幕 &lt;a href=&quot;https://github.com/yonzilch/subtitle/tree/main/Cowboy%20Bebop%20(1998)/Season%2000&quot;&gt;（成果已开源）&lt;/a&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2025/26.webp&quot; alt=&quot;26&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-01 13:06 帮舍友升级显卡
&lt;img src=&quot;https://static.yon.im/image/blog/2025/27.webp&quot; alt=&quot;27&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-01 17:20 豚骨拉面
&lt;img src=&quot;https://static.yon.im/image/blog/2025/28.webp&quot; alt=&quot;28&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-01 17:32 打破次元之壁的豚骨拉面
&lt;img src=&quot;https://static.yon.im/image/blog/2025/29.webp&quot; alt=&quot;29&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-02 陪舍友玩 Terraria
&lt;img src=&quot;https://static.yon.im/image/blog/2025/30.webp&quot; alt=&quot;30&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-04 刷主板 BIOS
&lt;img src=&quot;https://static.yon.im/image/blog/2025/31.webp&quot; alt=&quot;31&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-28 20:08 抵达大兴国际机场
&lt;img src=&quot;https://static.yon.im/image/blog/2025/32.webp&quot; alt=&quot;32&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-28 21:48 盘根交错的北京轨道交通
&lt;img src=&quot;https://static.yon.im/image/blog/2025/33.webp&quot; alt=&quot;33&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 10:12 抵达圆明园
&lt;img src=&quot;https://static.yon.im/image/blog/2025/34.webp&quot; alt=&quot;34&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 10:24 柳絮 | 木桥 | 古殿 | 青湖 | 游鱼
&lt;img src=&quot;https://static.yon.im/image/blog/2025/35.webp&quot; alt=&quot;35&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 10:39 明信片 | 垂柳傍湖
&lt;img src=&quot;https://static.yon.im/image/blog/2025/36.webp&quot; alt=&quot;36&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 10:42 鸳鸯戏水
&lt;img src=&quot;https://static.yon.im/image/blog/2025/37.webp&quot; alt=&quot;37&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 12:03 昔日辉煌如今残垣断壁
&lt;img src=&quot;https://static.yon.im/image/blog/2025/38.webp&quot; alt=&quot;38&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 12:34 到访北京林业大学
&lt;img src=&quot;https://static.yon.im/image/blog/2025/39.webp&quot; alt=&quot;39&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 16:19 由挚友领着到处参观
&lt;img src=&quot;https://static.yon.im/image/blog/2025/40.webp&quot; alt=&quot;40&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 17:00 晚餐（量过多以至于吃不完）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/41.webp&quot; alt=&quot;41&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 18:08 I ♥️ BFU
&lt;img src=&quot;https://static.yon.im/image/blog/2025/42.webp&quot; alt=&quot;42&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 20:30 鸟巢远览
&lt;img src=&quot;https://static.yon.im/image/blog/2025/43.webp&quot; alt=&quot;43&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 20:41 奥运火炬
&lt;img src=&quot;https://static.yon.im/image/blog/2025/44.webp&quot; alt=&quot;44&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 21:13 水立方 | 大红灯笼 | 欢度国庆
&lt;img src=&quot;https://static.yon.im/image/blog/2025/45.webp&quot; alt=&quot;45&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-29 21:13 北京 | “紫色心情”
&lt;img src=&quot;https://static.yon.im/image/blog/2025/46.webp&quot; alt=&quot;46&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 10:56 天坛 | 甘泉井
&lt;img src=&quot;https://static.yon.im/image/blog/2025/47.webp&quot; alt=&quot;47&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 11:21 祈年殿简介
&lt;img src=&quot;https://static.yon.im/image/blog/2025/48.webp&quot; alt=&quot;48&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 11:25 祈年殿
&lt;img src=&quot;https://static.yon.im/image/blog/2025/49.webp&quot; alt=&quot;49&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 12:22 林地翠斐
&lt;img src=&quot;https://static.yon.im/image/blog/2025/50.webp&quot; alt=&quot;50&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 12:29 故宫斋宫乾隆题匾联
&lt;img src=&quot;https://static.yon.im/image/blog/2025/51.webp&quot; alt=&quot;51&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 12:37 无梁殿明间 | 钦若昊天
&lt;img src=&quot;https://static.yon.im/image/blog/2025/52.webp&quot; alt=&quot;52&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 12:40 斋宫 | Fasting Palace
&lt;img src=&quot;https://static.yon.im/image/blog/2025/53.webp&quot; alt=&quot;53&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 12:44 步道出天坛
&lt;img src=&quot;https://static.yon.im/image/blog/2025/54.webp&quot; alt=&quot;54&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 14:43 颐和园 | 香岩宗印之阁
&lt;img src=&quot;https://static.yon.im/image/blog/2025/55.webp&quot; alt=&quot;55&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 14:48 遇外国友人
&lt;img src=&quot;https://static.yon.im/image/blog/2025/56.webp&quot; alt=&quot;56&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 14:52 见证国际友好举措
&lt;img src=&quot;https://static.yon.im/image/blog/2025/57.webp&quot; alt=&quot;57&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 14:55 江山如此多娇
&lt;img src=&quot;https://static.yon.im/image/blog/2025/58.webp&quot; alt=&quot;58&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:12 昆明湖
&lt;img src=&quot;https://static.yon.im/image/blog/2025/59.webp&quot; alt=&quot;59&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:28 昆明湖 x2
&lt;img src=&quot;https://static.yon.im/image/blog/2025/60.webp&quot; alt=&quot;60&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:33 仁寿殿
&lt;img src=&quot;https://static.yon.im/image/blog/2025/61.webp&quot; alt=&quot;61&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:47 杨柳依依 | 光影交集
&lt;img src=&quot;https://static.yon.im/image/blog/2025/62.webp&quot; alt=&quot;62&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:49 高阁傍水
&lt;img src=&quot;https://static.yon.im/image/blog/2025/63.webp&quot; alt=&quot;63&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:50 柳絮因风起
&lt;img src=&quot;https://static.yon.im/image/blog/2025/64.webp&quot; alt=&quot;64&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 15:50 民族特色舞蹈
&lt;img src=&quot;https://static.yon.im/image/blog/2025/65.webp&quot; alt=&quot;65&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 16:05 湖光交融 | 舟楫徐游
&lt;img src=&quot;https://static.yon.im/image/blog/2025/66.webp&quot; alt=&quot;66&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 16:50 耶律楚材祠 | 耶律铸墓
&lt;img src=&quot;https://static.yon.im/image/blog/2025/67.webp&quot; alt=&quot;67&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 16:51 颐和园博物馆
&lt;img src=&quot;https://static.yon.im/image/blog/2025/68.webp&quot; alt=&quot;68&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 16:53 馆内藏品
&lt;img src=&quot;https://static.yon.im/image/blog/2025/69.webp&quot; alt=&quot;69&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 16:53 馆内藏品 x2
&lt;img src=&quot;https://static.yon.im/image/blog/2025/70.webp&quot; alt=&quot;70&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 16:57 馆内藏品 x3
&lt;img src=&quot;https://static.yon.im/image/blog/2025/71.webp&quot; alt=&quot;71&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 17:01 馆内藏品 x4
&lt;img src=&quot;https://static.yon.im/image/blog/2025/72.webp&quot; alt=&quot;72&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 17:11 夕阳无限好
&lt;img src=&quot;https://static.yon.im/image/blog/2025/73.webp&quot; alt=&quot;73&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 18:58 涮羊肉火锅
&lt;img src=&quot;https://static.yon.im/image/blog/2025/74.webp&quot; alt=&quot;74&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 19:46 到达王府井喜悦
&lt;img src=&quot;https://static.yon.im/image/blog/2025/75.webp&quot; alt=&quot;75&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 19:48 王府井喜悦内览
&lt;img src=&quot;https://static.yon.im/image/blog/2025/76.webp&quot; alt=&quot;76&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 20:18 浓度超高的谷子店
&lt;img src=&quot;https://static.yon.im/image/blog/2025/77.webp&quot; alt=&quot;77&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-09-30 21:12 &lt;a href=&quot;https://www.themoviedb.org/tv/119100&quot;&gt;Bocchi the Rock!&lt;/a&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2025/78.webp&quot; alt=&quot;78&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 07:03 骑行路上 | 高楼林立 | 天公作美
&lt;img src=&quot;https://static.yon.im/image/blog/2025/79.webp&quot; alt=&quot;79&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 07:10 来老北京不得不品的豆汁
&lt;img src=&quot;https://static.yon.im/image/blog/2025/80.webp&quot; alt=&quot;80&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 07:15 哎哟喂 那叫一个地道（最终喝了半碗）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/81.webp&quot; alt=&quot;81&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 07:47 地坛（但是里面没有史铁生）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/82.webp&quot; alt=&quot;82&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 08:04 孙思邈石像
&lt;img src=&quot;https://static.yon.im/image/blog/2025/83.webp&quot; alt=&quot;83&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 08:05 闲庭信步
&lt;img src=&quot;https://static.yon.im/image/blog/2025/84.webp&quot; alt=&quot;84&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 09:08 到北京大学见朋友
&lt;img src=&quot;https://static.yon.im/image/blog/2025/85.webp&quot; alt=&quot;85&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 09:44 阿卜杜勒·阿齐兹国王公共图书馆北京大学分馆暨北京大学古籍图书馆
&lt;img src=&quot;https://static.yon.im/image/blog/2025/86.webp&quot; alt=&quot;86&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 10:11 石敢当
&lt;img src=&quot;https://static.yon.im/image/blog/2025/87.webp&quot; alt=&quot;87&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 10:14 黄延方楼
&lt;img src=&quot;https://static.yon.im/image/blog/2025/88.webp&quot; alt=&quot;88&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 10:24 未名湖
&lt;img src=&quot;https://static.yon.im/image/blog/2025/89.webp&quot; alt=&quot;89&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 10:34 博雅塔
&lt;img src=&quot;https://static.yon.im/image/blog/2025/90.webp&quot; alt=&quot;90&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 10:47 华表
&lt;img src=&quot;https://static.yon.im/image/blog/2025/91.webp&quot; alt=&quot;91&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 10:54 塞万提斯像
&lt;img src=&quot;https://static.yon.im/image/blog/2025/92.webp&quot; alt=&quot;92&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 11:02 北京大学家园食堂
&lt;img src=&quot;https://static.yon.im/image/blog/2025/93.webp&quot; alt=&quot;93&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 11:14 食堂内饰
&lt;img src=&quot;https://static.yon.im/image/blog/2025/94.webp&quot; alt=&quot;94&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 11:37 朋友请吃川渝火锅
&lt;img src=&quot;https://static.yon.im/image/blog/2025/95.webp&quot; alt=&quot;95&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 13:26 淑范医学图书馆
&lt;img src=&quot;https://static.yon.im/image/blog/2025/96.webp&quot; alt=&quot;96&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 14:03 北京大学医学科技楼
&lt;img src=&quot;https://static.yon.im/image/blog/2025/97.webp&quot; alt=&quot;97&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 14:07 北京大学医学部
&lt;img src=&quot;https://static.yon.im/image/blog/2025/98.webp&quot; alt=&quot;98&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 15:39 前往天安门
&lt;img src=&quot;https://static.yon.im/image/blog/2025/99.webp&quot; alt=&quot;99&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 16:09 孙中山同志 | 人民英雄纪念碑
&lt;img src=&quot;https://static.yon.im/image/blog/2025/100.webp&quot; alt=&quot;100&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 16:10 祝福祖国
&lt;img src=&quot;https://static.yon.im/image/blog/2025/101.webp&quot; alt=&quot;101&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 16:28 升旗台 | 天安门城楼
&lt;img src=&quot;https://static.yon.im/image/blog/2025/102.webp&quot; alt=&quot;102&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 16:56 人民英雄纪念碑
&lt;img src=&quot;https://static.yon.im/image/blog/2025/103.webp&quot; alt=&quot;103&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 17:07 国务院
&lt;img src=&quot;https://static.yon.im/image/blog/2025/104.webp&quot; alt=&quot;104&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 17:28 人民大会贵宾馆
&lt;img src=&quot;https://static.yon.im/image/blog/2025/105.webp&quot; alt=&quot;105&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 17:42 国家大剧院
&lt;img src=&quot;https://static.yon.im/image/blog/2025/106.webp&quot; alt=&quot;106&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 18:19 熠熠生辉的天安门城楼
&lt;img src=&quot;https://static.yon.im/image/blog/2025/107.webp&quot; alt=&quot;107&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-01 21:30 31671步数
&lt;img src=&quot;https://static.yon.im/image/blog/2025/108.webp&quot; alt=&quot;108&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 11:04 抵达天津 | 南开大学
&lt;img src=&quot;https://static.yon.im/image/blog/2025/109.webp&quot; alt=&quot;109&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 11:14 第二教学楼 | 湖畔
&lt;img src=&quot;https://static.yon.im/image/blog/2025/110.webp&quot; alt=&quot;110&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 15:12 图书馆
&lt;img src=&quot;https://static.yon.im/image/blog/2025/111.webp&quot; alt=&quot;111&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 15:14 伯苓楼
&lt;img src=&quot;https://static.yon.im/image/blog/2025/112.webp&quot; alt=&quot;112&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 18:29 连续三天吃火锅（
&lt;img src=&quot;https://static.yon.im/image/blog/2025/113.webp&quot; alt=&quot;113&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 20:09 被淹没在人流之中
&lt;img src=&quot;https://static.yon.im/image/blog/2025/114.webp&quot; alt=&quot;114&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-02 05:12 坐上全程 11 小时多的绿皮火车回大连
&lt;img src=&quot;https://static.yon.im/image/blog/2025/115.webp&quot; alt=&quot;115&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-10-12 舍友拼 EVA 初号机
&lt;img src=&quot;https://static.yon.im/image/blog/2025/116.webp&quot; alt=&quot;116&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-11-08 和舍友一起看 EVA （阳电子炮，发射！）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/117.webp&quot; alt=&quot;117&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-11-16 13:23 四人包场看 &lt;a href=&quot;https://www.themoviedb.org/movie/1311031&quot;&gt;鬼灭之刃 无限城篇 第一章 猗窝座再袭&lt;/a&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2025/118.webp&quot; alt=&quot;118&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-11-16 16:16 遇 RE: 蕾姆痛车
&lt;img src=&quot;https://static.yon.im/image/blog/2025/119.webp&quot; alt=&quot;119&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-11-16 17:07 铁锅炖
&lt;img src=&quot;https://static.yon.im/image/blog/2025/120.webp&quot; alt=&quot;120&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-12-11 陪三位舍友玩 &lt;a href=&quot;https://www.mcmod.cn/modpack/13.html&quot;&gt;MC Eternal&lt;/a&gt; 整合包
&lt;img src=&quot;https://static.yon.im/image/blog/2025/121.webp&quot; alt=&quot;121&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-12-13 初雪
&lt;img src=&quot;https://static.yon.im/image/blog/2025/122.webp&quot; alt=&quot;122&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-12-25 舍友送圣诞礼物：&lt;a href=&quot;https://zh.moegirl.org.cn/%E5%BF%8D%E9%87%8E%E5%BF%8D&quot;&gt;忍野忍&lt;/a&gt;手办（BTW：祝贺🎉小忍获 2025 年 BiliBili Moe 萌王）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/123.webp&quot; alt=&quot;123&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-12-30 聚餐烤肉
&lt;img src=&quot;https://static.yon.im/image/blog/2025/124.webp&quot; alt=&quot;124&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-01-11 组装 NAS （大动干戈）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/125.webp&quot; alt=&quot;125&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-01-12 迷你主机
&lt;img src=&quot;https://static.yon.im/image/blog/2025/126.webp&quot; alt=&quot;126&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-01-15 新家升级千兆 | 安装路由器（小米 BE3600 Pro）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/127.webp&quot; alt=&quot;127&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-01-19 置办电脑桌（长 160cm 宽 80cm 高 74cm）
&lt;img src=&quot;https://static.yon.im/image/blog/2025/128.webp&quot; alt=&quot;128&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-01-22 入手 One Plus Ace5 当天刷好 crDroid
&lt;img src=&quot;https://static.yon.im/image/blog/2025/129.webp&quot; alt=&quot;129&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-01-24 测试 Root 方案 SukiSU Ultra
&lt;img src=&quot;https://static.yon.im/image/blog/2025/130.webp&quot; alt=&quot;130&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-03 12:40 招待到访新家的朋友们
&lt;img src=&quot;https://static.yon.im/image/blog/2025/131.webp&quot; alt=&quot;131&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-03 14:57 四人一起去爬山
&lt;img src=&quot;https://static.yon.im/image/blog/2025/132.webp&quot; alt=&quot;132&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-03 16:05 下山
&lt;img src=&quot;https://static.yon.im/image/blog/2025/133.webp&quot; alt=&quot;133&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-15 13:16 回老家
&lt;img src=&quot;https://static.yon.im/image/blog/2025/134.webp&quot; alt=&quot;134&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-15 13:21 放羊
&lt;img src=&quot;https://static.yon.im/image/blog/2025/135.webp&quot; alt=&quot;135&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-15 16:38 年夜饭
&lt;img src=&quot;https://static.yon.im/image/blog/2025/136.webp&quot; alt=&quot;136&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-15 20:35 春晚
&lt;img src=&quot;https://static.yon.im/image/blog/2025/137.webp&quot; alt=&quot;137&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-21 11:50 办宴席 在后厨帮忙
&lt;img src=&quot;https://static.yon.im/image/blog/2025/138.webp&quot; alt=&quot;138&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-02-21 17:24 亲戚们送了一堆炮
&lt;img src=&quot;https://static.yon.im/image/blog/2025/139.webp&quot; alt=&quot;139&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-01 15:37 乘动车前往上海
&lt;img src=&quot;https://static.yon.im/image/blog/2025/140.webp&quot; alt=&quot;140&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-01 22:20 可爱的上海地铁站
&lt;img src=&quot;https://static.yon.im/image/blog/2025/141.webp&quot; alt=&quot;141&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-01 22:34 和平饭店
&lt;img src=&quot;https://static.yon.im/image/blog/2025/142.webp&quot; alt=&quot;142&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-01 22:40 外滩 | I ♥️ SH
&lt;img src=&quot;https://static.yon.im/image/blog/2025/143.webp&quot; alt=&quot;143&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-02 05:17 在浦东机场候机
&lt;img src=&quot;https://static.yon.im/image/blog/2025/145.webp&quot; alt=&quot;145&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2025-03-02 08:24 落地大连周水子机场
&lt;img src=&quot;https://static.yon.im/image/blog/2025/146.webp&quot; alt=&quot;146&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;很少人意识到，有一种和抛弃无关的拒绝。未来、提高、好工作，像这样的词语在这里是什么意思呢？“心灵的进展”是什么意思？如果我固执地拒绝这个世界所有的“后来”，那是因为我不想放奔现在的财富。我不想相信，死亡是通向另一种生活的大门。对我来说，它是一扇关闭的门。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;我的内心还太年轻，以至于还不能谈论死亡。但在我看来，如果我不得不谈到它的话，我会找到在“恐惧”和“沉默”之间的那个合适的词，来表达对于在无望中死亡的有意识的确认。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;然后，我相信，真正的、唯一的、一个人时不时投生于其中的文明的进程，存在于创造清醒的死亡。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;—— 摘自《杰米拉的风》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;「Memento mori」 | 「勿忘你终有一死」—— 谨以此文，记我逝去的 2025&lt;/strong&gt;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>2024</title>
        <link href="https://blog.yon.im/posts/2024" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/2024</id>
        <published>2025-03-09T00:00:00Z</published>
        <updated>2025-03-09T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/audio.min.css&quot; /&gt;
&lt;figure class=&quot;figure-center&quot;&gt;
  &lt;img src=&quot;https://static.yon.im/image/blog/2024/%E8%93%BF.jpg&quot; alt=&quot;蓿&quot;&gt;
  &lt;figcaption&gt;蓿 - 重返袖珍时光&lt;/figcaption&gt;
  &lt;audio class=&quot;audio-control&quot; controls src=&quot;https://static.yon.im/audio/%E8%93%BF%20-%20%E9%87%8D%E8%BF%94%E8%A2%96%E7%8F%8D%E6%97%B6%E5%85%89.mp3&quot;&gt;&lt;/audio&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;章起&quot;&gt;&lt;a href=&quot;#章起&quot;&gt;章起&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;「人生中有价值的事都很困难」-- The Animatrix&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/1.webp&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;一句话总结：
2024年 —— 吾此生以来成长最多，活得最为充实的一年&lt;/p&gt;
&lt;p&gt;先简单概括下获得的几项人生成就：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;报考并通过了四级英语考试(CET4)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;经过几月的投入，拿下了 C1 机动车驾照&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以10分56秒跑完体测 2400米（平时缺乏锻炼的我压根没意料到）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;参加学校计算机社团组织的 &lt;del&gt;MC BedWars&lt;/del&gt; 比赛并获得了第三名佳绩&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;国庆与初中时在 Terraria 服务器相识的好朋友线下相见游遍大连景点&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;旅行&quot;&gt;&lt;a href=&quot;#旅行&quot;&gt;旅行&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;他乘的是晚上抵达的飞机，机场旁的街道冷风吹得我直哆嗦，但体内沸腾着的血液随高亢的心情将寒意驱散，线下见面时，我们俩是同样地激动，同样地感到不可思议。你能想象两个初中时在网络上通过一个游戏而认识成为好友，并能保持友谊度过多年岁月时光，在成年后才终得见面是怎样的场面？...... 人与人之间的命运交织总是如此神奇地发生。&lt;/p&gt;
&lt;p&gt;为期 4 天的旅程，我们走遍了中山广场，大连美术馆，俄罗斯风情街，东方威尼斯水城，东港音乐广场，大连老虎滩海洋公园，星海广场，世界和平公园。第一天直接暴走 2 万多步，后面几天则放慢脚步走马观花，一路上将处处美景定格在相框中，成为永远的回忆。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/2.webp&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;（↑朋友的侧影）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/3.webp&quot; alt=&quot;3&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/4.webp&quot; alt=&quot;4&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/5.webp&quot; alt=&quot;5&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/6.webp&quot; alt=&quot;6&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/7.webp&quot; alt=&quot;7&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/8.webp&quot; alt=&quot;8&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/9.webp&quot; alt=&quot;9&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/10.webp&quot; alt=&quot;10&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/11.webp&quot; alt=&quot;11&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2024/12.webp&quot; alt=&quot;12&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这次旅途中最令我印象深刻的是在老虎滩海洋公园内一片偏僻的礁石群，我们跃于尖利的礁石间，淌入浅水滩涂，时不时翻开石块瞧见小虾🦐小蟹🦀惊恐地躲避，但我们并没有伤害它们，而只是想体会下回到孩子般天真无邪地嬉戏的感觉。累了我们便倚靠于坚硬的岩石壁旁，听着浪涛依旧，感受着风拂过脸庞，遥望蔚蓝天空奇迹一般的云彩，思索起人生五味杂陈。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/13.webp&quot; alt=&quot;13&quot; /&gt;&lt;/p&gt;
&lt;p&gt;听着 Alcest 乐队的 Voix sereines（安静的声音）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/14.webp&quot; alt=&quot;14&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我回想起加缪所写下的一段话，非常契合所处的心境：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;从某种意义上讲，我在这里下的赌注，实际上是我的生命，这生命有温暖的石头的味道，充满了大海的叹息和逐渐响起来的蟋蟀的歌唱。蔚蓝的天空下，微凉的风轻轻拂过。我放肆地热爱着这种生命，我要大声说出它的意义：它让我感觉到作为一个人类的骄傲。但是人们经常告诉我说没有什么可值得骄傲的。不，是有那么一些事情的：这太阳，这大海，我跃动的年轻的心，海水的威味，这壮丽的景象以及其中由柔美和光荣混合而成的蓝色和黄色。我需要力量和资源，来拥有它们。这里的所有东西都让我保持着自身的完整，我不会有一丝退让，也不会蒙上假面：耐心而勤奋地学习如何生活对我来说就已足够，那些所谓的生活艺术没有什么用。--《提帕萨的婚礼》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;又忆起激励了我下决心把&lt;strong&gt;生活&lt;/strong&gt;过得丰富多彩的这句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这世界上有人喜欢丰富，有人喜欢单纯；我未见过喜欢丰富的人妒恨、伤害喜欢单纯的人，我见到的情形总是相反。-- 王小波&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;真是令人难以忘怀啊！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/15.webp&quot; alt=&quot;15&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;书影音&quot;&gt;&lt;a href=&quot;#书影音&quot;&gt;书影音&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不去遍历世界，我们就不知道什么是我们精神和情感的寄托，但我们一旦遍历了世界，却发现我们再也无法回到那美好的地方去了。当我们开始寻求，我们就已经失去，而我们不开始寻求，我们根本无法知道自己身边的一切是如此可贵。--《小王子》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;阅读&quot;&gt;&lt;a href=&quot;#阅读&quot;&gt;阅读&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;（按照阅读完毕的时间先后顺序排列）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;《史蒂夫•乔布斯传》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《软件随想录》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《浪潮之巅》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《黑客与画家》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《微观经济学》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《犯罪学》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《福格行为模型》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《罗生门》(重温)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《地球上的绿色山丘》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《西西弗神话》 (重温)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《蛤蟆先生去看心理医生》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《生命之书：365天静心冥想》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《被讨厌的勇气》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《当下的力量》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《地球纪元 第一卷》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《地球纪元 第三卷》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《规训与惩罚》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《文凭社会》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《博弈论》&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;年初时主要在阅读技术类书籍，后来视角转向了人文社科，中间穿插了三部科幻作品。
今年阅读的书籍数量同去年相比不增不减，从行为心理学类书籍（尤其是《福格行为模型》）中收获非常大，使我向好的方面改变了许多，同龄人狂热地进行碎片化时间的娱乐，我却努力将碎片的时间汇聚成块，逆着浮躁的时代浪潮，沉下心来，在书籍中寻求自我完善与自我实现。&lt;/p&gt;
&lt;h3 id=&quot;影视&quot;&gt;&lt;a href=&quot;#影视&quot;&gt;影视&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/16.webp&quot; alt=&quot;16&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 哪吒2&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 源代码&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 奥本海默&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 美丽心灵&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 死亡诗社&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 天空之城&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 勿言推理&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 白日梦想家&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 少数派报告&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 当幸福来敲门&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 剪刀手爱德华&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 海边的曼彻斯特&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 本杰明·巴顿奇事&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 生化危机系列（补完）&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 龙与地下城：侠盗荣耀&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 我是谁：没有绝对安全的系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除了电影之外，还看了点剧集与纪录片。我难以用寥寥数语来描绘出这些精神食粮给我带来的感悟与震撼身心的体验，只能说：非常感谢自己能挤出些时间来体验影视中所展现出不同的故事与人生。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 互联网之子&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 勿言推理 第一季&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 百年孤独 第一季&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 极简主义：记录生命中的重要事物&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt; 反社交网络：从网络梗到大灾祸&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;音乐&quot;&gt;&lt;a href=&quot;#音乐&quot;&gt;音乐&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我的本地音乐库曲目数量已经接近 4000 首，并且这个数字还在增加，库存的音乐有各种各样的曲风门类：Techno、House、Phonk、Chill-out、ACG OST、梦核、梦泡、碎核、自赏、后搖、后朋克、黑金属、乡村民谣、纯音乐、钢琴曲、实验音乐......&lt;/p&gt;
&lt;p&gt;音乐在我的生活中起着不可或缺的作用：在电脑前工作学习时，我会听一些富有节奏感的 EDM，使我能迅速进入状态。走在路上，则常常与后摇、后朋、金属器乐相伴，这类音乐令我从现实中抽离出来，给予我一种特别的视角审视自己。而在入睡前，我通常会听安静的纯音乐以便舒缓身心、陶冶性情。&lt;/p&gt;
&lt;p&gt;一些曲子中的歌词常常让人陷入思索，有些歌曲还有其背后深沉的故事，而我今年遇见的最喜欢的曲目&lt;a href=&quot;https://dtesband.bandcamp.com/track/tomorrow-well-be-dying&quot;&gt;《Tommorow we&apos;ll be dying》&lt;/a&gt;恰是两点都有。这首后摇中的念白，是电影死亡诗社（同样是我的年度最佳）中 Mr. Keating 老师同学生们说的&lt;a href=&quot;https://www.bilibili.com/video/BV1Zx411G7kr&quot;&gt;一段话&lt;/a&gt;：&lt;/p&gt;
&lt;p&gt;&lt;video id=&quot;v&quot; controls style=&quot;max-width:100%;height:auto&quot;&gt;&lt;/video&gt;
&lt;script src=&quot;https://static.yon.im/js/hls.min.v1.6.16.js&quot;&gt;&lt;/script&gt;&lt;/p&gt;
&lt;script&gt;
const v=document.getElementById(&apos;v&apos;),u=&apos;https://static.yon.im/video/blog/2024/44CQ5q275Lqh6K-X56S-44CRVG9tb3Jyb3cgd2UnbGwgYmUgZHlpbmcg6YeH5qC36L-Y5Y6f/44CQ5q275Lqh6K-X56S-44CRVG9tb3Jyb3cgd2UnbGwgYmUgZHlpbmcg6YeH5qC36L-Y5Y6f.m3u8&apos;;
v.canPlayType(&apos;application/vnd.apple.mpegurl&apos;)?v.src=u:Hls?.isSupported()&amp;&amp;new Hls().loadSource(u).attachMedia(v);
&lt;/script&gt;
&lt;p&gt;&amp;quot;Carpe diem, seize the day, because we are food for worms, lads, because tomorrow we&apos;ll be dying.&amp;quot;&lt;/p&gt;
&lt;p&gt;「紧握当下，抓紧时间，因为我们是蛆虫的食物，孩子们，因为我们正走向&apos;明天&apos;的死亡」&lt;/p&gt;
&lt;h3 id=&quot;νωθι-σεαυτον&quot;&gt;&lt;a href=&quot;#νωθι-σεαυτον&quot;&gt;ΝΩΘΙ ΣΕΑΥΤΟΝ&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;「跨过历史长河，希腊德尔斐神庙阿波罗神殿门前赫然刻印着：&amp;quot;ΝΩΘΙ ΣΕΑΥΤΟΝ&amp;quot;
（记忆中应该是在初中七年级上册的道德与法治课本中出现，英译：Know thyself 即 &amp;quot;认识你自己&amp;quot;）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“我们总是怀着恐惧和希望在听，我们总想从别人那里得到启蒙，而无法靠自己去觉察和理解。如果某个开悟的人能满足我们的需求，我们就接受他；若是不能，我们又会继续寻找另一个能满足我们的人。因此大部分人所渴望的只是不同层次的满足罢了。但重点并不是去发现谁开悟了，而是要了解你自己。没有任何一个权威能够让你认识自己，缺乏自我认识，你是不可能解除无明和痛苦的。”--《生命之书》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;于我而言，不同维度的精神生活在经历中联结成了一条主故事线：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过播客 读书节目《金榜题名之后: 大学生出路分化之谜》 &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a id=&quot;fnref:1&quot; href=&quot;#fn:1&quot; data-footnote-ref aria-described-by=&quot;footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; | Harry: 数字游民与独立开发 [^2] 激发了我对自身未来可能性的思索&lt;/li&gt;
&lt;li&gt;在阅读 RSS 文章 [^3] 时被安利了《福格行为模型》、《被讨厌的勇气》于是购买了行为认知类书籍，并从中获得感悟&lt;/li&gt;
&lt;li&gt;从B站一些学习区的 UP（尤其是这个视频 [^4]）明确自身定位，消解焦虑&lt;/li&gt;
&lt;li&gt;因观看纪录片 互联网之子（在这篇文章 [^5] 中得知）使我的世界观受到巨大冲击&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过对世界的探索，我重新认识了自己，明确了自身的定位，在兴趣爱好中找到了可以为之奉献终身的事业，从人类创造的几大艺术中发现无限与永恒的领域，在那些维度中，时光会飞速流逝，生命能沉浸于全神贯注的投入中，磨出属于自己所处小宇宙的创造之火花。&lt;/p&gt;
&lt;p&gt;「有一天，世界燃起了第一团火......」&lt;/p&gt;
&lt;h2 id=&quot;学习&quot;&gt;&lt;a href=&quot;#学习&quot;&gt;学习&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;同去年一样，我仍然花了大部分的时间 Learning on Computer&lt;/p&gt;
&lt;p&gt;多数时候是处于一种远程工作的模式，与朋友异步进行技术研究与学习，常交流心得并总结得失，总体而言效率不错。我将一个个 CS、SE 知识点分解消化，按优先级顺序一步一行地攻克，虽然学习内容看似大杂烩，但实际上每一块知识都在我的技术学习版图中找到了自己的位置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;继续探索技术前沿的 Web3 生态、区块链技术中的明星项目&lt;/li&gt;
&lt;li&gt;将另一部手机刷成更为纯净的 LineageOS 并隔离了下国内外的一些应用&lt;/li&gt;
&lt;li&gt;将路由器刷了 OpenWRT 系统，可惜暂时没有能力解决驱动问题移植 &lt;a href=&quot;https://gti.telent.net/dan/liminix&quot;&gt;Liminix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;补充网络工程的相关知识，且在 VPS 上实践一番，成功将几台服务器组建成小集群。&lt;/li&gt;
&lt;li&gt;使用 &lt;a href=&quot;https://clan.lol/&quot;&gt;Clan&lt;/a&gt; 构建了自己的 &amp;quot;Dark Net&amp;quot;，将所有的服务器以及自己的电脑统统重装成可靠且方便管理的 NixOS。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/17.webp&quot; alt=&quot;17&quot; /&gt;&lt;/p&gt;
&lt;p&gt;随着我的 Nix Config 每次迭代，如今，我的软硬件逐渐稳定下来，从 Arch 迁移到 NixOS，给我的感觉像是机器学习中从随机梯度下降法（SGD）切换到批量梯度下降法（BGD）。同样，今年我的工作习惯也发生了改变，下面插叙短文《My Fits on Learning and Working》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;粗浅地介绍下我秉承的 Mindset（思维模式）以及日常中实践的方法论：&lt;/p&gt;
&lt;p&gt;在自己的 Road Map 管理计划的实践中我主要运用了 &amp;quot;SMART&amp;quot; 原则&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;S=Specific、M=Measurable、A=Attainable、R=Relevant、T=Time-bound
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一天中自由的时间我会分区块安排，将工作与生活进行隔离后，我的日程计划井然有序，并且由于制定的目标依照一定的方法论（&lt;strong&gt;Measurable&lt;/strong&gt; - 可以衡量的、&lt;strong&gt;Achievable&lt;/strong&gt; - 可实现的）每一项计划基本都能完成地尽善尽美。&lt;/p&gt;
&lt;p&gt;对于每一个 Todo 目标持“量力而定，尽力而为”的态度一丝不苟地制定并执行。&lt;/p&gt;
&lt;p&gt;&amp;quot;所以如果你看到这样一个人&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 macOS &lt;del&gt;（Hackintosh）&lt;/del&gt; 使用 FL Studio 编曲、用 Adobe 全家桶进行艺术创作&lt;/li&gt;
&lt;li&gt;在 Windows Play Games &lt;del&gt;（娱乐至死 ❌ 学习游戏策划 ✅）&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;在 Linux 敲代码，与命令行打交道 &lt;del&gt;（花的时间比睡觉还多）&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;quot;那基本上只能是我了，毕竟这世界上还会有谁像我一样无聊（Melting Face🫠）&amp;quot;&lt;/p&gt;
&lt;p&gt;（贴一张折腾 Hackintosh 调整 BIOS config 后成功进入系统时的图）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/18.webp&quot; alt=&quot;18&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;文章&quot;&gt;&lt;a href=&quot;#文章&quot;&gt;文章&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.digitaling.com/articles/13213.html&quot;&gt;《我们这一代人的困惑，一个有故事的大叔说的实在话》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://archive.is/C0d4l&quot;&gt;《前言 | Randy 的读书乐园》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wangyurui.com/posts/jia-ru-bian-cheng-liao-chong-zi-1ff1bbcf&quot;&gt;《假如变成了虫子》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://1q43.blog/post/5322/&quot;&gt;《幸福的积分》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://atlasoin.xyz/2021/06/05/commit-my-heart/&quot;&gt;《献出心脏 直到高墙倒塌》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sspai.com/post/88165&quot;&gt;《十日内观禅修体验》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manateelazycat.github.io/2016/03/03/my-life-before-28-years/&quot;&gt;《我人生的前 28 年》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.velasx.com/am/6237&quot;&gt;《当你不再是宇宙的正中央》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://happypeter.github.io/cult.html&quot;&gt;《不必工作，加入趋势》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily.jstor.org/how-carpe-diem-got-lost-in-translation/&quot;&gt;《How &quot;Carpe Diem&quot; Got Lost in Translation》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rolen.wiki/how-to-find-your-endless-motivation/&quot;&gt;《如何拥有源源不断的动力？》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://greatdk.com/1995.html&quot;&gt;《反正我们每个人最终都难逃孤独》&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;即便我明白，浮躁的现代人在逐渐失去长文阅读的能力，但我依然认为好的文章值得被传颂，有趣的灵魂应当表露心声，而博客这一载体正是最好的，这同样也是我撰写 Blog 的一大动力。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;gaming&quot;&gt;&lt;a href=&quot;#gaming&quot;&gt;Gaming&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/19.webp&quot; alt=&quot;19&quot; /&gt;&lt;/p&gt;
&lt;p&gt;今年游戏界最大的事件就是八月份时 黑神话：悟空 的正式上线，作为玩过寥寥数个大型 A-RPG 游戏的我并无资格进行绝对客观的评价，主观地说：类魂的游戏设计也好，改编自名著也罢，单就只论游戏性而言已然是相当炸裂的存在，更何况这是中国第一个世界级的 3A 大作，游玩的感受体验基本算是我玩过的百来款游戏中的第一梯队了，其中的影神图所蕴含的古风古韵，以及游戏美不胜收的景观足矣令人流连其间，回味无穷。而今年玩的最多的游戏是 博德之门 3 ，自己玩了 3 个周目，与朋友联机玩了四个周目，前前后后加一起可能一共消磨了近 400 小时，真不愧是 2023 年神仙打架脱颖而出的 TGA 年度最佳游戏。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/20.webp&quot; alt=&quot;20&quot; /&gt;&lt;/p&gt;
&lt;p&gt;（↑上图使用了 &lt;a href=&quot;https://github.com/SomiaWhiteRing/gamegrid&quot;&gt;这个项目&lt;/a&gt; ）&lt;/p&gt;
&lt;p&gt;（注：此部分于 2025/03/14 补充，本来并不想在今年总结中写 ##Gaming，而是想单独写一篇类似《在人生游戏中游戏人生》大而全的 Blog 将自己玩过的游戏中留有印象的进行统计并配上游玩感受什么的分享成文，所以这里先留坑待填了）&lt;/p&gt;
&lt;h2 id=&quot;fin&quot;&gt;&lt;a href=&quot;#fin&quot;&gt;Fin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;-- Become a Hacker in Others&apos; eyes&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;从 cheems 身上我学到了：“拔刀的速度越快，生活过得越快。”-- Yon Zilch&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我的舍友看不明白我那屏幕中花花绿绿的代码以及藏在不时滚动着的 Matrix 命令行宇宙是一个怎样的存在，身穿一身黑风衣的我除了少戴个墨镜，恍若《黑客帝国》中的主角 Neo 自由飞行遨游在 NeoVim 里操纵一切事物。难以理解的他们只能信称：“你像是个黑客。”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;（ How excited when I heard at that time!!! ）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;所以我究竟在捣鼓什么呢？&amp;quot;&lt;/p&gt;
&lt;p&gt;这便引出了今年我在技术学习中的小小成就：花了我数个月的时间 programing，写出日常使用着的系统配置&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/21.webp&quot; alt=&quot;21&quot; /&gt;&lt;/p&gt;
&lt;p&gt;开源地址：[https://github.com/yonzilch/yonos](&lt;a href=&quot;https://github.com/yonzilch/yonos&quot;&gt;https://github.com/yonzilch/yonos&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在浅尝辄止晦涩难啃的 Gentoo 后，我于一大堆 Linux 发行版废墟中望见 NixOS，望见生机盎然的 Nixpkgs，望见 Home-Manager 这一处容身之所，当我敲下第一个 flake.nix，一刻间心绪沉浮：&lt;/p&gt;
&lt;p&gt;在初次学习其他编程语言时，每每都是先 Output 出 &amp;quot;Hello, World!&amp;quot;
然而初见 Nix 却是直奔着一个目标而去：“为自己编写出最适合自己的操作系统配置！”&lt;/p&gt;
&lt;p&gt;我俨然成为了自己的系统的造物主。虽然这样的说法略显夸张，但实际情况便是堪称所写即所得般的酣畅淋漓，一行行 Nix 代码经过解析计算后好比是雪花❄️ 融化一般，化作系统中的各个软件服务，成为我工作流的一部分。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;So, Let&apos;s go! Now it&apos;s hacker&apos;s time, let us hack the Matrix, hack the life!&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/22.webp&quot; alt=&quot;22&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;after-story&quot;&gt;&lt;a href=&quot;#after-story&quot;&gt;After Story&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;......你醒了，日历中上写着 2025.03.09，去年今日，你发布了 &lt;a href=&quot;https://blog.yon.im/posts/2023/&quot;&gt;2023&lt;/a&gt; 年报，打开这个超文本跳转链接，回忆似水流年：原来一年中发生了如此多的故事，翻看一年间拍下的照片，不禁感叹：&amp;quot;那一段段时光，已经过去这么久了......&amp;quot;于是，你执起键盘将一年内体验的种种经历，遭遇的次次事件，重新回忆回味，从无意义中择取出意义，于虚无中洞若观火，为那个去年今日望眼欲穿求取自我完善，自我实现的自己撰下肺腑之言。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/23.webp&quot; alt=&quot;23&quot; /&gt;&lt;/p&gt;
&lt;p&gt;当屏幕上最后一个字符落下，你靠向椅背，自然而然地活动了下颈椎，望着书架上，加缪的《西西弗神话》静静躺在一旁，于是脑海之中又回响起：「我们必须想象西西弗是幸福的。」你关闭电脑，走向窗前。过去一年体会过的海浪声，礁石触感，深夜的代码与清晨的阅读，同悠远的音乐旋律一起，在记忆中交织回响，绵延不绝。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/24.webp&quot; alt=&quot;24&quot; /&gt;&lt;/p&gt;
&lt;p&gt;而明天，又是一个崭新的未知，一首歌等你聆听，一段代码待你编写，一本书静候着你来翻阅，一张新的人生卷章等待着被开启。于无限的可能性中，你已然随时准备继续前行......&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2024/25.webp&quot; alt=&quot;25&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;尾注：&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&quot;footnotes&quot; data-footnotes&gt;&lt;ol data-footnotes&gt;
&lt;li id=&quot;fnref:1&quot;&gt;&lt;p&gt;[https://justinyan.me/post/5916](&lt;a href=&quot;https://justinyan.me/post/5916&quot;&gt;https://justinyan.me/post/5916&lt;/a&gt;)
[^2]: &lt;a href=&quot;https://limboy.me/posts/turn-bad-thing-into-trigger&quot;&gt;&lt;a href=&quot;https://justinyan.me/post/5785%5D(https%3A//justinyan.me/post/5785)&quot;&gt;https://justinyan.me/post/5785](https://justinyan.me/post/5785)&lt;/a&gt;
[^3]: [https://limboy.me/posts/turn-bad-thing-into-trigger&lt;/a&gt;
[^4]: &lt;a href=&quot;https://atlasoin.xyz/2021/06/05/commit-my-heart/&quot;&gt;&lt;a href=&quot;https://www.bilibili.com/video/BV1534y1P7c5%5D(https%3A//www.bilibili.com/video/BV1534y1P7c5)&quot;&gt;https://www.bilibili.com/video/BV1534y1P7c5](https://www.bilibili.com/video/BV1534y1P7c5)&lt;/a&gt;
[^5]: [https://atlasoin.xyz/2021/06/05/commit-my-heart/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;</content>
    </entry>
    <entry>
        <title>Use backrest for Linux full backup</title>
        <link href="https://blog.yon.im/posts/use-backrest-for-Linux-full-backup" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/use-backrest-for-Linux-full-backup</id>
        <published>2024-10-02T00:00:00Z</published>
        <updated>2024-10-02T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;h3 id=&quot;needs&quot;&gt;&lt;a href=&quot;#needs&quot;&gt;Needs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I am writing this post to record the effective method for establishing a automatic workflow that ensure my Linux desktop system is backed up correctly.&lt;/p&gt;
&lt;p&gt;With no pain, and no messy things, totally use open-source software make this work seamlessly after configuring the process.&lt;/p&gt;
&lt;h2 id=&quot;overview&quot;&gt;&lt;a href=&quot;#overview&quot;&gt;Overview&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Prepare for the entire process&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install backrest manually&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure backrest through webui&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perform a full backup and attempt a restore for a reliability test&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make it happen seamlessly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fix systemd-boot under LiveCD&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;before-you-go&quot;&gt;&lt;a href=&quot;#before-you-go&quot;&gt;Before you go&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;!WARNING!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The following operations are done in my &lt;a href=&quot;https://cachyos.org/&quot;&gt;CachyOS&lt;/a&gt; system, if you&apos;re using other Linux Distros, I can not promise that would work.But I think the whole process could be reproduced because of the idea: &lt;a href=&quot;https://en.wikipedia.org/wiki/Everything_is_a_file&quot;&gt;&quot;Everything is a file&quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;prepare&quot;&gt;&lt;a href=&quot;#prepare&quot;&gt;Prepare&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Take me as an example, I install my CachyOS in an 240GB NVME disk, and I use &lt;a href=&quot;https://wiki.archlinux.org/title/Systemd-boot&quot;&gt;systemd-boot&lt;/a&gt; rather than Grub as bootloader.Also, I have set LUKS encryption for my root XFS disk volume.&lt;/p&gt;
&lt;p&gt;I installed a 500GB hard disk drive on the motherboard and later erase it into XFS file system.This disk will serve as the backup volume, mounted at &lt;code&gt;/run/media/admin/715335b3-bd5e-4ee4-8cde-c1298fe669df/&lt;/code&gt; by KDE Device-Auto-Mount(715335b3-bd5e-4ee4-8cde-c1298fe669df is the UUID of the disk partition it can be found by &lt;code&gt;blkid&lt;/code&gt; command ).&lt;/p&gt;
&lt;p&gt;Notice: You can also make backup disk mount automatically by configure &lt;code&gt;/etc/fstab&lt;/code&gt;, but I won&apos;t make a deep explanation here.&lt;/p&gt;
&lt;h2 id=&quot;install-backrest&quot;&gt;&lt;a href=&quot;#install-backrest&quot;&gt;Install backrest&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is an official &lt;a href=&quot;https://github.com/garethgeorge/backrest?tab=readme-ov-file#installation&quot;&gt;guide&lt;/a&gt; for installing backrest.&lt;/p&gt;
&lt;p&gt;Here I write a few commands suitable for mostly Linux Distros to install it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/Downloads

cd ~/Downloads

curl -L https://github.com/garethgeorge/backrest/releases/latest/download/backrest_Linux_x86_64.tar.gz -o ~/Downloads/backrest_Linux_x86_64.tar.gz

mkdir ~/Downloads/backrest_Linux_x86_64

tar -zxvf ~/Downloads/backrest_Linux_x86_64.tar.gz -C ~/Downloads/backrest_Linux_x86_64

sudo cp ~/Downloads/backrest_Linux_x86_64/backrest /usr/bin/backrest

rm -rf ~/Downloads/backrest_Linux_x86_64 ~/Downloads/backrest_Linux_x86_64.tar.gz

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then input &lt;code&gt;backrest&lt;/code&gt; in terminal to see if it works.&lt;/p&gt;
&lt;p&gt;After that, create a &lt;code&gt;backrest.service&lt;/code&gt; to manage backrest by systemd.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/systemd/system/backrest.service&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Backrest Service
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/bin/backrest
Environment=&amp;quot;BACKREST_PORT=127.0.0.1:9898&amp;quot;

[Install]
WantedBy=multi-user.target

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;PS: Here I set &lt;code&gt;User=root&lt;/code&gt; to make sure backrest could read all files.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl enable backrest --now
sudo systemctl status backrest

&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;configure-backrest&quot;&gt;&lt;a href=&quot;#configure-backrest&quot;&gt;Configure backrest&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Browse to your backrest webui at localhost:9898&lt;/p&gt;
&lt;p&gt;Then you&apos;ll see a interface to let you create the admin role of backrest.&lt;/p&gt;
&lt;p&gt;I just let [Disable Authentication] ✔️, but if your system isn&apos;t under NAT, you ought to create username and input a strong password.&lt;/p&gt;
&lt;h4 id=&quot;add-repo&quot;&gt;&lt;a href=&quot;#add-repo&quot;&gt;Add Repo:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Click [+ Add Repo], here is my configuration:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/1.avif&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;[Repo Name] is doesn&apos;t matter what you set.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Repository URI] is the directory of the backup disk where you mount.(I set under /CachyOS to make the location of backup folder not at the root directory of this disk volume.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Password] should be set by yourself,it is like the passphrase for encryption.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;add-plan&quot;&gt;&lt;a href=&quot;#add-plan&quot;&gt;Add Plan:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;After [Submit] the configuration of Restic Repository, you need to click [+ Add Plan]&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/2.webp&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;[Plan Name] is doesn&apos;t matter what you set.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Repository] is just as [Repo Name]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Paths] should be set as root directory i.e. / (So it could do a full backup)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Excludes] are the directories should not be backed up.(At least set as the example)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Backup Schedule] as the example it will automatically do a backup every 4 hours.(You can change it by yourself.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Clock for schedule] just recommand to set as [Last Run Time]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Backup Flags] add &lt;code&gt;--one-file-system&lt;/code&gt; so /proc /tmp and so on won&apos;t be backuped.(More explanations here: [https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files](&lt;a href=&quot;https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files&quot;&gt;https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;test&quot;&gt;&lt;a href=&quot;#test&quot;&gt;Test:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/3.avif&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click [Backup Now], wait the first long full backup process done.(Here I have backuped before, so just take a look the success result.)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/4.webp&quot; alt=&quot;4&quot; /&gt;&lt;/p&gt;
&lt;p&gt;At this point, the configuration of backrest is complete. It will automatically backup the whole system seamlessly in the background.&lt;/p&gt;
&lt;h2 id=&quot;restore&quot;&gt;&lt;a href=&quot;#restore&quot;&gt;Restore&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now, suppose your Linux system disk just explodes, only left your backup volume.&lt;/p&gt;
&lt;p&gt;Luckily, you have a disaster recovery because of the automatically backup by backrest.&lt;/p&gt;
&lt;p&gt;So let&apos;s go to the LiveCD of your Linux Distro(as for me it is CachyOS LiveCD) , and make your system restore like before.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4 id=&quot;first&quot;&gt;&lt;a href=&quot;#first&quot;&gt;First:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Install backrest in LiveCD&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/Downloads

cd ~/Downloads

curl -L https://github.com/garethgeorge/backrest/releases/latest/download/backrest_Linux_x86_64.tar.gz -o ~/Downloads/backrest_Linux_x86_64.tar.gz

mkdir ~/Downloads/backrest_Linux_x86_64

tar -zxvf ~/Downloads/backrest_Linux_x86_64.tar.gz -C ~/Downloads/backrest_Linux_x86_64

sudo cp ~/Downloads/backrest_Linux_x86_64/backrest /usr/bin/backrest

rm -rf ~/Downloads/backrest_Linux_x86_64 ~/Downloads/backrest_Linux_x86_64.tar.gz

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Switch to the root user to get full file access.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo -i
or
su root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then input &lt;code&gt;backrest&lt;/code&gt; in terminal, but this time, do not close &lt;code&gt;backrest&lt;/code&gt; in terminal, and also no need of systemd-service.&lt;/p&gt;
&lt;p&gt;Just browse to your backrest webui localhost:9898&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/5.avif&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then you need to restore your configuration like before manually.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/6.webp&quot; alt=&quot;6&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/7.webp&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;h4 id=&quot;second&quot;&gt;&lt;a href=&quot;#second&quot;&gt;Second:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Erase a new disk for your new Linux system disk, here use Gparted for a quick work.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/8.webp&quot; alt=&quot;8&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/9.webp&quot; alt=&quot;9&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/10.webp&quot; alt=&quot;10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Notice: You should add [boot] &amp;amp; [esp] flags to the Fat32 EFI volume.Click [Manage Flags] to do this.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/11.webp&quot; alt=&quot;11&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/12.webp&quot; alt=&quot;12&quot; /&gt;&lt;/p&gt;
&lt;h4 id=&quot;third&quot;&gt;&lt;a href=&quot;#third&quot;&gt;Third:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Mount the new Linux system disk partition and EFI partition.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo -i
mkdir /mnt/boot
mount /dev/sdc2 /mnt
mount /dev/sdc1 /mnt/boot

Notice: /dev/sdcX is define by your system environment, you can use command `lsblk` and `blkid` to see this.

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you can execute restore command in backrest.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-backrest-for-Linux-full-backup/13.webp&quot; alt=&quot;13&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Notice: This process may take a lot of time, but you need to be patient.&lt;/p&gt;
&lt;h4 id=&quot;finally&quot;&gt;&lt;a href=&quot;#finally&quot;&gt;Finally:&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;It&apos;s almost done, just need to fix bootloader.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;genfstab -U /mnt &amp;gt; /mnt/etc/fstab

arch-chroot /mnt

bootctl install

paru -S linux-cachyos

Notice: `paru -S linux-cachyos` is works only in CachyOS(or other Arch Linux), if you&apos;re using other Linux Distro, you may needn&apos;t run this command.

mkinitcpio -P

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice: /etc/crypttab should be reconfigured if your system once have LUKS crypt.&lt;/p&gt;
&lt;p&gt;Now, you could reboot, and boot into the formal system before the accident happened.&lt;/p&gt;
&lt;h3 id=&quot;more-about-luks-encryption&quot;&gt;&lt;a href=&quot;#more-about-luks-encryption&quot;&gt;More About LUKS encryption&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you need LUKS encryption for the root partition, you need to create an encrypted root volume before restoring.However, due to space limitations, I won&apos;t go into more detail.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgements&quot;&gt;&lt;a href=&quot;#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[https://github.com/restic/restic](&lt;a href=&quot;https://github.com/restic/restic&quot;&gt;https://github.com/restic/restic&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[https://github.com/garethgeorge/backrest](&lt;a href=&quot;https://github.com/garethgeorge/backrest&quot;&gt;https://github.com/garethgeorge/backrest&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
    <entry>
        <title>Use rclone for s3 sync</title>
        <link href="https://blog.yon.im/posts/use-rclone-for-s3-sync" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/use-rclone-for-s3-sync</id>
        <published>2024-09-29T00:00:00Z</published>
        <updated>2024-09-29T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;h3 id=&quot;needs&quot;&gt;&lt;a href=&quot;#needs&quot;&gt;Needs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As I found that my data is in risk of losing, because as the saying goes &amp;quot;Free is the most expensive.&amp;quot;&lt;/p&gt;
&lt;p&gt;It is a strange thing that people usually escape the thoughts on personal data protection.But this is a true fact that often catches people off guard.&lt;/p&gt;
&lt;p&gt;So I researched from Internet in order to find a way to backup my images on S3 storage provider, and worth the effort, finally I make it works.&lt;/p&gt;
&lt;h2 id=&quot;overview&quot;&gt;&lt;a href=&quot;#overview&quot;&gt;Overview&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Use docker to deploy rclone webui&lt;/li&gt;
&lt;li&gt;Configure the backend storage&lt;/li&gt;
&lt;li&gt;Create an automated task using a time trigger&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;environment&quot;&gt;&lt;a href=&quot;#environment&quot;&gt;Environment&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here, I deploy rclone on my personal VPS server.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;docker-compose.yaml&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;version: &amp;quot;3&amp;quot;

services:
  rclone:
    container_name: rclone
    image: &amp;quot;rclone/rclone:latest&amp;quot;
    restart: unless-stopped
    stdin_open: true
    tty: true
    volumes:
      - /var/lib/docker/volumes/rclone/_data/config:/config
      - /var/lib/docker/volumes/rclone/_data/data:/data
    ports:
      - 0.0.0.0:5572:5572
    entrypoint:
      - rclone
      - rcd
      - --rc-web-gui
      - --rc-web-gui-no-open-browser
      - --rc-addr=0.0.0.0:5572
      - --rc-user=xxxxxx
      - --rc-pass=xxxxxxxxxxxxxxxx
      ###- --rc-no-auth

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice: just replace [rc-user] and [rc-pass] at line 21, 22&lt;/p&gt;
&lt;p&gt;More reference to see how it works: [https://rclone.org/gui/](&lt;a href=&quot;https://rclone.org/gui/&quot;&gt;https://rclone.org/gui/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Then configure reserved proxy programs like Nginx, Caddy, Traefik, and so on.&lt;/p&gt;
&lt;p&gt;Also, do not forget adding a DNS record.&lt;/p&gt;
&lt;h2 id=&quot;setup&quot;&gt;&lt;a href=&quot;#setup&quot;&gt;Setup&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Browse to your rclone domain(or ip:5572 if you deploy rclone locally)&lt;/p&gt;
&lt;p&gt;When you get into Rclone Webui after insert [rc-user] and [rc-pass], open link [https://rclone.example.com/#/newdrive](&lt;a href=&quot;https://rclone.example.com/#%2Fnewdrive&quot;&gt;https://rclone.example.com/#/newdrive&lt;/a&gt;) to add backend remote storage.&lt;/p&gt;
&lt;p&gt;Notice: you can also click &lt;code&gt;Configs&lt;/code&gt; &amp;gt; &lt;code&gt;Create a New Config&lt;/code&gt; to get in this page.&lt;/p&gt;
&lt;p&gt;Like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-rclone-for-s3-sync/1.avif&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here I set &lt;code&gt;Name of this drive&lt;/code&gt; as static-yon-4everland (it is my main s3 provider currently)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-rclone-for-s3-sync/2.avif&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then just fill in AWS Access Key ID, AWS Secret Access Key, Region, Endpoint by yourself.&lt;/p&gt;
&lt;p&gt;Also, set the other s3 provider as backup, here I set &lt;code&gt;static-yon-cloudflare&lt;/code&gt;(Cloudflare R2).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-rclone-for-s3-sync/3.webp&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;More reference to see how it works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;[https://rclone.org/overview/](&lt;a href=&quot;https://rclone.org/overview/&quot;&gt;https://rclone.org/overview/&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[https://rclone.org/commands/rclone_config/](&lt;a href=&quot;https://rclone.org/commands/rclone_config/&quot;&gt;https://rclone.org/commands/rclone_config/&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;trigger&quot;&gt;&lt;a href=&quot;#trigger&quot;&gt;Trigger&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After setting up two S3 backend storage providers, just run this command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker exec rclone rclone sync static-yon-4everland: static-yon-cloudflare:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then files in &lt;code&gt;static-yon-4everland&lt;/code&gt; will sync to &lt;code&gt;static-yon-cloudflare&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So you just need to set a cronjob so that it would run regularly.&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;crontab -e

0 */2 * * * bash -c &apos;docker exec rclone rclone sync static-yon-4everland: static-yon-cloudflare:&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;acknowledgements&quot;&gt;&lt;a href=&quot;#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;[https://github.com/rclone/rclone](&lt;a href=&quot;https://github.com/rclone/rclone&quot;&gt;https://github.com/rclone/rclone&lt;/a&gt;)&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>2023</title>
        <link href="https://blog.yon.im/posts/2023" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/2023</id>
        <published>2024-03-09T00:00:00Z</published>
        <updated>2024-03-09T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/audio.min.css&quot; /&gt;
&lt;figure class=&quot;figure-center&quot;&gt;
  &lt;img src=&quot;https://static.yon.im/image/blog/2023/aer.jpg&quot; alt=&quot;aer&quot;&gt;
  &lt;figcaption&gt;with all my heart&lt;/figcaption&gt;
  &lt;audio class=&quot;audio-control&quot; controls&gt;
    &lt;source src=&quot;https://static.yon.im/audio/with all my heart - Wisp X.mp3&quot; type=&quot;audio/mpeg&quot;&gt;
  &lt;/audio&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;intro&quot;&gt;&lt;a href=&quot;#intro&quot;&gt;Intro&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;「人的一生如此短暂......我们不可能完成每一件想做的事。无论我们做了什么，总有其他东西值得一试，总有另一条路值得一走。」--Finding Paradise&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/1.webp&quot; alt=&quot;1&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/2.webp&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;有时候会发现自己是无比地矛盾，犹如象与骑象者一般，【想要】写一篇年报 这件事好比是自己的【思想】先行但【行动】却总是在徘徊。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;在 RSS 信息流中阅读无数篇文章过后，余发觉：个人的思想理念在经受如此多的【输入】整个人的「行为」却会因过多的【思绪】而无法得到真正的改变。深刻反思过后：其实关键的不在犹豫于 &amp;quot;How&amp;quot;，真正关键的在于要打破旧有的行为模式。在此，理清了一些繁乱的【思绪】后，余归纳了以下几点。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我必须不断打破旧有的写作习惯，以尽可能地完善自己的写作流。&lt;/li&gt;
&lt;li&gt;我渴望将脑中的思绪用生动的语言来描述出来，但是又时不时会发觉【文字】是一种很有局限性的载体。&lt;/li&gt;
&lt;li&gt;我的 Blog，它是我写字的地方。而写作是一件在当下这个【娱乐至死】社会中鲜有的存在，自然而然地，我为之赋予期望，为之满腹渴念，希望我的文字能有足够的力量，能使人有所感怀，能有所触动。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;当【输入】过多，水到渠成般地【输出】即是个人行为后一步的演变。即便意识到文字有限，却仍然一直有股冲动不愿让这宝贵的经历消逝在记忆之中。所以，在经历了无意义的思想交锋（更多是无聊造作🤣）后，象终究是由骑象者驱动，写出了一些可有可无的文字，i.e. 以下你看到的这篇年报：&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;章起&quot;&gt;&lt;a href=&quot;#章起&quot;&gt;章起&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;「Nothing is True. Everything is permitted.」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;曾几何时我确是难以想象为何在某时某刻，一个学生在社会化洗礼过后即是成人。那愚昧的身份认同自童年过后便扎根于每一个活生活现的人的思想之中。 且不谈大众，说回个人，我终是会成长，会经历许许尘事，会伤痛，会怅惘，但也会心血来潮，时不时情随事迁，以物喜以己悲。不断地经历种种世事，不断改变，不断地颠覆行为，生物总是这样的：「一切行为都是建立在已有的条件反射之上，继续改变原有的条件反射。」社会的大环境在变，个人的行为因而也在不断改变。回首昨年疫情，魔幻现实下，一粒时代的尘灰落到个人身上也是极其沉重的。我永远会怀念起居家学习的网课时代，曾经转动的命运齿轮奠定了我此时此刻的行为。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「那些我错过的机会，那些小意外，和我所有未竟的愿望……是的，它们还是我的遗憾，可它们让我拥有了现在的一切。」--Finding Paradise&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/3.webp&quot; alt=&quot;3&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/4.webp&quot; alt=&quot;4&quot; /&gt;&lt;/p&gt;
&lt;p&gt;那么我现在拥有的一切是什么呢？除却身外之物，仅剩下了无数经历留给我的记忆，以及与他人（朋友、家人、亲戚）间相处的联系。孑然一身是常态，抛却物欲集中精神更是当下自身的写照。即使虚无主义常伴吾身的我认定：「一切都存在于想象之中」，但无穷无尽的「地球Online」游戏体验仍然使我沉迷。且让我总结下今年在游玩「🌍️Online」过程中 Level UP 的欣喜&amp;amp;收获：&lt;/p&gt;
&lt;h3 id=&quot;设备软硬件&quot;&gt;&lt;a href=&quot;#设备软硬件&quot;&gt;设备软硬件&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;“最令我欣喜的莫不过是用于赛博冲浪的冲浪板得到「史诗级」的加强”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从家里的 六代i3老爷机 过渡到 惠普暗影精灵4，再到 AM5 M-ATX.&lt;/p&gt;
&lt;p&gt;从 EndeavourOS 过渡到 Garuda Linux、再到目前的 CachyOS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/5.webp&quot; alt=&quot;5&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/6.webp&quot; alt=&quot;6&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/7.webp&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我喜欢 KISS 哲学，对于 Arch Linux 我认为只能用「现象级」来评价它。&lt;/p&gt;
&lt;p&gt;高效工作学习的前提需要有一个简洁易用的系统，而去繁就简的 Arch 符合了这样的需求。&lt;/p&gt;
&lt;h3 id=&quot;ai&quot;&gt;&lt;a href=&quot;#ai&quot;&gt;AI&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;2023 注定是 AI 技术大放异彩的一年，各种 Requests 通过 ChatGPT、Claude 等生成式 AI 模型其帮助下，deBug 各种「未曾设想」的 Issue 不再坐牢。作为日常技术学习助理的 GPT 帮助我概括一些又臭又长的官方文档，速通水课论文作业，等琐碎事务根本不在话下（已经是「重度依赖GPT晚期」了🫠）。也期待后继更加强大的 AI 大模型能够降本增效，期望更多如同 MidJourney、Quivr 一众创造力强大的项目孵化。未来可期，拭目以待。&lt;/p&gt;
&lt;h3 id=&quot;研究&quot;&gt;&lt;a href=&quot;#研究&quot;&gt;研究&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 &lt;a href=&quot;https://github.com/BryceRussell/astro-minecraft-theme&quot;&gt;astro-minecraft-theme&lt;/a&gt; 构建了我的&lt;a href=&quot;https://yon.im&quot;&gt;主页&lt;/a&gt;，那天心情非常好！&lt;/p&gt;
&lt;p&gt;重构了我的 Blog，从 hugo-theme-bootstrap 到自行魔改的 zola-theme-apollo，由繁至简的称心使我更有动力通过 Blog 来输出文字，同样使我踏入前端领域这一大坑。（WYSIWYG 实时反馈还是很上头的🙃）&lt;/p&gt;
&lt;p&gt;多维度地了解互联网各个领域的状况，在 DevOps 项目实践中研究各类 aaS 平台（SaaS、PaaS、IaaS、DBaaS、AIaaS etc.）&lt;/p&gt;
&lt;p&gt;研究了下 PVE 系统，并在 GPT 帮助下制服 Cloud-init Crash 的问题，掌握了管理集群的一大技能点。&lt;/p&gt;
&lt;p&gt;其余时间大多与朋友一同研究 Docker 建站，打造了一系列团队共用软件生态圈（如 Matrix for Chat、MiniFlux for RSS Reading、VaultWarden for password managemant etc.）&lt;/p&gt;
&lt;h3 id=&quot;学习&quot;&gt;&lt;a href=&quot;#学习&quot;&gt;学习&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最大的收获应该是刷完课程&lt;a href=&quot;https://www.bilibili.com/video/BV14E411J7n2&quot;&gt;计算机教育中缺失的一课&lt;/a&gt;，边看边实践从中学到了不少有用的基础知识（也深刻地感受到国内外大学教学差异（降维打击了属于是）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/8.webp&quot; alt=&quot;8&quot; /&gt;&lt;/p&gt;
&lt;p&gt;测试&amp;amp;&amp;amp;对比了一堆开源软件，打磨技术生产力工具，还尝试体验了好几个 Linux 发行版（Fedora、RebornOS、openSUSE、MocaccinoOS、Calculate Linux etc.）有朝一日也想研究下 Linux from Scratch（LFS）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/9.webp&quot; alt=&quot;9&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/10.webp&quot; alt=&quot;10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在这过程中探索了不少开源项目，并成为了一个更加偏执狂的存在👻。（下一步：主力系统迁移到 NixOS? Gentoo? Or?）&lt;/p&gt;
&lt;p&gt;阅读了《区块链超入门》、《人人都能读懂的密码学》以及一些 Blog Posts，使我对 Distributed Systems、Blockchain、web3 等技术领域颇感兴趣。&lt;/p&gt;
&lt;h3 id=&quot;生活&quot;&gt;&lt;a href=&quot;#生活&quot;&gt;生活&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&quot;辗转&quot;&gt;&lt;a href=&quot;#辗转&quot;&gt;辗转&lt;/a&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;游深圳&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;八月份与 &lt;a href=&quot;https://blog.dich.ink&quot;&gt;Dich&lt;/a&gt; 一同去往深圳这个一线城市一探究竟。体验了早茶文化，吃到了潮汕特色面食，领略了华强北电子世界，寻找鬼市无功而返，以及一路上各种风景拍拍拍，着实勾画了一笔浓墨重彩的人生体验。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/11.webp&quot; alt=&quot;11&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/12.webp&quot; alt=&quot;12&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/13.webp&quot; alt=&quot;13&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/14.webp&quot; alt=&quot;14&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/15.webp&quot; alt=&quot;15&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/16.webp&quot; alt=&quot;16&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/17.webp&quot; alt=&quot;17&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/18.webp&quot; alt=&quot;18&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/19.webp&quot; alt=&quot;19&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;访老家&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/20.webp&quot; alt=&quot;20&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/21.webp&quot; alt=&quot;21&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;抵大连&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/22.webp&quot; alt=&quot;22&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/23.webp&quot; alt=&quot;23&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/24.webp&quot; alt=&quot;24&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/25.webp&quot; alt=&quot;25&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/26.webp&quot; alt=&quot;26&quot; /&gt;&lt;/p&gt;
&lt;h4 id=&quot;gaming&quot;&gt;&lt;a href=&quot;#gaming&quot;&gt;Gaming&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;一图概括：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/27.webp&quot; alt=&quot;27&quot; /&gt;&lt;/p&gt;
&lt;p&gt;最喜欢的当属 FreeBird 系列作品：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To the Moon《去月球》（二通）&lt;/li&gt;
&lt;li&gt;A Bird Story《鸟的故事》&lt;/li&gt;
&lt;li&gt;Finding Paradise 《寻找天堂》&lt;/li&gt;
&lt;li&gt;Impostor Factory《影子工厂》&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除此之外，还搭建了 Minecraft、泰拉瑞亚 服务器与伙伴们一同玩耍，也与 &lt;a href=&quot;https://milvoid.com&quot;&gt;Milvoid&lt;/a&gt;等几位朋友在 MC Hypixel 服务器里🛏起床战争，不亦乐乎！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/28.webp&quot; alt=&quot;28&quot; /&gt;
&lt;img src=&quot;https://static.yon.im/image/blog/2023/29.webp&quot; alt=&quot;29&quot; /&gt;&lt;/p&gt;
&lt;h4 id=&quot;书与影&quot;&gt;&lt;a href=&quot;#书与影&quot;&gt;书与影&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;《铁皮鼓》&lt;/li&gt;
&lt;li&gt;《小王子》&lt;/li&gt;
&lt;li&gt;《发条橙》&lt;/li&gt;
&lt;li&gt;《悉达多》&lt;/li&gt;
&lt;li&gt;《在轮下》&lt;/li&gt;
&lt;li&gt;《荒原狼》&lt;/li&gt;
&lt;li&gt;《第一人》&lt;/li&gt;
&lt;li&gt;《内在工程》（常看常新）&lt;/li&gt;
&lt;li&gt;《荒谬的自由》&lt;/li&gt;
&lt;li&gt;《莱姆狂想曲》&lt;/li&gt;
&lt;li&gt;《区块链超入门》（二刷）&lt;/li&gt;
&lt;li&gt;《想看在看看过》&lt;/li&gt;
&lt;li&gt;《2010 太空漫游》&lt;/li&gt;
&lt;li&gt;《毛姆短篇小说集》&lt;/li&gt;
&lt;li&gt;《茨威格小说全集》&lt;/li&gt;
&lt;li&gt;《音乐影响了我的写作》&lt;/li&gt;
&lt;li&gt;《大问题·简明哲学导论》&lt;/li&gt;
&lt;li&gt;《人人都能读懂的密码学》&lt;/li&gt;
&lt;li&gt;《当我谈跑步时，我谈些什么》&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2023年我所读过的书绝对不算多，但也不算少。在当下这个浮躁的社会已经很难沉下心来阅读了，不过还算没被时代洪流打败：文学、技术、科幻、哲学、神秘学等都在阅读中不断向前探索。2024年应当拓宽知识面，阅读些知识领域内尚不熟习的著作（经济学、传播学、社会学 etc.）&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;看电影向来是不喜欢中途被打断的，但这也导致一看系列集电影就停不下来，一晃半天过去了🤣&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/30.webp&quot; alt=&quot;30&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;《洛奇6》&lt;/li&gt;
&lt;li&gt;《绿皮书》&lt;/li&gt;
&lt;li&gt;《发条橙》&lt;/li&gt;
&lt;li&gt;《瓶中信》&lt;/li&gt;
&lt;li&gt;《头号玩家》&lt;/li&gt;
&lt;li&gt;《铃芽之旅》&lt;/li&gt;
&lt;li&gt;《霸王别姬》&lt;/li&gt;
&lt;li&gt;《让子弹飞》&lt;/li&gt;
&lt;li&gt;《大闹天宫》&lt;/li&gt;
&lt;li&gt;《美丽人生》&lt;/li&gt;
&lt;li&gt;《流浪地球2》&lt;/li&gt;
&lt;li&gt;《楚门的世界》&lt;/li&gt;
&lt;li&gt;《罗小黑战记》（二刷）&lt;/li&gt;
&lt;li&gt;《瞬息全宇宙》&lt;/li&gt;
&lt;li&gt;《银翼杀手》（全系列）&lt;/li&gt;
&lt;li&gt;《黑客帝国》（全系列）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中每一部都令人称道，拍案叫绝！&lt;/p&gt;
&lt;h3 id=&quot;文章&quot;&gt;&lt;a href=&quot;#文章&quot;&gt;文章&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;（其实一年下来看过的文章没几千篇，也有百来篇了）这里，我仅选取了对我影响最深的10篇文章。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一年中最想♥️感谢♥️的其实是这些深深触动并改变我的故事和文章：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://justinyan.me/post/5790&quot;&gt;《每个人每天都只有24小时，希望我的选择真的是我的选择》&lt;/a&gt;
让我反思人生之陷阱&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.si-on.top/2023/key4read/&quot;&gt;《电子阅读新语》&lt;/a&gt;
使我彻悟读书的意义&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://justgoidea.com/posts/2022-019/&quot;&gt;《2022 年值得持续阅读的内容平台》&lt;/a&gt;
助我收集精良的信息源&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://subnooc.com/posts/go-far-away&quot;&gt;《如果可以，请去远方看看》&lt;/a&gt;
唤我以不一样的视角看世界&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://lutaonan.com/blog/7-days-meditation/&quot;&gt;《在清迈冥想学习 7 天后，我不再「追求」幸福》&lt;/a&gt;
引我从内心找寻真正的自我&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://atpx.com/blog/escape-information-explosion/&quot;&gt;《逃离爆炸的信息》&lt;/a&gt;
带我远离💥碎片的信息熵乱平台&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://archive.dianqk.blog/2022/04/23/archlinux-and-lineageos/&quot;&gt;《将 Arch Linux 和 LineageOS 作为主力系统》&lt;/a&gt;
予我开源软件之实践&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.pseudoyu.com/zh/2022/06/28/weekly_review_20220626/&quot;&gt;《周报 #01 - 情感、安全感与认真生活》&lt;/a&gt;
献我生活的多维度视角&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zackwu.com/posts/2021-11-26-bigger-world-and-inner-peace/&quot;&gt;《二十二岁，追寻更大的世界与更平和的内心》&lt;/a&gt;
激我未来之希冀&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://liuguo.eth.limo/13271-%E4%BF%A1%E6%81%AF%E8%87%AA%E7%94%B1%E7%9A%84%E4%B9%8C%E6%89%98%E9%82%A6%E4%B8%8E%E7%8E%B0%E5%AE%9E/&quot;&gt;《信息自由的乌托邦与现实》&lt;/a&gt;
领我看清信息技术的现实面目&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;fin&quot;&gt;&lt;a href=&quot;#fin&quot;&gt;Fin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;村上村树所著的《舞！舞！舞！》有一段话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“跳舞，”羊男说，“只要音乐在响，就尽管跳下去。明白我的话？跳舞，不停地跳舞。不要考虑为什么跳，不要考虑意义不意义，意义那玩意儿本来就是没有的，要是考虑这个，脚步势必停下来。一旦停下来，我就再也爱莫能助了，并且连接你的线索也将全部消失，永远消失。那一来，你就只能在这里生存，只能不由自主地陷进这边的世界。因此不能停住脚步，不管你如何觉得滑稽好笑，也不能半途而废，务必咬紧牙关踩着舞点跳下去。跳着跳着，原先坚固的东西便会一点点酥软，有的东西还没有完全不可救药。能用的全部用上去，全力以赴，不足为惧的。你的确很疲劳，筋疲力竭，惶惶不可终日。谁都有这种时候，觉得一切都错得不可收拾，以致停下脚步。” 我抬起眼睛，再次凝视墙上的暗影。 “但只有跳下去，”羊男继续道，“而且要跳得出类拔萃，跳得大家心悦诚服。这样，我才有可能助你一臂之力。总之一定要跳要舞，只要音乐没停。”要跳要舞，只要音乐没停。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;曾经有段时间，我苦苦陷入虚无主义，浑浑噩噩不得终日。但是如今的我听罢如此多的故事，体验种种经历，回响脑海的声音越发高亢：
「不要考虑为什么跳，不要考虑意义不意义，不管你如何觉得滑稽好笑，务必咬紧牙关踩着舞点跳下去。」&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/2023/31.webp&quot; alt=&quot;31&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那么，且让湿婆业舞不断，且歌且行，去全然地面对那过去、未来与现在凝结一体的永恒当下。&lt;/strong&gt;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>My App Defaults 2023</title>
        <link href="https://blog.yon.im/posts/my-app-defaults-2023" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/my-app-defaults-2023</id>
        <published>2023-12-05T00:00:00Z</published>
        <updated>2023-12-05T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;h1 id=&quot;intro&quot;&gt;&lt;a href=&quot;#intro&quot;&gt;Intro&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;To contribute this &lt;a href=&quot;https://github.com/rknightuk/app-defaults&quot;&gt;Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;And inspired by these blogs:&lt;/li&gt;
&lt;li&gt;[https://yinji.org/5179.html](&lt;a href=&quot;https://yinji.org/5179.html&quot;&gt;https://yinji.org/5179.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[https://anotherdayu.com/2023/5452/](&lt;a href=&quot;https://anotherdayu.com/2023/5452/&quot;&gt;https://anotherdayu.com/2023/5452/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[https://blog.douchi.space/app-defaults/](&lt;a href=&quot;https://blog.douchi.space/app-defaults/&quot;&gt;https://blog.douchi.space/app-defaults/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;my-app-defaults-2023&quot;&gt;&lt;a href=&quot;#my-app-defaults-2023&quot;&gt;My App Defaults 2023&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;📨 &lt;strong&gt;Mail Client&lt;/strong&gt;：BetterBird, RoundCube(Web Client)&lt;/p&gt;
&lt;p&gt;📮 &lt;strong&gt;Mail Server&lt;/strong&gt;: MxRoute with my own domains, Disroot&lt;/p&gt;
&lt;p&gt;📝 &lt;strong&gt;Notes&lt;/strong&gt;: Joplin, Logseq, AnyType&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;To-Do&lt;/strong&gt;: Tasks, Vikunja(self-hosted), Logseq&lt;/p&gt;
&lt;p&gt;📷 &lt;strong&gt;Photo Shooting&lt;/strong&gt;: ACG(Google Camera)&lt;/p&gt;
&lt;p&gt;🟦 &lt;strong&gt;Photo Management&lt;/strong&gt;: Aves Libre, digiKam&lt;/p&gt;
&lt;p&gt;📆 &lt;strong&gt;Calendar&lt;/strong&gt;: Etar, Countdate&lt;/p&gt;
&lt;p&gt;📁 &lt;strong&gt;Cloud File Storage&lt;/strong&gt;: Alist(self-hosted) as frontend, Storj DCS, 4everland IPFS etc. as backend&lt;/p&gt;
&lt;p&gt;📖 &lt;strong&gt;RSS&lt;/strong&gt;: MiniFlux(self-hosted) as Server while Newsflash and News as Cilent&lt;/p&gt;
&lt;p&gt;🙍🏻‍♂️ &lt;strong&gt;Contacts&lt;/strong&gt;: Android Default Contacts&lt;/p&gt;
&lt;p&gt;🌐 &lt;strong&gt;Browser&lt;/strong&gt;: Brave, FireFox, Kiwi&lt;/p&gt;
&lt;p&gt;💬 &lt;strong&gt;Chat&lt;/strong&gt;: Matrix, Telegram&lt;/p&gt;
&lt;p&gt;🔖 &lt;strong&gt;Bookmarks&lt;/strong&gt;: Browser, OneNav(self-hosted)&lt;/p&gt;
&lt;p&gt;📑 &lt;strong&gt;Read It Later&lt;/strong&gt;: Currently None&lt;/p&gt;
&lt;p&gt;📜 &lt;strong&gt;Word Processing&lt;/strong&gt;: MarkText, GhostWriter, Joplin&lt;/p&gt;
&lt;p&gt;💰 &lt;strong&gt;Budgeting and Personal Finance&lt;/strong&gt;: iHateMoney as Server, MoneyBuster as Client&lt;/p&gt;
&lt;p&gt;📰 &lt;strong&gt;News&lt;/strong&gt;: Telegram Channel, RSS feeds and so on&lt;/p&gt;
&lt;p&gt;🎵 &lt;strong&gt;Music&lt;/strong&gt;: StrawBerry, Metro, Spotify&lt;/p&gt;
&lt;p&gt;🎤 &lt;strong&gt;Podcasts&lt;/strong&gt;: Spotify&lt;/p&gt;
&lt;p&gt;🔐 &lt;strong&gt;Password Management&lt;/strong&gt;: Vaultwarden(self-hosted) as Server while &lt;a href=&quot;https://bitwarden.com/&quot;&gt;BitWarden&lt;/a&gt; as Client, KeePassXC&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;And some extra categories not mentioned in the project:&lt;/p&gt;
&lt;p&gt;✈️ &lt;strong&gt;VPN&lt;/strong&gt;: Nekoray, NekoBox&lt;/p&gt;
&lt;p&gt;🖆 &lt;strong&gt;Blog Platform&lt;/strong&gt;: Zola deploy on 4everland and code hosting on GitHub&lt;/p&gt;
&lt;p&gt;⌨️ &lt;strong&gt;Text input&lt;/strong&gt;: Ibus-Rime with &lt;a href=&quot;https://github.com/iDvel/rime-ice&quot;&gt;rime-ice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📖 &lt;strong&gt;Translation app&lt;/strong&gt;: KISS Translator, Deepl&lt;/p&gt;
&lt;p&gt;📚 &lt;strong&gt;Reading app&lt;/strong&gt;: KOReader, Koodo Reader with Z-Library&lt;/p&gt;
&lt;p&gt;🔧 &lt;strong&gt;Screenshot app&lt;/strong&gt;: FlameShot, &lt;a href=&quot;https://github.com/ShareX/ShareX&quot;&gt;ShareX&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>利用 Render 部署 wiki.js</title>
        <link href="https://blog.yon.im/posts/use-render-deploy-wiki-js" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/use-render-deploy-wiki-js</id>
        <published>2023-09-17T00:00:00Z</published>
        <updated>2023-09-17T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;p&gt;（应 &lt;a href=&quot;https://milvoid.com/&quot;&gt;Milvoid&lt;/a&gt; 需求撰写）&lt;/p&gt;
&lt;h2 id=&quot;需要注册使用&quot;&gt;&lt;a href=&quot;#需要注册使用&quot;&gt;需要注册使用：&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://neon.tech/&quot;&gt;https://neon.tech/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://render.com/&quot;&gt;https://render.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://Hetrixtools.com/&quot;&gt;https://Hetrixtools.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;部署&quot;&gt;&lt;a href=&quot;#部署&quot;&gt;部署&lt;/a&gt;&lt;/h2&gt;
&lt;h4 id=&quot;概览&quot;&gt;&lt;a href=&quot;#概览&quot;&gt;概览：&lt;/a&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;Render 作为 ServerLess 服务器运行 wiki.js Docker 容器
wiki.js 通过配置好的 env(环境变量) 连接 NEON Postgres 数据库
配置 HetrixTools 定时检查 部署好的 wiki-js 站点，来实现持续运行（保活）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;开始实战部署&quot;&gt;&lt;a href=&quot;#开始实战部署&quot;&gt;开始实战部署：&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&quot;neon-上的操作&quot;&gt;&lt;a href=&quot;#neon-上的操作&quot;&gt;NEON 上的操作&lt;/a&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创建数据库项目（地区请选择 Oregon）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/1.webp&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;复制所给的环境变量（之后要用）
Tip：可以临时放到 VScode 之类的文本编辑器里&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/2.webp&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Over&lt;/p&gt;
&lt;h4 id=&quot;render-上的操作&quot;&gt;&lt;a href=&quot;#render-上的操作&quot;&gt;Render 上的操作：&lt;/a&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;创建一个 Web Service，
并将我写的 Docker 部署 wiki-js 的 &lt;a href=&quot;https://github.com/gityzon/docker-wiki-js&quot;&gt;Github仓库地址&lt;/a&gt; 填入框中，
然后 &amp;quot;Continue&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/3.webp&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;自定义项目名称（这边演示填入了&amp;quot;wiki-js&amp;quot;），
以及确认项目部署的边缘服务器地区（建议选择 Oregon ，测试中速度表现最好）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/4.webp&quot; alt=&quot;4&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;添加连接 NEON 数据库的环境变量&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/5.webp&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;
&lt;p&gt;运行 wiki-js 所需的环境变量 与 NEON 中所给的名称并不一致，
请参照图片以及以下提示填入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DB_HOST 为 PGHOST
DB_NAME 为 PGDATABASE
DB_PASS 为 PGPASSWORD
DB_USER 为 PGUSER

其他：

DB_PORT 请设为 5432
DB_SSL 请设为 true
DB_TYPE 请设为 postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;建议关闭 Auto-Deploy（自动部署）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/6.webp&quot; alt=&quot;6&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后点下 &amp;quot;Create Web Service&amp;quot;
等待wiki-js部署完成（大概几分钟）&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;出现下图 &amp;quot;Live&amp;quot; 状态，即表示 wiki-js 已成功部署
（方框里的域名是 Render给的 二级域名）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/7.webp&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此时可以先在项目 &amp;quot;Settings&amp;quot; 绑定域名&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/8.webp&quot; alt=&quot;8&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;（此处演示直接使用 Render 预置的域名 进行后续操作）&lt;/p&gt;
&lt;p&gt;这里刚刚部署完可能会提示“网页无法正常运作”
请隔一会刷新一下，等待 wiki-js 服务响应&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/9.webp&quot; alt=&quot;9&quot; /&gt;&lt;/p&gt;
&lt;p&gt;出现了创建管理员界面，请自行创建用户&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/10.webp&quot; alt=&quot;10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Install 后 wiki-js 可能会出现无响应，请等待片刻（此时服务器在初始化数据库，并构建页面树）&lt;/p&gt;
&lt;p&gt;下图即是主界面（Home Page）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/11.webp&quot; alt=&quot;11&quot; /&gt;&lt;/p&gt;
&lt;p&gt;下图是登录界面&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/12.webp&quot; alt=&quot;12&quot; /&gt;&lt;/p&gt;
&lt;p&gt;通过下图操作来设置中文&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/13.webp&quot; alt=&quot;13&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;至此，wiki-js 部署完毕！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下面是使用 HetrixTools 监控 wiki-js 网站 实现保活的教程&lt;/p&gt;
&lt;h4 id=&quot;hetrixtools-上的操作&quot;&gt;&lt;a href=&quot;#hetrixtools-上的操作&quot;&gt;HetrixTools 上的操作：&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;看图自行操作，不多说明&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.yon.im/image/blog/use-render-deploy-wiki-js/14.webp&quot; alt=&quot;14&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;附录&quot;&gt;&lt;a href=&quot;#附录&quot;&gt;附录：&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/requarks/wiki&quot;&gt;https://github.com/requarks/wiki&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>没有希望，没有绝望</title>
        <link href="https://blog.yon.im/posts/no-hope-no-despair" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/no-hope-no-despair</id>
        <published>2023-03-13T00:00:00Z</published>
        <updated>2023-03-13T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/audio.min.css&quot; /&gt;
&lt;figure class=&quot;figure-center&quot;&gt;
  &lt;img src=&quot;https://static.yon.im/image/blog/no-hope-no-despair/To the Moon (Original Game Soundtrack).jpg&quot; alt=&quot;To the Moon (Original Game Soundtrack).jpg&quot;&gt;
  &lt;figcaption&gt;For River - Piano (Johnny&apos;s Version)&lt;/figcaption&gt;
  &lt;audio class=&quot;audio-control&quot; controls&gt;
    &lt;source src=&quot;https://static.yon.im/audio/For%20River%20-%20Piano%20%28Johnny%27s%20Version%29.mp3&quot; type=&quot;audio/mpeg&quot;&gt;
  &lt;/audio&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;　　希望是什么? 是娼妓：&lt;/p&gt;
&lt;p&gt;　　她对谁都蛊惑，将一切都献给&lt;/p&gt;
&lt;p&gt;　　待你牺牲了极多的宝贝——&lt;/p&gt;
&lt;p&gt;　　你的青春——她就弃掉你。&lt;/p&gt;
&lt;p&gt;　　——Sándor Petőfi&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;加缪曾言：「没有对生活的绝望，就没有对生活的热爱。」今日，余将其语稍作更改：「没有对生活的希望，就没有对生活的绝望。」&lt;/p&gt;
&lt;p&gt;固然，希望予人以一时的欣喜与动力。它来自生活遭遇中一点鼓舞人心的发展进步，其背后源自古老基因赋予动物的「环境适应性」。行为结果看似不错，即表明这样的行为有利于所处环境下谋生，于是希望产生，希望又塑造行为，经行轮转，运作不息。然而环境是不断变化的，倘若行为结果不受环境认可，一次又一次，希望幻灭，造就行为调整，再经受环境考验......这个过程既是循环语句，又蕴含无数判断语句，基因自我编程也不过是以大量的基本语句构成。错误与纠正，进化与退化，肯定与否定穿插其间，如同《谜》一文中所写：「我不知道自己在寻找什么，我小心翼翼地为之命名，我收回说过的话，我重复自己的话，我退退进进。」希望便诞生与毁灭在这一次又一次的荒谬经历与不断变化的周边环境之中。「悖谬卷伏在事务深层，如果我侧耳倾听其话语，它就会慢慢地显出身形，眨一眨清澈的小眼睛说：『要怎样生活？且只当......』尽管我寻寻觅觅，所求得的知识却不外如此。」《一体两面》中加缪绝对地向《谜》给出自我回答，也启发了余深入思考。&lt;/p&gt;
&lt;p&gt;那么，这希望何尝不是绝望的前奏？当一个人事业发展，家庭美满，生活蒸蒸日上时，却在某时某刻感到了一丝匮乏感。这匮乏感犹如「海啸前风平浪静」般黯潮涌动，如同《重返提帕萨》所叙：「当一个人好运来临，可以尽情去爱的时候，他的生命就会在尝试重新获得那种激情与启迪的过程中一点点地消磨过去。」这丝匮乏感，即是对当下希望的警觉一瞥：生怕这令人欣喜的进步与发展在新环境下无法持续。然而「人有悲欢离合，月有阴晴圆缺」但凡生活境遇遭受变故，绝望即大概率地滋生于先前令人满怀希望的事物之中。不得不继续书写判断句、循环句，再多体验一点荒谬，积蓄一点经验。「After all, tomorrow is another day.」怀着激励自我的想法渴求再一点希望。&lt;/p&gt;
&lt;p&gt;我们寻寻觅觅，侧耳倾听那来自童年时期即已充斥耳畔的话语：「你长大了要当什么？」「你的梦想是什么？」「如果你成为了XXX，那该多好啊！」「只要上了重点学校，就......」「只要我的儿子/女儿，找到好工作，我就舒服了。」「只要你长大了，你就明白了XXX。」周边人常常在想象之中预设着美好未来，并播撒希望之种。这群体的愚昧记忆至今仍传递着，演绎着，利用有限的希望来限制个体的完善，囚禁精神之自由。芸芸众生深陷希望的茧房之中，一个又一个「只要XXX，我就XXX」的渴念经绝不息，慰藉自我。殊不知人生的大好年华便磨灭在眼前苟且轮回着的希望与绝望。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Put your dreams to sleep for some time because dreams come from past experience of life. Our future should have nothing to do with our past, otherwise we will just recycle the past and think it is the future. Most people&apos;s idea of future is to take a piece of past, apply make up on it and think it is future, a little improved. &lt;/p&gt;
&lt;p&gt;让你的梦想再沉睡一些时间，因为梦想都是基于过往的生命体验。我们的未来和我们的过往不该有任何关系，否则我们只是在循环过往，却还以为那是未来。很多人对未来的概念就是：取一小块过往的碎片，在上面化点妆，然后这就是未来了——一点点改进而已。&lt;/p&gt;
&lt;p&gt;I want to destroy your dreams. Let them be destroyed, so that you aspire to just grow yourself to your full potential.&lt;/p&gt;
&lt;p&gt;我想要摧毁你的梦，让它们被摧毁掉吧，这样你会渴望只是去成长，实现你的全部潜能。&lt;/p&gt;
&lt;p&gt;——Sadhguru&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;存在于想象中的希望是局限的， 若以局限之物来塑造人的行为，那么完全的个人发展便无从谈起。而绝望也不过是有限累积下生命不满之咆哮，那丝阴魂不散的匮乏感终将到来并支配渴求希望的执迷之徒。&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>Powered by Albert Camus</title>
        <link href="https://blog.yon.im/posts/powered-by-albert-camus" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/powered-by-albert-camus</id>
        <published>2023-02-26T00:00:00Z</published>
        <updated>2023-02-26T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/audio.min.css&quot; /&gt;
&lt;figure class=&quot;figure-center&quot;&gt;
  &lt;img src=&quot;https://static.yon.im/image/blog/powered-by-albert-camus/Paragon.jpg&quot; alt=&quot;Paragon&quot;&gt;
  &lt;figcaption&gt;Paragon&lt;/figcaption&gt;
  &lt;audio class=&quot;audio-control&quot; controls&gt;
    &lt;source src=&quot;https://static.yon.im/audio/Paragon%20-%20A.N.O.%E3%80%81Shadowx.mp3&quot; type=&quot;audio/mpeg&quot;&gt;
  &lt;/audio&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;地狱中的普罗米修斯&quot;&gt;&lt;a href=&quot;#地狱中的普罗米修斯&quot;&gt;《地狱中的普罗米修斯》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我们亦然，尽管血气方刚，也如同沉沦在末世的暮年里，有时思念那生生不息的小草和我们不再出于闲情逸致而去探访的橄榄叶，追怀那些自由的果实。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在地球表面的逼仄空间里，现代人确实承受着许许多多的苦难；因为人们被剥夺了食物和温暖，自由仅仅是可望而不可及的奢侈品；人们所能做的就是再多受一点苦，似乎唯一切题的是让自由及其最后一批见证者再多消失一些。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;热爱生活&quot;&gt;&lt;a href=&quot;#热爱生活&quot;&gt;《热爱生活》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;这些国度操持的语言与我内心深处回荡的声音起了共鸣，那也不是因为这语言解答了我的问题，而是因为它让这些问题不再有提出的必要。并没有谢恩的祷告向我唇边涌来，唯有那空无——只有看到被阳光碾碎的风景才可能孳生的空无。没有对生活的绝望，就没有对生活的热爱。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我觉得，如果自己现在睡去，那么每睡一刻就是生命被偷走了一刻，因为正是那些充斥着尚未定形的渴念的时光构成了生命……&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我对生活的全部热爱都在于此：这是对于我可能求而不得之物的默然不语的激情，是隐藏在炽烈之下的苦涩。我每天离开这座回廊时，都觉得像是从自身中被抽离出来，一时间成了绵延不绝的世界上的一个印迹。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;杰米拉的风&quot;&gt;&lt;a href=&quot;#杰米拉的风&quot;&gt;《杰米拉的风》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我的内心还太年轻，以至于还不能谈论死亡。但在我看来，如果我不得不谈到它的话，我会找到在“恐惧”和“沉默”之间的那个合适的词，来表达对于在无望中死亡的有意识的确认。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然后，我相信，真正的、唯一的、一个人时不时投生于其中的文明的进程，存在于创造清醒的死亡。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;常常令我吃惊的是，我们如此迅速地对其他事件进行详细说明，对死亡的想法却极其匮乏。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;很少人意识到，有一种和抛弃无关的拒绝。未来、提高、好工作，像这样的词语在这里是什么意思呢？“心灵的进展”是什么意思？如果我固执地拒绝这个世界所有的“后来”，那是因为我不想放奔现在的财富。我不想相信，死亡是通向另一种生活的大门。对我来说，它是一扇关闭的门。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在这个世界面前，我不愿撒谎，也不想听到谎言。我想到最后一刻一直保持神志清醒，以我全部的嫉妒和恐惧凝视我的死亡。我最害怕死亡的是，它使我和这个世界完全割离了，它使我把自己和活着的人而不是和永恒不变的天空的沉思联系起来。创造有意识的死亡是为了减少世界和我们之间的距离，为了毫无喜悦之情地接受一个圆满，对永远逝去的世界里令人陶醉的景象保持警觉。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;未置可否&quot;&gt;&lt;a href=&quot;#未置可否&quot;&gt;《未置可否》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我从座位上能看到一角天空，白日的云彩已经散尽，夜空中充斥着繁星，清风吹过时微微摇颤。黑夜在我身边缓缓地拍动它厚重的翅膀。今晚我不再属于自己了，这夜晚还有多长呢？在“简单”一词中包含了一种危险的品格。一旦彻底看透了生活，万事都将变得无足轻重，有人因此而希求死亡——今晚，我能理解这样的想法了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我最后看一眼海湾和海上的灯光：的确，在我心中升起的不是对于美好未来的憧憬，而是一种静谧而原始的淡漠，对万事万物淡漠，也对我自己淡漠。但我一定要跳出这贫弱无力、随波逐流的坡道。我需要明晰锐利的头脑。是的，一切都很简单。是人把事情搞复杂了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;一体两面&quot;&gt;&lt;a href=&quot;#一体两面&quot;&gt;《一体两面》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我可以说，并且马上就要说：真正重要的是具备人性，是简单明了。不对，真正重要的是真实，而后一切都会水到渠成，无论人性还是简单。我与这世界合而为一的时候岂不是最真实吗？渴念还不及成形，我的杯子已经盈满了。永恒就在面前，正是我曾希求的。我现在的理想，已不再是幸福快乐，而仅仅是心下了然。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要能正视阳光一如正视死亡，这才是大勇。这燃尽一切的对生活的热爱与这隐秘的绝望是相通的，我又要怎样才能审定其间的连结呢？悖谬蜷伏在事物的深层，如果我侧耳倾听其话语，它就会慢慢地显出身形来，眨一眨清澈的小眼睛，说：“要怎样生活？且只当……”尽管我寻寻觅觅，所求得的知识却不外如此。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;谜&quot;&gt;&lt;a href=&quot;#谜&quot;&gt;《谜》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;没人能说出自己是什么，但人有时能说出自己不是什么。人人希望那些依然探索着的人已经得出了他的结论；干百个声音对他说他已经发现了，然而他明白自己什么也没发现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我不知道自己在寻找什么，我小心翼翼地为之命名，我收回说过的话，我重复自己的话，我退退进进。然而人们坚持要我一劳永逸地把名称术语确定下来，于是我反对：当事物被贴上标签，不就已经失真了吗？这至少是我能勉力言说的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;无论如何，人怎能画地为牢， 说一切毫无意义，说我们必须沉溺于绝对的绝望呢？没把事情弄个水落石出之前，人至少能说，正如没有绝对的唯物主义（因为单是造出这个词，就已经承认世界上除了物质还有别样的存在），完全的虚无主义同样不存在。当你说事事皆荒谬时，你是在表述某种有意义的东西。拒绝承认世上的所有意义，相当于彻底抛弃所有的价值判断。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;海伦的放逐&quot;&gt;&lt;a href=&quot;#海伦的放逐&quot;&gt;《海伦的放逐》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;历史的另一部分可同样归于赫拉克利特言简意赅之语：”自大，进步之殇。“在这位以弗所人的百年之后又历经了多少世纪，苏格拉底，面临被处死的威胁之时，承认自己唯有一个高人一等之处：不懂的东西他绝不装懂。多少年来，生活和思想之典范就是敢于承认目己的无知。忘记了这一点，我们便忘记了阳刚之力。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从某种程度来进，历史并不是治着我们所设想的方向前行。创造和探索的争斗决定了历史的走向。尽管艺术家赤手相搏并为此付出了代价，我们仍希望他们取得胜利。这样，黑暗的哲学将会被打破，其盛蜃也将在炫目耀眼的海上慢慢褪却。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;杏树&quot;&gt;&lt;a href=&quot;#杏树&quot;&gt;《杏树》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;毋庸置疑，我们生活在悲剧时代，然而太多的人把悲剧与绝望混为一谈。劳伦斯说：悲剧应当是砸向苦难的一记重拳。”这是一种健康且直接可行的想法，如今很多现象都欠这般痛揍。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如欲拯救思想，我们必须忽略它的忧郁气质，赞美它的力量与神奇。人类世界遭受着苦难的茶毒，而且似乎将沉溺于此；世界已彻底屈从于邪恶——即尼采所说的沉重之灵魂。我们不要再雪上加霜了，为思想哀哭是徒劳无益的，这样的劳心劳力已经够多了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;重返提帕萨&quot;&gt;&lt;a href=&quot;#重返提帕萨&quot;&gt;《重返提帕萨》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一个又一个的帝国正在分崩瓦解；国与国之间，人与人之间也相互撕咬着对方的喉咙；我们的双手沾满了泥土。我们诞生之初并不知道我们自己是清白无辜的，而现在，尽管我们无心犯罪，但我们却是有了罪行。懂得的越多，这个谜就越纠结。哦，真是可笑啊，这就是为什么我们在乎仁义道德的原因吧。虚弱残疾的我竟还在做着道德的美梦！在那天真无邪的日子里，我甚至从来都不知道存在着这种道德。现在我知道了，但我不符合那道德要求的标准。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当一个人好运袭来可以尽情去爱的时候，他的生命就会在尝试重新获得那种激情与启迪的过程中一点点地消磨过去。放奔美。放弃与之相连的肉欲的快感。一心一意地侍奉不幸，这需要一种我所不具备的高贵品质。但强迫人去排斥美和快感是不现实的。孤立的美感终会化作痴痴的傻笑；孤立的正义终会变成压迫。任何一个旨在侍奉唯一而排除他者。甚至连自己都弃之不顾的人最终只是两次侍奉了非正义。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;提帕萨的婚礼&quot;&gt;&lt;a href=&quot;#提帕萨的婚礼&quot;&gt;《提帕萨的婚礼》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;从某种意义上讲，我在这里下的赌注，实际上是我的生命，这生命有温暖的石头的味道，充满了大海的叹息和逐渐响起来的蟋蟀的歌唱。蔚蓝的天空下，微凉的风轻轻拂过。我放肆地热爱着这种生命，我要大声说出它的意义：它让我感觉到作为一个人类的骄傲。但是人们经常告诉我说没有什么可值得骄傲的。不，是有那么一些事情的：这太阳，这大海，我跃动的年轻的心，海水的威味，这壮丽的景象以及其中由柔美和光荣混合而成的蓝色和黄色。我需要力量和资源，来拥有它们。这里的所有东西都让我保持着自身的完整，我不会有一丝退让，也不会蒙上假面：耐心而勤奋地学习如何生活对我来说就已足够，那些所谓的生活艺术没有什么用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一个人对着一个景观看足够长的时间，总会看够的；同样地，一个人需要很长时间，才会看够它。山脉。天空，海洋就像一张张脸，我们通过观看发现它们是空虚还是辉煌，而不是通过理解。但是，为了富于说服力，每一张脸必须被当做全新的来观看。人们总是抱怨疲倦得太快；我们觉得世界似乎是全新的，其实仅仅是因为我们忘记了它——人们应该对这一点感到惊奇。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;魂销神灭&quot;&gt;&lt;a href=&quot;#魂销神灭&quot;&gt;《魂销神灭》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一切都要把我丢回到这日复一日的生活中，此间的万事万物都沾染上了我的痛苦。言辞和举止织就了一道习惯的帷幕，心灵在其中舒服得昏昏欲睡；然而这帷幕缓缓地升了起来，最终露出了一副惨白的面容：忧惧。人与自己面对面相处，我敢断定他不会幸福……但旅行给人的启迪正在于此。人与眼中的所见发生了尖锐的矛盾，这颗心灵失去了森严的壁垒，大地的乐曲才更容易乘虚而人。外壳完全和剥落之际，最不起眼的一棵孤单单的树也变成了最为娇弱动人的景致。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在这朗照无遗的了悟面前万事万物汇集为一，我的生活成了一个不可分的整体，或则全盘接受，或则一概摒弃。我需要一种恢宏伟岸的气概；当我深切的绝望与此处冠绝天下的风景中暗藏的淡漠相争持的时候，这一愿望终于得到了满足。由此我汲取力量，要让勇毅与明辩同时并存。这一目标既困难又似荒诞不经，足以满足我的胃口了。或许我现在语涉浮夸，然而当时的感受的确是绝无虚假。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;第一人&quot;&gt;&lt;a href=&quot;#第一人&quot;&gt;《第一人》&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;人不能活得太真实——太明白——这样做的人，势必脱离其他人，他再也不能分享他们的任何幻想。他成了个怪物——这便是我的写照。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有些人存在就证实世界存在的意义，他们活在世上本身，就能帮助人活下去。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;首要的一条，就是不绝望。不要听信叫嚷到了末日的那帮人。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
    <entry>
        <title>关于记忆的一点思绪</title>
        <link href="https://blog.yon.im/posts/thoughs-about-memories" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/thoughs-about-memories</id>
        <published>2022-10-20T00:00:00Z</published>
        <updated>2022-10-20T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/audio.min.css&quot; /&gt;
&lt;figure class=&quot;figure-center&quot;&gt;
  &lt;img src=&quot;https://static.yon.im/image/blog/thoughs-about-memories/g.y.m-the-right-path%28g.y.m-bootleg%29.jpg&quot; alt=&quot;g.y.m-the-right-path(g.y.m-bootleg)&quot;&gt;
  &lt;figcaption&gt;Thomas Greenberg-The Right Path(G.Y.M Bootleg)（G.Y.M Remix）&lt;/figcaption&gt;
  &lt;audio class=&quot;audio-control&quot; controls&gt;
    &lt;source src=&quot;https://static.yon.im/audio/Thomas%20Greenberg-The%20Right%20Path%28G.Y.M%20Bootleg%29%EF%BC%88G.Y.M%20Remix%EF%BC%89%20-%20G.Y.M.mp3&quot; type=&quot;audio/mpeg&quot;&gt;
  &lt;/audio&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The ordinary everyday consciousness that we have leaves out more than it takes in. And because of this, it leaves out things that are terribly important. It leaves out things that would—if we did know them—allay our anxieties, and fears, and horrors, and if we could extend our awareness, you see, to include those things that we leave out, we would have a deep interior peace.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://genius.com/Alan-watts-the-web-of-life-part-1-what-did-you-forget-annotated&quot;&gt;The Web of Life, Part 1: What Did You Forget?&lt;/a&gt;——Alan Watts&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;从前，余以为人的记忆是牢靠的，这大抵是源于昔日那个年少轻狂，忘乎所以之人的局限认知。旧日经历历历在目，今日所见见后即逝，残垣断壁般的记忆倏地火花迸现。富兰克林曾说：「有的人25岁就死了，只是到75岁才埋葬。」“为什么？因为大部分人只有在人生前段真正活过，后段不过是在不断重复过去的自己。”也许你偶时也有同样的感受：曾经热爱的，为之疯狂的，如今已经退烧，不再感冒；曾经令你惊奇得&amp;quot;Unbelievable&amp;quot;的，现在再碰见却没什么感觉了。余的想法是：人生的大部分时间的确是在不断重复曾经的体验与过去的行为。然而，正是经历了太多同样或类似的事物，这个不断重复的过程便在逐渐消磨着人的意志，进而使你的意识带着越来越少的投入，最终达到做某些事不经思考便可以无意识地完成。而在缺乏意识的进程中，记忆便失去效力。就像人在睡眠时，有一大段无意识的时间中不会有任何记忆，在日常生活中无意识&amp;quot;神游&amp;quot;般地度过，这段时间也不会带着清晰、深刻的记忆。这便是残垣断壁般的记忆形成之缘故。&lt;/p&gt;
&lt;p&gt;所以，当你正以漫不经心的态度带着微弱意识做事情时，就是在助长破碎记忆的形成，令其向支离破碎的方向发展。短时看来不会有多大影响，然而长此以往，由于某些时刻记忆的缺失，你不经意之中遗漏了一些事物，一些可能很重要的事物。而正是这些重要的细节，可能就会对事情的成败起着举足轻重的作用。无意识的行为好比是在高速路上闭眼开车，碰撞与破裂即是不可避免的结果。&lt;/p&gt;
&lt;p&gt;有时，你被安排做着不情愿的事情，或者不得不去做并不自发喜欢的事情。这类情况通常都导向同一个结果：那就是你将带着更少的投入、更少的意识、更少的记忆去执行。不断重复，重复再重复，再热忱的心也会被浇灭，再精力充沛的人也将垂头丧气，疲于应付。而这，便大抵是人记忆与激情磨灭过程的概述。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A life lived of choice is a life of conscious action.&lt;/p&gt;
&lt;p&gt;有选择的生活就是有意识的生活。&lt;/p&gt;
&lt;p&gt;A life lived of chance is a life of unconscious creation.&lt;/p&gt;
&lt;p&gt;随意的生活是没有意识创造的生活。&lt;/p&gt;
&lt;p&gt;——Neale Donald Walsch&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    </entry>
    <entry>
        <title>Linux 安装 Java 通法</title>
        <link href="https://blog.yon.im/posts/linux-install-java" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/linux-install-java</id>
        <published>2022-04-03T00:00:00Z</published>
        <updated>2022-04-03T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;hr /&gt;
&lt;p&gt;本文更新于2023/12/28：更换为最新的 Java 下载链接；&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;本文以安装 JDK 8, JDK 17 为例&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;jdk-8&quot;&gt;&lt;a href=&quot;#jdk-8&quot;&gt;JDK 8:&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，为 JDK 8 创建一个目录。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir /usr/local/java-8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其次，下载 JDK 8&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://download.bell-sw.com/java/8u392+9/bellsoft-jdk8u392+9-linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后，使用&lt;a href=&quot;http://www.runoob.com/linux/linux-comm-tar.html&quot;&gt;tar命令&lt;/a&gt;将&lt;code&gt;bellsoft-jdk8u392+9-linux-amd64.tar.gz&lt;/code&gt;文件解压缩到先前创建的目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -zxvf bellsoft-jdk8u392+9-linux-amd64.tar.gz -C /usr/local/java-8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后，运行以下命令以创建新的替代方案：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;update-alternatives --install &amp;quot;/usr/bin/java&amp;quot; &amp;quot;java&amp;quot; &amp;quot;/usr/local/java-8/jdk8u392/bin/java&amp;quot; 1500
update-alternatives --install &amp;quot;/usr/bin/javac&amp;quot; &amp;quot;javac&amp;quot; &amp;quot;/usr/local/java-8/jdk8u392/bin/javac&amp;quot; 1500
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;jdk-17&quot;&gt;&lt;a href=&quot;#jdk-17&quot;&gt;JDK 17&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，为 JDK 17 创建一个目录。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir /usr/local/java-17
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其次，下载 JDK 17&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://download.bell-sw.com/java/17.0.9+11/bellsoft-jdk17.0.9+11-linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后，使用&lt;a href=&quot;http://www.runoob.com/linux/linux-comm-tar.html&quot;&gt;tar命令&lt;/a&gt;将&lt;code&gt;bellsoft-jdk17.0.9+11-linux-amd64.tar.gz&lt;/code&gt;文件解压缩到先前创建的目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -zxvf bellsoft-jdk17.0.9+11-linux-amd64.tar.gz -C /usr/local/java-17
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后，运行以下命令以创建新的替代方案：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;update-alternatives --install &amp;quot;/usr/bin/java&amp;quot; &amp;quot;java&amp;quot; &amp;quot;/usr/local/java-17/jdk-17.0.9/bin/java&amp;quot; 1600
update-alternatives --install &amp;quot;/usr/bin/javac&amp;quot; &amp;quot;javac&amp;quot; &amp;quot;/usr/local/java-17/jdk-17.0.9/bin/javac&amp;quot; 1600
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DONE.&lt;/p&gt;
&lt;h2 id=&quot;附录&quot;&gt;&lt;a href=&quot;#附录&quot;&gt;附录：&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/bell-sw/Liberica&quot;&gt;https://github.com/bell-sw/Liberica&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>Hello World!</title>
        <link href="https://blog.yon.im/posts/hello-world" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/hello-world</id>
        <published>2022-03-28T00:00:00Z</published>
        <updated>2022-03-28T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;p&gt;欢迎使用WordPress。这是您的第一篇文章。请编辑或删除它,然后开始写作!&lt;/p&gt;
</content>
    </entry>
    <entry>
        <title>Markdown Test</title>
        <link href="https://blog.yon.im/posts/markdown-test" rel="alternate" type="text/html"/>
        <id>https://blog.yon.im/posts/markdown-test</id>
        <published>2022-01-01T00:00:00Z</published>
        <updated>2022-01-01T00:00:00Z</updated>
        <summary type="text"></summary>
        <content type="html">&lt;h1 id=&quot;markdown-test&quot;&gt;&lt;a href=&quot;#markdown-test&quot;&gt;Markdown Test&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&quot;basic-test&quot;&gt;&lt;a href=&quot;#basic-test&quot;&gt;Basic-Test&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;code-block&quot;&gt;&lt;a href=&quot;#code-block&quot;&gt;Code Block&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
    println!(&amp;quot;Hello World&amp;quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;quote&quot;&gt;&lt;a href=&quot;#quote&quot;&gt;Quote&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Two things are infinite: the universe and human stupidity; and I&apos;m not sure about the universe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Albert Einstein&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;code-tags&quot;&gt;&lt;a href=&quot;#code-tags&quot;&gt;Code tags&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Lorem ipsum &lt;code&gt;dolor&lt;/code&gt; sit amet, &lt;code&gt;consectetur adipiscing&lt;/code&gt; elit.
&lt;code&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;table-of-contents-test&quot;&gt;&lt;a href=&quot;#table-of-contents-test&quot;&gt;Table-Of-Contents-Test&lt;/a&gt;&lt;/h2&gt;
&lt;h1 id=&quot;heading-1&quot;&gt;&lt;a href=&quot;#heading-1&quot;&gt;Heading 1&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;&lt;a href=&quot;#heading-2&quot;&gt;Heading 2&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus.&lt;/p&gt;
&lt;h3 id=&quot;heading-3&quot;&gt;&lt;a href=&quot;#heading-3&quot;&gt;Heading 3&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi.&lt;/p&gt;
&lt;h4 id=&quot;heading-4&quot;&gt;&lt;a href=&quot;#heading-4&quot;&gt;Heading 4&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;math-symbols-test&quot;&gt;&lt;a href=&quot;#math-symbols-test&quot;&gt;Math-Symbols-Test&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;inline-math&quot;&gt;&lt;a href=&quot;#inline-math&quot;&gt;Inline Math&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$(a+b)^2$ = $a^2 + 2ab + b^2$&lt;/li&gt;
&lt;li&gt;A polynomial P of degree d over $\mathbb{F}_p$ is an expression of the form
$P(s) = a_0 + a_1 . s + a_2 . s^2 + ... + a_d . s^d$ for some
$a_0,..,a_d \in \mathbb{F}_p$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;displayed-math&quot;&gt;&lt;a href=&quot;#displayed-math&quot;&gt;Displayed Math&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;$$
p := (\sum_{k∈I}{c_k.v_k} + \delta_v.t(x))·(\sum_{k∈I}{c_k.w_k} + \delta_w.t(x)) − (\sum_{k∈I}{c_k.y_k} + \delta_y.t(x))
$$&lt;/p&gt;
</content>
    </entry>
</feed>