<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on BD4TWO 的博客</title>
    <link>https://blog.bd4two.eu.org/posts/</link>
    <description>Recent content in Posts on BD4TWO 的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 06 Nov 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.bd4two.eu.org/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cloudflare 免费节点与额度线</title>
      <link>https://blog.bd4two.eu.org/posts/cfnew-quota/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/cfnew-quota/</guid>
      <description>&lt;p&gt;免费节点跑在 Cloudflare 上，按 &lt;a href=&#34;https://github.com/byJoey/cfnew&#34;&gt;https://github.com/byJoey/cfnew&lt;/a&gt; 部署到 &lt;a href=&#34;https://lx.snglz.link/sb&#34;&gt;https://lx.snglz.link/sb&lt;/a&gt;，订阅端点是 &lt;a href=&#34;https://lx.snglz.link/sb/sub&#34;&gt;https://lx.snglz.link/sb/sub&lt;/a&gt;，订阅正常下发 82 个节点。部署时核对过：兼容日期 2026-01-20，KV 绑定变量名是 C。优选 IP 源是 5 个 bestcf.pages.dev 地址：tiancheng/hk、tiancheng/sg、tiancheng/jp、tiancheng/kr 加 domain/mini.txt。免费额度有三条独立的线，每条都摸过一遍。&lt;/p&gt;
&lt;p&gt;第一条是 Workers 每日请求数，上限 10 万。实际每天约 9.5 万，只差 5%。10 月 15 日凌晨烧完过一次：Gmail 告警 01:22（76%）、04:32（91%）、06:14（已超限），08:00（00:00 UTC）重置后恢复，09:35 实测订阅 200、82 个节点正常。10 月 16 日凌晨 02:56 才收到 75% 告警，自 08:00 重置起 19 小时仅用 7.5 万，赶不上 8 点重置，订阅实测正常、82 个节点照常下发。按实际速率全天约 9.5 万请求，离 10 万上限只差 5%，白天用得比凌晨多。结论是每天都在额度边缘，一忙就断。升付费版（每月 5 美元）还是先看控制台指标，还没定。&lt;/p&gt;
&lt;p&gt;第二条是 KV 读次数。有天连收 50% 告警，2026-10-21 我进 Cloudflare 控制台只读核查，查了才发现烧量的不是节点用的 lx Worker，而是另一个 Pages 项目 cfnext（域名 cfnext.snglz.link，2026-10-20 下午 15:56、16:24 两次部署）绑定的 cfnext 命名空间（绑定变量名 K）：过去 24 小时读 63k 次，占全账户约 98%。lx Worker 的绑定 C 指向 lx 命名空间，当天仅读 25 次，与其调用数一致，是无辜的。账户共有 7 个 KV 命名空间：cfnext、edge、lx、magic、store-fuck、test、warp。今晨 08:12 第二封 KV 告警与控制台数字对不上（今日全账户仅约 5.5k 读），原因未明，已如实说解释不了。处理 cfnext 还是升级付费版，等拍板。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac 系统停在 15.8.2</title>
      <link>https://blog.bd4two.eu.org/posts/macos-version-hold/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/macos-version-hold/</guid>
      <description>&lt;p&gt;11 月 4 日给自己定了一条规矩：这台 Mac 的系统停在当前版本，不再往上升。以后凡是涉及系统升级的建议，都先确认，不默认推荐升级。这台是 snjesus 的 Mac mini，当前系统是 macOS 15.8.2（Sequoia，Build 24H232），与 BD4TWO 那台 Mac mini（macOS 26.5.2）是两台不同的机器，不要混淆。&lt;/p&gt;
&lt;p&gt;底线先落实。自动更新设置里，&amp;ldquo;下载可用的更新&amp;quot;和&amp;quot;安装 macOS 更新&amp;quot;都已关掉，&amp;ldquo;安装来自 App Store 的应用程序更新&amp;quot;和&amp;quot;安装安全响应和系统文件&amp;quot;留着开。自动更新关了，系统就不会自己升，横幅只是碍眼。&lt;/p&gt;
&lt;p&gt;光有关自动更新还不够，系统还会推送新版本横幅。办法是装一个 90 天延迟描述文件，让新版本晚 90 天再出现。文件是 &lt;code&gt;~/workspace/your_files/DelayMajorUpdates90.mobileconfig&lt;/code&gt;，PayloadIdentifier 是 &lt;code&gt;com.guo.delay-major-updates&lt;/code&gt;，内层类型 &lt;code&gt;com.apple.applicationaccess&lt;/code&gt;、&lt;code&gt;forceDelayedMajorSoftwareUpdates=true&lt;/code&gt;、延迟 90 天。第一版没生效：查安装器列表，新版本那行延迟标志还是 NO。2026-11-04 跑 &lt;code&gt;softwareupdate --list-full-installers&lt;/code&gt;，全部条目 Deferred: NO，含 macOS 27.2（Golden Gate，Build 26B123，12.93GB）、27.0.1、27.0 及 Tahoe 各版。原因是第一版没写 PayloadScope，默认按用户级装，限制类载荷在用户级不生效。改了一版带 PayloadScope System 的，准备重新装。&lt;/p&gt;
&lt;p&gt;这里有个坑：15.8.2 上命令行安装描述文件已被废弃，&lt;code&gt;sudo profiles install&lt;/code&gt; 被系统拒绝，报错&amp;quot;profiles tool no longer supports installs. Use System Settings Profiles to add configuration profiles.&amp;quot;，必须走图形界面——系统设置、通用、设备管理里装。流程是先删掉旧的描述文件，再双击新文件，在设备管理里批准，装完重跑安装器列表，看 27.2 那行延迟标志是否变成 YES；若仍 NO，则手动安装的限制类描述文件在此系统上确实不被采纳，放弃藏横幅、只靠关自动更新。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac 小工具</title>
      <link>https://blog.bd4two.eu.org/posts/mac-tools/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/mac-tools/</guid>
      <description>&lt;p&gt;11 月初给 Mac 挑了几样小工具：动态壁纸、文本编辑器、终端。每一件都按实际需求分开算，不给笼统的&amp;quot;最好用&amp;quot;。&lt;/p&gt;
&lt;p&gt;动态壁纸想要黑客帝国瀑布式数字雨。做法是自己写一个单文件网页 matrix-rain.html（canvas 数字雨，绿字拖尾、亮雨头，顶部常数 FONT_SIZE/TRAIL/SPEED_MIN/SPEED_MAX 可调密度、速度、拖尾，约 30fps，页面隐藏自动暂停），在 ~/workspace/your_files/matrix-rain.html；再用免费应用 Plash 把这个本地网页（file:// 完整路径）设为桌面。限制要先说清楚：只在解锁后的桌面可见，锁屏看不到；Plash 最新版要求 macOS 26.4 以上，15.8.2 要用匹配系统的旧版。装好没有、显示正不正常，还没确认。&lt;/p&gt;
&lt;p&gt;文本编辑器问了三轮，答案得分开算。只装一个，选 VS Code，免费、插件、Git、终端、调试一体，有微软官方简体中文语言包。纯文本处理选 BBEdit，下载包最小（App Store 标 23.7MB），但界面只有英文、无中文界面，编辑中文内容不受影响。跑起来最轻快是 Zed，空闲内存约 50–100MB，VS Code 约 300–500MB。后来又补了一个同时满足小巧加中文界面的：CotEditor，免费、Mac 原生、带简体中文，App Store 标 18.7MB（比 BBEdit 还小），支持 CJK；但它是纯文本编辑器不是 IDE，写代码做项目还是 VS Code；App Store 最新版 7.1.3 要求 macOS 26.0 以上，低于 26 需用匹配系统的旧版。选哪个还没定。&lt;/p&gt;
&lt;p&gt;终端默认推荐 Ghostty（2026 年共识默认，快、原生 Metal 渲染、免费开源、零配置开箱即用，&lt;code&gt;brew install --cask ghostty&lt;/code&gt;），功能最多的备选是 iTerm2（分屏、触发器、原生 tmux 集成、图形设置），想要 AI 和分块功能的可以看 Warp（客户端 2026 年 4 月开源、AGPL，登录自 2024 年 11 月起不再强制）。装没装还没确认。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Muse Terminal AI Passport</title>
      <link>https://blog.bd4two.eu.org/posts/ai-passport/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/ai-passport/</guid>
      <description>&lt;p&gt;10 月 10 日开始在 Mac mini 上装一套硬件桥接：把 AI 会话接到一个终端设备上，项目是 muse-terminal-ai-passport（github.com/jonwong0882-source/muse-terminal-ai-passport），把 FoloToy AI Passport 改成访问我自己 Muse 会话的语音终端。装在 BD4TWO 的 Mac mini 上，主目录 /Users/snjesus，macOS 26.5.2，Python 3.13（/opt/homebrew/bin/python3.13）。包和固件都按校验和验过，没问题：最新 Release 是 v1.0.0（唯一发布），ZIP 完整性 OK，SHA256SUMS.json 全部 170 条哈希逐一核对一致，固件 FoloToy-AI-Passport-full.bin 的 SHA-256 是 ef16688d7de00035e94ddc607ec5265f4f1fb8105ae0141e3d4e1fb7b3714fc9，与文档要求一致，是从 0x0 刷写的合并镜像。&lt;/p&gt;
&lt;p&gt;装的过程中遇到一个小插曲：桥接代码写死走 Chrome，但我不想装 Chrome（这台只装了 Edge 和 Safari）。解决办法是改一行代码，让它走我已有的 Edge：source/companion/muse_web.py 里 &lt;code&gt;channel=&#39;chrome&#39;&lt;/code&gt; 改成 &lt;code&gt;channel=&#39;msedge&#39;&lt;/code&gt;，改之前原文件做了备份（muse_web.py.orig）。虚拟环境在 &lt;code&gt;~/Library/Application Support/MuseTerminal/venv&lt;/code&gt;，esptool 5.5.0、aiohttp 3.13.3、faster-whisper 1.2.1、playwright 1.63.0、pyserial 3.5 均在位。&lt;/p&gt;
&lt;p&gt;真正卡住的地方在健康检查。桥要找会话页面的输入框来确认就绪，但我给它的地址是个侧边对话（side chat），页面结构和普通主会话不一样，输入框根本不存在，健康检查一直报 muse_ready=false、no_composer（speech_ready=true）。串口和刷固件的步骤必须等桥健康之后再做，顺序不能乱。串口候选有两个：/dev/cu.usbmodem21201 是当日新出现、疑似 Passport，/dev/cu.usbmodem2020_12_222 是既有的，尚未经插拔比对确认，禁止凭猜测刷机。&lt;/p&gt;
&lt;p&gt;下一步很具体：在桥专用的浏览器窗口里打开一个普通主会话，发一句&amp;quot;hello&amp;quot;，把新的 muse.ai/thread/ 地址给我，重启桥再验健康。&lt;/p&gt;
&lt;p&gt;现状：等这条普通主会话链接，桥接停在我这边。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Newifi D1 精简 MMDVM 固件</title>
      <link>https://blog.bd4two.eu.org/posts/d1-mmdvm-firmware/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/d1-mmdvm-firmware/</guid>
      <description>&lt;p&gt;手里这台 Newifi D1 是我的 MMDVM 数字热点用机，联想 Newifi D1，MT7621AT 双核 880MHz、256MB 内存、32MB 闪存加 128MB NAND、USB 2.0 加 USB 3.0、TF 卡槽。现用固件是定制版&amp;quot;江苏曈宇 2026.10 / MMDVM数字热点&amp;quot;，内核 5.4.255，截图显示内存总量 245.13MiB、可用 156.78MiB。现用固件里塞了不少用不上的插件，11 月 5 日决定自己编一套精简版，只留要用的东西。&lt;/p&gt;
&lt;p&gt;规格先定死：全模式都要（D-Star、DMR、YSF、P25、NXDN、POCSAG、FM），热点板走 /dev/ttyS0（板载 UART，115200），配置由我手动填、服务默认不启用。呼号 BD4TWO 预填进 MMDVM.ini 及各网关配置模板的 Callsign 栏，DMR ID、频率、服务器密码留空占位，绝不编造。型号栏显示&amp;quot;Newifi-D1 by BD4TWO&amp;quot;（现固件显示的是 Newifi-D1 by BI4PCS），仪表盘也要带上（DG9VH MMDVMHost-Dashboard PHP 版）。底座用官方 OpenWrt 24.10.5 Image Builder（profile lenovo_newifi-d1），镜像上限 IMAGE_SIZE 32448k，刷机走 Breed，不保留旧配置。固件默认 LAN 地址沿用官方 OpenWrt 的 192.168.1.1（LuCI http://192.168.1.1，SSH &lt;a href=&#34;mailto:root@192.168.1.1&#34;&gt;root@192.168.1.1&lt;/a&gt;，首次无密码）。&lt;/p&gt;
&lt;p&gt;第一版很快编出来了，13,894,743 字节，SHA256 是 f8e1148ec6e3a1b796073076d228c7ede0733f8a9502f9d56e478208dde0820c，刷上去却起不来：蓝灯一直闪，Mac 直连拿到 169.254.13.87 自分配地址（子网 255.255.0.0，无路由器），说明未获 DHCP，打不开 192.168.1.1。蓝灯是 gpio16 系统灯，正常启动完成应常亮，一直闪就是未启动完、安全模式或启动循环。查编译日志没报错，镜像结构也对得上。起初怀疑网线插错了口——这台机器一共只有 3 个网口（1 个 WAN 加 2 个 LAN），我之前还错说成 4 个 LAN 口。Breed 重刷还是一样。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Panabit 上禁 IP</title>
      <link>https://blog.bd4two.eu.org/posts/panabit-block-ip/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/panabit-block-ip/</guid>
      <description>&lt;p&gt;家里在用 Panabit 流控标准版（新版 UI），管理地址是 https://10.0.0.9，账号 snjesus。有次想禁掉一个地址，管理页里现成的示范规则看着很像答案，但用错地方会白忙一场。&lt;/p&gt;
&lt;p&gt;关键区别是：DNS 管控只能断 DNS 查询。DNS 管控 → 策略管理页已有现成规则示范：402（目标地址=恶意地址、动作丢弃）、403（源地址=恶意地址、动作丢弃），用地址对象 + 丢弃动作拦流量。照着 402/403 在 DNS 管控里仿一条，只能拦住域名解析，对方直接连 IP 地址照样通。想断掉某个地址的全部流量，得走流量控制：建一条策略组匹配那个地址，绑到一个上下行带宽都是 0 的数据通道上，等于阻断。先在「数据通道」新建一条上下行填 0、命名&amp;quot;阻断&amp;quot;，再在策略组里绑它。&lt;/p&gt;
&lt;p&gt;策略组和地址对象、丢弃动作的用法，管理页里已有现成规则可以照着抄，照猫画虎不难。真正没验证过的是 0 带宽通道能不能保存下来——如果保存时报错，就把报错截图回来再看。还有一点：这条规则只对那一个地址生效，别误伤正常流量。&lt;/p&gt;
&lt;p&gt;现状：方法已定，0 带宽通道能否保存、实测效果如何，等反馈。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 上 Steam 打不开</title>
      <link>https://blog.bd4two.eu.org/posts/steam-ubuntu/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/steam-ubuntu/</guid>
      <description>&lt;p&gt;Steam 装在一台 Ubuntu 机器上，10 月 28 日启动失败。这台是联想 ThinkCentre E77（bd4two@bd4two-ThinkCentre-E77），系统是 Ubuntu 24.04 64-bit，不是 Mac mini，跨机器排查必须先写死执行位置，之前就因为默认成 Mac mini 给错过办法。&lt;/p&gt;
&lt;p&gt;客户端能打开，但卡在下载更新清单那一步：从 client-update.steamstatic.com 下载更新清单失败，http error 0，报错提示需要联网更新——可机器明明是联网的。&lt;/p&gt;
&lt;p&gt;有意思的是，崩溃上报能上传成功，说明一般出网是通的。问题收窄到 Steam 更新服务器这一条线：客户端连不上更新服务器，但别的出网正常。&lt;/p&gt;
&lt;p&gt;下一步是查两样东西：终端里的代理环境变量（&lt;code&gt;env | grep -i proxy&lt;/code&gt;），和对更新服务器地址做一次带超时的连通性检查（&lt;code&gt;curl -sI -m 10 https://client-update.steamstatic.com/steam_client_ubuntu12&lt;/code&gt;）。代理如果配错了，Steam 这类程序可能走了错误的出口；连通性检查能区分是域名解析、连接还是传输层面的问题。&lt;/p&gt;
&lt;p&gt;现状：等这两项检查结果再判。顺带给自己立个规矩：在 Steam 修好之前，商店打折先别买，买了也玩不了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>X API 按量计费变更</title>
      <link>https://blog.bd4two.eu.org/posts/x-api-billing/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/x-api-billing/</guid>
      <description>&lt;p&gt;11 月 5 日收到一封计费变更邮件（X Developer Accounts，21:02 UTC）：我的账号 @gp800911 在用 X API 的按量计费（PPU）。11 月 22 日起，请求里 expansions 返回的对象也要按标准费率计费，以前这部分是不计费的。&lt;/p&gt;
&lt;p&gt;单价是每个对象计费：Post $0.005、User $0.010、Media $0.005、Poll $0.005、Place $0.005。用户对象最贵。以前只算主请求，现在展开带回来的每个对象都算钱，调用量大的话涨幅不小。&lt;/p&gt;
&lt;p&gt;要做的事很明确：11 月 22 日之前，把各个请求用的 expansions 检查一遍，不用的删掉。我的实际用量和调用程序还没核实，涨多少算不出来，先把能省的省掉。&lt;/p&gt;
&lt;p&gt;提醒已经发出过一次（2026-11-06 上午 10:32），不再重复。这篇就是留个记录：11 月 22 日是死线，检查 expansions，别等到账单来了才发现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客建站记录</title>
      <link>https://blog.bd4two.eu.org/posts/blog-setup/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/blog-setup/</guid>
      <description>&lt;p&gt;今天把这个博客搭起来了，记录一下过程，免得以后忘了。&lt;/p&gt;
&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;
&lt;p&gt;一个个人博客，域名用自己的 &lt;code&gt;blog.bd4two.eu.org&lt;/code&gt;，以后写无线电、技术和生活方面的东西。要求就一个：免费、稳定、自己能控制。&lt;/p&gt;
&lt;h2 id=&#34;第一次尝试googiehost没成&#34;&gt;第一次尝试：GoogieHost，没成&lt;/h2&gt;
&lt;p&gt;一开始想走 GoogieHost 的免费主机，注册、选域名、下单都走完了，订单号都拿到了，结果被拒。拒的原因写得很直白：订单国家在中国，而中国在他们的禁用名单上。免费主机这条路就这么断了。&lt;/p&gt;
&lt;h2 id=&#34;改走-cloudflare-pages--hugo&#34;&gt;改走 Cloudflare Pages + Hugo&lt;/h2&gt;
&lt;p&gt;免费主机被拒后，改成静态博客的路线：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hugo&lt;/strong&gt;：静态站点生成器，写 Markdown 就能出站，没有数据库、没有后台，简单可靠。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;：源码放在 &lt;code&gt;snjesus/hugo-blog&lt;/code&gt;，推到 main 分支即是发布。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Pages&lt;/strong&gt;：接 GitHub 仓库，推代码自动构建部署，免费额度个人博客完全够用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;域名&lt;/strong&gt;：&lt;code&gt;blog.bd4two.eu.org&lt;/code&gt;，在 Cloudflare 上做 CNAME 指向 Pages，SSL 自动配好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;中间有个小插曲：GitHub 上本来已经有个 &lt;code&gt;snjesus/blog&lt;/code&gt; 的库，里面是另一套完整的博客系统（Qingyu&amp;rsquo;Blog），不是空库。所以 Hugo 这套单独建了个新库 &lt;code&gt;hugo-blog&lt;/code&gt;，没去动原来的那个。&lt;/p&gt;
&lt;h2 id=&#34;搭建步骤&#34;&gt;搭建步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;本地用 Hugo 建站，标题定为“BD4TWO 的博客”，写了篇欢迎帖占位。&lt;/li&gt;
&lt;li&gt;GitHub 上新建公开空仓库 &lt;code&gt;snjesus/hugo-blog&lt;/code&gt;，把源码推上去。&lt;/li&gt;
&lt;li&gt;Cloudflare 上新建 Pages 项目 &lt;code&gt;hugo-blog&lt;/code&gt;，连接这个仓库，生产分支 main。&lt;/li&gt;
&lt;li&gt;构建设置：框架 Hugo，构建命令 &lt;code&gt;hugo&lt;/code&gt;，输出目录 &lt;code&gt;public&lt;/code&gt;，环境变量 &lt;code&gt;HUGO_VERSION=0.169.0&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;首次部署成功后，给项目加自定义域名 &lt;code&gt;blog.bd4two.eu.org&lt;/code&gt;，Cloudflare 自动加了 CNAME 记录并启用 SSL。&lt;/li&gt;
&lt;li&gt;打开 &lt;code&gt;https://blog.bd4two.eu.org/&lt;/code&gt; 验证，首页正常，标题、简介、文章列表都在。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;写文章的方法&#34;&gt;写文章的方法&lt;/h2&gt;
&lt;p&gt;以后写新文章很简单：在仓库的 &lt;code&gt;content/posts/&lt;/code&gt; 里新建一个 Markdown 文件，文件头写标题和日期，正文写内容，推到 main 分支，Pages 会自动重新部署，几分钟后就能在博客上看到。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客上线后的改动记录</title>
      <link>https://blog.bd4two.eu.org/posts/blog-changes-after-launch/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/blog-changes-after-launch/</guid>
      <description>&lt;p&gt;博客上线之后又做了几处改动：换 PaperMod 主题、关于页加图片、标题栏图标换成头像图、关于页图片改小并挪到呼号前面。这里把每一步的原样记录下来，包括涉及的地址和细节。&lt;/p&gt;
&lt;h2 id=&#34;换-papermod-主题&#34;&gt;换 PaperMod 主题&lt;/h2&gt;
&lt;p&gt;上线时用的是自己写的极简模板，后来觉得功能太少，换成了 PaperMod。PaperMod 是 GitHub 上约 1.3 万星的开源主题，MIT 协议，零 JS 构建工具，自带搜索、深浅色切换、目录、面包屑、封面图、多语言支持，不用 Node 和 Ruby，Cloudflare Pages 自带的 Hugo 就能编。&lt;/p&gt;
&lt;p&gt;安装没走常规的子模块或 Hugo Modules 路线，而是把主题文件直接拷进仓库根目录的 &lt;code&gt;layouts/&lt;/code&gt;、&lt;code&gt;assets/&lt;/code&gt;、&lt;code&gt;i18n/&lt;/code&gt;，一共 121 个文件。旧的 4 个自定义模板（&lt;code&gt;layouts/_default/baseof.html&lt;/code&gt;、&lt;code&gt;list.html&lt;/code&gt;、&lt;code&gt;single.html&lt;/code&gt;、&lt;code&gt;layouts/index.html&lt;/code&gt;）被 PaperMod 的对应内容覆盖，&lt;code&gt;static/css/style.css&lt;/code&gt; 改成一行注释弃用。PaperMod 要求 Hugo 不低于 0.158.0，当前用的 0.169.0 符合。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hugo.toml&lt;/code&gt; 按 PaperMod 的要求改了一遍：&lt;code&gt;locale = &amp;quot;zh-cn&amp;quot;&lt;/code&gt;、&lt;code&gt;defaultContentLanguage = &amp;quot;zh-cn&amp;quot;&lt;/code&gt;（&lt;code&gt;languageCode&lt;/code&gt; 在 Hugo 0.158 起已废弃，改用 &lt;code&gt;locale&lt;/code&gt;）、&lt;code&gt;mainSections = [&amp;quot;posts&amp;quot;]&lt;/code&gt;（PaperMod 首页靠它取文章列表）、菜单加了首页、归档、搜索、关于，&lt;code&gt;[outputs] home&lt;/code&gt; 加了 &lt;code&gt;JSON&lt;/code&gt;（给搜索索引用），params 里阅读时间、分享按钮、上下篇导航、面包屑、代码复制按钮、目录都打开，&lt;code&gt;defaultTheme = &amp;quot;auto&amp;quot;&lt;/code&gt;。另外新建了 &lt;code&gt;content/archives.md&lt;/code&gt; 和 &lt;code&gt;content/search.md&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;推送提交是 &lt;code&gt;dbd66fcd48458e363ee461c52e2fd595b6476af3&lt;/code&gt;。本地构建通过，Pages 部署后复核：首页 200 且含 PaperMod 标记，搜索索引 &lt;code&gt;index.json&lt;/code&gt; 200，归档和搜索页 200，文章页有 &lt;code&gt;post-single&lt;/code&gt; 类，中文界面串（分钟、归档、搜索）正常，&lt;code&gt;html lang=&amp;quot;zh-cn&amp;quot;&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给 Nintendo DS 编译 2008 年的 NeoDS</title>
      <link>https://blog.bd4two.eu.org/posts/neods-build/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/neods-build/</guid>
      <description>&lt;p&gt;手里有一台 Nintendo DS LL，11 月 2 日想在上面跑 NeoGeo 模拟器 NeoDS。它的源码是 &lt;a href=&#34;https://github.com/Yardape8000/NeoDS&#34;&gt;https://github.com/Yardape8000/NeoDS&lt;/a&gt;，2008 年的 v0.2.0，十八年前的老代码，要用现代的 devkitARM 和 libnds 编通。&lt;/p&gt;
&lt;p&gt;老源码和新工具链之间有不少不兼容的地方。做法是加了一个兼容补丁头文件 common/source/compat-nds.h，在编译时用 &lt;code&gt;-include&lt;/code&gt; 注入，修掉新旧接口对不上的地方（旧寄存器/函数名映射，如 SOUND_CR、BLEND_CR→REG_BLDCNT、CARD_&lt;em&gt;→现代 REG_&lt;/em&gt;、powerON→powerOn、irqInit/rtcReset 空操作、touchReadXY 包一层现代 touchRead、strcmpi→strcasecmp、vramSetMainBanks→vramSetPrimaryBanks 等），再配上合适的链接参数：Makefile 改用 calico 的 ds7/ds9 specs、链 -lcalico_ds7/-lcalico_ds9，arm9 INCLUDES 补 ../Cyclone2，objcopy 剥掉 .twl* 段（否则 ARM7 二进制被段间空洞撑到 11MB），去掉现代 GCC 已不支持的 -mno-fpu。内存是真正的硬约束：DS 模式下的可用内存有上限，ARM9 的堆必须缩小才能塞进去。最后把 arm9/source/EmuSystem.c 里的 &lt;code&gt;g_mainRam&lt;/code&gt; 从 &lt;code&gt;[1*MB+600*KB]&lt;/code&gt; 缩小到 &lt;code&gt;[1*MB+128*KB]&lt;/code&gt;，只影响大游戏的精灵缓存，不影响兼容性。&lt;/p&gt;
&lt;p&gt;工具链安装也费了一番事：devkitPro 官方 install-devkitpro-pacman 脚本因 apt 源 GPG 密钥缺失（NO_PUBKEY）失败，密钥本身已在带外核实是 devkitPro 官方签名密钥（指纹 ……C9D672AF4128A2F1），只是 apt 验签环节走不通，最后走通的是绕过 apt 验签（&lt;code&gt;apt-get update -o Acquire::AllowInsecureRepositories=true&lt;/code&gt; + &lt;code&gt;apt-get install --allow-unauthenticated devkitpro-pacman&lt;/code&gt;），装好 dkp-pacman 后用 &lt;code&gt;dkp-pacman -S nds-dev&lt;/code&gt; 装齐 devkitARM + libnds + calico 于 /opt/devkitpro。&lt;/p&gt;</description>
    </item>
    <item>
      <title>黑苹果装机</title>
      <link>https://blog.bd4two.eu.org/posts/hackintosh/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/hackintosh/</guid>
      <description>&lt;p&gt;11 月 4 日开始折腾黑苹果装机，先是显卡选型，再是硬盘分区，两个都是决定成败的点。&lt;/p&gt;
&lt;p&gt;显卡是 RX 560 对 GTX 1050 Ti，两张都是 4G 显存。玩游戏在 Windows 上，1050 Ti 更强；但黑苹果只能选 RX 560——1050 Ti 自从 Mojave 起就没有 NVIDIA Web Driver 了，而 RX 560 是 macOS 原生免驱。选 RX 560 还有讲究：要 1024 个流处理器的满血版，避开 896 个流处理器的阉割版（560D）；避开 XFX 的卡，有 BIOS 兼容问题；蓝宝石 Pulse 相对稳。&lt;/p&gt;
&lt;p&gt;接着是装机盘。目标是一块 500GB 的内置盘 disk1，2026-11-05 00:15 我在安装器终端跑 &lt;code&gt;diskutil list&lt;/code&gt; 发来照片，盘况是：disk1 是内置 500GB，GUID 分区表但确实没有 EFI 分区——容器直接就是 disk1s1，正常应该是 disk1s1 是约 209.7MB 的 EFI、disk1s2 才是容器。盘上已建空宗卷 MacOS，仅 24.6KB，基本是空的。原因是之前抹盘时只抹了宗卷、没动分区表，所以没生出 EFI。修复办法是整盘重抹：磁盘工具里显示所有设备，选中 disk1 整盘，方案选 GUID 分区图、格式 APFS，抹完再跑 &lt;code&gt;diskutil list&lt;/code&gt;，确认 disk1s1 出现约 209.7MB 的 EFI。MacOS 宗卷是空的，重抹不丢东西。另外 disk3 是内置 1TB，宗卷名&amp;quot;此硬盘不用&amp;quot;，绝对不动；disk4 是外置 8GB U 盘（MBR/FAT32，卷名&amp;quot;1401&amp;quot;），是 1401 工具做的安装盘，已能引导进安装器，不用管。&lt;/p&gt;</description>
    </item>
    <item>
      <title>家里网络：爱快、Lucky 与隧道</title>
      <link>https://blog.bd4two.eu.org/posts/home-network/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/home-network/</guid>
      <description>&lt;p&gt;家里宽带有公网 IP，但运营商封了 80 和 443 入站。想不带端口访问内网服务，路子是两条：内网用 Lucky 反向代理，外网真免端口得走 Cloudflare Tunnel。&lt;/p&gt;
&lt;p&gt;爱快网关是 192.168.31.1，docker 网段是 172.18.20.x，Lucky 容器是 172.18.20.2，docker 网关 172.18.20.1 已确认就在爱快本机上。Lucky 是以 Docker 方式跑在爱快路由器上的，实测版本 2.20.2 自带 Cloudflared 模块，不用另起 cloudflared 容器，直接在 Lucky 后台（http://爱快IP:16601）的 Cloudflared（或&amp;quot;隧道&amp;quot;）模块里配。隧道在 Cloudflare 控制台建好，名叫 home，把令牌填进 Lucky 的隧道模块——第一次填错了，填的是隧道 ID（UUID）而不是 eyJh 开头的真正令牌，换对之后就通了，guo 亲口确认&amp;quot;通了&amp;quot;，Cloudflare 侧 1 个连接器状态正常。随后给 NAS 加了公网路由：nas.bd4two.eu.org → https://192.168.31.5（服务类型 HTTPS），NAS 内网地址是 https://192.168.31.5（飞牛 fnOS，HTTPS，默认 443 端口）。一开始报 502，原因是 NAS 的自签证书过不了 Cloudflare 的 TLS 校验，开了 No TLS Verify 就好了，2026-10-16 公网实测能打开 NAS 登录页。Lucky 管理后台只监听 HTTP（16601 端口，没有 HTTPS），加路由时服务类型必须选 HTTP、URL 填 http://127.0.0.1:16601，公网侧仍走 HTTPS（Cloudflare 自动套证书），只是隧道到家内网这一段走 HTTP。&lt;/p&gt;</description>
    </item>
    <item>
      <title>群晖 DS1621&#43; 网卡与 PS4 9.00 玩暗黑 3</title>
      <link>https://blog.bd4two.eu.org/posts/synology-ps4/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/synology-ps4/</guid>
      <description>&lt;p&gt;这篇记两件不相干的硬件事：群晖 NAS 加万兆网卡，和已折腾的 PS4 能不能玩暗黑破坏神 3。&lt;/p&gt;
&lt;p&gt;群晖是 DS1621+，6 盘位，AMD Ryzen V1500B，自带 4 个千兆口，1 个 PCIe 3.0 x8 插槽，2 个内置 M.2 槽。官方兼容、免驱的答案是单口电口万兆卡 E10G18-T1（RJ45，100M/1G/2.5G/5G/10G 自动协商，一张卡覆盖 2.5G 和 10G），双口则 E10G18-T2；官方兼容列表里还有 E10G21-F2、E25G21-F2、E10G17-F2。别买带 M.2 的 E10M20-T1——这台机器自带两个 M.2 插槽，买了也是重复；另外 E10G30 系列的万兆卡没有这台机器的官方兼容记录，别碰。第三方芯片的卡（如 RTL8125）要另外装驱动包，不算免驱。家里还有一台基于 Debian 的飞牛 NAS，它的驱动支持和群晖是两回事，答案别混在一起。&lt;/p&gt;
&lt;p&gt;PS4 是已折腾过的 9.00 系统。暗黑破坏神 3 的离线部分能玩：单人战役、非赛季内容、本地同屏都可以；赛季和在线联机不行（创建赛季角色需要 PSN）。两条红线：别升级系统；每次彻底关机重启后，都要重跑一遍 GoldHEN，不然游戏打不开。&lt;/p&gt;
&lt;p&gt;现状：两件都已给出结论，网卡还没买，游戏还没试。&lt;/p&gt;</description>
    </item>
    <item>
      <title>通讯录大整理与自动同步</title>
      <link>https://blog.bd4two.eu.org/posts/contacts-sync/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/contacts-sync/</guid>
      <description>&lt;p&gt;手机、Google、Outlook、iCloud 四处通讯录各存各的，数量对不上。11 月 1 日花了一天把它理了一遍，顺便把每周自动同步的规矩定下来。&lt;/p&gt;
&lt;p&gt;先是手机。起初直读返回 0 条，差点以为是空的，其实是通讯录权限没开——空列表不等于没数据，权限一开就读到 290 条。手机里 iCloud 和 Exchange 是两个独立账本，数量不同本身不是故障。清理掉 4 组重复：吴崇与徐艳红共用号 13615123028，按我的决定不合并两人，只从吴崇名下删掉该号（吴崇只剩 051688397689、15365855689），该号仍留在徐艳红名下；吴电信留、电信威尼斯删（同号 19352260828）；高岳留、高月删（同号 15312665897，同音名）；两个梁金龙合并为一条、含双号 19962765688 与 15190769528，多余一条已删。改后手机 290 条变 287 条。再删掉 12 条只有名字、没有电话邮箱的空条：BH4JBV 王珂、bh1nyr 刘嘉、glxp 陆、夏伟、孙庆辉、张迪医保、李川、王二超、王航、胡钰嘉、赵从荣、郭良，剩下 275 条。&lt;/p&gt;
&lt;p&gt;然后以 Outlook 为主归一。手机上有、Outlook 里没有的共 60 条，40 条新建导入、18 条只有名字的补上号码；两条不导，一条是王宁（2026-10-11 我亲手从 Google 和 Outlook 两边删掉的，电话 13952121861，导回 Outlook 会被周同步再推回 Google，等于复活），一条是郭鹏（我自己的名片）。归一后 Outlook 从 233 条涨到 273 条，手机关掉 iCloud 通讯录后也是 273 条，两边对齐。iCloud 云端原数据还在，没动。导入后 Exchange 回推使手机短暂变为 314 条（275 条加 40 条回推、佳佳同名同号自动合并 1 条），是迁移中间态，不是遗漏。&lt;/p&gt;</description>
    </item>
    <item>
      <title>网页端《传奇》部署准备</title>
      <link>https://blog.bd4two.eu.org/posts/mir2-web/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/mir2-web/</guid>
      <description>&lt;p&gt;想在家里把网页端《传奇》跑起来，部署目标是爱快路由器的 Docker。选的方案是 github.com/zombieliu/mir2 的 mir2-web3，一个社区重制项目，不是盛大官方原版，这点先说清楚。&lt;/p&gt;
&lt;p&gt;部署方式是 Docker，官方 dev.sh + compose.developer.yml，一条命令 &lt;code&gt;./scripts/dev.sh up --build&lt;/code&gt; 拉起。默认端口都只绑 127.0.0.1：玩家页面 3002、网关 WebSocket/健康检查 7110（/ws、/health）、Crystal TCP 7000。局域网或外网访问要改网关地址配置（MIR2_BIND_ADDRESS 和 NEXT_PUBLIC_MIR2_GATEWAY_WS_URL，前端默认网关地址是 ws://127.0.0.1:7110/ws）。仓库自带的只是精简的 starter 素材，完整素材包约 18GB，是私有的，需要找作者授权才能拿到。首次运行还要在本地编译 Rust 代码，是开发环境的做法，比较吃内存和磁盘。&lt;/p&gt;
&lt;p&gt;动手之前先摸清机器底子：系统架构、内存、磁盘余量这些。内存和磁盘得够，架构得对得上镜像，否则编到一半才发现跑不起来。第一步的环境核查命令是 &lt;code&gt;docker --version; docker compose version; git --version; uname -m; free -h; df -h /&lt;/code&gt;，门槛是 x86_64、内存 4G 以上、磁盘 20G 以上。&lt;/p&gt;
&lt;p&gt;现状：等机器配置输出，达标再开始部署。素材授权和完整包的获取方式也还没定。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微信桥</title>
      <link>https://blog.bd4two.eu.org/posts/wechat-bridge/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/wechat-bridge/</guid>
      <description>&lt;p&gt;10 月 11 日把微信接进了现在的会话：从微信发文字任务过来，实际执行完，结果再回微信，全程中文。要求就一个实在：只回罐头文字不算接通，必须真的能执行。&lt;/p&gt;
&lt;p&gt;实现在 ~/workspace/wechat-bridge/bridge.py，用 openclaw-weixin 协议，标准库写成，子命令 login/wait-login/pump/send/status/serve/doctor 自测通过。登录用扫码，扫一次会话保存下来，收发服务按 15 秒一个周期轮询（hook wechat-bridge，每 15 秒 pump 一轮 + wake worker 执行任务），未用 systemd。只处理扫码绑定账号发来的私聊文字，群消息和别人的消息一律忽略；图片、视频、语音、文件这类内容暂时不处理，会回一句&amp;quot;这条通道暂时没有配置这类内容处理，请先用文字描述&amp;quot;。修过一个 bug：sendMessage 无 ret 字段时按协议应视为成功，原代码误判为失败重试。&lt;/p&gt;
&lt;p&gt;验收分了两层，都在当天通过。第一层是我从微信发一句&amp;quot;你好&amp;quot;，回复到了，我确认收到。第二层是我从微信发任务，让打开 &lt;a href=&#34;https://xlx.bd4two.site&#34;&gt;https://xlx.bd4two.site&lt;/a&gt; 把网页标题读给我，执行端真的打开了页面，标题&amp;quot;XLX516 Reflector Dashboard&amp;quot;回到了微信，我又独立核对了一遍标题，确认无误。&lt;/p&gt;
&lt;p&gt;微信里的对话就留在微信，后台有个执行器在跑；只有需要我动手的事（比如掉线后重新扫码）才会在主聊天里提醒。如果哪项能力缺失，就直说缺什么，不拿半成品冒充完整接入。&lt;/p&gt;
&lt;p&gt;现状：桥已验收通过，日常使用中。掉线重扫是唯一需要我介入的环节。&lt;/p&gt;</description>
    </item>
    <item>
      <title>云服务器巡检手记</title>
      <link>https://blog.bd4two.eu.org/posts/vps-maintenance/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.bd4two.eu.org/posts/vps-maintenance/</guid>
      <description>&lt;p&gt;有一台腾讯云香港的云服务器，公网 IP 是 43.163.94.168，实例名 VM-0-16-ubuntu，Ubuntu 24.04，2 核 2G，用户是 ubuntu。我的运行环境出口代理不放行 SSH，直连不上，所以维护方式定下来是：我给只读巡检脚本，他在机器上跑、把输出贴回来，我诊断、定维护动作。巡检脚本在 &lt;code&gt;~/workspace/vps/inspect/vps-inspect.sh&lt;/code&gt;，新版里加了一节专门定位 networkctl 噪音来源。&lt;/p&gt;
&lt;p&gt;上面跑的服务有 x-ui、mtg（MTProto）、openclaw-gateway，之前还有一条 cloudflared argo 隧道（2026-10-28 由 guo 删了）。第一次巡检（2026-10-12）时机器已稳定运行 116 天，30 个服务都在跑、0 个失败；磁盘用了 68%，内存还剩 1.4G；待更新包 297 个，ufw 没开、公网监听 20 多个端口，SSH 公网 22 端口有扫描噪音；还有个 networkctl 的报错反复出现，报 fov3/fov7 这类不存在的网卡，像是有脚本在轮询不存在的网卡。&lt;/p&gt;
&lt;p&gt;维护建议给了几条：apt upgrade、开防火墙或确认安全组、确认 SSH 只允许密钥登录、查 networkctl 噪音来源。第二次巡检，待更新包从 297 清到 0，系统也从 24.04.4 升到了 24.04.5。但抓到一个新情况：openclaw-gateway 的内存从 54MB 涨到 486MB，还带了 3 个 chrome 进程，1 分钟负载 4.62，对 2 核机器偏高，像是在跑浏览器相关的重活，请他核查是不是他触发的。&lt;/p&gt;
&lt;p&gt;networkctl 噪音的来源还没定位到。新版巡检脚本里加了专门定位的一节，但那次没抓到现行：发作时没有进程残留，journal 里也没有留下是谁拉起的，常见路径也搜不到调用者。判断是阵发性的、无害的，不影响运行；要抓就跑一小时蹲守命令，或者先放着，他还没决定。&lt;/p&gt;
&lt;p&gt;现状：巡检脚本已有含噪音定位的新版，下次用新版；内存突增和噪音蹲守这两件事等他核查后定。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
