<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Unformed Delta - inkhaven</title>
    <description>A place to collect the things I learn, figure out, or find interesting.
</description>
    <link>https://unformeddelta.wiki/</link>
    <atom:link href="https://unformeddelta.wiki/feed/inkhaven.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 06 Apr 2026 08:15:48 +0000</pubDate>
    <lastBuildDate>Mon, 06 Apr 2026 08:15:48 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
    <item>
      <title>Review: The 6% Club</title>
      <description>&lt;p&gt;The 6% Club offers a 100% money-back guarantee if you complete the program, publish 2 pieces, and feel that the program didn’t help. I joined the program wanting to start publishing on my personal website again, published 2 weeks in a row in September, then not again until months later. I’m not looking for a refund.&lt;/p&gt;

&lt;p&gt;I found The 6% Club on a distracted workday after reading an article by Utsav Mamoria, one of the program’s founders/mentors. The 6% Club is designed to help you build a creative project and habit in just 8 weeks. I scheduled a 30 minute call with Utsav, who helped me decide that the program was a good fit for me: I was journaling and writing frequently but was afraid of and lacked the motivation to publish.&lt;/p&gt;

&lt;p&gt;I spent the next several months telling myself that I should improve my website, write more often, or otherwise prepare to publish, but the program not starting for two months gave me a convenient excuse to procrastinate.&lt;/p&gt;

&lt;p&gt;By the time the program started, the fire that led me to sign up for the program had dimmed, and though I’d known before, I was dreading staying up late for sessions that lasted until 2:30am because the program was based out of India.&lt;/p&gt;

&lt;p&gt;The first session reinvigorated me. The community was inviting. Utsav and Chuck’s cats, The 6% Club’s “official” board directors, kept the session engaging. Utsav and Chuck’s  instruction inspired me to believe that I could succeed.&lt;/p&gt;

&lt;p&gt;The following sessions and take home assignments focused on refining my Big Idea. One of my hangups was that I thought no one would care about what I wanted to write about; it was validating to hear that my Big Idea should live at the intersection of the things that I was the best and most knowledgeable about.&lt;/p&gt;

&lt;p&gt;But I was also beginning to feel uneasy. How would I truly understand my Big Idea before starting to publish? Some advice started to feel like it was coming too soon: we were looking at the trajectories of creators like MKBHD to see how they had started off unpolished and generic, but all I could see was how far there was to climb. Other program participants felt much further along than me, and because I’d declined to attend some peer-feedback sessions I was starting to feel like I no longer belonged.&lt;/p&gt;

&lt;p&gt;By the 4th and final session I was starting to wonder if I had made a mistake. We received advice about storytelling, audiences, and some more tactical tips for particular mediums, but all I could think about was how I didn’t understand my audience yet, and didn’t think I’d be able to get better at writing until I was actually doing it.&lt;/p&gt;

&lt;p&gt;The time to start publishing came. While I was on vacation, everyone made a commitment to start publishing on the schedule that they had chosen. As an accountability mechanism, they would post a link to their piece in the WhatsApp group.&lt;/p&gt;

&lt;p&gt;I returned from vacation and made my commitment to publish a short piece once a week. We “graduated” before I’d published my first piece, which left me feeling even more like an imposter.&lt;/p&gt;

&lt;p&gt;The next two weeks, I published a piece each week. The high I felt after publishing stuck with me throughout the entire week, even making work feel like it had color again. The third week, I spent longer writing than I had either previous week, having lapsed on my Kanji flashcards, I no longer felt authoritative enough to publish my article comparing the tools I’d used&lt;sup id=&quot;fnref:which-tools&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:which-tools&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;I hoped that someone would come after me and tell me, you didn’t fulfill your posting commitment. A couple of weeks later I hoped they never would, and stopped feeling guilty for being part of the 94%.&lt;/p&gt;

&lt;p&gt;In the space afforded by not writing, I decided that I should probably quit my job. Slowly, I was able to regain my motivation and resumed writing. In February, I left my job, focusing on deepening my friendships, and applied to Inkhaven.&lt;/p&gt;

&lt;p&gt;For just $250 and a few late nights, The 6% Club rekindled my joy for creation. I’d say that helped me.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:which-tools&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;WaniKani and jpdb.io. jpdb.io is better. Probably I’ll manage to publish this article during Inkhaven. &lt;a href=&quot;#fnref:which-tools&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
      <pubDate>Mon, 06 Apr 2026 03:16:00 +0000</pubDate>
      <link>https://unformeddelta.wiki/GrMhcXX3CY7s/review-the-6-club</link>
      <guid isPermaLink="true">https://unformeddelta.wiki/GrMhcXX3CY7s/review-the-6-club</guid>
      
      <category>review</category>
      
      <category>personal</category>
      
      <category>recommended</category>
      
      <category>inkhaven</category>
      
    </item>
    
    <item>
      <title>Haskell: the re-export module X pattern</title>
      <description>&lt;p&gt;Haskell’s syntax for declaring module exports is clunky and second-class. Exports must be declared after the module header either by name, or re-exporting an entire module:&lt;/p&gt;
&lt;div class=&quot;language-haskell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Foo&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Baz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;where&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Baz&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;::&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Int&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This re-exports all of the identifiers exported by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Baz&lt;/code&gt;. If instead you only wanted to re-export some of the identifiers, naively you would need to list them all out individually:&lt;/p&gt;
&lt;div class=&quot;language-haskell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Foo&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;baz1&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;where&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Bar&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Baz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Just reading the export list, it can be unclear which module the identifiers are being imported from: e.g. is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bar&lt;/code&gt; actually exported by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bar&lt;/code&gt; or is it actually provided by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Baz&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;re-export module X pattern&lt;/strong&gt; is a simple trick to solve this problem. Instead of re-exporting identifiers individually, use a qualified import to say up front which identifiers you plan to re-export:&lt;/p&gt;
&lt;div class=&quot;language-haskell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Foo&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;where&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Bar&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Baz&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;baz1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This makes it easy to see which modules and which identifiers we are re-exporting identifiers from, no matter how many. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; is conventionally used as the module name, i.e. e&lt;strong&gt;X&lt;/strong&gt;port.&lt;/p&gt;

&lt;p&gt;There’s two primary scenarios where I reach for this pattern:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;building a custom prelude&lt;/strong&gt;: Custom preludes need to re-export lots of identifiers from lots of different modules. To provide some internal organization and make your prelude more discoverable it’s often useful to break them into submodules, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MyPrelude.Effects&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MyPrelude.MaybeEither&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;building a utility module extending another module&lt;/strong&gt;: Maybe you have a custom combinator for operating on maps not provided by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Data.Map.Strict&lt;/code&gt;. I like putting this kind of combinator in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Utils.Map&lt;/code&gt; module, and then also re-exporting everything I want to use from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Data.Map.Strict&lt;/code&gt;. Then you can just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import qualified Utils.Map as Map&lt;/code&gt; instead of needing to also &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import qualified Data.Map.Strict as Map&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The following example demonstrates a couple of important gotchas:&lt;/p&gt;
&lt;div class=&quot;language-haskell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Foo&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;where&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Bar&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;qualified&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Baz&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;baz1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;::&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Int&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Perhaps unexpectedly, this example exports &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bar.bar&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Foo.bar&lt;/code&gt;. Also, if you try using (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bar + 1&lt;/code&gt;) or re-exporting (e.g. adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bar&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;module Foo&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Foo&lt;/code&gt;’s export list) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bar&lt;/code&gt; you’ll get &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ambiguous occurrence ‘bar’&lt;/code&gt;. You can disambiguate by exporting the fully qualified module name, i.e. adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Foo.bar&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bar.bar&lt;/code&gt; to the export list (instead of doing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import Bar as X (bar)&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Additionally, though &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Foo&lt;/code&gt; looks like it might, it doesn’t actually re-export &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;baz1&lt;/code&gt;. In order for an identifier to be re-exportable, it must be imported unqualified.&lt;/p&gt;

&lt;p&gt;Here’s an example that demonstrates a couple of useful tricks:&lt;/p&gt;
&lt;div class=&quot;language-haskell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Foo&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;where&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Bar&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Bar&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Baz&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hiding&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bar2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that you can have multiple imports of the same module, here &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bar&lt;/code&gt;. This can be useful when you’re providing some functions that work with the types in an existing module, but don’t want to re-export the whole original module.&lt;/p&gt;

&lt;p&gt;Finally, note that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hiding&lt;/code&gt; lets you re-export a whole module less some identifiers, here &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Baz&lt;/code&gt;. This can be useful when you want to re-export everything but one of your identifiers conflicts.&lt;/p&gt;
</description>
      <pubDate>Sat, 04 Apr 2026 22:46:00 +0000</pubDate>
      <link>https://unformeddelta.wiki/rJylKYFWAsAP/haskell-the-re-export-module-x-pattern</link>
      <guid isPermaLink="true">https://unformeddelta.wiki/rJylKYFWAsAP/haskell-the-re-export-module-x-pattern</guid>
      
      <category>haskell</category>
      
      <category>programming-pattern</category>
      
      <category>inkhaven</category>
      
    </item>
    
    <item>
      <title>AirPods</title>
      <description>&lt;p&gt;AirPods are my most and least favorite piece of tech.&lt;/p&gt;

&lt;p&gt;Not too long after the release of the first version of AirPods, I was just starting to listen to podcasts. I’d always preferred listening to audiobooks. Podcasts gave me access to the news without needing to read letters with my eyes. I could listen to things much more engaging than what I was learning in class. To top it off, it easily slotted into activities I was already doing: walking to my classes, cleaning, or exercising. In fact, I had so much time for listening to podcasts, that even 2-3 hour podcasts rounding up the latest Apple rumors fit into my schedule.&lt;/p&gt;

&lt;p&gt;By the time AirPods Pro were released, there was hardly a menial task where I was not listening to podcasts. Noise cancellation enabled me to listen while walking down a busy street, and obsolesced the need for a separate pair of noise cancelling headphones on a plane. In a noisy corner of campus, I could create a distraction free environment by listening to white noise at a moment’s notice.&lt;/p&gt;

&lt;p&gt;Some days of the week, several of my favorite podcasts would all release at the same time. I’d listen at higher speeds to reach “inbox zero” anyways. But other days of the week, I would still run out of things to listen to. Clearly, I still didn’t have enough things to listen to.&lt;/p&gt;

&lt;p&gt;Now graduated, I joined book clubs from 3 of my social circles: my college friends, my work, my friends in Seattle. Each book was just an average of ~10 hours, but if I listened any faster than 1.5-1.8x I wouldn’t be able to recall enough to meaningfully participate in discussions. After intense periods of reading I would despair that I had a 20-30 hour backlog of podcasts to get through.&lt;/p&gt;

&lt;p&gt;I started to delight in long mining/building sessions in Minecraft, I completed all the shrines in Breath of the Wild and started looking for Koroks, played all of Hollow Knight, and acquired 15 golden strawberries in Celeste. Often the winning attempt would be one where I’d paused what I was listening to.&lt;/p&gt;

&lt;p&gt;A few years ago I realized that listening to a podcast for my 5 minute walk to the office was stupid. I’d often start my workday with distraction, to finish the 20 minute episode of Planet Money I was on or the like. I resolved to solve this problem.&lt;/p&gt;

&lt;p&gt;I started to intentionally take my AirPods off when going through a doorway. Entering my apartment building: take off headphones. Leaving elevator just after entering apartment building: take off AirPods. Entering my apartment itself: take off AirPods once more.&lt;/p&gt;

&lt;p&gt;Sometimes I would unintentionally still be listening to something, but slowly my thoughts were the main thing that accompanied me on my way to work.&lt;/p&gt;

&lt;p&gt;My backlog of unlistened podcasts grew. I’d stopped attending book clubs a few years ago, only reading the books I was most interested in.&lt;/p&gt;

&lt;p&gt;To this day, wearing AirPods puts me in a different state of mind. I get bored and it’s easier to slip into distraction. I can only bear silence when I’m not wearing them.&lt;/p&gt;
</description>
      <pubDate>Sat, 04 Apr 2026 05:35:00 +0000</pubDate>
      <link>https://unformeddelta.wiki/VPDDYgykGJvl/airpods</link>
      <guid isPermaLink="true">https://unformeddelta.wiki/VPDDYgykGJvl/airpods</guid>
      
      <category>recommended</category>
      
      <category>personal</category>
      
      <category>tech</category>
      
      <category>mindfulness</category>
      
      <category>inkhaven</category>
      
    </item>
    
    <item>
      <title>How to speak more Japanese in Japan</title>
      <description>&lt;p&gt;For the intermediate Japanese learner visiting Japan there is a problem: Japanese people are too good at English. They’ll often begin an interaction in English or immediately switch to English if your Japanese isn’t perfect. If you know the natural way to continue the conversation in Japanese, they’ll probably appreciate your effort. In many cases, they’ll also switch back to Japanese. With practice, you can have longer, more meaningful interactions while traveling in Japan.&lt;/p&gt;

&lt;p&gt;Let’s walk through a simple example:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;You walk up to the empty register, carrying your tray with a curry roll and a melonpan, calling out “こんにちは”.&lt;/p&gt;

  &lt;p&gt;As the cashier walks up you say “&lt;span class=&quot;ruby-reveal&quot;&gt;この&lt;ruby&gt;二&lt;rt&gt;ふた&lt;/rt&gt;&lt;/ruby&gt;つください&lt;/span&gt;”.&lt;/p&gt;

  &lt;p&gt;Since you’re a foreigner and your pronunciation wasn’t the best, the cashier responds “For here or to go?”&lt;sup id=&quot;fnref:for-here-or-togo&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:for-here-or-togo&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; while wrapping your individual rolls.&lt;/p&gt;

  &lt;p&gt;You respond “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;持&lt;rt&gt;も&lt;/rt&gt;&lt;/ruby&gt;ち&lt;ruby&gt;帰&lt;rt&gt;かえ&lt;/rt&gt;&lt;/ruby&gt;りで&lt;/span&gt;”, saying that you want them to go.&lt;/p&gt;

  &lt;p&gt;The cashier, slightly surprised, continues “Do you need a bag?”&lt;sup id=&quot;fnref:do-you-need-a-bag&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:do-you-need-a-bag&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; asking if you want an extra bag to carry the two already wrapped rolls.&lt;/p&gt;

  &lt;p&gt;You respond “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;袋&lt;rt&gt;ふくろ&lt;/rt&gt;&lt;/ruby&gt;は&lt;ruby&gt;大丈夫&lt;rt&gt;だいじょうぶ&lt;/rt&gt;&lt;/ruby&gt;です&lt;/span&gt;”, confirming that you don’t need a bag.&lt;/p&gt;

  &lt;p&gt;The cashier continues, “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;七百二十円&lt;rt&gt;ななひゃくにじゅうえん&lt;/rt&gt;&lt;/ruby&gt;です&lt;/span&gt;” saying that the total is ¥720.&lt;/p&gt;

  &lt;p&gt;You say “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;一千円&lt;rt&gt;いっせんえん&lt;/rt&gt;&lt;/ruby&gt;で&lt;/span&gt;” handing them a ¥1000 bill.&lt;/p&gt;

  &lt;p&gt;They say “はい”, take the money, count out the change and then say “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;二百八十円&lt;rt&gt;にひゃくはちじゅうえん&lt;/rt&gt;&lt;/ruby&gt;のお&lt;ruby&gt;釣&lt;rt&gt;つ&lt;/rt&gt;&lt;/ruby&gt;りです。 レシートは&lt;ruby&gt;要&lt;rt&gt;い&lt;/rt&gt;&lt;/ruby&gt;りますか&lt;/span&gt;”.&lt;/p&gt;

  &lt;p&gt;You respond “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;大丈夫&lt;rt&gt;だいじょうぶ&lt;/rt&gt;&lt;/ruby&gt;、 ありがとうございました&lt;/span&gt;”, take your individually wrapped rolls and leave as they echo “ありがとうございます”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The cashier switched to Japanese by the end; often just being a bit stubborn is a enough to achieve this. Sometimes it ends up being easier: staff in small towns are less accustomed to tourists and more likely to just muddle through the whole interaction with you in Japanese. At other times it’s near hopeless: most often at hotels, but also in more touristy locations/situations, your conversation partner might not switch to Japanese no matter what you do. It’s still worth trying, but often giving in and finishing the conversation in English leads to a more pleasant interaction.&lt;/p&gt;

&lt;p&gt;Here are some things that have helped me have longer, better interactions in Japanese:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Listen to the people ahead of you in line&lt;/strong&gt;: usually they’re going through exactly the interaction you’re about to have. This is also good listening practice.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Practice upcoming interactions using LLMs&lt;/strong&gt;: if there’s a harder conversation you anticipate having, you can practice with Claude before having it. After losing my toiletry bag &lt;a href=&quot;https://claude.ai/share/b9d8ad2f-f9dd-475f-b7f0-89ddaa0fbace&quot;&gt;I practiced with Claude&lt;/a&gt; before heading to the sento where I thought I lost it.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sometimes less is more&lt;/strong&gt;: for example, when ordering from a list of variants it’s more natural to just say “&lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;二番&lt;rt&gt;にばん&lt;/rt&gt;&lt;/ruby&gt;お&lt;ruby&gt;願&lt;rt&gt;ねが&lt;/rt&gt;&lt;/ruby&gt;いします&lt;/span&gt;” to specify the second option. You won’t impress anyone by demonstrating your vocabulary unnecessarily.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Know your counters&lt;/strong&gt;: at a museum you ask for &lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;大人&lt;rt&gt;おとな&lt;/rt&gt;&lt;/ruby&gt;&lt;ruby&gt;二枚&lt;rt&gt;にまい&lt;/rt&gt;&lt;/ruby&gt;&lt;/span&gt; tickets, at a food stall you ask for &lt;ruby&gt;一本&lt;rt&gt;いっぽん&lt;/rt&gt;&lt;/ruby&gt; skewers, at a restaurant you’re seated as &lt;ruby&gt;二人&lt;rt&gt;ふたり&lt;/rt&gt;&lt;/ruby&gt; people. Often this is your first interaction; nailing it can help set you up for success (and using them wrong can signal: I’m a beginner, switch to English). When in doubt, つ likely gets the point across well enough.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Know filler words&lt;/strong&gt;: used appropriately えっと, あの, まあ, etc. can help you stall for time to formulate your response.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;For longer interactions, aizuchi (&lt;ruby&gt;相槌&lt;rt&gt;あいづち&lt;/rt&gt;&lt;/ruby&gt;) is important&lt;/strong&gt;: Using はい, なるほど, そうですね, etc. appropriately reassures your conversation partner that you’re following along. Make sure you’re actually following along though. If you aren’t, tell them you don’t by saying &lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;分&lt;rt&gt;わ&lt;/rt&gt;&lt;/ruby&gt;かりません、 もう&lt;ruby&gt;一度&lt;rt&gt;いちど&lt;/rt&gt;&lt;/ruby&gt;お&lt;ruby&gt;願&lt;rt&gt;ねが&lt;/rt&gt;&lt;/ruby&gt;いします&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checking out at a bakery, ordering at a restaurant, or asking where to find &lt;ruby&gt;着火剤&lt;rt&gt;ちゃっかざい&lt;/rt&gt;&lt;/ruby&gt; in a Daiso are all quite short/simple conversations to have. But I’ve found that having simple/transactional conversations builds the confidence to tackle the harder, more open ended conversations.&lt;/p&gt;

&lt;p&gt;On my recent trip to Japan, when sitting down to sip some free tea at &lt;ruby&gt;一石栃立場茶屋&lt;rt&gt;いちこくとちたてばちゃや&lt;/rt&gt;&lt;/ruby&gt;, a tea shop on the Nakasendo between Magome and Tsumago the owner asked me curiously: “Where are you from?”, “How long are you visiting Japan?”, and so on. I stubbornly responded in Japanese; he eventually started asking me questions in Japanese. After a while he asked “Why do you like visiting Japan?” and my Japanese vocabulary failed me. I responded in English, but by then the conversation had gone on long enough that it was effortless to shift back into Japanese afterwards. The conversation with the owner was memorable not because I managed to speak a lot of Japanese, but because we actually connected, comfortably mixing languages as needed.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:for-here-or-togo&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;It’s useful to know how the conversation would go if the whole interaction was in Japanese. In Japanese this might be &lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;店内&lt;rt&gt;てんない&lt;/rt&gt;&lt;/ruby&gt;でお&lt;ruby&gt;召&lt;rt&gt;め&lt;/rt&gt;&lt;/ruby&gt;し&lt;ruby&gt;上&lt;rt&gt;あ&lt;/rt&gt;&lt;/ruby&gt;がりですか&lt;/span&gt;. &lt;a href=&quot;#fnref:for-here-or-togo&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:do-you-need-a-bag&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;In Japanese this might be &lt;span class=&quot;ruby-reveal&quot;&gt;&lt;ruby&gt;袋&lt;rt&gt;ふくろ&lt;/rt&gt;&lt;/ruby&gt;はご&lt;ruby&gt;利用&lt;rt&gt;りよう&lt;/rt&gt;&lt;/ruby&gt;ですか&lt;/span&gt;. &lt;a href=&quot;#fnref:do-you-need-a-bag&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
      <pubDate>Fri, 03 Apr 2026 04:43:00 +0000</pubDate>
      <link>https://unformeddelta.wiki/r23hJLyugc7T/how-to-speak-more-japanese-in-japan</link>
      <guid isPermaLink="true">https://unformeddelta.wiki/r23hJLyugc7T/how-to-speak-more-japanese-in-japan</guid>
      
      <category>language-learning</category>
      
      <category>japanese</category>
      
      <category>japan</category>
      
      <category>recommended</category>
      
      <category>inkhaven</category>
      
    </item>
    
    <item>
      <title>Vibe-planning a trip to Japan</title>
      <description>&lt;p&gt;Yesterday I arrived at Inkhaven from my most thoroughly planned trip ever: a 3 week trip to Japan. My highlights from the trip were: attending Idolm@ster Million Live! 11th Live 百合咲く誇るレムリア, a couple of action-packed days hiking the Nakasendo + seeing Matsumoto castle/Lake Suwa, an overnight bikepacking trip from Fujiyoshida to Minobu with a stunning view of Mount Fuji from my campsite, and a memorable dinner at a tiny home restaurant in Shuzenji after seeing at least 8 waterfalls on the Izu peninsula.
&lt;img src=&quot;/images/br2DXvbqAAkw-IMG_4300.jpeg&quot; alt=&quot;Mount Fuji reflected in Lake Motosu from Kouan campground&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A few years ago, I wouldn’t have been able to plan such a trip. On my first trip to Japan, I hadn’t even booked a hotel for my first night in Tokyo before my plane landed. I enjoy the spontaneity afforded by last minute planning, but mostly that trip was a product of my laziness/procrastination. The last minute planning led to days with more time spent researching than actually doing things plus significant stress from making same-day hotel bookings while on the train in the afternoon.&lt;/p&gt;

&lt;p&gt;A couple of things have changed since that last trip. I’ve traveled a lot more: that trip to Japan was both my first trip to Japan and my first time solo traveling. More importantly, since mid-2025 I’ve been using Claude Code to do increasingly larger programming tasks. At first it was mostly useful for making relatively easy changes in the context of a robust test suite, but now it is quite useful for spec-ing out features and planning work too.&lt;/p&gt;

&lt;p&gt;Time to plan my trip in March felt very limited: I was leaving my job to start a gap year, applying to Inkhaven, planning my birthday party, pursuing a crush, and focusing on spending more time with friends. While chatting with Claude about my anxiety and stress from all the things I had going on, I laid out that I hadn’t planned anything but a rough itinerary:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I would stay in Fukuoka/Kitakyushu for the first couple of nights after my flight landed + for the live show, and didn’t really know if there was anything I wanted to see in Kitakyushu other than the live show&lt;/li&gt;
  &lt;li&gt;I wanted to spend some more time in Hiroshima and see Miyajima having previously only overnighted there&lt;/li&gt;
  &lt;li&gt;I wanted to spend some time in Nara having missed it on my first trip to Kyoto&lt;/li&gt;
  &lt;li&gt;Inspired by watching Yuru Camp I wanted to go through the mountains in the Kiso valley/Nagano/Yamanashi, hike, stop at interesting hot springs, possibly climb Mount Fuji, and maybe camp&lt;/li&gt;
  &lt;li&gt;Spend some time in Tokyo, see cherry blossoms at peak bloom, do some shopping, and maybe take a day trip&lt;/li&gt;
  &lt;li&gt;Finally I had a multi-day layover in Taiwan/Taipei and didn’t really have any idea what to do there&lt;sup id=&quot;fnref:taiwan&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:taiwan&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I often get stuck at a rough itinerary because figuring out details to the level of booking accommodations for specific nights causes cascading changes. Waiting till the last minute prevents ever needing to change or cancel plans you spent time working on. By the time you plan something you’re already executing on it. Irrationally, this makes it easy for me to procrastinate work at this stage. Since any work I do might need to be thrown away, why start it at all?&lt;/p&gt;

&lt;p&gt;Claude took my rough itinerary and immediately started poking holes into it: Mount Fuji wouldn’t be climbable in March, camping with a hammock in March would be far too cold. I checked some alternatives with Claude: perhaps I could spend some time on the Izu peninsula instead of hiking Fuji, maybe I could rent camping gear suitable for camping in March.&lt;/p&gt;

&lt;p&gt;I had Claude summarize our trip planning into a markdown document so I could start to nail down details and have a single source of truth to iterate on. Since OpenAI’s o3 in early 2025, I’ve found LLMs using web search more useful than the likes of Tripadvisor for giving personalized recommendations. Now, combined with the longer time-horizon capabilities of coding agents, Claude Code &amp;amp; Cowork were able to break up that markdown file and research, producing detailed itineraries for individual segments.&lt;/p&gt;

&lt;p&gt;This medium level of resolution before booking specific hotels/accommodations was particularly critical for the camping/biking segment of the trip. Knowing that there were at best limited buses in the Fuji 5 Lakes area, I had Claude evaluate busing vs biking to the campsite. Claude found a bike rental company that was willing to do 1-way rentals and found a good 40km bike route to Kouan campground at Motosuko. After confirming details of the bike and camping gear reservations, this turned into my favorite portion of the trip: the bikepacking segment with a view of Mount Fuji.&lt;/p&gt;

&lt;p&gt;Once I had a mostly finished plan it was also possible to ask Claude to do things like go through the entire itinerary and add vegetarian food recommendations. On my first trip, finding food that I was happy to eat continually brought me stress, so I ended up settling for sushi or meat more often than I’m really comfortable with. Having a bird’s-eye view of where it would be easier/harder to find vegetarian food made it easier to holistically plan where to be less strict. Overall, this left me more satisfied with my food choices than when choosing in the moment. I was also pleased Claude found Kakurinbo, a touristy but nice Buddhist temple stay in Minobu, with a completely vegetarian dinner/breakfast menu.&lt;/p&gt;

&lt;p&gt;With the medium level itinerary complete, I was also able to verify that everything made sense / was possible. One thing I noticed at this stage was that Claude had created the itinerary starting from the 12th, but the 12th was the day that I was flying to Japan, and I didn’t actually arrive in Japan till the 14th due to time zone shenanigans. Claude didn’t catch this mistake, but also made it easy to prioritize which activities were the easiest to cut, rejiggering dates to make everything fit with two fewer available days.&lt;/p&gt;

&lt;p&gt;Eventually the plan was ready enough to start booking things. The closest thing to a planning failure was mostly caused by me. Claude had warned me that accommodations in the Kiso valley would be limited. But because it was right before the biking/camping segment, which required confirming gear/bike/campsite reservations, I waited to book my stays in case I needed to change plans. I ended up being stuck with a remote mountaintop resort, which, while beautiful, required taking a bus followed by a 3km hike on a day where I already had hiked ~11.5km of the Nakasendo from Magome to Nagiso station.&lt;/p&gt;

&lt;p&gt;The result was one of the most action-packed, stress-free trips I’ve ever gone on. I’ve also been able to enjoy the benefits of planning further in advance on group trips where communication forces more eager planning. For solo travel though, this was a first: the reduced planning friction let me overcome my laziness.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:taiwan&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Taiwan ended up getting cut because I got into Inkhaven! Partially because I thought I might get into Inkhaven, I’d procrastinated booking/planning Taiwan in detail. &lt;a href=&quot;#fnref:taiwan&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
      <pubDate>Thu, 02 Apr 2026 06:19:00 +0000</pubDate>
      <link>https://unformeddelta.wiki/br2DXvbqAAkw/vibe-planning-a-trip-to-japan</link>
      <guid isPermaLink="true">https://unformeddelta.wiki/br2DXvbqAAkw/vibe-planning-a-trip-to-japan</guid>
      
      <category>inkhaven</category>
      
      <category>travel</category>
      
      <category>personal</category>
      
      <category>recommended</category>
      
      <category>japan</category>
      
    </item>
    
  </channel>
</rss>
