<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Chad Arimura</title>
    <link>https://chad.cm</link>
    <description>My thoughts on programming, Java, building companies, devrel, and more.</description>
    <language>en-us</language>
    <lastBuildDate>Tue, 07 Apr 2026 10:27:14 -0700</lastBuildDate>
    <generator>Arc Static Site Generator</generator>

    <item>
      <title>Thanks and Onward, 2026</title>
      <link>https://chad.cm/posts/2026-04-05-thanks-and-onward-2026.html</link>
      <description>Almost 10 years after the acquisition, the same blog post title is announcing the close of my time at Oracle.</description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2026-04-05-thanks-and-onward-2026.html</guid>
      <content:encoded><![CDATA[<div class="main-image" style="text-align: center;">
<img src="/assets/posts/thanks-and-onward-2026.jpeg" alt="Thanks and Onward, 2026" style="max-width: 100%;">
<p style="font-size: 0.8em; color: gray; margin: 5px 0 0 0;">Gemini wouldn't remove the bird...</p>
</div>
<p>&quot;Thanks and onward!&quot; was how our first lead investor at <a href="https://iron.io">Iron.io</a> in 2011 signed the seed round closing docs email.</p>
<p>It then became the title of my <a href="https://chad.cm/posts/2017-05-22-thanks-and-onward">blog post</a> announcing the close of the acquisition in 2017 when we joined Oracle.</p>
<p>And now, almost 10 years after the acquisition, the same title is announcing the close of my time at Oracle.</p>
<h2>Joining Oracle</h2>
<p>We first joined Oracle to fork IronFunctions into the Fn Project and build Oracle Functions. <a href="https://iron.io">Iron.io</a> started as a Ruby company, and ended as a <a href="https://medium.com/iron-io-blog/how-we-went-from-30-servers-to-2-go-ae1842c898e1">Golang</a> shop, but ironically <a href="https://www.youtube.com/watch?v=7bUnlTK_WTo">we launched the Fn Project</a> at JavaOne 2017. Little did I know that two years later I would join that same Java team as an &quot;outsider&quot;.</p>
<p>Former founders, particularly CEOs, rarely last at big companies. We spend our days storming the hill with a vision and few rules, few restraints, and even fewer people telling us no.</p>
<p>Big companies, by contrast, are intentionally designed to slow you down with rules, restraints, and armies of &quot;no&quot; people. This works. They survive both because of this, and in spite of it. Which is why my 9 years here were so unexpected. How did that happen?</p>
<h2>The Java team</h2>
<p>First, I had all 3 of my kids there, and we built our home up in Marin (north of San Francisco). So the season was right.</p>
<p>Also, getting stuff done in a corporate environment can be a satisfying accomplishment in and of itself. Startups may be unencumbered, but nobody is listening. With a big company machine behind you, everybody is listening.</p>
<p>Another reason was the challenge and scope. Maybe you've heard me say &quot;half the global GDP runs on Java&quot;. The size of the market is remarkable, and watching the sentiment shift across the industry and ecosystem as we made steady progress was a lot of fun.</p>
<p>Finally, the enduring reason was the culture of the Java team. Humble, driven, long-term oriented, stewardship-minded. Part of this comes from the Sun Microsystems days, and part from the great leadership of my boss Georges Saab. The downstream effect was a set of amazing peers and the latitude to hire and build incredible teams.</p>
<p>A few things we accomplished:</p>
<ul>
<li>Hired and led a world-class devrel and education group with zero attrition</li>
<li>Turned <a href="https://youtube.com/java">Java's YouTube</a> into a powerhouse of engaging content resulting in rapid compound growth across all metrics</li>
<li>Launched <a href="https://dev.java">Dev.java</a>, <a href="https://inside.java">Inside.java</a>, <a href="https://learn.java">Learn.java</a>, the <a href="https://dev.java/playground">Java Playground</a>, and grew <a href="https://openjdk.org">OpenJDK.org</a></li>
<li>Partnered with the College Board to <a href="https://newsroom.collegeboard.org/advanced-placement-program-collaborates-oracle-computer-science-updates">modernize the AP CS A exams</a> and teaching infrastructure taken by nearly 100k students every year</li>
<li><a href="https://thenewstack.io/java-25-oracle-makes-java-easier-to-learn-ready-for-ai-development/">Shifted</a> <a href="https://devops.com/oracle-delivers-java-25-edition-of-venerable-programming-language-for-the-ai-era/">the</a> <a href="https://www.streetinsider.com/Corporate+News/Oracle+releases+Java+26+with+AI+and+cryptography+enhancements/26172243.html">market perception</a> through 17 new releases of Java and continual briefings with the media, press, analysts, customers, educators, publishers, and more.</li>
<li>Brought <a href="https://www.youtube.com/@java/playlists">JavaOne</a> back to California with a parallel <a href="https://www.linkedin.com/pulse/javaone-conference-2026-crystal-sheldon-e5smc/">educators summit</a></li>
<li>Launched successful podcasts, one of which my daughter <a href="https://inside.java/2022/09/20/podcast-026/">starred in when she was 3</a></li>
<li>Assisted the sales and renewals of the business to grow to thousands of customers</li>
<li>Ramped up an AI program aligning Java, OpenJDK, Helidon, and the ecosystem, to prepare for Java's role in the future of software development</li>
</ul>
<p>Ultimately my work spanned developer relations, education, product, engineering, marketing, and the broader ecosystem, to &quot;turn the ship around&quot;. This was challenging, rewarding, fulfilling, and fun!</p>
<p>There are too many people to thank, but thank you to all in my group who trusted and joined me on the journey.</p>
<h2>What's Next?</h2>
<p>After my first startup <a href="https://alldorm.chad.cm/">AllDorm.com</a>, I spent a few months (in the &quot;Saratoga House pool&quot;) deciding what I wanted to do with my life. That was in 2005. Now for the first time since then, I'm in that pool again, but this time without the sun beer, and an amazing family by my side.</p>
<p>There is so much going on at companies of all sizes especially with the explosion of AI platforms and tools. My plan is to start building again and just go have conversations. We'll see where that leads.</p>
<p>And then there are wild ideas like buying some land out of California and building the farm we've talked about. Who knows! I trust in God's plan.</p>
<h2>Keep in Touch</h2>
<p>If you'd like to connect, hit me up on <a href="https://linkedin.com/in/chadarimura">LinkedIn</a>, <a href="https://x.com/chadarimura">X</a>, or <a href="mailto:hello@chad.cm">hello@chad.cm</a>.</p>
]]></content:encoded>
    </item>

    <item>
      <title>Claude Butler</title>
      <link>https://chad.cm/posts/2026-01-11-claude-butler.html</link>
      <description>I&apos;ve been thinking about things Claude Code could do on a schedule, so I tried to solve this problem and it worked nicely. I now have a private podcast feed of YouTube videos I&apos;d like to listen to on the go.</description>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2026-01-11-claude-butler.html</guid>
      <content:encoded><![CDATA[<img src="/assets/posts/claude-butler.png" alt="Robot butler serving an RSS feed" style="float: right; margin: 0 0 20px 20px; max-width: 300px;">
<h2>tldr;</h2>
<p>I run Claude Code on a schedule (on a Raspberry PI) that reads some prompts in a yaml file. My first use case is to download some YouTube videos and publish them as a private podcast feed. Eh I guess when I write it like that, this post isn't as interesting....</p>
<h2>The Uninteresting Post</h2>
<p>I listen to a fair amount of podcasts. In the car, on a run, mowing the lawn, etc. I use Overcast.fm. It's simple, downloads the last few episodes of each pod, keeps them there until I listen or overwrites with new episodes once a configurable limit is met. Each pod has a configurable speed, it &quot;just works&quot;, and it doesn't have any AI features.</p>
<p>The problem is when pods I listen to are super delayed in publishing for whatever reason, or even stop altogether and only publish to YouTube. And there do exist some YouTube shows that never publish to audio podcasts. The horror! I don't &quot;use&quot; YouTube like that! Enter Claude Code.</p>
<p>Given that my last company was all about workers as a service, I sometimes wonder if Claude Code could do something similar by running on a schedule in the background directed by just prompts with access to all the tools it needs. That seemed to be one of the barriers of IronWorker -- getting access to the right tools easily.</p>
<h2>Claude Code on a Schedule</h2>
<p>My &quot;Claude Butler&quot; is just the following command run every hour:</p>
<p><code>claude --permission-mode bypassPermissions -p &quot;Read tasks.yaml and execute all tasks&quot;</code></p>
<h2>Claude Butler's Tasks.yaml</h2>
<pre><code>❯ cat tasks.yaml
# Claude Butler - Task Instructions
# Claude reads this file and executes the tasks listed below.
#
# Required environment variables:
#   BUTLER_HOME=/path/to/claude-butler
#   NAS_ADDRESS=/path/to/nas/mount (e.g., /Volumes/farmnas2 on Mac)
#   CHANNEL_ID=my_channel_id (could be list in future)

tasks:
  - name: channel-new-audio
    description: Check channel for new videos and download audio
    channel_id: $CHANNEL_ID
    action: |
      Run this command to download audio from any videos uploaded in the last 24 hours:
      yt-dlp --dateafter now-1day --playlist-end 10 --break-on-reject --match-filter &quot;!is_live&quot; -x --audio-format mp3 --no-overwrites --restrict-filenames -o &quot;$BUTLER_HOME/downloads/%(upload_date)s_%(channel)s_%(title)s.%(ext)s&quot; &quot;https://www.youtube.com/channel/$CHANNEL_ID/videos&quot;

  - name: sync-downloads-to-nas
    description: Copy downloaded files to NAS
    action: |
      Run this command to sync downloads to the NAS:
      rsync -av --ignore-existing $BUTLER_HOME/downloads/ $NAS_ADDRESS/public/

  - name: generate-podcast-rss
    description: Generate podcast RSS feed from MP3 files
    action: |
      Generate a podcast RSS feed at $NAS_ADDRESS/public/feed.xml based on the MP3 files in $NAS_ADDRESS/public/.

      Requirements:
      - Follow the Apple Podcasts RSS spec: https://help.apple.com/itc/podcasts_connect/en.lproj/itcbaf351599.html
      - Podcast title: ChadCast
      - Base URL for files is http://my-local-podcast-feed/
      - Parse episode titles from filenames (format: YYYYMMDD_Channel_Title.mp3)
      - Include only required/minimum tags
      - Sort episodes by date descending (newest first)
</code></pre>
<h2>Profit</h2>
<p>I now have a private feed that publishes YouTube videos as audio-only all done locally. It's useful to me at least.</p>
<h2>Workers without the code?</h2>
<p>I guess this is a little bit like IronWorker but instead of a worker file executing code, the worker is just headless claude. That said it's obviously not &quot;codeless&quot; because <code>yt-dlp</code> (and <code>rsync</code>) are actually a lot of code that I'm leaning on, but you get the concept.</p>
<p>I'm sure I'll find some other interesting use cases for my AI Butler.</p>
<h2>AI is Weird</h2>
<p>One thing of note: when I first &quot;deployed&quot; this to my Pi, I forgot to set the environment variables. That's always the first thing that fails background tasks, forgetting stuff like that. Did AI fail? Nope. It just figured out what they &quot;should be&quot; from the context. I feel like I've typed this exact line multiple times before.....</p>
]]></content:encoded>
    </item>

    <item>
      <title>Building Gus: A Lightweight Terminal Agent in Modern Java</title>
      <link>https://chad.cm/posts/2025-10-17-building-gus.html</link>
      <description>I built a terminal AI agent in Java 25 to explore LangChain4j and modern Java features like sealed classes, pattern matching, and text blocks. It&apos;s named after my dog who also needs better training.</description>
      <pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-10-17-building-gus.html</guid>
      <content:encoded><![CDATA[<p>I built a terminal agent called <a href="https://github.com/carimura/gus">Gus</a> in Java. It's named after my Great Pyrenees dog who also responds to commands inconsistently. Think of it as v0.0.1-alpha of Claude Code, except written in Java. (Usually I have Claude Code create a bare post, using the README as the starting point, but Claude couldn't help itself and inserted this text at the end of the line above: &quot;and without all the features that make Claude Code actually useful.&quot; Incredible.)</p>
<h2>New Language Features</h2>
<h3>Improved Readability with Text Blocks</h3>
<pre><code class="language-java">private static final String SYSTEM_PROMPT = &quot;&quot;&quot;
    You are Gus, a friendly and helpful AI assistant.
    You provide clear, concise, and accurate responses.
    You're conversational but professional.
&quot;&quot;&quot;;
</code></pre>
<p>Clean, readable, and with ASCII art:</p>
<pre><code class="language-java">IO.println(&quot;&quot;&quot;
    -------------------------------------------------------------------
                ,
                |`-.__
                / ' _/
               ----\s
              /    }
             /  \\ /
         \\ /`   \\\\\\
          `\\    /_\\\\
           `~~~~~``~`

    [Using provider %s with model %s]

    (type /exit or Ctrl+D to quit, /help for help, /clear to clear memory)
    -------------------------------------------------------------------

    Hi, I'm Gus, your friendly neighborhood AI CLI! How can I help today?\s
    &quot;&quot;&quot;.formatted(provider, model));
</code></pre>
<h3>Type Safety with Sealed Classes and Switch</h3>
<p>Sealed classes let you define a closed hierarchy. Here's the tool system:</p>
<pre><code class="language-java">public abstract sealed class Tools permits SecretTool,
                                           SearchWebTool,
                                           ScrapePageTool {
    // ...
}
</code></pre>
<p>This tells the compiler exactly which classes can extend <code>Tools</code>. No surprises at runtime, and the compiler can verify exhaustiveness.</p>
<p>When you combine sealed classes with switch expressions, the compiler knows all possible cases:</p>
<pre><code class="language-java">return switch (tool) {
    case SecretTool t -&gt; t.secret();
    case SearchWebTool t -&gt; t.searchWeb(args.get(&quot;arg0&quot;).getAsString());
    case ScrapePageTool t -&gt; t.scrapePage(args.get(&quot;arg0&quot;).getAsString());
};
</code></pre>
<p>No default case needed - the compiler knows these are the only three possibilities. If you add a new tool to the sealed hierarchy, this switch will fail to compile until you handle it. Type safety for the win.</p>
<h3>The IO Class</h3>
<p>Java 25 added <code>IO</code> to <code>java.base</code> as a cleaner alternative to <code>System.out</code>:</p>
<pre><code class="language-java">IO.println(&quot;Goodbye!&quot;);
IO.print(&quot;\r&quot; + animation[i % animation.length] + &quot; Thinking...&quot;);
</code></pre>
<h2>The Basic Flow</h2>
<p>Basically Gus is an agent that runs in a loop and can call user-defined tools if needed</p>
<ol>
<li><a href="https://github.com/langchain4j/langchain4j">LangChain4j</a> for model abstraction.</li>
<li><code>ChatService</code> sends it to the model with tool specifications</li>
<li>Model decides whether to respond directly or call a tool</li>
<li>If tools are called, Gus executes them and sends results back</li>
<li>Model uses tool results to generate final response</li>
<li>Response streams back to the user</li>
</ol>
<p>The streaming response handler shows a thinking animation until the first token arrives, then displays the response as it generates.</p>
<h2>Tool System</h2>
<p>Tools extend the sealed <code>Tools</code> class and use LangChain4j's <code>@Tool</code> annotation like so:</p>
<pre><code class="language-java">public final class SearchWebTool extends Tools {
    @Tool(&quot;Searches the web for current information and returns relevant results&quot;)
    public String searchWeb(String query) {
        preToolHook(&quot;searchWeb&quot;, &quot;query='&quot; + query + &quot;'&quot;);

        WebSearchEngine engine = TavilyWebSearchEngine.builder()
                .apiKey(apiKey)
                .build();

        WebSearchResults results = engine.search(query);
    }
}
</code></pre>
<p>The tool framework automatically generates the JSON schema that gets sent to the model. When the model wants to search the web, it returns a tool call request, and the ChatService executes the appropriate tool based on the sealed type.</p>
<h2>Building and Running</h2>
<p>Gus uses Maven and jpackage to create a native executable:</p>
<pre><code class="language-bash">mvn -Pcomplete clean package
</code></pre>
<p>This produces a native app bundle at <code>target/jpackage/gus.app</code>. I wrote about <a href="https://chad.cm/posts/2025-10-10-jpackage-crowdstrike-code-signing">getting jpackage to work with CrowdStrike</a> in a previous post.</p>
<p>Then you can run it:</p>
<pre><code class="language-bash">gus --openai  # Uses OpenAI's models
gus --ollama  # Uses local Ollama (default)
</code></pre>
<p>If you want to try it, <a href="https://github.com/carimura/gus">the code is on GitHub</a>.</p>
<pre><code class="language-bash">❯ gus --ollama
-------------------------------------------------------------------
            ,
            |`-.__
            / ' _/
           ----\s
          /    }
         /  \\ /
     \\ /`   \\\\\\
      `\\    /_\\\\
       `~~~~~``~`

[Using provider ollama with model llama3.2]

Hi, I'm Gus, your friendly neighborhood AI CLI! How can I help today?

&gt; What's the weather in San Francisco?

● searchWeb(query='weather San Francisco')

The current weather in San Francisco is partly cloudy with a temperature
of 62°F. Expect mild conditions throughout the day with a high of 68°F.

&gt;
</code></pre>
<p>Boom.</p>
]]></content:encoded>
    </item>

    <item>
      <title>Getting jpackage to Work with CrowdStrike</title>
      <link>https://chad.cm/posts/2025-10-10-jpackage-crowdstrike-code-signing.html</link>
      <description>How to properly code sign jpackage applications to avoid CrowdStrike quarantine on macOS.</description>
      <pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-10-10-jpackage-crowdstrike-code-signing.html</guid>
      <content:encoded><![CDATA[<p>I wrote a <a href="https://github.com/carimura/gus">small terminal agent called Gus</a> in Java named after one of my dogs (the big one) to play around with building agents and using tools and stuff. I might rename it to arc but that's my <a href="https://chad.cm/posts/2025-05-28-building-arc">static site generator</a>. I think the name arc is cooler, whereas Gus is more for loafing around with the chickens and looking homeless. I digress.</p>
<p>I discovered the hard way that because CrowdStrike is installed on my machine, I couldn't run apps built with <code>jpackage</code>, which is Java's packaging tool to bundle a runtime with your app and produce a native package. I use this for command-line stuff in Java. Like Arc. And Gus. Everything was fine on my home machine. Until they met my work machine. CrowdStrike would kill my app and quarantine the executable file. I'm guessing our IT group will provide an exception for me, but I felt like learning more so I dove in.</p>
<p>[Update: As suspected, this was a CrowdStrike false positive because running jpackage locally on your own app shouldn't be a threat. Distributing it might be, of course, and thus it should be signed.]</p>
<h2>The Problem</h2>
<p>The problem is because running a jpackage-built app results in the process being killed immediately:</p>
<pre><code class="language-bash">./output/Hello.app/Contents/MacOS/Hello
[1]    30464 killed     ./output/Hello.app/Contents/MacOS/Hello
</code></pre>
<p>CrowdStrike Falcon quarantines the executable because of a file called <code>libjli.dylib</code>, which is a core part of the JVM launcher, but also is unsigned (or ad-hoc signed or something). Apparently this isn't very trustworthy. Like Gus himself. The real Gus has been licking his lips around the baby chickens. The protector becomes the aggressor.</p>
<h2>The Solution</h2>
<h3>1. Get an Apple Developer Certificate</h3>
<p>Once enrolled in the Apple Developer Program, you need to create a <strong>Developer ID Application</strong> certificate (not &quot;Apple Development&quot; or &quot;Mac App Distribution&quot;). This is specifically for signing apps distributed outside the Mac App Store.</p>
<h3>2. Create a Certificate Signing Request</h3>
<pre><code class="language-bash">openssl req -new -newkey rsa:2048 -nodes \
  -keyout DeveloperID.key \
  -out CertificateSigningRequest.certSigningRequest \
  -subj &quot;/emailAddress=you@example.com/CN=Your Name/C=US&quot;
</code></pre>
<p>Upload the <code>.certSigningRequest</code> file to Apple Developer portal, select G2 Sub-CA, and download the resulting <code>.cer</code> file.</p>
<h3>3. Import the Certificate</h3>
<pre><code class="language-bash"># Import the certificate
security import developerID_application.cer -k ~/Library/Keychains/login.keychain-db

# Import the private key
security import DeveloperID.key -k ~/Library/Keychains/login.keychain-db

# Download and import Apple's intermediate certificate
curl -O https://www.apple.com/certificateauthority/DeveloperIDG2CA.cer
security import DeveloperIDG2CA.cer -k ~/Library/Keychains/login.keychain-db

# Verify it's available
security find-identity -v -p codesigning
</code></pre>
<p>You should see your Developer ID Application identity listed.</p>
<h3>4. Create an Entitlements File</h3>
<p>The JVM requires specific entitlements to run with hardened runtime:</p>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
    &lt;key&gt;com.apple.security.cs.allow-jit&lt;/key&gt;
    &lt;true/&gt;
    &lt;key&gt;com.apple.security.cs.allow-unsigned-executable-memory&lt;/key&gt;
    &lt;true/&gt;
    &lt;key&gt;com.apple.security.cs.disable-library-validation&lt;/key&gt;
    &lt;true/&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</code></pre>
<p>Save this as <code>entitlements.plist</code>.</p>
<h3>5. Build and Sign with jpackage</h3>
<pre><code class="language-bash">jpackage \
  --name Hello \
  --type app-image \
  --input /path/to/input \
  --main-jar Hello.jar \
  --dest /path/to/output \
  --runtime-image /path/to/runtime \
  --mac-sign \
  --mac-signing-key-user-name &quot;Developer ID Application: Your Name (TEAMID)&quot; \
  --verbose
</code></pre>
<p>If jpackage doesn't apply entitlements correctly, you'll need to manually re-sign (update: this is a bug that has been fixed and should ship in JDK 26 making this step unnecessary):</p>
<pre><code class="language-bash">codesign --force --sign &quot;Developer ID Application: Your Name (TEAMID)&quot; \
  --entitlements entitlements.plist \
  --deep --options runtime \
  output/Hello.app
</code></pre>
<h3>6. Verify the Signature</h3>
<pre><code class="language-bash">codesign -dv output/Hello.app/Contents/MacOS/Hello
codesign -d --entitlements - --xml output/Hello.app/Contents/MacOS/Hello
</code></pre>
<p>You should see your Developer ID signature and the entitlements listed.</p>
<h2>Boom</h2>
<pre><code class="language-bash">❯ ./output/Hello.app/Contents/MacOS/Hello
Hello, Chad
</code></pre>
<p>Boom.</p>
<hr />
<h2>Update: Maven settings to make this all happen as an optional profile step</h2>
<p>I'm taking this code out of my demos now since I can run this all unsigned on my work laptop. But if anyone wants to distribute a jpackaged app to folks on machines running greedy AI security bots, the code below is for you.</p>
<pre><code class="language-xml">&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;org.panteleyev&lt;/groupId&gt;
            &lt;artifactId&gt;jpackage-maven-plugin&lt;/artifactId&gt;
            &lt;executions&gt;
                &lt;execution&gt;
                    &lt;id&gt;create-installer&lt;/id&gt;
                    &lt;phase&gt;package&lt;/phase&gt;
                    &lt;goals&gt;
                        &lt;goal&gt;jpackage&lt;/goal&gt;
                    &lt;/goals&gt;
                    &lt;configuration&gt;
                        &lt;name&gt;YourApp&lt;/name&gt;
                        &lt;type&gt;APP_IMAGE&lt;/type&gt;
                        &lt;!-- ... other config ... --&gt;
                        &lt;!-- NO macSign, macSigningKeyUserName, or macEntitlements here --&gt;
                    &lt;/configuration&gt;
                &lt;/execution&gt;
            &lt;/executions&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;

&lt;profiles&gt;
    &lt;profile&gt;
        &lt;id&gt;signed&lt;/id&gt;
        &lt;build&gt;
            &lt;plugins&gt;
                &lt;plugin&gt;
                    &lt;groupId&gt;org.panteleyev&lt;/groupId&gt;
                    &lt;artifactId&gt;jpackage-maven-plugin&lt;/artifactId&gt;
                    &lt;executions&gt;
                        &lt;execution&gt;
                            &lt;id&gt;create-installer&lt;/id&gt;
                            &lt;configuration&gt;
                                &lt;macSign&gt;true&lt;/macSign&gt;
                                &lt;macSigningKeyUserName&gt;${env.MAC_SIGNING_KEY_NAME}&lt;/macSigningKeyUserName&gt;
                                &lt;macEntitlements&gt;${env.MAC_ENTITLEMENTS}&lt;/macEntitlements&gt;
                            &lt;/configuration&gt;
                        &lt;/execution&gt;
                    &lt;/executions&gt;
                &lt;/plugin&gt;

                &lt;!-- temp fix until JDK 26 I hope --&gt;
                &lt;plugin&gt;
                    &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
                    &lt;artifactId&gt;exec-maven-plugin&lt;/artifactId&gt;
                    &lt;version&gt;3.1.0&lt;/version&gt;
                    &lt;executions&gt;
                        &lt;execution&gt;
                            &lt;id&gt;resign-with-entitlements&lt;/id&gt;
                            &lt;phase&gt;package&lt;/phase&gt;
                            &lt;goals&gt;
                                &lt;goal&gt;exec&lt;/goal&gt;
                            &lt;/goals&gt;
                            &lt;configuration&gt;
                                &lt;executable&gt;codesign&lt;/executable&gt;
                                &lt;arguments&gt;
                                    &lt;argument&gt;--force&lt;/argument&gt;
                                    &lt;argument&gt;--sign&lt;/argument&gt;
                                    &lt;argument&gt;${env.MAC_SIGNING_KEY_NAME}&lt;/argument&gt;
                                    &lt;argument&gt;--entitlements&lt;/argument&gt;
                                    &lt;argument&gt;${env.MAC_ENTITLEMENTS}&lt;/argument&gt;
                                    &lt;argument&gt;--options&lt;/argument&gt;
                                    &lt;argument&gt;runtime&lt;/argument&gt;
                                    &lt;argument&gt;--deep&lt;/argument&gt;
                                    &lt;argument&gt;${project.build.directory}/jpackage/YourApp.app&lt;/argument&gt;
                                &lt;/arguments&gt;
                            &lt;/configuration&gt;
                        &lt;/execution&gt;
                    &lt;/executions&gt;
                &lt;/plugin&gt;
            &lt;/plugins&gt;
        &lt;/build&gt;
    &lt;/profile&gt;
&lt;/profiles&gt;
</code></pre>
<p>Set the environment variables before running the signed build:</p>
<pre><code class="language-bash">export MAC_SIGNING_KEY_NAME=&quot;Developer ID Application: Your Name (TEAMID)&quot;
export MAC_ENTITLEMENTS=&quot;/path/to/entitlements.plist&quot;
mvn package -Psigned
</code></pre>
<p>This keeps your local development builds fast and only runs the signing steps when you actually need them for distribution.</p>
]]></content:encoded>
    </item>

    <item>
      <title>The Lost Art of Slow Gaming</title>
      <link>https://chad.cm/posts/2025-09-26-the-lost-art-of-slow-gaming.html</link>
      <description>Finding games for kids that are slow, thoughtful, creative, and void of dark patterns in today&apos;s digital landscape.</description>
      <pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-09-26-the-lost-art-of-slow-gaming.html</guid>
      <content:encoded><![CDATA[<img src="/assets/posts/lumino-city-lumi.jpg" alt="Lumi from Lumino City" class="main-image">
<p>Like many technologists, I grew up glued to computers. Between my gaming addiction and my BBS operation (building and rebuilding systems in Telegard, Renegade, Wildcat, etc.), suffice it to say computers are a big part of who I am today. And now that I have 3 kids of my own (all under 6 years old), I want them to be able to explore computers the same way I did. Except, I don't. There is no way I'll give them the same freedom I had, as &quot;computers&quot; are now just black box portals into much darker and sinister things. Sadly.</p>
<p>I know what you're thinking: &quot;get off my lawn, let the kids be kids, you had Leisure Suit Larry, Chad!&quot;. But remember, LSL was a text-based adventure that moved slowly from scene to scene, where you had to solve open-ended puzzles with text-based prompts and a few clues. No dark patterns, no in-game purchases (except for maybe a beer at Lefty's), no slot-machine sounds with flashing lights directly targeting dopamine receptors, no browsing to TikTok or YouTube for &quot;walkthroughs&quot; or even worse, to watch other people play the game. It was just me helping Larry look for love in all the wrong places.</p>
<div class="standout-quote">
"No dark patterns, no in-game purchases, no slot-machine sounds with flashing lights directly targeting dopamine receptors."
</div>
<p>OK, to be clear, I wouldn't let my kids anywhere near LSL if it existed today, but my point is, the world has changed. A lot. And my job as a family protector is to keep my kids away from 99.999% of the content out there.</p>
<p>But I'm not all rain clouds. I've found a few games along the way that we've enjoyed together. Games that are slow, thoughtful, creative, without mature undertones or messaging, and void of most dark patterns.</p>
<p>Below is my list, and if you have others, I'm looking for a few more.</p>
<h2>Lumino City</h2>
<img src="/assets/posts/lumino-city-game.jpg" alt="Lumino City gameplay" class="game-image">
<p><a href="https://store.steampowered.com/app/205020/Lumino_City/">Lumino City</a> is excellent and a fun one to play together. The storyline is simple: a girl (Lumi) searches for her granddad, the city's handyman, who disappears in the beginning leaving behind his manual. The game is a slow, point-and-click adventure that progresses scene by scene, with a beautiful world that was created physically out of paper and glue and motors, and then brought to life digitally. How cool is that?</p>
<div class="standout-quote">
"A beautiful world that was created physically out of paper and glue and motors, and then brought to life digitally."
</div>
<h2>Old Man's Journey</h2>
<img src="/assets/posts/old-mans-journey.jpg" alt="Old Man's Journey gameplay" class="game-image">
<p><a href="http://www.oldmansjourney.com/">Old Man's Journey</a> features another great storyline that starts with an old guy getting a letter, and then going on a long journey across land, sea, and air, to find the sender of the note, with bits and pieces of his story revealed along the way. This one does have a love story with <span class="spoiler">the loss of a loved one at the end</span>, so although it's not mature content, it is definitely emotion-evoking, but that's a small part of the game as the rest meets all my criteria above.</p>
<h2>Machinarium</h2>
<img src="/assets/posts/machinarium-game.jpg" alt="Machinarium gameplay" class="game-image">
<p><a href="https://amanita-design.net/games/machinarium.html">Machinarium</a> is a cute'ish robot game where you start outside the city putting the robot back together, and then proceed to solve puzzles going back through the city to find out what happened. It does present a robot love story where my daughter called them &quot;mommy and daddy robots&quot;, and the game is slightly darker than the others because the world seems sort of &quot;fun post-apocalypse&quot;, but it still meets most of my criteria and we enjoyed playing it.</p>
<h2>Stardew Valley</h2>
<img src="/assets/posts/stardew-valley.jpg" alt="Stardew Valley gameplay" class="game-image">
<p><a href="https://www.stardewvalley.net/">Stardew Valley</a> is slightly different as it is a non-linear open-world farming simulator, but it's super fun and quite kid-friendly as you can farm, fish, ride horses, chop down trees, buy chickens, goats, pigs, and build houses and rooms and stuff. There are a few things that are a bit more mature like love stories and dark caves with scary skulls that scared the kids a bit, but all of that stuff is mostly avoidable.</p>
<div class="standout-quote">
"Games that are slow, thoughtful, creative, without mature undertones or messaging, and void of most dark patterns."
</div>
<h2>A Few Notable Ones</h2>
<p>We did play <strong>Behind the Frame</strong>, which was a fun painting game with some mysteries along the way, but it got pretty weird and ended with what I think was <span class="spoiler">the main character never forgetting her first love despite having a family</span>. Too emo for me.</p>
<p>We also played <strong>Rival Stars Horse Racing</strong> because my daughter rides horses. It's kind of fun, but pretty advanced.</p>
<p>One of my sons is in love with tractors so we played <strong>Farming Simulator</strong>. Dude. I think it's easier to actually farm than play this simulator. When we actually got the tractor moving and stuff, he was over the moon.</p>
<p>That's mostly it on the computer front. As they get a bit older, I'll be exploring some basic circuits-type stuff, maybe super simple programming concepts, but with the same themes as above.</p>
<p>What do you think?</p>
]]></content:encoded>
    </item>

    <item>
      <title>Losing Touch with the Inner Workings</title>
      <link>https://chad.cm/posts/2025-09-20-ai-tools-understanding.html</link>
      <description>As I use AI tools to solve time-consuming things, I find myself becoming less and less aware of how those things work under the hood.</description>
      <pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-09-20-ai-tools-understanding.html</guid>
      <content:encoded><![CDATA[<p>As I use AI tools to solve time-consuming things, I find myself becoming less and less aware of how those things work under the hood. A simple example would be for maintaining our Inside.java site. I am an infrequent editor, so when I make changes, I forget the project details: required markdown fields, folder structure, special static site tags, etc. Now I never need to relearn, our AI tools can add posts faster than I can type <code>bundle exec jekyll serve</code> [1].</p>
<img src="/assets/chatgpt-ai-tools.png" alt="ChatGPT conversation about AI tools" style="float: right; margin: 10px 0 20px 20px; max-width: 350px;">
<p>I suppose this is a good thing as I then can spend more time on higher leverage things, but it does raise a yellow flag given most of my career in tech has been in understanding the inner workings of things. But, I guess I haven't look at the kernal code, or my keyboard drivers, or the OS code, or Excel's code (nor do I have that), or anything else that has added layers of abstraction over the years.</p>
<p>Even this post itself, although 100% written by me [2] (I just can't use AI tools to write for me, the style bothers me beyond belief), I asked an agent to go and find my blog in my projects tree and add the post. It's even using the static site generator I created myself. What a world.</p>
<p>What's next?</p>
<p>[1] Yes, we used Ruby to launch the site quickly back in 2020, but we have since created two new Java static site generators and ported the site over to one of them, to be deployed soon alongside some new other new stuff we're building.</p>
<p>[2] Ok I used AI to create the image, obviously</p>
]]></content:encoded>
    </item>

    <item>
      <title>The Individualized Creator Economy</title>
      <link>https://chad.cm/posts/2025-07-02-ice.html</link>
      <description>What I find interesting in this example is this trend towards, what I&apos;m calling to myself the Individualized Creator Economy, or ICE for sure.</description>
      <pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-07-02-ice.html</guid>
      <content:encoded><![CDATA[<p>Like almost every curious engineer, I've been playing around with various AI tools to see what they can do. I've basically hacked on three projects, formed a hypothesis of where the world might be going, and also found some interesting parallels to serverless computing (that my last company focused on).</p>
<h2>Project 1: Building Speedcam</h2>
<p>My first project, which is still ongoing, involves porting OpenCV code to Java's new <a href="https://openjdk.org/jeps/454">FFM API</a> for faster object detection. Specifically I have a camera at the front of our property on the road logging speeding offenders. It works, but it's pretty slow, and I'd like to keep the processing both batch oriented, and local. So far so good, but since the API is quite new and OS-specific compiling, linking, etc is complex, you reach the limits of how much even the best frontier models can handle. They mostly just keep regurgitating the same &quot;fixes&quot; probably buried in Stack Overflow and then get increasingly frustrated before giving up.</p>
<img src="/assets/bingo.png" style="width: 70%; float: right; margin-left: 20px;" />
<h2>Project 2: Building Arc</h2>
<p>Then I wanted to write about that experience, but I didn't have a blog, so I built a <a href="/posts/2025-05-28-building-arc">static site generator</a> in Java that puts the HTML/CSS layout at the center, and uses tags and such to embed data. The Java code handles the magic but sort of hides behind the scenes. Many people believe the logic should be at the center of everything, and have the Java code spit out some HTML. This hurts my head, but I think philosophically it's the difference between someone that comes from a classic MVC background (like me), vs someone that comes from a more backend-centric world view.</p>
<h2>Project 3: Building Bingo</h2>
<p>Anyways, my third project, if you can even call it that, is ridiculously simple, even stupid (although we coach the kids not to call things stupid). My group is spread across the globe and we meet a few times a year on Zoom to just hang out and chat with no work agenda. But I try not to come empty handed and risk virtual-meeting crickets so I usually bring an ice-breaking game. At 6am, before our 9am meeting, I decided to give Claude Code a whirl to create an <a href="https://github.com/carimura/bingo">interactive Bingo game</a>, and in about an hour, I had a board live that supports multiple rounds of questions, hot keys, a nice little ding when someone gets bingo, and with a bit of prompting I was able to narrow in on questions I thought were decent. And it turned out fun! At least it seemed fun. My team is obligated to tell me it was fun.</p>
<h2>ICE</h2>
<p>So why did I re-build a game that surely 100 sites offer, and then write yet-another-post on how AI wrote some HTML and JS that my dog could probably write after a few hours at dog code bootcamp? I guess what I find interesting is this trend towards, what I've decided to call the Individualized Creator Economy (maybe ICE isn't the most popular acronym right now but it felt better than Custom Creator Platform).</p>
<p><strong>ICE is a return to custom software vs off-the-shelf or as-a-service models.</strong> It's the ability to vibe code (with human in the loop) exactly what you want in the amount of time it would take to search the Internet, give someone your email address, try out their thing, only to find out it wasn't what you thought, etc.</p>
<p><strong>ICE is software limited only by one's creativity vs one's skillsets.</strong> This I think is the main point. Engineering is not just about writing code or soldering wires, it's about making something come alive. As a kid I used HyperCard to build choose-your-own-adventure games, and Telegard and Wildcat BBS to build BBS sites. As I got older I created companies and used code to make those come alive. Software has become increasingly powerful but also increasingly complicated. Part of what I loved about &quot;serverless&quot; was the notion of abstracting out the infra layer, and AI tools seem to be trending towards a world in which you can abstract out a lot of the heavy lift of code also -- limited by creativity.</p>
<p><strong>ICE is moving faster while still following the rules of a larger organization.</strong> In my Bingo example, technically, I'm supposed to put all new software through a security review before using it for work. But this could take months, so having it ready by my 9am meeting is obviously untenable. Enter ICE -- where I can build it, and no sensitive data were harmed in the process. Maybe this is the biggest point here, IDK.</p>
<p>What do you think? Is this <span style="text-decoration: line-through;">stupid</span> your experience?</p>
]]></content:encoded>
    </item>

    <item>
      <title>Building Arc (in a few hours)</title>
      <link>https://chad.cm/posts/2025-05-28-building-arc.html</link>
      <description>I wanted to write a blog post about some OpenCV stuff I did in Java using the Foreign Function &amp; Memory API, but then realized, I didn&apos;t have a blog. I couldn&apos;t bare using some Javascript engine, so I built my own in Cursor. It&apos;s called Arc. This post is both about Arc, and the experience of building it in a few hours.</description>
      <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-05-28-building-arc.html</guid>
      <content:encoded><![CDATA[<p>I wanted to write a blog post about some OpenCV stuff I did in Java using the <a href="https://dev.java/learn/ffm/">Foreign Function &amp; Memory API</a>, but then realized, I didn't have a blog.</p>
<p>Since I work on the team that makes the Java Platform, I couldn't bare using some Javascript blog engine, so I built my own using Cursor and Claude-4-Opus. Enter, <a href="https://github.com/carimura/arc">Arc</a>.</p>
<p>It's not great. The code is like someone stuffed Stackoverflow and Baeldung into a blender and then blew it up with dynamite, but it took me about 5 hours (half of which was learning the tools), and I'm really curious if I can refactor my way into something broadly useful for others. All that said, it's really super fast, at least.</p>
<p>Arc is a static-site generator written in Java. It's basic function is to take Markdown files, mash them into some templates, and turn that all into plain-ole' HTML. I'm old school, and I have a core belief that HTML should be largely maintained as HTML, with some variables and control-flow built in, not littered throughout controller logic. Remember MVC? I liked that. Is it still a thing? Modern day JS frameworks hurt my brain.</p>
<p><strong>Features:</strong></p>
<ul>
<li>Converts Markdown files to HTML using CommonMark</li>
<li>Supports YAML frontmatter for metadata</li>
<li>Simple template system</li>
<li>Variables: <code>{{ variable }}</code></li>
<li>Loops: <code>{for post in posts}...{% endfor %}</code></li>
<li>Conditionals: <code>{% if variable %}...{% endif %}</code></li>
<li>Includes: <code>{% include &quot;header.html&quot; %}</code></li>
<li>Has a built-in hot reload mode for development</li>
<li>Uses <code>jpackage</code> to build a native executable</li>
</ul>
<p>Also it's pretty fast. Here it is building this site:</p>
<pre><code>❯ time arc
-------- STARTING ARC GENERATE() --------
Copied assets to: site/assets
Found 2 markdown posts to process
Found 4 markdown pages to process
Generated: posts/2025-05-28-building-arc.html
Generated: posts/2025-05-26-welcome-to-my-new-site.html
Generated: speaking.html
Generated: writing.html
Generated: index.html
Generated: about.html
-------- SITE GENERATION COMPLETE --------
arc 0.21s user 0.03s system 149% cpu 0.160 total
</code></pre>
<h2>Using (if you already have the arc binary)</h2>
<p>Using it to build your own site is super easy, you just run the <code>arc</code> command (or <code>arc --watch</code> for hot reloads) inside the directory where your app lives. That said, getting <code>arc</code> at this time requires building it.</p>
<p><strong>The directory structure <code>arc</code> expects is as follows:</strong></p>
<pre><code>app/
├── posts/         # Blog posts in Markdown
├── pages/         # Static pages in Markdown  
├── templates/     # HTML templates
└── assets/        # CSS, JS, images
site/              # Generated output
</code></pre>
<p>You can find a sample template <a href="https://github.com/carimura/arc/tree/main/src/main/resources/examples/arc-site">here</a>.</p>
<h2>Building the Arc Binary (and using it)</h2>
<ol>
<li><code>git clone https://github.com/carimura/arc</code></li>
<li><code>mvn clean package</code> (this will compile and build the executable with jpackage)</li>
<li>Create a script in your path that points to the executable like so</li>
</ol>
<pre><code>#!/bin/bash
/path/to/arc/target/jpackage/arc.app/Contents/MacOS/arc &quot;$@&quot;
</code></pre>
<ol start="4">
<li>
<p>Go to your app directory (<a href="https://github.com/carimura/arc/tree/main/src/main/resources/examples/arc-site">sample here</a>) and just type <code>arc</code> or <code>arc --watch</code> for hot reloads.</p>
</li>
<li>
<p><code>cd site</code></p>
</li>
<li>
<p><code>jwebserver</code></p>
</li>
<li>
<p>go to `http://localhost:8000' and gasp at the simplicity. or the horror.</p>
</li>
</ol>
<p>That's it!</p>
<p><strong>The jpackage command that is happening inside Maven</strong></p>
<pre><code>jpackage
  --name arc
  --dest /path/to/arc/target/jpackage
  --type app-image
  --app-version 1.0
  --input /path/to/arc/target
  --main-class com.pinealpha.arc.Process
  --main-jar arc-1.0-SNAPSHOT-jar-with-dependencies.jar
  --java-options --enable-preview
</code></pre>
<h2>TODO</h2>
<ul>
<li>Maybe distribute native binaries for multiple platforms</li>
<li>RSS feed</li>
<li>template inheritance</li>
<li>actually review the code in more detail, refactoring, cleanup</li>
</ul>
<h2>Conclusion</h2>
<p>I dunno. AI wrote most of the code, so it pains me, but we refactored a little together so it pains me a little less. Then AI wrote this blog post, but the writing style made me cringe, so I completely rewrote it, feeling bad that my agent might find out and get hurt.</p>
<p>Anyways, it was fun. I have lots of thoughts on AI but I'll save those for another post on this fresh new blog.</p>
<p>To end, here's some ascii art from my AI friend about me and it (him?) coding together:</p>
<pre><code>     👦                    🤖
    /|\                   /|\
    / \                   / \
   -----                 -----
  |     |               |     |
  |  💻 |               |  💻 |
  |_____|               |_____|
  
  &quot;Let's build         &quot;Affirmative.
   something cool!&quot;     Initiating
                        collaboration
                        protocol.&quot;
                        
        ✨ Building Arc Together ✨
</code></pre>
]]></content:encoded>
    </item>

    <item>
      <title>My New Personal Site</title>
      <link>https://chad.cm/posts/2025-05-26-welcome-to-my-new-site.html</link>
      <description>I needed another blog post to show that Arc works, so here it is.</description>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2025-05-26-welcome-to-my-new-site.html</guid>
      <content:encoded><![CDATA[<p>Just a placeholder to show you that Arc works. Go read the <a href="/posts/2025-05-28-building-arc.html">Building Arc</a> post.</p>
]]></content:encoded>
    </item>

    <item>
      <title>Creating the Boom 💥 Emoji</title>
      <link>https://chad.cm/posts/2019-01-11-creating-the-boom-emoji.html</link>
      <description>The story of how we created the original boom emoji in 2012 for HipChat that eventually became global across Slack and other platforms.</description>
      <pubDate>Fri, 11 Jan 2019 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2019-01-11-creating-the-boom-emoji.html</guid>
      <content:encoded><![CDATA[<p>[This is a re-post from my old <a href="https://medium.com/@carimura/creating-the-boom-emoji-671f5944c60">Medium post</a>]</p>
<p>From shipping a feature to winning a new customer to finding out you're having a girl, the boom 💥 emoji has become lingua franca to concisely express one's emotions. A few weeks ago I received an email from a former investor:</p>
<blockquote>
<p>&quot;Did I make the BOOM icon in Slack? (Indirectly through you?)</p>
<p>Would you blog that shit so I can tell the story over pints and not be called a lying a-hole.&quot;</p>
</blockquote>
<p>The answer to his question is yes. At least I think. So. Here's his blog post.</p>
<h1><strong>We created the original boom 💥 emoji in 2012</strong></h1>
<p>The investor who sent the email above happened to be our first Iron.io investor in 2010, and following our progress whenever something exciting would happen he'd respond with &quot;boom!&quot;. This became common speak in our company, even across multiple countries and languages.</p>
<p>When we started using Hipchat in 2011, we had to settle for simply using the English word, but then I found they'd make a custom emoji for your company when referring a customer. This might seem very uneventful now, but in 2011, a custom emoji was a big deal.</p>
<p>So on January 3rd, a buddy of mine sent the following email to Pete Curley's (founder of Hipchat) automated feedback request email:</p>
<blockquote>
<p>Date: January 3, 2012<br />
From: Brian Glynn<br />
To: Pete Curley</p>
<p>&quot;Great! Nice service. Unless something changes we'll definitely be continuing with the service.</p>
<p>On a related note, I'm hanging out with my buddy Chad Arimura cofounder of Iron.io. I didn't give him proper referral credit when signing up, and he's eager for his custom emoticon. Can you retroactively hook him up?&quot;</p>
</blockquote>
<p>And after a few iterations with our longtime designer, Andy Burkovetsky, we came up with a pretty sweet animation sequence:</p>
<div style="text-align: center;">
<img src="/assets/boom-emoji-animation.png" alt="Boom emoji animation sequence">
</div>
<p>(Thanks to Luke Stephen Rehmann for the explosion of our explosion in comments)</p>
<p>and sent the following email:</p>
<blockquote>
<p>Date: February 10, 2012<br />
From: Chad Arimura<br />
To: Pete Curley</p>
<p>Pete!</p>
<p>Here's the first generation of our new HipChat icon. We'd love to rev it down the road when we have more time. Feel free to snake it for your own uses if you like it. We think it's sorely needed to express our emotions when someone does something awesome.</p>
<p>(boom)</p>
<p>Chad</p>
</blockquote>
<p>And his response:</p>
<blockquote>
<p>Date: February 11, 2012<br />
From: Pete Curley<br />
To: Chad Arimura</p>
<p>Just put it in. It'll take a few hours for it to show up for everyone on your team. Boom.</p>
<p>--</p>
<p>Pete Curley<br />
Co-Founder, HipChat.com</p>
</blockquote>
<p>And lo and behold, the fruits of our labor:</p>
<div style="text-align: center;">
<img src="/assets/boom-emoji-hipchat.gif" alt="Boom emoji in HipChat">
</div>
<h1>Going Global</h1>
<p>A month later, I was hanging out in the Atlassian office (they were partners of ours at Iron.io) and I think it was Garret (or maybe Pete) walked in and I was excited to show them the sweet sweet emoji and recommended they make it global. Again, this was a big deal back then.</p>
<p><strong>Shortly after that,</strong> we noticed that they agreed and made the emoji global. I was bummed they didn't let me know, but they had just gotten acquired so they were busy doing acquiree things.</p>
<p><strong>And shortly after that,</strong> Slack dominated the scene, and :boom: 💥 (animation and all at the time) became a global option, obviously inspired by Hipchat's global emoji set.</p>
<p>So that's the story.</p>
<p>We probably can't take full credit. In doing 3 minutes of research for this blog post, I realize now that :collision: was part of Unicode 6.0 in 2010, but this certainly was nowhere on our radar, and certainly no option in Hipchat. Standard Unicode Emoji 1.0 didn't arrive until 2015. &quot;Boom&quot; isn't on the list, but it's global in Slack and predictive in iOS as well.</p>
<p>Jonathan, you owe me a pint for writing this.</p>
<p>Boom.</p>
<p>Chad</p>
]]></content:encoded>
    </item>

    <item>
      <title>Thanks and Onward</title>
      <link>https://chad.cm/posts/2017-05-22-thanks-and-onward.html</link>
      <description>Iron.io was acquired by Xenon Ventures. Many of the team members are staying and will continue to grow the business. As for what&apos;s next, me, Travis, and some members of the Iron engineering team will be joining Oracle.</description>
      <pubDate>Mon, 22 May 2017 00:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://chad.cm/posts/2017-05-22-thanks-and-onward.html</guid>
      <content:encoded><![CDATA[<p><em>Originally posted <a href="https://medium.com/@carimura/thanks-and-onward-ed79068413de">here</a>.</em></p>
<div class="main-image" style="text-align: center;">
<img src="/assets/posts/thanks-and-onward.png" alt="Thanks and Onward" style="max-width: 100%;">
<p style="font-size: 0.8em; color: gray; margin: 5px 0 0 0;">SimpleWorker from 2010</p>
</div>
<p>Last month, Iron.io was acquired by Xenon Ventures. Many of the team members are staying and will continue to grow the business and actively develop IronWorker and IronMQ. Customers are in great hands and should expect to see operational excellence, innovation, and best-in-class service. We wouldn't have sold the business to anyone unwilling to carry the torch of &quot;customer love&quot;.</p>
<p>It's been amazing to watch serverless really take shape. Who would have thought building a <a href="https://blog.iron.io/how-to-build-serverless-search-engine/">serverless search engine</a> and <a href="https://readwrite.com/why-the-future-of-software-and-apps-is-serverless/">the future is serverless</a> from 6 years ago would foreshadow an entire category of computing? I still remember talking about tasks as the atomic unit of compute (most people saying Functions now), and small units of LXC-containerized jobs being an essential pattern of the future (Docker now). Now there are serverless conferences, serverless podcasts, serverless analysts, and even emerging serverless standards. Where did all the servers go?</p>
<p>As for what's next, rather than start something new and spend years getting to a point of impact, me, Travis, and some members of the Iron engineering team will be joining Oracle to spearhead major initiatives around developer experience. This ship is sailing, and it's sailing fast. That's all I can say for now, but with the momentum, vision, and seriously amazing team I've met in my first few week here, you can expect a lot coming soon that will reshape preconceptions.</p>
<p>Thank you all for the support over the years, especially the team both current and former, our investors, advisors, my friends, and my wife. The CEO role can be a lonely one, but I never felt alone. There are many more platitudes when parting with something that's been a part of you for the better-half of a decade so I'll leave it at that.</p>
<p>Find me on <a href="https://www.linkedin.com/in/chadarimura/">LinkedIn</a>, <a href="https://x.com/chadarimura">Twitter</a>, this blog, and email to stay in touch.</p>
<p>Much love,
Chad</p>
<p><em>* &quot;Thanks and onward&quot; was an email signature from one of my investors back in 2011. I figured an appropriate title.</em></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
