<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Dalton Rowe</title>
  <id>https://daltonrowe.com/</id>
  <link rel="alternate" type="text/html" href="https://daltonrowe.com/" />
  <link rel="self" type="application/atom+xml" href="https://daltonrowe.com/feed.xml" />
  <updated>2026-09-04T00:00:00.000Z</updated>
  <author><name>Dalton Rowe</name></author>
  <entry>
    <title>Addicted to Flow</title>
    <id>https://daltonrowe.com/addicted-to-flow</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/addicted-to-flow.html" />
    <published>2026-09-04T00:00:00.000Z</published>
    <updated>2026-09-04T00:00:00.000Z</updated>
    <summary>Some thoughts on adjusting to the AI age</summary>
    <content type="html">&lt;section&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/addicted-to-flow/addicted-to-flow-masthead.png&quot; alt=&quot;Distorted image of a sunset over a beach&quot; /&gt;

  &lt;p&gt;It&apos;s safe to say I&apos;m addicted to the flow state. In software dev the core loop provides a steady loop of
    dopamine, knocking out task after task. I trade agency and direction for a steady stream of opportunities to
    achieve satisfying focus. Previously those tasks required some specialized knowledge, but in the age of AI that&apos;s
    not necessarily the case anymore, and so the need for my flow states has dried up.&lt;/p&gt;

  &lt;p&gt;Adjusting to this brave new world has required me to introspect into my desire to feel of use to others. How can
    I be of use now that most of my knowledge has been commoditized? Should I take this as an opportunity to divest
    myself of my &quot;addiction&quot; entirely?&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Losing a Hobby&lt;/h2&gt;

  &lt;p&gt;Seeing the previous era of flow state coding coming to an end has helped me realize that my weekend hobby of
    building web apps was more cosplay at building Products. This was not entirely unknown to me before, but it was
    easy to dismiss when bathed in the warm focus of a coding session. I knew in the back of my mind that the code
    (for what I build) was just a small — smallest? — part of a true value providing product.&lt;/p&gt;

  &lt;p&gt;The need for the flow is now gone, but that wasn&apos;t my only interest in building. Thankfully, I suppose, as a
    front end leaning person I also love user experience and product domains.&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Moving up the stack&lt;/h2&gt;

  &lt;p&gt;Now in both work and play I&apos;ve been pushed up the stack. At work I&apos;ve always pushed for autonomy and for
    developers to drive product decisions. I think makers have an on the ground perspective where pragmatic decisions
    that marry systems, business, and experience are uniquely possible.&lt;/p&gt;

  &lt;p&gt;I&apos;m fortunate that as the need for designing basic logic wanes, I&apos;m in a situation and even encouraged to drive
    product and experience direction. There&apos;s no flow states to be had it seems though. Evaluation is the job:
    reviewing others&apos; executions of tasks, reviewing feedback from other product drivers, and reviewing the system the
    agents produce.&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;From here&lt;/h2&gt;

  &lt;p&gt;I&apos;ve not forgotten that even higher up (lower down) the stack are the business needs, but am somewhat relieved I
    have interest in other areas as my previous ones get crowded out. Product engineer has always seemed like a good
    fit, and I quite enjoy it, but doesn&apos;t provide the same instant gratification.&lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>We Deserve Peer to Peer Devices</title>
    <id>https://daltonrowe.com/peer-to-peer-devices</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/peer-to-peer-devices.html" />
    <published>2026-08-16T00:00:00.000Z</published>
    <updated>2026-08-16T00:00:00.000Z</updated>
    <summary>It&apos;s possible, why doesn&apos;t it exist?</summary>
    <content type="html">&lt;section&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/peer-to-peer-devices/peer-to-peer-devices-masthead.png&quot; alt=&quot;Distorted image of radios&quot; /&gt;

  &lt;p&gt;I&apos;m trying to build a hardware device that isn&apos;t connected to the internet, but still exposes a configuration UI
    without the need for an external app.&lt;/p&gt;

  &lt;p&gt;It&apos;s an obvious capability that can exist but doesn&apos;t, because the market prefers a more exploitable interface.
    The apps used to connect to our hardware have essentially unlimited permission to track our interactions, send data
    home, or, most annoyingly, stop working altogether.&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;ul&gt;
    &lt;li&gt;communicate point to point with other devices&lt;/li&gt;
    &lt;li&gt;using standard web technologies&lt;/li&gt;
    &lt;li&gt;opt in to external network access&lt;/li&gt;
    &lt;li&gt;with no app stores or other middle men&lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;p&gt;Here&apos;s the user experience I&apos;m imagining:&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;User taps an NFC point or scans a QR code.&lt;/li&gt;
    &lt;li&gt;OS prompts the user: &quot;Connect to &lt;em&gt;some_device&lt;/em&gt;?&quot;&lt;/li&gt;
    &lt;li&gt;Default browser appears and loads the UI directly from &lt;em&gt;some_device&lt;/em&gt;.&lt;/li&gt;
    &lt;li&gt;If the UI code attempts an outside connection, prompt: &quot;Allow &lt;em&gt;some_device&lt;/em&gt; would like to access the
      internet.&quot;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;p&gt;The most common pattern I see is devices exposing a Wi-Fi access point that I can then connect to and configure
    via a captive portal. This technically works, but feels hacky.&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;p&gt;This is a space I want to learn more about and experiment in. I think peer-to-peer device communication keeps
    services alive longer, and is critical to ownership and long-term reliability for digital devices.&lt;/p&gt;
&lt;/section&gt;</content>
  </entry>
  <entry>
    <title>Thoughts on bands</title>
    <id>https://daltonrowe.com/playing-in-bands</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/playing-in-bands.html" />
    <published>2025-07-27T00:00:00.000Z</published>
    <updated>2025-07-27T00:00:00.000Z</updated>
    <summary>Bands are cool, do them.</summary>
    <content type="html">
&lt;section&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/playing-in-bands/playing-in-bands.jpg&quot; alt=&quot;My guitars&quot;&gt;

  &lt;p&gt;Bands are cool, do them.&lt;/p&gt;

  &lt;p&gt;
    A friend asked for some feedback on music recently, and it got me thinking. So here’s my thoughts around playing in bands in my early twenties from a mediocre, totally unqualified rando. 
  &lt;/p&gt;

  &lt;p&gt;
    Some of it is things that worked for us, some are things I wished we’d leaned into. 
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Have a plan for the audience&lt;/h2&gt;

  &lt;p&gt;
    Imagine, as visually as you can, how you want the audience to interact with your music, and then ruthlessly optimize for that in your writing process.
  &lt;/p&gt;

  &lt;p&gt;
    Do you want people to stare into their drinks, dance, mosh, laugh, be impressed? Almost anything is valid except waiting and politely clapping.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Determine what kind of band you are&lt;/h2&gt;

  &lt;p&gt;
    Reductively there are two types of bands, entertainment bands and art bands. Great bands find a way to be both.
  &lt;/p&gt;

  &lt;p&gt;
    If your goal is to provide an entertaining live or listening experience, build consensus on that as a group and throw any shame aside. Optimize your music, gear and stage presence to that goal.
  &lt;/p&gt;

  &lt;p&gt;
    If you want to focus on your own self expression or the self expression with a group, that&apos;s awesome. I really connect with that endeavor. In that case, focus on yourselves, your skills, your craft and try to ignore the outside. Of course you can still have fun with the live performance, but know that maybe you&apos;re not gonna exist in the same spaces that some of the more entertainment focused artists will.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Don&apos;t over index on social connections&lt;/h2&gt;

  &lt;p&gt;
    Networking is very important and it creates a lot of opportunities for your band, people with best friend bands, sort of things, but don&apos;t let your status in some small community become too large in your mind.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Songwriting is the skill that matters&lt;/h2&gt;

  &lt;p&gt;
    I personally wanted to believe in some of the egalitarian Queen-inspired vision of a band where every single member is an equal contributor, and we all share credit. But in reality, 75% of the song is the vocals and lyrics; the music is there to support it.
  &lt;/p&gt;

  &lt;p&gt;
    Similarly, if you have someone in your band that creates the lyrics or is the primary songwriter, support them. Unless you can create entire musical ideas including the lyrics on your own, then you&apos;re gonna play a support role, and that&apos;s fine!
  &lt;/p&gt;

  &lt;p&gt;
    I let my ego hold back the speed at which we could&apos;ve created, but it&apos;s a complicated issue because that puts a lot of weight on the primary creative forces to be decisive and fast and all those other things.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Have fun&lt;/h2&gt;

  &lt;p&gt;
    Pursuing creative expression with a team of like-minded individuals is maybe the most fun that you could have, so just enjoy it while you got it.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Quality comes from quantity&lt;/h2&gt;

  &lt;p&gt;
    Create create create, don&apos;t ever sit and pick over one idea until it&apos;s &quot;perfect&quot;. Finish the idea and move onto the next one. I believe that you get better by finishing many many times instead of polishing.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Do it yourself&lt;/h2&gt;

  &lt;p&gt;
    Have technical skills so that you can record your own band and express your ideas in a consumable fashion. The quality probably won&apos;t be what a professional or dedicated engineering producer can do, but it&apos;s very satisfying both for you as a band to work together and record music regularly and it allows you to move onto the next idea.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Save your files&lt;/h2&gt;

  &lt;p&gt;
    Back up the things you create and keep track of them. It is so much fun to look back at the things you&apos;ve created with your friends and reminisce, but you would be surprised how many bands create music, release it, streaming platforms change, whatever, and that music gets lost. Save it somewhere and you&apos;ll enjoy it for a long time.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;p&gt;Anyways, bands are awesome, keep doing them.&lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Top 25 Games of the 21st Century</title>
    <id>https://daltonrowe.com/top-25-games</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/top-25-games.html" />
    <published>2025-07-13T00:00:00.000Z</published>
    <updated>2025-07-13T00:00:00.000Z</updated>
    <summary>Summer 2025</summary>
    <content type="html">
&lt;section&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/top-25-games/top-25-games-wide.png&quot; alt=&quot;Top 25 Games of the 21st Century&quot;&gt;

  &lt;p&gt;
    &lt;a href=&quot;https://giantbomb.com&quot;&gt;Giant Bomb&lt;/a&gt; is independent for the first time, 
    which is awesome since I used to watch it a lot and appreciate independent websites.
  &lt;/p&gt;

  &lt;p&gt;
    Anyways I pulled my head out from making a live editor for this site and post, and instead just wrote the thing.
    This list is loosely ranked, and mostly about the experiences I&apos;ve had with my friends.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🌌&lt;/span&gt; Phantasy Star Online
      &lt;small&gt;Played alone oddly enough, this aesthetic lives deep in my heart.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🔌&lt;/span&gt; Halo: Combat Evolved
      &lt;small&gt;LAN parties, ambigious and mysterious geometry, PC mods. Honorable to Infinite for time with friends while abroad.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🗺️&lt;/span&gt; Morrowind
      &lt;small&gt;Beautiful world, walking out of Balmora in the morning fog to that wonderous soundtrack. Deep and wide, had no clue what I was doing.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🦋&lt;/span&gt; Final Fantasy Tactics Advance
      &lt;small&gt;Isometric, squad building, ability configuration. Lovely art in a portable format.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🐰&lt;/span&gt; Final Fantasy XII
      &lt;small&gt;Auto battling, configuration, more Ivalice. Speaks to my programming brain, 4x speed up a must.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🤺&lt;/span&gt; Nidhogg
      &lt;small&gt;Rivalries abound, great times playing this in upstairs on High St (I think?)&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🌎&lt;/span&gt; Super Mario Odyssey
      &lt;small&gt;I didn&apos;t beat this one but my wife suuure did. Super fun seeing her go deep on. Great controls, music, and world.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏔️&lt;/span&gt; Legend of Zelda: Breath of the Wild
      &lt;small&gt;Huge moonshot that revolutionized the series, and some ways the industry. Beautiful piano, character progression, with calls back to 30 years of lore.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🚔&lt;/span&gt; Need for Speed: Most Wanted
      &lt;small&gt;Highschool PC era, comparing and discussing with Adam. Great controls, and city (if a bit beige).&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏗️&lt;/span&gt; Minecraft
      &lt;small&gt;Made for all Lego kids, simple, concise, endless. From an Alpha account, a break, to RTX, and then Bobcatville.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏖️&lt;/span&gt; Super Mario Sunshine
      &lt;small&gt;Used to be derided, but I spent many hours just exploring. Vacation in a game with lovely music.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🦍&lt;/span&gt; Overwatch
      &lt;small&gt;Hours and hours with YB, including tournament hosting and streaming graphics. Rise and fall of OWL.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏎️&lt;/span&gt; Mario Kart DS
      &lt;small&gt;Playing with friends at GRC, and in AP Music Theory. Crisp, sharp graphics and controls. Game sharing without a cart.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🪄&lt;/span&gt; Legend of Zelda: The Wind Waker
      &lt;small&gt;Another that was looked down upon at the time but I always loved. Spent many many hours sailing around the world.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🚃&lt;/span&gt; Half Life 2
      &lt;small&gt;I had serious heart activity being trapped in the hallways after running through the rooftops. Another love of early PC gaming, Steam took foreeeever to download on 56k.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🧑‍🚀&lt;/span&gt; Elite: Dangerous
      &lt;small&gt;Evan called the shot on this one. Eventually got hooked, got some HOTAS, and my Dolphin. Built my home with the Astrobiology Research Cooperative, which turned out to be ran by furries.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏟️&lt;/span&gt; Super Smash Brothers: Brawl
      &lt;small&gt;Getting utterly smacked into the ground by Jared and Stephen. Formative &quot;adult&quot; years at Park Street.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🧑‍🌾&lt;/span&gt; Stardew Valley
      &lt;small&gt;The dream game successor to Harvest Moon. Indie dev, everything you&apos;d want. Some friends that don&apos;t really play games loved it.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏜️&lt;/span&gt; Journey
      &lt;small&gt;Dazzling art direction with a haughty multiplayer concept. Mantha made me a beautiful scarf from my first playthrough&apos;s player icon.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🪐&lt;/span&gt; Star Wars: Knights of the Old Republic
      &lt;small&gt;One of my first Bioware, branching dialogue games. Loved building my character, turning evil at the very end and the DnD roots.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;💣&lt;/span&gt; Counter-Strike: Source
      &lt;small&gt;Playing de_dust2 over and over listening to Vitalic. Eventually branching into the offical maps, then surf, gun game, and custom servers.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🚁&lt;/span&gt; Battlefield 2
      &lt;small&gt;Pub stomping with Adam in the Apache on FuShe pass. Grenade fights in Kardand. Miss the game dearly, tragic it&apos;s not playable now. Also Project Reality bullet cracks.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🎲&lt;/span&gt; Neverwinter Nights
      &lt;small&gt;Some of my first exposure to DnD ideas. I remember having dreams of being a ranger after playing. I was terrible, but I loved it.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🐥&lt;/span&gt; Sonic Adventure 2
      &lt;small&gt;Loved the music, still listen to it. Gameplay is rough at times, but spent many hours growing Chao in the garden.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🎥&lt;/span&gt; Until Dawn
      &lt;small&gt;Had a blast playing with my wife. Fun, quick, focused.&lt;/small&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Bonus: Original Xbox&lt;/h2&gt;
  &lt;p&gt;
    A friend wanted to make an (ordered list) for a specific console, so here&apos;s the OG Xbox. While there are some multiplatform games, I prioritized games I actually played on the big boy.
    
    &lt;ul&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;💍&lt;/span&gt; Halo
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;💣&lt;/span&gt; Halo 2
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;⚔️&lt;/span&gt; Fable
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🐉&lt;/span&gt; Jade Empire
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;⏰&lt;/span&gt; Timesplitters 2
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🏂&lt;/span&gt; SSX Tricky
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🤠&lt;/span&gt; Red Dead Revolver
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🛬&lt;/span&gt; Mercenaries
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🥎&lt;/span&gt; Fusion Frenzy
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🗺️&lt;/span&gt; Soul Caliber 2
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🔨&lt;/span&gt; Red Faction 2
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🌟&lt;/span&gt; Advent Rising
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🥷&lt;/span&gt; Ninja Gaiden
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🔫&lt;/span&gt; Pariah
      &lt;/li&gt;
      &lt;li&gt;
        &lt;span class=&quot;icon&quot;&gt;🐺&lt;/span&gt; Bloody Roar: Primal Fury
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Rails View Components + Form Builders</title>
    <id>https://daltonrowe.com/view-components-form-builder</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/view-components-form-builder.html" />
    <published>2025-05-02T00:00:00.000Z</published>
    <updated>2025-05-02T00:00:00.000Z</updated>
    <content type="html">

&lt;section&gt;
  &lt;p&gt;
    I&apos;ve been building a new Rails 8 application recently. I&apos;m all in on View
    Components, and have enjoyed building it out as pure and Rails-y as
    possible.
  &lt;/p&gt;

  &lt;p&gt;
    I came across a (documented) gotcha around using Rails Form Builders in View
    Components. Here&apos;s how I got the setup I want.
  &lt;/p&gt;

  &lt;h2&gt;Setting default Form Builder in Rails View Components&lt;/h2&gt;

  &lt;code&gt;
class ApplicationComponent &lt; ViewComponent::Base 
  alias_method :original_form_with, :form_with 
  
  def form_with(**args, &amp;block)
    original_form_with(**args, builder: MyFormBuilder, &amp;block) 
  end 
end
  &lt;/code&gt;

  &lt;p&gt;
    The above renames the &lt;code&gt;form_with&lt;/code&gt; method to
    &lt;code&gt;original_form_with&lt;/code&gt; to get it out of our way. It then inserts an
    extra &lt;code&gt;builder: MyFormBuilder&lt;/code&gt;, so you never have to
    think about it again.
  &lt;/p&gt;

  &lt;h2&gt;Using View Components in Form Builders&lt;/h2&gt;

  &lt;p&gt;For posterity, here&apos;s the rest of my Rails View Component Form set up:&lt;/p&gt;

  &lt;code&gt;
class MyFormBuilder &lt; ActionView::Helpers::FormBuilder
  def my_submit(**args, &amp;block)
    defaults = {
      type: :submit
    }

    view_context.render MyButtonComponent.new(**defaults.merge(args))
  end

  private

  def view_context
    @view_context ||= ApplicationController.new.view_context
  end
end
  &lt;/code&gt;

  &lt;p&gt;Allowing you to then use:&lt;/p&gt;

  &lt;code&gt;
form_with ... do |form|
  form.my_submit
end
  &lt;/code&gt;

  &lt;p&gt;Here we create a new Form Builder at &lt;code&gt;config/initializers/my_form_builder.rb&lt;/code&gt; inheriting from the default.
  I&apos;ve added a private method to get a controller ViewContext so we can render view components with no extra faffing about.&lt;/p&gt;

  &lt;code&gt;
class ApplicationController &lt; ActionController::Base
  default_form_builder MyFormBuilder

  ...
end
  &lt;/code&gt;

  &lt;p&gt;Lastly we set the default builder using the handy Rails &lt;code&gt;default_form_builder&lt;/code&gt;, these folks thought of everything.&lt;/p&gt;

  &lt;h2&gt;Extra Context + Sources&lt;/h2&gt;

  &lt;p&gt;This was an &lt;a href=&quot;https://viewcomponent.org/known_issues.html#forms-dont-use-the-default-formbuilder&quot;&gt;intentional decision&lt;/a&gt; from the View Components team to prevent unexpected changes to rendering behavior.&lt;/p&gt;

  &lt;p&gt;Thanks to &lt;a href=&quot;https://www.mendelowski.com/til/2024/02/rendering-view-component-from-form-builder&quot;&gt;Lucas Mendelowski&lt;/a&gt; for the helpful article on how to easily slot VCs into Form Builders, shown above.&lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Container Tabs</title>
    <id>https://daltonrowe.com/container-tabs</id>
    <link rel="alternate" type="text/html" href="https://container-tabs-css.daltonrowe.com/" />
    <published>2025-03-25T00:00:00.000Z</published>
    <updated>2025-03-25T00:00:00.000Z</updated>
    <summary>Tunnel effect with SVG</summary>
  </entry>
  <entry>
    <title>scad-js-esm</title>
    <id>https://daltonrowe.com/scad-js-esm</id>
    <link rel="alternate" type="text/html" href="https://github.com/daltonrowe/scad-js-esm" />
    <published>2025-03-01T00:00:00.000Z</published>
    <updated>2025-03-01T00:00:00.000Z</updated>
    <summary>OpenSCAD via JS ES Modules</summary>
  </entry>
  <entry>
    <title>Canvas Crusher</title>
    <id>https://daltonrowe.com/canvas-crusher</id>
    <link rel="alternate" type="text/html" href="https://canvas-crusher.daltonrowe.com/" />
    <published>2025-02-01T00:00:00.000Z</published>
    <updated>2025-02-01T00:00:00.000Z</updated>
    <summary>Canvas Dither Toy</summary>
  </entry>
  <entry>
    <title>LTTP Layers</title>
    <id>https://daltonrowe.com/lttp-layers</id>
    <link rel="alternate" type="text/html" href="https://lttp-layers.daltonrowe.com/" />
    <published>2025-01-01T00:00:00.000Z</published>
    <updated>2025-01-01T00:00:00.000Z</updated>
    <summary>3D CSS + WebAudio experiment</summary>
  </entry>
  <entry>
    <title>HalloWLED: Spooky Sound Effects Controller</title>
    <id>https://daltonrowe.com/hallowled</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/hallowled.html" />
    <published>2024-10-31T00:00:00.000Z</published>
    <updated>2024-10-31T00:00:00.000Z</updated>
    <summary>Fall 2024</summary>
    <content type="html">
&lt;section&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/hallowled/hallowled1.webp&quot; alt=&quot;Hordes of Kinder descending on our pavilion&quot; /&gt;

  &lt;p&gt;
    At the beginning of our first year in Germany, we were informed
    Halloween was a big deal on the siedlung.
  &lt;/p&gt;

  &lt;p&gt;
    Being fools for Halloween ourselves we bust out the decorations, and I
    whipped up a little script to play sound effects with synchronized
    lighting.
  &lt;/p&gt;

  &lt;blockquote&gt;A couple people even took pictures!&lt;/blockquote&gt;

  &lt;p&gt;Some of my favorite scenes:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;⚡️&lt;/span&gt;
      Lightning Flashes with Rolling Thunder
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🍯&lt;/span&gt;
      Boiling Cauldron with Laughing Witch
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🎪&lt;/span&gt;
      Creepy Circus
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🚨&lt;/span&gt;
      Eerie Red Glow with Synths
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🎃&lt;/span&gt;
      And More!
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section id=&quot;wled&quot;&gt;
  &lt;h2&gt;WLED&lt;/h2&gt;

  &lt;p&gt;
    &lt;a href=&quot;https://github.com/aircoookie/WLED/&quot; target=&quot;_blank&quot;&gt;WLED&lt;/a&gt;
    is an LED controller for ESP32/ESP8266. It has tons of built in
    effects and a good amount of customization. It provides a web UI for
    editing but also includes a JSON API!
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/hallowled/hallowled3.webp&quot; alt=&quot;Prebuilt WLED ESP32 controller&quot; /&gt;
    &lt;figcaption&gt;Prebuilt WLED ESP32 controller&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    These prebuilt ESP32 boards with WLED already flashed made setup a
    breeze. Only needed to update OTA, setup the attached light strips,
    connect to the network!
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/hallowled/hallowled2.webp&quot; alt=&quot;HalloWLED running on my machine&quot; /&gt;
    &lt;figcaption&gt;HalloWLED can run from a laptop or a Pi.&lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/section&gt;

&lt;section id=&quot;some-details&quot;&gt;
  &lt;h2&gt;Networking&lt;/h2&gt;

  &lt;p&gt;
    HalloWLED is a great starting point if you want to script some WLED
    instances via their API.
  &lt;/p&gt;

  &lt;p&gt;
    It can run on a network, where a hostname for a node is required. It
    will then grab all other node IPs via the WLED API.
  &lt;/p&gt;

  &lt;p&gt;
    I found updating each node directly to be more reliable then using
    WLED&apos;s built in sync, where occasionally a strip would not recieve the
    new effect.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/hallowled/hallowled5.webp&quot; alt=&quot;HalloWLED running in the car for Trunk or Treat&quot; /&gt;
    &lt;figcaption&gt;
      HalloWLED running in direct AP mode for Trunk or Treat
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    Additionally it can also run in direct AP mode, where it connects the
    WLED instance&apos;s wireless access point. For Trunk or Treat decorations,
    I ran a WLED + 120 LED strip off a pocket battery pack, and could have
    stayed lit for probably ~6 hours.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;some-details&quot;&gt;
  &lt;h2&gt;Happy Halloween!&lt;/h2&gt;

  &lt;p&gt;
    Its a basic project, but I did take some care and iterations to make
    it a good experience for viewers.
  &lt;/p&gt;

  &lt;p&gt;
    It doesn&apos;t repeat effects back to back to ensure variety, and it swaps
    to a background scene in between effects in order to prevent effect
    lighting for outlasting its welcome.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/hallowled/hallowled4.webp&quot; alt=&quot;Alien halloween costume&quot; /&gt;
    &lt;figcaption&gt;My wife being out of this world 👽&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    I&apos;m glad my little weekend project went off without a hitch, and made
    some young folks Halloween even more fun!
  &lt;/p&gt;

  &lt;p&gt;
    &lt;a href=&quot;https://github.com/daltonrowe/hallowled&quot;&gt;View the &quot;HalloWLED&quot; repo on Github here&lt;/a&gt;
  &lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>QA Obstacle Course</title>
    <id>https://daltonrowe.com/qa-obstacle-course</id>
    <link rel="alternate" type="text/html" href="https://www.qaobstaclecourse.com/" />
    <published>2024-07-01T00:00:00.000Z</published>
    <updated>2024-07-01T00:00:00.000Z</updated>
    <summary>Browser automation tests</summary>
  </entry>
  <entry>
    <title>CaptureTag: A Raspberry Pi NFC Game</title>
    <id>https://daltonrowe.com/capturetag</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/capturetag.html" />
    <published>2024-03-01T00:00:00.000Z</published>
    <updated>2024-03-01T00:00:00.000Z</updated>
    <summary>Spring 2024</summary>
    <content type="html">
&lt;section&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-header.png&quot; alt=&quot;Players run to capture points while playing CaptureTag&quot; /&gt;

  &lt;p&gt;
    Imagine playing king of the hill as a kid, but when you capture the
    hill the whole landscape around you is illuminated with light and
    color. That&apos;s the big vision for this small game prototype.
  &lt;/p&gt;

  &lt;blockquote&gt;
    I wanted to make a game, that takes place in the real world involving
    no phones or other devices.
  &lt;/blockquote&gt;

  &lt;p&gt;
    Built with Raspberry Pi’s, NFC readers, LED strips, and Supabase. The
    goal of the game is to capture and hold and many capture points as you
    can, stealing them back from other players, and sneaking off the gain
    control for your team.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Contents&lt;/h2&gt;

  &lt;ol class=&quot;contents&quot;&gt;
    &lt;li&gt;
      &lt;a href=&quot;#the-game&quot;&gt;The Game &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#the-tech&quot;&gt;The Tech&lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#playtest&quot;&gt;Play Test &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#next-steps&quot;&gt;Takeaways &amp;amp; Next Steps &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/section&gt;

&lt;section id=&quot;the-game&quot;&gt;
  &lt;h2&gt;The Game&lt;/h2&gt;

  &lt;p&gt;
    “Multi Hill King of the Hill” is the best one phrase explainer I’ve
    found so far. The goal is to capture areas for your team by swiping
    your NFC card at the control point.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-capture.png&quot; alt=&quot;Player happy with swiping their point&quot; /&gt;
    &lt;figcaption&gt;
      A stealthy player walks away from a recently captured point.
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    Players compete for control of each zone, both to gain their team
    capture time as well as capture points for themselves.
  &lt;/p&gt;

  &lt;p&gt;
    An scoreboard then displays captured areas as well as a leaderboard.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-scoreboard-screen.png&quot;
      alt=&quot;Scoreboard and floor plan displayed on a TV. Notice some incorrect player names at the bottom from partial card reads.&quot; /&gt;
    &lt;figcaption&gt;Scoreboard and floor plan displayed on a TV&lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/section&gt;

&lt;section id=&quot;the-tech&quot;&gt;
  &lt;h2&gt;The Tech&lt;/h2&gt;

  &lt;p&gt;Each node / &quot;hill&quot; consists of:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Raspberry Pi 3B+&lt;/li&gt;
    &lt;li&gt;WS2182 Light Strip&lt;/li&gt;
    &lt;li&gt;RC522 NFC Reader / Writer&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    I enjoy working within Raspberry Pi well-trodden ecosystem. They are
    often overkill for projects, but its great to continue working in a
    familiar Linux environment.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-setup.jpg&quot; alt=&quot;Setting up CaptureTag NFC cards for the first play test&quot; /&gt;
    &lt;figcaption&gt;
      NFC cards and a Raspberry Pi node being setup for play.
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    The capture point is written in NodeJS, with the help of some awesome
    packages, namely
    &lt;a href=&quot;https://github.com/beyondscreen/node-rpi-ws281x-native&quot;&gt;node-rpi-ws281x-native&lt;/a&gt;
    and
    &lt;a href=&quot;https://github.com/firsttris/mfrc522-rpi&quot;&gt;mfrc522-rpi&lt;/a&gt;.
  &lt;/p&gt;

  &lt;p&gt;
    Each card has a hex-encoded string written to it that decodes to
    something like `B-taco`. The first letter being the team, and second
    being the player&apos;s code name.
  &lt;/p&gt;

  &lt;p&gt;
    When a scan happens the Pi debounces the scan event (as they can
    happen in quick succession) and then shoots up the data to a simple
    &lt;a href=&quot;https://supabase.com&quot;&gt;Supabase&lt;/a&gt; project with a few
    endpoints. A lot of fun insights can be derived from the data, see the
    play test below for what I pulled out.
  &lt;/p&gt;

  &lt;p&gt;
    Each scan event is stored as an event queue so that game node are
    mostly stateless and the data can be replayed and parsed later.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-admin.jpg&quot; alt=&quot;Supabase admin dashboard&quot; /&gt;
    &lt;figcaption&gt;
      Rough and simple admin dashboard for managing games and nodes.
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    Game sessions, node assignment, and project endpoints can be managed
    via a super rough dashboard I slapped together. I enjoyed working
    framework free and keeping it as barebones as possible.
  &lt;/p&gt;

  &lt;p&gt;
    The scoreboard page uses
    &lt;a href=&quot;https://supabase.com/docs/guides/realtime&quot;&gt;Supabase Realtime&lt;/a&gt;
    to provide instant updates to the capture state of each node, as well
    as keep the leaderboard up to date.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;play test&quot;&gt;
  &lt;h2&gt;Play Test&lt;/h2&gt;

  &lt;p&gt;
    I was planning to have a get-together with my friends in an Airbnb,
    and I realized that would be perfect opportunity to try out the game!
  &lt;/p&gt;

  &lt;h3&gt;Teaching&lt;/h3&gt;

  &lt;p&gt;
    I didn’t get a representative experience of introducing the game to
    players as all involved were close friends and more or less taught
    each other. However I did learn a few things:
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🖼️&lt;/span&gt;
      Show Don&apos;t Tell
      &lt;small&gt;
        All the words in the world didn’t compare to swiping a card and
        seeing the color on the point change. The actual demo following by
        a suggestion of how to be competitive got people interesting and
        playing right away.
      &lt;/small&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🙋&lt;/span&gt;
      Personally Relevant Goals First
      &lt;small&gt;
        Intially, I started introducing the team goals like holding the
        point for your team and total capture time. But quickly I realized
        players cared more about their personal actions and contributions,
        so I started introducing that first.
      &lt;/small&gt;

      &lt;small&gt;
        I’m still personally interested in the team aspect so I’ll likely
        spend time juicing the experience of contributing to one’s team
        with team leaderboards and other stats.
      &lt;/small&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Player Feedback&lt;/h3&gt;
  &lt;p&gt;
    I got tons of great feedback as I discussed with players, each had
    their different play styles and focused on different parts of the
    game.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏆&lt;/span&gt;
      Desire for Leaderboard
      &lt;small&gt;
        Universally, all players wanted to see who had the most scans. I
        incorrectly assumed team play was more interesting but quickly
        pivoted.
      &lt;/small&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🔒&lt;/span&gt;
      Lockout Time
      &lt;small&gt;
        “Steals” happened frequently. Players capture a point, and then
        another competitive player would sneak up right behind them and
        recapture the point.
      &lt;/small&gt;

      &lt;small&gt;Several players brought up that a lockout time would feel better,
        so their progress wouldn’t immediately be wiped away.&lt;/small&gt;

      &lt;small&gt;
        I like this idea, but will likely implement it with a light touch
        as not to discourage the highly engaged stealing players.
      &lt;/small&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;📝&lt;/span&gt;
      Genuine Product Direction from Players
      &lt;small&gt;
        Gathering feedback directly from engaged players was a rush. Being
        surrounded with players having discussions and combined with the
        agency to make any changes I felt necessary was a beautiful taste
        of true user focused design.
      &lt;/small&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Parsing Data&lt;/h3&gt;

  &lt;p&gt;
    A few days after the game was complete I parsed out all the scan
    events to determine the winner, as well as some interesting stats!
  &lt;/p&gt;

  &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-stats.png&quot; alt=&quot;Most captures by team&quot; /&gt;

  &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-captures.png&quot; alt=&quot;Most captures by team&quot; /&gt;

  &lt;img src=&quot;https://daltonrowe.com/img/capturetag/ct-time.png&quot; alt=&quot;Total capture time&quot; /&gt;

  &lt;p&gt;
    Team based stats were less interesting in this play test, but I think
    with the right visibility team based play could be made really fun for
    players.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;next-steps&quot;&gt;
  &lt;h2&gt;Next Steps&lt;/h2&gt;

  &lt;p&gt;
    As I have time I want to polish the game, to make it as beautiful a
    process as possible, more so than expanding with new features. Here
    are a few things that I&apos;ve been ruminating on:
  &lt;/p&gt;

  &lt;h3&gt;Improvements&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;📡&lt;/span&gt;
      Local server support
      &lt;small&gt;There&apos;s not really a need to a central online server, I could
        instead use a command node and keep the game local to the
        network.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🔧&lt;/span&gt;
      Use GUIDs + registration flow to Setup Cards
      &lt;small&gt;
        Currently each card must be burnt with a team code and player
        name, just use the built in GUIDs instead and register each card
        to a user name.
      &lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🔒&lt;/span&gt;
      Add Lock Out time with Visual Effects
      &lt;small&gt;As mentioned, prevent instant steals from watchful players.
        There&apos;s opportunity for a high affordance design, gradually fading
        into the new colors.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;💡&lt;/span&gt;
      Control External Lights via API
      &lt;small&gt;To control a larger universe of lights, have a local command node
        find and set lighting for node zones.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🤏&lt;/span&gt;
      Shrink nodes from Pi to ESP32
      &lt;small&gt;Raspberry Pi is super duper overkill for these little scanner
        nodes.&lt;/small&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🌗&lt;/span&gt;
      Prevent Partial Scans
      &lt;small&gt;
        Sometime I received partial scans from the NFC cards. I&apos;m not sure
        why this happens but there ways to check for and prevent this.
      &lt;/small&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Takeaways&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🛝&lt;/span&gt;
      Rediscovering Playground Mentalities
      &lt;small&gt;
        The childlike playground mentality is essential when thinking
        about and explaining games. It took a minute to get back into but
        I loved living in that space during the play test.
      &lt;/small&gt;
      &lt;small&gt;
        Initially the game was called &quot;Lumi&quot; but &quot;CaptureTag&quot; (as
        suggested by my friend Tim) explains itself and communicate the
        correct level of anti-serious playfulness.
      &lt;/small&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🏅&lt;/span&gt;
      Competing for Most Scans is Fun
      &lt;small&gt;
        Players talked the most about on upping each other, and loved
        seeing their numbers go up!
      &lt;/small&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🪪&lt;/span&gt;
      Players Lose Cards
      &lt;small&gt;Be able to ready to make backups 🙂&lt;/small&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;📺&lt;/span&gt;
      Prevent Burn In
      &lt;small&gt;When displaying the leaderboard on a TV, have tools to prevent
        burn-in, such as a slight wiggle and dark mode.&lt;/small&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section id=&quot;conclusion&quot;&gt;
  &lt;h2&gt;Thanks!&lt;/h2&gt;
  &lt;p&gt;
    Creating an physical game with the tools of my incredibly virtual
    trade was very gratifying.
  &lt;/p&gt;

  &lt;p&gt;
    For those curious to see the code, it&apos;s pretty simple and might serve
    as an example for some basic LED + NFC integration in Node.
  &lt;/p&gt;

  &lt;p&gt;
    &lt;a href=&quot;https://github.com/daltonrowe/lumi&quot;&gt;View the &quot;Lumi&quot; repo on Github here&lt;/a&gt;
  &lt;/p&gt;

  &lt;p&gt;
    My side project mindset in the past has been very business focussed,
    and I&apos;m excited to build more projects around providing fun and
    pleasure than extracting money.
  &lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>simpleretro</title>
    <id>https://daltonrowe.com/simpleretro</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/simpleretro.html" />
    <published>2022-11-01T00:00:00.000Z</published>
    <updated>2022-11-01T00:00:00.000Z</updated>
    <summary>Winter 2022</summary>
    <content type="html">
&lt;section&gt;
  &lt;p&gt;
    Another in a series of side projects scratching my own itches. Every
    sprint our Product Manager would complain about not being able to find
    a simple retro tool that allows for ranking by number of votes.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/simpleretro/admin.webp&quot; alt=&quot;simpleretro retrospective&quot; /&gt;
    &lt;figcaption&gt;
      Retro runner&apos;s view with all session controls.
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    I was enjoying working with Firebase at the time, so I whipped up a
    quick tool with only the features we needed:
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;😎&lt;/span&gt; Masking user&apos;s feedback&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;📡&lt;/span&gt; Realtime editing&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🗳️&lt;/span&gt; Vote limiting&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;📚&lt;/span&gt; Sort by votes / recency&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🖇️&lt;/span&gt; Combining similar feedback&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    We got some nice use out of this guy. I designed some of the systems
    around the good faith of participants, some of the logic around card
    masking and maximum votes lives in the frontend. None of the
    developers involved got overly curious at what they might be able to
    affect but it&apos;s only a matter of time.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/simpleretro/user.webp&quot; alt=&quot;A retro participant&apos;s view&quot; /&gt;
    &lt;figcaption&gt;A retro participant&apos;s view&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    Firebase is great for throwing together apps really quickly. This
    project explored use of Firebase&apos;s Firestore emulation for a test
    suite which is quite ergonomic, as well as some handrolled
    &quot;migrations&quot; which were less so 🙂.
  &lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Soundsleeper</title>
    <id>https://daltonrowe.com/soundsleeper</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/soundsleeper.html" />
    <published>2022-06-01T00:00:00.000Z</published>
    <updated>2022-06-01T00:00:00.000Z</updated>
    <summary>Summer 2022</summary>
    <content type="html">
&lt;section&gt;
  &lt;p&gt;
    I needed a white noise app to help a family member sleep, but all the
    existing ones had upsells. This mostly worked but Apple doesn&apos;t let
    PWAs play audio via the Web Audio APIs when locked.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/soundsleeper/app.webp&quot; alt=&quot;Soundsleeper PWA&quot; style=&quot;max-width: 400px&quot; /&gt;
    &lt;figcaption&gt;Soundsleeper with equalizer expanded.&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    This project hit the edges of PWA capabilties, so I didn&apos;t ever get to
    use it much personally. But it demonstrates some cool browsers APIs
    such as:
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🔊&lt;/span&gt; Web Audio API&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🎚️&lt;/span&gt; Media Sessions API&lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;📱&lt;/span&gt;
      Progressive Web App / Service Workers
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🧸&lt;/span&gt;
      Zustand State Management
      &lt;small&gt;Even though I used a destructing anti-pattern O_O&lt;/small&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    I unknownly re-invented
    &lt;a href=&quot;https://jackyef.com/posts/building-an-audio-loop-player-on-the-web&quot;&gt;jackyef&apos;s project here&lt;/a&gt;, which I
    found later.
  &lt;/p&gt;

  &lt;p&gt;
    Creating seamless looping audio requires using the Web Audio API, as
    of writing. Using the Audio APIs to play sound instead of standard
    HTML markup allowed for EQ controls as well.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/soundsleeper/logo.webp&quot; alt=&quot;Soundsleeper logo&quot; /&gt;
    &lt;figcaption&gt;Soundsleeper Logo&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    &lt;a href=&quot;https://github.com/daltonrowe/soundsleeper&quot;&gt;View on &quot;Soundsleeper&quot; repo on Github&lt;/a&gt;
  &lt;/p&gt;

  &lt;p&gt;
    It also utilizes the Media Sessions API to allow for audio control via
    the Mac menu bar, as well on the lock screen for supported devices.
  &lt;/p&gt;

  &lt;p&gt;
    It&apos;s up for now at
    &lt;a href=&quot;https://soundsleeper.app&quot;&gt;soundsleeper.app&lt;/a&gt;, but I&apos;ll
    probably let it expire since I&apos;m not using it at the moment.
  &lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Frameshifter</title>
    <id>https://daltonrowe.com/frameshifter</id>
    <link rel="alternate" type="text/html" href="https://github.com/daltonrowe/frameshifter" />
    <published>2021-05-22T00:00:00.000Z</published>
    <updated>2021-05-22T00:00:00.000Z</updated>
    <summary>Gameplay dashboards for Elite Dangerous</summary>
  </entry>
  <entry>
    <title>Aestherial - [object Object]</title>
    <id>https://daltonrowe.com/aestherial</id>
    <link rel="alternate" type="text/html" href="https://aesthereal.bandcamp.com/album/object-object" />
    <published>2021-01-23T00:00:00.000Z</published>
    <updated>2021-01-23T00:00:00.000Z</updated>
    <summary>Chill music with my friend</summary>
  </entry>
  <entry>
    <title>InsideOut Christmas Spectacular</title>
    <id>https://daltonrowe.com/inside-out-christmas</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/inside-out-christmas.html" />
    <published>2020-12-24T00:00:00.000Z</published>
    <updated>2020-12-24T00:00:00.000Z</updated>
    <summary>December 2020</summary>
    <content type="html">
&lt;p&gt;Like most good TV shows, InsideOut got a Christmas special.&lt;/p&gt;

&lt;img src=&quot;https://daltonrowe.com/img/inside-out/xmas-big.png&quot; alt=&quot;Christmas Spectacular Final Haul&quot; /&gt;

&lt;p&gt;A 24-hour live steam / beautiful mess featuring:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🎸&lt;/span&gt;tons of community submitted content&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;😴&lt;/span&gt;sleeping for a few hours&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🗽&lt;/span&gt;a deep dive into philoshopy at 3AM&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;❤️&lt;/span&gt;a heaping of community love&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;💸&lt;/span&gt;$4000 raised for Toys for Tots!!&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Yellowberri 3.0 Website</title>
    <id>https://daltonrowe.com/yellowberri-website</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/yellowberri-website.html" />
    <published>2020-03-01T00:00:00.000Z</published>
    <updated>2020-03-01T00:00:00.000Z</updated>
    <summary>Built 2018 | Launched 2020</summary>
    <content type="html">
&lt;p&gt;A few things I&apos;m proud of in the Yellowberri 3.0 website.&lt;/p&gt;

&lt;figure&gt;
  &lt;video muted autoplay loop&gt;
    &lt;source src=&quot;https://daltonrowe.com/img/yellowberri-website/yb-fireworks.mp4&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;
    I didn&apos;t know it had fireworks! I told my wife, she was very
    supportive.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  At Yellowberri I worked with WordPress a lot, and was lucky enough to
  find Advanced Custom Fields early on. We primarily worked on information
  based (brochure) websites for small to medium sized businesses.
&lt;/p&gt;

&lt;h2&gt;Putting it all together&lt;/h2&gt;

&lt;img src=&quot;https://daltonrowe.com/img/yellowberri-website/ybsite1.png&quot; alt=&quot;Yellowberri Website&quot; /&gt;

&lt;p&gt;
  I learned an immeasurble amount during that time, especially about what
  kind of websites get updated, and those that don&apos;t. That&apos;s worth a whole
  other post. But anyways, I aimed to make a new Yellowberri website that
  was, in order:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🎉&lt;/span&gt; going to recieve updates&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;⚡️&lt;/span&gt;fast&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🌟&lt;/span&gt;flashy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What I think is neat&lt;/h2&gt;

&lt;h3&gt;WordPress Backend&lt;/h3&gt;
&lt;p&gt;
  WordPress + ACF, in my opinion provides an unequaled backend CMS
  experience for users whose primary occupation is not updating websites.
  Many website maintainers are familiar with WordPress in advance even!
&lt;/p&gt;

&lt;h3&gt;Static Compatible&lt;/h3&gt;
&lt;p&gt;
  While not currently deployed as such, the 3.0 site can be turned into a
  static site with a simple wget + find and replace. The site utilizes
  Formspree for simple contact forms with no additional Javascript.
&lt;/p&gt;

&lt;h3&gt;Prepared for Social Media&lt;/h3&gt;
&lt;p&gt;
  Small standalone websites mean nothing without distribution. I&apos;ve found
  one the killer app of on-site blog posts is control over Open Graph
  images and titles for distribution on social channels. The CMS
  experience is a Pass/Fail test for utilization, so using intuitive tools
  and defaults is a must.
&lt;/p&gt;

&lt;h3&gt;Solid Lighthouse Scores&lt;/h3&gt;
&lt;p&gt;
  On launch scores, were pinned at 100 across the board! I was very happy
  to have achieved that in a live production site. After install third
  party scripts the score dropped a few points, but still firmly in the
  green.
&lt;/p&gt;

&lt;h3&gt;Lottie / Bodymovin Integration&lt;/h3&gt;
&lt;p&gt;
  Built from the start to support inline SVG and Bodymovin animations, the
  3.0 sites supports updating designs straight from After Effects or
  Illustrator via the WordPress backend.
&lt;/p&gt;

&lt;h3&gt;Page Animations&lt;/h3&gt;
&lt;p&gt;
  While admittedly a bit flashy, I think it&apos;s okay for an advertising
  site. The JS splits a Bodymovin animation by frames and randomizes the
  entry and exit. Featuring homespun page replacement AJAX to allow for
  page transitions between server rendered pages.
&lt;/p&gt;

&lt;h2&gt;Best part&lt;/h2&gt;
&lt;p&gt;
  It&apos;s getting used! It took a long time to get launched but I&apos;m glad it&apos;s
  out for now :)
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Tidball&apos;s InsideOut</title>
    <id>https://daltonrowe.com/inside-out</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/inside-out.html" />
    <published>2020-03-01T00:00:00.000Z</published>
    <updated>2020-03-01T00:00:00.000Z</updated>
    <summary>March 2020 - December 2020</summary>
    <content type="html">
&lt;figure&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/inside-out/stagetids.jpg&quot; alt=&quot;Tidball&apos;s Empty Bar&quot; /&gt;
  &lt;figcaption&gt;
    The local musician hotspot sits empty during the start of the COVID.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  When the Coronavirus pandemic first hit and shutdowns began, no one knew
  how to react. Our local music venue and bar
  &lt;a href=&quot;https://tidballs.com&quot;&gt;Tidball&apos;s&lt;/a&gt;, most known for being the
  starting point for Grammy award winning
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Cage_the_Elephant&quot;&gt;Cage the Elephant&lt;/a&gt;, decided to find new ways to reach
  their community.
&lt;/p&gt;

&lt;h2&gt;Oh wait are we on?&lt;/h2&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/inside-out/dave-nate.png&quot; alt=&quot;Original Hosts&quot; /&gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  Brain Jarvis, David Downing, Nathan Morguelan, Jessi Wurth and myself
  started hosting a twice weekly two-hour live steam featuring community
  music contributions, phone calls, and general zanyiness.
&lt;/p&gt;

&lt;p&gt;
  Truly a collabrotive mind-meld, ideas were abundant, passions high, some
  toes were stepped on but every member brought unique and essential
  aspects to the production. Truly a special moment for all us.
&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/inside-out/hosts.png&quot; alt=&quot;Dave and Jarvis&quot; /&gt;
  &lt;figcaption&gt;
    We figured out as we went how to wrangle the chaos of multi-camera
    live streaming.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  The community involvement was truly life changing. Heartfelt messages
  during calls, a comment section with unmatched enthusiasm and
  dedication, and even an unforgettable message of love from a new father
  were all unexpected and greatly appreciated.
&lt;/p&gt;

&lt;p&gt;And that&apos;s to say nothing of the music!&lt;/p&gt;

&lt;h2&gt;Homegrown Music&lt;/h2&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/inside-out/girl-tones.png&quot; alt=&quot;Girl Tones Steam Screenshot&quot; /&gt;
  &lt;figcaption&gt;
    The Girl Tones on a live stream in Tidball&apos;s during InsideOut.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  Every town says their music community is special, but it&apos;s obvious the
  music community in Bowling Green &lt;em&gt;did&lt;/em&gt; something special.
&lt;/p&gt;

&lt;p&gt;
  Artists from around Bowling Green and beyond wrote, recorded and
  performed hours of content in their own homes, that we were lucky enough
  to share on stream. Collabrations between new and old friends produced
  some genuinely amazing pieces under extraordinary circumstances.
&lt;/p&gt;

&lt;blockquote&gt;
  Overall we estimated around 180 hours of streaming in 2020.
&lt;/blockquote&gt;

&lt;p&gt;
  80% of that I&apos;d say was community performances and contributions! I
  can&apos;t thank all the artists that contributed enough.
&lt;/p&gt;

&lt;h2&gt;Above and Beyond&lt;/h2&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/inside-out/beans.png&quot; alt=&quot;John Tidball playing some Boston Beans, don&apos;t ask&quot; /&gt;
  &lt;figcaption&gt;
    John Tidball playing some Boston Beans dressed as White Lion, don&apos;t
    ask.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  The community as well as the core crew at
  &lt;a href=&quot;https://yellowberri.com&quot;&gt;Yellowberi&lt;/a&gt; put in tons of time and
  effort on special segments.
&lt;/p&gt;

&lt;p&gt;
  Fueled by Dang-Dangs (Jarvis special InsideOut concoction) the streams
  featured call in segments, on location out on the town shoots, over
  produced music videos, frantic police light backed rants against
  Zuckerburg and much more.
&lt;/p&gt;

&lt;h2&gt;Christmas Finale&lt;/h2&gt;

&lt;img src=&quot;https://daltonrowe.com/img/inside-out/xmas-big.png&quot; alt=&quot;Christmas Spectacular Final Haul&quot; /&gt;

&lt;p&gt;
  Like most good TV shows, InsideOut got a Christmas special, more about
  that &lt;a href=&quot;https://daltonrowe.com/./inside-out-christmas&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Vecteezy</title>
    <id>https://daltonrowe.com/vecteezy</id>
    <link rel="alternate" type="text/html" href="https://www.vecteezy.com/" />
    <published>2019-04-01T00:00:00.000Z</published>
    <updated>2019-04-01T00:00:00.000Z</updated>
    <summary>Eng. Manager / Sr. Developer</summary>
  </entry>
  <entry>
    <title>Porchlord - Mouth</title>
    <id>https://daltonrowe.com/mouth</id>
    <link rel="alternate" type="text/html" href="https://porchlord.bandcamp.com/album/mouth-for-what-its-worth" />
    <published>2018-11-01T00:00:00.000Z</published>
    <updated>2018-11-01T00:00:00.000Z</updated>
    <summary>Art, Guitar, Production - 2016</summary>
  </entry>
  <entry>
    <title>Literary Accessories</title>
    <id>https://daltonrowe.com/lit-acc</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/lit-acc.html" />
    <published>2018-03-01T00:00:00.000Z</published>
    <updated>2018-03-01T00:00:00.000Z</updated>
    <summary>Gatsby print on demand</summary>
    <content type="html">
&lt;style&gt;
  .fade-between {
    width: 100%;
    max-width: 800px;
    margin: 0 auto;
    position: relative;
    aspect-ratio: 1.57;

    img {
      position: absolute;
      top: 0;
      left: 50%;
      transform: translateX(-50%);
      height: calc(100% - 20px);
      object-fit: cover;
    }

    img:nth-of-type(2) {
      opacity: 0;
      animation-duration: 3s;
      animation-name: fade;
      animation-iteration-count: infinite;
    }
  }

  @keyframes fade {
    from {
      opacity: 0;
    }

    60% {
      opacity: 0;
    }

    to {
      opacity: 1;
    }
  }
&lt;/style&gt;

&lt;section&gt;
  &lt;p&gt;
    My wife had an idea for a phone case, I designed it and she didn&apos;t
    even buy it 😤.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/lit-acc/loaded.webp&quot; alt=&quot;Gatsby site with literary designs&quot; /&gt;
    &lt;figcaption&gt;
      The Shakespeare pattern was the one she wanted.
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    I ended creating a few more designs, including some manually upscaling
    before AI upscaling was a thing. A few of these were discoverable on
    Redbubble, I enjoyed see the orders come in and paying for dinner
    every couple months.
  &lt;/p&gt;

  &lt;h2&gt;Gatsby Static Site&lt;/h2&gt;
  &lt;p&gt;
    I created a quick site for my designs, though it had no effect on
    sales I&apos;m sure. I was interested in Gatsby, so dug into all its cool
    features to toss together a mini-site.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;div class=&quot;fade-between&quot;&gt;
      &lt;img src=&quot;https://daltonrowe.com/img/lit-acc/loading.webp&quot; alt=&quot;Gatsby site loading with SVG placeholders.&quot; /&gt;
      &lt;img src=&quot;https://daltonrowe.com/img/lit-acc/loaded.webp&quot; alt=&quot;Gatsby site with SVG loading&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;Pre-rendered SVGs fading into loaded assets&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    The Gatsby Image element was new at the time, and allows for compile
    time operations to be performed on images. Here the images are
    posterized and saved inline as SVGs. The final image then fades in
    after its loaded.
  &lt;/p&gt;

  &lt;p&gt;
    This was built when Gatsby hype was at its peak, and was great
    learning experience. The data layer was overkill for my needs and a
    bit inflexible for the other projects I tried it with (mainly around
    optional fields from CMSes).
  &lt;/p&gt;

  &lt;p&gt;
    Anyways, saving this here for the memories, since I no longer wanna
    renew the domain.
  &lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Discord Throwdown</title>
    <id>https://daltonrowe.com/discord-throwdown</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/discord-throwdown.html" />
    <published>2018-01-01T00:00:00.000Z</published>
    <updated>2018-01-01T00:00:00.000Z</updated>
    <summary>Overwatch tourney and overlays</summary>
    <content type="html">
&lt;p&gt;
  &lt;a href=&quot;https://yellowberri.com&quot;&gt;Yellowberri&lt;/a&gt; threw a video game
  tournament between Discord servers. Eight teams competed complete with
  custom scoreboard and overlays, commentary and multi camera coverage.
&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://daltonrowe.com/img/discord-throwdown/dct1.png&quot; alt=&quot;Discord Throwdown Twitch Livestream Screenshot&quot; /&gt;
  &lt;figcaption&gt;Custom OBS overlays powered by Websockets&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
  The YB Gaming Discord server grew it into an awesome place and
  eventually resulted in people from all over the US meeting in person!
&lt;/p&gt;

&lt;h2&gt;Some neat things&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;span class=&quot;icon&quot;&gt;🎨&lt;/span&gt;
    Stream overlay scorebard, custom colors, animations
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;icon&quot;&gt;🎥&lt;/span&gt;
    Animated webm video transitions
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;icon&quot;&gt;☁️&lt;/span&gt;
    Hosted NodeJS server sending websockets to local OBS
    &lt;small&gt;Rebuilt a few versions of ^ since for other projects&lt;/small&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;icon&quot;&gt;🎬&lt;/span&gt;
    Camera switching via local network NDI
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;icon&quot;&gt;🌡️&lt;/span&gt;
    Discord Hype Meter
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;icon&quot;&gt;🏆&lt;/span&gt;
    Customizable cards, overlays, counters
  &lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>bgrad.io</title>
    <id>https://daltonrowe.com/bgradio</id>
    <link rel="alternate" type="text/html" href="https://daltonrowe.com/bgradio.html" />
    <published>2018-01-01T00:00:00.000Z</published>
    <updated>2018-01-01T00:00:00.000Z</updated>
    <summary>Local music streaming</summary>
    <content type="html">
&lt;section&gt;
  &lt;p&gt;
    Bowling Green is a tertiary city in Kentucky where I went to college
    and met a beautiful group of people. BG has a grip of talented
    musicians creating art and performing live.
  &lt;/p&gt;

  &lt;p&gt;
    As I transplant to BG, I got to know some of these people, and heard
    from them about the previous eras of music in BG, and their musical
    influences that are no longer active.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/bgradio/cover.webp&quot; alt=&quot;bgrad.io branding and backgrounds&quot; /&gt;

    &lt;img src=&quot;https://daltonrowe.com/img/bgradio/backgrounds.jpg&quot; alt=&quot;bgrad.io branding and backgrounds&quot; /&gt;
    &lt;figcaption&gt;
      Creating the bgrad.io brand was one of my fav parts.
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    This experience led to me to create an database of local bands and
    musicians, reach out to them and get their permission to stream their
    music.
  &lt;/p&gt;

  &lt;h2&gt;Iteration 1: Youtube Stream&lt;/h2&gt;

  &lt;p&gt;
    The first version of bgrad.io was a 24/7 Youtube stream. These streams
    were popular at the time with &lt;em&gt;beats to relax/study to&lt;/em&gt; leading
    the charge.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/bgradio/stream.jpg&quot; alt=&quot;Youtube version of bgrad.io&quot; /&gt;
    &lt;figcaption&gt;
      A music video playing on the Youtube version of bgrad.io
    &lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    V1 was composed of some node scripts, a web interface, and OBS. I had
    a poor little Mac mini chugging away in my office for days at a time.
    Uptime was decent, but occasionally the next song would not play due
    to bugs in the node scripts.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/bgradio/backend.jpg&quot; alt=&quot;Debugging bgrad.io scripts&quot; /&gt;
    &lt;figcaption&gt;Debugging bgrad.io scripts.&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;The Youtube stream had some cool features:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🖼️&lt;/span&gt; Album art display&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🏃‍♂️‍➡️&lt;/span&gt; Art and title animation&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🎼&lt;/span&gt; Album and artist information&lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🎥&lt;/span&gt; Music videos support when available
    &lt;/li&gt;
    &lt;li&gt;
      &lt;span class=&quot;icon&quot;&gt;🧑‍🏫&lt;/span&gt; Interesting facts displayed per album
      and artist
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Iteration 2: Azuracast Server&lt;/h2&gt;

  &lt;p&gt;
    Eventually, I got tired having to host the stream locally in my own
    home. Occasional connection issues as well as network and power usage
    was less than ideal. To say nothing of the eventual copyright strikes
    I would attract on Youtube, despite having explicit permission from
    the rights holders.
  &lt;/p&gt;

  &lt;p&gt;
    So I looked into rebuilding bgrad.io as a hostable internet radio
    station. I found &lt;a href=&quot;https://www.azuracast.com/&quot;&gt;Azuracast&lt;/a&gt;, a
    great easy to roll streaming solution. I tossed it on a Digital Ocean
    droplet and redid the website, and let people know.
  &lt;/p&gt;

  &lt;figure&gt;
    &lt;img src=&quot;https://daltonrowe.com/img/bgradio/azura.jpg&quot; alt=&quot;Azuracast / Wordpress version of bgrad.io&quot; /&gt;
    &lt;figcaption&gt;Azuracast / Wordpress version of bgrad.io.&lt;/figcaption&gt;
  &lt;/figure&gt;

  &lt;p&gt;
    The response was much greater this time, and people shared how they
    enjoyed getting to rediscover artists they hadn&apos;t heard in decades.
  &lt;/p&gt;

  &lt;p&gt;Hopefully I revive this again in some form or another one day.&lt;/p&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Porchlord - It&apos;s Alive</title>
    <id>https://daltonrowe.com/its-alive</id>
    <link rel="alternate" type="text/html" href="https://porchlord.bandcamp.com/album/its-alive" />
    <published>2016-11-05T00:00:00.000Z</published>
    <updated>2016-11-05T00:00:00.000Z</updated>
    <summary>Art, Guitar, Production - 2016</summary>
  </entry>
  <entry>
    <title>Porchlord - Or Else</title>
    <id>https://daltonrowe.com/or-else</id>
    <link rel="alternate" type="text/html" href="https://porchlord.bandcamp.com/album/or-else" />
    <published>2015-01-02T00:00:00.000Z</published>
    <updated>2015-01-02T00:00:00.000Z</updated>
    <summary>Art, Guitar - 2015</summary>
  </entry>
  <entry>
    <title>Porchlord - The One Where They Fought the Dragon</title>
    <id>https://daltonrowe.com/towtftd</id>
    <link rel="alternate" type="text/html" href="https://porchlord.bandcamp.com/album/the-one-where-they-fought-the-dragon" />
    <published>2014-01-09T00:00:00.000Z</published>
    <updated>2014-01-09T00:00:00.000Z</updated>
    <summary>Art, Guitar - 2014</summary>
  </entry>
</feed>
