<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>fulie blog</title><description>No description</description><link>https://pcb.im/</link><language>zh_CN</language><item><title>记录我如何将Folia服务器迁移到Fabric</title><link>https://pcb.im/posts/folia-to-fabric-migration/</link><guid isPermaLink="true">https://pcb.im/posts/folia-to-fabric-migration/</guid><description>记录一次将 Minecraft Folia 服务器迁移到 Fabric 的过程、配置调整与问题排查。</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;感觉folia服务器好难配置（&lt;/p&gt;
&lt;p&gt;并且我想使用投影打印机之类的垃圾mod，所以现在把folia服务器转换到fabric&lt;/p&gt;
&lt;p&gt;开开心心的把那个核心换完，然后发现启动不了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[15:17:05] [main/WARN]: Missing data pack file/bukkit
[15:17:05] [main/WARN]: Missing data pack paper
[15:17:05] [main/INFO]: Found new data pack fabric-convention-tags-v2, loading it automatically
[15:17:05] [Worker-Main-11/ERROR]: Unable to read or access the world gen settings file! Falling back to the default settings with a random world seed. .\world\data\minecraft\world_gen_settings.dat
[15:17:05] [main/WARN]: Failed to load datapacks, can&apos;t proceed with server load. You can either fix your datapacks or reset to vanilla with --safeMode
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我在paper的官网上找到了这篇文章：&lt;/p&gt;
&lt;h2&gt;Migrating from Paper 从纸质形式迁移过来&lt;/h2&gt;
&lt;h3&gt;To Vanilla 致 Vanilla&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.papermc.io/paper/migration/&quot;&gt;https://docs.papermc.io/paper/migration/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下文件需要从 &lt;code&gt;world/dimensions/minecraft/overworld/data/minecraft/&lt;/code&gt; 移动到 &lt;code&gt;world/data/minecraft/&lt;/code&gt; ：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;game_rules.dat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scheduled_events.dat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wandering_trader.dat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;weather.dat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;world_gen_settings.dat&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;照着操作即可&lt;/p&gt;
&lt;h2&gt;迁移 TPA 插件的 Home 数据&lt;/h2&gt;
&lt;p&gt;原来使用的是 &lt;a href=&quot;https://modrinth.com/plugin/tpa.66666/versions&quot;&gt;TPA 3.2.9&lt;/a&gt; 插件。它是 Bukkit/Paper 插件，不能直接放到 Fabric 的 &lt;code&gt;mods/&lt;/code&gt; 目录中运行。不过这个插件的 Home 数据比较简单，可以转换到 Fabric 版传送模组中。&lt;/p&gt;
&lt;p&gt;原插件将每个玩家的数据保存在：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins/TPA/playerdata/&amp;lt;玩家 UUID&amp;gt;.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Home 数据大致是下面这种 YAML 格式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;player_name: xyzonline
homes:
  家:
    world: world
    x: 12.586520283619185
    y: 67.0
    z: -362.67385057135806
    pitch: 30.299927
    yaw: -174.40253
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我使用的 Fabric 传送模组是 &lt;a href=&quot;https://modrinth.com/mod/ziy-swthb&quot;&gt;Simple-Warp-Tpa-Home-Back&lt;/a&gt;，它将所有玩家的 Home 统一保存在：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;world/data/simple-warp-tpa-home-back/data.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目标格式如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;homes&quot;: {
    &quot;玩家 UUID&quot;: [
      {
        &quot;name&quot;: &quot;家&quot;,
        &quot;world&quot;: &quot;minecraft:overworld&quot;,
        &quot;x&quot;: 12.586520283619185,
        &quot;y&quot;: 67.0,
        &quot;z&quot;: -362.67385057135806,
        &quot;yaw&quot;: -174.40253,
        &quot;pitch&quot;: 30.299927
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;迁移时需要注意世界名称的转换：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;world        -&amp;gt; minecraft:overworld
world_nether  -&amp;gt; minecraft:the_nether
world_the_end -&amp;gt; minecraft:the_end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;迁移过程不会直接复制旧的 YAML 文件，而是读取玩家 UUID、Home 名称、维度、坐标和视角，重新生成 Fabric 模组需要的 JSON 数据。玩家 UUID 必须保持一致，否则 Home 会被认为属于其他玩家。&lt;/p&gt;
&lt;p&gt;在修改目标文件前，应该先备份：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;world/data/simple-warp-tpa-home-back/data.json.before-home-migration.bak
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;迁移完成后，可以使用以下命令检查 Home：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/homes
/home 家
/home &amp;lt;Home名称&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原来的 &lt;code&gt;plugins/TPA/playerdata/&lt;/code&gt; 不应删除，保留它可以在迁移失败时重新转换。TPA 请求和冷却状态通常是临时数据，不需要迁移；需要重点迁移的是 Home 坐标数据。&lt;/p&gt;
</content:encoded></item><item><title>AI编程工具推荐：我常用的 5 个工具</title><link>https://pcb.im/posts/%E5%85%8D%E8%B4%B9ai%E5%B7%A5%E5%85%B7/</link><guid isPermaLink="true">https://pcb.im/posts/%E5%85%8D%E8%B4%B9ai%E5%B7%A5%E5%85%B7/</guid><description>整理几款我实际接触过的 AI 编程工具，按网络限制、模型可用性和上手成本做一次实用向推荐。</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;我原本想要使用国内模型的，但价格还是较高，且质量有些低
这是我整理的一些能够白嫖的工具&lt;/p&gt;
&lt;h2&gt;1. Codex&lt;/h2&gt;
&lt;p&gt;Codex 是我的主力工具&lt;/p&gt;
&lt;p&gt;它的优点很直接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网络限制小&lt;/li&gt;
&lt;li&gt;白嫖相对简单，team 试用就能上手&lt;/li&gt;
&lt;li&gt;目前基本就是 GPT 家模型，选择少，但省心&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你不想花太多时间折腾登录、账号、接口和各种奇怪限制，Codex 会很适合。&lt;/p&gt;
&lt;p&gt;它的特点不是“模型特别多”，而是“可用、稳定、少折腾”。对大多数编程场景来说，这一点其实很重要。&lt;/p&gt;
&lt;h2&gt;2. Antigravity（反重力）&lt;/h2&gt;
&lt;p&gt;Antigravity 的整体体验也不错，尤其是模型选择这一点比较灵活。&lt;/p&gt;
&lt;p&gt;它的特点是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有一些账号和 IP 限制&lt;/li&gt;
&lt;li&gt;但可以使用大多数模型&lt;/li&gt;
&lt;li&gt;灵活性比单一模型工具更高&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你经常会切换模型，或者想对比不同模型写代码的效果，Antigravity 会更顺手。&lt;/p&gt;
&lt;p&gt;如果你有 Google 相关订阅或可用权限，这类工具的使用门槛会更低，Gemini CLI 和 Antigravity 也都能一起考虑。&lt;/p&gt;
&lt;p&gt;它的问题也比较明确，我的账号用不了，气死我了气死我了&lt;/p&gt;
&lt;h2&gt;3. Gemini CLI&lt;/h2&gt;
&lt;p&gt;Gemini CLI 和 Antigravity 有点像，但它的定位更单一。&lt;/p&gt;
&lt;p&gt;它的特点可以概括成一句话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;和 Antigravity 类似&lt;/li&gt;
&lt;li&gt;但只能使用 Gemini&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你本来就喜欢 Gemini 的风格，或者你的工作流就是围绕 Gemini 建立的，那它会很好用。&lt;/p&gt;
&lt;p&gt;它的问题也很明显，我也用不了（（（（（&lt;/p&gt;
&lt;h2&gt;4. OpenCode 这类开源代码工具&lt;/h2&gt;
&lt;p&gt;开源工具的优势很简单，就是自由。&lt;/p&gt;
&lt;p&gt;这类工具通常会在登录后自动接入 free model，能让你低成本地跑起来，不用一开始就投入太多。&lt;/p&gt;
&lt;p&gt;但问题也同样直接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型能力通常偏弱&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;5. Kiro&lt;/h2&gt;
&lt;p&gt;Kiro 我没有用过
但是由于我看到很多api反代走的这个工具，应该很容易白嫖&lt;/p&gt;
</content:encoded></item><item><title>白纸</title><link>https://pcb.im/posts/roku/</link><guid isPermaLink="true">https://pcb.im/posts/roku/</guid><description>或许是哪个角落的纸</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;亲爱的 ROKU&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那天，我将做好的早餐端进你的房间。&lt;/p&gt;
&lt;p&gt;看到你的面容，我整个人僵在了门口，手中的餐盘差点滑落。
一夜之间，你脸上岁月的沟壑凭空消失了。躺在床上的你，像是只有十几岁。
我颤抖着凑近，试图寻找某种解释，但是那真的就是你。&lt;/p&gt;
&lt;p&gt;随后，我发现你的枕边放着一本笔记，上边有一个精致的小锁。密码是你的生日，7-2-3。&lt;/p&gt;
&lt;p&gt;我打开了它。
「白。如果有你看到了这行字，说明‘我’已经不在了。」&lt;/p&gt;
&lt;p&gt;我翻到书签那一页，字迹有些颤抖。
「从16岁开始计算，每过48年，我的记忆会消失一次，但我毕生所学的技能会化为天赋留在身体里。」&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;爱你的，白
7-25&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;（新的字迹）&lt;/strong&gt; 致ROKU：别惊慌。现在的你可能会觉得混乱，为什么脑海里装着那么多熟练的知识，却对周围一无所知。
不用在意这篇日记里的往事，你有自己的生活。&lt;/p&gt;
</content:encoded></item><item><title>在openlist上挂载神秘网盘上的运动会照片</title><link>https://pcb.im/posts/openlist10086/</link><guid isPermaLink="true">https://pcb.im/posts/openlist10086/</guid><pubDate>Sat, 06 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;运动会拍了很多照片，为了方便他人下载和装逼（不是）
我决定用openlist建个站分享（不建议建，十分的难用）
经过对比发现某个运营商网盘便宜且能通过302重定向，故选择该网盘&lt;/p&gt;
&lt;h1&gt;挂载&lt;/h1&gt;
&lt;h2&gt;在网盘网页端获取的东西&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/12/71ce87fdea8f6c3e75daae83b33bcc69.png&quot; alt=&quot;image-20251206210654346&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/12/ef8a223480e5d953006555125c3d7cc6.png&quot; alt=&quot;image-20251206210722716&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;把这两项填入openlist即可&lt;/h2&gt;
&lt;h1&gt;openlist&lt;/h1&gt;
&lt;p&gt;挂载后元数据处选择密码并设置即可&lt;/p&gt;
</content:encoded></item><item><title>txzonty</title><link>https://pcb.im/posts/txzonty/</link><guid isPermaLink="true">https://pcb.im/posts/txzonty/</guid><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;前面忘了后面忘了
然后我打算做一个特莉波卡的通行证喵
然后这个文章神人写一半然后就不写了喵，我只能随意的上传上去了喵&lt;/p&gt;
&lt;h1&gt;提取素材&lt;/h1&gt;
&lt;p&gt;这个什么庭院是小众游戏喵，玩家比卡拉比丘少得多喵
在网上根本找不到素材喵
所以解包游戏提取素材
庭院使用unity，故使用AssetStudio进行拆包&lt;/p&gt;
&lt;p&gt;选择游戏目录中的data&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/10/f50224b79e6264fbe6fea1cafdf68697.png&quot; alt=&quot;933b3bae-1896-485a-9009-28e392eefda3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后过滤类型选择&lt;strong&gt;Texture2D&lt;/strong&gt;，然后打开资源列表就可以看到里面的图片并提取了，&lt;/p&gt;
</content:encoded></item><item><title>随便写的文章用于教程如何进入服务器</title><link>https://pcb.im/posts/mcsever/</link><guid isPermaLink="true">https://pcb.im/posts/mcsever/</guid><description>随便写的文章用于教程如何进入服务器</description><pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;随便写的文章用于教程如何进入服务器&lt;/h1&gt;
&lt;p&gt;登录方式：有正版账号的可以直接进入，无需注册littleskin；没有正版的需要注册littleskin账号。&lt;/p&gt;
&lt;p&gt;我们使用了皮肤站（littleskin）鉴权&lt;/p&gt;
&lt;p&gt;和平常的离线服务器有点不一样，所以写个教程&lt;/p&gt;
&lt;h2&gt;注册littleskin账号&lt;/h2&gt;
&lt;p&gt;打开&lt;a href=&quot;https://littleskin.cn/&quot;&gt;littleskin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注册一个账号（请记住密码）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/121361e8a7bdb33ed59ffb16afbf9ac0.png&quot; alt=&quot;image-20250923164318339&quot; /&gt;&lt;/p&gt;
&lt;p&gt;注册完成后在这里添加角色&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/579a8828af17ad48305aaabfb9198324.png&quot; alt=&quot;image-20250923172602683&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;启动游戏&lt;/h2&gt;
&lt;p&gt;下载&lt;a href=&quot;https://r2.pcb.im/Plain%20Craft%20Launcher%202.exe&quot;&gt;pcl2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;打开pcl2下载对应的游戏（版本：26.1.2）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2026/07/56fa6879a394ada886fed674d2140d4c.png&quot; alt=&quot;image-20260709233944937&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里可以什么都不添加&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2026/07/e4e68444ed3909ea85383cd5e5303726.png&quot; alt=&quot;image-20260709234020380&quot; /&gt;&lt;/p&gt;
&lt;p&gt;下载完成到主页选这个版本的设置&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/6140bb13b6291ebb2bbc7d3d9f3106c3.png&quot; alt=&quot;image-20250923164824802&quot; /&gt;&lt;/p&gt;
&lt;p&gt;选择第三方登录&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/1448c59eb5f23a8a02bb5a348c3a4e75.png&quot; alt=&quot;image-20250923164914337&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后单击设置为littskin&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/7a7f325095ae39896d07b79e026e9e94.png&quot; alt=&quot;image-20250923164948362&quot; /&gt;&lt;/p&gt;
&lt;p&gt;返回主页登陆刚刚注册的账号启动&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/8412dae58c969df4815afa3f247c670b.png&quot; alt=&quot;image-20250923165018989&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;进入服务器&lt;/h2&gt;
&lt;p&gt;进入后选择多人游戏&lt;/p&gt;
&lt;p&gt;添加服务器&lt;/p&gt;
&lt;p&gt;服务器地址填写 xmfu.cn&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/ec040ab0a34c836169c5b77b56cdf77c.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;即可加入&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/09/8b1e8d7898e7c737ca39df397e37795d.png&quot; alt=&quot;image-20250923165210957&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;手机教程&lt;/h1&gt;
&lt;h2&gt;下载FCL启动器&lt;/h2&gt;
&lt;p&gt;下载FCL启动器 &lt;a href=&quot;https://fcl-team.github.io/&quot;&gt;官方&lt;/a&gt; 或 &lt;a href=&quot;https://foldcraftlauncher.cn/&quot;&gt;非官方下载站&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;安装与设置&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;安装完成后打开FCL，允许文件访问权限&lt;/li&gt;
&lt;li&gt;首次启动会提示安装Java运行环境，点击安装即可&lt;/li&gt;
&lt;li&gt;进入首页后，点击右侧头像创建账号：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;正版用户&lt;/strong&gt;：选择「微软登录」，登录你的微软账号&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;littleskin用户&lt;/strong&gt;：选择「第三方登录」→「添加认证服务器」，地址填写：&lt;code&gt;https://littleskin.cn/api/yggdrasil&lt;/code&gt;，然后登录&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;下载游戏&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;点击左侧下载按钮，进入版本下载页面&lt;/li&gt;
&lt;li&gt;搜索并下载版本 &lt;strong&gt;26.1.2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;下载完成后，回到首页选择刚下载的版本&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;添加服务器&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;启动游戏后选择「多人游戏」&lt;/li&gt;
&lt;li&gt;点击「添加服务器」&lt;/li&gt;
&lt;li&gt;服务器地址填写：&lt;code&gt;xmfu.cn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;点击确认即可加入服务器&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>stun建站端口不固定？教你用eo自动回源到你的stun端口</title><link>https://pcb.im/posts/eonat/</link><guid isPermaLink="true">https://pcb.im/posts/eonat/</guid><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我没有ipv6&lt;/p&gt;
&lt;h1&gt;前言什么的&lt;/h1&gt;
&lt;p&gt;我想要用家宽建一个Matrix&lt;/p&gt;
&lt;p&gt;我也没有ipv6，没有现成的方案实现eo回源&lt;/p&gt;
&lt;p&gt;但是直接stun直连太麻烦了也不安全（我也成功了），于是考虑做个eo自动回源&lt;/p&gt;
&lt;h2&gt;stun直连matrix的思路&lt;/h2&gt;
&lt;p&gt;因为matrix有点小众，我也没找到教程，以下是我摸索出来的，也分享下吧&lt;/p&gt;
&lt;p&gt;stun直连的话我讲下思路吧，在github建个仓库，里面放.well-known\matrix\client这个文件（引导Matrix客户端寻找服务器的文件），然后使用lucky的webhook给action发请求更新这个文件的端口，这个文件像这样&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;m.homeserver&quot;: {
    &quot;base_url&quot;: &quot;https://m.matrix.org&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后把这个仓库通过什么page什么的部署到上一级域名（比如）你的matrix部署在m.matrix.org，你的client文件必须放在m.matrix.org下或者matrix.org下，然后客户端写client文件所在的域名就可以连接了&lt;/p&gt;
&lt;h1&gt;eo自动回源&lt;/h1&gt;
&lt;p&gt;其实也差不多，我们腾讯云有api可以调用，但是非常的答辩（发个请求需要复杂的密钥生成，因此使用action来发请求）&lt;/p&gt;
&lt;p&gt;为此我做了个action仓库，里面有较为完善的教程，因此不多赘述了（使用eo国际站的可以自行更换api，该仓库使用的是腾讯云中国的api）&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;bili-fule/edgeone-updater&quot;}&lt;/p&gt;
&lt;p&gt;然后再lucky里webhook给action发请求&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/08/ae5aad8ddd43f09ec10011f64e0a46f9.png&quot; alt=&quot;1755222937799&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后就可以自动更新eo的回源链接/端口了&lt;/p&gt;
</content:encoded></item><item><title>AI帮我优化博客SEO的经验分享</title><link>https://pcb.im/posts/seo/</link><guid isPermaLink="true">https://pcb.im/posts/seo/</guid><description>最近，我借助AI工具对我的博客进行了一系列SEO优化，效果显著。这篇文章记录了整个过程，分享了一些常见的SEO误区，并展示了AI如何帮助我提升网站的搜索引擎表现。</description><pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]&lt;/p&gt;
&lt;p&gt;本文全文及操作由AI（大型语言模型）根据我的要求生成并修改。文中的所有操作均由AI完成，旨在分享一次有趣的人机协作体验。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;最近，我一直在琢磨如何提升我这个基于 Astro 构建的博客的搜索引擎排名。虽然内容为王，但好的技术SEO是让优质内容被更多人发现的基础。于是，我决定让AI来帮我分析和优化我的网站。&lt;/p&gt;
&lt;p&gt;整个过程非常顺畅，AI不仅能理解我的需求，还能直接上手修改代码。下面我将详细介绍AI为我做的几项关键优化，以及在此过程中发现的一些常见SEO误区。&lt;/p&gt;
&lt;h3&gt;1. &lt;code&gt;robots.txt&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;robots.txt&lt;/code&gt; 文件是网站与搜索引擎爬虫沟通的第一个渠道。一个配置不当的 &lt;code&gt;robots.txt&lt;/code&gt; 可能会意外地阻止搜索引擎收录你的重要页面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI的优化：&lt;/strong&gt; AI在分析了我的项目结构后，迅速指出了这个问题，并在 &lt;code&gt;robots.txt&lt;/code&gt; 中添加了对 &lt;code&gt;/pagefind/&lt;/code&gt; 目录的禁止规则。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- Disallow: /_astro/
+ Allow: /
+ Disallow: /_astro/
+ Disallow: /pagefind/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同时，它还添加了 &lt;code&gt;Allow: /&lt;/code&gt; 规则，明确告诉所有爬虫，除了禁止的目录外，其他所有内容都欢迎抓取。这是一个很好的实践，能避免因默认规则导致的误解。&lt;/p&gt;
&lt;h3&gt;2. 元数据（Meta Tags）&lt;/h3&gt;
&lt;p&gt;元数据是页面的“身份证”，直接影响着页面在搜索结果中的展示样式和点击率。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我的误区：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;description&lt;/code&gt; 硬编码：&lt;/strong&gt; 我整个网站的所有页面都共用一个写死的 &lt;code&gt;description&lt;/code&gt;。这对于SEO来说是灾难性的，因为它无法准确概括每个页面的核心内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;滥用 &lt;code&gt;keywords&lt;/code&gt;：&lt;/strong&gt; 我在 &lt;code&gt;keywords&lt;/code&gt; 标签里堆砌了大量关键词，甚至包含了一些不那么相关的词语。这是一个非常过时的做法，现代搜索引擎（尤其是Google）早已不再重视这个标签，过度堆砌甚至可能带来负面影响。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;社交分享信息不全：&lt;/strong&gt; 我的页面在被分享到Twitter或Facebook等社交媒体时，无法显示漂亮的预览卡片，因为我缺少了 &lt;code&gt;og:image&lt;/code&gt; 和 &lt;code&gt;twitter:image&lt;/code&gt; 等关键的Open Graph协议标签。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;AI的优化：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI对我的 &lt;code&gt;Layout.astro&lt;/code&gt; 文件进行了一次“大手术”：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;动态 &lt;code&gt;description&lt;/code&gt;：&lt;/strong&gt; 将 &lt;code&gt;description&lt;/code&gt; 元标签修改为优先读取每个页面单独设置的 &lt;code&gt;description&lt;/code&gt;，如果页面没有提供，则回退到全局的网站描述。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;移除 &lt;code&gt;keywords&lt;/code&gt;：&lt;/strong&gt; 毫不留情地删除了整个 &lt;code&gt;keywords&lt;/code&gt; 元标签。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;补全社交分享标签：&lt;/strong&gt; 动态添加了 &lt;code&gt;og:image&lt;/code&gt; 和 &lt;code&gt;twitter:image&lt;/code&gt; 标签，并使用页面的 &lt;code&gt;banner&lt;/code&gt; 或网站的默认 &lt;code&gt;banner&lt;/code&gt; 作为图片源。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. 结构化数据（Structured Data）&lt;/h3&gt;
&lt;p&gt;结构化数据（通常以JSON-LD格式提供）能帮助搜索引擎更深层次地理解页面内容，并可能以“富媒体搜索结果”（Rich Snippets）的形式展示，例如在搜索结果中直接显示文章作者、发布日期、评分等信息，从而极大地提升点击率。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI的优化：&lt;/strong&gt; 创建了一个全新的 &lt;code&gt;Seo.astro&lt;/code&gt; 组件，专门用于生成JSON-LD格式的结构化数据。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它能判断当前页面是普通网页还是文章页，并生成对应的 &lt;code&gt;WebSite&lt;/code&gt; 或 &lt;code&gt;Article&lt;/code&gt; 类型的结构化数据。&lt;/li&gt;
&lt;li&gt;它会自动提取文章的标题、描述、作者、发布和修改日期、封面图片等信息，并填充到结构化数据中。&lt;/li&gt;
&lt;li&gt;最后，它将这个组件无缝地集成到了我的主布局文件中，让每个页面都能自动拥有量身定制的结构化数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;总结&lt;/h3&gt;
&lt;p&gt;这次与AI协作优化SEO的经历，让我深刻体会到了AI作为开发辅助工具的强大潜力。它不仅能发现一些我因知识盲区或疏忽而忽略的问题，还能以极高的效率直接生成和修改代码。&lt;/p&gt;
</content:encoded></item><item><title>使用cloudflare worker+r2做一个古明地恋的随机图api</title><link>https://pcb.im/posts/phpapi/</link><guid isPermaLink="true">https://pcb.im/posts/phpapi/</guid><description>本教程详细介绍了如何利用 Cloudflare Workers 和 R2 存储构建一个古明地恋主题的随机图片 API。文章分为两部分，首先介绍了最新的实现方案，包括使用 Python 脚本从 Pixiv 下载、处理和上传图片到 R2 存储桶，以及如何配置 Cloudflare Worker 来提供 API 服务。此外，文章还保留了使用 PHP 虚拟主机的旧方案以供参考。</description><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;更新 迁移到cloudflare worker+r2&lt;/h1&gt;
&lt;h2&gt;准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[x] cloudflare r2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;过程&lt;/h2&gt;
&lt;h3&gt;准备过程（与php一致）&lt;/h3&gt;
&lt;p&gt;下载我做好的诡异项目&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;bili-fule/php-Random-picture&quot;}&lt;/p&gt;
&lt;p&gt;登录pixiv，把cookie扒下来（打码那一部分)
&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/a06c840287acbd5a8d1956932d7b8203.png&quot; alt=&quot;cookie&quot; /&gt;
找到想要的作品的tag，把链接或者tag复制下来&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/cb38192797eeb0f37944f869c5babf79.png&quot; alt=&quot;tag&quot; /&gt;&lt;/p&gt;
&lt;p&gt;粘贴到koshi.py程序里运行,koshi会自动帮你下载图片
然后删除目录里不需要的图片
运行prepare_api_images.py,会压缩图片并索引&lt;/p&gt;
&lt;h3&gt;上传至R2存储桶&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/5f1d8265a372c399a1cdfec0839da9ef.png&quot; alt=&quot;r2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在这个页面新建桶和api那里创建令牌&lt;/p&gt;
&lt;p&gt;安装 &lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html&quot;&gt;aws cli&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/d5155775b4be63c38041907d273ca47b.png&quot; alt=&quot;image-20250723103138059&quot; /&gt;&lt;/p&gt;
&lt;p&gt;访问密钥 ID (Access Key ID)
机密访问密钥 (Secret Access Key)
终结点 (Endpoint)
什么诡异翻译
运行 aws configure
提示 AWS Access Key ID: 粘贴截图中的【访问密钥 ID】
提示 AWS Secret Access Key: 粘贴截图中的【机密访问密钥】
提示 Default region name: 按回车跳过
提示 Default output format: 输入 json
接着运行 aws configure set s3.endpoint_url &amp;lt;URL&amp;gt;，这里的 &amp;lt;URL&amp;gt; 就是截图中的【终结点】地址。
接着在处理好的目录运行下面命令&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/0641e76da25451c0731698ce43a8723f.png&quot; alt=&quot;image-20250723103855870&quot; /&gt;&lt;/p&gt;
&lt;p&gt;aws s3 cp .\api_ready_images s3://koishi/ --recursive --endpoint-url https://S3-API.com&lt;/p&gt;
&lt;h3&gt;worker配置&lt;/h3&gt;
&lt;p&gt;fork我的这个项目&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;bili-fule/cfpicapi&quot;}&lt;/p&gt;
&lt;p&gt;然后创建worker选择这个项目，构建，在项目中wrangler.toml修改存储桶名字&lt;/p&gt;
&lt;h1&gt;（旧的）使用php虚拟主机做一个古明地恋的随机图api&lt;/h1&gt;
&lt;h2&gt;准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[x] python&lt;/li&gt;
&lt;li&gt;[x] php虚拟主机&lt;/li&gt;
&lt;li&gt;[x] Pixiv高级会员&lt;/li&gt;
&lt;li&gt;[x] 一个聪明的大脑&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;过程&lt;/h2&gt;
&lt;p&gt;下载我做好的诡异项目&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;bili-fule/php-Random-picture&quot;}&lt;/p&gt;
&lt;p&gt;登录pixiv，把cookie扒下来（打码那一部分)
&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/a06c840287acbd5a8d1956932d7b8203.png&quot; alt=&quot;cookie&quot; /&gt;
找到想要的作品的tag，把链接或者tag复制下来&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/cb38192797eeb0f37944f869c5babf79.png&quot; alt=&quot;tag&quot; /&gt;&lt;/p&gt;
&lt;p&gt;粘贴到koshi.py程序里运行,koshi会自动帮你下载图片
然后删除目录里不需要的图片
运行prepare_api_images.py,会压缩图片并索引
然后将api.php，index.php，style.css，和api_ready_images放到虚拟主机根目录即可&lt;/p&gt;
</content:encoded></item><item><title>序</title><link>https://pcb.im/posts/novel0/</link><guid isPermaLink="true">https://pcb.im/posts/novel0/</guid><description>随手写的小说</description><pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1980年，某个荒无人烟的森林。&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;
</content:encoded></item><item><title>尝试更新一个我的世界fabricmod的经历</title><link>https://pcb.im/posts/mc-fabric-mod-updata/</link><guid isPermaLink="true">https://pcb.im/posts/mc-fabric-mod-updata/</guid><description>本文记录了一次尝试将一个 Minecraft Fabric Mod 从 1.19.3 版本更新到 1.21 版本的经历。文章详细描述了更新过程中的环境配置、依赖更新、代码修复等步骤，并分享了借助 AI 工具解决编译错误的方法，最终也记录了更新后遇到的建模和行为问题。</description><pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;想开一个我的世界浮岛生存服务器
::github{repo=&quot;Youmiel/FloatingIslands-Datapack&quot;}
其中一个想要搭配的mod只更新到了1.19.3，我想要在1.21上使用，因此尝试更新
::github{repo=&quot;innnky/majobroom&quot;}&lt;/p&gt;
&lt;h1&gt;过程&lt;/h1&gt;
&lt;p&gt;先将这个仓库Fork 和 Clone
拖入IntelliJ IDEA
打开&lt;a href=&quot;https://fabricmc.net/develop/&quot;&gt;fabric&lt;/a&gt;查看想要的版本推荐的Fabric Loader、Yarn 和 Fabric API&lt;/p&gt;
&lt;p&gt;写入gradle.properties（fabric）、build.gradle（loom版本）&lt;/p&gt;
&lt;p&gt;打开gradle/wrapper/gradle-wrapper.properties将gradle版本更新（一般直接build后报错会直接说需要哪个版本）&lt;/p&gt;
&lt;p&gt;将jdk更新到java21并修改jdk目录，点击右侧小白象输入gradlew build&lt;/p&gt;
&lt;p&gt;然后就可以看到绝望的一幕&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/9ba8beb66018ad809e109156885da420.png&quot; alt=&quot;erreo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接下来的就全部交给deepwiki了&lt;/p&gt;
&lt;p&gt;打开&lt;a href=&quot;https://deepwiki.com/FabricMC/fabric-docs&quot;&gt;fabric的deepwiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;打开deepwiki，告诉它你想干什么（移植到1.21），告诉他错误和源码，他会给你解决方案&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/0df6af9e2cbfdf918de585f240f712a5.png&quot; alt=&quot;image-20250716204918248&quot; /&gt;&lt;/p&gt;
&lt;p&gt;你可以自己实验它的解决方案（推荐），或者把解决方案粘贴到aiide里，最好的方法就是给你的aiide部署一个知识库&lt;/p&gt;
&lt;p&gt;很快我们修复好了所有报错，进游戏看看吧&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/02893e4550f2e76b90ef8f4ee6da5436.png&quot; alt=&quot;image-20250716212544485&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现建模和行为（扫帚一直在抖动）出现了明显问题&lt;/p&gt;
&lt;p&gt;然后我就修不好了qwq&lt;/p&gt;
&lt;p&gt;意义不明的文章&lt;/p&gt;
</content:encoded></item><item><title>让你的fuwari有一个自适应的giscus评论区</title><link>https://pcb.im/posts/giscus/</link><guid isPermaLink="true">https://pcb.im/posts/giscus/</guid><description>本教程将指导您如何为您的 Fuwari 博客集成一个能够根据网站主题自动切换亮色/暗色模式的 Giscus 评论区。通过创建一个自定义的 Astro 组件，您可以轻松实现评论区与网站外观的无缝融合。</description><pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;配置github仓库&lt;/h1&gt;
&lt;p&gt;新建一个公开仓库，在设置将Discussions开启，我们的评论将存储在这里&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/8a0e086127cd42df39898cb9b17c9d47.png&quot; alt=&quot;Discussions&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在你的仓库安装 &lt;a href=&quot;https://github.com/apps/giscus&quot;&gt;giscus&lt;/a&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/f833ef6027b8bebe00cd0c6749710ab6.png&quot; alt=&quot;giscus&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;配置你的网站&lt;/h1&gt;
&lt;p&gt;打开&lt;a href=&quot;https://giscus.app/&quot;&gt;giscus官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;选择好你的想要的参数，他会自动输出script&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/d09ce464f61cf4ca3a7c61b2d2acd3be.png&quot; alt=&quot;image-20250714210625664&quot; /&gt;&lt;/p&gt;
&lt;p&gt;你可以在网站任意部分插入这个脚本即可使用&lt;/p&gt;
&lt;h1&gt;fuwari的主题自适应&lt;/h1&gt;
&lt;p&gt;在\src\components\下创建一个astro组件，爱叫啥叫啥&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/d5847f76721282e2f53903904b62e3d8.png&quot; alt=&quot;image-20250716001852560&quot; /&gt;&lt;/p&gt;
&lt;p&gt;写入以下内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
---  
// GiscusComment.astro  
interface Props {  
  repo: string;  
  repoId: string;  
  category: string;  
  categoryId: string;  
  mapping?: string;  
  reactionsEnabled?: boolean;  
  emitMetadata?: boolean;  
  inputPosition?: &apos;top&apos; | &apos;bottom&apos;;  
  lang?: string;  
}  
  
const {  
  repo,  
  repoId,  
  category,  
  categoryId,  
  mapping = &apos;pathname&apos;,  
  reactionsEnabled = true,  
  emitMetadata = false,  
  inputPosition = &apos;bottom&apos;,  
  lang = &apos;zh-CN&apos;  
} = Astro.props;  
---  
  
&amp;lt;div id=&quot;giscus-container&quot;&amp;gt;&amp;lt;/div&amp;gt;  
  
&amp;lt;script define:vars={{ repo, repoId, category, categoryId, mapping, reactionsEnabled, emitMetadata, inputPosition, lang }}&amp;gt;  
  function loadGiscus() {  
    const container = document.getElementById(&apos;giscus-container&apos;);  
    if (!container) return;  
  
    // 获取当前主题  
    const isDark = document.documentElement.classList.contains(&apos;dark&apos;);  
    const theme = isDark ? &apos;dark&apos; : &apos;light&apos;;  
  
    // 创建Giscus脚本  
    const script = document.createElement(&apos;script&apos;);  
    script.src = &apos;https://giscus.app/client.js&apos;;  
    script.setAttribute(&apos;data-repo&apos;, repo);  
    script.setAttribute(&apos;data-repo-id&apos;, repoId);  
    script.setAttribute(&apos;data-category&apos;, category);  
    script.setAttribute(&apos;data-category-id&apos;, categoryId);  
    script.setAttribute(&apos;data-mapping&apos;, mapping);  
    script.setAttribute(&apos;data-strict&apos;, &apos;0&apos;);  
    script.setAttribute(&apos;data-reactions-enabled&apos;, reactionsEnabled ? &apos;1&apos; : &apos;0&apos;);  
    script.setAttribute(&apos;data-emit-metadata&apos;, emitMetadata ? &apos;1&apos; : &apos;0&apos;);  
    script.setAttribute(&apos;data-input-position&apos;, inputPosition);  
    script.setAttribute(&apos;data-theme&apos;, theme);  
    script.setAttribute(&apos;data-lang&apos;, lang);  
    script.setAttribute(&apos;data-loading&apos;, &apos;lazy&apos;);  
    script.crossOrigin = &apos;anonymous&apos;;  
    script.async = true;  
  
    container.appendChild(script);  
  }  
  
  // 监听主题变化  
  function updateGiscusTheme() {  
    const giscusFrame = document.querySelector(&apos;iframe[src*=&quot;giscus&quot;]&apos;);  
    if (giscusFrame) {  
      const isDark = document.documentElement.classList.contains(&apos;dark&apos;);  
      const theme = isDark ? &apos;dark&apos; : &apos;light&apos;;  
        
      giscusFrame.contentWindow.postMessage({  
        giscus: {  
          setConfig: {  
            theme: theme  
          }  
        }  
      }, &apos;https://giscus.app&apos;);  
    }  
  }  
  
  // 监听DOM变化来检测主题切换  
  const observer = new MutationObserver((mutations) =&amp;gt; {  
    mutations.forEach((mutation) =&amp;gt; {  
      if (mutation.type === &apos;attributes&apos; &amp;amp;&amp;amp; mutation.attributeName === &apos;class&apos;) {  
        updateGiscusTheme();  
      }  
    });  
  });  
  
  // 页面加载时初始化  
  if (document.readyState === &apos;loading&apos;) {  
    document.addEventListener(&apos;DOMContentLoaded&apos;, loadGiscus);  
  } else {  
    loadGiscus();  
  }  
  
  // 开始观察主题变化  
  observer.observe(document.documentElement, {  
    attributes: true,  
    attributeFilter: [&apos;class&apos;]  
  });  
&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后想在哪里引入，比如文章页&lt;/p&gt;
&lt;p&gt;那就在src\pages\posts[...slug].astro开头引入这个文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import Giscus from &quot;../../components/misc/Giscus.astro&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在想要的地方添加（例如协议下面）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;GiscusComment   
  repo=&quot;your-username/your-repo&quot;  
  repoId=&quot;your-repo-id&quot;  
  category=&quot;General&quot;  
  categoryId=&quot;your-category-id&quot;  
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/8200216d89e6a9d42452c019a10039d7.png&quot; alt=&quot;image-20250716002449856&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>这个博客的搭建</title><link>https://pcb.im/posts/%E4%BD%BF%E7%94%A8cloudflare-worker%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%E5%B9%B6%E7%94%A8edgeone%E5%8A%A0%E9%80%9F/</link><guid isPermaLink="true">https://pcb.im/posts/%E4%BD%BF%E7%94%A8cloudflare-worker%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%E5%B9%B6%E7%94%A8edgeone%E5%8A%A0%E9%80%9F/</guid><description>本教程介绍了如何使用 Fuwari 框架和 Cloudflare Workers 搭建博客，并利用腾讯云 EdgeOne 进行全球加速。内容涵盖了项目配置、Cloudflare Worker 部署、EdgeOne 加速设置、DNS 分区解析以及 R2 存储桶的流量优化。</description><pubDate>Sun, 13 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;fuwari&lt;/h1&gt;
&lt;p&gt;在fuwari根目录下创建wrangler.jsonc，输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;blog&quot;,
  &quot;compatibility_date&quot;: &quot;2025-07-13&quot;,
  &quot;assets&quot;: {
    &quot;directory&quot;: &quot;./dist&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;name：worker名字&lt;/p&gt;
&lt;h1&gt;cloudflare worker&lt;/h1&gt;
&lt;p&gt;在worker中连接到你的博客github项目&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/f77b1f1adc07f3fbdcc822d58371fd8c.png&quot; alt=&quot;部署命令&quot; /&gt;&lt;/p&gt;
&lt;p&gt;部署完成后在路由里添加yousite.com/*&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/3166f0e8243cd806c74301fb925a4142.png&quot; alt=&quot;添加路由&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;edgeone&lt;/h1&gt;
&lt;p&gt;使用edgeone加速workers.dev（其实可以加速任意绑定到cloudflare的cname，比如说大佬配置好的优选，区别不大）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/3614688eae5cd7294dcf676791e2d37e.png&quot; alt=&quot;edgeone&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;域名解析&lt;/h1&gt;
&lt;p&gt;使用阿里云dns分区域解析&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/a8e6cf7da977c70c90275a7e30b06d45.png&quot; alt=&quot;dns&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;最终表现&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/5d4b339e81c326e4583dde62b37c081e.png&quot; alt=&quot;itdog&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;R2存储桶&lt;/h1&gt;
&lt;p&gt;然后打开你的网站，你会发现r2的流量并不是走的edgeone，我们来解决这个问题
打开cloudflare，点开规则&amp;gt;Cloud Connector&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.pcb.im/2025/07/5dd9cfdf74b9ae31211c2adb0dae11a9.png&quot; alt=&quot;cloudconnector&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后在eo加速源站，dns分流&lt;/p&gt;
</content:encoded></item><item><title>备忘</title><link>https://pcb.im/posts/%E5%A4%87%E5%BF%98/</link><guid isPermaLink="true">https://pcb.im/posts/%E5%A4%87%E5%BF%98/</guid><description>本文记录了新建文章的命令以及一个文字转语音的网站推荐。</description><pubDate>Fri, 01 Jan 1999 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;新建文件&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;pnpm new-post 
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;云函数/Worker服务&lt;/h1&gt;
&lt;h2&gt;Snippet&lt;/h2&gt;
&lt;p&gt;类似CF Worker的云函数服务，提供无限制的免费额度&lt;/p&gt;
&lt;h1&gt;配音&lt;/h1&gt;
&lt;p&gt;https://www.text-to-speech.cn/
晓辰&lt;/p&gt;
</content:encoded></item></channel></rss>