<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ATMxsp01</title><description>Here&apos;s the way to the stars...</description><link>https://atmxsp01.github.io/</link><language>zh_CN</language><item><title>test</title><link>https://atmxsp01.github.io/posts/test/</link><guid isPermaLink="true">https://atmxsp01.github.io/posts/test/</guid><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这是我的第一篇手写博客， 使用 neovim + 自己定制的 blog 插件完成所有的操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/img-20260919-174902.png&quot; alt=&quot;test-pic1&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>代码主题预览（临时页）</title><link>https://atmxsp01.github.io/posts/code-theme-demo/</link><guid isPermaLink="true">https://atmxsp01.github.io/posts/code-theme-demo/</guid><description>临时页面：用于查看 Nord 代码主题在 Python / C++ / Rust / Bash / Lean4 下的实际渲染效果，看完即删。</description><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;这是一个临时页面&lt;/strong&gt;，只为预览代码块主题（暗色 = Nord）。看完就会删除。&lt;/p&gt;
&lt;p&gt;站点默认跟随系统明暗；想对比两套配色，点右上角的明暗切换按钮。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;1. Python&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;from dataclasses import dataclass
from typing import Iterable

import torch


@dataclass(frozen=True)
class Sample:
    &quot;&quot;&quot;一条训练样本。&quot;&quot;&quot;
    text: str
    label: int


def batchify(samples: Iterable[Sample], size: int = 32) -&amp;gt; list[list[Sample]]:
    batch: list[Sample] = []
    for item in samples:
        batch.append(item)
        if len(batch) == size:      # 满一批就吐出
            yield batch
            batch = []
    if batch:
        yield batch


if __name__ == &quot;__main__&quot;:
    total = sum(1 for _ in batchify([Sample(f&quot;x{i}&quot;, i % 2) for i in range(100)]))
    print(f&quot;batches = {total}, cuda = {torch.cuda.is_available()}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. C++&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;queue&amp;gt;
#include &amp;lt;vector&amp;gt;

namespace graph {

template &amp;lt;typename T&amp;gt;
class BFS {
public:
    explicit BFS(const std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; adj) : adj_(adj) {}

    std::vector&amp;lt;int&amp;gt; run(int src) const {
        std::vector&amp;lt;int&amp;gt; dist(adj_.size(), -1);
        std::queue&amp;lt;int&amp;gt; q;
        dist[src] = 0;
        q.push(src);
        while (!q.empty()) {
            const int u = q.front();
            q.pop();
            for (const int v : adj_[u]) {
                if (dist[v] == -1) {          // 未访问
                    dist[v] = dist[u] + 1;
                    q.push(v);
                }
            }
        }
        return dist;
    }

private:
    const std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; adj_;
};

}  // namespace graph

int main() {
    const std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; adj{{1, 2}, {3}, {3}, {}};
    const auto dist = graph::BFS&amp;lt;int&amp;gt;(adj).run(0);
    for (std::size_t i = 0; i &amp;lt; dist.size(); ++i)
        std::cout &amp;lt;&amp;lt; &quot;dist[&quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;] = &quot; &amp;lt;&amp;lt; dist[i] &amp;lt;&amp;lt; &apos;\n&apos;;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3. Rust&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;use std::collections::HashMap;
use std::hash::Hash;

#[derive(Debug, Default)]
pub struct LruCache&amp;lt;K, V&amp;gt; {
    map: HashMap&amp;lt;K, V&amp;gt;,
    capacity: usize,
    hits: u64,
}

impl&amp;lt;K: Eq + Hash + Clone, V: Clone&amp;gt; LruCache&amp;lt;K, V&amp;gt; {
    pub fn new(capacity: usize) -&amp;gt; Self {
        assert!(capacity &amp;gt; 0, &quot;capacity must be positive&quot;);
        Self { map: HashMap::new(), capacity, hits: 0 }
    }

    pub fn get(&amp;amp;mut self, key: &amp;amp;K) -&amp;gt; Option&amp;lt;&amp;amp;V&amp;gt; {
        match self.map.get(key) {
            Some(value) =&amp;gt; {
                self.hits += 1;
                Some(value)
            }
            None =&amp;gt; None,
        }
    }

    pub fn insert(&amp;amp;mut self, key: K, value: V) -&amp;gt; Result&amp;lt;(), String&amp;gt; {
        if self.map.len() &amp;gt;= self.capacity &amp;amp;&amp;amp; !self.map.contains_key(&amp;amp;key) {
            return Err(format!(&quot;cache full: {} entries&quot;, self.capacity));
        }
        self.map.insert(key, value);
        Ok(())
    }

    pub fn hit_rate(&amp;amp;self) -&amp;gt; f64 {
        if self.map.is_empty() { 0.0 } else { self.hits as f64 / self.map.len() as f64 }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4. Bash&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env bash
set -euo pipefail

REPO=&quot;${1:-ATMxsp01/blog-content}&quot;
BRANCH=&quot;${BRANCH:-main}&quot;

echo &quot;==&amp;gt; 同步 $REPO ($BRANCH)&quot;
if ! git -C &quot;$REPO&quot; diff --quiet; then
    echo &quot;工作树不干净，先提交&quot; &amp;gt;&amp;amp;2
    exit 1
fi

for step in sync validate build; do
    printf &apos;  -&amp;gt; %s ... &apos; &quot;$step&quot;
    pnpm &quot;content:$step&quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; echo &quot;ok&quot; || { echo &quot;failed&quot;; exit 1; }
done

# 统计产物
find dist -name &apos;*.html&apos; | wc -l | xargs printf &apos;pages: %s\n&apos;
echo &quot;done in ${SECONDS}s&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;5. Lean 4&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;import Mathlib.Data.Nat.Basic

namespace Demo

/-- 归纳定义的偶数谓词。 -/
inductive Even : Nat → Prop
  | zero : Even 0
  | add_two {n : Nat} : Even n → Even (n + 2)

theorem even_add (m n : Nat) (hm : Even m) (hn : Even n) : Even (m + n) := by
  induction hm with
  | zero =&amp;gt; simpa using hn
  | add_two _ ih =&amp;gt; simpa [Nat.add_assoc] using Even.add_two ih

def double (n : Nat) : Nat := n * 2

example (n : Nat) : double n = n + n := by
  simp [double, Nat.mul_two]   -- 一条 tactic 搞定

end Demo
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;6. 同一段代码的对比（无 &lt;code&gt;title&lt;/code&gt;、无行号）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;行号在 Expressive Code 里&lt;strong&gt;默认开启&lt;/strong&gt;（&lt;code&gt;plugin-line-numbers&lt;/code&gt; 的 &lt;code&gt;showLineNumbers&lt;/code&gt;
默认值为 &lt;code&gt;true&lt;/code&gt;），所以必须显式写 &lt;code&gt;showLineNumbers=false&lt;/code&gt; 才是真的无行号。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;def fib(n: int) -&amp;gt; int:
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;7. 字体四形态（ComicMathMono）&lt;/h2&gt;
&lt;p&gt;当前 &lt;code&gt;mono&lt;/code&gt; 角色是 &lt;strong&gt;ComicMathMono&lt;/strong&gt; 的 Regular / Bold / Italic / Bold Italic 四个真实字面；
粗斜体不再依赖浏览器合成。&lt;/p&gt;
&lt;p&gt;&amp;lt;pre class=&quot;font-demo&quot; style=&quot;font-weight: 400;&quot;&amp;gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0); // Regular&amp;lt;/pre&amp;gt;
&amp;lt;pre class=&quot;font-demo&quot; style=&quot;font-weight: 700;&quot;&amp;gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0); // Bold&amp;lt;/pre&amp;gt;
&amp;lt;pre class=&quot;font-demo&quot; style=&quot;font-style: italic;&quot;&amp;gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0); // Italic&amp;lt;/pre&amp;gt;
&amp;lt;pre class=&quot;font-demo&quot; style=&quot;font-weight: 700; font-style: italic;&quot;&amp;gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0); // Bold Italic&amp;lt;/pre&amp;gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;形式&lt;/th&gt;
&lt;th&gt;行内代码效果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Regular&lt;/td&gt;
&lt;td&gt;&lt;code&gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bold&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0);&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Italic&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;code&gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0);&lt;/code&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;Bold Italic&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;&lt;code&gt;const total = items.reduce((a, b) =&amp;gt; a + b, 0);&lt;/code&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;表格使用作者强调：Regular 400 / Bold 600 / Italic 400 italic / Bold Italic 600 italic；
主题会把 600 匹配到最近的 700 真实字面，四行宽度一致。&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Hello Shirone</title><link>https://atmxsp01.github.io/posts/welcome/</link><guid isPermaLink="true">https://atmxsp01.github.io/posts/welcome/</guid><description>迁移到 Shirone 后的第一篇占位文章，可随时删除。</description><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;博客框架已从 Mizuki 迁移到 Shirone，这篇占位文用于验证写作流程与构建管线。&lt;/p&gt;
&lt;h2&gt;为什么迁移&lt;/h2&gt;
&lt;p&gt;Mizuki 上游已停止维护并迁移至 Shirone。与其继续在一个不再更新的框架上做定制，不如趁内容还少的时候把结构一次性做对。&lt;/p&gt;
&lt;h2&gt;这次迁移做了什么&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;内容仓库重组为 Shirone 的目录模型（&lt;code&gt;content/&lt;/code&gt;、&lt;code&gt;data/&lt;/code&gt;、&lt;code&gt;assets/&lt;/code&gt;、&lt;code&gt;public/&lt;/code&gt;、&lt;code&gt;config/&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;个性化设置从代码里的 &lt;code&gt;src/config/*.ts&lt;/code&gt; 移到内容仓库的 &lt;code&gt;config/*.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;部署切到 GitHub Pages 的 artifact 路线&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;下一步&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;写真正的文章（这篇只是占位）&lt;/li&gt;
&lt;li&gt;把侧边栏数据（技能、项目、时间线等）换成自己的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;!-- 闭环复测 2026-09-10T05:13:49Z --&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>