<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ace-Radom's Blog</title><link>https://ace-radom.io/</link><description>Recent content on Ace-Radom's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ace-radom.io/index.xml" rel="self" type="application/rss+xml"/><item><title>解题笔记——德国联邦数竞2025年第二轮第四题</title><link>https://ace-radom.io/p/%E8%A7%A3%E9%A2%98%E7%AC%94%E8%AE%B0%E5%BE%B7%E5%9B%BD%E8%81%94%E9%82%A6%E6%95%B0%E7%AB%9E2025%E5%B9%B4%E7%AC%AC%E4%BA%8C%E8%BD%AE%E7%AC%AC%E5%9B%9B%E9%A2%98/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/%E8%A7%A3%E9%A2%98%E7%AC%94%E8%AE%B0%E5%BE%B7%E5%9B%BD%E8%81%94%E9%82%A6%E6%95%B0%E7%AB%9E2025%E5%B9%B4%E7%AC%AC%E4%BA%8C%E8%BD%AE%E7%AC%AC%E5%9B%9B%E9%A2%98/</guid><description>&lt;style&gt;
 .article-page .main-article .article-content h2::before,
 .article-page .main-article .article-content h3::before,
 .article-page .main-article .article-content h4::before {
 content: attr(data-heading-num) " ";
 margin-right: 4px;
 color: inherit;
 }
&lt;/style&gt;

&lt;script&gt;
 document.addEventListener("DOMContentLoaded", () =&gt; {
 const articleContent = document.querySelector('.article-page .main-article .article-content');
 if (!articleContent) return;

 const headings = articleContent.querySelectorAll('h2, h3, h4');
 let counts = { h2: 0, h3: 0, h4: 0 };

 headings.forEach(heading =&gt; {
 let numStr = "";

 if (heading.tagName === 'H2') {
 counts.h2++;
 counts.h3 = 0;
 counts.h4 = 0;
 numStr = `${counts.h2}.`;
 }
 else if (heading.tagName === 'H3') {
 counts.h3++;
 counts.h4 = 0;
 numStr = `${counts.h2}.${counts.h3}`;
 }
 else if (heading.tagName === 'H4') {
 counts.h4++;
 numStr = `${counts.h2}.${counts.h3}.${counts.h4}`;
 }

 heading.setAttribute('data-heading-num', numStr);
 });

 const refLinks = document.querySelectorAll('.dynamic-ref-link');

 
 refLinks.forEach(link =&gt; {
 const targetId = link.getAttribute('data-target');
 const targetEl = document.getElementById(targetId);

 if (targetEl &amp;&amp; targetEl.hasAttribute('data-heading-num')) {
 link.innerText = `第 ${targetEl.getAttribute('data-heading-num').replace(/\.$/, "")} 节`;
 } else {
 link.innerText = "[section not found!]";
 link.style.color = "red";
 }
 });
 });
&lt;/script&gt;
&lt;p&gt;在我做过的所有德国数学国赛（Bundeswettbewerb Mathematik，简称 BWM，直译为联邦数学竞赛）题目中，2025 年第二轮的第四题无疑是最难也是最有意思的一道。虽然在解题的过程中数次有过放弃的念头——因为必须承认这种难度的题目我确实无法在一两天内攻克，但在真正找到方向后逐步抽丝剥茧，得出与题干等价但简单许多的另一种表述方式后，
所得到的成就感也是在曾经的竞赛经历中从未有过的。&lt;/p&gt;
&lt;p&gt;本篇解题笔记主要回顾本人的完整思路，整理全部解题过程并结合标答修补原证明中的部分漏洞。因此解题过程中提到的部分定理将不给出具体证明，部分简单证明则为方便排版默认折叠。&lt;/p&gt;
&lt;h2 id="题干"&gt;题干
&lt;/h2&gt;&lt;p&gt;德语题干原文如下：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Eine ganze Zahl $d &amp;gt; 1$ heiße steinig, wenn man d Steine auf die Felder eines $d \times d$-Schachbretts so legen kann,
dass sich auf keinem Feld mehr als ein Stein befindet und auf dem Feld in Zeile $x$ und Spalte $y$ genau dann ein Stein liegt,
wenn die ganze Zahl $x^3 - y^2$ durch $d$ teilbar ist ($1 \le x, y \le d$).&lt;/p&gt;
&lt;p&gt;Bestimme die kleinste und die größte Anzahl an steinigen Zahlen, die unter zehn aufeinanderfolgenden
positiven ganzen Zahlen vorkommen können.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;中文译文（非直译）如下：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;有整数 $d &amp;gt; 1$ 和一个 $d \times d$ 的棋盘。棋盘的每个方格内至多放一枚石子，且仅当第 $x$ 行第 $y$ 列的方格满足 $x^3 - y^2$ 能被 $d$ 整除（其中 $1 \le x, y \le d$）时，
才会在该方格内放一枚石子。若能恰将 $d$ 枚石子放在这个棋盘内，则称该整数为“石性数”。&lt;/p&gt;
&lt;p&gt;试求在任意十个连续正整数中，可能出现的“石性数”的最小个数与最大个数。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="初步思路"&gt;初步思路
&lt;/h2&gt;&lt;p&gt;题目中对“石性数”的定义显然是很难直接用数学方法处理的。因此我们需要对这个定义进行简化，写出其等价的代数表达形式。&lt;/p&gt;
&lt;h3 id="题干的等价代数表达"&gt;题干的等价代数表达
&lt;/h3&gt;&lt;p&gt;利用集合可以很好的描述那些应该放石头的格子，也就是那些满足条件的 $(x, y)$ 对。&lt;/p&gt;
&lt;p&gt;我们定义集合 $S_d$，有：&lt;/p&gt;
$$
S_d = \left\{ (x,y) \;|\; 1 \leq x,y \leq d, \; d \;|\; (x^3-y^2) \right\}
$$&lt;p&gt;既然 $x^3 - y^2$ 能被 $d$ 整除，则易见 $x^3$ 与 $y^2$ 除以 $d$ 同余。因此集合定义可简化为：&lt;/p&gt;
$$
S_d = \left\{ (x,y) \;|\; 1 \leq x,y \leq d, \; x^3 \equiv y^2 \Mod{d} \right\}
$$&lt;p&gt;显然当 $|S_d| = d$ 时，整数 $d$ 是“石性数”。&lt;/p&gt;
&lt;h3 id="确定满足条件的-x-y-对的数量"&gt;确定满足条件的 $(x, y)$ 对的数量
&lt;/h3&gt;&lt;p&gt;在将题干转换为等价代数表达的过程中我们不难发现，原本贴近于生活表达的题干已经被抽象成了一个同余问题。这不难让人想到中国剩余定理。&lt;/p&gt;
&lt;p&gt;中国剩余定理的一个简单表达是：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;有任意两两互质的整数 $m_1, m_2, \cdots, m_n$。则对任意整数 $r_1, r_2, \cdots, r_n$，以下一元同余方程组 $(S)$：&lt;/p&gt;
$$
(S): \begin{cases}
 x \bmod m_1 = r_1 \\
 x \bmod m_2 = r_2 \\
 \quad\vdots \\
 x \bmod m_n = r_n
\end{cases}
$$&lt;p&gt;
在模 $M = m_1m_2\cdots m_n$ 的剩余系中有唯一解。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="用余数对替代-x-y-对"&gt;用余数对替代 $(x, y)$ 对
&lt;/h4&gt;&lt;p&gt;依照中国剩余定理的思路，我们设 $d$ 为两互质的正整数 $m$ 和 $n$ 的乘积。由于任何正整数皆可被质因数分解且不同质数之间显然互质，因此对任意 $d$ 总能找到对应的 $m$，$n$。&lt;/p&gt;
&lt;p&gt;则显然有：&lt;/p&gt;
&lt;span id="eq-1"&gt;&lt;/span&gt;
$$
x^3 \equiv y^2 \Mod{d} \Longleftrightarrow \begin{cases}
 x^3 \equiv y^2 \Mod{m} \\
 x^3 \equiv y^2 \Mod{n}
\end{cases} \tag{1}
$$&lt;p&gt;不妨将 $x$ 与 $y$ 模 $m$ 的结果构造为余数对 $(x_m, y_m)$。不难得到推论：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;若 $x_m^3 \equiv y_m^2 \Mod{m}$ 成立，则所有对应的 $x$，$y$ 皆满足 $x^3 \equiv y^2 \Mod{m}$。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;details&gt;
&lt;summary&gt;证明如下：&lt;/summary&gt;
$$
\begin{align*}
 \because\quad &amp; x \equiv x_m \Mod{m}, \; y \equiv y_m \Mod{m} \\
 \therefore\quad &amp; x = x_m+km, \; y = y_m+lm \; (k,l \in \mathbb{Z}) \\
 &amp;
 \begin{aligned}
 x^3 - y^2 &amp;= (x_m+km)^3 - (y_m+lm)^2 \\
 &amp;= x_m^3 + 3x_m^2 \cdot km + 3x_m \cdot k^2m^2 + k^3m^3 - y_m^2 - 2y_m \cdot lm - l^2m^2 \\
 &amp;= x_m^3 - y_m^2 + m \cdot (\underbrace{3x_m^2 \cdot k + 3x_m \cdot k^2m + k^3m^2 - 2y_m \cdot l - l^2m}_{\in \Z}) = A
 \end{aligned} \\
 \because\quad &amp; x_m^3 \equiv y_m^2 \Mod{m} \\
 \therefore\quad &amp; x^3 - y^2 \equiv A \equiv x_m^3 - y_m^2 \equiv 0 \Mod{m} \\
 \Longrightarrow\quad &amp; x^3 \equiv y^2 \Mod{m}
\end{align*}
$$&lt;/details&gt;
&lt;p&gt;通过这种方式，我们不再需要关注所有 $(x, y)$ 对，只需在模 $m$ 的剩余系中选出满足条件的余数对 $(x_m, y_m)$ 即可。这大大削减了我们需要判定的值对的数量。&lt;/p&gt;
&lt;p&gt;由于显然有 $0 \leq x_m, y_m \leq m$，我们将这些余数对归入集合 $S_m$ 中。对 $n$ 进行同样的操作，可以得到集合 $S_n$。&lt;/p&gt;
&lt;h4 id="根据集合-s_m-与-s_n-计算集合-s_d-的基数"&gt;根据集合 $S_m$ 与 $S_n$ 计算集合 $S_d$ 的基数
&lt;/h4&gt;&lt;p&gt;分别从集合 $S_m$，$S_n$ 中取出余数对 $(x_m, y_m)$，$(x_n, y_n)$。&lt;/p&gt;
&lt;p&gt;由中国剩余定理推导易知，对任意正整数，若其对两个互质的正整数 $m$ 和 $n$ 取模的余数确定，则其对 $m \cdot n$ 取模的余数也唯一确定。这说明我们可以由余数对$(x_m, y_m)$ 和 $(x_n, y_n)$ 得到一个唯一的余数对 $(x_d, y_d)$。这个余数对代表了 $x$ 和 $y$ 对 $m \cdot n$（即 $d$）取模的结果。&lt;/p&gt;
&lt;p&gt;由&lt;a class="link" href="#eq-1" &gt;式 $(1)$&lt;/a&gt; 和 $x$，$y$ 的取值范围易见，此处的余数对 $(x_d, y_d)$ 实际上就是符合条件的 $(x, y)$ 对。上文也提到这样得到的对是唯一的。&lt;/p&gt;
&lt;p&gt;这意味着，集合 $S_m$ 中的所有余数对可以一一和集合 $S_n$ 中的余数对配对得到 $(x, y)$ 对，且这些值对不会重复。因此有：&lt;/p&gt;
&lt;span id="eq-2"&gt;&lt;/span&gt;
$$
|S_d| = |S_m| \cdot |S_n| \; (m,n \leq d, \; \gcd(m,n)=1) \tag{2}
$$&lt;h2 id="Steinig_Nummer_Bedingung"&gt;哪些数是“石性数”？
&lt;/h2&gt;&lt;p&gt;本节将讨论“石性数” $d$ 需要满足的必要条件。&lt;/p&gt;
&lt;h3 id="Primzahl_sind_steinig"&gt;所有质数都是“石性数”
&lt;/h3&gt;&lt;p&gt;为方便理解，本小节中均用 $p$ 代替 $d$，以标明 $d$ 是一个质数。&lt;/p&gt;
&lt;p&gt;首先讨论唯一的偶质数 2，易见其是石性数。因此在本小节的剩余部分我们只需要讨论奇质数的情况。&lt;/p&gt;
&lt;p&gt;我们首先假定一个前提：$x^3 \equiv y^2 \equiv 0 \Mod{p}$。&lt;/p&gt;
&lt;p&gt;由于 $p$ 是质数，所以显然只有一个 $(x, y)$ 对能满足这个条件，即 $x = y = p$。所以接下来，我们只需继续讨论 $x^3$ 与 $y^2$ 模 $p$ 不为 0 的情况。&lt;/p&gt;
&lt;p&gt;假设 $x^3 \equiv y^2 \equiv a \Mod{p}$，则易知 $a \in \{ 1, 2, \cdots, p-1 \}$。因此我们的任务可以被简化为寻找那些使 $x^3 \equiv a \Mod{p}$ 和 $y^2 \equiv a \Mod{p}$ 同时有解的 $a$。&lt;/p&gt;
&lt;p&gt;我们引入一个引理（证明见&lt;a href="#Beweis_Lamma_1" class="dynamic-ref-link" data-target="Beweis_Lamma_1" style="color: var(--accent-color); font-weight: bold; text-decoration: none;"&gt;
 [reading...]
&lt;/a&gt;）：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;引理一：对于质数 $p$ 和非零余数 $a$，若高次同余方程 $x^n \equiv a \Mod{p}$ 有解，则它在模 $p$ 的剩余系中恰有 $\gcd(n, p-1)$ 个不同的解。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;因此：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于 $x^3 \equiv a \Mod{p}$，我们可知每个使得 $x$ 有解的 $a$ 都能提供 $\gcd(3, p-1)$ 个解。&lt;/li&gt;
&lt;li&gt;对于 $y^2 \equiv a \Mod{p}$，我们可知每个使得 $y$ 有解的 $a$ 都能提供 $\gcd(2, p-1)$ 个解。由于我们正在讨论奇质数，所以 $p-1$ 定为偶数，由此可知 $\gcd(2, p-1) = 2$。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们将 $X(a)$ 定义为满足 $x^3 \equiv a \Mod{p}$ 的 $x$ 的个数，$Y(a)$ 定义为满足 $y^2 \equiv a \Mod{p}$ 的 $y$ 的个数。易见对给定余数 $a$，对应的满足同余条件的 $(x, y)$ 对有 $X(a) \cdot Y(a)$ 个。&lt;/p&gt;
&lt;p&gt;由此可得：&lt;/p&gt;
$$
|S_p| = \sum^{p-1}_{a=0} X(a) \cdot Y(a)
$$&lt;p&gt;当 $a$ 为 0 时，上文已经提到仅有一组解 $(p, p)$。由此可知 $X(0) \cdot Y(0) = 1$。&lt;/p&gt;
&lt;p&gt;而对于所有 $a &amp;gt; 0$ 的情况，要使得该 $a$ 能够贡献解对，则显然需要满足 $X(a) &amp;gt; 0, Y(a) &amp;gt; 0$。这意味着 $a$ 必须同时是模 $p$ 的二次剩余和三次剩余，由此可知 $a$ 必须是模 $p$ 的六次剩余，即一定存在正整数 $u$ 使得 $u^6 \equiv a \Mod{p}$ 成立。&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;证明如下：&lt;/summary&gt;
&lt;p&gt;由原根存在性定理可知，模 $p$ 的简化剩余系构成一个乘法循环群 $(\Z/p\Z)^\times$。&lt;/p&gt;
&lt;p&gt;设原根为 $g$，则有 $a \equiv g^k \Mod{p}$。已知余数 $a$ 既是二次剩余也是三次剩余，故指数 $k$ 必须同时满足 $\Divisiable{k}{2}$ 和 $\Divisiable{k}{3}$。由于 2 与 3 互质，所以必有 $\Divisiable{k}{6}$，即 $a$ 也必定是六次剩余。得证。&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;由引理一易证，在模 $p$ 的剩余系中存在 $\frac{p-1}{\gcd(6, p-1)}$ 个六次剩余。而由于当 $X(a)$ 和 $Y(a)$ 均不为 0 时它们的值确定，则易得：&lt;/p&gt;
$$
|S_p| = \frac{p-1}{\gcd(6, p-1)} \cdot 2\gcd(3, p-1) + 1
$$&lt;p&gt;由于上文提到此处我们仅讨论奇质数，所以 $\Divisiable{p-1}{2}$ 恒成立。因此有：&lt;/p&gt;
$$
\begin{align*}
 |S_p| &amp;= \frac{p-1}{\gcd(6, p-1)} \cdot \gcd(6, p-1) + 1 \\
 &amp;= p - 1 + 1 \\
 &amp;= p
\end{align*}
$$&lt;p&gt;综合本小节一开始对偶质数 2 的讨论，得到结论：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;所有质数都是“石性数”。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="Primzahlpotenz_sind_nicht_steinig"&gt;任意质数的多次幂都不是“石性数”
&lt;/h3&gt;&lt;p&gt;在本节中我们将讨论所有具有 $p^e$ 形式的合数，即任意质数的多次幂。其中 $e &amp;gt; 1$。&lt;/p&gt;
&lt;h4 id="情况xy-均能被-pe-整除"&gt;情况：$x$，$y$ 均能被 $p^e$ 整除
&lt;/h4&gt;&lt;p&gt;这种情况要求有 $x^3 \equiv y^2 \equiv 0 \Mod{p^e}$。&lt;/p&gt;
&lt;p&gt;我们引入一个引理（证明见&lt;a href="#Beweis_Lamma_2" class="dynamic-ref-link" data-target="Beweis_Lamma_2" style="color: var(--accent-color); font-weight: bold; text-decoration: none;"&gt;
 [reading...]
&lt;/a&gt;）：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;引理二：有正整数 $x$，$n$ 和一质数的多次幂 $p^e$。若 $x^n$ 能被 $p^e$ 整除，则 $x$ 能被 $p^{\lceil e/n \rceil}$ 整除。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;由此得到推论：&lt;/p&gt;
$$
x^3 \equiv y^2 \equiv 0 \Mod{p^e} \Longrightarrow \begin{cases}
 \Divisiable{x}{p^{\lceil e/3 \rceil}} \\
 \Divisiable{y}{p^{\lceil e/2 \rceil}}
\end{cases}
$$&lt;p&gt;易得：&lt;/p&gt;
$$
\begin{align*}
 \begin{cases}
 x = k \cdot p^{\lceil e/3 \rceil}, &amp;k \in \left\{1,2,\dots,p^{e-\lceil e/3 \rceil}\right\} \\
 y = l \cdot p^{\lceil e/2 \rceil}, &amp;l \in \left\{1,2,\dots,p^{e-\lceil e/2 \rceil}\right\}
 \end{cases}
\end{align*}
$$&lt;p&gt;可见 $k$ 和 $l$ 的可能取值分别有 $p^{e-\lceil e/3 \rceil}$ 和 $p^{e-\lceil e/2 \rceil}$ 个，从而能构造出相同数量的 $x$ 和 $y$。由于 $x$ 和 $y$ 可以两两配对，所以在本小节条件下贡献的满足题目条件的 $(x, y)$ 对的数量 $N'$ 为：&lt;/p&gt;
$$
\begin{align*}
 N' &amp;= p^{e-\lceil e/3 \rceil} \cdot p^{e-\lceil e/2 \rceil} \\
 &amp;= p^{2e-\lceil e/3 \rceil - \lceil e/2 \rceil}
\end{align*}
$$&lt;p&gt;易见：&lt;/p&gt;
$$
N' \geq p^e
$$&lt;details&gt;
&lt;summary&gt;证明如下：&lt;/summary&gt;
&lt;p&gt;需证明：$p^{2e-\lceil e/3 \rceil - \lceil e/2 \rceil} \geq p^e$。&lt;/p&gt;
&lt;p&gt;显然命题可以被等价转换为：&lt;/p&gt;
$$
\left\lceil \frac{e}{3} \right\rceil + \left\lceil \frac{e}{2} \right\rceil \leq e \; (e &gt; 1)
$$&lt;p&gt;设 $e = 6k + r$，其中 $k$，$r$ 均为整数且 $k \geq 0$，$0 \leq r \leq 5$。&lt;/p&gt;
&lt;p&gt;则有：&lt;/p&gt;
$$
\frac{e}{3} = \frac{6k+r}{3} = 2k + \frac{r}{3} \Longrightarrow \left\lceil \frac{e}{3} \right\rceil = 2k + \left\lceil \frac{r}{3} \right\rceil
$$&lt;p&gt;且：&lt;/p&gt;
$$
\frac{e}{2} = \frac{6k+r}{2} = 3k + \frac{r}{2} \Longrightarrow \left\lceil \frac{e}{2} \right\rceil = 3k + \left\lceil \frac{r}{2} \right\rceil
$$&lt;p&gt;由此可推出：&lt;/p&gt;
$$
\begin{align*}
 \left\lceil \frac{e}{3} \right\rceil + \left\lceil \frac{e}{2} \right\rceil &amp;= 2k + \left\lceil \frac{r}{3} \right\rceil + 3k + \left\lceil \frac{r}{2} \right\rceil \\
 &amp;= 5k + \left\lceil \frac{r}{3} \right\rceil + \left\lceil \frac{r}{2} \right\rceil
\end{align*}
$$&lt;p&gt;由于我们规定了 $r$ 的取值范围，我们可以用表格列出所有情况：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: center"&gt;$r$&lt;/th&gt;
					&lt;th style="text-align: center"&gt;0&lt;/th&gt;
					&lt;th style="text-align: center"&gt;1&lt;/th&gt;
					&lt;th style="text-align: center"&gt;2&lt;/th&gt;
					&lt;th style="text-align: center"&gt;3&lt;/th&gt;
					&lt;th style="text-align: center"&gt;4&lt;/th&gt;
					&lt;th style="text-align: center"&gt;5&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;$\lceil r/3 \rceil$&lt;/td&gt;
					&lt;td style="text-align: center"&gt;0&lt;/td&gt;
					&lt;td style="text-align: center"&gt;1&lt;/td&gt;
					&lt;td style="text-align: center"&gt;1&lt;/td&gt;
					&lt;td style="text-align: center"&gt;1&lt;/td&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;$\lceil r/2 \rceil$&lt;/td&gt;
					&lt;td style="text-align: center"&gt;0&lt;/td&gt;
					&lt;td style="text-align: center"&gt;1&lt;/td&gt;
					&lt;td style="text-align: center"&gt;1&lt;/td&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
					&lt;td style="text-align: center"&gt;3&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;$\lceil r/3 \rceil$ + $\lceil r/2 \rceil$&lt;/td&gt;
					&lt;td style="text-align: center"&gt;0&lt;/td&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
					&lt;td style="text-align: center"&gt;3&lt;/td&gt;
					&lt;td style="text-align: center"&gt;4&lt;/td&gt;
					&lt;td style="text-align: center"&gt;5&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;观察到除了 $r$ 为 1 的情况外均有 $\lceil r/3 \rceil$ + $\lceil r/2 \rceil = r$。将该条件代回，得到：&lt;/p&gt;
$$
\left\lceil \frac{e}{3} \right\rceil + \left\lceil \frac{e}{2} \right\rceil =
\begin{cases}
 5k+r+1 &amp;\If r=1 \\
 5k+r &amp;\If r \neq 1
\end{cases}
$$&lt;p&gt;易见当且仅当 $k = 0, r = 1$ 时有：&lt;/p&gt;
$$
\left\lceil \frac{e}{3} \right\rceil + \left\lceil \frac{e}{2} \right\rceil = 5k+r+1 &gt; 6k+r = e
$$&lt;p&gt;但由此得到的 $e$ 的值为 1，这与我们的条件相悖。由此推导后易得证。&lt;/p&gt;
&lt;/details&gt;
&lt;h4 id="情况xy-不能被-pe-整除"&gt;情况：$x$，$y$ 不能被 $p^e$ 整除
&lt;/h4&gt;&lt;p&gt;据我观察，没有一个简单的公式能够用来计算 $x^3 \equiv y^2 \not\equiv 0 \Mod{p^e}$ 这种情况贡献的满足题目条件的 $(x, y)$ 对的数量 $N''$。但这其实无关紧要，因为我们需要讨论的仅是全部解对的数量与 $p^e$ 之间的大小关系。&lt;/p&gt;
&lt;p&gt;易见在本小节条件下，对任意 $p^e$ 都有一对满足题目条件的 $(x, y)$ 对 $(1, 1)$。因此我们得到：&lt;/p&gt;
$$
N'' &gt; 0
$$&lt;h4 id="小结"&gt;小结
&lt;/h4&gt;&lt;p&gt;综上所述，易得：&lt;/p&gt;
$$
|S_{p^e}| = N' + N'' &gt; p^e
$$&lt;p&gt;由此我们得到结论：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;任意质数的多次幂都不是“石性数”。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="合数成为石性数的必要条件"&gt;合数成为“石性数”的必要条件
&lt;/h3&gt;&lt;p&gt;我们知道任何正整数 $d$ 均有其质因数分解形式：&lt;/p&gt;
$$
d = \prod \limits_{i=1}^{\omega(d)} p_i^{e_i} \; (d &gt; 1)
$$&lt;p&gt;其中 $\omega(d)$ 代表 $d$ 所有不同质因数的个数。&lt;/p&gt;
&lt;p&gt;综合&lt;a class="link" href="#eq-2" &gt;式 $(2)$&lt;/a&gt; 易得：&lt;/p&gt;
$$
|S_d| = \prod \limits_{i=1}^{\omega(d)} \left|S_{p_i^{e_i}}\right|
$$&lt;p&gt;结合&lt;a href="#Primzahl_sind_steinig" class="dynamic-ref-link" data-target="Primzahl_sind_steinig" style="color: var(--accent-color); font-weight: bold; text-decoration: none;"&gt;
 [reading...]
&lt;/a&gt;和&lt;a href="#Primzahlpotenz_sind_nicht_steinig" class="dynamic-ref-link" data-target="Primzahlpotenz_sind_nicht_steinig" style="color: var(--accent-color); font-weight: bold; text-decoration: none;"&gt;
 [reading...]
&lt;/a&gt;不难看出对连乘中的每一项均有：&lt;/p&gt;
$$
\left|S_{p_i^{e_i}}\right| \geq p_i^{e_i}
$$&lt;p&gt;因此可知若要使题目条件 $|S_d| = d$ 成立，则在 $d$ 的质因数分解式中的每一个 $p_i^{e_i}$ 均需满足 $e_i = 1$。由此不难得到结论：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;当合数 $d$ 的质因数分解式中的每一项的指数都为 1 时，则该数是“石性数”。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="原题的简化等价表达和解答"&gt;原题的简化等价表达和解答
&lt;/h2&gt;&lt;p&gt;综合&lt;a href="#Steinig_Nummer_Bedingung" class="dynamic-ref-link" data-target="Steinig_Nummer_Bedingung" style="color: var(--accent-color); font-weight: bold; text-decoration: none;"&gt;
 [reading...]
&lt;/a&gt;中的所有内容我们很容易就能得到原题的另一种更加简单的等价表达方式：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;在十个大于 1 的连续正整数中，满足“其质因数分解式中每个质因数的指数均为 1”这一条件的正整数至多和至少有多少个？&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这样整个解题思路也彻底清晰了。我们不再需要处理任何复杂的同余问题，只需要关注质因数指数这一相当简单的概念即可。&lt;/p&gt;
&lt;h3 id="石性数的最大数量"&gt;“石性数”的最大数量
&lt;/h3&gt;&lt;p&gt;我们希望在连续十个正整数中，出现尽可能多满足“质因数分解后每个质因数的指数均为 1”这一条件的数。我们可以观察较小的质数（如 2、3）及其幂次（如平方、立方）在连续十个正整数中至少出现的频率。&lt;/p&gt;
&lt;p&gt;我们知道：要使某个数的倍数必然出现在连续十个正整数中，该数最大只能为 10，这样其倍数的周期才最多为 10。因此，周期至多为 10 的质数幂有：&lt;/p&gt;
$$
2^2=4, \; 2^3=8, \; 3^2=9
$$&lt;p&gt;此外，还有以下较小的质数幂：&lt;/p&gt;
$$
\begin{align*}
 &amp;2^4=16, \; 2^5=32, \; 2^6=64 \\
 &amp;3^3=27, \; 3^4=81 \\
 &amp;5^2=25 \\
 &amp;7^2=49
\end{align*}
$$&lt;p&gt;由于我们希望这十个数中出现尽可能多的“石性数”，因此必须避免上述质数幂出现在我们所选的区间内。同时，我们可以让 4 的倍数与 9 的倍数重叠，这样就能在该区间内减少一个非“石性数”（即节省出一个位置）。理论上，这能使连续十个正整数中非“石性数”的数量降至两个，从而最多可能有八个数为“石性数”。&lt;/p&gt;
&lt;p&gt;因此，我们可以将 4 与 9 的最小公倍数（即 36）作为锚点来扩展区间，并检验我们的理论是否成立。&lt;/p&gt;
&lt;p&gt;在 36 的左侧，我们希望避开 $3^3=27$ 与 $2^2 \cdot 7=28$。因此，我们选择 29 作为区间的左边界；相应的 38 即为右边界。我们现在逐个验证这些数字：&lt;/p&gt;
$$
\begin{align*}
 \begin{aligned}
 29 &amp;= 29^1 \qquad&amp;&amp; 34 = 2^1 \cdot 17^1 \\
 30 &amp;= 2^1 \cdot 3^1 \cdot 5^1 \qquad&amp;&amp; 35 = 5^1 \cdot 7^1 \\
 31 &amp;= 31^1 \qquad&amp;&amp; 36 = 2^2 \cdot 3^2 \\
 32 &amp;= 2^5 \qquad&amp;&amp; 37 = 37^1 \\
 33 &amp;= 3^1 \cdot 11^1 \qquad&amp;&amp; 38 = 2^1 \cdot 19^1 \\
 \end{aligned}
\end{align*}
$$&lt;p&gt;我们发现，仅有 32 和 36 的质因数分解中含有指数大于 1 的质因数；其余八个数均满足石性数的条件。这确实印证了上文推导出的结论。同时上文也解释了这已是连续十个正整数中可能存在的“石性数”的数量上限，所以我们可以得到结论：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;连续十个大于 1 的正整数中至多有八个“石性数”。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="石性数的最小数量"&gt;“石性数”的最小数量
&lt;/h3&gt;&lt;p&gt;我们可以采用类似的方法，尝试构造一个连续正整数序列，使得其中的每一个数都能被某个质数的平方整除。&lt;/p&gt;
&lt;p&gt;建立如下的线性同余方程组：&lt;/p&gt;
$$
\begin{cases}
 x \equiv -1 \Mod{p_1^2} \\
 x \equiv -2 \Mod{p_2^2} \\
 \quad \vdots \\
 x \equiv -10 \Mod{p_{10}^2}
\end{cases}
\; (p_i \in \mathbb{P})
$$&lt;p&gt;由于任意两不同质数的平方必然互质，所以根据中国剩余定理，该线性同余方程组必有解。&lt;/p&gt;
&lt;p&gt;因此可得：&lt;/p&gt;
$$
\begin{cases}
 \,\Divisiable{(x+1)}{p_1^2} \\
 \,\Divisiable{(x+2)}{p_2^2} \\
 \,\quad \vdots \\
 \,\Divisiable{(x+10)}{p_{10}^2}
\end{cases}
$$&lt;p&gt;这意味着：在区间 $[x+1, x+10]$ 内的任何一个整数都不是石性数。也就是说：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;连续十个大于 1 的正整数中最少有零个“石性数”。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;总的来说，本题的主要难点在于将原题转化为易于处理的等价表达的过程。不难看出，在真的得出那个等价命题后，整道题的难度便断崖式下降，但在那之前的过程对数学思维能力确实有一定的要求。&lt;/p&gt;
&lt;p&gt;从原题写出第一种等价代数表达并不困难，但如何从这个代数表达中看出应该从质数下手呢？我显然是没有那个能力立即联想到（笑）。这也就是为什么需要数学软件辅助，通过列出海量数据来观察，从而得到一个可能可行的思路去推进。在本题中也就是先注意到所有质数都是“石性数”，得到那一部分证明后，再逐步推导得到最终判定某一正整数是否满足条件的方法。&lt;/p&gt;
&lt;p&gt;这其实也是本人认为 BWM 这类竞赛最有益处的地方：不像国内的数学竞赛要求在给定时间内解决多么复杂（但实际上有一定套路）的题目，BWM 更注重于考察参赛者的独立数学研究能力。这从其开卷，一轮仅有四题且给足两三个月的时间便能看出。这在我看来其实远比国内所谓的“解题能力”更加重要，因为它是在真的培养一个人对数学的兴趣，而不只是功利地为了一纸奖状而如机器一般刷题。&lt;/p&gt;
&lt;h2 id="补充证明"&gt;补充证明
&lt;/h2&gt;&lt;h3 id="Beweis_Lamma_1"&gt;引理一
&lt;/h3&gt;&lt;p&gt;我们需证：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;对于质数 $p$ 和非零余数 $a$，若高次同余方程 $x^n \equiv a \Mod{p}$ 有解，则它在模 $p$ 的剩余系中恰有 $\gcd(n, p-1)$ 个不同的解。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;由原根存在性定理可知模质数 $p$ 的（简化）剩余系构成一个乘法循环群 $(\Z/p\Z)^\times$。&lt;/p&gt;
&lt;p&gt;设循环群的原根为 $g$。我们令：&lt;/p&gt;
&lt;span id="eq-3"&gt;&lt;/span&gt;
$$
x \equiv g^k, a \equiv g^l \Mod{p} \tag{3}
$$&lt;p&gt;因此在当 $x^n \equiv a \Mod{p}$ 有解时可以得到：&lt;/p&gt;
$$
\left( g^k \right)^n = g^{nk} \equiv g^l \Mod{p}
$$&lt;p&gt;由循环群性质可知上式成立的充要条件是它们的指数在模群的阶下同余。即有：&lt;/p&gt;
&lt;span id="eq-4"&gt;&lt;/span&gt;
$$
nk \equiv l \Mod{p-1} \tag{4}
$$&lt;p&gt;不难得出：&lt;/p&gt;
$$
nk - (p-1) \cdot t = l \; (t \in \Z)
$$&lt;p&gt;由于线性丢番图方程 $ax + by = c$ 有解的充分必要条件是 $\Divisiable{c}{\gcd(a, b)}$。同时由命题条件已知该方程有解，因此得出：&lt;/p&gt;
$$
\Divisiable{l}{\gcd(n, p-1)}
$$&lt;p&gt;令 $d=\gcd(n,p-1)$。那么我们可以将 $n$、$p-1$ 和 $l$ 分别替换为：&lt;/p&gt;
$$
n=dn', \; p-1=dm', \; l=dl'
$$&lt;p&gt;代入&lt;a class="link" href="#eq-4" &gt;式 $(4)$&lt;/a&gt; 中可得：&lt;/p&gt;
$$
\begin{align*}
 dn'k &amp;\equiv dl' \Mod{dm'} \\
\Longrightarrow\quad n'k &amp;\equiv l' \Mod{m'}
\end{align*}
$$&lt;p&gt;由于 $\gcd(n',m') = 1$，$n'$ 在模 $m'$ 意义下存在乘法逆元，我们将其记作 $(n')^{-1}$。从而得到在模 $m'$ 意义下的唯一解 $k_0$：&lt;/p&gt;
$$
k_0 \equiv l' \cdot (n')^{-1} \Mod{m'}
$$&lt;p&gt;由此可得解 $k$ 的通式：&lt;/p&gt;
$$
k = k_0 + tm' \; (t \in \mathbb{Z})
$$&lt;p&gt;容易看出，在模 $dm'$ 的情况下，$t$ 可以取 $0,1,\dots,d-1$ 这些值，从而为 $k$ 提供不同的解。由于易知 $k_0&amp;lt;m'$ 成立，因此这样得到的 $k$ 并不会超过 $dm'$。&lt;/p&gt;
&lt;p&gt;将该结果代入&lt;a class="link" href="#eq-3" &gt;式 $(3)$&lt;/a&gt; 中，由于 $k$ 没有超过长度为 $p-1$ 的周期，所以所有 $g^k \bmod p$ 的值均两两不同。因此，$x$ 的解的个数等于 $t$ 的可能取值的个数，即 $d$，亦即 $\gcd(n,p-1)$。得证。&lt;/p&gt;
&lt;h3 id="Beweis_Lamma_2"&gt;引理二
&lt;/h3&gt;&lt;p&gt;我们需证：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;有正整数 $x$，$n$ 和一质数的多次幂 $p^e$。若 $x^n$ 能被 $p^e$ 整除，则 $x$ 能被 $p^{\lceil e/n \rceil}$ 整除。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;引理的表达为：&lt;/p&gt;
$$
\Divisiable{x^n}{p^e} \Longrightarrow \Divisiable{x}{p^{\left\lceil e/n \right\rceil}}
$$&lt;p&gt;我们设 $x$ 恰好能被 $p$ 整除 $m$ 次。由此可知：&lt;/p&gt;
$$
x = p^m \cdot r \; (m,r \in \mathbb{Z}^+, \; p \nmid r)
$$&lt;p&gt;得到：&lt;/p&gt;
$$
x^n=(p^mr)^n=p^{mn}r^n
$$&lt;p&gt;由于已知 $r$ 无法被 $p$ 整除，可知 $x^n$ 恰巧能被 $p$ 整除 $mn$ 次。因此有：&lt;/p&gt;
$$
mn \geq e \Longrightarrow m \geq \frac{e}{n}
$$&lt;p&gt;由于 $m$ 是正整数，因此可向上取整得到：&lt;/p&gt;
$$
m \geq \left\lceil \frac{e}{n} \right\rceil
$$&lt;p&gt;得证。&lt;/p&gt;</description></item><item><title>基于 OpenVPN 的校园网穿透</title><link>https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/</guid><description>&lt;style&gt;
 .article-page .main-article .article-content h2::before,
 .article-page .main-article .article-content h3::before,
 .article-page .main-article .article-content h4::before {
 content: attr(data-heading-num) " ";
 margin-right: 4px;
 color: inherit;
 }
&lt;/style&gt;

&lt;script&gt;
 document.addEventListener("DOMContentLoaded", () =&gt; {
 const articleContent = document.querySelector('.article-page .main-article .article-content');
 if (!articleContent) return;

 const headings = articleContent.querySelectorAll('h2, h3, h4');
 let counts = { h2: 0, h3: 0, h4: 0 };

 headings.forEach(heading =&gt; {
 let numStr = "";

 if (heading.tagName === 'H2') {
 counts.h2++;
 counts.h3 = 0;
 counts.h4 = 0;
 numStr = `${counts.h2}.`;
 }
 else if (heading.tagName === 'H3') {
 counts.h3++;
 counts.h4 = 0;
 numStr = `${counts.h2}.${counts.h3}`;
 }
 else if (heading.tagName === 'H4') {
 counts.h4++;
 numStr = `${counts.h2}.${counts.h3}.${counts.h4}`;
 }

 heading.setAttribute('data-heading-num', numStr);
 });

 const refLinks = document.querySelectorAll('.dynamic-ref-link');

 
 refLinks.forEach(link =&gt; {
 const targetId = link.getAttribute('data-target');
 const targetEl = document.getElementById(targetId);

 if (targetEl &amp;&amp; targetEl.hasAttribute('data-heading-num')) {
 link.innerText = `第 ${targetEl.getAttribute('data-heading-num').replace(/\.$/, "")} 节`;
 } else {
 link.innerText = "[section not found!]";
 link.style.color = "red";
 }
 });
 });
&lt;/script&gt;
&lt;p&gt;在许多校园网环境中，或多或少都会遇到类似于“游戏端口被封”、“校园网内部 DNS 污染”等问题。&lt;/p&gt;
&lt;p&gt;笔者所在的学校算是一个较为极端的例子：根据扫描结果，无论 TCP 还是 UDP 协议，超过 1024 的端口如非必要几乎都被屏蔽。同时在校园网关进行的 DNS 污染严重到甚至让 GitHub 都无法正常打开。在这种情况下，“翻墙”就是几乎唯一的选择。&lt;/p&gt;
&lt;p&gt;本文将详细记述笔者使用的校园网穿透配置，并且适当探讨部分设置的利弊。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;请注意：笔者的网络环境位于国外，故本文所有内容不考虑 GFW 封锁问题。&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="vpn-套件选择"&gt;VPN 套件选择
&lt;/h2&gt;&lt;p&gt;目前主流的VPN套件和协议有很多种：从穿透 GFW 常用的 V2Ray 和 Shadowsocks，到 WireGuard，以及笔者最后选择的 OpenVPN。&lt;/p&gt;
&lt;p&gt;应该说，不同的选择有不同的好处。笔者自己也有搭建基于 V2Ray+VMess/VLess 的自用 VPN，但这种技术栈在不同种类的终端上使用的客户端并不统一，
并且对“小白”用户来说界面并不友好（因为笔者的校园网穿透同时也提供给别的同学使用，因此也需要考量易用性）；
而 WireGuard 的劣势相信对该协议有所了解的读者都不难想到，即其完全依赖 UDP 传输，在部分网络受限环境下可能无法使用。&lt;/p&gt;
&lt;p&gt;那么笔者最后选择 OpenVPN 的原因也就显而易见了：并不算复杂的配置，完全基于虚拟网卡（不用像 V2Ray 一样额外配置 TUN），
可以自行选择传输层协议和端口，有现成的、成熟的管理脚本和多端统一、由官方维护的简易客户端，几乎完美契合了笔者的需求。即便带来了相对大的服务端 CPU 开销，但这些负载对现代 VPS 来说一般不成问题。&lt;/p&gt;
&lt;p&gt;当然，选择 OpenVPN 的前提是校园网内没有部署深度包检测（DPI），因为其流量特征过于明显，在 DPI 技术面前几乎等于自杀。在这种情况下，
建议换用如 V2Ray 等基于流量伪装设计的技术栈，本文对此不作赘述。&lt;/p&gt;
&lt;h2 id="安装-openvpn"&gt;安装 OpenVPN
&lt;/h2&gt;&lt;p&gt;笔者选用了 GitHub 上的 &lt;a class="link" href="https://github.com/Nyr/openvpn-install" target="_blank" rel="noopener"
 &gt;Nyr/openvpn-install&lt;/a&gt; 项目进行安装和后期的管理。&lt;/p&gt;
&lt;p&gt;在终端中运行以下命令安装：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://git.io/vpn -O openvpn-install.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bash openvpn-install.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;随后依次选择使用的 IP，协议，端口（此处按照笔者需求选择 TCP 协议和 443 端口）：&lt;/p&gt;
&lt;p&gt;&lt;img alt="选择使用的 IP，协议，端口" class="gallery-image" data-flex-basis="366px" data-flex-grow="152" height="506" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/OpenVPN_Install.png" width="772"&gt;&lt;/p&gt;
&lt;p&gt;再然后就是相对重要的一点：选择 DNS 服务。&lt;/p&gt;
&lt;p&gt;为了彻底避免校园网内 DNS 污染，我们需要在服务器配置中加上 &lt;code&gt;push &amp;quot;block-outside-dns&amp;quot;&lt;/code&gt; 强制客户端使用指定的 DNS（安装脚本已经自动加上了该项配置）。但这也意味着我们必须手动选择一个合适的 DNS 服务。&lt;/p&gt;
&lt;p&gt;笔者一般建议选择谷歌或是 Cloudflare 的 DNS，但也可以结合 Dnsmasq 进行高阶配置（见&lt;a href="#dnsmasq" class="dynamic-ref-link" data-target="dnsmasq" style="color: var(--accent-color); font-weight: bold; text-decoration: none;"&gt;
 [reading...]
&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;img alt="选择 DNS 服务" class="gallery-image" data-flex-basis="456px" data-flex-grow="190" height="318" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/OpenVPN_Install_DNS.png" width="605"&gt;&lt;/p&gt;
&lt;p&gt;再随后只需要给第一个 Client 取一个名字，便会自动进行安装。&lt;/p&gt;
&lt;p&gt;完成安装后，再次运行 &lt;code&gt;openvpn-install.sh&lt;/code&gt; 脚本便可进行 Client 管理和卸载 OpenVPN，对此本文不再赘述。&lt;/p&gt;
&lt;h2 id="在客户端中导入-profile"&gt;在客户端中导入 Profile
&lt;/h2&gt;&lt;p&gt;不像别的技术栈，由 OpenVPN 官方维护的客户端 OpenVPN Connect 可以说在使用上傻瓜到了极致。用户只需要将服务器上的 Profile（&lt;code&gt;.ovpn&lt;/code&gt; 文件）下载下来，并且在 OpenVPN Connect 中导入便可连接服务器，
几乎不会有犯错的地方。&lt;/p&gt;
&lt;p&gt;在完成导入后，只要能够正常看到绿色的 Connected 字样，便代表已经连接成功。此时电脑的所有流量都会经由 OpenVPN 代理。&lt;/p&gt;
&lt;p&gt;这也是笔者选择 OpenVPN 的一大原因：极简的客户端大大降低了“小白”的学习成本，让笔者几乎不用在别的用户（同学）的设备上操作。在导入 Profile 后，所有的问题基本上都不用再在客户端更改设置，若真的需要也一般都是直接删除服务器重新导入配置。&lt;/p&gt;
&lt;h2 id="笔者自建的管理界面"&gt;笔者自建的管理界面
&lt;/h2&gt;&lt;p&gt;为了更方便地管理 OpenVPN 服务，笔者自己编写了一套运行在 CLI 下的管理界面。&lt;/p&gt;
&lt;p&gt;但由于代码写得实在太糙了，为了快速上线没有严谨设计导致满是屎山，又在“能跑就别动”的指导方针下放弃了重构计划，所以在此处便不作深入探讨。&lt;/p&gt;
&lt;p&gt;读者若感兴趣可以查看在 GitHub 上的 &lt;a class="link" href="https://github.com/Ace-Radom/openvpn-mgmt" target="_blank" rel="noopener"
 &gt;Ace-Radom/openvpn-mgmt&lt;/a&gt; 和&lt;a class="link" href="https://github.com/Ace-Radom/openvpn-mgmt-web" target="_blank" rel="noopener"
 &gt;Ace-Radom/openvpn-mgmt-web&lt;/a&gt; 两个仓库，
分别是服务器管理界面和 Profile 申请/管理的网站。&lt;del&gt;真的很糙，建议别看代码。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;本节仅略谈部分在管理界面中用到的 OpenVPN 功能。&lt;/p&gt;
&lt;h3 id="openvpn-management-interface"&gt;OpenVPN Management Interface
&lt;/h3&gt;&lt;p&gt;注意这个管理界面和笔者编写的管理界面不同，是 OpenVPN 的内置功能。为了开启这个功能，需要在服务器配置文件中加上：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;management 127.0.0.1 5555 mgmt_pswd.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其中 &lt;code&gt;5555&lt;/code&gt; 是管理界面监听的端口号，&lt;code&gt;mgmt_pswd.txt&lt;/code&gt; 则是和服务器配置文件放于同一目录下的用于存放管理界面密码的文本文件。&lt;/p&gt;
&lt;p&gt;这个管理界面功能相当强大，笔者自己的管理界面中许多功能也基于该 Interface 实现，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;实时状态监控（&lt;code&gt;status&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;强制断线（&lt;code&gt;kill&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然这些远远不是其所有的功能，读者可以自行查阅&lt;a class="link" href="https://openvpn.net/community-docs/management-interface.html" target="_blank" rel="noopener"
 &gt;社区文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id="openvpn-server-side-script"&gt;OpenVPN Server-Side Script
&lt;/h3&gt;&lt;p&gt;虽然在 Management Interface 内也可以做到身份验证的功能，但比起直接挂载服务端脚本来说复杂度过高。为此笔者编写了一套脚本，
用于在服务启动/关闭时轮转日志，并在用户连接时进行身份验证、在断开时记录网络使用量以方便审计。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;script-security 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;up script/up.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;down script/down.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;client-connect script/client_connect.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;client-disconnect script/client_disconnect.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其中 &lt;code&gt;client-connect&lt;/code&gt; 脚本通过返回值验证授权：若返回值为 0 则认定通过，否则则不通过。这个功能与前文提到的强制断线功能结合使用，便可以做到类似于屏蔽恶意用户的功能，或是在服务器维护中阻止所有用户连接。&lt;/p&gt;
&lt;p&gt;其余脚本在笔者的用例中均只有简单的日志记录功能，在此不做过多讨论。&lt;/p&gt;
&lt;h2 id="dnsmasq"&gt;可选：基于 Dnsmasq 的域名屏蔽
&lt;/h2&gt;&lt;p&gt;有些时候，我们不希望让电脑上的程序去访问某些 URL。通常我们通过更改系统 hosts 文件将域名解析到本地来实现这个功能，
但 hosts 文件在功能上有诸多限制（例如不支持通配符），且作为系统文件修改需要管理员权限，也进一步降低了易用性。&lt;/p&gt;
&lt;p&gt;前文提到，我们可以在安装 OpenVPN 服务时选择使用自建 DNS 服务。在这里我们在同一台服务器上安装 Dnsmasq，因为它极其轻量且易于配置。&lt;/p&gt;
&lt;p&gt;我们先配置 Dnsmasq 并启动 DNS 服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Dnsmasq Configure
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;listen-address=127.0.0.1,10.8.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bind-interfaces
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;no-resolv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 DNS 服务启动后，我们便可以在 OpenVPN 安装中选择使用自建 DNS 服务器，并将 DNS 服务器的 IP 设为 &lt;code&gt;10.8.0.1&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="使用自建 DNS 服务器" class="gallery-image" data-flex-basis="694px" data-flex-grow="289" height="390" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/OpenVPN_Install_DNS_Custom.png" srcset="https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/OpenVPN_Install_DNS_Custom_hu_f3496b024de419bd.png 800w, https://ace-radom.io/p/%E5%9F%BA%E4%BA%8E-openvpn-%E7%9A%84%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%A9%BF%E9%80%8F/OpenVPN_Install_DNS_Custom.png 1129w" width="1129"&gt;&lt;/p&gt;
&lt;p&gt;随后在 Dnsmasq 配置中定义上游 DNS：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server=1.1.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server=1.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server=8.8.8.8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server=8.8.4.4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;完成这些步骤并重启 Dnsmasq 服务后，若在客户端上可以正常解析域名，则代表配置正确。&lt;/p&gt;
&lt;p&gt;我们可以按照以下方式添加配置以屏蔽部分域名：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;address=/block.site/127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;需要注意的是：即便我们在这里没有使用通配符，所有挂载在 &lt;code&gt;block.site&lt;/code&gt; 下的次级域名一样会被解析到本地。这是由 Dnsmasq 的设计决定的：由于其仅支持泛解析而没有实现精确匹配，想要简单地做到类似于“仅屏蔽某个二级域名，却不屏蔽其下的三级域名”的功能是不可能的。&lt;/p&gt;
&lt;p&gt;在某些场合这可能是一种限制，但更多的时候这就是我们想要的功能。而在什么情况下会需要这种大范围屏蔽某一域名及其下所有次级域名呢？
此处不便细说，请读者自行联想。&lt;/p&gt;
&lt;h2 id="可选通过多服务器架构绕过网站屏蔽"&gt;可选：通过多服务器架构绕过网站屏蔽
&lt;/h2&gt;&lt;p&gt;如今许多网站会依赖由如 Cloudflare 等公司提供的安全保护服务，其中一种惯用策略便是按 IP 段或地理位置等信息屏蔽某些访问请求。不巧的是，由于我们的 OpenVPN 服务器大多部署在 VPS 上，且这些一般配置的 VPS 也常被网络爬虫/扫描服务租用。因此，我们的 VPS 所在的 IP 段被网站错误屏蔽并非很罕见的情况。而由于我们的所有流量都会被 OpenVPN 代理，
所以一旦在我们的设备上连接了 OpenVPN 服务器，我们就无法打开这些本来可以打开的网页了。&lt;/p&gt;
&lt;p&gt;解决这个问题的简单方法也十分纯粹：将这些被屏蔽的流量分离出来，由另外的一台没有被网站屏蔽的服务器转发。由于我们已经安装了 Dnsmasq 并与 OpenVPN 配套使用，所以实现这个功能并不困难。&lt;/p&gt;
&lt;p&gt;假定目前有两台服务器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代理服务器 A：安装了 OpenVPN 和 Dnsmasq，但被网站错误屏蔽。&lt;/li&gt;
&lt;li&gt;转发服务器 B：没有被网站屏蔽。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们首先在服务器 A 上创建一个 IP Set，用于存储所有需要被转发到服务器 B 上的 IP。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ipset --create proxy_domains hash:ip --timeout &lt;span class="m"&gt;3600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其中强烈建议加上 &lt;code&gt;--timeout&lt;/code&gt; 开关以自动淘汰长时间未被访问的 IP。原因见下文。&lt;/p&gt;
&lt;p&gt;之后我们需要利用 Iptables 设定转发逻辑（可按实际情况调整转发端口，此处使用 8443）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -t nat -A PREROUTING -s 10.8.0.0/24 -p tcp --dport &lt;span class="m"&gt;443&lt;/span&gt; -m &lt;span class="nb"&gt;set&lt;/span&gt; --match-set proxy_domains dst -j DNAT --to-destination &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SERVER_B_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:8443
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -t nat -A POSTROUTING -d &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SERVER_B_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; -p tcp --dport &lt;span class="m"&gt;8443&lt;/span&gt; -j MASQUERADE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然而实验发现，Cloudflare 获取到的仍然是服务器 A 的真实 IP，因而再次触发屏蔽机制。其中主要原因是 Cloudflare 的保护服务已经默认启用了 HTTP/3 协议，而其使用基于 UDP 传输的 QUIC 协议实现。由于我们只拦截了 TCP 流量，
所以服务器 A 的真实 IP 依然能被 Cloudflare 获取到。&lt;/p&gt;
&lt;p&gt;虽然我们也能转发 UDP 流量，但这对服务器 B 上运行的转发服务有要求且配置上更加复杂，最简单的解法是迫使连接退回到 TCP 协议：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -I FORWARD -s 10.8.0.0/24 -p udp --dport &lt;span class="m"&gt;443&lt;/span&gt; -m &lt;span class="nb"&gt;set&lt;/span&gt; --match-set proxy_domains dst -j REJECT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;完成以上配置后切记执行持久化保存（Debian 系一般使用 ipset-persistent 和 iptables-persistent，并调用 &lt;code&gt;netfilter-persistent save&lt;/code&gt; 保存所有配置）。&lt;/p&gt;
&lt;p&gt;在 Dnsmasq 的配置中我们只需要加上：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ipset=/cf_blocked.site/proxy_domains
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Dnsmasq 会自动将解析出的 IP 加入对应的 IP Set 中，随后所有连接到对应 IP 的流量都会被内核转发到服务器 B。&lt;/p&gt;
&lt;p&gt;而在服务器 B 上，由于其只作流量转发用途，理论上可以使用任何 TCP 流量中转工具（如 sniproxy 和 GOST）。在笔者的环境中，由于服务器 B 上已经运行了 Nginx 并配置了 stream 模块，因此采用了这种看上去有些臃肿的组合。&lt;/p&gt;
&lt;p&gt;首先，我们需要先确定服务器 B 上的 IPv4 转发功能是否启用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 检查 IPv4 转发功能是否启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl net.ipv4.ip_forward
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 若没有启用 则运行以下命令开启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;net.ipv4.ip_forward = 1&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后便是按照个人选择配置转发服务。这里附上笔者的 Nginx stream 模块配置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;stream&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;resolver&lt;/span&gt; &lt;span class="n"&gt;1.1.1.1&lt;/span&gt; &lt;span class="n"&gt;8.8.8.8&lt;/span&gt; &lt;span class="s"&gt;valid=300s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;8443&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_preread&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="nv"&gt;$ssl_preread_server_name:443&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;allow&lt;/span&gt; &lt;span class="nv"&gt;${SERVER_A_IP}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 Nginx 配置中切记对转发来源 IP 加以限制。为了方便审计，我们一般还需要加上 Access Log。由于这不是本文的重点，故不做阐述。&lt;/p&gt;
&lt;p&gt;这种转发仅有一个问题：由于我们的底层转发逻辑是按照 IP 匹配的，而那些真的会屏蔽服务器 A 的网站大概率都会使用 Cloudflare 等公司的代理服务。也就是说，我们解析到并加入转发 IP Set 的 IP 实际上大概率是 CDN 的 IP，而非网站真实服务器的 IP。&lt;/p&gt;
&lt;p&gt;这会造成一个限制：由于所有依赖于这种代理服务的网站都可能被解析到这些 CDN 上，可能会出现在访问完一个被屏蔽的网站后，
别的正常网站由于被解析到了相同 CDN IP 因此也被转发到了服务器 B 上。&lt;/p&gt;
&lt;p&gt;这类误转发在当前架构下，在我的认知范围内是无解的。因为一旦按照域名转发就会极大增加复杂度和性能开销，而这是笔者不期望的。因此笔者建议在创建 IP Set 时引入 Timeout 机制，在规定时间后自动淘汰被解析的 CDN IP，以避免越来越多的网站被错误转发。&lt;/p&gt;
&lt;p&gt;而 Timeout 的具体值则按服务器 A 与服务器 B 之间的物理距离决定：
笔者一般将与代理服务器（服务器 A）处在同一地区的转发服务器（服务器 B）的 Timeout 设为 12 小时（即 43200 秒）。若两者相距很远（如代理服务器在欧洲而转发服务器在香港），则建议设定为一小时甚至更短，以避免误解析造成的延迟激增。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2026-05-13 Update&lt;/strong&gt;：在五月十二日，笔者配置的转发突然部分失效。在浏览器上记录到了一个很诡异的现象：当网页冷加载时，
浏览器可以正确获取到网页的根 HTML，但在随后加载资源的过程中连接被 Cloudflare 识别到代理服务器真实 IP 并被屏蔽，导致网页上大量内容缺失。在点击刷新后则彻底无法访问网站内容。&lt;/p&gt;
&lt;p&gt;根据排查得知这是 Cloudflare Insights 服务造成的。在冷加载中，有些网站会注入这项性能监测服务脚本，而该脚本是直接从 Cloudflare 的域名下拉取的。由于我们没有对该域名做任何限制，相关流量自然也没有被路由到转发服务器上。笔者怀疑 Cloudflare 在后台更新了他们的安全策略，
会将请求该脚本的 IP 和请求网页内容的 IP 进行比较，并优先采信被网站安全规则屏蔽的 IP。由于时间原因笔者没有办法进一步详细调查，
也无法确定受影响的网站在之前是否有被注入 Cloudflare Insights 相关脚本，但鉴于在阻断了该脚本的拉取后相关问题便得以解决，
并且那些没有被注入的网站也没有受到影响，基本可以确定该脚本和本次事件有关。&lt;/p&gt;
&lt;p&gt;为规避相关风险，笔者在此不详细说明解决方法。鉴于所有需要的技术细节在本文中都有讨论且本文读者应该都具备对相关技术的一定了解，
笔者相信根据本文内容找出合适的解决方案对读者来说绝非难事。&lt;/p&gt;</description></item><item><title>2026新年贺岁词 江南春</title><link>https://ace-radom.io/p/2026%E6%96%B0%E5%B9%B4%E8%B4%BA%E5%B2%81%E8%AF%8D-%E6%B1%9F%E5%8D%97%E6%98%A5/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/2026%E6%96%B0%E5%B9%B4%E8%B4%BA%E5%B2%81%E8%AF%8D-%E6%B1%9F%E5%8D%97%E6%98%A5/</guid><description>&lt;div style="text-align: center;"&gt;&lt;p&gt;风簌簌，雪纷纷。&lt;/p&gt;
&lt;p&gt;淡日孤烟起，独舍萤灯暖。&lt;/p&gt;
&lt;p&gt;茫茫寒阜魂飞乱，羁旅思返终得还。&lt;/p&gt;
&lt;/div&gt;



 
 &lt;p style="font-size: 1.4rem; color: #b2b2b2;"&gt;
 first wrote on &lt;time&gt;2025-12-30&lt;/time&gt;
 &lt;/p&gt;
</description></item><item><title>HELLO WORLD 简评</title><link>https://ace-radom.io/p/hello-world-%E7%AE%80%E8%AF%84/</link><pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/hello-world-%E7%AE%80%E8%AF%84/</guid><description>&lt;p&gt;Hello World，这个如同图腾一般的短语，对任何一个接触过编程的人来说都绝不会陌生。它最初由布莱恩·柯林汉于 1972 年在贝尔实验室内部关于 B 语言的技术文件中提到，
随后在 1978 年其于丹尼斯·里奇合著的著作《C 语言程序设计》中得到了继承。时至今日，几乎所有程序员学习任何一门新语言时编写的第一个程序，就是在命令行中打印“Hello World”。作为一名计科和软件工程的预备学生，这一短语对我、或是我们的意义不言而喻。它是一种精神、一种信仰，以至于让普遍不善言辞的程序员群体在人群中用这一短语对上暗号时，
几乎都会在旁人费解的眼神中互相会心一笑。&lt;/p&gt;
&lt;p&gt;也正因这一独特意义，在第一次在网上看到《HELLO WORLD》这部电影时，我并不是被其中的设定和人物，而是被这一独特的名字所吸引了。抱着试一试的心态，我久违地看了一部纯粹是临时起意，
没有被人安利也没有任何了解的电影。电影不长，即使加上三篇外传也就两小时出头，但在看完之后我必须得说，这是一部小众但远超出我的预期的作品，
其中的诸多细节以及剧情的一再反转值得在看完之后细细品鉴。&lt;/p&gt;
&lt;h2 id="剧情梳理"&gt;剧情梳理
&lt;/h2&gt;&lt;p&gt;首先便是一个经典的问题：《HELLO WORLD》这部电影到底讲了什么？由于电影中实际存在三条时间线和三个（最后为四个）平行世界，并运用一种类似于倒叙的叙事顺序，
整部作品的剧情虽谈不上那么晦涩，但也绝不算简单易懂。对于结尾中男主从月球基地醒来看着站在病床前泪流满面的瑠璃这一幕，更是有两种完全不同的解释。这一半开放的结局也让每一位认真观看这部电影的观众，
对其真正的剧情有了自己的解释。在这里选用一种我比较认同的，也是相对比较简单的解释来从上帝视角复盘一下整个剧情。在此由衷感谢豆瓣网友 &lt;a class="link" href="https://www.douban.com/people/178621273" target="_blank" rel="noopener"
 &gt;Pearlshipping&lt;/a&gt; 的『&lt;a class="link" href="https://movie.douban.com/review/13602539/" target="_blank" rel="noopener"
 &gt;对《Hello World》系列作品的一些分析和讨论&lt;/a&gt;』一文，
本篇简评大量参考了其中对剧情的总结和辩证。&lt;/p&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&gt;&lt;p&gt;需要明确的是，电影中存在一条直到最后才引出的世界——也就是现实。由于电影和小说中均未明确交代现实中的 2027 年到底发生了什么，我们只能做一个逻辑自洽的推测：在现实中的 2027 年，
16 岁的坚书（以下简称现实坚书）和 16 岁的瑠璃（以下简称现实瑠璃）结为恋人，并在之后的 7 月 3 日前往宇治川花火大会观看焰火。在花火大会中发生的某些事造成了现实坚书的脑死亡。&lt;/p&gt;
&lt;p&gt;需要注意的是，现实坚书脑死亡的原因绝非“被落雷劈中”那么简单，因为在影片最后可以发现现实坚书需要同步的精神状态为“为心爱的人付出了一切并感到心满意足”，因此我们可以推断，现实坚书应该是为了保护现实瑠璃而造成了自己的脑死亡，
而具体原因由于无法考证且并不那么重要在此不作讨论。&lt;/p&gt;
&lt;p&gt;此后，现实瑠璃或是因为专情，或是为了报答现实坚书的救命之恩，执着于让沉睡的坚书重新苏醒过来，也因此于现实 2032 年左右加入了一个以量子记录为科研主题的团队。在现实 2032 年到 2037 年间，现实瑠璃运用阿尔塔拉内记录的 2027 年 7 月 3 日前的量子京都重构了一个虚拟世界（以下简称虚拟一界），希望运用虚拟一界中的坚书（以下简称大坚书）的量子信息来修复现实坚书的大脑。&lt;/p&gt;
&lt;p&gt;这一修复的条件是让大坚书在虚拟一界中也达成“为心爱的人付出了一切并感到心满意足”的精神状态。但极有可能是因为现实瑠璃的干涉失误，宇治川的花火大会上发生的事出现了偏差，
落雷劈中了虚拟一界中的瑠璃（以下简称大瑠璃），并造成了她的脑死亡。由于此时的大坚书无法达成目标的精神状态，也就无法将其量子同步到现实世界中修复现实坚书的大脑，现实瑠璃只能让虚拟一界继续运行。同时由于此处虚拟一界所发生的事和现实不再相同，虚拟一界中之后发生的事实际上为阿尔塔拉自身模拟出的另一个虚拟平行世界。在此中，大坚书并不知道自己是生活在数据之中，而是坚信自己经历的便是现实。&lt;/p&gt;
&lt;p&gt;之后便是我们在前日谈《ANOTHER WORLD》中看到的剧情：大坚书为了唤醒大瑠璃走了一条和现实瑠璃相近的路，玩命般地学习并加入阿尔塔拉团队，秘密实验将自己投放进虚拟世界的技术并因此造成了左腿微瘫，但大坚书没有放弃。在经历了无数次失败后终于成功在虚拟一界的 2037 年穿越到了他所创造的另一虚拟世界（以下简称虚拟二界）的 2027 年。现实瑠璃或是观察到了大坚书的实验即将成功，便化身为一只七彩三足乌鸦先行进入到虚拟二界，
将那里的 16 岁的坚书（以下简称小坚书）引到了伏见稻荷，从而和穿越过来的大坚书成功相遇。&lt;/p&gt;
&lt;/div&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&gt;&lt;p&gt;之后发生的故事便是电影前六十分钟的剧情。&lt;/p&gt;
&lt;p&gt;此时是现实 2047 年，虚拟一界 2037 年，虚拟二界 2027 年。大坚书尝试运用和现实瑠璃所用的同样的方法来拯救大瑠璃，
即需要虚拟二界中的瑠璃（以下简称小瑠璃）与大瑠璃的精神状态完成同步，条件是“陷入爱情”。虽然理论上来说大坚书只需要放任虚拟二界继续运行，直到 7 月 3 日小瑠璃被落雷劈中即可，
但也许是因为虚拟一界中 2037 年的技术无法做到现实 2047 年能够在人脑死的一瞬间完成精神量子数据的提取，大坚书认为只有在他的干预下让小瑠璃不被雷劈中，他才能完成预定目标。并由于除了小坚书以外的人都看不见他，
他也就无法直接影响虚拟二界中发生的事。因此他向小坚书阐述了他所认为的现实和虚拟，实则为虚拟一界和虚拟二界之间的关系，告诉了他一个事实，即小坚书会在三个月后和小瑠璃交往，随后在花火大会上被落雷劈中造成脑死，
并因此请求小坚书帮助他让小瑠璃免于意外。&lt;/p&gt;
&lt;p&gt;但此时大坚书并没有告诉小坚书他的真实目的是将小瑠璃的精神状态与大瑠璃同步，仅说“一次也好，我想看看她幸福的笑容”。这也让小坚书相信了他说的话，并接受了大坚书给予的神之手。此后的小坚书一直在大坚书的指导下练习使用神之手来造物以备不时之需，并根据大坚书带来的虚拟一界中大坚书和大瑠璃之间的记忆（即“最强指南”）尽可能让虚拟二界与虚拟一界发生的事情对应上。但其中由于大坚书的疏忽，忘记告诉小坚书在为图书旧卖会筹备从而要从瑠璃家将旧书搬运至学校时小瑠璃会问的一个问题（“坚书同学喜欢什么书”）应该如何回答。小坚书不知道答案，只能即兴作答，
因此创造了一个只属于小坚书和小瑠璃的借书卡羁绊，且大坚书对此并不知情。&lt;/p&gt;
&lt;/div&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&gt;&lt;p&gt;在随后因电灯短路而造成书籍被烧毁的事件中，大坚书为了保持与虚拟一界的对应选择了对小坚书隐瞒，小坚书也就无法阻止这一事件的发生。小瑠璃对此事非常伤心，一是因为之前的努力付之一炬，
二是因为她注意到了被烧毁的书籍中有小坚书想看的那本《大湖底都市》。小坚书对大坚书的隐瞒十分不满，并对大坚书要求自己也想他在虚拟一界中所做的一样去安慰小瑠璃感到愤怒，因此没有听从大坚书的指示，
而是在第二日凌晨潜入学校运用神之手的能力重新创造出那些已经被烧毁的旧书。尽管开始并不顺利，但在后来大坚书的帮助下还是赶在清晨完成了近五十本旧书，而其中包括了那本《大湖底都市》。&lt;/p&gt;
&lt;p&gt;在小坚书和其他同学的帮助下，虚拟二界中的图书旧卖会照常举行，而小坚书则因通宵复原旧书过于劳累在旧卖会开始前晕倒。小瑠璃没有叫醒小坚书，而是换上了爱丽丝的 cos 服帮助推销。在旧卖会结束后，醒来的小坚书向小瑠璃表白并确立了关系。根据《ANOTHER WORLD Record 2027》，虚拟二界中两人确立关系的时间点要早于虚拟一界，其中一个很重要的原因是小瑠璃发现了那本本因已经被烧毁的《大湖底都市》，
并在借书卡的第一行发现了本不该存在的自己的名字。（小瑠璃曾对小坚书说过，自己的名字第一个出现在借书卡上会是一件很开心的事。）&lt;/p&gt;
&lt;/div&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&gt;&lt;p&gt;再之后便是宇治川花火大会的 7 月 3 日，大小坚书为了完全避免风险从而选择不按照虚拟一界的历史那样邀请小瑠璃去看焰火，而是背地里在小瑠璃家门口看守着。&lt;/p&gt;
&lt;p&gt;在这一过程中，大小瑠璃的所作所为终于彻底触发了虚拟一界中阿尔塔拉的保护机制，系统管理员尝试修正量子数据并成功将小瑠璃转移到了花火大会上。大小坚书尝试阻止这些狐面的系统管理员，但并没有成功。随后系统管理员降下闪电，
试图重演虚拟一界中的悲剧，但被小坚书运用神之手的力量抵御了雷击，从而救下了小瑠璃。小瑠璃在目睹了小坚书为自己而战的过程后彻底陷入了爱情，大坚书也在此时达到了他的目的。他运用自己的管理员权限从小坚书面前强行带走了小瑠璃，
并将小瑠璃的量子信息输入到了大瑠璃的脑中。虚拟一界中的大瑠璃在沉睡了十年后终于醒来，但这一修复并非完美：小瑠璃的意识覆盖了大瑠璃的意识，也就是说在此时的虚拟一界中，大瑠璃的身体（容器）内装着的是小瑠璃的意识（内容）。&lt;/p&gt;
&lt;/div&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&gt;&lt;p&gt;此时的虚拟二界中，被夺走爱人和神之手的小坚书正在花火大会上不知所措。但很快，在虚拟一界中的阿尔塔拉团队发现了因蝴蝶偏差超过阈值造成了虚拟二界发生了混乱。大坚书没有告知团队造成混乱的原因是自己的所作作为。之后团队首领千古教授下令对虚拟二界进行系统还原，这直接造成了虚拟二界的天翻地覆，大量物质凭空湮灭，而小坚书则在这个过程中慌乱奔逃。而此时醒来的具有小瑠璃意识的大瑠璃（以下简称复合瑠璃）在和大坚书的交谈中，
发现对方并不知道《大湖底都市》的事，并因此判断对方并非自己内心所爱之人。与此同时，虚拟二界的小坚书凭借着自己对小瑠璃的思念和自己的直觉，被现实瑠璃传送到了现实阿尔塔拉中的一个独立异空间。在这之中，
现实瑠璃以金乌的形态现身，激发了小瑠璃想要夺回心爱之人的信念并化身为神之手附于小坚书身上，为小坚书开辟了一条通往虚拟一界的通道。&lt;/p&gt;
&lt;p&gt;在小坚书到达的前一刻，大坚书和复合瑠璃发现了形似虚拟二界中的狐面管理员。至此大坚书才明白过来，自己身处的世界并非现实，而是一个由量子数据构建的虚拟世界。狐面在压制住大坚书的同时尝试杀死复合瑠璃。大坚书断定这是因为复合瑠璃的身上出现了两个重复的身份地址：虚拟二界的小瑠璃的精神和虚拟一界的大瑠璃的肉体，但他却无力阻止。这时小坚书赶到并用现实瑠璃赋予的更强的神之手暂时击退了狐面，并带着复合瑠璃逃出了病房。复合瑠璃也因此断定小坚书才是她此刻所爱的人。随后两人在金乌的指导以及良心发现的大坚书的帮助下前往京都站大阶梯以进行量子转换将小坚书和复合瑠璃送回原来的世界。复合瑠璃在进转换门前，
因再次看到了大坚书额头上的伤疤而对大坚书到底是不是自己所爱的坚书同学这件事感到怀疑。接着，大坚书释然地否认了自己是真正的坚书直实这件事，并说了句”我只是个配角”，而这句话却是和小坚书在河边对小瑠璃说过的一样。复合瑠璃在听到这句话后受到三个世界瑠璃的意识作用，一反之前抗拒的态度深情地拥抱了大坚书，并感谢了大坚书多年来对自己的爱。随后，复合瑠璃穿过量子转换门，离开了虚拟一界。&lt;/p&gt;
&lt;/div&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&gt;&lt;p&gt;在复合瑠璃离开后，狐面赶在小坚书进入转换门前赶到并破坏了转换门，随后开始疯狂攻击大小坚书。战斗中小坚书渐渐落入下风，在即将不敌狐面时大坚书请求小坚书运用神之手将他清除，
并解释到狐面现在的行为是因为这个世界只能有一个坚书，只有清除掉他们两人中的一个才能阻止狐面，而他希望小坚书能活下来去陪伴小瑠璃。&lt;/p&gt;
&lt;p&gt;但小坚书拒绝了大坚书的提议，并继续抵挡狐面的攻击。在他即将落败的时候，大坚书用仅有直觉的一只腿跳到了小坚书的面前帮他挡下了致命的一击，而自己也为此付出了生命。尽管被狐面杀死，但大坚书死亡时呈现出心满意足的幸福状态，因为他“为心爱的人付出了一切”，这也达到了现实瑠璃的目标。&lt;/p&gt;
&lt;p&gt;随后现实瑠璃将大坚书的精神转移到现实世界中对现实坚书的大脑进行修复。同时虚拟一界中的千古教授成功关闭了虚拟一界中阿尔塔拉的电源，从而让所有的狐面停止运行。接着现实瑠璃将小坚书放入一个金球中传送出虚拟一界，
送到了已经到达了一个新世界的小瑠璃身边。这个新世界不像之前的虚拟二界一样有着漫天飞舞的无人机，两人携手打算在这里开始新的生活。与此同时，现实世界中沉睡了二十年的现实坚书也终于因大坚书的量子数据从脑死中醒来，
与守在病床前的现实瑠璃相拥而泣。&lt;/p&gt;
&lt;/div&gt;
&lt;div style="height: 1rem;"&gt;&lt;/div&gt;
&lt;p&gt;当然了，以上所讲的一切均只是对《HELLO WORLD》剧情的一种解读方法罢了。其它的解读方法以及各个解读的优劣碍于篇幅且 Pearlshipping 的&lt;a class="link" href="https://movie.douban.com/review/13602539/" target="_blank" rel="noopener"
 &gt;文章&lt;/a&gt;中已经写得相当详细，
故在此不再赘述。接下来我们将主要探讨本作品的内涵以及 Hello World 这一独特标题的意义。&lt;/p&gt;
&lt;h2 id="简评"&gt;简评
&lt;/h2&gt;&lt;p&gt;坚书和瑠璃在相当多的方面都十分相像：他们都是这个世界的“配角”。不善言辞、不善交际的两个人，却被书这一共同的爱好阴阳差错地撮合到了一起。没有决断力的坚书第一次以自己的意志鼓起勇气说出了那句“我喜欢你”，
而瑠璃这一十分生人勿近，与同龄人相当格格不入的女孩子，也因此收获了一名志同道合的伴侣。&lt;/p&gt;
&lt;p&gt;无论是对现实中，还是虚拟一界二界中的坚书而瑠璃而言，他们真正交往的时间都不算长。即使按时间最长的虚拟二界来算，也仅有短短八天，惺惺相惜的两人便在宇治川的桥上迎来了悲剧的发生。另一方的脑死亡对一方的打击，
生活在真正现实中的我们也许在真的经历此等不幸之前是相当难以理解的。无论是对现实世界中的瑠璃而言，还是对虚拟一界中的坚书而言，他们的生命都从此定格在了那一刻。其中由于前日谈《ANOTHER WORLD》的补全，
我们对虚拟一界中的大坚书的心路历程能有相当的了解。在闪电劈下的那一瞬间，一同劈碎的还有坚书那憧憬着的未来。&lt;/p&gt;
&lt;p&gt;看着怀中从此沉睡的瑠璃，那时的坚书到底在想什么，我们也许永远也无法彻底理解。一名揣着《决断力》的少年，不断克服自己内心深处的困难，一步一步慢慢走出来就快要迎接曙光时，命运却给了他致命的一击。虚拟一界中的坚书没有来自十年后的自己的最强指南，没有能创造万物的神之手，他为瑠璃所做的一切，到底在心中经历了多少挣扎，也许只有他自己知道。在旧书被烧毁时，没有神之手的他没法挽救那些瑠璃心中的宝物，
说不出温柔话语的他只能一本又一本地读书，一本又一本地推荐给瑠璃，想要让她重新高兴起来。没有金色三足乌力量的他，没有办法打一个响指就前往心爱之人所在的世界，为了那一丝无比微小的可能性，
数年如一日在简陋的环境下埋头苦读，不惜彻底葬送掉自己的身体和人际关系，对明明憧憬着自己的同学恶语相向，只为接触到阿尔塔拉以尝试救回瑠璃。&lt;/p&gt;
&lt;p&gt;虚拟二界的小坚书只用了三个月就掌握了的力量，虚拟一界的大坚书花了十年。在 336 次秘密实验中，他的背部被烧焦，左腿瘫痪，最终才得到了进入虚拟二界的能力。这一没有未来，一直都在为 2027 年 7 月 3 日的那个夜晚而活的男人，
终于看清了那本遥不可及的希望。&lt;/p&gt;
&lt;p&gt;他不惜欺骗十六岁的小坚书，让他为自己所用，在一无所知的情况下帮助自己完成小瑠璃与大瑠璃的精神同步，并在最后粗暴地掳走了虚拟二界中小坚书已经爱上了的人。但命运又和他开了一个天大的玩笑，
或许是因为 2037 年的技术还不够成熟，大坚书带回的并非他所预想的那个人，而是将虚拟二界中小瑠璃的精神装进了大瑠璃的肉体中。&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;
&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;写到这里，也参考了不少观后感和解析，却发现有一个问题鲜有人提到：作者为什么会选用 Hello World 作为标题？&lt;/p&gt;
&lt;p&gt;这个问题也许并不复杂，抛开剧情中高科技的设定和这一短语与计算机的独特联系，回归到其最本质的意思上，便不难看出一二。坚书和瑠璃间的爱情，互相跨过自己心中的那道坎，不是各自在重新与这个世界问好吗？
而在剧情的最后，来到新世界的小坚书和小瑠璃，在面对这一容得下他俩的世界所表达的第一丝思绪，不和那跃动在命令行的光标之上的十个字母所表达的含义相同吗？&lt;/p&gt;
&lt;p&gt;初来乍到，请多多指教。&lt;/p&gt;
&lt;p&gt;Hello, World.&lt;style&gt;
.blink {
 animation: blink-animation 1.5s infinite;
}
@keyframes blink-animation {
 0% { opacity: 1; }
 50% { opacity: 0; }
 100% { opacity: 1; }
}
&lt;/style&gt;
&lt;span class="blink"&gt;│&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;你好，世界。&lt;/p&gt;
&lt;div style="font-size: 1.4rem; color: #b2b2b2;"&gt;&lt;p&gt;原发布于旧博客：&lt;a class="link" href="https://ace-radom.github.io/text/Hello_World_jian_ping.html" target="_blank" rel="noopener"
 &gt;HELLO WORLD 简评 Ace_Radom&amp;rsquo;s Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2026-06-17 移至此处并重新排版&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>2025新年贺岁词 念奴娇</title><link>https://ace-radom.io/p/2025%E6%96%B0%E5%B9%B4%E8%B4%BA%E5%B2%81%E8%AF%8D-%E5%BF%B5%E5%A5%B4%E5%A8%87/</link><pubDate>Tue, 31 Dec 2024 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/2025%E6%96%B0%E5%B9%B4%E8%B4%BA%E5%B2%81%E8%AF%8D-%E5%BF%B5%E5%A5%B4%E5%A8%87/</guid><description>&lt;div style="text-align: center;"&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;div style="height: 2rem;"&gt;&lt;/div&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;/div&gt;



 
 &lt;p style="font-size: 1.4rem; color: #b2b2b2;"&gt;
 first wrote on &lt;time&gt;2024-12-10&lt;/time&gt;
 &lt;/p&gt;
</description></item><item><title>Girls Band Cry 简评</title><link>https://ace-radom.io/p/girls-band-cry-%E7%AE%80%E8%AF%84/</link><pubDate>Thu, 26 Dec 2024 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/girls-band-cry-%E7%AE%80%E8%AF%84/</guid><description>&lt;p&gt;在看完 MyGO 之后时隔半年的又一部乐队番，和半年前一样，看完后都有一种说不上来的奇妙感觉：可以说是醍醐灌顶，也可以说是五味杂陈。&lt;/p&gt;
&lt;p&gt;和 MyGO 一样，与其去探讨这部番的作画、音乐等问题，我认为去探讨如此一番剧情给我们带来的直接感受更有意义一些。在“五个人凑不出一张高中毕业证”等等烂梗背后，无疑隐藏着一些其实相当容易注意到的值得去发掘的东西。&lt;/p&gt;
&lt;p&gt;我并没有看过“那么多”的番——自打入宅以来我就一直秉持着“只看自己真的想看的”和“既然看了就好好看”的信条，所以不敢妄自以一概全，但和 MyGO 一样，GBC 也可以说有明暗两线。但同时这两线相比于前者而言要露骨得多：相比于 MyGO 的团员们的过往，TOGE TOGE 的团员们在剧情的暗线中描述的伤痛也更可能被普通的观众所体会到甚至所经历过。&lt;/p&gt;
&lt;p&gt;要说仁菜、桃香、486、智和露帕五人聚起来的因素，我个人认为简单概括起来无非便是“我做了我认为正确的事，却被现实无情地嘲弄”。仁菜固然不用多说，她的过去和日奈在剧情中的冲突可说是相当重要的一部分。桃香也是如此，在退出钻尘时她依然坚持着只唱自己想唱的属于自己的歌，但最后也不得承认偶像化的钻尘在日奈加入后取得了巨大的成功。昴——我更喜欢叫她486——作为知名影星的孙女从小被安排着进入演艺道路并被基于厚望，但自己其实并不喜欢这种生活，也不认为自己有天赋走上这条道路，但却一直不敢和家人挑明这点。智的键盘技巧是公认的，但她对于团员的过于严厉以及过于直率地发表自己的负面意见直接导致了自己曾经和露帕以及另外两人的乐团的解体。露帕则相对比较特殊一些：她是所谓的天才，也很受欢迎，但同样因工作的繁忙而想着“反正今后也有时间的”从而错过了在家人因意外身亡前和他们最后一次说话的机会。&lt;/p&gt;
&lt;p&gt;稍微总结一下不难看出，这五人可谓全身是刺：无论是因被霸凌的过去，和朋友分道扬镳，或是家中给自己的压力或是种种的不幸，让她们在一起组成了这只刺团。但在这之后还隐藏着一些更深的东西——也许很多人都经历过，即在别人的身上看到了曾经的自己，但又被曾经的自己说到无言以对。&lt;/p&gt;
&lt;p&gt;仁菜在剧情中被塑造成了一种幼稚、直性子、不会察言观色、不会委屈求全的形象。在同学被霸凌时，她无法认同日奈“不关我事就当作没看见”的观点毅然站出来帮助被霸凌的同学，结果却是自己反被霸凌甚至还被自己曾想帮助的同学说让她向施暴者认错。在她、她的父亲和校方的沟通中，仁菜的父亲显然希望息事宁人，不必为了这些事搭上自己的前程。不得不说，在这个残酷的世界中这是一种无奈的“正确”做法，但仁菜显然无法认同，甚至因此和父亲产生了深深的隔阂，为此不惜离家出走只身前往东京闯荡。桃香虽多次说过仁菜的这种性格，指责过仁菜的选择，但在第八话中也站在后台向仁菜承认自己在她的身上看到了过去自己的影子，也不希望她走自己过去的老路。但这也不正说明了桃香自始自终都没能和过去的自己和解吗？嘴上说着“不讨厌现在的钻尘”，实则将自己包在一层厚厚的茧房里，不袒露自己的心声，久而久之连进在手边的机会都选择逃避推开。自认为老成的自己，最终却别和曾经的自己一样直性子且幼稚的仁菜说的哑口无言。&lt;/p&gt;
&lt;p&gt;但站在上帝视角上看，仁菜的幼稚和桃香的逃避，又或是日奈的旁观，何不都是在面对现实的绝望中不同的人所交出的一份不同的答卷呢？
在名为人生的课题面前，几乎没有人能写出一份满分的答案。如果我们简单地说“仁菜太不上道了”或是“桃香太沉浸在自己的过去了”，这种分析未免太片面了。诚然这些都是她们的答卷中的扣分项，但我们也不应该忽视她们的过去，她们在面对名为“生活”的绝望时所留下的创伤。所谓长大，无非是将生活中的不顺心、失落、绝望一点一点堆积起来给自己做上一面坚固的面具，在这一过程中人们难免会变得浑身是刺。但重点并不应该是这些刺，而是带着刺给这个世界留下一些抓痕。只有刺痛才知道我还是我自己，而不是一具在大街上浑浑噩噩的躯壳。&lt;/p&gt;
&lt;p&gt;原文的标题“Girls Band Cry”在简中中通常被翻译为“哭泣少女乐队”，但就像很多人知道的一样，“cry”一词在英语语境下不止有哭泣的意思，还有呐喊的意思。&lt;/p&gt;
&lt;p&gt;纵观整篇剧情，正如《空の箱》中所唱的那样：&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;空っぽなんだ ひとつも無いんだ&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;答卷空白 没有痕迹&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;無くなったのか　始まったのか分からないけど&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;究竟是失去还是开始 纵使未曾明白&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;行くしか方法は無いんだろう？&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;可除了继续也没有其他办法了吧？&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;正解がなんだ　価値なんて無いんだ&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;所谓正确答案 没有一丝价值&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;あたしは生涯　あたし以外じゃ生きられないよ&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;但是我今生今世 都只是我啊&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;これ以上かき乱しても明日はない&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;再继续涂写下去 也没有明日&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重要的并非所谓正解，而是真正的自我。&lt;/p&gt;
&lt;p&gt;我们已被这个世界无数次地背叛，但真正的自我仍拥有热爱着的事物。&lt;/p&gt;
&lt;p&gt;所以，高歌着，呐喊着，用从躯体里长出的刺在这个世界上刻下只属于自己的痕迹。&lt;/p&gt;
&lt;div style="font-size: 1.4rem; color: #b2b2b2;"&gt;&lt;p&gt;原发布于旧博客：&lt;a class="link" href="https://ace-radom.github.io/text/Girls_Band_Cry_jian_ping.html" target="_blank" rel="noopener"
 &gt;Girls Band Cry 简评 Ace_Radom&amp;rsquo;s Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2026-06-19 移至此处并重新排版&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>BanG Dream It's MyGO!!!!! 简评</title><link>https://ace-radom.io/p/bang-dream-its-mygo-%E7%AE%80%E8%AF%84/</link><pubDate>Sun, 07 Apr 2024 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/bang-dream-its-mygo-%E7%AE%80%E8%AF%84/</guid><description>&lt;p&gt;BanG Dream It&amp;rsquo;s MyGO!!!!! 这部作品可以说是在我看过的数量有限的音乐/乐队题材番剧里比较特别的一部。说实话，在花了两天看完后，这部作品并没有给我带来如《轻音少女》、《吹响！上低音号》等作品的“震撼”，而是更像孤独摇滚给我的感受一般：在结局之时并无感触，在结局之后回味无穷。&lt;/p&gt;
&lt;p&gt;在开局就可以确定的是，MyGO 并非如轻音少女为代表的废萌走向。因此，也就不能以看待废萌番的思维看待 MyGO，即应该同时审视角色和集体，并辩证看待其二之间的关系。&lt;/p&gt;
&lt;p&gt;不难看出，MyGO 有明暗两条剧情线。明线，显而易见的，是以高松灯为主角的 MyGO 乐队，而暗线则是以丰川祥子为代表的已经解散的 CRYCHIC 乐队。首先可以从明线人物入手，再辅以暗线主要角色的分析。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;高松灯&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本作绝对唯一核心，剧情走向推动的直接引导角色。说实话，简单的概括小灯的性格是极其之困难的。在她的身上就有如一个矛盾的综合体：明明会去努力，但依然否定自身；明明和自己没有关系，却无法保护自己不被中伤；明知自己的过去的经历，却仍渴望再次开始，等等。自从写在笔记本上的“自我开脱”的话语被祥子意外当成是歌词之后，她的精神情感便融入了和她有关的所有人之中：寂寞，但渴望被爱。（这一点从《春日影》的歌词中不难看出）&lt;/p&gt;
&lt;p&gt;这种“矛盾”也可以被认为是整部作品的一个缩影，引申到我认为的作品的核心立意之一：人是不同的，矛盾是与生俱来的，但一个共同的彼方是可以被不同的人所共同追求的。这种“矛盾”也能在本作的几乎所有主要角色的身上或多或少找出类似的事物，在后面会逐一分析。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;千早爱音&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;看似好懂，其实也很难真正准确的概括。简而言之，是一个极其顾及自身面子，甚至有时会显得有些偏执，会为此做出一些过分的事的人。这从第一话她自述的，以及第十话她对小灯的坦白的邀请小灯加入乐队的理由中可以看出：“是为了虚荣”。&lt;/p&gt;
&lt;p&gt;但她真的就迷失了吗？我觉得未必。从第五话爱音留学失败被初中同学发现后，小灯拉着她去水族馆后爱音在那里的袒露的那样，
她并非不知道自己的想法，也无法骗过自己让自己去完全的执行为了自己的面子而指定的行为。这种对表现的畏惧或多或少来自于她成功的过往和自从到英国之后的一路失败。在她的身上“矛盾”可以被理解为是“理想/幻想”和“现实”的冲突。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;要乐奈&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;流浪猫，在剧情中起到一个“当前情况的隐晦反馈”的作用。这从她那“有趣的”和“无趣的”之类的评价中可以看出。简而言之，她在剧情中的更多是一个丰富人物关系，缓和情绪冲击，间接反馈进度的作用，在目前有限的剧情内容内很难完整评价这个角色。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;长崎爽世&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;连接明暗线的实际桥梁，剧情的主要推动者。个人认为，爽世隐喻了这个世界上的许多人：说着是为了大家，实际上没有意识到真正受益的只有自己；
同时为了自己的私欲，也要伪装成是为了大家。这在爽世多次失言中能看出。&lt;/p&gt;
&lt;p&gt;但是，她真的如祥子所说，是自私的吗？我认为不完全是。爽世的“矛盾”更多在于内心情感和现实行为的严重失衡。她真的就是她在被祥子的话语中伤后有如黑化了般的说的“我只是在利用你们啊”一样无可救药吗？显然不是。比起层层剖析她的心理，我觉得用小灯的诗能够更好的表达。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: center;"&gt;&lt;style&gt;
 .compact-inline-mode p {
 margin-top: 0.25em !important;
 margin-bottom: 0.25em !important; 
 }
 
 .compact-inline-mode p:last-child {
 margin-top: 0.25em !important;
 margin-bottom: 0 !important;
 }
&lt;/style&gt;
&lt;div class="compact-inline-mode"&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;我就想要回去&lt;/p&gt;
&lt;p&gt;想要告诉你们&lt;/p&gt;
&lt;p&gt;如果能得到原谅 我坚决不愿放弃&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;椎名立希&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相比而言，我认为立希在剧情中的作用是最难分析清楚的。我能想出无数和她性格相似的角色，却怎么也没法找出一个和她一模一样的。她是这个乐队中的批判者，说起人来毫不留情，但她真的表里如一吗？非也。立希的精神外壳可谓极其之厚，感性和理性交织在一起；虽不希望将感性的一面表露于外在，但她显然不能一直抑制住内心的强烈情感。这也构成了属于她的“矛盾”。&lt;/p&gt;
&lt;p&gt;这种“矛盾”也在她的“劣等感”上集中爆发。外人均拿她和她那完美的姐姐比较，而她自身是最清楚的：她无法做到那样。即使刻意模仿，她仍然无法成为她姐姐那样的人。这种与“自己”的冲突，与“期待”的冲突，反过来也影响了乐队里的每一个人。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;丰川祥子&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;老实说，我对祥子的评价多少参杂点个人情感，因为我是真的喜欢不起来这个角色。既觉得可恨，又觉得可悲。&lt;/p&gt;
&lt;p&gt;一手拉起了 CRYCHIC 乐队又亲自毁掉，刻意回避自己直接造成的过去，在爽世的质问下露骨的甚至可被称为恶毒的把爽世推入了深渊。虽然她离开 CRYCHIC 的原因在这部作品里没有直接表述，我也就不做猜测和隐喻分析，但从她后期的一系列行为其实可以看出，正如睦在第十三话所说，她已经坏掉了。&lt;/p&gt;
&lt;p&gt;但是，这是她自己愿意的吗？也许并不。从她在国中和高中时期的住所可以清晰的看出她的生活经历的翻天覆地的变化：从富家千金的豪宅搬到了底层平民的杂乱无章的样板房。同样的，她的生活也发生了翻天覆地的变化。在第十三话中祥子在客服中心打工的一幕可谓一瞬间改变了我对这个角色的看法：在一种近乎于憎恨的情感参杂入了不少悲哀。可以大胆猜测，这和她的父母差距极大的社会地位有关，但这也许要等到 Ave Mujica 为主角的作品发布后才可以确定。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在人物分析之后，不难看出，MyGO 的所有成员或多或少都能找出属于她们的“矛盾”和“迷茫”。在剧情中也清楚的点出了这即为乐队名的来源：迷子，まいご。她们都是迷路的孩子，但需要肯定的是，迷路不同于迷失，而 MyGO 可以认为就是迷途的孩子返程的起点。正如《解忧杂货店》中的武藤晴美（迷途的小狗）一样，她们都在生活和现实的冲击下暂时的迷失了自我，不再清楚自己究竟是谁，不再清楚自己向往何方。&lt;/p&gt;
&lt;p&gt;但是，这就是终局了吗？&lt;/p&gt;
&lt;p&gt;但是，就没有破局的方法了吗？&lt;/p&gt;
&lt;p&gt;武藤晴美最终找到了属于自己的路，并一直走了下去；而小灯她们，应该还不知道。而正是这种不知，将这些本以闹的分崩离析的成员们重新，并更紧的聚在了一起。因为 MyGO 承载了她们精神中空缺的那一部分，给了她们在迷途中向前的信念。&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;暗がりの中 一方通行に&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;在黑暗深处 单向通行&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;ただ ただ 言葉を書き殴って&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;仅仅 仅仅是 草草写下话语&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;期待するだけ むなしいと分かっていても&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;仅仅是心怀期待 即便知道一切空虚&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 1rem;"&gt;
 &lt;div style="line-height: 1.3;"&gt;救いを求め続けた&lt;/div&gt;
 &lt;div style="line-height: 1.3; font-size: 1.2rem; color: #8f8f8f; margin-top: 4px;"&gt;也在持续寻求着救赎&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;迷子でもいい、迷子でも進め。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不畏迷茫，迷茫着也要砥砺前行。&lt;/p&gt;
&lt;div style="font-size: 1.4rem; color: #b2b2b2;"&gt;&lt;p&gt;原发布于旧博客：&lt;a class="link" href="https://ace-radom.github.io/text/BanG_Dream_Its_MyGO_jian_ping.html" target="_blank" rel="noopener"
 &gt;BanG Dream It&amp;rsquo;s MyGO!!!!! 简评 Ace_Radom&amp;rsquo;s Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2026-06-17 移至此处并重新排版&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Math Typesetting</title><link>https://ace-radom.io/p/math-typesetting/</link><pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/math-typesetting/</guid><description>&lt;p&gt;Stack has built-in support for math typesetting using &lt;a class="link" href="https://katex.org/" target="_blank" rel="noopener"
 &gt;KaTeX&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s not enabled by default side-wide,&lt;/strong&gt; but you can enable it for individual posts by adding &lt;code&gt;math: true&lt;/code&gt; to the front matter. Or you can enable it side-wide by adding &lt;code&gt;math = true&lt;/code&gt; to the &lt;code&gt;params.article&lt;/code&gt; section in &lt;code&gt;config.toml&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="inline-math"&gt;Inline math
&lt;/h2&gt;&lt;p&gt;This is an inline mathematical expression: $\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…$&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="block-math"&gt;Block math
&lt;/h2&gt;$$
 \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } } 
$$&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } } 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;$$
 f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
$$&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>2023新年贺岁词 虞美人</title><link>https://ace-radom.io/p/2023%E6%96%B0%E5%B9%B4%E8%B4%BA%E5%B2%81%E8%AF%8D-%E8%99%9E%E7%BE%8E%E4%BA%BA/</link><pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/2023%E6%96%B0%E5%B9%B4%E8%B4%BA%E5%B2%81%E8%AF%8D-%E8%99%9E%E7%BE%8E%E4%BA%BA/</guid><description>&lt;div style="text-align: center;"&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;/div&gt;



 
 &lt;p style="font-size: 1.4rem; color: #b2b2b2;"&gt;
 first wrote on &lt;time&gt;2022-12-27&lt;/time&gt;
 &lt;/p&gt;
</description></item><item><title>夜深祭北风——2020贺岁篇</title><link>https://ace-radom.io/p/%E5%A4%9C%E6%B7%B1%E7%A5%AD%E5%8C%97%E9%A3%8E2020%E8%B4%BA%E5%B2%81%E7%AF%87/</link><pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/%E5%A4%9C%E6%B7%B1%E7%A5%AD%E5%8C%97%E9%A3%8E2020%E8%B4%BA%E5%B2%81%E7%AF%87/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;好像是转眼之间，一年又走完了。&lt;/p&gt;
&lt;p&gt;岁月如白驹过隙，转眼即逝，只留下记忆的浮尘。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;上海这几天风很大，夜深人静之时只听窗外的呼呼风声。&lt;/p&gt;
&lt;p&gt;上次写文章的时候银杏树叶还没落，现在学校里只剩下光秃秃的树干了。&lt;/p&gt;
&lt;p&gt;铺满银杏叶的小路上，小区的工作人员正在挂红灯笼；晚上的北风里，接了电灯的灯笼随风飘动。&lt;/p&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&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;天黑了，夜深了，人静了。&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;
&lt;div style="height: 2rem;"&gt;&lt;/div&gt;
&lt;p&gt;就像风总会从窗户缝里钻进来一样，时光总是会逝去的。看着当年世博会时的“2010”雕塑，不觉发现十年已经过去了。&lt;/p&gt;
&lt;p&gt;二零一九的北风总会吹过，二零二零的春草总会发芽。&lt;/p&gt;
&lt;p&gt;现在是晚上十点，二十一世纪一零年代还有最后两小时。&lt;/p&gt;
&lt;p&gt;心中默默和二零一九说再见吧。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;告别二零一九，告别二十一世纪一零年代，告别旧时光；&lt;/li&gt;
&lt;li&gt;迎接二零二零，迎接二十一世纪二零年代，迎接新纪元。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果真有能够擦去过去的橡皮，那现在就应该用用了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;挥手，别一九；&lt;/li&gt;
&lt;li&gt;默默展望未来的二零。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;二零一九虽北风依旧，但二零二零还是未知。&lt;/p&gt;
&lt;p&gt;各位加油，去迎接未知的可能。&lt;/p&gt;
&lt;div style="text-align: right; padding-right: 10rem;"&gt;&lt;p&gt;己亥年腊月初六夜&lt;/p&gt;
&lt;p&gt;公历二零一九年岁末&lt;/p&gt;
&lt;/div&gt;
&lt;div style="font-size: 1.4rem; color: #b2b2b2;"&gt;&lt;p&gt;原文发布于洛谷博客：&lt;a class="link" href="https://www.luogu.com.cn/blog/KKLSC2017/ye-shen-ji-bei-feng-2020-he-sui-pian" target="_blank" rel="noopener"
 &gt;夜深祭北风——2020贺岁篇 - 闲形·幻影 的博客 - 洛谷博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2026-06-17 移至此处并重新排版&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>记三直老师</title><link>https://ace-radom.io/p/%E8%AE%B0%E4%B8%89%E7%9B%B4%E8%80%81%E5%B8%88/</link><pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate><guid>https://ace-radom.io/p/%E8%AE%B0%E4%B8%89%E7%9B%B4%E8%80%81%E5%B8%88/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;只有失去，才知道珍惜&lt;/p&gt;
&lt;p&gt;只有失去，才知道留恋&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;肖老师，白白胖胖，是我们班中预的语文老师。因名“矗”，故戏其名为“三直老师”。&lt;/p&gt;
&lt;p&gt;其实肖老师与我们相处的时间并不长——他中预下还因病请了快半个学期的假。尽管如此，那一周五节到六节的语文课，成了我们的快乐时光。&lt;/p&gt;
&lt;p&gt;“XXX，你脸上是不是有蚊子了？”&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;
&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;是肖老师常年挂在脸上的笑容吗？&lt;/p&gt;
&lt;p&gt;是三直老师常年挂在嘴边的笑容吗？&lt;/p&gt;
&lt;p&gt;显然不是。&lt;/p&gt;
&lt;p&gt;少的，是三直老师；而这，却无法弥补。&lt;/p&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&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;“你别管他。”&lt;/p&gt;
&lt;div style="height: 2rem;"&gt;&lt;/div&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;有些事，真的，只有经历了，才能理解。&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;
&lt;p&gt;我们都是这样的人：只有失去，方知珍惜的人。我想，三直老师也是，只不过没有我们这么疯狂罢了。&lt;/p&gt;
&lt;div style="text-align: right; padding-right: 10rem;"&gt;二零一八年十一月十日&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="后记"&gt;后记
&lt;/h2&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;和肖老师在一起的时间越来越少。越是少，我们越是珍惜。&lt;/p&gt;
&lt;p&gt;还是那句话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只有失去，才知道珍惜；&lt;/li&gt;
&lt;li&gt;只有失去，才知道留恋。&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: right; padding-right: 10rem;"&gt;二零一九年七月一日&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="毕业后再记"&gt;毕业后再记
&lt;/h2&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;但我仍然是忘不了三直老师，忘不了他那标志性的微笑，标志性的幽默，标志性的风趣。&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;
&lt;p&gt;愿这份祝福，能跨越千里之遥，送到他的身边。&lt;/p&gt;
&lt;div style="text-align: right; padding-right: 10rem;"&gt;二零二二年八月十二日凌晨 于德国林道&lt;/div&gt;
&lt;div style="font-size: 1.4rem; color: #b2b2b2;"&gt;&lt;p&gt;最初记于初中作文本 后整理为小作文集&lt;/p&gt;
&lt;p&gt;后记与毕业后再记原发布于旧博客：&lt;a class="link" href="https://ace-radom.github.io/text/ji_san_zhi_lao_shi.html" target="_blank" rel="noopener"
 &gt;记三直老师 Ace_Radom&amp;rsquo;s Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2026-06-17 移至此处并重新排版&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>