<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[The Stormhold]]></title><description><![CDATA[Musings and miscellaneous mischief.]]></description><link>https://stormhold.net/</link><image><url>https://stormhold.net/favicon.png</url><title>The Stormhold</title><link>https://stormhold.net/</link></image><generator>Ghost 5.60</generator><lastBuildDate>Sun, 20 Sep 2026 06:55:41 GMT</lastBuildDate><atom:link href="https://stormhold.net/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[The Boss Fight I Didn’t Expect: When My AIO Cooler Died Mid-Silksong]]></title><description><![CDATA[My AIO cooler failed after four years, right as I was diving into Silksong. Here’s how it happened, why it mattered, and what comes next for my open-frame rig.]]></description><link>https://stormhold.net/the-boss-fight-i-didnt-expect-when-my-aio-cooler-died-mid-silksong/</link><guid isPermaLink="false">68c5bdb7c60f7d00019052d5</guid><category><![CDATA[gaming]]></category><category><![CDATA[PC Building]]></category><category><![CDATA[Reflections]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[Damien Storm]]></dc:creator><pubDate>Sat, 13 Sep 2025 20:23:59 GMT</pubDate><media:content url="https://stormhold.net/content/images/2025/09/Gemini_Generated_Image_dqlbpadqlbpadqlb.png" medium="image"/><content:encoded><![CDATA[<img src="https://stormhold.net/content/images/2025/09/Gemini_Generated_Image_dqlbpadqlbpadqlb.png" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong"><p>My PC wouldn&apos;t stay on for more than 30 seconds. Fans spun up, lights glowed, and then: dead. At first I suspected something simple, like a cable out of place. But it quickly became clear: the CPU was overheating fast, and the cooler wasn&apos;t doing its job.</p><p>The culprit was my <em>be quiet! Pure Loop 240 mm</em> AIO. After nearly four years of faithful service, it had finally given out. I tried everything I could: topping off the reservoir with distilled water, tilting and rocking the radiator to bleed trapped air, and even testing different motherboard headers in case it was a simple power issue. But the truth revealed itself in the quiet. The pump was lifeless: no vibration, no RPMs, no circulation.</p><p>And of course, this happened just as I was about to dive into Act II of <em>Hollow Knight: Silksong</em>. I had been waiting years for this game, enjoying every careful beat of exploration and challenge. The game had its rhythm, its flow, its atmosphere, all drawing me in, and then suddenly I was forced to step away, mid-adventure, because of a failing pump. The timing felt like a cruel joke. It was an unexpected boss fight, not in-game, but within the very machine I was playing on.</p><h2 id="from-first-open-frame-experiment-to-closing-a-chapter">From First Open-Frame Experiment to Closing a Chapter</h2><p>Looking back at the photos and videos of this build over the years, I&apos;m struck by how much the PC itself became a canvas. My first open-frame experiment wasn&apos;t just about airflow or thermals. It was about showing off the components, highlighting the radiator and glowing fans, and leaning into the aesthetics of exposed hardware. Each revision added personality, featuring new angles, cleaner cable runs, and custom RGB accents. I even replaced the <em>be quiet!</em> logo with a custom backlit cover to mirror the logo on the GPU. </p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x2665;&#xFE0F;</div><div class="kg-callout-text">That other critical part of the machine, a <em>PowerColor Red Devil Radeon RX 6600 XT</em>, was a surprise gift from my wife. It is a beautiful component on its own and intimately shaped the aesthetic, giving the build even more emotional weight.</div></div><p></p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2025/09/PXL_20220103_220546670.jpg" width="2000" height="2656" loading="lazy" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20220103_220546670.jpg 600w, https://stormhold.net/content/images/size/w1000/2025/09/PXL_20220103_220546670.jpg 1000w, https://stormhold.net/content/images/size/w1600/2025/09/PXL_20220103_220546670.jpg 1600w, https://stormhold.net/content/images/size/w2400/2025/09/PXL_20220103_220546670.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2025/09/PXL_20220103_220700904.jpg" width="2000" height="2656" loading="lazy" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20220103_220700904.jpg 600w, https://stormhold.net/content/images/size/w1000/2025/09/PXL_20220103_220700904.jpg 1000w, https://stormhold.net/content/images/size/w1600/2025/09/PXL_20220103_220700904.jpg 1600w, https://stormhold.net/content/images/size/w2400/2025/09/PXL_20220103_220700904.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2025/09/PXL_20220103_220644343.TS-ezgif.com-video-to-webp-converter.webp" width="800" height="1422" loading="lazy" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20220103_220644343.TS-ezgif.com-video-to-webp-converter.webp 600w, https://stormhold.net/content/images/2025/09/PXL_20220103_220644343.TS-ezgif.com-video-to-webp-converter.webp 800w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>The first iteration of my open-frame build; cooler placement not ideal, but the vision starting to take shape.</figcaption></figure><p>The AIO cooler sat at the center of all that. It gave the build a certain balance; the sleek radiator, the soft glow of the fans, the idea that water was quietly moving heat away while the rest of the system hummed along. It felt like the heart of the machine and leaned into the <em>Matrix</em> aesthetic I love so dearly.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2025/09/PXL_20220126_235450581.jpg" width="2000" height="2656" loading="lazy" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20220126_235450581.jpg 600w, https://stormhold.net/content/images/size/w1000/2025/09/PXL_20220126_235450581.jpg 1000w, https://stormhold.net/content/images/size/w1600/2025/09/PXL_20220126_235450581.jpg 1600w, https://stormhold.net/content/images/size/w2400/2025/09/PXL_20220126_235450581.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2025/09/PXL_20241008_172241408.jpg" width="2000" height="2656" loading="lazy" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20241008_172241408.jpg 600w, https://stormhold.net/content/images/size/w1000/2025/09/PXL_20241008_172241408.jpg 1000w, https://stormhold.net/content/images/size/w1600/2025/09/PXL_20241008_172241408.jpg 1600w, https://stormhold.net/content/images/size/w2400/2025/09/PXL_20241008_172241408.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2025/09/PXL_20220424_010951550.TS-ezgif.com-video-to-webp-converter.webp" width="800" height="450" loading="lazy" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20220424_010951550.TS-ezgif.com-video-to-webp-converter.webp 600w, https://stormhold.net/content/images/2025/09/PXL_20220424_010951550.TS-ezgif.com-video-to-webp-converter.webp 800w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Cable management iterations, design tightening, and polishing until the aesthetic peak: open, glowing, and balanced.</figcaption></figure><p>But the story of this cooler, and why its failure carries weight, goes back much further. I&apos;ve been building PCs since I was a kid. What started as a love of video games became a fascination with the machines that ran them. Learning how to plan out a build, diagnose problems, and execute on technical details came naturally because I wanted to make those games run better. Over time, that tinkering turned into a set of skills: troubleshooting, patience, an eye for design, and the confidence to dive deeper when something broke.</p><p>Those early years of building for my gaming hobby put me in an environment where software was never far away. At first it was drivers, patches, or config files, but soon I wanted to understand what was going on under the hood. That curiosity is what pushed me from hardware into software, and ultimately onto the career path I&apos;m on today as a software engineer.</p><p>This particular system, with its Pure Loop AIO at the forefront, represented another milestone. I built it as a reward to myself after a significant promotion at <a href="https://stormhold.net/farewell-to-weaveup/">WeaveUp, the startup I helped create</a>. That shift was a big one: moving from DevOps into a Product Owner role. It was more than just a title change; it was recognition of the growth in my skills and the trust the team put in me. Building this PC was my way of marking the moment.</p><figure class="kg-card kg-video-card kg-card-hascaption"><div class="kg-video-container"><video src="https://stormhold.net/content/media/2025/09/PXL_20241004_232107209.TS.mp4" poster="https://img.spacergif.org/v1/1080x1920/0a/spacer.png" width="1080" height="1920" playsinline preload="metadata" style="background: transparent url(&apos;https://stormhold.net/content/images/2025/09/media-thumbnail-ember266-1.jpg&apos;) 50% 50% / cover no-repeat;"></video><div class="kg-video-overlay"><button class="kg-video-large-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button></div><div class="kg-video-player-container"><div class="kg-video-player"><button class="kg-video-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-video-pause-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-video-current-time">0:00</span><div class="kg-video-time">/<span class="kg-video-duration"></span></div><input type="range" class="kg-video-seek-slider" max="100" value="0"><button class="kg-video-playback-rate">1&#xD7;</button><button class="kg-video-unmute-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-video-mute-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-video-volume-slider" max="100" value="100"></div></div></div><figcaption>Fast-forward to today: still beautiful, but hiding a pump on the verge of failure.</figcaption></figure><p>That&apos;s why its death hit harder than I expected. A pump failing after four years is ordinary, but the meaning I had attached to it wasn&apos;t. In a way, this cooler&apos;s end feels like closing a chapter; one that began decades ago, when I first learned to crack open a case for the sake of better frame rates, and has carried me all the way into a career of building software.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stormhold.net/content/images/2025/09/PXL_20250913_174149505.jpg" class="kg-image" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" loading="lazy" width="2000" height="2656" srcset="https://stormhold.net/content/images/size/w600/2025/09/PXL_20250913_174149505.jpg 600w, https://stormhold.net/content/images/size/w1000/2025/09/PXL_20250913_174149505.jpg 1000w, https://stormhold.net/content/images/size/w1600/2025/09/PXL_20250913_174149505.jpg 1600w, https://stormhold.net/content/images/size/w2400/2025/09/PXL_20250913_174149505.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption>Removing the AIO. The build feels exposed, quieter, almost skeletal.</figcaption></figure><h2 id="trading-looks-for-silence">Trading Looks for Silence</h2><p>So what comes next, when the centerpiece of the build is gone? I&apos;m replacing the AIO with a low-profile air cooler, which fundamentally changes the build. The open-frame rig had always been about looks: the long radiator, the subtle glow of the RGBs under the custom log, the green accents balanced against the rest of the components. With the cooler gone, that centerpiece is missing. The visual aesthetic that defined the build for years has shifted into something quieter, almost skeletal.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stormhold.net/content/images/2025/09/image-1.png" class="kg-image" alt="The Boss Fight I Didn&#x2019;t Expect: When My AIO Cooler Died Mid-Silksong" loading="lazy" width="1024" height="768" srcset="https://stormhold.net/content/images/size/w600/2025/09/image-1.png 600w, https://stormhold.net/content/images/size/w1000/2025/09/image-1.png 1000w, https://stormhold.net/content/images/2025/09/image-1.png 1024w" sizes="(min-width: 720px) 720px"><figcaption>Arriving tomorrow: <em>Noctua NH-L9x65 chromax.Black</em></figcaption></figure><p>But silence has its own beauty. For all the Pure Loop&apos;s strengths, its weakness was the pump whine. The fans were inaudible at idle, but the pump was always there, a constant, high-pitched reminder that liquid was being pushed through narrow tubes. It didn&apos;t matter how well the PC ran; that sound cut through the silence of the room.</p><p>Air cooling changes the equation. The low-profile cooler I&apos;ve chosen is anything but flashy. When the fans are off, the system will be <em>actually</em> quiet: no whine, no hum, no reminder that something mechanical is running just out of sight. I may lose the visual flair of a glowing radiator suspended in open air, but I gain a different kind of aesthetic: the calm of silence.</p><p>It feels like a shift in priorities. Where once the build was about <em>showing off</em>, now it&apos;s about <em>being present</em>. Function redefining form.</p><h2 id="resilience-in-building">Resilience in Building</h2><p>A pump failing after four years isn&apos;t surprising. Components wear out, designs shift, and technology moves on. But each build I&apos;ve done has taught me the same lesson: what matters isn&apos;t how perfect the system is on day one, it&apos;s how you adapt when things inevitably change.</p><p>This AIO&apos;s death came at the wrong time, right in the middle of a game I&apos;d been waiting years to play. But that interruption is temporary. The bigger picture is what it represents: the end of one chapter of building, and the start of another.</p><p>I&apos;ve been putting PCs together since I was a kid. My first build was completely solo with mail-order parts using a guide from the print edition of PC Gamer. I was driven at first by the desire to play games better, later by the curiosity to understand the machines themselves. That path led me from swapping GPUs and perfecting cable management to writing software and designing systems. Each broken part, each unexpected shutdown, each fix along the way has been another step in learning resilience, both in the hardware and in myself.</p><p>Now that this build moves forward, it&apos;s a little quieter and less flashy, but still mine. The AIO cooler may be gone, but the machine, and the lessons it carried, remain. Another real-life boss fight completed! Now onto the next act, both in <em>Silksong</em> and in my build journey. </p><h2 id="addendum-how-this-post-came-together-with-ai">Addendum: How This Post Came Together with AI</h2><p>A quick note on how this piece came to life. Writing has never been my favorite part of the creative process &#x2014; I can do it when I need to, but it often feels like a chore. If I hadn&apos;t leaned on AI tools to help me process my thoughts and get words on the page, this post likely wouldn&apos;t exist. So in the spirit of transparency, and as someone who believes in sharing methods that might help others, here&apos;s how I worked with AI to create it:</p><h3 id="diagnosing-the-problem">Diagnosing the Problem</h3><p>When my PC started shutting down within 30 seconds of boot, I turned to <a href="https://chatgpt.com/share/68c61c74-04f8-8013-9dd5-8826cd658252?ref=stormhold.net">OpenAI&apos;s ChatGPT 5</a>. It helped me reason through the symptoms, guided me in refilling and bleeding the cooler, and ultimately confirmed that the pump had failed after nearly four years.</p><h3 id="writing-the-story">Writing the Story</h3><p>Once I decided this was worth writing about, I <a href="https://chatgpt.com/share/68c617f9-20ec-8013-832c-633b12999524?ref=stormhold.net">used ChatGPT 5</a> to brainstorm the structure, draft the narrative, and refine the voice so it blended technical details with personal reflection. The result is what you just read.</p><h3 id="creating-the-hero-image">Creating the Hero Image</h3><p>For the artwork at the top of the post, I <a href="https://g.co/gemini/share/70f516881937?ref=stormhold.net">turned to Google&apos;s Gemini 2.5 + Nano Banana</a>. I iterated on Matrix-inspired colors and a &quot;boss fight&quot; aesthetic, then requested a pass that blended some of Hollow Knight&apos;s atmosphere. That&apos;s how the feature image you see here was born. It&apos;s something I never could have made myself.</p><h3 id="documenting-the-process"><strong>Documenting the Process</strong></h3><p>And finally, this addendum itself was written <a href="https://chatgpt.com/share/68c61d52-5c20-8013-82fa-af560a611e66?ref=stormhold.net">with ChatGPT 5&apos;s help</a>, as I reflected on the process and what I wanted to share about it.</p><p>Why mention all this? Because I think it matters:</p><p>Transparency is essential &#x2014; if AI played a role, readers should know.</p><p>As an educator at heart, I aim to demonstrate that AI can be a tool to amplify creativity, rather than replace it.</p><p>For anyone inclined to say &quot;you could have written this yourself&quot;: yes, maybe. But I wouldn&apos;t have. Writing doesn&apos;t bring me joy. AI unlocked this story by giving me a partner in shaping it, while the image generation replaced a skill I don&apos;t have and wouldn&apos;t hire out. No human artist lost a commission here.</p><p>For me, AI was the difference between this post existing and not. And if sharing my approach helps someone else use these tools to tell their own stories, then that&apos;s a win worth noting.</p><p></p><h2></h2>]]></content:encoded></item><item><title><![CDATA[Helldivers 2 Controller Layout]]></title><description><![CDATA[Discover the intense controller layout for Helldivers 2 and learn how visualizing it can simplify mastering the game's functions. Explore the comprehensive gamepad guide with a detailed layout, thanks to PadCrafter. Don't miss out on this essential resource for Helldivers 2 enthusiasts!]]></description><link>https://stormhold.net/helldivers-2-controller-layout/</link><guid isPermaLink="false">6642f755588b0f0001b9536a</guid><dc:creator><![CDATA[Damien Storm]]></dc:creator><pubDate>Tue, 14 May 2024 01:00:00 GMT</pubDate><media:content url="https://stormhold.net/content/images/2024/05/helldivers2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://stormhold.net/content/images/2024/05/helldivers2.jpg" alt="Helldivers 2 Controller Layout"><p>I couldn&apos;t find this anywhere else on the internet, so here it is! The controller layout for <a href="https://store.steampowered.com/app/553850/HELLDIVERS_2/?ref=stormhold.net">Helldivers 2</a> is pretty intense. Visualizing it instead of mentally mapping it from the in-game button list can make it easier to learn all the different functions you need to spread democracy. </p><p>A big thank you to <a href="https://www.padcrafter.com/?ref=stormhold.net">PadCrafter</a> for creating such an awesome tool! It made creating these reference controller layouts a breeze. You can view the layout <a href="https://www.padcrafter.com/?templates=Helldivers+2+-+General%7CHelldivers+2+-+Combat%7CHelldivers+2+-+Communication&amp;col=%23D3D3D3%2C%233E4B50%2C%23FFFFFF&amp;leftStick=Movement%7C%7C&amp;rightStick=Look%7C%7CRadial+Menu+select&amp;bButton=Crouch+%28tap%29+%2F+Prone+%28long+press%29+%2F+Dive+%28double+tap%29&amp;aButton=Climb+%28long+hold%29+%2F+Place+marker+%28map+open%29%7CInteract+%28press%29%7CRequest+Reinforcement+%2F+Skip+Dialogue&amp;leftStickClick=Sprint&amp;backButton=Open+Map%7C%7COpen+Chat+%28long+press%29&amp;leftBumper=Open+Statagems+%28hold%29+%2F+Zoom+map+in+%28map+open%29&amp;rightBumper=Zoom+map+out+%28map+open%29%7C%7CMark+%28tap%29+%2F+Open+Comms+Wheel+%28long+press%29&amp;dpadUp=Up+%28stratagems%29+%2F+Move+map+up+%28map+open%29%7CQuick+Stim+%28press%29+%2F+Weapon+Wheel+Up&amp;dpadRight=Right+%28stratagems%29+%2F+Move+map+right+%28map+open%29%7CGrenade+%28press%29+%2F+Weapon+Wheel+Right&amp;dpadLeft=Left+%28stratagems%29+%2F+Move+map+left+%28map+open%29%7CWeapon+Wheel+Left%7CSpectate+Previous+%28press%29+%2F+Emote+%28long+press%29&amp;dpadDown=Down+%28stratagems%29+%2F+Move+map+down+%28map+open%29%7CUse+Backpack+Function+%28tap%29+%2F+Switch+Camera+Side+%28long+press%29+%2F+Weapon+Wheel+Down+%2F+Open+Drop+Wheel+%28long+press%29%7CSpectate+Next+%28press%29&amp;plat=%7C%7C0%7C0&amp;rightTrigger=%7CFire+%28hold%29%7C&amp;leftTrigger=%7CAim+%28hold%29%7C&amp;xButton=%7CReload+%28tap%29+%2F+Open+Weapon+Wheel+%28long+press%29%7C&amp;rightStickClick=%7CMelee+%2F+Switch+Aim+Mode%7C&amp;yButton=%7CChange+Equipment+%28short+press%29+%2F+Change+Equipment+%28long+press%29%7C&amp;ref=stormhold.net">right here</a>. </p><p>And many thanks to <a href="https://www.arrowheadgamestudios.com/?ref=stormhold.net">Arrowhead Game Studios</a> for making this phenomenal game!</p><figure class="kg-card kg-image-card kg-card-hascaption"><a href="https://www.padcrafter.com/?templates=Helldivers+2+-+General%7CHelldivers+2+-+Combat%7CHelldivers+2+-+Communication&amp;col=%23D3D3D3%2C%233E4B50%2C%23FFFFFF&amp;leftStick=Movement%7C%7C&amp;rightStick=Look%7C%7CRadial+Menu+select&amp;bButton=Crouch+%28tap%29+%2F+Prone+%28long+press%29+%2F+Dive+%28double+tap%29&amp;aButton=Climb+%28long+hold%29+%2F+Place+marker+%28map+open%29%7CInteract+%28press%29%7CRequest+Reinforcement+%2F+Skip+Dialogue&amp;leftStickClick=Sprint&amp;backButton=Open+Map%7C%7COpen+Chat+%28long+press%29&amp;leftBumper=Open+Statagems+%28hold%29+%2F+Zoom+map+in+%28map+open%29&amp;rightBumper=Zoom+map+out+%28map+open%29%7C%7CMark+%28tap%29+%2F+Open+Comms+Wheel+%28long+press%29&amp;dpadUp=Up+%28stratagems%29+%2F+Move+map+up+%28map+open%29%7CQuick+Stim+%28press%29+%2F+Weapon+Wheel+Up&amp;dpadRight=Right+%28stratagems%29+%2F+Move+map+right+%28map+open%29%7CGrenade+%28press%29+%2F+Weapon+Wheel+Right&amp;dpadLeft=Left+%28stratagems%29+%2F+Move+map+left+%28map+open%29%7CWeapon+Wheel+Left%7CSpectate+Previous+%28press%29+%2F+Emote+%28long+press%29&amp;dpadDown=Down+%28stratagems%29+%2F+Move+map+down+%28map+open%29%7CUse+Backpack+Function+%28tap%29+%2F+Switch+Camera+Side+%28long+press%29+%2F+Weapon+Wheel+Down+%2F+Open+Drop+Wheel+%28long+press%29%7CSpectate+Next+%28press%29&amp;plat=%7C%7C0%7C0&amp;rightTrigger=%7CFire+%28hold%29%7C&amp;leftTrigger=%7CAim+%28hold%29%7C&amp;xButton=%7CReload+%28tap%29+%2F+Open+Weapon+Wheel+%28long+press%29%7C&amp;rightStickClick=%7CMelee+%2F+Switch+Aim+Mode%7C&amp;yButton=%7CChange+Equipment+%28short+press%29+%2F+Change+Equipment+%28long+press%29%7C&amp;ref=stormhold.net"><img src="https://stormhold.net/content/images/2024/05/image.png" class="kg-image" alt="Helldivers 2 Controller Layout" loading="lazy" width="1486" height="646" srcset="https://stormhold.net/content/images/size/w600/2024/05/image.png 600w, https://stormhold.net/content/images/size/w1000/2024/05/image.png 1000w, https://stormhold.net/content/images/2024/05/image.png 1486w" sizes="(min-width: 720px) 720px"></a><figcaption>Helldivers 2 - General controls</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><a href="https://www.padcrafter.com/?templates=Helldivers+2+-+General%7CHelldivers+2+-+Combat%7CHelldivers+2+-+Communication&amp;col=%23D3D3D3%2C%233E4B50%2C%23FFFFFF&amp;leftStick=Movement%7C%7C&amp;rightStick=Look%7C%7CRadial+Menu+select&amp;bButton=Crouch+%28tap%29+%2F+Prone+%28long+press%29+%2F+Dive+%28double+tap%29&amp;aButton=Climb+%28long+hold%29+%2F+Place+marker+%28map+open%29%7CInteract+%28press%29%7CRequest+Reinforcement+%2F+Skip+Dialogue&amp;leftStickClick=Sprint&amp;backButton=Open+Map%7C%7COpen+Chat+%28long+press%29&amp;leftBumper=Open+Statagems+%28hold%29+%2F+Zoom+map+in+%28map+open%29&amp;rightBumper=Zoom+map+out+%28map+open%29%7C%7CMark+%28tap%29+%2F+Open+Comms+Wheel+%28long+press%29&amp;dpadUp=Up+%28stratagems%29+%2F+Move+map+up+%28map+open%29%7CQuick+Stim+%28press%29+%2F+Weapon+Wheel+Up&amp;dpadRight=Right+%28stratagems%29+%2F+Move+map+right+%28map+open%29%7CGrenade+%28press%29+%2F+Weapon+Wheel+Right&amp;dpadLeft=Left+%28stratagems%29+%2F+Move+map+left+%28map+open%29%7CWeapon+Wheel+Left%7CSpectate+Previous+%28press%29+%2F+Emote+%28long+press%29&amp;dpadDown=Down+%28stratagems%29+%2F+Move+map+down+%28map+open%29%7CUse+Backpack+Function+%28tap%29+%2F+Switch+Camera+Side+%28long+press%29+%2F+Weapon+Wheel+Down+%2F+Open+Drop+Wheel+%28long+press%29%7CSpectate+Next+%28press%29&amp;plat=%7C%7C0%7C0&amp;rightTrigger=%7CFire+%28hold%29%7C&amp;leftTrigger=%7CAim+%28hold%29%7C&amp;xButton=%7CReload+%28tap%29+%2F+Open+Weapon+Wheel+%28long+press%29%7C&amp;rightStickClick=%7CMelee+%2F+Switch+Aim+Mode%7C&amp;yButton=%7CChange+Equipment+%28short+press%29+%2F+Change+Equipment+%28long+press%29%7C&amp;ref=stormhold.net"><img src="https://stormhold.net/content/images/2024/05/image-1.png" class="kg-image" alt="Helldivers 2 Controller Layout" loading="lazy" width="1472" height="633" srcset="https://stormhold.net/content/images/size/w600/2024/05/image-1.png 600w, https://stormhold.net/content/images/size/w1000/2024/05/image-1.png 1000w, https://stormhold.net/content/images/2024/05/image-1.png 1472w" sizes="(min-width: 720px) 720px"></a><figcaption>Helldivers 2 - Combat controls</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><a href="https://www.padcrafter.com/?templates=Helldivers+2+-+General%7CHelldivers+2+-+Combat%7CHelldivers+2+-+Communication&amp;col=%23D3D3D3%2C%233E4B50%2C%23FFFFFF&amp;leftStick=Movement%7C%7C&amp;rightStick=Look%7C%7CRadial+Menu+select&amp;bButton=Crouch+%28tap%29+%2F+Prone+%28long+press%29+%2F+Dive+%28double+tap%29&amp;aButton=Climb+%28long+hold%29+%2F+Place+marker+%28map+open%29%7CInteract+%28press%29%7CRequest+Reinforcement+%2F+Skip+Dialogue&amp;leftStickClick=Sprint&amp;backButton=Open+Map%7C%7COpen+Chat+%28long+press%29&amp;leftBumper=Open+Statagems+%28hold%29+%2F+Zoom+map+in+%28map+open%29&amp;rightBumper=Zoom+map+out+%28map+open%29%7C%7CMark+%28tap%29+%2F+Open+Comms+Wheel+%28long+press%29&amp;dpadUp=Up+%28stratagems%29+%2F+Move+map+up+%28map+open%29%7CQuick+Stim+%28press%29+%2F+Weapon+Wheel+Up&amp;dpadRight=Right+%28stratagems%29+%2F+Move+map+right+%28map+open%29%7CGrenade+%28press%29+%2F+Weapon+Wheel+Right&amp;dpadLeft=Left+%28stratagems%29+%2F+Move+map+left+%28map+open%29%7CWeapon+Wheel+Left%7CSpectate+Previous+%28press%29+%2F+Emote+%28long+press%29&amp;dpadDown=Down+%28stratagems%29+%2F+Move+map+down+%28map+open%29%7CUse+Backpack+Function+%28tap%29+%2F+Switch+Camera+Side+%28long+press%29+%2F+Weapon+Wheel+Down+%2F+Open+Drop+Wheel+%28long+press%29%7CSpectate+Next+%28press%29&amp;plat=%7C%7C0%7C0&amp;rightTrigger=%7CFire+%28hold%29%7C&amp;leftTrigger=%7CAim+%28hold%29%7C&amp;xButton=%7CReload+%28tap%29+%2F+Open+Weapon+Wheel+%28long+press%29%7C&amp;rightStickClick=%7CMelee+%2F+Switch+Aim+Mode%7C&amp;yButton=%7CChange+Equipment+%28short+press%29+%2F+Change+Equipment+%28long+press%29%7C&amp;ref=stormhold.net"><img src="https://stormhold.net/content/images/2024/05/image-2.png" class="kg-image" alt="Helldivers 2 Controller Layout" loading="lazy" width="1532" height="664" srcset="https://stormhold.net/content/images/size/w600/2024/05/image-2.png 600w, https://stormhold.net/content/images/size/w1000/2024/05/image-2.png 1000w, https://stormhold.net/content/images/2024/05/image-2.png 1532w" sizes="(min-width: 720px) 720px"></a><figcaption>Helldivers 2 - Communication controls</figcaption></figure><p>Also for reference, here are screenshots of the in-game controller keybind menus:</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-06.png" width="906" height="1002" loading="lazy" alt="Helldivers 2 Controller Layout" srcset="https://stormhold.net/content/images/size/w600/2024/05/Helldivers_2_gamepad_controls-06.png 600w, https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-06.png 906w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-05.png" width="920" height="1010" loading="lazy" alt="Helldivers 2 Controller Layout" srcset="https://stormhold.net/content/images/size/w600/2024/05/Helldivers_2_gamepad_controls-05.png 600w, https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-05.png 920w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-04.png" width="889" height="989" loading="lazy" alt="Helldivers 2 Controller Layout" srcset="https://stormhold.net/content/images/size/w600/2024/05/Helldivers_2_gamepad_controls-04.png 600w, https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-04.png 889w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-03.png" width="924" height="995" loading="lazy" alt="Helldivers 2 Controller Layout" srcset="https://stormhold.net/content/images/size/w600/2024/05/Helldivers_2_gamepad_controls-03.png 600w, https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-03.png 924w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-02.png" width="918" height="995" loading="lazy" alt="Helldivers 2 Controller Layout" srcset="https://stormhold.net/content/images/size/w600/2024/05/Helldivers_2_gamepad_controls-02.png 600w, https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-02.png 918w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-01.png" width="918" height="993" loading="lazy" alt="Helldivers 2 Controller Layout" srcset="https://stormhold.net/content/images/size/w600/2024/05/Helldivers_2_gamepad_controls-01.png 600w, https://stormhold.net/content/images/2024/05/Helldivers_2_gamepad_controls-01.png 918w" sizes="(min-width: 720px) 720px"></div></div></div></figure>]]></content:encoded></item><item><title><![CDATA[The Dracula Theme: Visual Reference and CSS Variables for Web Design]]></title><description><![CDATA[<p>Since I discovered the Dracula theme, it&apos;s been my go-to color scheme for any app or new project. I use it everywhere: my terminal (<a href="https://draculatheme.com/alacritty?ref=stormhold.net">Alacritty</a>), my editor (<a href="https://draculatheme.com/visual-studio-code?ref=stormhold.net">VS Code)</a>, my <em><em>other</em></em> editor (<a href="https://draculatheme.com/micro?ref=stormhold.net">Micro</a>), my chat (<a href="https://draculatheme.com/slack?ref=stormhold.net">Slack</a>), my browser (<a href="https://draculatheme.com/chrome?ref=stormhold.net">Chrome</a>), my notes (<a href="https://draculatheme.com/obsidian?ref=stormhold.net">Obsidian</a>), etc.</p><p>I also use it as</p>]]></description><link>https://stormhold.net/the-dracula-theme-visual-reference-and-css-variables-for-web-design/</link><guid isPermaLink="false">64f4b8f5e35f970001907cc9</guid><dc:creator><![CDATA[Damien Storm]]></dc:creator><pubDate>Mon, 01 May 2023 16:59:00 GMT</pubDate><media:content url="https://stormhold.net/content/images/2023/08/dracula_theme-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://stormhold.net/content/images/2023/08/dracula_theme-2.png" alt="The Dracula Theme: Visual Reference and CSS Variables for Web Design"><p>Since I discovered the Dracula theme, it&apos;s been my go-to color scheme for any app or new project. I use it everywhere: my terminal (<a href="https://draculatheme.com/alacritty?ref=stormhold.net">Alacritty</a>), my editor (<a href="https://draculatheme.com/visual-studio-code?ref=stormhold.net">VS Code)</a>, my <em><em>other</em></em> editor (<a href="https://draculatheme.com/micro?ref=stormhold.net">Micro</a>), my chat (<a href="https://draculatheme.com/slack?ref=stormhold.net">Slack</a>), my browser (<a href="https://draculatheme.com/chrome?ref=stormhold.net">Chrome</a>), my notes (<a href="https://draculatheme.com/obsidian?ref=stormhold.net">Obsidian</a>), etc.</p><p>I also use it as the color scheme whenever I begin a new project. It gives the project a great look from the start and is one less decision I must make. The Dracula <a href="https://draculatheme.com/?ref=stormhold.net">website</a> and their <a href="https://github.com/dracula?ref=stormhold.net">GitHub repo</a> are both awesome and include a ton of helpful information, but they don&apos;t have any simple references for the theme&apos;s colors. I always have to dig up the color codes whenever I want to plug them into a simple starter web page.</p><p>Hence this blog post and <a href="https://dracula-colors.stormhold.net/?ref=stormhold.net">https://dracula-colors.stormhold.net</a>. I created this webpage to serve as an easy-to-use visual and code reference for the Dracula theme. The webpage includes the main colors of the Dracula theme and the extended colors that have variations, such as lighter and darker shades and accent colors. You can view the code for the page on my <a href="https://github.com/ryderstorm/dracula_color_reference_site?ref=stormhold.net">GitHub</a>.</p><p>I designed the page to be easy to use and navigate. Each color is presented in a thumbnail format, with the name and RGB value displayed below. Clicking on a thumbnail will copy the RGB value to your clipboard, making it easy to paste into your own code.</p><p>The webpage also provides CSS variables for each color so you can easily integrate them into your own stylesheets. The CSS variables are presented in code blocks; clicking on the blocks will copy the entire code snippet to your clipboard.</p><p>I hope this webpage is a valuable resource for anyone looking to use the Dracula theme in their web projects. And don&apos;t forget to check out the <a href="https://draculatheme.com/about?ref=stormhold.net">origins of the theme</a> - it&apos;s a great story.</p><p>Thanks for reading!</p>]]></content:encoded></item><item><title><![CDATA[Creating Better Git Commit Messages with ChatGPT and Ruby: A Practical Solution]]></title><description><![CDATA[<p>Have you ever stared at the Git commit message prompt, struggling to create the perfect description of your changes? I certainly have. Writing Git commit messages can be tedious and time-consuming, but it is essential for maintaining a clear and organized codebase. A well-crafted commit message can make it easier</p>]]></description><link>https://stormhold.net/creating-better-git-commit-messages-with-chatgpt-and-ruby-a-practical-solution/</link><guid isPermaLink="false">64f4b8f5e35f970001907cca</guid><dc:creator><![CDATA[Damien Storm]]></dc:creator><pubDate>Sun, 23 Apr 2023 17:16:00 GMT</pubDate><media:content url="https://stormhold.net/content/images/2023/08/Selection_014.png" medium="image"/><content:encoded><![CDATA[<img src="https://stormhold.net/content/images/2023/08/Selection_014.png" alt="Creating Better Git Commit Messages with ChatGPT and Ruby: A Practical Solution"><p>Have you ever stared at the Git commit message prompt, struggling to create the perfect description of your changes? I certainly have. Writing Git commit messages can be tedious and time-consuming, but it is essential for maintaining a clear and organized codebase. A well-crafted commit message can make it easier for your team to understand your changes and track down bugs.</p><p>In this blog post, I&apos;ll share the Ruby script I came up with to make this process easier by using <a href="https://openai.com/blog/chatgpt?ref=stormhold.net">ChatGPT</a> to automatically generate Git commit messages.</p><div class="kg-card kg-callout-card kg-callout-card-yellow"><div class="kg-callout-emoji">&#x26A0;&#xFE0F;</div><div class="kg-callout-text">Before we dive into the script, I want to emphasize the importance of using this tool appropriately. The script sends your staged changes to the <a href="https://platform.openai.com/?ref=stormhold.net">OpenAI API</a>, meaning your code will be sent to OpenAI&apos;s servers. Therefore, confirming that the codebase you are working on is appropriate to upload to the ChatGPT servers is crucial. Please review <a href="https://openai.com/policies/terms-of-use?ref=stormhold.net">OpenAI&apos;s Terms of Use</a> and the policies of the codebase you are working with to ensure you are fully compliant. Using this on personal scripts you plan to open source is one thing; using it on your employer&apos;s proprietary codebase is quite another.</div></div><p>Now, let&apos;s explore the script. The script requires Ruby 2.6 or higher, Bundler, and <code>git</code>. It also requires an OpenAI API key, which you can obtain by signing up for an OpenAI account. Once you have your API key, set it in the <code>OPENAI_API_KEY</code> environment variable.</p><p>The script uses the <a href="https://github.com/piotrmurach/tty-prompt?ref=stormhold.net">TTY-Prompt gem</a> to display prompts in the console and the <a href="https://github.com/janlelis/clipboard?ref=stormhold.net">Clipboard gem</a> to interact with the clipboard. It also uses the <a href="https://github.com/fazibear/colorize?ref=stormhold.net">Colorize gem</a> to add colors to the console output and the <a href="https://github.com/alexrudall/ruby-openai?ref=stormhold.net">Ruby-OpenAI gem</a> to access the OpenAI API. The use of <code>bundler/inline</code> allows the script to be run on its own without having to install the gems separately.</p><pre><code class="language-ruby">require &apos;bundler/inline&apos;

gemfile do
  source &apos;https://rubygems.org&apos;
  gem &apos;clipboard&apos;, require: true # A gem for interacting with the clipboard
  gem &apos;colorize&apos;, require: true # A gem for adding colors to the console output
  gem &apos;ruby-openai&apos;, require: false # A gem for accessing the OpenAI API
  gem &apos;pry&apos;, require: true # A gem for debugging
  gem &apos;tty-prompt&apos;, require: true # A gem for displaying prompts in the console
end

require &apos;json&apos;
require &apos;openai&apos;
require &apos;ostruct&apos;
require &apos;time&apos;

prompt = TTY::Prompt.new

OPENAI_API_KEY = ENV[&apos;OPENAI_API_KEY&apos;]
if OPENAI_API_KEY.nil?
  puts &apos;Please set OPENAI_API_KEY environment variable&apos;.red
  exit 1
end

OpenAI.configure do |config|
  config.access_token = OPENAI_API_KEY
end</code></pre><p>The script starts by checking if changes have been staged; it will exit with an error message if nothing has been staged. Next, the script sends the changes and a prompt to the ChatGPT API to generate a commit message based on the changes. The prompt includes guidelines for the commit message, such as using the past tense, including a subject line and a body, and wrapping lines at 72 characters.</p><p>It also times how long it takes for OpenAI to respond. Everybody likes metrics, right?</p><pre><code class="language-ruby"># Check if changes have been staged
staged_content = `git --no-pager diff --staged --unified=1`
if staged_content.empty?
  puts &apos;No changes have been staged. Please stage changes before running this script.&apos;.red
  exit 1
end

# Start timer
start_time = Time.now

# Initialize OpenAI API client
puts &quot;\n--------------------------------------------------------------------------------&quot;.white
print &apos;Initializing OpenAI API client...&apos;.white
client = OpenAI::Client.new
print &apos;&#x2713;&apos;.green

# Form the prompt for ChatGPT
question = &lt;&lt;~QUESTION
  I need you to create a commit message for me based on these guidelines:

  - Use the past tense for the commit message.
  - Include a subject line and a body with a list of more details.
  - The subject line should be followed by a blank line
  - The subject line should be a single line that is 50 characters or less.
  - If the changes only include 1 file, then the subject line should include the file name.
  - The body should use bullets if appropriate.
  - The lines in the body should wrap at 72 characters
  - Add a blank line followed by &quot;Commit message created with help from ChatGPT.&quot; to the end of the body
  - Don&apos;t output anything except the commit message contents so I can easily copy and paste it.

  Here are the differences for the commit:
  ```#{staged_content}```
QUESTION

# Send request to OpenAI API
print &quot;\nSubmitting request...&quot;.white
response = client.chat(
  parameters: {
    # The name of the OpenAI model to use
    model: &apos;gpt-3.5-turbo&apos;,
    # The prompt to send to the model
    messages: [{ role: &apos;user&apos;, content: question }],
    # Controls the randomness of the response.
    # Lower values will result in more predictable responses.
    # Range: [0, 1]
    temperature: 0.25
  }
)

# Check for errors in the response
if response[&apos;error&apos;]
  print &quot;&#x2717;\n&quot;.red
  puts &quot;OpenAI API Error: #{response[&apos;error&apos;]}&quot;.red
  exit 1
end
print &quot;&#x2713;\n&quot;.green</code></pre><div class="kg-card kg-callout-card kg-callout-card-yellow"><div class="kg-callout-emoji">&#x2757;</div><div class="kg-callout-text">Note the error handling logic here. The only error I&apos;ve encountered so far has been when I submitted a larger diff. According to the API docs, the current limit for the <code>gpt-3.5-turbo-0301</code> model is 4096 tokens.</div></div><p>Once ChatGPT generates the commit message, the script copies the message to the clipboard and prompts the user on how to continue: either submit the commit with the generated message, edit the message before submitting, or exit without committing. The script handles the user&apos;s input and proceeds accordingly.</p><pre><code class="language-ruby"># Extract the generated commit message from the response
message = response[&apos;choices&apos;][0][&apos;message&apos;][&apos;content&apos;]
Clipboard.copy(message) # Copy the generated commit message to the clipboard

# End timer and display summary
end_time = Time.now
elapsed_time = end_time - start_time
time_message = &quot;\nTime to get message from ChatGPT: #{elapsed_time.round(2)} seconds&quot;
puts time_message.yellow
puts &quot;\nThe commit message has been copied to your clipboard and is displayed below&quot;.magenta
puts &quot;\nCommit message generated by ChatGPT:\n&quot;.white
puts message.cyan
puts &quot;\n--------------------------------------------------------------------------------&quot;.white

begin
  # Prompt the user for how to proceed
  user_input = prompt.select(&quot;\nWhat would you like to do?&quot;) do |menu|
    menu.enum &apos;.&apos;

    menu.choice &apos;Submit commit with this message&apos;, 1
    menu.choice &apos;Edit message before committing&apos;, 2
    menu.choice &apos;Exit without committing&apos;, 3
  end
rescue SystemExit, Interrupt
  # Gracefully handle exceptions like Ctrl-C or Ctrl-D
  puts &quot;\nExiting without committing...&quot;.yellow
  exit 1
end

# Escape double quotes in the commit message
escaped_message = message.gsub(&apos;&quot;&apos;, &apos;\&quot;&apos;)

# Process the user&apos;s input
case user_input
when 1
  puts &quot;\nSubmitting commit...&quot;.white
  system(&quot;git commit -m \&quot;#{escaped_message}\&quot;&quot;)
when 2
  puts &quot;\nOpening editor...&quot;.white
  system(&quot;git commit -e -m \&quot;#{escaped_message}\&quot;&quot;)
when 3
  puts &quot;\nExiting without committing...&quot;.yellow
  exit 1
end
</code></pre><p>Here&apos;s an example of the script in use:</p><!--kg-card-begin: html--><script async id="asciicast-579883" src="https://asciinema.org/a/579883.js"></script><!--kg-card-end: html--><p>And here&apos;s a link to the asciinema recording: <a href="https://asciinema.org/a/579883?ref=stormhold.net">https://asciinema.org/a/579883</a></p><p>You can view the full script and my other helper scripts on my GitHub: <a href="https://github.com/ryderstorm/helper_scripts?ref=stormhold.net">https://github.com/ryderstorm/helper_scripts</a></p><div class="kg-card kg-callout-card kg-callout-card-green"><div class="kg-callout-emoji">&#x1F4B8;</div><div class="kg-callout-text">A note on the cost of using the API for ChatGPT with this script. At the time of writing, the pricing for the <code>gpt-3.5-turbo</code> model is &quot;$0.002 / 1K tokens&quot;. You can check out the pricing details on <a href="https://openai.com/pricing?ref=stormhold.net">OpenAI&apos;s website</a>.</div></div><hr><p>This Ruby script can save time and help you create better commit messages. By automating the process of generating commit messages, you can focus on writing code instead of crafting messages. However, it&apos;s critical to use this tool appropriately and ensure that the codebase you are working on is appropriate to upload to the ChatGPT servers.</p><p>Creating this script was an excellent opportunity for me to explore the practical usefulness of ChatGPT and similar AI technologies as they relate to a developer&apos;s workflow. The script has greatly benefited my development flow and improved my codebase, allowing me to quickly generate high-quality commit messages with just a few keystrokes. I hope it can do the same for you!</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">I pushed a small but significant update to the script on 2023/05/24: <a href="https://web.archive.org/web/20230603165557/https://github.com/ryderstorm/helper_scripts/pull/1">https://github.com/ryderstorm/helper_scripts/pull/1</a></div></div>]]></content:encoded></item><item><title><![CDATA[Farewell to WeaveUp]]></title><description><![CDATA[Last week I parted ways with WeaveUp, the software company I helped build over the past 7 years. Joann acquired the company in March of this year]]></description><link>https://stormhold.net/farewell-to-weaveup/</link><guid isPermaLink="false">64f4b8f5e35f970001907cbf</guid><dc:creator><![CDATA[Damien Storm]]></dc:creator><pubDate>Wed, 28 Dec 2022 18:44:31 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1586810165586-18eb8d82e51f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDM0fHxncmF0aXR1ZGV8ZW58MHx8fHwxNjcyMTYxMjk3&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1586810165586-18eb8d82e51f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDM0fHxncmF0aXR1ZGV8ZW58MHx8fHwxNjcyMTYxMjk3&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Farewell to WeaveUp"><p>Last week I parted ways with <a href="https://weaveup.com/?ref=stormhold.net">WeaveUp</a>, the software company I helped build over the past seven years. Joann <a href="https://investors.joann.com/news-releases/news-release-details/joann-acquires-industry-leading-digital-printing-textile?ref=stormhold.net">acquired the company</a> in March of this year and, due to changing priorities at Joann, the team at WeaveUp was recently downsized.</p><p>I was the fifth person to join the company, hired as the sole QA on the development team. My job was to build an automated regression suite in Ruby to test the main web application. It was a dream position for me. I had total freedom to build the suite, run tests for the application, and solve problems the way I wanted.</p><p>That autonomy continued throughout my career at WeaveUp. I learned what it takes to build a software company from every angle: QA, application development, DevOps and infrastructure, client relations, project management, product design, hiring, and much more. I worked on every codebase in our stack, helped manage our transition to containers and Kubernetes, and came up with UX solutions for some of our most complex user flows. There were opportunities for me to contribute and make an impact at every level of the business.</p><p>WeaveUp not only allowed me to grow my skills and develop my career in tech but also to work with and build an incredible team. I was directly involved in hiring every new member of the team over the past few years. That team and the culture we created are a point of pride for me, especially regarding our accomplishments over the past year. We were running fast, making great things, and having fun doing it.</p><p>My time at WeaveUp was the best job I&#x2019;ve ever had, no question about it. I went to work every day excited to build awesome things with awesome people, and we did just that. A special thanks to our president, <a href="https://www.linkedin.com/in/flint-davis-57085035/?ref=stormhold.net">Flint Davis</a>: you strived to provide an excellent workplace for me and everyone on the team. Thanks for the chance to grow and succeed in my journey through the tech industry.</p><p>This kind of transition always comes with challenges. Thanks to everyone for all the love and support, especially my incredible wife, Victoria. I couldn&apos;t do any of this without you!</p><h2 id="whats-next"><strong>What&apos;s Next?</strong></h2><p>It is nice to have a chance to slow down for a few weeks. I&apos;m fortunate to have this time to recharge before diving into the search for what&apos;s next. I can focus on being with friends and family over the holidays, not to mention catching up on my Steam backlog. Maybe even start a blog?</p><p>I&apos;m not sure what direction I&apos;ll take for the next step in my tech career, but all the options in front of me are exciting. I&apos;m looking forward to exploring them after the new year. If you&apos;ve got any leads or recommendations, hit me up on <a href="https://linkedin.com/in/damienstorm?ref=stormhold.net">LinkedIn</a>.</p>]]></content:encoded></item></channel></rss>