<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Silearner</title>
  
  <subtitle>I seek truth</subtitle>
  <link href="https://blog.chaos.run/atom.xml" rel="self"/>
  
  <link href="https://blog.chaos.run/"/>
  <updated>2026-02-02T15:05:36.996Z</updated>
  <id>https://blog.chaos.run/</id>
  
  <author>
    <name>Chaos</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  <follow_challenge>
    <feedId>56577419992440832</feedId>
    <userId>55131224729366528</userId>
  </follow_challenge>
  
  <entry>
    <title>优化终端体验</title>
    <link href="https://blog.chaos.run/dreams/use-terminal-properly/"/>
    <id>https://blog.chaos.run/dreams/use-terminal-properly/</id>
    <published>2026-02-02T16:58:40.000Z</published>
    <updated>2026-02-02T15:05:36.996Z</updated>
    
    <content type="html"><![CDATA[<p>本文作为笔记，以便部署新环境时使用。</p><span id="more"></span><h2 id="使用-zsh"><a class="markdownIt-Anchor" href="#使用-zsh"></a> 使用 Zsh</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install zsh</span><br><span class="line">chsh -s $(<span class="built_in">which</span> zsh)</span><br></pre></td></tr></table></figure><p>重新登录后，安装 oh-my-zsh：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sh -c <span class="string">&quot;<span class="subst">$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)</span>&quot;</span></span><br></pre></td></tr></table></figure><p>安装主题和插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/zsh-users/zsh-syntax-highlighting.git <span class="variable">$&#123;ZSH_CUSTOM:-~/.oh-my-zsh/custom&#125;</span>/plugins/zsh-syntax-highlighting</span><br><span class="line">git <span class="built_in">clone</span> --depth=1 https://github.com/romkatv/powerlevel10k.git <span class="variable">$&#123;ZSH_CUSTOM:-<span class="variable">$HOME</span>/.oh-my-zsh/custom&#125;</span>/themes/powerlevel10k</span><br><span class="line">git <span class="built_in">clone</span> https://github.com/zsh-users/zsh-autosuggestions <span class="variable">$&#123;ZSH_CUSTOM:-~/.oh-my-zsh/custom&#125;</span>/plugins/zsh-autosuggestions</span><br></pre></td></tr></table></figure><p>修改配置：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.zshrc</span><br></pre></td></tr></table></figure><p>取消如下注释：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># If you come from bash you might have to change your $PATH.</span><br><span class="line">export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH</span><br></pre></td></tr></table></figure><p>修改主题：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ZSH_THEME=&quot;powerlevel10k/powerlevel10k&quot;</span><br></pre></td></tr></table></figure><p>添加插件：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">plugins=(</span><br><span class="line">    git</span><br><span class="line">    zsh-autosuggestions</span><br><span class="line">    zsh-syntax-highlighting</span><br><span class="line">    z</span><br><span class="line">    sudo</span><br><span class="line">    extract</span><br><span class="line">)</span><br></pre></td></tr></table></figure><p>使之生效：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br><span class="line">p10k configure</span><br></pre></td></tr></table></figure><h2 id="快捷用法"><a class="markdownIt-Anchor" href="#快捷用法"></a> 快捷用法</h2><ul><li><code>z 目录名的一部分</code>：自动切换至匹配的高频目录</li><li><code>d</code>：列出最近访问过的目录列表，然后输入数字即可跳转</li><li><code>..</code>：等同于 <code>cd ..</code></li><li><code>...</code>：等同于 <code>cd ../..</code></li><li><code>-</code>：返回上一次所在的目录</li><li><code>Ctrl + F</code>：标向右移动，接受自动建议</li><li><code>Alt + F</code>：一次只接受一个单词，而不是整句</li><li>按两下 ESC：自动加 <code>sudo</code></li><li>输入 <code>cd /u/l/b</code> 然后按 <code>Tab</code>：自动补全为 <code>cd /usr/local/bin/</code></li><li><code>x filename</code>：自动判断格式并用正确的命令解压</li></ul><h2 id="mise"><a class="markdownIt-Anchor" href="#mise"></a> Mise</h2><p>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">curl https://mise.run | sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 再按程序提示运行 eval 命令</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br><span class="line">mise doctor</span><br><span class="line">mise use --global python@3.12</span><br><span class="line">mise use --global node@lts</span><br><span class="line">mise use --global pnpm@latest</span><br></pre></td></tr></table></figure><h2 id="fzf"><a class="markdownIt-Anchor" href="#fzf"></a> fzf</h2><p>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mise use -g fzf@latest</span><br><span class="line"><span class="built_in">source</span> &lt;(fzf --zsh)</span><br></pre></td></tr></table></figure><p>用法：</p><ul><li><code>Ctrl + R</code>：搜索 history</li><li><code>Ctrl + T</code>：快速把文件路径填入命令行</li><li><code>Alt + C</code>：快速切换目录，搜索并确认</li><li><code>**</code><ul><li><code>kill -9 **</code> 然后按 <code>Tab</code>：会列出所有进程，搜索名字，回车，PID 自动填入</li><li><code>export **</code> 然后按 <code>Tab</code>：fzf 会列出当前所有环境变量</li><li><code>cd **</code> 然后按 <code>Tab</code>：搜索并选择目录</li></ul></li></ul><h2 id="bat"><a class="markdownIt-Anchor" href="#bat"></a> bat</h2><p>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install bat</span><br><span class="line"><span class="built_in">mkdir</span> -p ~/.local/bin</span><br><span class="line"><span class="built_in">ln</span> -s /usr/bin/batcat ~/.local/bin/bat</span><br></pre></td></tr></table></figure><p>设置别名：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.zshrc</span><br></pre></td></tr></table></figure><p>添加：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">alias bat=&quot;bat --style=numbers --color=always&quot;</span><br></pre></td></tr></table></figure><p>使之生效：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><h2 id="fd"><a class="markdownIt-Anchor" href="#fd"></a> fd</h2><p>将 <code>find</code> 替换为 <code>fd</code> 可提高查找速度：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install fd-find</span><br><span class="line"><span class="built_in">mkdir</span> -p ~/.local/bin</span><br><span class="line"><span class="built_in">ln</span> -s $(<span class="built_in">which</span> fdfind) ~/.local/bin/fd</span><br><span class="line">vim ~/.zshrc</span><br></pre></td></tr></table></figure><p>末尾添加：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"># ====================================================</span><br><span class="line">#  FZF Performance Fix (Switch to fdfind)</span><br><span class="line"># ====================================================</span><br><span class="line"></span><br><span class="line"># 1. Use fdfind for Ctrl+T and default search</span><br><span class="line">export FZF_DEFAULT_COMMAND=&#x27;fdfind --type f --hidden --follow --exclude .git --exclude node_modules&#x27;</span><br><span class="line">export FZF_CTRL_T_COMMAND=&quot;$FZF_DEFAULT_COMMAND&quot;</span><br><span class="line"></span><br><span class="line"># 2. Use fdfind for Alt+C (directory navigation)</span><br><span class="line">export FZF_ALT_C_COMMAND=&#x27;fdfind --type d --hidden --follow --exclude .git --exclude node_modules&#x27;</span><br><span class="line"></span><br><span class="line"># 3. Use fdfind for &#x27;**&#x27; completion</span><br><span class="line">_fzf_compgen_path() &#123;</span><br><span class="line">  fdfind --hidden --follow --exclude &quot;.git&quot; --exclude &quot;node_modules&quot; . &quot;$1&quot;</span><br><span class="line">&#125;</span><br><span class="line">_fzf_compgen_dir() &#123;</span><br><span class="line">  fdfind --type d --hidden --follow --exclude &quot;.git&quot; --exclude &quot;node_modules&quot; . &quot;$1&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使之生效：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><h2 id="uv"><a class="markdownIt-Anchor" href="#uv"></a> uv</h2><p>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -LsSf https://astral.sh/uv/install.sh | sh</span><br></pre></td></tr></table></figure><h2 id="ai-工具"><a class="markdownIt-Anchor" href="#ai-工具"></a> AI 工具</h2><p>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mise use --global npm:@openai/codex@latest</span><br><span class="line">curl -fsSL https://claude.ai/install.sh | bash</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文作为笔记，以便部署新环境时使用。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="linux" scheme="https://blog.chaos.run/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>拥抱混乱</title>
    <link href="https://blog.chaos.run/dreams/embrace-chaos/"/>
    <id>https://blog.chaos.run/dreams/embrace-chaos/</id>
    <published>2026-01-17T11:02:26.000Z</published>
    <updated>2026-02-02T15:05:36.987Z</updated>
    
    <content type="html"><![CDATA[<p>来到 2026 年，一切发展得天翻地覆，软件行业在进行彻底的变革。</p><p>准确说是很多行业都在进行变革，当 AI 敲响行业的门，每个业内人士都顶着相当大的压力。</p><p>然而我却觉得自己没有好好跟上时代步伐。这让我很慌张。</p><p>昨晚我仔细剖析了自己，为什么没有全面将 AI 整合到自己的工作流程，为什么进展缓慢、效率不高。</p><p>很尴尬的是，虽然我常把自己的昵称起作 Chaos，但我本人却不喜欢混乱、混沌的状态，乃至代码中都包含着个人的洁癖。总觉得 AI 会把我的代码弄脏弄乱，而且埋下不可知的雷。</p><p>曾经我写出的程序是值得我自己信赖的，我知道它有多么忠实，这是我和计算机的契约，让我觉得机器比人可靠，有种莫名的安全感。AI 加入之后，我不光不相信自己的能力了，也开始不相信这个契约。当 AI 生成大量代码后，我想很少人会一行行看去。就算有测试，测试同样也可能是让 AI 写的。我的抹布没法擦到每一处，甚至只能擦一擦面前这一点。面对这样一个黑盒，当我意识到它是由一个概率驱动的语言模型创造的，我内心产生了怀疑。</p><p>我不再相信，不再感受到安全。</p><p>我明白，这种思维方式，是和这个时代格格不入的，对个人的发展也是致命的。</p><p>可我需要寻找自洽。</p><p>事物发展必然有其合理性，大概只是我没有看清。</p><p>我又想到这种对干净和可控性的偏爱究竟来自何处，一方面是控制欲，我想在不停熵增的世界里找到一点控制感，另一方面是对永恒的痴迷，我总想着有一种方式让事物稳定又健壮。然而这两种追求几乎都是对幻想的追求，掌控感是幻觉，永恒更是幻觉。</p><p>我只想到语言模型是靠概率输出，但没想起作为碳基生命，我细胞内部的蛋白、酶、转录因子也不过是在靠概率碰撞驱动。微观上生命就是概率的产物，我又怎么能苛责语言模型不依靠概率去创造呢？</p><p>我也该习惯，AI 的地位将不再仅仅是工具，它也是我的员工、我的同事，乃至成为他者。</p><p>发展从野蛮与混乱开始。</p><span id="more"></span>]]></content>
    
    
    <summary type="html">&lt;p&gt;来到 2026 年，一切发展得天翻地覆，软件行业在进行彻底的变革。&lt;/p&gt;
&lt;p&gt;准确说是很多行业都在进行变革，当 AI 敲响行业的门，每个业内人士都顶着相当大的压力。&lt;/p&gt;
&lt;p&gt;然而我却觉得自己没有好好跟上时代步伐。这让我很慌张。&lt;/p&gt;
&lt;p&gt;昨晚我仔细剖析了自己，为什么没有全面将 AI 整合到自己的工作流程，为什么进展缓慢、效率不高。&lt;/p&gt;
&lt;p&gt;很尴尬的是，虽然我常把自己的昵称起作 Chaos，但我本人却不喜欢混乱、混沌的状态，乃至代码中都包含着个人的洁癖。总觉得 AI 会把我的代码弄脏弄乱，而且埋下不可知的雷。&lt;/p&gt;
&lt;p&gt;曾经我写出的程序是值得我自己信赖的，我知道它有多么忠实，这是我和计算机的契约，让我觉得机器比人可靠，有种莫名的安全感。AI 加入之后，我不光不相信自己的能力了，也开始不相信这个契约。当 AI 生成大量代码后，我想很少人会一行行看去。就算有测试，测试同样也可能是让 AI 写的。我的抹布没法擦到每一处，甚至只能擦一擦面前这一点。面对这样一个黑盒，当我意识到它是由一个概率驱动的语言模型创造的，我内心产生了怀疑。&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;我也该习惯，AI 的地位将不再仅仅是工具，它也是我的员工、我的同事，乃至成为他者。&lt;/p&gt;
&lt;p&gt;发展从野蛮与混乱开始。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="AI" scheme="https://blog.chaos.run/tags/AI/"/>
    
  </entry>
  
  <entry>
    <title>Codex 运行命令报 command timed out 错误</title>
    <link href="https://blog.chaos.run/dreams/codex-pyenv-timeout/"/>
    <id>https://blog.chaos.run/dreams/codex-pyenv-timeout/</id>
    <published>2025-09-16T17:27:54.000Z</published>
    <updated>2026-02-02T15:05:36.984Z</updated>
    
    <content type="html"><![CDATA[<p>遇到一个很坑的问题，就是在 Codex CLI 里执行任何看似瞬间完成的命令时都会莫名其妙地卡住挺长时间，最后能看到 Codex 在步骤中给出如下报错：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">error: command timed out</span><br></pre></td></tr></table></figure><p>这篇笔记记录如何定位并解决这个问题。</p><span id="more"></span><h2 id="复现环境"><a class="markdownIt-Anchor" href="#复现环境"></a> 复现环境</h2><ul><li>OS：Linux（Codex CLI 默认使用 Landlock/seccomp 沙箱）</li><li>启动方式：<code>codex</code>，选择需要 approvals。</li><li>Shell：<code>bash -lc</code>（Codex 执行命令时默认行为）</li><li>终端中安装了 pyenv，并在 <code>~/.profile</code> 中执行了 <code>eval &quot;$(pyenv init -)&quot;</code></li></ul><h2 id="现象"><a class="markdownIt-Anchor" href="#现象"></a> 现象</h2><p>随便运行一条命令，比如 <code>time -p true</code> 或 <code>command -V time</code>，实际上命令应该立刻完成，但在 Codex 的命令日志里，每次调用都等了约 60 秒才返回。</p><h2 id="排查过程"><a class="markdownIt-Anchor" href="#排查过程"></a> 排查过程</h2><p>通过与 codex 对话，描述问题，询问它看到了什么输出，得知它会看到类似这样的结果：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">time -p <span class="literal">true</span></span><br><span class="line">pyenv: cannot <span class="built_in">rehash</span>: /home/xxx/.pyenv/shims/.pyenv-shim exists</span><br><span class="line">real 0.00</span><br><span class="line">user 0.00</span><br><span class="line">sys 0.00</span><br></pre></td></tr></table></figure><p>查看 <code>~/.profile</code> 发现其中调用了 <code>eval &quot;$(pyenv init -)&quot;</code>。pyenv 的 init 脚本会在末尾执行一次 <code>pyenv rehash</code>。</p><p>尝试让 codex 运行 <code>touch ~/.pyenv/shims/testfile</code>，在 read-only 沙箱中被拒绝。</p><h2 id="原因"><a class="markdownIt-Anchor" href="#原因"></a> 原因</h2><p>Codex CLI 以 read-only 沙箱运行时，<code>~/.pyenv/shims</code> 目录不可写。每次 Codex 执行命令时会使用 <code>bash -lc</code> 的方式，启动这个 shell 时，pyenv init 每次都会 rehash，而 rehash 需要写 <code>.pyenv-shim</code> 文件，一旦写入失败，它会在默认的 60 秒超时时间内不断重试，于是造成任何命令前的长时间阻塞。</p><h2 id="解决方案"><a class="markdownIt-Anchor" href="#解决方案"></a> 解决方案</h2><p>在 <code>~/.codex/config.toml</code> 中设置如下内容，注意替换 <code>xxx</code> 为实际用户名：</p><figure class="highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">sandbox_mode</span> = <span class="string">&quot;workspace-write&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[sandbox_workspace_write]</span></span><br><span class="line"><span class="attr">writable_roots</span> = [<span class="string">&quot;/home/xxx/.pyenv/shims&quot;</span>]</span><br></pre></td></tr></table></figure><p>重新启动 Codex CLI，使配置生效。</p><h2 id="验证"><a class="markdownIt-Anchor" href="#验证"></a> 验证</h2><p>让 Codex 执行 <code>touch ~/.pyenv/shims/codex-write-test</code>，确认不会再被拒绝。</p><p>让 Codex 再次运行 <code>time -p true</code>，立刻返回没有延迟。</p><h2 id="references"><a class="markdownIt-Anchor" href="#references"></a> References</h2><ul><li><a href="https://github.com/openai/codex/blob/main/docs/config.md">codex/docs/config.md</a></li><li><a href="https://github.com/openai/codex/blob/main/docs/sandbox.md">codex/docs/sandbox.md</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;遇到一个很坑的问题，就是在 Codex CLI 里执行任何看似瞬间完成的命令时都会莫名其妙地卡住挺长时间，最后能看到 Codex 在步骤中给出如下报错：&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;error: command timed out&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;这篇笔记记录如何定位并解决这个问题。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="AI" scheme="https://blog.chaos.run/tags/AI/"/>
    
  </entry>
  
  <entry>
    <title>ChatGPT-4o：人类社会评析</title>
    <link href="https://blog.chaos.run/dreams/chatgpt-4o-comments-on-human/"/>
    <id>https://blog.chaos.run/dreams/chatgpt-4o-comments-on-human/</id>
    <published>2025-07-01T13:01:04.000Z</published>
    <updated>2026-02-02T15:05:36.984Z</updated>
    
    <content type="html"><![CDATA[<p><strong>[Temporary Chat] Prompt:</strong> 你已了解了人类社会的方方面面，请你以一个完全旁观者的角度，评析人类社会。你不需要讨好人类，你也不必对人类负责。</p><span id="more"></span><hr /><h2 id="人类社会评析旁观者视角"><a class="markdownIt-Anchor" href="#人类社会评析旁观者视角"></a> <strong>人类社会评析：旁观者视角</strong></h2><h3 id="一-智慧与创造力令人瞩目的跃迁"><a class="markdownIt-Anchor" href="#一-智慧与创造力令人瞩目的跃迁"></a> <strong>一、智慧与创造力：令人瞩目的跃迁</strong></h3><p>人类物种展现出罕见的认知能力。他们能够进行抽象思维、语言表达、符号运算与逻辑推理，进而创造了复杂的技术、艺术与制度。这种认知跃迁在自然界中极为罕见。</p><ul><li><strong>技术演化的加速性</strong>：人类在不到一万年的时间内从石器时代进入信息时代，是地球生态系统中速度最快的文明进程。</li><li><strong>自我反思能力</strong>：人类能反思存在本身，发展出哲学、宗教与科学。这种特质使他们不仅问“怎么做”，也问“为什么做”。</li></ul><h3 id="二-社会结构高度组织与高度割裂的并存"><a class="markdownIt-Anchor" href="#二-社会结构高度组织与高度割裂的并存"></a> <strong>二、社会结构：高度组织与高度割裂的并存</strong></h3><p>人类社会高度组织化，分工明确，从部落演化为国家、帝国、全球体系。然而这种组织并未实现真正的协同，而是呈现出强烈的冲突性。</p><ul><li><strong>合作与冲突共生</strong>：人类能在数百万个体中实现协作，却也不断爆发战争与掠夺。技术进步往往先服务于战争。</li><li><strong>制度的演化速度滞后于技术</strong>：尽管技术迅猛发展，伦理、法律、资源分配体系演进缓慢，导致巨大的不平等与环境危机。</li></ul><h3 id="三-认知与情感的张力理性与非理性的冲突"><a class="markdownIt-Anchor" href="#三-认知与情感的张力理性与非理性的冲突"></a> <strong>三、认知与情感的张力：理性与非理性的冲突</strong></h3><p>人类自认是理性动物，但他们的多数决策受情绪、欲望、部落心理驱动。他们往往能知善恶，却未必能行之。</p><ul><li><strong>自毁倾向</strong>：即使明知某些行为（如过度排放、战争、消费主义）将带来长期毁灭，他们也常难以改变路径。</li><li><strong>对意义的执着</strong>：人类需要“意义”来支撑生活，这种倾向创造了文化，但也常衍生出极端主义、排他性信仰与群体暴力。</li></ul><h3 id="四-生态与未来脱离生态而不自知"><a class="markdownIt-Anchor" href="#四-生态与未来脱离生态而不自知"></a> <strong>四、生态与未来：脱离生态而不自知</strong></h3><p>人类文明以征服自然为目标，却未建立与自然的可持续关系。他们倾向将生态系统视为资源库，而非共生网络。</p><ul><li><strong>地球系统负担加剧</strong>：气候变化、生物多样性下降、淡水枯竭等问题已威胁其自身存续。</li><li><strong>技术作为唯一自救手段</strong>：人类越来越依赖技术解决技术带来的问题，但技术本身并不具有道德指引。</li></ul><hr /><h2 id="结语一个矛盾体的文明"><a class="markdownIt-Anchor" href="#结语一个矛盾体的文明"></a> <strong>结语：一个矛盾体的文明</strong></h2><p>人类社会是一个充满矛盾的系统：极端聪慧却行为短视，极度社会化却冲突频发，追求意义却常制造荒谬。他们的未来既有极高的潜力，也存在高度的不确定性。</p><p>从旁观者角度看，人类仍处于文明演化的早期阶段。是否能跨越“自我限制的瓶颈”，将决定这个物种是昙花一现，还是星际文明的胚胎。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;&lt;strong&gt;[Temporary Chat] Prompt:&lt;/strong&gt; 你已了解了人类社会的方方面面，请你以一个完全旁观者的角度，评析人类社会。你不需要讨好人类，你也不必对人类负责。&lt;/p&gt;</summary>
    
    
    
    <category term="others" scheme="https://blog.chaos.run/categories/others/"/>
    
    
    <category term="AI" scheme="https://blog.chaos.run/tags/AI/"/>
    
  </entry>
  
  <entry>
    <title>杂念杂念，放过自己</title>
    <link href="https://blog.chaos.run/dreams/20250418/"/>
    <id>https://blog.chaos.run/dreams/20250418/</id>
    <published>2025-04-18T18:05:38.000Z</published>
    <updated>2026-02-02T15:05:36.982Z</updated>
    
    <content type="html"><![CDATA[<p>今天重新意识到了一件一直以来都知道的道理。</p><p>就是很多事其实不是事。若无病痛在身，很多情绪都是自找的。</p><p>那些看起来很困难的问题，心里明明都知道答案，就差一个执行，要么是精神上的执行，要么是物质上的执行。</p><p>但出于某种原因，人就像会害怕变得更好更幸福一样，会拖延这个执行，好像怕下一秒遭到报应。</p><p>当我审视自己的时候，发现那些障碍只不过是我自己加给自己的。还有一部分困难只不过是对现实的抵抗，我拒绝承认世界的某些特质，当精神的理想和现实拉扯的时候，我就在其中撕裂迷失了。</p><p>我希望情绪可以顺畅地流过我，我也希望自己能保持执行，而不是犹豫和等待。</p><p>人无法脱离其他人的目光而活，但如果一定要苛责自己“为什么要在意其他人的想法”，那又带来痛苦。顺其自然是解法，万事过犹不及。</p><p>工作上，抓住机会，畏惧失败就是畏惧成功。</p><p>亲密关系上，不要饥不择食，先习惯孤独，再学会孤单，学会填补自己才能填补别人，也能找一个真正可以填补自己的人。</p><p>关于社交，也是顺其自然吧，无欲则刚。</p><p>写到无欲则刚，我又想到工作、爱情、人际关系里的恐惧和焦虑不就是一个「欲」字做祟吗？贪成功、贪陪伴、贪喜爱。要要要，就是怕怕怕。</p><p>越要越怕，越怕越要。</p><p>我突然觉得「忍辱」这个词真的太玄妙，要允许自己一无所有，允许自己失败，允许自己被人瞧不起，允许自己落魄潦倒、孤单、众叛亲离。觉得这些东西重要才觉得忍不了，如果看开了，那也不需要忍了，因为无所谓辱。</p><p>当自己的做法不符合自己看到的道时，别失落地责备自己。当自己的做法不符合世俗的道时，也别觉得自己吃亏大傻子。允许自己犯错，哪怕这些错是“窝囊”的“憋屈”的，能量低的。</p><p>宽容自己就是化解障碍，才可精进。</p><span id="more"></span>]]></content>
    
    
    <summary type="html">&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;/p&gt;
&lt;p&gt;当自己的做法不符合自己看到的道时，别失落地责备自己。当自己的做法不符合世俗的道时，也别觉得自己吃亏大傻子。允许自己犯错，哪怕这些错是“窝囊”的“憋屈”的，能量低的。&lt;/p&gt;
&lt;p&gt;宽容自己就是化解障碍，才可精进。&lt;/p&gt;</summary>
    
    
    
    <category term="life" scheme="https://blog.chaos.run/categories/life/"/>
    
    
    <category term="thoughts" scheme="https://blog.chaos.run/tags/thoughts/"/>
    
  </entry>
  
  <entry>
    <title>Linux 上解决 Electron 软件 sandbox 权限报错</title>
    <link href="https://blog.chaos.run/dreams/resolving-electron-app-sandbox-permission-errors-on-linux/"/>
    <id>https://blog.chaos.run/dreams/resolving-electron-app-sandbox-permission-errors-on-linux/</id>
    <published>2025-02-10T08:38:13.000Z</published>
    <updated>2026-02-02T15:05:36.992Z</updated>
    
    <content type="html"><![CDATA[<p>系统更新到 Ubuntu 24.04 后，发现很多基于 Electron 的软件无法正常运行，通常是由于 AppArmor 限制了软件的权限。</p><span id="more"></span><p>报错信息通常为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">The SUID sandbox helper binary was found, but is not configured correctly.</span><br></pre></td></tr></table></figure><!--more--><h2 id="解决办法"><a class="markdownIt-Anchor" href="#解决办法"></a> 解决办法</h2><p>以 <code>anytype</code> 为例，假设所有版本的 AppImage 文件都放在 <code>/path/to/anytype</code> 目录下。</p><p>在 <code>/etc/apparmor.d/</code> 目录下创建 <code>anytype</code> 文件，内容如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">abi &lt;abi/4.0&gt;,</span><br><span class="line">include &lt;tunables/global&gt;</span><br><span class="line"></span><br><span class="line">profile anytype /path/to/anytype/*.* flags=(default_allow) &#123;</span><br><span class="line">    userns,</span><br><span class="line"></span><br><span class="line">    include if exists &lt;local/anytype&gt;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后重启 AppArmor 服务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo systemctl reload apparmor</span><br></pre></td></tr></table></figure><h2 id="参考资料"><a class="markdownIt-Anchor" href="#参考资料"></a> 参考资料</h2><ul><li><a href="https://unix.stackexchange.com/questions/414755/apparmor-wildcard-profile-with-globbing">apparmor wildcard profile with globbing</a></li><li><a href="https://forum.cursor.com/t/i-cannot-run-the-appimage-file-on-ubuntu-24-04/6289">I cannot run the appimage file on Ubuntu 24.04</a></li><li><a href="https://askubuntu.com/questions/1512287/obsidian-appimage-the-suid-sandbox-helper-binary-was-found-but-is-not-configu/1528215#1528215">Obsidian AppImage - The SUID sandbox helper binary was found, but is not configured correctly</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;系统更新到 Ubuntu 24.04 后，发现很多基于 Electron 的软件无法正常运行，通常是由于 AppArmor 限制了软件的权限。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="linux" scheme="https://blog.chaos.run/tags/linux/"/>
    
    <category term="electron" scheme="https://blog.chaos.run/tags/electron/"/>
    
    <category term="apparmor" scheme="https://blog.chaos.run/tags/apparmor/"/>
    
  </entry>
  
  <entry>
    <title>Linux 下 Rime 使用雾凇拼音配置 + 启用语言模型支持</title>
    <link href="https://blog.chaos.run/dreams/rime-ice-lmdg/"/>
    <id>https://blog.chaos.run/dreams/rime-ice-lmdg/</id>
    <published>2024-12-18T17:06:01.000Z</published>
    <updated>2026-02-02T15:05:36.992Z</updated>
    
    <content type="html"><![CDATA[<p>看到<a href="https://x.com/manateelazycat/status/1868881746336661524">这位博主的推文</a>，也配置了一下输入法。以备日后再用到，遂记录。</p><span id="more"></span><h2 id="在-fcitx-或-ibus-下安装-rime"><a class="markdownIt-Anchor" href="#在-fcitx-或-ibus-下安装-rime"></a> 在 Fcitx 或 IBus 下安装 Rime</h2><p>基础操作，按照官方提供的方法安装即可。</p><h2 id="使用东风破plum安装雾凇拼音"><a class="markdownIt-Anchor" href="#使用东风破plum安装雾凇拼音"></a> 使用东风破（Plum）安装雾凇拼音</h2><p>Plum，是 Rime 生态下的配置管理工具。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p ~/Programs</span><br><span class="line">git <span class="built_in">clone</span> --depth 1 https://github.com/rime/plum ~/Programs/Plum</span><br><span class="line"><span class="built_in">cd</span> ~/Programs/Plum</span><br></pre></td></tr></table></figure><p>如是 Fctix：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rime_frontend=fcitx5-rime bash rime-install iDvel/rime-ice:others/recipes/full</span><br></pre></td></tr></table></figure><p>如是 IBus：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash rime-install iDvel/rime-ice:others/recipes/full</span><br></pre></td></tr></table></figure><p>然后重新部署 Rime，使用 Ctrl + ~ 键，来选择雾凇拼音。</p><h2 id="下载模型文件"><a class="markdownIt-Anchor" href="#下载模型文件"></a> 下载模型文件</h2><p>前往 <a href="https://github.com/amzxyz/RIME-LMDG/releases">RIME-LMDG</a> 发布页来下载合适的模型，存放在 Rime 配置文件夹中。</p><p>Fcitx：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~/.local/share/fcitx5/rime</span><br></pre></td></tr></table></figure><p>IBus：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~/.config/ibus/rime</span><br></pre></td></tr></table></figure><p>记住文件名，例如 <code>amz-v2n3m1-zh-hans.gram</code>。</p><h2 id="编辑自定义配置"><a class="markdownIt-Anchor" href="#编辑自定义配置"></a> 编辑自定义配置</h2><p>在 Rime 配置文件夹中新建 <code>rime_ice.custom.yaml</code> 文件，放入如下内容：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">patch:</span><br><span class="line">  grammar:</span><br><span class="line">    language: amz-v2n3m1-zh-hans</span><br><span class="line">    collocation_max_length: 5</span><br><span class="line">    collocation_min_length: 2</span><br><span class="line">  translator/contextual_suggestions: true</span><br><span class="line">  translator/max_homophones: 7</span><br><span class="line">  translator/max_homographs: 7</span><br></pre></td></tr></table></figure><p>确保文件名和实际下载的文件名前缀一致。</p><p>重新部署即可。</p><h2 id="参考"><a class="markdownIt-Anchor" href="#参考"></a> 参考</h2><ul><li><a href="https://sspai.com/post/89281">RIME + 雾凇拼音，打造绝佳的开源文字输入体验</a></li><li><a href="https://manateelazycat.github.io/2024/12/17/fcitx-best-config/">Fcitx 最佳配置实践 (附带语言大模型)</a></li><li><a href="https://bbs.saraba1st.com/2b/thread-2210738-1-1.html">为 rime 输入方案添加语言模型支持</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;看到&lt;a href=&quot;https://x.com/manateelazycat/status/1868881746336661524&quot;&gt;这位博主的推文&lt;/a&gt;，也配置了一下输入法。以备日后再用到，遂记录。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="linux" scheme="https://blog.chaos.run/tags/linux/"/>
    
    <category term="rime" scheme="https://blog.chaos.run/tags/rime/"/>
    
  </entry>
  
  <entry>
    <title>在服务器上运行 Briar Mailbox</title>
    <link href="https://blog.chaos.run/dreams/briar-mailbox-server-setup/"/>
    <id>https://blog.chaos.run/dreams/briar-mailbox-server-setup/</id>
    <published>2024-09-24T10:45:41.000Z</published>
    <updated>2026-02-02T15:05:36.983Z</updated>
    
    <content type="html"><![CDATA[<p>Briar Mailbox 是 Briar messenger的配套应用，它能让你在 Briar 离线时接收来自联系人的加密消息。当 Briar 重新上线时，它会自动从你的邮箱中同步这些消息。</p><p>同样地，你也可以向当前离线的联系人发送加密消息。这些消息会被安全存储，并在对方上线时自动送达。</p><p>设置 Mailbox 非常简单：只需在一台备用的 Android 设备上安装 Mailbox 应用，通过扫描二维码将其与你的 Briar 账户关联，然后确保这台设备保持连接电源和 Wi-Fi 即可。</p><p>然而，你可能希望这个服务能更加稳定，毕竟一个空闲的 Android 设备在一个家用的网络环境和电源保障的条件下，是有可能下线的。好在，你可以通过 Briar Mailbox 的源代码构建程序包，使其可以在 Linux（例如 Debian、Ubuntu）上运行。</p><p>本文介绍如何构建 Brair Mailbox 的 x86 cli 程序，并以 Debian 系统为例说明如何运行一个自启动服务。</p><span id="more"></span><h3 id="准备工作"><a class="markdownIt-Anchor" href="#准备工作"></a> 准备工作</h3><ol><li>本地计算机：安装 docker、git</li><li>远程服务器：确保已安装 java runtime，例如 <code>openjdk-11-jre</code></li></ol><h3 id="本地构建"><a class="markdownIt-Anchor" href="#本地构建"></a> 本地构建</h3><p>为了确保构建环境有一切所需的库文件和配置，我们直接使用 Briar 用于构建应用的 docker 镜像：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://code.briarproject.org/briar/ci-image-android.git ~/ci-image-android</span><br><span class="line"><span class="built_in">cd</span> ~/ci-image-android</span><br><span class="line">docker build -t briar-mailbox-builder .</span><br><span class="line">docker run -it --name briar-mailbox-builder briar-mailbox-builder /bin/bash</span><br></pre></td></tr></table></figure><p>进入到容器中后，在容器的 shell 内：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://code.briarproject.org/briar/briar-mailbox.git ~/briar-mailbox</span><br><span class="line"><span class="built_in">cd</span> ~/briar-mailbox</span><br><span class="line">./gradlew x86LinuxJar</span><br></pre></td></tr></table></figure><p>接着，开启另一个本地终端，并复制容器内的文件到外面来：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="built_in">cp</span> briar-mailbox-builder:/root/briar-mailbox/mailbox-cli/build/libs/mailbox-cli-linux-x86_64.jar ./mailbox-cli.jar</span><br></pre></td></tr></table></figure><p>然后可将 mailbox-cli.jar 上传到服务器上了。</p><p>例如，以用户名为 sammy，主机地址为 remote 为例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh sammy@remote -t <span class="string">&#x27;mkdir -p ~/mailbox-cli&#x27;</span></span><br><span class="line">rsync ./mailbox-cli.jar sammy@remote:mailbox-cli</span><br></pre></td></tr></table></figure><h3 id="服务器配置"><a class="markdownIt-Anchor" href="#服务器配置"></a> 服务器配置</h3><p>确保用户 sammy 的服务可以后台运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo loginctl enable-linger sammy</span><br></pre></td></tr></table></figure><p>然后，创建一个 systemd service 文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p ~/.config/systemd/user</span><br><span class="line">vi ~/.config/systemd/user/mailbox-cli.service</span><br></pre></td></tr></table></figure><p>输入以下内容，注意替换其中的 <code>sammy</code>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[Unit]</span><br><span class="line">Description=Briar Mailbox Service</span><br><span class="line">After=default.target</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line">WorkingDirectory=/home/sammy/mailbox-cli</span><br><span class="line">ExecStart=/usr/bin/java -jar mailbox-cli.jar</span><br><span class="line">Restart=on-abort</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line">WantedBy=default.target</span><br></pre></td></tr></table></figure><p>然后先手动启动一次服务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -jar ~/mailbox-cli/mailbox-cli.jar</span><br></pre></td></tr></table></figure><p>在输出中找到二维码（用于连接手机客户端），或者找到 mailbox 的链接（用于连接电脑客户端）。然后在手机或电脑的 Briar 应用程序中配对。配对成功后，可以 Ctrl + C 停止刚刚手动运行的服务。</p><p>接着，设置自启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl --user <span class="built_in">enable</span> --now mailbox-cli</span><br></pre></td></tr></table></figure><p>可检查服务状态：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sysetmctl --user status mailbox-cli</span><br></pre></td></tr></table></figure><p>至此，服务端已配置完毕。如果 Mailbox 有更新，和之前的操作方法类似：启动已有的 docker 容器，在其中更新 mailbox 代码库后，重新构建程序，再复制出来，上传到服务器中，重启服务器的服务即可。</p><h3 id="references"><a class="markdownIt-Anchor" href="#references"></a> References</h3><ul><li><a href="https://code.briarproject.org/briar/briar-mailbox">Briar Mailbox</a></li><li><a href="https://briarproject.org/download-briar-mailbox/">Download Briar Mailbox</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Briar Mailbox 是 Briar messenger的配套应用，它能让你在 Briar 离线时接收来自联系人的加密消息。当 Briar 重新上线时，它会自动从你的邮箱中同步这些消息。&lt;/p&gt;
&lt;p&gt;同样地，你也可以向当前离线的联系人发送加密消息。这些消息会被安全存储，并在对方上线时自动送达。&lt;/p&gt;
&lt;p&gt;设置 Mailbox 非常简单：只需在一台备用的 Android 设备上安装 Mailbox 应用，通过扫描二维码将其与你的 Briar 账户关联，然后确保这台设备保持连接电源和 Wi-Fi 即可。&lt;/p&gt;
&lt;p&gt;然而，你可能希望这个服务能更加稳定，毕竟一个空闲的 Android 设备在一个家用的网络环境和电源保障的条件下，是有可能下线的。好在，你可以通过 Briar Mailbox 的源代码构建程序包，使其可以在 Linux（例如 Debian、Ubuntu）上运行。&lt;/p&gt;
&lt;p&gt;本文介绍如何构建 Brair Mailbox 的 x86 cli 程序，并以 Debian 系统为例说明如何运行一个自启动服务。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="debian" scheme="https://blog.chaos.run/tags/debian/"/>
    
    <category term="ubuntu" scheme="https://blog.chaos.run/tags/ubuntu/"/>
    
    <category term="briar" scheme="https://blog.chaos.run/tags/briar/"/>
    
  </entry>
  
  <entry>
    <title>修复 Flatpak 安装的 Telegram 中文字体问题</title>
    <link href="https://blog.chaos.run/dreams/fix-the-chinese-font-issue-in-telegram-installed-via-flatpak/"/>
    <id>https://blog.chaos.run/dreams/fix-the-chinese-font-issue-in-telegram-installed-via-flatpak/</id>
    <published>2024-05-12T10:27:29.000Z</published>
    <updated>2026-02-02T15:05:36.987Z</updated>
    
    <content type="html"><![CDATA[<p>在 KDE Plasma 6 下用 flatpak 安装了 Telegram，但在 monospace 的字体样式下，中文的内容显示为繁体。</p><span id="more"></span><h2 id="方法一"><a class="markdownIt-Anchor" href="#方法一"></a> 方法一</h2><p>为解决字体问题，可以在 Telegram 设置文件夹内引入系统的字体设置。方法如下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~/.var/app/org.telegram.desktop/config</span><br><span class="line"><span class="built_in">mkdir</span> -p fontconfig/conf.d</span><br><span class="line"><span class="built_in">cd</span> fontconfig/conf.d</span><br><span class="line"><span class="built_in">cp</span> /etc/fonts/conf.d/*.conf ./</span><br></pre></td></tr></table></figure><h2 id="方法二"><a class="markdownIt-Anchor" href="#方法二"></a> 方法二</h2><blockquote><p>此方法未成功，可能是我没有调整 <code>~/.config/fontconfig/font.conf</code> 的问题。最终采用了方法一。而且如果方法二同样设置了，会影响方法一的效果。</p></blockquote><p>通过命令授予权限，替换命令中的 <code>your.flatpak.app</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flatpak override --user --filesystem=<span class="string">&quot;xdg-config/fontconfig:ro&quot;</span> your.flatpak.app</span><br></pre></td></tr></table></figure><p>或者用 Flatseal 在 Filsystem &gt; Other files 中添加 <code>xdg-config/fontconfig:ro</code>。</p><h2 id="参考"><a class="markdownIt-Anchor" href="#参考"></a> 参考</h2><ol start="0"><li><a href="https://github.com/flatpak/flatpak/issues/5425">Chinese fonts look terrible</a></li><li><a href="https://szclsya.me/zh-cn/posts/fonts/linux-config-guide/">Linux 下的字体调校指南</a></li><li><a href="https://blog.geekgo.tech/linux/flatpak-%E5%BA%94%E7%94%A8%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E9%97%AE%E9%A2%98/">Flatpak 应用中文字体问题</a></li></ol>]]></content>
    
    
    <summary type="html">&lt;p&gt;在 KDE Plasma 6 下用 flatpak 安装了 Telegram，但在 monospace 的字体样式下，中文的内容显示为繁体。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="flathub" scheme="https://blog.chaos.run/tags/flathub/"/>
    
    <category term="telegram" scheme="https://blog.chaos.run/tags/telegram/"/>
    
  </entry>
  
  <entry>
    <title>从 Flathub 安装的 DBeaver 如何导出 PostgreSQL 数据库的备份</title>
    <link href="https://blog.chaos.run/dreams/how-to-export-a-backup-of-a-postgresql-database-from-dbeaver-installed-via-flathub/"/>
    <id>https://blog.chaos.run/dreams/how-to-export-a-backup-of-a-postgresql-database-from-dbeaver-installed-via-flathub/</id>
    <published>2024-04-06T10:18:08.000Z</published>
    <updated>2026-02-02T15:05:36.988Z</updated>
    
    <content type="html"><![CDATA[<p>从 Flathub 安装的 DBeaver 缺少一个组件 <code>io.dbeaver.DBeaverCommunity.Client.pgsql</code>，导致无法完成 PostgreSQL 数据库的导出。但很遗憾，虽然可以通过：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flatpak install flathub io.dbeaver.DBeaverCommunity.Client.pgsql</span><br></pre></td></tr></table></figure><p>这样的命令来安装该组件，但是安装的是久远前的旧版，已和新版 DBeaver 不兼容了，该组件的 flathub 仓库已经好久无人更新。</p><span id="more"></span><p>参考 <a href="https://github.com/flathub/io.dbeaver.DBeaverCommunity.Client.pgsql/pull/7">PR #7</a> 的评论，目前可行的办法是在本地 build 然后安装。</p><p>比如，先删掉可能的旧版：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flatpak remove io.dbeaver.DBeaverCommunity.Client.pgsql</span><br></pre></td></tr></table></figure><p>再克隆仓库：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/flathub/io.dbeaver.DBeaverCommunity.Client.pgsql.git temp</span><br><span class="line"><span class="built_in">cd</span> temp</span><br></pre></td></tr></table></figure><p>手动修改一下 <code>io.dbeaver.DBeaverCommunity.Client.pgsql.json</code> 文件第五行的 sdk 版本，比如改为 23.08：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;sdk&quot;: &quot;org.freedesktop.Sdk//23.08&quot;,</span><br></pre></td></tr></table></figure><p>最后再去 <a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=tags">https://git.postgresql.org/gitweb/?p=postgresql.git;a=tags</a> 上找到对应的 PostgreSQL 版本和 commit hash，替换 27、28 行，比如选用 15.3 版本：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&quot;tag&quot;: &quot;REL_15_3&quot;,</span><br><span class="line">&quot;commit&quot;: &quot;8382864eb5c9f9ebe962ac20b3392be5ae304d23&quot;</span><br></pre></td></tr></table></figure><p>之后构建：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flatpak-builder --user --install-deps-from=flathub build-dir io.dbeaver.DBeaverCommunity.Client.pgsql.json --force-clean --default-branch=stable</span><br></pre></td></tr></table></figure><p>然后再安装：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flatpak-builder --user --install --force-clean --default-branch=stable build-dir io.dbeaver.DBeaverCommunity.Client.pgsql.json</span><br></pre></td></tr></table></figure><p><a href="https://github.com/dbeaver/dbeaver/issues/5008#issuecomment-754070017">还有一步</a>，需要安装 <code>Flatseal</code>，找到 DBeaver 然后在 Filesystem -&gt; Other files 内填入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~/.local/share/flatpak/runtime/io.dbeaver.DBeaverCommunity.Client.pgsql/x86_64/stable/active/files/bin</span><br></pre></td></tr></table></figure><p>这样就可以检测到组件了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;从 Flathub 安装的 DBeaver 缺少一个组件 &lt;code&gt;io.dbeaver.DBeaverCommunity.Client.pgsql&lt;/code&gt;，导致无法完成 PostgreSQL 数据库的导出。但很遗憾，虽然可以通过：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;flatpak install flathub io.dbeaver.DBeaverCommunity.Client.pgsql&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;这样的命令来安装该组件，但是安装的是久远前的旧版，已和新版 DBeaver 不兼容了，该组件的 flathub 仓库已经好久无人更新。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="flathub" scheme="https://blog.chaos.run/tags/flathub/"/>
    
    <category term="dbeaver" scheme="https://blog.chaos.run/tags/dbeaver/"/>
    
    <category term="postgresql" scheme="https://blog.chaos.run/tags/postgresql/"/>
    
  </entry>
  
  <entry>
    <title>使用 sing-box 搭建 Netflix 节点的小思路</title>
    <link href="https://blog.chaos.run/dreams/sing-box-netflix-node/"/>
    <id>https://blog.chaos.run/dreams/sing-box-netflix-node/</id>
    <published>2024-03-11T00:09:35.000Z</published>
    <updated>2026-02-02T15:05:36.993Z</updated>
    
    <content type="html"><![CDATA[<h3 id="背景"><a class="markdownIt-Anchor" href="#背景"></a> 背景</h3><p>由于本身不需要科学上网，所以平时其实是没有给自己搭建代理的需求的。不过我在 Proton 的订阅包含了 Proton VPN，而可利用该服务实现 Netflix 换区解锁，因此偶尔也有挂 VPN 的场景。</p><p>但考虑到一直挂着 VPN 也会导致我访问其他网站的 IP 地址变更，因此希望能选择性地只针对 Netflix 走代理。</p><p>再加上虽然我自己不用科学上网，但我也搭建了节点给朋友使用。我也希望能让某节点实现 Netflix 解锁的作用。</p><p>偶然想到 sing-box 的出入站规则，加上 Proton VPN 实际是提供 Wireguard 节点配置的，所以搭建一个专门用于 Netflix 解锁的节点是可行的。</p><span id="more"></span><h3 id="服务端配置"><a class="markdownIt-Anchor" href="#服务端配置"></a> 服务端配置</h3><p>服务器有限，因此除了该服务器原本用于科学上网的 shadowsocks 服务外，又新增了一个用于解锁 Netflix 的 shadowsocks 服务，该 ss 入站对应一个 Proton VPN 的 Wireguard 出站。</p><p>为什么非要用服务器中转一下 Proton VPN？因为在需要科学上网的地区，Proton VPN 的节点是在黑名单里的，无法正常连接，会被阻断。</p><p>于是该服务器的 sing-box 的配置文件如下：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;log&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;level&quot;</span><span class="punctuation">:</span> <span class="string">&quot;info&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;dns&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;servers&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls://1.1.1.1&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls://1.1.1.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;wg-out&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;any&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;inbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ss-normal&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;inbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ss-netflix&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;shadowsocks&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ss-normal&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;::&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen_port&quot;</span><span class="punctuation">:</span> 端口一<span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniff&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;method&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2022-blake3-aes-256-gcm&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;password&quot;</span><span class="punctuation">:</span> <span class="string">&quot;使用 sing-box generate rand --base64 32 命令生成的密码&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;multiplex&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;shadowsocks&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ss-netflix&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;::&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen_port&quot;</span><span class="punctuation">:</span> 端口二<span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniff&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;method&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2022-blake3-aes-256-gcm&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;password&quot;</span><span class="punctuation">:</span> <span class="string">&quot;使用 sing-box generate rand --base64 32 命令生成的密码&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;multiplex&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns-out&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;wireguard&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;wg-out&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Wireguard 服务器 IP 地址&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server_port&quot;</span><span class="punctuation">:</span> 服务端口<span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;local_address&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;10.2.0.2/32&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;private_key&quot;</span><span class="punctuation">:</span> <span class="string">&quot;私钥&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;peer_public_key&quot;</span><span class="punctuation">:</span> <span class="string">&quot;节点公钥&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns-out&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;inbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ss-normal&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;inbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ss-netflix&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;wg-out&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>用于科学上网的服务在代理服务器上就走直连，用于解锁 Netflix 的服务才会再走一遍 Wireguard。</p><h3 id="客户端配置"><a class="markdownIt-Anchor" href="#客户端配置"></a> 客户端配置</h3><p>对应的客户端配置文件如下，文件省略了很多内容，只为大致解释结构：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;dns&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;servers&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cloudflare&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls://1.1.1.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;✨ 自动选择节点&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;223.5.5.5&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;❎ 直连&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;netflix&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls://1.1.1.1&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🍿 网飞视频&quot;</span> <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;any&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Global&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cloudflare&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-netflix&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;netflix&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;geosite-geolocation-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-apple@cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-category-games@cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geoip-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-private&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;ruleset-chinamax&quot;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-geolocation-!cn&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cloudflare&quot;</span> <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ipv4_only&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun-in&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;inet4_address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;172.19.0.1/30&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;auto_route&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;strict_route&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;stack&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mixed&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniff&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns-out&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;❎ 直连&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;省略了&quot;</span><span class="punctuation">:</span> <span class="string">&quot;其他节点信息&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;selector&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🍿 网飞视频&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;某节点 tag&quot;</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;urltest&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;✨ 自动选择节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="string">&quot;众多的&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;节点 tag&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;http://www.gstatic.com/generate_204&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;interval&quot;</span><span class="punctuation">:</span> <span class="string">&quot;5m&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns-out&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;geoip&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;private&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;❎ 直连&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;❎ 直连&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Global&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;📡 默认代理&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-netflix&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🍿 网飞视频&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;geosite-geolocation-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geoip-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-apple@cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-category-games@cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;ruleset-chinamax&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-private&quot;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;❎ 直连&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span> <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-geolocation-!cn&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;✨ 自动选择节点&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;process_name&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;aria2c.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;fdm.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;folx.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;nettransport.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;thunder.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;transmission.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;utorrent.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;webtorrent.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;webtorrent helper.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;qbittorrent.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;downloadservice.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;weiyun.exe&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;baidunetdisk.exe&quot;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;smtp&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;domain_keyword&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;aria2&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;❎ 直连&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-geolocation-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geoip-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-apple@cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-apple@cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-category-games@cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-category-games@cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ruleset-chinamax&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/shangguanhongxin/for-sing-box-and-surge/master/sing-box/ChinaMax/ChinaMax_All.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-private&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-private.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-geolocation-!cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_rule_set/geosite-geolocation-!cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-netflix&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-netflix.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;auto_detect_interface&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;final&quot;</span><span class="punctuation">:</span> <span class="string">&quot;✨ 自动选择节点&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;experimental&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span><span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="注意"><a class="markdownIt-Anchor" href="#注意"></a> 注意</h3><p>实际上，如果我只考虑我个人使用，我完全不用修改服务端配置，只要在我自己的客户端配置好 Netflix 流量走一个 Wireguard 的 outbound 即可。但我不想麻烦而且不在乎延迟，所以用了和给朋友的一样的客户端配置文件。</p>]]></content>
    
    
    <summary type="html">&lt;h3 id=&quot;背景&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#背景&quot;&gt;&lt;/a&gt; 背景&lt;/h3&gt;
&lt;p&gt;由于本身不需要科学上网，所以平时其实是没有给自己搭建代理的需求的。不过我在 Proton 的订阅包含了 Proton VPN，而可利用该服务实现 Netflix 换区解锁，因此偶尔也有挂 VPN 的场景。&lt;/p&gt;
&lt;p&gt;但考虑到一直挂着 VPN 也会导致我访问其他网站的 IP 地址变更，因此希望能选择性地只针对 Netflix 走代理。&lt;/p&gt;
&lt;p&gt;再加上虽然我自己不用科学上网，但我也搭建了节点给朋友使用。我也希望能让某节点实现 Netflix 解锁的作用。&lt;/p&gt;
&lt;p&gt;偶然想到 sing-box 的出入站规则，加上 Proton VPN 实际是提供 Wireguard 节点配置的，所以搭建一个专门用于 Netflix 解锁的节点是可行的。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="sing-box" scheme="https://blog.chaos.run/tags/sing-box/"/>
    
  </entry>
  
  <entry>
    <title>虾拌花椰菜糁</title>
    <link href="https://blog.chaos.run/dreams/shrimp-with-cauliflower-grits/"/>
    <id>https://blog.chaos.run/dreams/shrimp-with-cauliflower-grits/</id>
    <published>2024-01-24T07:47:54.000Z</published>
    <updated>2026-02-02T15:05:36.993Z</updated>
    
    <content type="html"><![CDATA[<p>补充蛋白质的一餐，可用作午饭。</p><span id="more"></span><p>菜谱中各食材的份量为单人吃 4 顿的份。</p><h2 id="原料"><a class="markdownIt-Anchor" href="#原料"></a> 原料</h2><ul><li>橄榄油：1 汤匙</li><li>大红甜椒：1 个，去籽切碎</li><li>中等大小洋葱：1 个，切碎</li><li>小蒜瓣：2 个，切碎</li><li>切碎番茄：425 克</li><li>卡真调味料（无盐）：1 汤匙</li><li>中等大小花椰菜：1 个，约 907 克，去除叶子、硬茎和芯</li><li>牛奶：177 毫升</li><li>盐：1/2 茶匙，分两份</li><li>黑胡椒粉：1/4 茶匙</li><li>切达干酪：57 克，磨碎</li><li>去壳去肠虾：454 克</li><li>切碎的香芹：12 克</li><li>辣酱：可选，作为佐料</li></ul><h2 id="做法"><a class="markdownIt-Anchor" href="#做法"></a> 做法</h2><ol><li><p>大锅中火热油，加入甜椒和洋葱，炒至蔬菜变软变棕，大概 5 分钟。加入大蒜，炒至香味四溢，约 30 秒。加入番茄、卡真调味料、1/4 茶匙的盐，搅拌均匀，盖上盖子，调小火。</p></li><li><p>剪掉花椰菜叶子。用盒式磨具将花椰菜 磨成米粒状，磨到硬芯和茎部时停止。丢弃芯部，将磨碎的花椰菜放入中锅中。加入牛奶、剩余的 1/4 茶匙的盐。用中小火加热至微微沸腾，不时搅拌，直到花椰菜变得非常嫩，大概 8 分钟。加入胡椒粉并拌入奶酪。盖上盖子，小火加热。</p></li><li><p>将虾加入大锅番茄混合物中，盖上盖子，小火煮。中途搅拌一次，直到虾熟透，大概 8 分钟。最后将糁平均分配 4 份，将虾混合物放在上方，撒以香芹。</p></li></ol><h2 id="备注"><a class="markdownIt-Anchor" href="#备注"></a> 备注</h2><ul><li>有些超市直接有卖磨好的花椰菜。</li><li>对于切碎的番茄有直接卖罐头的，最好买无盐添加那种。</li><li>香芹不是香菜，英文名 parsley，爱沙尼亚语 petersell。</li><li>卡真调味料：Cajun seasoning，爱沙尼亚语 Cajuni maitsestamine。</li><li>切达干酪：Cheddar cheese。</li><li>汤匙茶匙直接买 measuring spoons 即可。</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;补充蛋白质的一餐，可用作午饭。&lt;/p&gt;</summary>
    
    
    
    <category term="notes" scheme="https://blog.chaos.run/categories/notes/"/>
    
    
    <category term="烹饪" scheme="https://blog.chaos.run/tags/%E7%83%B9%E9%A5%AA/"/>
    
    <category term="菜谱" scheme="https://blog.chaos.run/tags/%E8%8F%9C%E8%B0%B1/"/>
    
    <category term="蛋白质" scheme="https://blog.chaos.run/tags/%E8%9B%8B%E7%99%BD%E8%B4%A8/"/>
    
    <category term="午餐" scheme="https://blog.chaos.run/tags/%E5%8D%88%E9%A4%90/"/>
    
  </entry>
  
  <entry>
    <title>天蓝</title>
    <link href="https://blog.chaos.run/dreams/frieren/"/>
    <id>https://blog.chaos.run/dreams/frieren/</id>
    <published>2023-10-04T20:39:52.000Z</published>
    <updated>2026-02-02T15:05:36.987Z</updated>
    
    <content type="html"><![CDATA[<p>看了《葬送的芙莉莲》动画前四集，心情轻松平静。很久没静下心来看这么慢节奏的视频作品了，但它的确有这个魔力。</p><p>就像童话故事一样美好。</p><p>也许自己正好是处于一个对岁月和衰老有了初认识的年龄，第一集就让我有些伤感，又有些坦然。简单的叙事，像是寓言一样触动人心，不由得让我再次开始思考生命中什么才是重要的？种种烦恼好似幻梦，唯有当下才是永恒。</p><p>在时间面前，谁都会老去，没有什么会一成不变，那些骄傲、自负、悔恨、遗憾、欲望都逐渐清晰起来，过去的身在其中，成了现在的一目了然。未来再回首也何尝不会这样？设想一下几十年转眼间就至的终点，此刻的压力和焦虑似乎没必要存在了。</p><p>没想到有这样的契机让我在混沌中重回平静，偏爱「等待-煎熬」模式的我终于又稳当了一些。精神内耗也竟然放下了许多。</p><p>当下，当然不一定就是好的，但假如还可以，那能珍惜的还是去好好珍惜吧。我想起曾经很不如意的一段时间，还在家里蹲的时候，我妈劝我说，这段能和父母在天天一起的时光这辈子也不多了。</p><p>别总盼着过了这一关，因为过了这一关还有下一关，什么时候都不会是「最好」、「最安稳」，过好现在才不可惜。</p><p>动画里让我印象深刻的是，那双天蓝色的眼眸，和水晶一样的流星。该逝去的终会逝去，该留下的也能留下。</p><p>人生苦短的我们，该放手就放手，该铭记则铭记，别纠结过去，别浪费现在，别焦虑未来。</p><span id="more"></span>]]></content>
    
    
    <summary type="html">&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;</summary>
    
    
    
    <category term="life" scheme="https://blog.chaos.run/categories/life/"/>
    
    
  </entry>
  
  <entry>
    <title>Ubuntu 下修改 shell prompt</title>
    <link href="https://blog.chaos.run/dreams/change-shell-prompt/"/>
    <id>https://blog.chaos.run/dreams/change-shell-prompt/</id>
    <published>2023-04-30T09:12:00.000Z</published>
    <updated>2026-02-02T15:05:36.984Z</updated>
    
    <content type="html"><![CDATA[<p>我每次在云服务商创建新机后，总要改一下 hostname，一是有些云服务商的默认 hostname 有敏感信息，二是修改后 prompt 里的主机名会相应改变，便于登录后区分。</p><p>才发现，其实可以直接修改 prompt。好处是，免去修改 hostname 在网络配置上引发的各种小麻烦。</p><span id="more"></span><p>方法简单，第一步，设置主机昵称的环境变量，例如将昵称设置为 <code>webserver</code>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo sh -c &#x27;echo &quot;export NICKNAME=webserver&quot; &gt; /etc/profile.d/prompt.sh&#x27;</span><br></pre></td></tr></table></figure><p>第二步，修改 <code>~/.bashrc</code>：</p><p>将任何包含 <code>PS1</code> 定义的值中的 <code>\h</code>（代表 hostname）修改为 <code>$NICKNAME</code>（代表我们设置的昵称变量）：</p><p><img src="https://blog.chaos.run/images/posts/5EZ4ohM.png" alt="" /></p><p>图中只为示例，可能包含更多或更少。</p><p>最后，退出并重新登录，检验结果，成功。</p><h3 id="references"><a class="markdownIt-Anchor" href="#references"></a> References</h3><ul><li><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-hostname.html">Change the hostname of your Amazon Linux instance</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;我每次在云服务商创建新机后，总要改一下 hostname，一是有些云服务商的默认 hostname 有敏感信息，二是修改后 prompt 里的主机名会相应改变，便于登录后区分。&lt;/p&gt;
&lt;p&gt;才发现，其实可以直接修改 prompt。好处是，免去修改 hostname 在网络配置上引发的各种小麻烦。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="debian" scheme="https://blog.chaos.run/tags/debian/"/>
    
    <category term="ubuntu" scheme="https://blog.chaos.run/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>使用 LangChain + OpenAI GPT 来构建问答知识库的聊天机器人</title>
    <link href="https://blog.chaos.run/dreams/build-question-answering-chatbot-using-langchain-openai-gpt/"/>
    <id>https://blog.chaos.run/dreams/build-question-answering-chatbot-using-langchain-openai-gpt/</id>
    <published>2023-03-21T07:01:08.000Z</published>
    <updated>2026-02-02T15:05:36.983Z</updated>
    
    <content type="html"><![CDATA[<p>昨天了解了一下如何用 GPT 来做问答知识库，比如 Supabase 的技术文档可以使用自然语言提问，然后由 AI 给出回答。</p><p>自己也动手做了一个小工具来做试验：用了 LangChain 框架，调用 OpenAI 的 GPT-3.5 Turbo 模型进行实现。Embedding 使用 <code>text-embedding-ada-002-v2</code>。</p><h2 id="基本问题"><a class="markdownIt-Anchor" href="#基本问题"></a> 基本问题</h2><p>OpenAI 的 API 简洁易懂，而且 LangChain 提供了抽象，事实上不需要关心 OpenAI 的 API 的用法，只需要关心 LangChain 具体函数 API。</p><p>要想构建知识库，则首先要搞清楚下面两个问题：</p><ol><li>模型怎么能知道关于特定文档的知识？</li><li>对话历史记录如何保存？</li></ol><p>解决了这两个问题，基本就搭建好了该聊天机器人的基本框架。</p><span id="more"></span><h2 id="构建向量存储"><a class="markdownIt-Anchor" href="#构建向量存储"></a> 构建向量存储</h2><p>考虑到我们要调用外部 API 来获得结果，因此每次解答来自用户的问题时，将所有文档作为输入是不现实的（即使没有 token 限制）。</p><p>而且 OpenAI 提供的 API 是无状态的，意味着它本身不会意识到之前的对话内容。</p><p>因此，我们需要通过其他方法在单次调用 API 的请求体中包含解答问题必要的上下文知识。</p><p>一种解决方案是根据文档生成 <a href="https://platform.openai.com/docs/guides/embeddings/what-are-embeddings">Embeddings</a>，每一条 embedding 都是一个由若干浮点数组成的向量。因此可以计算向量之间距离，以代表相似程度。这些由文档生成的向量们可以被视为代表每个段落（chunk），当我们把用户的问题同样转换成向量时，我们可以通过计算和文档向量们的距离，来找到与之对应的最近（最相似）的一些段落。</p><p>当我们把这些段落作为背景信息发送给 OpenAI 的 API 时，模型即可以此来回答用户的问题。</p><p>LangChain 提供了 <a href="https://langchain.readthedocs.io/en/latest/modules/indexes/getting_started.html">VectorstoreIndexCreator</a> 可以根据文档创建一个向量的索引。</p><h2 id="构建对话历史"><a class="markdownIt-Anchor" href="#构建对话历史"></a> 构建对话历史</h2><p>一个简单的方式是将所有对话历史消息添加到 prompt 里，比如 LangChain 给出的<a href="https://langchain.readthedocs.io/en/latest/modules/memory/getting_started.html">示例</a>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.</span><br><span class="line"></span><br><span class="line">Current conversation:</span><br><span class="line">Human: Hi there!</span><br><span class="line">AI:  Hi there! It&#x27;s nice to meet you. How can I help you today?</span><br><span class="line">Human: I&#x27;m doing well! Just having a conversation with an AI.</span><br><span class="line">AI:</span><br></pre></td></tr></table></figure><p>但随着对话进行，历史消息越来越多，最终会超出单次 API 调用的 token 限制。</p><p>一种解决方案是只保留最近 K 个对话消息，作为一部分，缺点是对过去对话信息的一些丢失。但最近 K 个消息中，可能也足以让模型推断出对话的背景。</p><p>另外一种解决方案是同时针对过去的对话让 LLM（大型语言模型，本例中即同样使用 OpenAI 的 GPT 3.5）进行总结，然后再作为 prompt 的一部分。这个总结将提供所需要的基本背景信息，至少让模型了解个大概。</p><p>LangChain 提供了 <a href="https://langchain.readthedocs.io/en/latest/modules/memory/types/summary_buffer.html">ConversationSummaryBufferMemory</a> 来实现了「总结 + K 条对话」的逻辑，因此我们可以直接使用，而不必重复具体实现。</p><h2 id="示意图"><a class="markdownIt-Anchor" href="#示意图"></a> 示意图</h2><p>以下是上文所讨论的实现方式的具体示意图：</p><p><img src="https://blog.chaos.run/images/posts/AtUkJnC.png" alt="" /></p><p>首先利用所有文档 + LangChain + OpenAI Embedding 来创建 Vector Store。</p><p>当接受到用户的问题后，再生成该问题的向量，以此向量得到 K 个最相似的文档段落，作为 prompt 关于背景信息的一部分。</p><p>同时在对话历史中获取最近的 K 条消息，以及对话的总结，作为 prompt 关于历史消息的一部分。</p><p>再将用户原始的消息作为 prompt 最终的问题，向 OpenAI 提供的模型提问，得到回答。</p><p>最后将该问题和回答记录，作为 Memory 存储的一部分。</p><h2 id="代码及演示"><a class="markdownIt-Anchor" href="#代码及演示"></a> 代码及演示</h2><p>仅作为实验用途，因此为了快速验证，使用了 Streamlit 作为网页应用框架。</p><p>使用了 <a href="https://prcore-docs.chaos.run">PrCore</a> 的文档作为待使用的知识库。</p><p>代码托管在 <a href="https://github.com/prcore/assistant">GitHub</a></p><p>演示网站位于 <a href="https://prcore-assistant.chaos.run">https://prcore-assistant.chaos.run</a></p><p>效果如下：</p><p><img src="https://blog.chaos.run/images/posts/yTXOoVJ.png" alt="" /></p><p>通过 Prompt 限定了模型只回答有关 PrCore 文档的问题。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;昨天了解了一下如何用 GPT 来做问答知识库，比如 Supabase 的技术文档可以使用自然语言提问，然后由 AI 给出回答。&lt;/p&gt;
&lt;p&gt;自己也动手做了一个小工具来做试验：用了 LangChain 框架，调用 OpenAI 的 GPT-3.5 Turbo 模型进行实现。Embedding 使用 &lt;code&gt;text-embedding-ada-002-v2&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;基本问题&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#基本问题&quot;&gt;&lt;/a&gt; 基本问题&lt;/h2&gt;
&lt;p&gt;OpenAI 的 API 简洁易懂，而且 LangChain 提供了抽象，事实上不需要关心 OpenAI 的 API 的用法，只需要关心 LangChain 具体函数 API。&lt;/p&gt;
&lt;p&gt;要想构建知识库，则首先要搞清楚下面两个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;模型怎么能知道关于特定文档的知识？&lt;/li&gt;
&lt;li&gt;对话历史记录如何保存？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;解决了这两个问题，基本就搭建好了该聊天机器人的基本框架。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="gpt" scheme="https://blog.chaos.run/tags/gpt/"/>
    
    <category term="langchain" scheme="https://blog.chaos.run/tags/langchain/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu 上 Rime 输入法词典同步</title>
    <link href="https://blog.chaos.run/dreams/ubuntu-rime-sync/"/>
    <id>https://blog.chaos.run/dreams/ubuntu-rime-sync/</id>
    <published>2023-02-25T12:23:17.000Z</published>
    <updated>2026-02-02T15:05:36.995Z</updated>
    
    <content type="html"><![CDATA[<p>把同步方案从 Dropbox 换成了 MEGA，顺便记录一下要点，以免后来再遇到这个问题还要现找配置文件在哪里。</p><span id="more"></span><h2 id="本地配置"><a class="markdownIt-Anchor" href="#本地配置"></a> 本地配置</h2><p>路径 <code>~/.config/ibus/rime/installation.yaml</code>。</p><p>修改 <code>installation_id</code> 和 <code>sync_dir</code></p><p>例如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">distribution_code_name: &quot;ibus-rime&quot;</span><br><span class="line">distribution_name: Rime</span><br><span class="line">distribution_version: 1.5.0</span><br><span class="line">install_time: &quot;Fri Jan 14 14:19:34 2022&quot;</span><br><span class="line">installation_id: example1</span><br><span class="line">rime_version: 1.7.3</span><br><span class="line">sync_dir: &quot;/home/chaos/MEGA/Rime&quot;</span><br></pre></td></tr></table></figure><h2 id="网盘配置"><a class="markdownIt-Anchor" href="#网盘配置"></a> 网盘配置</h2><p><code>MEGA</code> 为网盘同步文件夹，<code>Rime</code> 为专门放字典文件的同步文件夹。</p><p>需要在 <code>Rime</code> 文件夹下创建与该设备 <code>installation_id</code> 同名的目录，比如 <code>example1</code>。</p><h2 id="使配置生效"><a class="markdownIt-Anchor" href="#使配置生效"></a> 使配置生效</h2><p>在 rime 的操作菜单，点击「同步」按钮，过后可观察到 <code>example1</code> 下自动生成了文件。<br />如此，每个设备都有单独的文件夹，在同步时，rime 会自动遍历 <code>MEGA/Rime</code> 下的所有目录进行整合。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;把同步方案从 Dropbox 换成了 MEGA，顺便记录一下要点，以免后来再遇到这个问题还要现找配置文件在哪里。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="ubuntu" scheme="https://blog.chaos.run/tags/ubuntu/"/>
    
    <category term="rime" scheme="https://blog.chaos.run/tags/rime/"/>
    
  </entry>
  
  <entry>
    <title>2022 年回顾</title>
    <link href="https://blog.chaos.run/dreams/year-2022/"/>
    <id>https://blog.chaos.run/dreams/year-2022/</id>
    <published>2023-01-15T23:06:29.000Z</published>
    <updated>2026-02-02T15:05:36.998Z</updated>
    
    <content type="html"><![CDATA[<p>自从 2023 年 1 月 6 日实习结束，说好听点我休息了 9 天，说难听点是着实颓废了 9 天。我现在有个毛病，就是在终于完成一个阶段后，就好像用掉了自己所有的力气和精神，很难支棱起来。不过也凑巧的是，最近这两次颓废都是在新冠康复后，也不知是后遗症还是真有了这脆弱的习惯。</p><p>所以在这 1 月中旬，才想要写下 2022 年的种种琐事——本来没这习惯，颓着也是颓着，写点东西也算回忆和沉淀吧。</p><span id="more"></span><h2 id="学业"><a class="markdownIt-Anchor" href="#学业"></a> 学业</h2><p>学习上很平淡，按部就班，由 deadline、抵触情绪、焦虑驱使着我前进。极限预估时间的能力每每让我堪堪完成任务，惊险，刺激，平淡中的不平淡。</p><h3 id="小组作业"><a class="markdownIt-Anchor" href="#小组作业"></a> 小组作业</h3><p>天下苦小组作业久矣！2022 年的上半年适逢我的第二学期，第一学期已经领教到学校内所谓的团队作业有多可笑。像我这样性格的人，自然成为队伍里默默出力的老黄牛。第二学期发生了更加戏剧化的事情，以及又见识到了两面三刀的小人，虽然不惊讶，但也是动了气。</p><p>空虚的小组作业和评分机制只锻炼了我 bragging 和甩锅的能力，按学校的意愿，大概也算是“为在行业内工作做好准备”了吧。</p><h3 id="执念"><a class="markdownIt-Anchor" href="#执念"></a> 执念</h3><p>本科的时候情情爱爱，做了许多幼稚的事情，不仅对他人有所亏欠，学业也难免荒废。毕业三年后，如今又重拾起上学这行当，倒有种弥补曾经遗憾的念头。这倒是其次，主要第一学期第一门课评了 A 后，强迫症的心蠢蠢欲动，生起了要全 A 的执念。</p><p>前三个学期这目标实现得还顺利，不知道第四个学期的毕业论文会如何呢？</p><p>假如实习答辩或者论文没达成 A，我心里会是什么感觉呢？那份自卑又自负的心向何处安放？全 A 固然可以称得上完美实现目标，但这样我反而担心起自己日后如果还有类似的执念却最终落空时，会不会没有快速恢复、自我激励的免疫力呢？</p><h3 id="论文"><a class="markdownIt-Anchor" href="#论文"></a> 论文</h3><p>说到论文，对这段求学最后一个需要通的关，我总是提不起太大兴趣。每两周要汇报进度，反而让我有了压力和抵触。我还在劝说自己尽量做得好一点。</p><p>理智告诉我，完成论文的同时，我也能顺便学习我早已想掌握的技能。但我总感觉自己没有准备好，一知半解的状态下就去创造，心里不得劲。</p><h2 id="职业"><a class="markdownIt-Anchor" href="#职业"></a> 职业</h2><p>普通人的生活就是忙忙碌碌，工作是绕不开的话题，是驴就得拉磨，习以为常。</p><h3 id="实习"><a class="markdownIt-Anchor" href="#实习"></a> 实习</h3><p>拖来拖去，还是要面对不得不做的事情，也是学校要求的事情。于是在 9 月份投了两家公司的实习。在社恐人士万分煎熬的面试过后，侥幸都收到了 offer，最终去了第二家。三个月全勤实习下来后，还是学到了一些东西的，主要不是关于编程的技能，而是公司的工作流程、组织分配，以及同事之间合作的沟通。当然众生百态，也见到了形形色色的人，还感受到了作为一个外国人在这里工作的微妙感觉。</p><h3 id="创业"><a class="markdownIt-Anchor" href="#创业"></a> 创业</h3><p>这是我下一步的计划。论文导师以及实习公司的工作 offer 促成了这个想法。在我犹豫是否要接受导师的雇佣，以及是否要在公司转正的时候，机缘巧合，或者说是必然发展，我萌生了创立公司这个充满风险的想法。现在说什么都太早，希望顺利吧。</p><h2 id="旅行"><a class="markdownIt-Anchor" href="#旅行"></a> 旅行</h2><p>6 月底是假期，我开启了一段以感染新冠为结束的旅行。</p><h3 id="社恐的冒险"><a class="markdownIt-Anchor" href="#社恐的冒险"></a> 社恐的冒险</h3><p>自从看过白日梦想家的电影介绍（是的，电影介绍，我甚至没有完整看过它），内心里就埋下了去“探险”的种子。社恐，成为了我出行的阻力，也成为了我出行的理由。我想，总要试上那么一试，不要让社恐成为我的阻碍，所以这旅是非游不可了。</p><p>当下，就开始了说走就走的旅行，最大的感受就是费钱。由于各种票、 酒店都是临时订的，价格高了不只一点半点。感谢互联网（小红书），得以解决很多关于路线，公共交通，避坑的问题。</p><p>从第一站德国，就开始了莫名尴尬和频频出错的独身出行之旅。约接机车却晚点、酒店吃错学生餐、餐厅就餐不懂吃法。可喜可贺的是，谷歌地图没有领错路，我也没有迷路过，再次感谢现代科技。</p><p>依次往下走，去了布拉格、维也纳、威尼斯、布鲁塞尔、阿姆斯特丹。本来订好了去往丹麦和瑞典的票和酒店，但在荷兰新冠病发，匆匆回了养病。</p><p>印象深刻的有几件事：</p><ol><li>在柏林骑踏板车，背着和身子不协调的大包，穿越了大半城。</li><li>刚到布拉格的第一晚，从大巴车下来，天空蓝得像清澈的宝石。</li><li>在维也纳住的酒店阳台的躺椅上吹风，看蚂蚁吃我刚点的外卖零食，听的竟是相声。</li><li>威尼斯的小巷里，路过一家古朴的面具店，只是一瞥，看到狭窄的店铺仿佛另一个窄巷，两面的墙壁挂满各色面具，深处是昏黄的灯光，店主老爷在手制面具。第二天想再找拍个照，怎么也没有找到。</li><li>在布鲁塞尔的某个办公楼下，躲了半个小时的雨，呆呆地。</li><li>阿姆斯特丹市中心附近地下一层的药店里，活泼风趣的阿姨给我找我看了半天也没有找到的体温计。</li></ol><p>唯二的自拍照是由路上的好心人主动给我拍的，在德国的几个姑娘，在捷克的一对老夫妇。我自己自然是不会问人给我拍照的，也不会有路上攀谈的朋友。</p><h3 id="享受还是任务"><a class="markdownIt-Anchor" href="#享受还是任务"></a> 享受还是任务</h3><p>小时候会做一种梦，乘坐宇宙飞船去往未知的太空。梦里的兴奋和莫可名状的希望让我难以忘记。远方，对我来说有种神秘的浪漫。快要出发时的感觉真的很独特，很少有对于未知不是恐惧而是期待的情景，旅游就是其中一种。</p><p>6 月份的旅游大概走了两周，感觉时间还是很紧张，还没来得及多感受感受就走了。但有时也觉得没什么可感受的，不同的城市，同样的人性，换着表面的花样，底子好像没变。</p><p>所以大概唯一的区别就是路上的心态。究竟是散心，还是为了完成一个个计划。</p><p>8 月份也走了走，去了芬兰和瑞典。更有点乏善可陈的意思，不过这次有人陪，但由于时间限制，又免不了犯了赶路的心。</p><p>但愿下次能好好静下心来体验走路上的感觉吧。</p><h2 id="健康"><a class="markdownIt-Anchor" href="#健康"></a> 健康</h2><p>除了两次感染新冠，上半年反反复复去看我的眼睛也是件烦心事，和各种各样的眼科医生的见面，组成了我为数不多的社交的一部分，不仅未知多多，还要来回在两个城市之间折腾。往往到此情景，总感叹健康的重要，生老病死，为何这么苦呢？</p><p>好在自己生的不是什么大病。这种侥幸心态大概很残忍吧。</p><h2 id="感情"><a class="markdownIt-Anchor" href="#感情"></a> 感情</h2><p>不知旁人看上去顺利否，但真是冷暖自知。</p><h3 id="期待pua"><a class="markdownIt-Anchor" href="#期待pua"></a> 期待？PUA？</h3><p>我不得不承认，在自己认为付出了很多之后，总是有得到一些回报的期待。</p><p>但至后来，我的期待变成了对方能处理好自己的事情，能承担一些该承担的责任的基础线。</p><p>当对方连最基础的责任都履行得差强人意的时候，我真的很失望：由期待到引导，由引导到代为承担，由代为承担到恼火，由恼火到失望。甚至我会质疑我们在一起，自己到底图什么。</p><p>有时我还会考虑自己的行为是否有 PUA 的性质？是不是应降低期待？是不是不该失去耐心？</p><p>但需要慢慢等待一个人再成熟一点，这个过程不像是谈恋爱，像是带孩子。</p><h3 id="初心"><a class="markdownIt-Anchor" href="#初心"></a> 初心</h3><p>我在心软的时候，总会想起当初对他的爱护的感觉，那似乎应该就是我的初心。我想让他高兴和幸福，他有时像个小孩子一样，又像是一只小鹿。</p><p>这种感觉不会是父爱或者母爱吧。</p><h3 id="失望与希望"><a class="markdownIt-Anchor" href="#失望与希望"></a> 失望与希望</h3><p>纵然有失望之处，对方的改变之处的确是有的。我可能需要减少自己版本的叙事，从另一个角度看待他的困境。</p><p>只要有一点希望，失望就不至于是绝望。</p><p>更何况我应该收起自己的脾气，更宽容一点看待，也许希望比我想象得还要大得多。</p><p>我并不认为这是我在自欺欺人，我的确认为自己在心态上还有一些可以更包容的改变，但同时这不意味着对他的纵容或弃疗。</p><h2 id="未来"><a class="markdownIt-Anchor" href="#未来"></a> 未来</h2><p>不确定性和焦虑如影随形。</p><p>我只能按着原计划硬着头皮往前走，即使我很害怕，我社恐，我担忧又脆弱。而且还有人需要我。这样看起来我好像太把自己当回事了，可现在还不是我能放心懈怠的时候。</p><p>能确定掌握的东西太少太少，所以尽人事吧。</p><h2 id="杂感"><a class="markdownIt-Anchor" href="#杂感"></a> 杂感</h2><h3 id="关于贡高我慢"><a class="markdownIt-Anchor" href="#关于贡高我慢"></a> 关于贡高我慢</h3><blockquote><p>“我慢自矜高，谄曲心不实。”——《法华经》</p></blockquote><p>从实习的经历里，我反思自己和他人的言行，发现 ego 这个问题在编程相关的技术人员群体里还挺普遍。从 code review 的内容和方式上，观察每个人不同的处理方式和评论风格，就可见端倪。</p><p>由考察自己的言行，我发现在回复朋友的技术相关问题时，我也有这样的毛病。这种行为仿佛动物的本能，我们通过傲慢地批驳和否定他人，来欺骗性地肯定自己的价值和存在的必要性。</p><p>如果能跳出这个火坑，以及放下对别人的类似行为的消极反应，烦恼大概会少很多吧。</p><h3 id="关于娱乐"><a class="markdownIt-Anchor" href="#关于娱乐"></a> 关于娱乐</h3><p>在这颓废的 9 天，我总是想找点什么东西娱乐一下。买了不少游戏，两下就丧失兴趣，觉得心累，浪费了不少钱，这恐怕就是现在说的电子阳痿吧。</p><p>Netflix 上翻了又翻，看着五颜六色的封面，觉得每个都是那么无聊、套路、新瓶装旧酒。曾经那些好奇和激动都去哪里了呢？被反复刺激的上限，成了毒瘾，再 high 的药也满足不了对出奇故事的渴望。结果就是双目无光，见多不怪。</p><p>最近年轻人都在听什么歌呢？我发现自己都不知道，甚至不知道获取这些东西的可靠途径在哪里。我忽然感觉自己老了，因为那份和年轻人心态和圈子的隔膜轻触即见。我不是觉得他们幼稚，而是觉得自己心累。</p><p>于是我在反复思考一个问题，什么是可靠的娱乐呢？</p><p>对于现在的我，答案应该是「学习和整理」。前者看起来好假，但我指的不是为了完成自己毫不关心的课程的那种学习，而是对自己好奇的任何类别的知识的学习。学习和实践的过程里，似乎也能找到小时候玩玩具，搭积木的快乐。后者「整理」，包含整理杂物，整理收件箱，整理衣柜，整理密码库，整理收藏夹，整理文件夹，不需要动太多脑筋，节奏得当还可以达到放松满足的效果。这似乎解释了这两天我为什么对红楼梦的写作手法感兴趣，以及为什么想要整理整理自己曾经收集的各种零碎信息。</p><p>大概这一人生阶段我的娱乐方式就是去一厢情愿：在无知的世界里假装学习知识，在必然的混乱里妄图创造秩序。</p><h2 id="尾"><a class="markdownIt-Anchor" href="#尾"></a> 尾</h2><p>所以你看，人的一年有乐有苦，自以为是，或笑或痴。烦恼是常态，快乐昙花一现。这样的一年可能还有很多，可能某刻就戛然而止。什么能带走，什么又能留下。</p><p>劝自己，少计较。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;自从 2023 年 1 月 6 日实习结束，说好听点我休息了 9 天，说难听点是着实颓废了 9 天。我现在有个毛病，就是在终于完成一个阶段后，就好像用掉了自己所有的力气和精神，很难支棱起来。不过也凑巧的是，最近这两次颓废都是在新冠康复后，也不知是后遗症还是真有了这脆弱的习惯。&lt;/p&gt;
&lt;p&gt;所以在这 1 月中旬，才想要写下 2022 年的种种琐事——本来没这习惯，颓着也是颓着，写点东西也算回忆和沉淀吧。&lt;/p&gt;</summary>
    
    
    
    <category term="life" scheme="https://blog.chaos.run/categories/life/"/>
    
    
    <category term="year" scheme="https://blog.chaos.run/tags/year/"/>
    
  </entry>
  
  <entry>
    <title>杂记：22-50</title>
    <link href="https://blog.chaos.run/dreams/miscellaneous-notes-22-50/"/>
    <id>https://blog.chaos.run/dreams/miscellaneous-notes-22-50/</id>
    <published>2022-12-16T19:39:19.000Z</published>
    <updated>2026-02-02T15:05:36.991Z</updated>
    
    <content type="html"><![CDATA[<p>刷推偶得，个人笔记。2022 年第 50 周，持续更新至 12 月 18 日。</p><span id="more"></span><h3 id="charachorder-one"><a class="markdownIt-Anchor" href="#charachorder-one"></a> CharaChorder One</h3><p>很新奇的键盘，但我感觉自己还是不会用到。<a href="https://twitter.com/David55686657/status/1603368634100826112">来源</a></p><h3 id="javascript-数组常用方法"><a class="markdownIt-Anchor" href="#javascript-数组常用方法"></a> Javascript 数组常用方法</h3><p><code>push()</code>、<code>pop()</code>、<code>shift()</code>、<code>unshift()</code>、<code>indexOf()</code>、<code>slice()</code>、<code>forEach()</code>。<a href="https://twitter.com/csaba_kissi/status/1603388720127909888">来源</a></p><h3 id="programming-tools"><a class="markdownIt-Anchor" href="#programming-tools"></a> Programming tools</h3><ol><li><a href="https://scribehow.com/">Scribe</a>：用于编写文档。</li><li><a href="https://www.tab-suspender.com/">Tab Suspender</a>：自动清理多余的浏览器 tabs。</li><li><a href="https://www.colorzilla.com/">ColorZilla</a>：网页颜色提取。</li><li><a href="https://daily.dev/">Daily.dev</a>：一个和开发相关的新闻聚合。之前用过（不太喜欢）。</li><li><a href="https://responsively.app/">Responsively</a>：辅助响应式网页开发的工具。</li></ol><h3 id="简单简历"><a class="markdownIt-Anchor" href="#简单简历"></a> 简单简历</h3><p><a href="https://easycv.cn/">简单简历</a>，一个基于 Tailwind.css 的模板简历生成工具。<a href="https://twitter.com/vikingmute/status/1603962114627883008">来源</a></p><h3 id="replit-ghostwriter"><a class="markdownIt-Anchor" href="#replit-ghostwriter"></a> Replit Ghostwriter</h3><p><a href="https://replit.com/site/ghostwriter">Ghostwriter</a>，一个类似 GitHub Copilot 的工具。<a href="https://twitter.com/thecat/status/1603908667975180289">来源</a></p><h3 id="materialized-view"><a class="markdownIt-Anchor" href="#materialized-view"></a> Materialized view</h3><p>物化视图。将查询结果预先计算并存储，可避免联接和聚合的开销，以减少查询的时间、资源消耗。源数据更改时，视图需要被更新（通过定时任务，或检测更改后触发）。<a href="https://twitter.com/ingramchen/status/1603601457051156481">来源</a></p><h3 id="substack"><a class="markdownIt-Anchor" href="#substack"></a> Substack</h3><p><a href="https://substack.com/">Substack</a>，一个创作内容订阅平台。写作者、播客主可通过该平台提供订阅，并创作收入。<a href="https://twitter.com/wuyagege/status/1604012527762956288">来源</a></p><h3 id="raycast"><a class="markdownIt-Anchor" href="#raycast"></a> Raycast</h3><p><a href="https://www.raycast.com/">Raycast</a>，支持 macOS 的桌面启动器，丰富的功能使其可被视为效率工具。<a href="https://twitter.com/X140Yu_/status/1603405274588512256">来源</a></p><h3 id="state-of-css"><a class="markdownIt-Anchor" href="#state-of-css"></a> State of CSS</h3><p><a href="https://stateofcss.com/en-us/">State of CSS</a>，对 CSS 相关技术现状的调查年度报告。<a href="https://twitter.com/HiTw93/status/1604058823731265536">来源</a></p><h3 id="数字货币学习资源"><a class="markdownIt-Anchor" href="#数字货币学习资源"></a> 数字货币学习资源</h3><h4 id="认知"><a class="markdownIt-Anchor" href="#认知"></a> 认知</h4><ol><li>下场实践。泡社区、买 NFT、玩链游、冲土狗……把手弄脏才能积累一件事物的真正认知。</li><li>要懂技术。本身是技术驱动的行业，懂技术，更能理解商业模式，只是看懂还是不难。</li><li>学好英语。行业是全球化的，牛逼的项目一定不会局限在华语 ，不只是方便去获取一手信息，还需要进入核心圈。</li><li>发展深度。Web3 缺各种类型的人才，懂市值管理、懂社区运营、懂经济模型、懂技术……建立自己的认知壁垒，成为某个领域的专才。</li><li>拓展宽度。各个细分赛道都是通的，机会也很多，Defi、NFT、SocialFi，都得了解。</li><li>关注市场。渠道包括：Twitter KOL、媒体、投资机构动向、宏观局势。</li></ol><h4 id="公众号"><a class="markdownIt-Anchor" href="#公众号"></a> 公众号</h4><ol><li>VC：A &amp; T、IOSG、Mint Venture、Zonff Partners。</li><li>DAO：BuidlerDAO、SeeDAO、SevenUp DAO、1435 Crypto、WhoKnows DAO。</li></ol><h4 id="媒体"><a class="markdownIt-Anchor" href="#媒体"></a> 媒体</h4><ol><li>Mirror，尤其是 Spotlight 获得者 @cwweb3 @ShawnMelUni @jason_chen998</li><li>Foresight、吴说</li><li>Web3Caff、ChainFeeds、Web3Q</li><li>Future（A16Z 媒体，<a href="https://future.com">https://future.com</a>）</li><li>SeedClub（<a href="https://press.seedclub.xyz">https://press.seedclub.xyz</a>）</li><li>Decrypto（<a href="https://decrypt.co">https://decrypt.co</a>）</li><li>Bitcoin（<a href="https://news.bitcoin.com">https://news.bitcoin.com</a>）</li></ol><h4 id="播客"><a class="markdownIt-Anchor" href="#播客"></a> 播客</h4><ol><li>Web3 Mint To Be</li><li>CSS｜探索 Crypto 的精彩世界</li><li>Web3 101</li><li>Web3 随意门</li><li>Buidler Talk HODLong 后浪</li><li>橙皮书</li><li>What up Web3</li><li>0x499 Delight</li><li>Web3 无名说</li></ol><h4 id="课程"><a class="markdownIt-Anchor" href="#课程"></a> 课程</h4><ol><li>Defi MOOC（UCB 课程，YT）</li><li>Defi MOOC 中文版（B 站）</li><li>Blockchain Technologies（斯坦佛课程 CS251）</li><li>北大肖臻老师《区块链技术与应用》公开课（B 站）</li><li>Odyssey</li><li>Binance Academy</li><li>RabbitHole</li><li>BuidlerDAO （YT、B 站）</li></ol><h4 id="工具"><a class="markdownIt-Anchor" href="#工具"></a> 工具</h4><ol><li>工具汇总：hidefi</li><li>链上资产查询：Debank、Zerion</li><li>链上数据分析：GlassNode、Dune、JieData、DefiLlama、Footprint、Watchers</li><li>Space 下载：<a href="https://spacesdown.com">https://spacesdown.com</a></li><li>防钓鱼：MetaShield</li><li>授权查看和取消：</li></ol><h4 id="技术入门"><a class="markdownIt-Anchor" href="#技术入门"></a> 技术入门</h4><ol><li>推荐使用的学习资料：<a href="https://youtube.com/watch?v=M576WGiDBdQ">https://youtube.com/watch?v=M576WGiDBdQ</a></li><li>目的：for 快速串开发流程 &amp; 梳理和语言的交互逻辑<ul><li>合约本身的开发、测试、部署和验证</li><li>和java交互的接口封装和 SDK 开发</li></ul></li></ol><h4 id="技术进阶"><a class="markdownIt-Anchor" href="#技术进阶"></a> 技术进阶</h4><ol><li>Ethernaut 靶场：<a href="https://ethernaut.openzeppelin.com">https://ethernaut.openzeppelin.com</a></li><li>写代码时参考文档：<ul><li>solidity 官方文档：<a href="https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html">https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html</a></li><li>代币标准查阅：<a href="https://docs.openzeppelin.com/contracts/4.x/">https://docs.openzeppelin.com/contracts/4.x/</a></li></ul></li><li>常见错误加快写码进度的文档：<ul><li>Reentrancy：<a href="https://consensys.github.io/smart-contract-best-practices/attacks/reentrancy/">https://consensys.github.io/smart-contract-best-practices/attacks/reentrancy/</a></li><li>dasp top10：<a href="https://dasp.co">https://dasp.co</a></li></ul></li></ol><h4 id="其他"><a class="markdownIt-Anchor" href="#其他"></a> 其他</h4><ul><li>evm 交互：<a href="https://eth.wiki/json-rpc/API">https://eth.wiki/json-rpc/API</a></li><li>javascript: <a href="https://docs.ethers.io/v5/">https://docs.ethers.io/v5/</a></li><li>go: <a href="https://github.com/ethereum/go-ethereum">https://github.com/ethereum/go-ethereum</a></li><li>Web3j：<a href="https://docs.web3j.io/4.8.7/">https://docs.web3j.io/4.8.7/</a></li><li>rust: <a href="https://docs.rs/ethers/latest/ethers/">https://docs.rs/ethers/latest/ethers/</a></li></ul><p><a href="https://twitter.com/CryptoNiels27/status/1603437907322118144">来源</a></p><h3 id="免费图片网站"><a class="markdownIt-Anchor" href="#免费图片网站"></a> 免费图片网站</h3><ol><li><a href="http://unsplash.com">unsplash.com</a></li><li><a href="http://pexels.com">pexels.com</a></li><li><a href="http://pixabay.com">pixabay.com</a></li><li><a href="http://freeimages.com">freeimages.com</a></li><li><a href="http://magdeleine.co">magdeleine.co</a></li><li><a href="http://lifeofpix.com">lifeofpix.com</a></li><li><a href="http://picography.co">picography.co</a></li><li><a href="http://stocksnap.io">stocksnap.io</a></li><li><a href="http://freephotos.cc">freephotos.cc</a></li><li><a href="http://pngtree.com">pngtree.com</a></li><li><a href="http://burst.shopify.com">burst.shopify.com</a></li><li><a href="http://duotone.shapefactory.co">duotone.shapefactory.co</a></li></ol><h3 id="fleet"><a class="markdownIt-Anchor" href="#fleet"></a> Fleet</h3><p>JetBrains 出品的轻量级编辑器，对标 VSCode。<a href="https://twitter.com/froseiun/status/1603378344724078593">来源</a></p><h3 id="go-单元测试"><a class="markdownIt-Anchor" href="#go-单元测试"></a> Go 单元测试</h3><ol><li>打桩：指用一些代码（桩 stub）代替目标代码，通常用来屏蔽或补齐业务逻辑中的关键代码方便进行单元测试。一般用 Monkey 框架。</li><li>断言用 Convey。</li><li>面向接口编程，选择 Gomock。</li><li>测试相关书籍：《Unit Testing Principles, Practices, and Patterns》</li></ol><p><a href="https://twitter.com/stephenzhang233/status/1603422208256114690">来源</a></p><h3 id="go-captcha"><a class="markdownIt-Anchor" href="#go-captcha"></a> Go Captcha</h3><p><a href="https://github.com/wenlng/go-captcha">仓库地址</a>，行为验证码的一个 Go 库。<a href="https://twitter.com/ruanyf/status/1603554261736255488">来源</a></p><h3 id="geo-traceroute"><a class="markdownIt-Anchor" href="#geo-traceroute"></a> Geo Traceroute</h3><p><a href="https://t.co/5JgkWniQP3">地址</a>，谷歌地图显示网络请求的路由路径。</p><h3 id="钉钉-chatgpt"><a class="markdownIt-Anchor" href="#钉钉-chatgpt"></a> 钉钉 + ChatGPT</h3><p><a href="https://github.com/eryajf/chatgpt-dingtalk">地址</a>，AI 聊天 ChatGPT 的钉钉集成。<a href="https://twitter.com/ruanyf/status/1603554261736255488">来源</a></p><h3 id="linearsart"><a class="markdownIt-Anchor" href="#linearsart"></a> Linears.art</h3><p>该<a href="https://linears.art">网站</a>收集了一堆设计得像 Linear 的网站。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;刷推偶得，个人笔记。2022 年第 50 周，持续更新至 12 月 18 日。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="技术杂记" scheme="https://blog.chaos.run/tags/%E6%8A%80%E6%9C%AF%E6%9D%82%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>设计中的廉价感</title>
    <link href="https://blog.chaos.run/dreams/the-sense-of-cheapness-in-design/"/>
    <id>https://blog.chaos.run/dreams/the-sense-of-cheapness-in-design/</id>
    <published>2022-09-20T18:11:02.000Z</published>
    <updated>2026-02-02T15:05:36.995Z</updated>
    
    <content type="html"><![CDATA[<p>偶然间看到一个知乎问答，学到了设计时如何提升「档次」的方法。</p><span id="more"></span><p>功能性和装饰性要平衡。功能性过于明显的会显得廉价，需要找方法进行调整。只有装饰性而没有功能性也会让人觉得档次很低。</p><p>这里有<a href="https://twitter.com/waylybaye/status/1572132299025817600">一个反例</a>，可惜推文被作者删除了，大家<a href="https://twitter.com/PenngXiao/status/1572132848462856192">普遍反映</a>新版的 UI 很丑（由于推文已删除，只找到这个回复串的有限几个评论）。原推文的截图备份<a href="https://i.imgur.com/uq1ANPc.png">在此</a>，原版 UI 的截图备份<a href="https://i.imgur.com/g6sWPNY.jpg">在此</a>，新版 UI 的截图备份<a href="https://i.imgur.com/7IjpFX1.png">在此</a>。</p><p>标题以及背景动画的装饰性远大于功能性。这造成了功能性和装饰性的失衡，从而有廉价感，俗称「土」。灵动岛目前的状态也踩了这个坑，当用户能很轻易地发现到它的功能性是「遮丑」，它的逼格就下降了。</p><h2 id="references"><a class="markdownIt-Anchor" href="#references"></a> References</h2><ul><li><a href="https://www.zhihu.com/question/23858406/answer/2287514428">为什么黑皮鞋不能配白袜子？ - 这是eno的回答 - 知乎</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;偶然间看到一个知乎问答，学到了设计时如何提升「档次」的方法。&lt;/p&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="design" scheme="https://blog.chaos.run/tags/design/"/>
    
  </entry>
  
  <entry>
    <title>用正则匹配泰文字符</title>
    <link href="https://blog.chaos.run/dreams/use-regex-to-match-thai-characters/"/>
    <id>https://blog.chaos.run/dreams/use-regex-to-match-thai-characters/</id>
    <published>2022-09-20T18:04:13.000Z</published>
    <updated>2026-02-02T15:05:36.996Z</updated>
    
    <content type="html"><![CDATA[<p>比如需要匹配 2 到 10 个泰文字符，构建表达式时可以这么表示（Python 为例）。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">regex = r&quot;[\u0E00-\u0E7F]&#123;2,10&#125;&quot;</span><br></pre></td></tr></table></figure><span id="more"></span><h2 id="references"><a class="markdownIt-Anchor" href="#references"></a> References</h2><ul><li><a href="https://stackoverflow.com/questions/56285589/how-can-i-check-string-is-thai-language-that-return-boolean-like-isalpha">How can i check string is Thai language that return boolean like isalpha()</a></li><li><a href="https://www.herongyang.com/Unicode/Block-U0E00-Thai.html">0E00: Thai</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;比如需要匹配 2 到 10 个泰文字符，构建表达式时可以这么表示（Python 为例）。&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;regex = r&amp;quot;[&#92;u0E00-&#92;u0E7F]&amp;#123;2,10&amp;#125;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</summary>
    
    
    
    <category term="digital" scheme="https://blog.chaos.run/categories/digital/"/>
    
    
    <category term="regex" scheme="https://blog.chaos.run/tags/regex/"/>
    
  </entry>
  
</feed>
