<?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>Anthony Neal Consulting</title>
	<atom:link href="http://www.anthonyneal.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.anthonyneal.com</link>
	<description>Software Design and Development</description>
	<lastBuildDate>Sun, 09 May 2010 18:16:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Law of Demeter</title>
		<link>http://www.anthonyneal.com/?p=21</link>
		<comments>http://www.anthonyneal.com/?p=21#comments</comments>
		<pubDate>Sun, 09 May 2010 18:16:04 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Codecraft]]></category>

		<guid isPermaLink="false">http://www.anthonyneal.com/?p=21</guid>
		<description><![CDATA[Recently I have read some articles that have mentioned the Law of Demeter, and not having heard of it, I went looking for it. Blatantly stolen from the article, the Law of Demeter is as follows:
A method &#8220;M&#8221; of an object &#8220;O&#8221; should invoke only the
the methods of the following kinds of objects:

itself
its parameters
any objects [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I have read some articles that have mentioned the <a title="Info about Demeter, and the Law of Demeter" href="http://www.cmcrossroads.com/bradapp/docs/demeter-intro.html" target="_blank">Law of Demeter</a>, and not having heard of it, I went looking for it. Blatantly stolen from the article, the Law of Demeter is as follows:</p>
<blockquote><p>A method &#8220;M&#8221; of an object &#8220;O&#8221; should invoke <em>only</em> the<br />
the methods of the following kinds of objects:</p>
<ol>
<li>itself</li>
<li>its parameters</li>
<li>any objects it creates/instantiates</li>
<li>its direct component objects</li>
</ol>
</blockquote>
<p> Why is this a good thing? In simple terms, following the Law of Demeter, you enforce encapsulation of a method&#8217;s implementation and dependencies on other objects. Should that method have to change at a later time, it minimizes the impact on callers of the method, localizing the change to the method in question and its subordinates.</p>
<p>For more information, and perhaps a more succinct explanation, see the linked article above.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anthonyneal.com/?feed=rss2&amp;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactoring Is Not Up To You</title>
		<link>http://www.anthonyneal.com/?p=18</link>
		<comments>http://www.anthonyneal.com/?p=18#comments</comments>
		<pubDate>Sun, 09 May 2010 03:28:20 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[State of the Code]]></category>

		<guid isPermaLink="false">http://www.anthonyneal.com/?p=18</guid>
		<description><![CDATA[As a software contractor, and previous employee at many software shops, I have seen some amazingly well built code, and unfortunately my fair share of the horrible. To steal a quote from one of my favorite movies:
&#8220;I&#8217;ve seen things you people wouldn&#8217;t believe&#8230;&#8221;
 &#8211; Roy Batty, Nexus 6 Replicant, Blade Runner
I&#8217;ve seen the use of design [...]]]></description>
			<content:encoded><![CDATA[<p>As a software contractor, and previous employee at many software shops, I have seen some amazingly well built code, and unfortunately my fair share of the horrible. To steal a quote from one of my favorite movies:</p>
<p style="PADDING-LEFT: 30px">&#8220;I&#8217;ve seen things you people wouldn&#8217;t believe&#8230;&#8221;<br />
 &#8211; Roy Batty, Nexus 6 Replicant, <a title="Blade Runner" href="http://www.imdb.com/title/tt0083658/" target="_blank"><em>Blade Runner</em></a></p>
<p>I&#8217;ve seen the use of <em>design patterns </em>for the sake of having used a design pattern, with interfaces so generalized that types have been thrown out the window so as to refer to all parameters and return types as simply java.lang.Object. I&#8217;ve seen applications written in C++ where pointers to proper objects have been re-cast as unsigned long, totally stripping type information (and the fact that the value is a pointer), passed around and then re-cast to a (hopefully appropriate) object type elsewhere. I have seen Translator objects, written to perform translation between DTOs and general Beans meant to be consumed at the User Interface level, that also including translation from HTML form attributes to <em>both </em>DTOs and Beans. I&#8217;ve seen hard-coded character buffers in C/C++ applications that are easily overrun when std::string was readily available.</p>
<p>I have seen the <a title="The Big Ball of Mud" href="http://laputan.org/mud/" target="_blank">Big Ball of Mud</a> up-front and personal.<span id="more-18"></span></p>
<p>It is easy for us to sweep these, and many other, examples of poor practices under the rug and claim that these are examples of mistakes made by junior developers, and that by hiring a lot of senior developers, a company may avoid these pitfalls. Unfortunately, I can attest that many of these mistakes that I meniton above were made by some very smart and senior individuals (or groups), many of whom have looked back and wondered exactly what they were thinking. Perhaps it is lack of thinking that has lead to these missteps. Regardless, mistakes or flat-out bad architectural choices get made by very smart people every day.</p>
<p>Code is business. Code is money. Code can make it easier for you to make more money more easily, or it can drag your organization into the never-ending mire of constant bug fix releases. As a coder, intimately in tune with whatever code I am working on, I&#8217;d like to believe that the decision is mine on what and how to fix the code under my gentle guiding fingertips, but the reality in many software development environments is quite different. Business drives release cycles and feature sets. They have the budget which may be spent by development for certain features in a given amount of time, and for the Quality Control people to verify that everything is working correctly as per the requirements.</p>
<p>In this type of organization, where development is not seen as source of revenue, but as a cost center, it can be argued that if there are fixes to be made that are not congruent to the current release, they need to be made &#8220;under the radar&#8221; or as part of some manner of &#8220;skunk works&#8221;. But regardless of how many off-hour unpaid altruistic coding expeditions that you may be willing to undertake, your fixes for the code blemishes may not make it to release. If your development team&#8217;s lead is vigilant in watching commits to source control, and is code-literate enough to notice that your changes do not appear to be contributing to the officially mandated requirements, all your hard work may be for naught.</p>
<p>Some that I&#8217;ve talked to in the past suggest that you should <em>engineer</em> enough time into your estimates so that you can correct wrongs in an area of code while delivering the feature set at the same time. This can work if you have buy-in from your development lead, but more often than not, those dev leads are being watched as well.</p>
<p>In the end, in this manner of organization, you need to be able to raise the importance of code-craft and &#8220;making it right&#8221; to the attention of the business teams that control the budget. And that can be tough.</p>
<p>While the article <a title="The Big Ball of Mud" href="http://laputan.org/mud/" target="_blank">The Big Ball of Mud</a> does not suggest how to fix the simple issues I mention above, it does offer multiple nuggets of wisdom between the lines as to how one may approach <em>the powers that be</em> in order to suggest time and/or budget to be allocated to fixing the blight that may be festering in your code base. The article provides some excellent ammunition.</p>
<p>And, if nothing else, it is a great read that draws from a number of sources and suggests some wisdom which may allow you to avoid becoming mired in mud in your future projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anthonyneal.com/?feed=rss2&amp;p=18</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HP Solution Center 13</title>
		<link>http://www.anthonyneal.com/?p=13</link>
		<comments>http://www.anthonyneal.com/?p=13#comments</comments>
		<pubDate>Tue, 20 Apr 2010 17:01:20 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://www.anthonyneal.com/?p=13</guid>
		<description><![CDATA[Back in September, I decided I was going to try and keep all my company documents in electronic format for easy filing. Sure, I&#8217;d keep all the originals in my fire safe, but I wanted to be able to pull up anything at a moment&#8217;s notice and e-mail/fax it as necessary from wherever I was. [...]]]></description>
			<content:encoded><![CDATA[<p>Back in September, I decided I was going to try and keep all my company documents in electronic format for easy filing. Sure, I&#8217;d keep all the originals in my fire safe, but I wanted to be able to pull up anything at a moment&#8217;s notice and e-mail/fax it as necessary from wherever I was. I decided I needed a good scanner with an auto document feeder.</p>
<p>Enter the HP ScanJet 5590. Looked good, wasn&#8217;t too expensive, was rated for light office work, I thought I had found a winner. So I ordered, received and installed the little beastie on my Dell Precision M4100. And then disappointment set in.<span id="more-13"></span></p>
<p>I managed to scan one document as a &#8220;test&#8221; that night, but since then I have not been able to scan anything. I keep getting the HP updates, and still no joy. Today I received the update to HP Solution Center 13, and with it the hope that my problems would just <em>go away</em>. Negative. More problems ensue.</p>
<p>The install seemed to go as planned, but at the end it immediately rebooted my computer. No message or confirmation message box, just boom! Now everytime I restart the machine, I spend the next 5 minutes clicking &#8216;Cancel&#8217; when something called &#8220;TrayApp&#8221; repeatedly attempts to find the .msi that has been deleted from the machine&#8217;s temp directory. It seems they installed right from the temp directory, and rebooted before the &#8220;TrayApp&#8221; could completely finish installing. I am not the only poor soul that has encountered this issue, it is well covered on HP&#8217;s support forums, with little or no words of wisdom that I can find from HP themselves. The consensus seems to be &#8220;reinstall the drivers&#8221;.</p>
<p>This is not the only problem I&#8217;ve had with this particular suite of software. When I installed the scanner, I had hooked it to a USB port on the back of the laptop. When I finally moved the scanner into my office, I hooked it to the back of my docking station. The HP software proceeded to recognize it as &#8220;HP ScanJet 5590 <strong>#2</strong>&#8220;. Excellent. I removed the <em>#2</em> device in Device Manager and hooked the scanner up to another USB port on the laptop itself and got the same result. Apparently, the drivers are sticky with respect to the particular USB port on which the scanner is installed.</p>
<p>When I decided to ignore this little annoyance and  perform a scan, sometimes the scanning would appear to hang, other times I would get a message on the screen telling me there were some kind of communications issues with the device.</p>
<p>I have had relatively good experiences with HP&#8217;s equipment in the past, and the scanner itself looks to be fairly well made, but I have to take issue with HP&#8217;s drivers and/or applications. Currently, I am uninstalling all the HP drivers and apps on my M4100, and I&#8217;m going to attempt to re-install using a full-setup I downloaded from HP. Will this solve my problems and renew my faith in HP?</p>
<p>More news later&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anthonyneal.com/?feed=rss2&amp;p=13</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Obligatory &#8220;Hello World&#8221; Post</title>
		<link>http://www.anthonyneal.com/?p=3</link>
		<comments>http://www.anthonyneal.com/?p=3#comments</comments>
		<pubDate>Mon, 02 Nov 2009 03:30:29 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.anthonyneal.com/?p=3</guid>
		<description><![CDATA[It&#8217;s late on a Sunday night, the night before I attend Microsoft Tech-Days 2009&#8230;
&#8230;and my website is non-existent.
So, like many others on the &#8216;net, I resort to WordPress. Check back in the near future, I promise to have better content than this.
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s late on a Sunday night, the night before I attend Microsoft Tech-Days 2009&#8230;</p>
<p>&#8230;and my website is non-existent.</p>
<p>So, like many others on the &#8216;net, I resort to WordPress. Check back in the near future, I promise to have better content than this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anthonyneal.com/?feed=rss2&amp;p=3</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
