<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>JRR</title>
    <link>https://johnruble.net/</link>
    <description>Recent content on JRR</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 11 Feb 2018 11:00:00 -0500</lastBuildDate><atom:link href="https://johnruble.net/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Review: Kinesis Freestyle Edge Keyboard</title>
      <link>https://johnruble.net/post/review-kinesis-freestyle-edge-keyboard/</link>
      <pubDate>Sun, 11 Feb 2018 11:00:00 -0500</pubDate>
      
      <guid>https://johnruble.net/post/review-kinesis-freestyle-edge-keyboard/</guid>
      <description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been a happy user of &lt;!-- raw HTML omitted --&gt;wasd&lt;!-- raw HTML omitted --&gt; mechanical keyboards at home and work for years, but lately I&amp;rsquo;ve grown interested in improved ergonomics. Some of my colleagues use various generations of Microsoft ergo boards, but I wanted the flexibility of a split board and didn&amp;rsquo;t want to give up mechanical switches.&lt;/p&gt;
&lt;p&gt;When I learned of Kinesis&#39; new split mechanical keyboard (shortly after its successful &lt;!-- raw HTML omitted --&gt;Kickstarter&lt;!-- raw HTML omitted --&gt;), I knew I had to try it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Table Relationship Diagrams with Graphviz</title>
      <link>https://johnruble.net/post/table-relationship-diagrams-with-graphviz/</link>
      <pubDate>Wed, 15 Nov 2017 11:00:00 -0500</pubDate>
      
      <guid>https://johnruble.net/post/table-relationship-diagrams-with-graphviz/</guid>
      <description>&lt;p&gt;I recently found myself looking for a modern tool to diagram relationships between tables of data. When I came up short, I used a very old tool instead.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>DIY Dynamic DNS with OpenWRT and Google Domains</title>
      <link>https://johnruble.net/post/diy-dynamic-dns-with-openwrt-and-google-domains/</link>
      <pubDate>Fri, 21 Jul 2017 11:00:00 -0500</pubDate>
      
      <guid>https://johnruble.net/post/diy-dynamic-dns-with-openwrt-and-google-domains/</guid>
      <description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Dynamic DNS&lt;!-- raw HTML omitted --&gt; (DDNS) can give your home&amp;rsquo;s changing IP a reliable hostname. I recently redid mine with some new tools. Here&amp;rsquo;s how it went!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>That’s Not Your Email Address</title>
      <link>https://johnruble.net/post/thats-not-your-email-address/</link>
      <pubDate>Wed, 05 Apr 2017 11:00:00 -0500</pubDate>
      
      <guid>https://johnruble.net/post/thats-not-your-email-address/</guid>
      <description>&lt;p&gt;I don&amp;rsquo;t think I have a particularly common name, but I&amp;rsquo;ve received email intended for at least &lt;em&gt;four&lt;/em&gt; other John Rubles. This creates awkward and amusing situations. Here are some of my stories and some lessons we can take from them for implementing email-based account systems.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>about</title>
      <link>https://johnruble.net/about/</link>
      <pubDate>Tue, 31 Jan 2017 22:53:32 -0500</pubDate>
      
      <guid>https://johnruble.net/about/</guid>
      <description>My name is John Ruble. I&amp;rsquo;m a software developer based in Grand Rapids, MI, currently working at Atomic Object.
&amp;ldquo;JRR&amp;rdquo; is just my initials, and that little green guy is from a video game.
This site was built with Hugo and Fuegowolf&amp;rsquo;s cocoa-eh theme.</description>
    </item>
    
    <item>
      <title>Open Source Basics: NPM Edition</title>
      <link>https://johnruble.net/post/open-source-basics-npm-edition/</link>
      <pubDate>Thu, 22 Sep 2016 11:00:00 -0500</pubDate>
      
      <guid>https://johnruble.net/post/open-source-basics-npm-edition/</guid>
      <description>&lt;p&gt;As software developers, we&amp;rsquo;ve long used third-party code in our day-to-day work, but these days, it&amp;rsquo;s much easier to find and integrate it with package managers and searchable repositories.&lt;/p&gt;
&lt;p&gt;Inevitably, there comes a time when our unique use of a library exposes a new bug, or we find that we could &lt;!-- raw HTML omitted --&gt;almost&lt;!-- raw HTML omitted --&gt; use that sweet tool if only it did this one tiny thing differently. When that happens, we find ourselves popping open the hood and making changes to a third-party dependency.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Programming Exercises to Stretch your Noodle</title>
      <link>https://johnruble.net/post/programming-exercises-to-stretch-your-noodle/</link>
      <pubDate>Sun, 24 May 2015 11:00:00 -0500</pubDate>
      
      <guid>https://johnruble.net/post/programming-exercises-to-stretch-your-noodle/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Now and then I work on small programming puzzles. I do this mostly because I enjoy it, but it&amp;rsquo;s also a great way to try out new languages, tools, and techniques, or to to maintain familiarity with those you haven&amp;rsquo;t used in a while.&lt;/p&gt;
&lt;p&gt;Below are three of my favorite sources of programming exercises.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Android 4.4 Browser Picker</title>
      <link>https://johnruble.net/post/android-4.4-browser-picker/</link>
      <pubDate>Wed, 20 Nov 2013 13:36:34 -0500</pubDate>
      
      <guid>https://johnruble.net/post/android-4.4-browser-picker/</guid>
      <description>The &amp;ldquo;Browser Picker&amp;rdquo; dialog I discussed last year has been reworked in Android 4.4, and I like the new design. The implementation in versions 4.1 - 4.3 was a speed bump for users who didn&amp;rsquo;t wish to select a default app - they had to tap twice:
Here&amp;rsquo;s the new dialog:
The appearance and behavior are similar the first time you use it. As in prior versions, either tap the browser followed by &amp;lsquo;Just Once&amp;rsquo; or double-tap the browser:</description>
    </item>
    
    <item>
      <title>Ghost (and Node.js) on Dreamhost VPS</title>
      <link>https://johnruble.net/post/ghost-and-node.js-on-dreamhost-vps/</link>
      <pubDate>Sun, 20 Oct 2013 13:06:40 -0500</pubDate>
      
      <guid>https://johnruble.net/post/ghost-and-node.js-on-dreamhost-vps/</guid>
      <description>After occasionally playing with Wordpress for a personal blog over the last few years, I decided to try something new: Ghost, which aims to be &amp;ldquo;just a blogging platform&amp;rdquo;. Following are my experiences configuring it on a Dreamhost virtual private server.
I mostly followed Ryan Powell&amp;rsquo;s guide, with one key difference: I&amp;rsquo;m not running node as root, because that gives me the willies.
 Establish two shell accounts: an administrator and a user.</description>
    </item>
    
    <item>
      <title>One of my Favorite &#34;Workarounds&#34;</title>
      <link>https://johnruble.net/post/one-of-my-favorite-workarounds/</link>
      <pubDate>Thu, 26 Sep 2013 13:13:32 -0500</pubDate>
      
      <guid>https://johnruble.net/post/one-of-my-favorite-workarounds/</guid>
      <description>The back story Today’s AMD Catalyst Linux beta driver removes the long-standing “Testing use only” watermark:
Congratulations to the voice of reason!
Last year I needed to use the beta driver for a while until a bug was fixed in the next release. It’s obnoxious to have translucent watermarks on top of everything you’re doing, so I asked AMD support how to disable it. They recommended a small script from a third-party site as a workaround.</description>
    </item>
    
    <item>
      <title>Android NDK, GDB, and Bus Errors</title>
      <link>https://johnruble.net/post/android-ndk-gdb-and-bus-errors/</link>
      <pubDate>Thu, 26 Sep 2013 13:00:39 -0500</pubDate>
      
      <guid>https://johnruble.net/post/android-ndk-gdb-and-bus-errors/</guid>
      <description>So there I was, trying out some existing C/++ code on Android for the first time, when:
The first step, as always, is logcat. If you’re filtering the output to messages originating from your application, you’ll see something like this:
SIGBUS – this is a bus error. I caused a few of these as I learned C/++ on SPARC machines at Purdue. Disable the log filter and you get a good deal more information, including processor state and a stack trace:</description>
    </item>
    
    <item>
      <title>Google Alerts Publication dies with Reader</title>
      <link>https://johnruble.net/post/google-alerts-publication-dies-with-reader/</link>
      <pubDate>Tue, 02 Jul 2013 13:38:03 -0500</pubDate>
      
      <guid>https://johnruble.net/post/google-alerts-publication-dies-with-reader/</guid>
      <description>Today Google Reader is no more, but I’m happy for now with Feedly (which syncs with my favorite android reader); I’m also watching Hive Reader and The Old Reader.
Also ending today, unannounced, is RSS publication of Google Alerts. I discovered it this morning like this:
The alerts dashboard informs me that “Google Reader is no longer available. To continue receiving Google Alerts, change to email delivery.”:
They’re implying that Alert publication depends on Google Reader.</description>
    </item>
    
    <item>
      <title>Android 4.1 Browser Picker</title>
      <link>https://johnruble.net/post/android-4.1-browser-picker/</link>
      <pubDate>Sat, 06 Oct 2012 13:34:23 -0500</pubDate>
      
      <guid>https://johnruble.net/post/android-4.1-browser-picker/</guid>
      <description>Here’s what I’m calling the “browser picker” dialog from Android 4.0 and 4.1:
This new interface is better and worse. There are two requirements I have of this dialog:
Requirement 1 – All user action paths shall flow downward. This felt really weird before, and now it feels better. Great!
Requirement 2 – Selecting a browser “just once” shall require only one tap. This worked well in 4.0 (and prior versions) but became inconvenient in 4.</description>
    </item>
    
  </channel>
</rss>
