[{"content":"寒假结束，从温州返回北京。本来准备买机票，看着那条跨越中国南北的航线，何不趁机通联沿途各地的友台？于是从航旅纵横切换到了铁路 12306，高铁约 7 小时，遂买票。\n笔者乘 2 月 26 日 10:54 发车的 G886 次动车，于 19:59 到达北京，全程使用 UVK6，5W 功率，原装天线。\n通联记录 途经地点 中继台 状态 通联情况 金华南站 BR5AD 可开，有回波 CQ 无应答 杭州东站 BR5AI 无法开中继 直频 CQ 无应答 溧阳站 溧阳中继台 可开，有回波 CQ 无应答 南京南站 438.610 可开，有回波 QSO BA4TLH（59，摩托罗拉 GM300，770 天线，25W）\nQSO BA4SCR（59，站内建筑遮挡，未交换设备信息） 滁州 439.250 可开，有回波 CQ 完即入隧道，断联 蚌埠 438.295 可开，有回波 CQ 无应答 宿州 BR6AG 无法开中继 — 徐州东站 439.750 东区 可开，有回波 QSO BA4TST（UVK6，原装天线，5W） 枣庄 BR4KK 无法开中继 — 滕州 438.800 无法开中继 — 邹城 439.000 可开，有回波 CQ 有友台回应，但列车不停靠，信号断续后消失 曲阜 438.200 可开，有回波 CQ 无应答 泰安 BR4MT 泰山 无法开中继 — 济南 BR4QC 可开，有回波 列车不停靠，10 秒后再次 PTT 无回波 济南 黄河中继台 可开，有回波 CQ 有友台回应，列车不停靠，无法抄收话音 德州 439.700 可开，有回波 CQ 无应答 小插曲 通完德州后，列车长巡视时走过我身旁，看见我拿着K6，顿时惊呼：这是什么？是不是能听到他们说话？全车人的目光瞬间汇聚过来。简单说明这是业余无线电台后，列车长说他们平时在频道里聊的都是些杂事，欢迎试着听听——但动车上用的明明是 Bolix 数字集群……\n总结 本次行程最终与 BA4TLH、BA4SCR、BA4TST 三位友台完成 QSO，QSL 卡片已寄出。\n在动车上通联，难度不亚于打卫星。列车进站前及出站后的数十秒是最佳传播窗口，一旦停靠站内，建筑物的遮挡便令信号难以抄收，加之金属车体本身也有一定的射频屏蔽效果。后面如有机会，我将继续尝试不同的动车线路 并设立一个 RailsAward。\n","date":"2026-02-27T13:19:58Z","permalink":"/p/cq-on-rails-20260226/","title":"南呼北应，从温州到北京的一路通联"},{"content":"恰好准备换卡，在 qrz.com 上整理了一下个人简介。翻了翻编辑页面，发现 Bio 支持 HTML语法，于是写了一份带样式的 Html，加了颜色、字号、间距。保存，刷新，结果页面上只剩开头一截。\n第一反应是触发了 qrz 的安全过滤。HTML 里有 style 属性，说不定被当成 XSS 风险砍掉了。于是改成最朴素的 \u0026lt;table\u0026gt;\u0026lt;td\u0026gt; 结构，内联样式都去掉，再试一次还是一样，保存后内容依然面目全非，只剩个开头残躯。div 标签被强制闭合，但是手动添加文字进去又能够正常保存。\nqrz 的 Bio 并不是直接嵌在页面 HTML 里的，用开发者工具翻了一圈，内容藏在渲染 Bio 简介的 \u0026lt;iframe\u0026gt; 下的 \u0026lt;script\u0026gt; 里，用 Base64 编码塞进去，关键部分长这样：\n1 2 3 jQuery(\u0026#39;.action-render-\u0026#39;).contents().find(\u0026#39;#biodata\u0026#39;).html( Base64.decode(\u0026#34;PHRhYmxlIGNlbGx...MjRweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMCAwIDVweCAwOyI+\u0026#34;) ); 把这段 Base64 解码出来，截断的位置恰好卡在 \u0026lt;p style=\u0026quot;color: #0050E6; font-size: 24px; font-weight: bold; margin: 0 0 5px 0;\u0026quot;\u0026gt; 后面原本紧跟着一个Emoji 👋 字符。Emoji 以及之后的所有内容全没了。\n这个现象指向一个很经典的历史遗留问题。MySQL 等数据库后端早年的 utf8 字符集是个残缺实现，每个字符最多只存 3 个字节。这对绝大多数文字来说够用，但 Unicode 中的 Emoji 字符需要 4 个字节来编码。一旦数据库列的字符集是 utf8 而非后来补全的 utf8mb4，写入时碰到第一个 4 字节字符，就会直接在那里截断，后面的内容全部丢弃。\nqrz.com 是一个运营了很久的老站，底层用的大概率正是这套配置。\n把 Bio 里所有 Emoji 删掉，保存，立刻生效。\n如果不去翻 Base64 编码的内容，浏览器又自动把截断的标签补上了，大概会一直以为是 HTML 过滤在作怪，然后在哪些标签被允许上兜圈子兜很久。\n有时候问题的答案藏得比预期深一点，多翻一层就能看见。\n","date":"2026-02-27T12:51:53Z","image":"/p/qrz-bio-emoji-issue/cover.png","permalink":"/p/qrz-bio-emoji-issue/","title":"解决 qrz.com 上 Bio 保存不全"},{"content":" Welcome to Hugo theme Stack. This is your first post. Edit or delete it, then start writing!\n这篇文章的出现，标志着这个博客的诞生。但若要追溯起来，这已是第三次了。\n启蒙 那是 2016 年，我还在读初中。现在回想起来，那个年纪对技术的痴迷其实带着某种宗教般的狂热。不求理解只求占有。我想要一个网站不是因为有什么话要说，而是单纯想证明“我能做到这件事”。\n趴在那台运行着 Windows XP 的公共电脑前，用记事本一行行修改 WordPress 的 PHP 代码。那时完全不懂什么叫代码规范，甚至不知道缩进有什么意义，只知道改了某一行，页面就会变成另一个样子。这种因果关系简单、直接、可控，给了我一种近乎上帝的错觉。\n为了让博客真正上线，我在淘宝上买了一台 VPS 虚拟主机。价格大概每个月几十块钱，换来的是 1GB 内存和一个勉强能跑 Windows Server 2000 的环境。每次用远程桌面连接，都要盯着屏幕等上好几秒，看着那个熟悉的蓝色桌面像冲洗照片一样缓慢显现。\n技术栈在当时完全谈不上选择。我照着教程依葫芦画瓢：卡顿地打开宝塔面板的安装程序，一键安装 LNMP 环境，配置 MySQL 数据库，将WordPress的源代码上传、解压。然后赶紧在浏览器里输入 /install，看着安装向导一步步走完。最后把 WordPress 默认调用的 Google APIs 资源全部替换成国内的 CDN ，不然加载速度慢到让人怀疑人生。\n虚荣 但那个博客，从一开始就注定不会有任何实质内容。\n我给它加上了各种花里胡哨的特效：鼠标移动时有粒子跟随，点击会绽放烟花，右键弹出自制菜单。这些代码大多从论坛和别人的博客里复制粘贴而来，我并不理解它们的工作原理，只是像集邮一样收集酷炫效果。页面底部还郑重其事地加上了版权声明和复制提示，仿佛这里真的有什么了不起的原创内容。\n现在想来有些滑稽。渴望被看见，却没什么可展示的；宣示所有权，却不曾真正创造什么。博客更像是一面镜子，照出的是对技术这个概念本身的崇拜，而非对技术所能承载的思想的珍视。\n我注册了百度站长平台，每天去查看有没有被收录。甚至幻想过某天流量暴涨，服务器不堪重负，自己不得不紧急升级配置\u0026hellip;\u0026hellip;当然，这一天从未到来。几个月后，博客确实变成了一个臃肿的怪物，但不是因为内容丰富，而是因为塞满了各种插件和脚本。我自己都懒得打开它了。\n技术本身从来不是目的，它只是手段。这个道理我花了很久才明白。\n初中就这样过去了，那个博客连同 Windows Server 2000 的虚拟主机，一起随着时间被淘汰在了某个角落。\n极简 高中时期，我又起了搭建博客的念头。\n彼时前端世界已是沧海桑田。React 和 Vue 成为主流，各种 UI 框架层出不穷，CSDN、博客园这样的平台日益壮大。更重要的是，免费资源变得触手可及。\nFreenom 提供.tk、.cf、.ml、.ga等免费域名，各种云服务商推出免费套餐，就连 CDN 加速都有免费额度。\n这一次我选择了 Typecho。相比 WordPress，它轻量、简洁，没有那么多冗余功能。我在家里的 NAS 上用 Docker 部署，还运行了一个脚本定时续期 Freenom 域名。技术上比初中时成熟了不少。\n我特意选了一个极简风格的主题，没有任何动画，连图片都很少用。这次我想做的是一个真正纯粹的博客，一个只关注内容的地方。\n但形式上的极简并不等于实质上的纯粹。\n高中三年，学业压力越来越重。每天淹没在题海里，周末被各种补习班占据，想写点什么的冲动常有，但真正坐下来敲字的时候却又不知道该说什么。偶尔写几篇技术笔记，也大多是复制粘贴的命令和配置文件，谈不上有任何思考深度。\n博客部署在家庭 NAS 上，访问地址不得不加上 :8080 这样的端口号，看起来既不专业也不美观。我想过做内网穿透，想过迁移到 VPS，但最终都因为太麻烦而作罢。博客就这样半死不活地存在着，偶尔自己打开看看，更多时候是被遗忘。\n好景不长。Freenom 宣布暂停免费域名注册，随后这些域名陆续停止解析。官方的说辞是“因诈骗和滥用问题严重”。我的博客再次失去了访问入口，这一次我甚至没有感到多少遗憾，因为它从来就不曾真正活过。\n博客的生命力不在于技术选型，不在于界面美观，而在于是否有持续输出的内容。而内容的前提，是有东西可说，有思考值得记录。当时的我，显然还没有准备好。\nAI 2023 年是个特殊的年份。\nChatGPT 的出现像一颗巨石投入湖面，涟漪至今未息。AI从对话工具进化到思维链，再到自主代理、多模态交互、工具调用……技术的迭代速度快到让人眩晕。与此同时网站开发的门槛也降到了历史最低点：你甚至可以用自然语言描述需求，让AI帮你生成代码。\n此时我已经进入大学，终于有了相对自由的时间和空间。再看博客生态，已是百花齐放：WordPress 依然是 CMS 领域的巨头，PHP 版本来到 8.x; React 和 Vue 各领风骚，衍生出无数 UI 库和框架; SSR、ISR、Edge Function 这些概念从实验性功能变成生产标配; 1Panel 管理面板发布，界面比宝塔更现代;甚至还出现了基于区块链的 Xlog，将博客内容永久存储在去中心化网络上。为什么不再来一次？\n技术的丰富程度前所未有，选择也因此变得困难。\nHugo？ 我花了不少时间调研和对比，最终选择 Hugo。\nHugo 的核心是速度和简洁。它用Go语言编写，构建速度远超 Jekyll 、Hexo 这些基于脚本语言的生成器。更重要的是，它只做一件事：把 Markdown 转换成 HTML。不需要数据库，不需要运行时环境，不需要复杂的配置。你专注于用 Markdown 写作，剩下的交给 Hugo 处理。\n“只做一件事，并把它做好”的 Unix 哲学，在当今什么都想大而全的环境里反而显得难能可贵。\nGitHub Pages 免费、无需维护、微软背书、自动 HTTPS、天然的版本控制。更重要的是，所有文章都以纯文本形式存储在 Git 仓库里，即使哪天 GitHub 倒闭了也可以轻松迁移到任何支持静态托管的平台。\n为了优化访问速度，我配置了腾讯云 EdgeOne 进行 CDN 加速。\n从零到上线，半小时不到。\n写在最后 保罗·格雷厄姆在《黑客与画家》里说过：“写作能力是一种思考能力。”\n我不期待这个博客会有多少访客，不纠结 SEO 优化和社交媒体传播。我只是想有一个地方，可以诚实地写给现在的自己，也写给未来的自己。\n如果多年以后，我重新翻开这些文字，能想起当时是如何思考、如何困惑、如何成长的，那就足够了。\n这就是我想说的，关于博客的前世今生。\n欢迎来到这个新的开始。\nPhoto by Pawel Czerwinski on Unsplash\n","date":"2025-03-06T00:00:00Z","permalink":"/p/hello-world/","title":"N年后的再一次 Hello World"}]