<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Seth Deckard</title>
	<atom:link href="http://sethdeckard.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sethdeckard.com</link>
	<description>Software Craftsman</description>
	<lastBuildDate>Fri, 01 Apr 2011 13:03:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Introducing Firestone</title>
		<link>http://sethdeckard.com/2011/04/introducing-firestone/</link>
		<comments>http://sethdeckard.com/2011/04/introducing-firestone/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 13:02:51 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Fiction]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Reinventing the Wheel]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=131</guid>
		<description><![CDATA[Are you sick of frameworks that get in the way and take over boring and menial tasks that you should be doing?  Have you ever asked yourself: why am I using some popular and mature framework when it would be faster to just write my own? Introducing Firestone, finally a framework for those who love]]></description>
			<content:encoded><![CDATA[<p>Are you sick of frameworks that get in the way and take over boring and menial tasks that you should be doing?  Have you ever asked yourself: why am I using some popular and mature framework when it would be faster to just write my own?</p>
<p>Introducing Firestone, finally a framework for those who love reinventing the wheel. Firestone is a Universal Wheel Reinvention Framework (UWRF) and can be used to build ANY type of software. Yes, that&#8217;s right, ANY type! Web applications, desktop apps, mobile apps, frameworks and class libraries of any sort, and anything new that happens to come along in the future.</p>
<p>Sound too good to be true? Well just see what some of our early adopters are building with Firestone:</p>
<p><strong>In-house Custom Source Control System </strong>- Who needs Git, Bazaar, or Subversion when you can just roll your own? Hell, Linus Torvalds did it, why shouldn&#8217;t you?<br />
<strong>Custom O/RM Framework</strong> &#8211; Because your stakeholders are paying you to code not use something someone else already built.<br />
<strong>Custom In-house Operating System</strong> &#8211; Why should your internal users be burdened with Mac OS X or Linux? Building and deploying your own Operating System allows you much more control over updates. Perfect for small businesses.</p>
<h4>Download Firestone Now!</h4>
<p><a title="firestone.0.9.1.tar.gz" href="http://sethdeckard.com/firestone/firestone.0.9.1.tar.gz"><strong>firestone.0.9.1.tar.gz</strong></a></p>
<p><a title="firestone.0.9.1.zip" href="http://sethdeckard.com/firestone/firestone.0.9.1.zip"><strong>firestone.0.9.1.zip</strong></a></p>
<p>Looking for documentation? Unfortunately, we don&#8217;t have any time to write any because we&#8217;re too busy reinventing those square wheels. Don&#8217;t let this hold you back, you know you wouldn&#8217;t have wrote any yourself, after all why should someone need to understand what you did when they can just reinvent another wheel?</p>
<h5>FAQ</h5>
<p><strong>Is Firestone just for the arrogant and ignorant? </strong></p>
<p>Unfortunately yes, our research has found that you must meet both of those qualifications in order to use Firestone effectively.</p>
<p><strong>Where&#8217;s the documentation?</strong></p>
<p>We don&#8217;t have any time to write any because we&#8217;re too busy reinventing those square wheels. Don&#8217;t let this hold you back, you know you wouldn&#8217;t have wrote any yourself, after all why should someone need to understand what you did when they can just reinvent another wheel?</p>
<p><strong>What if I feel that I could do a much better job without Firestone and just write my own UWRF?</strong></p>
<p>We understand completely, quit talking about it and do it!</p>
<p><strong>Are you insane?</strong></p>
<p>If you haven&#8217;t figure that out by now then Firestone isn&#8217;t going to help you.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2011/04/introducing-firestone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Toxic Technical Debt</title>
		<link>http://sethdeckard.com/2011/01/toxic-technical-debt/</link>
		<comments>http://sethdeckard.com/2011/01/toxic-technical-debt/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 02:43:23 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[dirty code]]></category>
		<category><![CDATA[technical debt]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=230</guid>
		<description><![CDATA[It seems there&#8217;s some debate going around over what exactly technical debt means in relation to a software project. The main issues seem to be what makes up technical debt and whether it should ever be acceptable to take it on. Dirty Code Is Not Technical Debt I do not believe authoring dirty code or]]></description>
			<content:encoded><![CDATA[<p>It seems there&#8217;s some debate going around over what exactly technical debt means in relation to a software project. The main issues seem to be what makes up technical debt and whether it should ever be acceptable to take it on.</p>
<h6>Dirty Code Is Not Technical Debt</h6>
<p>I do not believe authoring dirty code or code without corresponding tests should be considered technical debt at all, but I do sympathize in that the debt analogy still makes sense. However, this is not the type of debt one should ever want to take on in a project. There is never a valid reason for authoring dirty code or code without tests.</p>
<p><a href="http://sethdeckard.com/wp-content/uploads/2011/01/Valleyofdrums.jpg"><img class="alignleft size-medium wp-image-253" title="Toxic Technical Debt" src="http://sethdeckard.com/wp-content/uploads/2011/01/Valleyofdrums-300x196.jpg" alt="Toxic Technical Debt" width="300" height="196" /></a>I consider this form of technical debt to be toxic technical debt. That is the debt analogy applies but the risk is not ever worth taking and eventually it can bankrupt your organization, quite literally.</p>
<h6>REAL TECHNICAL DEBT CAN BE BENEFICIAL</h6>
<p>I do agree that technical debt is perfectly acceptable to take on for valid business reasons as long as you pay that debt back responsibly, by making a large or complete payment on the principle starting in the very next iteration. Paying only the minimum balance will get you into big trouble, just like in real life.</p>
<p>A simple real world example would be if you had a software service that served multiple customers from a single installation. Let&#8217;s now say that you acquire a new customer and the first thing they want is to be able to run the application on their own domain with a slightly modified theme. The problem is that your app is in an early stage of evolution and doesn’t yet support such features, though you do want to get this customer up and running before you lose them to your competition.</p>
<p>As a team you might decide to take on some small technical debt in order to service your new customer faster. Instead of adding new features you could just create another instance of the application with a different configuration and slightly modified default theme. The key here is that you want do it with intention of building this feature into the main application and getting rid of the separate instance once you have the customer up and running. Not doing so would be considered paying only the interest on the debt, something you want to avoid at all costs.</p>
<p>Even though technical debt can be beneficial, the risk of taking it on should always be considered carefully.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2011/01/toxic-technical-debt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Predatory Software Consulting</title>
		<link>http://sethdeckard.com/2010/09/predatory-software-consulting/</link>
		<comments>http://sethdeckard.com/2010/09/predatory-software-consulting/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 03:58:52 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Consulting]]></category>
		<category><![CDATA[Consumer Guide]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=39</guid>
		<description><![CDATA[Custom Software Services is one aspect of the software business that is plagued by sleazy companies, some of which will go to almost any length to make a quick buck. This article aims to provide a set of red flags that businesses can use when evaluating such companies for their services.  Hopefully after reading you will be]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-202 alignright" title="Snake Oil" src="http://sethdeckard.com/wp-content/uploads/2010/09/Snake-oil.png" alt="" width="150" height="270" />Custom Software Services is one aspect of the software business that is plagued by sleazy companies, some of which will go to almost any length to make a quick buck. This article aims to provide a set of red flags that businesses can use when evaluating such companies for their services.  Hopefully after reading you will be easily able to distinguish the shady companies from the rest.  I don&#8217;t think all custom software companies out there are this way, in fact I know that there are respectable craftsmen out there, doing great work for their customers.</p>
<h4>Red flag #1 Fixed Bid</h4>
<p>One might be thinking that a fixed bidding process is a great way to control costs on a software project.  This is exactly the nature of the fixed bid trap set by sleazy custom software companies, they lure you in thinking you&#8217;ll be getting your project delivered for less without worries of going over budget.  This is a fallacy, the only way to really control costs is to receive continuous delivery of valuable software.</p>
<p>The problem with fixed bidding is two fold.  On one end the temptation of the consulting company to under-estimate and under-bid is too great, and the temptation to then cut corners becomes too high.  The quality of your code and project will suffer, perhaps greatly.  The other problem is that these firms are very good at their core business (contract negotiation) they know how to write specification documents to be just vague enough that they can easily deem things to be change requests that most people would consider obvious.  At this point they now have you held hostage; you can back out and usually pay some retainer plus the cost of your project, or you can skip the change request and get less than what you wanted, but likely you&#8217;ll submit and pay more for the project than you originally thought.</p>
<p>A fixed bid project can only result in a few outcomes, in the first they compensate their under bidding with change requests and secondly they cut corners and drastically reduce quality to make the budget, but usually the result is a combination of the two. The reality is that in software you can only estimate small tasks with accuracy, estimating at the project level is always a roll of the dice.  Everyone&#8217;s understanding of the software requirements will change as the project progresses.  This is why true craftsmen would work with you in a customer-driven approach,  delivering working software constantly so you can walk away whenever you  feel you&#8217;ve achieved the value you wanted to obtain.</p>
<h4>Red flag #2 Phony or Outdated Approaches and Methodologies</h4>
<p>Their website might have talk of having methodologies but do they give concrete examples of them in action throughout their work?  More importantly, is the process or methodology they follow an accepted industry standard or do they just enjoy reinventing the wheel?  Perhaps they will reinvent the wheel when they go to implement your project. But more than likely it&#8217;s just fictional or simply high-level steps of their sales process.  Agile and customer-driven methods will be highly visible throughout the interactions with the reputable shop, these will be prevalent in the more competent and legitimate companies.</p>
<h4>Red Flag #3 Outsourcing to Developing World Countries</h4>
<p>In this case the shop becomes almost nothing more than just a middleman and you can almost guarantee they are using online freelance services.  This is not bad because developing world countries have worse programmers than here in the United States, quite the contrary.  Exceptional programmers are individuals that represent every nationality and ethnic background.  The problem is that these exceptional developing world programmers are not going to be the ones working on your project.  The ones who will be working your project will be of the lowest percentile in skills and ability.  This is because those exceptional programmers even in the developing world are going to have greater economic opportunity than working on a middleman&#8217;s outsourced project, in fact most of the highly skilled will have opportunities to work abroad in rich developed nations throughout the world.</p>
<p>One can almost guarantee that any work contracted out to a third party (regardless of destination country) will result in what is considered commodity programming, meaning that the code will be very poorly written and brittle and thus hard to maintain and sometimes almost impossible to extend or change without significant costs.  Yes, the quality of the code itself is of utmost importance, don&#8217;t let them try to tell you otherwise.  Unfortunately the sleaziest of custom software shops will avoid mentioning they perform these activities, in fact they might even flat out lie about it.  This is where you have to really do your homework and hit them with the hard questions, find out all you can about the size of their team and internal practices, a company that just farms out projects can&#8217;t hide every aspect of it.</p>
<h4>Red Flag #4 Trumped-up Testimonials</h4>
<p>Lots of testimonials and prior customers in a portfolio doesn&#8217;t necessarily insure that the company is not sleazy.  Beware of the shop that tries to sell itself based the reputations of it&#8217;s past customers, ask yourself why they are focusing on this so much when they should selling you on their expertise and abilities.  It&#8217;s amazing how some companies will greatly embellish, often using their friends who might work at a major corporation to write them a quick and positive testimonial.  Since anyone can simply ask one of their friends to write them a testimonial or a review, you should not even consider these testimonials when selecting the right company.</p>
<h4>Red Flag #5 Lack of Quality Standards</h4>
<p>A reputable shop should have a set of quality standards defined and they should be able to share these with you without any hesitation.  You want to make sure that they have standards for coding style, software design, and even content.  Their standards should also be right inline with industry standards of the related languages and technologies they plan to use. They should use test-driven development or at the very least write unit and functional tests concurrently with your project.  The result of your project should not only be the code but also the code the makes up the unit and functional tests, after all this is an important part of your software and you will need these for maintenance and implementing changes in the future.  There should even be some minimum <a href="http://en.wikipedia.org/wiki/Code_coverage">Code Coverage</a> metrics agreed on up front.</p>
<h4>Conclusion</h4>
<p>If you are shopping for custom software services please take this guide to heart, don&#8217;t let the charlatans try to convince you that any of the these red flags are acceptable practices.  Feel free to contact me or post any questions you might have about your experiences, I&#8217;d be more than happy to help you in selecting the right craftsmen for the job.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2010/09/predatory-software-consulting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Now Reading: Working Effectively with Legacy Code</title>
		<link>http://sethdeckard.com/2010/09/now-reading-working-effectively-with-legacy-code/</link>
		<comments>http://sethdeckard.com/2010/09/now-reading-working-effectively-with-legacy-code/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 23:42:18 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Legacy Code]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=157</guid>
		<description><![CDATA[I&#8217;m attempting to strengthen a weakness in my knowledge, that weakness is working with legacy code or really being able to confidently change legacy code. Legacy code as Michael Feathers puts it in his book Working Effectively with Legacy Code, is simply code without corresponding tests. It doesn&#8217;t have anything to do with when the]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-158 alignright" title="Working Effectively with Legacy Code" src="http://sethdeckard.com/wp-content/uploads/2010/09/legacy_code.jpg" alt="" width="350" height="350" /></p>
<p>I&#8217;m attempting to strengthen a weakness in my knowledge, that weakness is working with legacy code or really being able to confidently change legacy code.  Legacy code as <a href="http://michaelfeathers.typepad.com/">Michael Feathers</a> puts it in his book <a href="http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052">Working Effectively with Legacy Code</a>, is simply code without corresponding tests.  It doesn&#8217;t have anything to do with when the code was written or what obsolete language it was written in, legacy code is code without tests, often poorly implemented code without tests.</p>
<p>The concept of changing this kind of code with any level of confidence is something I&#8217;ve struggled with, in fact I&#8217;ve had to work on legacy code that was written this year, again proving that legacy code is not necessarily old code.  As Feathers puts it, someone may be writing legacy code on your project right now.  The amount of legacy code far out numbers the amount of new code.</p>
<p>You know you need unit and functional tests but the biggest problem is how to implement such tests on a system that wasn&#8217;t designed with that in mind in the first place.  To introduce tests it seems you have to change code, sometimes lots of code, but if you don&#8217;t have tests already then how can you do that with any degree of confidence? I would say the current strategies I&#8217;ve learned over the years only cover about 20% of the cases, leaving about 80% to slow coding and repeated and mostly redundant manual testing and in the end a little of just hoping for the best outcome.  Legacy code sucks, it drains the productivity out of you and cost the stakeholders money with slow development and and increased number of bugs with even the simplest changes.</p>
<p>I&#8217;ll let you know what I&#8217;ve learned in a full review I will write after finishing this book.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2010/09/now-reading-working-effectively-with-legacy-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clean C# via SyleCop</title>
		<link>http://sethdeckard.com/2010/09/clean-csharp-via-sylecop/</link>
		<comments>http://sethdeckard.com/2010/09/clean-csharp-via-sylecop/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 01:03:53 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Style]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=135</guid>
		<description><![CDATA[StyleCop is an open source source code analysis tool that can check your C# code against a predefined set of style rules published by Microsoft.  When working in C# I find this tool is a great asset for helping me achieve the rule of &#8220;Leaving the code in a better state than when you first started working on it&#8221;.]]></description>
			<content:encoded><![CDATA[<p><a title="StyleCop" href="http://stylecop.codeplex.com/" target="_self">StyleCop</a> is an open source source code analysis tool that can check your C# code against a predefined set of style rules published by Microsoft.  When working in C# I find this tool is a great asset for helping me achieve the rule of &#8220;Leaving the code in a better state than when you first started working on it&#8221;.  One caveat is that while all these rules might be great for Microsoft, they are overkill in some areas, some even seem to go against maintainability and readability, but that is only my opinion.</p>
<p>Here is the StyleCop settings file I use on my C# projects, this disables some of the rules I feel are overkill:</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;StyleCopSettings</span> <span style="color: #000066;">Version</span>=<span style="color: #ff0000;">&quot;4.3&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Parsers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Parser</span> <span style="color: #000066;">ParserId</span>=<span style="color: #ff0000;">&quot;Microsoft.StyleCop.CSharp.CsParser&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ParserSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;BooleanProperty</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;AnalyzeDesignerFiles&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>False<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/BooleanProperty<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ParserSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Parser<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Parsers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Analyzers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Analyzer</span> <span style="color: #000066;">AnalyzerId</span>=<span style="color: #ff0000;">&quot;Microsoft.StyleCop.CSharp.OrderingRules&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rule</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;UsingDirectivesMustBePlacedWithinNamespace&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;BooleanProperty</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;Enabled&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>False<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/BooleanProperty<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;AnalyzerSettings</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Analyzer</span> <span style="color: #000066;">AnalyzerId</span>=<span style="color: #ff0000;">&quot;Microsoft.StyleCop.CSharp.DocumentationRules&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rule</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;DocumentationTextMustMeetMinimumCharacterLength&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;BooleanProperty</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;Enabled&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>False<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/BooleanProperty<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rule</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ConstructorSummaryDocumentationMustBeginWithStandardText&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;BooleanProperty</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;Enabled&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>False<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/BooleanProperty<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rule</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;FileMustHaveHeader&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;BooleanProperty</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;Enabled&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>False<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/BooleanProperty<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;AnalyzerSettings</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Analyzer</span> <span style="color: #000066;">AnalyzerId</span>=<span style="color: #ff0000;">&quot;Microsoft.StyleCop.CSharp.ReadabilityRules&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rule</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;PrefixLocalCallsWithThis&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;BooleanProperty</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;Enabled&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>False<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/BooleanProperty<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RuleSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;AnalyzerSettings</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Analyzers<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/StyleCopSettings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div>
<p>I would exercise caution when disabling rules, especially in a team situation where you are using this tool to enforce a standard style.  Before disabling a rule you should consider what damage the lowest common denominator on your team could do without that rule in place.  I also find this tool works hand-in-hand with <a href="http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx">FxCop</a>, even though there is a little overlap in some areas.</p>
<p>I find it very useful to run StyleCop before I commit some code, often it will show me things I just simply overlooked because I was too focused at the task at hand.  Of course this tool can only check the style of your code and while there are rules for naming, choice of meaningful names and sound software design is still left up to us humans.  Remember to always leave code in a better condition than when you started working on it and use StyleCop to help you find things that can easily be addressed.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2010/09/clean-csharp-via-sylecop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1GHz or Better Required</title>
		<link>http://sethdeckard.com/2010/07/1ghz-or-better-required/</link>
		<comments>http://sethdeckard.com/2010/07/1ghz-or-better-required/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 01:03:55 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Mobile Hardware]]></category>
		<category><![CDATA[Nexus One]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=76</guid>
		<description><![CDATA[I&#8217;m just going to say it, the Android OS requires at least a 1GHz processor and 512MB RAM to be enjoyable.  The problem mostly lies with background services and to a probably lesser extent widgets.  Now don&#8217;t get me wrong, I think background services are great and necessary for a really robust mobile platform.  Widgets]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m just going to say it, the Android OS requires at least a 1GHz processor and 512MB RAM to be enjoyable.  The problem mostly lies with background services and to a probably lesser extent widgets.  Now don&#8217;t get me wrong, I think background services are great and necessary for a really robust mobile platform.  Widgets are also cool and make some applications more usable and just overall make the device much more pleasant to use.</p>
<p>What I noticed on my previous Android device was that if I didn&#8217;t perform task management every few days, performance would suffer.  This is something I hear users complain about, even the girl who cuts my hair would tell me how her myTouch &#8220;just doesn&#8217;t work as well as it used to&#8221; or &#8220;is slower than it used to be&#8221;.  Most users simply won&#8217;t know they will need to perform task management on a weekly basis to keep their device running smooth.</p>
<p>Then I picked up a Nexus One in January just a few days after it had been released.  The difference was like night and day, a power user&#8217;s dream.  I could load as many widgets as a wanted and I would run many background services without ever needing to manage tasks.  The device simply has enough horse power to keep up with even a user like myself.</p>
<p>However, I do see a bottleneck on the horizon with my Nexus One: Internal Storage.  The internal flash storage on the N1 is 512MB, much better than previous devices and this was fine for my situation until recently.  I had accumulated a lot of apps, with some of them now containing quite a bit of user generated data.  Last week I was a little surprised when I received a notification telling me that internal storage was getting low.  I immediately went through my apps see which ones I could move to the SD Card via the new feature in Android 2.2 (Froyo), however many developers (including myself, which will be addressed soon I promise) have not yet released updates to allow this feature.  When that wasn&#8217;t enough I then I had to go through and remove apps that I could live without.  Followed by removing data from certain apps that I could also handle not having. That&#8217;s never a fun process to go through.  What really got me was that I had so much available space on my large SD Card, but I couldn&#8217;t utilize it fully.</p>
<p>In conclusion I think that the Android development team needs to make &#8220;preferExternal&#8221; the default install location setting and move the choice away from the developers and into the hands of the user so that any application and it&#8217;s data can be copied to the SD Card and installed there by default if space is available.  If the choice is still left up to developers then you can bet that internal storage space will be a factor in deciding my next Android phone purchase.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2010/07/1ghz-or-better-required/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Good, Bad, and Ugly of Android Market Indexing Sites</title>
		<link>http://sethdeckard.com/2010/05/the-good-bad-and-ugly-of-android-market-indexing-sites/</link>
		<comments>http://sethdeckard.com/2010/05/the-good-bad-and-ugly-of-android-market-indexing-sites/#comments</comments>
		<pubDate>Fri, 14 May 2010 16:08:00 +0000</pubDate>
		<dc:creator>Seth</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Android Market]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://sethdeckard.com/?p=4</guid>
		<description><![CDATA[Sites that provide web-based indexes of applications in the Android Market are very prevalent these days, with new ones popping up and claiming that they can help you sort out the good Android apps from the ones that are well, basically just spam.  Some of the top contenders are AppBrain, AndroLib, and AppStoreHQ. The Bad From]]></description>
			<content:encoded><![CDATA[<p>Sites that provide web-based indexes of applications in the Android Market are very prevalent these days, with new ones popping up and claiming that they can help you sort out the good Android apps from the ones that are well, basically just spam.  Some of the top contenders are <a href="http://www.appbrain.com/">AppBrain</a>, <a href="http://www.androlib.com/">AndroLib</a>, and <a href="http://www.appstorehq.com/">AppStoreHQ</a>.</p>
<h6>The Bad</h6>
<p>From a developer perspective, <a href="http://www.androlib.com/">AndroLib</a> and <a href="http://www.appstorehq.com/">AppStoreHQ</a> are just outright annoying.  Not only do they not keep updated and accurate information about your apps, they are very slow to update them.  If you want your app listing on their site to be update-to-date you must register with them and request they update it when necessary.  The processes for requesting updates are kludges at best and incomplete, requiring a manual request (email) to update aspects of the listing such as icons and screenshots.  App Developers don&#8217;t have a lot of time to waste and having to keep emailing the owners of these sites to request updates and going through their kludgy processes is a waste of time, time that could be spent developing better applications.</p>
<p>From a consumer point of view, AndroLib is the worst of these two.  Usability on this site is horrible, it performs poorly, and just looks ugly.  Information seems cluttered on both AppStoreHQ and AndroLib again pointing to the usability issues of these sites.  It should also be noted that AppStoreHQ does not only index just Android apps but iPhone/iPad and plain old web applications as well.﻿</p>
<h6>Enter AppBrain</h6>
<p>Now here is a site that nails it perfectly, not only do they automatically update all details of your app, they do so very regularly and without any intervention on your part.  This is how one of these sites should be done, not only from a developer perspective but also from the view of the end consumer.  The site is very minimalistic, performs well, and really has some great market integration features allowing you to sync your installed apps and install from their web site.  Not to mention the fact that they have an Android app and they have implemented techniques to filter out those many junk/spam apps that plague app markets.</p>
<h6>Conclusion</h6>
<p>If you are looking to build one of these sites I suggest you look at <a href="http://www.appbrain.com/">AppBrain</a> as a model first.  If you are the developer of one of the other sites then I suggest looking at them as well, you might learn something.</p>
]]></content:encoded>
			<wfw:commentRss>http://sethdeckard.com/2010/05/the-good-bad-and-ugly-of-android-market-indexing-sites/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

