<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://litaolin.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://litaolin.com/" rel="alternate" type="text/html" hreflang="zh" /><updated>2026-09-13T15:57:19-04:00</updated><id>https://litaolin.com/feed.xml</id><title type="html">Litao</title><subtitle>在美国的生活观察，以及数据集建设、程序开发的规范方法与工具推荐，以 CBDB 为例。</subtitle><entry xml:lang="zh"><title type="html">从守望先锋走进纽约中央车站</title><link href="https://litaolin.com/2026/overwatch-grand-central/" rel="alternate" type="text/html" title="从守望先锋走进纽约中央车站" /><published>2026-09-11T00:00:00-04:00</published><updated>2026-09-11T00:00:00-04:00</updated><id>https://litaolin.com/2026/overwatch-grand-central</id><content type="html" xml:base="https://litaolin.com/2026/overwatch-grand-central/"><![CDATA[<p>这篇只说两件事。</p>

<p>第一件：我玩守望先锋。</p>

<p>第二件：游戏里那张以纽约为背景的地图，车站大厅那一段，一眼就能认出原型是中央车站（Grand Central Terminal）。我去实地看了一次，录了一段。</p>

<div class="embed">
<iframe src="https://player.bilibili.com/player.html?bvid=BV1Sxk3BpEQA&amp;autoplay=0&amp;high_quality=1&amp;danmaku=0" title="实地探访纽约中央车站" loading="lazy" scrolling="no" frameborder="no" allowfullscreen=""></iframe>
</div>

<p>播放器加载不出来的话，<a href="https://www.bilibili.com/video/BV1Sxk3BpEQA/">直接去 B 站看</a>。</p>]]></content><author><name></name></author><summary type="html"><![CDATA[这篇只说两件事。]]></summary></entry><entry xml:lang="zh"><title type="html">战争可以避免吗：三个层次的答案不一样</title><link href="https://litaolin.com/2026/war-avoidable/" rel="alternate" type="text/html" title="战争可以避免吗：三个层次的答案不一样" /><published>2026-09-06T00:00:00-04:00</published><updated>2026-09-06T00:00:00-04:00</updated><id>https://litaolin.com/2026/war-avoidable</id><content type="html" xml:base="https://litaolin.com/2026/war-avoidable/"><![CDATA[<p>这是一篇示范文章。你可以直接删掉它，或者留着当语法参考——下面用到的写法基本覆盖了日常写作需要的全部功能。</p>

<p>"战争可以避免吗"是个看起来清楚、其实混着三个不同问题的提问。在个体层次上问的是决策者能不能做出别的选择；在国家层次上问的是政体和国内政治结构是否注定导向对外强硬；在体系层次上问的是无政府状态本身是否必然产生冲突。三个层次给出的答案不仅不同，甚至方向相反。</p>

<h2 id="层次不是尺度而是不同的因果机制">层次不是尺度，而是不同的因果机制</h2>

<p>沃尔兹式的结构现实主义会说，体系的压力足够强，以至于个体的品性和国家的政体都可以被约掉。<sup id="fnref:waltz" role="doc-noteref"><a href="#fn:waltz" class="footnote" rel="footnote">1</a></sup> 但这个论断只有在压力足够极端时才成立——而大部分时候它并不极端。</p>

<blockquote>
  <p>结构塑造的是可能性的分布，不是具体的结果。把分布当结果，是把概率论错当成决定论。</p>
</blockquote>

<p>这里有个容易被忽略的地方：讨价还价失败的模型其实是<strong>跨层次</strong>的。信息不对称是决策者层面的认知问题，承诺问题是体系层面的结构问题，两者被同一个形式框架吞进去了。<sup id="fnref:fearon" role="doc-noteref"><a href="#fn:fearon" class="footnote" rel="footnote">2</a></sup> 形式化带来了统一，代价是掩盖了它们分属不同层次这个事实。</p>

<h2 id="一个例子">一个例子</h2>

<p>秋天在剑桥的一次讨论里，有人提出：如果承诺问题的根源是未来实力分布的变化，那么它在原则上无法通过谈判解决，因为任何承诺都缺乏第三方执行。这个推论看着无懈可击，但它悄悄假设了实力变化是外生的。一旦承认实力变化本身是政策选择的结果，问题就从"无解"变回了"有条件可解"。</p>

<hr />

<h2 id="语法参考">语法参考</h2>

<p>写作时会用到的几样：</p>

<p><strong>脚注</strong>——正文里写 <code class="language-plaintext highlighter-rouge">[^标签]</code>，文末写 <code class="language-plaintext highlighter-rouge">[^标签]: 内容</code>，序号自动生成，位置自动排。</p>

<p><strong>引用块</strong>——行首加 <code class="language-plaintext highlighter-rouge">&gt;</code>。</p>

<p><strong>外链视频</strong>——不要把视频文件放进仓库，嵌一个播放器：</p>

<div class="embed">
<iframe src="https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ" title="示例视频" loading="lazy" allowfullscreen=""></iframe>
</div>

<p><strong>图片</strong>——压成 WebP 放进 <code class="language-plaintext highlighter-rouge">assets/img/</code>，然后：</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">![</span><span class="nv">图片说明</span><span class="p">](</span><span class="sx">/assets/img/文件名.webp</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>代码</strong>——用三个反引号包起来。</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:waltz" role="doc-endnote">
      <p>Kenneth Waltz, <em>Theory of International Politics</em> (1979), 第五章。这个论断的强弱版本差别很大，值得单独写一篇。 <a href="#fnref:waltz" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:fearon" role="doc-endnote">
      <p>James Fearon, "Rationalist Explanations for War," <em>International Organization</em> 49:3 (1995)。 <a href="#fnref:fearon" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[这是一篇示范文章。你可以直接删掉它，或者留着当语法参考——下面用到的写法基本覆盖了日常写作需要的全部功能。]]></summary></entry><entry xml:lang="zh"><title type="html">为什么要建这个站点</title><link href="https://litaolin.com/2026/why-this-site/" rel="alternate" type="text/html" title="为什么要建这个站点" /><published>2026-08-26T00:00:00-04:00</published><updated>2026-08-26T00:00:00-04:00</updated><id>https://litaolin.com/2026/why-this-site</id><content type="html" xml:base="https://litaolin.com/2026/why-this-site/"><![CDATA[<p>这个站有一半是写方法的：程序开发和数据集制作的一般规范，以及好用的工具，多半以 CBDB 为例。说明一下为什么写这些。</p>

<p>我个人非常在意工作流程的规范性，力求找到所有环节的最佳实践。</p>

<p>硕士期间我长期从事基于机器学习、神经网络模型的古文自动化处理工具的开发与评测，以及中国古代文献的知识组织和知识挖掘研究。过往的研究经历让我意识到，一个不规范的开始，往往使得后续的大量时间浪费在修补和纠正前期工作上。</p>

<p>所以我希望在这里分享大家好用的方法。这里也有我的一点私心：作为合作者，大家使用这些方法，省下的是自己的时间，也会间接地为我提供便利。</p>

<p>建这个站点还有另一方面的动机：想借它探索 AI 的创造力，以及美国互联网生态基础设施的可用性和可靠性。</p>]]></content><author><name></name></author><summary type="html"><![CDATA[这个站有一半是写方法的：程序开发和数据集制作的一般规范，以及好用的工具，多半以 CBDB 为例。说明一下为什么写这些。]]></summary></entry><entry xml:lang="zh"><title type="html">这个站点是怎么搭的</title><link href="https://litaolin.com/2026/colophon/" rel="alternate" type="text/html" title="这个站点是怎么搭的" /><published>2026-08-22T00:00:00-04:00</published><updated>2026-08-22T00:00:00-04:00</updated><id>https://litaolin.com/2026/colophon</id><content type="html" xml:base="https://litaolin.com/2026/colophon/"><![CDATA[<p>这个站点是 Jekyll 生成的静态页面，托管在 GitHub Pages 上，用的是 Pages 的原生构建，没有配 GitHub Actions。整站没有任何服务端逻辑，也没有第三方追踪脚本。写作流程是在编辑器里写 Markdown，<code class="language-plaintext highlighter-rouge">git push</code>，GitHub 自动构建并发布。</p>

<p>暂时不做评论区。理由不是技术上做不到，而是我想先把写作本身跑顺。多媒体内容一律外链——视频挂在别的平台，大文件放 Releases，站点本身只有文字和少量压缩过的图片。这样加载快，也不会因为某个第三方服务停摆而坏掉。</p>

<p>正文用 Source Serif 4 配思源宋体系统，两者本是同一设计体系，中英混排时横竖笔画的粗细能对上。中文段落两端对齐，西文段落左对齐——汉字等宽，两端对齐不会出现西文那种断裂的空隙。</p>

<p>想订阅的话，页脚有 RSS。</p>

<p>下面是完整的搭建和日常维护记录。原先散在几个文档里，现在归到一处。</p>

<h2 id="从零建一个">从零建一个</h2>

<p><strong>仓库命名。</strong> 新建一个<strong>公开</strong>仓库，名字必须严格是 <code class="language-plaintext highlighter-rouge">你的用户名.github.io</code>——用户名是 <code class="language-plaintext highlighter-rouge">litao</code>，仓库名就得是 <code class="language-plaintext highlighter-rouge">litao.github.io</code>。这是 GitHub 识别「个人主站」的唯一命名方式，差一个字符都不行。</p>

<p><strong>上传文件。</strong> 把项目全部文件放进仓库根目录。网页上传走「Add file → Upload files」；命令行：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git init
git add <span class="nb">.</span>
git commit <span class="nt">-m</span> <span class="s2">"初始站点"</span>
git branch <span class="nt">-M</span> main
git remote add origin https://github.com/你的用户名/你的用户名.github.io.git
git push <span class="nt">-u</span> origin main
</code></pre></div></div>

<p><strong>打开 Pages。</strong> 仓库 → Settings → Pages，三项设成：Source 选 <strong>Deploy from a branch</strong>，Branch 选 <code class="language-plaintext highlighter-rouge">main</code>，Folder 选 <code class="language-plaintext highlighter-rouge">/ (root)</code>。保存后等一两分钟，<code class="language-plaintext highlighter-rouge">https://你的用户名.github.io</code> 就能访问了。</p>

<h2 id="配置">配置</h2>

<p><code class="language-plaintext highlighter-rouge">_config.yml</code> 顶部那几个字段是唯一需要动的地方：</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">title</code> / <code class="language-plaintext highlighter-rouge">title_en</code>——你的名字。两者相同时，英文那行会自动隐藏。</li>
  <li><code class="language-plaintext highlighter-rouge">tagline</code> / <code class="language-plaintext highlighter-rouge">tagline_en</code>——首页正中的定位语，中英各一行。</li>
  <li><code class="language-plaintext highlighter-rouge">email</code>——页脚的联系邮箱。</li>
  <li><code class="language-plaintext highlighter-rouge">url</code>——<code class="language-plaintext highlighter-rouge">https://你的用户名.github.io</code>。</li>
</ul>

<p>然后把 <code class="language-plaintext highlighter-rouge">about.md</code> 里的占位内容换成自己的介绍。改完 <code class="language-plaintext highlighter-rouge">_config.yml</code> 要重新推送才生效。</p>

<h2 id="日常写作">日常写作</h2>

<p><strong>文件命名。</strong> 在 <code class="language-plaintext highlighter-rouge">_posts/</code> 下新建文件，名字必须是 <code class="language-plaintext highlighter-rouge">年-月-日-英文短名.md</code>。命名或日期格式不对，文章不会显示——这是最常见的「我明明推上去了怎么没有」的原因。</p>

<p><strong>Front matter 模板：</strong></p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">title</span><span class="pi">:</span> <span class="s2">"</span><span class="s">中文标题"</span>
<span class="na">title_en</span><span class="pi">:</span> <span class="s2">"</span><span class="s">English</span><span class="nv"> </span><span class="s">Title"</span>
<span class="na">summary</span><span class="pi">:</span> <span class="s2">"</span><span class="s">首页列表里显示的一两句话。可以不写。"</span>
<span class="na">date</span><span class="pi">:</span> <span class="s">2026-09-15</span>
<span class="na">lang</span><span class="pi">:</span> <span class="s">zh</span>
<span class="nn">---</span>

正文从这里开始。
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">lang</code> 填 <code class="language-plaintext highlighter-rouge">zh</code> 或 <code class="language-plaintext highlighter-rouge">en</code>，填 <code class="language-plaintext highlighter-rouge">zh</code> 会自动两端对齐。</p>

<p><strong>常用元素。</strong> 脚注是正文里写 <code class="language-plaintext highlighter-rouge">[^标签]</code>、文末写 <code class="language-plaintext highlighter-rouge">[^标签]: 内容</code>，序号和位置自动排；引用块行首加 <code class="language-plaintext highlighter-rouge">&gt;</code>。</p>

<p>图片压成 WebP 放进 <code class="language-plaintext highlighter-rouge">assets/img/</code>，全宽图控制在 100KB 以内，压缩用 <a href="https://squoosh.app">Squoosh</a> 就够。引用方式：</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">![</span><span class="nv">说明</span><span class="p">](</span><span class="sx">/assets/img/文件名.webp</span><span class="p">)</span>
</code></pre></div></div>

<p>视频不要上传进仓库，嵌一个播放器：</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"embed"</span><span class="nt">&gt;</span>
<span class="nt">&lt;iframe</span> <span class="na">src=</span><span class="s">"https://www.youtube-nocookie.com/embed/视频ID"</span> <span class="na">title=</span><span class="s">"标题"</span> <span class="na">loading=</span><span class="s">"lazy"</span> <span class="na">allowfullscreen</span><span class="nt">&gt;&lt;/iframe&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">.embed</code> 会保持 16:9 比例，<code class="language-plaintext highlighter-rouge">loading="lazy"</code> 减少首屏压力。讲稿 PDF、数据集这类大文件放 GitHub Releases 或 Zenodo，文章里外链引用。</p>

<h2 id="字体与本地预览">字体与本地预览</h2>

<p>西文正文是 Source Serif 4，中文用系统宋体（Mac 上通常是 Songti SC）。Windows 下宋体屏显偏细，把 <code class="language-plaintext highlighter-rouge">_config.yml</code> 里的</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">typeface</span><span class="pi">:</span> <span class="s">serif</span>
</code></pre></div></div>

<p>改成 <code class="language-plaintext highlighter-rouge">sans</code>，中文就切到黑体（苹方 / 思源黑体 / 微软雅黑）。</p>

<p>本地预览是可选的，不预览直接推上去看效果也行。要在本地跑：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem <span class="nb">install </span>bundler
bundle <span class="nb">install
</span>bundle <span class="nb">exec </span>jekyll serve
</code></pre></div></div>

<p>然后访问 <code class="language-plaintext highlighter-rouge">http://localhost:4000</code>。</p>

<h2 id="几件需要记住的事">几件需要记住的事</h2>

<p>仓库是公开的，源文件对所有人可见，别提交私人内容。更要紧的是：Git 删除文件不会抹掉历史记录，敏感内容一旦提交过，就可能长期可见——发现提交错了，改文件是不够的。</p>

<p>容量上，站点上限约 1GB，月流量软限制约 100GB，所以媒体一律外链。</p>

<p>插件目前只用 GitHub Pages 白名单内的三个（feed、sitemap、seo-tag），所以能原生构建；哪天需要白名单外的插件，就得改成 GitHub Actions 构建流程，这是个不小的切换。想加邮件订阅的话，在 <code class="language-plaintext highlighter-rouge">_includes/footer.html</code> 里放个表单就行，不影响现有结构。</p>]]></content><author><name></name></author><summary type="html"><![CDATA[这个站点是 Jekyll 生成的静态页面，托管在 GitHub Pages 上，用的是 Pages 的原生构建，没有配 GitHub Actions。整站没有任何服务端逻辑，也没有第三方追踪脚本。写作流程是在编辑器里写 Markdown，git push，GitHub 自动构建并发布。]]></summary></entry></feed>