<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Macos on Armstrong Yan</title><link>https://yanqian.github.io/topics/macos/</link><description>Recent content in Macos on Armstrong Yan</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 13 Aug 2026 14:08:41 +0800</lastBuildDate><atom:link href="https://yanqian.github.io/topics/macos/index.xml" rel="self" type="application/rss+xml"/><item><title>The Hard Parts of Hey Jarvis II: From Demo to Mac Product</title><link>https://yanqian.github.io/posts/publish/building-hey-jarvis-mac-product/</link><pubDate>Thu, 13 Aug 2026 14:08:41 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/building-hey-jarvis-mac-product/</guid><description>&lt;p&gt;In &lt;a href="https://yanqian.github.io/posts/publish/building-hey-jarvis-voice-interaction/" &gt;the previous article&lt;/a&gt;, I wrote about how Hey Jarvis handles confirmation sounds, echo, interruptions, and microphone handoffs.&lt;/p&gt;
&lt;p&gt;Once those capabilities were working in the terminal and browser, I briefly thought I had finished the hardest part of building the product.&lt;/p&gt;
&lt;p&gt;Later, I realized I had proved only that a single voice interaction flow could work.&lt;/p&gt;
&lt;p&gt;A Demo needs to succeed once in an environment I have prepared. A product must contend with first-time installation, denied permissions, window switching, a locked Mac, system sleep, subprocess crashes, and application shutdown. It must not only succeed; when it cannot, it must stop in a state that is safe, honest, and recoverable.&lt;/p&gt;</description></item></channel></rss>