<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on 一个自留地</title><link>https://tinko.moe/post/</link><description>Recent content in Posts on 一个自留地</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Tinko.moe By Tinko Liu</copyright><lastBuildDate>Mon, 06 Oct 2025 12:00:00 +0800</lastBuildDate><atom:link href="https://tinko.moe/post/index.xml" rel="self" type="application/rss+xml"/><item><title>挑选随身热点的艰苦过程</title><link>https://tinko.moe/p/choosing-personal-hotspot/</link><pubDate>Mon, 06 Oct 2025 12:00:00 +0800</pubDate><guid>https://tinko.moe/p/choosing-personal-hotspot/</guid><description>&lt;h2 id="为什么我会想要一个随身热点"&gt;为什么我会想要一个随身热点
&lt;/h2&gt;&lt;p&gt;随身热点这个东西，对我来说它是刚需吗？可以是，但也可以不是。其实直到我开始去国外旅游之前，我都没有出现个人热点的需求。我本身对蜂窝流量的需求不大，电信宽带套餐送的每月几十个 G 根本用不完，何况我本就很少会离开有 Wi-Fi 的地方，而我日常双持的副机用的是 CTHK 三地漫游，也没有需要主从机共享流量的情况，更进一步来说我名下也没有购车，并没有像很多人那种需要在车上放一个网络的场景。&lt;/p&gt;
&lt;p&gt;出现想要一个随身热点的想法是在第一次去日本旅游之后。在出发前，我买过一次实体 SIM 流量卡，其中等快递和在飞机上换卡的体验实在是不太优雅，同时因为我日常双持所以如果这么用的话，要么买两张卡，开支就要翻倍；要么一台给另一台开热点，电量烧的就很过分了，林林总总的原因导致我萌生出想要一个随身热点的想法。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;港澳这种出境游都懒得再另要流量卡了啦反正有 CTHK 能用就行啦&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;第二次去日本的时候，我尝试了一下只买一张流量卡，通过热点的方式给另一台共享，果不其然就碰到了前面说的电量瓶颈，同时我没想到的是，因为 iPhone 开热点的时候发热也不小，尤其还是长时开着，性能也掉的很严重。当天在完全没有预期的情况下，主力机的电量眼看着已经翻红，身上的充电宝在前一天晚上忘记充电，为了防止彻底失联，我站在 JR 站内蹭着免费 Wi-Fi 当场从国际版某程上买了一张流量 eSIM 下载到副机上，虽然有点惊心动魄，但是这次让我彻底尝到了 eSIM 的甜头。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;国际版某程网页版居然直接支持 Apple Pay 支付，大好评，顺手感谢 HSBC HK 给我批的那一张 Red&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而到了第三次去日本，我带上了此前一直放在家里当短信转发机的红米 K40 。得益于刷了 Pixel OS 的缘故，我第一次体验到了 &lt;code&gt;STA/AP concurrency&lt;/code&gt; 和 &lt;code&gt;Tethering Allow VPN Upstreams&lt;/code&gt; 的好处。唯一的遗憾就是 K40 因为主要用作短信转发，常年工作在自动充电循环中，所以电池健康度有所下降，加上本身电池容量也不是很大，在这趟旅途中，我的充电宝主要都拿来伺候 K40 了，反倒是两部捏在手里的手机没怎么充过电。&lt;/p&gt;
&lt;h2 id="我对随身热点的预期"&gt;我对随身热点的预期
&lt;/h2&gt;&lt;p&gt;经过前几次的经历，我大致对我理想中的个人热点有一个基本的预期了。它需要满足这些条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在国内我大概率用主套餐开一张副卡的形式提供流量，所以它最好能支持读短信，因为我可能注册一些随用随弃的垃圾网站会用这种小号&lt;/li&gt;
&lt;li&gt;出国的话，我很可能会买 eSIM 流量卡，所以它最好有系统里能管理 eSIM 的能力&lt;/li&gt;
&lt;li&gt;硬性需要支持 &lt;code&gt;STA/AP concurrency&lt;/code&gt; ，以便我在只有一个设备能用 Wi-Fi 上游的时候也能保证所有设备都有网
&lt;ul&gt;
&lt;li&gt;说的就是机上空中 Wi-Fi&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;电池容量是硬指标&lt;/li&gt;
&lt;li&gt;最好不要太贵，太贵了会心疼&lt;/li&gt;
&lt;li&gt;如果有屏幕的话，最好不要太大
&lt;ul&gt;
&lt;li&gt;一方面会变重&lt;/li&gt;
&lt;li&gt;另一方面会担心在包里会不会把屏幕磕爆&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;可以有 WireGuard VPN 共享的话是最好的
&lt;ul&gt;
&lt;li&gt;这一点没那么重要，我可以妥协到每个设备各自单独连&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;我对热点网速的要求不会很高，但是希望它信号好一点不要像 iPhone 一样会失联&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于为什么我没特意说要 5G ……因为普遍来说如果用 Android 手机当热点，那这个热点速度一般也就几 MB/s 的速度，别说 5G 了，就算是 4G 也没彻底释放出来速度上限。&lt;/p&gt;
&lt;blockquote&gt;
&lt;details&gt;
&lt;summary&gt;关于 Wi-Fi STA/AP concurrency&lt;/summary&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class="link" href="https://source.android.com/docs/core/connect/wifi-sta-ap-concurrency" target="_blank" rel="noopener"
&gt;Wi-Fi STA/AP concurrency&lt;/a&gt; 这个功能就如它字面所述，设备的 Wi-Fi 能同时工作在 STA 和 AP 两个模式下。在这个模式下，个人热点可以把当前连接的 Wi-Fi 作为上游出口，机器就相当于是一个 Wi-Fi 双工路由器。&lt;/p&gt;
&lt;p&gt;这个功能的可用性取决于硬件（网卡要两个频段全双工）和系统（ &lt;code&gt;BoardConfig-common.mk&lt;/code&gt;: &lt;code&gt;WIFI_HIDL_FEATURE_DUAL_INTERFACE := true&lt;/code&gt; ）两个层面同时支持。&lt;/p&gt;
&lt;p&gt;要确认一个设备是否支持 &lt;code&gt;STA/AP concurrency&lt;/code&gt; ，最简单的做法就是看能不能同时打开 Wi-Fi 和个人热点，装 13 一点的做法可以 &lt;code&gt;adb shell dumpsys wifi&lt;/code&gt; 看有没有 &lt;code&gt;STA + AP Concurrency Supported: true&lt;/code&gt; 。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/details&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;details&gt;
&lt;summary&gt;关于系统内的 eSIM 管理能力&lt;/summary&gt;
&lt;blockquote&gt;
&lt;p&gt;这个话题下，如果要聊一般的随身热点产品，那各家可能会有各家都不一样的做法，可能会有内置的但是不让你自己下载，也可能压根没有，会变得非常需要每个设备单独考察。&lt;/p&gt;
&lt;p&gt;如果换到 Android 语境下的话，有两种情况。一种是机器本身就有 eSIM 能力，这种自然就不需要操心了。而如果是没有自带 eSIM 并且买了实体 eSIM 而且还希望能在不拔卡接外置读卡器的情况下直接在系统里管理实体 eSIM 里的 Profile 的话，这时候就涉及到一个叫做 &lt;a class="link" href="https://source.android.com/docs/security/features/open-mobile-api" target="_blank" rel="noopener"
&gt;Open Mobile API (OMAPI)&lt;/a&gt; 的东西，如果设备支持这个功能，那么就可以实现在系统里直接管理设备的安全元件，其中包含的 UICC 支持能够实现在系统里与实体 eSIM 卡直接交互的能力。如果手头暂时没有实体 eSIM 又要确认一下是否支持，可以装这个 &lt;a class="link" href="https://github.com/CursedHardware/euicc-probe" target="_blank" rel="noopener"
&gt;eUICC Probe&lt;/a&gt; 来检查支持的情况。如果某个 Slot 的结果为 Available 或者 Connectable ，那么恭喜你，可以通过 &lt;a class="link" href="https://gitea.angry.im/PeterCxy/OpenEUICC" target="_blank" rel="noopener"
&gt;EasyEUICC&lt;/a&gt; 直接在系统里管理实体 eSIM 了。&lt;/p&gt;
&lt;p&gt;当然还有种做法就是用 eSTK 的 SIM 卡应用程序菜单，但是个人感觉 SIM 卡应用程序这个东西用起来本身就有点难受，况且我也不是很相信这种方式下载 eSIM Profile 和发送通知的可靠性，所以如果能有 OMAPI 用，那我肯定是不会选 SIM 卡应用程序这个选项的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/details&gt;
&lt;/blockquote&gt;
&lt;h2 id="艰难的挑选过程"&gt;艰难的挑选过程
&lt;/h2&gt;&lt;p&gt;这么一列出来的话，应该会有人开始吐槽说这个需求过于奇葩，我需要做做减法。但是每一条需求也有我的合理的来源，所以如果能有这么一个完美的设备出现，那我自然会更愿意。&lt;/p&gt;
&lt;h3 id="手头现有的-k40"&gt;手头现有的 K40
&lt;/h3&gt;&lt;p&gt;不带它出门的唯一原因是还挺心疼它的，毕竟它享受不了揣在裤兜里的待遇。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;短信管理&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;短信转发&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;内置电池&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴已经老化了&lt;/td&gt;
&lt;td style="text-align: left"&gt;多 SIM 卡槽 / eSIM 支持&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;STA/AP concurrency&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢刷 Pixel OS 有&lt;/td&gt;
&lt;td style="text-align: left"&gt;热点 VPN 共享&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢刷 Pixel OS 有&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;小屏或无屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴太™大了&lt;/td&gt;
&lt;td style="text-align: left"&gt;价格便宜&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟡原价 2000 左右，也不是很便宜&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;信号能力&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;OMAPI&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟡仅限 SIM1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="中兴-f50"&gt;中兴 F50
&lt;/h3&gt;&lt;p&gt;F50 很早就听闻了发热的大名，以及同样知名的还有发热后 Wi-Fi 拉胯的情况，甚至于有人提出了 &lt;em&gt;&lt;strong&gt;F50 &amp;amp; 随身路由 &amp;amp; 移动电源&lt;/strong&gt;&lt;/em&gt; 这样一个三明治架构，那这就很重了就不是很理想了。被我直接毙掉的原因是它没有内置电池。虽然它也是 Android 的并且已经有人弄出了 root 的用法，但是我觉得我的需求下还是便携性为首。如果我买车了那我可能会考虑在车上用这个方案，但是话又说回来如果放车上那空间管够的情况下我为什么不选 GL-iNet 呢……&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;短信管理&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;短信转发&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟡 root 之后应该没问题我猜&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;内置电池&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴需要外部供电&lt;/td&gt;
&lt;td style="text-align: left"&gt;多 SIM 卡槽 / eSIM 支持&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;STA/AP concurrency&lt;/td&gt;
&lt;td style="text-align: center"&gt;❔&lt;/td&gt;
&lt;td style="text-align: left"&gt;热点 VPN 共享&lt;/td&gt;
&lt;td style="text-align: center"&gt;❔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;小屏或无屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;td style="text-align: left"&gt;价格便宜&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;信号能力&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;OMAPI&lt;/td&gt;
&lt;td style="text-align: center"&gt;❔&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="三星-scr-01"&gt;三星 SCR-01
&lt;/h3&gt;&lt;p&gt;在第一次去日本的时候，从一个玩机很厉害的兄弟手上看到了这台机器，也是因为这台机器所以产生了搞个人热点的想法，在挑选的过程中自然也考虑了一下 SCR-01 的可行性，并且让兄弟帮忙做了一下检测确认具体情况。但是综合看下来，以我的需求来说，这台机器很难评。&lt;/p&gt;
&lt;p&gt;首先我虽然主要目的是出国用，但是如果我突发奇想就是要扔一个国内的卡进去的话，那在没 root 过没改频段的情况下，它是用不了国内 5G 的。其次，它在系统层面完整阉割了所有电话短信相关的能力，即便是后期把电话短信的 APK 给它塞回去，系统层面对应的 API 也被阉了，不会有任何作用。再者就是硬伤，它自身不能连接外部 Wi-Fi 自然也更无从谈起支持 STA/AP concurrency 这个事情了，并且出于严谨我还特地连上 ADB 再次确认，结果就是它确实没有这个能力。于是在不到十分钟的简单把玩之后，被光速处决。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;短信管理&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;td style="text-align: left"&gt;短信转发&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;内置电池&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;多 SIM 卡槽 / eSIM 支持&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;STA/AP concurrency&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;td style="text-align: left"&gt;热点 VPN 共享&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;小屏或无屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;td style="text-align: left"&gt;价格便宜&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;信号能力&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;OMAPI&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="gl-inet"&gt;GL-iNet
&lt;/h3&gt;&lt;p&gt;其实说实话 GL-iNet 的所有设备我看了一眼价格之后我就退出去了，他们家是真的贵啊……&lt;/p&gt;
&lt;p&gt;但是如果我买车了的话，我会进一步考虑一下，因为第一眼看起来还挺合适的。&lt;/p&gt;
&lt;h3 id="蓝狐-nx1"&gt;蓝狐 NX1
&lt;/h3&gt;&lt;p&gt;选品过程中唯一一个买过来试用了的设备。看评测真的挺心动的，尤其有说它续航能顶一天，那 3000mAh 能顶一天我感觉总归有点东西的，于是买了试试，最后七天无理由送走了……&lt;/p&gt;
&lt;p&gt;送走的主要理由是续航问题。在我的测试场景下（双卡待机，未开热点，开短信转发），它其实撑不到一天，大概六七个小时就倒了。另外系统也没有把 VPN 热点共享放进来，虽然不是致命伤就是了。真正致命的其实是价格，虽然它自身的绝对价格并不高，但是被一个玩机老一句 “这价格买个低端mtk不划算” 给暴击了之后，我决定还是给它送走，毕竟卖 699 起步，这个性价比确实不怎么样，更何况它还是个 4G 手机虽然嘴上说着不重要但是真到了不要它的时候什么东西都可以被当作挑刺的理由（&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;短信管理&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;短信转发&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;内置电池&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴不顶用&lt;/td&gt;
&lt;td style="text-align: left"&gt;多 SIM 卡槽 / eSIM 支持&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;STA/AP concurrency&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;热点 VPN 共享&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;小屏或无屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;价格便宜&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴这货是一点也不便宜&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;信号能力&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;OMAPI&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="t508n-q968-或同类按键老人机"&gt;T508n, Q968 或同类按键老人机
&lt;/h3&gt;&lt;p&gt;之前也看到了很多次这种按键老人机，特点就是便宜，运营商充话费送的，结果可能运营商和厂商都没想到一帮子玩机的能把这玩意玩成随身 Wi-Fi 并且还把价格炒起来了。&lt;/p&gt;
&lt;p&gt;这个型号选品的时候，发生了一个很巧的事情，一个朋友刚好买了 T508 ，于是让他尝试一下各种功能检查。那检查到最后的结果就是这个机器它不支持 STA/AP concurrency 这个功能，但是我很明确我是非常需要这个功能的，所以只好作罢。那至于前阵子还是买了 Q968 做短信转发机就是另一个故事了，具体原因可以看上一篇。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;短信管理&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;短信转发&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;内置电池&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢甚至还可拆卸更换&lt;/td&gt;
&lt;td style="text-align: left"&gt;多 SIM 卡槽 / eSIM 支持&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;STA/AP concurrency&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;td style="text-align: left"&gt;热点 VPN 共享&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;小屏或无屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;价格便宜&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;信号能力&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;OMAPI&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="真我-v30"&gt;真我 V30
&lt;/h3&gt;&lt;p&gt;其实我的选品列表里本来是没有这个机器的位置的。当天我把蓝狐 NX1 退货回去之后，我发现哥们桌上有一台放了很久的 Android 机，便抄起来问了一下，哥们说这手机是&lt;strong&gt;去移动办业务送的&lt;/strong&gt;让我直接拿去玩就是，于是拿回来一试，好家伙，顶两张卡开热点一天用下来居然电池只用掉一半左右，也有 STA/AP concurrency ，虽然不支持热点 VPN 但是这个是个可选项无伤大雅，于是本着不用白不用的态度我就收下它了。&lt;/p&gt;
&lt;p&gt;机器白嫖到手了，开开心心的玩了几天，但是有一个细节我忘了测试了：在飞行模式下打开个人热点。我本想着确认有 STA/AP concurrency 支持之后这个应该不存在出问题的可能性，但是偏偏国产厂商对你的关爱在这个时候就体现出来了： &lt;strong&gt;它会在开启飞行模式的时候将个人热点强制关闭并且把开关置灰的！&lt;/strong&gt; 更为窒息的是，这个情况是我这次去日本参加 TGS 已经坐在飞机里的时候才发现的，真就是幸亏突然一下想到还没推出的时候想着先把热点机设置好，结果发现了意外情况。好在它本体的 Android 版本足够高，可以用 &lt;a class="link" href="https://github.com/RikkaApps/Shizuku" target="_blank" rel="noopener"
&gt;Shizuku&lt;/a&gt; 执行 &lt;code&gt;adb&lt;/code&gt; 命令，于是赶紧找了一下有没有通过 &lt;code&gt;adb&lt;/code&gt; 调整个人热点设置的 App ，结果非常巧的是正好有一个叫 &lt;a class="link" href="https://github.com/supershadoe/delta" target="_blank" rel="noopener"
&gt;delta&lt;/a&gt; 的 App 就是拿来干这个的，危机解除。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
&lt;th style="text-align: center"&gt;结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;短信管理&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;短信转发&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;内置电池&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;多 SIM 卡槽 / eSIM 支持&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;STA/AP concurrency&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢飞行模式依赖 &lt;a class="link" href="https://github.com/RikkaApps/Shizuku" target="_blank" rel="noopener"
&gt;Shizuku&lt;/a&gt; + &lt;a class="link" href="https://github.com/supershadoe/delta" target="_blank" rel="noopener"
&gt;delta&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;热点 VPN 共享&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;小屏或无屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔴太™大了，但是买了保护壳也不心疼了&lt;/td&gt;
&lt;td style="text-align: left"&gt;价格便宜&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;信号能力&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;td style="text-align: left"&gt;OMAPI&lt;/td&gt;
&lt;td style="text-align: center"&gt;🟢&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="实际使用体验"&gt;实际使用体验
&lt;/h2&gt;&lt;p&gt;所以如上所述，我最后选择了哥们白给的真我 V30 作为个人热点用了起来。同时由于我的电信宽带换了套餐，送了 4 张副卡，那么这台机器里两个 SIM 卡槽就变成了一张国内电信副卡，加上一张实体 eSIM 这样的组合，只需要在系统里切换 SIM 卡开启状态就可以同时兼顾国内国外两种使用场景。&lt;/p&gt;
&lt;p&gt;那至于说 V30 揣背包里会不会感觉到重，我体感它在背包里增加的重量不多，并且实际上它还是比 K40 轻了十来克的。虽然它们屏幕差不多都挺大的，那为了解决这个问题，我去买了个保护壳，这样也很大程度上缓解了它磕爆的风险，至少我心理上是这么感受的。&lt;/p&gt;
&lt;p&gt;在这一次出征 TGS 的前一天，我还是按之前的套路，悠闲地从国际版某程上买了流量 eSIM ，直接通过 EasyEUICC 写到实体 eSIM 里，上飞机开 Wi-Fi 热点，落地开流量，这几天也就这么过来了。有感受到有什么麻烦的事情吗，好像没有，每天晚上需要多充一个电应该也算不上什么大麻烦，虽然它实际上一天下来只用掉一半左右，我咬咬牙第二天用充电宝吊着也是能吊的，但是我没有必要冒这个风险。&lt;/p&gt;
&lt;p&gt;（什么你问我为什么不用某茶或者某 alo 漫游流量……很简单啊，太贵了……我 4 天只要不到 20 块还是霓虹本地 IP 要啥自行车？&lt;/p&gt;</description></item><item><title>折腾一下按键机 Q968</title><link>https://tinko.moe/p/tweaking-q968/</link><pubDate>Sat, 04 Oct 2025 21:00:00 +0800</pubDate><guid>https://tinko.moe/p/tweaking-q968/</guid><description>&lt;h2 id="说在前面"&gt;说在前面
&lt;/h2&gt;&lt;p&gt;最近锂电池鼓包爆掉的新闻搞得有点人心惶惶，所以前几天出去 TGS 的时候都没敢把收短信的 K40 自动充电开着，就怕它个万一。回上海之后想起来之前看到过一些安卓按键机有用假电池改直流供电的方案，想着拿来做固定的短信机挺合适的，于是在🐟上花了 130 收了一台以晴 Q968 ，来把 K40 换下来，正好因为之前自动充电循环导致 K40 电池健康度也不太行了，不如就把它拿来折腾玩了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可能有人要问了，网上别人都是把 Q968 或者 T508n 这东西拿来做个人热点的怎么你就给它扔家里了，那客观来说我对个人热点的需求确实是有点奇葩，有兴趣的可以看另外一篇 &lt;a class="link" href="https://tinko.moe/p/choosing-personal-hotspot/" &gt;挑选随身热点的艰苦过程&lt;/a&gt; 。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="核心需求"&gt;核心需求
&lt;/h2&gt;&lt;p&gt;对于一个理想中的短信转发机，我的预期大概是这样子的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直流供电，没有电池
&lt;ul&gt;
&lt;li&gt;感谢🐟上另一位大佬&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;开机自动启动网络 &lt;code&gt;adb&lt;/code&gt; ，可以让我远程 &lt;code&gt;scrcpy&lt;/code&gt; 上去，不需要去翻它
&lt;ul&gt;
&lt;li&gt;这需要 root 了&lt;/li&gt;
&lt;li&gt;某些应用里会为了安全保护而黑屏，需要处理一下&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;尽可能系统干净&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好，开工。&lt;/p&gt;
&lt;h2 id="解锁-bootloader-获取-root"&gt;解锁 BootLoader 获取 Root
&lt;/h2&gt;&lt;p&gt;我的 Q968 拿到手之后就是当下最新的 480 系统版本。在网上搜了一圈各种讨论之后发现，众人一致的观点是必须降级到 350 才能解锁 BootLoader 。又经过一番努力的搜索，在酷安找到一个自称有降级包的帖子，直链是死的，只能加群（开始碎碎念现在国内这些资源分享都搞成什么样子了）。加了群之后看群文件，好嘛一个 txt 里面写了个网盘地址……网盘地址点开之后，哦好家伙是某 23 网盘，要充钱才能下文件，也行吧现在中文互联网是不太可能有当年那种大方分享的人了都想着赚钱了那我能不能死妈当活马医我直接用 T508n 最新的解锁脚本给它解了呢？&lt;/p&gt;
&lt;p&gt;是的，可以。&lt;/p&gt;
&lt;p&gt;480 系统是可以直接解锁的。&lt;/p&gt;
&lt;p&gt;记得找个新一点的一键脚本。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;（我就说现在简中互联网搞刷机也好破解也好这种资源共享的早已经不是以前那个大大方方的年代了）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;简单来说 Q968 需要拆装电池之后同时按住 &lt;code&gt;导航上下左右+中间确认&lt;/code&gt; 五个按键，再插 USB ，它就能进 AutoLoader 模式了（如果在系统里，用 &lt;code&gt;adb reboot autoloader&lt;/code&gt; 也行）。听起来好像五个按键很多，但实际上只是一个大拇指的事情。而至于 AutoLoader 是什么， hmmm 个人感觉就很像高通的 9008 刷机模式，通过特定工具能直接擦写机内整块存储的那种，所以只要有备份，基本上不用担心会刷成砖。&lt;/p&gt;
&lt;p&gt;记得先装 UNISOC 驱动（一键包里都会带的）。&lt;/p&gt;
&lt;p&gt;进 AutoLoader 之后具体表现是会出现一个名叫 &lt;code&gt;SPRD U2S Diag&lt;/code&gt; 的串口设备，确认连上之后用 &lt;code&gt;spd_dump&lt;/code&gt; （实质上的 AutoLoader 上位刷写主程序，对照到高通那边就是 &lt;code&gt;edl.exe&lt;/code&gt; ）先做一遍全盘备份以防万一（一般一键包里也都有全盘备份脚本），然后直接用解锁脚本一键解锁掉就行。&lt;/p&gt;
&lt;p&gt;解锁完成之后双清直接进系统， Q968 没有切 b slot 一说，直接 a slot 开机就行。&lt;/p&gt;
&lt;p&gt;解锁完成之后装 Magisk APK ，从之前的全盘备份里把 boot_a.bin 掏出来扔给 Magisk 修补，再刷进去（一键脚本里有现成的批处理所以就不写命令了&lt;del&gt;毕竟我也没看过它命令行文档&lt;/del&gt;）之后 root 就有了。&lt;/p&gt;
&lt;h2 id="停用垃圾应用"&gt;停用垃圾应用
&lt;/h2&gt;&lt;p&gt;能直接删掉的一般内置应用就不说了。这玩意一开始的定位是老人机，有一些什么语音王之类的功能也不奇怪。虽然能直接关掉，但是能停用总归让心里舒服点。反正都已经有 root 了，直接用 &lt;a class="link" href="https://github.com/aistra0528/Hail" target="_blank" rel="noopener"
&gt;Hail&lt;/a&gt; 给全停掉就好。&lt;/p&gt;
&lt;h2 id="开机自动启用网络-adb"&gt;开机自动启用网络 ADB
&lt;/h2&gt;&lt;p&gt;直接上模块 &lt;a class="link" href="https://github.com/mrh929/magisk-wifiadb" target="_blank" rel="noopener"
&gt;Magisk-WiFiADB&lt;/a&gt; ，不需要找什么奇奇怪怪的 Tasker 脚本啊什么的，不需要。&lt;/p&gt;
&lt;p&gt;有了自启动网络 ADB 之后就可以愉快地 Scrcpy 了。&lt;/p&gt;
&lt;h2 id="解决远程控制黑屏"&gt;解决远程控制黑屏
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/j-hc/FlagSecurePatcher" target="_blank" rel="noopener"
&gt;FlagSecurePatcher&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;应该不用多说了。&lt;/p&gt;
&lt;h2 id="windows-phone-link"&gt;Windows Phone Link
&lt;/h2&gt;&lt;p&gt;需要装 Gapps ，找解锁资源的时候一般一并都有。这个没什么特别需要说的。&lt;/p&gt;
&lt;h2 id="禁用开机关机音效"&gt;禁用开机关机音效
&lt;/h2&gt;&lt;p&gt;这东西是有点烦的，年代感十足不说，还不按系统音量走，永远最大声。&lt;/p&gt;
&lt;p&gt;按照 &lt;a class="link" href="https://xdaforums.com/t/disabling-boot-animation-sound.4322635/" target="_blank" rel="noopener"
&gt;https://xdaforums.com/t/disabling-boot-animation-sound.4322635/&lt;/a&gt; 的内容做就行，虽然它会一并把开机动画给干掉。如果有改开机动画的想法，自己改也是可以的，但是我懒。&lt;/p&gt;
&lt;h2 id="勿扰模式"&gt;勿扰模式
&lt;/h2&gt;&lt;p&gt;虽然它就是拿来转发短信的，但是我还是会想在白天给声音开着，万一有电话并且我在家还能赶过去接，省一笔呼叫转移通话费。但是，这东西设计上是个老人机，于是为了防止老人乱动搞出预期之外的情况，它的设置里把很多东西都隐藏了，包括勿扰模式。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;很有画面感了，老人家拿着手机过来问你说它一下子没声音了侧边音量怎么按也没反应，翻半天看到勿扰模式开了，这种场面大家都不想经历吧（所以该说不说隐藏设置还挺合适的，符合目标受众刻板印象。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;好在只是隐藏设置入口，没有去掉设置项，还能通过 &lt;a class="link" href="https://www.apkmirror.com/apk/netvor-android-solutions/miui-hidden-settings-activity-launcher-poco-note/" target="_blank" rel="noopener"
&gt;MIUI Hidden Settings Activity&lt;/a&gt; 直接按入口找进去。别问我为什么明明不是 MIUI 还选了这个，我搜到第一个就是它并且能用所以我选了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那如果设置页彻底去掉了怎么开勿扰模式呢？&lt;/p&gt;
&lt;p&gt;adb 进去有指令可以直接改 zen_mode 值的&lt;/p&gt;
&lt;p&gt;但是我没搞明白如何设置定时自动打开所以还是庆幸一下它只是隐藏了入口&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="插电自启"&gt;插电自启
&lt;/h2&gt;&lt;p&gt;对于无人值守且直接使用直流供电的东西，上电自启动这件事情简直就应该是天生就有的，奈何它是手机，有个关机充电模式……&lt;/p&gt;
&lt;p&gt;查了很多，有一种说法是，按 Google 官方推荐的做法，在 BootLoader 里应该要有一个东西叫做 &lt;code&gt;off-mode-charge&lt;/code&gt; ，把这个变量改成 &lt;code&gt;0&lt;/code&gt; 那在内核加载的时候就不会进入关机充电模式。但是很可怜的是 Q968 在这个环节没有按照 guideline 来做。&lt;/p&gt;
&lt;p&gt;好在还有个办法是通过 &lt;code&gt;init.rc&lt;/code&gt; ，简单来说就是当以充电的方式开机时自动重启一次，这样也能实现事实上的插电自启。既然已经刷了 Magisk 了，就懒得自己手动改脚本了，用了这个模块 &lt;a class="link" href="https://github.com/anasfanani/magisk-autoboot" target="_blank" rel="noopener"
&gt;Magisk Autoboot&lt;/a&gt; 刷进去就行。&lt;/p&gt;
&lt;h2 id="最后"&gt;最后
&lt;/h2&gt;&lt;p&gt;躺了。&lt;/p&gt;
&lt;p&gt;这个手机折腾起来其实难度并不高，尤其还有 AutoLoader 这种底层保底，刷的时候别紧张直接干就行。&lt;/p&gt;</description></item><item><title>浅聊一下我的游戏机</title><link>https://tinko.moe/p/my-game-consoles/</link><pubDate>Fri, 05 Jan 2024 12:00:00 +0800</pubDate><guid>https://tinko.moe/p/my-game-consoles/</guid><description>&lt;h2 id="先来坦白一下"&gt;先来坦白一下
&lt;/h2&gt;&lt;p&gt;虽然我手头看起来好像游戏机不少的样子，但是其中很大一部分都是……因为这个平台上有 Project DIVA 于是就买了……我本身并不是一个所谓 3A 大作爱好者，一部分原因倒是因为我有非常严重的 3D 晕眩，基本上看不得第一人称视角的画面，并且第三人称视角也不太能适应，算是先天就告别绝大部分动作游戏了，慢慢地就变成了游戏机比游戏多的这样一个奇葩情况。&lt;/p&gt;
&lt;p&gt;这里的排序就按照我入手的顺序来写了，顺便当作一个回顾吧。&lt;/p&gt;
&lt;h2 id="psv-2000---第一台我自己买的游戏机"&gt;PSV 2000 - 第一台我自己买的游戏机
&lt;/h2&gt;&lt;p&gt;我在上初中的时候曾经玩到过我某位亲戚的 PSP ，但是仅限于 “ 去串门的时候趁机把玩一下 ” 的状态，而真正我自己长期持有的，还是我自己在上大学那会攒钱买的 PSV 2000 。因为各种机缘巧合，大学时期我外包过一部分国内暴雪游戏相关的电竞赛事技术开发，所以在除了生活费之外，还稍微有一些收入，攒吧攒吧就把这台 PSV 攒出来了。&lt;/p&gt;
&lt;p&gt;那会是 14 年 2 月的时候，刚过完寒假，回帝都之后第一件事就是去了一趟鼓楼大街，买了这台 PSV 2000 。之所以是这个时间点，一方面是当时抠出来预算了，另一方面则是因为 Project DIVA F 2nd 马上在当年 3 月份就要发售了，趁这个时间点赶紧入了机器和上一代游戏，也就是 Project DIVA f 。当时还特别阔绰地买了一张 64G 的专用存储卡，结果时至今日都没给这张卡塞满，悲。&lt;/p&gt;
&lt;p&gt;至于 PSV 1000 初音限定款，不是我不想买，是当年的我买不起，亦是现在的我觉得性价比实在不行……&lt;/p&gt;
&lt;p&gt;算起来，这台 PSV 跟我到现在也整整十年了。我买过的 PSV 游戏并不多，只有 6 份游戏，其中初音占 4 份，分别是 f, F 2nd, 港版 X 以及日版 X 。至于为什么 X 买了两份，主要是当年我傻，以为 X 会有大量的文字内容，于是买了港版，结果非但没什么文字内容，翻译还是一坨……于是在多年之后又买了日版，当然买日版的时候还有别的故事，后面再聊。&lt;/p&gt;
&lt;p&gt;而另外两份游戏则是《ぷよぷよテトリス》和《電撃文庫 FIGHTING CLIMAX》。 PuyoTeto 我是玩了很久的，并且时至今日还在其它平台上一直玩俄罗斯方块（ 40 行竞速冲进一分钟以内了！），这应该算是我为数不多在认真玩的游戏。而至于电击文库格斗巅峰……因为当时在追超电磁炮……买回来之后发现自己完全不适合格斗游戏，于是长期吃灰了。&lt;/p&gt;
&lt;p&gt;这台 PSV 至今还没有破解，并且暂时没有破解它的计划。或者说，我自己一手买的机器，在考虑要不要破解这一问题时我都非常倾向于不破解。&lt;/p&gt;
&lt;h2 id="wii-u---它确实给我带来过快乐"&gt;Wii U - 它确实给我带来过快乐
&lt;/h2&gt;&lt;p&gt;Wii U 这台机器，普遍的认知中都是说，这台机器因为各种理由，在市场和游戏上并不成功。而我之所以买这台机器，其实是因为 15 年那时候，马里奥的热度被直播平台和实况 UP 主重新带火了，且以马里奥 3D 世界这一代为主，于是在看到一个价格合适的二手卖家时就买下来了。而直到现在为止，除了购机时一并购入的 3D 世界，也只有一份初代马里奥制造。当时在大学寝室里，因为马里奥的多人合作游玩非常合适，所以它在这期间确实给我带来不少快乐，但也仅限于此了。&lt;/p&gt;
&lt;p&gt;Wii U 我也没有做破解。不是不想破，而是感觉没有必要，无论是折腾它所投入的时间和精力，还是说破解之后带来的游戏阵容。说实话，它于我而言现在更像是个手办。&lt;/p&gt;
&lt;h2 id="ps4---初音"&gt;PS4 - 初音
&lt;/h2&gt;&lt;p&gt;与 Wii U 一样，我的 PS4 也是收的二手机器。不过与 Wii U 强行绑定 GamePad 不一样，我的 PS4 是故意收的不带手柄的，上一任主人留住了箱子，但是没留住说明书，杂七杂八各方面因素加起来，原主人就随这台机器送了我一份合金装备。至于为什么我倾向于收二手主机，主要是在我的认知中，我始终不担心游戏主机随着使用会发生性能下降的情况。而手柄或掌机，那买就得一定要买全新的，因为得把在手里玩，可要不得别人的手汗。&lt;/p&gt;
&lt;p&gt;从 2017 年购入至今，我库存里 PS4 的游戏，除了随主机送的合金装备 V 之外，也就是初音的 X 和 FTDX 了，并且这个合金装备我至今一次都没玩过，前些年尝试过出二手，一直也没人要，于是就这样放着罢。至于初音，在购入机器的时候我其实是一直在蹭群友的 FT 数字版，直到 2017 年 FTDX 实体版发售后才购入实体碟，告别蹭群友的时代。而 X 则是在工作之后为了补票买的，并没有玩很长时间，因为在 PSV 上打通了。而至于破解的问题——依然是没有破解，因为某位现实中好友在借用的时候大手一挥，给我的 PSN 里氪了一份偶像大师……&lt;/p&gt;
&lt;h2 id="ps3---初音"&gt;PS3 - 初音
&lt;/h2&gt;&lt;p&gt;没错，我的 PS3 反而是在 PS4 之后才拥有的，并且也是收的群友的吃灰二手，但是这台机器是 FFXIII 的限定机，所以这个二手其实收的非常值。这台机器收过来的时候就是破解好了的，并且我购入的最初目的，其实是为了进行 Project DIVA F 和 F 2nd 的逆向研究。受制于彼时 RPCS3 的开发进度和 PC 的性能，用模拟器进行这项操作，虽然可行，但是调试和开发体验非常难受，反而用实机进行逆向研究的效率会更高。也正因为此，这台 PS3 在我手中玩游戏的时间，其实远低于我在折腾的时间。虽然当下它也在吃灰了，不过肯定是暂时的，在条件合适的时候，我会把它重新拎出来，更新系统和破解，好好拿来当游戏机的。&lt;/p&gt;
&lt;p&gt;倒也搞笑的是，从 PSV 到 PS3 这段时间，我始终保持着一年一台的速度在购入游戏机……没错，这台 PS3 是 18 年收的。&lt;/p&gt;
&lt;h2 id="nintendo-switch---还是-tmd-初音"&gt;Nintendo Switch - 还是 TMD 初音
&lt;/h2&gt;&lt;p&gt;我在买 NS 这件事情上，其实是留了很大的遗憾的。 2019 年公司年会的时候，因为有一档奖品就是 NS ，导致当时公司二手群里有海量的二手出货，价格压得很低，而我却在寄希望于当时传出来 “ 会有初音限定 NS 机型 ” 的传言而一再观望，最终的结果也显而易见，大家都没有等到初音限定款 NS ，而我也错过了当年的低价转让潮，最终是在春节之后上班时，借着 3.8 妇女节的淘宝大促，以不小的溢价购入了我这台 NS 。并且还有个搞笑的事情，我在 2 月首发预购了 Project DIVA Mega39s ，在等到三月发售之后，它恰好跟我的机器在同一天送到我家，而 2020 年初那段时间，由于新冠的影响，收到的快递都是小心翼翼里三层外三层用酒精擦了一遍才敢上手摘口罩，所以至今我还对收到 NS 和 Mega39s 时的场面留有非常深刻的印象。&lt;/p&gt;
&lt;p&gt;其实一开始我对 NS 的预期并没有非常高，跟 PSV 不相上下，都是因为有 DIVA 于是买了。而我肯定也想不到的是，时至今日， NS 反而变成了我的日常战斗机，并且我手头的实体版游戏库存当中 NS 游戏占了一半以上，或许这就是老任吧。&lt;/p&gt;
&lt;p&gt;某一天在友人家里玩耍的时候，看到了喷 3 ，从来都是重度 3D 晕眩的我，破天荒地对喷 3 完全不晕，于是大喊着 “ 我要在喷 3 上把这些年错过的射击游戏的乐趣全部找回来 ” 的中二口号，当场买下了喷 3 数字版，在错过了二十多年之后，终于开始享受射击游戏。&lt;/p&gt;
&lt;h2 id="psp---所谓的懂事与成长或许只是无奈和妥协"&gt;PSP - 所谓的懂事与成长，或许只是无奈和妥协
&lt;/h2&gt;&lt;p&gt;前面有提到，我曾经在某位亲戚手里玩到过 PSP 。时隔多年之后，随着他大学毕业，进入工作，而且还是留在老家的工作，在那种环境下，也就自然地不再玩游戏了。而当我再一次串门时，他最后一次拿出来这台 PSP 说：“ 你带它走吧，我不玩了。 ” 虽然从此缺少一位玩伴，略有感伤，但是一想是在老家那个环境下，更多的则是理解和同情。不过也是因为这种原因，导致这台 PSP 走进了只剩裸机的这般田地，在我接手之后，从充电器到数据线，全都是新配的，虽然本体是零元购，但是为它整备配件，倒也花了我不少心思。&lt;/p&gt;
&lt;p&gt;我对这台 PSP 的早年记忆，主要都是 Project DIVA 2nd 和 extend 两作。至于初代 DIVA 则是因为玩法和系统设计相较之下不太成熟，以及后续两作及各自的 DLC 里把初代的歌都出了一遍，所以并没有太多地去玩初代。这台机器是 PSP 1000 ，日版机，在它的 UMD 舱里有一张我从初中就见过的《Burnout Legends》，也随着机器一并来到我手里，但是因为在那时候这台 PSP 就已经破解过了，所以实际上这张 UMD 应该并没有怎么使用过，甚至连存档都没有。而在前些日子，我把它的系统和破解都重做了一遍，从 5.50 升到了最新的 Ark ，也是十五年以来第一次做系统更新，回头另外开一篇文来写写记录。&lt;/p&gt;
&lt;h2 id="3ds---不知是多年的执念还是一时的冲动"&gt;3DS - 不知是多年的执念，还是一时的冲动
&lt;/h2&gt;&lt;p&gt;这里就需要提到我的另一位亲戚，他并不是一个入宝可梦坑多深的人，也不是个宅，只是小时候在电视上看过宝可梦的动画，那会还叫宠物小精灵来着（完了暴露年龄了）。至于宝可梦的游戏，算了吧，他除了 PC 之外唯一能正经玩游戏的设备也就只有早年山寨红白机的学习机了，而这两个平台都没有宝可梦的正作，很自然地就是从来没玩过任何一部了。但是就是这样一个看似完全不是在坑里的人，却在他大学毕业之后跟我问了句 “ 推荐个游戏机，我想玩宝可梦 ” 。说实话，我不是很理解是哪里有什么执念，但是既然这么问了，那就当是想入坑吧，于是让他去买了 3DS ，还特意叮嘱了，要去贴吧看黑店踩坑注意事项等各种置顶精华帖，然后我就回帝都上学了。等我过完一个学期回到老家，他确实是买到了，并且也玩上了，但是很显然，箱说自然都扔掉了，就留下了主机和充电器，并且很令我费解的事情是为什么他还有两个充电器，并且他也没玩过怪物猎人，却选择了一个怪物猎人的保护壳。还有一个令我感到困惑的地方是，在我回老家的那段时间，他也从来没掏出过这台 3DS ，一直放着吃灰。就这样连续过了几个学期，每次放长假回家都是同样的情况，直到我大学毕业，他也考上岸了，这时候跑来跟我说：“ 这 3DS 你要吗？我大概不玩了。 ”&lt;/p&gt;
&lt;p&gt;拿到了这台 3DS 和两块充电器之后，我才开始仔细打量它。型号是黑色的日版 New 3DS LL ，卡带槽里装着一张 R4 烧录卡，看起来买的时候套餐选的挺高。当我打开后盖准备拿 SD 卡开始往里塞游戏的时候，我看到一张易碎标签，上面写着 “ 电玩巴士 撕毁无效 ” ……得，冤种，并且箱说早就扔掉了，那自然也没法检查这台机器到底有没有什么问题了，并且过去几年了，也就不要再去嚼舌头说当年没看攻略帖从黑店买之类的云云。不过好在裸机的软硬件在我判断之后，都还处于比较良好的状态，外壳嘛也一直带着保护壳，没有划痕和破损，屏幕也很正常，单就裸机的机况而言，算是很不错的了。&lt;/p&gt;
&lt;p&gt;很显然，从店家买了带烧录卡的套餐选项的情况下，主机本体自然也是破解的，所以我拿到手之后就直接装上了 Project Mirai ，也就没考虑买卡带这回事了。除了 Project Mirai 之外，我也扔了几个其它的游戏进去，比如俄罗斯方块，暗杀教室和星之卡比。至于烧录卡提供的 NDS 游戏和模拟器，我倒是没什么兴趣。前段时间拿出来给它重新做了系统更新，重刷了 B9S ，大概也会写个记录。&lt;/p&gt;
&lt;p&gt;另外一提，我在这些掌机平台上，始终都没有找到非常理想的俄罗斯方块版本。官方块确实按规范来做，但是无法设置按键延迟和下落速度，以及无法去掉的消行延迟，总是让人玩的不是很爽。而这些平台上的自制块，总是有这样那样的问题，始终找不到一个令我比较满意的版本。而我所找到的最接近理想的自制块，则是 &lt;a class="link" href="https://github.com/3DStris/3DStris" target="_blank" rel="noopener"
&gt;3DStris&lt;/a&gt; ，但是它有个致命的问题：改键位的时候，如果试图改某一个键到 B 键，在按下 B 的那一刻，会返回上一级菜单……你就说尴尬不尴尬吧……而且作者也多年未曾更新，明确表示了 “ pause ” ，也只能暗暗叹个气了。&lt;/p&gt;
&lt;h2 id="pstv---为了折腾而折腾"&gt;PSTV - 为了折腾而折腾
&lt;/h2&gt;&lt;p&gt;购入 PSTV 是在工作之后，纯粹是为了折腾而买的，并且买来至今还没折腾它，于是先放着了……&lt;/p&gt;
&lt;h2 id="xbox-series-s---给我巨硬一个面子"&gt;Xbox Series S - 给我巨硬一个面子
&lt;/h2&gt;&lt;p&gt;XSS 也是公司某一年年会的奖品，但是非常令人可惜的是，我没有抽中。没抽中就算了，在所有人抽奖结束后，甚至还有多出来的……我甚至有跟组织年会的部门问过多出来的会如何处理，有没有机会直接从公司买，答案是并不可以。虽然我理解公司的各种规章制度或许有所规定，但是你就说这机器，要说打开来放在公共区域或者会议室给大家一起玩也是个事吧，却一直被封在仓库里，等哪天这个次世代变成上世代了再捞出来，没人要了都。&lt;/p&gt;
&lt;p&gt;吐槽归吐槽，我自己手上这台，也大差不差，是一个中奖的同事在手里放了一年多之后，以 &lt;strong&gt;全新未拆封&lt;/strong&gt; 的状态在公司二手群里卖，被我收来的……得益于同事的爱，还是比市面上稍微便宜一些，不过我还是想说你要卖你早点卖啊在手上按一年也忍得住……&lt;/p&gt;
&lt;p&gt;XSS 到目前位置我玩的也不太多，不过因为我有 XGP ，几个名气大的作品我都稍微把玩过一小会，但也就局限于此了，玩的最多的……是俄罗斯方块效应……&lt;/p&gt;
&lt;h2 id="一点碎碎念"&gt;一点碎碎念
&lt;/h2&gt;&lt;p&gt;一直以来我都觉得我玩的游戏和游戏机都不多，并且由于老家是十八线开外的小县城，跟公司里其它同事讨论游戏机的时候，当他们开始玩 GameBoy ，土星， N64 之类的时候，我们那边仍然还是山寨红白机刚进来的状态，所以有一种中间很多代都被错过了的感觉，不过这样细细一盘，好像我的机器也不少来着（捂脸&lt;/p&gt;
&lt;p&gt;那么今天的碎碎念大概就是这样，后续看情况我可能会把如何在 2024 年给 PSP 和 3DS 刷系统刷破解的过程大致写一下。&lt;/p&gt;</description></item><item><title>来点 AsyncTalk 的幕后花絮</title><link>https://tinko.moe/p/about-asynctalk/</link><pubDate>Mon, 30 Oct 2023 14:36:13 +0800</pubDate><guid>https://tinko.moe/p/about-asynctalk/</guid><description>&lt;h2 id="引子"&gt;引子
&lt;/h2&gt;&lt;p&gt;如果有人某一天突然跳出来，喊着 “ 我的目标是把这个技术领域的人们带向下一个高度 ” 这样的口号，不要说正在看这篇文章的你们了，我自己都觉得喊这个口号的人是不是有点……魔怔，或者，傻？&lt;/p&gt;
&lt;p&gt;但是现实就是这么的有意思，我还记得那是 2021 年 10 月某一天下班之后， &lt;a class="link" href="https://annatarhe.com/" target="_blank" rel="noopener"
&gt;Annatar&lt;/a&gt; 带着 &lt;a class="link" href="https://twitter.com/Sleaf_" target="_blank" rel="noopener"
&gt;Sleaf&lt;/a&gt; 跑到我跟小鹿的办公区，彼时我跟小鹿正面临着部门调整拆分的事情，并且之前我在跟 Annatar 请求援助来帮忙给小鹿做思想工作让他尽早断念想赶紧敲定转岗，而 Sleaf 则是当天第一次见面，一瞬间我以为是 Annatar 带着小鹿的新主管过来聊工作，结果没想到从 Annatar 嘴里蹦出这么一句堪称中二程度爆表的话，而这也就是 &lt;a class="link" href="https://asynctalk.com/" target="_blank" rel="noopener"
&gt;AsyncTalk&lt;/a&gt; 这档播客节目的开始。&lt;/p&gt;
&lt;h2 id="主播或者说话事人"&gt;主播？或者说……话事人？
&lt;/h2&gt;&lt;p&gt;仔细读过上面一段文字之后，不出意外的话，你应该会愣一下并且开始怀疑我们四个是不是同一家公司的同事，那么现在可以说的是，在当时我们确实是同事关系，虽然现在已经——甚至在城市与地区层面，我们已经逐渐散开了，当然这也是 Annatar 的音质突然变好的原因之一，他之前非常装逼地跟我们说他买了个大杀器叫做 DJI Mic ，那我只能抱着我的舒尔和雅马哈瑟瑟发抖。&lt;/p&gt;
&lt;p&gt;Annatar 和小鹿最早都是跟我同一个部门招进来的，所以彼此之间本身也很熟悉，不过 Annatar 也是最早从这个部门调走的。虽然我们一直在节目里尽量避免提及工作相关的内容，但是有时候因为节目内容的关系，多少还是会触及一部分，那么如果你真的足够闲并且逐字逐句去分析我们说过的只言片语，你大概也能揣摩出来我们在录制节目这段时间各自的工作范围，日常工作的交集，甚至我们的上下班时间，更进一步你甚至还能猜到我们当时是在哪家公司——当然最后一个其实不难甚至不用猜，我们在 X 上都跟大老板有互动。&lt;/p&gt;
&lt;p&gt;在我们还能线下碰的那段时间，录节目的方式基本都是，找一个小的会议室，特别小的那种，连桌子都没有，就一个沙发加一个懒人沙发刚好容纳 4-5 个人东倒西歪躺着闲聊的那种小会议室，然后把角落的垃圾桶（带盖子的）搬到屋子中间，把 iPhone 放垃圾桶上面，语音备忘录一开，然后就这么录，所以一直以来都有评论在吐槽我们音质很差，那这确实是作为博客节目的一大缺点。本着不想把工作和私人混在一起的理念，我们在整个过程中都没有去主动想着找公司里的资源，而且我们手头也没有什么能用的个人资源，也只能苦一苦听众了。除了有一期，那期因为请了 &lt;a class="link" href="https://jysperm.me/" target="_blank" rel="noopener"
&gt;王子亭&lt;/a&gt; 过来做嘉宾，一方面是因为他本身的自我要求也比较高，另一方面，虽然大家都是 90 后，但是在技术话题领域内，他的经历和能力其实都是在我们几个人之上的，我们有一个非常难得的机会请一个一直仰望着的大佬来做客，期望中是为了尽量能做好一些，于是我厚着脸皮找了隔壁的音频部门，借用了他们的全向麦与录音棚，录制了可能是我们迄今为止成本最高的一期——是的，子亭在当时也是我们同事。&lt;/p&gt;
&lt;h2 id="选题还是段子大纲还是台本这是个问题"&gt;选题还是段子，大纲还是台本，这是个问题
&lt;/h2&gt;&lt;p&gt;客观来说，以一档播客节目的视角来看，我们每次录制所产生的有效内容的占比都还算合格，基本上最终输出的能占到原始录制内容的三分之一左右。好的一方面是我们在最早选题的时候会有一个大的池子，每天没事干看到新东西就往池子里扔，到了录制的前几天就捞一个出来做大纲。而差的另一方面，也是我觉得我们几个人有点 “ 搞 ” 的原因，就是我们做完大纲之后就直接开始录了，全部都是临场发挥，我们不会去像那些专业的 UP 主去做那种特别细致的台本，也不会说要提前准备好每个人的观点，更不要说像设计剧情一样地故意制造观点对立——完全没有，都是当场发挥。&lt;/p&gt;
&lt;p&gt;不过这也给我制造了一个非常好去发挥搞事能力的环境，因为没有台本的限制，而且在录制的时候也是面对面地聊，所以我吐槽役的属性可以完全地放开，并且能卡在我预期中最合适的时间点来抛或者制造段子。要说最成功的段子，或许还得是 Annatar 的 Bitmap 梗，我可以保证这个梗或许在 Annatar 的余生中将一直伴随着他（笑&lt;/p&gt;
&lt;h2 id="播客后期一点都不比视频轻松"&gt;播客后期一点都不比视频轻松
&lt;/h2&gt;&lt;p&gt;非常凑巧的是，因为一些机缘巧合，我手头一直持有着一些演播设备，有专业的控台，也有一些入门的，比如 Stream Deck 。作为或许是四个人中，做流媒体最擅长的那个人，在相当长的一段时间里， AsyncTalk 的后期剪辑一直是我独自一手操办。客观来说，配合 Stream Deck 操作剪辑软件，确实是比剩下三位候选人任选其一效率都更高，这也是他们一直比较放心的原因之一。但是从我自己的视角来说，其实给我们这档播客做后期，心智负担还是比较大的。一方面因为收音问题，每次都需要进行一些额外的降噪处理，复杂一些的时候甚至不得不手动调曲线，而且当时 AI 降噪也还没出来所以这件事情只能手动做，当然还是因为这个原因，我决定垫一个 BGM 在后面，也是为了盖住一部分消不掉的底噪，尽量让听众在听的时候能稍微舒服一些。另一方面则是因为我们本身不是专业的主播，所以类似于 “ 啧 ” ， “ 嘶 ” ， “ 哈 ” ， “ 呃 ” 之类的无意义的口癖是非常多的，再加上我们是不设计台本的，所以有些时候讲着讲着会出现非常多的重复词句、卡顿、口误等等非常影响收听体验的断档，而这些东西是我不太能接受的，于是我会尽可能地把这些内容给修整掉，你可以看一下 &lt;a class="link" href="https://youtu.be/wE4E-pzgFuY" target="_blank" rel="noopener"
&gt;这个视频&lt;/a&gt; 里的例子，应该能理解我处理的过程和目的。&lt;/p&gt;
&lt;p&gt;不过也是因为一个人一直顶实在太累的，所以后面一部分节目是让 Annatar 自己去处理了，相比较而言，他的剪辑粒度就没有这么细，如果把几期节目放在一起听，应该不难分辨出后期剪辑是谁执行的。当然，现在回过头看，我们在这么早期就以我这么细的剪辑粒度执行，对应的产出价值其实可能是有一些不太划算，只能说是我自己的一些蜜汁坚持罢。&lt;/p&gt;
&lt;h2 id="今天有什么特别的吗"&gt;今天有什么特别的吗？
&lt;/h2&gt;&lt;p&gt;坦诚来说，上面所述的状态其实是一直持续到 2022 年中后期，但是随着一些其他因素的变动，从那时开始，我们四个人在物理层面的距离越来越远，录节目也变成了线上录制，但是没坚持多久就因为远程录制的效果，制作难度，还有各自的生活与工作安排，导致我们在一段时间内没再参与，而 Annatar 作为发起人（以及唯一坚信那句口号的人）一直还在坚持，也是很不容易。&lt;/p&gt;
&lt;p&gt;而今天在这里发这段东西的原因，其实很简单，还是同样的，因为一些奇奇怪怪的变动，可以剧透的是，在后面一段时间里，至少我可以开始继续陪 Annatar 一起录 (dui) 制 (pen) 了，他不用再继续单口相声了。如果你对我们这个播客有什么评价或者建议之类的，可以在小宇宙播单里发，这应该是我们各个发布平台里唯一一个支持评论的平台，或者也可以发到这档节目的反馈邮箱 (&lt;a class="link" href="mailto:async.talk@gmail.com" &gt;async.talk@gmail.com&lt;/a&gt;) 里，再或者我们还有 Discord ，也可以去吐吐槽，有兴趣的可以先去关注这个播客节目的发布平台，以后如果还有有意思的幕后花絮我也会不定期在这里发，那么今天大概就是这样 wwww&lt;/p&gt;
&lt;p&gt;（另：这个口号我一个彩笔我可不敢喊&lt;/p&gt;</description></item><item><title>关于这份 Hugo 是怎么弄起来的</title><link>https://tinko.moe/p/my-hugo-setup/</link><pubDate>Sun, 29 Oct 2023 14:06:07 +0800</pubDate><guid>https://tinko.moe/p/my-hugo-setup/</guid><description>&lt;h2 id="决定用-hugo-的原因"&gt;决定用 Hugo 的原因
&lt;/h2&gt;&lt;p&gt;一开始考虑的是，因为评论管理起来太麻烦了，于是想着要不要放弃掉评论。从 14 年最早开始做个人站的时候，先是 Typecho 再到 WP ，其实一直以来都比较讨厌的是 &lt;code&gt;php&lt;/code&gt; 运行起来实在有点慢（当然，跟我的 VPS 的配置有点差也有关系）。&lt;/p&gt;
&lt;p&gt;既然放弃评论机制，那么对于 “ 精通 Markdown ” 的人来说，各种静态站点生成器就变成了首选，毕竟不再有动态内容的需求了，而且像有账号洁癖的程序员群体，基本上是不会去公共设备上登录自己账号的，自然也不存在跑到外面用别人电脑写文章这种事情。&lt;/p&gt;
&lt;p&gt;进入静态站点生成器这个话题之后，绕不过去的一环自然是速度。老实说，从我过去为数不多的使用体验， Hexo 真的就，几个页面能跑半天，更何况还有个 &lt;code&gt;node_modules&lt;/code&gt; ，属实是血压拉满（虽然我主力眼下还是 JS 但是不妨碍我喷 &lt;code&gt;node_modules&lt;/code&gt; ）。而 Jekyll 甚至还没有入围就被我踹了，单纯是因为它是用 &lt;code&gt;Ruby&lt;/code&gt; 写的（鄙视链又开始了）。所以， Hugo 这种速度超快的，在这一轮（也是唯一一轮）就这么选出来了。&lt;/p&gt;
&lt;h2 id="主题呢"&gt;主题呢？
&lt;/h2&gt;&lt;p&gt;选中 Hugo 之后，我又回到了到底是用 Hugo 还是重启 WP 的纠结中，因为我发现， WP 有一个叫 &lt;a class="link" href="https://archive-blog.s23.moe/archives/746" target="_blank" rel="noopener"
&gt;Argon&lt;/a&gt; 的主题还蛮好看的，就又开始了无意义的纠结……然而最后结束这份纠结的原因是因为……我看了眼我的 VPS 的配置……并且不想在这上面再多花钱了。&lt;/p&gt;
&lt;p&gt;在放弃 Argon 之后，回到 Hugo 的主题范围内，直接在 GitHub 按 Star 排序，前几位稍微瞅了一眼， Stack 算是比较对胃口的，相对简单没那么花哨，于是就选了。&lt;/p&gt;
&lt;p&gt;配置我这份实例的过程中，我稍微去参考了一下墨语的 &lt;a class="link" href="https://moyu.ee/p/hugo-stack/" target="_blank" rel="noopener"
&gt;这篇文章&lt;/a&gt; ，但是没有完全照搬，比如他的字体和样式设定我觉得就没有很合我胃口，以及我并没有使用 &lt;code&gt;hugo mod&lt;/code&gt; 所以我也没有像他那样直接去修改主题文件，用了另外的覆写方式。&lt;/p&gt;
&lt;h2 id="cloudflare-先开起来"&gt;Cloudflare 先开起来
&lt;/h2&gt;&lt;p&gt;CF 这头就很简单了，域名解析转入，并且开通一个 Pages ，再把自己的域名指过来就好了。&lt;/p&gt;
&lt;p&gt;在我粗浅地看文档的过程中，我发现 CF 这边如果用 git 仓库链接的方式的话，是有开销限制的，而我在 GitHub 那边有 Pro ，所以就想在这边省省，于是在创建 Pages 项目的时候，我直接用了上传压缩包的方式来初始化，反正以后 CI/CD 弄起来，也是 GitHub Actions 来调 API 上传。&lt;/p&gt;
&lt;p&gt;Pages 默认会给一个 &lt;code&gt;[project-name].pages.dev&lt;/code&gt; 的域名，默认情况下，这个域名和自己绑的域名都可以访问到。为了避免意外，总归还是期望能不能都跳转到自己的域名上（虽然别人应该也猜不到我的 &lt;code&gt;.pages.dev&lt;/code&gt; 的域名是什么）。那么根据 CF 的 &lt;a class="link" href="https://developers.cloudflare.com/pages/how-to/redirect-to-custom-domain/" target="_blank" rel="noopener"
&gt;官方文档&lt;/a&gt; ，用了它的 Bulk Redirect 做掉了这个跳转行为。哦对了，顺手还把 &lt;code&gt;www.tinko.moe&lt;/code&gt; 也跳了（笑&lt;/p&gt;
&lt;p&gt;至于每个 deployment 各自的子域名（也就是 &lt;code&gt;xxx.[project-name].pages.dev&lt;/code&gt; ），我用了 CF 的 Access ，加了一条 Everyone deny ，不担心有人能看了。&lt;/p&gt;
&lt;h2 id="上-github-actions"&gt;上 GitHub Actions
&lt;/h2&gt;&lt;p&gt;这个环节其实没什么好说的了。在本地跑起来看着没啥问题，带上 Actions Workflow 往 GitHub 上面推就是了，记得要先按文档在 Repository 的环境变量里去配上 Cloudflare API Key。&lt;/p&gt;
&lt;p&gt;从 Hugo 和 CF Pages 两边各自抄了一部分拼出来的 Worflow ，这里贴一下，以防有人有需要：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build and deploy to Cloudflare Pages&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;main]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deployments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;write&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploy to Cloudflare Pages&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Checkout&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/checkout@v5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;submodules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Cache Hugo resources&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/cache@v4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cache-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cache-hugo-resources&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;resources&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ env.cache-name }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/setup-go@v6&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;go-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;^1.21.0&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;go version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Setup Hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;peaceiris/actions-hugo@v3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hugo-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;latest&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extended&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hugo --minify --gc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Publish&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cloudflare/wrangler-action@v3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ secrets.CLOUDFLARE_API_TOKEN }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;accountId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ secrets.CLOUDFLARE_ACCOUNT_ID }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pages deploy public --project-name=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# MASKED&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gitHubToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;弄完这些到这里，基本上每次更新推上去之后可以在一分钟之内把整个 CI 走完，基本上没什么需要操心的。&lt;/p&gt;
&lt;h2 id="最后的最后"&gt;最后的最后
&lt;/h2&gt;&lt;p&gt;说实话现在这个方式我用起来还是比 WP 更舒服的。一方面，我写的内容都是 Markdown ，排版什么的也完全不用操心。另一方面，原始的文本和其它杂七杂八的东西都是在一个 &lt;code&gt;git&lt;/code&gt; 仓库里，直接一个复制文件夹或者打个压缩包就能带走了，相比起 WP 还要备份附件啊数据库啊之类的一堆东西，我觉得心智负担会低很多。而且现在写文章的时候，跟之前写文档的体验一样，都是在 VSCode 里面写，早也就习惯这样了。还有就是，我在写的过程中，我不再需要去操心会不会一个网络抖动导致我的草稿没能自动保存，或者写完之后点发布转圈圈要转半天，现在预览都在本地，一个 &lt;code&gt;Ctrl-S&lt;/code&gt; 直接 hot reload ，或者更懒一点我可以直接用 VSCode 的 Markdown All in one 插件自带的 Preview ，发布也是 &lt;code&gt;git push&lt;/code&gt; 不再操心跟之前 WP 一样点个发布卡半天还不敢刷新。&lt;/p&gt;
&lt;p&gt;而在部署方面，我也不需要再去操心 VPS 要停机维护啊， SSL 证书要续期啊， nginx 配反代啊什么乱七八糟的，没有，彻底地，完全没有了，一个 Cloudflare Pages 彻底送走一切。&lt;/p&gt;
&lt;p&gt;哦对，甚至，我还有 GitHub Copilot ，虽然这玩意的提示内容在写文章的时候用处不大，但是时不时倒也能猜中一些，少写一两行字也行（笑&lt;/p&gt;</description></item><item><title>New World</title><link>https://tinko.moe/p/new-world/</link><pubDate>Fri, 27 Oct 2023 12:07:30 +0800</pubDate><guid>https://tinko.moe/p/new-world/</guid><description>&lt;p&gt;想起来，上一次整理个人站应该是 4 年前了，当时还是 WordPress 来着，由于工作的关系，也就一直放下了。&lt;/p&gt;
&lt;p&gt;这么想起来，其实是有点吃亏的。虽然说这几年工作也还算顺利，并且在公司里也积累了很多文档，但是终归在个人层面上的沉淀还是漏掉了。&lt;/p&gt;
&lt;p&gt;虽然之前的 WP 都有备份，但是一想到还要去搞 &lt;code&gt;php&lt;/code&gt; 就感觉很头大，于是这次直接选择了 Hugo ，况且这些年下来，自己也完全成为了 &lt;code&gt;Markdown&lt;/code&gt; 选手。&lt;/p&gt;
&lt;p&gt;以前的东西就不再迁移了，毕竟也没什么营养，虽然存档还留着，也就自己翻翻了。&lt;/p&gt;
&lt;p&gt;哦对了，这次直接不打算开评论了。早前因为垃圾评论泛滥，所以在 WP 上同时开了审核和 JetPack ，虽然效果还行，但是评论数量也就自己几个熟人。以后更新的话应该会在 X 上发个链接，直接在 X 上评论得了，我也省事。&lt;/p&gt;
&lt;p&gt;并且，因为不开评论之后，也没什么动态内容（你都用 Hugo 了还说个锤子动态内容），所以这次用上了 GitHub Actions 做生成，完了之后送 Cloudflare Pages ，有一说一 CF 大法挺好的（这里有伏笔）。&lt;/p&gt;
&lt;p&gt;比较搞笑的是，因为实在想偷懒，在重建友链页面时直接去 Wayback Machine 翻了当年 WP 的快照，然后照着上面挨个看过去，还没删掉我友链的就放进来（笑&lt;/p&gt;
&lt;p&gt;个人站之后有什么计划？最近一段时间应该会比较闲，后续应该会有一些这几年工作的回顾，近期出游的记录，有兴趣的可以期待一下。长线来看，应该就是继续用 Hugo 写 MD 了，当然不排除因为什么别的功能或者杂七杂八的又把 WP 搭起来，不过概率应该不大。&lt;/p&gt;
&lt;p&gt;那么，今天先这样。&lt;/p&gt;</description></item></channel></rss>