给 Nintendo DS 编译 2008 年的 NeoDS

手里有一台 Nintendo DS LL,11 月 2 日想在上面跑 NeoGeo 模拟器 NeoDS。它的源码是 https://github.com/Yardape8000/NeoDS,2008 年的 v0.2.0,十八年前的老代码,要用现代的 devkitARM 和 libnds 编通。 老源码和新工具链之间有不少不兼容的地方。做法是加了一个兼容补丁头文件 common/source/compat-nds.h,在编译时用 -include 注入,修掉新旧接口对不上的地方(旧寄存器/函数名映射,如 SOUND_CR、BLEND_CR→REG_BLDCNT、CARD_→现代 REG_、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 里的 g_mainRam 从 [1*MB+600*KB] 缩小到 [1*MB+128*KB],只影响大游戏的精灵缓存,不影响兼容性。 工具链安装也费了一番事:devkitPro 官方 install-devkitpro-pacman 脚本因 apt 源 GPG 密钥缺失(NO_PUBKEY)失败,密钥本身已在带外核实是 devkitPro 官方签名密钥(指纹 ……C9D672AF4128A2F1),只是 apt 验签环节走不通,最后走通的是绕过 apt 验签(apt-get update -o Acquire::AllowInsecureRepositories=true + apt-get install --allow-unauthenticated devkitpro-pacman),装好 dkp-pacman 后用 dkp-pacman -S nds-dev 装齐 devkitARM + libnds + calico 于 /opt/devkitpro。 ...

November 6, 2026 · 1 min

黑苹果装机

11 月 4 日开始折腾黑苹果装机,先是显卡选型,再是硬盘分区,两个都是决定成败的点。 显卡是 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 相对稳。 接着是装机盘。目标是一块 500GB 的内置盘 disk1,2026-11-05 00:15 我在安装器终端跑 diskutil list 发来照片,盘况是:disk1 是内置 500GB,GUID 分区表但确实没有 EFI 分区——容器直接就是 disk1s1,正常应该是 disk1s1 是约 209.7MB 的 EFI、disk1s2 才是容器。盘上已建空宗卷 MacOS,仅 24.6KB,基本是空的。原因是之前抹盘时只抹了宗卷、没动分区表,所以没生出 EFI。修复办法是整盘重抹:磁盘工具里显示所有设备,选中 disk1 整盘,方案选 GUID 分区图、格式 APFS,抹完再跑 diskutil list,确认 disk1s1 出现约 209.7MB 的 EFI。MacOS 宗卷是空的,重抹不丢东西。另外 disk3 是内置 1TB,宗卷名"此硬盘不用",绝对不动;disk4 是外置 8GB U 盘(MBR/FAT32,卷名"1401"),是 1401 工具做的安装盘,已能引导进安装器,不用管。 ...

November 6, 2026 · 1 min

家里网络:爱快、Lucky 与隧道

家里宽带有公网 IP,但运营商封了 80 和 443 入站。想不带端口访问内网服务,路子是两条:内网用 Lucky 反向代理,外网真免端口得走 Cloudflare Tunnel。 爱快网关是 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(或"隧道")模块里配。隧道在 Cloudflare 控制台建好,名叫 home,把令牌填进 Lucky 的隧道模块——第一次填错了,填的是隧道 ID(UUID)而不是 eyJh 开头的真正令牌,换对之后就通了,guo 亲口确认"通了",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。 ...

November 6, 2026 · 1 min

群晖 DS1621+ 网卡与 PS4 9.00 玩暗黑 3

这篇记两件不相干的硬件事:群晖 NAS 加万兆网卡,和已折腾的 PS4 能不能玩暗黑破坏神 3。 群晖是 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,它的驱动支持和群晖是两回事,答案别混在一起。 PS4 是已折腾过的 9.00 系统。暗黑破坏神 3 的离线部分能玩:单人战役、非赛季内容、本地同屏都可以;赛季和在线联机不行(创建赛季角色需要 PSN)。两条红线:别升级系统;每次彻底关机重启后,都要重跑一遍 GoldHEN,不然游戏打不开。 现状:两件都已给出结论,网卡还没买,游戏还没试。

November 6, 2026 · 1 min

通讯录大整理与自动同步

手机、Google、Outlook、iCloud 四处通讯录各存各的,数量对不上。11 月 1 日花了一天把它理了一遍,顺便把每周自动同步的规矩定下来。 先是手机。起初直读返回 0 条,差点以为是空的,其实是通讯录权限没开——空列表不等于没数据,权限一开就读到 290 条。手机里 iCloud 和 Exchange 是两个独立账本,数量不同本身不是故障。清理掉 4 组重复:吴崇与徐艳红共用号 13615123028,按我的决定不合并两人,只从吴崇名下删掉该号(吴崇只剩 051688397689、15365855689),该号仍留在徐艳红名下;吴电信留、电信威尼斯删(同号 19352260828);高岳留、高月删(同号 15312665897,同音名);两个梁金龙合并为一条、含双号 19962765688 与 15190769528,多余一条已删。改后手机 290 条变 287 条。再删掉 12 条只有名字、没有电话邮箱的空条:BH4JBV 王珂、bh1nyr 刘嘉、glxp 陆、夏伟、孙庆辉、张迪医保、李川、王二超、王航、胡钰嘉、赵从荣、郭良,剩下 275 条。 然后以 Outlook 为主归一。手机上有、Outlook 里没有的共 60 条,40 条新建导入、18 条只有名字的补上号码;两条不导,一条是王宁(2026-10-11 我亲手从 Google 和 Outlook 两边删掉的,电话 13952121861,导回 Outlook 会被周同步再推回 Google,等于复活),一条是郭鹏(我自己的名片)。归一后 Outlook 从 233 条涨到 273 条,手机关掉 iCloud 通讯录后也是 273 条,两边对齐。iCloud 云端原数据还在,没动。导入后 Exchange 回推使手机短暂变为 314 条(275 条加 40 条回推、佳佳同名同号自动合并 1 条),是迁移中间态,不是遗漏。 ...

November 6, 2026 · 1 min

网页端《传奇》部署准备

想在家里把网页端《传奇》跑起来,部署目标是爱快路由器的 Docker。选的方案是 github.com/zombieliu/mir2 的 mir2-web3,一个社区重制项目,不是盛大官方原版,这点先说清楚。 部署方式是 Docker,官方 dev.sh + compose.developer.yml,一条命令 ./scripts/dev.sh up --build 拉起。默认端口都只绑 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 代码,是开发环境的做法,比较吃内存和磁盘。 动手之前先摸清机器底子:系统架构、内存、磁盘余量这些。内存和磁盘得够,架构得对得上镜像,否则编到一半才发现跑不起来。第一步的环境核查命令是 docker --version; docker compose version; git --version; uname -m; free -h; df -h /,门槛是 x86_64、内存 4G 以上、磁盘 20G 以上。 现状:等机器配置输出,达标再开始部署。素材授权和完整包的获取方式也还没定。

November 6, 2026 · 1 min

微信桥

10 月 11 日把微信接进了现在的会话:从微信发文字任务过来,实际执行完,结果再回微信,全程中文。要求就一个实在:只回罐头文字不算接通,必须真的能执行。 实现在 ~/workspace/wechat-bridge/bridge.py,用 openclaw-weixin 协议,标准库写成,子命令 login/wait-login/pump/send/status/serve/doctor 自测通过。登录用扫码,扫一次会话保存下来,收发服务按 15 秒一个周期轮询(hook wechat-bridge,每 15 秒 pump 一轮 + wake worker 执行任务),未用 systemd。只处理扫码绑定账号发来的私聊文字,群消息和别人的消息一律忽略;图片、视频、语音、文件这类内容暂时不处理,会回一句"这条通道暂时没有配置这类内容处理,请先用文字描述"。修过一个 bug:sendMessage 无 ret 字段时按协议应视为成功,原代码误判为失败重试。 验收分了两层,都在当天通过。第一层是我从微信发一句"你好",回复到了,我确认收到。第二层是我从微信发任务,让打开 https://xlx.bd4two.site 把网页标题读给我,执行端真的打开了页面,标题"XLX516 Reflector Dashboard"回到了微信,我又独立核对了一遍标题,确认无误。 微信里的对话就留在微信,后台有个执行器在跑;只有需要我动手的事(比如掉线后重新扫码)才会在主聊天里提醒。如果哪项能力缺失,就直说缺什么,不拿半成品冒充完整接入。 现状:桥已验收通过,日常使用中。掉线重扫是唯一需要我介入的环节。

November 6, 2026 · 1 min

云服务器巡检手记

有一台腾讯云香港的云服务器,公网 IP 是 43.163.94.168,实例名 VM-0-16-ubuntu,Ubuntu 24.04,2 核 2G,用户是 ubuntu。我的运行环境出口代理不放行 SSH,直连不上,所以维护方式定下来是:我给只读巡检脚本,他在机器上跑、把输出贴回来,我诊断、定维护动作。巡检脚本在 ~/workspace/vps/inspect/vps-inspect.sh,新版里加了一节专门定位 networkctl 噪音来源。 上面跑的服务有 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 这类不存在的网卡,像是有脚本在轮询不存在的网卡。 维护建议给了几条:apt upgrade、开防火墙或确认安全组、确认 SSH 只允许密钥登录、查 networkctl 噪音来源。第二次巡检,待更新包从 297 清到 0,系统也从 24.04.4 升到了 24.04.5。但抓到一个新情况:openclaw-gateway 的内存从 54MB 涨到 486MB,还带了 3 个 chrome 进程,1 分钟负载 4.62,对 2 核机器偏高,像是在跑浏览器相关的重活,请他核查是不是他触发的。 networkctl 噪音的来源还没定位到。新版巡检脚本里加了专门定位的一节,但那次没抓到现行:发作时没有进程残留,journal 里也没有留下是谁拉起的,常见路径也搜不到调用者。判断是阵发性的、无害的,不影响运行;要抓就跑一小时蹲守命令,或者先放着,他还没决定。 现状:巡检脚本已有含噪音定位的新版,下次用新版;内存突增和噪音蹲守这两件事等他核查后定。

November 6, 2026 · 1 min