<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>dcpatton</title>
	
	<link>http://dcpatton.com</link>
	<description>How can I help you?</description>
	<lastBuildDate>Tue, 07 Sep 2010 13:00:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dcpatton/MNcm" /><feedburner:info uri="dcpatton/mncm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>dcpatton/MNcm</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Rails Session Management Howto, Part III</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/GUzco8ztPqw/</link>
		<comments>http://dcpatton.com/information/rails-session-management-howto-part-iii/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 13:00:35 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Scaling]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1492</guid>
		<description><![CDATA[In Rails Session Management Howto, Part II, I discussed using the PStore approach for session data storage. The p_store based sessions utilize the local OS file system. In this post, I will present memory based storage approaches for session management in Rails.
The first approach is to use memory_store based sessions. With MemoryStore the session objects [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://dcpatton.com/information/rails-session-management-howto-part-ii/">Rails Session Management Howto, Part II</a>, I discussed using the PStore approach for session data storage. The p_store based sessions utilize the local OS file system. In this post, I will present memory based storage approaches for session management in Rails.</p>
<p>The first approach is to use <span style="font-weight:bold;">memory_store based sessions</span>. With MemoryStore the session objects are kept in the applications memory with no serialization necessary. While this approach will make it extremely fast for an application to move objects in and out of a session store, it is not a reliable method because the memory where the session data is stored is only available to a single server. Thus it also does not scale well since it requires sticky sessions.</p>
<p>The second approach utilizes <a href="http://www.danga.com/memcached/">memcached</a>, a high-performance, distributed memory object caching system. Memcached is used by some of the largest websites in the world and is certainly a very solid approach for session storage. The <span style="font-weight:bold;">mem_cache_store based sessions</span> meet the criteria of scalability (just add more servers) but this approach is still not reliable. Because it is a cache you still need to use some form of reliable storage for your session data, such as a database store. But if you need super fast reads of the session data across multiple servers, then memcached is really the best performing approach. You can find some discussion of that approach discussed in <a href="http://www.socialtext.net/memcached/index.cgi?sessions">Sessions</a>. Several memcached Ruby clients are available including <a href="http://www.deveiate.org/projects/RMemCache">RMemCache</a>.</p>
<p>For more discussion of these memory based sessions and their configuration, I recommend you pickup a copy of the excellent reference <a href="http://www.amazon.com/gp/product/0977616630?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0977616630">Agile Web Development with Rails</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0977616630" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" />. </p>
<p>Are you using a memory based session approach? How do you scale and protect against server crashes (or maintenance)?</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-0027690166824672";
/* 468x60, created 10/7/08 */
google_ad_slot = "3114106509";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-ii/" title="Rails Session Management Howto, Part II">Rails Session Management Howto, Part II</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-i/" title="Rails Session Management Howto, Part I">Rails Session Management Howto, Part I</a></li><li><a href="http://dcpatton.com/information/rails-session-management/" title="Rails Session Management">Rails Session Management</a></li><li><a href="http://dcpatton.com/information/accidental-perceived-functionality/" title="Accidental Perceived Functionality">Accidental Perceived Functionality</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/SfRu1hCrT2X001FYckoA35qHMTg/0/da"><img src="http://feedads.g.doubleclick.net/~a/SfRu1hCrT2X001FYckoA35qHMTg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/SfRu1hCrT2X001FYckoA35qHMTg/1/da"><img src="http://feedads.g.doubleclick.net/~a/SfRu1hCrT2X001FYckoA35qHMTg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/GUzco8ztPqw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/rails-session-management-howto-part-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/rails-session-management-howto-part-iii/</feedburner:origLink></item>
		<item>
		<title>Rails Session Management Howto, Part II</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/qwb0QqYs8ck/</link>
		<comments>http://dcpatton.com/information/rails-session-management-howto-part-ii/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 13:00:08 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Scaling]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1488</guid>
		<description><![CDATA[In Rails Session Management Howto Part I, I introduced the concepts of managing http sessions with Rails and explored the first approach, cookie based sessions. A couple of the limits were the size of the data that can be stored in the session and the lack of encryption as the data is transferred from browser [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://dcpatton.com/information/rails-session-management-howto-part-i/">Rails Session Management Howto Part I</a>, I introduced the concepts of managing http sessions with Rails and explored the first approach, cookie based sessions. A couple of the limits were the size of the data that can be stored in the session and the lack of encryption as the data is transferred from browser to server. The next approach is to store session data in a flat file on the server in what is known as the <span style="font-weight: bold;">PStore</span> format. This format stores the serialized (marshaled) form of the session data on the file system. The location and name (actually just the prefix for the name) of the file can be configured in the environment.rb file. Refer to <a href="http://www.amazon.com/gp/product/0977616630?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0977616630">Agile Web Development with Rails</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0977616630" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /> by Dave Thomas for details on the syntax and configuration.</p>
<p>The <span style="font-weight: bold;">benefits of using the p_store based sessions</span> are that the data is securely kept on the server and never crosses the network between the browser and server. This <span style="font-weight: bold;">provides security and also reduces bandwidth</span> usage. The size limit of the session data is also greatly increased (limited by your system IO).</p>
<p>What happens when scaling the number of servers? Clearly each server can not have an individual PStore unless one is using &#8220;sticky&#8221; sessions and are willing to have users lose their session data when a server fails. This is not an optimal situation for scalable, reliable, load-balanced systems. When there is more than one server, then it is necessary to have the PStore file available to all servers because subsequent http requests may be directed to a different server each time. One way to do this is to place the PStore file on a network mounted storage system.</p>
<p>Thus with a p_store based session there is increased data security and reduced bandwidth usage vs a cookie based session. However, there is also now some <span style="font-weight: bold;">challenging server configuration choices and network file storage</span>. Thus it is a IO limited solution which requires a lot of optimization and monitoring. For some applications this might not be a problem and should be tested. In an application with many simultaneous sessions the number of PStore files can grow very large.</p>
<p>I&#8217;ll also briefly mention that there is a file_store option for sessions in Rails which also uses flat files, but it is rarely used because the session data must be strings.</p>
<p>Is anyone using p_store based sessions in their applications? Is it scalable? Is it reliable when servers failover?</p>
<p>In the next part of this series I will examine some memory based sessions.</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-iii/" title="Rails Session Management Howto, Part III">Rails Session Management Howto, Part III</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-i/" title="Rails Session Management Howto, Part I">Rails Session Management Howto, Part I</a></li><li><a href="http://dcpatton.com/information/rails-session-management/" title="Rails Session Management">Rails Session Management</a></li><li><a href="http://dcpatton.com/information/accidental-perceived-functionality/" title="Accidental Perceived Functionality">Accidental Perceived Functionality</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/8_dcSrXaVzysfnhXDz51oAueocE/0/da"><img src="http://feedads.g.doubleclick.net/~a/8_dcSrXaVzysfnhXDz51oAueocE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8_dcSrXaVzysfnhXDz51oAueocE/1/da"><img src="http://feedads.g.doubleclick.net/~a/8_dcSrXaVzysfnhXDz51oAueocE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/qwb0QqYs8ck" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/rails-session-management-howto-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/rails-session-management-howto-part-ii/</feedburner:origLink></item>
		<item>
		<title>Rails Session Management Howto, Part I</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/g07q5iCTReo/</link>
		<comments>http://dcpatton.com/information/rails-session-management-howto-part-i/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 13:00:07 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Scaling]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1485</guid>
		<description><![CDATA[Today I am going to start a series of posts describing various approaches to managing http sessions with a Ruby on Rails application. Http sessions are valuable for managing state when using a stateless protocol like http. The emphasis here will be on moving toward the most resilient and scalable solutions. For more detail on [...]]]></description>
			<content:encoded><![CDATA[<p>Today I am going to start a series of posts describing various approaches to managing http sessions with a Ruby on Rails application. Http sessions are valuable for managing state when using a stateless protocol like http. The emphasis here will be on moving toward the most resilient and scalable solutions. For more detail on sessions and Rails I strongly recommend you purchase <a href="http://www.amazon.com/gp/product/0977616630?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0977616630">Agile Web Development with Rails</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0977616630" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /> by Dave Thomas.</p>
<p>Sessions can contain any objects which can be marshaled (think serialization if you are used to other languages). Rails provides numerous ways to persist the session objects. The default in Rails 2.0 is to send it via a cookie to the client. Because the session is hash-like, multiple objects may be stored in the session. The <span style="font-weight: bold;">size limit of cookie based session objects is 4K</span> total.</p>
<p>Because the data in the session is passed with every http request from the client to the server, this can cause an increase in bandwidth usage compared to alternative approaches (discussed in the next posts). Also, even though the cookie contents are signed, they are unencrypted by default. So <span style="font-weight: bold;">no secure data should be stored in the session when using the cookie_store</span>.</p>
<p>If your session data is very small and the data is not sensitive, then using the cookie_store can be very effective. However, for many web applications this is not the case and fortunately Rails provides some effective solutions.</p>
<p>You can change the session defaults in your controllers by overriding them with the session declaration in a controller.</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-iii/" title="Rails Session Management Howto, Part III">Rails Session Management Howto, Part III</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-ii/" title="Rails Session Management Howto, Part II">Rails Session Management Howto, Part II</a></li><li><a href="http://dcpatton.com/information/rails-session-management/" title="Rails Session Management">Rails Session Management</a></li><li><a href="http://dcpatton.com/information/accidental-perceived-functionality/" title="Accidental Perceived Functionality">Accidental Perceived Functionality</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/33tYPx69wkjfTof3qtz7M7OSJ-M/0/da"><img src="http://feedads.g.doubleclick.net/~a/33tYPx69wkjfTof3qtz7M7OSJ-M/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/33tYPx69wkjfTof3qtz7M7OSJ-M/1/da"><img src="http://feedads.g.doubleclick.net/~a/33tYPx69wkjfTof3qtz7M7OSJ-M/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/g07q5iCTReo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/rails-session-management-howto-part-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/rails-session-management-howto-part-i/</feedburner:origLink></item>
		<item>
		<title>Accidental Perceived Functionality</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/uSN5ltNlwB0/</link>
		<comments>http://dcpatton.com/information/accidental-perceived-functionality/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 15:35:14 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1478</guid>
		<description><![CDATA[Recently I learned of an issue with an application where presentation of a resultset in the UI led end users to assume the order of the resultset was a feature of the application. This is a pretty common scenario that I have seen with many applications both on the web and off. Usually it is [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I learned of an issue with an application where presentation of a resultset in the UI led end users to assume the order of the resultset was a feature of the application. This is a pretty common scenario that I have seen with many applications both on the web and off. Usually it is the result of not using an ORDER BY clause in the SQL query or not having any logical column to sort by in the resultset. The problem is amplified in the case where the end user is the one who created the data in the first place and believes that the order they created the data (via the GUI normally) is perserved by the application. In time, the resultset from the scenario described above may be returned in a different order. Consult your RDMS guru for all the scenarios where this might happen. I have seen it occur during import/exports of data, database replication, and during updates to tables where all rows are affected.</p>
<p>Regardless of the cause, the net result is guaranteed to be user complaints about an issue with functionality (ordering of the resultset in the UI) which was never intended to be a function of the application. This is what I term accidental perceived functionality (no doubt, somebody has a better name).  Please post other examples of this (so we can all learn) in the comments.</p>
<p>Tips to avoid this situation:</p>
<ol>
<li>Hire a good business analyst to capture all requirements (including eliminating possible points of confusion). This won&#8217;t necessary avoid the problem, but will increase the odds.</li>
<li>Make it a habit to always include an ORDER BY clause in all SELECT statements.</li>
<li>During table definitions always provide a column that allows ordering of results in accordance with the desired functionality (capture by requirements)</li>
<li>Thoroughly unit test the results sets (including order) of your DAOs.</li>
</ol>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-iii/" title="Rails Session Management Howto, Part III">Rails Session Management Howto, Part III</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-ii/" title="Rails Session Management Howto, Part II">Rails Session Management Howto, Part II</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-i/" title="Rails Session Management Howto, Part I">Rails Session Management Howto, Part I</a></li><li><a href="http://dcpatton.com/book/book-review-the-pragmatic-programmer/" title="Book Review: The Pragmatic Programmer">Book Review: The Pragmatic Programmer</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/cn458rsbz_CqQlL1jlbNBzQi4yQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/cn458rsbz_CqQlL1jlbNBzQi4yQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cn458rsbz_CqQlL1jlbNBzQi4yQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/cn458rsbz_CqQlL1jlbNBzQi4yQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/uSN5ltNlwB0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/accidental-perceived-functionality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/accidental-perceived-functionality/</feedburner:origLink></item>
		<item>
		<title>Book Review: The Pragmatic Programmer</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/wA9h3S_kpbs/</link>
		<comments>http://dcpatton.com/book/book-review-the-pragmatic-programmer/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 02:44:14 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1474</guid>
		<description><![CDATA[


Today I am continuing a series of posts in which I will be reviewing some of the books which are related to the development of quality software. They may be specific to a certain technology or a software development methodology.


The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas is aimed at [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: left;">
<span style="font-style: italic;"></span><br />
<blockquote>
<span style="font-style: italic;">Today I am continuing a series of posts in which I will be reviewing some of the books which are related to the development of quality software. They may be specific to a certain technology or a software development methodology.</span></p></blockquote>
</div>
<p><br/><br />
<a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X">The Pragmatic Programmer: From Journeyman to Master</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=020161622X" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /> by Andrew Hunt and David Thomas is aimed at developers who want to write software systems that are easy to design, build, test and extend. Andy and Dave have revealed some of the basic practices that they follow during the full software lifecycle as well as project management and career development. <span style="font-weight: bold;">I am an enthusiastic fan of their work and believe this book should be read by every developer early on in their career.</span></p>
<p>This book is also one of the easiest books I have ever read. The chapters are concise nuggets of information and I found myself flying through them and then stopping to reflect on what I had just read. Even though the chapters are grouped, each chapter is mostly independent of the others and it makes it easy to stop/start without having to recall the details of the previous chapters. So, the book is one that you can pickup months or years later and go right to a chapter that you want to reread without needing to read the whole book again. In that sense, it is almost a reference book.</p>
<h4>Good-Enough Software</h4>
<p>Of the many gems in the book, one of them is &#8220;Good-Enough Software&#8221;, which is about creating software that users qualify as being good enough. This approach can be capture by empowering users to be a part of the process and to shift quality into requirements specs. In the Agile world this is related to producing the simple design over the complex one with the caveat that the design must work.</p>
<h4>DRY Principle</h4>
<p>Another great idea is the DRY (Don&#8217;t Repeat Yourself) principle. The idea is to eliminate any duplication of functionality and define a single authoritative location for it. This creates consistency, simplicity and reduces many maintenance headaches. Not only is this important in a single software system, but with the invention of Service Oriented Archictectures (SOA), you can apply it across systems.</p>
<h4>Broken Windows Theory</h4>
<p>One further nugget is the idea that leaving &#8220;broken windows&#8221; (bad code) unrepaired in a system will eventually compound and pretty soon you will have a whole system (building) full of broken windows and a team that doesn&#8217;t mind throwing stones occasionally. The idea is to take the time to repair your code as soon as you see an issue so that the software doesn&#8217;t deteriorate.</p>
<p>Consider this to be a must have for your collection and get a copy of <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X">The Pragmatic Programmer: From Journeyman to Master</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=020161622X" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /> today.</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-iii/" title="Rails Session Management Howto, Part III">Rails Session Management Howto, Part III</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-ii/" title="Rails Session Management Howto, Part II">Rails Session Management Howto, Part II</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-i/" title="Rails Session Management Howto, Part I">Rails Session Management Howto, Part I</a></li><li><a href="http://dcpatton.com/information/accidental-perceived-functionality/" title="Accidental Perceived Functionality">Accidental Perceived Functionality</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/hhBHa97H6p4xYHqQFczJrMDAvww/0/da"><img src="http://feedads.g.doubleclick.net/~a/hhBHa97H6p4xYHqQFczJrMDAvww/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hhBHa97H6p4xYHqQFczJrMDAvww/1/da"><img src="http://feedads.g.doubleclick.net/~a/hhBHa97H6p4xYHqQFczJrMDAvww/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/wA9h3S_kpbs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/book/book-review-the-pragmatic-programmer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/book/book-review-the-pragmatic-programmer/</feedburner:origLink></item>
		<item>
		<title>Help Wanted</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/eMWt4DPSuB4/</link>
		<comments>http://dcpatton.com/information/help-wanted/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 02:38:32 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Opportunity]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1471</guid>
		<description><![CDATA[I am currently looking for help on a great project. Before replying, please affirm the following:

Are you interested in working with some of the best Agile developers in the DC area?
Do you want to learn from top Software Craftsmen as they concentrate on code quality and delivery of working software?
Do you possess J2E skills?
Do you [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently looking for help on a great project. Before replying, please affirm the following:</p>
<ul>
<li>Are you interested in working with some of the best Agile developers in the DC area?</li>
<li>Do you want to learn from top Software Craftsmen as they concentrate on code quality and delivery of working software?</li>
<li>Do you possess J2E skills?</li>
<li>Do you like to share knowledge?</li>
<li>Are you comfortable putting the success of the team ahead of yourself?</li>
<li>Do you like daily interaction with the end users of the software you are developing?</li>
</ul>
<p>If so, please contact me via my <a href="http://dcpatton.com/contact/">contact page</a> ASAP.</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>No Related Posts</li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/Yi354HEr8LS6mVGSOyits_qt1LI/0/da"><img src="http://feedads.g.doubleclick.net/~a/Yi354HEr8LS6mVGSOyits_qt1LI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Yi354HEr8LS6mVGSOyits_qt1LI/1/da"><img src="http://feedads.g.doubleclick.net/~a/Yi354HEr8LS6mVGSOyits_qt1LI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/eMWt4DPSuB4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/help-wanted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/help-wanted/</feedburner:origLink></item>
		<item>
		<title>Twitter Users To Follow</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/9d3hmdCmuJA/</link>
		<comments>http://dcpatton.com/information/twitter-users-to-follow/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:19:51 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1468</guid>
		<description><![CDATA[I thought it might be useful to list some of the thought leaders in technology (particularly software development) and software craftsmanship who I follow on twitter from http://twitter.com/dcpatton.

pragdave Dave Thomas of The Pragmatic Programmer
bryanl Brian Liles discusses Ruby, Macs and web technology
unclebobmartin Robert Martin discusses programming approaches and techniques
WardCunningham discusses Agile, Patterns, etc.
packetlife&#160; Jeremy Stretch [...]]]></description>
			<content:encoded><![CDATA[<p>I thought it might be useful to list some of the thought leaders in technology (particularly software development) and software craftsmanship who I follow on twitter from <a href="http://twitter.com/dcpatton">http://twitter.com/dcpatton</a>.</p>
<ul>
<li><a href="http://twitter.com/pragdave">pragdave</a> Dave Thomas of The Pragmatic Programmer</li>
<li><a href="http://twitter.com/bryanl">bryanl</a> Brian Liles discusses Ruby, Macs and web technology</li>
<li><a href="http://twitter.com/unclebobmartin">unclebobmartin</a> Robert Martin discusses programming approaches and techniques</li>
<li><a href="http://twitter.com/WardCunningham">WardCunningham</a> discusses Agile, Patterns, etc.</li>
<li><a href="http://twitter.com/packetlife">packetlife</a>&nbsp; Jeremy Stretch talks networking</li>
<li><a href="http://twitter.com/martinfowler">martinfowler</a> discusses software developement methodologies</li>
<li><a href="http://twitter.com/KentBeck">KentBeck</a> discusses programming and methodologies</li>
<li><a href="http://twitter.com/aglover">aglover</a> Andrew Glover discusses development and testing</li>
<li><a href="http://twitter.com/RonJeffries">RonJeffries</a> discusses Extreme Programming</li>
</ul>
<p>A longer list is available at <a href="http://twitter.com/dcpatton/techies">http://twitter.com/dcpatton/techies</a>.</p>
<p>Are there others in the software craftsmanship area you follow?</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/book/book-review-database-in-depth/" title="Book Review: Database In Depth">Book Review: Database In Depth</a></li><li><a href="http://dcpatton.com/information/5-more-code-refactorings/" title="5 More Code Refactorings">5 More Code Refactorings</a></li><li><a href="http://dcpatton.com/information/my-associates-store-books/" title="My Associates Store &#8211; Books">My Associates Store &#8211; Books</a></li><li><a href="http://dcpatton.com/information/book-review-software-craftsmanship/" title="Book Review: Software Craftsmanship">Book Review: Software Craftsmanship</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/KkAaR-dIglsNsmdiVWwY_ooVaM4/0/da"><img src="http://feedads.g.doubleclick.net/~a/KkAaR-dIglsNsmdiVWwY_ooVaM4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/KkAaR-dIglsNsmdiVWwY_ooVaM4/1/da"><img src="http://feedads.g.doubleclick.net/~a/KkAaR-dIglsNsmdiVWwY_ooVaM4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/9d3hmdCmuJA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/twitter-users-to-follow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/twitter-users-to-follow/</feedburner:origLink></item>
		<item>
		<title>Book Review: Database In Depth</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/ROv-NPpmOsg/</link>
		<comments>http://dcpatton.com/book/book-review-database-in-depth/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 13:19:27 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1450</guid>
		<description><![CDATA[


Today I am continuing a series of posts in which I will be reviewing some of the books which are related to the development of quality software. They may be specific to a certain technology or a software development methodology.


I&#8217;ve chosen to continue this series with Database in Depth: Relational Theory for Practitioners (amazon affiliate [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: left;">
<span style="font-style: italic;"></span><br />
<blockquote>
<span style="font-style: italic;">Today I am continuing a series of posts in which I will be reviewing some of the books which are related to the development of quality software. They may be specific to a certain technology or a software development methodology.</span></p></blockquote>
</div>
<p><br/><br />
I&#8217;ve chosen to continue this series with <a href="http://www.amazon.com/gp/product/0596100124?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596100124">Database in Depth: Relational Theory for Practitioners</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0596100124" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /> (amazon affiliate link) by C. J. Date. The target audience of this book is experienced database practitioners, not novices. If you&#8217;ve been involved with writing lots of SQL and DDL, then I believe the book is aimed at you. It explains the basic principles of relational theory in depth. The book is completely independent of any particular products and the SQL standard. One of the fascinating aspects of the book is the revelation of how few (if any) commercial database products truly implement the relational theory.</p>
<p>The author C. J. Date, worked closely with the E.F. Codd (inventor of the relational model), strongly influenced the development of database technology, and is considered to be a master in the field. For such an theoretical book, I found his writing style to be very lucid.</p>
<p>Theory discussed includes relations, types, tuples, relational variables, relational algebra and database design theory. One of the most applicable sections is the discussion of normalization.  Another principle that I have taken to heart is the prohibitions of nulls. What is a method of implementing this principle? Well here is one. First suppose you have the following situation:</p>
<table border="1" cellpadding="1">
<caption>User</caption>
<tbody>
<tr>
<th>id</th>
<th>username</th>
<th>hair</th>
</tr>
<tr>
<td>1</td>
<td>user1</td>
<td>black</td>
</tr>
<tr>
<td>2</td>
<td>user2</td>
<td><span style="color:red;"><strong>NULL</strong></span></td>
</tr>
</tbody>
</table>
<p>To avoid the NULL in the table, you can design the schema to be like the following:</p>
<p>Table 1:</p>
<table border="1" cellpadding="1">
<caption>User</caption>
<tbody>
<tr>
<th>id</th>
<th>username</th>
</tr>
<tr>
<td>1</td>
<td>user1</td>
</tr>
<tr>
<td>2</td>
<td>user2</td>
</tr>
</tbody>
</table>
<p>Table 2:</p>
<table border="1" cellpadding="1">
<caption>User Hair Color</caption>
<tbody>
<tr>
<th>user_id</th>
<th>hair</th>
</tr>
<tr>
<td>1</td>
<td>black</td>
</tr>
</tbody>
</table>
<p>
By breaking up the original table into two tables we have avoided the use of NULLS. Complimenting this approach to database design is the use of OUTER JOINs in SQL.</p>
<p>If you want to become a better developer, I recommend reading <a href="http://www.amazon.com/gp/product/0596100124?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596100124">Database in Depth: Relational Theory for Practitioners</a><img src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0596100124" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /> (amazon affiliate link).</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/my-associates-store-books/" title="My Associates Store &#8211; Books">My Associates Store &#8211; Books</a></li><li><a href="http://dcpatton.com/information/accidental-perceived-functionality/" title="Accidental Perceived Functionality">Accidental Perceived Functionality</a></li><li><a href="http://dcpatton.com/book/book-review-the-pragmatic-programmer/" title="Book Review: The Pragmatic Programmer">Book Review: The Pragmatic Programmer</a></li><li><a href="http://dcpatton.com/information/twitter-users-to-follow/" title="Twitter Users To Follow">Twitter Users To Follow</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/wgeej9uD1UxSO2dMioS8ygIWyFc/0/da"><img src="http://feedads.g.doubleclick.net/~a/wgeej9uD1UxSO2dMioS8ygIWyFc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wgeej9uD1UxSO2dMioS8ygIWyFc/1/da"><img src="http://feedads.g.doubleclick.net/~a/wgeej9uD1UxSO2dMioS8ygIWyFc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/ROv-NPpmOsg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/book/book-review-database-in-depth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/book/book-review-database-in-depth/</feedburner:origLink></item>
		<item>
		<title>5 Great Feeds For Software Craftsmen</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/KHazgfvodCo/</link>
		<comments>http://dcpatton.com/information/5-great-feeds-for-software-craftsmen/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 01:14:37 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1446</guid>
		<description><![CDATA[Today I was looking through my RSS reader of choice, Google Reader, and looking at the software development articles that I have starred. It occurred to me that you might benefit from knowing whose feed I am following. Here are my top five:

Uncle Bob&#8217;s Blatherings
This is a category on the Object Mentor Blog dedicated to [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was looking through my RSS reader of choice, Google Reader, and looking at the software development articles that I have starred. It occurred to me that you might benefit from knowing whose feed I am following. Here are my top five:</p>
<ol>
<li><a href="http://blog.objectmentor.com/articles/category/uncle-bobs-blatherings">Uncle Bob&#8217;s Blatherings</a>
<p>This is a category on the Object Mentor Blog dedicated to Robert Martin&#8217;s writing. It is one of my favorite for both practical coding advice as well as thoughts on methodologies and mentoring programmers.</p>
</li>
<li><a href="http://pragdave.blogs.pragprog.com/pragdave/">PragDave</a>
<p>Dave Thomas&#8217;s Pragmatic Programmer Blog is full of small tidbits of useful insight on coding and also some pointers to the books his company puts out.</p>
</li>
<li><a href="http://martinfowler.com/bliki/">Martin Fowler&#8217;s Bliki</a>
<p>As Martin describes it, this is <span style="font-style: italic;">A cross between a blog and wiki of his partly-formed ideas on software development</span>. This is chock full of industry news and his thoughts on different methodologies</p>
</li>
<li><a href="http://googlecode.blogspot.com/">Google Code Blog</a>
<p>If you do any kind of web development, this Google blog is full of information on free APIs and techniques which will improve your skillset.</p>
</li>
<li><a href="http://www.joelonsoftware.com/">Joel On Software</a>
<p>This is Joel Spolsky&#8217;s site where he promotes his consultancy and views on running a software consultancy. I threw this one out there as a site to consider reading even if you don&#8217;t necessarily agree with his approach. Sometimes being able to rationally debate an idea about software craftsmanship is extremely valuable.</p>
</li>
</ol>
<p>Whose feed are you reading?</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/book-review-software-craftsmanship/" title="Book Review: Software Craftsmanship">Book Review: Software Craftsmanship</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-iii/" title="Rails Session Management Howto, Part III">Rails Session Management Howto, Part III</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-ii/" title="Rails Session Management Howto, Part II">Rails Session Management Howto, Part II</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-i/" title="Rails Session Management Howto, Part I">Rails Session Management Howto, Part I</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/GBcBXDz6u2t5xmcCvTe4BSQasCg/0/da"><img src="http://feedads.g.doubleclick.net/~a/GBcBXDz6u2t5xmcCvTe4BSQasCg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GBcBXDz6u2t5xmcCvTe4BSQasCg/1/da"><img src="http://feedads.g.doubleclick.net/~a/GBcBXDz6u2t5xmcCvTe4BSQasCg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/KHazgfvodCo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/5-great-feeds-for-software-craftsmen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/5-great-feeds-for-software-craftsmen/</feedburner:origLink></item>
		<item>
		<title>5 More Code Refactorings</title>
		<link>http://feedproxy.google.com/~r/dcpatton/MNcm/~3/DCRbcf38_gQ/</link>
		<comments>http://dcpatton.com/information/5-more-code-refactorings/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 14:33:11 +0000</pubDate>
		<dc:creator>dcpatton</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://dcpatton.com/?p=1437</guid>
		<description><![CDATA[Since I have been posting some of my favorite refactorings (5 Great Code Refactorings) and re-reading Refactoring by Martin Fowler lately, I thought I would discuss five refactorings that I wish I used more.

Move Method
While I use this refactoring on a regular basis, I&#8217;d like to use it more in a specific case. Specifically I [...]]]></description>
			<content:encoded><![CDATA[<p>Since I have been posting some of my favorite refactorings (<a href="http://dcpatton.com/information/5-great-code-refactorings/">5 Great Code Refactorings</a>) and re-reading <a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201485672">Refactoring</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0201485672" style="border: medium none ! important; margin: 0px ! important;" width="1" /> by Martin Fowler lately, I thought I would discuss five refactorings that I wish I used more.</p>
<ol>
<li style="font-weight: bold;">Move Method</li>
<p>While I use this refactoring on a regular basis, I&#8217;d like to use it more in a specific case. Specifically I want to move more behavior into my data classes so that they don&#8217;t just contain simple get and set methods and private fields. It may even be possible to make the get and set methods private at some point. By using this refactoring in the specific case of data classes, I believe that my classes will have improved cohesion in the OOD sense.</p>
<li style="font-weight: bold;">Replace Magic Number with Symbolic Constant</li>
<p>I also use this on a regular basis when I am coding. For example, I might use the literal <span style="font-style: italic;">1024</span> several times within a class. I usually will replace it with a constant that explains what it is so I only need to change it in one place. This is fine. However, I resolve to replace some magic numbers with a constant even if they are only used a single time. The reason for this is that by naming the constant appropriately, I can achieve improved readability for my code. </p>
<li style="font-weight: bold;">Encapsulate Collection</li>
<p>This is a refactoring that I have never used and resolve to try this year. The idea is to refactor a class containing a method that returns a modifiable collection into a class with a method that returns a read-only collection and has add and remove methods for the collection. In Java, this is done by using the Collections interface methods unmodifiableList(), unmodifiableSet(), etc. This produces proper encapsulation and leaves the responsibility for manipulating the values of the collection up to the class which owns the collection. Thus the coupling is now similar to that of a data class with get and set on non-collection objects. </p>
<li style="font-weight: bold;">Introduce Null Object</li>
<p>This is one of my favorite refactorings. I saw it presented at a user&#8217;s group meeting many years ago in a discussion of the null object pattern. The basic idea is to replace repeated checks for a null value with a null object. Normally you test if an object is not null and then call a method on the object. Instead of doing that you can create a null object and then call the method and get the appropriate behavior. The refactoring involves creating a null object (a subclass of the same type as the non-null object) which contains the methods needed to produce the same behavior in your code as would be done when the test of the null value for the object is true. I infrequently use this refactoring and resolve to use it much more this year. One of the biggest motivations is when looping through objects for display purposes. I can eliminate all those tests for null values that just lead to displaying blanks. </p>
<li style="font-weight: bold;">Replace Nested Conditional with Guard Clauses</li>
<p>I&#8217;ll give a very simple example of this here:<br />
<span style="font-style: italic;">if (i==1) {</span> <span style="font-style: italic;">   result=odd1;</span> <span style="font-style: italic;">} else if (i==2) {</span> <span style="font-style: italic;">   result=odd2;</span> <span style="font-style: italic;">} else if (i==3) {</span> <span style="font-style: italic;">   result=odd3;</span> <span style="font-style: italic;">} else {</span> <span style="font-style: italic;">   result=normal;</span> <span style="font-style: italic;">}   </span> <span style="font-style: italic;">return result</span>  can be refactored to  <span style="font-style: italic;">if (i==1) return odd1;</span> <span style="font-style: italic;">if (i==2) return odd2;</span> <span style="font-style: italic;">if (i==3) return odd3;</span> <span style="font-style: italic;">return normal;</span><br />
The above method reflects the unusual case where i equals 1,2, or 3. It &#8220;guards&#8221; against them. This refactoring provides more clarity within the code and I resolve to use it more.
</ol>
<p>If you have any questions about how to perform the above refactorings, I encourage you to leave them in your comments here and also I highly recommend picking up a copy of <a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;tag=softwarcrafts-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201485672">Refactoring</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=softwarcrafts-20&amp;l=as2&amp;o=1&amp;a=0201485672" style="border: medium none ! important; margin: 0px ! important;" width="1" />.</p>
<p>I believe that each of these refactorings will contribute to better code quality based on <a href="http://dcpatton.com/information/why-refactor/">Why Refactor</a>. What are your favorite refactorings?</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li><a href="http://dcpatton.com/information/5-great-code-refactorings/" title="5 Great Code Refactorings">5 Great Code Refactorings</a></li><li><a href="http://dcpatton.com/information/book-review-software-craftsmanship/" title="Book Review: Software Craftsmanship">Book Review: Software Craftsmanship</a></li><li><a href="http://dcpatton.com/information/why-refactor/" title="Why Refactor?">Why Refactor?</a></li><li><a href="http://dcpatton.com/information/rails-session-management-howto-part-iii/" title="Rails Session Management Howto, Part III">Rails Session Management Howto, Part III</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/RMp687qxH3dMhs-GnLX9_sy7QQI/0/da"><img src="http://feedads.g.doubleclick.net/~a/RMp687qxH3dMhs-GnLX9_sy7QQI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RMp687qxH3dMhs-GnLX9_sy7QQI/1/da"><img src="http://feedads.g.doubleclick.net/~a/RMp687qxH3dMhs-GnLX9_sy7QQI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/dcpatton/MNcm/~4/DCRbcf38_gQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dcpatton.com/information/5-more-code-refactorings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dcpatton.com/information/5-more-code-refactorings/</feedburner:origLink></item>
	</channel>
</rss>
