<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>mahui.me</title><description>Ma Hui 的个人网站：文章与独立作品。</description><link>https://mahui.me/</link><item><title>在别人的终端里开一扇门：VibeTrail resume 的四次降级</title><link>https://mahui.me/blog/vibetrail-resume-degrade/</link><guid isPermaLink="true">https://mahui.me/blog/vibetrail-resume-degrade/</guid><description>AppleScript 崩溃、TCC 静默拒绝、死点击探案——macOS 自动化的权限暗礁，和最后那条一直摆在眼前的路。</description><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate></item><item><title>建站记：这个网站是怎么搭的</title><link>https://mahui.me/blog/hello-world/</link><guid isPermaLink="true">https://mahui.me/blog/hello-world/</guid><description>技术选型、目录结构和部署方式，一篇讲完。</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate></item><item><title>把 ripgrep 链接进应用：VibeTrail 的无索引全文搜索</title><link>https://mahui.me/blog/vibetrail-ripgrep/</link><guid isPermaLink="true">https://mahui.me/blog/vibetrail-ripgrep/</guid><description>不建数据库、不做索引，直接把 grep 引擎编进 Rust 应用。</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate></item><item><title>400 万个文件教我的事：Diskly 扫描器性能复盘</title><link>https://mahui.me/blog/diskly-four-million-files/</link><guid isPermaLink="true">https://mahui.me/blog/diskly-four-million-files/</guid><description>75 秒到 2.2 秒、6.46TB 的虚报、一行改动省 150MB、多开线程反而更慢——所有直觉都要过数字这一关。</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate></item><item><title>不走 App Store：macOS 应用的签名、公证与自更新</title><link>https://mahui.me/blog/mac-app-distribution/</link><guid isPermaLink="true">https://mahui.me/blog/mac-app-distribution/</guid><description>Pier 和 Diskly 的独立分发实践：Developer ID、notarytool、Sparkle、Homebrew tap。</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>一个功能的生与死：Pier 每进程网速的四次重写</title><link>https://mahui.me/blog/pier-network-monitor-postmortem/</link><guid isPermaLink="true">https://mahui.me/blog/pier-network-monitor-postmortem/</guid><description>Pier 复盘：块缓冲、CRLF 字素、spin-loop 的 nettop、必崩的私有框架——以及怎么算清一笔「删功能」的账。</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate></item><item><title>App 假死三次，同一个凶手：别阻塞 Swift 协作线程池</title><link>https://mahui.me/blog/flick-cooperative-pool/</link><guid isPermaLink="true">https://mahui.me/blog/flick-cooperative-pool/</guid><description>Flick 复盘：4 次 compute start、0 次 compute done——协作式调度的契约，以及违反它的三种姿势。</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate></item><item><title>不上传一张照片：Flick 的本地相似照片检测</title><link>https://mahui.me/blog/on-device-photo-similarity/</link><guid isPermaLink="true">https://mahui.me/blog/on-device-photo-similarity/</guid><description>用 Vision 特征向量、Laplacian 方差和 SQLite 缓存，在设备端完成相册分析。</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate></item><item><title>让数据库约束当哨兵：三个被约束「抓现行」的 bug</title><link>https://mahui.me/blog/yuwei-constraints-as-tripwires/</link><guid isPermaLink="true">https://mahui.me/blog/yuwei-constraints-as-tripwires/</guid><description>余位复盘：23514、23P01 和一批幽灵座位——约束不只是防线，还是最诚实的报警器。</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>三重防护杜绝超售：一个排座系统的并发控制</title><link>https://mahui.me/blog/prevent-overselling/</link><guid isPermaLink="true">https://mahui.me/blog/prevent-overselling/</guid><description>余位的库存安全设计：行锁、乐观锁、数据库约束，缺一不可。</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item></channel></rss>