<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Reid Burke</title>
	<atom:link href="http://reidburke.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://reidburke.com</link>
	<description>Reid Burke is a software engineer with the YUI team at Yahoo!.</description>
	<lastBuildDate>Fri, 03 May 2013 18:45:14 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>I&#8217;m Going to Zimbabwe</title>
		<link>http://reidburke.com/2013/05/03/im-going-to-zimbabwe/</link>
		<comments>http://reidburke.com/2013/05/03/im-going-to-zimbabwe/#comments</comments>
		<pubDate>Fri, 03 May 2013 18:45:14 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://reidburke.com/?p=780</guid>
		<description><![CDATA[I am going to Zimbabwe for two weeks this July to serve alongside Hands of Hope Africa as they care for orphans and children at risk. Zimbabwe has more orphans per capita than any other country in the world. There are 1.4 million kids under the age of 17 who are orphaned. I&#8217;ll be working...  <a href="http://reidburke.com/2013/05/03/im-going-to-zimbabwe/" title="Read I&#8217;m Going to Zimbabwe">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<img src="http://reidburke.com/wp-content/plugins/simple-feed-stats/tracker.php?sfs_tracking=true&amp;feed_type=feed&amp;v=4491210" width="1" height="1" alt=""> <p>I am going to Zimbabwe for two weeks this July to serve alongside <a href="http://hohafrica.org/">Hands of Hope Africa</a> as they care for orphans and children at risk.</p>
<p>Zimbabwe has <a href="http://news.bbc.co.uk/2/shared/spl/hi/picture_gallery/06/africa_zimbabwe0s_aids_orphans/html/3.stm">more orphans per capita</a> than any other country in the world. There are <a href="http://www.unicef.org/infobycountry/zimbabwe_statistics.html">1.4 million kids</a> under the age of 17 who are orphaned.</p>
<p>I&#8217;ll be working at the <a href="http://hohafrica.org/wp/?page_id=194">WestGate Haven Home</a>, which is home to 12 school-aged girls who lost their parents and other close family members to AIDS.</p>
<a href="http://reidburke.com/wp-content/uploads/2013/05/girls.jpg"><img src="http://reidburke.com/wp-content/uploads/2013/05/girls.jpg" alt="Girls at WestGate Haven" width="1024" height="768" class="aligncenter size-full wp-image-783" /></a>
<p>I&#8217;m going to be with about a dozen other people traveling from San Jose, CA. It&#8217;s a huge privilege to be able to go and experience the world in a totally different context.</p>
<p>After I <a href="http://reidburke.com/peru/">visited Peru last year</a>, the trip left a lasting impression that made a difference in my life back home. We took deserving kids on a countryside retreat for 3 days—swimming, wheelchair races, horseback riding—which left a lasting impression on the kids and staff too. That makes me excited to serve again.</p>
<p><a href="http://reidburke.com/zimbabwe/">Learn more about my trip and why I&#8217;m going.</a> Since announcing the trip yesterday on Twitter, I&#8217;ve already received a few donations toward the trip&#8217;s $4,000 cost, which is fantastic! Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2013/05/03/im-going-to-zimbabwe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Real Meaning of Friendship</title>
		<link>http://reidburke.com/2013/04/09/the-real-meaning-of-friendship/</link>
		<comments>http://reidburke.com/2013/04/09/the-real-meaning-of-friendship/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 04:59:15 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://reidburke.com/?p=764</guid>
		<description><![CDATA[Douglas Gresham remembers the friendships of C.S. Lewis in the 1920s: Now friendship in those days was a bit different from what it is today; friends did not have to agree on everything and often agreed on practically nothing. They were people with whom you could argue all day and yet never get irritated or...  <a href="http://reidburke.com/2013/04/09/the-real-meaning-of-friendship/" title="Read The Real Meaning of Friendship">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p>Douglas Gresham <a href="http://books.google.com/books?id=xTrgy9X09BMC&amp;lpg=PA81&amp;pg=PA81#v=onepage&amp;q&amp;f=false" title="From Jack's Life: A Memory of C.S. Lewis, 2005, p. 81.">remembers the friendships of C.S. Lewis</a> in the 1920s:</p>
<blockquote>
<p>Now friendship in those days was a bit different from what it is today; friends did not have to agree on everything and often agreed on practically nothing. They were people with whom you could argue all day and yet never get irritated or angry at all. In today&#8217;s world we seem to have lost the real meaning of friendship. If someone disagrees with us, it is fashionable today to dislike them for it. This is silly and robs us of the best kind of friends we could find, for if we are always agreed with, we can never really have a serious conversation; we cannot learn from someone who agrees with what we say.</p>
</blockquote>
<p>Don&#8217;t <a href="http://dontbubble.us/">filter bubble</a> your friends.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2013/04/09/the-real-meaning-of-friendship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Modules, Not Examples</title>
		<link>http://reidburke.com/2013/03/29/build-modules-not-examples/</link>
		<comments>http://reidburke.com/2013/03/29/build-modules-not-examples/#comments</comments>
		<pubDate>Fri, 29 Mar 2013 22:01:53 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://reidburke.com/?p=707</guid>
		<description><![CDATA[I&#8217;ve been thinking out loud this afternoon about how modules make Node.js successful with @ekashida, YUI&#8217;s newest team member. YUI is a powerful open-source library for developing web apps. Node and YUI both document their APIs very well. Unlike Node, we also have 250 examples to help people get started. Yet lots of people have...  <a href="http://reidburke.com/2013/03/29/build-modules-not-examples/" title="Read Build Modules, Not Examples">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been thinking out loud this afternoon about how modules make <a href="http://nodejs.org/">Node.js</a> successful with <a href="https://twitter.com/ekashida">@ekashida</a>, YUI&#8217;s newest team member.</p>
<p><a href="http://yuilibrary.com">YUI</a> is a powerful open-source library for developing web apps. Node and YUI both document their APIs very well. Unlike Node, we also have <a href="http://yuilibrary.com/yui/docs/examples/">250 examples</a> to help people get started. Yet lots of people have trouble getting started anyway.</p>
<p>How do we make that easier?</p>
<p>We&#8217;re not the only web app library with this problem. Ember has received <a href="http://discuss.emberjs.com/t/getting-started-with-ember-js-is-easy-no-it-isn-t/559">criticism</a> around getting started and quickly <a href="http://emberjs.com/blog/2013/03/21/making-ember-easier.html">responded with a roadmap</a> to improve it. In their response, Tom Dale said:</p>
<blockquote>
<p>Ember promises—and, we think, delivers—tremendous value. But ramping up to that point is not easy, and we received this feedback repeatedly and take it very seriously.</p>
</blockquote>
<p>We get the <a href="https://groups.google.com/d/msg/yui-contrib/n50VKq9zbbA/v1b1T0YFWj4J">same feedback</a> for YUI. We also take it seriously and a fellow team member is <a href="https://groups.google.com/d/msg/yui-contrib/n50VKq9zbbA/RIOgZpj8bDMJ">working on better documentation</a>. Ember&#8217;s action items include a Getting Started guide, a short screencast, live examples to run demo code, and other things. These are good and will help.</p>
<p>But then, I think about Node. Their official newbie documentation begins and ends with <a href="http://nodejs.org/docs/v0.10.2/#column1" title="Node.js Example Web Server">Hello World</a> on their homepage. Node&#8217;s newbies do not get started with an example. They get started with npm.</p>
<h2>Modules Are The Example</h2>
<p>Node has effectively outsourced their examples to the community using <a href="http://npmjs.org">npm</a>.</p>
<p>You may be thinking: &#8220;Reid, modules are not examples. They are tools you use to build an example, or a real app.&#8221; Well, you&#8217;d be right. Node&#8217;s community has built enough modules to help people build apps they care about with a tiny learning curve. Instead of reading about code, these newbies are building something with a tool—the module—that lets them start building what they care about <em>right away</em>.</p>
<p>Few newcomers to Node.js use <code>require("http")</code> to build their first web app. If the barrier-to-entry was to <a href="http://nodejs.org/docs/v0.10.2/api/http.html">understand the HTTP module</a>, a lot of people would walk away. They don&#8217;t want to learn about that module, they want routing. View rendering. You know, a web app.</p>
<p>The example is <a href="http://expressjs.com/">Express</a>. Newbies have a project in mind and it&#8217;s probably something that needs a router, view rendering, and middleware. Express delivers that. You don&#8217;t need to learn about Node yet, you learn Express.</p>
<p>Once you&#8217;re up and running, you have real code and real problems. Not theoretical problems in a narrative, but problems that are running on your computer. Problems getting in the way of building what you care about. That&#8217;s motivation.</p>
<p>Since you&#8217;ve already spent an hour getting the basics setup because the Express API was a lot easier to get started with, you&#8217;re now motivated to dig deeper into Node to find the next solution.</p>
<h2>Building A Ramp, Not A Cliff</h2>
<p>Understanding everything Node has to offer isn&#8217;t something you learn overnight. But that isn&#8217;t necessary. A lot of people have built modules on top of Node&#8217;s core that make all kinds of common problems easy. These modules are easy to download and use. Newbies are engaged immediately. Then, they&#8217;re are progressively lured into deeper water. The community grows.</p>
<p>If you need to learn a million things before you can get started, <a href="http://justinkan.com/how-to-do-anything">you&#8217;ll never start</a>. If that&#8217;s your project&#8217;s learning curve, you&#8217;re presenting newbies with a cliff. Some people will climb it, some will seek climbing experts to get to the top. Some may have the patience to read a book about climbing, or watch a screencast featuring someone else climbing.</p>
<p>But most people want to get started today, so they&#8217;ll leave and find an alternative way to the top that&#8217;s easier to climb.</p>
<p>Node provides many ramps. They aren&#8217;t ramps you merely read about: they&#8217;re ramps you walk on, build on, get experience with, and get more complicated as you go up. It doesn&#8217;t fix every problem and some people will still be confused. But it works pretty well.</p>
<p>At YUI, I&#8217;ll be encouraging our team to focus on building example modules: the ramps to mastery. YUI is already modular, but that isn&#8217;t the same. I&#8217;m talking about bundling modules in YUI&#8217;s core into a fully-baked solution to a common problem. Other people on my team are hard at work on the first product, and now I know why I&#8217;m so excited: it&#8217;s a ramp.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2013/03/29/build-modules-not-examples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Own Your Email</title>
		<link>http://reidburke.com/2013/03/25/own-your-email/</link>
		<comments>http://reidburke.com/2013/03/25/own-your-email/#comments</comments>
		<pubDate>Tue, 26 Mar 2013 04:57:12 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">https://s19-dallas.accountservergroup.com/~reid/?p=613</guid>
		<description><![CDATA[If you&#8217;re reading my blog, you might be a professional working in technology. You&#8217;re likely to care about your online identity, and if you do, your publishing and communications must happen from your own domain. If you care about your online presence, you must own it. I do, and that&#8217;s why my email address has...  <a href="http://reidburke.com/2013/03/25/own-your-email/" title="Read Own Your Email">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;re reading my blog, you might be a professional working in technology. You&#8217;re likely to care about your online identity, and if you do, your publishing and communications must happen from your own domain.</p>
<blockquote>
<p>If you care about your online presence, <a href="http://www.marco.org/2011/04/05/let-us-pay-for-this-service-so-it-wont-go-down">you must own it</a>. I do, and that&#8217;s why my email address has always been at my own domain, not the domain of any employer or webmail service.</p>
<p>You might think your <code>@gmail.com</code> address will be fine indefinitely, but if I used a webmail address from the best webmail provider at the time I broke away from my university address and formed my own identity, it would have ended in <code>@hotmail.com</code>. And that wasn&#8217;t very long ago.</p>
</blockquote>
<p>— <a href="http://www.marco.org/2011/07/11/own-your-identity">Own Your Identity</a> by <a href="http://www.marco.org/">Marco Arment</a></p>
<p>I&#8217;ve had email at my domain for many years, so I don&#8217;t face the headache some do with switching today. If your email ends with someone else&#8217;s domain, bite the bullet and make the switch. The best time may have been in the past, but the second best time is right now.</p>
<a href="http://reidburke.com/wp-content/uploads/2013/03/fastmail.png"><img src="http://reidburke.com/wp-content/uploads/2013/03/fastmail.png" alt="fastmail" width="1077" height="772" class="aligncenter size-full wp-image-655" /></a>
<p>I&#8217;m currently trying out <a href="http://fastmail.fm">FastMail</a> for hosting my email. I previously used <a href="http://en.wikipedia.org/wiki/Google_Apps">Google Apps for Your Domain</a>. Since late last year, that product has been <a href="http://googleenterprise.blogspot.com/2012/12/changes-to-google-apps-for-businesses.html">focused on businesses</a>. I&#8217;ve wanted to try the benefits of paid email (no ads) with a bring-your-own-domain service <a href="https://www.fastmail.fm/signup/personal.html">intended for individuals</a>.</p>
<p>Here&#8217;s some factors that went into my decision to try FastMail:</p>
<ul>
<li><a href="https://www.fastmail.fm/help/technology_fastmail_technology.html">Built on open source.</a> <a href="https://github.com/brong/cyrus-imapd/tree/fastmail">Their production IMAP server is on GitHub.</a></li>
<li>Reasonable charge of <a href="https://www.fastmail.fm/signup/personal.html">$40 per year</a>.</li>
<li><a href="http://en.wikipedia.org/wiki/DKIM">DomainKeys</a> and <a href="http://en.wikipedia.org/wiki/Sender_Policy_Framework">SPF</a> to deter others from spoofing your domain.</li>
</ul>
<p>Here&#8217;s what I don&#8217;t like, and why you shouldn&#8217;t switch:</p>
<ul>
<li>I&#8217;ve had a couple spam messages come into my FastMail inbox, which rarely happens in GMail. You can train a personal Bayes filter over time, and tweak the spam score sensitivity, but I doubt it&#8217;ll be as good.</li>
<li>No 2-factor auth without expensive SMS messaging, but I don&#8217;t need this as much since I use <a href="https://agilebits.com/onepassword">1Password</a>.</li>
<li>Their documentation is pretty atrocious. They document everything but you&#8217;ll spend time digging for it.</li>
<li>Filters are not as easy to setup, but you get to edit the code behind them which is <a href="https://www.fastmail.fm/help/managing_email_advanced_rules.html">based on standard Sieve</a>.</li>
</ul>
<p>The good: Their website is fast. <a href="http://en.gravatar.com/">Gravatars</a> are used in their website and I prefer its look-and-feel to GMail. If you don&#8217;t like it, you can run your own <a href="https://www.fastmail.fm/help/quick_tours_custom_stylesheet.html">custom CSS</a> and <a href="http://fastmail.wikia.com/wiki/NewInterfaceJS">JavaScript</a> to customize it.</p>
<p>We&#8217;ll see how this works out. If you decide to switch, read their <a href="https://www.fastmail.fm/help/business_migrate.html">migration instructions</a> to get properly relocated from your current IMAP provider. Make sure you put SPF and DomainKeys into your DNS configuration while you&#8217;re changing MX records. The SPF record to set is <code>v=spf1 include:spf.messagingengine.com -all</code> (on TXT and SPF, if your DNS does both). The DomainKeys TXT record to set is on the &#8220;Virtual Domains&#8221; advanced settings screen once you sign in.</p>
<p>No matter what you choose, go forth and own your email. Even if my trial of FastMail goes south, they&#8217;re just a provider behind my own domain, and I can even go back to GMail. Switching providers is easy once your email is on your domain, so get to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2013/03/25/own-your-email/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Write-only</title>
		<link>http://reidburke.com/2013/02/13/write-only/</link>
		<comments>http://reidburke.com/2013/02/13/write-only/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 08:01:55 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">https://s19-dallas.accountservergroup.com/~reid/?p=603</guid>
		<description><![CDATA[I&#8217;m taking a short break from most of the web and social media from February 13 &#8211; 23. I plan to share stuff, but I&#8217;ll be treating most websites as write-only. I&#8217;ll be working on Yeti at work (writing a lot of unit tests) and video editing at home (lots of Final Cut Pro projects),...  <a href="http://reidburke.com/2013/02/13/write-only/" title="Read Write-only">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m taking a short break from most of the web and social media from February 13 &#8211; 23. I plan to share stuff, but I&#8217;ll be treating most websites as write-only. I&#8217;ll be working on <a href="http://yeti.cx">Yeti</a> at work (writing a lot of unit tests) and video editing at home (lots of Final Cut Pro projects), so I&#8217;ll continue to be quite busy. Email and bug reports are always open.</p>
<p>While I didn&#8217;t decide to do this myself, it&#8217;s timely. I&#8217;m distracted and controlled by an insatiable interest in what other folks create. I don&#8217;t use a feed reader and rarely find myself saving to Instapaper. My attention is divided between what I find important and Hacker News, The Verge, Flickr, Twitter, Facebook, and so on. It has grown to become taxing.</p>
<p>The habits are hard to change, but I&#8217;m not doing it alone. My pastor, <a href="http://farewelltothesea.com/">Jay Kim</a>, has suggested spending a part of lent by <a href="http://awakeningchurch.com/2013/02/lent-2013-part-1/">taking a break from media</a>, or a media fast.</p>
<blockquote>
<p>Fasting reveals what controls us. Far too often, we self-medicate with movies, television, music, social media, etc. We spend too little time alone and unplugged.</p>
</blockquote>
<p>I&#8217;ll still be busy, but I&#8217;ll be spending more time unplugged and undistracted by the noise of the web for a little bit. I hope to return better focused on what I find important. If you&#8217;re feeling the same way, consider taking the next week or so off media with me. You can <a href="mailto:me@reidburke.com">email me</a> if you don&#8217;t want to do it alone. Here&#8217;s to more time spent offline.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2013/02/13/write-only/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging Travis builds</title>
		<link>http://reidburke.com/2013/01/28/debugging-travis-builds/</link>
		<comments>http://reidburke.com/2013/01/28/debugging-travis-builds/#comments</comments>
		<pubDate>Mon, 28 Jan 2013 20:59:51 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">https://s19-dallas.accountservergroup.com/~reid/?p=556</guid>
		<description><![CDATA[Yeti uses Travis CI to the max by spawning lots of PhantomJS processes that are tested asynchronously. When tests start failing in Travis, but not anywhere else, debugging can be infuriating. You can setup a Travis box locally to debug the problem. Trung Lê wrote about debugging with a local Travis VM in August 2012...  <a href="http://reidburke.com/2013/01/28/debugging-travis-builds/" title="Read Debugging Travis builds">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://yeti.cx">Yeti</a> uses <a href="http://travis-ci.org">Travis CI</a> to the max by spawning lots of <a href="http://phantomjs.org">PhantomJS</a> processes that are tested asynchronously. When tests start failing in Travis, but not anywhere else, debugging can be infuriating.</p>
<p>You can setup a Travis box locally to debug the problem. Trung Lê wrote about <a href="http://ruby-journal.com/debug-your-failed-test-in-travis-ci/">debugging with a local Travis VM</a> in August 2012 but that post is outdated and didn&#8217;t work. You can expect <a href="http://about.travis-ci.org/blog/2013-01-25-the-worker-gets-a-revamp/">sweeping changes to the Travis build infrastructure</a> in the near future, so this blog post will also be outdated soon.</p>
<p>For now, we have a bug that needs fixing. Let&#8217;s setup a local Travis VM for Node.js debugging.</p>
<h2>My assumptions about your computer</h2>
<ol>
<li>Plenty of disk space</li>
<li>OS X (but this should work with other systems, too)</li>
</ol>
<h2>Install Vagrant &amp; VirtualBox</h2>
<p>Visit the <a href="http://vagrantup.com/">Vagrant website</a> and the <a href="https://virtualbox.org/">VirtualBox website</a> for installers.</p>
<h2>Download the jvm box</h2>
<p>The <code>jvm</code> box is where Node.js builds run. <a href="http://files.travis-ci.org/boxes/provisioned/travis-jvm.box">Download travis-jvm.box.</a> (3.2 GB)</p>
<h2>Prepare the jvm box</h2>
<p>Import the VM box:</p>
<pre><code>vagrant box add travis-jvm travis-jvm.box
</code></pre>
<p>Verify it&#8217;s there:</p>
<pre><code>vagrant box list
</code></pre>
<h2>Start the jvm box</h2>
<p>Create a working directory to hold the Vagrantfile for the <code>travis-jvm</code> box.</p>
<pre><code>mkdir boxes
cd boxes
</code></pre>
<p>Create the Vagrantfile and get the box ready to use:</p>
<pre><code>vagrant init travis-jvm
</code></pre>
<p>The username for the VM is <code>travis</code>, so add this line to your Vagrantfile&#8217;s do-block:</p>
<pre><code>config.ssh.username = "travis"
</code></pre>
<p>Start the VM:</p>
<pre><code>vagrant up
</code></pre>
<p>Things should work nicely. (If not, read on.)</p>
<p>You can access the VM with this command:</p>
<pre><code>vagrant ssh
</code></pre>
<p>You can now follow the steps of your Travis build and debug your problem.</p>
<p>If you have problems running <code>vagrant ssh</code>, you can try using a username and password for logging in instead with this command:</p>
<pre><code>vagrant ssh -p -- -l travis
</code></pre>
<p>The password is <code>travis</code>.</p>
<h2>More fancy debugging</h2>
<p>The VM uses a NAT-only network. You may not be able to access it from your computer. For the problems I debug, I need to be able to access the the Node web server inside the VM from a browser on OS X.</p>
<p>This means you should setup a host-only network interface, in addition to the NAT-only interface.</p>
<p>Add this line to your Vagrantfile&#8217;s do-block:</p>
<pre><code>config.vm.network :hostonly, "192.168.89.10"
</code></pre>
<p>This will setup a host-only network and give the IP address <code>192.168.89.10</code> to the VM. (If you are on a network that uses <code>192.168.89.xxx</code> already, change the IP subnet to something else, because it cannot conflict with another subnet your host computer is using.)</p>
<p>Reload the VM:</p>
<pre><code>vagrant reload
</code></pre>
<p>You should be able to access the VM from the host at <code>192.168.89.10</code>.</p>
<p>Sometimes running <code>vagrant up</code> with a host-only network fails because of a <a href="https://github.com/mitchellh/vagrant/issues/391#issuecomment-3456186">bug in net-ssh and Vagrant</a> with the message &#8220;Waiting for VM to boot. This can take a few minutes.&#8221; This bug is quite annoying, but a <a href="https://github.com/mitchellh/vagrant/wiki/%60vagrant-up%60-hangs-at-%22Waiting-for-VM-to-boot.-This-can-take-a-few-minutes%22">detailed workaround procedure that clears DHCP leases</a> is available that&#8217;ll allow you to start the VM.</p>
<h2>Teardown</h2>
<p>You can pause the VM with <code>vagrant suspend</code> and bring it back to life with <code>vagrant resume</code>. If you&#8217;d like to power off the VM, do so over SSH. If you can&#8217;t, <code>vagrant halt</code> will power it off.</p>
<p>If you want to start from a clean slate, you can destroy it with <code>vagrant destroy</code>. Re-creating a fresh VM is as easy as <code>vagrant up</code>.</p>
<p>You can learn more about these commands by reading the <a href="http://docs.vagrantup.com/v1/docs/getting-started/teardown.html">Vagrant teardown documentation</a>.</p>
<h2>Do not debug on travis-ci.org</h2>
<p>When you have a Travis-only problem, try creating a local environment as described above first. Don&#8217;t try to use the hosted Travis service to debug complicated failures. I have made this mistake many times:</p>
<ol>
<li>Noticed my build is failing in Travis.</li>
<li>Make sure my own environments and clean installs do not fail. (The problem is sometimes here!)</li>
<li>Create a branch named <code>fix-travis-foo</code> or something.</li>
<li>Start making commits and pushes to this temporary branch attempting to fix the problem.</li>
<li>Wait for the build to finish. If the build failed, repeat step 4.</li>
</ol>
<p>First of all, this takes a long time. Travis isn&#8217;t terribly slow for CI purposes, but when you&#8217;re trying to actively debug something, the last thing you need is having your app tests go from 15 seconds to 5 minutes.</p>
<p>Most of all, my problems are usually with PhantomJS. When I can fully control the VM, I can add <a href="https://github.com/ariya/phantomjs/wiki/Troubleshooting">remotely debug the headless browser</a> on OS X. I can also capture packets creatively with <a href="http://danielmiessler.com/study/tcpdump/">tcpdump(8)</a>. Using those tools, I found some pretty heinous race conditions in the <a href="http://yeti.cx">Yeti</a> test suite that would have been nearly impossible to find by trial-and-error.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2013/01/28/debugging-travis-builds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Checkpoint</title>
		<link>http://reidburke.com/2012/12/19/checkpoint/</link>
		<comments>http://reidburke.com/2012/12/19/checkpoint/#comments</comments>
		<pubDate>Thu, 20 Dec 2012 06:37:39 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">https://s19-dallas.accountservergroup.com/~reid/?p=516</guid>
		<description><![CDATA[When I travel home to Illinois, I frequently will work on Yeti for a few days and meetup with Dav. On this trip I&#8217;ve done both at the same time. I&#8217;ll meetup with him again tomorrow, hoping to finish up some test automation greatness before we take a break for Christmas. This time of year...  <a href="http://reidburke.com/2012/12/19/checkpoint/" title="Read Checkpoint">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p>When I travel home to Illinois, I frequently will work on <a href="http://yeti.cx">Yeti</a> for a few days and meetup with <a href="http://davglass.com">Dav</a>. On this trip I&#8217;ve done both at the same time. I&#8217;ll meetup with him again tomorrow, hoping to finish up some test automation greatness before we take a break for Christmas.</p>
<p>This time of year is really busy. I have lots of folks to shop for, lots of things on my personal to-do list, and in order to visit here I left a home full of mostly unpacked boxes. This week my employer needed me to list my accomplishments, which is difficult because I&#8217;m still trying to accomplish things, but the due date for this report was on my day off. Today.</p>
<p>I had to have my family stop at a Starbucks off I-64 so I could submit what I typed up. When I returned, my sister Jessie wanted to type her own report.</p>
<a href="http://www.flickr.com/photos/uberlife/8288762957"><img src="http://farm9.staticflickr.com/8352/8288762957_cd851d5e01_z.jpg" alt="The Typist" width="640" height="480" /></a>
<p>What I like about Jessie is that she reminds me of what&#8217;s possible when you don&#8217;t have lots to do.</p>
<p>In this moment, she&#8217;s typing for my sake even though she prefers playing with other things. It&#8217;s more for me than her. But soon, she starts to enjoy the challenge of typing and I start to enjoy helping her find the words.</p>
<p>When I begin my day focused on others instead of my own list of stuff, I&#8217;m typically more pleased with the result. That&#8217;s because instead of churning through what you think is important, you automatically have to do what someone else will value.</p>
<p>Jessie does that because when chooses me over herself, it&#8217;s natural for her to give me something I value. Time. Patience. Kindness. As I can&#8217;t help but to do the same in return, it reminds me that sometimes my priorities are off.</p>
<p>My challenge is to make moments like this more than a reminder. It&#8217;s a checkpoint. More breaks from your endless to-do list give you space to really change.</p>
<p>We&#8217;re all not perfect. But these moments remind me of our potential. It&#8217;s a bit unsettling, but I don&#8217;t want to keep working harder at my own priorities if it means I&#8217;m ultimately not helping others.</p>
<p>As this year draws to an end, reserve some time without your to-do list to remember what matters most.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2012/12/19/checkpoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yeti at YUIConf</title>
		<link>http://reidburke.com/2012/11/18/yeti-at-yuiconf/</link>
		<comments>http://reidburke.com/2012/11/18/yeti-at-yuiconf/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 07:06:31 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">https://s19-dallas.accountservergroup.com/~reid/?p=503</guid>
		<description><![CDATA[Markandey Singh posted a short video of my YUIConf 2012 talk. Dav Glass is seen running around with a camera to show the audience YUI animation tests running with Yeti on various devices. Dav shipped 5 tablets, 1 phone, and an AirPort Extreme to California to make this demo happen. The Write Code That Works...  <a href="http://reidburke.com/2012/11/18/yeti-at-yuiconf/" title="Read Yeti at YUIConf">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.markandey.com/">Markandey Singh</a> posted a short video of my <a href="http://lanyrd.com/2012/yuiconf/">YUIConf 2012</a> talk. <a href="http://davglass.com/">Dav Glass</a> is seen running around with a camera to show the audience YUI animation tests running with Yeti on various devices. Dav shipped 5 tablets, 1 phone, and an AirPort Extreme to California to make this demo happen.</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/U5Q0RKHyvUw?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>The <a href="http://lanyrd.com/2012/yuiconf/szrgf/">Write Code That Works talk</a> demonstrated Yeti in the context of software testing&#8217;s purpose. I also presented a few approaches for testing efficiently.</p>
<p>After YUIConf, I <a href="https://github.com/yui/yeti/pull/20">landed a pull request</a> to add Mocha, Jasmine, and full QUnit support to Yeti, making it more useful since this video. Thanks to <a href="https://github.com/ryanseddon">Ryan Seddon</a> for making that happen!</p>
<p>The full session video will be available in the upcoming weeks. In the meantime, check out the <a href="http://reid.github.com/decks/2012/yuiconf/yeti.html">slides</a> or the <a href="http://reidburke.com/2012/09/27/write-code-that-works/">Write Code That Works blog post</a> which was the basis for the talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2012/11/18/yeti-at-yuiconf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Write Code That Works</title>
		<link>http://reidburke.com/2012/09/27/write-code-that-works/</link>
		<comments>http://reidburke.com/2012/09/27/write-code-that-works/#comments</comments>
		<pubDate>Thu, 27 Sep 2012 16:36:52 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">https://granary.site5.com/~reid/?p=489</guid>
		<description><![CDATA[Dav Glass and I visited the Yammer office in San Francisco this week to discuss build &#38; test tools we use at YUI. We showed off Shifter for building YUI, Grover for testing headlessly, Yeti for testing in browsers, and Istanbul for statement-level code coverage. We use Travis for running most of this stuff in...  <a href="http://reidburke.com/2012/09/27/write-code-that-works/" title="Read Write Code That Works">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://davglass.com">Dav Glass</a> and I visited the <a href="http://yammer.com">Yammer</a> office in San Francisco this week to discuss build &amp; test tools we use at <a href="http://yuilibrary.com">YUI</a>.</p>
<p>We showed off <a href="https://github.com/yui/shifter">Shifter</a> for building YUI, <a href="https://github.com/davglass/grover">Grover</a> for testing headlessly, <a href="http://yeti.cx/">Yeti</a> for testing in browsers, and <a href="http://istanbul-js.org/">Istanbul</a> for statement-level code coverage. We use <a href="http://travis-ci.org">Travis</a> for running most of this stuff in public CI. We now require 70% statement coverage before a new YUI module is allowed to land in the core and nobody can commit when the Travis or internal CI build is broken, unless the commit fixes the build.</p>
<p>This is all very impressive. But <a href="http://fleegix.org/">@mde</a> was quick to notice that we didn&#8217;t drop everything to get to this point â€” before diving in, you first need to prioritize what you work on. I couldn&#8217;t agree more.</p>
<p>When you&#8217;re starting from scratch, you start to love the metrics. Green dots for passing builds. Green coverage reports when you hit 80% of your statements. The increasing number of passing tests. I&#8217;m all for having good code coverage, but before you go crazy, you should be careful that you don&#8217;t start writing tests for the wrong part of your code.</p>
<h2>Your code is not uniform</h2>
<p>Your code has various levels of quality starting at the first commit you make. You will write some code that&#8217;ll last for weeks or months, and some code that&#8217;ll need a rewrite next week. You need to embrace this kind of change and understand where it happens in your project.</p>
<p>Node.js solves this problem quite well with the notion of a <a href="http://nodejs.org/docs/v0.8.10/api/documentation.html#documentation_stability_index">Stability Index</a>.</p>
<blockquote><p>
  Throughout the documentation, you will see indications of a section&#8217;s stability. The Node.js API is still somewhat changing, and as it matures, certain parts are more reliable than others. Some are so proven, and so relied upon, that they are unlikely to ever change at all. Others are brand new and experimental, or known to be hazardous and in the process of being redesigned.</p>
</blockquote>
<p>The Stability Index ranges from Deprecated (0) and Experimental (1) for unstable code to Locked (5) for code that only changes for the most serious bugs.</p>
<p>It&#8217;s a good idea for any <a href="http://semver.org/spec/v2.0.0-rc.1.html">post-1.0 project</a> to assign a Stability Index to the APIs in your own code. Not only is it a clear message to those using your APIs, but it&#8217;s also a clear message for your team. It tells you where you should â€” and shouldn&#8217;t â€” write tests.</p>
<h2>More stable, more tests</h2>
<p>If you <a href="http://37signals.com/svn/posts/3159-testing-like-the-tsa">write tests like they cost nothing</a>, you&#8217;re going to find yourself writing tests instead of writing code that works.</p>
<p>Kent Beck&#8217;s <a href="http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565">wisdom</a> says it best:</p>
<blockquote><p>
  I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence (I suspect this level of confidence is high compared to industry standards, but that could just be hubris). If I donâ€™t typically make a kind of mistake (like setting the wrong variables in a constructor), I donâ€™t test for it.</p>
</blockquote>
<p>This answer is good and I&#8217;ll take it a step further: You should prioritize writing tests for parts of your code with a higher Stability Index. Especially if you&#8217;re just starting on a new project.</p>
<p>If you&#8217;re writing tests for code that&#8217;s rapidly changing, you&#8217;re going to spend more of your time writing tests instead of shipping features. For code that&#8217;s brand new, I typically only test-first a small amount of code and wait a while before hitting that green bar on a code coverage report.</p>
<p>Don&#8217;t get sucked into the allure of metrics too early. Remember what your job is: writing code that works. Code coverage and good testing tools are very important, but not if they get in the way of building what you&#8217;re supposed to build.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2012/09/27/write-code-that-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Trumps Easy</title>
		<link>http://reidburke.com/2012/09/13/best-trumps-easy/</link>
		<comments>http://reidburke.com/2012/09/13/best-trumps-easy/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 07:32:22 +0000</pubDate>
		<dc:creator>Reid Burke</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://cabinet.reidburke.com/?p=334</guid>
		<description><![CDATA[I work at Yahoo!, building open source software. I build Yeti, but I work alongside the team building YUI. The engineers who built this team, and continue to work on this team, are the reason I have chosen to stay at Yahoo! building Yeti: they choose what&#8217;s best over what&#8217;s easiest. You work with people...  <a href="http://reidburke.com/2012/09/13/best-trumps-easy/" title="Read Best Trumps Easy">Read more &#187;</a>]]></description>
				<content:encoded><![CDATA[<p>I work at Yahoo!, building open source software. I build <a href="http://yeti.cx">Yeti</a>, but I work alongside the team building <a href="http://yuilibrary.com">YUI</a>. The engineers who built this team, and continue to work on this team, are the reason I have chosen to stay at Yahoo! building Yeti: <em>they choose what&#8217;s best over what&#8217;s easiest</em>.</p>
<p>You work with people too. You know your people are not perfect, but they&#8217;re going somewhere great, which is why you&#8217;ve decided to join them. </p>
<p>I&#8217;m going to tell you that building software is very hard, but the most challenging part of my job isn&#8217;t building code. It&#8217;s building people. </p>
<p>Your people are not a test framework or a programming language: they are human beings. Like your favorite code, they don&#8217;t always meet your expectations. They will let you down.</p>
<p><a href="http://www.randsinrepose.com/archives/2008/10/12/the_culture_chart.html">People tell stories.</a> What you do next will define the stories they tell.</p>
<p>You probably rely on these people, so when they fail you, it&#8217;s going to affect you. A lot. You probably don&#8217;t deserve to be subjected to their actions.</p>
<p>It&#8217;s easy to react.</p>
<p>I&#8217;m telling you, the best people never settle on what&#8217;s easy.</p>
<p>The best people never coddle or spin. They&#8217;re honest and speak their mind, but only after <a href="http://37signals.com/svn/posts/3124-give-it-five-minutes">giving it 5 minutes</a>. They <em>think</em> instead of <em>react</em>.</p>
<p>The best people deliver criticism inwardly, one-on-one, to the person who needs it. The attitude is service and respect.</p>
<p>The best people will embrace the opportunity to be a mentor instead of the opportunity to stand up for what they deserve.</p>
<p>Next time your people don&#8217;t meet your expectations, I encourage you to see an opportunity to invest in people. It will be hard. It may take up a lot of your time and nobody but them will appreciate your investment. Yet serving others this way will reward you.</p>
<p>You never know when you&#8217;ll need it yourself.</p>
<p>It&#8217;ll also reward them. Honest feedback delivered this way is very desirable and mutually beneficial.</p>
<p>If you want this kind of culture in your team or community, I&#8217;d encourage you to be the first one to start. Give more than they deserve, seek to understand what they care about, and after careful consideration, deliver your feedback to them personally.</p>
<p>It&#8217;ll be the start of a conversation you won&#8217;t regret.</p>
]]></content:encoded>
			<wfw:commentRss>http://reidburke.com/2012/09/13/best-trumps-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.321 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-05-20 05:18:38 -->
