<?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>danielbachhuber</title>
	<atom:link href="http://danielbachhuber.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielbachhuber.com</link>
	<description>wrangling code around the globe</description>
	<lastBuildDate>Thu, 23 May 2013 16:22:33 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6-beta3-24369</generator>
		<item>
		<title>Captured &#8211; Screen Capture sharing for Mac</title>
		<link>http://danielbachhuber.com/2013/05/23/captured-screen-capture-sharing-for-mac/</link>
		<comments>http://danielbachhuber.com/2013/05/23/captured-screen-capture-sharing-for-mac/#comments</comments>
		<pubDate>Thu, 23 May 2013 16:22:33 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[asides]]></category>
		<category><![CDATA[Captured]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Skitch]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131536</guid>
		<description><![CDATA[Captured &#8211; Screen Capture sharing for Mac. Works with Dropbox too. Bye bye Skitch.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.capturedapp.com/">Captured &#8211; Screen Capture sharing for Mac</a>. Works with Dropbox too. Bye bye Skitch.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/23/captured-screen-capture-sharing-for-mac/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Status</title>
		<link>http://danielbachhuber.com/2013/05/22/status-163/</link>
		<comments>http://danielbachhuber.com/2013/05/22/status-163/#comments</comments>
		<pubDate>Wed, 22 May 2013 20:47:30 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[statuses]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[Human Made]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Remember The Milk]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131534</guid>
		<description><![CDATA[We&#8217;re using Github issues for all of our projects, but I still like Remember The Milk as the interface for deciding what I need to work on next. It would be neat if the two worked together. An issue assigned to me in Github would... <a class="moretag" href="http://danielbachhuber.com/2013/05/22/status-163/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>We&#8217;re using Github issues for all of our projects, but I still like Remember The Milk as the interface for deciding what I need to work on next. It would be neat if the two worked together.</p>
<p>An issue assigned to me in Github would produce a new inbox task in Remember The Milk (if one didn&#8217;t already exist with the issue in the URL field). I could then list, prioritize, and give a due date as needed. Completing the task in Remember The Milk would complete the issue in Github (and vice versa).</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/22/status-163/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status</title>
		<link>http://danielbachhuber.com/2013/05/21/status-162/</link>
		<comments>http://danielbachhuber.com/2013/05/21/status-162/#comments</comments>
		<pubDate>Tue, 21 May 2013 18:00:13 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[statuses]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[Human Made]]></category>
		<category><![CDATA[IRC]]></category>
		<category><![CDATA[Notify Humans]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131532</guid>
		<description><![CDATA[Couple of things I learned the hard way yesterday: When using a password to connect to an IRC server, you&#8217;ll need to join the room before you can post a message to it. IRC servers (or maybe it&#8217;s just ours) are quite slow to fully... <a class="moretag" href="http://danielbachhuber.com/2013/05/21/status-162/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Couple of things I learned the hard way yesterday:</p>
<ul>
<li>When using a password to connect to an IRC server, <a href="https://github.com/humanmade/Notify-Humans/commit/60f434f2e638f7f176e3f71abbdfdf6b0b1b8507">you&#8217;ll need to join the room</a> before you can post a message to it.</li>
<li>IRC servers (or maybe it&#8217;s just ours) are quite slow to fully respond to connection requests. Like, two minutes slow.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/21/status-162/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where Tumblr Came From</title>
		<link>http://danielbachhuber.com/2013/05/20/where-tumblr-came-from/</link>
		<comments>http://danielbachhuber.com/2013/05/20/where-tumblr-came-from/#comments</comments>
		<pubDate>Mon, 20 May 2013 20:16:45 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[asides]]></category>
		<category><![CDATA[Anil Dash]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[Tumblr]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131530</guid>
		<description><![CDATA[Where Tumblr Came From. Wonderful &#8220;making of&#8221; piece.]]></description>
				<content:encoded><![CDATA[<p><a href="http://dashes.com/anil/2013/05/seven-years-ago-my-wife.html">Where Tumblr Came From</a>. Wonderful &#8220;making of&#8221; piece.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/20/where-tumblr-came-from/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pear chips</title>
		<link>http://danielbachhuber.com/2013/05/19/pear-chips/</link>
		<comments>http://danielbachhuber.com/2013/05/19/pear-chips/#comments</comments>
		<pubDate>Sun, 19 May 2013 16:57:15 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[food]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131528</guid>
		<description><![CDATA[Two bags of Costco pears, transformed into Nature&#8217;s best snack.]]></description>
				<content:encoded><![CDATA[<p><img src="http://danielbachhuber.com/wp-content/uploads/2013/05/1368982557.jpg" class="alignnone size-full" width="600" height="600" /></p>
<p>Two bags of Costco pears, transformed into Nature&#8217;s best snack.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/19/pear-chips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status</title>
		<link>http://danielbachhuber.com/2013/05/18/status-161/</link>
		<comments>http://danielbachhuber.com/2013/05/18/status-161/#comments</comments>
		<pubDate>Sat, 18 May 2013 18:31:00 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[statuses]]></category>
		<category><![CDATA[Portland]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131525</guid>
		<description><![CDATA[Plans for today and tomorrow: running in Forest Park, picking up shelves to finish the entryway, designing the blag, hiking in the Gorge, getting a new book at Powell&#8217;s, making nograinola, and/or seeing a movie. In no particular order. The best type of weekend.]]></description>
				<content:encoded><![CDATA[<p>Plans for today and tomorrow: running in Forest Park, picking up shelves to finish the entryway, designing the blag, hiking in the Gorge, getting a new book at Powell&#8217;s, making nograinola, and/or seeing a movie. In no particular order. The best type of weekend.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/18/status-161/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I went running. It cleared my head nicely.</title>
		<link>http://danielbachhuber.com/2013/05/16/status-160/</link>
		<comments>http://danielbachhuber.com/2013/05/16/status-160/#comments</comments>
		<pubDate>Thu, 16 May 2013 22:04:26 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[statuses]]></category>
		<category><![CDATA[Notify Humans]]></category>
		<category><![CDATA[Portland]]></category>
		<category><![CDATA[running]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131523</guid>
		<description><![CDATA[I went running. It cleared my head nicely. Time to work on Notify Humans. The End.]]></description>
				<content:encoded><![CDATA[<p>I went running. It cleared my head nicely. Time to work on Notify Humans. The End.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/16/status-160/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#pdxwp: Code Review Takes Two</title>
		<link>http://danielbachhuber.com/2013/05/14/pdxwp-code-review-takes-two/</link>
		<comments>http://danielbachhuber.com/2013/05/14/pdxwp-code-review-takes-two/#comments</comments>
		<pubDate>Tue, 14 May 2013 20:51:58 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[meetups]]></category>
		<category><![CDATA[PDXWP]]></category>
		<category><![CDATA[Portland]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131506</guid>
		<description><![CDATA[We did a second pass at our code review meetup — last night turned out much better than the first. The high point for me: most of the &#8220;presentation&#8221; was, in fact, discussion. The latter proved to be way more valuable for everyone, as most... <a class="moretag" href="http://danielbachhuber.com/2013/05/14/pdxwp-code-review-takes-two/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>We did a second pass at our code review meetup — last night turned out much better than the first. The high point for me: most of the &#8220;presentation&#8221; was, in fact, discussion. The latter proved to be way more valuable for everyone, as most of the twenty people in the room don&#8217;t do code review on a regular basis.</p>
<p>Here&#8217;s what we did:</p>
<ul>
<li><a href="http://jeremyrosscreative.com/">Jeremy Ross</a> submitted a section of code he had been working on, along with instructions on what he wanted feedback on.</li>
<li>On Saturday, I reviewed the code. I committed it in one commit to a branch in a private Github repo. On the changeset, I did a line-by-line read-through, commenting as I went. To wrap the review up, I created a pull request explaining how I did the review, what I looked for, and how to interpret my feedback.</li>
<li>Saturday night, I prepared a <a href="http://lab.hakim.se/reveal-js/">reveal.js</a> presentation with an introduction to code review and the contents of what I found in my review. reveal.js is a super slick tool for preparing a HTML/CSS/JS presentation out of content in Markdown.</li>
<li>Jeremy read and considered my review, then updated the presentation with his feedback.</li>
<li>I did most of the <del>presentation</del> discussion facilitation, and Jeremy talked through how he received my feedback.</li>
</ul>
<p>reveal.js doesn&#8217;t produce great static slide output, and I used its <a href="https://github.com/hakimel/reveal.js#markdown">Markdown feature</a> which requires Grunt to serve, so the bulk of what we covered will forever live on in the outline that follows.<br />
<span id="more-131506"></span></p>
<h3>What is code review vs. a code audit?</h3>
<p><em>Code review</em> is a process for testing, revising, and confirming code before pushing to production.</p>
<p><em>Code audit</em> is a similar process, but happens after the push to production.</p>
<h3>Why is code review useful over code audit?</h3>
<p>There are a <a href="http://www.phabricator.com/docs/phabricator/article/User_Guide_Review_vs_Audit.html#advantages-of-review">number of reasons</a>, primarily&#8230;</p>
<ul>
<li><em>Promotes small, frequent improvements</em> over large changesets. With the former, it&#8217;s easier for the reviewer to confirm the code change matches the expected behavior change.</li>
<li><em>Easier to change direction</em> on the architecture of the code before pushing live than after pushing live.</li>
<li><em>Developers have greater incentive to fix problems</em> before they&#8217;ve pushed to production, than after.</li>
</ul>
<h3>How do you do code review well?</h3>
<p>Well, everyone has their opinions. Here are some:</p>
<ul>
<li>Establish guidelines for the review: what&#8217;s being reviewed, what the reviewer is looking for, and how feedback will be provided.</li>
<li>Reviewee should include details on how to test anything that needs to be tested.</li>
<li>Reviewer should over communicate, prioritize feedback, and be constructive, not adversarial.</li>
<li>Code review is a conversation. Timeliness, courtesy, and clarity all matter.</li>
</ul>
<h3>How Daniel reviewed Jeremy&#8217;s code</h3>
<ol>
<li>Straight read through of the code, line-by-line.</li>
<li>Focus on security, coding standards, and best practices.</li>
<li>Hashtagged my feedback: #needsfix, #wouldbenice, #optional, #question</li>
<li>Over-communicated, adding examples and links as much as possible. Some of my comments, as you&#8217;ll see, are better than others.</li>
<li>Didn&#8217;t QA code against what it&#8217;s supposed to do, or give much thought to how you could restructure it.</li>
</ol>
<h2>Issues Daniel found in the code</h2>
<p><strong>Security</strong></p>
<p>Validate / sanitize data in input.</p>
<p><img class="alignnone size-full wp-image-131510" alt="Sanitize user input" src="http://danielbachhuber.com/wp-content/uploads/2013/05/sanitize.png" width="932" height="353" /></p>
<p>Escape data on output.</p>
<p><img class="alignnone size-full wp-image-131511" alt="Escape data on output" src="http://danielbachhuber.com/wp-content/uploads/2013/05/escape.png" width="930" height="525" /></p>
<p>Put secrets in a config file.</p>
<p><img class="alignnone size-full wp-image-131513" alt="secrets" src="http://danielbachhuber.com/wp-content/uploads/2013/05/secrets.png" width="932" height="411" /></p>
<p><strong>Best practices</strong></p>
<p>Prefix everything to avoid collisions in global scope.</p>
<p><img class="alignnone size-full wp-image-131514" alt="Prefix everything to avoid collisions in global scope" src="http://danielbachhuber.com/wp-content/uploads/2013/05/prefixeverything.png" width="932" height="463" /></p>
<p>Remove or comment on dead code.</p>
<p><img class="alignnone size-full wp-image-131515" alt="Remove or comment dead code" src="http://danielbachhuber.com/wp-content/uploads/2013/05/commentedcode.png" width="939" height="433" /></p>
<p><strong>Considerations</strong></p>
<p>Sessions don&#8217;t work well in multi-server environments.</p>
<p><img class="alignnone size-full wp-image-131516" alt="Sessions don't work well in a multi-server environment" src="http://danielbachhuber.com/wp-content/uploads/2013/05/sessions.png" width="951" height="361" /></p>
<p>Use WP_Http API for remote requests.</p>
<p><img class="alignnone size-full wp-image-131517" alt="Use WP_Http API for remote requests." src="http://danielbachhuber.com/wp-content/uploads/2013/05/wphttp.png" width="930" height="402" /></p>
<p>Questions help the developer justify their decisions.</p>
<p><img class="alignnone size-full wp-image-131519" alt="Questions help the developer justify their decisions" src="http://danielbachhuber.com/wp-content/uploads/2013/05/questions.png" width="932" height="514" /></p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/14/pdxwp-code-review-takes-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Noel Tock Joins Human Made</title>
		<link>http://danielbachhuber.com/2013/05/13/noel-tock-joins-human-made/</link>
		<comments>http://danielbachhuber.com/2013/05/13/noel-tock-joins-human-made/#comments</comments>
		<pubDate>Mon, 13 May 2013 19:33:23 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[asides]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[Human Made]]></category>
		<category><![CDATA[Noel Tock]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131504</guid>
		<description><![CDATA[Noel Tock Joins Human Made. Hells yes.]]></description>
				<content:encoded><![CDATA[<p><a href="http://hmn.md/blog/2013/05/13/noel-tock-joins-human-made/">Noel Tock Joins Human Made</a>. Hells yes.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/13/noel-tock-joins-human-made/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status</title>
		<link>http://danielbachhuber.com/2013/05/13/status-159/</link>
		<comments>http://danielbachhuber.com/2013/05/13/status-159/#comments</comments>
		<pubDate>Mon, 13 May 2013 18:07:29 +0000</pubDate>
		<dc:creator>Daniel Bachhuber</dc:creator>
				<category><![CDATA[statuses]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[little big details]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://danielbachhuber.com/?p=131501</guid>
		<description><![CDATA[I love that Chrome is smart about saving form details. When I accidentally click away, and then hurriedly hit the &#8220;Back&#8221; button, there&#8217;s all my data again. Nice touch.]]></description>
				<content:encoded><![CDATA[<p>I love that Chrome is smart about saving form details. When I accidentally click away, and then hurriedly hit the &#8220;Back&#8221; button, there&#8217;s all my data again. Nice touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielbachhuber.com/2013/05/13/status-159/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
