<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simon Whatley &#187; Design Patterns</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/design-patterns/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simonwhatley.co.uk</link>
	<description>The opposite of every great idea is another great idea</description>
	<lastBuildDate>Wed, 02 Nov 2011 09:28:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Let&#039;s not Dilly-Dally: ColdFusion has its Merits</title>
		<link>http://www.simonwhatley.co.uk/lets-not-dilly-dally-coldfusion-has-its-merits</link>
		<comments>http://www.simonwhatley.co.uk/lets-not-dilly-dally-coldfusion-has-its-merits#comments</comments>
		<pubDate>Fri, 09 Jan 2009 10:58:36 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[administrator]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe ColdFusion]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[content management]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[enterprise-level search]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[fundamentals]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rapid application development]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[The Web]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[web technology]]></category>
		<category><![CDATA[web world]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1734</guid>
		<description><![CDATA[ColdFusion is 13 years old. That make makes it the daddy of the web world! It does not make it any less hip or useful than the relatively new kids on the block. Let's not dilly-dally, bicker or insult one another about which is best, which one is dying and which one is not worth the computer it is compiled on. What is important is to understand the merits of each language and decide which one best suits the application, not only in technical terms, but also in terms of time-to-market, cost of development, availability of a skilled workforce etc.]]></description>
			<content:encoded><![CDATA[<p>ColdFusion is 13 years old. That make makes it the daddy of the web world! It does not make it any less hip or useful than the relatively new kids on the block.</p>
<p>Take this scenario. A company I once worked for had what can be described as a business directory built upon a licensed, yet bastardised, version of a popular ColdFusion-based <abbr title="Content Management System">CMS</abbr>. It didn&#8217;t work that well! The decision was made to redevelop the application in Java. It took two years to reach the same level of functionality! What happened next? Ruby-on-Rails is what! The rest is history and beyond the topic of this post.</p>
<p>So, in effect, the application almost went full-circle in its development paradigm &#8212; both ColdFusion and Ruby-on-Rails can be considered <q>Rapid Application Development</q> environments, Java, certainly not. Why did the decision makers not stick with ColdFusion and put time aside to actually build it properly in the first place? To put it simply, they lost faith in ColdFusion; it was largely mis-understood.</p>
<p>The weakness of every programming language does not lie with the language itself per se &#8212; albeit it can have an important influencing factor &#8212; but rather with the ability, or indeed inability, of the developer to leverage the language in the most efficient and optimal way.</p>
<p>ColdFusion, like every other programming language has had and I&#8217;m sure still does have its fair share of poor developers; those people simply working with it as a means-to-an-end, rather than those passionate about the language, those people programming without understanding the fundamentals of programming or the implications of their poorly written code. This is apparent from .NET to Java, ColdFusion to Ruby, JavaScript to ActionScript.</p>
<p>Let&#8217;s not dilly-dally, bicker or insult one another about which is best, which one is dying and which one is not worth the computer it is compiled on. What is important is to understand the merits of each language and decide which one best suits the application, not only in technical terms, but also in terms of time-to-market, cost of development, availability of a skilled workforce etc.</p>
<p>ColdFusion, whether rightly or wrongly in some people&#8217;s opinion, can sit proudly amongst its peers and provide a truly compelling alternative.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Here&#8217;s how (in no particular order):</p>
<ol>
<li>Low Total Cost of Ownership &#8211; frequently, ColdFusion is described as expensive, it simply isn&#8217;t especially if you consider the natively supported functions. But to put it bluntly, if your company cannot afford the cost of ColdFusion standard, or indeed ColdFusion hosting, you have bigger things to worry about regarding the profitability of the company; you won&#8217;t be able to afford much of anything! The problem becomes not the product. ColdFusion applications are quicker to develop and developers are vastly cheaper to employ than their peers in Java or Ruby, just look at <a href="http://www.itjobswatch.co.uk/" title="ITJobsWatch" target="_blank" rel="nofollow">ITJobsWatch</a> for examples.</li>
<li>Rapid Application Development &#8211; ColdFusion vastly simplifies tasks. What would take other languages numerous lines of code to produce is efficiently encapsulated either in a tag or function or as a setting in the administrator. This is a simplistic yet indicative example: where else can you connected to a database simply with one line of code or indeed simply by name? ColdFusion changed the idea of specifying development time in terms of months and years to weeks and months or small features a matter of hours and days. Simplicity is not the mother or all evil. To be pragmatic, simplification reduces costs.</li>
<li>Rich Internet Applications &#8211; ColdFusion may or may not have pioneered the <abbr title="Rich Internet Application">RIA</abbr> paradigm, but it has played a significant supporting role to Flash and now Flex. ColdFusion natively supports Flash remoting, providing the all important data access tier.</li>
<li>Platform Maturity &#8211; ColdFusion 8 is built upon the latest version of Java (1.6). Along with internal improvements to the ColdFusion application, this has afforded ColdFusion unprecedented speed improvements and stability.</li>
<li>Language Maturity &#8211; with each major release of ColdFusion comes many language enhancements added to the core. This means that previous addons, for example image manipulation, which came at a premium are now standard. Adobe and other companies that produce <abbr title="ColdFusion Markup Language">CFML</abbr> engines are now participating in  a <abbr title="ColdFusion Markup Language">CFML</abbr> advisory committee, which aims to set standards for the core language. This is not only a sign of maturity but a letter of intent by the industry that will mean your application will work on any engine, assuming no proprietary functionality is used.</li>
<li>The Ultimate Middleware &#8211; ColdFusion sits comfortably between any backend and front end system. Be it interfacing with a host of databases, Java, .NET, <abbr title="Component Object Model">COM</abbr>, Corba or connecting to classic <abbr title="HyperText Manrkup Language">HTML</abbr> or rich Flash, Flex and <abbr title="Asynchronous JavaScript and XML">AJAX</abbr> frontends with little or no configuration.</li>
<li>Feature Rich &#8211; what other web technology <strong>natively</strong> supports <abbr title="">PDF</abbr> generation, charting, enterprise-level search, <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>, image manipulation, Atom and <abbr title="Really Simple Syndication">RSS</abbr> creation, Zip and <abbr title="Java Archive">JAR</abbr> file manipulation, a server monitor, Flex integration, encryption libraries, all important database connectors, webservice creation, <abbr title="">XML</abbr> manipulation, inbuilt reporting application (similar to Crystal Reports), email, <abbr title="File Transfer Protocol">FTP</abbr> to name but a few? I hazard a guess at none, unless you&#8217;re happy to pay a premium.</li>
<li>Platform Independent &#8211; since ColdFusion 6, when Macromedia redeveloped the entire application in Java, ColdFusion has been platform independent. You can install it on practically any machine.</li>
<li>OpenSource Alternatives &#8211; BlueDragon and Railo are both significant alternatives to Adobe ColdFusion and both have opensource alternatives, the latter of the two having recently joined the JBoss community. Adobe are also considering providing a free edition to academic institutions.</li>
<li>The Future &#8211; many commentators have mentioned Hibernate as a significant addition to the next release of ColdFusion, version 9. But having seen the prerelease notes, that is not all that will be added. Alas I&#8217;m under <abbr title="Non-Disclosure Agreement">NDA</abbr>, but rest assured, there is going to be a significant intake of breath when developers get hold of the next release. ColdFusion 8 was firmly geared towards middle management with fuzzy additions, ColdFusion 9 is set to re-address the balance with compelling language and functionality enhancements.</li>
</ol>
<p>ColdFusion evangelism needs to step up a gear! Adobe certainly doesn&#8217;t afford much marketing budget to the product, prefering <q>The Community</q> do the hard work. It is not always easy convincing the decision makers that ColdFusion is a good product of choice, without Adobe&#8217;s unnerving support, but we have to work hard, break down those barriers, encroach on events outside the comfortable sphere of the ColdFusion world and demonstrate ColdFusion&#8217;s match-winning ability.</p>
<p>ColdFusion isn’t dying, it’s simply niche. Every niche has its place.</p>
<p><strong>UPDATE:</strong> If you would like to view the ensuing debate regarding ColdFusion prompted by <a href="http://aralbalkan.com/1864" title="Aral Balkan - Why learning ColdFusion today is a waste of time." target="_blank" rel="nofollow">Aral Balkan</a>, feel free to do so. This post should serve as a positive reminder of ColdFusion&#8217;s virtues, alongside the need for a balanced and polite debate.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/lets-not-dilly-dally-coldfusion-has-its-merits/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Rich Internet Application Frameworks for Flex and AIR</title>
		<link>http://www.simonwhatley.co.uk/ria-flex-air-frameworks</link>
		<comments>http://www.simonwhatley.co.uk/ria-flex-air-frameworks#comments</comments>
		<pubDate>Thu, 04 Sep 2008 14:34:42 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Consulting]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[asset management]]></category>
		<category><![CDATA[backend services]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[classic Model-View-Controller]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Gaia]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Guasax]]></category>
		<category><![CDATA[Internet Application Frameworks]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[inversion-of-control]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[Mate]]></category>
		<category><![CDATA[Model-Glue Flex]]></category>
		<category><![CDATA[model-view-controller]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[software engineers]]></category>
		<category><![CDATA[Swiz]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=986</guid>
		<description><![CDATA[Whether you are new to Adobe &#174; Flex &#174; or have been developing for a while, frameworks can help you get organised quickly. Below is a list of Flex and AIR frameworks that will allow you to get up and running and develop highly-collaborative applications. The introductions are by the frameworks themselves, but I'd like to here from you about your experiences using them.]]></description>
			<content:encoded><![CDATA[<p>Whether you are new to Adobe &reg; Flex &reg; or have been developing for a while, frameworks can help you get organised quickly.</p>
<p>Below is a list of Flex and <acronym title="Adobe Integrated Runtime">AIR</acronym> frameworks that will allow you to get up and running and develop highly-collaborative applications. The introductions are by the frameworks themselves, but I&#8217;d like to here from you about your experiences using them.</p>
<h3>Cairngorm</h3>
<p>Cairngorm is the lightweight micro-architecture for <a href="http://en.wikipedia.org/wiki/Rich_Internet_application" title="Wikipedia: Rich Internet Application" target="_blank" rel="nofollow">Rich Internet Applications</a> built in Flex or <acronym title="Adobe Integrated Runtime">AIR</acronym>. A collaboration of recognized design patterns, Cairngorm exemplifies and encourages best-practices for <abbr title="Rich Internet Application">RIA</abbr> development advocated by <a href="http://www.adobe.com/consulting/" title="Adobe Consulting" target="_blank" rel="nofollow">Adobe Consulting</a>, encourages best-practice leverage of the underlying Flex framework, while making it easier for medium to large teams of software engineers deliver medium to large scale, mission-critical Rich Internet Applications.</p>
<p>More information can be found on the <a href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm" title="Cairngorm RIA Framework" target="_blank" rel="nofollow">Cairngorm project&#8217;s website</a>.</p>
<h3>PureMVC</h3>
<p>PureMVC is a lightweight framework for creating applications based upon the classic <a href="http://en.wikipedia.org/wiki/Model-View-Controller" title="Wikipedia: Model, View and Controller design pattern" target="_blank" rel="nofollow">Model-View-Controller</a> concept.</p>
<p>Based upon proven design patterns, this free, open source framework which was originally implemented in the ActionScript 3 language for use with Adobe Flex, Flash and <acronym title="Adobe Integrated Runtime">AIR</acronym>, has now been ported to nearly all major development platforms.</p>
<p>Two versions of the framework are supported with reference implementations; Standard and MultiCore, though only the Standard version has been ported to other languages so far.</p>
<p>More information can be found on the <a href="http://puremvc.org/" title="PureMVC Framework" target="_blank" rel="nofollow">PureMVC project&#8217;s website</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Mate</h3>
<p>Mate is a tag-based, event-driven Flex framework.</p>
<p>Flex applications are event-driven. Mate framework has been created to make it easy to handle the events your Flex application creates. Mate allows you to define who is handling those events, whether data needs to be retrieved from the server, or other events need to be triggered.</p>
<p>In addition, Mate provides a mechanism for dependency injection to make it easy for the different parts of your application to get the data and objects they need.</p>
<p>More information can be found on the <a href="http://mate.asfusion.com/" title="Mate Framework at ASFusion" target="_blank" rel="nofollow">Mate project&#8217;s website</a>.</p>
<h3>Swiz</h3>
<p>Swiz is a framework for Adobe Flex that aims to bring complete simplicity to <abbr title="Rich Internet Application">RIA</abbr> development. Swiz provides Inversion of Control, event handing, and simple life cycle for asynchronous remote methods. In contrast to other major frameworks for Flex, Swiz imposes no <abbr title="Java 2 Platform, Enterprise Edition">J2EE</abbr> patterns on your code, no repetitive folder layouts, and no boilerplate code on your development. Swiz represents best practices learned from the top <abbr title="Rich Internet Application">RIA</abbr> developers at some of the best consulting firms in the industry, enabling Swiz to be simple, lightweight, and extremely productive.</p>
<p>More information can be found on the <a href="http://code.google.com/p/swizframework/" title="Swiz Framework on Google Code" target="_blank" rel="nofollow">Swiz project&#8217;s website</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Guasax</h3>
<p>Guasax is an ease of use programming framework which provides the creation of an ordered and scalable application with Adobe Flex. The lifecycle of the Guasax framework is based in the <acronym title="Model-View-Controller">MVC</acronym> pattern to take on our program actions. The Guasax framework helps you to maintain your business logic tier highly decoupled from your presentation logic tier.</p>
<p>Guasax takes reflection and introspection techniques as well as the <a href="http://en.wikipedia.org/wiki/Inversion_of_control" title="Wikipedia: Inversion of Control" target="_blank" rel="nofollow">Inversion of Control</a> (<abbr title="Inversion of Control">IoC</abbr>) pattern to execute the operations which we have pointed at and to make a decision about itself. Guasax is not intrusive on your class model. You <em>don&#8217;t</em> have to extend your classes in a framework class to use it.</p>
<p>More information can be found on the <a href="http://www.guasax.com/" title="Guasax Project" target="_blank" rel="nofollow">Guasax project&#8217;s website</a> or on their <a href="http://code.google.com/p/guasax/" title="Guasax Project on Google Code" target="_blank" rel="nofollow">Google code project</a>.</p>
<h3>Model-Glue: Flex</h3>
<p>Model-Glue: Flex brings <a href="http://en.wikipedia.org/wiki/Implicit_invocation" title="Wikipedia: Implicit Invocation" target="_blank" rel="nofollow">implicit invocation</a>, Model-View-Controller design, and cleaner, less repetitive integration with backend services to Flex and <acronym title="Adobe Integrated Runtime">AIR</acronym> applications.</p>
<p>It shuns repetitive, boilerplate code in favor of helper classes and expressive <abbr title="Application Programming Interface">API</abbr>s.</p>
<p>More information can be found on the <a href="http://www.model-glue.com/flex.cfm" title="Model-Glue: Flex project's website" target="_blank" rel="nofollow">Model-Glue: Flex project&#8217;s website</a>.</p>
<h3>Gaia</h3>
<p>Gaia is an open-source front-end Flash Framework for <abbr title="ActionScript 3">AS3</abbr> and <abbr title="ActionScript 2">AS2</abbr> designed to dramatically reduce development time.</p>
<p>Gaia is targeted at anyone who develops Flash sites. It provides solutions to the challenges and repeated tasks faced with front-end Flash site development, such as navigation, transitions, preloading, asset management, site structure, deep linking and <abbr title="Search Engine Optimisation">SEO</abbr>. It provides speed and flexibility in your workflow and a simple API that gives you access to its powerful features.</p>
<p>More information can be found on the <a href="http://www.gaiaflashframework.com/" title="Gaia framework's website" target="_blank" rel="nofollow">Gaia Framework&#8217;s website</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>UPDATE: Some more frameworks that I overlooked.</strong></p>
<h3>Parsley</h3>
<p>Parsley is an application framework for Flex/Flash/AIR applications written in AS3. It contains the following modules:</p>
<p><abbr title="Inversion of Control">IoC</abbr> Container (Configuration and Dependency Injection) &#8211; Inspired by the Spring Framework it brings the concept of an<abbr title="Inversion of Control">IoC</abbr>(Inversion of Control) container to ActionScript. It is useful for configuration and wiring of applications. It helps building a well structured architecture and decoupling the individual building blocks of your application. Configuration is based on <abbr title="eXtensible Markup Language">XML</abbr> files.</p>
<p><abbr title="Model View Controller">MVC</abbr> Framework &#8211; The <abbr title="Model View Controller">MVC</abbr> (Model View Controller) framework helps decouple the view layer from other parts of the application. It borrows the concept of a FrontController from Cairngorm, but instead of advocating the use of BusinessDelegate and ServiceLocator patterns, the framework integrates the FrontController with the <abbr title="Inversion of Control">IoC</abbr> container.<br />
More information can be found on the <a href="http://www.spicefactory.org/parsley/" title="Parsley framework's website" target="_blank" rel="nofollow">Parsley Framework&#8217;s website</a>.</p>
<h3>Prana</h3>
<p>Prana is an Inversion of Control (<abbr title="Inversion of Control">IoC</abbr>) Container for ActionScript 3.0, and more specifically the Flex framework. It enables you to configure objects and components in a non-intrusive way by describing them in an external <abbr title="eXtensible Markup Language">XML</abbr> document and having them loaded at runtime.</p>
<p>At its core is a Spring-ish application context and <abbr title="Inversion of Control">IoC</abbr> container. The <abbr title="eXtensible Markup Language">XML</abbr> dialect for the application context is aimed to be Spring compliant.</p>
<p>The framework also contains utility classes for configuring and extending Cairngorm and PureMVC applications, a Reflection <abbr title="Application Programming Interface">API</abbr> and general utilities.</p>
<p>More information can be found on the <a href="http://www.pranaframework.org" title="Prana framework's website" target="_blank" rel="nofollow">Prana Framework&#8217;s website</a>.</p>
<h3>Arp</h3>
<p>Arp is a pattern-based framework for Flash and Flex. It supports both ActionScript 2 and ActionScript 3.</p>
<p>More information can be found on the <a href="http://osflash.org/projects/arp/" title="Arp Framework" target="_blank" rel="nofollow">Arp project&#8217;s page</a> on the Open Source Flash website.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/ria-flex-air-frameworks/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Website Success via Desire Lines</title>
		<link>http://www.simonwhatley.co.uk/website-success-via-desire-lines</link>
		<comments>http://www.simonwhatley.co.uk/website-success-via-desire-lines#comments</comments>
		<pubDate>Fri, 12 Oct 2007 13:56:31 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[User Experience]]></category>
		<category><![CDATA[advertising revenue]]></category>
		<category><![CDATA[advertising revenues]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[ambient personalisation]]></category>
		<category><![CDATA[bbc]]></category>
		<category><![CDATA[current tv]]></category>
		<category><![CDATA[Customers Who]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[desire lines]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[human choice]]></category>
		<category><![CDATA[Information Architecture]]></category>
		<category><![CDATA[online community helps]]></category>
		<category><![CDATA[paths]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Plato Human]]></category>
		<category><![CDATA[search box]]></category>
		<category><![CDATA[targeted advertising]]></category>
		<category><![CDATA[This Item Also]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Interface Design]]></category>
		<category><![CDATA[user iterface design]]></category>
		<category><![CDATA[User Science]]></category>
		<category><![CDATA[web phenomenon]]></category>
		<category><![CDATA[web user interface]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=347</guid>
		<description><![CDATA[Desire lines are those well-worn ribbons of dirt that you see cutting across a patch of grass, field or park, often with nearby pavements, particularly those that offer a less direct route, ignored. In winter, desire lines appear spontaneously as tramped down paths in the snow. These paths are never perfectly straight but instead, they meander like a river this way and that, as if to prove that desire itself isn't uniform or linear and (literally, in this case) straightforward.]]></description>
			<content:encoded><![CDATA[<p>To paraphrase Plato</p>
<blockquote><p>Human  behaviour flows from three main sources: desire, emotion and knowledge</p></blockquote>
<p>Desire lines are those well-worn ribbons of dirt that you see cutting across a patch of grass, field or park, often with nearby pavements, particularly those that offer a less direct route, ignored. In winter, desire lines appear spontaneously as trampled down paths in the snow. These paths are never perfectly straight but instead, they meander like a river this way and that, as if to prove that desire itself isn&#8217;t uniform or linear and (literally, in this case) straightforward.  Desire Lines show that it is human to choose, but it is also human to choose what other people have chosen before. Be it for establishing a pattern, be it for convenience, or be it for not reinventing the wheel. In this way the Desire Lines become well-trodden and pseudo-permanent routes to a particular destination.</p>
<blockquote><p>Desire Lines are the ultimate unbiased expression of natural human purpose</p></blockquote>
<p>The term &#8216;Desire Lines&#8217; originates from the field of urban planning in the early 20th Century.</p>
<blockquote><p>An optimal way to design pathways in accordance to natural behaviour is not to design them at all</p></blockquote>
<p><strong>Extending the concept to websites</strong></p>
<p>Broadening the concept of Desire Lines, it is also possible to see other impressions of human desire in websites, many of which can provide a commercial advantage to the particular website in question.</p>
<p>The web phenomenon is simply another way people find entertainment, communicate and interact. Whether the purpose of using the web is for enjoyment or employment, Desire Lines are are a such perfect expression of natural human intention that they become the utlimate design pattern for building successful and intuitive websites. It is easy to envisage users like an army of ants moving in single file towards their goal, not following set paths, but bypassing the planned route directly towards the news article, the video, indeed any product being offered by the website concerned.</p>
<p>Instead of websites providing classic access points via menus and taxonomies, they can employ different access points based upon user preferences and previous browsing history.  This is heavily dependent upon capturing user&#8217;s details via a cookie or a login system, like at Amazon, but the benefits to the user can be far more rewarding.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>So who is doing this?</strong></p>
<p>Understanding the demographics of your users and your site usage is key to Desire Lines. The <a href="http://www.bbc.co.uk" title="BBC" target="_blank" rel="nofollow">BBC</a> website is a great example whereby search statics are monitored frequently.  They adapt their web user interface and site structure based upon what people are typing into their search box thus making it easier for subsequent users to view the more relevant or interesting stories of the day.</p>
<p><a href="http://www.amazon.com" title="Amazon.com" target="_blank" rel="nofollow">Amazon</a> makes Desire Lines more explicit and beneficial to their users through Listmania, recommendations, Customers Who Bought This Item Also Bought,  What Do Customers Ultimately Buy After Viewing Items Like This?, Better Together, Recently Viewed Items, Wish Lists etc. In essence, Amazon does not provide a single standard way of finding an item, but relates each item together through a myriad of historic information from its user community.  The user therefore has the option to search for an item, use the catagories, or click on links and begin their own desired user journey, which can be uniquely distinct from other users journeys or a mirror of those journeys.</p>
<p><a href="http://uk.current.com/" title="Current TV UK" target="_blank" rel="nofollow">Current TV</a> takes the concept even further by showing content that is purely based upon what users want, or what they term as viewer-created content.  Current slice the schedule into short segments into &#8220;pods&#8221; &#8212; each just a few minutes long. These pods profile interesting people on the rise, intelligence on trends as they spring up around us, and international news from new perspectives. Anyone who wants to contribute can upload a video. Then, everyone in the Current online community helps decide what should be on TV. You can join in at either stage &#8212; watch &amp; vote or make video.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>Limitations to Desire Lines</strong></p>
<p>A key limitation, or possibly a challenge, to the successful adoption of Desire Lines concerns advertising revenues. For a user it is beneficial to be able to reached the desired destination as quickly and efficiently as possible, but for a website&#8217;s advertising revenue it certainly is not. To be simplistic and possibly cynical, many sites don&#8217;t want users to have an overly efficient experience as this limits page views and page impressions. The challenge, therefore, is to retain users on the website and provide them more relevant information and targeted advertising.</p>
<p>There are also implications on what is considered more relevant and what is not. The BBC to some extent decides based upon user searches, but this serves also to hide potentially captivating an important stories. One user&#8217;s preference isn&#8217;t necessarily the next&#8217;s, therefore creating an information bias. This may be even more problematic with our over-reliance on Google for finding information.  The Google algorithms essentially decide what we find even though we are told that the sites listed are based upon relevance and popularity.</p>
<p>Finally, you can&#8217;t pave every desire line. To do so would end in a playing field not covered in lush green grass with a few tracks intersecting the green, but a concrete mess.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/website-success-via-desire-lines/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Law of Demeter</title>
		<link>http://www.simonwhatley.co.uk/the-law-of-demeter</link>
		<comments>http://www.simonwhatley.co.uk/the-law-of-demeter#comments</comments>
		<pubDate>Fri, 05 Oct 2007 10:30:08 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[cohesion]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[coupling]]></category>
		<category><![CDATA[demeter]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[guideline]]></category>
		<category><![CDATA[law]]></category>
		<category><![CDATA[law of demeter]]></category>
		<category><![CDATA[least knowledge]]></category>
		<category><![CDATA[LoD]]></category>
		<category><![CDATA[object orientated]]></category>
		<category><![CDATA[principal]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=345</guid>
		<description><![CDATA[The Law of Demeter (LoD), or Principle of Least Knowledge, is a design guideline for developing software applications, particularly object-oriented programs. The guideline can be succinctly summarised as "Only talk to your immediate friends." The fundamental notion is that a given object should assume as little as possible about the structure or properties of anything else, including its sub-components.]]></description>
			<content:encoded><![CDATA[<p>The Law of Demeter (<acronym title="Law of Demeter">LoD</acronym>) as it is commonly called, is really more precisely the &#8220;Law of Demeter for Methods&#8221;. It is a design-style rule for object-oriented programs, but can be applied to &#8216;pseudo object-orientated&#8217; languages such as <a href="http://www.adobe.com/products/coldfusion" title="Adobe ColdFusion" target="_blank" rel="nofollow">ColdFusion</a> (with regard to the use of ColdFusion Components). In essence it is the &#8220;principle of least knowledge&#8221; regarding the object instances used within a method. The idea is to assume as little as possible about the structure and properties of instances and their sub-parts. Therefore, it is okay to request a service of an objects instance, but if I reach into that object to access another sub-object and request a service of that sub-object, I am making an assumption of the deeper structure of the original object. This results in tight <a href="http://en.wikipedia.org/wiki/Coupling_(computer_science)" title="Wikipedia entry - Coupling" target="_blank" rel="nofollow">coupling</a>, which is a sign of a poorly structured application.</p>
<p>The Law of Demeter says that if I need to request a service of an objects sub-part, I should instead make the request of the object itself and let it propagate this request to all relevant sub-parts, therefore the object is responsible for knowing its internal make-up instead of the method that uses it.</p>
<p>Stated in plain English:</p>
<ul>
<li>You can play with yourself</li>
<li>You can play with your own toys (but you can&#8217;t take them apart)</li>
<li>You can play with toys that were given to you; and</li>
<li>You can play with toys you&#8217;ve made yourself.</li>
</ul>
<p>Stated more succinctly, the Law of Demeter for Functions says that:</p>
<ul>
<li>Your method can call other methods in its class directly</li>
<li>Your method can call methods on its own fields directly (but not on the fields&#8217; fields)</li>
<li>When your method takes parameters, your method can call methods on those parameters directly; and</li>
<li>When your method creates local objects, that method can call method on the local objects.</li>
</ul>
<p>The basic idea is to avoid invoking methods of a member object that is returned by another method. When you do this, you make structural assumptions about the container object that may be likely to change. The container object may later need to be modified to contain a different number of the contained objects, or it may end up being changed to contain another object which contains the original component object. If the &#8216;returned&#8217; object isn&#8217;t a sub-part of the object whose method was invoked, nor of some other object, then it typically is not a violation of <acronym title="Law of Demeter">LoD</acronym> to invoke a method of the returned object (particularly if the object was created by the invoking method).Using the Law of Demeter (<acronym title="Law of Demeter">LoD</acronym>) you instead ask the container to invoke a method on its elements and return the result. The details of how the container propagates the message to its elements are encapsulated by the containing object. This results in weak coupling and strong cohesion, the general goal of high readability and maintainability of an application. This is highly desirable when building a &#8216;modern&#8217; ColdFusion application as it is all too easy getting trapped into the bad-old-days of <a href="http://en.wikipedia.org/wiki/Spaghetti_code" title="Spaghetti Code" target="_blank" rel="nofollow">&#8220;spaghetti code&#8221;</a>.</p>
<p>A side-effect of this is that if you conform to <acronym title="Law of Demeter">LoD</acronym>, while it may quite increase the maintainability and &#8216;adaptiveness&#8217; of your application, you also end up having to write lots of little wrapper methods to propagate methods calls to its components, which can add development time overhead.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/the-law-of-demeter/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion and Design Patterns</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-and-design-patterns</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-and-design-patterns#comments</comments>
		<pubDate>Sun, 05 Aug 2007 13:05:02 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[behavioural]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[creational]]></category>
		<category><![CDATA[dao]]></category>
		<category><![CDATA[data access object]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[facade]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[fundamental]]></category>
		<category><![CDATA[gateway object]]></category>
		<category><![CDATA[model-view-controller]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[structural]]></category>
		<category><![CDATA[value object]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=311</guid>
		<description><![CDATA[In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.]]></description>
			<content:encoded><![CDATA[<p>As we all are well aware, ColdFusion, historically, has been a programming language that has allowed for &#8216;<a href="http://en.wikipedia.org/wiki/Spaghetti_code" title="Definition of Spaghetti Code" target="_blank" rel="nofollow">spaghetti code</a>&#8216; and poor application design practices. However, with the emergence and maturity of major frameworks, such as <a href="http://www.fusebox.org" title="Fusebox Framework" target="_blank" rel="nofollow">Fusebox</a>, <a href="http://www.model-glue.com" title="Model Glue Framework" target="_blank" rel="nofollow">Model Glue</a>, <a href="http://www.mach-ii.com" title="Mach II Framework" target="_blank" rel="nofollow">Mach-II</a> and <a href="http://www.coldspringframework.org" title="ColdSpring Framework" target="_blank" rel="nofollow">ColdSpring</a>, there has been a shift of emphasis from poor coding, to re-usable and extensible development practices. With the maturity of the language comes the search for standard ways of achieving certain tasks. This is where design patterns lend themselves.</p>
<p style="text-align: center"><img src="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2007/08/pattern-bring-together.jpg" alt="Design Patterns" /></p>
<p>In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.</p>
<p>Not all software patterns are design patterns. Design patterns deal specifically with problems at the level of software design. Other kinds of patterns, such as architectural patterns, for example Model-View-Controller  (<acronym title="Model-View-Controller">MVC</acronym>), Implicit Invocation and Dependency Injection, describe problems and solutions that have alternative scopes. However, for ease, I generally consider software and architecture patterns under the design pattern scope.</p>
<p>Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.</p>
<p>Design patterns can be classified in terms of the underlying problem they solve. Examples of problem-based pattern classifications include Creational, Structural and Behavioural Patterns. Creational patterns, such as Singleton, deal with the creation of objects, Structural patterns, such as Facade, deal with the relationships between objects and Behavioural patterns, such as Observer, deal with the communication between objects.</p>
<p>The practical application of design patterns to ColdFusion applications is a new phenomenon and one which requires careful consideration. There is no sense in using a design pattern for the sake of using it, it must first solve the problem you have encountered. Common design patterns that I have used in my day-to-day development have included Singleton, Composite, Model-View-Controller (<acronym title="Model-View-Controller">MVC</acronym>), Data Access Object (<acronym title="Data Access Object">DAO</acronym>), Gateway, Bean and the Facade Pattern. These I will discuss in later articles.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>Further Reading:</strong></p>
<p>Alexander, Christopher; et al (1977). A Pattern Language: Towns, Buildings, Construction. New York: Oxford University Press. ISBN 0-195-01919-9.</p>
<p>Freeman, Elisabeth; Freeman, Eric; Bates, Bert (2004). Head First Design Patterns, paperback, O&#8217;Reilly. ISBN 0-596-00712-4.</p>
<p>Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software, hardcover, 395 pages, Addison-Wesley. ISBN 0-201-63361-2.</p>
<p>Shalloway, Alan; Trott, James (2001) Design Patterns Explained: A New Perspective on Object-Oriented Design, paperback, 368 pages, Addison-Wesley. ISBN 0-201-71594-5.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-and-design-patterns/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

