<!doctype html>
<html lang="en">
  <head>
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-Z6DNLMGCB0"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-Z6DNLMGCB0');
    </script>
    
    <title>John Hobbs on coding, Omaha, and life in general</title>
    
    <link rel="stylesheet" href="/static/theme.css" />
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Cardo:ital,wght@0,400;0,700;1,400&family=Source+Code+Pro&display=swap" rel="stylesheet">
    <link href="/static/hljs-monokai.css" rel="stylesheet">
  </head>
  <body>
    <script>document.body.dataset['themeColor'] = window.localStorage.getItem('theme-color');</script>
    <header>
      <div class="constrained">
        <a href="/">jmhobbs</a>
        <nav>
          <a href="/about/">About</a>
        </nav>
      </div>
    </header>
    <main>


<div class="listing"><div>
    <h2><a href="/2023/03/26/a-peek-inside-pinentry/">A peek inside pinentry</a></h2>
    <time datetime="2023-03-27T00:00:00.000Z">Mar 27, 2023</time><p>I interact with pinenty daily, but I don&#39;t really understand it. This post dives into how it is invoked and can be used outside of GPG for your own projects.
</p></div><div>
    <h2><a href="/2020/01/29/netlify-cloudflare-crazy-delicious/">Netlify + Cloudflare = Crazy Delicious</a></h2>
    <time datetime="2020-01-30T00:00:00.000Z">Jan 30, 2020</time><p>Cult of the Party Parrot is a fairly simple static site, but it pushes a lot of traffic. Combining the magic of Netlify with the sweet cache layer of Cloudflare with a dash of Google Cloud functions gives us the best of both.
</p></div><div>
    <h2><a href="/2019/01/09/easy-visual-identification-of-git-short-shas/">Easy visual identification of git short sha&#39;s.</a></h2>
    <time datetime="2019-01-09T00:00:00.000Z">Jan 9, 2019</time><p>A list of short SHA&#39;s can be hard to read, wrapping them in color can help.</p></div><div>
    <h2><a href="/2018/12/27/using-environment-secrets-as-build-arguments-in-google-cloud-build/">Using environment secrets as build arguments in Google Cloud Build</a></h2>
    <time datetime="2018-12-27T00:00:00.000Z">Dec 27, 2018</time><p>Cloud Build is a nice too for continuous building of your Docker images. Using an environment secret in the build is a gap in the docs, here is how I did it.
</p></div><div>
    <h2><a href="/2018/06/13/party-gopher/">Party Gopher!</a></h2>
    <time datetime="2018-06-13T00:00:00.000Z">Jun 13, 2018</time><p>go func(partyordie bool) {...}()</p></div><div>
    <h2><a href="/2018/05/30/a-new-gpg-key/">A New GPG Key</a></h2>
    <time datetime="2018-05-30T00:00:00.000Z">May 30, 2018</time><p>After a decade it&#39;s time to create a new GPG key. There&#39;s no real excuse not to use a Yubikey anymore either. This will cover the process I took from start to finish, with subkeys, paperkey backups, git signing and SSH with gpg-agent.
</p></div><div>
    <h2><a href="/2018/03/04/chicken-cam-incubator-edition/">Chicken Cam: Incubator Edition</a></h2>
    <time datetime="2018-03-05T00:00:00.000Z">Mar 5, 2018</time><p>Why let a chicken hatch your eggs when you could make a Raspberry Pi do it?</p></div><div>
    <h2><a href="/2017/09/14/gpdmp-to-slack/">gpdmp-to-slack</a></h2>
    <time datetime="2017-09-15T00:00:00.000Z">Sep 15, 2017</time><p>Show your currently playing song as your Slack status from Google Play Desktop Music Player.
</p></div><div>
    <h2><a href="/2016/12/19/mac-randomizer-alfred-script/">MAC Randomizer Alfred Script</a></h2>
    <time datetime="2016-12-20T00:00:00.000Z">Dec 20, 2016</time><p>Spoofing MAC addresses with Python through Alfred</p></div><div>
    <h2><a href="/2016/08/29/anonymous-code-of-conduct-reporting-with-twilio/">Anonymous Code of Conduct Reporting With Twilio</a></h2>
    <time datetime="2016-08-30T00:00:00.000Z">Aug 30, 2016</time><p>Integrating with Twilio to allow reporting code of conduct violations over SMS or voice.</p></div><div>
    <h2><a href="/2015/12/08/using-lets-encrypt-with-dreamhost/">Using Let&#39;s Encrypt With Dreamhost</a></h2>
    <time datetime="2015-12-09T00:00:00.000Z">Dec 9, 2015</time><p>Manually issuing and installing a Let&#39;s Encrypt certificate on Dreamhost</p></div><div>
    <h2><a href="/2015/11/15/chat-ops-snack-preview-script/">ChatOps: Snack Preview Script</a></h2>
    <time datetime="2015-11-15T00:00:00.000Z">Nov 15, 2015</time><p>Automating review of random image selection for an iOS app.</p></div><div>
    <h2><a href="/2015/10/06/android-dev-phone/">$20 Android Dev Phone</a></h2>
    <time datetime="2015-10-07T00:00:00.000Z">Oct 7, 2015</time><p>Setting up a cheap prepaid phone as an alternative to using the emulator.</p></div><div>
    <h2><a href="/2015/09/10/you-should-be-using-redis/">You Should Be Using Redis</a></h2>
    <time datetime="2015-09-10T00:00:00.000Z">Sep 10, 2015</time><p>My talk covering Redis basics at HDC15</p></div><div>
    <h2><a href="/2015/08/26/look-of-disapproval-keyboard-button/">à² _à²  Keyboard Button</a></h2>
    <time datetime="2015-08-26T00:00:00.000Z">Aug 26, 2015</time></div><nav>
    <ol>
      <li>&laquo; Previous</li>
      <li><a href="/1/">Next &raquo;</a></li>
    </ol>
  </nav>
</div>

    </main>
    <footer>
      <div class="constrained">
        <a href="https://static.velvetcache.org/John-Hobbs-Public-Key.asc">0xF79C72E6EDC70E38</a>
        <nav>
          Color:
          <a href="#" class="theme-switcher" data-theme="blue"></a>
          <a href="#" class="theme-switcher" data-theme="pink"></a>
          <a href="#" class="theme-switcher" data-theme="yellow"></a>
          <a href="#" class="theme-switcher" data-theme="green"></a>
          <a href="#" class="theme-switcher" data-theme="orange"></a>
          <a href="#" class="theme-switcher" data-theme="purple"></a>
          Mode:
          <a href="#" class="scheme-switcher" data-scheme="light"></a>
          <a href="#" class="scheme-switcher" data-scheme="dark"></a>
        </nav>
      </div>
    </footer>
    <script>
      document.querySelectorAll('a.theme-switcher').forEach(a => a.addEventListener('click', (e) => {
        e.preventDefault();
        document.body.dataset['theme'] = e.target.dataset['theme'];
        window.localStorage.setItem('theme', e.target.dataset['theme']);
      }));
      document.querySelectorAll('a.scheme-switcher').forEach(a => a.addEventListener('click', (e) => {
        e.preventDefault();
        document.body.dataset['scheme'] = e.target.dataset['scheme'];
        window.localStorage.setItem('scheme', e.target.dataset['scheme']);
      }));
    </script>
    <script>
      document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] +
        ':35729/livereload.js?snipver=1"></' + 'script>')
    </script>
  </body>
</html>

