<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Hey, I’m Parker.]]></title>
  <link href="http://blog.parkermoore.de/atom.xml" rel="self"/>
  <link href="http://blog.parkermoore.de/"/>
  <updated>2016-12-09T19:59:33-05:00</updated>
  <id>http://blog.parkermoore.de/</id>
  <author>
    <name><![CDATA[Parker Moore]]></name>
    <email><![CDATA[parkrmoore@gmail.com]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Header Anchor Links in Vanilla JavaScript for GitHub Pages and Jekyll]]></title>
    <link href="http://blog.parkermoore.de/2014/08/01/header-anchor-links-in-vanilla-javascript-for-github-pages-and-jekyll/"/>
    <updated>2014-08-01T23:36:54-04:00</updated>
    <id>http://blog.parkermoore.de/2014/08/01/header-anchor-links-in-vanilla-javascript-for-github-pages-and-jekyll</id>
    <content type="html"><![CDATA[<p>The venerable <a href="http://ben.balter.com">Ben Balter, Esq.</a> wrote earlier this year about <a href="http://ben.balter.com/2014/03/13/pages-anchor-links/">how to add anchor links for headers in Jekyll.</a>. I thought I&#39;d follow up that post with one of my own, as I take a slightly different approach.</p>

<p>This solution is vanilla JavaScript with a little CSS and the Font Awesome web font.</p>

<h2>Font Awesome</h2>

<p><a href="http://fortawesome.github.io/Font-Awesome/">Font Awesome</a> is, well, awesome. It&#39;s a font of icons that comes with a handy set of CSS classes.</p>

<p>Download the Font Awesome distribution and pull out just the font files. They&#39;re the files that end in <code>.ttf</code>, <code>.woff</code>, <code>.svg</code>, <code>.otf</code>, and <code>.eot</code>. Grab them all and put them in <code>fonts/</code> in your Jekyll site.</p>

<h2>The JavaScript</h2>

<p>Add this JavaScript wherever is convenient:</p>

<div class="highlight"><pre><code class="js"><span class="kd">var</span> <span class="nx">anchorForId</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">id</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">var</span> <span class="nx">anchor</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">"a"</span><span class="p">);</span>
  <span class="nx">anchor</span><span class="p">.</span><span class="nx">className</span> <span class="o">=</span> <span class="s2">"header-link"</span><span class="p">;</span>
  <span class="nx">anchor</span><span class="p">.</span><span class="nx">href</span>      <span class="o">=</span> <span class="s2">"#"</span> <span class="o">+</span> <span class="nx">id</span><span class="p">;</span>
  <span class="nx">anchor</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">"&lt;i class=\"fa fa-link\"&gt;&lt;/i&gt;"</span><span class="p">;</span>
  <span class="k">return</span> <span class="nx">anchor</span><span class="p">;</span>
<span class="p">};</span>

<span class="kd">var</span> <span class="nx">linkifyAnchors</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">level</span><span class="p">,</span> <span class="nx">containingElement</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">var</span> <span class="nx">headers</span> <span class="o">=</span> <span class="nx">containingElement</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">"h"</span> <span class="o">+</span> <span class="nx">level</span><span class="p">);</span>
  <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">h</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">h</span> <span class="o">&lt;</span> <span class="nx">headers</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">h</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="kd">var</span> <span class="nx">header</span> <span class="o">=</span> <span class="nx">headers</span><span class="p">[</span><span class="nx">h</span><span class="p">];</span>

    <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">header</span><span class="p">.</span><span class="nx">id</span> <span class="o">!==</span> <span class="s2">"undefined"</span> <span class="o">&amp;&amp;</span> <span class="nx">header</span><span class="p">.</span><span class="nx">id</span> <span class="o">!==</span> <span class="s2">""</span><span class="p">)</span> <span class="p">{</span>
      <span class="nx">header</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">anchorForId</span><span class="p">(</span><span class="nx">header</span><span class="p">.</span><span class="nx">id</span><span class="p">));</span>
    <span class="p">}</span>
  <span class="p">}</span>
<span class="p">};</span>

<span class="nb">document</span><span class="p">.</span><span class="nx">onreadystatechange</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">===</span> <span class="s2">"complete"</span><span class="p">)</span> <span class="p">{</span>
    <span class="kd">var</span> <span class="nx">contentBlock</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByClassName</span><span class="p">(</span><span class="s2">"docs"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">||</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByClassName</span><span class="p">(</span><span class="s2">"news"</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">contentBlock</span><span class="p">)</span> <span class="p">{</span>
      <span class="k">return</span><span class="p">;</span>
    <span class="p">}</span>
    <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">level</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="nx">level</span> <span class="o">&lt;=</span> <span class="mi">6</span><span class="p">;</span> <span class="nx">level</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
      <span class="nx">linkifyAnchors</span><span class="p">(</span><span class="nx">level</span><span class="p">,</span> <span class="nx">contentBlock</span><span class="p">);</span>
    <span class="p">}</span>
  <span class="p">}</span>
<span class="p">};</span></code></pre></div>

<h2>The CSS</h2>

<p>Last, add this CSS to the <code>css</code> or <code>_scss</code> folder:</p>

<div class="highlight"><pre><code class="css"><span class="c">/*!
 *  Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */</span>
<span class="k">@font-face</span> <span class="p">{</span>
  <span class="nl">font-family</span><span class="p">:</span> <span class="s2">'FontAwesome'</span><span class="p">;</span>
  <span class="nl">src</span><span class="p">:</span> <span class="sx">url('../fonts/fontawesome-webfont.eot?v=4.1.0')</span><span class="p">;</span>
  <span class="nl">src</span><span class="p">:</span> <span class="sx">url('../fonts/fontawesome-webfont.eot?#iefix&amp;v=4.1.0')</span> <span class="n">format</span><span class="p">(</span><span class="s2">'embedded-opentype'</span><span class="p">),</span> <span class="sx">url('../fonts/fontawesome-webfont.woff?v=4.1.0')</span> <span class="n">format</span><span class="p">(</span><span class="s2">'woff'</span><span class="p">),</span> <span class="sx">url('../fonts/fontawesome-webfont.ttf?v=4.1.0')</span> <span class="n">format</span><span class="p">(</span><span class="s2">'truetype'</span><span class="p">),</span> <span class="sx">url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular')</span> <span class="n">format</span><span class="p">(</span><span class="s2">'svg'</span><span class="p">);</span>
  <span class="nl">font-weight</span><span class="p">:</span> <span class="nb">normal</span><span class="p">;</span>
  <span class="nl">font-style</span><span class="p">:</span> <span class="nb">normal</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.fa</span> <span class="p">{</span>
  <span class="nl">display</span><span class="p">:</span> <span class="n">inline-block</span><span class="p">;</span>
  <span class="nl">font-family</span><span class="p">:</span> <span class="n">FontAwesome</span><span class="p">;</span>
  <span class="nl">font-style</span><span class="p">:</span> <span class="nb">normal</span><span class="p">;</span>
  <span class="nl">font-weight</span><span class="p">:</span> <span class="nb">normal</span><span class="p">;</span>
  <span class="nl">line-height</span><span class="p">:</span> <span class="m">1</span><span class="p">;</span>
  <span class="nl">-webkit-font-smoothing</span><span class="p">:</span> <span class="n">antialiased</span><span class="p">;</span>
  <span class="nl">-moz-osx-font-smoothing</span><span class="p">:</span> <span class="n">grayscale</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.fa-link</span><span class="nd">:before</span> <span class="p">{</span>
  <span class="nl">content</span><span class="p">:</span> <span class="s1">"\f0c1"</span><span class="p">;</span>
<span class="p">}</span>
<span class="c">/*
 * This code is courtesy Ben Balter, modified by Parker Moore for jekyllrb.com
 * http://ben.balter.com/2014/03/13/pages-anchor-links/
 */</span>
<span class="nc">.header-link</span> <span class="p">{</span>
  <span class="nl">position</span><span class="p">:</span> <span class="nb">relative</span><span class="p">;</span>
  <span class="nl">left</span><span class="p">:</span> <span class="m">0.5em</span><span class="p">;</span>
  <span class="nl">opacity</span><span class="p">:</span> <span class="m">0</span><span class="p">;</span>
  <span class="nl">font-size</span><span class="p">:</span> <span class="m">0.8em</span><span class="p">;</span>

  <span class="nl">-webkit-transition</span><span class="p">:</span> <span class="n">opacity</span> <span class="m">0.2s</span> <span class="n">ease-in-out</span> <span class="m">0.1s</span><span class="p">;</span>
  <span class="nl">-moz-transition</span><span class="p">:</span> <span class="n">opacity</span> <span class="m">0.2s</span> <span class="n">ease-in-out</span> <span class="m">0.1s</span><span class="p">;</span>
  <span class="nl">-ms-transition</span><span class="p">:</span> <span class="n">opacity</span> <span class="m">0.2s</span> <span class="n">ease-in-out</span> <span class="m">0.1s</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">h2</span><span class="nd">:hover</span> <span class="nc">.header-link</span><span class="o">,</span>
<span class="nt">h3</span><span class="nd">:hover</span> <span class="nc">.header-link</span><span class="o">,</span>
<span class="nt">h4</span><span class="nd">:hover</span> <span class="nc">.header-link</span><span class="o">,</span>
<span class="nt">h5</span><span class="nd">:hover</span> <span class="nc">.header-link</span><span class="o">,</span>
<span class="nt">h6</span><span class="nd">:hover</span> <span class="nc">.header-link</span> <span class="p">{</span>
  <span class="nl">opacity</span><span class="p">:</span> <span class="m">1</span><span class="p">;</span>
<span class="p">}</span></code></pre></div>

<h2>Enjoy the Magic</h2>

<p>Now refresh your site and voilà! It&#39;s like magic. See it in action in the <a href="http://jekyllrb.com/docs/home/">Jekyll docs</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A Hacker's Guide to Her Own GitHub Pages]]></title>
    <link href="http://blog.parkermoore.de/2014/08/01/how-to-setup-your-own-github-pages/"/>
    <updated>2014-08-01T14:42:58-04:00</updated>
    <id>http://blog.parkermoore.de/2014/08/01/how-to-setup-your-own-github-pages</id>
    <content type="html"><![CDATA[<p><a href="https://pages.github.com">GitHub Pages</a> is a wonderful free platform GitHub has created to build and host your Jekyll sites for you. You push up any valid Jekyll site to a repo (on a special branch), and it&#39;s built and published to a predictable URL. The only downside? You can&#39;t use any custom Ruby code, which means no custom plugins. So what&#39;s the best way to host a Jekyll site that requires plugins?</p>

<p>Maybe you&#39;re writing a huge website for your employer, or just something small for yourself. Either way, you need a plugin or two to get it <em>just right</em>. You could build locally and push the compiled site up to GitHub Pages, but that requires that you install all the dependencies locally and write a script to compile and jostle things in just the right way to make it all work. What if you could have the same workflow – just <code>git push</code> – for sites with custom plugins?</p>

<p>You can. I do it every day. In fact, my personal site (https://parkermoo.re) is published with this method. Here&#39;s a step-by-step guide to making your own GitHub Pages.</p>

<h2>1. Install and Configure Dependencies</h2>

<p>You&#39;ll need the following:</p>

<ol>
<li>A server with <code>root</code> access. I use a Rackspace CentOS 1GB Performance VM, but you can use any Linux system from any provider.</li>
<li>A web server if you don&#39;t have one already (Apache/Nginx).</li>
<li>Ruby and RubyGems with the proper permissions to install new gems.</li>
<li>Git</li>
<li><a href="https://github.com/sitaramc/gitolite">Gitolite</a></li>
</ol>

<p>First, <code>sudo su - root</code>. Then install Ruby. I suggest using <code>rbenv</code> to keep your Rubies organized. Then ensure RubyGems is installed, and install the <code>github-pages</code> gem.</p>

<p>Next, ensure you have a daemonized web server installed, like <code>nginx</code> or <code>apache</code>.</p>

<p>Then ensure git is installed and create a new <code>git</code> user. Run <code>su - git</code> and install <code>gitolite</code>.</p>

<p>Once you have <code>gitolite</code> installed, go back to your local machine and configure <code>gitolite</code> as described. You&#39;ll need to add a new user for your SSH key and create the repo for your site.</p>

<h2>2. Add the post-receive hook</h2>

<p>Run <code>sudo su - git</code> and find the <code>post-receive</code> file in your repository. It&#39;s usually at <code>/home/git/repositories/MY_REPO.git/hooks/post-receive</code>. Edit it so it looks like this:</p>

<div class="highlight"><pre><code class="bash"><span class="nb">set</span> -e <span class="c"># fail on error</span>

<span class="c"># ensure you have loaded git's environment with rbenv/ruby/jekyll in the path</span>
<span class="nb">source</span> /home/git/.bash_profile

<span class="c"># this is only if you have rbenv installed</span>
<span class="c"># remove if you're using a stock ruby</span>
<span class="nb">eval</span> <span class="s2">"</span><span class="k">$(</span>rbenv init -<span class="k">)</span><span class="s2">"</span>

<span class="c"># this shows you where the Jekyll executable can be found</span>
<span class="c"># it will also fail if jekyll can't be found, halting the build.</span>
which jekyll

<span class="c"># this is the name of your repo, without the `.git`</span>
<span class="nv">REPO_NAME</span><span class="o">=</span><span class="s2">"MY_REPO"</span>

<span class="nv">GIT_REPO</span><span class="o">=</span><span class="nv">$HOME</span>/repositories/<span class="nv">$REPO_NAME</span>.git
<span class="nv">TMP_GIT_CLONE</span><span class="o">=</span>/tmp/<span class="nv">$REPO_NAME</span>

<span class="c"># Change this to wherever your server (nginx/apache) will look</span>
<span class="c"># for your compiled site. Usually called the document root.</span>
<span class="nv">PUBLIC_WWW</span><span class="o">=</span>/var/www/<span class="nv">$REPO_NAME</span>

git clone <span class="nv">$GIT_REPO</span> <span class="nv">$TMP_GIT_CLONE</span>

<span class="c"># Run Jekyll!</span>
<span class="nb">cd</span> <span class="nv">$TMP_GIT_CLONE</span> <span class="o">&amp;&amp;</span> jekyll build -d <span class="nv">$PUBLIC_WWW</span> --trace
rm -Rf <span class="nv">$TMP_GIT_CLONE</span>
<span class="nb">exit</span></code></pre></div>

<p>This hook will clone your repo to <code>/tmp</code> and run <code>jekyll build</code> from your site source into the directory your server will serve from.</p>

<h2>3. Add the git remote</h2>

<p>Go back to your local site and add the remote:</p>

<div class="highlight"><pre><code class="bash"><span class="gp">$ </span>git remote add publish git@example.org:MY_REPO.git</code></pre></div>

<h2>4. Test</h2>

<p>Now, to test, just push!</p>

<div class="highlight"><pre><code class="bash"><span class="gp">$ </span>git push publish master</code></pre></div>

<p>You should see all the output of the Jekyll process in your terminal. Once you see <code>...done.</code> and the process exits, you&#39;re done! Refresh your browser and admire your handiwork.</p>

<p>If you get a <code>LoadError</code> from Jekyll, then you don&#39;t have a gem installed or it can&#39;t access the <code>_plugins</code> directory. To install new gems, just run <code>gem install GEM_NAME</code> as <code>root</code> on your VM.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Don’t Like Being Tracked?]]></title>
    <link href="http://blog.parkermoore.de/2014/07/16/dont-like-being-tracked/"/>
    <updated>2014-07-16T21:58:53-04:00</updated>
    <id>http://blog.parkermoore.de/2014/07/16/dont-like-being-tracked</id>
    <content type="html"><![CDATA[<p>I don’t like being tracked by Web giants when I’m not on their websites. As
more sites integrate Twitter, Facebook, and Google support, I can’t help
but be tracked on almost every site I visit.</p>

<p>Luckily, the integrations for these three aforementioned companies is quite
simple to subvert (at least partially). If you’re running a unix-based
machine, you can add just a few lines to your <code>/etc/hosts</code> file (on Windows 
it’s <code>C:\Windows\System32\drivers\etc\hosts</code>) and you’re well on your way to
Web privacy.</p>

<p>Open up a new tab, and open the Developer Console. Open the Network tab.
Now navigate to your favourite blog, news site, etc. You’ll see each
individual network request that is made from that page listed in the
Network pane of the Developer Console. Scroll through requests and make
note of the domain names you wish to block.</p>

<p>Once you have the list of domain names, simply use your <code>hosts</code> file to
reroute those domains to your local server (<code>127.0.0.1</code>). Here’s an example:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>127.0.0.1     connect.facebook.net
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>127.0.0.1     google-analytics.com www.google-analytics.com
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'>127.0.0.1     platform.twitter.com
</div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'>127.0.0.1     adroll.com a.adroll.com d.adroll.com
</div></div><div data-line='5' class='code-highlight-row numbered'><div class='code-highlight-line'>127.0.0.1     ib.adnxs.com
</div></div><div data-line='6' class='code-highlight-row numbered'><div class='code-highlight-line'>127.0.0.1     googleadservices.com www.googleadservices.com</div></div></pre></div></figure>

<p>In this example, I’ve blocked Facebook, Google Analytics, Twitter, Ad Roll,
Google Ad Services and the unknown &quot;adnxs&quot; service.</p>

<p>Preface each domain name with the address of your local server <code>127.0.0.1</code>
and group each line based on the second-level domain (e.g. <code>adroll.com</code>).
Add each of these lines to your <code>/etc/hosts</code> file (note: this will require
root privileges). Don’t forget to save it when you’re done.</p>

<p>Now navigate to that same site again, with the Network pane still open. You
should now get 404’s or 500’s when you try to access those same domains you
‘blocked’.</p>

<p>For a solution that doesn’t require halting access to these hosts, check
out the Tor project.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Clearing Up Confusion Around baseurl]]></title>
    <link href="http://blog.parkermoore.de/2014/04/27/clearing-up-confusion-around-baseurl/"/>
    <updated>2014-04-27T16:52:54-04:00</updated>
    <id>http://blog.parkermoore.de/2014/04/27/clearing-up-confusion-around-baseurl</id>
    <content type="html"><![CDATA[<p><strong>TL;DR: Don&#39;t use baseurl. It&#39;ll drive you crazy.</strong></p>

<p>Hey, so there&#39;s been a bit of confusion about what the Jekyll configuration
option called <code>baseurl</code> is. Part of the beauty of open-source and of Jekyll
is that there&#39;s a lot of flexibility. Unfortunately, much of this
flexibility doesn&#39;t apply to <code>baseurl</code>. Here&#39;s a quick distillation of its
intentions, and how to use it.</p>

<h2>Mimic GitHub Pages</h2>

<p><code>baseurl</code> was <a href="https://github.com/jekyll/jekyll/commit/4a8fc1fa6e3fa5dc05c81ac5ac4ffed0b0818ac4">originally added back in 2010</a> to allow
&quot;the user to test the website with the internal webserver under the same
base url it will be deployed to on a production server&quot;.<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup> </p>

<h2>Example</h2>

<p>So let&#39;s say I come up with a cool new project. I want to make
documentation for a project I&#39;m working on called &quot;ubiqity&quot;, and I&#39;ll be
deploying it to GitHub Pages as a repo under my username, &quot;@parkr&quot;. Its
documentation will be available at the URL <code>http://parkr.github.io/ubiquity</code>.</p>

<p>In this example, the term &quot;base URL&quot; refers to <code>ubiquity</code>. When I go to
develop my website, I can set the <code>baseurl</code> key to equal <code>ubiquity</code> and
navigate my website from <code>http://localhost:4000/ubiquity/</code>, as though it
were hosted on GitHub Pages. Notice that the only difference here between
development and production is the host: <code>parkr.github.io</code> vs.
<code>localhost:4000</code>.<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup></p>

<h2>Configuring Your Site Properly</h2>

<ol>
<li>Set <code>baseurl</code> in your <code>_config.yml</code> to match the production URL without
the host (e.g. <code>ubiquity</code>, <em>not</em> <code>http://parkr.github.io/ubiquity</code>).</li>
<li>Run <code>jekyll serve -w</code> and go to <code>http://localhost:4000/your_baseurl/</code>,
replacing <code>your_baseurl</code> with whatever you set <code>baseurl</code> to in your
<code>_config.yml</code>, and not forgetting the trailing slash.</li>
<li>Make sure everything works. Feel free to prepend your urls with
<code>site.baseurl</code>.</li>
<li>Push up to your host and see that everything works there, too!</li>
</ol>

<h2>Success!</h2>

<p>You&#39;ve done it! You&#39;ve successfully used <code>baseurl</code> and the world is
wonderful.</p>

<div class="footnotes">
<hr>
<ol>

<li id="fn1">
<p>https://github.com/jekyll/jekyll/pull/235&nbsp;<a href="#fnref1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn2">
<p>The port also differs, but that&#39;s not what&#39;s important here. The point is that everything after the <code>/</code> after the host is the same.&nbsp;<a href="#fnref2" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Always Moving Forward]]></title>
    <link href="http://blog.parkermoore.de/2014/04/03/always-moving-forward/"/>
    <updated>2014-04-03T16:28:07-04:00</updated>
    <id>http://blog.parkermoore.de/2014/04/03/always-moving-forward</id>
    <content type="html"><![CDATA[<p><a href="https://parker.vsco.co"><img src="http://image.vsco.co/1/51c771649686d3572/52d5e979726708dc7c00040f/1024x768/vsco_011414_24.jpg" alt="Emeryville California"></a></p>

<p>Today, I&#39;m proud to announce that I have accepted a job offer from <a href="https://vsco.co/">Visual Supply Co</a>,
a small and happenin&#39; start-up based in the Bay Area. Visual Supply Co,
also known as VSCO, produces the well-loved <a href="https://vsco.co/vscocam">VSCO Cam</a> iPhone
and Android apps, as well as <a href="https://vsco.co/film">VSCO Film</a>, <a href="https://grid.vsco.co">VSCO Grid</a>, and <a href="https://vsco.co/vscokeys">VSCO Keys</a>.
I&#39;ll be working on all things web, including the Grid service and the API.</p>

<p>Super stoked to begin this next chapter in my journey through life working
on a slick series of products with a stellar team. Follow my adventure on
<a href="https://parker.vsco.co">my grid</a>!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fixing Common Mistakes when working with EC2]]></title>
    <link href="http://blog.parkermoore.de/2014/02/04/fixing-common-mistakes-when-working-with-ec2/"/>
    <updated>2014-02-04T00:30:00-05:00</updated>
    <id>http://blog.parkermoore.de/2014/02/04/fixing-common-mistakes-when-working-with-ec2</id>
    <content type="html"><![CDATA[<p>I&#39;m lucky enough this semester to be taking CS 5300 at Cornell, a class entitled
&quot;The Architecture of Large-Scale Information Systems.&quot; For this class, we will
need to know our way around Amazon&#39;s Web Services. I learned a lot about AWS
when I worked at 6Wunderkinder last year, so I was feeling up to the challenge.
Little did I know that the tooling 6W had created around its ops was far
superior to anything else out there.</p>

<p>I already had an AWS account, so my first step was to find a good CLI. I did the
logical thing, and asked Google. Turns out, Amazon ships its own <code>aws</code> client,
written in Python and shipped via <code>pip</code>. Marvelous! I ran <code>pip install aws</code>,
<code>aws configure</code> and presto, I was in business.</p>

<p>Our first question asked us to launch an instance of the AMI <code>ami-bba18dd2</code>, a
simple Fedora distribution. After asking for the man pages for <code>aws</code> in 6
different ways, I got them. I discovered I would need to specify the instance
type and security group as well. So I created a security group and went ahead:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>aws ec2 run-instances <span class="se">\</span>
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>  --image-id ami-bba18dd2 <span class="se">\</span>
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'>  --instance-type t1.micro <span class="se">\</span>
</div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'>  --security-group-ids sg-sgsga888</div></div></pre></div></figure>

<p>Yay, it worked! Ok, now I need to ssh into this bad boy.</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>ssh ec2-la-la-la.amazonaws.com
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>Access denied <span class="o">(</span>publickey<span class="o">)</span>.</div></div></pre></div></figure>

<p>Huh? What&#39;s that all about? I had created a key pair from previous messing
around with EC2. Hm... After a few minutes of puzzlement, I realized I needed
to pass another option to my <code>aws ec2</code> command. Let&#39;s try this again:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="c"># don't forget to terminate old instances!</span>
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>aws ec2 terminate-instances --instance-ids i-1111111
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="c"># now, create the new one</span>
</div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>aws ec2 run-instances <span class="se">\</span>
</div></div><div data-line='5' class='code-highlight-row numbered'><div class='code-highlight-line'>  --image-id ami-bba18dd2 <span class="se">\</span>
</div></div><div data-line='6' class='code-highlight-row numbered'><div class='code-highlight-line'>  --instance-type t1.micro <span class="se">\</span>
</div></div><div data-line='7' class='code-highlight-row numbered'><div class='code-highlight-line'>  --security-group-ids sg-sgsga888 <span class="se">\</span>
</div></div><div data-line='8' class='code-highlight-row numbered'><div class='code-highlight-line'>  --key-name parker</div></div></pre></div></figure>

<p>Booted! Now, let&#39;s try to ssh again:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>ssh ec2-li-la-le.amazonaws.com
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>Access denied <span class="o">(</span>publickey<span class="o">)</span>.</div></div></pre></div></figure>

<p>Bollocks! Looks like I am still missing something...</p>

<p>Ah! After taking a look at a tutorial, I realize I need to login as <code>ec2-user</code>.
Let&#39;s give this one more try:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>ssh ec2-user@ec2-li-la-le.amazonaws.com
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>Last login: Tue Feb  4 05:13:24 2014 from cpe-88-88-88-88.twcny.res.rr.com
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'> </div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'>       __|  __|_  <span class="o">)</span>
</div></div><div data-line='5' class='code-highlight-row numbered'><div class='code-highlight-line'>       _|  <span class="o">(</span>     /   Amazon Linux AMI
</div></div><div data-line='6' class='code-highlight-row numbered'><div class='code-highlight-line'>      ___|<span class="se">\_</span>__|___|
</div></div><div data-line='7' class='code-highlight-row numbered'><div class='code-highlight-line'> </div></div><div data-line='8' class='code-highlight-row numbered'><div class='code-highlight-line'>https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/
</div></div><div data-line='9' class='code-highlight-row numbered'><div class='code-highlight-line'>7 package<span class="o">(</span>s<span class="o">)</span> needed <span class="k">for </span>security, out of 25 available
</div></div><div data-line='10' class='code-highlight-row numbered'><div class='code-highlight-line'>Run <span class="s2">"sudo yum update"</span> to apply all updates.
</div></div><div data-line='11' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="o">[</span>ec2-user@ip-10-9-162-71 ~]<span class="err">$</span></div></div></pre></div></figure>

<p>YES! I did it. Ok, so lessons:</p>

<ol>
<li>Login as <code>ec2-user</code>, not as <code>albie</code> or any other name.</li>
<li>Make sure you specify the <code>key-name</code> for the instance(s) you want to launch.</li>
<li>Always err on the side of being more specific. Defaults can be bad.</li>
<li>Always terminate once you&#39;re done using the box.</li>
</ol>

<p>Simple fixes for problems that seem so intractible.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Installing Command-T with OS X Maverick's Built-In Vim]]></title>
    <link href="http://blog.parkermoore.de/2014/01/02/installing-command-t-with-os-x-mavericks-built-in-vim/"/>
    <updated>2014-01-02T01:03:00-05:00</updated>
    <id>http://blog.parkermoore.de/2014/01/02/installing-command-t-with-os-x-mavericks-built-in-vim</id>
    <content type="html"><![CDATA[<p>I was fortunate enough to, just today, pick up a new computer. My first hardware
in over 4 years, I had been holding off. Once my trusty MacBook Pro bit the dust
last night and I found out the repair cost was extraordinary, I bit the bullet.</p>

<p>So, you&#39;re probably in a similar place. You relatively recently got a shiny new
Macintosh and you&#39;re so excited to start writing code and making a difference
with those skillz of yours. Except one this is missing: <a href="https://github.com/wincent/Command-T">Command-T</a>.</p>

<p>Lucky for you, sir, I am here to help. OS X Maverick&#39;s built-in vim distribution
comes with Ruby support already (which it needs for Command-T) so you&#39;re good
there. Now you need to download and compile Command-T. Should be easy, right?
Well, not quite.</p>

<p>Mavericks was notable for Ruby users because it ships with Ruby 2.0. All
previous versions that I had ever used shipped with 1.8.7 so this was a huge
bonus. Problem is, your pre-installed vim wasn&#39;t compiled with 2.0.0, it was
compiled with 1.8.7.</p>

<p>To check this, run the following in vim in NORMAL mode:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>:ruby puts "#&#x7b;RUBY_VERSION&#x7d;-p#&#x7b;RUBY_PATCHLEVEL&#x7d;"</div></div></pre></div></figure>

<p>For me, that output <code>1.8.7-p358</code>. So that means the Ruby verison that vim is
using is <code>1.8.7-p358</code>, and we need to compile Command-T with that version. To do
so, install it:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>rbenv install 1.8.7-p358</div></div></pre></div></figure>

<p>Boom! Now download and install Command-T:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>git clone https://github.com/wincent/Command-T.git ~/.vim/bundle/Command-T
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span><span class="nb">cd</span> ~/.vim/bundle/Command-T <span class="c"># for tpope's Pathogen</span>
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>rbenv <span class="nb">local </span>1.8.7-p358
</div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>rbenv rehash
</div></div><div data-line='5' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>gem install bundler
</div></div><div data-line='6' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>bundle install
</div></div><div data-line='7' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="gp">$ </span>bundle <span class="nb">exec </span>rake make</div></div></pre></div></figure>

<p>Aaaaand boom, you&#39;re done. Open up <code>vim</code> and type your leaderkey then <code>t</code> (for
me, that&#39;s <code>,t</code>) to launch the prompt.</p>

<p>If you get a weird SIGTERM error when you launch <code>vim</code>, then you installed
Command-T with the wrong Ruby version. Remove <code>ruby/command-t/ext.bundle</code> and
try again.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fixing Memory Issues in Dokku hosted on DigitalOcean 512MB Droplet]]></title>
    <link href="http://blog.parkermoore.de/2013/12/21/fixing-memory-issues-in-dokku-hosted-on-digitalocean-512mb-droplet/"/>
    <updated>2013-12-21T12:23:00-05:00</updated>
    <id>http://blog.parkermoore.de/2013/12/21/fixing-memory-issues-in-dokku-hosted-on-digitalocean-512mb-droplet</id>
    <content type="html"><![CDATA[<p>As many other Heroku customers, I rejoiced when <a href="https://github.com/progrium/dokku">Dokku</a> was released. To have
complete freedom to host as many apps with whatever databases or other plugins
I wanted -- all for the cost of a small VM -- was wonderful news.</p>

<p>I decided, for cost&#39;s sake, to boot up one of those famed $5 <a href="https://digitalocean.com">DigitalOcean</a>
Droplets. I didn&#39;t see that DigitalOcean provides an &quot;app&quot; for Dokku, so I
created a vanilla box of Ubuntu 13.04 and pressed on. I got everything up and
running and went to go deploy my first app, only to see this when I ran
<code>git push</code>:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>runtime: panic before malloc heap initialized
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>fatal error: runtime: cannot allocate heap metadata</div></div></pre></div></figure>

<p>Well, golly, that sure is unhelpful. Looks like 512MB doesn&#39;t cut it. Luckily,
we can avoid paying the extra $5/mo for the 1GB version by running the following
as <code>root</code>:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>dd <span class="k">if</span><span class="o">=</span>/dev/zero <span class="nv">of</span><span class="o">=</span>/extraswap <span class="nv">bs</span><span class="o">=</span>1M <span class="nv">count</span><span class="o">=</span>512
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>mkswap /extraswap</div></div></pre></div></figure>

<p>Then adding the following to your <code>/etc/fstab</code> file so the swap persists between
reboots:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>/extraswap         none            swap    sw                0       0</div></div></pre></div></figure>

<p>Then run this to enable <code>/extraswap</code> for swapping:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>swapon -a</div></div></pre></div></figure>

<p>Boom. Now re-run <code>git push</code> and you&#39;re in business. Magic!</p>

<p>Credit goes to the brilliant <a href="https://github.com/dhassler">@dhassler</a> for <a href="https://github.com/dotcloud/docker/issues/1555#issuecomment-22874190">the idea and the code</a>. Just
thought I&#39;d share and preserve for my own benefit in the future.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Taking Over Someone Else's Open-Source Project]]></title>
    <link href="http://blog.parkermoore.de/2013/11/04/taking-over-someone-elses-open-source-project/"/>
    <updated>2013-11-04T21:23:00-05:00</updated>
    <id>http://blog.parkermoore.de/2013/11/04/taking-over-someone-elses-open-source-project</id>
    <content type="html"><![CDATA[<p>Last December (2012), <a href="http://tom.preston-werner.com">Tom Preston-Werner</a> granted me <a href="http://blog.parkermoore.de/images/mojombo-added-parkr-to-jekyll.png">push &amp; pull access to
mojombo/jekyll</a>. I had written a <a href="http://blog.parkermoore.de/2012/12/11/an-open-letter-to-tom-preston-werner/">letter to Tom about the future of Jekyll</a>
and after a bit of persistence on my part, he relented:</p>

<p><img src="http://blog.parkermoore.de/images/mojombo-added-parkr-to-jekyll.png" alt="mojombo added parkr to mojombo/jekyll"></p>

<p>After a somewhat lengthy (and <a href="http://blog.parkermoore.de/images/jekyll-shall-inherit-the-earth.png">amusing</a>) conversation via Skype, I knew what
Tom&#39;s priorities were for the project and where I could help. I started off
trimming down the number of open issues. At the time, they numbered just over 300.
After a quick visit to Buffalo to tackle some issues with <a href="http://quaran.to">Nick Quaranto</a> at a
Buffalo <a href="http://openhack.github.io">OpenHack</a> meetup at <a href="http://coworkbuffalo.com">CoworkBuffalo</a>, we were down to fewer than 200
open issues. I continued to work through them (much to my parents&#39; dismay) all
through Winter Break. I was making good progress in the triage process: I knew
what many of the problems were with v0.12.1 and was formulating ideas about how
we might go about fixing them.</p>

<p><img src="http://blog.parkermoore.de/images/jekyll-shall-inherit-the-earth.png" alt="jekyll shall inherit the earth"></p>

<p>In January, I flew out to San Francisco to visit my sister for a week. I setup a
meeting with Tom to talk more about Jekyll and a plan for moving forward to a
v1.0.0 release. After about an hour or so at GitHub&#39;s office in SoMa, talking
through various PR&#39;s, Tom said I could start merging pull requests.</p>

<p>Consultation with Tom was challenging (he runs a multi-million dollar company
after all), as it was increasingly difficult for him to find time for Jekyll.
Despite <a href="https://github.com/mojombo/jekyll/issues/578#issuecomment-11414645">announcing that he was going to commit some of his &quot;20% time&quot; to Jekyll</a>,
he eventually abandoned that as impractical. As time went on, I received fewer
replies to my emails and eventually stopped sending anything that didn&#39;t
absolutely <em>require</em> Tom&#39;s input.</p>

<p>In March, I knew I needed more help. Tom wasn&#39;t able to give much time and I
was trying to tackle this project alone. I had noticed that <a href="http://mattr.info">Matt Rogers</a>
shared my vision for Jekyll, so I asked Tom to add him on as a contributor to
the repo. By v1.0.3, he had started merging pull requests like a BAW$ and was
the sanity to my ridiculously-obsessed, inexperienced mind. Since Matt joined, I
haven&#39;t really heard much from Tom. I write the occasional email and get the
occasional reply but he&#39;s essentially phased out of the normal development of
Jekyll. Matt &amp; I have essentially taken over the project altogether.</p>

<p>By May, we were ready to ship v1.0.0. With the help of all the amazing
contributors, Matt, and my many mentors along the way, I finally ran
<code>rake release</code> for 1.0. The project was ours.</p>

<p>Since realizing that this product has few constraints outside of those I&#39;ve
constructed for it in my mind (no one is going to tell me, &quot;No, you may not
implement that feature or add that enhancement&quot; without a valid argument as to
my solution&#39;s invalidity), I&#39;ve been thinking about what it means to take over
someone else&#39;s project. <a href="https://github.com/mojombo/jekyll/commit/d189e05d236769c1e5594af9db4d6eacb86fc16e">Jekyll is 5 years old.</a> I wasn&#39;t there in 2008 when
it was first born as <code>autoblog</code>. Jekyll has changed a lot, as has its vision and
purpose. It&#39;s used by lots of people now, whether via <a href="http://pages.github.com">GitHub Pages</a> or
locally.</p>

<p>Taking over someone else&#39;s project takes a deep understanding of what the
project is and what it should be. As much as I wish Jekyll could make me
kräuterquark, that&#39;s outside the scope of the project. Developing that lens is
crucial when taking over someone else&#39;s project.</p>

<p>Mentoring on the part of the original owner/previous maintainer(s) is
exceedingly significant in the development of this critical lens. I am so
grateful that I was able to meet up with Tom back in January and to have some
amount of input from him as I understood what the project should be.</p>

<p>It would be ill-advised to take over someone else&#39;s project without a partner.
Once Matt joined the team, Tom was able to step back into a much lesser role.
If I had tried to do what I did without any guidance (or at least sanity
checks), Jekyll v1.0.0 would have been a complete shit-show.</p>

<p>Trust in the community must also be earned. If people highly doubted my ability
to handle Jekyll, Tom would have likely removed me and found a replacement. I
argued a lot and got into some pretty heated debates at the beginning. There
were a couple people who didn&#39;t share the vision that I had inherited from Tom
and stopped contributing to the project altogether. I feel like we now have a
pretty great community around Jekyll and are able to help each other out and
share cool plugins and sites that we made for/with Jekyll.</p>

<p>Taking over someone else&#39;s open-source project was new terrain for me in
December, and still is today. It can be successful with the right amount of
mentoring and gradual removal of trusted feedback by the previous maintainer(s).</p>

<p>With some old projects that are brought back to life by the passing of the
torch, the new maintainers are able to experience the added bonus of feeling
like Frankenstein, which, I will say, is a pretty cool feeling.</p>

<p><img src="http://blog.parkermoore.de/images/it-lives.jpg" alt="igor"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fix the Government: Open-Source Legislation]]></title>
    <link href="http://blog.parkermoore.de/2013/10/22/fix-the-government-open-source-legislation/"/>
    <updated>2013-10-22T19:45:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/10/22/fix-the-government-open-source-legislation</id>
    <content type="html"><![CDATA[<p><em>The following post was first written for a class at Cornell University taught
by Phoebe Sengers called &quot;Designing Technologies for Social Impact&quot;.</em></p>

<hr>

<p>We have a rather significant problem in the U.S. Indeed, our government seems to
be malfunctioning in a rather obvious and irresponsible way. The question of
today is simply: can it be fixed? If so, how?</p>

<p>One must first examine the problem and its root cause. The problem of
malfunction is most basically the conflict of multiple competing interests
without proper ideological or procedural basis for dialogue. The root cause of
this is that the existing platforms for dialogue (meetings, letters, rallies,
news spots) are severely outdated. What worked pre-internet is not passing the
test of time.</p>

<p>In particular, the legislative process is slow, dilapidated, and closed. This
leads to laws with earmarks and loopholes, confusing language and unnecessary
provisions. What if the law were made out in the open, for everyone to see, the
way open-source software is made? Version control and online access to bills
in-the-works as well as laws would certainly improve transparency. The Library
of Congress runs a system called THOMAS which is updated about daily, but the
bills aren&#39;t organized logically and the user interface is fair at best.</p>

<p>The open-source legislation system envisioned here is based on an open-source
software system called GitHub. GitHub is setup like so: users and organizations
own repositories of code, text or binary documents. Each repository contains the
entire history of a particular set of documents as well as the &quot;master&quot; version,
or the latest repository-owner(s)-approved version of the document(s). Each
repository uses a version control system called git to keep track of the
information about the documents it contains: current versions as well as
previous versions. What is unique about this system, and the incredible strength
it offers for open legislation, is the concept of a &quot;diff&quot;. A &quot;diff&quot; is simply
the difference between a document at one point in time (referred to as a
&quot;revision&quot;) and the same document at a different point in time. Each repository
can be &quot;forked&quot; (cloned to a user&#39;s own profile for editing) by a user; this
offers the most significant freedom of open-source, which is that anyone has the
freedom to modify a copy of the source and suggest changes to the main project
based on those derivative works. In GitHub parlance, the suggestion for a change
is called a &quot;pull request,&quot; but this term need not be adopted by this new
system.</p>

<p>To illustrate the design of the ideal system:</p>

<ol>
<li>Use git derivative for prose editing, rather than (line-by-line) code editing</li>
<li>Be online, accessible by anyone</li>
<li>Offer input from anyone in any form (suggested changes or just comments)</li>
<li>Do not make differentiation between users other than repository owner &amp;
non-owner (those with direct access to the repository and those who can fork
and suggest changes, but can&#39;t incorporate those changes themselves)</li>
<li><p>Each repository is a proposed bill owned by the deciding body at the given
time during the legislative process as dictated by the U.S. Constitution.
Each repository contains a text file for each sub-segment of the proposed
bill as well as a rationale or goal, e.g.
 . (root)
 |
 |-- README.txt (rationale, goal(s) of bill, and other meta info)
 |-- section01.txt
 |-- section02.txt
 |
 ...</p></li>
<li><p>The entire process of the creation and formulation of the law is public and
open insofar as the culture can push for this</p></li>
<li><p>Moderator of some sort to ensure comments are productive (usually repo
owner). All of the comments that are hidden still exist inline and can be
shown by any reader of the comment thread</p></li>
<li><p>Membership of individual lawmakers in committees and other larger bodies
reflected in membership of organization accounts on the platform, which gives
them access to directly changing the legislation they have access to through
their organizational memberships</p></li>
<li><p>Offer &quot;points of interest&quot; as a means of discussion about a particular aspect
of a bill without the need to suggest changes. Can ask anything from &quot;why is
this section worded this way?&quot; to &quot;what are the implications of this on
agricultural development in Upstate New York?&quot; No question is too dumb and
all of them require an answer insofar as they are productive and relevant.</p></li>
<li><p>Easy citation of preexisting laws and other bills to allow for discussion
surrounding conflict or other interference</p></li>
<li><p>Access to signing letters written by President (usually interpretations of
pieces of the law for purposes of execution of the law)</p></li>
<li><p>Easy viewing of votes on final versions of bills (who, when, did it pass?,
etc)</p></li>
<li><p>Means of mentioning lawmakers in a comment if comment is directed at them,
or question is asked directly of them</p></li>
<li><p>Links to more information about execution by Executive &amp; other related
policy/law</p></li>
<li><p>Comments and changes can only be created from user accounts, e.g. David
Skorton can suggest a change, but Cornell University cannot.</p></li>
<li><p>Users can subscribe to updates from a bill repository and receive all
information about changes that are made and discussions that occur.</p></li>
</ol>

<p>One negative aspect of this approach is volume and the issues that come
therefrom (see: student&#39;s answer on Piazza page linked to below). As the number
of collaborators grows, the ability for those with direct access to the bills to
handle suggestions for modification is greatly diminished. How are the interests
of the few vs. those of the many weighed (e.g. individual comment vs comment from
organization such as NAACP)? From the perspective of the way government works
already, aides of the legislators who have access to the repositories will also
have mirrored access to accept and discuss changes and questions from citizens.
As each law is its own repository, the load is distributed over the many
hundreds of bill repositories being considered. Additionally, Nissenbaum &amp;
Benkler discuss the idea of self-selection and volunteerism as an element of
open-source. This applies very much so to the scalability of open-source
legislation and responses to citizens. If a citizen is not interested in a
particular bill, that citizen will not involve himself or herself with the
creation of that bill. This self-selection will greatly reduce the number of
individuals with whom the maintainers of the bills will have to contend with in
discussion about a bill and suggestions for change.</p>

<p>Ultimately, this idea is predicated on the idea that citizens, when given the
right tools, can reach compromise and have productive discussions to &quot;get the
job done&quot; efficiently and accurately.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[It's Just Semantics: App.net Alpha]]></title>
    <link href="http://blog.parkermoore.de/2013/09/16/its-just-semantics-app-dot-net-alpha/"/>
    <updated>2013-09-16T19:53:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/09/16/its-just-semantics-app-dot-net-alpha</id>
    <content type="html"><![CDATA[<p>This post was originally written as an assignment for <a href="http://courses.cornell.edu/preview_course.php?catoid=12&amp;coid=90680">INFO 2450: Communication
&amp; Technology</a> taught by Professors <a href="http://infosci.cornell.edu/faculty/jeffrey-hancock">Jeff Hancock</a> and <a href="http://communication.cals.cornell.edu/people/drew-margolin">Drew Margolin</a> in
Fall 2013. The course focuses heavily on design of technologies. The assignment
asked for an evaluation of an online application or product based on the
principles outlined in Donald Norman&#39;s <a href="http://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/0465067107">&quot;The Design of Everyday Things&quot;</a>. It&#39;s
a very basic look at the technology, but I thought I&#39;d share it anyhow.</p>

<hr>

<p>App.net is a social platform designed from the beginning to be nothing more than
a platform for developers to build great social apps upon. This blog post will
be about the very first application built upon App.net, called Alpha. App.net
will henceforth be referred to as &quot;ADN.&quot;</p>

<p>The main purpose of Alpha is to demonstrate the ADN API in a somewhat familiar
way. Alpha behaves much the way Twitter does: a user creates posts, users can
follow other users and interact with them in the familiar way. The divergence
from Twitter (and other &quot;microblogging&quot; social applications) is twofold: a user
pays for his or her account, and the posts may be longer.</p>

<p>By asking the user to pay for an ADN account (which is used by Alpha as the
poster&#39;s identity), the normal business incentives shift from building an
application (or platform) which optimizes for advertisement revenue to an
application (or platform) which optimizes for the happiness of the user (if
users like to use the service, they will continue to pay the $5/month or
$32/year). Twitter, Facebook, and Google are well-known for accepting user
detriment (in terms of the virtual design of the products) for greater
advertisement revenue. This is not the case with ADN (and by extension, with
Alpha).</p>

<p>On Alpha, posts may be up to 256 characters long and users can choose to attach
media to their posts. The &quot;@&quot; symbol is used to mention another user (the other
user receives a notification when this happens) and the &quot;#&quot; is used to denote
topics. With the longer character limit, one could easily surmise that Alpha is
attempting to make having asynchronous, open conversations online a bit easier.
The openness of being able to write anyone (divergence from Facebook) coupled
with the 256 character limit (a physical constraint) (divergence from Facebook,
and extension of Twitter&#39;s idea that a post should be &quot;bite-sized&quot;) produce a
fantastic application for having chats with anyone about anything in a way
conducive to conciseness and to expressiveness. One common frustration with
Twitter is that conversations on it are very challenging, as 140 characters is
far too few to really say anything substantive. ADN hopes to remedy this
problem, and in my experience, arguments (and general discussions, for that
matter) have been incredibly easy and productive.</p>

<p><img src="http://blog.parkermoore.de/images/app-net/app-net-alpha-feed.png" alt="Screenshot of alpha.app.net"></p>

<p>Above, you see the home screen of Alpha (namely, mine). This shows the user&#39;s
stream. The search box and post box (based on their physical attributes) afford
writing. The change of the &quot;POST&quot; button from grey to a nice deep red-orange
highlights a change of the mapping from a button that may not be pressed to one
that may be pressed (I would consider the change itself feedback). As the user
types in a post, the number (shown here as &quot;256&quot;) decreases by one for each
character that is typed into the box above it, providing very valuable feedback
about the user&#39;s actions. This number&#39;s presence also provides visibility for
the physical constraint placed on the size of the posts allowed in the service.
The buttons on the right of each post afford clicking and change color
(feedback) when clicked. All of the aforementioned design elements, in addition
to the placement of the post box at the top, suggest that the application is
trying to get the user to submit content to his or her stream. The feed below
seems to indicate that the application wishes for perusal and interaction of
other users&#39; posts by the logged-in user.</p>

<p><img src="http://blog.parkermoore.de/images/app-net/app-net-alpha-post.png" alt="Screenshot of a singular post"></p>

<p>As you saw above, each post is given its own box. There are 5 interactions which
only show up when the user mouses-over the post: &quot;Discussion,&quot; &quot;Reply,&quot; &quot;via
(app),&quot; &quot;Mute User,&quot; and &quot;Report&quot;. In order to better facilitate the app&#39;s goal
of interaction, it would make sense for the &quot;Discussion&quot; and &quot;Reply&quot; buttons to
always be shown. This would improve the visibility of the interaction paradigms
and afford interaction without the user making the first move (to mouseover).</p>

<hr>

<p>That&#39;s it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Launching a Rails Console with Capistrano]]></title>
    <link href="http://blog.parkermoore.de/2013/08/07/launching-a-rails-console-with-capistrano/"/>
    <updated>2013-08-07T20:36:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/08/07/launching-a-rails-console-with-capistrano</id>
    <content type="html"><![CDATA[<p>If you&#39;re using the popular Capistrano web deployment framework, you will likely
have wished you had an easy way to perform a quick task in the production rails
console on one of your servers. Many thanks to
<a href="https://github.com/colszowka">@colszowka</a> for <a href="https://gist.github.com/benedikt/1115513#comment-576015">this
solution</a>:</p>

<p><strong>NOTE</strong>: This is for Capistrano v2. Things are different for v3.</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="n">namespace</span> <span class="ss">:rails</span> <span class="k">do</span>
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="n">desc</span> <span class="s2">"Remote console"</span>
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="n">task</span> <span class="ss">:console</span><span class="p">,</span> <span class="ss">:roles</span> <span class="o">=&gt;</span> <span class="ss">:app</span> <span class="k">do</span>
</div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'>    <span class="n">run_interactively</span> <span class="s2">"bundle exec rails console </span><span class="si">#&#x7b;</span><span class="n">rails_env</span><span class="si">&#x7d;</span><span class="s2">"</span>
</div></div><div data-line='5' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="k">end</span>
</div></div><div data-line='6' class='code-highlight-row numbered'><div class='code-highlight-line'> </div></div><div data-line='7' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="n">desc</span> <span class="s2">"Remote dbconsole"</span>
</div></div><div data-line='8' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="n">task</span> <span class="ss">:dbconsole</span><span class="p">,</span> <span class="ss">:roles</span> <span class="o">=&gt;</span> <span class="ss">:app</span> <span class="k">do</span>
</div></div><div data-line='9' class='code-highlight-row numbered'><div class='code-highlight-line'>    <span class="n">run_interactively</span> <span class="s2">"bundle exec rails dbconsole </span><span class="si">#&#x7b;</span><span class="n">rails_env</span><span class="si">&#x7d;</span><span class="s2">"</span>
</div></div><div data-line='10' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="k">end</span>
</div></div><div data-line='11' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="k">end</span>
</div></div><div data-line='12' class='code-highlight-row numbered'><div class='code-highlight-line'> </div></div><div data-line='13' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="k">def</span> <span class="nf">run_interactively</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span>
</div></div><div data-line='14' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="n">server</span> <span class="o">||=</span> <span class="n">find_servers_for_task</span><span class="p">(</span><span class="n">current_task</span><span class="p">).</span><span class="nf">first</span>
</div></div><div data-line='15' class='code-highlight-row numbered'><div class='code-highlight-line'>  <span class="nb">exec</span> <span class="sx">%Q(ssh </span><span class="si">#&#x7b;</span><span class="n">server</span><span class="p">.</span><span class="nf">host</span><span class="si">&#x7d;</span><span class="sx"> -t 'cd </span><span class="si">#&#x7b;</span><span class="n">current_path</span><span class="si">&#x7d;</span><span class="sx"> &amp;&amp; </span><span class="si">#&#x7b;</span><span class="n">command</span><span class="si">&#x7d;</span><span class="sx">')</span>
</div></div><div data-line='16' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="k">end</span></div></div></pre></div></figure>

<p>And, <em>vòila</em>! Run <code>cap rails:console</code> and you&#39;re in business.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Dealing with Distraction]]></title>
    <link href="http://blog.parkermoore.de/2013/05/30/dealing-with-distraction/"/>
    <updated>2013-05-30T15:56:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/05/30/dealing-with-distraction</id>
    <content type="html"><![CDATA[<p>Dealing with distraction for those of us who live with AD(H)D is a constant struggle, and
can be especially difficult for those of us who must daily solve large, complex problems.
This post describes what it is like to be a programmer with ADD and some strategies I&#39;ve
developed to help make myself more effective.</p>

<p>To solve complex problems by programmatic means, one needs to be able to focus. To find
the best solution to any problem, one needs to be able to focus. In short, an effective
worker is one who can focus.</p>

<p>For those of us who live with the difficulties of AD(H)D every day, this fact - this
dependence upon a kind of mental discipline - is glaringly obvious. Our constant struggle
to focus means we are not as efficient as our non-ADD peers when asked to complete a
single task. We get distracted by the sound of the wind, the tap of a colleague&#39;s fingers
on his desk, or the sound of people talking walking past our window. The slightest noise
or change (by a separate entity) in the visual landscape will cause us to loose our train
of thought nearly immediately.</p>

<p>For those of you who can focus relatively easily in distracting environments, I offer this
metaphor to help you understand a bit more of how it is it live with such an affliction.
Imagine you are swimming in a lake with a basketball. The depth at which you swim is your
level of concentration - the deeper you swim, the more focused you are and thus the less
susceptible to distraction you are. Imagine further that a day&#39;s worth of work is like
swimming the length of the lake, and your goal is to swim as deeply as possible for as
far as possible. The problem is that you have to do all this while holding onto the
fully-inflated basketball. The longer you swim underwater, the harder it is to keep the
ball (and yourself) deep underwater. During your swim from one end of the lake to the
other, you are pulled up to the surface very frequently, only able to keep the ball
underground for a short while at a time. This is what it&#39;s like to live and work with ADD.</p>

<p>The inability to focus on a given problem for more than a few minutes at a time causes
severe problems for all employees with ADD, but especially for developers who have to
delve into a problem, process it, and produce a solution quickly and efficiently.</p>

<p>The effectiveness of various solutions will vary person to person, but these helped me:</p>

<ul>
<li>Find a quiet, solitary place to work (avoid working in a place where people socialize)</li>
<li>Turn off all notifications when working (fetch updates at will instead)</li>
<li>Play calm, simple music without words, or work in a place where the background noise
doesn&#39;t change</li>
<li>Keep the room cool in temperature</li>
<li>Work on one thing at a time and work until it is completed</li>
<li>Plan out finer details for a large project</li>
<li>Get enough sleep</li>
<li>Medicate with some sort of stimulant</li>
<li>Keep your workspace empty of clutter and visual distraction</li>
<li>Keep snacks by your desk (like almonds or dried fruits) to keep your energy up
throughout the day</li>
<li>Exercise to exhaustion at least every other day</li>
<li>Consciously avoid doing several things at once, like listening to a YouTube Lecture and
checking your Twitter feed on your phone at the same time</li>
<li>Avoid depressants like alcohol</li>
<li>Write or engage in a creative, exciting activity which asks for your full concentration</li>
</ul>

<p>Following all of these with ADD can even be a challenge, but limiting the frequency of
distracting stimuli goes a long way to achieving focus and increasing your productivity.</p>

<p>If you have other suggestions, hit me up on <a href="http://alpha.app.net/parkr">ADN</a> or
<a href="http://twitter.com/parkr">Twitter</a>. How do you cope with distractions?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Get Rid of Senate Prayer]]></title>
    <link href="http://blog.parkermoore.de/2013/05/09/get-rid-of-senate-prayer/"/>
    <updated>2013-05-09T18:17:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/05/09/get-rid-of-senate-prayer</id>
    <content type="html"><![CDATA[<p>Earlier today, I was watching a <a href="http://www.c-spanvideo.org/program/SenateSession4967">C-SPAN video</a> of a U.S. Senate session on
February 1, 2012. This was the first time I had ever watched a Senate session
from the beginning and, to my surprise, they began with a prayer.</p>

<p>Hold up. A prayer? In a session of one of our government&#39;s highest legislative
bodies?! I suppose I shouldn&#39;t be too surprised, what with the (often crazy)
Religious Right getting after the government with Bible-backed policies and
all. It was nevertheless astonishing to see the institutionalization of religion
in our government.</p>

<p>I generally like our government, but this changes everything. Man, I was angry.
I felt betrayed and undermined - like I was worth nothing to anyone in D.C.</p>

<p>So I wrote to my senators:</p>

<blockquote>
<p>Dear Senator,</p>

<p>I wish to ask for the Senator&#39;s thoughts on the opening prayer which begins a
Senate session. I have done my research and see that this prayer has been a
part of Senate procedure since 1789 and was recommended by Benjamin Franklin
about two years previous, but I question its place in our secular government.
It is, frankly, inappropriate that any governmental body in our United States
of America be so closely tied to one religious creed in a nation with many
hundreds and thousands of religious belief systems. I will not deny that
religion is a part of politics - a belief in a certain religious creed often
results in an election win - but it has absolutely no place in governance.
It is insulting to think that any one religion is given special treatment in
our governments.</p>

<p>I ask the Senator to introduce a bill which will put an end to this Senate
Prayer, for, while Mr. Franklin may have been right in 1789, he is most
certainly wrong now. We have moved past a blind reliance on God, and it is,
now more than ever, a hindrance on our Great Government.
God&#39;s interference in our government has forced limited civil rights for
minorities, was a rationale for slavery, and is still fighting against a
Woman&#39;s Right to Choose, a Citizen&#39;s Right To Marry Whomever He or She Wishes,
Scientific Advancement in many fields and so on.</p>

<p>It is our imperative as citizens to think of each other first and to respect
the different viewpoints and beliefs of our fellow Americans. Honoring any
religion on our Senate floor is a betrayal of this principle, and it must be
stopped.</p>

<p>Thank you,<br />
Parker Moore<br />
Constituent</p>
</blockquote>

<p>If you care about religious freedom at all, I would urge you to do the same.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Jekyll 1.0 Released]]></title>
    <link href="http://blog.parkermoore.de/2013/05/06/jekyll-1-dot-0-released/"/>
    <updated>2013-05-06T00:59:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/05/06/jekyll-1-dot-0-released</id>
    <content type="html"><![CDATA[<p>Today, I&#39;m proud to announce the release of Jekyll 1.0. There are a million
goodies and fixes to enjoy, and we&#39;re (the still-active Jekyll core team
members: Tom, Matt and I) really excited to share this first major release
with you. Be sure to follow <a href="http://twitter.com/jekyllrb">@jekyllrb</a> for
updates on future releases and links to cool plugins.</p>

<p>Some quick highlights:</p>

<ul>
<li>New subcommands: new, build, serve, and import</li>
<li>Amazing new docs at http://jekyllrb.com (thanks to @cobyism)</li>
<li><code>jekyll new</code> creates a new scaffold so you can get blogging even faster</li>
<li>Drafts, i.e. posts without dates</li>
<li>New &quot;excerpt&quot; feature on posts</li>
<li>Timezone configuration</li>
<li>&#39;gist&#39; liquid tag</li>
<li>Source directory protection</li>
</ul>

<p>... and <a href="https://github.com/mojombo/jekyll/blob/v1.0.0/History.txt">so much more</a>!</p>

<p>We also have an <a href="http://jekyllrb.com/docs/upgrading/">Upgrading</a> page that clarifies
some breaking changes and tips for upgrading to Jekyll 1.0.</p>

<p>As many of you know, Jekyll lay mostly stagnant for quite some time. At 0.11.2 and
0.12.0, it was pretty stable. It had some annoying bugs, but nothing much that
couldn&#39;t be worked around or monkey-patched.</p>

<p>After using Jekyll last summer to help build
<a href="http://cals.cornell.edu">Cornell&#39;s College of Agriculture and Life Sciences website</a>,
I took a renewed interest in seeing this project move forward. Last December,
Tom answered my offers to help with the development of Jekyll by adding me as
a contributor. I&#39;m happy to say that it has come a long way since then, and
I&#39;m very proud to be a part of a team that has pushed this project to new heights.</p>

<p>Thank you to everyone who submitted a pull request, and/or gave me advice along
the way. It has been great fun so far, and I look forward to working with you
all to push out future versions!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[An Afterlife?]]></title>
    <link href="http://blog.parkermoore.de/2013/04/30/an-afterlife/"/>
    <updated>2013-04-30T19:00:00-04:00</updated>
    <id>http://blog.parkermoore.de/2013/04/30/an-afterlife</id>
    <content type="html"><![CDATA[<p>I am not a religious man, yet I find myself curious about the prospect of an afterlife. Is
there something beyond this life, in this dimension, in this universe? While I don&#39;t believe
in the traditional conception of an afterlife (one&#39;s soul ascends to a blissful place, where
it inhabits all space and time for eternity), I do like to think we live on beyond the
time we take our last breath.</p>

<p>In ninth grade, I graduated to a Sunday School class which resembled a forum &mdash;
discussion-based learning. A retired history teacher, a Public Defender, and a social
worker led the discussions in this class. The dialogue probed our most deeply held beliefs
and asked profound questions about  life, spirituality, goodness, happiness, beauty, and
other similar topics.</p>

<p>One day, we were discussing the afterlife. The normal answers dominated the conversation:
&quot;When one dies, one&#39;s soul ascends into Heaven to be with one&#39;s family members and with
God,&quot; and &quot;We exist everywhere and with everyone. We watch over those we love and help
them live good lives.&quot; When the question came to me, I wasn&#39;t sure how to respond. Can an
atheist believe in an afterlife? If so, did I?</p>

<p>I hadn&#39;t given it much thought before, but I pondered it for a moment and concluded, &quot;An
individual&#39;s afterlife is the culmination of the memories others have of the individual.
It is the legacy that individual leaves behind and the impact that individual had on those
he or she encountered.&quot;</p>

<p>The more I thought about it, the more it made sense. If we don&#39;t have souls, how do we
explain this legacy of the afterlife concretely? The afterlife is not something experienced
by the deceased individual, but by everyone else he or she impacted.</p>

<p><span class='pullquote-right' data-pullquote='&#8220;They say you die twice, once when your
heart stops beating, and again when your name is said for the last time.&#8221;'>
I have not yet met anyone else who holds this belief I hold, but I invite you to explore
it and see of you can reconcile it with your beliefs about the afterlife. Banksy once
famously said (paraphrased by a friend): &quot;They say you die twice, once when your
heart stops beating, and again when your name is said for the last time.&quot; I can&#39;t
believe there is something I will experience beyond my death, but I can believe that
others will experience their memories of me beyond my departure from this world.
</span></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[We Mustn't Idle]]></title>
    <link href="http://blog.parkermoore.de/2013/04/22/we-mustnt-idle/"/>
    <updated>2013-04-22T02:12:12-04:00</updated>
    <id>http://blog.parkermoore.de/2013/04/22/we-mustnt-idle</id>
    <content type="html"><![CDATA[<p>Our legacies on this Beautiful Earth are inextricably tied to the work we do, the
principles we stand for and the messages we spread. The apathetic nature of many of my
peers nowadays is heresy to the nth degree, and we can no longer stand idly by and watch
young people refusing to talk about the hard issues. If we’re to make any progress and
maintain this More Perfect Union, we had better get our act together and stand and fight
for the things we believe in.</p>

<p>It comes with a price, however. We must be informed. We must read the arguments of the
other side, debate them and reformulate our stance given the new evidence. In the same
way Newton used this inductive methods to formulate his three famous Natural Laws, we
must start with a problem we observe in our society, generalize a solution in the form
of legislation, judicial action or grassroots campaigning, and revise our message as new
information becomes available.</p>

<p>It is not enough to let Gov majors, English majors and law students run the country,
making sweeping decisions about how we may live our lives. It is not enough to defer to
those with means and wealth – those with the ability to run a traditional campaign for
public office and influence those in public office – in fact, it is the worst offense to
this Great Nation to allow the aristocracy of special interets to continue determining
the rule of law. We must stand up, as citizens, and fight for what sparks fire in our
bellies! We must stand up, as citizens, and say “enough is enough” to special interests
and lobbyists who control Washington. Now is our time. If our country is to change for
the better, it will be because we – the citizens – made our voices heard and fought with
much gnashing of teeth for what we believe in and what we know is right.</p>

<p>This is the imperative of our generation. Let us act!</p>

<p>This post was originally published on <a href="https://medium.com/i-m-h-o/d5bf40927b1a">Medium</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Downtime is Good]]></title>
    <link href="http://blog.parkermoore.de/2013/02/11/downtime-is-good/"/>
    <updated>2013-02-11T22:43:00-05:00</updated>
    <id>http://blog.parkermoore.de/2013/02/11/downtime-is-good</id>
    <content type="html"><![CDATA[<p>I just started working as an intern at 6Wunderkinder a couple weeks ago.
I am by no means an expert in devops (hell, I have only dabbled with a little
sysadmin in the past - nothing too serious) and I don&#39;t really know what goes
into keeping a huge series of server up and running. I can say, however, that
I know the customer&#39;s side of things. I know what it&#39;s like to be a user of a
service which periodically goes through downtimes of noticable lengths. (I know
I&#39;m not the only one here so you will probably relate to this observation as
well.</p>

<p>So today there was a blip of downtime for Wunderlist, a really awesome task-
management application by 6Wunderkinder. During this downtime, it occurred to
me: downtime can help the visibility of an application or service.</p>

<p>Hear me out: when the service is running smoothly, few will actually talk about
it. When it goes down, Twitter blows up with complaints and &quot;ZOMG MY LIFE IS
OVER&quot; tweets. These tweets, in a way, promote the service. The more frustrated
the tweet, the more apparent it is that the tweeter cares about this service.</p>

<p>As one who sees these frustrated tweets often about many services, I can only
conclude that a little downtime here and there is a great way for outsiders
to gauge how awesome a service is: if it goes down and people are upset, then
the service is probably worth trying out (once it goes back up again). If the
service goes down and no one cares, then it probably isn&#39;t worth your time.</p>

<p>So next time you see angry tweets, write down the name of that service and
check it out once everything is back in order. In all likelihood, you will
like the service, too, and you&#39;ll be angrily tweeting next time it goes down.</p>

<p>It&#39;s all about perspective.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Install rbenv on Ubuntu 12.04]]></title>
    <link href="http://blog.parkermoore.de/2013/02/06/install-rbenv-on-ubuntu-12-dot-04/"/>
    <updated>2013-02-06T21:31:00-05:00</updated>
    <id>http://blog.parkermoore.de/2013/02/06/install-rbenv-on-ubuntu-12-dot-04</id>
    <content type="html"><![CDATA[<p>So, I&#39;ll admit it: I absolutely adore rbenv.</p>

<p>In light of this, I&#39;ve been using it at my work at 6Wunderkinder the past couple weeks.
6W uses AWS like nobody&#39;s business, and the Ubuntu EC2 instances I&#39;ve been interacting
with are really bare-bones. So I wanted to write this script for you, the Ubuntu &amp; Ruby
user, in order for you to very quickly get up and running with rbenv &amp; the latest Ruby
MRI. Just copy it and run it.</p>

<figure class='code-highlight-figure'><figcaption class='code-highlight-caption'><span class='code-highlight-caption-title'>Installing rbenv on Ubuntu 12.04</span></figcaption><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>sudo apt-get install zlib1g-dev openssl libopenssl-ruby1.9.1 libssl-dev libruby1.9.1 libreadline-dev git-core make make-doc
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="nb">cd</span> ~
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'>git clone git://github.com/sstephenson/rbenv.git .rbenv
</div></div><div data-line='4' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="nb">echo</span> <span class="s1">'export PATH="$HOME/.rbenv/bin:$PATH"'</span> &gt;&gt; ~/.bashrc
</div></div><div data-line='5' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="nb">echo</span> <span class="s1">'eval "$(rbenv init -)"'</span> &gt;&gt; ~/.bashrc
</div></div><div data-line='6' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="nb">exec</span> <span class="nv">$SHELL</span> <span class="c"># Restart the shell</span>
</div></div><div data-line='7' class='code-highlight-row numbered'><div class='code-highlight-line'>mkdir -p ~/.rbenv/plugins
</div></div><div data-line='8' class='code-highlight-row numbered'><div class='code-highlight-line'><span class="nb">cd</span> ~/.rbenv/plugins
</div></div><div data-line='9' class='code-highlight-row numbered'><div class='code-highlight-line'>git clone git://github.com/sstephenson/ruby-build.git
</div></div><div data-line='10' class='code-highlight-row numbered'><div class='code-highlight-line'>git clone git://github.com/sstephenson/rbenv-gem-rehash.git
</div></div><div data-line='11' class='code-highlight-row numbered'><div class='code-highlight-line'>rbenv install 1.9.3-p362
</div></div><div data-line='12' class='code-highlight-row numbered'><div class='code-highlight-line'>rbenv rehash
</div></div><div data-line='13' class='code-highlight-row numbered'><div class='code-highlight-line'>rbenv global 1.9.3-p362</div></div></pre></div></figure>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Connect to 3G on simyo in Germany]]></title>
    <link href="http://blog.parkermoore.de/2013/01/30/connect-to-3g-on-simyo-in-germany/"/>
    <updated>2013-01-30T18:10:00-05:00</updated>
    <id>http://blog.parkermoore.de/2013/01/30/connect-to-3g-on-simyo-in-germany</id>
    <content type="html"><![CDATA[<p>I recently signed up for simyo, a German cell provider. After installing the Nano SIM into my phone,
I noticed that the 3G connection to the mobile data network was failing. Got a weird error that said
I was not subscribed to a mobile data network. Which was obviously false.</p>

<p>So, I tweeted about it. Expecting a several-day delay in my support query from simyo, I totally resigned
to wait on mobile data until they got back to me. But luckily this new 6W family &amp; friends totally came
to my rescue. <a href="http://rafifyalda.id.au/">Rafif Yalda</a>, a former Wunderkind, totally came to my rescue in
a tweet (which has since been removed).</p>

<p>So if you ever run into a problem with your mobile network, ensure that your APN settings are correct.
In this case:</p>

<figure class='code-highlight-figure'><div class='code-highlight'><pre class='code-highlight-pre'><div data-line='1' class='code-highlight-row numbered'><div class='code-highlight-line'>APN: internet.eplus.de
</div></div><div data-line='2' class='code-highlight-row numbered'><div class='code-highlight-line'>username: simyo
</div></div><div data-line='3' class='code-highlight-row numbered'><div class='code-highlight-line'>password: simyo</div></div></pre></div></figure>

<p>THANK YOU RAFIF. This surely saved me many hours of frustration.</p>
]]></content>
  </entry>
  
</feed>
