<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feeds.feedburner.com/~d/styles/rss2titles.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemtitles.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" version="2.0">

<channel>
	<title>72 Miles</title>
	
	<link>http://72miles.com/blog</link>
	<description>Software By Architecture, Design, and Experience</description>
	<pubDate>Mon, 17 Nov 2008 14:40:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/72Miles" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">1712870</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" 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 xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/72Miles" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2F72Miles" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Favorite Software Patterns Books</title>
		<link>http://72miles.com/blog/posts/favorite-software-patterns-books/</link>
		<comments>http://72miles.com/blog/posts/favorite-software-patterns-books/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 04:13:51 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=214</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/favorite-software-patterns-books/";</script>var dzone_style="2";I really enjoy reading books about java and software development. My favorite type of book is the patterns books. Patterns books are great because the chapters are usually short and very focused. So you can read a chapter over lunch, or before you hit the pillow and usually not put the book down in [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/favorite-software-patterns-books/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>I really enjoy reading books about java and software development. My favorite type of book is the patterns books. Patterns books are great because the chapters are usually short and very focused. So you can read a chapter over lunch, or before you hit the pillow and usually not put the book down in the middle of a 30 page chapter.</p>
<p>I am in the midst of reading and reviewing <a href="http://www.amazon.com/gp/product/1430210095?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210095" id="static_txt_preview" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework</a>. Reading this book got me thinking about all of the other patterns books that I have read and really enjoyed. Here are my favorite software patterns books.</p>
<p><!-- 1 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/0131422464?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0131422464" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Core J2EE Patterns: Best Practices and Design Strategies</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/0131422464?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0131422464" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51QAENR2PSL._SL160_.jpg" border="0" alt="" width="120" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=0131422464" border="0" alt="" width="1" height="1" /></div>
<p>I think this was my first patterns-based book. I got a free copy when I was enrolled in a week long java patterns and architecture class in 2002 or so. I now have two copies on my bookshelf. One for me and one to lend out to friends and colleuges.</p>
<p>Core Patterns starts by introducing the concept of software patterns, then takes a unique approach by describing common J2EE anti patterns and then discussing the refactored solutions. This allows a straight-through reading for those unfamiliar with patterns or use as a reference guide for experienced pattern users.</p></div>
</div>
<p><br style="clear:both;" /><br />
<!-- 2 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/0201725835?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201725835" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">The Manager Pool: Patterns for Radical Leadership</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/0201725835?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201725835" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51T6HEHZ4FL._SL160_.jpg" border="0" alt="image" width="120" /></a> <img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=0201725835" border="0" alt="" width="1" height="1" /></div>
<p>Of all the patterns books that I have read, I think this book has the most chapters at a whopping 61. Its also my favorite. I think its my favorite because it sort of on the fringe of software development, so I don&#8217;t feel like I know as much about management. I also like it because I could relate to most every pattern either as a subordinate or as a manager.</p>
<p>This fun book identifies patterns such as <strong>Tribal Language</strong>, <strong>Leviathan</strong>, and <strong>Unique Place</strong>. The chapters are short and quick to read. This book will help you communicate more effectively, understand your subordinates, and make you a stronger software manager.</div>
</div>
<p><br style="clear:both;" /><br />
<!-- 3 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/1430210095?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210095" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/1430210095?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210095" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51ifASNEvRL._SL160_.jpg" border="0" alt="image" width="120" /></a> <img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=1430210095" border="0" alt="" width="1" height="1" /></div>
<p>I am currently reading this book. The author has a poorly written java web application that uses no model-view-controller. He takes you through the refactoring of the project. He explains a pattern, and then discussues how the Spring MVC implements the pattern. It is common for the next pattern to build on the previous, so this book is a little harder to jump to an arbritrary chapter and start reading, unless ofcourse you know the patterns aready.</p>
<p>This book takes you though the presentation layer, business layer, and integration layer and discusses how Spring uses and implements patterns throughout each layer of the software. A great Spring reference or a great MVC reference. I am glad I got this one for my bookshelf.</p></div>
</div>
<p><br style="clear:both;" /><br />
<!-- 4 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/0471227293?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0471227293"><br />
Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/0471227293?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0471227293" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/515WV5TENKL._SL160_.jpg" border="0" alt="image" width="120" /></a> <img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=0471227293" border="0" alt="" width="1" height="1" /></div>
<p>This book opens with background on pattern research, including the groundbreaking design patterns. It goes further, with 41 software patterns, all illustrated with UML diagrams and sample Java code. Early patterns, such as Delegation and Proxy, show how classes can work together without relying on inheritance. Next come creational patterns, such as the Factory and Builder patterns and the newer Object Pool pattern.</p>
<p>These pages turn out to be a great resource not only for patterns, but also for Java and UML. If you read this one and enjoy it, there is also a second volume.</p></div>
</div>
<p><br style="clear:both;" /><br />
<!-- 5 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201633612" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Design Patterns: Elements of Reusable Object-Oriented Software</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201633612" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51Rs5KgdLTL._SL160_.jpg" border="0" alt="image" width="120" /></a> <img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=0201633612" border="0" alt="" width="1" height="1" /></div>
<p>This book was a little more difficult to read. Its much more academic-oriented, rather than written to be a casual read. It also goes deeper into the pattern than most other books do. I guess that makes it a good reference. This is one of the only patterns books that I have read that delves into the user interface.</p>
<p>The downside with this book, in my opinion, is that its geared towards C++ software development, so as a java developer, I spent more time trying to understand the code examples than I did reading and understand the patterns.</p>
<p>Check out the <a href="http://hillside.net/patterns/DPBook/Contents.html" target="_notmine" onclick="javascript:pageTracker._trackPageview ('/outbound/hillside.net');">table of contents</a>.</div>
</div>
<p><br style="clear:both;" /><br />
<!-- 6 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/0849321425?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0849321425" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Software Architecture Design Patterns in Java</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/0849321425?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0849321425" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51AB7YWT1CL._SL160_.jpg" border="0" alt="image" width="120" /></a> <img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=0849321425" border="0" alt="" width="1" height="1" /></div>
<p>Covering 35 patterns, a long introduction to UML, and a web hosting company case study, this book weighs in at almost 500 pages. This one is practially a design pattern encyclopedia, so if you can only have one design pattern book on your shelf make it this one.</p>
<p>This book relys big on examples and has become a fundamental book for newer and older developers alike. After reading this one I think you&#8217;ll find yourself using patterns names more often in discussing your software.</p></div>
</div>
<p><br style="clear:both;" /></p>
<p><!-- 7 --></p>
<div style="clear:both;background-color:#F8F8F8; border-bottom:1px dashed #D7D7D7; border-top:1px dashed #D7D7D7; float: left; padding: 10px; margin-bottom:10px;">
<div style="float:left; padding: 10px;">
<h2><a href="http://www.amazon.com/gp/product/0471329290?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0471329290" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Anti-Patterns and Patterns in Software Configuration Management</a></h2>
<div style="float:right; padding: 6px;"><a href="http://www.amazon.com/gp/product/0471329290?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0471329290" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/41T5JZWWEYL._SL160_.gif" border="0" alt="image" width="120" /></a> <img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=72mile-20&amp;l=as2&amp;o=1&amp;a=0471329290" border="0" alt="" width="1" height="1" /></div>
<p>To end, an anti-patterns book. And to be honest, This one I have not read, but its next on my book list becuase it is on a topic that so few developers are experts in or sometimes even carry a conversation in. This book is coming up on 10 years old</p>
<p>As I understand, most readers of this book can really relate to most every pattern because their organizations are so bad at configuration management. This could give you the leg up to show off you knowledge and help your organization become more successful in the art of software development. At least thats what I hope it can do for me.</p></div>
</div>
<p>Thanks for reading my list. Now I have to ask, have you read any of these? Do you have any comments on them? Have you read any great patterns-based books that you would recommend?</p>
<div style="margin-bottom:20px;"></div>
<h3>Related Posts</h3>
<ul class="related_post">
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-211/" title="architecture-rules 2.1.1">architecture-rules 2.1.1</a></li>
<li>August 20, 2008 &#8212; <a href="http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/" title="Why not an Open Source contribution tax deduction?">Why not an Open Source contribution tax deduction?</a></li>
<li>May 24, 2008 &#8212; <a href="http://72miles.com/blog/posts/spring-opensessioninviewinterceptor-opensessioninviewfilter-examples/" title="Spring: OpenSessionInViewInterceptor &#038; OpenSessionInViewFilter Examples">Spring: OpenSessionInViewInterceptor &#038; OpenSessionInViewFilter Examples</a></li>
<li>July 29, 2008 &#8212; <a href="http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/" title="Open Source Revenue with Duel Licensing">Open Source Revenue with Duel Licensing</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/favorite-software-patterns-books/">Permalink</a> |
<a href="http://72miles.com/blog/posts/favorite-software-patterns-books/#comments">4 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/favorite-software-patterns-books/&amp;title=Favorite Software Patterns Books">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/favorite-software-patterns-books/feed/</wfw:commentRss>
		</item>
		<item>
		<title>“Pro Java EE Spring Patterns” Table Of Contents Preview</title>
		<link>http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/</link>
		<comments>http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 03:11:20 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=196</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/";</script>var dzone_style="2";A great way to determine if you want to buy a book or not is to review the books table to contents.

Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework  by Dhrubojyoti Kayal

Describes a catalog of patterns used across the three tiers of a [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>A great way to determine if you want to buy a book or not is to review the books table to contents.</p>
<p><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&#038;location=http%3A%2F%2Fwww.amazon.com%2FPro-Java-trade-Spring-Patterns%2Fdp%2F1430210095%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1221187873%26sr%3D8-1&#038;tag=72mile-20&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51IZmUJPa0L._SL160_.jpg" alt="Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework" style="float: left; margin-right: 20px;" /></a></p>
<p><strong>Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework </strong> by <strong>Dhrubojyoti Kayal</strong></p>
<ul style="list-style: none;">
<li>Describes a catalog of patterns used across the three tiers of a typical JEE application</li>
<li>Provides implementation details and analysis of each pattern with benefits and concerns</li>
<li>Describes the application of these patterns in a practical application scenario</li>
</li>
</ul>
<p><a href="http://farm4.static.flickr.com/3039/2846571996_805f694277_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3039/2846571996_805f694277_o.jpg" style="width:378px"/><br />
</a><br />
<a href="http://farm4.static.flickr.com/3243/2846572108_09a221a482_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3243/2846572108_09a221a482_o.jpg" style="width:378px"/><br />
</a><br />
<a href="http://farm4.static.flickr.com/3105/2846572172_310c8e90a8_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3105/2846572172_310c8e90a8_o.jpg" style="width:378px"/><br />
</a><br />
<a href="http://farm4.static.flickr.com/3211/2845738413_d572ba751e_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3211/2845738413_d572ba751e_o.jpg" style="width:378px"/><br />
</a><br />
<a href="http://farm4.static.flickr.com/3277/2845738527_7457bc48b7_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3277/2845738527_7457bc48b7_o.jpg" style="width:378px"/><br />
</a><br />
<a href="http://farm4.static.flickr.com/3148/2845738613_ff84764218_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3148/2845738613_ff84764218_o.jpg" style="width:378px"/><br />
</a></p>
<p>And finally, an overview of each of the patterns that are reviewed.</p>
<p><a href="http://farm4.static.flickr.com/3025/2846572536_c7004f94ff_o.jpg"><br />
<img src="http://farm4.static.flickr.com/3025/2846572536_c7004f94ff_o.jpg" style="width:378px"/><br />
</a></p>
<h3>Related Posts</h3>
<ul class="related_post">
<li>May 24, 2008 &#8212; <a href="http://72miles.com/blog/posts/spring-opensessioninviewinterceptor-vs-opensessioninviewfilter/" title="Spring: OpenSessionInViewInterceptor vs. OpenSessionInViewFilter">Spring: OpenSessionInViewInterceptor vs. OpenSessionInViewFilter</a></li>
<li>March 1, 2008 &#8212; <a href="http://72miles.com/blog/posts/software-engineering-goals/" title="Software Engineering Goals">Software Engineering Goals</a></li>
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-211/" title="architecture-rules 2.1.1">architecture-rules 2.1.1</a></li>
<li>May 29, 2008 &#8212; <a href="http://72miles.com/blog/posts/exceptional-meta-data/" title="Exceptional Metadata">Exceptional Metadata</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/">Permalink</a> |
<a href="http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/&amp;title=“Pro Java EE Spring Patterns” Table Of Contents Preview">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/feed/</wfw:commentRss>
		</item>
		<item>
		<title>“Practical API Design: Confessions of a Java Framework Architect” Book Review</title>
		<link>http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/</link>
		<comments>http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 02:13:34 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[book]]></category>

		<category><![CDATA[book review]]></category>

		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=120</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/";</script>var dzone_style="2";
Search This Book

Published by Apress, August 2008
416 pages
ISBN 1430209739

The Good

Numerous practical examples from the Netbeans API and the JDK.
Each chapter introduces a concept that could profoundly change your code.
Practical situations with concrete examples.
Explanations for novices and experts.

The Bad

System.out
.println
Have to read Theory before getting to the practical exapmles.
Subtitled &#8220;Confessions&#8221; ?


Purchase from Amazon.com


About the Author
Jaroslav Tulach [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><div style="border: 1px solid silver; margin: 8px 8px 0px; padding: 4px; float: right; width: 128px;"><a href="http://www.amazon.com/gp/product/1430209739?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430209739" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img src="https://images-na.ssl-images-amazon.com/images/I/51l9F%2BOQS3L._SL160_.jpg" border="0" alt="" /></a></p>
<p style="width: 100%; text-align: center;"><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Freader%2F1430209739%2F&amp;tag=72mile-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Search This Book</a></p>
<ul style="list-style:none; line-height: 9px; font-size: 9px;">
<li>Published by Apress, August 2008</li>
<li>416 pages</li>
<li>ISBN 1430209739</li>
</ul>
<h4>The Good</h4>
<ul style="list-style:none;">
<li>Numerous practical examples from the Netbeans API and the JDK.</li>
<li>Each chapter introduces a concept that could profoundly change your code.</li>
<li>Practical situations with concrete examples.</li>
<li>Explanations for novices and experts.</li>
</ul>
<h4>The Bad</h4>
<ul style="list-style:none;">
<li><tt>System.out<br />
.println</tt></li>
<li>Have to read Theory before getting to the practical exapmles.</li>
<li>Subtitled &#8220;Confessions&#8221; ?</li>
</ul>
<ul style="list-style:none;">
<li><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FPractical-API-Design-Confessions-Framework%2Fdp%2F1430209739&amp;tag=72mile-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Purchase from Amazon.com</a></li>
</ul>
</div>
<h2>About the Author</h2>
<p>Jaroslav Tulach is the founder and initial architect of NetBeans, later acquired by Sun. As creator of the technology behind NetBeans, he is still with the project to find ways to improve the design skills among all the programmers who contribute to the success of NetBeans open source project.</p>
<h2>Intended Audience</h2>
<p><a href="http://www.apress.com/book/view/1430209739" onclick="javascript:pageTracker._trackPageview ('/outbound/www.apress.com');">Apress.com</a>, the publishers, describe this book as being  <cite>recommended to every API architect who prefers a bit more engineering design over a purely artistic one.</cite> but this book is really much more for anyone who writes code that anyone else consumes - and who doesn&#8217;t do that? This book is for any developer who is not brand new to software development.</p>
<h2>Selected Chapter Highlights</h2>
<p>There are <a href="http://72miles.com/blog/posts/%E2%80%9Cpractical-api-design-confessions-of-a-java-framework-architect%E2%80%9D-table-of-contents-preview/">19 chapters</a>. There are a couple of dull chapters, but by far the majority are very interesting, applicable, and well laid out with introductions and examples of most every concept.</p>
<h4>Chapter 1: The Art of Building Modern Software</h4>
<p>The first chapter was tough to get through, but it does introduce a key concept of API design and a focus of many discussions throughout the book: <em>cluelessness</em>. Jaroslav suggests that cluelessness supports &#8220;the most promising development style.&#8221; <cite>The pragmatic use of the bulldozer approach: reuse components that are already available, compose applications form big chunks of premade libraries, glue them together, and make sure it works even without fully understanding how it works.</cite></p>
<h4>Chapter 2: The Motivation to Create an API</h4>
<p>Chapter 2 is important in that it lays out, as the titles states, &#8220;The Motivation to Create an API.&#8221; This chapter is interesting and fun to read because it lays out exactly why you are reading the book. The biggest point that I took away from this chapter is that APIs are for human beings - for other software developers like yourself - not for computers. And also that not all projects need an API, or at least not a high quality API.</p>
<h4>Chapter 5: Do Not Expose More Than You Want</h4>
<p>This chapter is the first of many that represent the reason that you bought the book. This chapter starts Part 2 of the book titled, &#8220;Practical Design.&#8221; Here, Jaroslav begins describing some practical API designs and even some design patterns. We get into applicable sections like &#8220;A method is better than a field&#8221;, &#8220;A factory is better than a constructor&#8221;, and &#8220;Do not expose deep hierarchies&#8221;. This is one of those chapters that you will come back to and read a few times and will refer to in conversation.</p>
<h4>Chapter 8: Separate APIs for Clients and Providers</h4>
<p>Chapter 8 was one of my favorites. I lead an open source project with both an internal and external API under development and this chapter was right on point for our efforts. This chapter explains the differences between, and how to package APIs for clients and APIs for providers. Jaroslav explains how if you mix your API and SPI together within a single class, then you can never modify the class, stating that <cite>adding a method is forbidden because of the contract for SPIs and removing a method is forbidden because the contract for the APIs</cite>.</p>
<h4>Chapter 10: Cooperating with Other APIs</h4>
<p>Chapter 10 discusses how to work with third parties in your application. The key concept that I took away was never to export third party classes through your API. When you do this, you lose control. If the third party changes their API, then your API has changed without you doing anything. A change in a third party could even break your software, or your end-user&#8217;s implementation of your software.</p>
<h4>Chapter 15: Evolving the API Universe</h4>
<p>Chapter 15 introduces methods for changing an API without breaking backwards compatibility.  This chapter also describes some tools and techniques that you can use to break compatibility, but to still provide your users with support for the old API by using libraries that provide bridges. Being able to provide new APIs that break backwards compatibility can be very powerful.</p>
<h2>Comments</h2>
<p>First, my complaints. They are pretty trivial for the most part.</p>
<p>I have to complain about the subtitle, &#8220;Confessions of a Java Framework Architect&#8221;. Confessions? A confession is &#8220;an admission of misdeeds or faults.&#8221; The author does describe a few mishaps from the NetBeans API, but I would hardly consider this a book of naughty confessions.</p>
<p>I also have to complain about some of the code examples, but I think this complaint is pretty common among software books with code. Sometimes, commonly accepted software development practices are ignored or left out for the sake of brevity and keeping the example small enough to fit on the page. One of the very first code examples comes on page 47 and in it (and throughout the book), Jaroslav hits us with a <tt>System.out.println</tt>. Wouldn&#8217;t this be like reading a web design book where all the examples used table-based layouts? Doesn&#8217;t everyone use some form of logging abstraction. I hate when books don&#8217;t follow best practices.</p>
<p>My last complaint is the first four chapters that make up Part 1 &#8220;Theory and Justification.&#8221; They are all theory are pretty boring. They are tough to get through when you know that if you just skipped a couple chapters you could be reading practical examples with code. There are a few good points and a few things that are good to know before you get to the practical part of the book, but I wish Jaroslav would just make the points and move on the Part 2 &#8220;Practical Design&#8221;.</p>
<p>I had a few complaints but they are mostly trivial. This truly was a good book. The best part is that the author, Jaroslav Tulach, is the founder of Netbeans and the leader of its API. He has dozens of great examples of good and bad API design from his experience with Netbeans. He describes situations where their API got out of control and how they dealt with it, methods for monitoring your API as a community or team with an <a href="http://openide.netbeans.org/tutorial/reviews/" onclick="javascript:pageTracker._trackPageview ('/outbound/openide.netbeans.org');">API review</a>, and how to avoid API mishaps. Jaroslav has also been around long enough and is so intimate with the evolution of the JDK that he is able to site specific examples in the JDK where changes to the API broke software around the world. Jaroslav is very knowledgeable on the topic and his writing shows it.</p>
<p>The book is full of practical examples. After reading many chapters, I went right to my open source project, <a href="http://code.google.com/p/architecturerules/" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Architecture Rules</a>, and either changed code or emailed developer mailing list to suggest changes to code to encourage a better, more malleable and extensible API. I now realize how not only are my interfaces and methods part our API, but so are our file outputs and inputs. Even our exceptions messages are part of our API.</p>
<p>This is without a doubt a book that you need to put on your bookshelf. This is the first book of its kind and the tips and tricks that it provides is <strong>timeless</strong> - a key attribute of any pragmatic software development book. I encourage you to flip though this book at your local bookstore or just download Chapter 1:</p>
<h3>Download the Excerpt</h3>
<p>Bookpool.com offers this excerpt: <em><a href="ftp://ftp.bookpool.com/sc/39/1430209739.pdf" onclick="javascript:pageTracker._trackPageview ('/outbound/ftp.bookpool.com');">Chapter 1: The Art of Building Modern Software</a></em>.</p>
<h3>Resources</h3>
<ul style="list-style: none">
<li>Purchase <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FPractical-API-Design-Confessions-Framework%2Fdp%2F1430209739&amp;tag=72mile-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Practical API Design: Confessions of a Java Framework Architect</a></li>
<li><a href="http://java.dzone.com/news/interview-jaroslav-tulach-auth" onclick="javascript:pageTracker._trackPageview ('/outbound/java.dzone.com');">Interview: Jaroslav Tulach, Author of &#8220;Practical API Design&#8221;</a></li>
<li><a href="http://wiki.apidesign.org/wiki/Blogs" onclick="javascript:pageTracker._trackPageview ('/outbound/wiki.apidesign.org');">Confessions of API Designers Blog</a></li>
<li><a href="http://blogs.apidesign.org" onclick="javascript:pageTracker._trackPageview ('/outbound/blogs.apidesign.org');">http://blogs.apidesign.org</a></li>
</ul>
<h3>Related Posts</h3>
<ul class="related_post">
<li>September 1, 2008 &#8212; <a href="http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/" title="“Practical API Design: Confessions of a Java Framework Architect” Table Of Contents Preview">“Practical API Design: Confessions of a Java Framework Architect” Table Of Contents Preview</a></li>
<li>March 22, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-21-on-the-horizon/" title="architecture-rules-2.1.0 on the Horizon">architecture-rules-2.1.0 on the Horizon</a></li>
<li>April 16, 2008 &#8212; <a href="http://72miles.com/blog/posts/gumby-and-architecture-rules/" title="Gumby and Architecture Rules">Gumby and Architecture Rules</a></li>
<li>June 15, 2008 &#8212; <a href="http://72miles.com/blog/posts/greatest-barriers-to-open-source-adoption/" title="Greatest Barriers to Open-Source Adoption">Greatest Barriers to Open-Source Adoption</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/">Permalink</a> |
<a href="http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/#comments">4 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/&amp;title=&#8220;Practical API Design: Confessions of a Java Framework Architect&#8221; Book Review">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/api/" rel="tag">api</a>, <a href="http://72miles.com/blog/posts/tag/book/" rel="tag">book</a>, <a href="http://72miles.com/blog/posts/tag/book-review/" rel="tag">book review</a>, <a href="http://72miles.com/blog/posts/tag/review/" rel="tag">review</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/practical-api-design-confessions-of-a-java-framework-architect-book-reivew/feed/</wfw:commentRss>
		</item>
		<item>
		<title>“Practical API Design: Confessions of a Java Framework Architect” Table Of Contents Preview</title>
		<link>http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/</link>
		<comments>http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 00:29:12 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=136</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/";</script>var dzone_style="2";A great way to determine if you want to buy a book or not is to review the books table to contents.

Practical API Design: Confessions of a Java Framework Architect by Jaroslav Tulach

Teaches you how to write an API that will stand the test of Time
Written by the designer of the NetBeans API at [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>A great way to determine if you want to buy a book or not is to review the books table to contents.</p>
<p><a href="http://www.amazon.com/gp/product/1430209739?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430209739" style="color: #515151;" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');"><img style="float: left; margin-right: 20px;" src="https://images-na.ssl-images-amazon.com/images/I/51l9F%2BOQS3L._SL160_.jpg" border="0" alt="" /></a></p>
<p><strong>Practical API Design: Confessions of a Java Framework Architect</strong> by <strong>Jaroslav Tulach</strong></p>
<ul style="list-style: none;">
<li>Teaches you how to write an API that will stand the test of Time</li>
<li>Written by the designer of the NetBeans API at Sun</li>
<li>Based on best practices, scalability, and API design patterns</li>
</ul>
<p><img src="http://farm4.static.flickr.com/3258/2819000383_bce6338e7b.jpg?v=0" alt="chapters 1 to 3" /></p>
<p><img src="http://farm4.static.flickr.com/3231/2819000475_44c88ebdaf.jpg?v=0" alt="chapters 4 to 6" /></p>
<p><img src="http://farm4.static.flickr.com/3043/2819003597_960a301d73.jpg?v=0" alt="chapters 7 to 11" /></p>
<p><img src="http://farm4.static.flickr.com/3263/2819860308_ba54c7d714.jpg?v=0" alt="chapters 12 to 15" /></p>
<p><img src="http://farm4.static.flickr.com/3295/2819845094_2af53aa381.jpg?v=0" alt="chapters 16 to 19" /><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>April 13, 2008 &#8212; <a href="http://72miles.com/blog/posts/what-is-architecture/" title="What is &#8220;Architecture&#8221;?">What is &#8220;Architecture&#8221;?</a></li>
<li>February 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-203/" title="architecture-rules-2.0.3">architecture-rules-2.0.3</a></li>
<li>August 20, 2008 &#8212; <a href="http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/" title="Why not an Open Source contribution tax deduction?">Why not an Open Source contribution tax deduction?</a></li>
<li>November 13, 2008 &#8212; <a href="http://72miles.com/blog/posts/favorite-software-patterns-books/" title="Favorite Software Patterns Books">Favorite Software Patterns Books</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/">Permalink</a> |
<a href="http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/&amp;title=“Practical API Design: Confessions of a Java Framework Architect” Table Of Contents Preview">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/%e2%80%9cpractical-api-design-confessions-of-a-java-framework-architect%e2%80%9d-table-of-contents-preview/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Why not an Open Source contribution tax deduction?</title>
		<link>http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/</link>
		<comments>http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 01:41:41 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=103</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/";</script>var dzone_style="2";Have you heard of the Artists-Museum Partnership Act? Probably not. It didn&#8217;t even have a wikipedia article until I wrote it. In a few words the act would:
amend the Internal Revenue Code of 1986 to allow taxpayers who create literary, musical, artistic, or scholarly compositions or similar property a fair market value (determined at [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>Have you heard of the Artists-Museum Partnership Act? Probably not. It didn&#8217;t even have a <a href="http://en.wikipedia.org/wiki/Artist-Museum_Partnership_Act" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">wikipedia article</a> until I wrote it. In a few words the act would:</p>
<blockquote><p>amend the Internal Revenue Code of 1986 to allow taxpayers who create literary, musical, artistic, or scholarly compositions or similar property a fair market value (determined at the time of contribution) tax deduction for contributions of such properties, the copyrights thereon, or both&#8230;</p></blockquote>
<p>The artists put a lot of time, creativity, experience, and thought into their work, and then they donate it to museums so that the public can share in this art at a free or deeply reduced cost. This bill allows those artists to be justly compensated for their work. So its good for the public and good for the artist right? Maybe, depends on your political views I&#8217;d suppose. And just to be straightforward with you, this is only a proposed bill. It has not been made law yet despite the fact that it was introduced two years ago and has made it through the senate.</p>
<p>So the question is, if artists can work on their art only to donate it and receive a tax deduction, then why don&#8217;t open source project leaders and contributors deserve equal rights? Well first, there are some issues to consider.</p>
<h2>Art is Understood</h2>
<p>Actually art is quite subjective, but that&#8217;s not what I meant. Art has been around since the beginning of time, so when it comes to writing and developing federal laws, congress has time and experience on their side. There are hundreds if not thousands of laws governing art. Computers, software, and information technology on the other hand is still very new. Most of it is still not regulated, and the geezers who are writing the regulation <a href="http://www.youtube.com/watch?v=f99PcP0aFNE" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/www.youtube.com');">don&#8217;t know the difference between broadband and a pickup truck</a>. It will still be many years before they get a handle information technology.</p>
<h2>Fair Market Value</h2>
<p>How do you determine the fair market value of open source software? Lines of code? That is a pretty lame metric. How about prevalence in the market place - is more users equal to a great worth? What about cutting edge software? Usually those to enter the market first make a little extra something for the risk and the know how. Forget about the code. What about documentation? And the size of the community. It&#8217;s going to be extremely hard to apply any type of accurate value to most open source projects.</p>
<h2>Many contributors</h2>
<p>Open Source software typically has many developers. From the project leaders and major contributors to the developers who simple submit a patch or two. But also consider issues that are reported, documentation, mailing lists, and other support channels. They are in some way or another contribute to the software as a whole and are important to making the software useful. So how do you determine each individual contributor&#8217;s value and thus determine their share of the deduction?</p>
<h2>Long development periods</h2>
<p>With art, you have a creation period, then a final release. With software, we have  creation periods that can last years, with many intermittent releases - some of which add value to the software others of which may actually make the software less valuable. So you could take the value of this release less the value of the last release to come up with this releases value. Careful. If you introduce too many bugs, the value could be negative, and could owe the IRS. Wow.</p>
<h2>Difficult to track</h2>
<p>Artists produce a single artifact that is sold or donated. Software is reproducible and is almost free to do so an infinite number of times. The usage of the software is very important in determining its value. For example, a project with a couple of users probably is not worth as much as a project with hundreds of users. Your Pumpkin Path is no where near as prominent as Apache&#8217;s Web Server - or is it. How do we know? There needs to be some way to determine an exact user count or at least to determine what grade you might be in, be int 1-10 users, 10-100, users, 100-1000 users, etc. I run <a href="http://code.google.com/p/architecturerules/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Architecture Rules</a> and I honestly don&#8217;t know if I have 10 users, or 100. You could look at <a href="http://code.google.com/p/architecturerules/downloads/list" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">download counts</a>, but maven downloads aren&#8217;t tracked. And what about when one user downloads the artifact and puts it in their organization repository. There could be 100 users from that one download. This would be a hard number to come up with, and even harder the more successful a project becomes.</p>
<h2>Your Next 1040EZ</h2>
<p>The bill is not law yet, but if artists deserve tax deductions for their donations, then so do open source contributors. But we are along way away from properly regulating the computer and software industries. I have also outline a number of major hurdles before us before we can even begin to determine how big that deduction might be. So next April when your filling out your tax forms (yeah, April, because you waited until the last minute) think about how much value you have created with your open source projects and how long its going to be before you see any of that value put back into your wallet.</p>
<p>The one thing that we can do from here is to <a href="http://thomas.loc.gov/cgi-bin/bdquery/z?d109:SN00372:@@@L&amp;summ2=m&amp;" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/thomas.loc.gov');">keep an eye on this bill</a>. If it goes into the books, then we have something to start fighting for and it might be time to call your less-than-computer-literate congressman or woman and start pressing them for your fair share.<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>June 26, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-wildcard-support/" title="If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off">If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off</a></li>
<li>March 22, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-21-on-the-horizon/" title="architecture-rules-2.1.0 on the Horizon">architecture-rules-2.1.0 on the Horizon</a></li>
<li>April 5, 2008 &#8212; <a href="http://72miles.com/blog/posts/configuration-method-chaining/" title="Configuration Method Chaining">Configuration Method Chaining</a></li>
<li>July 29, 2008 &#8212; <a href="http://72miles.com/blog/posts/software-development-standards/" title="Software Development Standards">Software Development Standards</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/">Permalink</a> |
<a href="http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/#comments">3 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/&amp;title=Why not an Open Source contribution tax deduction?">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/why-not-an-open-source-tax-deduction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Architecture Rules 3.0 Roadmap</title>
		<link>http://72miles.com/blog/posts/architecture-rules-30-roadmap/</link>
		<comments>http://72miles.com/blog/posts/architecture-rules-30-roadmap/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 02:36:21 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Architecture-Rules]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Road-Map]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=93</guid>
		<description><![CDATA[UPDATE Aug-30-2008

added API package
added Listeners
added Configuration Properties
added default-architecture-rules.xml

OK, lets lay out a road map for 3.0. I sent this message to the architecture-rules-user mailing list and the architecture-rules-dev mailing list tonight. I have a few things that I want to see put into it, and I&#8217;d also like to hear what you want in it.
org.architecturerules
First. [...]]]></description>
			<content:encoded><![CDATA[<h4>UPDATE Aug-30-2008</h4>
<ul>
<li>added API package</li>
<li>added Listeners</li>
<li>added Configuration Properties</li>
<li>added default-architecture-rules.xml</li>
</ul>
<p>OK, lets lay out a road map for 3.0. I sent this message to the <a href="http://72miles.com/architecturerules/mailing-lists/architecture-rules-users">architecture-rules-user mailing list </a>and the <a href="http://72miles.com/architecturerules/mailing-lists/architecture-rules-dev">architecture-rules-dev mailing list</a> tonight. I have a few things that I want to see put into it, and I&#8217;d also like to hear what you want in it.</p>
<h2><strong>org.architecturerules</strong></h2>
<p>First. The big change is the <span style="font-family: courier new,monospace;">groupId </span>which is finally going to be moved to <span style="font-family: courier new,monospace;">org.architecturerules </span>for the core project and the maven plugin. I don&#8217;t have the domain yet. I have a <a href="../../architecturerules/fund-raising-drive" target="_blank">fund raiser</a> page where I was hoping to get about $30 to secure the domain for 3 years. So far no contributions <strong>: \</strong> Maybe if any of your work for a company that uses the project, and the company has donated money in the past, you could ask your boss for a small $30 contribution to this project. Regardless, we&#8217;ll get it eventually and the project needs to get off of <span style="font-family: courier new,monospace;">com.*</span> and the maven plugin needs to be the same <span style="font-family: courier new,monospace;">groupId</span>.</p>
<h2><strong>architecture-rules-ant</strong></h2>
<p>I want to refactor the <span style="font-family: courier new,monospace;">..architecturerules.ant </span>package to its own jar so that:</p>
<ul>
<li>User&#8217;s who want to use the ant interface and include this jar.</li>
<li> By including the jar, you get the Ant jars and dependencies. If you don&#8217;t use Ant, you don&#8217;t need the jar or the ant libraries.</li>
<li> As we add new functionality to architecture rules someone else could take on the task of keeping the ant task up to date on their own schedule.</li>
<li> This module also acts as an example of how to extend the core project.</li>
<li> Allows us to develop new ant features and fix ant issues without doing a major release of the core. There are a couple of open <a href="http://code.google.com/p/architecturerules/issues/list?can=2&amp;q=ant" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">ant-related issues in the issue list</a>.</li>
</ul>
<p>The downsides is that the API is broken, but I think that is OK given in the release  the packages are all changing to org.architecturerules so the API will be broken anyway.</p>
<h2><strong><a href="http://code.google.com/p/architecturerules/issues/detail?id=59" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Issue 59</a>: </strong><span><strong>DependencyConstraintException should report the violating class</strong></span></h2>
<p><span> This is sort of a tough issue. We utilize jDepend which only looks at packages. However, Mykola brought </span>Classycle to my attention (which I included on the <a href="../../architecturerules/alternatives" target="_blank">alternatives page</a>) which looks at class dependencies rather than package dependencies. We could move off of jDepend and switch over to using Classclye to find dependencies, or we could continue to use jDpend, and when a rule is broken, we can jump over to Classycle to figure out which class is breaking the rule. Another benefit to Classclye is that it is able to detect static dependencies which jDpend is not. I actually got an email from SonarJ, a commercial competitor listed on the alternatives page who congratulated us on developing a good open source architecture risk mitigating project but pointed out that jDepend could not detect static dependencies. I think in the long term we need to support detecting static dependencies so this Classycle might have been an important find.</p>
<p><em>Looking to get involved? We&#8217;re looking for contributors for this </em><em>task</em><em>.</em><br />
<span><strong><a href="http://code.google.com/p/architecturerules/issues/detail?id=60" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');"></a></strong></span></p>
<h2><span><strong><a href="http://code.google.com/p/architecturerules/issues/detail?id=60" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Issue 60</a>: XML reports</strong></span></h2>
<p><span> The only other current issue that I would like to tackle somehow is the output of the XML reports. I sent out a pretty detailed email on this to the user and dev mailing list. I got little response. I put a <a href="http://code.google.com/p/architecturerules/issues/detail?id=60#c1" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">copy of the email</a> in the issue which includes a prototype for the XML output. The premise would be that the execution of architecture rules results in the output of an XML file that describes all of the rules, the packages that were investigated because of that rule, the dependencies of each package that match that rule, and a list of each violation. One major change would be that instead of throwing an exception when a rule is broken, the rest of the packages would be investigated first and then the XML output is written, and then an exception could be thrown describing all of the rules that were broken - not just the first rule.</span></p>
<p>The reason for this XML output is two-fold: first, it provides output for other developers to start processing and developing new tools for which could be good for this project. second: it provides a data source for our maven 2 plugin to use to generate a site report for. Or this could be a new project: maven-architecture-rules-report-plugin. Either way, this is a good stepping stone to new functionality and growth for this project.</p>
<p><em>Looking to get involved? We&#8217;re looking for contributors for this task.</em></p>
<h2><span><strong>FindBugs</strong></span></h2>
<p><span> We added the <a href="http://architecturerules.googlecode.com/svn/docs/maven-generated-site/findbugs.html" onclick="javascript:pageTracker._trackPageview ('/outbound/architecturerules.googlecode.com');">FindBugs report</a> recently to the <a href="http://architecturerules.googlecode.com/svn/docs/maven-generated-site/project-reports.html" onclick="javascript:pageTracker._trackPageview ('/outbound/architecturerules.googlecode.com');">maven-generated site</a>. We should be able to clear this list for all of our code.</span></p>
<h2><span> <strong>Remove 3rd party org packages</strong></span></h2>
<p><span> I had created an <a href="http://code.google.com/p/architecturerules/issues/detail?id=2" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Issue to remove unneccessary dependencies</a> to cut down on the number of libraries that we depended on. But I think this was implemented poorly to the point where it caused a <a href="http://code.google.com/p/architecturerules/issues/detail?id=46&amp;can=1" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">reported bug</a>. Also, we have a pseudo maven repository so that makes this issue almost moot.</span></p>
<p>This list encompasses most of the open issues in the issue tracker that I want to see implemented. There are a couple of issues that I am going to leave on hold (such as inverting the project to expect the user to define the accepted packages rather than the exceptional packages) and some that I can not fix with out money (continuous integration server).</p>
<p>All of these tasks are up for discussion. And most any of them are open to user contributions. If you are interested in taking on one of these tasks, just reply to this email, tell us what you want to work on, what questions you have, and maybe describe how you plan on implementing it. If its a small task, you can submit a patch, if its bigger, we can make you a contributor (for a short term or longer term depending on circumstances)</p>
<h2><strong>UPDATE: <a href="http://code.google.com/p/architecturerules/issues/detail?id=68" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Issue 68</a>: Listener Support</strong></h2>
<p>Adding support for event listeners gives us a few different things that we either need or that would benefit us in the future.  This will hopefully invite other developers to begin extending the project. For example someone someday might make a GUI tool or an IDE plugin and want to provide real-time feedback to the GUI as packages are investigated. This also enables us to develop the XML report in a very modular fashion, without littering the services with code that is not related to performing the service that the class is named for. Listeners provide a great point for adding new functionality from too.</p>
<h2><strong>UPDATE: Introduce API Package</strong></h2>
<p>Interfaces will be moved to a new org.architecturerules.api package so that developers who wish to extend the project have someplace to start from. This will break backwards compatibility. But so will migrating to org.architecturerules, so if this is going to be done, it should be done now. Sorry everyone.</p>
<h2><strong>UPDATE: <a href="http://code.google.com/p/architecturerules/issues/detail?id=64" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Issue 64</a>: default-architecture-rules.xml</strong></h2>
<p>The initial state of the Configuration entity will be created by reading default-architecture-rules.xml. This essentially just allows us to define the default values via XML rather than defining them with java constants which is what we are doing now. This XML file is easier for the user to read to figure out the default values, is easy to add new default values to as we develop new features, and may be used to demonstrate a sample XML configuration or how features are configured.</p>
<h2><strong>UPDATE: <a href="http://code.google.com/p/architecturerules/issues/detail?id=67" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Issue 67</a>: Configuration Properties</strong></h2>
<p>The listeners require some configuration. Some other tools that have yet to be written may also require configuration. We&#8217;ll be adding support for arbitrary properties. These allow you to define a set of keys and a values that can be handed off to the Listeners and to other features that may be created in the future. This provides a pretty robust mechanism for providing configuration values for classes that extend the project.</p>
<h3><span>Maven 2 Plugin SNAPSHOT</span></h3>
<p><span>And while I have your attention, Mykola has released a 0.0-SNAPSHOT of the <a href="../../architecturerules/maven-2-plugin">maven 2 plugin</a>. Has anyone tried it yet? Anyone want to try it out?</span></p>
<p>Thanks everyone.</p>
<p><a href="http://72miles.com/architecturerules" target="_blank">http://72miles.com/architecturerules</a> (and someday <span>architecturerules</span><span>.org)</span><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-on-delicious/" title="architecture rules on delicious">architecture rules on delicious</a></li>
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-211/" title="architecture-rules 2.1.1">architecture-rules 2.1.1</a></li>
<li>July 4, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-210-released/" title=" architecture-rules-2.1.0 released"> architecture-rules-2.1.0 released</a></li>
<li>June 26, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-wildcard-support/" title="If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off">If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/architecture-rules-30-roadmap/">Permalink</a> |
<a href="http://72miles.com/blog/posts/architecture-rules-30-roadmap/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/architecture-rules-30-roadmap/&amp;title=Architecture Rules 3.0 Roadmap">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/architecture-rules/" rel="tag">Architecture-Rules</a>, <a href="http://72miles.com/blog/posts/tag/road-map/" rel="tag">Road-Map</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/architecture-rules-30-roadmap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Source is Facinating</title>
		<link>http://72miles.com/blog/posts/open-source-is-facinating/</link>
		<comments>http://72miles.com/blog/posts/open-source-is-facinating/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 18:35:36 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[72 Miles]]></category>

		<category><![CDATA[OSS Spyglass]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=77</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/open-source-is-facinating/";</script>var dzone_style="2";It&#8217;s true. Open source is is fascinating. Consider these questions (which have been asked by many):
How does open source work?
Why does open source work?
What motivates the developers?
Who is making money and how?
What are the open source business models?
How ubiquitous is open source?
What is the future of open source?
Whats with all of these licenses?
The questions [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/open-source-is-facinating/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>It&#8217;s true. Open source is <strong>is</strong> fascinating. Consider these questions (which have been asked by many):</p>
<p style="padding-left: 30px;">How does open source work?<br />
Why does open source work?<br />
What motivates the developers?<br />
Who is making money and how?<br />
What are the open source business models?<br />
How ubiquitous is open source?<br />
What is the future of open source?<br />
Whats with all of these licenses?</p>
<p>The questions are asked and answered every day. In books, in podcasts, and in hundreds if not thousands of blog posts. I have been looking for these blog posts and I have found a lot of them - but certainly not all of them. Since I was looking for them and finding them, I figured I might as well share them with everyone else who is interested in what makes open source tick. I setup <a href="http://ossspyglass.com" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/ossspyglass.com');"><strong>Oss</strong>Spyglass.com</a>.</p>
<h2>OssSpyglass.com</h2>
<p>Each day I go out and find these new posts and quote them and link to them on this site. But there is so much out there, I had to find a focus. Here is what i came up with, from the about page:</p>
<blockquote><p>We aggregate open source news and analysis from the blogosphere. You’re not going to learn about the next FireFox release here, but you might read about their open source distribution model, or how they transparently develop cutting edge software.</p>
<p>We are interested in how open source works, why it is successful. We are interested in its past, and its future. We want to know whats going on in the open source communities, and what open source users think. We are interested in analysis and development of the open source movement, culture, and process.</p></blockquote>
<p>So hopefully these are topics that interest you or that you find important for the future of your career. If so, come check out the site, and consider bookmarking it or subscribing to the feed.</p>
<h2>OSS Job Base</h2>
<p>A second project that I setup off of OssSpyglass is <a href="http://ossspyglass.com/jobbase/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/ossspyglass.com');"><strong>OSS</strong> Job Base</a>, using the open source job board <a href="http://www.jobberbase.com/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/www.jobberbase.com');">JobberBase</a>. The premise is that there are thousands of open source projects out there looking to find development help be it with coding, documentation, or even testing. There are also developers looking to get onto a project, but don&#8217;t want to scour bug lists to find issues to fix.</p>
<p>This job board is setup for leaders of open source projects to post a task. A typical task post should consist if a couple lines to introduce the project, followed by the description of a task. Then developers can subscribe to these job lists and finally find a worthwhile project to put their time into.</p>
<p>If you&#8217;re an open source project leader, come post a task or two. You might be surprised at how many people want to help you, but just don&#8217;t know that you&#8217;re looking for help. I am aware of <a href="http://jobs.sourceforge.net/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/jobs.sourceforge.net');">sourceforge&#8217;s job list</a> but they are anything but free, and if you have a job listed there I invite you to also <a href="http://ossspyglass.com/jobbase/post/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/ossspyglass.com');">post it on the OSS Job Base</a>.</p>
<p>So come check them out. Comments are are appreciated.</p>
<ul>
<li><a href="http://OssSpyglass.com" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/OssSpyglass.com');">http://<strong>Oss</strong>Spyglass.com</a></li>
<li><a href="http://jobs.OssSpyglass.com/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/jobs.OssSpyglass.com');">http://jobs.<strong>Oss</strong>Spyglass.com/</a></li>
</ul>
<h3>Related Posts</h3>
<ul class="related_post">
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-on-delicious/" title="architecture rules on delicious">architecture rules on delicious</a></li>
<li>July 29, 2008 &#8212; <a href="http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/" title="Open Source Revenue with Duel Licensing">Open Source Revenue with Duel Licensing</a></li>
<li>April 2, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-101/" title="Architecture Rules 101">Architecture Rules 101</a></li>
<li>March 1, 2008 &#8212; <a href="http://72miles.com/blog/posts/software-engineering-goals/" title="Software Engineering Goals">Software Engineering Goals</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/open-source-is-facinating/">Permalink</a> |
<a href="http://72miles.com/blog/posts/open-source-is-facinating/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/open-source-is-facinating/&amp;title=Open Source is Facinating">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/open-source-is-facinating/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Software Development Standards</title>
		<link>http://72miles.com/blog/posts/software-development-standards/</link>
		<comments>http://72miles.com/blog/posts/software-development-standards/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 00:06:11 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=44</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/software-development-standards/";</script>var dzone_style="2";It all comes down to this.

When I put this depiction in to word, I would say it as &#8220;Industry Standards &#62; Organization &#62; Team &#62; Personal &#62; No Standards&#8220;.
It is that simple. Everyone has standards. However, some standards are more important than others. When developing your own standards you should consider those standards that [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/software-development-standards/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>It all comes down to this.</p>
<p><a href="http://72miles.com/blog/wp-content/uploads/2008/07/standards2.png"><img class="aligncenter size-full wp-image-58" style="border: none;" title="standards2" src="http://72miles.com/blog/wp-content/uploads/2008/07/standards2.png" alt="" width="401" height="375" /></a></p>
<p>When I put this depiction in to word, I would say it as &#8220;<strong>Industry Standards &gt; Organization &gt; Team &gt; Personal &gt; No Standards</strong>&#8220;.</p>
<p>It is that simple. Everyone has standards. However, some standards are more important than others. When developing your own standards you should consider those standards that are greater than you first. So your standards should extend those standards that are defined above your position.</p>
<p>As an example, consider a Java developer working for a major US Bank.</p>
<h2>Industry Standards</h2>
<p>Most developers have two industry-level standards to consider. First, the language that you are developing in. Our example developer is a java developer. Sun publishes a <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/java.sun.com');">Code Conventions for the Java Programming Language</a>. This document provides a broad range of guidelines for various facets of the language. Next, consider the financial sector&#8217;s software development guidelines. You may or may not be able to find such guidelines, and when you do they will probably not be specific to your language. I&#8217;d imagine there are rules for how many decimal places into dollar amounts you should keep, and how to store currency types are all documented somewhere.</p>
<h2>Organization Standards</h2>
<p>Now that you&#8217;ve adopted the industry&#8217;s standards, look to your organization. You might be a member of a huge multinational corporation, or a small 2 developer shop. Whenever the industry does not cover a specfic aspect of your software, your organization has the opportunity to define standards. These standards may be how to name your SVN repositories, or how many characters long your variables must be. These are things not covered by, for example, the Sun Code Conventions for the Java Programming Language.</p>
<h2>Team Standards</h2>
<p>Your organizaiton may not care about some aspects of their software, but your project manager or project team may still have rules that they follow. These are standards that you and the other developers on your software project or team follow.</p>
<h2>Personal Standards</h2>
<p>Finally, you have a situation where there is no defined standard anywhere. So you get to decide how you will perform some task or format some code. Whatever you decide to do, think it though, and do the same thing the same way next time. Personal standards are important weather you are working in the office or working at home on your own project. You are the same developer on both projects. Your code should reflect that fact.</p>
<h2>No Standards</h2>
<p>Why would you code in one style in the office only to drive home and code differently on your home project. This is chaotic. This can prevent you from effectivly transfering experience from your office projects to your home projects.</p>
<h2>Documentation</h2>
<p>De Facto standards are those that tend to happen not because they are law, but more out of practice. There are no such things as de facto standards. Standards should be and must be documented and developers must know where to find this documentaiton in order for the standards to be effective. This documentation should be easy to find, easy to access, and even easy to update.</p>
<p>It is sometimes hard to define a standard that covers all situations. When developing your doucmentaiton, you might consider defining the typicial situations that those standards fit into. These leaves the hands of your developers untied so that they can focus on producing high quality software and not be bogged down by unneccesary blanket rules.</p>
<p>Wikis are great tools for maintaining software development standards for a small organizaiton or development team. They allow team members to update the documentation as new standards are developed and as new situations are encourntered. Other developers can usually subscribe to the wiki to be notified of changes so that everyone is always up to date.</p>
<h2>Why are standards important?</h2>
<p>Following standards are not about making software development harder or more tedious. They are about making development easier and cheaper. InfoQ recently posted an article called <a href="http://www.infoq.com/articles/better-best-practices" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/www.infoq.com');">Better Best Practices</a> which listed a few great reasons for developing best practices, but it turns out the same reasons for developing best practices hold true for following standards too. Their list is titled &#8220;The motivation for Best Practices&#8221; but I could easily title this list &#8220;The motivation for following Standards&#8221;:</p>
<ul>
<blockquote>
<li> <strong>They ensure consistency</strong>. We are introducing [insert initiative] and we want to ensure that everyone goes about it the same way. We don&#8217;t want to abandon people without offering them any direction and the alternative would be chaos.</li>
<li> <strong>They support learning</strong>. We are trying to get everyone up to speed on this new approach with the minimum of fuss, and having a standard set of well-structured material means people can see exactly what they have to do, and ideally how well they are adapting.</li>
<li> <strong>They help limit (potential) impact or damage</strong>. (<em>Now we are starting to see their true colours</em>.) In any organisation there&#8217;s a bell curve of people&#8217;s abilities, and we know that a small but significant number of people will be at the wrong end of it. Implementing this program badly could leave us exposed to significant financial or legal business risks, so we&#8217;re going to need very clearly defined practices to protect ourselves. They are called Best Practices because they are tried and tested so I can be reasonably sure they are going to work.</li>
<li> <strong>They help to build a more mobile and flexible workforce</strong>. In these fast-moving times, projects can materialise or be cancelled almost overnight. People move between project teams, projects move between offices, countries or timezones. With all our people trained up to use the same Best Practices we - and they - have many more options in terms of career mobility. We call it &#8220;commoditising resources&#8221;.</li>
<li> <strong>They allow us to enforce control</strong>. In a large, hierarchical organisation, this is the real crux of the matter. A division manager or vice president may well be responsible for thousands of people. The only way to provide accountability on that scale is to have a system of clearly-defined and strongly-enforced Best Practices.</li>
</blockquote>
</ul>
<p>What do you think? Are standards a waste of time? Or do they create time? What good or bad experiences have you had with some enforcer pushing standards down your throat. Were those enforcers in the <a href="http://72miles.com/blog/posts/there-is-no-right-or-wrong-in-software-development/" target="_blank">right or the wrong</a>?<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>May 24, 2008 &#8212; <a href="http://72miles.com/blog/posts/spring-opensessioninviewinterceptor-opensessioninviewfilter-examples/" title="Spring: OpenSessionInViewInterceptor &#038; OpenSessionInViewFilter Examples">Spring: OpenSessionInViewInterceptor &#038; OpenSessionInViewFilter Examples</a></li>
<li>April 2, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-101/" title="Architecture Rules 101">Architecture Rules 101</a></li>
<li>September 11, 2008 &#8212; <a href="http://72miles.com/blog/posts/%e2%80%9cpro-java-ee-spring-patterns%e2%80%9d-table-of-contents-preview/" title="“Pro Java EE Spring Patterns” Table Of Contents Preview">“Pro Java EE Spring Patterns” Table Of Contents Preview</a></li>
<li>November 13, 2008 &#8212; <a href="http://72miles.com/blog/posts/favorite-software-patterns-books/" title="Favorite Software Patterns Books">Favorite Software Patterns Books</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/software-development-standards/">Permalink</a> |
<a href="http://72miles.com/blog/posts/software-development-standards/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/software-development-standards/&amp;title=Software Development Standards">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/standards/" rel="tag">standards</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/software-development-standards/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Source Revenue with Duel Licensing</title>
		<link>http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/</link>
		<comments>http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 16:30:10 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[licensing]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=61</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/";</script>var dzone_style="2";Introduction
The aim of this post is to explain how open sourcing a proprietary tool under a duel license can be more profitable than a solely proprietary venture. With such a license you could generate more revenue and share your code and software with the world.
Dual licensing is a strategy that combines open source distribution [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h2>Introduction</h2>
<p>The aim of this post is to explain how open sourcing a proprietary tool under a duel license can be more profitable than a solely proprietary venture. With such a license you could generate more revenue and share your code and software with the world.</p>
<p>Dual licensing is a strategy that combines open source distribution with proprietary licensing. I don&#8217;t want to spend too much time explaining duel licensing and would rather point out its benefits and how it makes money. But if you don&#8217;t know what duel licensing is, <a href="http://en.wikipedia.org/wiki/Dual_license" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">wikipedia </a>describes it as</p>
<blockquote><p>In this model, one option is a proprietary software license, which allows the possibility of creating proprietary applications derived from it, while the other license is a copyleft <span class="mw-redirect">free software</span>/<span class="mw-redirect">open-source license</span>, <strong>thus requiring any derived work to be released under the same license</strong>. The copyright holder of the software then typically gives away the free/open source version of the software at no cost, and profits by selling licenses to commercial operations looking to incorporate the software into their own business.</p></blockquote>
<p>So, in order to use the free half of this duel license, the using organization would have to contribute back anything they develop using your product. This means their proprietary trade secrets are potentially being made available to the public. Many organizations would rather pay a small fee to protect their competitive advantage.</p>
<p>So lets review some of the ways that duel licensing grants an advantage to business that release their products under two or more conditions.</p>
<h3>Low Cost Distribution</h3>
<p>Open source software depends on the Internet for distribution. The internet is cheap, ubiquitous throughout the world, and fast. There is no need to mail a product to the other side of the world, there is no packaging, Usually the customer uses 100% of their own efforts to get the software. That is to say, the find your site, they download it, and they install it. It doesn&#8217;t get any cheaper than that.</p>
<h3>Product Marketing</h3>
<p>First, your product is potentially free. That&#8217;s some awesome marketing. So right away you have eyes looking at your tool so you&#8217;re way ahead of your proprietary competition. You&#8217;ve got the Internet which is almost free to promote your software tool on. And with a good product, you&#8217;re going to have advocates around the internet talking up your tool.</p>
<h3>High Margin</h3>
<p>Duel licensing provides a means for producing a very high margin for your product. With a service based offering, in order to offer more services, you need to spend more money - for tools, personnel, time. Duel licensed software requires no additional resources, just enough time to generate and mail out a new license. Once the code is created and ready for public consumption its all profit from there.</p>
<h3>Market Entrance</h3>
<p>You may be able to capture users that you never would have had a chance with if they have not found your product to be free, and then determined that they needed to change it, and thus buy a a license to protect their proprietary information.</p>
<h3>Learn More</h3>
<p>I learned all about duel licensing open source products from a great book called <a href="http://www.amazon.com/gp/search?ie=UTF8&amp;keywords=0596008023&amp;tag=72mile-20&amp;index=blended&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Open Sources 2.0</a>. From amazon:</p>
<blockquote><p>&#8220;Open Sources 2.0&#8243; is a collection of insightful and thought-provoking essays from today&#8217;s technology leaders that continues painting the evolutionary picture that developed in the 1999 book &#8220;Open Sources: Voices from the Revolution&#8221; .</p></blockquote>
<p>These essays are very well written, cover a very broad range of topics, and is written by open source contributors that we have all grown to know and love. Buy the book and check out Chapter 5:Duel Licensing.<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>June 30, 2008 &#8212; <a href="http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/" title="Fairy Tale of the Fruit Tree">Fairy Tale of the Fruit Tree</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/">Permalink</a> |
<a href="http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/#comments">5 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/&amp;title=Open Source Revenue with Duel Licensing">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/licensing/" rel="tag">licensing</a>, <a href="http://72miles.com/blog/posts/tag/open-source/" rel="tag">Open Source</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>architecture rules on delicious</title>
		<link>http://72miles.com/blog/posts/architecture-rules-on-delicious/</link>
		<comments>http://72miles.com/blog/posts/architecture-rules-on-delicious/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 03:32:07 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Architecture-Rules]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=43</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-on-delicious/";</script>var dzone_style="2";I try to keep an eye on what Internet users are saying about Architecture Rules. I checked del.icio.us for architecture rules. Its bookmarked by 60 people, which is pretty cool.
I read one description which concerned me. Chris suggested in his description that architecture rules as &#8220;way to &#8216;test architecture&#8217;, although it seems to be [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-on-delicious/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>I try to keep an eye on what Internet users are saying about Architecture Rules. I checked <a href="http://del.icio.us/url/f3ee434523ac268133d807e6f2ede3f8" onclick="javascript:pageTracker._trackPageview ('/outbound/del.icio.us');">del.icio.us for architecture rules</a>. Its bookmarked by 60 people, which is pretty cool.</p>
<p>I read one description which concerned me. Chris suggested in his description that architecture rules as &#8220;way to &#8216;test architecture&#8217;, although it seems to be limited to detecting cyclic package dependencies&#8221;. Whoa, hold on. That&#8217;s not what we are about. Detecting cyclical dependencies is something that we can do, because we wrap JDepend, but the whole point of the project is to assert that the Rules that you have defined are not violated.</p>
<p>So, I tracked down Chris&#8217;s email address, which I found in his resume, which I found on his site. I emailed him.</p>
<p>I started by apologizing for the unsolicited email. Next I explained that I found his comment delicious, I reiterated his comment to him, then briefly explained and showed (with XML) how architecture rules was about asserting architecture through the definition of rules. I sent off the email assuming that Chris probably wouldn&#8217;t read it, and certainly wouldn&#8217;t respond favorably. Fortunately, I underestimated Chris.</p>
<p>Chris wrote back to me and thanked me for taking the time to write to him. He also pointed out that it is &#8220;always a good sign to me when an open-source project is interested in what people are saying about it.&#8221;</p>
<p>I just wanted to share this experience. I have no great analysis of it yet. I hope that it might encourage you to think about reaching out to your user base weather they be paying customers or users of your open source tool.  After all, thats why we write the code, right? To satisfy the end users, to make their jobs easier, or to change the way that people do business.<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>August 3, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-30-roadmap/" title="Architecture Rules 3.0 Roadmap">Architecture Rules 3.0 Roadmap</a></li>
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-211/" title="architecture-rules 2.1.1">architecture-rules 2.1.1</a></li>
<li>July 4, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-210-released/" title=" architecture-rules-2.1.0 released"> architecture-rules-2.1.0 released</a></li>
<li>June 26, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-wildcard-support/" title="If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off">If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/architecture-rules-on-delicious/">Permalink</a> |
<a href="http://72miles.com/blog/posts/architecture-rules-on-delicious/#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/architecture-rules-on-delicious/&amp;title=architecture rules on delicious">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/architecture-rules/" rel="tag">Architecture-Rules</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/architecture-rules-on-delicious/feed/</wfw:commentRss>
		</item>
		<item>
		<title>architecture-rules 2.1.1</title>
		<link>http://72miles.com/blog/posts/architecture-rules-211/</link>
		<comments>http://72miles.com/blog/posts/architecture-rules-211/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 02:37:46 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Architecture-Rules]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=42</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-211/";</script>var dzone_style="2";It is an open source project. That means our failures are out there for everyone to see. Read about our major release that contained a major problem. Hopefully can learn from our mistake (and we get some of those users back).
2.1.0 Release not so Good
Architecture Rules 2.1.0 was released this past weekend. It was [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-211/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>It is an open source project. That means our failures are out there for everyone to see. Read about our major release that contained a major problem. Hopefully can learn from our mistake (and we get some of those users back).</p>
<h2>2.1.0 Release not so Good</h2>
<p>Architecture Rules 2.1.0 was released this past weekend. It was going great. The project was getting a lot of attention on <a href="http://72miles.com/architecturerules/releases/release-211">dzone</a>, <a href="http://freshmeat.net/projects/architecturerules/" onclick="javascript:pageTracker._trackPageview ('/outbound/freshmeat.net');">freshmeat.net</a> drove some good traffic, it made the front page of <a href="http://www.theserverside.com/news/thread.tss?thread_id=49953" onclick="javascript:pageTracker._trackPageview ('/outbound/www.theserverside.com');">The Server Side&#8217;s news section</a>. All of these sites brought in a huge 128 downloads over the weekend while the <a href="http://code.google.com/p/architecturerules/downloads/list?q=label:Version-2.0.3" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">previous version</a> was out for seven months and only claims 222 downloads (by the way, I hope there are many times more users using the maven repository, which we don&#8217;t yet track for downloads). So it was a good weekend. And then it was pointed out that wildcards don&#8217;t work&#8230;</p>
<h2>What Happend?</h2>
<p>We implemented wildcards a few weeks ago and released a 2.1.0-SNAPSHOT for users to test out. Unfortunately, we don&#8217;t have a huge number of early adopters who are pulling down snapshots. So It seemed worked well and we planned a release for the weekend of July 4th.  On June 29th, I got a friendly email from Andrew Swan. He had graciously taken the time to review the 2.1.0 code before the release. He discovered that the JPackage equals method delegated the work to the JPackage matches method. This broke the contract of the Java equals method because, in his words, &#8220;if a.equals(b), then b.equals(a) should also be true.&#8221; We all know that he is absolutely 100% correct. He even pointed me to <a href="http://www.amazon.com/gp/search?ie=UTF8&amp;keywords=effective%20java&amp;tag=72mile-20&amp;index=blended&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" onclick="javascript:pageTracker._trackPageview ('/outbound/www.amazon.com');">Effective Java</a>. We were excited to have Andrew reviewing the code and of course wanted to fix this problem. So we modified each reference to JPackge.equals to use JPackage.matches, ran our tests, and got a green <a href="http://code.google.com/p/architecturerules/issues/detail?id=45&amp;can=1#c1" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">&#8220;tests pass 82 of 82&#8243;.</a></p>
<p>I quickly followed that up by creating the binaries, committing everything to SVN, updating the documentation, and promoting the 2.1.0 release. However, one reference to .equals remained in the AbstractRuleService. This is the service that itterates over each package defined in each rule and checks to see if a given package is dependent on a package that it is not allowed to depend on. So now, if a package is defined using wildcards, it tries to match &#8220;com.company.application.*&#8221;, the String, to fully qualified String such as &#8220;java.util&#8221;. Of course, no package is ever going to be named with an asterisk character, so now if a package is defined with a wildcard, its not looked at. So wildcards are busted.</p>
<h2>What Now?</h2>
<p>Now, we <a href="http://72miles.com/architecturerules/releases/release-211">released a 2.1.1</a> just to fix this bug and pray that the 128 (and hopefully many many more though the maven repository) java developers who are rightfully concerned with mitigating architectural risk take some time to come back and grab the 2.1.1 release.</p>
<p>We have fixed the problem and quickly put up <a href="http://72miles.com/architecturerules/releases/release-211">2.1.1</a>. Please <a href="http://72miles.com/architecturerules/releases/release-211">download it</a>, or update your <a href="http://72miles.com/architecturerules/maven-repository">pom.xml</a>, give us another try, and <strong>Assert your Architecture</strong>.<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>August 3, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-30-roadmap/" title="Architecture Rules 3.0 Roadmap">Architecture Rules 3.0 Roadmap</a></li>
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-on-delicious/" title="architecture rules on delicious">architecture rules on delicious</a></li>
<li>July 4, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-210-released/" title=" architecture-rules-2.1.0 released"> architecture-rules-2.1.0 released</a></li>
<li>June 26, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-wildcard-support/" title="If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off">If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/architecture-rules-211/">Permalink</a> |
<a href="http://72miles.com/blog/posts/architecture-rules-211/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/architecture-rules-211/&amp;title=architecture-rules 2.1.1">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/add-new-tag/" rel="tag">Add new tag</a>, <a href="http://72miles.com/blog/posts/tag/architecture-rules/" rel="tag">Architecture-Rules</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/architecture-rules-211/feed/</wfw:commentRss>
		</item>
		<item>
		<title>architecture-rules-2.1.0 released</title>
		<link>http://72miles.com/blog/posts/architecture-rules-210-released/</link>
		<comments>http://72miles.com/blog/posts/architecture-rules-210-released/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 03:44:09 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Architecture-Rules]]></category>

		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=41</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-210-released/";</script>var dzone_style="2";Architecture Rules announces today that version 2.1.0 is released.
This was a fun release for two reasons: the new features, and the timing of the release.
Features
This was a major release in that it finally allows the users to define packages with wildcards. We&#8217;ve had a handful of users asking for this functionality for a while. [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-210-released/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p><a href="http://72miles.com/architecturerules/">Architecture Rules</a> announces today that <a href="http://72miles.com/architecturerules/releases/release-210">version 2.1.0 is released</a>.</p>
<p>This was a fun release for two reasons: the new features, and the timing of the release.</p>
<h2>Features</h2>
<p>This was a major release in that it finally allows the users to define packages with wildcards. We&#8217;ve had a handful of users <a href="http://groups.google.com/group/architecture-rules-users/browse_thread/thread/d0bf8498968369e3/e7984bc7a00367bd?#e7984bc7a00367bd" onclick="javascript:pageTracker._trackPageview ('/outbound/groups.google.com');">asking for this functionality</a> for a while. We thank them for sticking with us despite having to ask us for this feature a few times. Read about how we implemented wildcards, how to use them, and some open issues with them on our previous post <a href="http://72miles.com/blog/posts/architecture-rules-wildcard-support/">If You’re Feelin’ like a Pimp go on Brush your Asterisk* Off</a>.</p>
<p>We added method chaining to the domain classes to improve the feel of programmatic configuration. We talk about this change when we <a href="http://72miles.com/blog/posts/architecture-rules-21-on-the-horizon/#chaining">introduced the development goals for 2.1.0</a> and we talked in depth about method chaining when we started researching weather we should support it or not in our post <a href="http://72miles.com/blog/posts/configuration-method-chaining/">Configuration Method Chaining</a>.</p>
<p>We also made some positive changes to the project&#8217;s exceptions. We have a lot of exceptions for reporting different issues with architecture rules configuration and with the project that the tool is inspecting. We <a href="http://code.google.com/p/architecturerules/issues/detail?id=42&amp;can=1" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">added some references</a> to the packages that cuase the exception to be thrown, and we tied all of the exceptions together under one higher level exception, the <a href="http://code.google.com/p/architecturerules/source/browse/trunk/architecture-rules/src/main/java/com/seventytwomiles/architecturerules/exceptions/ArchitectureException.java" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">ArchitectureRulesException</a>.</p>
<h2>Release Date</h2>
<p>Architecture Rules 2.1.0 is officially released on Friday, July 4th, 2008. This is a great date for a milestone release not because it is an <a href="http://en.wikipedia.org/wiki/Independence_Day_(United_States)" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">American national holiday</a>, but because it is one year from the day that development started on the project just about to the day. The first release, <a href="http://code.google.com/p/architecturerules/downloads/detail?name=architecture-rules-1.0.jar&amp;can=2&amp;q=#makechanges" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">1.0</a>, was made just a couple weeks after development started, on July 17th, 2007. So happy anniversary Architecture Rules. With wildcards, a new domain name, and the upcoming maven 2 plugin, this next year is going to be bigger than the last.</p>
<h2>Upcoming Releases</h2>
<p>There will be a 3.0.0 release soon. Today, the maven 2 plugin that has been in development and the architecture rules project have different package names. One com.seventytwomiles and one info.manandbytes because I developed most of the core project as 72miles.com and Mykola developed the plugin under his domain mandandbytes.info. Before I can see developers using the plugin, we need to normalize the domain names. We&#8217;ll purchase ArchitectureRules.org any day now, update the site, update the documentation, and update the packages. This will be a major change to the users, warranting the 3.0.0 release. If you can afford a couple bucks to <a href="http://72miles.com/architecturerules/fund-raising-drive">help get the domain</a>, we would really appreciate the monatary support.</p>
<p>Once the packages are straigned out, we can push out the plugin. We need to write the documentation for the maven 2 architecture rules plugin. Mykola has been working hard on the plugin for months now. Its actually been ready for public consumption for a while, we just haven&#8217;t had the time to document it for the public. I will make this my next task and get the plugin out for everyone to start using. It makes Architecture Rules even easier to use by allowing the user to skip writing a silly little Test class and lets you move Architecture Rules right into your everyday build process. Awesome.</p>
<h3>2.1.0</h3>
<p>For a complete list of the changes, check out the <a href="http://72miles.com/architecturerules/releases/release-210">2.1.0 release/download page</a>. You can get the update by downloading the new jar, or by <a href="http://72miles.com/architecturerules/maven-repository">updating your pom.xml to version 2.1.0</a>.<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>August 3, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-30-roadmap/" title="Architecture Rules 3.0 Roadmap">Architecture Rules 3.0 Roadmap</a></li>
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-on-delicious/" title="architecture rules on delicious">architecture rules on delicious</a></li>
<li>July 10, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-211/" title="architecture-rules 2.1.1">architecture-rules 2.1.1</a></li>
<li>June 26, 2008 &#8212; <a href="http://72miles.com/blog/posts/architecture-rules-wildcard-support/" title="If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off">If You&#8217;re Feelin&#8217; like a Pimp go on Brush your Asterisk* Off</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/architecture-rules-210-released/">Permalink</a> |
<a href="http://72miles.com/blog/posts/architecture-rules-210-released/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/architecture-rules-210-released/&amp;title=architecture-rules-2.1.0 released">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/architecture-rules/" rel="tag">Architecture-Rules</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/architecture-rules-210-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fairy Tale of the Fruit Tree</title>
		<link>http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/</link>
		<comments>http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 02:58:31 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Hibernate]]></category>

		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=38</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/";</script>var dzone_style="2";This is a reprint of a fantasy authored by Yutaka Kachi and translated by Mikiko Kachi. Originally from http://www.catch.jp/openoffice/whats_oss/index_en.html.
I am reprinting it because it is only available through PDF. I want to share it and make it easier to read and comment on.  I found it in 2005 and saved the PDF. I [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>This is a reprint of a fantasy authored by <a href="http://www.catch.jp/" onclick="javascript:pageTracker._trackPageview ('/outbound/www.catch.jp');">Yutaka Kachi</a> and translated by Mikiko Kachi. Originally from <a href="http://www.catch.jp/openoffice/whats_oss/index_en.html" onclick="javascript:pageTracker._trackPageview ('/outbound/www.catch.jp');">http://www.catch.jp/openoffice/whats_oss/index_en.html</a>.</p>
<p>I am reprinting it because it is only available through PDF. I want to share it and make it easier to read and comment on.  I found it in 2005 and saved the PDF. I found the the file this morning and thought it would be good to share and discuss.</p>
<blockquote><p>Long long time ago, there was a tree in a field of grass near a village. One day, this tree bore a lot of delicious fruit.</p>
<p><img class="alignright size-medium wp-image-39" style="margin: 4px; float: right;" mce_style="float:right; margin: 4px;" title="appletree" src="http://72miles.com/blog/wp-content/uploads/2008/06/appletree.png" mce_src="http://72miles.com/blog/wp-content/uploads/2008/06/appletree.png" alt="" height="192" width="137"></p>
<p>The fruit were very delicious. So villagers soon harvested all of the fruits.</p>
<p>There was no end to the number of people who cut branch of this tree and take them home.</p>
<p>Because of this, the tree died in a few years.</p>
<p>In the village, there was a clever merchant. He grafted the tree before the tree died.</p>
<p>And he fertilized the tree, cut off branch when it&#8217;s too much. He took care of the tree for a long time.</p>
<p>Then the tree bore fruit. He sold it and made big money.</p>
<p>He was a real worrier. He fenced around the tree and was always watching the tree.</p>
<p>This merchant was not just an worrier, but also a hard worker.<br />
His effort made the fruit more delicious and a lot of people bought it.</p>
<p>Some people delivered it to busy villagers, and some people made jam from the fruits and sold it.</p>
<p>The merchant monopolized the fruit tree.</p>
<p>When someone said to him “ there are many worm holes ” , he heard nothing of it and said “ It&#8217;s cheap so you can&#8217;t complain that.”</p>
<p>When someone asked him “ do you use any harmful fertilizer?”<br />
he said “ it&#8217;s company secret” and wouldn&#8217;t answer that question.</p>
<p>When someone offered him “ I&#8217;d like to buy branch”, he said “ I don&#8217;t want to have competitors” and rejected the offer.</p>
<p>More and more people started to sell the fruit and more and more people bought it.</p>
<p>Then the merchant increased the price and made a big profit.</p>
<p>In this village, there was a young man who really loved this fruit. When the merchant increased price of the fruit, he couldn&#8217;t afford it any more because he was very poor.</p>
<p>So, he got interested in another tree near the village. This tree also bore a lot of fruit, but its taste was not so good and no one had cared for it. The young man started taking care of it with his friends.</p>
<p>Therefore, the tree bore more fruit than they could eat. So they put up a sign board that said “ Free”. There were some people who take the fruit away although they didn&#8217;t take care of the tree, but the young man didn&#8217;t mind at all.</p>
<p>The young men kept making effort for years to improve taste of the fruit as much as possible. Some people who took the fruit said “ I will help you”, “I will help you too because we don&#8217;t want to kill this tree like the first one” and helped doing time-consuming works.</p>
<p>The more people helped, the more people took the fruit. When the fruit run short, the people grafted the tree to grow more. They put up “ Free” sign boards on new trees also.</p>
<p>Some people delivered the fruit, and some people made jam from the fruit. They were very cooperative and sometimes they pay for agricultural equipment, fertilizer and inviting specialists to get advise.</p>
<p>So they reduced warm holes, improved the taste of the fruit, and their fruit became much more popular.</p>
<p>Years later, many fruit trees were planted around the village and bore a lot of delicious fruit.</p>
<p><img class="alignright size-medium wp-image-39" style="float:right; margin: 4px;" title="appletree" src="http://72miles.com/blog/wp-content/uploads/2008/06/appletree.png" alt="" width="137" height="192" /><br />
The villagers started delivering the young men&#8217;s fruit together to far-off town. In that town, many people said “I&#8217;ve never had such a delicious fruit !” and the fruit became popular. It sold like hot cakes.</p>
<p>And not only the young man but also his friends and villagers all became happy.</p>
<p>By the way, what happened to the merchant who monopolized the fruit tree?</p>
<p>His business was also going well. For only a short while he had a fewer customers, but he expanded his business by hiring many people, shipping the fruits to far-off town, buying up fruit trees which had grown in other villages, etc.</p>
<p>There was no difference between the young man and the merchant in terms of making delicious fruit.</p></blockquote>
<p>This is a great, simple explanation of how open source works and why the model it is successful. Growing a fruit tree is relatively easy compared to writing software, but as software development tools get easier to use, and more people learn to write code, it was and is inevitable that the number of open source tools and the quality of those tools will increase.</p>
<p>There are two more PDFs that talk around open source licensing at <a href="http://www.catch.jp/openoffice/whats_oss/index_en.html" onclick="javascript:pageTracker._trackPageview ('/outbound/www.catch.jp');">http://www.catch.jp/openoffice/whats_oss/index_en.html</a>.</p>
<p><OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" id="Player_2a2e3305-2bc7-4ad0-89cb-17b834d532ee"  WIDTH="400px" HEIGHT="150px"> <PARAM NAME="movie" VALUE="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2F72mile-20%2F8010%2F2a2e3305-2bc7-4ad0-89cb-17b834d532ee&#038;Operation=GetDisplayTemplate"><PARAM NAME="quality" VALUE="high"><PARAM NAME="bgcolor" VALUE="#FFFFFF"><PARAM NAME="allowscriptaccess" VALUE="always"><embed src="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2F72mile-20%2F8010%2F2a2e3305-2bc7-4ad0-89cb-17b834d532ee&#038;Operation=GetDisplayTemplate" id="Player_2a2e3305-2bc7-4ad0-89cb-17b834d532ee" quality="high" bgcolor="#ffffff" name="Player_2a2e3305-2bc7-4ad0-89cb-17b834d532ee" allowscriptaccess="always"  type="application/x-shockwave-flash" align="middle" height="150px" width="400px"></embed></OBJECT> <NOSCRIPT><a href="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2F72mile-20%2F8010%2F2a2e3305-2bc7-4ad0-89cb-17b834d532ee&#038;Operation=NoScript" onclick="javascript:pageTracker._trackPageview ('/outbound/ws.amazon.com');">Amazon.com Widgets</a></NOSCRIPT><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li>July 29, 2008 &#8212; <a href="http://72miles.com/blog/posts/open-source-revenue-with-duel-licensing/" title="Open Source Revenue with Duel Licensing">Open Source Revenue with Duel Licensing</a></li>
</ul>
<hr />
<p><small>&copy; Mike for <a href="http://72miles.com/blog">72 Miles</a>, 2008. |
<a href="http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/">Permalink</a> |
<a href="http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/&amp;title=Fairy Tale of the Fruit Tree">del.icio.us</a>
<br/>
Post tags: <a href="http://72miles.com/blog/posts/tag/open-source/" rel="tag">Open Source</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://72miles.com/blog/posts/fairy-tale-of-the-fruit-tree/feed/</wfw:commentRss>
		</item>
		<item>
		<title>If You’re Feelin’ like a Pimp go on Brush your Asterisk* Off</title>
		<link>http://72miles.com/blog/posts/architecture-rules-wildcard-support/</link>
		<comments>http://72miles.com/blog/posts/architecture-rules-wildcard-support/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 22:54:50 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
		
		<category><![CDATA[Architecture-Rules]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[2.1.0]]></category>

		<category><![CDATA[wildcard]]></category>

		<guid isPermaLink="false">http://72miles.com/blog/?p=35</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-wildcard-support/";</script>var dzone_style="2";Architecture Rules is proud to announce that it now support wild cards.
Benefits of Wildcards
Wildcards bring the ability to match multiple packages with one Rule entry. This falls inline with the original goal of the project, which was to simplify the usage of jDepend and to define rules in a way that is very readable, [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://72miles.com/blog/posts/architecture-rules-wildcard-support/";</script><script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p><a href="http://72miles.com/architecturerules/">Architecture Rules</a> is proud to announce that it now support wild cards.</p>
<h1><strong>Benefits of Wildcards</strong></h1>
<p>Wildcards bring the ability to match multiple packages with one <tt>Rule</tt> entry. This falls inline with the original goal of the project, which was to simplify the usage of jDepend and to define rules in a way that is very readable, understandable, and modifiable.</p>
<p>With wildcards, users can now define a package or violation in one line with the ability to match many packages. This means you won&#8217;t need to update your Rules each time you add a new package and your <a href="http://72miles.com/architecturerules/sample-configuration">XML configuration </a>file will be much shorter.</p>
<h1><strong>Wildcard Patterns</strong></h1>
<p>We identified a few different Wildcard Patterns. Some we don&#8217;t support and don&#8217;t plan on supporting, others we do support, and there are still a couple that we want to add.</p>
<p>Here is a description of what we now support:</p>
<table class="api_table" style="table-layout: fixed; padding: 10px; vertical-align: top;">
<tr>
<th>Internal Wildcard</th>
<th>Terminating Wildcard</th>
</tr>
<tr>
<td>
Wildcard stated within a package.
</td>
<td>
Wildcard stated at the end of a package.
</td>
</tr>
<tr>
<td>
<tt>com.company.*.dao</tt>
</td>
<td>
<tt>com.company.project.dao.*</tt>
</td>
</tr>
<tr>
<th>Match One Package</th>
<th>Match Many Packages</th>
</tr>
<tr>
<td>
Match to the depth of one package with the <tt>.*</tt> combination
</td>
<td>
Match to the depth of one or more packages with the <tt>..*</tt> combination
</td>
</tr>
<tr>
<td>
<tt>com.company.*.dao</tt> matches only <tt>com.company.SOMETHING.dao</tt>
</td>
<td>
<tt>com.company.project.dao..*</tt> matches <tt>..dao.hibernate</tt><br/> as well as packages below hibernate: <tt>..dao.hibernate.user</tt>,<br/> <tt>..dao.hibernate.account</tt>,<br/> etc.
</td>
</tr>
</table>
<h1>Example</h1>
<p>Now creating a rule to assert that the web layer does not interact with the DAO (or integration) layer is as easy as:</p>
<pre name="code" class="xml">

&lt;rule id=&quot;web-layer&quot;&gt;
 &lt;comment&gt;web and dao mix like oil and water&lt;/comment&gt;
 &lt;packages&gt;
  &lt;package&gt;com.company.app.web..*&lt;/package&gt;
 &lt;/packages&gt;
 &lt;violations&gt;
  &lt;violation&gt;com.company.app.dao..*&lt;/violation&gt;
 &lt;/violations&gt;
&lt;/rule&gt;    
</pre>
<p>Prior to wildcards, you might have needed to define <tt>..web.controllers</tt>, <tt>..web.filters</tt>, <tt>..web.views</tt>, <tt>..web.forms</tt>, <tt>..web.tags</tt> as the packages, and then you would have had to defined every ..dao package as a violation. Now its easy!</p>
<h1>Implementation</h1>
<p>Architecture Rules uses Regular Expressions to compare the packages with wildcards against the inspected packages. The regular expression needed to be able to handle exact packages, one package deep, and one or more packages deep. We accomplished this by modifying the given package with wildcards (such as <tt>com.company.project.*</tt>) to apply regular expression characters.</p>
<p>Thank you to Ryan Stewart for helping us hash out this expression. This is what we came up with:</p>
<pre name="code" class="java">

final String regex = this.path
    // foo.bar exactly foo.bar
    .replaceAll(&quot;\\.&quot;, &quot;\\\\.&quot;)
    // foo.bar.1 or foo.bar.1.2 and so on...
    .replaceAll(&quot;\\\\.\\\\.\\\\*&quot;, &quot;\\\\.\\[A-Za-z_0-9.]&quot;)
    // packages only
    .replaceAll(&quot;\\.\\*&quot;, &quot;\\.[A-Za-z_0-9]*&quot;);       
</pre>
<p>The break down is this: The third line of code looks for <tt>..*</tt> combination and replaces it with the regular expression to allow for any string with any number of periods.</p>
<p>The fourth line of code looks for the remaining <tt>.*</tt> combinations and replaces it the an expression to match package name but no more periods.</p>
<p>If you consider yourself a regular expression wizard, please consider taking a moment to review this and offer any feedback or suggestions that you might come up with. Thank you.</p>
<h1>Outstanding Issues</h1>
<p>One usability issue that we have uncovered is the matching of the package prior to the wildcard. For example, some users think that <tt>com.company.project.*</tt> should match <tt>com.company.project</tt> in addition to the packages under project. Others aren&#8217;t sure it should match <tt>..project</tt>. As of right now <tt>..project</tt> is not included as a match. We are open to comments on this and welcome feedback from the early adopters.</p>
<h1>Roll Out</h1>
<p>Wildcard support has been slated for the 2.1.0 release which should happen any day now. We are just waiting for a couple of our e