2026-10-04#
新增 RSS 订阅页 :给原来那个「浏览器打开就是一屏 XML」的订阅地址包了一层给人看的页面(/rss/)
订阅地址一键复制(复制的是真正的订阅地址,不是页面地址)
「只要某一部分?」:列出可分栏订阅的栏目(博客),以及 19 个标签各自的订阅源;每个标签卡片显示该标签的订阅地址与文章数
「最新文章」:直接列出最近几篇,说明订阅后会收到什么
「什么是 RSS?怎么用?」+ 阅读器推荐(Feedly / Inoreader / Follow / Fluent Reader)
原始 index.xml 一个字没改,阅读器照旧可用;页脚 RSS 入口改指此页,另附通往原始 XML 的链接
两处实现细节值得记一笔:复制按钮的脚本必须放在全站 site.js 里 (事件委托),不能写成页面内联 <script>——换页走 innerHTML 替换,内联脚本不会执行,从首页点进本页会完全没反应;中文标签的订阅地址带百分号编码(/tags/u%EF%BC%9A%E7%9B%98/index.xml),而模板里没有可用的 URL 解码函数,所以改成浏览器端还原成 /tags/开发环境/ 这类可读形式,复制按钮仍取原始地址
换页后的滚动定位修正 :原来只有文章正文页回页首,其余页面套用 min(旧滚动位置, 新页可滚高度)——从长页切到短页时结果正好是新页底部 ,表现为「切了 tab 却停在半路」。现在主动点链接一律回页首;浏览器前进/后退不干预
顶部导航去掉 RSS 入口 :.menu .active 是 font-weight: 700,激活项加粗会改变菜单固有宽度——RSS 是 3 个西文字母,加粗后比 2 个汉字多出 1.5px,导致只有它高亮时导航宽度会跳(实测极差 1.50px,去掉后 0.00px)。RSS 入口保留在页脚
移除首屏文案的滚动淡出 :原先首屏文案挂着滚动驱动的 opacity 1 → 0(0 → 85vh),实测滚到 765px 就完全透明。窄窗口/手机上 85vh 很短,滚一屏内容还在、文案已经整块没了,观感就像被一层遮罩盖住;而首屏的标题、简介、按钮属于正文 ,不该承担视差。其余滚动动效(阅读进度条、正文图片揭示、技术栈跑马灯)不受影响
站内显示名改为「Nan」 :首页首屏大标题、首页与关于页的自我介绍、头像 alt 等对外位置由真名改为「Nan」;简历页与获奖证书的说明文字仍保留真名
友链页重做 :原来只有一段「欢迎交换友链」的纯文字,现在改成完整的换链页(/friends/)
版面顺序按「把朋友摆在最前」调整过:页头 → 我的朋友们 → 先把我加进你的友链 → 怎么申请 → 几条约定(想换友链的人往往先看看都有谁,再决定要不要换)
「我的朋友们」:卡片栅格(头像 + 站名 + 简介 + 标签),名单在 data/friends.yaml,加人只改数据;标签出现 2 种以上时自动出现筛选条
「先把我加进你的友链」:站名 / 简介 / 地址 / 头像四项各带一个复制按钮,另有「复制全部信息」一次拿走四行;这四项不写死在模板里 ,直接取自 hugo.toml 的 title、params.description、baseURL,改站点配置即同步
「怎么申请」:三步说明 + 一份可一键复制的申请模板(发邮件或到 GitHub 开 Issue)
「几条约定」:互换原则 / 链接维护 / 内容与站点要求
第一位朋友:殘月的小窝 (头像镜像到站内 static/img/friends/,不依赖对方图床)
实现上顺带把复制按钮抽成了全站通用件(button.copy-btn[data-copy]):/rss/ 的订阅地址按钮与新页面共用同一处事件委托(写在 site.js,因为 PJAX 换页走 innerHTML,页面内联脚本不会执行),并修掉一个老问题——复制失败时按钮也会变绿,现在成功是绿底对勾、失败是红字「复制失败」
页面从根目录的 content/friends.md 改成 section(content/friends/_index.md + layouts/friends/list.html),与 /about/ /stats/ /rss/ 的模板查找方式一致
首屏揭幕不再「闪一下」 :此前首次打开首页,会先看到导航和背景网格、紧接着被一块纯色遮罩盖住(内容消失)、然后遮罩向上揭开——一亮一暗的来回就是那个闪烁。原因是遮罩由脚本在页面开始绘制之后 才创建出来,永远比内容晚半拍,只调快慢消不掉它。现在遮罩改由页头一段同步执行 的样式直接呈现:页面画第一帧时它就已经盖着,「先露出内容的那一帧」不复存在(遮罩外观、约 520ms 向上揭开、只首页且每次会话只播一次、开启「减少动态」不播,都与原来一致)
同时加了保险:负责揭幕的脚本没加载、报错,或页面是在后台标签页里打开的(此时浏览器不跑动画帧),遮罩也会在约 1.8 秒后自己揭开,不会把页面永久盖住
用无头浏览器把「从打开到揭幕结束」逐帧录了下来做前后对照:旧做法第一帧导航已经可见、遮罩要到第 8 帧才出现;现在第一帧起就是遮罩,内容到第 22 帧才出现。另有 14 项边界断言(二次进站不重播、非首页不生成、减少动态不播、脚本迟到也能揭开且不会重新盖上、换页往返不残留、深浅两色下遮罩色都与页面底色一致)全部通过
项目列表(/projects/)重做成设计过的列表样式 :原来就是 Markdown 表格的默认长相——每格一圈 1px 边框、表头铺一条淡蓝色块、单元格只有 6px 内边距;列宽还跟着内容走,首列实测只有 260px,campus-bandwidth-aggregation 这类长名字被连字符断成两行,说明列却独占 860px。保持「列表」形态(没有改成卡片),换成本站自己的设计语言
去掉竖线与外框,只留行与行之间的横向分隔线;表头从一整条色块改成一行淡色小字 + 一条线
名字与说明拉开主次:名字半粗、用正文色、收起下划线,说明降为次要色且小一号;鼠标悬停时整行泛起淡蓝、名字转为强调色
首列固定成约三分之一版心(1120px 下约 392px),最长的项目名也能保持单行;名字前自动生成 01…10 的序号(用 CSS 计数器生成,Markdown 里不用手写编号),列表的秩序感比任何边框都强
表格文字与上方标题严格左对齐(原来单元格左右各有 13px 内边距,整块文字缩进了一截)
手机上(≤768px)改为堆叠:名字一行、说明另起一行并对齐在名字起点;表头视觉隐藏但保留给读屏器——两列在手机上会挤成一条且右侧看不全,堆叠后仍然是一份列表而不是卡片
文章里的数据表(如系统版本对比表)只继承干净的边框与表头,不参与上面的改造:三列表的列与列是对应关系,堆叠会丢掉这层含义,窄屏仍保持横向滚动
项目页删掉多余的「项目列表」标题 :页面头部已经写着「项目」、表格表头又是「项目 | 简介」,同一页「项目」出现了三次。删之前确认过全站没有任何链接指向 #项目列表,该页也没有目录块
《开发环境安装与配置指南》的 MinGW 一节更新 :GitHub 发布页那张截图换成了当前版本(15.2.0-rt_v13 → 16.2.0-rt_v14,红框圈定的下载项跟着更新),并在图后补了一段「这些包到底差在哪儿」的说明——同一页的 10 个压缩包其实只有三个选项不同:架构(i686 / x86_64)、线程模型(posix / win32 / mcf)、C 运行时(ucrt / msvcrt);16.2.0、release、rt_v14-rev1 各包相同,异常处理 seh / dwarf 又是跟着架构绑定的(64 位只有 seh),所以这两处都没得挑。三项各取推荐值拼起来正好就是红框那一份,并顺带点出选错的后果(比如选成 win32 线程模型,写多线程时会直接撞上 std::thread 的链接错误)
2026-09-30#
动效升级(分三批落地) :以 MUUUUU 的 161 个「动态感强」案例为参考,挑出适合本站的做了一轮系统升级
第一批(纯 CSS 优先):标题逐行遮罩上推、强调短线绘制、按钮与链接的微交互反馈;文章阅读进度条、目录滚动高亮、正文图片遮罩揭示、文章标题逐行
第二批(结构级):首屏滚动纵深、颗粒纹理层、技术栈跑马灯;PJAX 换页过渡与慢网加载细线、数字滚动计数
第三批(结构性):引入 Lenis 平滑滚动 (本地托管,开启「减少动态」时自动退回原生滚动)、文章左侧常驻目录栏、首页轻量开场
修复:换页后滚动上界未及时刷新,导致「卡在顶部滑不动 + 每次滑动弹回顶部 + 画面闪烁」
标题尺度实验 :四个标题角色同步放大(首屏 53.6 → 80px、段落标题 30.4 → 44px、文章标题 38.4 → 48px、页头 32 → 40px),左下角面板可一键切回基准尺度(?typescale=1);鼠标反色光圈与「霍楠 / h_n」窥视窗口按同一比例联动
关于页新增证书原件 :竞赛卡片里一个「查看获奖证书」按钮,点开是可左右切换的画廊(带说明与计数器,支持 ←/→ 翻看);证书编号已隐去
关于页移除「常用软件」板块
图片查看器交互修复 :图片为初始尺寸时,点击或拖动图片不再误关闭查看器;缩小时图片不会跑出画面;点击或拖动图片外 的区域,在任意缩放状态下都能关闭;放大看图时背景不再跟着滚轮滚动
灯箱按钮重做 :‹ › × 由文字字形改为内联图标(几何居中,不再因字体基线偏移而显得偏下);雪佛龙另做视觉修正(‹ 左移 1px、› 右移 1px),并修掉聚焦时圆形按钮被改成圆角方块的问题
首屏加载修复 :入场动画补上「首帧预隐藏」,内容不再先闪一下再被遮住;首帧底色改为主题实色,消除「先灰后黑」的跳变
修复「页面偶发卡在顶部滑不动」 :根因是静态脚本的缓存版本号长期没有更新,浏览器一直用着旧文件(该修的那次改动没能送达);现在脚本地址随文件内容自动变化,改了什么就必然重新下载。同时给平滑滚动加了两道防御:非法的滚动目标会被拦下并归零,且一旦内部状态被写坏,下一次滚轮会自动复位——即使再遇到坏状态也不需要刷新页面。若检测到有外部脚本(浏览器扩展等)在持续 往里写坏值,则自动退回浏览器原生滚动,绝不让页面卡住
内容索引:教程与开源项目两段由连续卡片栅格改为「编号 + 标题 + 摘要 + 时长」的行式索引,降低重复感
首页开源项目卡片维持大卡片形态(试过全宽出血带,观感违和已回退);液态背景向下延伸一段,与下方段落衔接更自然
修复一个很隐蔽的滚动故障:访问过搜索页之后,鼠标滚轮会卡死在顶部 (触控滑动仍正常,所以第一眼像"鼠标坏了")。原因是平滑滚动引擎的内部状态被写坏,且它的实例会在整个会话里跨页面复用 ,于是一次抖动被带到了之后每一页;滚轮归它接管、触控不归它管,这才出现"能滑/不能滑"的分裂现象。修复分两层:搜索页不再持有 滚动引擎(离开时重建全新实例,切断跨页传播);另外给它加了看门人——一旦发现内部状态被写坏,立即退回浏览器原生滚动并掐断它的滚轮接管,宁可少一层缓动也不让页面卡住
上面那个滚动故障,这轮找到了真正的根因并根除 :站内搜索包(Fuse)与平滑滚动引擎(Lenis)都把内部使用的单字母变量(e、t)声明在了全局 上,于是互相覆盖。无刷新进入搜索页时,搜索包把 e 覆盖成了一个普通对象,滚动引擎此后再也无法被创建(内部报 e is not a constructor),而这段失败又被代码静默吞掉——结果是平滑滚动消失,控制台却一个字都不说。修复方式:给这两个第三方包各自套一层函数作用域,内部名字不再落到全局(滚动引擎对外只暴露 Lenis);同时让「引擎创建失败」必须在控制台报错并记录原因,这类问题不会再无声无息地溜过去。此前记录过的「滚轮卡死在顶部」「内部滚动值被写成非数字」其实是同一个撞名(t 被换成了搜索包的工厂函数),这次一并根除
2026-09-29#
上线公开统计页 :新增 /stats/ 页面,展示浏览量、访客数、会话数、跳出率与平均停留,以及访问趋势和热门页面、来源、地区、浏览器、设备、自定义事件六个维度;支持近 7/30/90 天切换,页脚新增「站点统计」入口
文章页新增本文浏览量 :标题下方信息行显示该文章被浏览的次数(带 10 分钟缓存,来回翻页不重复请求接口)
访问统计全面升级 :
采集 Web Vitals 真实性能指标(TTFB / FCP / LCP / CLS / INP),可查每篇文章的实际加载速度
新增 7 类自定义事件:外链点击、邮箱点击、代码复制、图片放大、站内搜索(含命中数量)、主题切换、404 访问
统计范围限定为线上域名,本地预览不再污染数据;同时清理了历史遗留的 655 条本地预览噪声记录(占当时总量的 40%)
事件属性里的中文路径不再显示成 %E9%9A%8F... 这类百分号编码,可直接阅读
启用会话回放与热图 :可回放匿名化的访客操作(仅记录交互事件、输入内容按规则打码),并聚合页面点击位置与滚动深度,用于判断长文哪一段读者会放弃;隐私说明已同步到统计页
自定义 404 页面 生效:访问不存在的地址时显示站点自己的 404 页(此前是服务器默认页),同时计入统计
统计页卡片与站内其它卡片统一:加入入场动画与鼠标光效(按要求不含 3D 旋转)
修复:统计页各面板表格列宽不一致(主题的全局样式把表格重置成了块级元素);本地预览点击站内链接会误跳到线上站点
服务器侧安全加固:敏感配置移入受权限保护的独立文件、管理端启用双因素认证
2026-09-24#
新增开源项目 auto_input_anywhere(键盘输入助手,用 Windows SendInput 的 Unicode 模式把文本逐字「敲」进当前输入框,绕过网页表单、远程桌面、虚拟机等禁止粘贴的场景),开源项目达 10 个
项目页 / 简历页 / 首页数据源同步该条目,与 FrameKeeper 相邻排布(工具类在前、脚本类在后)
修复首页底部「开源项目主页」卡片的项目计数未随上次新增同步(仍显示 9)
首页「个开源项目」数字卡片的说明文案补上「键鼠自动化」,涵盖范围与现有项目对齐
2026-09-21#
竞赛动态:数学建模竞赛已完赛(2026-09-14),等待结果公布
2026-09-11#
卡片光效优化:手电筒光斑改为即时跟随指针(快速划过多个卡片不再从卡片中心追踪),并新增「边缘渐变高亮」——光斑照到卡片边缘时点亮边框,且只在鼠标指向的那张卡片上生效,不再跨卡片
卡片动效平滑:3D 倾斜改用两级低通滤波,快速拂过更顺、突变被抹去;上浮与回弹单独调速(上升 400ms、回弹 900ms)
主题切换重做:浅/深色切换改为整页合成层交叉淡入(View Transitions API),动画不再逐元素重绘,元素再多也不掉帧;顺带修复内容列与背景的色差竖条、以及文字比背景晚结束的问题;不支持该 API 的浏览器自动降级
修复滚轮滚动时卡片光效「卡在原地」:光效显隐改由 JS 状态(is-pointed,随 pointermove/scroll 重算)统一控制,不再依赖滚动时可能不刷新的 CSS :hover
2026-09-10#
文章同步开源仓库的新进展:新增「落地」一章(前置自查清单、单账号双桶最小配方、多桶聚合控制台)
健壮性章节补充「分流熔断(腿级降级)」与两条新故障模式(单腿劣化被健康检查掩盖、宿主机代理残留把探活带偏)
文章新增 3 张控制台演示截图;开源节补充 recipes / tools / assets 目录说明
「模型」一节按四桶复测改为 50n 规律 口径:稳态下行 ≈ 50n Mbps(单桶 47~50),并补「基线参照而非达标判据」「峰值不等于容量」两条前提;移除逐组合倍数表与旧配图
2026-09-06#
发布《把校园网「单会话限速」拆成 N 个桶:多会话带宽合并研究实录》,正文配 8 张信息图
新增开源项目 campus-bandwidth-aggregation(校园网「多设备并发会话」带宽合并的通用原理研究归档,内容全量脱敏),开源项目达 9 个
项目页 / 首页 / 简历页的项目列表统一排序并改为表格展示
图片尺寸规则调整:桌面单图 88%、连续多图 80%、手机 95%,手动指定宽度豁免;《图片大小速查》同步更新
移动端适配优化:正文与标题字号收窄、文章图片放宽
交互修复:PJAX 进入文章正文自动回到页首、锚点定位移除二次跳转、入场动画改为固定像素触发(进入视口 20px,可调)
2026-09-03#
新增开源项目 UTF-8-automatic-conversion(批量转换文件编码为 UTF-8),开源项目达 8 个
h_n-printer 标注为全栈项目
2026-09-01#
更新项目页 / 简历页 / 首页的项目描述,统一信息口径
2026-08-23#
竞赛动态:RoboCup 四足机器狗挑战赛已完赛,等待结果公布
2026-08-18#
文章支持目录跳转(TOC)与锚点定位
移动端适配优化:禁用液态灰色遮罩、修复双指缩放与卡片透明
文章排版升级:正文加宽、图片限宽、首行缩进
2026-08-17#
发布《DeepSeek 涨价背后:算力让路,AGI 优先》
新增 KaTeX 数学公式支持
部署方式改为本地构建直传服务器,移除 GitHub Actions 与后台管理
2026-08-16#
2026-08-14#
主题切换升级为三态循环(浅色 / 深色 / 跟随系统),可实时跟随 Windows 系统主题
引入 PJAX 无刷新导航,特效跨页面持续
首页卡片加入 3D 倾斜与磁吸光效
仓库开源(MIT License),移除部署脚本中的服务器敏感信息
2026-08-11#
网站正式上线(Hugo + PaperMod,部署于 blog.hn-space.cn)
发布《开发环境安装与配置指南》与《Windows 11 精简版系统重装教程》
新增站内搜索、归档页、标签导航、相关文章、友链页与在线简历