工具笔记 Alex Chan 2026/11/01
文章介绍作者为性能敏感团队开发的 gobench 工具,用于跨 Git 分支比较 Go benchmark 结果。原有 shell 脚本配合 benchstat 虽能多次采样并统计差异,但需要手动切换提交、遗留临时文件,还会让仓库进入 detached HEAD 状态。gobench 通过创建临时 Git worktree、在内存中捕获输出、交替采样两个分支来改善体验,并用递归与迭代 Fibonacci 的示例展示 benchstat 表格和性能差异。工具本身是 Go 程序,调用 git、go test 和 benchstat,适合需要频繁验证 Go 性能回归的开发者;边界是依赖 Git 分支与 benchstat 生态。
推荐收录,因为文章不仅介绍工具用法,还交代了现有 shell+benchstat 流程的痛点、临时 worktree、内存捕获和交替采样等设计动机,并给出可验证的 benchmark 示例。对需要频繁比较 Go 分支性能、降低本机噪声影响的开发者有直接迁移价值;主要局限是场景集中在 Git 分支对比和 benchstat 工作流。
工具笔记 Alex Chan 2026/11/01
文章介绍作者用 Playwright 自动验证个人网页存档是否自包含:监听 request 事件收集页面加载请求,以 is_external_request 判断是否同源,并检查页面异常、控制台错误、非 GET 请求等。作者还通过强制 reflow 触发懒加载资源,用不同 BrowserContext 模拟明暗模式和像素密度,并缓存验证结果以控制耗时。实践显示首轮检查能发现缺失字体和图片,补全后页面可通过;但响应式图片、外观设置和交互触发资源仍可能漏检。该方法适合简单静态博客存档,复杂页面需增加交互和多环境覆盖,并权衡验证时间与覆盖率。
推荐收录:文章给出了可运行的 Playwright 请求监听与同源判定代码,并说明强制 reflow、BrowserContext 多环境验证和结果缓存等工程细节,属于可迁移的工具工作流。适合做网页存档、静态站点检查、CSP 配置验证或前端资源审计的开发者参考;局限是仅覆盖初始加载场景,复杂交互页面需自行扩展,且不能保证 100% 自包含。
工程实践 Alex Chan 2026/10/26
文章复盘 Prometheus 中一个抖动告警的处理:服务队列繁忙时 worker 线程挤占 Web 服务器,导致 /metrics 抓取间歇失败,基于 up 指标和 avg_over_time 的告警反复触发。作者没有只依赖 Alertmanager Silence,而是把故障实例从原告警排除,并新增“正向告警”:当该实例 30 分钟窗口内 up 平均值不低于 0.95 且持续 14 天时,以 info 级别提醒移除例外。文中给出完整 PromQL/YAML 示例,并说明同事修复服务、连续两周稳定后告警按预期触发。该方案适合临时抑制已知问题并需要自动提醒恢复,但若指标不能代表真实健康状态或修复周期不确定,持续时间与例外范围需谨慎设置。
推荐收录,因为它给出了可复现的 PromQL/YAML 配置和完整问题背景,不是泛泛谈告警治理,而是展示了 Silence 与正向告警之间的取舍。对负责 SRE、值班和可观测性建设的读者,这种用稳定窗口提醒清理临时例外的方法可直接迁移;风险是 14 天持续窗口和指标选择需结合真实健康语义评估。
技术文章 Alex Chan 2026/09/26
文章介绍如何在 Rust 中实现带命名参数的参数化/表驱动测试,以缩略图工具为例,希望测试逻辑写一次、多组输入复用。作者比较 for 循环、位置参数宏与 rstest、parameterized、yare 等第三方库,但因个人项目想学习宏而手写 macro_rules!。核心是让 matcher 匹配类似结构体的命名字段,再由 transcriber 为每个用例生成独立 #[test] 函数,并解释 $(...)*、元变量与 matcher/transcriber 机制。结论是命名用例更自文档化、用例相互隔离且便于新增。边界在于示例面向小型个人 Rust 工具,未做生产级库选型或充分基准,宏模式也绑定特定测试结构。
推荐收录:文章给出完整的 macro_rules! 定义、matcher/transcriber 拆解和生成代码示例,并对比 for 循环、位置参数宏和第三方库,证据充分。适合正在写 Rust 测试或想理解声明式宏的开发者,可迁移到表驱动测试、代码生成和减少样板代码的场景。需注意作者刻意不用第三方库且项目规模小,生产选型仍需结合 rstest/yare 等方案的维护成本。
工具笔记 Alex Chan 2026/09/15
文章介绍一种把视频转成可在播客应用中扫读的 MP3 的工作流:先用 FFmpeg 提取音轨,并按固定间隔抽帧生成缩略图;再用 Python Mutagen 把每帧作为隐藏的 ID3 CHAP 章节封面写入 MP3。由于 Overcast 支持章节和逐章封面,播放时锁屏或 Now Playing 会以每几秒一帧的慢速定格方式呈现视频画面,从而兼顾音频收听和视觉上下文。作者说明了 CHAP/APIC 帧、FFmpeg fps/scale 滤镜、省略 CTOC 目录以避免数百章节列表等细节,并给出 glancecast 脚本。该方案依赖特定播客应用的章节展示能力,转码速度、竖屏缩放和视觉信息密度也有边界,但作为个人内容消费工具链具有可迁移性。
推荐收录:文章给出了可复现的完整工具链,包括 FFmpeg 抽帧/转码命令、Mutagen 写入 ID3 隐藏章节的代码和验证方式,不是泛泛介绍。适合愿意折腾播客播放器、音视频元数据或自动化工作流的开发者,可迁移到为音频补充视觉上下文、批量生成章节封面等场景;主要风险是强依赖 Overcast 的章节实现,且对需要高保真视频信息的场景不适用。
技术文章 Alex Chan 2026/08/20
作者在项目中需要合并多个 .tar.gz 文件,起初尝试用 cat 直接拼接字节却失败,于是深入剖析 tar 和 gzip 的格式原理。文章指出 tar 源于磁带存储,采用顺序读取、追加写入和固定块大小,文件尾部有全零 EOF 标记,读者遇到它就会停止,因此直接拼接 tar 会导致第二个归档被忽略。gzip 是受专利法影响而设计的流式压缩器,由多个成员首尾相连组成,没有 EOF 标记,所以可以安全地用 cat 拼接。但当 gzip 与 tar 结合时,解压流中 tar 的 EOF 标记依然会让 tar 提前停止。最终作者用 Python tarfile 模块解包每个归档再重新写入,生成带单一 EOF 标记的新归档,并给出了 r:gz / w:gz 的完整代码。文章还讨论了文件大小需预先声明、重复文件名覆盖行为、EOF 后内容被忽略等边界,适合需要深入理解文件格式或处理归档合并的读者。
推荐收录。文章从一个常见却易被误解的实际问题切入,清晰揭示了 tar 与 gzip 在数据组织方式上的本质差异,帮助读者建立长期可用的格式心智模型。对从事数据管道、文件工具开发或需要处理归档格式的工程师,文中的原理解释和 Python 解决方案都可直接迁移。
工程实践 Alex Chan 2026/07/18
作者在整理本地媒体库字幕并统一为WebVTT格式时,遇到UTF-8字节顺序标记(BOM)导致SRT转换异常的bug。文章先解释BOM的原理及其在UTF-8编码中的具体字节序列,然后展示BOM与序列号混合导致解析失败的现象。修复方案从最初手动检测和移除,优化为利用Python的encoding="utf-8-sig"自动跳过BOM,使转换代码回归纯净。对于已经生成的错误文件,作者使用ripgrep结合字节模式(?-u:\xEF\xBB\xBF)搜索文件中的BOM,并通过脚本批量清理,最后用ripgrep和Git仓库双重验证修复结果。整个过程串联了字符编码知识、工具选择和验证手段,是典型的文本处理工程调试案例。
推荐收录,因为该案例通过一个真实的文本编码陷阱,展示了从原理理解到优雅修复的完整路径。文中提供的utf-8-sig编码技巧和ripgrep字节搜索模式可直接迁移到其他处理多编码文件的场景,尤其适合需要处理外部数据来源的开发者。同时,它强调了理解底层细节对快速定位问题的重要性,对提升工程调试能力有实际参考价值。
工具笔记 Alex Chan 2026/07/05
文章先提出一个很具体的个人管理策略:作者每周整理相机胶卷,把照片分成保留、删除和“待处理”三类,并进一步要求每张保留照片都写上一两句说明,记录拍摄时的场景和心情。作者认为这种轻量元数据能显著增强照片作为“生活记录”的价值,也能反过来促使自己更谨慎地筛选照片,因为说不清意义的图片未必值得长期保留。随后文章转到工具实现:作者把这一能力加进自写的 Blink Mac 应用,通过快捷键浏览、分类,并用底部覆盖层编辑 caption,保持全程键盘操作。最后作者回顾了重返旧代码库的维护成本,强调注释和文档对长期可读性的重要性,并把这个“只为自己服务”的小软件视为成功案例。文章的边界也很明确:它主要适合个人照片归档和单用户工具,不讨论通用产品化、同步或多用户协作。
文中不仅描述了“给照片写说明”的个人习惯,还给出了可落地的工具设计:键盘优先、轻量编辑、保留上下文元数据,并在自写应用里实现。适合做个人效率工具、桌面软件和长期维护小项目的读者参考,但它的经验强依赖单用户场景,产品化和协作场景的迁移价值有限。
个人心得 Alex Chan 2026/06/29
文章从作者童年“电脑房”的记忆切入,回顾计算设备如何从固定场所的台式机,逐步演化为笔记本、智能手机、穿戴设备等随身终端。作者认为,这种便携化极大提升了便利性与可达性,但也把应用和通知带到了我们生活的每个角落,使数字服务更容易持续争夺注意力。为对抗这种“无处不在”的干扰,他重新建立物理边界:严格控制通知、改用不主动打扰的健康设备、把台式机作为主电脑、将手机固定放在办公室充电、让笔记本只在离家时使用。文章最后指出,摩擦并非总是坏事,适度的距离能帮助人更主动地选择何时进入数字世界、何时回到现实生活。
推荐收录,因为文中直接给出了可执行的边界重建方法:关闭大多数通知、减少随身设备、用物理空间隔离手机与电脑。适合关注注意力管理、开发者自我约束和数字极简实践的读者参考,也能迁移到远程办公与高干扰环境下的个人工作流设计。