<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/4.0.3" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>All Blogs - Author(s): damber</title>
		<link>http://blogs.lessthandot.com/index.php/All/</link>
		<atom:link rel="self" type="application/rss+xml" href="http://blogs.lessthandot.com/index.php/All/?tempskin=_rss2" />
		<description>LessThanDot A Technical Community for IT Professionals</description>
		<language>en-US</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=4.0.3"/>
		<ttl>60</ttl>
				<item>
			<title>Simple advice for choosing an ESB</title>
			<link>http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/simple-advice-for-choosing-an-esb</link>
			<pubDate>Mon, 06 Apr 2009 18:54:28 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="alt">Enterprise Architecture</category>
<category domain="main">Information &amp; Integration Architecture</category>			<guid isPermaLink="false">385@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;I thought I would share a recent question that was raised on LinkedIn, which asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Starting the Holy Wars on ESB? Who brings the best package deal to the table i.e IBM, MSFT...... Look at this way &quot; A mid sized cash crunched has to implement ESB what are the options it has&quot; or rather who should it be married to. Any thoughts&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tons of ESB from various players are in the market IBM, MSFT, Oracle , SAP but remember its a cash crunched company which requires the ESB. I can provide more details on the technical side. The idea is to throw open the debate to get various perspective. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, let&#039;s forget for the moment that the question was raised by a Microsoft employee, and focus more on the general principle of the question... What should companies look for in an &lt;a href=&quot;http://en.wikipedia.org/wiki/Enterprise_service_bus&quot;&gt;ESB&lt;/a&gt;?  In my brief answer, I aim to get across the point that asking which ESB vendor you should be &quot;Married to&quot; is very much the wrong question to ask, and to consider that there is more to solving this problem intelligently (and thus cost effectively) than simply &#039;buying technology&#039;. No single technology will solve your problem out of the box, so be careful not to expect or ask it to do so.  &lt;/p&gt;

&lt;p&gt;Here&#039;s the Answer in full:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As always... understand the problem first...&lt;/p&gt;

&lt;p&gt;Step 1: Understand the problem you are trying to solve (e.g. Imperatives, Current Pain Points, As-Is Landscape, Use Cases, etc)&lt;br /&gt;
Step 2: Design a Target Architecture (NOT based on a particular technology) that solves this problem, including reference models, design patterns, architecture paradigms, principles, etc&lt;br /&gt;
Step 3: Create a high level Roadmap to get from your current environment to your target architecture&lt;br /&gt;
Step 4: Now... Search for a technology that will support this need.&lt;/p&gt;

&lt;p&gt;I would highly recommend not starting by talking to vendors about how they will solve your problem. Strangely enough, their products always have the answer :-)&lt;/p&gt;

&lt;p&gt;ok.. let&#039;s look at what integration is all about:&lt;/p&gt;

&lt;p&gt;Openness&lt;br /&gt;
Interoperability&lt;br /&gt;
Standardisation&lt;br /&gt;
Flexibility&lt;/p&gt;

&lt;p&gt;- This is where you need to really think about why you have an integration problem in the first place... closed, insular approaches to application design. This indicates that we want an OPEN and INTEROPERABLE environment which is based on STANDARDS to give you FLEXIBILITY.&lt;/p&gt;

&lt;p&gt;The problem with a lot of products on the market if not understood or used properly is that you can very soon become (in your words) &quot;Married&quot; to that vendor&#039;s solution. This destroys the core principles of what integration is all about - you are simply adding the same problem on top of the original problems.&lt;/p&gt;

&lt;p&gt;In many ways the open source integration solutions (incl. ESBs - e.g. SOPERA (commercial and more advanced version of Eclipse Swordfish), Apache FUSE, JBoss,etc) lend themselves to these principles very well, however this does not guarantee they will fit your need, or perform to the level of some COTS/Closed Source options.&lt;/p&gt;

&lt;p&gt;Additionally, you need to consider that properly integrating your environment is not just about purchasing / implementing an ESB. This is just one component of the overall solution, which should consider the need for MDM, Data Architecture and Canonicalisation, Portals, Business Rules, Registry/Repository, Modelling Tools, Business Process Management and Orchestration, amongst others. The commercial vendors will be more than willing to sell you complete stacks for these things, but be prepared to do things their way, and have a certain amount of lock-in to that vendor.&lt;/p&gt;

&lt;p&gt;As you work there, I&#039;m sure you realise that Microsoft is very Microsoft focused, so is only really sensible for Microsoft only environments. However, your recent deal with SOPERA now gives support for both native .NET and Java environments. Maybe there is hope...&lt;/p&gt;

&lt;p&gt;Oracle and SAP have some good concepts, but unfortunately they are again very insular - if you only have SAP then XI will be wonderful for you, same with Oracle Fusion and their AIA offering - extending outside the environment is possible, but often ugly.&lt;/p&gt;

&lt;p&gt;IBM is (imho) conceptually better at being application/solution agnostic, as it doesn&#039;t sell applications to integrate, therefore focuses on supporting a diverse range of approaches. However, they have a history of a somewhat convoluted and overlapping solution set.&lt;/p&gt;

&lt;p&gt;Webmethods provides you with a well integrated set of tools and features, again application agnostic, though it&#039;s sweet spot is Process Management, and isn&#039;t the most open/standards compliant.&lt;/p&gt;

&lt;p&gt;If a company is really strapped for cash... then an open source option may be best. But you may have to work harder to get a complete solution up and running.&lt;/p&gt;

&lt;p&gt;You can get all of the components to integrate your environment for free - but you have to implement them, they may not be that pretty/easy to use, or performant, and if you choose not to pay for ongoing support then you are putting your company at risk.&lt;/p&gt;

&lt;p&gt;You also have to ask yourself if you are really doing pure SOA, or whether you are needing to do application integration...&lt;/p&gt;

&lt;p&gt;above all, the right architecture will win over a technology choice&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, the answer was as you would expect for a general Q&amp;amp;A site - relatively simple/brief (there is a post size limit!) and a little on the generic side to cater for the limited information available.  &lt;/p&gt;

&lt;p&gt;I touch briefly on a couple of points I want to highlight here.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first point&lt;/strong&gt; being the potential benefit but also risk of using Open Source integration technologies.  Put simply, open source&#039;s core principles are very much aligned with those of integration, and as such makes an excellent candidate for the technology that glues together all of our other bits and pieces of technology.  But, as it is in it&#039;s relative infancy, there are some potential risks.  These are rapidly being addressed technically, and given a few more years of well rounded practical implementations, many of these issues will be addressed.  Although I wont go into detail in this post, I suggest having a look at some of the open source options available, including:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.sopera.com/&quot;&gt;SOPERA&lt;/a&gt; - very open modular design, with a strong plugin architecture, with integrations to many other software components, including Microsoft .NET - this is the product behind Eclipse Swordfish.&lt;br /&gt;
&lt;a href=&quot;http://www.jboss.com/products/platforms/soa/&quot;&gt;JBoss&lt;/a&gt; - a well known middleware/application server vendor with parent company Redhat.  A well rounded offering, though slightly immature ESB.&lt;/p&gt;

&lt;p&gt;There are others (e.g. Apache FUSE), though I&#039;ll save the details for another day - check out the above and see how it may suit your needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The second point&lt;/strong&gt; is the question of whether you are really doing pure SOA or not, or whether you&#039;re either doing application integration (not too dissimilar in objective, but different in concept) or just &#039;web services&#039;.  Have a think about that... what exactly is SOA to you?  And do you think everyone else thinks the same?  Feel free to post your thoughts below...&lt;/p&gt;


&lt;p&gt;&lt;em&gt;The full Q&amp;amp;A from linkedin here:&lt;/em&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.linkedin.com/answers/technology/enterprise-software/TCH_ENT/441250-2894850?browseIdx=1&amp;amp;sik=1239049806947&quot;&gt;http://www.linkedin.com/answers/technology/enterprise-software/TCH_ENT/441250-2894850?browseIdx=1&amp;amp;sik=1239049806947&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/simple-advice-for-choosing-an-esb&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>I thought I would share a recent question that was raised on LinkedIn, which asked:</p>

<blockquote>
<p><em><strong>Starting the Holy Wars on ESB? Who brings the best package deal to the table i.e IBM, MSFT...... Look at this way " A mid sized cash crunched has to implement ESB what are the options it has" or rather who should it be married to. Any thoughts</strong></em></p>

<p>Tons of ESB from various players are in the market IBM, MSFT, Oracle , SAP but remember its a cash crunched company which requires the ESB. I can provide more details on the technical side. The idea is to throw open the debate to get various perspective. </p>
</blockquote>

<p>Well, let's forget for the moment that the question was raised by a Microsoft employee, and focus more on the general principle of the question... What should companies look for in an <a href="http://en.wikipedia.org/wiki/Enterprise_service_bus">ESB</a>?  In my brief answer, I aim to get across the point that asking which ESB vendor you should be "Married to" is very much the wrong question to ask, and to consider that there is more to solving this problem intelligently (and thus cost effectively) than simply 'buying technology'. No single technology will solve your problem out of the box, so be careful not to expect or ask it to do so.  </p>

<p>Here's the Answer in full:</p>

<blockquote>
<p>As always... understand the problem first...</p>

<p>Step 1: Understand the problem you are trying to solve (e.g. Imperatives, Current Pain Points, As-Is Landscape, Use Cases, etc)<br />
Step 2: Design a Target Architecture (NOT based on a particular technology) that solves this problem, including reference models, design patterns, architecture paradigms, principles, etc<br />
Step 3: Create a high level Roadmap to get from your current environment to your target architecture<br />
Step 4: Now... Search for a technology that will support this need.</p>

<p>I would highly recommend not starting by talking to vendors about how they will solve your problem. Strangely enough, their products always have the answer :-)</p>

<p>ok.. let's look at what integration is all about:</p>

<p>Openness<br />
Interoperability<br />
Standardisation<br />
Flexibility</p>

<p>- This is where you need to really think about why you have an integration problem in the first place... closed, insular approaches to application design. This indicates that we want an OPEN and INTEROPERABLE environment which is based on STANDARDS to give you FLEXIBILITY.</p>

<p>The problem with a lot of products on the market if not understood or used properly is that you can very soon become (in your words) "Married" to that vendor's solution. This destroys the core principles of what integration is all about - you are simply adding the same problem on top of the original problems.</p>

<p>In many ways the open source integration solutions (incl. ESBs - e.g. SOPERA (commercial and more advanced version of Eclipse Swordfish), Apache FUSE, JBoss,etc) lend themselves to these principles very well, however this does not guarantee they will fit your need, or perform to the level of some COTS/Closed Source options.</p>

<p>Additionally, you need to consider that properly integrating your environment is not just about purchasing / implementing an ESB. This is just one component of the overall solution, which should consider the need for MDM, Data Architecture and Canonicalisation, Portals, Business Rules, Registry/Repository, Modelling Tools, Business Process Management and Orchestration, amongst others. The commercial vendors will be more than willing to sell you complete stacks for these things, but be prepared to do things their way, and have a certain amount of lock-in to that vendor.</p>

<p>As you work there, I'm sure you realise that Microsoft is very Microsoft focused, so is only really sensible for Microsoft only environments. However, your recent deal with SOPERA now gives support for both native .NET and Java environments. Maybe there is hope...</p>

<p>Oracle and SAP have some good concepts, but unfortunately they are again very insular - if you only have SAP then XI will be wonderful for you, same with Oracle Fusion and their AIA offering - extending outside the environment is possible, but often ugly.</p>

<p>IBM is (imho) conceptually better at being application/solution agnostic, as it doesn't sell applications to integrate, therefore focuses on supporting a diverse range of approaches. However, they have a history of a somewhat convoluted and overlapping solution set.</p>

<p>Webmethods provides you with a well integrated set of tools and features, again application agnostic, though it's sweet spot is Process Management, and isn't the most open/standards compliant.</p>

<p>If a company is really strapped for cash... then an open source option may be best. But you may have to work harder to get a complete solution up and running.</p>

<p>You can get all of the components to integrate your environment for free - but you have to implement them, they may not be that pretty/easy to use, or performant, and if you choose not to pay for ongoing support then you are putting your company at risk.</p>

<p>You also have to ask yourself if you are really doing pure SOA, or whether you are needing to do application integration...</p>

<p>above all, the right architecture will win over a technology choice</p>
</blockquote>

<p>So, the answer was as you would expect for a general Q&amp;A site - relatively simple/brief (there is a post size limit!) and a little on the generic side to cater for the limited information available.  </p>

<p>I touch briefly on a couple of points I want to highlight here.  </p>

<p><strong>The first point</strong> being the potential benefit but also risk of using Open Source integration technologies.  Put simply, open source's core principles are very much aligned with those of integration, and as such makes an excellent candidate for the technology that glues together all of our other bits and pieces of technology.  But, as it is in it's relative infancy, there are some potential risks.  These are rapidly being addressed technically, and given a few more years of well rounded practical implementations, many of these issues will be addressed.  Although I wont go into detail in this post, I suggest having a look at some of the open source options available, including:</p>

<p><a href="http://www.sopera.com/">SOPERA</a> - very open modular design, with a strong plugin architecture, with integrations to many other software components, including Microsoft .NET - this is the product behind Eclipse Swordfish.<br />
<a href="http://www.jboss.com/products/platforms/soa/">JBoss</a> - a well known middleware/application server vendor with parent company Redhat.  A well rounded offering, though slightly immature ESB.</p>

<p>There are others (e.g. Apache FUSE), though I'll save the details for another day - check out the above and see how it may suit your needs.</p>

<p><strong>The second point</strong> is the question of whether you are really doing pure SOA or not, or whether you're either doing application integration (not too dissimilar in objective, but different in concept) or just 'web services'.  Have a think about that... what exactly is SOA to you?  And do you think everyone else thinks the same?  Feel free to post your thoughts below...</p>


<p><em>The full Q&amp;A from linkedin here:</em><br />
<a href="http://www.linkedin.com/answers/technology/enterprise-software/TCH_ENT/441250-2894850?browseIdx=1&amp;sik=1239049806947">http://www.linkedin.com/answers/technology/enterprise-software/TCH_ENT/441250-2894850?browseIdx=1&amp;sik=1239049806947</a></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/simple-advice-for-choosing-an-esb">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/simple-advice-for-choosing-an-esb#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/Architect/?tempskin=_rss2&#38;disp=comments&#38;p=385</wfw:commentRss>
		</item>
				<item>
			<title>Office Inspiration Quotes</title>
			<link>http://blogs.lessthandot.com/index.php/ITProfessionals/PolicyStandards/office-inspiration-quotes</link>
			<pubDate>Fri, 03 Oct 2008 15:20:58 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="alt">Ethics &amp; IT</category>
<category domain="alt">IT Service Management</category>
<category domain="main">Policy &amp; Standards</category>			<guid isPermaLink="false">165@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;A few tag lines for your motivational posters at work&amp;#8230; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rome did not create a great empire by having meetings, they did it by killing all those who opposed them.&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;If you can stay calm, while all around you is chaos&amp;#8230; then you probably haven&amp;#8217;t completely understood the seriousness of the situation.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Doing a job RIGHT the first time gets the job done. Doing the job WRONG fourteen times gives you job security.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Eagles may soar, but weasels don&amp;#8217;t get sucked into jet engines.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Artificial Intelligence is no match for Natural Stupidity&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;A person who smiles in the face of adversity&amp;#8230; probably has a scapegoat.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Plagiarism saves time.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;If at first you don&amp;#8217;t succeed, try management.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Never put off until tomorrow what you can avoid altogether.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;TEAMWORK&amp;#8230; means never having to take all the blame yourself.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;The beatings will continue until morale improves.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Never underestimate the power of very stupid people in large groups.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;We waste time, so you don&amp;#8217;t have to.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Hang in there, retirement is only thirty years away!&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Go the extra mile. It makes your boss look like an incompetent slacker.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;A snooze button is a poor substitute for no alarm clock at all.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;When the going gets tough, the tough take a coffee break.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;INDECISION is the key to FLEXIBILITY.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Succeed in spite of management.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Aim Low, Reach Your Goals, Avoid Disappointment.&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/ITProfessionals/PolicyStandards/office-inspiration-quotes&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>A few tag lines for your motivational posters at work&#8230; </p>

<ul>
<li>Rome did not create a great empire by having meetings, they did it by killing all those who opposed them.<br /></li>

<li>If you can stay calm, while all around you is chaos&#8230; then you probably haven&#8217;t completely understood the seriousness of the situation.<br /> </li>

<li>Doing a job RIGHT the first time gets the job done. Doing the job WRONG fourteen times gives you job security.<br /> </li>

<li>Eagles may soar, but weasels don&#8217;t get sucked into jet engines.<br /> </li>

<li>Artificial Intelligence is no match for Natural Stupidity<br /> </li>

<li>A person who smiles in the face of adversity&#8230; probably has a scapegoat.<br /> </li>

<li>Plagiarism saves time.<br /> </li>

<li>If at first you don&#8217;t succeed, try management.<br /> </li>

<li>Never put off until tomorrow what you can avoid altogether.<br /> </li>

<li>TEAMWORK&#8230; means never having to take all the blame yourself.<br /> </li>

<li>The beatings will continue until morale improves.<br /> </li>

<li>Never underestimate the power of very stupid people in large groups.<br /> </li>

<li>We waste time, so you don&#8217;t have to.<br /> </li>

<li>Hang in there, retirement is only thirty years away!<br /> </li>

<li>Go the extra mile. It makes your boss look like an incompetent slacker.<br /> </li>

<li>A snooze button is a poor substitute for no alarm clock at all.<br /> </li>

<li>When the going gets tough, the tough take a coffee break.<br /> </li>

<li>INDECISION is the key to FLEXIBILITY.<br /> </li>

<li>Succeed in spite of management.<br /> </li>

<li>Aim Low, Reach Your Goals, Avoid Disappointment.</li>
</ul><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/ITProfessionals/PolicyStandards/office-inspiration-quotes">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/ITProfessionals/PolicyStandards/office-inspiration-quotes#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/ITProfessionals/?tempskin=_rss2&#38;disp=comments&#38;p=165</wfw:commentRss>
		</item>
				<item>
			<title>CentOS, Postfix, MySQL and a Typo</title>
			<link>http://blogs.lessthandot.com/index.php/SysAdmins/OS/Linux/centos-postfix-mysql-and-a-typo</link>
			<pubDate>Fri, 05 Sep 2008 20:06:52 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="main">Linux</category>
<category domain="alt">RHEL</category>			<guid isPermaLink="false">136@http://blogs.lessthandot.com/</guid>
						<description>&lt;h1&gt;A little lesson in typo-trauma&lt;/h1&gt;
&lt;p&gt;Today I finally got round to doing some admin on my primary home server, which (amongst many things) is my main mail server.  After dusting a few cobwebs away, checking nobody had broken any of the furniture and such, I decided to run yum to get the latest updates (it had been almost a month since the last time I checked &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/graybigeek.gif&quot; title=&quot;88|&quot; alt=&quot;88|&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt; but still, at least now it was about to be updated to all the shiny sparkly new things that CentOS had released for me&amp;#8230;&lt;/p&gt;

&lt;p&gt;And it did, it came up with about 5 or 6 updates, including an update to postfix. Great.  So, it finished in about a minute or two and I went on about my evening.  All was happy in the land of the ignorant.&lt;/p&gt;

&lt;p&gt;Ignorant, that is, until I decided to send an email to my dear old mum to give her an update on the list of laptops I was recommending for her (I know, I&amp;#8217;m so thoughtful &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/icon_biggrin.gif&quot; title=&quot;:D&quot; alt=&quot;:D&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt;).  At which point my squirrelmail (webmail) froze.. you see, I&amp;#8217;m currently re-decorating my study, so have moved my main workstation into another room, and as such it&amp;#8217;s not in use.. and my other non-work laptop is, er, recovering from, er, how do you say it? A little &amp;#8216;rinse&amp;#8217; in the bath&amp;#8230; so, work laptop it is, and webmail access only&amp;#8230; &lt;/p&gt;

&lt;p&gt;I thought maybe it was my damn windows wifi connection at first because it has been such a problem the last few days.. (I can&amp;#8217;t wait to get back to my linux environments, this windows only stuff is giving me a serious heart condition.)  Anyway, after a prod and a poke it seemed that it might be the mail server&amp;#8230;&lt;/p&gt;

&lt;h2&gt;Determining the problem&lt;/h2&gt;
&lt;p&gt;So, I checked the mail server logs and discovered&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;text&quot; id=&quot;cb13510&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;[root@phantom ~]# tail /var/log/maillog&lt;br /&gt;&amp;#8230;&lt;br /&gt;&amp;#8230;&lt;br /&gt;phantom postfix/smtpd[8736]: fatal: unsupported dictionary type: mysql&lt;br /&gt;&amp;#8230;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb62831&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;mmmm&amp;#8230; now, that looks familiar.. wasn&amp;#8217;t that a problem I faced when setting up this mail server?  The problem that centos repositories only provide the standard postfix rpm which doesn&amp;#8217;t have mysql support compiled in?  But, it has been working for ages.. why is it failing now ?  Hold on.. let me check what exactly was updated again recently&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;text&quot; id=&quot;cb8671&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;[root@phantom ~]# tail /var/log/yum.log&lt;br /&gt;&amp;#8230;&lt;br /&gt;&amp;#8230;&lt;br /&gt;Updated: postfix - 2:2.3.3-2.1.el5_2.i386&lt;br /&gt;&amp;#8230;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb63688&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ahhhh&amp;#8230; bugger.&lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/icon_cry.gif&quot; title=&quot;:&#039;(&quot; alt=&quot;:&#039;(&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt;&lt;/p&gt;

&lt;h2&gt;Path of enlightenment&lt;/h2&gt;
&lt;p&gt;OK&amp;#8230; now I&amp;#8217;m thinking that some stupid numpty has released the wrong rpm in the wrong repository, because I know that I set things up originally to exclude the main repositories for postfix updates and only get it from the centosplus repository. Of course I did. I&amp;#8217;m sure. I think. mmmmm&amp;#8230; ok, let me check&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;text&quot; id=&quot;cb48075&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;[root@phantom ~]# vi /etc/yum.repos.d/CentOS-Base.repo&lt;br /&gt;&amp;#8230;&lt;br /&gt;&amp;#8230;&lt;br /&gt;#released updates&lt;br /&gt;[updates]&lt;br /&gt;name=CentOS-$releasever - Updates&lt;br /&gt;mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;amp;amp;arch=$basearch&amp;amp;amp;repo=updates&lt;br /&gt;#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/&lt;br /&gt;gpgcheck=1&lt;br /&gt;gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5&lt;br /&gt;priority=1&lt;br /&gt;exclude=kernel* posfix* &amp;nbsp; &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;#8212;&amp;#8212;looky at what we have here..&lt;br /&gt;&amp;#8230;&lt;br /&gt;&amp;#8230;&lt;br /&gt;[centosplus]&lt;br /&gt;name=CentOS-$releasever - Plus&lt;br /&gt;mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;amp;amp;arch=$basearch&amp;amp;amp;repo=centosplus&lt;br /&gt;#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/&lt;br /&gt;gpgcheck=1&lt;br /&gt;enabled=1&lt;br /&gt;gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5&lt;br /&gt;priority=2&lt;br /&gt;includepkgs=kernel* postfix*&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb80990&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ooops.  Can you spot it? &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/grayyes.gif&quot; title=&quot;:yes:&quot; alt=&quot;:yes:&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt; Yep, exactly - every entry apart from the updates was excluding &amp;#8220;postfix&quot;, whilst the updates were excluding &amp;#8220;posfix&quot;.. &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/grayno.gif&quot; title=&quot;:no:&quot; alt=&quot;:no:&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt; &lt;/p&gt;

&lt;h2&gt;Fixing the shame..&lt;/h2&gt;
&lt;p&gt;That, my friend, is the scourge of bugs everywhere.. the humble typo. ah well. Lesson learnt.. now just to download the previous centosplus package for postfix with mysql built in and re-install it (and fix that damn typo):&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;text&quot; id=&quot;cb62277&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;[root@phantom ~]# wget http://www.mirrorservice.org/sites/mirror.centos.org/5.2/centosplus/i386/RPMS/postfix-2.3.3-2.el5.centos.mysql_pgsql.i386.rpm&lt;br /&gt;[root@phantom ~]# rpm -Uvh &amp;#8212;-replacepkgs &amp;#8212;-force postfix-2.3.3-2.el5.centos.mysql_pgsql.i386.rpm&lt;br /&gt;[root@phantom ~]# sed -i &amp;#8217;s/posfix/postfix/g&amp;#8217; /etc/yum.repos.d/CentOS-Base.repo&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb17306&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;phew&amp;#8230; mail server back up and working again.  I thought for a brief second that it was going to be a major problem, but, thankfully, a download + install to rollback and a correction of a typo later.. and I&amp;#8217;m back up and running :-)  A lesson in scrutiny of important configuration data has been learnt..&lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/icon_lalala.gif&quot; title=&quot;:lalala:&quot; alt=&quot;:lalala:&quot; class=&quot;middle&quot; width=&quot;26&quot; height=&quot;15&quot; /&gt; until the next time.. &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/graysmilewinkgrin.gif&quot; title=&quot;;D&quot; alt=&quot;;D&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/SysAdmins/OS/Linux/centos-postfix-mysql-and-a-typo&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<h1>A little lesson in typo-trauma</h1>
<p>Today I finally got round to doing some admin on my primary home server, which (amongst many things) is my main mail server.  After dusting a few cobwebs away, checking nobody had broken any of the furniture and such, I decided to run yum to get the latest updates (it had been almost a month since the last time I checked <img src="http://blogs.lessthandot.com/rsc/smilies/graybigeek.gif" title="88|" alt="88|" class="middle" width="15" height="15" /> but still, at least now it was about to be updated to all the shiny sparkly new things that CentOS had released for me&#8230;</p>

<p>And it did, it came up with about 5 or 6 updates, including an update to postfix. Great.  So, it finished in about a minute or two and I went on about my evening.  All was happy in the land of the ignorant.</p>

<p>Ignorant, that is, until I decided to send an email to my dear old mum to give her an update on the list of laptops I was recommending for her (I know, I&#8217;m so thoughtful <img src="http://blogs.lessthandot.com/rsc/smilies/icon_biggrin.gif" title=":D" alt=":D" class="middle" width="15" height="15" />).  At which point my squirrelmail (webmail) froze.. you see, I&#8217;m currently re-decorating my study, so have moved my main workstation into another room, and as such it&#8217;s not in use.. and my other non-work laptop is, er, recovering from, er, how do you say it? A little &#8216;rinse&#8217; in the bath&#8230; so, work laptop it is, and webmail access only&#8230; </p>

<p>I thought maybe it was my damn windows wifi connection at first because it has been such a problem the last few days.. (I can&#8217;t wait to get back to my linux environments, this windows only stuff is giving me a serious heart condition.)  Anyway, after a prod and a poke it seemed that it might be the mail server&#8230;</p>

<h2>Determining the problem</h2>
<p>So, I checked the mail server logs and discovered&#8230;</p>
<div class="codebox"><div class="codeheader"><span>text</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb3183'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb3183','cb20024'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="text" id="cb3183" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">[root@phantom ~]# tail /var/log/maillog</li><li style="" class="li2">&#8230;</li><li style="" class="li1">&#8230;</li><li style="" class="li2">phantom postfix/smtpd[8736]: fatal: unsupported dictionary type: mysql</li><li style="" class="li1">&#8230;</li></ol></div><div id="cb20024" style="display: none; color: red;"></div></div></div>
<p>mmmm&#8230; now, that looks familiar.. wasn&#8217;t that a problem I faced when setting up this mail server?  The problem that centos repositories only provide the standard postfix rpm which doesn&#8217;t have mysql support compiled in?  But, it has been working for ages.. why is it failing now ?  Hold on.. let me check what exactly was updated again recently&#8230;</p>
<div class="codebox"><div class="codeheader"><span>text</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb61880'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb61880','cb76576'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="text" id="cb61880" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">[root@phantom ~]# tail /var/log/yum.log</li><li style="" class="li2">&#8230;</li><li style="" class="li1">&#8230;</li><li style="" class="li2">Updated: postfix - 2:2.3.3-2.1.el5_2.i386</li><li style="" class="li1">&#8230;</li></ol></div><div id="cb76576" style="display: none; color: red;"></div></div></div>
<p>Ahhhh&#8230; bugger.<img src="http://blogs.lessthandot.com/rsc/smilies/icon_cry.gif" title=":'(" alt=":'(" class="middle" width="15" height="15" /></p>

<h2>Path of enlightenment</h2>
<p>OK&#8230; now I&#8217;m thinking that some stupid numpty has released the wrong rpm in the wrong repository, because I know that I set things up originally to exclude the main repositories for postfix updates and only get it from the centosplus repository. Of course I did. I&#8217;m sure. I think. mmmmm&#8230; ok, let me check&#8230;</p>
<div class="codebox"><div class="codeheader"><span>text</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb89764'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb89764','cb32195'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="text" id="cb89764" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">[root@phantom ~]# vi /etc/yum.repos.d/CentOS-Base.repo</li><li style="" class="li2">&#8230;</li><li style="" class="li1">&#8230;</li><li style="" class="li2">#released updates</li><li style="" class="li1">[updates]</li><li style="" class="li2">name=CentOS-$releasever - Updates</li><li style="" class="li1">mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=updates</li><li style="" class="li2">#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/</li><li style="" class="li1">gpgcheck=1</li><li style="" class="li2">gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5</li><li style="" class="li1">priority=1</li><li style="" class="li2">exclude=kernel* posfix* &nbsp; &lt;&lt;&lt;&lt;&lt;&lt;&#8212;&#8212;looky at what we have here..</li><li style="" class="li1">&#8230;</li><li style="" class="li2">&#8230;</li><li style="" class="li1">[centosplus]</li><li style="" class="li2">name=CentOS-$releasever - Plus</li><li style="" class="li1">mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=centosplus</li><li style="" class="li2">#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/</li><li style="" class="li1">gpgcheck=1</li><li style="" class="li2">enabled=1</li><li style="" class="li1">gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5</li><li style="" class="li2">priority=2</li><li style="" class="li1">includepkgs=kernel* postfix*</li></ol></div><div id="cb32195" style="display: none; color: red;"></div></div></div>

<p>Ooops.  Can you spot it? <img src="http://blogs.lessthandot.com/rsc/smilies/grayyes.gif" title=":yes:" alt=":yes:" class="middle" width="15" height="15" /> Yep, exactly - every entry apart from the updates was excluding &#8220;postfix", whilst the updates were excluding &#8220;posfix".. <img src="http://blogs.lessthandot.com/rsc/smilies/grayno.gif" title=":no:" alt=":no:" class="middle" width="15" height="15" /> </p>

<h2>Fixing the shame..</h2>
<p>That, my friend, is the scourge of bugs everywhere.. the humble typo. ah well. Lesson learnt.. now just to download the previous centosplus package for postfix with mysql built in and re-install it (and fix that damn typo):</p>

<div class="codebox"><div class="codeheader"><span>text</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb83515'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb83515','cb11274'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="text" id="cb83515" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">[root@phantom ~]# wget http://www.mirrorservice.org/sites/mirror.centos.org/5.2/centosplus/i386/RPMS/postfix-2.3.3-2.el5.centos.mysql_pgsql.i386.rpm</li><li style="" class="li2">[root@phantom ~]# rpm -Uvh &#8212;-replacepkgs &#8212;-force postfix-2.3.3-2.el5.centos.mysql_pgsql.i386.rpm</li><li style="" class="li1">[root@phantom ~]# sed -i &#8217;s/posfix/postfix/g&#8217; /etc/yum.repos.d/CentOS-Base.repo</li></ol></div><div id="cb11274" style="display: none; color: red;"></div></div></div>

<p>phew&#8230; mail server back up and working again.  I thought for a brief second that it was going to be a major problem, but, thankfully, a download + install to rollback and a correction of a typo later.. and I&#8217;m back up and running :-)  A lesson in scrutiny of important configuration data has been learnt..<img src="http://blogs.lessthandot.com/rsc/smilies/icon_lalala.gif" title=":lalala:" alt=":lalala:" class="middle" width="26" height="15" /> until the next time.. <img src="http://blogs.lessthandot.com/rsc/smilies/graysmilewinkgrin.gif" title=";D" alt=";D" class="middle" width="15" height="15" /></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/SysAdmins/OS/Linux/centos-postfix-mysql-and-a-typo">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/SysAdmins/OS/Linux/centos-postfix-mysql-and-a-typo#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/SysAdmins/?tempskin=_rss2&#38;disp=comments&#38;p=136</wfw:commentRss>
		</item>
				<item>
			<title>Danger in Design: Why bother with Architecture ?</title>
			<link>http://blogs.lessthandot.com/index.php/Architect/IntroductionArchitectureDesign/why-bother-with-architecture</link>
			<pubDate>Mon, 30 Jun 2008 10:36:11 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="alt">Hardware &amp; Infrastructure Design</category>
<category domain="alt">Designing Software</category>
<category domain="alt">Designing Multi-Application Solutions</category>
<category domain="alt">Enterprise Architecture</category>
<category domain="alt">Information &amp; Integration Architecture</category>
<category domain="main">Introduction to Architecture &amp; Design</category>			<guid isPermaLink="false">48@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;Creativity is a wonderful thing.  It&amp;#8217;s also something different for each of us, which is why sometimes our perspectives on the world can produce conflicting ideas on what is the right way and the wrong way to do things.  This is a very common facet of the IT world, in particular making computer software, solutions and services.  &lt;/p&gt;

&lt;h1&gt;We don&amp;#8217;t need architects!  &amp;#8230;Do we ?&lt;/h1&gt;

&lt;p&gt;It&amp;#8217;s important for us to remember that we develop software to &amp;#8220;do something&amp;#8221; that we want it to do. In which case we need to continually review the success of that software or solution by evaluating it&amp;#8217;s ability to meet our needs.  But who gets to say what those needs are, and how well they are met?  More importantly, what makes IT solutions good or bad ?  Is it how big they are ? Or how easy to use they are ?  Or maybe how efficiently they operate ? Or what about how well measured and managed they are ?  Or even how easy it is to change the way they work ?  What about all of the above, and much more&amp;#8230;?&lt;/p&gt;

&lt;p&gt;Getting to a point where a) you understand what success looks like, and b) you have a solution that delivers that success, can be achieved by using an Architect to facilitate and coordinate the construction of a design and resulting solution.  But that&amp;#8217;s not always what happens. Apart from the many varying definitions of an architect&amp;#8217;s role (and the different types of architects.. e.g. Enterprise Architect, Solutions Architect, Application Architect, Technical Architect,etc), there&amp;#8217;s also often a perception from developers that architects are generally away with the fairies, dreaming up blue sky designs that are just not grounded in reality or worthwhile bothering with.  Additionally, a lot of businesses (too many unfortunately), just don&amp;#8217;t understand the value of using an architect&amp;#8230; Why pay someone to design the solution, when you&amp;#8217;ve got business systems analysts and developers that can work it out between themselves ?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;/p&gt;
&lt;h1&gt;Winchester Mystery House, San Jose, CA&lt;/h1&gt;

&lt;p&gt;Why indeed&amp;#8230;  well, I thought it may be useful to post a little analogy with the &amp;#8216;real world&amp;#8217; - where architects and builders have been working together for many years to produce wonderful (and not so wonderful) buildings.&lt;/p&gt;

&lt;p&gt;Firstly, let me introduce the Winchester Mystery House, of the Winchester Guns family fame:&lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://blogs.lessthandot.com/media/blogs/Architect/images/winchesterhouse.png&quot; alt=&quot;&quot; title=&quot;&quot; width=&quot;440&quot; height=&quot;286&quot; /&gt;&lt;/div&gt;&lt;p&gt; &lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Functionally Rich&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;160 Rooms&lt;/li&gt;
&lt;li&gt;47 Fireplaces&lt;/li&gt;
&lt;li&gt;17 Chimneys&lt;/li&gt;
&lt;li&gt;6 kitchens&lt;/li&gt;
&lt;li&gt;10,000 windows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;State of the Art Technology (at the time)&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wall Insulation&lt;/li&gt;
&lt;li&gt;Push button gas lights&lt;/li&gt;
&lt;li&gt;No-clog sink patent&lt;/li&gt;
&lt;li&gt;Intercoms&lt;/li&gt;
&lt;li&gt;Modern Heating &amp;amp; Sewage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Total Cost&lt;/h2&gt;

&lt;p style=&quot;font-size: 1em;&quot;&gt;$5.5m (~&lt;span style=&quot;font-weight:800;&quot;&gt;$300m&lt;/span&gt; today) over &lt;span style=&quot;font-weight: 800;&quot;&gt;38 years&lt;/span&gt; (1884 - 1922)&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;But&amp;#8230; &lt;span style=&quot;color:#ff0000;&quot;&gt;No Interoperability&lt;/span&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;65 doors to blank walls&lt;/li&gt;
&lt;li&gt;13 abandoned staircases&lt;/li&gt;
&lt;li&gt;24 skylights in floors&lt;/li&gt;
&lt;li&gt;Rooms &amp;#8220;build-around&amp;#8221; other rooms&lt;/li&gt;
&lt;li&gt;Enough keys to fill 2 large buckets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Ouch.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Due to the division of labour&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Builders: 147&lt;/li&gt;
&lt;li&gt;Architects: &lt;span style=&quot;font-weight:800;text-decoration:underline;&quot;&gt;0&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Sound Familiar ?&lt;/h2&gt;

&lt;p&gt;We&amp;#8217;ve all worked on a project with something like this.  Usually because the system wasn&amp;#8217;t really &amp;#8216;designed&amp;#8217; it just &amp;#8216;happened&amp;#8217;.  Maybe if we spent a little more time designing, and a little less building things would work a little better.  I bet they had some very talented builders working on this too - but their perspective wasn&amp;#8217;t to make a solid overall design, it was to simply get on and do what they were tasked with.. sound familiar ?  How often do users come to a technical forum and ask for a solution to their problem to be faced with answers like &amp;#8220;you need to normalise your database&amp;#8221; etc, to which they simply retort &amp;#8220;that&amp;#8217;s not part of this project&amp;#8221; ?  Too many, but sadly understandably so.&lt;/p&gt;

&lt;p&gt;
A favourite Project Manager quote is &amp;#8220;Failing to Plan is Planning to Fail&quot;.  And they are generally right - not having a consistent, well thought out and planned design can lead to very complicated and difficult to manage, change or even use software.  Most architects will have come across solutions or applications that weren&amp;#8217;t &amp;#8216;designed&amp;#8217; and just evolved, and will know just how much of a problem those applications really are.  This is &lt;a href=&quot;http://www.sciam.com/article.cfm?id=softwares-dirty-little-secret&amp;amp;sc=rss&quot;&gt;Software&amp;#8217;s Dirty Little Secret&lt;/a&gt; - many systems have just &amp;#8220;happened&amp;#8221; without real thought to the design of the software.  And for that matter, haven&amp;#8217;t thought about the application as part of a composite solution either - this is actually quite rare, even today with all the SOA hype of the last few years.
&lt;/p&gt;

&lt;h3&gt;The Architect&amp;#8217;s hand&lt;/h3&gt;
&lt;p&gt;
Sometimes it might seem strange to developers that an architect wants to make a project use standards compliant technologies, standardised, re-usable or existing components, such as a Business Rules Engine, Reporting &amp;amp; BI, Service Bus, Messaging Gateway, Portlets, etc - but this is what architecture is all about - not thinking about the one, single application or issue, but thinking about it&amp;#8217;s co-existence in a much bigger world - not just the here and now functional requirements, but tomorrows new direction and demands.  Simplifying and standardising, Rationalising and Re-Using, Conceptualising and Componentising&amp;#8230; the best architectures are easily understood, simple solutions that achieve a kind of elegance in concept and practicality in implementation.
&lt;/p&gt;

&lt;p&gt;
There are several methodologies to use for developing an architecture - personally I use TOGAF which is more for generalist Enterprise &amp;amp; Solutions Architecture development but the &lt;acronym title=&quot;Architecture Development Methodology&quot;&gt;ADM&lt;/acronym&gt; can be applied in concept to designing most solutions/systems/applications.
&lt;/p&gt;

&lt;h2&gt;So we do need to &amp;#8220;do architecture&amp;#8221; then?&lt;/h2&gt;

&lt;p&gt;In short, Yes.  But how you actually &amp;#8220;do architecture&amp;#8221; depends greatly on the context.  There is a simple lesson here - architecture is all about simplifying and standardising the problem domain to provide an efficient, re-usable and consistent answer.  The important difference between a formal &amp;#8220;architect&amp;#8221; and a &amp;#8220;builder&amp;#8221; is not of technical expertise, but of perspective, so don&amp;#8217;t assume that your most expert Java Programmer is naturally the architect to your solutions.  This doesn&amp;#8217;t mean that an architect of all types shouldn&amp;#8217;t possess good technical abilities and experience.&lt;/p&gt;

&lt;p&gt;There is a nice &lt;a href=&quot;http://msdn.microsoft.com/en-us/arcjournal/cc505968.aspx&quot;&gt;overview of the different types of Architects&lt;/a&gt; at the Microsoft Architecture Journal (which is often surprisingly not MS biased) written by IASA Sweden, however this misses out the technical/infrastructure architect from their Roles diagram, which is a key architect in any IT implementation.  Also, another article on the Architect Journal talks about &lt;a href=&quot;http://msdn.microsoft.com/en-us/arcjournal/cc505974.aspx&quot;&gt;what an architect actually is&lt;/a&gt;, however is a little Software Architect focused.  Both interesting reads, especially for non-architects to understand how to &amp;#8216;use&amp;#8217; an architect (well, work with one effectively at least &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/icon_wink.gif&quot; title=&quot;;)&quot; alt=&quot;;)&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt; ). &lt;/p&gt;

&lt;h3&gt;Some Exceptions..&lt;/h3&gt;
&lt;p&gt;There are times when a formal architecture process is more of a hindrance than a help, and that is in R &amp;amp; D contexts where rapid prototyping and proof of concept solutions are all about unrestricted creativity - in these cases architecture experience and knowledge is a good backdrop to help organise and focus ideas and channel that creativity into creating something unique.  (But&amp;#8230; Remember that this is not production ready, it is a prototype in need of architectural design to create a production capable solution.  This is where too many rapid prototyping approaches get a bad name.)&lt;/p&gt;

&lt;p&gt;
One thing I will write about soon is the risk of &amp;#8216;over-designing&amp;#8217; a solution, because sometimes it is easy to get carried away with design-pattern addiction and framework-itis and actually miss the whole point of the exercise.  Doing &amp;#8216;too much&amp;#8217; architecture can be as bad, and even worse than doing none.
&lt;/p&gt;

&lt;h2&gt;And Finally&amp;#8230;&lt;/h2&gt;
&lt;p&gt;So&amp;#8230; Yes - Sometimes it&amp;#8217;s nice to just set out in your car and drive wherever the wind takes you until the fuel runs out.  But other times, and almost always when it is on &amp;#8216;business time&amp;#8217;, wandering aimlessly in the hope of finding something that might be useful is just not acceptable.  Having that vision, aspiration, direction and roadmap an architecture can bring to your project might seem like a chore and &amp;#8220;impossible&amp;#8221; to achieve to some people.. but how else will you get there, without ever actively and knowingly moving toward it ? Chance ?  Good Luck with that&amp;#8230;&lt;/p&gt;

&lt;p&gt;So, the next time you think about just winging it, and not bothering with architecture, just think about your software product as your own house that you wish to build - would you really just start building ?  Or even just draw up your own plans on visio and ask the builders to &amp;#8217;sort it out&amp;#8217; ?  &lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;N.B. In the Winchester House example, strange as it may seem, the design actually met the brief - the needs of the owner weren&amp;#8217;t really to design an architecturally great building, but just to have something creative to do.. it doesn&amp;#8217;t matter that it wasn&amp;#8217;t consistent, or standardised or even usable - it was the pleasure of doing that was needed, not the objective of greatness in form and function.  But have a think about that&amp;#8230; when was the last time your boss suggested you design something for the fun of it, at the company&amp;#8217;s expense, regardless of whether it results in some sort of throw-away chimera ? &lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/Architect/IntroductionArchitectureDesign/why-bother-with-architecture&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Creativity is a wonderful thing.  It&#8217;s also something different for each of us, which is why sometimes our perspectives on the world can produce conflicting ideas on what is the right way and the wrong way to do things.  This is a very common facet of the IT world, in particular making computer software, solutions and services.  </p>

<h1>We don&#8217;t need architects!  &#8230;Do we ?</h1>

<p>It&#8217;s important for us to remember that we develop software to &#8220;do something&#8221; that we want it to do. In which case we need to continually review the success of that software or solution by evaluating it&#8217;s ability to meet our needs.  But who gets to say what those needs are, and how well they are met?  More importantly, what makes IT solutions good or bad ?  Is it how big they are ? Or how easy to use they are ?  Or maybe how efficiently they operate ? Or what about how well measured and managed they are ?  Or even how easy it is to change the way they work ?  What about all of the above, and much more&#8230;?</p>

<p>Getting to a point where a) you understand what success looks like, and b) you have a solution that delivers that success, can be achieved by using an Architect to facilitate and coordinate the construction of a design and resulting solution.  But that&#8217;s not always what happens. Apart from the many varying definitions of an architect&#8217;s role (and the different types of architects.. e.g. Enterprise Architect, Solutions Architect, Application Architect, Technical Architect,etc), there&#8217;s also often a perception from developers that architects are generally away with the fairies, dreaming up blue sky designs that are just not grounded in reality or worthwhile bothering with.  Additionally, a lot of businesses (too many unfortunately), just don&#8217;t understand the value of using an architect&#8230; Why pay someone to design the solution, when you&#8217;ve got business systems analysts and developers that can work it out between themselves ?</p>
<p><br /> </p>
<h1>Winchester Mystery House, San Jose, CA</h1>

<p>Why indeed&#8230;  well, I thought it may be useful to post a little analogy with the &#8216;real world&#8217; - where architects and builders have been working together for many years to produce wonderful (and not so wonderful) buildings.</p>

<p>Firstly, let me introduce the Winchester Mystery House, of the Winchester Guns family fame:</p>

<div class="image_block"><img src="http://blogs.lessthandot.com/media/blogs/Architect/images/winchesterhouse.png" alt="" title="" width="440" height="286" /></div><p> <br />
<br /></p>

<h2>Functionally Rich</h2>

<ul>
<li>160 Rooms</li>
<li>47 Fireplaces</li>
<li>17 Chimneys</li>
<li>6 kitchens</li>
<li>10,000 windows</li>
</ul>
<p><br /></p>
<h2>State of the Art Technology (at the time)</h2>

<ul>
<li>Wall Insulation</li>
<li>Push button gas lights</li>
<li>No-clog sink patent</li>
<li>Intercoms</li>
<li>Modern Heating &amp; Sewage</li>
</ul>
<p><br /></p>
<h2>Total Cost</h2>

<p style="font-size: 1em;">$5.5m (~<span style="font-weight:800;">$300m</span> today) over <span style="font-weight: 800;">38 years</span> (1884 - 1922)</p>

<p><br /></p>
<h2>But&#8230; <span style="color:#ff0000;">No Interoperability</span></h2>

<ul>
<li>65 doors to blank walls</li>
<li>13 abandoned staircases</li>
<li>24 skylights in floors</li>
<li>Rooms &#8220;build-around&#8221; other rooms</li>
<li>Enough keys to fill 2 large buckets</li>
</ul>

<p><br /></p>
<p>Ouch.</p>
<p><br /></p>

<h2>Due to the division of labour</h2>

<ul>
<li>Builders: 147</li>
<li>Architects: <span style="font-weight:800;text-decoration:underline;">0</span></li>
</ul>

<p><br /></p>


<h2>Sound Familiar ?</h2>

<p>We&#8217;ve all worked on a project with something like this.  Usually because the system wasn&#8217;t really &#8216;designed&#8217; it just &#8216;happened&#8217;.  Maybe if we spent a little more time designing, and a little less building things would work a little better.  I bet they had some very talented builders working on this too - but their perspective wasn&#8217;t to make a solid overall design, it was to simply get on and do what they were tasked with.. sound familiar ?  How often do users come to a technical forum and ask for a solution to their problem to be faced with answers like &#8220;you need to normalise your database&#8221; etc, to which they simply retort &#8220;that&#8217;s not part of this project&#8221; ?  Too many, but sadly understandably so.</p>

<p>
A favourite Project Manager quote is &#8220;Failing to Plan is Planning to Fail".  And they are generally right - not having a consistent, well thought out and planned design can lead to very complicated and difficult to manage, change or even use software.  Most architects will have come across solutions or applications that weren&#8217;t &#8216;designed&#8217; and just evolved, and will know just how much of a problem those applications really are.  This is <a href="http://www.sciam.com/article.cfm?id=softwares-dirty-little-secret&amp;sc=rss">Software&#8217;s Dirty Little Secret</a> - many systems have just &#8220;happened&#8221; without real thought to the design of the software.  And for that matter, haven&#8217;t thought about the application as part of a composite solution either - this is actually quite rare, even today with all the SOA hype of the last few years.
</p>

<h3>The Architect&#8217;s hand</h3>
<p>
Sometimes it might seem strange to developers that an architect wants to make a project use standards compliant technologies, standardised, re-usable or existing components, such as a Business Rules Engine, Reporting &amp; BI, Service Bus, Messaging Gateway, Portlets, etc - but this is what architecture is all about - not thinking about the one, single application or issue, but thinking about it&#8217;s co-existence in a much bigger world - not just the here and now functional requirements, but tomorrows new direction and demands.  Simplifying and standardising, Rationalising and Re-Using, Conceptualising and Componentising&#8230; the best architectures are easily understood, simple solutions that achieve a kind of elegance in concept and practicality in implementation.
</p>

<p>
There are several methodologies to use for developing an architecture - personally I use TOGAF which is more for generalist Enterprise &amp; Solutions Architecture development but the <acronym title="Architecture Development Methodology">ADM</acronym> can be applied in concept to designing most solutions/systems/applications.
</p>

<h2>So we do need to &#8220;do architecture&#8221; then?</h2>

<p>In short, Yes.  But how you actually &#8220;do architecture&#8221; depends greatly on the context.  There is a simple lesson here - architecture is all about simplifying and standardising the problem domain to provide an efficient, re-usable and consistent answer.  The important difference between a formal &#8220;architect&#8221; and a &#8220;builder&#8221; is not of technical expertise, but of perspective, so don&#8217;t assume that your most expert Java Programmer is naturally the architect to your solutions.  This doesn&#8217;t mean that an architect of all types shouldn&#8217;t possess good technical abilities and experience.</p>

<p>There is a nice <a href="http://msdn.microsoft.com/en-us/arcjournal/cc505968.aspx">overview of the different types of Architects</a> at the Microsoft Architecture Journal (which is often surprisingly not MS biased) written by IASA Sweden, however this misses out the technical/infrastructure architect from their Roles diagram, which is a key architect in any IT implementation.  Also, another article on the Architect Journal talks about <a href="http://msdn.microsoft.com/en-us/arcjournal/cc505974.aspx">what an architect actually is</a>, however is a little Software Architect focused.  Both interesting reads, especially for non-architects to understand how to &#8216;use&#8217; an architect (well, work with one effectively at least <img src="http://blogs.lessthandot.com/rsc/smilies/icon_wink.gif" title=";)" alt=";)" class="middle" width="15" height="15" /> ). </p>

<h3>Some Exceptions..</h3>
<p>There are times when a formal architecture process is more of a hindrance than a help, and that is in R &amp; D contexts where rapid prototyping and proof of concept solutions are all about unrestricted creativity - in these cases architecture experience and knowledge is a good backdrop to help organise and focus ideas and channel that creativity into creating something unique.  (But&#8230; Remember that this is not production ready, it is a prototype in need of architectural design to create a production capable solution.  This is where too many rapid prototyping approaches get a bad name.)</p>

<p>
One thing I will write about soon is the risk of &#8216;over-designing&#8217; a solution, because sometimes it is easy to get carried away with design-pattern addiction and framework-itis and actually miss the whole point of the exercise.  Doing &#8216;too much&#8217; architecture can be as bad, and even worse than doing none.
</p>

<h2>And Finally&#8230;</h2>
<p>So&#8230; Yes - Sometimes it&#8217;s nice to just set out in your car and drive wherever the wind takes you until the fuel runs out.  But other times, and almost always when it is on &#8216;business time&#8217;, wandering aimlessly in the hope of finding something that might be useful is just not acceptable.  Having that vision, aspiration, direction and roadmap an architecture can bring to your project might seem like a chore and &#8220;impossible&#8221; to achieve to some people.. but how else will you get there, without ever actively and knowingly moving toward it ? Chance ?  Good Luck with that&#8230;</p>

<p>So, the next time you think about just winging it, and not bothering with architecture, just think about your software product as your own house that you wish to build - would you really just start building ?  Or even just draw up your own plans on visio and ask the builders to &#8217;sort it out&#8217; ?  </p>

<p><br /><br /></p>
<p><em>N.B. In the Winchester House example, strange as it may seem, the design actually met the brief - the needs of the owner weren&#8217;t really to design an architecturally great building, but just to have something creative to do.. it doesn&#8217;t matter that it wasn&#8217;t consistent, or standardised or even usable - it was the pleasure of doing that was needed, not the objective of greatness in form and function.  But have a think about that&#8230; when was the last time your boss suggested you design something for the fun of it, at the company&#8217;s expense, regardless of whether it results in some sort of throw-away chimera ? </em></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/Architect/IntroductionArchitectureDesign/why-bother-with-architecture">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/Architect/IntroductionArchitectureDesign/why-bother-with-architecture#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/Architect/?tempskin=_rss2&#38;disp=comments&#38;p=48</wfw:commentRss>
		</item>
				<item>
			<title>Bazaar Version Control System - better than Subversion ?</title>
			<link>http://blogs.lessthandot.com/index.php/ITProfessionals/SoftwareAndConfigMgmt/bazaar-version-control-system-better-tha</link>
			<pubDate>Mon, 23 Jun 2008 08:41:25 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="main">Software &amp; Configuration Management</category>			<guid isPermaLink="false">63@http://blogs.lessthandot.com/</guid>
						<description>&lt;h2&gt;Version Control?&lt;/h2&gt;
&lt;p&gt;
A Version Control System (VCS) is an essential tool for a development team (or even individual developer) to manage their code.  The more it can allow multiple developers to work together easily on the same code and manage the various states of that code, the better.
&lt;/p&gt;
&lt;p&gt;One of the most popular Version Control systems in the past was CVS, however in recent times this has been superseded by Subversion (SVN), which is a highly popular VCS that is well supported by a variety of client tools and is often embedded within software configuration management applications to manage file versioning (e.g. &lt;a href=&quot;http://trac.edgewall.org/&quot;&gt;trac&lt;/a&gt;, &lt;a href=&quot;http://www.collab.net/&quot;&gt;collabNet&lt;/a&gt;, etc)&lt;/p&gt;


&lt;p&gt;
What is sometimes an issue with SVN is the ability to do local commits for each developer before a full commit to the main branch, making the main branch often unreliable and full of partially complete work, or local developers with limited versioning control etc.  
&lt;/p&gt;

&lt;h2&gt;Bazaar&lt;/h2&gt;
&lt;p&gt;
One VCS tool that tackles this problem is &lt;a href=&quot;http://bazaar-vcs.org/&quot;&gt;Bazaar&lt;/a&gt;, which offers no less than &lt;a href=&quot;http://bazaar-vcs.org/Workflows&quot;&gt;7 different Version Control workflows&lt;/a&gt; depending on your particular scenario.  
&lt;/p&gt;
&lt;p&gt;
Bazaar is developed and used by &lt;a href=&quot;http://canonical.com/&quot;&gt;Canonical &lt;/a&gt;(the Ubuntu people), and has recently &lt;a href=&quot;http://www.theregister.co.uk/2008/06/19/mysql_dumps_bitkeeper/&quot;&gt;claimed Sun&amp;#8217;s MySQL as a new user&lt;/a&gt;.  Bazaar is one of many VCS tools, but it&amp;#8217;s flexibility in workflow patterns is certainly something that makes it an interesting tool to consider.
&lt;/p&gt;

&lt;h2&gt;Further Info&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Revision_control&quot;&gt;General Information on Revision Control&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_revision_control_software&quot;&gt;Comparison of Revision Control Systems&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://bazaar-vcs.org/Documentation&quot;&gt;Bazaar Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/ITProfessionals/SoftwareAndConfigMgmt/bazaar-version-control-system-better-tha&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<h2>Version Control?</h2>
<p>
A Version Control System (VCS) is an essential tool for a development team (or even individual developer) to manage their code.  The more it can allow multiple developers to work together easily on the same code and manage the various states of that code, the better.
</p>
<p>One of the most popular Version Control systems in the past was CVS, however in recent times this has been superseded by Subversion (SVN), which is a highly popular VCS that is well supported by a variety of client tools and is often embedded within software configuration management applications to manage file versioning (e.g. <a href="http://trac.edgewall.org/">trac</a>, <a href="http://www.collab.net/">collabNet</a>, etc)</p>


<p>
What is sometimes an issue with SVN is the ability to do local commits for each developer before a full commit to the main branch, making the main branch often unreliable and full of partially complete work, or local developers with limited versioning control etc.  
</p>

<h2>Bazaar</h2>
<p>
One VCS tool that tackles this problem is <a href="http://bazaar-vcs.org/">Bazaar</a>, which offers no less than <a href="http://bazaar-vcs.org/Workflows">7 different Version Control workflows</a> depending on your particular scenario.  
</p>
<p>
Bazaar is developed and used by <a href="http://canonical.com/">Canonical </a>(the Ubuntu people), and has recently <a href="http://www.theregister.co.uk/2008/06/19/mysql_dumps_bitkeeper/">claimed Sun&#8217;s MySQL as a new user</a>.  Bazaar is one of many VCS tools, but it&#8217;s flexibility in workflow patterns is certainly something that makes it an interesting tool to consider.
</p>

<h2>Further Info</h2>
<ul>
  <li><a href="http://en.wikipedia.org/wiki/Revision_control">General Information on Revision Control</a></li>
  <li><a href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software">Comparison of Revision Control Systems</a></li>
  <li><a href="http://bazaar-vcs.org/Documentation">Bazaar Documentation</a></li>
</ul><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/ITProfessionals/SoftwareAndConfigMgmt/bazaar-version-control-system-better-tha">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/ITProfessionals/SoftwareAndConfigMgmt/bazaar-version-control-system-better-tha#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/ITProfessionals/?tempskin=_rss2&#38;disp=comments&#38;p=63</wfw:commentRss>
		</item>
				<item>
			<title>Information Unity in the Canonical Form</title>
			<link>http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/information-unity-in-the-canonical-form</link>
			<pubDate>Mon, 02 Jun 2008 06:50:28 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="alt">Designing Multi-Application Solutions</category>
<category domain="alt">Enterprise Architecture</category>
<category domain="main">Information &amp; Integration Architecture</category>			<guid isPermaLink="false">31@http://blogs.lessthandot.com/</guid>
						<description>&lt;h2&gt;So what is a CDM ?&amp;#8230; &lt;/h2&gt;

&lt;p&gt;A Canonical Data Model is most simply explained as a standardised way of representing data that generically applies to multiple systems and data models - kind of like the master data model, but for semantics aswell as content.  It can be used as a data model standard template for new systems development, or as an intermediary serialised data format - which is the aspect I&amp;#8217;ll focus on mostly here.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s an Example of using the CDM as an intermediary data format to integrate six systems with different data format requirements: Canonical Data Model&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.damber.net/blog/files/imgs/canonical_diagram_simple.gif&quot; alt=&quot;CDM Example&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In this example, where serialised data is being passed between systems, it uses the standardised format as a middle ground, meaning that each adapter only needs to be able to translate into or out of the CDM format (rather than each individual target/source) for it to be able to understand (and therefore integrate) with other systems &amp;#8216;talking&amp;#8217; in the same context (e.g. a specific functional domain, like shipments, invoices, orders etc).  This creates semantic interoperability between the system by abstracting the differences at the perimeter of the integration solution, and re-using existing components.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;So what ?&lt;/h2&gt;

&lt;p&gt;It&amp;#8217;s not always clear when first thinking about this design why it is so important to the implementation of upstream architectures such as SOA, or why this has such impact on everyday integration.. even the more traditional hub based point-to-point integration patterns.   But hopefully that realisation is starting to emerge, because it really is key to building truly flexible, seamless and invisible integration solutions.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Some of the key objectives&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Maximise Re-Use of Components&lt;/li&gt;
&lt;li&gt;Minimise Redundant Code&lt;/li&gt;
&lt;li&gt;Facilitate the concept of &amp;#8216;Plug-And-Play&amp;#8217; interfaces&lt;/li&gt;
&lt;li&gt;Standardise knowledge, terminology and domain concepts (talk the same language)&lt;/li&gt;
&lt;li&gt;Facilitate SOA through an information architecture (IOA) foundation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Some of the Key Benefits and Advantages&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-weight:800;text-decoration:underline;&quot;&gt;Connect Once, Integrate Many&lt;/span&gt; - once connected to the information network via the canonical adapter, you can communicate with any other connected system as long as it is in context (e.g. order requests aren&amp;#8217;t likely to work with Proof of Delivery)&amp;#8230; but having said that, things do become somewhat adaptable, even out of context&amp;#8230; for example: an order quite often contains customer information and product information, as well as being an outline of the shipment.  With this in mind you *could* (and that doesn&amp;#8217;t mean *should* :-D ) feed a customer master or CRM application with the customer information, a Product Master or Stock Management application with the product information &amp;#8216;just-in-time&amp;#8217; for the order to be processed should the information not have been provided before (unlikely for the product master, but you get the idea).  You could even feed a shipment scheduling system, shipment event tracking system and plenty of others just from that single message (the most valuable might be your data warehouse).&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a comparison of point to point integration versus a canonical model:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.damber.net/blog/files/imgs/ptp_v_cdm.gif&quot; alt=&quot;point to point vs Canonical&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;CDM v Point to Point Comparison&lt;/h2&gt;

&lt;p&gt;As you can see, the point to point method (bottom image) creates a LOT of components and complexity.  Taking this example and doing the Math:&lt;/p&gt;

&lt;h5&gt;Point-To-Point Integration for 3 sending systems and 3 receiving systems:&lt;/h5&gt;
&lt;p&gt;3 (sources) * 3 (targets) = 9 (components)&lt;/p&gt;

&lt;h5&gt;CDM Based Integration for 3 sending systems and 3 receiving systems:&lt;/h5&gt;
&lt;p&gt;3 (sources) * 1 (adapter - the CDM is now the virtual target)  +  3 (targets) * 1 (adapter - the CDM is now the virtual source) = 6 (components)&lt;/p&gt;

&lt;p&gt;Or put more simply:&lt;br /&gt;
PTP Integration: sources MULTIPLIED by targets&lt;br /&gt;
CDM Integration: sources PLUS targets&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;This starts to demonstrate itself very quickly when you look at 10 sources and 10 targets&amp;#8230; would you prefer to build 20 components, or 100 ?&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-weight:800;text-decoration:underline;&quot;&gt;Standardised Information Architecture Foundation&lt;/span&gt; - the concept and importance of an Information Oriented Architecture (IOA) should not be understated.  Architecture within an IT environment is mostly about abstraction, generalisation and standardisation of concepts to deliver sustainable, re-usable solutions and technology.  One of the most popular architectures in previous years has been the N-Tier architecture where layers of the solution are packaged into abstracted levels that are &amp;#8216;theoretically&amp;#8217; interchangeable etc.  Furthermore, the more recent Service Oriented Architecture (SOA) expands / explodes that concept somewhat (there&amp;#8217;s a bit more to it, but for examples sake..) into a distributed network oriented environment, with the addition of a bus to provide the glue that binds all the interchangeable parts together.  In both of these concepts, information should be standardised, or if not possible (e.g. from multiple sources, which SOA is very prone to) then to abstract the differences between the data sources and present (e.g. via the Data Access Tier, Business Data Objects, Composite Services etc) a standardised version.&lt;/p&gt;

&lt;p&gt;There are products that will help to do this on a READ basis - generally called data federation, it allows multiple sources of data to be combined into a single &amp;#8216;view&amp;#8217; despite the underlying technologies (e.g. RDBMS, XML, CSV, Web Service, etc).  This is great, and a useful tool, but it is not enough to satisfy the needs of a true SOA environment.  There are also technologies that will help do this on a more general basis, which are much more applicable, such as business data objects, which can be used to &amp;#8216;mimic&amp;#8217; a SOA like environment without all the standards stack.  Then you have the SOA concept, which implements data and functionality as services, but really is founded on those data sources, and their role within the solution (sometimes data sources are not the authority on the data).  Hence, a solid information architecture is the foundation of your SOA.&lt;/p&gt;

&lt;p&gt;Whichever way you look at it, having this standard model helps to bring your enterprise solutions together whilst minimising diversity and maximising re-use.&lt;/p&gt;

&lt;p&gt;For example, you could implement a Data Warehouse by simply adding a canonical adapter for the data warehouse feeds, and directing existing data (coming via other canonical adapters) to this point - if you have 20 or so systems that are already in your network you can start to see how this would make your life easier !&lt;/p&gt;

&lt;p&gt;It also helps when designing and developing new applications &amp;amp; data sources, as you can simply implement the CDM template, and you have 80-90% of your data model (there are always application specific data tables required by a system). &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Some Things to Consider About the Design of a CDM&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Version Control needs to be closely managed&lt;/li&gt;
&lt;li&gt;You should be able to change the CDM Format without &amp;#8216;breaking&amp;#8217; existing adapters - otherwise changes will become more and more of a risk/impact&lt;/li&gt;
&lt;li&gt;Data content (as well as the syntax and semantics) should be standardised within the CDM boundaries  (transformed on entry) - this is where Master Data Management becomes essential - for example, you want to ensure that timezones are clearly included with time/dates, customer IDs are the same, country codes, currency codes and so on are all the same&lt;/li&gt;
&lt;li&gt;Technology needs to support then dynamic and flexible nature of this - XML is a prime candidate, coupled with XSLT, Xpath and Xquery&lt;/li&gt;
&lt;li&gt;Data Models should be based on REAL LIFE - not on existing applications or the buzz-de-jour - speaking to the business is an essential part of building lasting and truly representational models&lt;/li&gt;
&lt;li&gt;Use Standards where possible - but don&amp;#8217;t think there is an off the shelf model and solution that will fit your business perfectly.  Things like BODs are interesting and useful, but not necessarily what you need&lt;/li&gt;
&lt;li&gt;Consider the data serialisation approach - message centric (like an EDI Message) or entity centric (like a database) - how normalised do you want that serialised format ?  For example a Customer would appear in both orders and invoices (plus many other things) - do you want &amp;#8216;Customers&amp;#8217; to be a separate entity, or an embedded entity ?  An entity centric approach is more appropriately served by developing a Semantic Ontology, using technologies such as RDF and OWL.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;So, what next ?&lt;/h2&gt;

&lt;p&gt;Delivering a CDM can be challenging - especially when delivered as part of a full information architecture overhaul.  My advice ?  Take little steps.&lt;/p&gt;

&lt;p&gt;Start with a vision - think about (and ask) what the business really needs from information, then conceptualise, agree and communicate it.&lt;/p&gt;

&lt;p&gt;Then (ideally) you want to define an information architecture strategy as thoroughly as possible upfront, so you have a good framework to work from.  Try to be as far reaching (in terms of your business units etc) as possible with the analysis for this, but don&amp;#8217;t get bogged down in specifics - just get the framework for how things should be done and the strategy around managing, governing, delivering etc. &lt;/p&gt;

&lt;p&gt;Once you have a good framework and strategy, you can start analysing the detail and pulling together a Requirements Analysis Spec and the Architecture/Design for the solution.   BUT.. this bit should be done in small manageable chunks - that way a) you minimise risk of failure  b) minimise impact if things do go wrong and c) show fast, measurable results to encourage people to continue to take-up this strategy.  I&amp;#8217;ll post again soon with more detailed steps to this approach&lt;/p&gt;

&lt;p&gt;I hope this has either inspired you to look at implementing a Canonical Data Model as part of your enterprise Information Architecture strategy, or enraged you enough to think of some better way&amp;#8230; &lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/information-unity-in-the-canonical-form&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<h2>So what is a CDM ?&#8230; </h2>

<p>A Canonical Data Model is most simply explained as a standardised way of representing data that generically applies to multiple systems and data models - kind of like the master data model, but for semantics aswell as content.  It can be used as a data model standard template for new systems development, or as an intermediary serialised data format - which is the aspect I&#8217;ll focus on mostly here.</p>

<p>Here&#8217;s an Example of using the CDM as an intermediary data format to integrate six systems with different data format requirements: Canonical Data Model</p>
<p><img src="http://www.damber.net/blog/files/imgs/canonical_diagram_simple.gif" alt="CDM Example" /></p>

<p>In this example, where serialised data is being passed between systems, it uses the standardised format as a middle ground, meaning that each adapter only needs to be able to translate into or out of the CDM format (rather than each individual target/source) for it to be able to understand (and therefore integrate) with other systems &#8216;talking&#8217; in the same context (e.g. a specific functional domain, like shipments, invoices, orders etc).  This creates semantic interoperability between the system by abstracting the differences at the perimeter of the integration solution, and re-using existing components.</p>
<p><br /><br /></p>
<h2>So what ?</h2>

<p>It&#8217;s not always clear when first thinking about this design why it is so important to the implementation of upstream architectures such as SOA, or why this has such impact on everyday integration.. even the more traditional hub based point-to-point integration patterns.   But hopefully that realisation is starting to emerge, because it really is key to building truly flexible, seamless and invisible integration solutions.</p>
<p><br /><br /></p>
<h2>Some of the key objectives</h2>

<ul>
<li>Maximise Re-Use of Components</li>
<li>Minimise Redundant Code</li>
<li>Facilitate the concept of &#8216;Plug-And-Play&#8217; interfaces</li>
<li>Standardise knowledge, terminology and domain concepts (talk the same language)</li>
<li>Facilitate SOA through an information architecture (IOA) foundation</li>
</ul>
<p><br /><br /></p>
<h2>Some of the Key Benefits and Advantages</h2>

<p><span style="font-weight:800;text-decoration:underline;">Connect Once, Integrate Many</span> - once connected to the information network via the canonical adapter, you can communicate with any other connected system as long as it is in context (e.g. order requests aren&#8217;t likely to work with Proof of Delivery)&#8230; but having said that, things do become somewhat adaptable, even out of context&#8230; for example: an order quite often contains customer information and product information, as well as being an outline of the shipment.  With this in mind you *could* (and that doesn&#8217;t mean *should* :-D ) feed a customer master or CRM application with the customer information, a Product Master or Stock Management application with the product information &#8216;just-in-time&#8217; for the order to be processed should the information not have been provided before (unlikely for the product master, but you get the idea).  You could even feed a shipment scheduling system, shipment event tracking system and plenty of others just from that single message (the most valuable might be your data warehouse).</p>

<p>Here&#8217;s a comparison of point to point integration versus a canonical model:</p>
<p><img src="http://www.damber.net/blog/files/imgs/ptp_v_cdm.gif" alt="point to point vs Canonical" /><br />
<br /><br /></p>
<h2>CDM v Point to Point Comparison</h2>

<p>As you can see, the point to point method (bottom image) creates a LOT of components and complexity.  Taking this example and doing the Math:</p>

<h5>Point-To-Point Integration for 3 sending systems and 3 receiving systems:</h5>
<p>3 (sources) * 3 (targets) = 9 (components)</p>

<h5>CDM Based Integration for 3 sending systems and 3 receiving systems:</h5>
<p>3 (sources) * 1 (adapter - the CDM is now the virtual target)  +  3 (targets) * 1 (adapter - the CDM is now the virtual source) = 6 (components)</p>

<p>Or put more simply:<br />
PTP Integration: sources MULTIPLIED by targets<br />
CDM Integration: sources PLUS targets<br />
</p>

<p>This starts to demonstrate itself very quickly when you look at 10 sources and 10 targets&#8230; would you prefer to build 20 components, or 100 ?</p>

<p><span style="font-weight:800;text-decoration:underline;">Standardised Information Architecture Foundation</span> - the concept and importance of an Information Oriented Architecture (IOA) should not be understated.  Architecture within an IT environment is mostly about abstraction, generalisation and standardisation of concepts to deliver sustainable, re-usable solutions and technology.  One of the most popular architectures in previous years has been the N-Tier architecture where layers of the solution are packaged into abstracted levels that are &#8216;theoretically&#8217; interchangeable etc.  Furthermore, the more recent Service Oriented Architecture (SOA) expands / explodes that concept somewhat (there&#8217;s a bit more to it, but for examples sake..) into a distributed network oriented environment, with the addition of a bus to provide the glue that binds all the interchangeable parts together.  In both of these concepts, information should be standardised, or if not possible (e.g. from multiple sources, which SOA is very prone to) then to abstract the differences between the data sources and present (e.g. via the Data Access Tier, Business Data Objects, Composite Services etc) a standardised version.</p>

<p>There are products that will help to do this on a READ basis - generally called data federation, it allows multiple sources of data to be combined into a single &#8216;view&#8217; despite the underlying technologies (e.g. RDBMS, XML, CSV, Web Service, etc).  This is great, and a useful tool, but it is not enough to satisfy the needs of a true SOA environment.  There are also technologies that will help do this on a more general basis, which are much more applicable, such as business data objects, which can be used to &#8216;mimic&#8217; a SOA like environment without all the standards stack.  Then you have the SOA concept, which implements data and functionality as services, but really is founded on those data sources, and their role within the solution (sometimes data sources are not the authority on the data).  Hence, a solid information architecture is the foundation of your SOA.</p>

<p>Whichever way you look at it, having this standard model helps to bring your enterprise solutions together whilst minimising diversity and maximising re-use.</p>

<p>For example, you could implement a Data Warehouse by simply adding a canonical adapter for the data warehouse feeds, and directing existing data (coming via other canonical adapters) to this point - if you have 20 or so systems that are already in your network you can start to see how this would make your life easier !</p>

<p>It also helps when designing and developing new applications &amp; data sources, as you can simply implement the CDM template, and you have 80-90% of your data model (there are always application specific data tables required by a system). </p>
<p><br /><br /></p>
<h2>Some Things to Consider About the Design of a CDM</h2>

<ul>
<li>Version Control needs to be closely managed</li>
<li>You should be able to change the CDM Format without &#8216;breaking&#8217; existing adapters - otherwise changes will become more and more of a risk/impact</li>
<li>Data content (as well as the syntax and semantics) should be standardised within the CDM boundaries  (transformed on entry) - this is where Master Data Management becomes essential - for example, you want to ensure that timezones are clearly included with time/dates, customer IDs are the same, country codes, currency codes and so on are all the same</li>
<li>Technology needs to support then dynamic and flexible nature of this - XML is a prime candidate, coupled with XSLT, Xpath and Xquery</li>
<li>Data Models should be based on REAL LIFE - not on existing applications or the buzz-de-jour - speaking to the business is an essential part of building lasting and truly representational models</li>
<li>Use Standards where possible - but don&#8217;t think there is an off the shelf model and solution that will fit your business perfectly.  Things like BODs are interesting and useful, but not necessarily what you need</li>
<li>Consider the data serialisation approach - message centric (like an EDI Message) or entity centric (like a database) - how normalised do you want that serialised format ?  For example a Customer would appear in both orders and invoices (plus many other things) - do you want &#8216;Customers&#8217; to be a separate entity, or an embedded entity ?  An entity centric approach is more appropriately served by developing a Semantic Ontology, using technologies such as RDF and OWL.</li></ul>
<p><br /><br /></p>
<h2>So, what next ?</h2>

<p>Delivering a CDM can be challenging - especially when delivered as part of a full information architecture overhaul.  My advice ?  Take little steps.</p>

<p>Start with a vision - think about (and ask) what the business really needs from information, then conceptualise, agree and communicate it.</p>

<p>Then (ideally) you want to define an information architecture strategy as thoroughly as possible upfront, so you have a good framework to work from.  Try to be as far reaching (in terms of your business units etc) as possible with the analysis for this, but don&#8217;t get bogged down in specifics - just get the framework for how things should be done and the strategy around managing, governing, delivering etc. </p>

<p>Once you have a good framework and strategy, you can start analysing the detail and pulling together a Requirements Analysis Spec and the Architecture/Design for the solution.   BUT.. this bit should be done in small manageable chunks - that way a) you minimise risk of failure  b) minimise impact if things do go wrong and c) show fast, measurable results to encourage people to continue to take-up this strategy.  I&#8217;ll post again soon with more detailed steps to this approach</p>

<p>I hope this has either inspired you to look at implementing a Canonical Data Model as part of your enterprise Information Architecture strategy, or enraged you enough to think of some better way&#8230; </p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/information-unity-in-the-canonical-form">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/Architect/IntegrationArchitecture/information-unity-in-the-canonical-form#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/Architect/?tempskin=_rss2&#38;disp=comments&#38;p=31</wfw:commentRss>
		</item>
				<item>
			<title>Simple addition of a range</title>
			<link>http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/Javascript/simple-addition-of-a-range-2</link>
			<pubDate>Mon, 12 May 2008 18:27:44 +0000</pubDate>			<dc:creator>damber</dc:creator>
			<category domain="main">Javascript</category>			<guid isPermaLink="false">15@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Adding a range of numbers&lt;/h2&gt;
&lt;p&gt;Adding numbers is easy.  Very easy for programs, right?  How about adding up a range of numbers?  1 to 5 maybe ?  1+2+3+4+5 = 15 &amp;#8230; easy !&lt;/p&gt;

&lt;p&gt;What about adding up 1 to 100 ?  not so easy in your head, but with a little code this shouldn&amp;#8217;t be a problem.  In fact a lot of programmers would approach it like the following:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;javascript&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;javascript&quot; id=&quot;cb14670&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;var sumOfRangeLoop = 0;&lt;br /&gt;for (i=1;i&amp;lt;=100;i++)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; sumOfRangeLoop += i;&lt;br /&gt;}&lt;br /&gt;document.write(&amp;quot;Loop: &amp;quot; + sumOfRangeLoop + &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;);&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb78351&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Great - it gets you the answer that you wanted.  Now what about 25 to 25,000,000 ?  OK, that takes a while to run&amp;#8230;.  What if I tried 234 to 435,657,123 ? Mmmm&amp;#8230; ouch. This doesn&amp;#8217;t work too well does it ?
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Improving Performance&lt;/h2&gt;
&lt;p&gt;If we want to be able to scale our code then we need to use a little math to help us get the answer, instead of relying on brute force. &lt;/p&gt;

&lt;p&gt;In this &lt;a href=&quot;http://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/&quot;&gt;excellent and clearly explained article about number range summation&lt;/a&gt;, you will see that there are many ways to visualise the process to make it easier to calculate the sum of a range - even in our head, and how they all lead toward a single formula.  Within the comments you will notice that discussion identifies a more generic formula that allows for the starting position to be more than 1, and also to allow evenly spaced &amp;#8217;steps&amp;#8217;. &lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;javascript&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;javascript&quot; id=&quot;cb99812&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;var rangeStart = 234;&lt;br /&gt;var rangeEnd = 435657123;&lt;br /&gt;var rangeStep = 1;&lt;br /&gt;var digitCount = ((rangeEnd - rangeStart)+rangeStep)/rangeStep;&lt;br /&gt;var sumOfRangeCalc = ((digitCount * (rangeEnd+rangeStart) ) / 2);&amp;nbsp; &amp;nbsp;&lt;br /&gt;document.write(&amp;quot;Sum of Range: &amp;quot; + sumOfRangeCalc + &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;);&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb95200&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This runs almost instantly, compared to the hung browser effect of the loop approach for this scale of numbers.  
&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Performance Benchmarks&lt;/h2&gt;

&lt;p&gt;To see just how different the performance is, here is a complete working example testing both methods over multiple iterations of the same moderately sized range&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;javascript&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;javascript&quot; id=&quot;cb19219&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;test&amp;lt;/test&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;script &lt;span style=&quot;color:#ff00ff;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color:#ff0000;&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; rangeStart = &lt;span style=&quot;&quot;&gt;150&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; rangeEnd = &lt;span style=&quot;&quot;&gt;25000&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; rangeStep = &lt;span style=&quot;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; iterations = &lt;span style=&quot;&quot;&gt;1000&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; ts;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; te;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color:#0000ff;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;&amp;quot;Testing Calc: &amp;nbsp;&amp;quot;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; ts = &lt;span style=&quot;color:#0000ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#ff00ff;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;j=&lt;span style=&quot;&quot;&gt;0&lt;/span&gt;;j&amp;lt;iterations;j++&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sumByCalc&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; te = &lt;span style=&quot;color:#0000ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#ff00ff;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color:#0000ff;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;te - ts&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;/&lt;span style=&quot;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color:#ff0000;&quot;&gt;&amp;quot; seconds&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color:#0000ff;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;&amp;quot;Testing Loop: &amp;nbsp;&amp;quot;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; ts = &lt;span style=&quot;color:#0000ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#ff00ff;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;j=&lt;span style=&quot;&quot;&gt;0&lt;/span&gt;;j&amp;lt;iterations;j++&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sumByLoop&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; te = &lt;span style=&quot;color:#0000ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#ff00ff;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color:#0000ff;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;te - ts&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;/&lt;span style=&quot;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color:#ff0000;&quot;&gt;&amp;quot; seconds&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;function&lt;/span&gt; sumByCalc&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; digitCount = &lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;rangeEnd - rangeStart&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;+rangeStep&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;/rangeStep;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; sumOfRangeCalc = &lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;digitCount * &lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;rangeEnd+rangeStart&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt; / &lt;span style=&quot;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color:#a0a0a4; font-style:italic;&quot;&gt;//&amp;nbsp; &amp;nbsp; &amp;nbsp; document.write(&amp;quot;Equation: &amp;quot; + sumOfRangeCalc + &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;);&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;function&lt;/span&gt; sumByLoop&lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;var&lt;/span&gt; sumOfRangeLoop = &lt;span style=&quot;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0000ff;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;&quot;&gt;&amp;#40;&lt;/span&gt;i=rangeStart;i&amp;lt;=rangeEnd;i+=rangeStep&lt;span style=&quot;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sumOfRangeLoop += i;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#a0a0a4; font-style:italic;&quot;&gt;//&amp;nbsp; &amp;nbsp; &amp;nbsp; document.write(&amp;quot;Loop: &amp;quot; + sumOfRangeLoop + &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;);&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb75061&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h5&gt;Results:&lt;/h5&gt;

&lt;pre&gt;
Testing Calc: 0.001 seconds
Testing Loop: 7.342 seconds
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;In Conclusion&lt;/h2&gt;

&lt;p&gt;So, this simply means that you should use the right tool for the job.  The Brute Force method doesn&amp;#8217;t scale very well - there are simple equations that can answer this question, so.. use them.  Here is a self contained function that returns the sum of a range from x to y with stepping z.  You&amp;#8217;ll need to validate the rangeStep to ensure it is valid with the rangeStart and rangeEnd.&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;javascript&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;javascript&quot; id=&quot;cb22508&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;function sumRange(rangeStart, rangeEnd, rangeStep)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var digitCount = ((rangeEnd - rangeStart)+rangeStep)/rangeStep;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var sumOfRangeCalc = ((digitCount * (rangeEnd+rangeStart) ) / 2);&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return sumOfRangeCalc;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb43303&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/Javascript/simple-addition-of-a-range-2&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><br /></p>
<h2>Adding a range of numbers</h2>
<p>Adding numbers is easy.  Very easy for programs, right?  How about adding up a range of numbers?  1 to 5 maybe ?  1+2+3+4+5 = 15 &#8230; easy !</p>

<p>What about adding up 1 to 100 ?  not so easy in your head, but with a little code this shouldn&#8217;t be a problem.  In fact a lot of programmers would approach it like the following:</p>

<div class="codebox"><div class="codeheader"><span>javascript</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb23820'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb23820','cb92846'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="javascript" id="cb23820" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">var sumOfRangeLoop = 0;</li><li style="" class="li2">for (i=1;i&lt;=100;i++)</li><li style="" class="li1">{</li><li style="" class="li2">&nbsp; &nbsp; sumOfRangeLoop += i;</li><li style="" class="li1">}</li><li style="" class="li2">document.write(&quot;Loop: &quot; + sumOfRangeLoop + &quot;&lt;br/&gt;&quot;);</li></ol></div><div id="cb92846" style="display: none; color: red;"></div></div></div>

<p>Great - it gets you the answer that you wanted.  Now what about 25 to 25,000,000 ?  OK, that takes a while to run&#8230;.  What if I tried 234 to 435,657,123 ? Mmmm&#8230; ouch. This doesn&#8217;t work too well does it ?
</p>
<p><br /><br /></p>
<h2>Improving Performance</h2>
<p>If we want to be able to scale our code then we need to use a little math to help us get the answer, instead of relying on brute force. </p>

<p>In this <a href="http://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/">excellent and clearly explained article about number range summation</a>, you will see that there are many ways to visualise the process to make it easier to calculate the sum of a range - even in our head, and how they all lead toward a single formula.  Within the comments you will notice that discussion identifies a more generic formula that allows for the starting position to be more than 1, and also to allow evenly spaced &#8217;steps&#8217;. </p>

<div class="codebox"><div class="codeheader"><span>javascript</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb83718'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb83718','cb21438'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="javascript" id="cb83718" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">var rangeStart = 234;</li><li style="" class="li2">var rangeEnd = 435657123;</li><li style="" class="li1">var rangeStep = 1;</li><li style="" class="li2">var digitCount = ((rangeEnd - rangeStart)+rangeStep)/rangeStep;</li><li style="" class="li1">var sumOfRangeCalc = ((digitCount * (rangeEnd+rangeStart) ) / 2);&nbsp; &nbsp;</li><li style="" class="li2">document.write(&quot;Sum of Range: &quot; + sumOfRangeCalc + &quot;&lt;br/&gt;&quot;);</li></ol></div><div id="cb21438" style="display: none; color: red;"></div></div></div>

<p>This runs almost instantly, compared to the hung browser effect of the loop approach for this scale of numbers.  
</p>

<p><br /><br /></p>

<h2>Performance Benchmarks</h2>

<p>To see just how different the performance is, here is a complete working example testing both methods over multiple iterations of the same moderately sized range</p>

<div class="codebox"><div class="codeheader"><span>javascript</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb78212'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb78212','cb37466'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="javascript" id="cb78212" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">&lt;html&gt;</li><li style="" class="li2">&lt;head&gt;</li><li style="" class="li1">&lt;title&gt;test&lt;/test&gt;</li><li style="" class="li2">&lt;/head&gt;</li><li style="" class="li1">&lt;body&gt;</li><li style="" class="li2">&lt;script <span style="color:#ff00ff;">type</span>=<span style="color:#ff0000;">&quot;text/javascript&quot;</span>&gt;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">var</span> rangeStart = <span style="">150</span>;</li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">var</span> rangeEnd = <span style="">25000</span>;</li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">var</span> rangeStep = <span style="">1</span>;</li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">var</span> iterations = <span style="">1000</span>;</li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">var</span> ts;</li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">var</span> te;</li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; &nbsp; </li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">document</span>.<span style="color:#0000ff;">write</span><span style="">&#40;</span><span style="color:#ff0000;">&quot;Testing Calc: &nbsp;&quot;</span><span style="">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; ts = <span style="color:#0000ff;">new</span> <span style="color:#ff00ff;">Date</span><span style="">&#40;</span><span style="">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">for</span> <span style="">&#40;</span>j=<span style="">0</span>;j&lt;iterations;j++<span style="">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; sumByCalc<span style="">&#40;</span><span style="">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; <span style="">&#125;</span></li><li style="" class="li2">&nbsp; &nbsp; te = <span style="color:#0000ff;">new</span> <span style="color:#ff00ff;">Date</span><span style="">&#40;</span><span style="">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">document</span>.<span style="color:#0000ff;">write</span><span style="">&#40;</span><span style="">&#40;</span><span style="">&#40;</span>te - ts<span style="">&#41;</span>/<span style="">1000</span><span style="">&#41;</span> + <span style="color:#ff0000;">&quot; seconds&lt;br/&gt;&quot;</span><span style="">&#41;</span>;</li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">document</span>.<span style="color:#0000ff;">write</span><span style="">&#40;</span><span style="color:#ff0000;">&quot;Testing Loop: &nbsp;&quot;</span><span style="">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; ts = <span style="color:#0000ff;">new</span> <span style="color:#ff00ff;">Date</span><span style="">&#40;</span><span style="">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">for</span> <span style="">&#40;</span>j=<span style="">0</span>;j&lt;iterations;j++<span style="">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; <span style="">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; sumByLoop<span style="">&#40;</span><span style="">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; <span style="">&#125;</span></li><li style="" class="li1">&nbsp; &nbsp; te = <span style="color:#0000ff;">new</span> <span style="color:#ff00ff;">Date</span><span style="">&#40;</span><span style="">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">document</span>.<span style="color:#0000ff;">write</span><span style="">&#40;</span><span style="">&#40;</span><span style="">&#40;</span>te - ts<span style="">&#41;</span>/<span style="">1000</span><span style="">&#41;</span> + <span style="color:#ff0000;">&quot; seconds&lt;br/&gt;&quot;</span><span style="">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; </li><li style="" class="li1">&nbsp; &nbsp; <span style="color:#0000ff;">function</span> sumByCalc<span style="">&#40;</span><span style="">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; <span style="">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">var</span> digitCount = <span style="">&#40;</span><span style="">&#40;</span>rangeEnd - rangeStart<span style="">&#41;</span>+rangeStep<span style="">&#41;</span>/rangeStep;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">var</span> sumOfRangeCalc = <span style="">&#40;</span><span style="">&#40;</span>digitCount * <span style="">&#40;</span>rangeEnd+rangeStart<span style="">&#41;</span> <span style="">&#41;</span> / <span style="">2</span><span style="">&#41;</span>;&nbsp; &nbsp;</li><li style="" class="li1"><span style="color:#a0a0a4; font-style:italic;">//&nbsp; &nbsp; &nbsp; document.write(&quot;Equation: &quot; + sumOfRangeCalc + &quot;&lt;br/&gt;&quot;);&nbsp; &nbsp; </span></li><li style="" class="li2">&nbsp; &nbsp; <span style="">&#125;</span></li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; <span style="color:#0000ff;">function</span> sumByLoop<span style="">&#40;</span><span style="">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">var</span> sumOfRangeLoop = <span style="">0</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">for</span> <span style="">&#40;</span>i=rangeStart;i&lt;=rangeEnd;i+=rangeStep<span style="">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sumOfRangeLoop += i;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span></li><li style="" class="li1"><span style="color:#a0a0a4; font-style:italic;">//&nbsp; &nbsp; &nbsp; document.write(&quot;Loop: &quot; + sumOfRangeLoop + &quot;&lt;br/&gt;&quot;);&nbsp; &nbsp; </span></li><li style="" class="li2">&nbsp; &nbsp; <span style="">&#125;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; </li><li style="" class="li2">&lt;/script&gt;</li><li style="" class="li1">&lt;/body&gt;</li><li style="" class="li2">&lt;/html&gt;</li></ol></div><div id="cb37466" style="display: none; color: red;"></div></div></div>
<p><br /><br /></p>
<h5>Results:</h5>

<pre>
Testing Calc: 0.001 seconds
Testing Loop: 7.342 seconds
</pre>

<p><br /><br /></p>

<h2>In Conclusion</h2>

<p>So, this simply means that you should use the right tool for the job.  The Brute Force method doesn&#8217;t scale very well - there are simple equations that can answer this question, so.. use them.  Here is a self contained function that returns the sum of a range from x to y with stepping z.  You&#8217;ll need to validate the rangeStep to ensure it is valid with the rangeStart and rangeEnd.</p>

<div class="codebox"><div class="codeheader"><span>javascript</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb77030'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb77030','cb22213'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="javascript" id="cb77030" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">function sumRange(rangeStart, rangeEnd, rangeStep)</li><li style="" class="li2">&nbsp; &nbsp; {</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; var digitCount = ((rangeEnd - rangeStart)+rangeStep)/rangeStep;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; var sumOfRangeCalc = ((digitCount * (rangeEnd+rangeStart) ) / 2);&nbsp; &nbsp;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; return sumOfRangeCalc;</li><li style="" class="li2">&nbsp; &nbsp; }</li></ol></div><div id="cb22213" style="display: none; color: red;"></div></div></div><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/Javascript/simple-addition-of-a-range-2">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/Javascript/simple-addition-of-a-range-2#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/WebDev/?tempskin=_rss2&#38;disp=comments&#38;p=15</wfw:commentRss>
		</item>
			</channel>
</rss>
