<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Open minds leads to freedom</title>
	
	<link>http://rafaelnaufal.com/blog</link>
	<description>Communicating my thoughts on software development</description>
	<lastBuildDate>Tue, 07 Sep 2010 19:31:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<image><url>http://www.rafaelnaufal.com/favicon.ico</url></image>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rafaelnaufal-rss" /><feedburner:info uri="rafaelnaufal-rss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/rafaelnaufal-rss" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Frafaelnaufal-rss" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Singleton in Java with Enum types</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/bVxCrABRd4k/</link>
		<comments>http://rafaelnaufal.com/blog/2010/09/07/singleton-in-java-with-enum-types/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 19:31:08 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[effective java]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[joshua block]]></category>
		<category><![CDATA[serialization]]></category>
		<category><![CDATA[singleton]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=312</guid>
		<description><![CDATA[Java 1.5 introduced the concept of Enum types. They are type-safe constants, which implements equals(), hashCode() and cannot be extended. Each constant can have attributes and override an abstract method created on each Enum class. Although Singletons are not encouraged, the best way to create it is using Enum types. Here is an example: public [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=effective+java,enum,java,joshua+block,serialization,singleton" height="61" width="50" /><br />
			</a>
		</div>
<p>Java 1.5 introduced the concept of <a href="http://download.oracle.com/javase/tutorial/java/javaOO/enum.html">Enum</a> types. They are type-safe constants, which implements <code class="codeSyntax">equals()</code>, <code class="codeSyntax">hashCode()</code> and cannot be extended.  Each constant can have attributes and override an abstract method created on each <strong>Enum</strong> class.</p>
<p>Although Singletons are not encouraged, the best way to create it is using <strong>Enum</strong> types. Here is an example:</p>
<pre class="brush:java">
public enum Singleton {
    INSTANCE;

    public void sayHello() {
	   System.out.println("Hello World!");
    }
}
</pre>
<p>And then you call it this way:</p>
<pre class="brush:java">
Singleton.INSTANCE.sayHello();
</pre>
<p>Using <strong>Enums</strong> to create Singletons brings the serialization mechanism already bundled in the <strong>Enum</strong> type. This technique is described on the <a href="http://java.sun.com/docs/books/effective/">Effective Java Second Edition</a> book by Joshua Block.</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Singleton%20in%20Java%20with%20Enum%20types%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;title=Singleton%20in%20Java%20with%20Enum%20types&amp;bodytext=Java%201.5%20introduced%20the%20concept%20of%20Enum%20types.%20They%20are%20type-safe%20constants%2C%20which%20implements%20equals%28%29%2C%20hashCode%28%29%20and%20cannot%20be%20extended.%20%20Each%20constant%20can%20have%20attributes%20and%20override%20an%20abstract%20method%20created%20on%20each%20Enum%20class.%0D%0A%0D%0AAlthough%20Sing'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;title=Singleton%20in%20Java%20with%20Enum%20types&amp;notes=Java%201.5%20introduced%20the%20concept%20of%20Enum%20types.%20They%20are%20type-safe%20constants%2C%20which%20implements%20equals%28%29%2C%20hashCode%28%29%20and%20cannot%20be%20extended.%20%20Each%20constant%20can%20have%20attributes%20and%20override%20an%20abstract%20method%20created%20on%20each%20Enum%20class.%0D%0A%0D%0AAlthough%20Sing'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;title=Singleton%20in%20Java%20with%20Enum%20types'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;t=Singleton%20in%20Java%20with%20Enum%20types'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;title=Singleton%20in%20Java%20with%20Enum%20types&amp;annotation=Java%201.5%20introduced%20the%20concept%20of%20Enum%20types.%20They%20are%20type-safe%20constants%2C%20which%20implements%20equals%28%29%2C%20hashCode%28%29%20and%20cannot%20be%20extended.%20%20Each%20constant%20can%20have%20attributes%20and%20override%20an%20abstract%20method%20created%20on%20each%20Enum%20class.%0D%0A%0D%0AAlthough%20Sing'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;title=Singleton%20in%20Java%20with%20Enum%20types'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Singleton%20in%20Java%20with%20Enum%20types&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;title=Singleton%20in%20Java%20with%20Enum%20types&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F&amp;t=Singleton%20in%20Java%20with%20Enum%20types'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Singleton%20in%20Java%20with%20Enum%20types&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F09%2F07%2Fsingleton-in-java-with-enum-types%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/NWgqUEpHB2oVEQUWupoNoiCpLjA/0/da"><img src="http://feedads.g.doubleclick.net/~a/NWgqUEpHB2oVEQUWupoNoiCpLjA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/NWgqUEpHB2oVEQUWupoNoiCpLjA/1/da"><img src="http://feedads.g.doubleclick.net/~a/NWgqUEpHB2oVEQUWupoNoiCpLjA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/bVxCrABRd4k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2010/09/07/singleton-in-java-with-enum-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2010/09/07/singleton-in-java-with-enum-types/</feedburner:origLink></item>
		<item>
		<title>Java-Quiz: The Iterator Quiz</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/UW_etJKAgkc/</link>
		<comments>http://rafaelnaufal.com/blog/2010/08/03/java-quiz-the-iterator-quiz/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 21:28:26 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iterator]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java_programming]]></category>
		<category><![CDATA[quiz]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=267</guid>
		<description><![CDATA[Danilo sent us an interesting Java-Quiz from the Java Specialists&#8217; Newsletter created by Olivier Croisier. You have to insert your corrective code in place of the //FIXME comment, following these instructions: Do not modify his existing code, it&#8217;s Perfect (of course). The FIXME tag shows where you&#8217;re allowed to insert your corrective code He must [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=iterator,java,java_programming,quiz" height="61" width="50" /><br />
			</a>
		</div>
<p>Danilo sent us an interesting Java-Quiz from the <a href="http://www.javaspecialists.eu/archive/Issue186.html">Java Specialists&#8217; Newsletter</a> created by Olivier Croisier. You have to insert your corrective code in place of the <code style="background-color:#FEFFAF">//FIXME</code> comment, following these instructions:</p>
<ol>
<li>Do not modify his existing code, it&#8217;s Perfect (of course).</li>
<li>The FIXME tag shows where you&#8217;re allowed to insert your corrective code</li>
<li>He must be able to understand your solution when he comes back (so using Reflection is not an option).</li>
</ol>
<p>Can you find a solution for it?</p>
<pre class="brush:java">
final List&lt;String&gt; list = new ArrayList() {{
      add("Hello");
}};
final Iterator&lt;String&gt; iterator = list.iterator();
System.out.println(iterator.next());
list.add("World");
// FIXME : work here while I'm sunbathing
System.out.println(iterator.next());
</pre>
<p>Later I&#8217;ll post my attempt to solve it.</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Java-Quiz%3A%20The%20Iterator%20Quiz%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;title=Java-Quiz%3A%20The%20Iterator%20Quiz&amp;bodytext=Danilo%20sent%20us%20an%20interesting%20Java-Quiz%20from%20the%20Java%20Specialists%27%20Newsletter%20created%20by%20Olivier%20Croisier.%20You%20have%20to%20insert%20your%20corrective%20code%20in%20place%20of%20the%20%2F%2FFIXME%20comment%2C%20following%20these%20instructions%3A%0D%0A%0D%0ADo%20not%20modify%20his%20existing%20code%2C%20it%27s'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;title=Java-Quiz%3A%20The%20Iterator%20Quiz&amp;notes=Danilo%20sent%20us%20an%20interesting%20Java-Quiz%20from%20the%20Java%20Specialists%27%20Newsletter%20created%20by%20Olivier%20Croisier.%20You%20have%20to%20insert%20your%20corrective%20code%20in%20place%20of%20the%20%2F%2FFIXME%20comment%2C%20following%20these%20instructions%3A%0D%0A%0D%0ADo%20not%20modify%20his%20existing%20code%2C%20it%27s'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;title=Java-Quiz%3A%20The%20Iterator%20Quiz'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;t=Java-Quiz%3A%20The%20Iterator%20Quiz'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;title=Java-Quiz%3A%20The%20Iterator%20Quiz&amp;annotation=Danilo%20sent%20us%20an%20interesting%20Java-Quiz%20from%20the%20Java%20Specialists%27%20Newsletter%20created%20by%20Olivier%20Croisier.%20You%20have%20to%20insert%20your%20corrective%20code%20in%20place%20of%20the%20%2F%2FFIXME%20comment%2C%20following%20these%20instructions%3A%0D%0A%0D%0ADo%20not%20modify%20his%20existing%20code%2C%20it%27s'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;title=Java-Quiz%3A%20The%20Iterator%20Quiz'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Java-Quiz%3A%20The%20Iterator%20Quiz&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;title=Java-Quiz%3A%20The%20Iterator%20Quiz&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F&amp;t=Java-Quiz%3A%20The%20Iterator%20Quiz'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Java-Quiz%3A%20The%20Iterator%20Quiz&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F08%2F03%2Fjava-quiz-the-iterator-quiz%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/JnoPdbGXSvaqOEPLfp4Rz082BYI/0/da"><img src="http://feedads.g.doubleclick.net/~a/JnoPdbGXSvaqOEPLfp4Rz082BYI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JnoPdbGXSvaqOEPLfp4Rz082BYI/1/da"><img src="http://feedads.g.doubleclick.net/~a/JnoPdbGXSvaqOEPLfp4Rz082BYI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/UW_etJKAgkc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2010/08/03/java-quiz-the-iterator-quiz/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2010/08/03/java-quiz-the-iterator-quiz/</feedburner:origLink></item>
		<item><title>Links for 2010-07-16 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/k1_gdUUxqM0/rnaufal</link><pubDate>Sat, 17 Jul 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-07-16</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://refcardz.dzone.com/refcardz/jdbc-best-practices?oid=hom23827"&gt;JDBC Best Practices | Refcardz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/k1_gdUUxqM0" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-07-16</feedburner:origLink></item><item><title>Links for 2010-05-26 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/XpW2walIE5o/rnaufal</link><pubDate>Thu, 27 May 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-05-26</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1079114/spring-transactional-annotation-best-practice"&gt;Spring @Transactional Annotation Best Practice - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/XpW2walIE5o" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-05-26</feedburner:origLink></item><item><title>Links for 2010-05-13 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/r6U3UANTygI/rnaufal</link><pubDate>Fri, 14 May 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-05-13</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.downloadsquad.com/2010/04/30/if-you-code-html-zen-coding-will-change-your-life/"&gt;If you code HTML, Zen Coding will change your life&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://agile-automata.net/?p=14"&gt;Scala-fied Logging &amp;ndash; Programming for the Smart Grid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/r6U3UANTygI" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-05-13</feedburner:origLink></item><item>
		<title>Eclipse Log4J template</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/Z-XhavO3b-4/</link>
		<comments>http://rafaelnaufal.com/blog/2010/05/09/eclipse-log4j-template/#comments</comments>
		<pubDate>Sun, 09 May 2010 19:56:23 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[logger]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=253</guid>
		<description><![CDATA[My friend Bruno sent me an interesting tip on how to create a Log4J template at Eclipse. Just follow these steps: Go to Window > Preferences > Java > Editor > Templates Click New Write the string logger at the field Name (this name will be used to call the template) At the field Pattern, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=eclipse,java,log4j,logger,templates" height="61" width="50" /><br />
			</a>
		</div>
<p>My friend <a href="http://bpfurtado.livejournal.com">Bruno</a> sent me an interesting tip on how to create a <a href="http://logging.apache.org/log4j/">Log4J</a> template at Eclipse. Just follow these steps:</p>
<ol>
<li>Go to <em>Window > Preferences > Java > Editor > Templates</em></li>
<li>Click <em>New</em></li>
<li>Write the string <strong>logger</strong> at the field <em>Name</em> (this name will be used to call the template)</li>
<li>At the field <em>Pattern</em>, write the following:<br />
<blockquote><p align="center">private static final Logger LOGGER = Logger.getLogger(${enclosing_type}.class);</p>
</blockquote>
</li>
<li>Click <em>OK</em></li>
</ol>
<p>The variable <em>${enclosing_type}</em> refers to the enclosing type name. When you are ready, write down  <strong>logger</strong> on the field class declaration to have a logger added to the class.</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Eclipse%20Log4J%20template%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;title=Eclipse%20Log4J%20template&amp;bodytext=My%20friend%20Bruno%20sent%20me%20an%20interesting%20tip%20on%20how%20to%20create%20a%20Log4J%20template%20at%20Eclipse.%20Just%20follow%20these%20steps%3A%0D%0A%0D%0A%0D%0A%09Go%20to%20Window%20%3E%20Preferences%20%3E%20Java%20%3E%20Editor%20%3E%20Templates%0D%0A%09Click%20New%0D%0A%09Write%20the%20string%20logger%20at%20the%20field%20Name%20%28this%20name%20will%20be%20'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;title=Eclipse%20Log4J%20template&amp;notes=My%20friend%20Bruno%20sent%20me%20an%20interesting%20tip%20on%20how%20to%20create%20a%20Log4J%20template%20at%20Eclipse.%20Just%20follow%20these%20steps%3A%0D%0A%0D%0A%0D%0A%09Go%20to%20Window%20%3E%20Preferences%20%3E%20Java%20%3E%20Editor%20%3E%20Templates%0D%0A%09Click%20New%0D%0A%09Write%20the%20string%20logger%20at%20the%20field%20Name%20%28this%20name%20will%20be%20'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;title=Eclipse%20Log4J%20template'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;t=Eclipse%20Log4J%20template'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;title=Eclipse%20Log4J%20template&amp;annotation=My%20friend%20Bruno%20sent%20me%20an%20interesting%20tip%20on%20how%20to%20create%20a%20Log4J%20template%20at%20Eclipse.%20Just%20follow%20these%20steps%3A%0D%0A%0D%0A%0D%0A%09Go%20to%20Window%20%3E%20Preferences%20%3E%20Java%20%3E%20Editor%20%3E%20Templates%0D%0A%09Click%20New%0D%0A%09Write%20the%20string%20logger%20at%20the%20field%20Name%20%28this%20name%20will%20be%20'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;title=Eclipse%20Log4J%20template'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Eclipse%20Log4J%20template&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;title=Eclipse%20Log4J%20template&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F&amp;t=Eclipse%20Log4J%20template'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Eclipse%20Log4J%20template&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F05%2F09%2Feclipse-log4j-template%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/OsI_rCaZz8hqUKx-Uzpdk-fQMzE/0/da"><img src="http://feedads.g.doubleclick.net/~a/OsI_rCaZz8hqUKx-Uzpdk-fQMzE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OsI_rCaZz8hqUKx-Uzpdk-fQMzE/1/da"><img src="http://feedads.g.doubleclick.net/~a/OsI_rCaZz8hqUKx-Uzpdk-fQMzE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/Z-XhavO3b-4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2010/05/09/eclipse-log4j-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2010/05/09/eclipse-log4j-template/</feedburner:origLink></item>
		<item><title>Links for 2010-04-18 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/1pTSPNJPfhM/rnaufal</link><pubDate>Mon, 19 Apr 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-04-18</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tam.com.br/b2c/vgn/v/index.jsp?vgnextoid=012a3938898b7210VgnVCM1000003408020aRCRD"&gt;...:: TAM LINHAS A&amp;Eacute;REAS S/A - PAIX&amp;Atilde;O POR VOAR E SERVIR ::...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/1pTSPNJPfhM" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-04-18</feedburner:origLink></item><item><title>Links for 2010-04-16 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/kZWzAdvI1hs/rnaufal</link><pubDate>Sat, 17 Apr 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-04-16</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.packtpub.com/article/introduction-to-hibernate-and-spring-1"&gt;An Introduction to Hibernate and Spring: Part 1 | Packt Publishing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/kZWzAdvI1hs" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-04-16</feedburner:origLink></item><item><title>Links for 2010-04-15 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/T-xcfxFxQzk/rnaufal</link><pubDate>Fri, 16 Apr 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-04-15</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.unicode.org/faq/normalization.html"&gt;FAQ - Normalization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/T-xcfxFxQzk" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-04-15</feedburner:origLink></item><item><title>Links for 2010-04-14 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/3qfdCmkVSGw/rnaufal</link><pubDate>Thu, 15 Apr 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2010-04-14</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-springwebflow.html?ca=drs-"&gt;Flow-managed persistence in Spring Web Flow 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/3qfdCmkVSGw" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2010-04-14</feedburner:origLink></item><item>
		<title>Using Hamcrest and JUnit</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/Rj36bS2gO7Q/</link>
		<comments>http://rafaelnaufal.com/blog/2010/03/15/using-hamcrest-and-junit/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 02:10:52 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hamcrest]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[matchers]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=218</guid>
		<description><![CDATA[Lately I started using the core Hamcrest matchers bundled with the JUnit framework to create more readable unit tests. Hamcrest matchers were created to improve the readability of unit testing code. It&#8217;s a framework which facilitates the creation of matcher objects to match rules specified in unit tests. Some examples will let it to be [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=google,hamcrest,java,junit,matchers,testing,tests" height="61" width="50" /><br />
			</a>
		</div>
<p>Lately I started using the core <a href="http://junit.sourceforge.net/doc/ReleaseNotes4.4.html">Hamcrest</a> matchers bundled with the JUnit framework to create more readable unit tests.</p>
<p>Hamcrest matchers were created to improve the readability of unit testing code. It&#8217;s a framework which facilitates the creation of <em>matcher</em> objects to match rules specified in unit tests. Some examples will let it to be clearer:</p>
<pre class="gutterH"><span class="syntax0"><span class="gutter">   1 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.hamcrest.CoreMatchers.equalTo;
<span class="gutter">   2 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.hamcrest.CoreMatchers.is;
<span class="gutter">   3 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.junit.Assert.assertThat;
<span class="gutter">   4 </span>
<span class="gutterH">   5 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">   6 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldBeTheSamePerson</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutter">   7 </span><span class="syntax-OPERATOR">{</span>
<span class="gutter">   8 </span>    Person me <span class="syntax-OPERATOR">=</span> <span class="syntax-KEYWORD1">new</span> <span class="syntax-FUNCTION">Person</span><span class="syntax-OPERATOR">(</span> <span class="syntax-LITERAL1">&quot;</span><span class="syntax-LITERAL1">Rafael</span><span class="syntax-LITERAL1">&quot;</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">   9 </span>    Person theOther <span class="syntax-OPERATOR">=</span> <span class="syntax-KEYWORD1">new</span> <span class="syntax-FUNCTION">Person</span><span class="syntax-OPERATOR">(</span> <span class="syntax-LITERAL1">&quot;</span><span class="syntax-LITERAL1">Rafael</span><span class="syntax-LITERAL1">&quot;</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutterH">  10 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> me, <span class="syntax-FUNCTION">is</span><span class="syntax-OPERATOR">(</span> theOther <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  11 </span><span class="syntax-OPERATOR">}</span>
<span class="gutter">  12 </span>
<span class="gutter">  13 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">  14 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldHaveFixedSizeNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutterH">  15 </span><span class="syntax-OPERATOR">{</span>
<span class="gutter">  16 </span>    List<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers <span class="syntax-OPERATOR">=</span> Arrays.<span class="syntax-FUNCTION">asList</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">1</span>, <span class="syntax-DIGIT">2</span>, <span class="syntax-DIGIT">3</span>, <span class="syntax-DIGIT">4</span>, <span class="syntax-DIGIT">5</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  17 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> numbers.<span class="syntax-FUNCTION">size</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>, <span class="syntax-FUNCTION">is</span><span class="syntax-OPERATOR">(</span> <span class="syntax-FUNCTION">equalTo</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">5</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  18 </span><span class="syntax-OPERATOR">}</span>
</span></pre>
<p>The first example checks if one <code>Person</code> object is equal to another using the <code>Object equals </code>method, which was overridden in the <code>Person</code> class. The <code>is</code> syntax defines a matcher which is a shorthand to <code>is(equalTo(value))</code>.  The second one uses the <code>is(equalTo(value))</code> matcher to check the size of an integer list of fixed size numbers. The <code>assertThat</code> method is used in conjunction with the <code>is(equalTo(value))</code> matcher, which makes the test sentence very human readable.</p>
<p>An interesting thing is the possibility to create a custom matcher, like this one which tests if a given list only has even numbers:</p>
<pre class="gutterH"><span class="syntax0"><span class="gutter">   1 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">class</span> AreEvenNumbers <span class="syntax-KEYWORD1">extends</span> TypeSafeMatcher<span class="syntax-OPERATOR">&lt;</span>Collection<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span><span class="syntax-OPERATOR">&gt;</span> <span class="syntax-OPERATOR">{</span>
<span class="gutter">   2 </span>
<span class="gutter">   3 </span>    <span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Override</span>
<span class="gutter">   4 </span>    <span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">boolean</span> <span class="syntax-FUNCTION">matchesSafely</span><span class="syntax-OPERATOR">(</span>Collection<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers<span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutterH">   5 </span>        <span class="syntax-KEYWORD1">for</span> <span class="syntax-OPERATOR">(</span>Integer number : numbers<span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutter">   6 </span>            <span class="syntax-KEYWORD1">if</span> <span class="syntax-OPERATOR">(</span>number <span class="syntax-OPERATOR">%</span> <span class="syntax-DIGIT">2</span> <span class="syntax-OPERATOR">!</span><span class="syntax-OPERATOR">=</span> <span class="syntax-DIGIT">0</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutter">   7 </span>                <span class="syntax-KEYWORD1">return</span> <span class="syntax-LITERAL2">false</span>;
<span class="gutter">   8 </span>            <span class="syntax-OPERATOR">}</span>
<span class="gutter">   9 </span>        <span class="syntax-OPERATOR">}</span>
<span class="gutterH">  10 </span>        <span class="syntax-KEYWORD1">return</span> <span class="syntax-LITERAL2">true</span>;
<span class="gutter">  11 </span>    <span class="syntax-OPERATOR">}</span>
<span class="gutter">  12 </span>
<span class="gutter">  13 </span>    <span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Override</span>
<span class="gutter">  14 </span>    <span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">describeTo</span><span class="syntax-OPERATOR">(</span>Description description<span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutterH">  15 </span>        description.<span class="syntax-FUNCTION">appendText</span><span class="syntax-OPERATOR">(</span><span class="syntax-LITERAL1">&quot;</span><span class="syntax-LITERAL1">even</span><span class="syntax-LITERAL1"> </span><span class="syntax-LITERAL1">numbers</span><span class="syntax-LITERAL1">&quot;</span><span class="syntax-OPERATOR">)</span>;
<span class="gutter">  16 </span>    <span class="syntax-OPERATOR">}</span>
<span class="gutter">  17 </span>
<span class="gutter">  18 </span>    <span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Factory</span>
<span class="gutter">  19 </span>    <span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD1">static</span> <span class="syntax-OPERATOR">&lt;</span>T<span class="syntax-OPERATOR">&gt;</span> Matcher<span class="syntax-OPERATOR">&lt;</span>Collection<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span><span class="syntax-OPERATOR">&gt;</span> <span class="syntax-FUNCTION">evenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutterH">  20 </span>        <span class="syntax-KEYWORD1">return</span> <span class="syntax-KEYWORD1">new</span> <span class="syntax-FUNCTION">AreEvenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>;
<span class="gutter">  21 </span>    <span class="syntax-OPERATOR">}</span>
<span class="gutter">  22 </span><span class="syntax-OPERATOR">}</span>
</span></pre>
<p>And below are two tests which uses the <code>AreEvenNumbers</code> custom matcher:</p>
<pre class="gutterH"><span class="syntax0"><span class="gutter">   1 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.hamcrest.CoreMatchers.is;
<span class="gutter">   2 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.junit.Assert.assertThat;
<span class="gutter">   3 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> br.com.rafael.hamcrest.AreEvenNumbers.evenNumbers;
<span class="gutter">   4 </span>
<span class="gutterH">   5 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">   6 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldHaveOnlyEvenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutter">   7 </span><span class="syntax-OPERATOR">{</span>
<span class="gutter">   8 </span>    List<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers <span class="syntax-OPERATOR">=</span> Arrays.<span class="syntax-FUNCTION">asList</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">2</span>, <span class="syntax-DIGIT">4</span>, <span class="syntax-DIGIT">6</span>, <span class="syntax-DIGIT">8</span>, <span class="syntax-DIGIT">10</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">   9 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> numbers, <span class="syntax-FUNCTION">is</span><span class="syntax-OPERATOR">(</span> <span class="syntax-FUNCTION">evenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutterH">  10 </span><span class="syntax-OPERATOR">}</span>
<span class="gutter">  11 </span>
<span class="gutter">  12 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">  13 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldNotHaveOddNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutter">  14 </span><span class="syntax-OPERATOR">{</span>
<span class="gutterH">  15 </span>    List<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers <span class="syntax-OPERATOR">=</span> Arrays.<span class="syntax-FUNCTION">asList</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">1</span>, <span class="syntax-DIGIT">2</span>, <span class="syntax-DIGIT">4</span>, <span class="syntax-DIGIT">6</span>, <span class="syntax-DIGIT">8</span>, <span class="syntax-DIGIT">10</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  16 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> numbers, <span class="syntax-FUNCTION">not</span><span class="syntax-OPERATOR">(</span> <span class="syntax-FUNCTION">evenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  17 </span><span class="syntax-OPERATOR">}</span>
</span></pre>
<p>These two tests use the static factory method <code>evenNumbers</code> to instantiate the matcher on the test code. Not the use of the <code>not</code> matcher on the <code>shouldNotHaveOddNumbers</code> test to assert that no odd numbers are present on the given list. All tests use the <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html">static import</a> feature, which turns the test not clean and not cluttered with the class qualification.</p>
<p>I haven&#8217;t experienced the other common matchers on unit testing code, like the Beans, Collections and Number ones. I think they turn the tests more readable, clean and easy to change. And you? Have you ever used Hamcrest matcher? If you have other examples of using it, post them here!</p>
<p><em><strong>Updated: </strong</em>Static imports were added to the testing code.</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Using%20Hamcrest%20and%20JUnit%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;title=Using%20Hamcrest%20and%20JUnit&amp;bodytext=Lately%20I%20started%20using%20the%20core%20Hamcrest%20matchers%20bundled%20with%20the%20JUnit%20framework%20to%20create%20more%20readable%20unit%20tests.%0D%0A%0D%0AHamcrest%20matchers%20were%20created%20to%20improve%20the%20readability%20of%20unit%20testing%20code.%20It%27s%20a%20framework%20which%20facilitates%20the%20creation%20'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;title=Using%20Hamcrest%20and%20JUnit&amp;notes=Lately%20I%20started%20using%20the%20core%20Hamcrest%20matchers%20bundled%20with%20the%20JUnit%20framework%20to%20create%20more%20readable%20unit%20tests.%0D%0A%0D%0AHamcrest%20matchers%20were%20created%20to%20improve%20the%20readability%20of%20unit%20testing%20code.%20It%27s%20a%20framework%20which%20facilitates%20the%20creation%20'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;title=Using%20Hamcrest%20and%20JUnit'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;t=Using%20Hamcrest%20and%20JUnit'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;title=Using%20Hamcrest%20and%20JUnit&amp;annotation=Lately%20I%20started%20using%20the%20core%20Hamcrest%20matchers%20bundled%20with%20the%20JUnit%20framework%20to%20create%20more%20readable%20unit%20tests.%0D%0A%0D%0AHamcrest%20matchers%20were%20created%20to%20improve%20the%20readability%20of%20unit%20testing%20code.%20It%27s%20a%20framework%20which%20facilitates%20the%20creation%20'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;title=Using%20Hamcrest%20and%20JUnit'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Using%20Hamcrest%20and%20JUnit&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;title=Using%20Hamcrest%20and%20JUnit&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F&amp;t=Using%20Hamcrest%20and%20JUnit'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Using%20Hamcrest%20and%20JUnit&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F03%2F15%2Fusing-hamcrest-and-junit%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/xQwPnHZeYG5kyx0r4J4uoTTCkuw/0/da"><img src="http://feedads.g.doubleclick.net/~a/xQwPnHZeYG5kyx0r4J4uoTTCkuw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xQwPnHZeYG5kyx0r4J4uoTTCkuw/1/da"><img src="http://feedads.g.doubleclick.net/~a/xQwPnHZeYG5kyx0r4J4uoTTCkuw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/Rj36bS2gO7Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2010/03/15/using-hamcrest-and-junit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2010/03/15/using-hamcrest-and-junit/</feedburner:origLink></item>
		<item>
		<title>The power of pair programming</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/ZhsYNrWIBoE/</link>
		<comments>http://rafaelnaufal.com/blog/2010/01/14/the-power-of-pair-programming/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 02:08:03 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[pair]]></category>
		<category><![CDATA[pairing]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=206</guid>
		<description><![CDATA[Some weeks ago I started doing pair programming with some co-workers basically for two things: code some tasks of an user story get familiar with a new software code base I haven&#8217;t had an opportunity to put this technique in practice a lot before, but I can say it was extremely important and benefit for [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=code,IDE,pair,pairing,programming,refactoring,review" height="61" width="50" /><br />
			</a>
		</div>
<p>Some weeks ago I started doing <a href="http://en.wikipedia.org/wiki/Pair_programming">pair programming</a> with some co-workers basically for two things:</p>
<ol>
<li>code some tasks of an user story</li>
<li>get familiar with a new software code base</li>
</ol>
<p>I haven&#8217;t had an opportunity to put this technique in practice a lot before, but I can say it was extremely important and benefit for the project. Sometimes I was the <strong>driver</strong> and sometimes I was the <strong>observer</strong>. The <strong>driver</strong> is the person who starts coding and the <strong>observer</strong> is who starts doing the code review. That point is important: <strong>code review</strong>.</p>
<p>Pair programming encourages the review of the code. Perhaps you won&#8217;t have an opportunity to refactor some code as you have when you are pairing with someone. I think code reviews are important because:</p>
<ul>
<li>Reviews increase code quality, because there are 2 people thinking at the same task at the same time.</li>
<li>Refactoring areas arise in the design where improvements are needed</li>
<li>When you have the strong support of an IDE (as Eclipse), some refactorings (extract method, extract class, introduce parameter) are highly automated</li>
<li>Code is more read than written, two people reading the code can understand a lot more about the code base</li>
<li>New ideas arise because of different point of views</li>
<li>Questions can be solved by the sum of knowledge of the code base</li>
</ul>
<p>And you? What&#8217;s your experience with pair programming?</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=The%20power%20of%20pair%20programming%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;title=The%20power%20of%20pair%20programming&amp;bodytext=Some%20weeks%20ago%20I%20started%20doing%20pair%20programming%20with%20some%20co-workers%20basically%20for%20two%20things%3A%0D%0A%0D%0Acode%20some%20tasks%20of%20an%20user%20storyget%20familiar%20with%20a%20new%20software%20code%20base%0D%0A%0D%0AI%20haven%27t%20had%20an%20opportunity%20to%20put%20this%20technique%20in%20practice%20a%20lot%20befor'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;title=The%20power%20of%20pair%20programming&amp;notes=Some%20weeks%20ago%20I%20started%20doing%20pair%20programming%20with%20some%20co-workers%20basically%20for%20two%20things%3A%0D%0A%0D%0Acode%20some%20tasks%20of%20an%20user%20storyget%20familiar%20with%20a%20new%20software%20code%20base%0D%0A%0D%0AI%20haven%27t%20had%20an%20opportunity%20to%20put%20this%20technique%20in%20practice%20a%20lot%20befor'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;title=The%20power%20of%20pair%20programming'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;t=The%20power%20of%20pair%20programming'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;title=The%20power%20of%20pair%20programming&amp;annotation=Some%20weeks%20ago%20I%20started%20doing%20pair%20programming%20with%20some%20co-workers%20basically%20for%20two%20things%3A%0D%0A%0D%0Acode%20some%20tasks%20of%20an%20user%20storyget%20familiar%20with%20a%20new%20software%20code%20base%0D%0A%0D%0AI%20haven%27t%20had%20an%20opportunity%20to%20put%20this%20technique%20in%20practice%20a%20lot%20befor'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;title=The%20power%20of%20pair%20programming'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=The%20power%20of%20pair%20programming&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;title=The%20power%20of%20pair%20programming&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F&amp;t=The%20power%20of%20pair%20programming'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=The%20power%20of%20pair%20programming&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2010%2F01%2F14%2Fthe-power-of-pair-programming%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/UIcL_8KwjZk1IIP4PRj-W7L8lSQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/UIcL_8KwjZk1IIP4PRj-W7L8lSQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UIcL_8KwjZk1IIP4PRj-W7L8lSQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/UIcL_8KwjZk1IIP4PRj-W7L8lSQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/ZhsYNrWIBoE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2010/01/14/the-power-of-pair-programming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2010/01/14/the-power-of-pair-programming/</feedburner:origLink></item>
		<item>
		<title>My paper MIMECORA-DS added as LNCS at SpringerLink</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/I5cvOs5r2_g/</link>
		<comments>http://rafaelnaufal.com/blog/2009/12/03/mimecora-ds-added-as-lncs-at-springerlink/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 20:59:32 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[aspects]]></category>
		<category><![CDATA[mimecorads]]></category>
		<category><![CDATA[objects]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[sequence_diagram]]></category>
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=197</guid>
		<description><![CDATA[I&#8217;m proud to announce that my paper A Collaborative Support Approach on UML Sequence Diagrams for Aspect-Oriented Software was added as lecture notes in computer science at SpringerLink. At this paper it is presented an extension based on the default UML meta-model, named MIMECORA-DS, to show object-object, object-aspect and aspect-aspect interactions applying the UML’s sequence [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=AOP,aspects,mimecorads,objects,oop,sequence_diagram,uml" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;m proud to announce that my paper <strong>A Collaborative Support Approach on UML Sequence Diagrams for Aspect-Oriented Software</strong> was added as lecture notes in computer science at SpringerLink. </p>
<p>At this paper it is presented an extension based on the default UML meta-model, named MIMECORA-DS, to show object-object, object-aspect and aspect-aspect interactions applying the UML’s sequence diagram.</p>
<p>You can check it out <a href="http://www.springerlink.com/content/a683v580865w85t0/">here</a>.</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink&amp;bodytext=I%27m%20proud%20to%20announce%20that%20my%20paper%20A%20Collaborative%20Support%20Approach%20on%20UML%20Sequence%20Diagrams%20for%20Aspect-Oriented%20Software%20was%20added%20as%20lecture%20notes%20in%20computer%20science%20at%20SpringerLink.%20%0D%0A%0D%0AAt%20this%20paper%20it%20is%20presented%20an%20extension%20based%20on%20the%20def'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink&amp;notes=I%27m%20proud%20to%20announce%20that%20my%20paper%20A%20Collaborative%20Support%20Approach%20on%20UML%20Sequence%20Diagrams%20for%20Aspect-Oriented%20Software%20was%20added%20as%20lecture%20notes%20in%20computer%20science%20at%20SpringerLink.%20%0D%0A%0D%0AAt%20this%20paper%20it%20is%20presented%20an%20extension%20based%20on%20the%20def'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;t=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink&amp;annotation=I%27m%20proud%20to%20announce%20that%20my%20paper%20A%20Collaborative%20Support%20Approach%20on%20UML%20Sequence%20Diagrams%20for%20Aspect-Oriented%20Software%20was%20added%20as%20lecture%20notes%20in%20computer%20science%20at%20SpringerLink.%20%0D%0A%0D%0AAt%20this%20paper%20it%20is%20presented%20an%20extension%20based%20on%20the%20def'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F&amp;t=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=My%20paper%20MIMECORA-DS%20added%20as%20LNCS%20at%20SpringerLink&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F03%2Fmimecora-ds-added-as-lncs-at-springerlink%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/qJXNpgqXweN0ZV1f2zMvJpURPsQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/qJXNpgqXweN0ZV1f2zMvJpURPsQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qJXNpgqXweN0ZV1f2zMvJpURPsQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/qJXNpgqXweN0ZV1f2zMvJpURPsQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/I5cvOs5r2_g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2009/12/03/mimecora-ds-added-as-lncs-at-springerlink/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2009/12/03/mimecora-ds-added-as-lncs-at-springerlink/</feedburner:origLink></item>
		<item>
		<title>My first experiences on a Scrum team</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/zez-iWjQUTY/</link>
		<comments>http://rafaelnaufal.com/blog/2009/12/02/my-first-experiences-on-a-scrum-team/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 21:14:36 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=183</guid>
		<description><![CDATA[I moved to a new job recently, which applies agile methodologies to manage software teams, particularly Scrum, which was adopted to make an effective management of price, estimates, task and resources. It&#8217;s my first experience working with an agile process and I&#8217;m no doubt it brings a lot of values for a software project. The [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=agile,management,methodology,scrum,software" height="61" width="50" /><br />
			</a>
		</div>
<p>I moved to a new job recently, which applies agile methodologies to manage software teams, particularly Scrum, which was adopted to make an effective management of price, estimates, task and resources. It&#8217;s my first experience working with an agile process and I&#8217;m no doubt it brings a lot of values for a software project.</p>
<p>The <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> methodology works something like this:</p>
<p><br/><img src="http://www.methodsandtools.com/archive/scrum1.gif" /></p>
<p>The team works on iterations (called sprints) during from 2 to 4 weeks (it depends on the project, organization..) on features prioritized by the <em>owner(s)</em> and the Scrum master of the project referring to a list of requirements written on a document (called product backlog). The priority is set according to the business value of the feature. The called <em>owner</em> is a representation of the customer. The Scrum master is the person who removes impediments for the team to keep them focused on the tasks and keeps the focus on the sprint goal. More information you can find <a href="http://en.wikipedia.org/wiki/Scrum_(development)">here</a>.</p>
<p>Every sprint start we estimate some stories and select the work to be done on the current sprint. At the end of the sprint, we have the review and restrospective of was and wasn&#8217;t done.</p>
<p>Above are my opinions about this agile methodology working with for a month:</p>
<ol>
<li>The team is completely committed to the overall goal of the sprint</li>
<li>Members try to help each other as soon as one poses an impediment</li>
<li>Everyone on the team knows which task the others are doing</li>
<li>Every member helps each other to complete their tasks when they finish their ones</li>
<li>The Scrum Master is always there to remove obstacles, clarify the understanding of the stories and help the estimates</li>
<li>The PO acts with the team to give directions and suggestions for the next stepsand how to interact with other areas on the organization</li>
</ol>
<p>I&#8217;m very motivated with Scrum practices and the way we put it in practice, and I know I have to learn a lot more. </p>
<p>Have you ever worked with Scrum? What do you think about this agile methodology?</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=My%20first%20experiences%20on%20a%20Scrum%20team%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;title=My%20first%20experiences%20on%20a%20Scrum%20team&amp;bodytext=I%20moved%20to%20a%20new%20job%20recently%2C%20which%20applies%20agile%20methodologies%20to%20manage%20software%20teams%2C%20particularly%20Scrum%2C%20which%20was%20adopted%20to%20make%20an%20effective%20management%20of%20price%2C%20estimates%2C%20task%20and%20resources.%20It%27s%20my%20first%20experience%20working%20with%20an%20agile%20p'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;title=My%20first%20experiences%20on%20a%20Scrum%20team&amp;notes=I%20moved%20to%20a%20new%20job%20recently%2C%20which%20applies%20agile%20methodologies%20to%20manage%20software%20teams%2C%20particularly%20Scrum%2C%20which%20was%20adopted%20to%20make%20an%20effective%20management%20of%20price%2C%20estimates%2C%20task%20and%20resources.%20It%27s%20my%20first%20experience%20working%20with%20an%20agile%20p'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;title=My%20first%20experiences%20on%20a%20Scrum%20team'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;t=My%20first%20experiences%20on%20a%20Scrum%20team'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;title=My%20first%20experiences%20on%20a%20Scrum%20team&amp;annotation=I%20moved%20to%20a%20new%20job%20recently%2C%20which%20applies%20agile%20methodologies%20to%20manage%20software%20teams%2C%20particularly%20Scrum%2C%20which%20was%20adopted%20to%20make%20an%20effective%20management%20of%20price%2C%20estimates%2C%20task%20and%20resources.%20It%27s%20my%20first%20experience%20working%20with%20an%20agile%20p'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;title=My%20first%20experiences%20on%20a%20Scrum%20team'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=My%20first%20experiences%20on%20a%20Scrum%20team&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;title=My%20first%20experiences%20on%20a%20Scrum%20team&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F&amp;t=My%20first%20experiences%20on%20a%20Scrum%20team'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=My%20first%20experiences%20on%20a%20Scrum%20team&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F12%2F02%2Fmy-first-experiences-on-a-scrum-team%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/scAHXvEGYRN2DGFIOExLiqOH8fg/0/da"><img src="http://feedads.g.doubleclick.net/~a/scAHXvEGYRN2DGFIOExLiqOH8fg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/scAHXvEGYRN2DGFIOExLiqOH8fg/1/da"><img src="http://feedads.g.doubleclick.net/~a/scAHXvEGYRN2DGFIOExLiqOH8fg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/zez-iWjQUTY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2009/12/02/my-first-experiences-on-a-scrum-team/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2009/12/02/my-first-experiences-on-a-scrum-team/</feedburner:origLink></item>
		<item>
		<title>Fixing Eclipse buttons for Ubuntu 9.10</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/QVZdAgwcX34/</link>
		<comments>http://rafaelnaufal.com/blog/2009/11/13/fixing-eclipse-buttons-for-ubuntu-9-10/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 18:43:17 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[buttons]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[Karmic]]></category>
		<category><![CDATA[koala]]></category>
		<category><![CDATA[swt]]></category>
		<category><![CDATA[Ubuntu9.10]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=146</guid>
		<description><![CDATA[I&#8217;ve just updated to the new Ubuntu Karmic 9.10 and I&#8217;ve found some weird problems running Eclipse. Some buttons didn&#8217;t work when they were clicked, but the keyboard shortcuts worked well. It looks like in Eclipse 3.6 the bug will be solved. It looks like it&#8217;s a hack between Eclipse SWT and GTK. More information [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=buttons,eclipse,gtk,Karmic,koala,swt,Ubuntu9.10" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve just updated to the new Ubuntu Karmic 9.10 and I&#8217;ve found some weird problems running Eclipse. Some buttons didn&#8217;t work when they were clicked, but the keyboard shortcuts worked well. It looks like in Eclipse 3.6 the bug will be solved. It looks like it&#8217;s a hack between Eclipse SWT and GTK. More information <a href="http://art.ubuntuforums.org/showthread.php?p=8293905">here</a>, <a href="https://bugs.launchpad.net/azureus/+bug/443004">here</a> and <a href="http://www.eclipse.org/forums/index.php?t=msg&#038;goto=494621&#038;S=58353ef07becea1678a9a42bc12fe275">here</a>.</p>
<p>To fix the problem, just launch Eclipse through this shell script file, assuming Eclipse is installed at <strong>/home/rnaufal/eclipse/eclipse</strong>:</p>
<blockquote><p>#!/bin/sh<br/>export GDK_NATIVE_WINDOWS=1<br/>/home/rnaufal/eclipse/eclipse</p></blockquote>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10&amp;bodytext=I%27ve%20just%20updated%20to%20the%20new%20Ubuntu%20Karmic%209.10%20and%20I%27ve%20found%20some%20weird%20problems%20running%20Eclipse.%20Some%20buttons%20didn%27t%20work%20when%20they%20were%20clicked%2C%20but%20the%20keyboard%20shortcuts%20worked%20well.%20It%20looks%20like%20in%20Eclipse%203.6%20the%20bug%20will%20be%20solved.%20It%20looks'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10&amp;notes=I%27ve%20just%20updated%20to%20the%20new%20Ubuntu%20Karmic%209.10%20and%20I%27ve%20found%20some%20weird%20problems%20running%20Eclipse.%20Some%20buttons%20didn%27t%20work%20when%20they%20were%20clicked%2C%20but%20the%20keyboard%20shortcuts%20worked%20well.%20It%20looks%20like%20in%20Eclipse%203.6%20the%20bug%20will%20be%20solved.%20It%20looks'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;t=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10&amp;annotation=I%27ve%20just%20updated%20to%20the%20new%20Ubuntu%20Karmic%209.10%20and%20I%27ve%20found%20some%20weird%20problems%20running%20Eclipse.%20Some%20buttons%20didn%27t%20work%20when%20they%20were%20clicked%2C%20but%20the%20keyboard%20shortcuts%20worked%20well.%20It%20looks%20like%20in%20Eclipse%203.6%20the%20bug%20will%20be%20solved.%20It%20looks'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F&amp;t=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Fixing%20Eclipse%20buttons%20for%20Ubuntu%209.10&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F13%2Ffixing-eclipse-buttons-for-ubuntu-9-10%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/-NYffngIBaF_bz6kRSESNnFdI1k/0/da"><img src="http://feedads.g.doubleclick.net/~a/-NYffngIBaF_bz6kRSESNnFdI1k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-NYffngIBaF_bz6kRSESNnFdI1k/1/da"><img src="http://feedads.g.doubleclick.net/~a/-NYffngIBaF_bz6kRSESNnFdI1k/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/QVZdAgwcX34" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2009/11/13/fixing-eclipse-buttons-for-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2009/11/13/fixing-eclipse-buttons-for-ubuntu-9-10/</feedburner:origLink></item>
		<item>
		<title>Product Owner vs Product Manager</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/0aI7H63ZkvA/</link>
		<comments>http://rafaelnaufal.com/blog/2009/11/11/product-owner-vs-product-manager/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 11:18:21 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[PM]]></category>
		<category><![CDATA[PO]]></category>
		<category><![CDATA[roles]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=136</guid>
		<description><![CDATA[I received from @akitaonrails an interesting article concerning the differences and responsibilities of the product owner and product manager roles. For the author, the PO must perform: Articulate the product vision to the team Define the goals at the beginning of every sprint Tell the story behind each user story so that the development team [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=agile,PM,PO,roles,scrum" height="61" width="50" /><br />
			</a>
		</div>
<p>I received from <a href="http://twitter.com/akitaonrails">@akitaonrails</a> an interesting <a href="http://agilesoftwaredevelopment.com/blog/jackmilunsky/product-owner-vs-product-manager">article</a> concerning the differences and responsibilities of the product owner and product manager roles.</p>
<p>For the author, the <a href="http://en.wikipedia.org/wiki/Scrum_(development)">PO</a> must perform:</p>
<ol>
<li>Articulate the product vision to the team</li>
<li style="background:#FEFF5F;">Define the goals at the beginning of every sprint</li>
<li>Tell the story behind each user story so that the development team understands what is required. So the PO must understand the end user requirements.</li>
<li style="background:#FEFF5F;">Define or help define the user story acceptance criteria so the team knows when they are DONE</li>
<li>Be able to prioritize the stories and be able to negotiate/collaborate on priorities with the team. Negotiate priorities occurs when after taking the top priorities off the backlog; there may be some remaining capacity that the next highest priority story won&#8217;t fit in to. So in those cases, a lower priority feature could be picked.</li>
<li>Must be available at all inspect and adapt points to answer questions and help guide the team empirically</li>
</ol>
<p>On the other side, the PM must perform:</p>
<ol>
<li>Defining the marketing strategies and outbound marketing communications</li>
<li>Pricing strategies</li>
<li>Understanding the positioning of the product in the market place</li>
<li>Competitive analysis</li>
</ol>
<p>For me, the PO mainly responsibilities are the ones that highlighted. What do you think about them?</p>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Product%20Owner%20vs%20Product%20Manager%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;title=Product%20Owner%20vs%20Product%20Manager&amp;bodytext=I%20received%20from%20%40akitaonrails%20an%20interesting%20article%20concerning%20the%20differences%20and%20responsibilities%20of%20the%20product%20owner%20and%20product%20manager%20roles.%0D%0A%0D%0AFor%20the%20author%2C%20the%20PO%20must%20perform%3A%0D%0A%0D%0A%0D%0AArticulate%20the%20product%20vision%20to%20the%20team%0D%0ADefine%20the%20go'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;title=Product%20Owner%20vs%20Product%20Manager&amp;notes=I%20received%20from%20%40akitaonrails%20an%20interesting%20article%20concerning%20the%20differences%20and%20responsibilities%20of%20the%20product%20owner%20and%20product%20manager%20roles.%0D%0A%0D%0AFor%20the%20author%2C%20the%20PO%20must%20perform%3A%0D%0A%0D%0A%0D%0AArticulate%20the%20product%20vision%20to%20the%20team%0D%0ADefine%20the%20go'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;title=Product%20Owner%20vs%20Product%20Manager'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;t=Product%20Owner%20vs%20Product%20Manager'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;title=Product%20Owner%20vs%20Product%20Manager&amp;annotation=I%20received%20from%20%40akitaonrails%20an%20interesting%20article%20concerning%20the%20differences%20and%20responsibilities%20of%20the%20product%20owner%20and%20product%20manager%20roles.%0D%0A%0D%0AFor%20the%20author%2C%20the%20PO%20must%20perform%3A%0D%0A%0D%0A%0D%0AArticulate%20the%20product%20vision%20to%20the%20team%0D%0ADefine%20the%20go'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;title=Product%20Owner%20vs%20Product%20Manager'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Product%20Owner%20vs%20Product%20Manager&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;title=Product%20Owner%20vs%20Product%20Manager&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F&amp;t=Product%20Owner%20vs%20Product%20Manager'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Product%20Owner%20vs%20Product%20Manager&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F11%2F11%2Fproduct-owner-vs-product-manager%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/5QH5VcmZwRu7KqOTbv7QpxIB3Js/0/da"><img src="http://feedads.g.doubleclick.net/~a/5QH5VcmZwRu7KqOTbv7QpxIB3Js/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5QH5VcmZwRu7KqOTbv7QpxIB3Js/1/da"><img src="http://feedads.g.doubleclick.net/~a/5QH5VcmZwRu7KqOTbv7QpxIB3Js/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/0aI7H63ZkvA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2009/11/11/product-owner-vs-product-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2009/11/11/product-owner-vs-product-manager/</feedburner:origLink></item>
		<item>
		<title>Effect propagation to code</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-rss/~3/94X0lhWiLOs/</link>
		<comments>http://rafaelnaufal.com/blog/2009/10/27/effect-propagation-to-code/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 02:20:26 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[javase]]></category>
		<category><![CDATA[java_programming]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blog/?p=126</guid>
		<description><![CDATA[Reading Michael Feathers&#8217; &#8216;Working Effectively With LegacyCode&#8217;, I found quite interesting his heuristics to trace propagation of effects to code: Identify a method that will change. If the method has a return value, look at its callers. See if the method modifies any values. If it does, look at the method that use those values, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=code,javase,java_programming,legacy,testing" height="61" width="50" /><br />
			</a>
		</div>
<p>Reading Michael Feathers&#8217; <a href="http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1255440556&#038;sr=8-1">&#8216;Working Effectively With LegacyCode&#8217;</a>, I found quite interesting his heuristics to trace propagation of effects to code:</p>
<ol>
<li>Identify a method that will change.</li>
<li>If the method has a return value, look at its callers.</li>
<li>See if the method modifies any values. If it does, look at the method that use those values, and the methods that use those methods.</li>
<li>Make sure you look for superclasses and subclasses that might be users of these instance variables and methods also.</li>
<li>Look at parameters to the methods. See if they or any objects that their methods return are used by the code that you want to change.</li>
<li>Look for global variables and static data that is modified in any of the methods you&#8217;ve identified.</li>
</ol>
Share and Enjoy:<a rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Effect%20propagation%20to%20code%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;title=Effect%20propagation%20to%20code&amp;bodytext=Reading%20Michael%20Feathers%27%20%27Working%20Effectively%20With%20LegacyCode%27%2C%20I%20found%20quite%20interesting%20his%20heuristics%20to%20trace%20propagation%20of%20effects%20to%20code%3A%0D%0A%0D%0A%0D%0A%09Identify%20a%20method%20that%20will%20change.If%20the%20method%20has%20a%20return%20value%2C%20look%20at%20its%20callers.%0D%0A%0D%0A%09See'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;title=Effect%20propagation%20to%20code&amp;notes=Reading%20Michael%20Feathers%27%20%27Working%20Effectively%20With%20LegacyCode%27%2C%20I%20found%20quite%20interesting%20his%20heuristics%20to%20trace%20propagation%20of%20effects%20to%20code%3A%0D%0A%0D%0A%0D%0A%09Identify%20a%20method%20that%20will%20change.If%20the%20method%20has%20a%20return%20value%2C%20look%20at%20its%20callers.%0D%0A%0D%0A%09See'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a rel='nofollow' target='_blank'  href='http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;title=Effect%20propagation%20to%20code'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/reddit.png' class='sociable-img sociable-hovers ' title='Reddit' alt='Reddit' /></a><a rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;t=Effect%20propagation%20to%20code'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;title=Effect%20propagation%20to%20code&amp;annotation=Reading%20Michael%20Feathers%27%20%27Working%20Effectively%20With%20LegacyCode%27%2C%20I%20found%20quite%20interesting%20his%20heuristics%20to%20trace%20propagation%20of%20effects%20to%20code%3A%0D%0A%0D%0A%0D%0A%09Identify%20a%20method%20that%20will%20change.If%20the%20method%20has%20a%20return%20value%2C%20look%20at%20its%20callers.%0D%0A%0D%0A%09See'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;title=Effect%20propagation%20to%20code'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Effect%20propagation%20to%20code&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a rel='nofollow' target='_blank'  href='http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;title=Effect%20propagation%20to%20code&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;srcTitle=Open+minds+leads+to+freedom+Communicating+my+thoughts+on+software+development'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png' class='sociable-img sociable-hovers ' title='Google Buzz' alt='Google Buzz' /></a><a rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F&amp;t=Effect%20propagation%20to%20code'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a rel='nofollow' target='_blank'  href='http://slashdot.org/bookmark.pl?title=Effect%20propagation%20to%20code&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblog%2F2009%2F10%2F27%2Feffect-propagation-to-code%2F'><img src='http://rafaelnaufal.com/blog/wp-content/plugins/sociable-30/images/default/16/slashdot.png' class='sociable-img sociable-hovers ' title='Slashdot' alt='Slashdot' /></a><br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/ioNUykkW31GtQvugq8mUWKfifBE/0/da"><img src="http://feedads.g.doubleclick.net/~a/ioNUykkW31GtQvugq8mUWKfifBE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ioNUykkW31GtQvugq8mUWKfifBE/1/da"><img src="http://feedads.g.doubleclick.net/~a/ioNUykkW31GtQvugq8mUWKfifBE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/rafaelnaufal-rss/~4/94X0lhWiLOs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blog/2009/10/27/effect-propagation-to-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blog/2009/10/27/effect-propagation-to-code/</feedburner:origLink></item>
	</channel>
</rss>
