<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-6445576618492939938.post4728873233294210240..comments</id><updated>2009-09-15T16:57:47.506-07:00</updated><category term='ruby'/><category term='pool'/><category term='dev'/><category term='leisure'/><category term='gtd runway'/><category term='code-quality'/><category term='work'/><title type='text'>Comments on sometimes nothin' can be a real cool hand: Enforcing Ruby code quality</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.martyandrews.net/feeds/4728873233294210240/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html'/><author><name>Marty Andrews</name><uri>http://www.blogger.com/profile/02704401325754822667</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_IrJ0ID4PgQM/SiI1FHX6AnI/AAAAAAAAABA/mzs74l5kyIM/S220/marty-cartoon.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-1230942430779368787</id><published>2009-09-15T16:57:47.506-07:00</published><updated>2009-09-15T16:57:47.506-07:00</updated><title type='text'>Thanks Jean-Michel.  Simon Harris, who wrote Simia...</title><content type='html'>Thanks Jean-Michel.  Simon Harris, who wrote Simian, happens to work with me at Cogent :)  I&amp;#39;ve let him know about your gem.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/1230942430779368787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/1230942430779368787'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1253059067506#c1230942430779368787' title=''/><author><name>Marty Andrews</name><uri>http://www.blogger.com/profile/02704401325754822667</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_IrJ0ID4PgQM/SiI1FHX6AnI/AAAAAAAAABA/mzs74l5kyIM/S220/marty-cartoon.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1956805358'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-721696583735084537</id><published>2009-09-15T02:26:21.576-07:00</published><updated>2009-09-15T02:26:21.576-07:00</updated><title type='text'>Regarding dupplication, I wrote a gem which genera...</title><content type='html'>Regarding dupplication, I wrote a gem which generate reports (HTML, Textmate, Netbeans, etc …) of identical duplicate lines, backed by java tool Simian.&lt;br /&gt;&lt;br /&gt;http://wiki.github.com/garnierjm/dont_repeat_yourself</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/721696583735084537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/721696583735084537'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1253006781576#c721696583735084537' title=''/><author><name>Jean-Michel</name><uri>http://www.blogger.com/profile/12541109166975793396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-424626764'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-1572937533224935235</id><published>2009-06-15T16:30:30.998-07:00</published><updated>2009-06-15T16:30:30.998-07:00</updated><title type='text'>No problems at all Felipe.  Good luck with your to...</title><content type='html'>No problems at all Felipe.  Good luck with your tool!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/1572937533224935235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/1572937533224935235'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1245108630998#c1572937533224935235' title=''/><author><name>Marty Andrews</name><uri>http://www.blogger.com/profile/02704401325754822667</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_IrJ0ID4PgQM/SiI1FHX6AnI/AAAAAAAAABA/mzs74l5kyIM/S220/marty-cartoon.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1956805358'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-3482879121991305208</id><published>2009-06-14T14:28:37.130-07:00</published><updated>2009-06-14T14:28:37.130-07:00</updated><title type='text'>Great post! You just inspired me to make a simple ...</title><content type='html'>Great post! You just inspired me to make a simple continuous integration app for RubyOnRails, at http://github.com/felipegiotto/Inotegration&lt;br /&gt;&lt;br /&gt;Hope you don&amp;#39;t mind! I&amp;#39;ve taken your ideas, but I put your name on the credits! :D If you&amp;#39;re interested, download the code at Github and send some feedback!&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;&lt;br /&gt;Felipe Giotto.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3482879121991305208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3482879121991305208'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1245014917130#c3482879121991305208' title=''/><author><name>Felipe</name><uri>http://www.blogger.com/profile/02542378185280844282</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-276929101'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-3603849089981473927</id><published>2009-06-11T22:59:10.789-07:00</published><updated>2009-06-11T22:59:10.789-07:00</updated><title type='text'>Good post. Thank you.</title><content type='html'>Good post. Thank you.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3603849089981473927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3603849089981473927'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1244786350789#c3603849089981473927' title=''/><author><name>Nanta</name><uri>http://jirapong.myopenid.com/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-221543528'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-3502151121323189598</id><published>2009-05-31T05:30:46.214-07:00</published><updated>2009-05-31T05:30:46.214-07:00</updated><title type='text'>PMD has a similar feature (max rule violations).

...</title><content type='html'>PMD has a similar feature (max rule violations).&lt;br /&gt;&lt;br /&gt;You don't just use the number of violations; you need to combine this info with an actual violation report to get any use out of it. &lt;br /&gt;&lt;br /&gt;The way we implemented this before with Checkstyle was to check the XML violations report into SVN. We then set the build up to use SVN diff to differentiate between which violations you had just introduced and which were already there.&lt;br /&gt;&lt;br /&gt;Each run would effectively clobber the violations report file so that if you removed violations as part of the build it would also be removed from the versioned report. If there were no changes then SVN wouldn't detect a content change.&lt;br /&gt;&lt;br /&gt;I'm thinking of blogging a more specific recipe to detail how we achieved this using Ant and Checkstyle (aint that pretty though).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3502151121323189598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3502151121323189598'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1243773046214#c3502151121323189598' title=''/><author><name>fuglylogic</name><uri>http://fuglylogic.wordpress.com/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1074896320'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-3575355902934594502</id><published>2009-05-30T19:02:43.861-07:00</published><updated>2009-05-30T19:02:43.861-07:00</updated><title type='text'>You say "Most style checking tools like Checkstyle...</title><content type='html'>You say "Most style checking tools like Checkstyle have the ability to set a maximum violations figure".  Do you know of any others?  How do you know which violations they are?&lt;br /&gt;&lt;br /&gt;Don't get me wrong.  I like the idea, but I think it's only half way towards the real solution, which should know exactly what fails, and automatically remove them from the acceptable violations list once they've been refactored.&lt;br /&gt;&lt;br /&gt;When faced with a choice of not enforcing, or enforcing at a level just higher than my current code, I choose the latter.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3575355902934594502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/3575355902934594502'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1243735363861#c3575355902934594502' title=''/><author><name>Marty Andrews</name><uri>http://www.blogger.com/profile/02704401325754822667</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1956805358'/></entry><entry><id>tag:blogger.com,1999:blog-6445576618492939938.post-104829976709618248</id><published>2009-05-30T16:12:16.117-07:00</published><updated>2009-05-30T16:12:16.117-07:00</updated><title type='text'>Great post, I didn't even know that there was this...</title><content type='html'>Great post, I didn't even know that there was this much tool support for quality analysis in Ruby.&lt;br /&gt;&lt;br /&gt;One thing I never liked though was having to set my check levels at just one tick above the worst spot in my code. This means there is nothing stopping anyone from checking in code that is as bad as what you currently have. I like my style rules to describe my current idea of good quality code whether my existing code conforms or not.&lt;br /&gt;&lt;br /&gt;One solution (if the tool or your own hand rolling supports it) is to set a violation threshold (accounting for your existing code) and then set your rules at the ideal levels. This stops anyone from checking in code that doesn't pass muster while you are cleaning up other areas of your codebase.&lt;br /&gt;&lt;br /&gt;I blogged about this on the same day at  http://fuglylogic.com/2009/05/29/keeping-on-the-tail-of-code-quality-with-a-ratchet/</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/104829976709618248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6445576618492939938/4728873233294210240/comments/default/104829976709618248'/><link rel='alternate' type='text/html' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html?showComment=1243725136117#c104829976709618248' title=''/><author><name>fuglylogic</name><uri>http://fuglylogic.wordpress.com/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html' ref='tag:blogger.com,1999:blog-6445576618492939938.post-4728873233294210240' source='http://www.blogger.com/feeds/6445576618492939938/posts/default/4728873233294210240' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1074896320'/></entry></feed>
