<?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"><channel><title><![CDATA[Ben Climer]]></title><description><![CDATA[Notes, tools, and stories from my path in IT and automation—built to share lessons, solve problems, and maybe save someone a few steps along the way.]]></description><link>https://benclimer.com</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 11:06:19 GMT</lastBuildDate><atom:link href="https://benclimer.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Troubleshooting an Ender 5 After My Move: A Step-by-Step Journey]]></title><description><![CDATA[Should I have just bought a Bambu….probably, but where’s the fun in that?
Bringing an Ender 5 back to life after years in storage is rarely as simple as powering it on. When I pulled mine out of the basement, I ran into a cascade of issues that range...]]></description><link>https://benclimer.com/troubleshooting-an-ender-5-after-my-move-a-step-by-step-journey</link><guid isPermaLink="true">https://benclimer.com/troubleshooting-an-ender-5-after-my-move-a-step-by-step-journey</guid><category><![CDATA[ender-5]]></category><category><![CDATA[klipper]]></category><category><![CDATA[3D printing]]></category><category><![CDATA[troubleshooting]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Sat, 06 Sep 2025 18:30:18 GMT</pubDate><content:encoded><![CDATA[<p>Should I have just bought a Bambu….probably, but where’s the fun in that?</p>
<p>Bringing an Ender 5 back to life after years in storage is rarely as simple as powering it on. When I pulled mine out of the basement, I ran into a cascade of issues that ranged from power cuts to firmware headaches to calibration quirks. This guide walks through the problems I encountered and how I solved them, so if you are reviving an older machine, you know what to expect.</p>
<p>If you want to skip ahead and try a known working setup for a stock Ender 5(2020), my <a target="_blank" href="https://github.com/shiftnerd/Ender5-SKRMini-e3-v2-Klipper">Klipper config for an Ender 5 with an SKR Mini E3 V2 board</a> is available on GitHub.</p>
<hr />
<h2 id="heading-step-1-power-cuts-mid-print">Step 1: Power Cuts Mid-Print</h2>
<p><strong>Symptom:</strong> The printer would power on and start a job, but shut off suddenly.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li>I adjusted the power supply voltage after testing and saw that it was about .3 volts under voltage.</li>
</ul>
<p><strong>Solution:</strong><br />The issue was a loose power cable going into the control board. Once reseated and tightened, the printer stopped cutting out and held steady through prints.</p>
<hr />
<h2 id="heading-step-2-firmware-flashing-and-the-switch-to-klipper">Step 2: Firmware Flashing and the Switch to Klipper</h2>
<p><strong>Reason for Switching:</strong><br />My old Marlin configuration did not have proper values for the Ender 5, and all the current community suggestions I could find were Klipper-based. Rather than endlessly reflashing Marlin firmware with small tweaks, I chose to move fully to Klipper for flexibility and easier config changes.</p>
<p><strong>Symptom:</strong> Flashing Klipper onto the SKR Mini E3 V2 was not straightforward. The printer would either refuse to home, lock up, or throw errors. To make it more puzzling, the screen stayed completely blank until the correct firmware was finally loaded, which made it feel like nothing was working.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li><p>Built and flashed firmware multiple times with different settings.</p>
</li>
<li><p>Adjusted stepper driver definitions and microstep values.</p>
</li>
<li><p>Rebuilt configs line by line until they matched my hardware.</p>
</li>
</ul>
<p><strong>Solution:</strong><br />After several failed flashes and config rebuilds, I finally landed on a stable build that behaved the way it should. Once Klipper booted cleanly, the blank screen behavior made sense: it was simply waiting for proper firmware to be loaded. If you are struggling with this step, my <a target="_blank" href="https://github.com/shiftnerd/Ender5-SKRMini-e3-v2-Klipper">working config</a> is a good starting point.</p>
<hr />
<h2 id="heading-step-3-z-axis-not-climbing-correctly">Step 3: Z-Axis Not Climbing Correctly</h2>
<p><strong>Symptom:</strong> Layers were compressing, as if the printer was moving up less than it should. A 0.2 mm layer height behaved more like 0.1 mm.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li><p>Verified microstep and stepper settings.</p>
</li>
<li><p>Compared actual travel to expected travel with manual moves.</p>
</li>
</ul>
<p><strong>Solution:</strong><br />The rotation distance for the Z-axis was off in the config. Once corrected, the printer moved the proper amount per layer and printed stacked cleanly.</p>
<hr />
<h2 id="heading-step-4-bltouch-deployment-errors">Step 4: BLTouch Deployment Errors</h2>
<p><strong>Symptom:</strong> The BLTouch probe would fail to deploy on the second row of bed mesh probing. Sometimes the bed was so close that the pin could not fully extend.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li><p>Adjusted probe offsets.</p>
</li>
<li><p>Changed mesh boundaries.</p>
</li>
<li><p>Ran multiple probe calibrations.</p>
</li>
</ul>
<p><strong>Solution:</strong><br />Carefully tuning offsets and bed mesh ranges stabilized probing. This prevented the “Move out of range” error and allowed consistent mesh leveling.</p>
<hr />
<h2 id="heading-step-5-stringy-extrusion">Step 5: Stringy Extrusion</h2>
<p><strong>Symptom:</strong> Prints showed excessive stringing and oozing, especially when print speed changed.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li><p>Adjusted retraction settings.</p>
</li>
<li><p>Tested filament path for blockages.</p>
</li>
</ul>
<p><strong>Solution:</strong><br />Fine-tuning <strong>pressure advance</strong> and <strong>smooth time</strong> reduced the stringing significantly. Extrusion became more consistent across different speeds.</p>
<hr />
<h2 id="heading-step-6-ringing-on-surfaces">Step 6: Ringing on Surfaces</h2>
<p><strong>Symptom:</strong> Test cubes showed ringing artifacts on vertical walls.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li><p>Tested different input shaper types (MZV and EI) and frequencies.</p>
</li>
<li><p>Printed calibration patterns to visually compare results.</p>
</li>
</ul>
<p><strong>Solution:</strong><br />The real breakthrough came from tightening loose frame bolts that had worked themselves free during storage. This reduced resonance dramatically. With the input shaper tuned afterwards, the ringing artifacts were minimized.</p>
<hr />
<h2 id="heading-step-7-acceleration-tradeoff">Step 7: Acceleration Tradeoff</h2>
<p><strong>Symptom:</strong> Even with the input shaper tuned, some faint ringing persisted.</p>
<p><strong>What I Tried:</strong></p>
<ul>
<li><p>Reviewed Klipper logs and configs.</p>
</li>
<li><p>Considered belt tension and pulley alignment.</p>
</li>
</ul>
<p><strong>Solution:</strong><br />I realized the <strong>max_accel</strong> value was still set at 3000 from before storage. Lowering it reduced ringing, although it meant slightly slower print times. The tradeoff was worth it for smoother walls.</p>
<hr />
<h2 id="heading-final-results">Final Results</h2>
<p>By the end of the process, the Ender 5 was running stable and producing clean prints again. The path to get there involved:</p>
<ul>
<li><p>Fixing power delivery by reseating a cable</p>
</li>
<li><p>Flashing and tuning Klipper firmware</p>
</li>
<li><p>Correcting Z-axis rotation distance</p>
</li>
<li><p>Stabilizing BLTouch probing</p>
</li>
<li><p>Tuning extrusion with pressure advance</p>
</li>
<li><p>Tightening the frame and applying the input shaper</p>
</li>
<li><p>Balancing acceleration for quality</p>
</li>
</ul>
<hr />
<h2 id="heading-key-lessons">Key Lessons</h2>
<ul>
<li><p>Storage can loosen bolts and connections, so check hardware first.</p>
</li>
<li><p>Moving to Klipper saved time versus reflashing Marlin repeatedly.</p>
</li>
<li><p>A blank screen at first can be normal when flashing firmware.</p>
</li>
<li><p>Do not underestimate mechanical issues. A loose bolt can look like a software problem.</p>
</li>
<li><p>Keep your config versioned and saved. Future you will thank present you. Luckily klipper does this by default.</p>
</li>
</ul>
<hr />
<p>Reviving this Ender 5 took longer than expected, but now it is better than ever. If you are working on a similar setup and stuck, my <a target="_blank" href="https://github.com/shiftnerd/Ender5-SKRMini-e3-v2-Klipper">Ender 5 SKR Mini E3 V2 Klipper config</a> may help get you moving faster.</p>
<h2 id="heading-quick-fix-reference">Quick Fix Reference</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Symptom</td><td>Likely Cause</td><td>Fix</td><td></td><td></td><td></td></tr>
</thead>
<tbody>
<tr>
<td>Printer shuts off mid-print</td><td>Loose power cable to the board</td><td>Reseat and tighten cable</td><td></td><td></td><td></td></tr>
<tr>
<td>The screen stays blank after flashing</td><td>Incorrect or missing firmware</td><td>Reflash; confirm proper Klipper build</td><td></td><td></td><td></td></tr>
<tr>
<td>Layers are squished or not stacking</td><td>Z-axis rotation distance is incorrect</td><td>Update rotation distance in config</td><td></td><td></td><td></td></tr>
<tr>
<td>BLTouch fails to deploy on mesh probing</td><td>Probe offset or bed too close</td><td>Adjust probe offsets and mesh ranges</td><td></td><td></td><td></td></tr>
<tr>
<td>Excessive stringing</td><td>Retraction or pressure advance is misconfigured</td><td>Tune <strong>pressure advance</strong> and <strong>smooth time</strong></td><td></td><td></td><td></td></tr>
<tr>
<td>Ringing/ghosting on vertical walls</td><td>Loose frame bolts or input shaper not tuned</td><td>Tighten bolts, run input shaper calibration</td><td></td><td></td><td></td></tr>
<tr>
<td>Residual faint ringing</td><td>Acceleration too high</td><td>Lower <strong>max_accel</strong> for smoother walls</td><td></td><td></td><td></td></tr>
</tbody>
</table>
</div>]]></content:encoded></item><item><title><![CDATA[Why We Started The Panda Award Show]]></title><description><![CDATA[The idea
This idea’s been sitting in the back of my mind for a while now. I’ve wanted to create something for the version of me who was just getting started in IT unsure of where the road might lead, full of questions, and searching for stories that ...]]></description><link>https://benclimer.com/why-we-started-the-panda-award-show</link><guid isPermaLink="true">https://benclimer.com/why-we-started-the-panda-award-show</guid><category><![CDATA[podcast]]></category><category><![CDATA[technology]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Wed, 25 Jun 2025 01:21:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750814484391/e3c7d9e3-5cad-40d4-a35e-0cc464f925c1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>The idea</strong></p>
<p>This idea’s been sitting in the back of my mind for a while now. I’ve wanted to create something for the version of me who was just getting started in IT unsure of where the road might lead, full of questions, and searching for stories that sounded like my own. I’ve always been curious about the journeys people take in this industry. What were the detours? What did they learn the hard way? What advice do they wish they had sooner?</p>
<p>That curiosity is the heartbeat of <em>The Panda Award Show</em>, a new podcast I’m hosting with my friend Abhi Saini. Abhi and I go way back. We worked together on Information Technology Disaster Resource Center (ITDRC) deployments, and when we reconnected at MSPGeekCon—Abhi now an MSP owner, it just felt right. We knew we had to build something together.  </p>
<p><strong>The name</strong></p>
<p>You're probably wondering about the name.</p>
<p>As we started tossing around ideas, we knew we wanted a mascot, and both of us liked the idea of a bear. But I had one bear in mind specifically.</p>
<p>Back when I was an intern at my first MSP, we had this tradition of passing around a stuffed panda bear each week. It would go to whoever best embodied the company’s values, including hard work, helpfulness, the kind of stuff you can’t always measure on paper. It was goofy, yeah, but it meant something. It was a symbol of appreciation, of recognition from your peers. That stuck with me.</p>
<p>So we decided to bring the panda back. On this show, we’ll be passing the panda to guests who represent the best of what this industry can be, people who’ve stayed curious, lifted others, and stayed true to their values through the ups and downs of tech careers.</p>
<p><em>The Panda Award Show</em> is a casual podcast about real people in IT. We talk about the paths taken, the lessons learned, and the things you’d go back and tell your younger self if you could. No polished success stories, just the kind of honest conversations that remind you you’re not alone on the journey.</p>
<p>If you're in tech—or just figuring out what comes next—I hope you’ll listen. You might just find the story you needed to hear.</p>
<p><strong>Where to find it:</strong><br />Watch for our first episode to drop on July 1st:</p>
<p><a target="_blank" href="https://pandaawardshow.com/">https://pandaawardshow.com/</a></p>
]]></content:encoded></item><item><title><![CDATA[About Ben]]></title><description><![CDATA[Ben Climer is an IT professional in the Kansas City area.
Hi, I'm Ben Climer. I’ve been taking things apart and figuring out how they work for as long as I can remember. I built my first computer at age eight, mostly out of necessity after breaking t...]]></description><link>https://benclimer.com/about-ben-climer</link><guid isPermaLink="true">https://benclimer.com/about-ben-climer</guid><category><![CDATA[Ben Climer]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Sun, 01 Jun 2025 05:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750813200619/c29c70b3-035d-4f33-95c3-7d7042d73926.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ben Climer is an IT professional in the Kansas City area.</p>
<p>Hi, I'm Ben Climer. I’ve been taking things apart and figuring out how they work for as long as I can remember. I built my first computer at age eight, mostly out of necessity after breaking the family one. By twelve, I was coding websites with streaming embedded music. As a teenager, I competed in national contests for web design and computer repair, and discovered early on that I enjoyed solving problems that others found frustrating.</p>
<p>After high school, I started working in IT, eventually spending over a decade in the MSP world. I held a mix of technical and leadership roles, often jumping between fixing urgent issues and planning long-term solutions. That experience shaped how I think about automation today. Automation started as something the MSP I was working for didn’t do, scripting, and turned in a career passion.</p>
<p>I now work at Rewst, where I help others build better workflows and automation. I focus on making tools that are reusable, easy to understand, and built to scale. I'm also involved in community training, internal process improvements, and building things like Schema Doctor to make technical work a little smoother for everyone.</p>
<p>Outside of work, I’m into cars, road trips, and co-hosting my podcast, Panda Award Show.  </p>
<p>I live in Kansas City, Kansas, and I still find joy in chasing down bugs that make no sense on paper.</p>
]]></content:encoded></item><item><title><![CDATA[Lessons, Wins, and Conversations from MSPGeekCon 2025]]></title><description><![CDATA[I had the chance to attend MSPGeekCon this year, and I’m incredibly grateful to the team for giving me that opportunity. What I expected to be a fairly quiet booth presence turned into something much more productive and energizing. Here’s a recap of ...]]></description><link>https://benclimer.com/lessons-wins-and-conversations-from-mspgeekcon-2025</link><guid isPermaLink="true">https://benclimer.com/lessons-wins-and-conversations-from-mspgeekcon-2025</guid><category><![CDATA[mspgeekcon]]></category><category><![CDATA[MSPGeek]]></category><category><![CDATA[automation]]></category><category><![CDATA[conferences]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Wed, 07 May 2025 05:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750813374552/17b4ca8d-83b7-4b87-afa8-b04eb01a9c73.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I had the chance to attend MSPGeekCon this year, and I’m incredibly grateful to the team for giving me that opportunity. What I expected to be a fairly quiet booth presence turned into something much more productive and energizing. Here’s a recap of the highlights, takeaways, and a few fun moments along the way.</p>
<h3 id="heading-crushing-the-demo-goal">Crushing the Demo Goal</h3>
<p>We went into the event with the idea that most attendees would already be Rewst customers or at least familiar with us. That turned out to be only partially true. Perhaps in part due to Eddie’s talk and Zentop's pre-day event, we had a great influx of interest from folks who hadn’t used Rewst yet or hadn’t even heard of us before.</p>
<h3 id="heading-quick-wins-and-real-time-problem-solving">Quick Wins and Real-Time Problem Solving</h3>
<p>One standout moment was hearing people talk about how Schema Doctor helped them at their job. While there, I even showed new users the tool and empowered them to integrate their CRM, which opened up more automation possibilities for them and their clients. That kind of hands-on help is one of my favorite parts of being at these events.</p>
<p>I also spent time with an existing partner. I destroyed them at Exploding Kittens on game night — although they got the last laugh during a chaotic round of Incoherent.</p>
<h3 id="heading-community-conversations-and-feedback">Community Conversations and Feedback</h3>
<p>A big chunk of my time was spent talking with other power users about their friction points in the platform. Many provided feedback about small features that could make a big difference in usability.</p>
<p>I also had some great conversations with n8n users curious about Rewst. I think there’s room for more than one automation tool in a stack and Rewst has some clear advantages for MSPs.</p>
<h3 id="heading-internal-collaboration-and-churn-reduction-ideas">Internal Collaboration and Churn Reduction Ideas</h3>
<p>The event wasn’t just outward-facing. I had some valuable conversations with Rewst members about ways to improve the client experience.</p>
<h3 id="heading-sessions-and-takeaways">Sessions and Takeaways</h3>
<p>Eddie’s session was solid, and I was especially impressed by the panel with Jason Slagle, Matt Lee, and Dustin Bolander. It gave me a fresh perspective on how to evolve solutions I had made in the past. I also caught a neurodiversity panel that stuck with me. One thing I plan to explore further is <a target="_blank" href="http://manualof.me">manualof.me</a><a target="_blank" href="https://www.manualof.me">, a site th</a>at helps indi<a target="_blank" href="https://www.manualof.me">viduals exp</a>lain how they work best. It’s something I might personally use and recommend to other team members.</p>
<p>It was a packed couple of days, and I came back with a lot of insights, a few new ideas, and some great conversations still rattling around in my head. I’ve always enjoyed hearing what others bring back from conferences, so I hope this recap offers some of that same value.</p>
<p>MSPGeekCon will be uploading their sessions and panels on their youtube channel.</p>
]]></content:encoded></item><item><title><![CDATA[Building Tenant ID Finder: Exploring Microsoft endpoints for fun]]></title><description><![CDATA[In my day-to-day work supporting MSPs and building automations, I often found myself solving the same kinds of problems over and over. Sometimes the fix is small, like a PowerShell script or a DNS record check. Other times, a missing bit of context s...]]></description><link>https://benclimer.com/building-tenant-id-finder-exploring-microsoft-endpoints-for-fun</link><guid isPermaLink="true">https://benclimer.com/building-tenant-id-finder-exploring-microsoft-endpoints-for-fun</guid><category><![CDATA[Microsoft365]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Wed, 02 Apr 2025 05:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750816364891/f9044955-003e-44f1-9da0-3eb969d87ed7.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my day-to-day work supporting MSPs and building automations, I often found myself solving the same kinds of problems over and over. Sometimes the fix is small, like a PowerShell script or a DNS record check. Other times, a missing bit of context slows everything down, like knowing which Microsoft 365 tenant a domain belongs to.  </p>
<p>That’s what sparked the idea behind <a target="_blank" href="http://tenantidfinder.com">tenantidfinder.com</a>.</p>
<p><a target="_blank" href="https://tenantidfinder.com">It started from</a> a personal need. I was working through <a target="_blank" href="https://tenantidfinder.com">a list of domains</a> and needed to find their associated Microsoft 365 tenant IDs. Not one or two, dozens. And doing it manually was quickly becoming a pain. I knew the information was publicly accessible with the right OpenID Connect call, but there wasn’t a quick, no-login tool to do it in bulk. So I built one.</p>
<h3 id="heading-the-problem">The Problem</h3>
<p>If you've worked at an MSP or supported clients with multiple brands, you're probably familiar with the mess that is tracking which domain belongs to which tenant. Sometimes there’s one tenant per brand, sometimes not. When a client asks you to verify something, or you’re building automation that needs a tenant ID, you're left hopping between portals, logging into each tenant, checking verified domains, and wasting a ton of time.</p>
<p>You can’t look up domains from a tenant ID (at least not easily or reliably), but thanks to OpenID Connect, you <em>can</em> look up the tenant ID from a domain. That tiny asymmetry is where this tool lives.</p>
<h3 id="heading-what-it-does">What It Does</h3>
<p><a target="_blank" href="http://tenantidfinder.com">tenantidfinder.com</a> takes in a list of domains, just type or paste them in, and gives you back:</p>
<ul>
<li><p>The tenant ID, pulled using an OpenID Connect <code>.well-known</code> discovery call.</p>
</li>
<li><p>MX, SPF, and DMARC DNS records, resolved using DNS over HTTPS.</p>
</li>
<li><p>Autodiscover CNAME records for Microsoft Exchange.</p>
</li>
<li><p>CSV export so you can save results or import them into another tool.</p>
</li>
</ul>
<p><a target="_blank" href="https://tenantidfinder.com">I</a>t’s designed to be dead simple. No login. No OAuth. Just paste and go.</p>
<p>This isn’t meant to replace complex domain tooling or security tools, but it fills a very specific gap: figuring out what tenant a domain belongs to and confirming it behaves like a typical Microsoft-hosted domain.</p>
<h3 id="heading-technical-notes">Technical Notes</h3>
<p>The two core pieces of functionality are:</p>
<ul>
<li><p><strong>OpenID Connect for tenant discovery</strong>. Specifically, I’m querying <a target="_blank" href="https://login.microsoftonline.com/{domain}/.well-known/openid-configuration"><code>https://login.microsoftonline.com/{domain}/.well-known/openid-configuration</code></a> and parsing the returned JSON for the <code>issuer</code> value. That’s where the tenant ID is embedded.</p>
</li>
<li><p><strong>DNS lookups via DNS over HTTPS</strong>. I’m using a public DoH endpoint (like Cloudflare or Google) to fetch DNS records. This means the lookups are consistent, fast, and don’t rely on browser or network-specific behavior.</p>
</li>
</ul>
<p>Everything is built into a static site. There’s no backend, no logging, no analytics—just client-side JavaScript. That keeps it fast and private. You could use it on an airplane Wi-Fi connection or a locked-down client network and it would still do its job.</p>
<h3 id="heading-why-i-shared-it">Why I Shared It</h3>
<p>My friend Joel once told me to keep dropping “MSP cheat codes” in the form of LinkedIn posts. I liked that term. It sums up the spirit of this kind of work: solving problems just enough to turn them into tools or shortcuts for others.</p>
<p>That’s really why I built and shared Tenant ID Finder. Not just to save myself time, but to put something useful in the hands of other techs who run into the same wall. I’ve seen people do this the hard way, and while it’s not <em>hard</em>, it’s tedious and repetitive. If this tool saves someone 20 minutes or prevents a wrong tenant ID in a PowerShell script, I’m calling it a win.</p>
]]></content:encoded></item><item><title><![CDATA[Building Schema Doctor: A Tool Born From Frustration]]></title><description><![CDATA[As someone who works with APIs and automation on a daily basis, I’ve spent more hours than I care to count wrangling OpenAPI schemas. Whether it’s vendors pushing half-baked specs, autogenerated documentation riddled with issues, or circular referenc...]]></description><link>https://benclimer.com/building-schema-doctor-a-tool-born-from-frustration</link><guid isPermaLink="true">https://benclimer.com/building-schema-doctor-a-tool-born-from-frustration</guid><category><![CDATA[schema]]></category><category><![CDATA[APIs]]></category><category><![CDATA[OpenApi]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Tue, 25 Mar 2025 05:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750815961136/a184a7d0-fc12-4d42-aec0-c345c9e1fdea.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As someone who works with APIs and automation on a daily basis, I’ve spent more hours than I care to count wrangling OpenAPI schemas. Whether it’s vendors pushing half-baked specs, autogenerated documentation riddled with issues, or circular references that throw parsers into chaos, the struggle is very real. Schema Doctor is my attempt to push back against that chaos.</p>
<p>What started as a simple utility to help me get work done faster has evolved into a lightweight, client-side tool that cleans up messy OpenAPI schemas. It was originally built to scratch my own itch. I needed something that could help with schema debugging, and I didn’t want to rely on slow online validators or bulky local installs just to make a few fixes.</p>
<p>Schema Doctor now lives on a clean static site, and I’ve begun sharing it more widely so others can get value from it too. It still has plenty of room to grow, but the core functionality already solves several major pain points in schema work.</p>
<h3 id="heading-why-schema-validation-sucks">Why Schema Validation Sucks</h3>
<p>OpenAPI is an excellent standard on paper. It provides a consistent way to describe REST APIs, enabling everything from documentation to testing to code generation. But in practice? It’s a bit of a mess.</p>
<p>The problem is that not everyone uses the spec consistently. Some vendors treat it like a rough suggestion. Others lean heavily on auto-generated output from frameworks that don’t prioritize clean specs. Even open-source tools that claim OpenAPI support often fail to produce valid or usable schemas.</p>
<p>As someone automating workflows and integrating with third-party services, I found myself constantly:</p>
<ul>
<li><p>Chasing down syntax errors buried in thousand-line JSON files</p>
</li>
<li><p>Hitting reference loops that break tools like Swagger UI or Postman</p>
</li>
<li><p>Manually adding missing operation IDs just so my generator wouldn’t crash</p>
</li>
</ul>
<p>I realized I was repeating a lot of the same cleanup steps over and over. That’s where Schema Doctor began.</p>
<h3 id="heading-what-it-does">What It Does</h3>
<p>Schema Doctor is a browser-based utility that parses and fixes OpenAPI 3.0 and 3.1 schemas. It doesn’t try to be an all-in-one solution for editing or generating specs. Instead, it focuses on automating the most annoying fixes.</p>
<p>Here’s what it helps with right now:</p>
<ul>
<li><p><strong>Handling Circular References</strong><br />  It identifies and restructures circular <code>$ref</code> loops so they no longer break tools that expect trees instead of graphs.</p>
</li>
<li><p><strong>Fixing Syntax Errors</strong><br />  It runs basic JSON parsing and schema-level checks to spot and report common formatting mistakes.</p>
</li>
<li><p><strong>Adding Missing Operation IDs</strong><br />  For tools that require every operation to have a unique <code>operationId</code>, Schema Doctor can auto-generate these based on method and path.</p>
</li>
<li><p><strong>Flattening Complex Schemas</strong> <em>(experimental)</em><br />  If a schema is split across multiple components with deep nesting, Schema Doctor can flatten it into a more portable format.</p>
</li>
</ul>
<p>The best part? It all runs client-side. No uploading sensitive schema data to a third-party server, and no dependency hell. Just open the page, paste your schema, and hit the button.</p>
<h3 id="heading-building-it-fast-and-functional">Building It: Fast and Functional</h3>
<p>Schema Doctor was built with simplicity in mind. I wanted something that could load instantly, work offline, and run in any modern browser. The tech stack reflects that:</p>
<ul>
<li><p><strong>Plain HTML + JavaScript</strong><br />  No frameworks, no dependencies, just browser-native code.</p>
</li>
<li><p><strong>Swagger-Parser under the hood</strong><br />  For validation and parsing, I used the excellent Swagger-Parser library. It handles a lot of the heavy lifting and catches edge cases I might miss.</p>
</li>
<li><p><strong>Modular JS functions</strong><br />  Each fix is implemented as a standalone helper, so I can continue adding new ones without overcomplicating the codebase.</p>
</li>
</ul>
<p>There’s no user login, no telemetry, no fluff. The goal was utility, not analytics.</p>
<h3 id="heading-why-share-it">Why Share It?</h3>
<p>Initially, I wasn’t planning to release Schema Doctor publicly. It felt too rough, too specific to my workflow. But the more I used it, the more I realized others might benefit too. Every time I fixed a broken schema from a new vendor, I thought, "someone else is probably hitting the same wall."</p>
<p>So I cleaned up the UI, added better error handling, and hosted it with GitHub Pages. Now it's live, free to use, and something I genuinely hope saves others time.</p>
<p>If you’re an automation nerd, an API integrator, or someone stuck cleaning up vendor garbage on the regular, give it a try. It's already helped me clean up dozens of specs and get integrations running faster.</p>
<p>If you’ve got a schema that breaks something and want to see if Schema Doctor can help,<br />You can try it out at: <a target="_blank" href="https://schemadoctor.com">https://schemadoctor.com</a></p>
]]></content:encoded></item><item><title><![CDATA[Throwback: Ben Climer Featured in the Williamson Herald for SkillsUSA Nationals (2011)]]></title><description><![CDATA[In 2011, when I was still a student at Independence High School, I experienced one of my first major moments in technology. I won the Tennessee SkillsUSA state competition in computer networking and earned a place at the national conference in Kansas...]]></description><link>https://benclimer.com/throwback-ben-climer-skillsusa-2011</link><guid isPermaLink="true">https://benclimer.com/throwback-ben-climer-skillsusa-2011</guid><category><![CDATA[BenClimer]]></category><category><![CDATA[SkillsUSA]]></category><category><![CDATA[#highschool]]></category><category><![CDATA[IT]]></category><category><![CDATA[networking]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Sat, 22 Jun 2024 05:00:00 GMT</pubDate><content:encoded><![CDATA[<p>In 2011, when I was still a student at Independence High School, I experienced one of my first major moments in technology. I won the Tennessee SkillsUSA state competition in computer networking and earned a place at the national conference in Kansas City.</p>
<p>The <em>Williamson Herald</em> covered the story at the time, and it remains one of my favorite throwbacks(Though they don’t show the picture on the website): <a target="_blank" href="https://www.williamsonherald.com/features/education/indy-s-ben-climer-advances-to-skillsusa-national-leadership-and-skills-conference/article_30f18568-d913-55d4-b05d-0192d5af607c.html?utm_source=chatgpt.com">Read the original article here</a>.</p>
<p>That year I competed against some of the best high school students in the state. The contest required skills in computer and network configuration, troubleshooting, and IT problem-solving under pressure. Weirdly one of the challenges I think that helped me was a mapped drive challenge. Waiting for the state results was one of the most intense moments of my life, and I was thrilled when my name was announced as the winner.</p>
<p>What stands out even more is the support that surrounded me. My CTE(Career and Technical Education) teacher, Keith Steffens, guided me and pushed me to refine my technical abilities. Community leaders and local businesses also stepped up to help fund my trip, showing how strongly Williamson County values technology education and workforce development.</p>
<p>For me, this event was not just about winning a medal or earning recognition. It became a launching point. At 17 I was already working on web design projects and consulting for clients, but SkillsUSA gave me a clear view of what a future career in IT might look like. It proved that the hours I had invested in tinkering with systems and solving technical challenges were building something real.</p>
<p>Looking back, I can see how this competition influenced the path I would take in my career. It encouraged me to pursue opportunities in managed services, automation, and building tools for the MSP community. It also showed me the value of mentorship and community support, which are still themes in my work today.</p>
<p>If you would like to revisit that moment, here is the original coverage from 2011:<br />👉 <a target="_blank" href="https://www.williamsonherald.com/features/education/indy-s-ben-climer-advances-to-skillsusa-national-leadership-and-skills-conference/article_30f18568-d913-55d4-b05d-0192d5af607c.html?utm_source=chatgpt.com">“Indy’s Ben Climer advances to SkillsUSA National Leadership and Skills Conference” – <em>Williamson Herald</em></a></p>
]]></content:encoded></item><item><title><![CDATA[Mid-2023 Recap: CTFs, Community, and a New Chapter]]></title><description><![CDATA[As I look back on 2023, it was a year that brought a mix of challenges, recognition, and growth across both personal and professional fronts. I wanted to take a moment to reflect on a few highlights that meant a lot to me, and to acknowledge the comm...]]></description><link>https://benclimer.com/mid-2023-recap-ctfs-community-and-a-new-chapter</link><guid isPermaLink="true">https://benclimer.com/mid-2023-recap-ctfs-community-and-a-new-chapter</guid><category><![CDATA[Cyberdrain]]></category><category><![CDATA[CTF]]></category><dc:creator><![CDATA[Ben Climer]]></dc:creator><pubDate>Mon, 01 May 2023 05:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750816713747/c3c18472-961e-48ab-b4e9-74ac305f6fbd.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As I look back on 2023, it was a year that brought a mix of challenges, recognition, and growth across both personal and professional fronts. I wanted to take a moment to reflect on a few highlights that meant a lot to me, and to acknowledge the communities and people that made them possible.</p>
<h3 id="heading-chasing-breadcrumbs-at-cyberdrain-ctf">Chasing Breadcrumbs at CyberDrain CTF</h3>
<p>One of the recurring events I always look forward to is the <strong>CyberDrain CTF</strong>. If you're in the MSP or sysadmin world and haven't checked it out yet, I highly recommend it. You can find it at <a target="_blank" href="http://ctf.cyberdrain.com">ctf.cyberdrain.com</a>. It's a capture-the-flag competition designed specifically for people in our industry, focusing on real-world scenarios that help sharpen both technical and problem-solving skills.</p>
<p>This past year marked the <strong>third time I've placed in the Top 5</strong>, and it's always an adrenaline-fueled experience going toe-to-toe with some of the sharpest minds in the field. The CTF is packed with cleverly hidden breadcrumbs and requires not just technical knowledge, but creativity and persistence. Every time I participate, I walk away having learned something new.</p>
<p>What makes this event special isn't just the challenge itself, but the community around it. I want to give a sincere thank you to <strong>Kelvin Tegelaar</strong>, <strong>Gavin Stone</strong>, <strong>Luke Whitelock</strong>, <strong>John Duprey</strong>, and <strong>Stephen Murphy</strong> for all the time, thought, and effort that goes into creating this experience. A lot of love and late nights go into building something this detailed and this useful. It's events like these that help grow the skillset of the entire community, and I’m always grateful to be a part of it.</p>
<h3 id="heading-honored-to-be-named-a-kentucky-colonel">Honored to Be Named a Kentucky Colonel</h3>
<p>On a very different but equally meaningful note, I had the unexpected honor of being named a <strong>Kentucky Colonel</strong> by the Governor of Kentucky. For those unfamiliar, this is the highest civilian honor awarded by the Commonwealth of Kentucky, and it’s given in recognition of noteworthy accomplishments or service.</p>
<p>The recognition came as a result of my work with the <strong>Information Technology Disaster Resource Center (ITDRC)</strong> during the recovery efforts following the <strong>Eastern Kentucky flooding</strong>. The devastation was severe, and entire communities were left without basic services. Our team assisted in restoring communication infrastructure so that emergency services and residents could get back online, coordinate relief, and start rebuilding.</p>
<p>The work itself is always what matters most. You show up, get your boots muddy, and do what needs to be done. But it was moving to see the efforts of the team recognized in such a formal way. I share that honor with my fellow ITDRC volunteers who put in the long hours and worked through incredibly difficult conditions. If you’re unfamiliar with the ITDRC, I’d encourage you to learn more at <a target="_blank" href="https://itdrc.org">itdrc.org</a>. They do incredible work helping communities in times of crisis, and I’m proud to be part of that mission.</p>
<h3 id="heading-bringing-the-powershell-community-back-together">Bringing the PowerShell Community Back Together</h3>
<p>This year also marked the return of something near and dear to me: the <strong>Middle Tennessee PowerShell User Group</strong>. Alongside <strong>Mick Pletcher</strong>, we brought the group back into action and shifted it to a virtual format to make it more accessible to folks inside and outside of the region.</p>
<p>PowerShell has always been one of my favorite tools in the sysadmin and automation toolbox, and user groups like this are a great way to stay sharp, share knowledge, and support one another in solving the tough technical challenges we all face. Whether you're just getting started or have been scripting for years, our sessions are open to all, and we’d love to have you join in. You can find more info and upcoming meeting details <a target="_blank" href="https://lnkd.in/eU34mmq9">here</a>.</p>
<h3 id="heading-a-new-chapter-cto-at-sns">A New Chapter: CTO at SNS</h3>
<p>Finally, one of the most significant shifts for me this year has been a change in role. I stepped into the position of <strong>Chief Technology Officer at SNS</strong>. It’s a role that allows me to lean into the areas I’m most passionate about: systems architecture, automation, scalability, and adding real value to both the business and the customers we serve.</p>
<p>Taking on a CTO role isn't something I take lightly. It means stepping up, not just in terms of technical leadership, but also in supporting the team, aligning strategy with execution, and building a culture that encourages experimentation, learning, and excellence. I’m excited about where we’re headed and deeply motivated to help shape a future where our technology is not just functional, but transformative.</p>
<hr />
<p>Looking back on 2023, the common thread through all these moments has been <strong>community</strong>. Whether it’s competing with peers at CyberDrain, serving disaster-stricken areas with ITDRC, rebooting the PowerShell user group, or stepping into a leadership role at SNS, none of it happens in a vacuum. It happens through collaboration, mentorship, shared challenges, and mutual respect.</p>
<p>If you're someone in tech trying to figure out where to plug in, my advice is simple: get involved. Show up. Whether it’s a user group, a volunteer effort, a hackathon, or just helping a peer solve a tough problem, those experiences will shape your career and your character in ways you can’t always predict. I’m thankful for everyone who’s been part of that journey with me this year.</p>
<p>Here's to what comes next.</p>
<p>— Ben Climer</p>
]]></content:encoded></item></channel></rss>