<!DOCTYPE html><html><head>
<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"516a95a608","applicationID":"488945","transactionName":"J1tdR0cNDghTRx9CQQteVlBBEU0NWFFVSg==","queueTime":9,"applicationTime":10,"ttGuid":"","agentToken":null,"agent":""}</script>
<script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,t,n){function r(n){if(!t[n]){var o=t[n]={exports:{}};e[n][0].call(o.exports,function(t){var o=e[n][1][t];return r(o||t)},o,o.exports)}return t[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(e,t,n){function r(e,t){return function(){o(e,[(new Date).getTime()].concat(a(arguments)),null,t)}}var o=e("handle"),i=e(2),a=e(3);"undefined"==typeof window.newrelic&&(newrelic=NREUM);var u=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit"],c=["addPageAction"],f="api-";i(u,function(e,t){newrelic[t]=r(f+t,"api")}),i(c,function(e,t){newrelic[t]=r(f+t)}),t.exports=newrelic,newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),o("err",[e,(new Date).getTime()])}},{}],2:[function(e,t,n){function r(e,t){var n=[],r="",i=0;for(r in e)o.call(e,r)&&(n[i]=t(r,e[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],3:[function(e,t,n){function r(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(0>o?0:o);++r<o;)i[r]=e[t+r];return i}t.exports=r},{}],ee:[function(e,t,n){function r(){}function o(e){function t(e){return e&&e instanceof r?e:e?u(e,a,i):i()}function n(n,r,o){e&&e(n,r,o);for(var i=t(o),a=l(n),u=a.length,c=0;u>c;c++)a[c].apply(i,r);var s=f[g[n]];return s&&s.push([m,n,r,i]),i}function p(e,t){w[e]=l(e).concat(t)}function l(e){return w[e]||[]}function d(e){return s[e]=s[e]||o(n)}function v(e,t){c(e,function(e,n){t=t||"feature",g[n]=t,t in f||(f[t]=[])})}var w={},g={},m={on:p,emit:n,get:d,listeners:l,context:t,buffer:v};return m}function i(){return new r}var a="nr@context",u=e("gos"),c=e(2),f={},s={},p=t.exports=o();p.backlog=f},{}],gos:[function(e,t,n){function r(e,t,n){if(o.call(e,t))return e[t];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[t]=r,r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],handle:[function(e,t,n){function r(e,t,n,r){o.buffer([e],r),o.emit(e,t,n)}var o=e("ee").get("handle");t.exports=r,r.ee=o},{}],id:[function(e,t,n){function r(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="nr@id",a=e("gos");t.exports=r},{}],loader:[function(e,t,n){function r(){if(!w++){var e=v.info=NREUM.info,t=s.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&t){c(l,function(t,n){e[t]||(e[t]=n)});var n="https"===p.split(":")[0]||e.sslForHttp;v.proto=n?"https://":"http://",u("mark",["onload",a()],null,"api");var r=s.createElement("script");r.src=v.proto+e.agent,t.parentNode.insertBefore(r,t)}}}function o(){"complete"===s.readyState&&i()}function i(){u("mark",["domContent",a()],null,"api")}function a(){return(new Date).getTime()}var u=e("handle"),c=e(2),f=window,s=f.document;NREUM.o={ST:setTimeout,XHR:f.XMLHttpRequest,REQ:f.Request,EV:f.Event,PR:f.Promise,MO:f.MutationObserver},e(1);var p=(""+location).split("?")[0],l={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-892.min.js"},d=window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&!/CriOS/.test(navigator.userAgent),v=t.exports={offset:a(),origin:p,features:{},xhrWrappable:d};s.addEventListener?(s.addEventListener("DOMContentLoaded",i,!1),f.addEventListener("load",r,!1)):(s.attachEvent("onreadystatechange",o),f.attachEvent("onload",r)),u("mark",["firstbyte",a()],null,"api");var w=0},{}]},{},["loader"]);</script><title>justincampbell.me</title><link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css" /><meta content="width=device-width" name="viewport" /><meta content="authenticity_token" name="csrf-param" />
<meta content="gSaK4DO5pkuxYzsX8zXMBFewDnzWicljWPWgA3QY5dQ=" name="csrf-token" /></head><body><div id="sidebar"><div id="logo">J</div><ul id="navigation"><li><a href="http://github.com/justincampbell">GitHub</a></li><li><a href="http://twitter.com/justincampbell">Twitter</a></li></ul></div><div id="content"><ul id="projects"><li class="project"><a href="http://lanyrd.com/profile/justincampbell/"><img alt="Talks" src="http://justincampbell.s3.amazonaws.com/talks.png" title="Talks" /></a></li><li class="project"><a href="https://github.com/justincampbell/anybar"><span class="name">anybar.go</span></a></li><li class="project"><a href="http://csbookclub.com"><span class="name">CS Book Club</span></a></li><li class="project"><a href="https://github.com/kata-seeds"><img alt="Kata-seeds" src="https://s3.amazonaws.com/justincampbell/kata-seeds.png" title="Kata Seeds" /></a></li><li class="project"><a href="https://github.com/justincampbell/zipcode"><span class="name">zipcode.go</span></a></li><li class="project"><a href="https://github.com/justincampbell/emoji-weather"><span class="name">emoji-weather</span></a></li><li class="project"><a href="http://shoulditestthis.com"><span class="name">Should I Test This?</span></a></li><li class="project"><a href="http://til.justincampbell.me"><img alt="Til" src="http://justincampbell.s3.amazonaws.com/til.png" title="Today, I Learned..." /></a></li><li class="project"><a href="https://github.com/justincampbell/q-queue"><span class="name">q-queue</span></a></li><li class="project"><a href="https://github.com/justincampbell/tmux-pomodoro"><span class="name">tmux 🍅pomodoro</span></a></li><li class="project"><a href="http://scphilly.org"><img alt="Scphilly" src="http://justincampbell.s3.amazonaws.com/scphilly.png" title="Software as Craft" /></a></li><li class="project"><a href="http://turing.cool"><img alt="Turing-incomplete" src="http://justincampbell.s3.amazonaws.com/turing-incomplete.png" title="Turing-Incomplete" /></a></li><li class="project"><a href="http://github.com/JustinCampbell/tp"><img alt="Tp" src="http://justincampbell.s3.amazonaws.com/tp.png" title="tp" /></a></li><li class="project"><a href="https://github.com/justincampbell/tmux-status-bar"><img alt="Tmux-status-bar" src="https://s3.amazonaws.com/justincampbell/tmux-status-bar.png" title="tmux-status-bar" /></a></li><li class="project"><a href="https://github.com/justincampbell/dotmusic"><span class="name">dotmusic</span></a></li><li class="project"><a href="https://github.com/justincampbell/rr"><span class="name">rr repeat/retry</span></a></li><li class="project"><a href="https://github.com/justincampbell/use"><span class="name">use</span></a></li><li class="project"><a href="http://www.meetup.com/philly-code-and-coffee/"><span class="name">Philly Code and Coffee</span></a></li><li class="project"><a href="https://github.com/RiotGames/motherbrain"><span class="name">motherbrain</span></a></li><li class="project"><a href="https://github.com/justincampbell/chef-drone"><span class="name">chef-drone</span></a></li><li class="project"><a href="https://github.com/justincampbell/generative"><span class="name">Generative</span></a></li><li class="project"><a href="https://github.com/justincampbell/whipped-cream"><img alt="Whipped-cream" src="https://s3.amazonaws.com/justincampbell/whipped-cream.png" title="Whipped Cream" /></a></li><li class="project"><a href="https://github.com/justincampbell/url-shorteners"><span class="name">URL Shorteners</span></a></li><li class="project"><a href="https://github.com/justincampbell/vim-eighties"><span class="name">eighties.vim</span></a></li><li class="project"><a href="http://berkshelf.com"><img alt="Berkshelf" src="http://justincampbell.s3.amazonaws.com/berkshelf.png" title="Berkshelf" /></a></li><li class="project"><a href="https://github.com/guard/guard-cane"><span class="name">Guard::Cane</span></a></li><li class="project"><a href="https://github.com/justincampbell/speclj-tmux"><img alt="Speclj-tmux" src="http://justincampbell.s3.amazonaws.com/speclj-tmux.png" title="speclj-tmux" /></a></li><li class="project"><a href="http://rubyfriends.com"><img alt="Rubyfriends" src="https://s3.amazonaws.com/justincampbell/rubyfriends.png" title="#RubyFriends" /></a></li><li class="project"><a href="http://bit.ly/dividata-ios"><img alt="Dividata-ios" src="http://justincampbell.s3.amazonaws.com/dividata-ios.png" title="Dividata for iOS" /></a></li><li class="project"><a href="http://dividata.com"><img alt="Dividata" src="http://justincampbell.s3.amazonaws.com/dividata.png" title="Dividata" /></a></li></ul></div><script src="/assets/application.js" type="text/javascript"></script>  <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-5973800-7']);
    _gaq.push(['_trackPageview']);

    (function() {
     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
     })();
   </script>
</body></html>