<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Etienne Caron — Writing</title>
  <subtitle>Android, embedded, and workshops where people drive real hardware from a browser tab.</subtitle>
  <id>https://kanawish.com/</id>
  <link rel="alternate" type="text/html" href="https://kanawish.com/blog"/>
  <link rel="self" type="application/atom+xml" href="https://kanawish.com/feed.xml"/>
  <updated>2026-07-02T00:00:00Z</updated>
  <author><name>Etienne Caron</name></author>
  <entry>
    <title>What Compose taught me about state</title>
    <id>https://kanawish.com/blog/what-compose-taught-me-about-state</id>
    <link rel="alternate" type="text/html" href="https://kanawish.com/blog/what-compose-taught-me-about-state"/>
    <published>2026-07-02T00:00:00Z</published>
    <updated>2026-07-02T00:00:00Z</updated>
    <summary>Placeholder. A second post, so the index has more than one row and the previous/next links have somewhere to point.</summary>
    <content type="html">&lt;p&gt;Placeholder throughout. A second post exists so the writing index has more than
one row, the &lt;code&gt;←&lt;/code&gt; and &lt;code&gt;→&lt;/code&gt; links at the foot of a post have somewhere to point, and
the ordering can be checked against something other than itself.&lt;/p&gt;
&lt;p&gt;Two paragraphs of stand-in prose follow, at roughly the length a real opening
would run, so the 66-character measure can be judged on a full column rather than
on a single line.&lt;/p&gt;
&lt;p&gt;The paragraph after this one exists only to give the column enough height that
the page does not look like a fragment in a screenshot. Replace all of it.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>A workshop is a product</title>
    <id>https://kanawish.com/blog/a-workshop-is-a-product</id>
    <link rel="alternate" type="text/html" href="https://kanawish.com/blog/a-workshop-is-a-product"/>
    <published>2026-05-14T00:00:00Z</published>
    <updated>2026-05-14T00:00:00Z</updated>
    <summary>Placeholder. What a hardware workshop and a product have in common, which is mostly their error states.</summary>
    <content type="html">&lt;p&gt;Placeholder throughout. This post exists so the pipeline has something real to
render — front matter, headings, a listing, both kinds of pull quote and a note —
and so the house style can be checked against actual prose rather than a
specimen line.&lt;/p&gt;
&lt;p&gt;The first time I ran a hardware workshop I treated it as a talk with exercises
bolted on. Twenty people, eight boards, and a plan that assumed everything would
work. It did not, and the failure was not the hardware.&lt;/p&gt;
&lt;p&gt;What I had actually built was a product with no error states. Every path through
the room that was not the happy one simply had nothing waiting at the end of it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every unhappy path had nothing waiting at the end of it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Budget for the refusals&lt;/h2&gt;
&lt;p&gt;The interesting work is in what the system says when it says no. A board that
will not flash, a bay that will not release, a link that drops in the middle of a
run.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-kotlin&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;// every path out of the room needs an answer&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;when&lt;/span&gt; (unit.state) {
  Docked   -&amp;gt; prompt(&lt;span class=&quot;hljs-string&quot;&gt;&amp;quot;the bay is still holding it&amp;quot;&lt;/span&gt;)
  Offline  -&amp;gt; prompt(&lt;span class=&quot;hljs-string&quot;&gt;&amp;quot;no link. check the bench&amp;quot;&lt;/span&gt;)
  &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;/span&gt;     -&amp;gt; run(mission)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every one of those is content, and it needs writing before the day rather than
improvising at the table.&lt;/p&gt;
&lt;div class=&quot;note&quot;&gt;
&lt;p class=&quot;note-l&quot;&gt;Since writing this&lt;/p&gt;
&lt;p&gt;Placeholder. A caveat or a correction that would break the paragraph it
belongs to, and so steps out of it instead.&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;What someone else said&lt;/h2&gt;
&lt;p&gt;The quote below is the other kind: a second voice on the page, so it carries clay
rather than moss.&lt;/p&gt;
&lt;blockquote class=&quot;aside&quot;&gt;
&lt;p&gt;Placeholder. A sentence quoted from a source, an attendee, or a review.&lt;/p&gt;
&lt;cite&gt;Placeholder attribution&lt;/cite&gt;
&lt;/blockquote&gt;
&lt;p&gt;A last paragraph, so the post does not end on a component.&lt;/p&gt;
</content>
  </entry>
</feed>
