<?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>Pivotal Labs &#187; Johnny Mukai-Heidt</title>
	<atom:link href="http://pivotallabs.com/author/jmukai/feed/" rel="self" type="application/rss+xml" />
	<link>http://pivotallabs.com</link>
	<description>Agility Developed</description>
	<lastBuildDate>Sun, 19 May 2013 18:22:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Lessons from the Beach</title>
		<link>http://pivotallabs.com/lessons-from-the-beach/</link>
		<comments>http://pivotallabs.com/lessons-from-the-beach/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 18:43:58 +0000</pubDate>
		<dc:creator>Johnny Mukai-Heidt</dc:creator>
				<category><![CDATA[Labs]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/?p=18552</guid>
		<description><![CDATA[<p>Here are Pivotal we call our time between billable projects “the beach.” We spend most of this time working on projects which are internal or open source, sometimes both. One such project is Project Monitor and on my last go-round on the beach I got to work on it with my long-time colleague Mr. Saracco. Project Monitor is a quick way for a team to see the status of their test suite. It’s basically a board of tiles, one for each test suite, colored either green or red depending on the current state of the build. It’s an interesting app to work on because it’s used in every Pivotal office and it’s part of our daily lives. It’s fun and it feels rewarding to work on something you see out of the corner of your eye every day. It’s also a little nerve-wracking. If you break something, every one of&#8230;</p><p>The post <a href="http://pivotallabs.com/lessons-from-the-beach/">Lessons from the Beach</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Here are Pivotal we call our time between billable projects “the beach.” We spend most of this time working on projects which are internal or open source, sometimes both. One such project is Project Monitor and on my last go-round on the beach I got to work on it with my long-time colleague <a href="http://pivotallabs.com/author/jsaracco/">Mr. Saracco</a>.</p>
<p>Project Monitor is a quick way for a team to see the status of their test suite. It’s basically a board of tiles, one for each test suite, colored either green or red depending on the current state of the build. It’s an interesting app to work on because it’s used in every Pivotal office and it’s part of our daily lives. It’s fun and it feels rewarding to work on something you see out of the corner of your eye every day. It’s also a little nerve-wracking. If you break something, every one of your co-workers knows!</p>
<p><a href="http://pivotallabs.com/wordpress/wp-content/uploads/2013/04/IMG_20130304_105416.jpg?48a6bc"><img class="alignnone size-medium wp-image-18553" alt="IMG_20130304_105416" src="http://pivotallabs.com/wordpress/wp-content/uploads/2013/04/IMG_20130304_105416-300x225.jpg?48a6bc" width="300" height="225" /></a></p>
<p>Project Monitor has historically been a bit of a tangle. Frequently, a Pivot or two has a week or less on the beach and they’re tasked with implementing some new feature or fixing a bug and then they’re off on another project. Digging through the codebase, you can see there’s some baggage. Maybe there’s a beloved tool from a previous project, a half-used framework, or a&#8211;ahem&#8211;clever use of code. Not always, but sometimes, these things trip up the next developer.</p>
<p>A fundamental truth about code is that it has more than one audience. We often think of the compiler or the interpreter as the end consumer of our code, and of course that’s true. But it’s easy to downplay how important it is to think about the next set of eyes on your codebase. Even if you have no collaborators and develop your software in a sound-proof bunk, you have in the very least your future self to communicate with.</p>
<p>My biggest lesson from this go-round on the beach is that it is exceptionally important for open source software to code in such a way that optimizes for quick developer ramp up. This means writing code where intent is clear. It means minimizing dependencies so as to shrink the number of necessary technologies for a developer to additionally ramp up on. It means nice, clean commits with clear logs. In short, it means having a boatload of empathy for the next person reading the code.</p>
<p><a href="http://pivotallabs.com/wordpress/wp-content/uploads/2013/04/IMG_20130304_105411.jpg?48a6bc"><img class="alignnone size-medium wp-image-18554" alt="IMG_20130304_105411" src="http://pivotallabs.com/wordpress/wp-content/uploads/2013/04/IMG_20130304_105411-300x225.jpg?48a6bc" width="300" height="225" /></a></p>
<p>On a private project with a small, tight team, there’s plenty of leeway. Someone with some history can just explain code that a new dev finds confusing. There is usually no such luxury on open source projects. Furthermore, the lifetime success of your project may be determined by willing members of the community standing up and pitching in. The next person to look at your code may not have any context at all. They will wake up, Memento style, and only see the code at hand. They do not have the history you do.</p>
<p>When you&#8217;re doing open source work, lease, please, please think of the next developer when you reach for that shiny new gem, that clever piece of meta-programming, that half-adopted convention.</p>
<p>The post <a href="http://pivotallabs.com/lessons-from-the-beach/">Lessons from the Beach</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/lessons-from-the-beach/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Snowpocalypse Wow&#8230;</title>
		<link>http://pivotallabs.com/snowpocalypse-wow/</link>
		<comments>http://pivotallabs.com/snowpocalypse-wow/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 14:52:37 +0000</pubDate>
		<dc:creator>Johnny Mukai-Heidt</dc:creator>
				<category><![CDATA[Labs]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/?p=15153</guid>
		<description><![CDATA[<p>Stand Up [NY] 02/08/13: Snowpocalypse Wow&#8230; or the Snowpocalypse That Wasn&#8217;t Johnny Mukai &#038; Daniel Grippi Interestings Rake::Task[:name].enhance (from Dave Goddard) If you wish to change the pre-requisites for rake tasks, or add functions to run after them, then you can use Rake::Task[:name].enhance(PRE-REQS) do STUFF AFTER end Window Function: lead and lag (also from Dave Goddard) If you have records with only start dates, and you want start and end dates, there is a great window function called &#34;lead&#34;, which will give you the next value in the group. eg. id &#124; person &#124; start &#124; 1 &#124; 1 &#124; 123 &#124; 2 &#124; 1 &#124; 456 &#124; 3 &#124; 2 &#124; 234 &#124; 4 &#124; 2 &#124; 567 &#124; then running SELECT id, person, start, lead(start) OVER(partition by person ORDER BY start ASC) as ended; will return id &#124; person &#124; start &#124; ended &#124; 1 &#124; 1 &#124;&#8230;</p><p>The post <a href="http://pivotallabs.com/snowpocalypse-wow/">Snowpocalypse Wow&#8230;</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Stand Up [NY] 02/08/13: Snowpocalypse Wow&#8230; or the Snowpocalypse That Wasn&#8217;t<br />
Johnny Mukai &#038; Daniel Grippi</p>
<h2>Interestings</h2>
<h3>Rake::Task[:name].enhance</h3>
<p>(from Dave Goddard)</p>
<p>If you wish to change the pre-requisites for rake tasks, or add functions to run after them, then you can use </p>
<p>Rake::Task[:name].enhance(PRE-REQS) do<br />
  STUFF AFTER<br />
end</p>
<h3>Window Function: lead and lag</h3>
<p>(also from Dave Goddard)</p>
<p>If you have records with only start dates, and you want start and end dates, there is a great window function called &quot;lead&quot;, which will give you the next value in the group. eg.</p>
<p>id | person  | start |<br />
1  |         1  | 123  |<br />
2  |         1  | 456  |<br />
3  |         2  | 234  |<br />
4  |         2  | 567  |</p>
<p>then running </p>
<p>SELECT id, person, start, lead(start) OVER(partition by person ORDER BY start ASC) as ended;</p>
<p>will return </p>
<p>id | person  | start | ended |<br />
1  |         1  | 123  | 456     |<br />
2  |         1  | 456  | NULL   |<br />
3  |         2  | 234  | 567     |<br />
4  |         2  | 567  | NULL   |</p>
<p>PS. using postgresql 9.2 ranges can make the answer even more fun.</p>
<p>The post <a href="http://pivotallabs.com/snowpocalypse-wow/">Snowpocalypse Wow&#8230;</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/snowpocalypse-wow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome NYC Iron Bloggers</title>
		<link>http://pivotallabs.com/welcome-nyc-iron-bloggers/</link>
		<comments>http://pivotallabs.com/welcome-nyc-iron-bloggers/#comments</comments>
		<pubDate>Tue, 29 Jan 2013 03:21:25 +0000</pubDate>
		<dc:creator>Johnny Mukai-Heidt</dc:creator>
				<category><![CDATA[Labs]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/?p=11975</guid>
		<description><![CDATA[<p>Last week an article that touched on a popular stereotype of the nocturnal programmer was published at Business Insider. Articles like this are always popping up from time to time and they tend to cause some controversy among programming communities&#8211;probably because one programmer&#8217;s dream work environment is another&#8217;s distracting hell. I wish I had some deep insight into why the internet is overrun with articles like this about what makes for a productive programmer. I think simply that the nature of writing software is not well understood. What we do is tough to categorize. It&#8217;s not like classical engineering, we&#8217;re not calculating the tensile properties of metals and then building a bridge or an airplane. It&#8217;s not art. Maybe programming is a craft. Articles like this that chase after some enigmatic insight into the secret of programmer productivity remind me of a lot of specious advice for fighting writer&#8217;s block.&#8230;</p><p>The post <a href="http://pivotallabs.com/welcome-nyc-iron-bloggers/">Welcome NYC Iron Bloggers</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Last week an article that touched on a popular stereotype of the nocturnal programmer was published at <a title="Why Programmers Work at Night" href="http://www.businessinsider.com/why-programmers-work-at-night-2013-1">Business Insider</a>. Articles like this are always popping up from time to time and they tend to cause some controversy among programming communities&#8211;probably because one programmer&#8217;s dream work environment is another&#8217;s distracting hell.</p>
<p>I wish I had some deep insight into why the internet is overrun with articles like this about what makes for a productive programmer. I think simply that the nature of writing software is not well understood. What we do is tough to categorize. It&#8217;s not like classical engineering, we&#8217;re not calculating the tensile properties of metals and then building a bridge or an airplane. It&#8217;s not art. <em>Maybe</em> programming is a craft.</p>
<p>Articles like this that chase after some enigmatic insight into the secret of programmer productivity remind me of a lot of specious advice for fighting writer&#8217;s block. Lock yourself in a room, naked, with nothing but a typewriter. Pay someone to slap you when you stop writing. Whenever I come across this kind of advice I&#8217;m reminded of this canonical Chuck Close quote:</p>
<blockquote><p>&#8220;Inspiration is for amateurs; the rest of us just show up and get to work. If you wait around for the clouds to part and a bolt of lightning to strike you in the brain, you are not going to make an awful lot of work. All the best ideas come out of the process; they come out of the work itself. Things occur to you. If you&#8217;re sitting around trying to dream up a great art idea, you can sit there a long time before anything happens. But if you just get to work, something will occur to you and something else will occur to you and something else that you reject will push you in another direction. Inspiration is absolutely unnecessary and somehow deceptive. You feel like you need this great idea before you can get down to work, and I find that&#8217;s almost never the case.&#8221;</p></blockquote>
<p>I imagine most anecdotal accounts of productivity tricks boil down to this: &#8220;this is what keeps me putting one foot in front of the other.&#8221;</p>
<h2>What a convenient segue!</h2>
<p>A bunch of us in the NYC office have a goal to get more blog posts under our belt this year. (<a title="More People Should Write" href="http://jsomers.net/blog/more-people-should-write">Why, you ask?</a>) To that end, we&#8217;ve begun an &#8220;iron blogger&#8221; group this month. The concept is simple: you buy in with twenty bucks and if you write a blog post by the deadline, you get it back. If you don&#8217;t, your cash goes to the group. There&#8217;s more than just a small financial incentive, though; there&#8217;s social pressure, but also the excuse to just ship whatever half formed ideas you have in your drafts folder (he laughed, nervously.) The point is to write&#8211;to write poorly, even!&#8211;to screw up and miss deadlines and live to write again. In other words, the purpose of iron blogger is to encourage us to keep putting one foot in front of the other.</p>
<p>The post <a href="http://pivotallabs.com/welcome-nyc-iron-bloggers/">Welcome NYC Iron Bloggers</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/welcome-nyc-iron-bloggers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stand up: 21 November 2012 &#8211; Gobble gobble</title>
		<link>http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/</link>
		<comments>http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/#comments</comments>
		<pubDate>Wed, 21 Nov 2012 14:13:00 +0000</pubDate>
		<dc:creator>Johnny Mukai-Heidt</dc:creator>
				<category><![CDATA[Labs]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/</guid>
		<description><![CDATA[<p><h2>Interestings</h2>

<h3>Extending Paul Irish’s comprehensive DOM-ready execution &#40;from Nicholas Greenfield&#41;</h3>

<p>A cool pattern for including Javascript in your app based around controller_name/action</p>

<p><a href="http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution">http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution</a></p>

<h3>Teamcity Formatter &#40;from Dave Goddard&#41;</h3>

<p>At some point in v7 &#40;possibly 7.1&#41; Teamcity created a formatter which is much nicer to use</p>

<p><a href="http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity">http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity</a></p>

<p>an example is that there is now a FlowId which lets you output from multiple processess/threads and let Teamcity deal with the demuxing.</p> <a href="http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/">Stand up: 21 November 2012 &#8211; Gobble gobble</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>Interestings</h2>
<h3>Extending Paul Irish’s comprehensive DOM-ready execution &#40;from Nicholas Greenfield&#41;</h3>
<p>A cool pattern for including Javascript in your app based around controller_name/action</p>
<p><a href="http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution">http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution</a></p>
<h3>Teamcity Formatter &#40;from Dave Goddard&#41;</h3>
<p>At some point in v7 &#40;possibly 7.1&#41; Teamcity created a formatter which is much nicer to use</p>
<p><a href="http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity">http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity</a></p>
<p>an example is that there is now a FlowId which lets you output from multiple processess/threads and let Teamcity deal with the demuxing.</p>
<p>The post <a href="http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/">Stand up: 21 November 2012 &#8211; Gobble gobble</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/stand-up-21-november-2012-gobble-gobble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stand Up: 19 November 2012 &#8211; Operation Grumpy Schubert</title>
		<link>http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/</link>
		<comments>http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 14:13:00 +0000</pubDate>
		<dc:creator>Johnny Mukai-Heidt</dc:creator>
				<category><![CDATA[Labs]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/</guid>
		<description><![CDATA[<p><h2>Interestings</h2>

<h3>Gem Licenses Exposed on rubygems.org</h3>

<p>While working on LicenseFinder, Matt Parker, Ian Lesperance, and David Edwards contributed a patch to rubygems.org to show gem licenses on gem pages. That patch has now been merged. https://github.com/rubygems/rubygems.org/pull/458</p>

<p>If you browse to a gem version page on rubygems.org, you'll see a new "Licenses" section. At the moment, this will show "N/A" for most gems, but as people begin to push up new versions of their gems, and as more gem authors set the <code>licenses</code> metadata in their gemspec, you'll start to see gem licenses.</p>

<pre><code>Gem::Specification.new do &#124;s&#124;
  #....
  s.licenses = ["MIT", "BSD-3"]
  #....
end
</code></pre> <a href="http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/">Stand Up: 19 November 2012 &#8211; Operation Grumpy Schubert</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>Interestings</h2>
<h3>Gem Licenses Exposed on rubygems.org</h3>
<p>While working on LicenseFinder, Matt Parker, Ian Lesperance, and David Edwards contributed a patch to rubygems.org to show gem licenses on gem pages. That patch has now been merged. https://github.com/rubygems/rubygems.org/pull/458</p>
<p>If you browse to a gem version page on rubygems.org, you&#8217;ll see a new &#8220;Licenses&#8221; section. At the moment, this will show &#8220;N/A&#8221; for most gems, but as people begin to push up new versions of their gems, and as more gem authors set the <code>licenses</code> metadata in their gemspec, you&#8217;ll start to see gem licenses.</p>
<pre><code>Gem::Specification.new do |s|
  #....
  s.licenses = ["MIT", "BSD-3"]
  #....
end
</code></pre>
<p>The post <a href="http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/">Stand Up: 19 November 2012 &#8211; Operation Grumpy Schubert</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/stand-up-19-november-2012-operation-grumpy-schubert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using apc
Database Caching using apc
Object Caching 706/756 objects using apc

 Served from: pivotallabs.com @ 2013-05-19 14:37:38 by W3 Total Cache -->