<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>David Whiteside</title>
    <link>https://davidwhiteside.com/</link>
    <description>Recent content on David Whiteside</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 25 Apr 2026 12:00:00 +0000</lastBuildDate>
    <atom:link href="https://davidwhiteside.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Code Token Budget Plugin</title>
      <link>https://davidwhiteside.com/notes/claude-code-tokenbudget/</link>
      <pubDate>Sat, 25 Apr 2026 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/notes/claude-code-tokenbudget/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/thedavidwhiteside/claude-code-tokenbudget&#34;&gt;claude-code-tokenbudget&lt;/a&gt; was just released.  There currently isn&amp;rsquo;t a good mechanism for preventing cost overruns with Claude Code if your using AWS Bedrock for example as a backend.  I ran into a few accidental cost overruns, this plugin will help you prevent accidental cost overages.&lt;/p&gt;&#xA;&lt;p&gt;Its easy to install, give it a try.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;claude plugin marketplace add thedavidwhiteside/claude-code-tokenbudget&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;claude plugin install tokenbudget@claude-code-tokenbudget&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Guide for having fun (and winning) a Jam Session at re:Invent</title>
      <link>https://davidwhiteside.com/post/how-to-win-an-aws-jam-session-at-reinvent/</link>
      <pubDate>Thu, 12 Dec 2024 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/post/how-to-win-an-aws-jam-session-at-reinvent/</guid>
      <description>&lt;p&gt;AWS Jam Sessions are hands-on, gamified events designed to test your knowledge of AWS services, security, architecture, and operational best practices. Competing in a Jam requires a mix of AWS expertise, problem-solving skills, quick thinking, and teamwork. If you want to maximize your chances of winning, here’s a strategic guide to your next AWS Jam Session.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;what-to-expect&#34;&gt;&lt;strong&gt;What to expect&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&#xA;  &lt;img src=&#34;https://davidwhiteside.com/img/post/how-to-win-an-aws-jam-session-at-reinvent/reinvent_2024.jpg&#34; alt=&#34;AWS Jam Session at re:Invent&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;AWS Jam Session teams must solve under time constraints.&lt;/code&gt; Challenges range from security incident response and infrastructure automation to networking and AI/ML deployments.  &lt;code&gt;Teams are typically made up of four members.&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Tool to Create Throw-Away Python Virtual Environments</title>
      <link>https://davidwhiteside.com/post/create-throw-away-python-virtual-environments/</link>
      <pubDate>Sat, 07 Dec 2024 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/post/create-throw-away-python-virtual-environments/</guid>
      <description>&lt;p&gt;Managing Python dependencies in isolated environments is a common practice in software development. But what if you need a quick, temporary virtual environment that you can discard after use? Here’s a simple tool and workflow to create throw-away Python virtual environments.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;the-problem&#34;&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;p&gt;While Python’s built-in &lt;code&gt;venv&lt;/code&gt; or tools like &lt;code&gt;virtualenv&lt;/code&gt; are excellent for managing environments, they require setup and cleanup. For quick experiments or isolated dependency installations, this process can feel cumbersome.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using a Smartcard (PIV or CAC) with Ansible</title>
      <link>https://davidwhiteside.com/post/using-smartcard-with-ansible/</link>
      <pubDate>Wed, 07 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/post/using-smartcard-with-ansible/</guid>
      <description>&lt;p&gt;As part of the Ansible 2.12 release, pkcs11/smartcards are now supported by Ansible. Now you can use smartcards and other devices that support pkcs11 (Yubikey) to configure systems with Ansible.&lt;/p&gt;&#xA;&lt;p&gt;Setup your middleware for pkcs11, below is how to install opensc on a Mac using homebrew.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ brew install opensc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To use pkcs11 for authentication set the ANSIBLE_PKCS11_PROVIDER environment variable&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &lt;span style=&#34;color:#8be9fd;font-style:italic&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#8be9fd;font-style:italic&#34;&gt;ANSIBLE_PKCS11_PROVIDER&lt;/span&gt;&lt;span style=&#34;color:#ff79c6&#34;&gt;=&lt;/span&gt;/usr/local/lib/opensc-pkcs11.so&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ansible-playbook -u USERNAME -b -k -K PLAYBOOK.yml --connection&lt;span style=&#34;color:#ff79c6&#34;&gt;=&lt;/span&gt;ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SSH password: &lt;span style=&#34;color:#f1fa8c&#34;&gt;&amp;lt;&amp;lt; Enter your PKCS11 Pin for your smartcard&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f1fa8c&#34;&gt;SUDO password[defaults to SSH password]: &amp;lt;&amp;lt; Enter&lt;/span&gt; your user account password &lt;span style=&#34;color:#ff79c6&#34;&gt;for&lt;/span&gt; sudo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For more details see the &lt;a href=&#34;https://github.com/ansible/ansible/pull/32829&#34;&gt;feature PR&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting the InfiniBand (IB) Node Description on Solaris</title>
      <link>https://davidwhiteside.com/articles/solaris-setting-ib-node-description/</link>
      <pubDate>Sun, 07 Oct 2012 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/articles/solaris-setting-ib-node-description/</guid>
      <description>&lt;p&gt;In Solaris, configuring the InfiniBand (IB) node description can make your network easier to manage by assigning meaningful names to nodes. This guide explains how to set the IB node description.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;View the current IB node description&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ set_nodedesc.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can set the IB node description to whatever you want using the -N option with set_nodedesc.sh.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ set_nodedesc.sh -N &lt;span style=&#34;color:#f1fa8c&#34;&gt;&amp;#39;something&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can reference the &lt;a href=&#34;https://docs.oracle.com/cd/E86824_01/html/E54764/set-nodedesc-sh-1m.html&#34;&gt;man page&lt;/a&gt; for the set_nodedesc.sh command to see the full command reference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solaris Shutdown, Reboot, Init, and Halt Command Differences</title>
      <link>https://davidwhiteside.com/articles/solaris-shutdown-reboot-init-differences/</link>
      <pubDate>Mon, 07 May 2012 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/articles/solaris-shutdown-reboot-init-differences/</guid>
      <description>&lt;p&gt;The init and shutdown commands cleanly shutdown the system by running the shutdown rc scripts.&lt;/p&gt;&#xA;&lt;p&gt;The advantage of shutdown is that you can set a shutdown delay and warning message.&lt;/p&gt;&#xA;&lt;p&gt;halt and reboot are not as clean, no shutdown rc scripts are run so applications will not be brought down clean, I generally do not use these commands unless its a last resort.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ init   &lt;span style=&#34;color:#6272a4&#34;&gt;# runs the shutdown scripts in /etc/rc*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ init &lt;span style=&#34;color:#bd93f9&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#6272a4&#34;&gt;# shutdown (on sparc it takes it to the ok prompt)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ init s &lt;span style=&#34;color:#6272a4&#34;&gt;# single user mode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ init &lt;span style=&#34;color:#bd93f9&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#6272a4&#34;&gt;# shutdown&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ init &lt;span style=&#34;color:#bd93f9&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#6272a4&#34;&gt;# reboot&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ shutdown &lt;span style=&#34;color:#6272a4&#34;&gt;# runs the shutdown scripts in /etc/rc*, prints message warning users&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ shutdown -y -g &lt;span style=&#34;color:#bd93f9&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ shutdown -y -i &lt;span style=&#34;color:#bd93f9&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#6272a4&#34;&gt;# shutdown to ok prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ shutdown -y -i S &lt;span style=&#34;color:#6272a4&#34;&gt;# single user mode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ shutdown -y -i &lt;span style=&#34;color:#bd93f9&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#6272a4&#34;&gt;# shutdown&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ shutdown -y -i &lt;span style=&#34;color:#bd93f9&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#6272a4&#34;&gt;# reboot&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sync; sync; halt &lt;span style=&#34;color:#6272a4&#34;&gt;# (ungraceful shutdown, use sync;sync;halt)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sync; sync; reboot &lt;span style=&#34;color:#6272a4&#34;&gt;# (ungraceful reboot. Always run sync;sync;reboot. The prefered method is using init.)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sync; sync; reboot -- -r  &lt;span style=&#34;color:#6272a4&#34;&gt;# reconfiguration reboot&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sync; sync; reboot -- -s &lt;span style=&#34;color:#6272a4&#34;&gt;# reboot into single usermode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>SPARC OK Prompt Command Reference</title>
      <link>https://davidwhiteside.com/articles/sparc-ok-prompt-command-reference/</link>
      <pubDate>Sun, 07 Aug 2011 12:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/articles/sparc-ok-prompt-command-reference/</guid>
      <description>&lt;p&gt;Maybe you don’t care about the forth programming language, but if you work on Sparc systems long enough you are going to have to work from the ok prompt.&lt;/p&gt;&#xA;&lt;p&gt;Here are the essentials commands you must know.&lt;/p&gt;&#xA;&lt;p&gt;Boot the system normally&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ok&amp;gt; boot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Boot the system and allow for discovery of new devices (reconfiguration boot)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ok&amp;gt; boot -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Boot into Single-User Mode&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ok&amp;gt; boot -s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Boot into a ROM, useful if your system isn’t bootable&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://davidwhiteside.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://davidwhiteside.com/about/</guid>
      <description>&lt;h2 id=&#34;about-me&#34;&gt;About Me&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;David Whiteside&lt;/em&gt;&lt;/strong&gt; is a skilled cloud architect and software developer with expertise in Cloud Computing, High-Performance Computing (HPC), Linux, DevOps, and Programming, with a passion for exploring technology. His interests span the entire spectrum of software development, from crafting web applications and mobile apps to delving into embedded systems at the firmware level.&lt;/p&gt;&#xA;&lt;p&gt;Beyond cloud computing and software development, David has a keen interest in Artificial Intelligence, Machine Learning, and the intersection of technology with real-world problem-solving. He enjoys hands-on projects like 3D printing and exploring advancements in renewable energy, electric vehicles, and solar power. When he&amp;rsquo;s not in front of a screen, you&amp;rsquo;ll likely find him snowboarding, mountain biking, or rock climbing in the mountains, embracing the same sense of problem-solving and adaptability that he brings to his engineering work.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
