<?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>Matt Robinson</title>
	<atom:link href="http://www.mattrobinson.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mattrobinson.net</link>
	<description>Nerding Out Since the Distant Future</description>
	<lastBuildDate>Sun, 22 Jan 2012 14:56:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Twitter Weekly Updates for 2012-01-22</title>
		<link>http://www.mattrobinson.net/2012/01/22/twitter-weekly-updates-for-2012-01-22/</link>
		<comments>http://www.mattrobinson.net/2012/01/22/twitter-weekly-updates-for-2012-01-22/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 14:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2012/01/22/twitter-weekly-updates-for-2012-01-22/</guid>
		<description><![CDATA[@nfagerlund Congrats on finishing the book. I&#039;d buy a copy if you put it up for sale. # @jahgru You still want to do lunch today? # #OH &#34;Excited enough to schedule a meeting&#34; #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>@<a href="http://twitter.com/nfagerlund" class="aktt_username">nfagerlund</a> Congrats on finishing the book.  I&#039;d buy a copy if you put it up for sale. <a href="http://twitter.com/mattrobinsonnet/statuses/159530628986052608" class="aktt_tweet_time">#</a></li>
<li>@<a href="http://twitter.com/jahgru" class="aktt_username">jahgru</a> You still want to do lunch today? <a href="http://twitter.com/mattrobinsonnet/statuses/160087082872737792" class="aktt_tweet_time">#</a></li>
<li>#<a href="http://search.twitter.com/search?q=%23OH" class="aktt_hashtag">OH</a>  &quot;Excited enough to schedule a meeting&quot; <a href="http://twitter.com/mattrobinsonnet/statuses/160153490302312450" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2012/01/22/twitter-weekly-updates-for-2012-01-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rank Your Git Contributors Lines of Code (then be careful what you do with the data)</title>
		<link>http://www.mattrobinson.net/2012/01/17/rank-your-git-contributors-lines-of-code-then-be-careful-what-you-do-with-the-data/</link>
		<comments>http://www.mattrobinson.net/2012/01/17/rank-your-git-contributors-lines-of-code-then-be-careful-what-you-do-with-the-data/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 06:41:18 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[metrics LOC]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/?p=135</guid>
		<description><![CDATA[Lately at work there&#8217;s been a bit of an obsession with metrics &#8211; I&#8217;m not sure it&#8217;s healthy. Code metrics can be interesting, but in the wrong hands or used the wrong way, they are misleading and harmful. It&#8217;s still to be seen what the outcome will be in this case. I&#8217;m more than little [...]]]></description>
			<content:encoded><![CDATA[<p>Lately at work there&#8217;s been a bit of an obsession with metrics &#8211; I&#8217;m not sure it&#8217;s healthy.  Code metrics can be interesting, but in the wrong hands or used the wrong way, they are misleading and harmful.  It&#8217;s still to be seen what the outcome will be in this case.  I&#8217;m more than little worried.</p>
<p>That said, even I like to get some numbers on code, especially unfamiliar code, to help me figure out a few things.   For example, I&#8217;ve been using <a href="http://cloc.sourceforge.net/">CLOC (Count Lines of Code)</a> for years to find out quickly how big a project is and what languages are used in what proportion.</p>
<p>The first metric that&#8217;s started to be tracked at work is lines of code added and deleted per release, per author.  I&#8217;ve occasionally glanced at these kinds of numbers in the past too, and even wrote a little script (<a href="https://github.com/mmrobins/git-rank">git-rank</a>) to get the same kind of info when I was on a code deletion spree.  I&#8217;ve found these numbers to be useful for getting a general idea of who is most knowledgeable about a project or some files within the project. </p>
<p>However, the numbers can easily be misleading.  For example, if someone is committing a lot of style reformats, vendoring code from other projects, or autogenerating documentation, their numbers will be very high but they may know very little about the codebase.  For example, for a release to a Rails project I&#8217;ve worked on the metrics gathered showed that I had added 248,475 lines and deleted 458,020 lines. That&#8217;s obviously suspicious, although it does make me look very active.  These are the kinds of numbers that you should dig a little to figure out what&#8217;s happening, which is why I wrote my little git-rank script makes it easy to break those line totals down by file, and then exclude files for the next count.</p>
<p><code>$ git rank v1.1.1..v1.1.9 --all-authors-breakdown --author "Matt Robinson"<br />
Matt Robinson         603061<br />
                      1 vendor/gems/json_pure-1.5.1/tests/fixtures/fail14.json<br />
                      1 vendor/gems/json_pure-1.5.1/tests/fixtures/fail12.json<br />
                      1 vendor/rails/railties/test/vendor/gems/dummy-gem-a-0.4.0/lib/dummy-gem-a.rb<br />
                      ........<br />
                      21418 vendor/gems/haml-3.0.13/lib/haml/precompiler.rbc<br />
                      24953 vendor/gems/haml-3.0.13/test/sass/engine_test.rbc<br />
                      30038 vendor/gems/haml-3.0.13/test/haml/engine_test.rbc<br />
Matt Robinson         603061</code></p>
<p>It&#8217;s pretty obvious that most of what I did was update vendored gems.  If you&#8217;re trying to figure out who did the most work between the releases I specified, you probably want to ignore the vendor directory when count lines of code.</p>
<p><code>% git rank v1.1.1..v1.1.9 --exclude-file vendor<br />
Josh Cooper           4<br />
Nigel Kersten         8<br />
Andreas Zuber         11<br />
Michael Stahnke       11<br />
Jacob Helwig          15<br />
nfagerlund            37<br />
Daniel Pittman        283<br />
Max Martin            418<br />
Nick Lewis            543<br />
Randall Hansen        901<br />
Pieter van de Bruggen 1018<br />
Matt Robinson         1661</code></p>
<p>Now we&#8217;re starting to get a more realistic picture.  From here we could dig deeper by listing all the files again for all the authors, and then maybe start excluding lines based on a regex if there were automated changes, and then maybe look at additions vs deletions in the count (I&#8217;m summing them together for these numbers).</p>
<p>However, I hope people *never* think they can get the whole picture, or even most of the picture, of a code base and who is contributing the most from something as arbitrary as lines of code counts.  I feel like that&#8217;s almost too obvious to say, but I&#8217;ve heard horror stories of managers who tie reviews to metrics like this.  I hope I never personally experience such a thing.</p>
<p>P.S. If anyone tries using the &#8216;git-rank&#8217; project I mentioned above, please keep in mind it&#8217;s a hacky little sick project that is probably got some bugs and you should take the numbers is spits out with a grain of salt.  <a href="http://en.wikipedia.org/wiki/Grain_of_salt">What a weird phrase that is</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2012/01/17/rank-your-git-contributors-lines-of-code-then-be-careful-what-you-do-with-the-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing AntiPatterns &#8211; Open Source Bridge 2011</title>
		<link>http://www.mattrobinson.net/2012/01/17/testing-antipatterns-open-source-bridge-2011/</link>
		<comments>http://www.mattrobinson.net/2012/01/17/testing-antipatterns-open-source-bridge-2011/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 06:12:26 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/?p=152</guid>
		<description><![CDATA[I&#8217;m finally getting around to posting my slides from the presentation I did at Open Source Bridge in June last year. It was fun to present and attend the conference, although next time I hope do to a talk about something more fun. Testing is an important and useful topic, but not nearly as entertaining [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m finally getting around to posting my slides from the presentation I did at <a href="http://opensourcebridge.org/sessions/690">Open Source Bridge</a> in June last year.  It was fun to present and attend the conference, although next time I hope do to a talk about something more fun.  Testing is an important and useful topic, but not nearly as entertaining as <a href="http://opensourcebridge.org/sessions/581">a totally RESTful language</a>.</p>
<div style="width:425px" id="__ss_11097677"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/mmrobins/open-source-bridge-testing-antipatterns-presentation-11097677" title="Open source bridge testing antipatterns presentation" target="_blank">Open source bridge testing antipatterns presentation</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11097677" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/mmrobins" target="_blank">mmrobins</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2012/01/17/testing-antipatterns-open-source-bridge-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Weekly Updates for 2012-01-01</title>
		<link>http://www.mattrobinson.net/2012/01/01/twitter-weekly-updates-for-2012-01-01/</link>
		<comments>http://www.mattrobinson.net/2012/01/01/twitter-weekly-updates-for-2012-01-01/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 14:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2012/01/01/twitter-weekly-updates-for-2012-01-01/</guid>
		<description><![CDATA[I deleted over 1000 lines of code today. Tomorrow I&#039;ll delete 4000 more. # Cross platform testing is hard&#8230; but let&#039;s still not go shopping. #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>I deleted over 1000 lines of code today.  Tomorrow I&#039;ll delete 4000 more. <a href="http://twitter.com/mattrobinsonnet/statuses/152253495947436033" class="aktt_tweet_time">#</a></li>
<li>Cross platform testing is hard&#8230;  but let&#039;s still not go shopping. <a href="http://twitter.com/mattrobinsonnet/statuses/152612835694874625" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2012/01/01/twitter-weekly-updates-for-2012-01-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source Platform Benefits from Closed Source Features</title>
		<link>http://www.mattrobinson.net/2011/12/29/open-source-platform-benefits-from-closed-source-features/</link>
		<comments>http://www.mattrobinson.net/2011/12/29/open-source-platform-benefits-from-closed-source-features/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 05:35:52 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/?p=125</guid>
		<description><![CDATA[When I first started working for Puppet Labs, one of the main reasons was that I would get to contribute to open source software as a full time job. However, for much of the summer and fall I was leading a team to create a closed source feature built on top of the open source [...]]]></description>
			<content:encoded><![CDATA[<p>When I first started working for <a href="http://puppetlabs.com/">Puppet Labs</a>, one of the main reasons was that I would get to contribute to open source software as a full time job.  However, for much of the summer and fall I was leading a team to create a closed source feature built on top of the open source projects in the Puppet ecosystem, and it turned out pretty well if I do say myself &#8211; <a href="http://puppetlabs.com/blog/live-management-part-2-controlling-puppet-and-invoking-agents/">Live Management</a>.  It&#8217;s a web app addon to <a href="http://puppetlabs.com/puppet/related-projects/dashboard/">Puppet Dashboard</a> that exposes the command line interface of the cool server orchestration framework <a href="http://puppetlabs.com/mcollective/introduction/">MCollective</a>.  MCollective lets you execute commands on large numbers of systems in parallel, including doing things like triggering Puppet runs, starting and stopping services, or gathering lots of realtime information about your infrastructure from <a href="http://puppetlabs.com/puppet/related-projects/facter/">Facter</a>.  It&#8217;s like the big red button for your entire infrastructure: so easy to use even your manager can now blow up your infrastructure with a few clicks.</p>
<p>Besides building on the open source Puppet projects of Puppet, MCollective, Puppet Dashboard and Facter, we also used a ton of other open source software directly: <a href="http://rubyonrails.org/">Rails</a>, <a href="http://sinatrarb.com">Sinatra</a>, <a href="http://batmanjs.org/">BatmanJS</a>, <a href="http://jquery.com/">JQuery</a> and many more indirectly.  One of our team members <a href="https://github.com/pvande">pvande</a> was able to contribute a lot of code and help back to the BatmanJS project &#8211; we had to since it&#8217;s alpha software and we were using it in a commercial application.</p>
<p>As I worked on the project, I sometimes felt sad that it wasn&#8217;t being open sourced.  I knew the rationalization that at some point the company has to make a product that people will pay us money for, but that wasn&#8217;t the rationalization that helped me accept it most at the end.  What helped was knowing that by building on top of other open source projects, we ended up contributing a lot back to them.  Puppet got bug fixes and small new features to help us manage resources, MCollective got plugin improvements and feedback on how it can better support web app use cases and scale testing, Puppet Dashboard got some CSS cleanup and UI improvements, and BatmanJS got lots of real world use, feedback and code.</p>
<p>Besides, it&#8217;s <a href="http://puppetlabs.com/puppet/puppet-enterprise/">free to try out</a> for fewer than 10 nodes, and since it&#8217;s written in interpreted languages, people can view the source code if they really want to.  There&#8217;s nothing stopping someone from writing a similar thing open sourced, and now we&#8217;ve done some of the hard work of improving the platform they would also build on.  This does mean that we&#8217;ll have to continue to innovate and improve on our closed source features that sell product, but also on our open source platform that enables anyone to build their own features make their life managing systems easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2011/12/29/open-source-platform-benefits-from-closed-source-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Weekly Updates for 2011-12-18</title>
		<link>http://www.mattrobinson.net/2011/12/18/twitter-weekly-updates-for-2011-12-18/</link>
		<comments>http://www.mattrobinson.net/2011/12/18/twitter-weekly-updates-for-2011-12-18/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 14:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2011/12/18/twitter-weekly-updates-for-2011-12-18/</guid>
		<description><![CDATA[Helping people learn #puppet is gratifying, but constantly pointing how to correct syntax errors (it tells you the file and line!) gets old #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>Helping people learn #<a href="http://search.twitter.com/search?q=%23puppet" class="aktt_hashtag">puppet</a> is gratifying, but constantly pointing how to correct syntax errors (it tells you the file and line!) gets old <a href="http://twitter.com/mattrobinsonnet/statuses/147567167838224385" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2011/12/18/twitter-weekly-updates-for-2011-12-18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Weekly Updates for 2011-11-13</title>
		<link>http://www.mattrobinson.net/2011/11/13/twitter-weekly-updates-for-2011-11-13/</link>
		<comments>http://www.mattrobinson.net/2011/11/13/twitter-weekly-updates-for-2011-11-13/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 14:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2011/11/13/twitter-weekly-updates-for-2011-11-13/</guid>
		<description><![CDATA[Come compare books with me on Goodreads: http://t.co/GPgfDrTM #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>Come compare books with me on Goodreads: <a href="http://t.co/GPgfDrTM" rel="nofollow">http://t.co/GPgfDrTM</a> <a href="http://twitter.com/mattrobinsonnet/statuses/133299466060042240" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2011/11/13/twitter-weekly-updates-for-2011-11-13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Weekly Updates for 2011-08-21</title>
		<link>http://www.mattrobinson.net/2011/08/21/twitter-weekly-updates-for-2011-08-21/</link>
		<comments>http://www.mattrobinson.net/2011/08/21/twitter-weekly-updates-for-2011-08-21/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 13:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2011/08/21/twitter-weekly-updates-for-2011-08-21/</guid>
		<description><![CDATA[How often does @github prune? I assume they run &#039;git gc&#039; on repos every so often, and that defaults to prune things older than two weeks&#8230; #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>How often does @<a href="http://twitter.com/github" class="aktt_username">github</a> prune?  I assume they run &#039;git gc&#039; on repos every so often, and that defaults to prune things older than two weeks&#8230; <a href="http://twitter.com/mattrobinsonnet/statuses/103611337338404864" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2011/08/21/twitter-weekly-updates-for-2011-08-21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Weekly Updates for 2011-07-17</title>
		<link>http://www.mattrobinson.net/2011/07/17/twitter-weekly-updates-for-2011-07-17/</link>
		<comments>http://www.mattrobinson.net/2011/07/17/twitter-weekly-updates-for-2011-07-17/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 13:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2011/07/17/twitter-weekly-updates-for-2011-07-17/</guid>
		<description><![CDATA[TED talks android app keeps crashing. Finally realized how much better using the RSS feed is. #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>TED talks android app keeps crashing.  Finally realized how much better using the RSS feed is. <a href="http://twitter.com/mattrobinsonnet/statuses/92109587196542976" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2011/07/17/twitter-weekly-updates-for-2011-07-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Weekly Updates for 2011-06-05</title>
		<link>http://www.mattrobinson.net/2011/06/05/twitter-weekly-updates-for-2011-06-05/</link>
		<comments>http://www.mattrobinson.net/2011/06/05/twitter-weekly-updates-for-2011-06-05/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 13:56:00 +0000</pubDate>
		<dc:creator>mattr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mattrobinson.net/2011/06/05/twitter-weekly-updates-for-2011-06-05/</guid>
		<description><![CDATA[Finally figured out why ctrl+r reverse search doesn&#039;t work in IRB on Mac. #ruby compiled w/ libedit, not libreadline. http://bit.ly/bS0MOh #]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>Finally figured out why ctrl+r reverse search doesn&#039;t work in IRB on Mac.  #<a href="http://search.twitter.com/search?q=%23ruby" class="aktt_hashtag">ruby</a> compiled w/ libedit, not libreadline. <a href="http://bit.ly/bS0MOh" rel="nofollow">http://bit.ly/bS0MOh</a> <a href="http://twitter.com/mattrobinsonnet/statuses/75771243718119424" class="aktt_tweet_time">#</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattrobinson.net/2011/06/05/twitter-weekly-updates-for-2011-06-05/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

