<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Memory Leaks</title><link>http://mhshams.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Shams-LetsTalkAboutJavaEe" /><description>Ongoing thoughts about programming and software development related topics.</description><language>en</language><managingEditor>noreply@blogger.com (Mohammad Shamsi)</managingEditor><lastBuildDate>Thu, 16 Feb 2012 04:13:59 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">50</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="shams-letstalkaboutjavaee" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>Ongoing thoughts about programming and software development related topics.</itunes:subtitle><item><title>Trie: Second Implementation in Groovy</title><link>http://mhshams.blogspot.com/2012/02/trie-second-implementation-in-groovy.html</link><category>Trie</category><category>Algorithm</category><category>Java</category><category>Trie Tree</category><category>Prefix Tree</category><category>Groovy</category><category>Prefix</category><category>Data Structure</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Fri, 10 Feb 2012 22:58:10 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-2349878518506112687</guid><description>This is another version of Trie implementation in my &lt;a href="http://mhshams.blogspot.com/2012/02/groovy-trie-implementation.html"&gt;previous post&lt;/a&gt;. The new one comes with a flag to identify a complete word. 
&lt;br/&gt;
&lt;br/&gt;
&lt;script src="https://gist.github.com/1797328.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-2349878518506112687?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vgagZvffQ7b3cFvyj3nmN40zkBM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vgagZvffQ7b3cFvyj3nmN40zkBM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vgagZvffQ7b3cFvyj3nmN40zkBM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vgagZvffQ7b3cFvyj3nmN40zkBM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-10T22:58:10.350-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Groovy : Trie Implementation</title><link>http://mhshams.blogspot.com/2012/02/groovy-trie-implementation.html</link><category>Trie</category><category>Algorithm</category><category>Java</category><category>Groovy</category><category>Data Structure</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Fri, 10 Feb 2012 05:47:32 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-6155413794292845168</guid><description>From &lt;a href="http://en.wikipedia.org/wiki/Prefix_tree"&gt;Wikipedia&lt;/a&gt;:
&lt;br/&gt;
&lt;br/&gt;
In computer science, a trie, or prefix tree, is an ordered tree data structure that is used to store an associative array where the keys are usually strings. Unlike a binary search tree, no node in the tree stores the key associated with that node; instead, its position in the tree defines the key it is associated with. All the descendants of a node have a common prefix of the string associated with that node, and the root is associated with the empty string. Values are normally not associated with every node, only with leaves and some inner nodes that correspond to keys of interest.
&lt;br/&gt;
&lt;br/&gt;
&lt;script src="https://gist.github.com/1789676.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-6155413794292845168?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PYq-yJmN0owRblynG_Bno1Q_C9Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PYq-yJmN0owRblynG_Bno1Q_C9Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PYq-yJmN0owRblynG_Bno1Q_C9Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PYq-yJmN0owRblynG_Bno1Q_C9Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-10T05:47:32.057-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Introsort implementation by Groovy.</title><link>http://mhshams.blogspot.com/2012/01/introsort-implementation-by-groovy.html</link><category>Algorithm</category><category>sort algorithm</category><category>Java</category><category>Intro sort</category><category>Groovy</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Tue, 31 Jan 2012 08:04:43 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-8161220794047718036</guid><description>Another groovy homework. this time Introsort.
&lt;br/&gt;
&lt;br/&gt;
From &lt;a href="http://en.wikipedia.org/wiki/Introsort"&gt;Wikipedia &lt;/a&gt;:
&lt;br/&gt;
Introsort or introspective sort is a sorting algorithm designed by David Musser in 1997. It begins with quicksort and switches to heapsort when the recursion depth exceeds a level based on (the logarithm of) the number of elements being sorted. It is the best of both worlds, with a worst-case O(n log n) runtime and practical performance comparable to quicksort on typical data sets. Since both algorithms it uses are comparison sorts, it too is a comparison sort.
&lt;br/&gt;
&lt;br/&gt;

&lt;script src="https://gist.github.com/1711305.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-8161220794047718036?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BPMw0TFPERHIaZXcu3YQpO3PN7E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BPMw0TFPERHIaZXcu3YQpO3PN7E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BPMw0TFPERHIaZXcu3YQpO3PN7E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BPMw0TFPERHIaZXcu3YQpO3PN7E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T08:04:43.501-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Log base 2 of an N-bit integer</title><link>http://mhshams.blogspot.com/2012/01/log-base-2-of-n-bit-integer.html</link><category>Algorithm</category><category>Java</category><category>Log Base 2</category><category>Groovy</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Fri, 27 Jan 2012 08:02:14 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-2156032331126898131</guid><description>Another Groovy training post. This time, three different method to find log base 2 of an N-bit integer.
&lt;br/&gt;
&lt;br/&gt;
&lt;h3&gt;
Note: All algorithms and code credits goes to
&lt;a href="http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn"&gt;Bit Twiddling Hacks&lt;/a&gt;.
&lt;/h3&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;script src="https://gist.github.com/1689412.js?file=gistfile1.groovy"&gt;&lt;/script&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;h3&gt;
Note: All algorithms and code credits goes to
&lt;a href="http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn"&gt;Bit Twiddling Hacks&lt;/a&gt;.
&lt;/h3&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-2156032331126898131?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7WXgGz1qc-xfCcJDmYl5Ow8IpvM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7WXgGz1qc-xfCcJDmYl5Ow8IpvM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7WXgGz1qc-xfCcJDmYl5Ow8IpvM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7WXgGz1qc-xfCcJDmYl5Ow8IpvM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T08:02:14.302-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Priority Queue - Groovy Implementation</title><link>http://mhshams.blogspot.com/2012/01/priority-queue-groovy-implementation.html</link><category>Priority Queue</category><category>Java</category><category>Groovy</category><category>Binary Heap</category><category>Data Structure</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sun, 22 Jan 2012 04:32:17 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-5425690230381434339</guid><description>Here it is :), Another data structure, implemented by me in Groovy as part of my Groovy learning practices. 

Priority Queue.

&lt;script src="https://gist.github.com/1656906.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-5425690230381434339?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GVW-YHkNuvR8bjIL5aOrI75uxr0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GVW-YHkNuvR8bjIL5aOrI75uxr0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GVW-YHkNuvR8bjIL5aOrI75uxr0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GVW-YHkNuvR8bjIL5aOrI75uxr0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T04:32:17.251-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Quick Sort, My Groovy Implementation</title><link>http://mhshams.blogspot.com/2012/01/quick-sort-my-groovy-implementation.html</link><category>sort algorithm</category><category>Java</category><category>Quick Sort</category><category>Sorting</category><category>Groovy</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Fri, 20 Jan 2012 06:13:45 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-3160602512452444646</guid><description>My Groovy Implementation for QuickSort: 

&lt;script src="https://gist.github.com/1647504.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-3160602512452444646?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T01tSvfGqO86E9CgTWepv_dxwVs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T01tSvfGqO86E9CgTWepv_dxwVs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T01tSvfGqO86E9CgTWepv_dxwVs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T01tSvfGqO86E9CgTWepv_dxwVs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T06:13:45.019-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Heap Sort Implementation in Groovy</title><link>http://mhshams.blogspot.com/2012/01/heap-sort-implementation-in-groovy.html</link><category>heap sort</category><category>sort algorithm</category><category>Java</category><category>Groovy</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Tue, 17 Jan 2012 06:26:57 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-4524494744443673657</guid><description>My Heap Sort Implementation in Groovy :

&lt;script src="https://gist.github.com/1626776.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-4524494744443673657?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b-Xr0z-m-ybycJPSAv0m5C1sub0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b-Xr0z-m-ybycJPSAv0m5C1sub0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b-Xr0z-m-ybycJPSAv0m5C1sub0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b-Xr0z-m-ybycJPSAv0m5C1sub0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T06:26:57.307-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>My Merge Sort in Groovy</title><link>http://mhshams.blogspot.com/2012/01/my-merge-sort-in-groovy.html</link><category>Java</category><category>Merge Sort</category><category>Sorting</category><category>Groovy</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Tue, 10 Jan 2012 08:23:19 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-920709505444300966</guid><description>I'm Learning Groovy :) and  This is my groovy implementation of &lt;a href="http://en.wikipedia.org/wiki/Merge_sort"&gt;Merge Sort&lt;/a&gt;.


&lt;script src="https://gist.github.com/1589815.js?file=gistfile1.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-920709505444300966?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nF2148in3ewKL2nUdX7e6Xl3Qy8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nF2148in3ewKL2nUdX7e6Xl3Qy8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nF2148in3ewKL2nUdX7e6Xl3Qy8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nF2148in3ewKL2nUdX7e6Xl3Qy8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T08:23:19.687-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Least knowledge</title><link>http://mhshams.blogspot.com/2011/12/least-knowledge.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Mon, 12 Dec 2011 01:57:40 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-6880930967133393710</guid><description>&lt;b&gt;Before :&lt;/b&gt; 
&lt;br /&gt;&lt;br /&gt;
Let's say we have following Address class: 
&lt;br /&gt;
&lt;script src="https://gist.github.com/1466156.js?file=Address"&gt;
&lt;/script&gt;
&lt;br /&gt;
And we are using it in another class like Person:
&lt;br /&gt;
&lt;script src="https://gist.github.com/1466159.js?file=Person"&gt;
&lt;/script&gt;
&lt;br /&gt;
And at the end, A client code that is going to use it in this way: 
&lt;br /&gt;
&lt;script src="https://gist.github.com/1466165.js?file=Main"&gt;
&lt;/script&gt;
&lt;br /&gt;
&lt;b&gt;After:&lt;/b&gt; 
&lt;br/&gt;
&lt;br /&gt;
Now Lets' change Person to add new methods to return first and second line of address:
&lt;br/&gt;
&lt;script src="https://gist.github.com/1466232.js?file=Person"&gt;&lt;/script&gt;
&lt;br /&gt;
So client can utilize new methods in this way:
&lt;br/&gt;
&lt;script src="https://gist.github.com/1466235.js?file=Main"&gt;&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;

What are the pros &amp; cons for each solution (before and after) ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-6880930967133393710?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sHm51iBVmbiGRThQvXF-MCnVnkw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sHm51iBVmbiGRThQvXF-MCnVnkw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sHm51iBVmbiGRThQvXF-MCnVnkw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sHm51iBVmbiGRThQvXF-MCnVnkw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T01:57:40.325-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>The SOLID Principles, Explained with Motivational Posters</title><link>http://mhshams.blogspot.com/2011/12/solid-principles-explained-with.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Wed, 07 Dec 2011 00:00:44 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-9147493601141851512</guid><description>&lt;br /&gt;
&lt;img alt="solid" src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2009/07/solid_thumb.jpg" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.globalnerdy.com/2009/07/15/the-solid-principles-explained-with-motivational-posters/"&gt;See more posters here &amp;nbsp;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-9147493601141851512?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ilv9fs6kNfwvpRTXpumUgjE8wOI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ilv9fs6kNfwvpRTXpumUgjE8wOI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ilv9fs6kNfwvpRTXpumUgjE8wOI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ilv9fs6kNfwvpRTXpumUgjE8wOI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-07T00:00:44.724-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Patterns of Effective Delivery - Dan North</title><link>http://mhshams.blogspot.com/2011/11/patterns-of-effective-delivery-dan.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sat, 26 Nov 2011 07:58:02 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-465937025175757202</guid><description>&lt;p&gt;
Another excellent talk from Dan North.
&lt;/p&gt;
&lt;iframe src="http://player.vimeo.com/video/24681032?portrait=0&amp;amp;color=8FC556" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/24681032"&gt;Patterns of Effective Delivery - Dan North&lt;/a&gt; from &lt;a href="http://vimeo.com/rootsconf"&gt;Roots conference&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-465937025175757202?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DLmcWKeFuMYLP9lAbvDXnL38l2s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DLmcWKeFuMYLP9lAbvDXnL38l2s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DLmcWKeFuMYLP9lAbvDXnL38l2s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DLmcWKeFuMYLP9lAbvDXnL38l2s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-26T07:58:02.259-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Velocity is Killing Agility!</title><link>http://mhshams.blogspot.com/2011/11/velocity-is-killing-agility.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sat, 12 Nov 2011 07:52:47 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-5713151838700147870</guid><description>&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #555555; font-family: Georgia, serif; font-size: 14px; line-height: 21px; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 30px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Velocity is increasingly being used as a productivity measure (not the capacity calibration measure that it was intended to be) that focuses too much attention on the volume of story points delivered.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Focusing on volume detracts from the quality of the customer experience delivered and investing enough in the delivery engine (technical quality).&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Giving the product owner/manager complete priority control makes the problem worse—we have gone from customer focus to customer control that further skews the balance of investing in new features versus the delivery engine.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Particularly for those parts of the business for which high responsiveness (a deployment cycle time of days or weeks) is critical, investment in the delivery engine is as critical as investing in new features.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Management needs to allocate resources between features and engine work and then create a product ownership team consisting of the product owner and technical leader to do feature prioritization.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Value (value points) and cycle time metrics will help balance the detrimental effects of velocity measures.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Read the full article :&amp;nbsp;&lt;a href="http://jimhighsmith.com/2011/11/02/velocity-is-killing-agility/"&gt;Velocity is Killing Agility!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-5713151838700147870?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KRjwRLyoFU0_ozsT9mc4MXGh0n4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KRjwRLyoFU0_ozsT9mc4MXGh0n4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KRjwRLyoFU0_ozsT9mc4MXGh0n4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KRjwRLyoFU0_ozsT9mc4MXGh0n4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-12T07:52:47.226-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>InfoQ: Apache Harmony Finale</title><link>http://mhshams.blogspot.com/2011/11/infoq-apache-harmony-finale.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Tue, 08 Nov 2011 17:29:28 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-8023624460287105375</guid><description>&lt;div&gt;
&lt;div style="background-color: white; font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 16px; text-align: -webkit-auto;"&gt;
The Apache Harmony PMC &lt;a href="http://markmail.org/message/zmd22hkyukfbibh5" style="color: #0b59b2;"&gt;initiated a vote&lt;/a&gt; earlier this week to begin the process of moving the codebase into the Apache Attic and disbanding the PMC. With &lt;a href="http://markmail.org/message/sxjtefpayanbqfe5" style="color: #0b59b2;"&gt;18 for and 2 against&lt;/a&gt;, the result will be that the Apache Harmony project will be wound up and placed in the Attic for posterity.&lt;/div&gt;
&lt;div style="background-color: white; font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 16px; text-align: -webkit-auto;"&gt;
Apache Harmony was an open-source clean-room implementation of the JDK, released under the Apache license, but could never call itself Java compatible as Sun refused to honour the JSPA which would give them access to the Testing Compatibility Kit (TCK), a pre-requisite of which is needed before an implementation can call itself Java. Apache's &lt;a href="http://www.apache.org/jcp/sunopenletter.html" style="color: #0b59b2;"&gt;open letter to Sun&lt;/a&gt;, published on April 10th 2007, asked for and failed to receive clarity on the subject.&lt;/div&gt;
&lt;div style="background-color: white; font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 16px; text-align: -webkit-auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: white; font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 16px; text-align: -webkit-auto;"&gt;
continue here :&amp;nbsp;&lt;a href="http://www.infoq.com/news/2011/11/apache-harmony-finale#.TrnXErivVBM.blogger" style="font-family: Georgia, serif; font-size: 16px; line-height: normal; text-align: left;"&gt;InfoQ: Apache Harmony Finale&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-8023624460287105375?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AF8x6FUmo85qD0h21V_teZcDmZY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AF8x6FUmo85qD0h21V_teZcDmZY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AF8x6FUmo85qD0h21V_teZcDmZY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AF8x6FUmo85qD0h21V_teZcDmZY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-08T17:29:28.464-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Being Agile with Lean Software Development</title><link>http://mhshams.blogspot.com/2011/11/being-agile-with-lean-software.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sun, 06 Nov 2011 05:09:48 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-5147702831337582177</guid><description>&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, verdana, helvetica, sans-serif; font-size: 12px; line-height: 14px;"&gt;The “Lean” term has only been around in the business world since the 90s, but the underlying concept of lean production goes way back. While Henry Ford wasn’t the father of this approach (lean principles actually have Japanese roots), his strong focus on efficient use of resources is viewed as an important input in the development of this system. Automobile design and manufacture is definitely the industry most people associate with the lean philosophy since Toyota has made a point of marketing around this frugality and value-focused methodology for the last few decades.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, verdana, helvetica, sans-serif; font-size: 12px; line-height: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: arial, verdana, helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 14px;"&gt;&lt;a href="http://www.theserverside.com/feature/Being-Agile-with-Lean-Software-Development"&gt;read the full article here...&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-5147702831337582177?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6MgGCmcu15GqdMdO1d_RMmYOjxo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6MgGCmcu15GqdMdO1d_RMmYOjxo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6MgGCmcu15GqdMdO1d_RMmYOjxo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6MgGCmcu15GqdMdO1d_RMmYOjxo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-06T05:09:48.862-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Spring: The art of using GRASP Patterns</title><link>http://mhshams.blogspot.com/2011/11/spring-art-of-using-grasp-patterns.html</link><category>JavaDepend</category><category>Java</category><category>GRASP</category><category>Spring</category><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sat, 05 Nov 2011 08:00:36 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-594832167469007355</guid><description>&lt;br /&gt;
&lt;div style="background-color: white; color: #555555; font-family: Verdana, 'BitStream vera Sans', Helvetica, sans-serif; font-size: 12px; line-height: 17px; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
When we search for design pattern articles, we found essentially documentation concerning “Gang of Four” patterns, they are very useful and contribute to well design application.&lt;/div&gt;
&lt;div style="background-color: white; color: #555555; font-family: Verdana, 'BitStream vera Sans', Helvetica, sans-serif; font-size: 12px; line-height: 17px; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
But when I discovered&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/GRASP_(object-oriented_design)" style="color: #2970a6; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;GRASP principles&lt;/a&gt;&amp;nbsp;, I advice any one interested to improve his skills design to look at these principles, it gives a design fondamental rules.&lt;/div&gt;
&lt;div style="background-color: white; color: #555555; font-family: Verdana, 'BitStream vera Sans', Helvetica, sans-serif; font-size: 12px; line-height: 17px; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
In this article we will discover some GRASP principles used by Spring, and the advantages of using them.&lt;/div&gt;
&lt;div style="background-color: white; color: #555555; font-family: Verdana, 'BitStream vera Sans', Helvetica, sans-serif; font-size: 12px; line-height: 17px; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #555555; font-family: Verdana, 'BitStream vera Sans', Helvetica, sans-serif; font-size: 12px; line-height: 17px; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;a href="http://javadepend.wordpress.com/2011/10/26/spring-the-art-of-using-grasp-patterns/"&gt;read the full article...&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-594832167469007355?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JkyArcMbmCFKmnChAavtqa8LluY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JkyArcMbmCFKmnChAavtqa8LluY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JkyArcMbmCFKmnChAavtqa8LluY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JkyArcMbmCFKmnChAavtqa8LluY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-05T08:00:36.972-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>From Months to Minutes</title><link>http://mhshams.blogspot.com/2011/10/from-months-to-minutes.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Thu, 06 Oct 2011 08:50:05 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-1670584241565814484</guid><description>&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="B-u-nd-nb" style="display: table;"&gt;
&lt;span class="Apple-style-span" style="line-height: 1.4;"&gt;Another&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 22px;"&gt;interesting&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 1.4;"&gt;&amp;nbsp;presentation by Dan North.&lt;/span&gt;&lt;br /&gt;
&lt;div style="line-height: 1.4;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="line-height: 1.4;"&gt;
Dan North reviews many Agile practices and concepts,&amp;nbsp;mentioning what has really made the difference over the years and what has not, outlining what helps high performing teams to do their job.&lt;/div&gt;
&lt;div style="line-height: 1.4;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="line-height: 1.4;"&gt;
Watch the presentation &lt;a href="http://www.infoq.com/presentations/From-Months-to-Minutes"&gt;here at InfoQ&lt;/a&gt;&amp;nbsp;if you interested in Agile topics.&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-1670584241565814484?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HB7cfPgZtb6kxV3MqBfnL6qy06s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HB7cfPgZtb6kxV3MqBfnL6qy06s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HB7cfPgZtb6kxV3MqBfnL6qy06s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HB7cfPgZtb6kxV3MqBfnL6qy06s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T08:50:05.284-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>On the road to being a better developer</title><link>http://mhshams.blogspot.com/2011/08/on-road-to-being-better-developer.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sun, 21 Aug 2011 03:14:01 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-3540180908028311888</guid><description>Everyone wants to be good in what he’s doing – that’s human nature, that’s how we’re raised. The key is constant improvement without being disappointed by small failures and bumps on the way. In the last 10 years I’ve been working as a developer and I feel I’ve learnt a lot of valuable lessons – many of which can be applied to other areas of life and work. Let me share my lessons with you, dear reader.
&lt;br /&gt;
&lt;br /&gt;Without specific order, a’la ad hoc:
&lt;br /&gt;
&lt;br /&gt;Read the complete article &lt;a href="http://blog.mostof.it/being-a-better-developer/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-3540180908028311888?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6b6NBY2MjmWsvwxvFCtXRURb-3w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6b6NBY2MjmWsvwxvFCtXRURb-3w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6b6NBY2MjmWsvwxvFCtXRURb-3w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6b6NBY2MjmWsvwxvFCtXRURb-3w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-21T03:14:01.975-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Whose domain is it anyway?</title><link>http://mhshams.blogspot.com/2011/02/whose-domain-is-it-anyway.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Fri, 25 Feb 2011 22:49:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-4580107348990385764</guid><description>The brittleness of tests or specs is a recurring topic in BDD (or acceptance test-driven development, specification-by-example, or whatever you choose to call the thing where you write acceptance criteria, automate them and then make the application match). This is a tricky area, and there are probably as many styles of defining and grouping acceptance criteria as there are teams automating them.&lt;br /&gt;&lt;br /&gt;The aspect I want to focus on in this article is domain language, because there’s a failure mode I encounter surprisingly often, which seems to have a common root cause.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/"&gt;Read the full story here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-4580107348990385764?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cEJCadanfbPnDteJugSFSlXECZY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cEJCadanfbPnDteJugSFSlXECZY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cEJCadanfbPnDteJugSFSlXECZY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cEJCadanfbPnDteJugSFSlXECZY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-25T22:49:53.866-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>The perils of estimation</title><link>http://mhshams.blogspot.com/2011/02/perils-of-estimation.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Fri, 25 Feb 2011 22:44:48 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-1462364669709064688</guid><description>Business people want estimates. They want to know how much it’s going to cost them to get a solution, and they want to know how likely it is to come in on time and on budget. And of course quality is not negotiable.&lt;br /&gt;&lt;br /&gt;Agile teams I encounter are at best nervous about estimates and at worst simply evasive. “You don’t need estimates if you’re doing Agile,” they say. “It will be ready when it’s done. We’re constantly adding value so we don’t need to commit to a date.”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dannorth.net/2009/07/01/the-perils-of-estimation/"&gt;read the full story on Don North blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-1462364669709064688?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t_GAba2p-tJC0mSARj-75Q41qrI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t_GAba2p-tJC0mSARj-75Q41qrI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t_GAba2p-tJC0mSARj-75Q41qrI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t_GAba2p-tJC0mSARj-75Q41qrI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-25T22:44:48.132-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Singletons are Pathological Liars</title><link>http://mhshams.blogspot.com/2010/12/singletons-are-pathological-liars.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Mon, 27 Dec 2010 06:29:52 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-1646209126400950493</guid><description>You can live in a society where everyone (every class) declares who their friends (collaborators) are. If I know that Joe knows Mary but neither Mary nor Joe knows Tim, then it is safe for me to assume that if I give some information to Joe he may give it to Mary, but under no circumstances will Tim get hold of it. Now, imagine that everyone (every class) declares some of their friends (collaborators), but other friends (collaborators which are singletons) are kept secret. Now you are left wondering how in the world did Tim got hold of the information you gave to Joe.&lt;br /&gt;&lt;a href="http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/"&gt;&lt;br /&gt;read full story here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-1646209126400950493?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kmeu2TwvKM6PRVPZ_fcnTS3ouv8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kmeu2TwvKM6PRVPZ_fcnTS3ouv8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kmeu2TwvKM6PRVPZ_fcnTS3ouv8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kmeu2TwvKM6PRVPZ_fcnTS3ouv8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-27T06:29:52.184-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Dependency Injection, The manual way</title><link>http://mhshams.blogspot.com/2010/12/dependency-injection-manual-way.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Mon, 27 Dec 2010 05:35:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-8089852764305162682</guid><description>&lt;a href="http://www.javacodegeeks.com/2010/12/dependency-injection-manual-way.html"&gt;Dependency Injection, The manual way&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-8089852764305162682?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dEFNDRRYvi8Qng2TC0tvaku-BYw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dEFNDRRYvi8Qng2TC0tvaku-BYw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dEFNDRRYvi8Qng2TC0tvaku-BYw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dEFNDRRYvi8Qng2TC0tvaku-BYw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-27T05:35:36.612-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>"The JCP Is Dead" ?</title><link>http://mhshams.blogspot.com/2010/12/jcp-is-dead.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sat, 11 Dec 2010 23:51:11 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-3079207596283591757</guid><description>The JCP Is Dead&lt;br /&gt;... and Oracle killed it.&lt;br /&gt;&lt;br /&gt;By this time, most people know that the ASF has resigned from the JCP EC.&lt;br /&gt;&lt;br /&gt;What was posted was our final version of the notice, but I'd also like to share with the community an earlier, rougher and more "emotional" version. It says the same, but in a more face-to-face conversational way. I feel that both versions represent the disappointment, anger and sadness over this whole issue, which has been fostering since 2006. The below just captures it from a different point of view:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Read the full story on &lt;a href="http://www.jimjag.com/imo/index.php?/archives/242-The-JCP-Is-Dead.html"&gt;Jim's blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-3079207596283591757?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uksJewHqvXxW9I-VDTfPazEUs60/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uksJewHqvXxW9I-VDTfPazEUs60/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uksJewHqvXxW9I-VDTfPazEUs60/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uksJewHqvXxW9I-VDTfPazEUs60/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-11T23:51:11.801-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>What's in a Story? [Dan North]</title><link>http://mhshams.blogspot.com/2010/11/whats-in-story-dan-north.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sun, 21 Nov 2010 06:57:28 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-2679827301466826113</guid><description>Behaviour-driven development is an “outside-in” methodology. It starts at the outside by identifying business outcomes, and then drills down into the feature set that will achieve those outcomes. Each feature is captured as a “story”, which defines the scope of the feature along with its acceptance criteria. This article introduces the BDD approach to defining and identifying stories and their acceptance criteria.&lt;br /&gt;&lt;br /&gt;Introduction&lt;br /&gt;Software delivery is about writing software to achieve business outcomes. It sounds obvious, but often political or environmental factors distract us from remembering this. Sometimes software delivery can appear to be about producing optimistic reports to keep senior management happy, or just creating “busy work” to keep people in paid employment, but that’s a topic for another day.&lt;br /&gt;&lt;br /&gt;Usually, the business outcomes are too coarse-grained to be used to directly write software (where do you start coding when the outcome is “save 5% of my operating costs”?) so we need to define requirements at some intermediate level in order to get work done.&lt;br /&gt;&lt;br /&gt;Behaviour-driven development (BDD) takes the position that you can turn an idea for a requirement into implemented, tested, production-ready code simply and effectively, as long as the requirement is specific enough that everyone knows what’s going on. To do this, we need a way to describe the requirement such that everyone – the business folks, the analyst, the developer and the tester – have a common understanding of the scope of the work. From this they can agree a common definiton of “done”, and we escape the dual gumption traps of “that’s not what I asked for” or “I forgot to tell you about this other thing”.&lt;br /&gt;&lt;br /&gt;This, then, is the role of a Story. It has to be a description of a requirement and its business benefit, and a set of criteria by which we all agree that it is “done”. This is a more rigorous definition than in other agile methodologies, where it is variously described as a “promise of a conversation” or a “description of a feature”. (A BDD story can just as easily describe a non-functional requirement, as long as the work can be scoped, estimated and agreed on.)&lt;br /&gt;&lt;br /&gt;continue here : &lt;a href="http://blog.dannorth.net/whats-in-a-story/"&gt;http://blog.dannorth.net/whats-in-a-story/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-2679827301466826113?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/00ThRDTxWqutnUrZ3C4Ccd1QBus/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/00ThRDTxWqutnUrZ3C4Ccd1QBus/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/00ThRDTxWqutnUrZ3C4Ccd1QBus/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/00ThRDTxWqutnUrZ3C4Ccd1QBus/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-21T06:57:28.753-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Writing Testable Systems</title><link>http://mhshams.blogspot.com/2010/11/writing-testable-systems.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sun, 21 Nov 2010 05:31:03 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-6921956118757741864</guid><description>&lt;blockquote&gt;&lt;a href="http://java.sys-con.com/node/38674"&gt;Writing Testable Systems&lt;/a&gt;&lt;br /&gt;— Complex enterprise applications are generally hard to maintain, and risky and difficult to change. As a new developer on a team, a large legacy code base is often difficult to understand, especially when the code has evolved over a long period and new functionality has been grafted onto an existing application.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-6921956118757741864?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8X-ynztplK-Wzn0DDiTahxl27fE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8X-ynztplK-Wzn0DDiTahxl27fE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8X-ynztplK-Wzn0DDiTahxl27fE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8X-ynztplK-Wzn0DDiTahxl27fE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-21T05:31:03.781-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Test-Driven Development Is Not About Testing</title><link>http://mhshams.blogspot.com/2010/11/test-driven-development-is-not-about.html</link><author>noreply@blogger.com (Mohammad Shamsi)</author><pubDate>Sun, 21 Nov 2010 05:22:02 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8548020409963470579.post-3311996505922351431</guid><description>&lt;blockquote&gt;&lt;a href="http://java.sys-con.com/node/37795"&gt;Test-Driven Development Is Not About Testing&lt;/a&gt;&lt;br /&gt;— I am always on the look out for good questions to ask candidates in an interview. Not the 'How many oranges can I fit in this room?' kind of nonsense (the stock response to which is apparently 'with or without us standing in it?').&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8548020409963470579-3311996505922351431?l=mhshams.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0vMHG_3k0lADRo4JavQW5Thtrvw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0vMHG_3k0lADRo4JavQW5Thtrvw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0vMHG_3k0lADRo4JavQW5Thtrvw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0vMHG_3k0lADRo4JavQW5Thtrvw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-21T05:22:02.679-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><media:rating>nonadult</media:rating></channel></rss>

