<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>梁栋烨</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>http://090909.top/</id>
  <link href="http://090909.top/" rel="alternate"/>
  <link href="http://090909.top/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 梁栋烨</rights>
  <subtitle>梁栋烨的博客网站</subtitle>
  <title>他说</title>
  <updated>2026-04-18T16:48:13.294Z</updated>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="博客写作" scheme="http://090909.top/tags/%E5%8D%9A%E5%AE%A2%E5%86%99%E4%BD%9C/"/>
    <category term="生活感悟" scheme="http://090909.top/tags/%E7%94%9F%E6%B4%BB%E6%84%9F%E6%82%9F/"/>
    <category term="静态博客" scheme="http://090909.top/tags/%E9%9D%99%E6%80%81%E5%8D%9A%E5%AE%A2/"/>
    <category term="公众号" scheme="http://090909.top/tags/%E5%85%AC%E4%BC%97%E5%8F%B7/"/>
    <category term="个人选择" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E9%80%89%E6%8B%A9/"/>
    <content>
      <![CDATA[<p>可能是个人选择吧！我在我的网站里发了几条说说，很感慨。我认识一个快退休的老运维程序员，他花了七年时间去运营一个公众号，公众号内容主要是翻译各种 Linux 新闻、复盘各种大厂服务器宕机、追各种技术热点。前几个月我在社交媒体上看到他发动态，吐槽自己运营了七年的微信公众号，居然都没人关注。</p><p>动态底下有很多小粉丝在安慰他：“不哭不哭，你已经是一个快退休的运维了！”。我的泪水在眼里打转，突然有一种说不上来的感觉。七年时间全砸在了微信公众号这种极度私域、除了搜狗以外的搜索引擎都不会抓取的地方。一天更新了几篇文章，算下来七年时间不说小几百篇，几千篇都有了吧！可是我知道，七年时间里，不断地坚持，翻译各种英文内容，事后诸葛亮各种大厂服务器宕机。放在个人网站上，加入各种博客联盟，让搜索引擎索引，开个评论区。已经足够成为 Linux 中国那种社区了吧？</p><p>2019 年，博客远没有死。那时候个人博客圈还很活跃，独立博客、十年之约、博客联盟都还在。WordPress 依然好用，静态博客刚兴起，RSS 也没有被完全遗忘。如果他在2019年选择做一个独立博客：文章能被搜索引擎收录，持续获得长尾流量；可以加入十年之约这样的博客圈，互相友链、评论；读者可以通过RSS订阅，不依赖算法推荐；域名和内容都是自己的，积累的是“数字资产”……而公众号呢？2019年早就过了红利期了。打开率开始下滑，信息流打乱时间线，新号不花钱投流几乎没曝光。一个技术类的公众号，不发朋友圈、不群发、不搞裂变，基本就是自娱自乐。</p><p>2019 年，他站在岔路口。左边是独立博客——路窄，但通向自己的花园；右边是公众号——路宽，但通向别人家的院子。他选了右边，走了七年。七年前，如果他搞了个腾讯云小服务器，说不定现在已经是大博主了吧？反倒是在公众号里写了七年文章，让人听着算不上什么前辈，令人寒暄。为什么是寒暄？不是唏嘘、不是惋惜，那种见面想聊两句、却不知从何说起的尴尬。一个写了七年、上千篇文章的人，在圈子里却叫不上“前辈”，因为没人知道他。七年腾讯云小服务器，一年一百多块，总共不到一千块的成本。</p><p>这笔账算下来，更让人沉默。七年时间加上几千篇文章，再加上无数个深夜，最后的产出居然是一个打不开的公众号，和一群永远找不到他的读者。差额仅仅只是一台一年一百多块的小服务器，他不是输给了能力，是输给了“选容器”的认知。更何况，对于程序员，尤其是有工作的 2019 年的运维来说，100 块去支持自己热爱的事业，不算什么。他不是出不起这个钱，不是没有这个技术，甚至可能随手就能搭一个比大多数人都漂亮的个人站。</p><p>所以，这根本不是“能力问题”，也不是“成本问题”。这就是一个纯粹的、彻底的 “路径依赖”和“认知盲区”。他可能下意识地觉得：“大家都在用公众号，我也用吧！”、“公众号方便啊，发了就能看。”、“个人网站？还要折腾，多麻烦！”。于是他选择了那条看起来最“省事”、最“主流”的路，然后一走就是七年。这就像一个厨神，放着自家宽敞明亮、设备齐全的厨房不用，非要去挤在一个只能做盒饭的小档口里，一干就是七年。最后，没人知道他是个厨神，只知道“哦，那个做盒饭的老头”。</p><p>明明握着一手好牌，却选错了牌桌。7 年的时间，各种深度分析、大厂运维实施……现在公众号又交给 AI 运营，文章又多了很多。甚至视频都是问 AI 一句话，让 AI 解释什么什么，然后对着 AI 出的稿子来念。最起码的 B 站也有几千粉，能够转化到个人博客网站吧！可他没这么做，不是不会，是从来没想过“自己的地盘”这件事。他现在做的这一切——AI写稿、AI念稿、批量发视频——本质上还是在给别人打工：公众号的流量是微信的、B 站的粉丝是 B 站的、视频的播放量是算法的——他忙活了一圈，什么都没留下。</p><p>他用最笨的方式努力了七年，然后用最聪明的方式——AI——继续走在最笨的路上。七年前的平行宇宙，一个买了云服务器、下载了 Ghost 的中年人，用着默认主题，把博客网站扔到了谷歌；七年后的今天，谷歌的索引里，他的域名下有上千篇文章，“Linux故障”、“服务器宕机复盘”、“某某技术翻译”——这些关键词的搜索结果里，他的名字排在前列，全球各地的人，通过搜索找到他，在评论区里讨论、感谢、补充。他的博客，成了某个小众领域里绕不开的节点，他不用运营、不用讨好算法、不用追热点，他只是写，然后等时间给他回报。</p><p>有时候，选择比努力重要得多。而那个正确的选择，往往简单到不可思议——买个服务器，搭个博客，然后写。但是啊，我们也只能猜测了，因为七年前的他，连文章都没有！我这一整晚的感慨——七年时间、上千篇文章、公众号、云服务器、平行宇宙——全都建立在“他写了七年”这个前提上。可如果连这个前提都不存在呢？那我就不是在为一个真实的人惋惜，而是在为一个想象中的、本该存在却从未存在过的“七年” 叹息。</p><p>我替他假设了太多，假设他写了七年、假设他翻译了英文内容、假设他复盘了大厂宕机、假设他有几千 B 站粉。但更绝的是，他不需要我们和他寒暄，他是个运维，而且快退休了。退休金哪怕每个月不去接单都有几千，公众号只是买的 Gemini 没地方花了，整的个人情趣。而个人网站的站长，几乎靠个人网站为生，他还会同步内容到 B 站，只是不主动引流自己的公众号，这点比很多只会埋头苦更新期刊的个人站长要强，我见过太多不知名的小期刊更新在自己的网站上，平时都没人来访问。</p><p>他只是一个快退休的运维，有几千块退休金保底，玩公众号纯粹是因为Gemini的API额度用不完，顺手搞的“个人情趣”。用 AI 写稿、AI 念视频，对他而言不是“加大沉没成本”，而是在玩一个不花钱的电子玩具。而那个被我拿来对比的“个人网站站长”，才是真正在刀尖上跳舞的人：他靠个人网站为生，所以他必须同步 B 站、必须做 SEO、必须想尽一切办法引流——因为他没有几千块的退休金兜底。我以为他在挣扎，其实他只是在消遣；我以为另一个人在走上坡路，其实他只是在求生。</p><p>这世界，有时候比我们想象的更荒诞，也更公平……</p>]]>
    </content>
    <id>http://090909.top/2026/04/19/7-%E5%B9%B4%E6%97%B6%E9%97%B4%E5%92%8C%E4%B8%80%E4%B8%AA%E5%85%AC%E4%BC%97%E5%8F%B7/</id>
    <link href="http://090909.top/2026/04/19/7-%E5%B9%B4%E6%97%B6%E9%97%B4%E5%92%8C%E4%B8%80%E4%B8%AA%E5%85%AC%E4%BC%97%E5%8F%B7/"/>
    <published>2026-04-18T16:46:50.000Z</published>
    <summary>
      <![CDATA[<p>可能是个人选择吧！我在我的网站里发了几条说说，很感慨。我认识一个快退休的老运维程序员，他花了七年时间去运营一个公众号，公众号内容主要是翻译各种 Linux 新闻、复盘各种大厂服务器宕机、追各种技术热点。前几个月我在社交媒体上看到他发动态，吐槽自己运营了七年的微信公众号，居然]]>
    </summary>
    <title>7 年时间和一个公众号</title>
    <updated>2026-04-18T16:48:13.294Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="网站交互" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E4%BA%A4%E4%BA%92/"/>
    <category term="网站美化" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E7%BE%8E%E5%8C%96/"/>
    <category term="网站功能" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E5%8A%9F%E8%83%BD/"/>
    <category term="Hexo" scheme="http://090909.top/tags/Hexo/"/>
    <category term="网站默哀" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E9%BB%98%E5%93%80/"/>
    <content>
      <![CDATA[<p>所谓的默哀功能，其实就是网站元素整个变色：从彩色变成灰白色，再加个提醒说今天是什么日，为什么需要默哀。因为我压根不想提醒，所以用到的东西也不多，只是一段很简单的检测日期变色 JS 代码：</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line">(<span class="keyword">function</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> now = <span class="keyword">new</span> <span class="title class_">Date</span>;</span><br><span class="line">    <span class="keyword">const</span> month = now.<span class="title function_">getMonth</span>() + <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">const</span> day = now.<span class="title function_">getDate</span>();</span><br><span class="line"></span><br><span class="line">    <span class="keyword">const</span> isQingming = month === <span class="number">4</span> &amp;&amp; (day === <span class="number">4</span> || day === <span class="number">5</span>);</span><br><span class="line">    <span class="keyword">const</span> isNationalMemorialDay = month === <span class="number">12</span> &amp;&amp; day === <span class="number">13</span>;</span><br><span class="line">    <span class="keyword">const</span> isWenchuan = month === <span class="number">5</span> &amp;&amp; day === <span class="number">12</span>;</span><br><span class="line">    <span class="keyword">const</span> isMarcoPoloBridge = month === <span class="number">7</span> &amp;&amp; day === <span class="number">7</span>;</span><br><span class="line">    <span class="keyword">const</span> isMukden = month === <span class="number">9</span> &amp;&amp; day === <span class="number">18</span>;</span><br><span class="line">    <span class="keyword">const</span> isMartyrsDay = month === <span class="number">9</span> &amp;&amp; day === <span class="number">30</span>;</span><br><span class="line">    <span class="keyword">const</span> isJapanSurrender = month === <span class="number">8</span> &amp;&amp; day === <span class="number">15</span>;</span><br><span class="line">    <span class="keyword">const</span> isZhouEnlaiDeath = month === <span class="number">1</span> &amp;&amp; day === <span class="number">8</span>;</span><br><span class="line">    <span class="keyword">const</span> isDengXiaopingDeath = month === <span class="number">2</span> &amp;&amp; day === <span class="number">19</span>;</span><br><span class="line">    <span class="keyword">const</span> isMaoDeath = month === <span class="number">9</span> &amp;&amp; day === <span class="number">9</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (isQingming || isNationalMemorialDay || isWenchuan || isMarcoPoloBridge || isMukden || isMartyrsDay || isJapanSurrender || isMaoDeath || isZhouEnlaiDeath || isDengXiaopingDeath) &#123;</span><br><span class="line">        <span class="variable language_">document</span>.<span class="property">documentElement</span>.<span class="property">style</span>.<span class="property">filter</span> = <span class="string">&#x27;grayscale(100%)&#x27;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure><p>这段代码通过检测今天是否是对应日期（清明节、国家公祭日、汶川地震纪念日、七七事变纪念日、九一八事变纪念日、烈士纪念日、日本投降纪念日、毛泽东逝世纪念日、周恩来逝世纪念日、邓小平逝世纪念日）来判断网站是否需要开启默哀模式。为了保证代码能够运行，还需要编辑主题配置文件，导入这个 JS 代码：</p><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">head:</span></span><br><span class="line">    <span class="comment"># - &lt;link rel=&quot;stylesheet&quot; href=&quot;/xxx.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/fonts.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/svg.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/description.css&quot;&gt;</span></span><br><span class="line">  <span class="attr">bottom:</span></span><br><span class="line">    <span class="comment"># - &lt;script src=&quot;xxxx&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/reload.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/stroll.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/blindbox.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/fans.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/mourn.js&quot;&gt;&lt;/script&gt;</span></span><br></pre></td></tr></table></figure><p>现在代码就生效了，剩下的就是等到时候了（其实也没必要特别等）。</p>]]>
    </content>
    <id>http://090909.top/2026/04/18/Butterfly-%E7%BD%91%E7%AB%99%E9%BB%98%E5%93%80%E5%8A%9F%E8%83%BD/</id>
    <link href="http://090909.top/2026/04/18/Butterfly-%E7%BD%91%E7%AB%99%E9%BB%98%E5%93%80%E5%8A%9F%E8%83%BD/"/>
    <published>2026-04-18T14:15:43.000Z</published>
    <summary>
      <![CDATA[<p>所谓的默哀功能，其实就是网站元素整个变色：从彩色变成灰白色，再加个提醒说今天是什么日，为什么需要默哀。因为我压根不想提醒，所以用到的东西也不多，只是一段很简单的检测日期变色 JS 代码：</p>
<figure class="highlight javascript"><t]]>
    </summary>
    <title>Butterfly 网站默哀功能</title>
    <updated>2026-04-18T14:26:27.367Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="网站维护" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E7%BB%B4%E6%8A%A4/"/>
    <category term="Waline" scheme="http://090909.top/tags/Waline/"/>
    <category term="评论系统" scheme="http://090909.top/tags/%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
    <category term="博客迁移" scheme="http://090909.top/tags/%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB/"/>
    <category term="故障排查" scheme="http://090909.top/tags/%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5/"/>
    <content>
      <![CDATA[<p>因为 GitHub 被封了，Vercel 没得用了，迁移评论区到了我家树莓派。还好 Waline 可以导出评论，要不然我的博客网站就要被 Giscus 坑惨了！这就是为什么我推荐大家都用 Waline，最起码数据在自己手里，想迁移就迁移，这就是区别。</p><p>迁移网站到 Cloudflare Pages 一看，妈的老子 Waline 评论区没剩几条了。搞得好像我这个网站是那个坟墓，周围飘荡着评论的幽灵，但是就是没人评论那种。遇到这种情况我先不慌好吧，反正评论都能显示在后台。</p><p>和 DeepSeek 对了一个凌晨的账，终于搞清楚了原因，都怪傻逼 Vercel 的路径问题。是这样子的，Vercel 它把我文章时间弄错了，变成了 10 号的文章，路径是 <code>2026/04/10</code>。但我那个文章是 11 号写的，这就是为什么我在本地浏览感觉没评论，但是 Vercel 看就有评论。因为本地浏览时路径是 <code>2026/04/11</code>，他妈的 Vercel！</p><p>还好我有 Waline 的源 <code>waline.json</code>，明文玩意改个路径重新导入又不难。包括友链页面也没法显示评论，你知道为什么吗？在 Vercel 上，友链页面是 <code>/friends</code>，而 Cloudflare Pages 的比较规范，友链页面是 <code>/friends/</code>。差了一个 <code>/</code> 就无法显示评论了，真他妈乌龙！</p>]]>
    </content>
    <id>http://090909.top/2026/04/18/%E4%BF%AE%E5%A4%8D-Waline-%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA%E8%AF%84%E8%AE%BA/</id>
    <link href="http://090909.top/2026/04/18/%E4%BF%AE%E5%A4%8D-Waline-%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA%E8%AF%84%E8%AE%BA/"/>
    <published>2026-04-18T03:46:57.000Z</published>
    <summary>
      <![CDATA[<p>因为 GitHub 被封了，Vercel 没得用了，迁移评论区到了我家树莓派。还好 Waline 可以导出评论，要不然我的博客网站就要被 Giscus 坑惨了！这就是为什么我推荐大家都用 Waline，最起码数据在自己手里，想迁移就迁移，这就是区别。</p>
<p>迁移网站]]>
    </summary>
    <title>修复 Waline 无法显示评论</title>
    <updated>2026-04-18T03:50:17.992Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="JavaScript" scheme="http://090909.top/tags/JavaScript/"/>
    <category term="技术实践" scheme="http://090909.top/tags/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/"/>
    <category term="网站交互" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E4%BA%A4%E4%BA%92/"/>
    <category term="网站美化" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E7%BE%8E%E5%8C%96/"/>
    <category term="网站功能" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E5%8A%9F%E8%83%BD/"/>
    <content>
      <![CDATA[<p>原版的“关注我”按钮只是个装饰，点击之后只能跳转到特定链接或者执行一个 JS 函数。我观察到，社交平台上都是这样显示的：关注按钮的“关注我”旁边还带一个数字，数字是粉丝数量统计，要这样的效果在前端不难。其实难点还是如何寻找一种和关注等价的东西，GitHub API 可以吗？但那属于跨域资源，而且我 GitHub 账号刚被封。最后我还是选择了博客友链，那和关注没区别。因此，我设计了如下脚本：</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line">(<span class="title function_">async</span> () =&gt; &#123;</span><br><span class="line">    <span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&#x27;/friends&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> html = <span class="keyword">await</span> response.<span class="title function_">text</span>();</span><br><span class="line">    <span class="keyword">const</span> parser = <span class="keyword">new</span> <span class="title class_">DOMParser</span>();</span><br><span class="line">    <span class="keyword">const</span> doc = parser.<span class="title function_">parseFromString</span>(html, <span class="string">&#x27;text/html&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> linkItems = doc.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.flink-list-item a&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> links = <span class="title class_">Array</span>.<span class="title function_">from</span>(linkItems).<span class="title function_">map</span>(<span class="function"><span class="params">item</span> =&gt;</span> item.<span class="property">href</span>).<span class="title function_">filter</span>(<span class="function"><span class="params">href</span> =&gt;</span> href &amp;&amp; href !== <span class="string">&#x27;#&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> linkCount = links.<span class="property">length</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> cardInfoBtn = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">&#x27;card-info-btn&#x27;</span>);</span><br><span class="line">    <span class="keyword">if</span> (cardInfoBtn) &#123;</span><br><span class="line">        <span class="keyword">const</span> spanElement = cardInfoBtn.<span class="title function_">querySelector</span>(<span class="string">&#x27;span&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (spanElement) &#123;</span><br><span class="line">            spanElement.<span class="property">textContent</span> = <span class="string">`关注我 <span class="subst">$&#123;linkCount&#125;</span>`</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure><p>它会在前端统计我的友链数量，并替换关注按钮中的 <code>&lt;span&gt;&lt;/span&gt;</code> 内容为 <code>关注我 ${linkCount}</code>。你可以改成其它的，比如 <code>有 ${linkCount} 人正在关注他</code>。需要注意的是，我的友链页面是 <code>/friends</code>，你需要改成你自己的。我还需要在 Butterfly 的配置文件引入这个 JS 脚本，不然无法在每个页面运行脚本：</p><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">head:</span></span><br><span class="line">    <span class="comment"># - &lt;link rel=&quot;stylesheet&quot; href=&quot;/xxx.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/fonts.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/svg.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/description.css&quot;&gt;</span></span><br><span class="line">  <span class="attr">bottom:</span></span><br><span class="line">    <span class="comment"># - &lt;script src=&quot;xxxx&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/reload.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/stroll.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/blindbox.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/fans.js&quot;&gt;&lt;/script&gt;</span></span><br></pre></td></tr></table></figure><p>现在只需要交换友链，你就被计入关注了。听着好原始站长风哦，呵呵。</p>]]>
    </content>
    <id>http://090909.top/2026/04/18/Butterfly-%E5%85%B3%E6%B3%A8%E7%B2%89%E4%B8%9D%E7%BB%9F%E8%AE%A1/</id>
    <link href="http://090909.top/2026/04/18/Butterfly-%E5%85%B3%E6%B3%A8%E7%B2%89%E4%B8%9D%E7%BB%9F%E8%AE%A1/"/>
    <published>2026-04-18T03:46:46.000Z</published>
    <summary>
      <![CDATA[<p>原版的“关注我”按钮只是个装饰，点击之后只能跳转到特定链接或者执行一个 JS 函数。我观察到，社交平台上都是这样显示的：关注按钮的“关注我”旁边还带一个数字，数字是粉丝数量统计，要这样的效果在前端不难。其实难点还是如何寻找一种和关注等价的东西，GitHub API 可以吗？]]>
    </summary>
    <title>Butterfly 关注粉丝统计</title>
    <updated>2026-04-18T03:51:31.985Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="博客写作" scheme="http://090909.top/tags/%E5%8D%9A%E5%AE%A2%E5%86%99%E4%BD%9C/"/>
    <category term="个人经历" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E7%BB%8F%E5%8E%86/"/>
    <category term="博客迁移" scheme="http://090909.top/tags/%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB/"/>
    <category term="故障排查" scheme="http://090909.top/tags/%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5/"/>
    <category term="静态网站" scheme="http://090909.top/tags/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/"/>
    <content>
      <![CDATA[<p>今天凌晨的时候正在折腾网站美化，添加了一些新字体，精简化了字体子集。当我推送到 GitHub 时，发现我的账号被 Masked 了。中文翻译过来就是封号，我也不知道为什么，可能和我使用了域名邮箱有关系。断了 GitHub 可不行，那是可是程序员的命根子，我网站放在那里的，你让我以后怎么更新个人网站？</p><p>实在不行就迁移网站嘛，大不了 GitHub 不用了。反正我不用梯子的话，GitHub 跟不存在没啥区别，况且我的网站在国内有备份。一个成熟的站长，就应该习惯各种备份方式。如果只是单纯放在 GitHub 上，指不定哪天像现在被外国佬封了可就是真哦吼了。Cloudflare Pages 支持直接文件夹拖拽部署，我只需要在本地编译好这些页面上传到 Cloudflare Pages 就行了，比以前麻烦，上传速度也不算慢。</p><p>但是我发现 Cloudflare Pages 是真的快啊！我现在收回那句话，Cloudflare Pages 比 Vercel 牛逼！当然，也有我写缓存缓存的功劳。至于 GitHub 死一边去吧！微软那德行指不定哪天把这个网站搞成最烂的开源网站。有 Codeberg 玩 Codeberg，没 Codeberg 玩 Gitee 那些的。最终还是各回各家、各找各妈，赶紧去备份代码吧！</p>]]>
    </content>
    <id>http://090909.top/2026/04/18/%E8%AE%B0%E4%B8%80%E6%AC%A1-Hexo-%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB/</id>
    <link href="http://090909.top/2026/04/18/%E8%AE%B0%E4%B8%80%E6%AC%A1-Hexo-%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB/"/>
    <published>2026-04-18T03:46:35.000Z</published>
    <summary>
      <![CDATA[<p>今天凌晨的时候正在折腾网站美化，添加了一些新字体，精简化了字体子集。当我推送到 GitHub 时，发现我的账号被 Masked 了。中文翻译过来就是封号，我也不知道为什么，可能和我使用了域名邮箱有关系。断了 GitHub 可不行，那是可是程序员的命根子，我网站放在那里的，你]]>
    </summary>
    <title>记一次 Hexo 博客迁移</title>
    <updated>2026-04-18T03:50:36.914Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="游戏" scheme="http://090909.top/categories/%E6%B8%B8%E6%88%8F/"/>
    <category term="我的世界" scheme="http://090909.top/tags/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8C/"/>
    <category term="创意玩法" scheme="http://090909.top/tags/%E5%88%9B%E6%84%8F%E7%8E%A9%E6%B3%95/"/>
    <category term="游戏分享" scheme="http://090909.top/tags/%E6%B8%B8%E6%88%8F%E5%88%86%E4%BA%AB/"/>
    <category term="数据包" scheme="http://090909.top/tags/%E6%95%B0%E6%8D%AE%E5%8C%85/"/>
    <category term="创造模式" scheme="http://090909.top/tags/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/"/>
    <content>
      <![CDATA[<p><img src="/assets/images/illustrations/minecraft-13.webp"></p><p>大家好啊，欢迎来到梁栋烨的游戏频道，我是梁栋烨。今天我们来玩一个非常有趣的空岛数据包，这个数据包的特别之处在于它完全改变了游戏的地形生成机制，将原本平坦的主世界变成了一座座悬浮在天空中的大型浮岛。这些浮岛不仅形态各异，而且分布在不同的高度层次，给人一种置身于梦幻世界的感觉。相信很多喜欢探索的玩家都会对这种全新的游戏体验感兴趣，毕竟在 Minecraft 中，探索未知的世界总是能带来无限的乐趣。</p><p><img src="/assets/images/illustrations/minecraft-14.webp"></p><p>进入世界后，第一眼看到的场景确实让我有些失望，感觉就是个非常普通的浮岛地图。我们的出生点位于一座不算太大的岛屿上，岛上有一些基础的资源，远处的天空中也能看到另一座类似的岛屿。这样的景象似乎和我以前在游戏网站上随手下的那些空岛地图没什么区别，甚至可以说有些千篇一律，让人感觉缺乏新意。不过，既然选择了尝试这个数据包，我决定还是继续探索下去，看看是否有什么隐藏的惊喜等待着我。</p><p><img src="/assets/images/illustrations/minecraft-15.webp"></p><p>但当我不经意间转过身朝上面看时，眼前的景象瞬间让我惊呆了。哇哦，原来在云层的上面居然还有更多的空岛！这些岛屿悬浮在更高的天空中，在阳光的照射下显得格外神秘。我简直不敢相信自己的眼睛，连忙揉了揉眼睛再看，确认这不是幻觉。没错，这就是这个数据包最有意思的地方，它不仅仅在地面上生成浮岛，而是在不同的高度层次都创造了独特的岛屿世界。这种设计让整个游戏世界变得更加立体，也大大增加了探索的乐趣，让我对接下来的冒险充满了期待。</p><p><img src="/assets/images/illustrations/minecraft-16.webp"></p><p>为了一探究竟，我从背包里拿出了一个鞘翅，搭配之前存档里存放的烟花火箭，准备飞向更高的天空。随着烟花火箭的助推，我逐渐上升，穿过了厚厚的云层，来到了更高的空域。远处的景象让我叹为观止：一座覆盖着樱花树林的浮岛静静地悬浮在天空中，粉色的樱花花瓣随风飘落，仿佛置身于童话世界。周围的云朵环绕着这座岛屿，阳光透过云层洒在岛上，营造出一种梦幻般的仙境氛围。这种感觉真的太奇妙了，让我不禁想起了那些描绘仙境的童话故事，而我现在就像是故事中的主角，正在探索这个神秘的空中世界。</p><p><img src="/assets/images/illustrations/minecraft-17.webp"></p><p>双脚踩在柔软的草地上，周围是盛开的樱花树，微风拂过，带来阵阵花香。站在这里，我突然有一种奇妙的感觉，仿佛自己变成了小说里那种修炼仙法的仙人。想象一下，在这样一个远离尘世的空中岛屿上，每天与樱花为伴，修炼仙法，该是多么惬意的事情啊！岛上的环境非常宁静，只有偶尔的鸟鸣声打破这份安静，让人感觉心旷神怡。我不禁开始幻想，如果真的能在这样的地方生活，远离城市的喧嚣，那该有多好。这种感觉让我对这个空岛数据包的设计更加赞赏，它不仅仅是一个游戏地图，更是一个能让人放松心情、放飞想象的梦幻世界。</p><p><img src="/assets/images/illustrations/minecraft-18.webp"></p><p>从樱花岛上往下看，我发现樱花岛的下面还有一座独特的石林岛。这座岛屿与樱花岛形成了鲜明的对比，上面没有泥土，整座岛屿都是由各种形状的石头构成的。石头的上面矗立着形态各异的石林，有的像利剑直插云霄，有的像怪兽张牙舞爪，有的像宝塔层层叠叠，非常壮观。岛上还有一些小型水洼，在阳光的照射下，水面闪闪发光，为这座硬朗的石林岛增添了一丝柔和的气息。站在高处俯瞰这座石林岛，我不禁感叹大自然的鬼斧神工，虽然这是游戏生成的世界，但依然让我感受到了一种独特的美感。这样的设计也让我更加期待接下来会发现什么样的岛屿。</p><p><img src="/assets/images/illustrations/minecraft-19.webp"></p><p>告别了樱花岛和石林岛，我又飞到了另一座岛屿。这座岛屿与之前的两座截然不同，这里没有樱花的浪漫，也没有石林的壮观，就是一片非常普通的平原。岛上的草地上有两只大肥羊在悠闲地吃草，它们看起来非常满足，完全没有意识到有陌生人的到来。在岛屿的隔壁，我还看到了一处露天岩浆，岩浆池不断地冒着气泡，散发出炽热的气息。而树木则生长在另一座相邻的小岛上，形成了一种独特的景观布局。看着这些悠闲的肥羊，我突然冒出一个奇怪的想法：如果我把这里的羊吃了，会不会获得特殊的能力，比如像这些岛屿一样飞起来呢？当然，这只是一个玩笑，但也让我对这个充满想象力的世界更加着迷。</p><p><img src="/assets/images/illustrations/minecraft-20.webp"></p><p>不过，空岛世界并非全是美好的景象，也存在着不少危险。我现在所处的地方就是一处位于空岛内部的洞穴，这里光线昏暗，几乎没有任何光源，给人一种压抑的感觉。洞穴里充满了各种奇奇怪怪的怪物，有张牙舞爪的蜘蛛，手持弓箭的骷髅，还有在黑暗中飞来飞去的蝙蝠，它们随时都可能对我发起攻击。我小心翼翼地在洞穴中探索，时刻保持警惕，生怕一不小心就会被这些怪物围攻。这样的场景确实不适合年龄太小的孩子，所以在这里提醒一下各位宝妈，如果假期想带孩子开车来这里旅游，最好选择一些安全的地图，像这种充满怪物的洞穴区域还离家里比较远的，暂时不要让孩子接触为好（手动狗头）。</p><p><img src="/assets/images/illustrations/minecraft-21.webp"></p><p>离开危险的洞穴后，我又来到了另外一座岛屿。这座岛屿上生活着一群非常特别的黑马，它们在岛上自由地奔跑，显得非常有活力。我仔细数了数，一共有四只黑马，它们的体型和毛色都非常相似，应该是一家人。看着这些在天上岛屿上生活的黑马，我突然冒出一个有趣的问题：这群生活在天上的黑马会不会编程呢？当然，这只是一个玩笑话，但也反映了这个空岛世界的神奇之处，连马匹都能在这样的环境中生存。这些黑马看起来非常健康，它们在岛上吃草、奔跑，完全适应了这种空中生活。我不禁想象，如果这些马会飞的话，那它们就真的成为了“天马”，可以在各个空岛之间自由穿梭，那该是多么有趣的景象啊！</p><p><img src="/assets/images/illustrations/minecraft-22.webp"></p><p>在探索过程中，我遇到了一位住在空岛上的原住民，大家都叫他二大爷。我赶紧拿出准备好的话筒（这里要声明一下，这个真的是话筒，不是枪哦），对他进行了一次简短的采访。二大爷告诉我，他们这些原住民其实都是仙人，已经在这些空岛上生活了很长时间了。他们一直住在上界，默默地观察着人类的生活。二大爷还引用了一句古话：“天上一天，地下十年”，意思是他们在空岛上度过的一天，相当于人类在地面上度过的十年。听到这里，我不禁对这些仙人的生活充满了好奇，想象着他们每天在空岛上修炼、生活，远离尘世的纷扰，该是多么逍遥自在的事情啊！二大爷的话也让我对这个空岛世界有了更深的认识，原来这里不仅仅是一个游戏地图，更是一个充满故事和传说的神秘世界。</p><p><img src="/assets/images/illustrations/minecraft-23.webp"></p><p>在采访中，二大爷还向我介绍了空岛上的特殊作物。他说，这里的作物都是用魔豆种植的，这些魔豆可不是普通的豆子，而是具有神奇力量的特殊种子。二大爷告诉我，用魔豆种出来的作物成熟后，功效非常神奇：吃一颗可以长生不老，让人永远保持年轻的状态；吃两颗则可以直接飞升，成为像他一样的空岛原住民，拥有在空岛上生活的能力。听到这里，我简直不敢相信自己的耳朵，没想到这个空岛世界中还有如此神奇的作物。我不禁想象，如果真的能得到这样的魔豆，那该是多么令人向往的事情啊！不过，二大爷也告诉我，这些魔豆非常稀有，不是随便就能得到的，需要经过一番努力和奇遇才能获得。这让我对接下来的探索更加充满了期待，希望能够找到这种神奇的魔豆。</p><p><img src="/assets/images/illustrations/minecraft-24.webp"></p><p>当然，空岛世界能够如此安全，离不开一位重要的人物——门卫铁大爷。铁大爷是空岛上的守护者，他每天都坚守在自己的岗位上，保护着岛上的居民和访客。铁大爷有着硬朗的身体和高度的责任感，无论刮风下雨，他都会尽职尽责地守护着空岛的安全。正是因为有了铁大爷这样的守护者，空岛上的村民才能过上平安祥和的生活，不用担心来自外界的威胁。我看到铁大爷的时候，他正在认真地巡逻，眼神中充满了坚定和专注。他的存在让整个空岛世界更加安全，也让我对这个世界的设计更加赞赏。在这样一个充满奇幻色彩的世界里，既有美丽的风景，又有负责的守护者，真的是一个非常完美的游戏体验。</p><p><img src="/assets/images/illustrations/minecraft-25.webp"></p><p>最后，我想问问屏幕前的朋友们，大家喜欢这种空岛数据包吗？通过这次探索，我发现这个数据包真的非常有意思，它不仅改变了游戏的地形生成，创造了一个立体的空中世界，还加入了许多有趣的元素，比如不同类型的空岛、神秘的原住民、神奇的魔豆等等。这些设计让整个游戏体验变得更加丰富和有趣，也让我对 Minecraft 的创造力有了新的认识。我相信，无论是喜欢探索的玩家，还是喜欢建造的玩家，都能在这个空岛世界中找到属于自己的乐趣。如果你还没有尝试过这种数据包，不妨找个时间下载来体验一下，相信你也会被它的魅力所吸引。</p><p>这时候有朋友问了，原版游戏里不是有一个的浮岛生成选项吗？为什么你要单独加一个数据包呢？你记的没错，以前 Minecraft 确实有浮岛生成选项，但已经被 Mojang 删除了。现在如果你想在游戏中体验浮岛世界，只能通过安装数据包或模组来实现。而且，即使你在游戏里选择末地作为单一群系生成，生成出来的也不过是一个有末影龙、末影人的主世界，根本无法与这个数据包创造的立体空岛世界相媲美。这个数据包的设计更加丰富和精细，不仅有不同高度的空岛，还有各种独特的地形和元素，让整个游戏体验更加有趣。</p><p>好久没有看到这种有意思的数据包了，真不知道为什么大家要把很多原本数据包就可以做到的东西，写成单独的模组，最后还不维护。数据包的优势在于它不需要安装额外的模组加载器，直接放入游戏文件夹就能使用，而且不会影响游戏的运行速度。相比之下，模组虽然功能可能更强大，但需要安装模组加载器，而且有些模组还会与其他模组产生冲突，给玩家带来不必要的麻烦。更重要的是，很多模组作者在发布一段时间后就不再维护，导致模组与新版本的游戏不兼容，玩家只能被迫放弃使用。而数据包则不同，它的更新和维护相对简单，能够更好地适应游戏的版本更新。希望未来能有更多像这样优质的数据包出现，为玩家带来更多有趣的游戏体验。</p>]]>
    </content>
    <id>http://090909.top/2026/04/17/%E5%A5%BD%E7%8E%A9%E7%9A%84%E7%A9%BA%E5%B2%9B%E6%95%B0%E6%8D%AE%E5%8C%85/</id>
    <link href="http://090909.top/2026/04/17/%E5%A5%BD%E7%8E%A9%E7%9A%84%E7%A9%BA%E5%B2%9B%E6%95%B0%E6%8D%AE%E5%8C%85/"/>
    <published>2026-04-17T09:56:07.000Z</published>
    <summary>
      <![CDATA[<p><img src="/assets/images/illustrations/minecraft-13.webp"></p>
<p>大家好啊，欢迎来到梁栋烨的游戏频道，我是梁栋烨。今天我们来玩一个非常有趣的空岛数据包，这个数据包的特别之处在于它完全改变了游戏的地形生成机制，]]>
    </summary>
    <title>好玩的空岛数据包</title>
    <updated>2026-04-17T10:43:41.091Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="纪实" scheme="http://090909.top/categories/%E7%BA%AA%E5%AE%9E/"/>
    <category term="个人经历" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E7%BB%8F%E5%8E%86/"/>
    <category term="个人成长" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E6%88%90%E9%95%BF/"/>
    <category term="生活方式" scheme="http://090909.top/tags/%E7%94%9F%E6%B4%BB%E6%96%B9%E5%BC%8F/"/>
    <category term="社交选择" scheme="http://090909.top/tags/%E7%A4%BE%E4%BA%A4%E9%80%89%E6%8B%A9/"/>
    <category term="青春故事" scheme="http://090909.top/tags/%E9%9D%92%E6%98%A5%E6%95%85%E4%BA%8B/"/>
    <content>
      <![CDATA[<p>记得那是 2023 年的时候，我还在上初一，是第二学期的时候。那天下午天气不怎么样，天空中飘着一点阳光雨，雨滴在阳光的照射下显得格外明亮，打在地上溅起小小的水花，空气里弥漫着湿润的气息，让人感觉既清凉又舒适。</p><p>小学午托班的李老师女士，邀请我还有我爸去露天矿那边，说是他们预定了一处地方。茂名的露天矿那边的道路弯弯曲曲，像是在走农村路，两旁的树木和农田让我的思绪一下子回到了老家金塘镇，想起了小时候在那里玩耍的快乐时光。</p><p>跟着地图导航绕过了几个弯，终于来到了他们预定的地点。这里是一处靠近湖边的房子，周围也有很多同样的房子，人来人往的，显得很热闹，看来是一处专门用于聚会的营业点，环境整洁，周围的湖水波光粼粼，景色十分宜人。</p><p>因为这房子分为两个间，结构比较复杂，怕我们走错路，陈老师（李老师的丈夫）就亲自带我们走了一遍房间，详细介绍了每个房间的功能。进入房间后，我看到有陈国涛、任朝熙、陈冠霖，都是以前小学的熟人，当时我们都就读同一所初中，虽然平时见面不多，但彼此还是很熟悉。</p><p>陈国涛绰号老牛，2010 年出生的，比我小一点，但是小学的时候他参加了跳级考试，成绩优异，在我读一年级的时候他就去读二年级了，所以虽然年龄小，但年级比我高。任朝熙也是小学认识的，和我是同龄人，同年级的朋友，以前我们的关系不错，经常一起玩耍。陈冠霖是陈国涛的哥哥，比我们大几岁，当时正在读高中，看起来成熟了很多。</p><p>为什么他们会在一起呢？是这样的，老牛和任朝熙是亲戚，所以他们经常一起活动。为什么我会认识他们呢？小学的时候，我的父母因为工作繁忙，没时间接送我上下学，就把我送到了附近的学优午托，因为任朝熙和老牛也在那里，所以我就和他们认识了，并且逐渐熟悉起来。</p><p>学优现在已经改名为学而优了，它们的营业模式是这样的：同时运营学前班业务、午托业务和晚托业务，这里平时主要是学前班的孩子们在活动，中午的时候那些学前班的孩子都睡觉了，就轮到我们这些午托的学生使用场地，下午那些学前班的孩子被家长领回家后，这里就变成了晚托的场所，基本上是全天候运营的。</p><p>到了那里之后，我简单地和他们打了个招呼，就坐在角落自顾自地玩游戏了。其实主要是因为我们不是同一圈层的人，他们是喜欢社交、经常外出活动的现充，而我是个平时只能呆在家里的宅男。他们玩的是《和平精英》，我因为没带手机，就用我爸的手机玩云游戏《崩坏：星穹铁道》，沉浸在自己的世界里。</p><p>我觉得这其实是个人选择的问题，他们平时经常出去和朋友聚会，打游戏对他们来说就是社交的一部分，而《和平精英》玩的人多，所以他们就选择玩这款游戏。我因为在家闲的没事干，有更多的时间和精力去沉浸游戏剧情、忍受二次元游戏的文青病，所以我就选择玩《崩坏：星穹铁道》，享受其中的故事和玩法。</p><p>当时《崩坏：星穹铁道》还是刚开服的时候，游戏策划还能整活，推出各种有趣的活动和玩法，所以游戏的氛围是轻松快乐阳光的，游戏里处处是梗，让人玩起来很开心。因为这是我最喜欢的回合制游戏，我选了希儿这个角色，她有个特殊机制就是杀死敌人后获得额外回合，所以我经常能连续攻击，感觉“我的回合还是我的回合”，非常畅快。</p><p>现在我已经不玩二次元游戏了，自从开始折腾 Linux 系统过后，我发现这些游戏并不支持 Linux，而且下载起来也很麻烦（米家全家桶的游戏大小是 150 GB 起步）。我觉得研究系统、解决各种技术问题比在游戏社区里吵架有意思多了，所以就不再关注这些二次元游戏了，就连我之前通关了 5 次的《女神异闻录 5 皇家版》（P5R）都不玩了。</p><p>这里应该是一处农家乐，饭菜都是典型的农村饭菜，有鱿鱼、虾之类的海鲜，还有一些时令蔬菜，味道很地道，让人吃得很满足。我记得还有可乐和雪碧，应该是李老师他们特意带来的，喝着味道不错，很解渴。值得一提的是，这餐桌上没有酒，因为我爸那个酒鬼最近身体不太好，医生不让他喝酒了，所以大家都很贴心地没有准备酒。</p><p>吃完饭后我还是坐回原来的位置继续打游戏，他们也在那里玩《和平精英》。有个小孩（陈国涛的亲戚）好奇地过来问我，我玩的是什么游戏，我告诉他是《崩坏：星穹铁道》。这也很正常，毕竟以前小学在午托的时候，我经常和他们聊《我的世界》（Minecraft），而这个小孩也仅限玩过《我的世界》，对其他游戏了解不多。</p><p>天色逐渐暗了下来，我觉得一直玩游戏没啥意思，就起身四处走走，看看周围的环境。我很喜欢水库附近这种天气，有一种雾蒙蒙的感觉，空气中弥漫着湿润的水汽，远处的山峦若隐若现，让整个场景显得格外梦幻。我很期待这种雾蒙蒙的感觉能带来一些有趣的不可意料性，让平凡的一天变得更加精彩。</p><p>坐在外面的走廊上看风景，突然天空下起了雨。因为屋外这个走廊是没有雨棚的，我只能靠着旁边的树叶挡雨，虽然效果不大，但总比直接被雨淋好。当时的我心里想的就是无聊，觉得屋里的环境太吵闹了，大家都在打游戏、聊天，所以我宁愿在外面看风景，感受雨水的清凉，也不想呆在那喧闹的环境里。</p><p>雨逐渐大了起来，我只能转移到屋外另外一处有雨棚的地方坐着看风景。我看到隔壁那一房里全是女的，都是年轻的成年女性，她们围坐在桌子旁，一边吃饭一边笑嘻嘻的，有说有笑，氛围非常融洽。我猜她们应该都是大学生，大学宿舍的闺蜜团一起出来聚会，这样的场景在周末的农家乐里并不奇怪。</p><p>再晚些时候，雨停了，天空逐渐放晴。任朝熙从屋子里出来找我了，我当时正在屋外看风景，他应该是受李老师或者他妈妈的嘱托来叫我回去。我和他聊了一点家常，问了问彼此最近的学习和生活情况，然后他就又回到屋子里继续玩游戏了，而我则继续在外面享受雨后的清新空气。</p><p>过了一会儿，我也回到了屋子里，不是因为别的，而是因为水库附近的蚊子太多了，飞来飞去的，我可不想被叮得满身包，那样会痒得难受。回到屋内后，我依旧没事干，就继续坐在角落打游戏，沉浸在《崩坏：星穹铁道》的世界里，打发时间。</p><p>我看到，刚刚那个问我游戏的小孩，正和他的母亲在屋外用音响唱歌。小孩站在前面，认真地唱着《孤勇者》，声音虽然稚嫩，但充满了感情。那段时间《孤勇者》确实比较热门，对于当时还是疫情后时期的人们来说，确实需要一首能振奋人心、传递力量的歌，让大家重新燃起对生活的希望。</p><p>我回去得比他们早，因为第二天还要上学，所以爸爸开着电瓶车载着我回家。一路上爸爸都在和我讲他知道的各种道理，从学习到生活，从为人处世到未来规划，我也在认真听着，不时点头回应。虽然现在已经忘了具体讲了什么，但当时那种父慈子孝的氛围让我很温暖。</p><p>露天矿这地方，我已经来过很多次了，所以也就熟了。路边的店铺大多已经关门了，只有少数几家还亮着灯，没关门的店铺里偶尔能看到一两个顾客在光顾。道路两旁的路灯照亮了回家的路，让夜晚的露天矿显得既安静又温馨。</p><p>我们从爸爸以前居住的老小区经过，那里充满了爸爸年轻时候的回忆，然后回到了来时的马路另一侧。天空中突然下起了雨，雨越下越大，幸好我们带了雨衣，不然肯定会被淋成落汤鸡。雨点击打在电瓶车的玻璃罩上，发出噼里啪啦的声音，渐渐地，我分不清玻璃罩上是雨水，还是我的泪水，只觉得心里五味杂陈，有对过去的怀念，也有对未来的期待。</p>]]>
    </content>
    <id>http://090909.top/2026/04/17/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%92%8C%E7%86%9F%E4%BA%BA%E5%A4%96%E5%87%BA/</id>
    <link href="http://090909.top/2026/04/17/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%92%8C%E7%86%9F%E4%BA%BA%E5%A4%96%E5%87%BA/"/>
    <published>2026-04-17T04:06:37.000Z</published>
    <summary>
      <![CDATA[<p>记得那是 2023 年的时候，我还在上初一，是第二学期的时候。那天下午天气不怎么样，天空中飘着一点阳光雨，雨滴在阳光的照射下显得格外明亮，打在地上溅起小小的水花，空气里弥漫着湿润的气息，让人感觉既清凉又舒适。</p>
<p>小学午托班的李老师女士，邀请我还有我爸去露天矿那边]]>
    </summary>
    <title>记一次和熟人外出</title>
    <updated>2026-04-17T09:02:05.086Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="纪实" scheme="http://090909.top/categories/%E7%BA%AA%E5%AE%9E/"/>
    <category term="AI 助手" scheme="http://090909.top/tags/AI-%E5%8A%A9%E6%89%8B/"/>
    <category term="命令行工具" scheme="http://090909.top/tags/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7/"/>
    <category term="效率工具" scheme="http://090909.top/tags/%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7/"/>
    <category term="个人经历" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E7%BB%8F%E5%8E%86/"/>
    <category term="开发工具" scheme="http://090909.top/tags/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    <content>
      <![CDATA[<p>更早的 AI 编辑器我确实没用过，我的 AI 编辑器之旅始于 2023 年。那一年，OpenAI 的 ChatGPT 以惊人的能力火遍全球，几乎成为了全民讨论的焦点，也正式开启了我对大语言模型的探索之旅。从那时起，我开始关注并尝试使用各种集成了大语言模型的代码编辑器，希望能借助 AI 的力量提升编程效率。</p><p>在 ChatGPT 走红后不久，一些厂商便开始推出 AI 代码补全服务，功能相对单一，主要就是代码补全。使用时，当你编写代码，编辑器会自动弹出浅色的斜体代码建议，按下 Tab 键就能快速补全。我至今还记得，当时微软的 Copilot 因为涉及代码归属权问题，在国外引发了不小的争议，很多开发者对其合法性提出了质疑。</p><p>随着技术发展，AI 编辑器的能力逐渐升级，开始支持通过自然语言描述让大语言模型生成完整代码。不过那时的 AI 还只能编写代码，无法自主调用工具。生成的代码质量也只能说是勉强能运行，离真正的生产级代码还有差距。我当时并没有尝试 Cursor 等更高级的工具，只是在 VS Code 上安装了阿里的通义灵码插件，体验了一把 AI 辅助编程的乐趣。</p><p>再后来，我接触到了 Aider，这是一个用 Python 开发的命令行工具，它的功能比之前的插件更加强大。你可以通过自然语言描述需求，AI 会将其转换为代码，甚至还能执行一些基础命令。现在回想起来，它的使用方式很接近现在的 Claude Code，但在智能程度上却差了不少，很多时候生成的代码需要手动调整才能正常运行。</p><p>时间来到 2025 年，DeepSeek 大模型横空出世，我立刻购买了它的 API 密钥，因为我发现将 DeepSeek 接入 Aider 后，编程体验有了显著提升。当时我在 Arch Linux 系统上进行配置，过程并不顺利，尤其是 UV 的环境变量设置让我头疼不已，安装 Aider 前还需要安装一大堆依赖库，花费了不少时间和精力才最终配置成功。</p><p>除了使用 DeepSeek API，我还尝试在本地部署 Ollama 并接入 Aider。之所以这么做，是因为我当时的游戏本搭载了 RTX 4060 显卡，拥有足够的显存，可以流畅运行 8b 参数的大语言模型，比如 Qwen3。我原本计划利用这个本地部署的 AI 来翻译 IT FOSS 的技术文章，可惜由于各种原因，这个计划最终没能坚持下去，只翻译了几篇文章就放弃了。</p><p>就在使用 AI 编辑器的同时，我也开始尝试写博客。最初选择了 CSDN 这个平台，因为它在国内开发者中知名度很高。由于我还是未成年人，所以没有使用过博客园。但时间久了，我觉得 CSDN 的各种广告和推荐机制很烦人，于是干脆在 Gitee 上新建了一个仓库，把 README 文件当作博客文章来写。现在回想起来，当时其实已经有了搭建个人博客网站的想法，只是因为技术能力有限，不知道从何入手。</p><p>再后来，我接触到了 Trae 这款编辑器，它是基于 VS Code 开源部分开发的闭源商业产品。最让我惊喜的是，它和 VS Code 一样在右侧设置了 AI 聊天窗口，让我可以随时与 AI 交流编程问题。整体布局延续了 VS Code 的风格，只是在此基础上添加了一些实用的插件和功能。第一次使用时，我就被它的设计和功能深深吸引，感觉找到了一款真正适合自己的 AI 编辑器。</p><p>随着 Trae 的不断更新，它又推出了 SOLO 模式，这是一个非常创新的功能，主打“一句话生成一个应用程序”的理念。用户可以在 Trae 中随时切换到这个模式，通过简单的自然语言描述就能生成完整的应用。不过我发现免费版的 SOLO 模式稳定性不高，经常会生成出错的代码，所以我只在获得测试资格的那段时间里用它尝试写了一些 Flutter 应用，体验了一下这种快速开发的感觉。</p><p>几乎在同一时期，我又发现了一款名为 iFlow CLI 的 AI 命令行工具。遗憾的是，这款工具现在已经不存在了，它被合并到了 Qoder 项目中。iFlow CLI 的使用方式与现在的 Claude Code CLI 非常相似，最强大的地方在于它的 AI 已经能够自主调用各种工具，就像是一个可以用自然语言控制的 Shell，让命令行操作变得更加直观和智能。</p><p>我对 iFlow 的喜爱之情溢于言表，它不仅内置了许多免费的大语言模型供用户选择，还支持用户自行接入其他大语言模型，灵活性非常高。我猜测阿里可能是将 iFlow 作为 Qoder 的实验项目，通过用户反馈不断改进，待功能成熟后再将其核心特性整合到 Qoder CLI 中，这也解释了为什么 iFlow 最终会被合并。</p><p>最终，我又回到了 Trae 的怀抱。并不是因为其他编辑器不好，而是因为 iFlow CLI 的消失让我感觉失去了一个得力助手，而 Trae 作为我使用时间最长的编辑器，就像一位老朋友一样熟悉可靠。再加上我已经习惯了 Trae 的操作界面和功能，用起来更加顺手，所以选择继续使用它作为我的主力 AI 编辑器。</p><p>对于 Qoder CLI，我个人并不是很感兴趣，光是名字就觉得不如 iFlow 好听，而且它还需要用户购买 Coding 套餐才能使用全部功能，不像 iFlow 那样完全免费。至于 OpenCode，我只是跟风下载了一下，实际上根本没怎么使用过，从界面和功能上看，感觉它可能会像早期的 Aider 那样比较粗糙，缺乏打磨。</p>]]>
    </content>
    <id>http://090909.top/2026/04/16/%E6%88%91%E7%9A%84-AI-%E7%BC%96%E8%BE%91%E5%99%A8%E8%BF%81%E7%A7%BB%E5%8F%B2/</id>
    <link href="http://090909.top/2026/04/16/%E6%88%91%E7%9A%84-AI-%E7%BC%96%E8%BE%91%E5%99%A8%E8%BF%81%E7%A7%BB%E5%8F%B2/"/>
    <published>2026-04-16T12:35:25.000Z</published>
    <summary>
      <![CDATA[<p>更早的 AI 编辑器我确实没用过，我的 AI 编辑器之旅始于 2023 年。那一年，OpenAI 的 ChatGPT 以惊人的能力火遍全球，几乎成为了全民讨论的焦点，也正式开启了我对大语言模型的探索之旅。从那时起，我开始关注并尝试使用各种集成了大语言模型的代码编辑器，希望能]]>
    </summary>
    <title>我的 AI 编辑器迁移史</title>
    <updated>2026-04-16T13:57:00.115Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="纪实" scheme="http://090909.top/categories/%E7%BA%AA%E5%AE%9E/"/>
    <category term="工具评测" scheme="http://090909.top/tags/%E5%B7%A5%E5%85%B7%E8%AF%84%E6%B5%8B/"/>
    <category term="个人经历" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E7%BB%8F%E5%8E%86/"/>
    <category term="生活随笔" scheme="http://090909.top/tags/%E7%94%9F%E6%B4%BB%E9%9A%8F%E7%AC%94/"/>
    <category term="生活感悟" scheme="http://090909.top/tags/%E7%94%9F%E6%B4%BB%E6%84%9F%E6%82%9F/"/>
    <category term="个人成长" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E6%88%90%E9%95%BF/"/>
    <content>
      <![CDATA[<p>上个月 20 号左右，我在某鱼平台申请了一次平台回收。这是我第一次尝试这种回收方式，心里既期待又有些忐忑。这次我卖了两台电脑，一台联想的 RTX 4060 游戏本，一台二手 MacBook。这两台电脑都陪伴了我很长一段时间，虽然有些不舍，但为了换新电脑，还是决定把它们卖掉。</p><p>联想的游戏本陪我折腾了一年多的 Linux，换过很多次 Linux 系统，从 Ubuntu 到 Arch Linux，再到 Fedora，几乎把主流的发行版都试了个遍。从 2024 年的年底买回来直到上个月卖出，购入价是 7999。这台电脑见证了我学习 Linux 的整个过程，虽然配置不错，但散热和续航一直是它的短板。</p><p>MacBook 是去年购买的二手笔记本，出产是 2020 年的，当时在抖音商城贪便宜买的，购入价是 1999。当时觉得捡到了便宜，现在想想真是贪小便宜吃大亏。这台电脑虽然还能用，但电池健康度已经很低了，键盘也有几个键不太灵敏，用起来总是提心吊胆，生怕哪天突然罢工。</p><p>早上是 MacBook Air 的回收，下午是游戏本的回收，快递员是同一个人，都是顺丰那边的，我看着打包装的。整个回收过程比我想象中要顺利一些，快递员态度还算不错，只是打包的时候显得有些匆忙。看着两台电脑被装进箱子里，心里还是有些复杂的情绪，毕竟它们陪伴了我这么久。</p><p>不需要我自己准备盒子，快递员那里有。快递员打包东西很脏，东西掉地上了捡起来继续打包，那是市场的猪肉店门前，留着带着猪血的水。我当时看着心里一阵恶心，但又不好意思说什么。快递员似乎已经习惯了这种环境，完全不在意电脑掉在脏兮兮的地板上，只是随手捡起来继续打包。</p><p>从这开始我才知道我买的 MacBook Air 爱回收 1999 是什么货色，于是我心理对二手购买有了一种本质的抵触。这次回收经历让我深刻意识到，二手市场的混乱和不可预测性。那些所谓的”好货”，往往都是别人淘汰下来的问题产品，而我却因为贪便宜而成了接盘侠。</p><p>我是计划回收的钱拿来买新的 MacBook Air，不是 2026 年的最新，而是 2025 年的官网官翻机，但至少不是二手的，价格是 5899。官翻机虽然不是全新的，但至少经过官方检测和翻新，质量有保障，还有一年的保修。对我来说，这比那些来路不明的二手产品要可靠得多。</p><p>它的芯片是 M4 处理器，有一个高清原彩屏幕，内存是 16 GB，磁盘是 256 GB 标配。外壳黑色，从不同视角看有一种淡淡的蓝光。这个配置对我来说已经足够了，日常办公、学习、轻度游戏都没问题。原彩屏幕对眼睛很友好，长时间使用也不会感到疲劳，这是我非常看重的一点。</p><p>为什么不是更便宜的 Neo，因为我认为苹果的 MacBook Neo 性能很垃圾，体验过旧款标配版的我，真的很难接受塑料外壳和无键盘背光。Neo 虽然价格便宜，但那个塑料手感真的太廉价了，而且没有键盘背光，晚上使用很不方便。对我来说，电脑是每天都要用的工具，舒适度和体验比价格更重要。</p><p>MacBook Air 才卖出 1200，而游戏本才卖出 3500。其实游戏本的价格我是有心理预期的，平台原定的价格是 1600 和 4200，拿 AI 概率计算得出可能是 3500，但没想到真是 3500。回收价格比我想象的要低很多，尤其是 MacBook，几乎就是白菜价。不过考虑到它的使用年限和状况，这个价格也算合理吧。</p><p>不出意外的，这些钱是不够的。收了这些钱后，还因为钱超过了 3000，我的支付宝被封了收钱功能，只能找客服申诉，申诉后又收钱，又被封了收钱。这个过程真的很折腾，反复申诉了好几次，每次都说没问题，结果收完钱又封了。支付宝的风控系统真的很让人无语，明明是正常的回收交易，却被当成可疑交易。</p><p>有时真的很想吐槽，一个公司内部居然信息那么闭塞。客服那边明明已经确认了交易没问题，风控那边却还在封我的账号。这种内部信息不共享的问题，给用户造成了很大的困扰。希望他们能够改进一下系统，让不同部门之间的信息能够互通，不要再让用户来回折腾了。</p><p>我想加上我过年省吃俭用的压岁钱合在一块，顶多就是 5200 而已，顶多 M3 吧！可是我真的受够了白色外壳，我喜欢深色外壳。白色虽然经典，但用久了容易发黄，而且不耐脏。深色外壳看起来更专业，也更符合我的审美。虽然预算有限，但我还是想要一台自己喜欢的电脑，而不是勉强接受一台不满意的。</p><p>妈妈看着我这个样子，跟我说爸爸给了 1000 生活费，本来是伙食，但是愿意给我凑钱买电脑。我凑够这些钱，上官网买了一台新的电脑。听到妈妈的话，我心里真的很感动。父母总是这样，宁愿自己省吃俭用，也要支持孩子的需求。我暗暗下定决心，一定要好好利用这台新电脑，不辜负他们的期望。</p><p>第一次体验到不通过平台网购，而是通过官网。官网会让你写电话号码和电子邮箱，还会给你邮件发电子收据，下单通过邮政发货，而不是什么顺丰、圆通。整个购买流程比我想象中要正式得多，感觉更有保障。电子收据保存起来也很方便，以后如果有问题可以直接凭收据联系客服。</p><p>我讨厌二手，讨厌平台。这次经历让我彻底认清了二手市场和第三方平台的真面目。二手产品虽然便宜，但质量和售后都没有保障，出了问题只能自己承担。第三方平台虽然方便，但各种坑和套路让人防不胜防。以后买东西，我宁愿多花点钱，也要选择官方渠道，至少图个安心。</p>]]>
    </content>
    <id>http://090909.top/2026/04/16/%E8%AE%B0%E6%9F%90%E9%B1%BC%E5%B9%B3%E5%8F%B0%E5%9B%9E%E6%94%B6%E7%94%B5%E8%84%91/</id>
    <link href="http://090909.top/2026/04/16/%E8%AE%B0%E6%9F%90%E9%B1%BC%E5%B9%B3%E5%8F%B0%E5%9B%9E%E6%94%B6%E7%94%B5%E8%84%91/"/>
    <published>2026-04-16T06:17:06.000Z</published>
    <summary>
      <![CDATA[<p>上个月 20 号左右，我在某鱼平台申请了一次平台回收。这是我第一次尝试这种回收方式，心里既期待又有些忐忑。这次我卖了两台电脑，一台联想的 RTX 4060 游戏本，一台二手 MacBook。这两台电脑都陪伴了我很长一段时间，虽然有些不舍，但为了换新电脑，还是决定把它们卖掉。]]>
    </summary>
    <title>记某鱼平台回收电脑</title>
    <updated>2026-04-16T13:56:18.686Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="游戏" scheme="http://090909.top/categories/%E6%B8%B8%E6%88%8F/"/>
    <category term="Minecraft" scheme="http://090909.top/tags/Minecraft/"/>
    <category term="我的世界" scheme="http://090909.top/tags/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8C/"/>
    <category term="创造模式" scheme="http://090909.top/tags/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/"/>
    <category term="游戏技巧" scheme="http://090909.top/tags/%E6%B8%B8%E6%88%8F%E6%8A%80%E5%B7%A7/"/>
    <category term="快捷栏" scheme="http://090909.top/tags/%E5%BF%AB%E6%8D%B7%E6%A0%8F/"/>
    <content>
      <![CDATA[<p><img src="/assets/images/illustrations/minecraft-4.webp"></p><p>在我的世界 Java 版游戏中，当我们在创造模式下打开背包界面时，细心的玩家会发现在背包顶部有一个标着“保存的快捷栏”的区域。这个功能对于很多刚接触游戏的萌新来说可能显得有些神秘，甚至让不少老玩家在初次看到时也感到莫名其妙，以至于在后续的游戏过程中，很多人都会下意识地选择忽略这个区域，导致这个其实非常实用的功能在游戏中逐渐变成了一个鲜为人知的冷门特性。事实上，“保存的快捷栏”是游戏开发者为了方便玩家快速切换和管理常用物品而设计的，它能够大大提高玩家在创造模式下的建造和实验效率，只是因为缺乏足够的了解，才被很多玩家所忽视。</p><p><img src="/assets/images/illustrations/minecraft-5.webp"></p><p>保存的快捷栏，从字面上理解，就是对玩家当前快捷栏中所有物品状态的一个完整快照。这里的快捷栏指的是我们在游戏过程中，屏幕底部那九个可以直接通过数字键 1-9 快速访问的物品格子。当玩家第一次进入“保存的快捷栏”页面时，会看到一排排空白的纸状图标，当鼠标悬浮在这些图标上时，游戏会弹出提示，告知玩家可以通过按下特定的快捷键来保存当前的快捷栏配置。由于此时玩家还没有进行过任何保存操作，所以整个区域看起来是空的，只有这些等待被填充的空白格子，仿佛在期待着玩家去探索和使用这个功能。</p><p><img src="/assets/images/illustrations/minecraft-6.webp"></p><p>从图片中可以清晰地看到，此时我的快捷栏第一位上放置了一把闪亮的钻石斧，这是游戏中一种非常实用的工具。在创造模式下，玩家可以通过按下组合键“C + 数字键”来保存当前的快捷栏配置，其中数字键对应的就是保存的行数。例如，当我按下“C + 5”时，当前快捷栏的所有物品状态，包括那把钻石斧，就会被完整地保存到“保存的快捷栏”的第五行中。这个操作非常简单直观，只需要记住对应的快捷键，就能在几秒钟内完成整个快捷栏的保存，为后续的物品管理和切换节省大量时间。</p><p><img src="/assets/images/illustrations/minecraft-7.webp"></p><p>正如图片所示，钻石斧已经被成功保存在了“保存的快捷栏”的第五行的第一位，这是因为这个功能保存的是整个快捷栏的完整状态，而不仅仅是单个物品。也就是说，无论快捷栏中有多少种不同的物品，它们的位置、数量和状态都会被精确地记录下来。当玩家保存快捷栏时，系统会创建一个完整的快照，包括每个格子中的物品类型、数量、耐久度，甚至是物品的特殊属性和附魔效果，确保玩家在需要时能够完全恢复到保存时的状态。这种完整的保存机制使得“保存的快捷栏”成为了一个非常可靠的物品管理工具。</p><p><img src="/assets/images/illustrations/minecraft-8.webp"></p><p>保存到快捷栏中的物品使用起来非常方便，玩家可以像在创造模式背包中那样，通过单击鼠标左键直接将物品拿出来使用，而且与创造模式背包类似，拿取物品时数量不会减少，这意味着玩家可以无限次地从保存的快捷栏中获取相同的物品配置。这种设计非常适合那些需要反复使用相同工具或材料的场景，比如大规模建造、红石实验或者调试游戏机制时。玩家只需要保存一次常用的物品组合，之后就可以随时快速获取，大大提高了游戏效率，避免了重复寻找和放置物品的繁琐过程。</p><p><img src="/assets/images/illustrations/minecraft-9.webp"></p><p>为了测试“保存的快捷栏”的跨存档功能，我进行了一个简单的实验：首先，我删除了之前使用的超平坦世界存档，然后创建了一个全新的海洋群系存档。这个过程模拟了玩家在不同世界之间切换的常见场景，很多玩家可能会担心在切换世界后，之前保存的物品配置会丢失。然而，正如实验所展示的，“保存的快捷栏”的设计考虑到了这一点，它的存储机制是独立于具体存档的，这意味着无论玩家在哪个世界中保存的快捷栏配置，都可以在其他世界中继续使用，为玩家提供了极大的便利性。</p><p><img src="/assets/images/illustrations/minecraft-10.webp"></p><p>当我进入新建的海洋群系存档后，打开背包查看“保存的快捷栏”，发现之前保存的物品配置已经完整地转移到了新的世界中。这是因为“保存的快捷栏”的存储位置是在游戏的全局设置中，而不是绑定到特定的存档文件上。这种跨存档的特性使得玩家可以在不同的世界之间无缝切换，而不必担心重新配置快捷栏的问题。无论是在生存模式的主世界，还是在创造模式的测试世界，甚至是在不同版本的存档之间，保存的快捷栏配置都会保持一致，为玩家提供了一种统一的物品管理方式。</p><p><img src="/assets/images/illustrations/minecraft-11.webp"></p><p>除了保存物品的基本信息外，“保存的快捷栏”还具有保存物品 NBT 数据的能力。NBT 数据是 Minecraft 中用于存储物品特殊属性的一种数据格式，包括附魔效果、自定义名称、物品状态等。例如，当我在快捷栏中放置了一把预先上好弦的烟花弩后，通过按下“C + 2”将其保存到第二行，之后无论何时，只要按下“X + 2”，就可以从保存的快捷栏中拿出一把完全相同的、已经上好弦的烟花弩。这种能够保存物品状态的特性，使得“保存的快捷栏”在处理复杂物品时更加实用，比如保存带有特定附魔的工具、装有药水的炼药锅，或者是已经设置好的命令方块等。</p><p><img src="/assets/images/illustrations/minecraft-12.webp"></p><p>“保存的快捷栏”不仅可以保存物品，还可以用来清空已有的保存配置。当玩家的快捷栏为空时，按下“C + 数字键”组合键，就可以清空对应行数的保存快捷栏。这相当于用一个空的快捷栏状态覆盖了之前保存的配置，就好像是用“空气”替换了原来的物品。这个功能在玩家需要重新组织保存的快捷栏时非常有用，比如当某个保存的配置不再需要，或者想要替换为新的物品组合时，只需要清空对应行，然后重新保存新的配置即可。这种灵活的管理方式，使得“保存的快捷栏”能够更好地适应玩家不断变化的游戏需求。</p>]]>
    </content>
    <id>http://090909.top/2026/04/16/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8C%E4%BF%9D%E5%AD%98%E7%9A%84%E5%BF%AB%E6%8D%B7%E6%A0%8F/</id>
    <link href="http://090909.top/2026/04/16/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8C%E4%BF%9D%E5%AD%98%E7%9A%84%E5%BF%AB%E6%8D%B7%E6%A0%8F/"/>
    <published>2026-04-16T03:50:38.000Z</published>
    <summary>
      <![CDATA[<p><img src="/assets/images/illustrations/minecraft-4.webp"></p>
<p>在我的世界 Java 版游戏中，当我们在创造模式下打开背包界面时，细心的玩家会发现在背包顶部有一个标着“保存的快捷栏”的区域。这个功能对于很多刚]]>
    </summary>
    <title>我的世界保存的快捷栏</title>
    <updated>2026-04-17T02:52:46.739Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="生活感悟" scheme="http://090909.top/tags/%E7%94%9F%E6%B4%BB%E6%84%9F%E6%82%9F/"/>
    <category term="个人成长" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E6%88%90%E9%95%BF/"/>
    <category term="生活方式" scheme="http://090909.top/tags/%E7%94%9F%E6%B4%BB%E6%96%B9%E5%BC%8F/"/>
    <category term="社交选择" scheme="http://090909.top/tags/%E7%A4%BE%E4%BA%A4%E9%80%89%E6%8B%A9/"/>
    <category term="自我反思" scheme="http://090909.top/tags/%E8%87%AA%E6%88%91%E5%8F%8D%E6%80%9D/"/>
    <content>
      <![CDATA[<p>经过了万次“要不要”的思索之后，我克服了自己的犹豫，选择退出了那些无聊的 QQ 群。这些群多是我上学时候，或者折腾东西无聊时候加的兴趣群，什么 SpeedyNote、Arch、Gentoo、假面骑士之类的。我觉得我真的做对了，人就应该去主动寻找适合自己的生活方式，我就不应该去搞什么无所谓的社交。这些占用我的个人时间，整得好像我是那啥成功人士一样。每天和那么多人聊天还被无视，简直就是费神又费力！</p><p>SpeedyNote 是以前自己上技校、想搞开源项目那时候加进去的，群主是一个北美读书的人，退出原因是群里很无聊。以前给这个项目贡献过一点鸡毛蒜皮，而且我本身也不是电容屏用户，什么电容屏笔记确实和我没关系，加进去都算是热心人士添倒忙了。群名就是反馈交流群，因为这个就是群主自己写了一个软件，所以就很多使用了这个软件的用户进群，本来喜欢藏实力还有点自卑的我，听到这一声声的大佬确实受不了。</p><p>Arch 群是 Shorin 那个，和他们在一起聊天真的很累。本来就是小众系统，玩这个系统大部分应该都是自己一个人研究的。我记得有的还写博客，但是至少加群聊是很少的。这种玩亚文化还喜欢加群里的，没想到整个 Arch 都能拎出来 1800 人，真是太可怕了。他们到讨论什么反正很莫名其妙的话题，应该都是在校生，不然不可能话题都那么压抑。退群原因同上，来这里的大部分都是 Shorin 的粉丝，受不了中心。</p><p>Gentoo 群是那个老 Gentoo 群，六百来人。以前在 Linux 吧或者各大论坛里看到的人基本都在这里面，Gentoo 玩的人本来就少，和隔壁 Shorin 群简直就是两个极端。一个是极端年轻（Arch 群），一个是季度年老（Gentoo 群）。来看 Gentoo 群的群友头像就知道，几乎都是老一辈：这个是 QQ 早期头像，那个是阿狸头像，这个是流氓兔斯基头像……不是吧哥们？他们简直都可以来当我的信息课老师了！</p><p>我之前就是和群里老一辈意见不合，老子最烦的就是这种所谓的老一辈。拿着自己的生活阅历套别人头上，还没生病就开始给别人当医生了！</p><p>还有这些特摄群，都是以前看假面骑士的时候加的。看来还是老子太宅了，看个特摄居然还有群？难道看特摄，不就是找大大为爱发电搞的资源，点进去看。要是找到字幕组联系方式，再捐赠一笔钱……等钱多起来了再买平台会员支持正版，有时买个变身器玩具套自己身上假装大英雄吗？老子面对现充真的口哑了，看来我这种靠看特摄、二次元厕纸度日子的，还是少加一点群吧！不是不让你现充，我退群了是尊重你的行为。</p><p>想起来以前上学的时候，最开心的时候就是生病请假。重点不是生病，而是请假，这样我就不需要和那些同学辩解那些乱七八糟的东西了。我最讨厌的就是处理人际关系，所以比起使用微信和 QQ，我更喜欢电子邮箱和博客网站。我在这里发个作品、动态，对我自己有好处那是记录我自己的人生，对别人有好处就是丰富别人阅历和日常生活。别人偶尔来看博客网站就相当于是串门，好朋友来串门，何乐而不为呢？哈哈哈哈！</p>]]>
    </content>
    <id>http://090909.top/2026/04/16/%E7%8B%AC%E8%87%AA%E4%B8%80%E4%BA%BA%E7%9A%84%E6%97%B6%E5%80%99/</id>
    <link href="http://090909.top/2026/04/16/%E7%8B%AC%E8%87%AA%E4%B8%80%E4%BA%BA%E7%9A%84%E6%97%B6%E5%80%99/"/>
    <published>2026-04-15T18:11:36.000Z</published>
    <summary>
      <![CDATA[<p>经过了万次“要不要”的思索之后，我克服了自己的犹豫，选择退出了那些无聊的 QQ 群。这些群多是我上学时候，或者折腾东西无聊时候加的兴趣群，什么 SpeedyNote、Arch、Gentoo、假面骑士之类的。我觉得我真的做对了，人就应该去主动寻找适合自己的生活方式，我就不应该]]>
    </summary>
    <title>独自一人的时候</title>
    <updated>2026-04-15T18:44:48.171Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="网站功能" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E5%8A%9F%E8%83%BD/"/>
    <category term="Waline" scheme="http://090909.top/tags/Waline/"/>
    <category term="评论系统" scheme="http://090909.top/tags/%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
    <category term="Giscus" scheme="http://090909.top/tags/Giscus/"/>
    <category term="博客工具" scheme="http://090909.top/tags/%E5%8D%9A%E5%AE%A2%E5%B7%A5%E5%85%B7/"/>
    <content>
      <![CDATA[<p>我用的第一个评论系统是 Giscus，那时候我用来建站的工具是 Jekyll，主题是 Chirpy。这让我想起来 2025 年年底的那段时间，当时我是一个专门写技术文章的博主，文章的内容无非就是分享一些 Linux 的小技巧，以及自托管为什么好，还有介绍 RIME 如何安装之类的，听着就很土，大部分博主都写过的题材。</p><h2 id="回顾往事"><a href="#回顾往事" class="headerlink" title="回顾往事"></a>回顾往事</h2><p>我是这样子完成创作流程的——写完一篇文章后，把它上传到博客网站（不如说是代码仓库），打开那台二手 Mac 的录屏功能，对着这个网站页面口吃地读稿。没啥适配剪辑，纯粹就是读稿，你能想象吗？这是 2025 年的创作方式，怕不是 2015 年吧！</p><p>由此我就正式开始了我的博客建站之旅，为什么不是博客写作之旅？因为那时候开始我就反复建站，你可以去问一下王科文，他总是在问我网站为什么挂了，因为当时我在建站……好端端的网站为什么要重新建站，答，因为我当时是把建站当玩具玩的，这就是折腾期。从此我开始了不断地换建站引擎，因为不同博客主题支持的评论系统不同，我就体验过那么多评论系统。</p><h2 id="评论系统"><a href="#评论系统" class="headerlink" title="评论系统"></a>评论系统</h2><h3 id="Giscus"><a href="#Giscus" class="headerlink" title="Giscus"></a>Giscus</h3><p><img src="/assets/images/illustrations/comments-1.webp"></p><p>首先是 Giscus，我对这玩意的印象就是简单。他使用 GitHub Discussions 存储评论，这样就有几个好处，你不需要准备服务器，不需要准备数据库，不需要研究什么评论邮件通知，你只需要去 Giscus 的官网，按照那个中文文档，搞搞这、搞搞那，你就配置好博客网站的评论区了。像是回复、表情包、点赞什么的都支持……对当时小小的老子来说，建站搞评论区简直易如反掌。</p><p>说了那么多好处了，坏处呢？你无法迁移你的评论，如果你使用基于数据库的评论系统，没准还可以迁移评论，你觉得这个服务商太傻，你还可以换到别的云服务商。而 Giscus，评论就在那里，你无法从 GitHub Discussions 下载数据，然后上传到新的仓库……除非你一开始就为评论专门定了一个仓库，但是我相信大多数人直接绑定到网站仓库了。不仅如此，你给别人回复评论，在这个文章评论过的其它人都会收到，容易造成误会。</p><h4 id="不恰当的例子"><a href="#不恰当的例子" class="headerlink" title="不恰当的例子"></a>不恰当的例子</h4><p>这个例子可能不太合理，但是它充分说明了问题。那天一堆人来你的博客网站换友链，一百多个吧！你真的仔细审查了对方的网站，上了 100 个友链。有的因为建站才几天，你选择不加；有的建站五年，你加了。于是你有的回复“加了！”，有的回复“抱歉！”。那么在这里换友链的所有人都会收到 100 个邮件，里面是给其它人的无头内容，只有正文。你不知道你是加了还是没被加的那个，这就是为什么我讨厌 Giscus。除非你主动取消订阅，但是那样的话你就无法收到回复了。</p><p>我就是那个受害者，我只是因为给一个博主留言添加友链。一个月过去我都快忘了这个博主了，结果有一天他突然“诈尸”，活过来了，给所有人都回复了，我看到那个“加了！”是非常高兴啊！但是我看到其它几个邮件，诶，怎么还有那么多，我点那个页面，哦豁，博主回复给我的是“你内容太少了，不加了！”，难绷。</p><p><img src="/assets/images/illustrations/comments-2.webp"></p><p>我经常去王科文的留言板串门，所以留言很合理对吧？别人来这留言，我也能收到。每次评论一来，我的邮箱就叮一下响起来。我以为我的网站有人来看了，点开一看，是王科文的留言板来了新客人，热情瞬间被扑灭了，我还以为有人来看呢！如果我取消订阅呢？下次去王科文那里串门就没法收到回复了啊！所以，你说扯不扯？</p><h3 id="Utterances"><a href="#Utterances" class="headerlink" title="Utterances"></a>Utterances</h3><p><img src="/assets/images/illustrations/comments-3.webp"></p><p>Utterances 是一个基于 GitHub Issues 的评论系统，和 Giscus 是同一帮人做的，所以相似度高。这个要比 Giscus 早，而且因为后端是 Issues 只能线性评论，不能在线回复别人的评论。感觉 BUG 比 Giscus 要多，有时候容易加载不出评论……好久没用了，忘了有啥 BUG 了。反正只适合只有文章的网站，不适合那种需要留言板的网站。这俩都有个共同点就是访客不友好，因为需要登录 GitHub 账号才能评论。</p><h3 id="Gitalk"><a href="#Gitalk" class="headerlink" title="Gitalk"></a>Gitalk</h3><p><img src="/assets/images/illustrations/comments-4.webp"></p><p>Gitalk，这个真是太屎了。你去 Gitalk 的官网看看，是不是没有评论，还说加载失败？可是当你开启梯子呢？哈哈，这就有评论了。没错，不开梯子根本没评论。如果你是现在开始建站的，可以离这玩意远一些了，因为它的诞生时间比 Utterances 和 Giscus 还要早，现在基本没人用了。</p><h3 id="Waline"><a href="#Waline" class="headerlink" title="Waline"></a>Waline</h3><p><img src="/assets/images/illustrations/comments-5.webp"></p><p>接下来轮到重头戏了，Valine 家族（Valine、Twikoo、Waline）是给我印象最好的，真的可以称得上是静态网站最应该使用的评论系统了。不仅用起来正常，还能做到和网站外观适配。虽然配置起来有点复杂，没 Giscus 那么开箱即用，不过折腾了那么久用着没啥问题，反而是件好事。支持匿名评论，也可以填写邮箱再评论，那会使用你的 GitHub 头像。</p><p><img src="/assets/images/illustrations/comments-6.webp"></p><p>配置好邮件提醒后，访客回复和你回复访客都能收到消息提醒，这是 1 对 1 的。别的访客如果不订阅的话，根本不会听到，当然也没人那么闲想去订阅。可以自己部署，但不一定需要服务器，只需要云数据库和无服务器函数，比如 Neon 和 Vercel。如果是用云数据库，评论区存储在云服务商的数据库。这是你主动开的实例，将来觉得这个数据库服务商不好了，还能把数据导出来，换到新的服务商，太棒了。</p><h2 id="总得来看"><a href="#总得来看" class="headerlink" title="总得来看"></a>总得来看</h2><p><img src="/assets/images/illustrations/comments-7.webp"></p><p>Waline 默认支持一些表情包，不是 EMOJI 那种，是真正的流行于社交媒体平台那种贴片表情包，我真是受够 EMOJI 那个黄豆脸了！综合来看，如果求简单，就用 Giscus；如果想要完整、正常的，有后台的评论区系统，就去折腾 Twikoo、Waline。剩下的反而没什么必要去折腾了，除非你是外国人，折腾 Facebook Comments 和 Disquz 那种。</p>]]>
    </content>
    <id>http://090909.top/2026/04/15/%E4%BB%80%E4%B9%88%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/</id>
    <link href="http://090909.top/2026/04/15/%E4%BB%80%E4%B9%88%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
    <published>2026-04-15T14:16:19.000Z</published>
    <summary>
      <![CDATA[<p>我用的第一个评论系统是 Giscus，那时候我用来建站的工具是 Jekyll，主题是 Chirpy。这让我想起来 2025 年年底的那段时间，当时我是一个专门写技术文章的博主，文章的内容无非就是分享一些 Linux 的小技巧，以及自托管为什么好，还有介绍 RIME 如何安装]]>
    </summary>
    <title>什么是最好的评论系统</title>
    <updated>2026-04-15T17:55:46.700Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="Butterfly 主题" scheme="http://090909.top/tags/Butterfly-%E4%B8%BB%E9%A2%98/"/>
    <category term="网站优化" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E4%BC%98%E5%8C%96/"/>
    <category term="用户体验" scheme="http://090909.top/tags/%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C/"/>
    <category term="网站布局" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E5%B8%83%E5%B1%80/"/>
    <category term="功能改进" scheme="http://090909.top/tags/%E5%8A%9F%E8%83%BD%E6%94%B9%E8%BF%9B/"/>
    <content>
      <![CDATA[<p>从建站到现在，算下来已经十多天了，我决定优化一下现有的网站。首先，我对导航菜单进行了调整。原本的“文章”菜单项改为了“归档”，这样的命名更加准确，也更符合博客的常规用法，让访客能够更直观地理解这个页面的功能（主要原因还是原本 Menu 为文章，访客点进来却显示归档，十分不统一，但是无法修改，只能从 Menu 入手了）。</p><p>其次，我优化了首页的布局样式（还是更加喜欢这种）。将 <code>index_layout</code> 从原来的 3 改为了 4，采用了新的卡片展示方式，让文章列表的呈现更加美观和现代化，提升了整体的视觉效果和用户体验。在内容展示方面，我将分页设置进行了调整。将每页显示的文章数量从 10 篇增加到了 15 篇，这样访客在浏览时可以一次性看到更多的内容，减少了翻页的频率（重点还是为了适配旁边那个长度），提升了浏览效率。</p><p>最后，也是最实用的改进，我为所有的说说条目添加了标签分类功能。之前发布的一百多条说说现在都有了对应的标签，包括“生活”、“美食”、“技术”、“娱乐”等多个分类。这样一来，访客可以更方便地通过标签筛选和查找感兴趣的说说内容，也让整个说说板块的内容组织更加清晰有序。这次优化虽然改动不大，但每一处都是<del>从用户体验的角度出发</del>，希望能让访客在浏览网站时有更好的体验。</p><p>补：还是从 4 改回了 3，每页改回了 10 篇，因为动态里说了。</p>]]>
    </content>
    <id>http://090909.top/2026/04/15/%E4%BC%98%E5%8C%96%E4%BA%86%E4%B8%80%E4%B8%8B%E7%BD%91%E7%AB%99%E6%A0%B7%E5%BC%8F/</id>
    <link href="http://090909.top/2026/04/15/%E4%BC%98%E5%8C%96%E4%BA%86%E4%B8%80%E4%B8%8B%E7%BD%91%E7%AB%99%E6%A0%B7%E5%BC%8F/"/>
    <published>2026-04-14T18:45:08.000Z</published>
    <summary>
      <![CDATA[<p>从建站到现在，算下来已经十多天了，我决定优化一下现有的网站。首先，我对导航菜单进行了调整。原本的“文章”菜单项改为了“归档”，这样的命名更加准确，也更符合博客的常规用法，让访客能够更直观地理解这个页面的功能（主要原因还是原本 Menu 为文章，访客点进来却显示归档，十分不统]]>
    </summary>
    <title>优化了一下网站样式</title>
    <updated>2026-04-15T17:55:46.700Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="网站功能" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E5%8A%9F%E8%83%BD/"/>
    <category term="Waline" scheme="http://090909.top/tags/Waline/"/>
    <category term="评论系统" scheme="http://090909.top/tags/%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
    <category term="邮箱配置" scheme="http://090909.top/tags/%E9%82%AE%E7%AE%B1%E9%85%8D%E7%BD%AE/"/>
    <category term="SMTP" scheme="http://090909.top/tags/SMTP/"/>
    <content>
      <![CDATA[<p>Waline 官网对于这部分的介绍过于复杂，折腾的时候总是漏了配置几个变量。最近发现秋葵笔记的评论系统从 Giscus 换到了 Waline，貌似是看到了我写给别人的回复。突然想起来，自己好像没在网站上，写过关于 Waline 配置邮箱提醒的文章。如果你已经搭建好了 Waline 并且已经给博客网站用上了，你还需要配置这几个环境变量（一个也不能少）：</p><ul><li><code>AUTHOR_EMAIL</code>：作者邮箱地址，用来接收读者评论通知。</li><li><code>SITE_URL</code>：网站 URL，用来生成评论通知中的链接。</li><li><code>SMTP_USER</code>：SMTP 用户名，填用来发提醒的那个邮箱，用来发送邮件。</li><li><code>SMTP_PASS</code>：SMTP 密码，不是邮箱密码，是邮箱授权码，用来发送邮件。</li><li><code>SMTP_HOST</code>：SMTP 主机地址，比如腾讯的 <code>smtp.qq.com</code>，用来发送邮件。</li><li><code>SMTP_PORT</code>：SMTP 端口号，比如腾讯的 <code>465</code>，用来发送邮件。</li><li><code>SITE_NAME</code>：网站名称，用来在评论通知中显示。</li></ul><p><code>SMTP_USER</code> 和 <code>AUTHOR_EMAIL</code> 可以是同一个；如果你不想泄露真实邮箱的话，可以给 <code>SMTP_USER</code> 配置一个域名邮箱。我是在 Vercel 上配置的环境变量，如果你是使用自己的服务器用 Docker 版部署的话，<code>docker-compose.yml</code> 里的环境变量不要写上引号，比如 <code>SMTP_USER: &quot;no-reply@example.com&quot;</code> 是错误的，要写成 <code>SMTP_USER: no-reply@example.com</code>。</p>]]>
    </content>
    <id>http://090909.top/2026/04/13/Waline-%E9%85%8D%E7%BD%AE%E9%82%AE%E7%AE%B1%E6%8F%90%E9%86%92/</id>
    <link href="http://090909.top/2026/04/13/Waline-%E9%85%8D%E7%BD%AE%E9%82%AE%E7%AE%B1%E6%8F%90%E9%86%92/"/>
    <published>2026-04-13T09:14:23.000Z</published>
    <summary>
      <![CDATA[<p>Waline 官网对于这部分的介绍过于复杂，折腾的时候总是漏了配置几个变量。最近发现秋葵笔记的评论系统从 Giscus 换到了 Waline，貌似是看到了我写给别人的回复。突然想起来，自己好像没在网站上，写过关于 Waline 配置邮箱提醒的文章。如果你已经搭建好了 Wal]]>
    </summary>
    <title>Waline 配置邮箱提醒</title>
    <updated>2026-04-15T17:55:46.699Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="梦" scheme="http://090909.top/categories/%E6%A2%A6/"/>
    <category term="梦境记录" scheme="http://090909.top/tags/%E6%A2%A6%E5%A2%83%E8%AE%B0%E5%BD%95/"/>
    <category term="QQ 空间" scheme="http://090909.top/tags/QQ-%E7%A9%BA%E9%97%B4/"/>
    <category term="暴太郎咚兄弟" scheme="http://090909.top/tags/%E6%9A%B4%E5%A4%AA%E9%83%8E%E5%92%9A%E5%85%84%E5%BC%9F/"/>
    <category term="个人经历" scheme="http://090909.top/tags/%E4%B8%AA%E4%BA%BA%E7%BB%8F%E5%8E%86/"/>
    <category term="奇幻故事" scheme="http://090909.top/tags/%E5%A5%87%E5%B9%BB%E6%95%85%E4%BA%8B/"/>
    <content>
      <![CDATA[<h2 id="QQ-空间发文章"><a href="#QQ-空间发文章" class="headerlink" title="QQ 空间发文章"></a>QQ 空间发文章</h2><p>最近又做了一个梦，梦中我是一个 QQ 空间，空间中有一个叫咚兄弟的人，我和咚兄弟在空间中聊天，聊天中我问咚兄弟：“你是一个人吗？”咚兄弟回答：“我是一个人。”……神经病啊，我是梦到我重建了很久的博客网站，一直找不到很好的建站引擎，而且写的播客也没人看。</p><p>那天我听完一节课后，把数学笔记放在了 QQ 空间里，没想到看的人数指数级暴涨，一度来到了千指数级，好多人都访问过了我的 QQ 空间。我直接兴奋到想，要不要搭建一个 Notion 站把 QQ 空间的内容同步过去，以后就干脆在 QQ 空间写作了。</p><p>不定时打开 QQ 空间，总会收到很多陌生人发来的谢谢博主。我仅仅只是分享一个数学笔记而已，不至于帮助那么大吧？在梦里我把这件事告诉给了我爸，他理解并支持我。然而，一切的梦因仅仅只是我在睡前想了一下，能不能拿 QQ 空间来建站……我服了我自己</p><h2 id="变身暴太郎咚兄弟"><a href="#变身暴太郎咚兄弟" class="headerlink" title="变身暴太郎咚兄弟"></a>变身暴太郎咚兄弟</h2><p>在梦里我和一群人成为了《暴太郎咚兄弟》，我成为了红，而这些怪人居然在我的小区蛮横。当然，既然红色不是桃井太郎，那么其它颜色自然也不是本人。比如粉色不是原来的鸡哥，变成了一个有点小丑的女孩子，黄色也不是鬼妹，而是一个身材曼妙的女孩子。</p><p>本来我并不是咚兄弟，我只是期末考试快到了，父亲拉着我去运动。奇怪的是我住的楼里，每一层变成了不同的生态环境，有的变成了沙漠，有的变成了雨林，有的还变成了操场……关键是大小也变了，还能在每一层都看到天空。如果不是在梦里，这真的很奇怪！</p><p>走完那么多层后，我和父亲来到了学校。我也不知道我要干什么，因为现在才黑夜，所以父亲又拉着我回去了。回到小区后我才和那么多人汇合，变成了超级战队，故事就是从这里开始的。我居然变成了超级战队，还是红色那一位，这可是队长啊！</p><p>我记得我们战斗的时候有组合技，我可以和不同的队员释放组合技。我只记得和女队员战斗的组合技，其他组合技我记不清了。和粉色的组合技就是产生一朵花，然后花碎裂。和黄色队员的组合技的时候，黄色队员的舞姿太华丽了，我跟不上节奏，最后只能释放勇气斩了。我记得原作是大家给桃井太郎当随从、敲鼓，桃井太郎从升起来的台上一跃而下，释放桃太郎斩完成终结技。</p>]]>
    </content>
    <id>http://090909.top/2026/04/13/QQ-%E7%A9%BA%E9%97%B4%E5%92%8C%E5%92%9A%E5%85%84%E5%BC%9F/</id>
    <link href="http://090909.top/2026/04/13/QQ-%E7%A9%BA%E9%97%B4%E5%92%8C%E5%92%9A%E5%85%84%E5%BC%9F/"/>
    <published>2026-04-13T02:18:25.000Z</published>
    <summary>
      <![CDATA[<h2 id="QQ-空间发文章"><a href="#QQ-空间发文章" class="headerlink" title="QQ 空间发文章"></a>QQ 空间发文章</h2><p>最近又做了一个梦，梦中我是一个 QQ 空间，空间中有一个叫咚兄弟的人，我和咚兄弟在空间中聊天]]>
    </summary>
    <title>QQ 空间和咚兄弟</title>
    <updated>2026-04-15T17:55:46.699Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="JavaScript" scheme="http://090909.top/tags/JavaScript/"/>
    <category term="网站功能" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E5%8A%9F%E8%83%BD/"/>
    <category term="Butterfly 主题" scheme="http://090909.top/tags/Butterfly-%E4%B8%BB%E9%A2%98/"/>
    <category term="随机跳转" scheme="http://090909.top/tags/%E9%9A%8F%E6%9C%BA%E8%B7%B3%E8%BD%AC/"/>
    <category term="用户体验" scheme="http://090909.top/tags/%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C/"/>
    <content>
      <![CDATA[<p>既然提到了 AnZhiYu 主题，那就不得不说一下随机跳转文章的作用。访客第一次来到我们的博客网站，不知道该从哪一篇文章开始看，这时候随机跳转能够很大程度上缓解访客的焦虑。Butterfly 包括大部分主题并没有内置原生的随机跳转功能，所以需要使用 JS 进行功能实现，流程如下：</p><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden>    graph LR;    A[爬取归档页面] --&gt; B[提取文章链接] --&gt; C[放入候选列表] --&gt; D[随机链接跳转];  </pre></div><p>由于之前已经写过了一个随机跳转友链的 JS 脚本，可以复用一下：</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">go</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&#x27;/friends&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> html = <span class="keyword">await</span> response.<span class="title function_">text</span>();</span><br><span class="line">    <span class="keyword">const</span> parser = <span class="keyword">new</span> <span class="title class_">DOMParser</span>();</span><br><span class="line">    <span class="keyword">const</span> doc = parser.<span class="title function_">parseFromString</span>(html, <span class="string">&#x27;text/html&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> linkItems = doc.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.flink-list-item a&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> links = <span class="title class_">Array</span>.<span class="title function_">from</span>(linkItems).<span class="title function_">map</span>(<span class="function"><span class="params">a</span> =&gt;</span> a.<span class="property">href</span>).<span class="title function_">filter</span>(<span class="function"><span class="params">href</span> =&gt;</span> href &amp;&amp; href !== <span class="string">&#x27;#&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (links.<span class="property">length</span> === <span class="number">0</span>) <span class="keyword">return</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> randomIndex = <span class="title class_">Math</span>.<span class="title function_">floor</span>(<span class="title class_">Math</span>.<span class="title function_">random</span>() * links.<span class="property">length</span>);</span><br><span class="line">    <span class="keyword">const</span> randomLink = links[randomIndex];</span><br><span class="line">    </span><br><span class="line">    <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = randomLink;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>将其中的位置从友链改成归档，再将 <code>.flink-list-item a</code> 改成 <code>.article-sort-item-title</code>。稍微修改一下函数名字，就得到了如下脚本（它会爬取归档页面、提取文章的链接、放入候选列表、随机选择一个链接跳转到该文章）：</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">randomizer</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&#x27;/archives&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> html = <span class="keyword">await</span> response.<span class="title function_">text</span>();</span><br><span class="line">    <span class="keyword">const</span> parser = <span class="keyword">new</span> <span class="title class_">DOMParser</span>();</span><br><span class="line">    <span class="keyword">const</span> doc = parser.<span class="title function_">parseFromString</span>(html, <span class="string">&#x27;text/html&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> linkItems = doc.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.article-sort-item-title&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> links = <span class="title class_">Array</span>.<span class="title function_">from</span>(linkItems).<span class="title function_">map</span>(<span class="function"><span class="params">a</span> =&gt;</span> a.<span class="property">href</span>).<span class="title function_">filter</span>(<span class="function"><span class="params">href</span> =&gt;</span> href &amp;&amp; href !== <span class="string">&#x27;#&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (links.<span class="property">length</span> === <span class="number">0</span>) <span class="keyword">return</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> randomIndex = <span class="title class_">Math</span>.<span class="title function_">floor</span>(<span class="title class_">Math</span>.<span class="title function_">random</span>() * links.<span class="property">length</span>);</span><br><span class="line">    <span class="keyword">const</span> randomLink = links[randomIndex];</span><br><span class="line">    </span><br><span class="line">    <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = randomLink;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>在主题配置中应用这个脚本：</p><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">head:</span></span><br><span class="line">    <span class="comment"># - &lt;link rel=&quot;stylesheet&quot; href=&quot;/xxx.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/fonts.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/svg.css&quot;&gt;</span></span><br><span class="line">  <span class="attr">bottom:</span></span><br><span class="line">    <span class="comment"># - &lt;script src=&quot;xxxx&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/reload.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/travellings.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/randomizer.js&quot;&gt;&lt;/script&gt;</span></span><br></pre></td></tr></table></figure><p>现在就可以在网站控制台运行 <code>randomizer</code> 函数了，在任何页面下都可以触发文章随机跳转。但如果仅仅只是这样，那还是不够的。因此还需要让它被展示出来，比如作为一个链接。我习惯放到页脚：</p><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">nav:</span></span><br><span class="line">  <span class="attr">owner:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">since:</span> <span class="number">2026</span></span><br><span class="line">  <span class="comment"># Copyright of theme and framework</span></span><br><span class="line">  <span class="attr">copyright:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">version:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">custom_text:</span> <span class="string">|</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;/sitemap.xml&quot;&gt;网站地图&lt;/a&gt;&lt;/span&gt;</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;/atom.xml&quot;&gt;订阅&lt;/a&gt;&lt;/span&gt;</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;javascript:go()&quot;&gt;闲逛&lt;/a&gt;&lt;/span&gt;</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;javascript:randomizer()&quot;&gt;盲盒&lt;/a&gt;&lt;/span&gt;</span></span><br></pre></td></tr></table></figure><p>不同的主题对于归档页面的链接类不一，你需要根据情况修改，我的代码仅针对 Butterfly 主题。</p>]]>
    </content>
    <id>http://090909.top/2026/04/12/Butterfly-%E9%9A%8F%E6%9C%BA%E6%96%87%E7%AB%A0%E8%B7%B3%E8%BD%AC/</id>
    <link href="http://090909.top/2026/04/12/Butterfly-%E9%9A%8F%E6%9C%BA%E6%96%87%E7%AB%A0%E8%B7%B3%E8%BD%AC/"/>
    <published>2026-04-12T12:08:22.000Z</published>
    <summary>
      <![CDATA[<p>既然提到了 AnZhiYu 主题，那就不得不说一下随机跳转文章的作用。访客第一次来到我们的博客网站，不知道该从哪一篇文章开始看，这时候随机跳转能够很大程度上缓解访客的焦虑。Butterfly 包括大部分主题并没有内置原生的随机跳转功能，所以需要使用 JS 进行功能实现，流程]]>
    </summary>
    <title>Butterfly 随机文章跳转</title>
    <updated>2026-04-15T17:55:46.698Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="JavaScript" scheme="http://090909.top/tags/JavaScript/"/>
    <category term="网站交互" scheme="http://090909.top/tags/%E7%BD%91%E7%AB%99%E4%BA%A4%E4%BA%92/"/>
    <category term="Butterfly 主题" scheme="http://090909.top/tags/Butterfly-%E4%B8%BB%E9%A2%98/"/>
    <category term="友链功能" scheme="http://090909.top/tags/%E5%8F%8B%E9%93%BE%E5%8A%9F%E8%83%BD/"/>
    <category term="随机跳转" scheme="http://090909.top/tags/%E9%9A%8F%E6%9C%BA%E8%B7%B3%E8%BD%AC/"/>
    <content>
      <![CDATA[<p>这个网站原定计划是使用 AnZhiYu 主题来搭建的，但当时想到 AnZhiYu 需要配置那么多奇怪的地方，一上午时间全花在配置上，还是干脆使用 Butterfly 稍微美化一下好了。安知鱼的主题有一个随机跳转友链的功能，但是这个功能在 Butterfly 主题中没有。其实这个功能我还挺想要，因为现在的友链比以往任何时候要多。</p><p>随机跳转的本质就是抓取链接组成列表，在列表里面进行随机抽取最后跳转到抽中的链接。听起来貌似不难，但是如何获取友链才是一个大问题：比如 <code>source/_data/link.yml</code> 这个文件，你无法在构建完成的网站上找到。</p><p>所以我选择了在前端抓取友链页面，提取 <code>a.href</code> 的结果汇聚成列表：</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">go</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&#x27;/friends&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> html = <span class="keyword">await</span> response.<span class="title function_">text</span>();</span><br><span class="line">    <span class="keyword">const</span> parser = <span class="keyword">new</span> <span class="title class_">DOMParser</span>();</span><br><span class="line">    <span class="keyword">const</span> doc = parser.<span class="title function_">parseFromString</span>(html, <span class="string">&#x27;text/html&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> linkItems = doc.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.flink-list-item a&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> links = <span class="title class_">Array</span>.<span class="title function_">from</span>(linkItems).<span class="title function_">map</span>(<span class="function"><span class="params">a</span> =&gt;</span> a.<span class="property">href</span>).<span class="title function_">filter</span>(<span class="function"><span class="params">href</span> =&gt;</span> href &amp;&amp; href !== <span class="string">&#x27;#&#x27;</span>);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (links.<span class="property">length</span> === <span class="number">0</span>) <span class="keyword">return</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">const</span> randomIndex = <span class="title class_">Math</span>.<span class="title function_">floor</span>(<span class="title class_">Math</span>.<span class="title function_">random</span>() * links.<span class="property">length</span>);</span><br><span class="line">    <span class="keyword">const</span> randomLink = links[randomIndex];</span><br><span class="line">    </span><br><span class="line">    <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = randomLink;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如这个脚本所做的那样，它定义了一个名叫 <code>go</code> 的函数。当我执行这个函数时，它会从网站的 <code>/friends</code> 页面抓取友链，随机抽取并跳转到抽中的链接中。我需要让每一个页面都调用这个脚本，才能让浏览器知道有这个函数。我需要修改主题的配置文件，让每个页面都引用它：</p><figure class="highlight yml"><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"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">head:</span></span><br><span class="line">    <span class="comment"># - &lt;link rel=&quot;stylesheet&quot; href=&quot;/xxx.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/fonts.css&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/assets/css/svg.css&quot;&gt;</span></span><br><span class="line">  <span class="attr">bottom:</span></span><br><span class="line">    <span class="comment"># - &lt;script src=&quot;xxxx&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/reload.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/assets/js/travellings.js&quot;&gt;&lt;/script&gt;</span></span><br></pre></td></tr></table></figure><p>现在我就可以在浏览器控制台运行 <code>go()</code> 来随机跳转友链了，可是我一开始需要的是在页面上点击它来随机跳转，有点背道而驰。所以我选择添加到了页脚作为一个菜单，既不会改变我导航栏的布局，又可以给访客们一个惊喜：</p><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">nav:</span></span><br><span class="line">  <span class="attr">owner:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">since:</span> <span class="number">2026</span></span><br><span class="line">  <span class="comment"># Copyright of theme and framework</span></span><br><span class="line">  <span class="attr">copyright:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">version:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">custom_text:</span> <span class="string">|</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;/sitemap.xml&quot;&gt;网站地图&lt;/a&gt;&lt;/span&gt;</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;/atom.xml&quot;&gt;订阅&lt;/a&gt;&lt;/span&gt;</span></span><br><span class="line"><span class="string">    &lt;span&gt;&lt;a href=&quot;javascript:go()&quot;&gt;闲逛&lt;/a&gt;&lt;/span&gt;</span></span><br></pre></td></tr></table></figure><p>其实我一开始是想做成开往按钮的，但这样的话就会和真开往按钮放一起搞混。万一我一个半月以后真加入开往了呢？所以我就想，不如做成彩蛋，毕竟本来只是一个小功能。访客爱点不点，不如就当作是一个玩笑吧！</p>]]>
    </content>
    <id>http://090909.top/2026/04/12/Butterfly-%E5%8F%8B%E9%93%BE%E9%9A%8F%E6%9C%BA%E8%B7%B3%E8%BD%AC/</id>
    <link href="http://090909.top/2026/04/12/Butterfly-%E5%8F%8B%E9%93%BE%E9%9A%8F%E6%9C%BA%E8%B7%B3%E8%BD%AC/"/>
    <published>2026-04-12T08:06:02.000Z</published>
    <summary>
      <![CDATA[<p>这个网站原定计划是使用 AnZhiYu 主题来搭建的，但当时想到 AnZhiYu 需要配置那么多奇怪的地方，一上午时间全花在配置上，还是干脆使用 Butterfly 稍微美化一下好了。安知鱼的主题有一个随机跳转友链的功能，但是这个功能在 Butterfly 主题中没有。其实]]>
    </summary>
    <title>Butterfly 友链随机跳转</title>
    <updated>2026-04-15T17:55:46.697Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="梦" scheme="http://090909.top/categories/%E6%A2%A6/"/>
    <category term="梦境记录" scheme="http://090909.top/tags/%E6%A2%A6%E5%A2%83%E8%AE%B0%E5%BD%95/"/>
    <category term="明日方舟" scheme="http://090909.top/tags/%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F/"/>
    <category term="崩坏三" scheme="http://090909.top/tags/%E5%B4%A9%E5%9D%8F%E4%B8%89/"/>
    <category term="二次元游戏" scheme="http://090909.top/tags/%E4%BA%8C%E6%AC%A1%E5%85%83%E6%B8%B8%E6%88%8F/"/>
    <category term="游戏回忆" scheme="http://090909.top/tags/%E6%B8%B8%E6%88%8F%E5%9B%9E%E5%BF%86/"/>
    <content>
      <![CDATA[<p>又做了一个梦，梦到自己打游戏，虽然已经很久没玩二游了。第一个梦，本来是梦到自己和同学回到了老学校，因为我们要做体检。醒来上了个厕所，第二个梦接着第一个梦。梦到自己在玩明日方舟，那群同学带自己玩。打过活动终于拿到了满级女儿，我还吐槽：“明日方舟是老带新的游戏，不然打不过活动！”。第三个梦是紧接第二个梦，为什么说第二个呢？因为我中途又上了一次厕所。这次梦到自己在玩崩坏三，独自一个人玩。拿婚纱德莉莎打一个难关卡，凭借着不断躲避敌人，最后赢了。做了梦醒来，虽然心里瘾瘾的，但是你叫我玩二游我都不会去玩了。</p>]]>
    </content>
    <id>http://090909.top/2026/04/11/%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F%E5%92%8C%E5%B4%A9%E5%9D%8F%E4%B8%89/</id>
    <link href="http://090909.top/2026/04/11/%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F%E5%92%8C%E5%B4%A9%E5%9D%8F%E4%B8%89/"/>
    <published>2026-04-11T01:17:04.000Z</published>
    <summary>
      <![CDATA[<p>又做了一个梦，梦到自己打游戏，虽然已经很久没玩二游了。第一个梦，本来是梦到自己和同学回到了老学校，因为我们要做体检。醒来上了个厕所，第二个梦接着第一个梦。梦到自己在玩明日方舟，那群同学带自己玩。打过活动终于拿到了满级女儿，我还吐槽：“明日方舟是老带新的游戏，不然打不过活动！]]>
    </summary>
    <title>明日方舟和崩坏三</title>
    <updated>2026-04-15T17:55:46.700Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="图片优化" scheme="http://090909.top/tags/%E5%9B%BE%E7%89%87%E4%BC%98%E5%8C%96/"/>
    <category term="命令行工具" scheme="http://090909.top/tags/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7/"/>
    <category term="图片压缩" scheme="http://090909.top/tags/%E5%9B%BE%E7%89%87%E5%8E%8B%E7%BC%A9/"/>
    <category term="WebP" scheme="http://090909.top/tags/WebP/"/>
    <category term="cwebp" scheme="http://090909.top/tags/cwebp/"/>
    <content>
      <![CDATA[<p>大家都知道啊，我平时喜欢去友链里点击“图片压缩”用在线的工具压缩图片。</p><p>今天晚上开始我发现，群主的网站好像无法访问了，无论是换到 <code>114.114.114.114</code> 还是 <code>8.8.8.8</code> 都没有效果。我又尝试了在手机和服务器上分别打开网站，事实证明，我们这一带确实无法访问网站了。无论是服务器的原因，还是自己的原因，WebP 肯定是要继续用下去的，这就到考验自己的时候了。一开始我想的是使用 FFmpeg 来解决这个问题，于是我去询问了 AI，结果 AI 跟我说：</p><blockquote><p>从您的终端输出可以看到，您的 ffmpeg 支持 WebP 解码（ D.VILS webp 中的 D 表示解码），但 不支持编码 （没有 E 标志）。</p></blockquote><p>它是这样解释的：</p><blockquote><ul><li>D &#x3D; 解码支持 ✓</li><li>E &#x3D; 编码支持 ✗（缺少）</li><li>V &#x3D; 视频编解码器</li><li>I &#x3D; 帧内编解码器</li><li>L &#x3D; 有损压缩</li><li>S &#x3D; 无损压缩</li></ul></blockquote><p>哦，我懂了，那难道我就不玩了？不不不，接下来我继续问它，有什么推荐的工具吗？它说，有的，比如 <code>cwebp</code>。查了一下这个 <code>cwebp</code>，发现它用起来更加简单。你可以这样下载它：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install webp</span><br></pre></td></tr></table></figure><p>对于你想压缩的图片，执行这个命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cwebp -q 75 图片输入 -o 压缩结果</span><br></pre></td></tr></table></figure><p><code>75</code> 代表图像质量，是不是特别简单？震惊了，第一次知道那么好的工具……</p>]]>
    </content>
    <id>http://090909.top/2026/04/11/%E5%B0%9D%E8%AF%95%E5%8E%8B%E7%BC%A9%E5%9B%BE%E7%89%87%E6%88%90-WebP/</id>
    <link href="http://090909.top/2026/04/11/%E5%B0%9D%E8%AF%95%E5%8E%8B%E7%BC%A9%E5%9B%BE%E7%89%87%E6%88%90-WebP/"/>
    <published>2026-04-10T16:27:07.000Z</published>
    <summary>
      <![CDATA[<p>大家都知道啊，我平时喜欢去友链里点击“图片压缩”用在线的工具压缩图片。</p>
<p>今天晚上开始我发现，群主的网站好像无法访问了，无论是换到 <code>114.114.114.114</code> 还是 <code>8.8.8.8</code> 都没有效果。我又尝试了在]]>
    </summary>
    <title>尝试压缩图片成 WebP</title>
    <updated>2026-04-15T17:55:46.700Z</updated>
  </entry>
  <entry>
    <author>
      <name>梁栋烨</name>
    </author>
    <category term="杂谈" scheme="http://090909.top/categories/%E6%9D%82%E8%B0%88/"/>
    <category term="AstrBot" scheme="http://090909.top/tags/AstrBot/"/>
    <category term="技术实践" scheme="http://090909.top/tags/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/"/>
    <category term="AI 助手" scheme="http://090909.top/tags/AI-%E5%8A%A9%E6%89%8B/"/>
    <category term="Shell 命令" scheme="http://090909.top/tags/Shell-%E5%91%BD%E4%BB%A4/"/>
    <category term="问题解决" scheme="http://090909.top/tags/%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/"/>
    <content>
      <![CDATA[<p>之前那篇关于 AstrBot 初尝试的文章发布之后，我原本以为会像往常一样石沉大海，毕竟技术类文章通常关注度不高。但出乎意料的是，评论区很快就有人留言了，而且不是那种简单的“沙发”或者“顶”，而是真正有内容的回复。这让我感到既惊喜又好奇，毕竟在上一篇文章里我确实遇到了不少问题，特别是关于如何让 AstrBot 执行 Shell 命令的困扰。作为一个技术爱好者，我深知遇到问题时的无助感，所以看到有人愿意分享解决方案，心里顿时涌起一股暖流。这种技术社区互帮互助的精神，正是开源世界最吸引人的地方。</p><h2 id="好友教学"><a href="#好友教学" class="headerlink" title="好友教学"></a>好友教学</h2><p><img src="/assets/images/illustrations/astrbot-11.webp"></p><p>我怀着期待的心情点开通知，一看留言者的头像和昵称，果然是之前建议我使用 AstrBot 的那位好友。他不仅记得我之前遇到的困境，还特意花时间写了一段详细的教程，告诉我如何正确开启 AstrBot 的 Shell 功能。</p><p><img src="/assets/images/illustrations/astrbot-12.webp"></p><p>按照好友的指导，我重新登录 AstrBot 的管理后台，找到了那个隐藏在设置深处的权限开关。当我小心翼翼地点击启用后，再次回到对话界面尝试询问系统信息。原来问题出在我对权限设置的理解上——我以为只要安装了 Shell 插件就能直接使用，但实际上还需要在 AstrBot 的后台管理界面中，找到对应的权限开关并手动启用。这让我想起了很多软件设计中的“安全第一”原则，开发者为了防止误操作或恶意使用，往往会设置一些额外的安全屏障。虽然这增加了初学者的学习成本，但从长远来看确实更加安全可靠。</p><h2 id="查询系统"><a href="#查询系统" class="headerlink" title="查询系统"></a>查询系统</h2><p><img src="/assets/images/illustrations/astrbot-13.webp"></p><p>这一次，AstrBot 没有再回复“我没有手脚”之类的俏皮话，而是真的开始执行命令了！看着屏幕上快速滚动的命令行输出，我的心情就像解开了一道困扰已久的数学题。它先是运行了 <code>uname -a</code> 来显示系统内核信息，接着又执行了 <code>df -h</code> 查看磁盘使用情况，最后还贴心地用 <code>free -h</code> 展示了内存状态。</p><h2 id="查询域名"><a href="#查询域名" class="headerlink" title="查询域名"></a>查询域名</h2><p><img src="/assets/images/illustrations/astrbot-14.webp"></p><p>既然 Shell 功能已经正常工作了，我决定来个小小的“报复”。想起之前那位好友用 OpenClaw 助手查询过我的域名信息，现在轮到我“反弹”回去了！于是我让 AstrBot 执行 <code>whois</code> 命令查询他的域名信息。AstrBot 很快响应，输出了完整的域名注册信息：注册人、注册商、创建日期、过期时间等一应俱全。看着屏幕上滚动显示的详细信息，我不禁笑出声来——这感觉就像是在玩一场技术版的“你查我，我查你”游戏。不过玩笑归玩笑，这次简单的 <code>whois</code> 查询让我真切感受到了 AstrBot 的实用性。这整个过程让我意识到，之前以为 AstrBot 功能有限完全是自己的误解——它其实是一个相当强大的工具，只是需要正确的配置和权限。这场乌龙事件让我深刻体会到，在技术探索的道路上，有时候阻碍我们的不是工具本身的能力，而是我们对工具理解的不够深入。</p><h2 id="卸载插件"><a href="#卸载插件" class="headerlink" title="卸载插件"></a>卸载插件</h2><p><img src="/assets/images/illustrations/astrbot-15.webp"></p><p>在成功体验了 AstrBot 的 Shell 功能后，我突然意识到一个有趣的问题：既然 AstrBot 内置的 Shell 功能已经如此完善，那我之前费尽心思安装的那些第三方 Shell 插件是不是就可以卸载了呢？想到这里，我不禁笑出声来——这就像是为了打开一扇门，先是费力地寻找各种钥匙，最后才发现门根本没锁，轻轻一推就开了。</p><h2 id="折腾后感"><a href="#折腾后感" class="headerlink" title="折腾后感"></a>折腾后感</h2><p>不过转念一想，这次折腾也并非全无收获。至少我更加熟悉了 AstrBot 的插件系统和权限管理机制，也体会到了技术社区互助的重要性。更重要的是，通过这次“再尝试”，我对 AstrBot 这个项目的理解又深了一层。它不仅仅是一个简单的聊天机器人，而是一个有着完整生态和强大扩展能力的 AI 助手平台。这种从误解到理解，从困惑到豁然开朗的过程，或许就是技术探索最迷人的地方吧。</p>]]>
    </content>
    <id>http://090909.top/2026/04/11/AstrBot-%E5%86%8D%E5%B0%9D%E8%AF%95/</id>
    <link href="http://090909.top/2026/04/11/AstrBot-%E5%86%8D%E5%B0%9D%E8%AF%95/"/>
    <published>2026-04-10T16:25:48.000Z</published>
    <summary>
      <![CDATA[<p>之前那篇关于 AstrBot 初尝试的文章发布之后，我原本以为会像往常一样石沉大海，毕竟技术类文章通常关注度不高。但出乎意料的是，评论区很快就有人留言了，而且不是那种简单的“沙发”或者“顶”，而是真正有内容的回复。这让我感到既惊喜又好奇，毕竟在上一篇文章里我确实遇到了不少问]]>
    </summary>
    <title>AstrBot 再尝试</title>
    <updated>2026-04-15T17:55:46.697Z</updated>
  </entry>
</feed>
