<?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; ActionScript</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/actionscript/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>Programmer’s Dozen &#8211; Programming Best Practices</title>
		<link>http://www.simonwhatley.co.uk/programmers-dozen-programming-best-practices</link>
		<comments>http://www.simonwhatley.co.uk/programmers-dozen-programming-best-practices#comments</comments>
		<pubDate>Tue, 03 Mar 2009 11:23:46 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[fuzzy logic]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[object orientated]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1826</guid>
		<description><![CDATA[Take control of your code with these programming best practices from Kevlin Henney. At JAOO Aarhus 2008 Kevlin used a trash can, vampires, a train wreck, whiskey and much more to make you understand and remember his 13 constructive points (a programmer’s dozen) about programming and code smells.]]></description>
			<content:encoded><![CDATA[<p>Take control of your code with these programming best practices from Kevlin Henney. At <abbr title="Java and object-oriented software engineering">JAOO</abbr> Aarhus 2008 Kevlin used a trash can, vampires, a train wreck, whiskey and much more to make you understand and remember his 13 constructive points (a programmer’s dozen) about programming and code smells.</p>
<p>The 13 points made by Kevlin were:</p>
<ul>
<li>0. Prefer code to comments.</li>
<li>1. Follow a consistent form.</li>
<li>2. Employ the contract metaphor.</li>
<li>3. Express independent ideas independently.</li>
<li>4. Encapsulate.</li>
<li>5. Parameterize from above.</li>
<li>6. Restrict mutability of state.</li>
<li>7. Favor symmetry over asymmetry.</li>
<li>8. Sharpen fuzzy logic.</li>
<li>9. Go with the flow.</li>
<li>10. Let code decide.</li>
<li>11. Omit needless code.</li>
<li>12. Unify duplicate code.</li>
</ul>
<p>You can see a <a href="http://blog.jaoo.dk/2009/01/19/programmers-dozen-programming-best-practices/" title="Programmer’s Dozen - Programming Best Practices" target="_blank" rel="nofollow">video of Kevlin&#8217;s presentation</a> on the <a href="http://jaoo.dk/" title="JAOO" target="_blank" rel="nofollow">JAOO 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>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/programmers-dozen-programming-best-practices/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>SQL User-Defined Function: ListToTable</title>
		<link>http://www.simonwhatley.co.uk/sql-user-defined-function-listtotable</link>
		<comments>http://www.simonwhatley.co.uk/sql-user-defined-function-listtotable#comments</comments>
		<pubDate>Mon, 22 Sep 2008 10:58:30 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[database server]]></category>
		<category><![CDATA[extend]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[sub-routine]]></category>
		<category><![CDATA[subroutine]]></category>
		<category><![CDATA[t-sql]]></category>
		<category><![CDATA[tabular]]></category>
		<category><![CDATA[UDF]]></category>
		<category><![CDATA[user defined function]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=426</guid>
		<description><![CDATA[A common need in SQL is the ability to iterate over a list as if it were an array. In SQL it is not possible to declare arrays, unlike other programming languages such as ColdFusion, ActionScript and Java. Fortunately, there is a way around this problem: use a User-Defined Functions (UDFs) to create a tabular version of the data. Arrays are, after all, essentially tabular data (at their simplest, one dimension level).]]></description>
			<content:encoded><![CDATA[<p>A common need in <abbr title="Structured Query Language">SQL</abbr> is the ability to iterate over a list as if it were an <a href="http://en.wikipedia.org/wiki/Array" title="Wikipedia: Array" target="_blank" rel="nofollow">array</a>. In <abbr title="Structured Query Language">SQL</abbr> it is not possible to declare arrays, unlike other programming languages such as ColdFusion, ActionScript and Java. Fortunately, there is a way around this problem: use a <a href="http://en.wikipedia.org/wiki/User-defined_function" title="Wikipedia: User-Defined Functions" target="_blank" rel="nofollow">User-Defined Functions</a> (<abbr title="User Defined Functions">UDF</abbr>s) to create a tabular version of the data. Arrays are, after all, essentially tabular data (at their simplest, one dimension level).</p>
<p>A User-Defined Function, is a function provided by the user of a program or environment. In <abbr title="Structured Query Language">SQL</abbr> databases, a user-defined function provides a mechanism for extending the functionality of the database server by adding a function that can be evaluated in <abbr title="Structured Query Language">SQL</abbr> statements.</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>The Function Code</h3>
<p>Below is the complete function definition:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><<span style="color: #0000ff;">|</span>/1/>CREATE</span> <<span style="color: #0000ff;">|</span>/1/>FUNCTION</span> dbo.udf_ListToTable
<span style="color: #66cc66;">&#40;</span>
	@LIST 		<<span style="color: #0000ff;">|</span>/2/>NVARCHAR</span><span style="color: #66cc66;">&#40;</span><<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">4000</span><span style="color: #66cc66;">&#41;</span>,
	@DELIMITER 	<<span style="color: #0000ff;">|</span>/2/>NVARCHAR</span><span style="color: #66cc66;">&#40;</span><<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">=</span> <span style="color: #ff0000;">','</span>
<span style="color: #66cc66;">&#41;</span>
<<span style="color: #0000ff;">|</span>/1/>RETURNS</span> @ListTable <<span style="color: #0000ff;">|</span>/1/>TABLE</span>
<span style="color: #66cc66;">&#40;</span>
	Item <<span style="color: #0000ff;">|</span>/2/>NVARCHAR</span><span style="color: #66cc66;">&#40;</span><<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">200</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<<span style="color: #0000ff;">|</span>/1/>AS</span>
<<span style="color: #0000ff;">|</span>/1/>BEGIN</span>
	<<span style="color: #0000ff;">|</span>/1/>DECLARE</span> @LenDel 	<<span style="color: #0000ff;">|</span>/2/>INT</span>
	<<span style="color: #0000ff;">|</span>/1/>DECLARE</span> @Pos 		<<span style="color: #0000ff;">|</span>/2/>INT</span>
	<<span style="color: #0000ff;">|</span>/1/>DECLARE</span> @Item 		<<span style="color: #0000ff;">|</span>/2/>NVARCHAR</span><span style="color: #66cc66;">&#40;</span><<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">200</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
	<span style="color: #808080;">--Get the length of the delimiter, use hack to get around LEN(' ') = 0 issue</span>
	<<span style="color: #0000ff;">|</span>/1/>SET</span> @LenDel <span style="color: #0000ff;">=</span> <span style="color: #ff00ff;">LEN</span><span style="color: #66cc66;">&#40;</span>@DELIMITER <span style="color: #0000ff;">+</span> <span style="color: #ff0000;">'|'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">-</span> <<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">1</span>
&nbsp;
	<<span style="color: #0000ff;">|</span>/1/>SET</span> @Pos <span style="color: #0000ff;">=</span> <span style="color: #ff00ff;">CHARINDEX</span><span style="color: #66cc66;">&#40;</span>@DELIMITER, @LIST<span style="color: #66cc66;">&#41;</span>
	<<span style="color: #0000ff;">|</span>/1/>WHILE</span> @Pos <span style="color: #66cc66;">&gt;</span> <<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">0</span>
	<<span style="color: #0000ff;">|</span>/1/>BEGIN</span>
		<span style="color: #808080;">--Get the item</span>
		<<span style="color: #0000ff;">|</span>/1/>SET</span> @Item <span style="color: #0000ff;">=</span> <span style="color: #ff00ff;">SUBSTRING</span><span style="color: #66cc66;">&#40;</span>@LIST, <<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">1</span>, @Pos-<<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #808080;">--Add it to the table (if not empty string)</span>
		<<span style="color: #0000ff;">|</span>/1/>IF</span> <span style="color: #ff00ff;">LEN</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff00ff;">LTRIM</span><span style="color: #66cc66;">&#40;</span>@Item<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">0</span>
			<<span style="color: #0000ff;">|</span>/1/>INSERT</span> @ListTable <span style="color: #66cc66;">&#40;</span>Item<span style="color: #66cc66;">&#41;</span> <<span style="color: #0000ff;">|</span>/1/>VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff00ff;">LTRIM</span><span style="color: #66cc66;">&#40;</span>@Item<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #808080;">--Remove the item from the list</span>
		<<span style="color: #0000ff;">|</span>/1/>SET</span> @LIST <span style="color: #0000ff;">=</span> <span style="color: #ff00ff;">STUFF</span><span style="color: #66cc66;">&#40;</span>@LIST, <<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">1</span>, @Pos+@LenDel-<<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">1</span>, <span style="color: #ff0000;">''</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #808080;">--Get the position of the next delimiter</span>
		<<span style="color: #0000ff;">|</span>/1/>SET</span> @Pos <span style="color: #0000ff;">=</span> <span style="color: #ff00ff;">CHARINDEX</span><span style="color: #66cc66;">&#40;</span>@DELIMITER, @LIST<span style="color: #66cc66;">&#41;</span>
	<<span style="color: #0000ff;">|</span>/1/>END</span>
&nbsp;
	<span style="color: #808080;">--Add the last item to the table (if not empty string)</span>
	<<span style="color: #0000ff;">|</span>/1/>IF</span> <span style="color: #ff00ff;">LEN</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff00ff;">LTRIM</span><span style="color: #66cc66;">&#40;</span>@LIST<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <<span style="color: #0000ff;">|</span> style<span style="color: #66cc66;">=</span>"color: #cc66cc;">0</span>
		<<span style="color: #0000ff;">|</span>/1/>INSERT</span> @ListTable <span style="color: #66cc66;">&#40;</span>Item<span style="color: #66cc66;">&#41;</span> <<span style="color: #0000ff;">|</span>/1/>VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff00ff;">LTRIM</span><span style="color: #66cc66;">&#40;</span>@LIST<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
	<<span style="color: #0000ff;">|</span>/1/>RETURN</span>
<<span style="color: #0000ff;">|</span>/1/>END</span>
<<span style="color: #0000ff;">|</span>/1/>GO</span></pre></div></div>

<p>The function simply loops over the list passed into the function. Each list item is then inserted into the variable named <code>@ListTable</code>, which is of type <code>TABLE</code>. The <code>@ListTable</code> variable is then returned out of the function and can be handled the same as any other table.</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>The Function In Use</h3>
<p>A simple demonstration is as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><<span style="color: #0000ff;">|</span>/1/>INSERT</span> <<span style="color: #0000ff;">|</span>/1/>INTO</span> tableName <span style="color: #66cc66;">&#40;</span>column1, column2, column3, column4<span style="color: #66cc66;">&#41;</span>
<<span style="color: #0000ff;">|</span>/1/>SELECT</span> @variable1, @variable2, myTable.item, <span style="color: #ff00ff;">GETDATE</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<<span style="color: #0000ff;">|</span>/1/>FROM</span> dbo.udf_ListToTable<span style="color: #66cc66;">&#40;</span>@list,<span style="color: #ff0000;">','</span><span style="color: #66cc66;">&#41;</span> <<span style="color: #0000ff;">|</span>/1/>AS</span> myTable</pre></div></div>

<p>In this example, we insert the same information (<code>@variable1</code>, <code>@variable2</code>) for every instance of an item found in <code>myTable</code>.</p>
<p>This is useful, for example, if you want to apply a setting to a group of users. The group of users could be contained in a list that needs to be parsed as a table, whilst the individual setting details are contained in the other variables.</p>
<h3>Download the Code</h3>
<p><a href="/examples/sql/functions/udf_ListToTable.txt" title="Download the code">Download the code</a>, rename the file to .sql and run on your database instance. You will then be able to reference the function in your Stored Procedures.</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/sql-user-defined-function-listtotable/feed</wfw:commentRss>
		<slash:comments>0</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>Preventing SQL Injection in an AIR Application</title>
		<link>http://www.simonwhatley.co.uk/preventing-sql-injection-in-an-air-application</link>
		<comments>http://www.simonwhatley.co.uk/preventing-sql-injection-in-an-air-application#comments</comments>
		<pubDate>Mon, 01 Sep 2008 10:41:20 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Integrated Runtime]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[attack]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[online repositories]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Injection]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[United States]]></category>
		<category><![CDATA[vulnerability]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=959</guid>
		<description><![CDATA[SQLite is a mostly ACID-compliant relational database management system contained in a relatively small (~500kB) C programming library. The Adobe AIR runtime includes the SQLite embedded database for use by Adobe AIR applications. This allows applications to run and store data locally and or synchronise the datastore with online repositories.]]></description>
			<content:encoded><![CDATA[<p>SQLite is a mostly <a href="http://en.wikipedia.org/wiki/ACID" title="Wikipedia: ACID" target="_blank" rel="nofollow">ACID</a>-compliant relational database management system contained in a relatively small (~500kB) C programming library. The Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> runtime includes the SQLite embedded database for use by Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> applications. This allows applications to run and store data locally and or synchronise the datastore with online repositories.</p>
<p>Applications that depend on user input to create a <abbr title="Structured Query Language">SQL</abbr> statement &#8212; concatenating the user input to the SQL query &#8212; can become vulnerable to <a href="http://en.wikipedia.org/wiki/SQL_injection" title="Wikipedia: SQL Injection" target="_blank" rel="nofollow">SQL Injection</a> attacks, much like those common to web applications.</p>
<p><abbr title="Structured Query Language">SQL</abbr> Injection is a technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in <abbr title="Structured Query Language">SQL</abbr> statements or user input is not strongly typed and thereby unexpectedly executed.</p>
<p>Fortunately, there is a simple solution to the problem: use parameterised <abbr title="Structured Query Language">SQL</abbr> Statements. Parameterised statements not only make your applications more secure and run more efficiently, but they also enable you to use objects, rather than literal values, in your queries. <abbr title="Structured Query Language">SQL</abbr> injection can&#8217;t happen because the parameter values are treated explicitly as substituted values, rather than becoming part of the literal statement text.</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>Parameters in a <abbr title="Structured Query Language">SQL</abbr> statement can be either <em>named</em> or <em>unnamed</em>. Below are examples of both types of statement in ActionScript and JavaScript.</p>
<h3>Named Parameters</h3>
<p>A named parameter has a specific name that is used to match the parameter value to its placeholder location in the <abbr title="Structured Query Language">SQL</abbr> statement text. A parameter name consists of the colon (:) or an at (@) character followed by the variable&#8217;s name:</p>
<p><strong>ActionScript 3</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> conn<span style="color: #000000; font-weight: bold;">:</span>SQLConnection = <span style="color: #0033ff; font-weight: bold;">new</span> SQLConnection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> stmt<span style="color: #000000; font-weight: bold;">:</span>SQLStatement = <span style="color: #0033ff; font-weight: bold;">new</span> SQLStatement<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
stmt.sqlConnection = conn;
stmt.<span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;INSERT INTO user VALUES(@title, @firstname, @lastname)&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">&quot;@title&quot;</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Mr&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">&quot;@firstname&quot;</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Simon&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">&quot;@lastname&quot;</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Whatley&quot;</span>;
stmt.execute<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p><strong>JavaScript</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> conn <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> stmt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">sqlConnection</span> <span style="color: #339933;">=</span> conn<span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;INSERT INTO user VALUES(@title, @firstname, @lastname)&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@title&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Mr&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@firstname&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Simon&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@lastname&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Whatley&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<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>Unnamed Parameters</h3>
<p>As an alternative to using explicit named parameters, you can also use implicit unnamed parameters. To use an unnamed parameter you simply designate a parameter in the <abbr title="Structured Query Language">SQL</abbr> statement using a question mark (?) character. Each parameter is assigned a numeric index, according to the order in which the parameters appear in the <abbr title="Structured Query Language">SQL</abbr> statement, <em>starting with index 0 (zero)</em> for the first parameter.</p>
<p><strong>ActionScript 3</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> conn<span style="color: #000000; font-weight: bold;">:</span>SQLConnection = <span style="color: #0033ff; font-weight: bold;">new</span> SQLConnection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> stmt<span style="color: #000000; font-weight: bold;">:</span>SQLStatement = <span style="color: #0033ff; font-weight: bold;">new</span> SQLStatement<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
stmt.sqlConnection = conn;
stmt.<span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;INSERT INTO address VALUES(?, ?, ?, ?)&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;123 Main Street&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Sometown&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">2</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;12345&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">3</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;USA&quot;</span>;
stmt.execute<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p><strong>JavaScript</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> conn <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> stmt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">sqlConnection</span> <span style="color: #339933;">=</span> conn<span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;INSERT INTO address VALUES(?, ?, ?, ?)&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;123 Main Street&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Sometown&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;12345&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;USA&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Note: Use <code>clearParameters()</code> to empty the statement parameters array; e.g. <code>stmt.clearParameters()</code>.</p>
<h3>Advantages</h3>
<ol>
<li><strong>Performance</strong> &#8211; A <abbr title="Structured Query Language">SQL</abbr> statement that uses parameters can execute more efficiently compared to one that dynamically creates the <abbr title="Structured Query Language">SQL</abbr> text each time it executes. The performance improvement is because the statement is prepared once and then executed multiple times using different parameter values, without needing to recompile the <abbr title="Structured Query Language">SQL</abbr> statement. A comparison can be draw with database stored procedures.</li>
<li><strong>Data Typing</strong> &#8211; Parameters are used to allow for typed-substitution of values that are unknown at the time the <abbr title="Structured Query Language">SQL</abbr> statement is constructed. The use of parameters is the only way to guarantee the type (storage class) for a value passed to the database. Using paramters therefore, implies better performance and security. When parameters are not used, the runtime attempts to convert all values from their text representation to a type based on the associated column&#8217;s type.</li>
<li><strong>Security</strong> &#8211; The <acronym title="Adobe Integrated Runtime">AIR</acronym> application is not vulnerable to <abbr title="Structured Query Language">SQL</abbr> injections so common to web applications.</li>
</ol>
<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/preventing-sql-injection-in-an-air-application/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ColdFusion Becomes a Teenager</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-becomes-a-teenager</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-becomes-a-teenager#comments</comments>
		<pubDate>Thu, 10 Jul 2008 18:14:36 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[1999]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe ColdFusion]]></category>
		<category><![CDATA[Allaire]]></category>
		<category><![CDATA[Centaur]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[ColdFusion Markup Language]]></category>
		<category><![CDATA[Derby]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jeremy Allaire]]></category>
		<category><![CDATA[JJ Allaire]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[macromedia]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Neo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scorpio]]></category>
		<category><![CDATA[Visual C++]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=591</guid>
		<description><![CDATA[Today ColdFusion moved into the next stage of its life and became a teenager, hopefully not a precocious one!]]></description>
			<content:encoded><![CDATA[<p>Today ColdFusion moved into the next stage of its life and became a teenager, hopefully not a precocious one!</p>
<p><strong>Happy 13<sup>th</sup> Birthday ColdFusion.</strong></p>
<p>Adobe ColdFusion has had a long and illustrious life. The first version of ColdFusion&#8211;written almost entirely by one person, JJ Allaire and then called &#8220;Cold Fusion&#8221;&#8211;was released in 1995. This first version, although revolutionising how web applications were built, was primitive by modern standards, doing little more than database access.</p>
<p>Although originally built in Visual C++, Allaire, around 1999, took the decision to rewrite the entire ColdFusion engine in Java&#8211;a project named &#8220;Neo&#8221;&#8211;which would allow for greater portability among different platforms. The rewrite, released under the monicker MX 6, would prove to be somewhat problematic and a wholescale update to the version resulted.</p>
<p>In 2001 Allaire was acquired by Macromedia. This union brought with it the integration of Macromedia&#8217;s Flash platform via Flash Remoting; a huge step towards rich Internet applications.</p>
<p>In 2005 it was the turn of Macromedia to be acquired and they merged with Adobe. A period of instability in the ColdFusion world resulted, brought about by the knowledge that Adobe was a company that developed tools, not programming languages. However, following a successful release of ColdFusion 8 in 2007 and the announcement that a version 9 would be developed, code-named &#8220;Centaur&#8221;, fears about ColdFusion&#8217;s future have subsided&#8211;albeit the continued debate over &#8220;ColdFusion is Dead&#8221; remains boiling in the background.</p>
<p>The primary distinguishing feature of ColdFusion is its associated scripting language, ColdFusion Markup Language (<abbr title="ColdFusion Markup Language">CFML</abbr>), which compares favourably to its rivals, <abbr title="Java Server Pages">JSP</abbr>, <abbr title="Active Server Pages">ASP</abbr>.NET, or <abbr title="PHP Hypertext Preprocessor">PHP</abbr> and resembles <abbr title="HyperText Markup Language">HTML</abbr> in syntax. &#8220;ColdFusion&#8221; is often used synonymously with &#8220;CFML&#8221;, but it should be noted that there are additional <abbr title="ColdFusion Markup Language">CFML</abbr> application servers besides ColdFusion, and that ColdFusion supports programming languages other than <abbr title="ColdFusion Markup Language">CFML</abbr>, such as server-side Actionscript and embedded scripts that can be written in a JavaScript-like language, known as <abbr title="ColdFusion">CF</abbr>Script. Adobe ColdFusion also includes native support for Flex, <abbr title="Portable Document Format">PDF</abbr>, Verity and the embedded Derby database amongst a host of <a href="http://www.adobe.com/products/coldfusion/features/" title="Features of Adobe ColdFusion" target="_blank" rel="nofollow">other features</a>.</p>
<p>ColdFusion 9 is set to be an exciting release, much like its predecessor, with more features added to the core tag set, whilst also integrating other technologies such <acronym title="Adobe Integrated Runtime">AIR</acronym> and Hibernate.</p>
<p>Exciting times lay ahead. Let&#8217;s hope Adobe takes full advantage with such a fine product.</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>See Also:</strong></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/ColdFusion" title="ColdFusion" target="_blank" rel="nofollow">ColdFusion</a> Wikipedia entry</li>
<li><a href="http://en.wikipedia.org/wiki/ColdFusion_Markup_Language" title="ColdFusion Markup Language" target="_blank" rel="nofollow">ColdFusion Markup Language</a> Wikipedia entry</li>
<li><a href="http://www.www.railo-technologies.com/" title="Railo" target="_blank" rel="nofollow">Railo</a> &#8211; Free, Open Source alternative <abbr title="ColdFusion Markup Language">CFML</abbr> Engine</li>
<li><a href="http://www.smithproject.org" title="SmithProject" target="_blank" rel="nofollow">SmithProject</a> &#8211; Free, Open Source alternative <abbr title="ColdFusion Markup Language">CFML</abbr> Engine</li>
<li><a href="http://www.newatlanta.com/bluedragon/" title="BlueDragon" target="_blank" rel="nofollow">BlueDragon</a> &#8211; Free, Open Source alternative <abbr title="ColdFusion Markup Language">CFML</abbr> Engine</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-becomes-a-teenager/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActionScript 3 RIA Reference Guide</title>
		<link>http://www.simonwhatley.co.uk/actionscript-3-ria-reference-guide</link>
		<comments>http://www.simonwhatley.co.uk/actionscript-3-ria-reference-guide#comments</comments>
		<pubDate>Mon, 07 Apr 2008 08:46:21 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Flash Player]]></category>
		<category><![CDATA[Adobe Integrated Runtime]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Internet application development]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[the Flash Player]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=484</guid>
		<description><![CDATA[The ActionScript reference for rich Internet application development provides an alphabetical reference for all native ActionScript APIs for the Adobe technology platform runtimes: Adobe Flash Player and Adobe AIRâ€”as well as the Adobe Flex framework APIs. Use this guide both as an API reference and a tool to learn about the ActionScript APIs available within the runtimes.]]></description>
			<content:encoded><![CDATA[<p>The ActionScript reference for rich Internet application development provides an alphabetical reference for all native ActionScript <acronym title="Application Programming Interface">API</acronym>s for the Adobe technology platform runtimes: Adobe Flash Player and Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym>â€”as well as the Adobe Flex framework <acronym title="Application Programming Interface">API</acronym>s. Use this guide both as an <acronym title="Application Programming Interface">API</acronym> reference and a tool to learn about the ActionScript <acronym title="Application Programming Interface">API</acronym>s available within the runtimes.</p>
<p>Download the <a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/actionscript_ria_guide.pdf' title='ActionScript reference for RIA development'>ActionScript reference for RIA development</a> (PDF 1.3MB)</p>
<p>The Adobe technology platform contains two primary runtimes. Flash Player is browser-based, and Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> is desktop-based. Because Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> is built on top of Flash Player, the Flash Player <acronym title="Application Programming Interface">API</acronym>s are available within Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym>. Consequently, Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> <acronym title="Application Programming Interface">API</acronym>s are not available within Flash Player. The Flex framework is built on top of the Flash Player <acronym title="Application Programming Interface">API</acronym>s, so it runs in both Flash Player and Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym>. However, a number of Flex <acronym title="Application Programming Interface">API</acronym>s take advantage of <acronym title="Adobe Integrated Runtime">AIR</acronym> <acronym title="Application Programming Interface">API</acronym>s, and thus work only within Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym>.</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>More information about this guide can be found on the <a href="http://www.adobe.com/devnet/actionscript/articles/atp_ria_guide.html" title="Adobe Developer Centre Website" target="_blank" rel="nofollow">Adobe Developer Centre Website</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/actionscript-3-ria-reference-guide/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Great Adobe AIR Applications to Check Out</title>
		<link>http://www.simonwhatley.co.uk/great-adobe-air-applications-to-check-out</link>
		<comments>http://www.simonwhatley.co.uk/great-adobe-air-applications-to-check-out#comments</comments>
		<pubDate>Wed, 19 Mar 2008 09:43:25 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Integrated Runtime]]></category>
		<category><![CDATA[Adobe Labs]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Asynchronous JavaScript and XML]]></category>
		<category><![CDATA[bbc]]></category>
		<category><![CDATA[Benjamin Dobler]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[collaboration tool]]></category>
		<category><![CDATA[designer]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[desktop applications]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML & XHTML]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[internet-ready]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Kuler]]></category>
		<category><![CDATA[less developer-centric tools]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Marco Kaiser]]></category>
		<category><![CDATA[Microsoft Vista]]></category>
		<category><![CDATA[Nicolas Lierman]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[Picnik image editor]]></category>
		<category><![CDATA[RichFLV]]></category>
		<category><![CDATA[Runtime ( AIR )]]></category>
		<category><![CDATA[SearchCoders]]></category>
		<category><![CDATA[social-interaction tool]]></category>
		<category><![CDATA[Tweetr]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Web Browser]]></category>
		<category><![CDATA[web screenshot tool]]></category>
		<category><![CDATA[web skills]]></category>
		<category><![CDATA[Web technologies]]></category>
		<category><![CDATA[web-based suite]]></category>
		<category><![CDATA[web-hosted application]]></category>
		<category><![CDATA[WebKut]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=472</guid>
		<description><![CDATA[Since the Adobe Integrated Runtime (AIR) was released at the end of February, we now have a stable platform on which to build desktop applications with our existing web skills. A number of people have already started and the Adobe AIR Marketplace is filling with AIR applications by the day.

So what is the big deal?]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/adobe_air_logo.thumbnail.png' alt='Adobe AIR Logo' style="margin-right:5px; float:left;" />Since the Adobe Integrated Runtime (<acronym title="Adobe Integrated Runtime">AIR</acronym>) was released at the end of February, we now have a stable platform on which to build desktop applications with our existing web skills. A number of people have already started and the <a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=productHome&#038;exc=24&#038;loc=en_us" title="Adobe AIR Marketplace" target="_blank" rel="nofollow">Adobe AIR Marketplace</a> is filling with <acronym title="Adobe Integrated Runtime">AIR</acronym> applications by the day.</p>
<p>So what is the big deal? The Adobe marketing team state that:</p>
<blockquote><p>The Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> runtime lets developers use proven web technologies to build rich Internet applications that deploy to the desktop and run across operating systems. Adobe AIR offers an exciting new way to engage customers with innovative, branded desktop applications, without requiring changes to existing technology, people, or processes.</p></blockquote>
<p>What <acronym title="Adobe Integrated Runtime">AIR</acronym> applications should you check out?</p>
<p>What is intriguing is that all the tools I have chosen are generally useful tools for the developer or designer, with the exception of twhirl, which is a social-interaction tool. I&#8217;m looking forward to when other, less developer-centric tools become freely available. <a href="http://www.agileagenda.com" title="AgileAgenda" target="_blank" rel="nofollow">AgileAgenda</a> has taken the lead with this respect, albeit not freely available, as has <a href="http://desktop.ebay.com" title="eBay Desktop" target="_blank" rel="nofollow">eBay desktop</a>, but I would like to see examples from the <acronym title="British Broadcasting Corporation">BBC</acronym> in the form of a desktop <a href="http://www.bbc.co.uk/iplayer/" title="BBC iPlayer" target="_blank" rel="nofollow">BBC iPlayer</a> or maybe a Flickr image browser, del.icio.us bookmark reader, <acronym title="Really Simple Syndication">RSS</acronym> aggregator and a <a href="http://www.picnik.com" title="Picnik" target="_blank" rel="nofollow">Picnik</a> image editor.</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>Analytics Reporting Suite</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/google_analytics_logo.thumbnail.gif' alt='Google Analytics Reporting Suite' style="margin-right:5px; float:left;" />The Analytics Reporting Suite, by Nicolas Lierman, brings <a href="http://www.google.com/analytics" title="Google Analytics" target="_blank" rel="nofollow">Google Analytics</a> to the desktop. It uses it&#8217;s own custom <acronym title="Application Programming Interface">API</acronym> to interact with Google and nearly implements all the features of Analytics.</p>
<p>For website owners this is a must-have application. Like the twhirl <acronym title="Adobe Integrated Runtime">AIR</acronym> application below, it is a fantastic example of what can be achieved with Flex and <acronym title="Adobe Integrated Runtime">AIR</acronym>. Measuring visitor trends and traffic are essential tasks to managing and improving a websites performance. The Analytics Reporting Suite allows you to configure multiple Google&#8217;s Analytics accounts and access the web-based suite&#8217;s plethora of features via a desktop application. The application displays integrated graphs and animations via a tabbed interface, which allows you switch between a number of reports. These reports can then be saved as a <acronym title="Portable Document Format">PDF</acronym>, Excel or <acronym title="eXtensible Markup Language">XML</acronym>document, or printed.</p>
<p>You can <a href="http://www.aboutnico.be/index.php/downloads/" title="Google Analytics Reporting Suite" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the About Nico website.</p>
<h3>twhirl twitter Client</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/twhirl_logo.thumbnail.jpg' alt='Twhirl Logo' style="margin-right:5px; float:left;" />twhirl, by Marco Kaiser, is probably the most popular desktop client for the <a href="http://twitter.com" title="twitter microblogging" target="_blank" rel="nofollow">twitter</a> micro-blogging service. Most of the features available on the twitter website are accessible through twhirl, plus, a lot of usability enhancements have been added to make it easier to manage multiple accounts. This is great for those who want to separate business and personal accounts they may have.</p>
<p>The twhirl application is a great example of how <acronym title="Adobe Integrated Runtime">AIR</acronym> can bring web applications to the desktop; it can dock to the system tray, display message alerts and you can configure the applications opacity when not focused (great if you like Mac and Vista-styled themes). The application allows you to search twitter users, view their timelines, add friends, view followers, delete tweets and much much more. Twhirl automatically fetches your friends&#8217; status updates, direct messages and replies, whilst also colour coding different types of messages and alerting you to messages both audibly and visually.</p>
<p>The twhirl application is skinnable and comes with several built in skins with which you can customise the application. All-in-all twhirl is not only one of the best twitter clients, but <acronym title="Adobe Integrated Runtime">AIR</acronym> applications.</p>
<p>You can <a href="http://www.twhirl.org/project/twhirl" title="twhirl twitter client" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the twhirl website.</p>
<h3>Kuler Desktop</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/kuler_logo.png' alt='Adobe Kuler Logo' style="margin-right:5px; float:left;" />Adobe kuler is the first web-hosted application from Adobe Labs designed both to stand alone and to complement <a href="http://www.adobe.com/products/creativesuite/" title="Adobe Creative Suite 3" target="_blank" rel="nofollow">Adobe Creative Suite</a> software. Built using <a href="http://www.adobe.com/products/flash/" title="Adobe Flash" target="_blank" rel="nofollow">Adobe Flash</a> and ActionScript 3.0, kuler is all about colour: colour for exploration, inspiration, experimentation and sharing. Kuler is clearly targeted at the designer, but anyone interested in colour will benefit from its use.</p>
<p>You can <a href="http://kuler.adobe.com" title="Kuler Desktop" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the Adobe Labs website.</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>WebKut</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/webkut_logo.png' alt='WebKut Logo' style="margin-right:5px; float:left;" />WebKut is a web screenshot tool that allows you to capture web pages, or parts of them in a very simple way. It provides you with 3 capture options: the entire page, the current view, or only a selection. This little application proves particularly handy for those presentations or projects that need great visuals from the web.</p>
<p>You can <a href="http://toki-woki.net/p/WebKut/" title="WebKut" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the WebKut website.</p>
<h3>RichFLV</h3>
<p>RichFLV, by Benjamin Dobler, lets you edit <acronym title="Flash Video">FLV</acronym> files. The key features include reading <acronym title="Flash Video">FLV</acronym> metadata, read and edit cuepoints, cut <acronym title="Flash Video">FLV</acronym> files, convert the sound from an <acronym title="Flash Video">FLV</acronym> to <acronym title="MPEG-1 Audio Layer 3">MP3</acronym> format, convert an <acronym title="Flash Video">FLV</acronym> to an <acronym title="Shockwave Flash">SWF</acronym> &#8230; and much more.</p>
<p>You can <a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&#038;loc=en_us&#038;extid=1355018" title="RichFLV" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> Marketplace website.</p>
<h3>SearchCoders Dashboard</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/searchcoders_logo.thumbnail.png' alt='SearchCoders Logo' style="margin-right:5px; float:left;" />This Flex-based chat widget is designed with programmers in mind. The code input feature allows developers to chat about code without disrupting the conversation.</p>
<p>You can <a href="http://www.searchcoders.com/" title="SearchCoders" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the SearchCoders website.</p>
<h3>Pownce</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/03/pownce_logo.thumbnail.png' alt='Pownce Logo' style="margin-right:5px; float:left;" />Much like twhirl in look, feel and ease-of-use, but with a slant towards productivity rather than micro-blogging, Pownce is a way to keep in touch and share things with your friends or colleagues.  You can send people files, links, events, and messages and then have real conversations with the recipients. This is a great collaboration tool and was one of the first services to really embrace <acronym title="Adobe Integrated Runtime">AIR</acronym> as an application architecture, which could realise their service as a desktop client. Everything that is available via the Pownce website is also available via the client application, except and possibly importantly, the ability for the user to amend their account settings and add friends to your network; this still has to be done via the website.</p>
<p>For a small annual amount, Pownce offers a paid-for service which will eliminate adverts from your profile and allow you to send huge file sizes (100<acronym title="MegaByte">MB</acronym>) and customise the theme of your Pownce.</p>
<p>Pownce also offers Drupal integration and a mobile application, which works with the iPhone, BlackBerries and many more &#8216;internet-ready&#8217; mobile devices.</p>
<p>You can <a href="http://pownce.com/" title="Pownce" target="_blank" rel="nofollow" class="snap_noshots">download and install</a> the application from the Pownce website.</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/great-adobe-air-applications-to-check-out/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FDT 3.0 ActionScript Development Tool</title>
		<link>http://www.simonwhatley.co.uk/fdt-30-actionscript-development-tool</link>
		<comments>http://www.simonwhatley.co.uk/fdt-30-actionscript-development-tool#comments</comments>
		<pubDate>Mon, 19 Nov 2007 16:53:40 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[development tool]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[FDT 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Java Development Tool]]></category>
		<category><![CDATA[JDT]]></category>
		<category><![CDATA[powerflasher]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=390</guid>
		<description><![CDATA[For a long time now Adobe's Flex IDE has been the only tool for developing ActionScript 3 applications. Now there is an alternative in the form of PowerFlasher's FDT 3.0.]]></description>
			<content:encoded><![CDATA[<p>For a long time now Adobe&#8217;s <a href="http://www.adobe.com/flex/" title="Adobe Flex" target="_blank" rel="nofollow">Flex IDE</a> has been <del datetime="2008-09-30T21:30:44+00:00">the</del> one of the only tools for developing ActionScript 3 applications. Now there is an alternative in the form of <a href="http://fdt.powerflasher.com" title="PowerFlasher's FDT 3.0" target="_blank" rel="nofollow">PowerFlasher&#8217;s <acronym title="Flash Development Tool">FDT</acronym> 3.0</a>.</p>
<p>Developed for internal by PowerFlasher, the <acronym title="Flash Development Tool">FDT</acronym> (Flash Development Tool) wowed freelancers so much that the company decided to launch it as a commercial product.  Like Flex Builder, <acronym title="Flash Development Tool">FDT</acronym> is built upon the Eclipse framework and therefore has many similarities with other Eclipse-based tools, not least <acronym title="Java Development Tool">JDT</acronym> upon which it is based.</p>
<p>It is great to see competing tools out there on the market and it can only serve to strengthen the popularity of the technology.</p>
<p>PowerFlasher&#8217;s tool can be found at <a href="http://fdt.powerflasher.com" title="PowerFlasher's FDT 3.0" target="_blank" rel="nofollow">http://fdt.powerflasher.com</a>. It is really worth a look.</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/fdt-30-actionscript-development-tool/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Future of the Rich Internet</title>
		<link>http://www.simonwhatley.co.uk/the-future-of-the-rich-internet</link>
		<comments>http://www.simonwhatley.co.uk/the-future-of-the-rich-internet#comments</comments>
		<pubDate>Fri, 22 Jun 2007 21:13:37 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[enterprise architecture]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Information Architecture]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MXML]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Service Orientated Architecture]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[Software as a Service]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Interface Design]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=290</guid>
		<description><![CDATA[The Internet has emerged from obscurity to become a dominant platform for application development and is integral to the idea of Software as a Service (SaaS). Unfortunately the demand to build applications of increasing complexity has continued to outpace the ability of traditional Web applications to represent that complexity and expectation. Utilisation of AJAX technologies attempts to reconcile some of the issues, but frequently the result is a frustrating, confusing or disengaging user experience resulting in unhappy customers, lost sales, and increased costs.]]></description>
			<content:encoded><![CDATA[<p>The Internet has emerged from obscurity to become a dominant platform for application development and is integral to the idea of Software as a Service (<acronym title="Software as a Service">SaaS</acronym>). Unfortunately the demand to build applications of increasing complexity has continued to outpace the ability of traditional Web applications to represent that complexity and expectation. Utilisation of <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> technologies attempts to reconcile some of the issues, but frequently the result is a frustrating, confusing or disengaging user experience resulting in unhappy customers, lost sales, and increased costs.</p>
<p>We are in a period of expanding opportunity for Internet and intranet applications. The growth in adoption and usage of the Internet has acted as a driver behind technology spending, spawned such terms as Service Orientated Architecture (<acronym title="Service Orientated Architecture">SOA</acronym>), Software as a Service (<acronym title="Software as a Service">SaaS</acronym>) and Web Services, and enterprise integration trends that seek to combine back-office infrastructures with new front-office applications and the Internet.</p>
<p>Integral to this is the need to communicate better with employees, customers, suppliers, and partners. Intranet applications, including enterprise information portals and employee facing applications, are increasingly depended upon to share information across a company, while outwardly focused extranet applications seek to more tightly bind networks of partners, suppliers and customers and make communication, business transactions and support easier.</p>
<p>A key reason Web applications cannot represent these types of complexity is because of the limitations of <acronym title="HyperText Markup Language">HTML</acronym> pages. The Internet grew up on the notion of a network of loosely coupled, unintelligent clients that communicate with increasingly intelligent servers by sending requests for pages. The emergence of Rich Internet Applications (<acronym title="Rich Internet Application">RIA</acronym>&#8216;s) has served to blur the distinction between the desktop and the Web and has resulted in smart, powerful and dynamic user interfaces. <acronym title="Rich Internet Application">RIA</acronym>&#8216;s seek to combine the best of the desktop, Web and communication technologies.</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>As one would expect, the driving forces behind Rich Internet Applications are the big guns in the technology and Web industry; namely <a href="http://www.adobe.com" rel="nofollow" target="_blank" title="Adobe">Adobe</a>, <a href="http://www.google.com" rel="nofollow" target="_blank" title="Google">Google</a> and <a href="http://www.microsoft.com" rel="nofollow" target="_blank" title="Microsoft">Microsoft</a>. Each company has produced their own <acronym title="Rich Internet Application">RIA</acronym> platforms:</p>
<p align="center"><img src="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2007/06/rich-internet.jpg" alt="Rich Internet Applications" /></p>
<h3>Adobe Integrated Runtime (<acronym title="Adobe Integrated Runtime">AIR</acronym>)</h3>
<p><acronym title="Adobe Integrated Runtime">AIR</acronym> is a cross-operating system runtime that allows developers to leverage their existing web development skills Flash, Flex, <acronym title="HyperText Markup Language">HTML</acronym>, Ajax) to build and deploy desktop <acronym title="Rich Internet Application">RIA</acronym>&#8216;s.</p>
<p>Applications can be built using the following technologies:</p>
<ul>
<li>Flash / Flex / ActionScript</li>
<li><acronym title="HyperText Markup Language">HTML</acronym> / JavaScript / <acronym title="Cascading Style Sheets">CSS</acronym> / <acronym title="Asynchronous JavaScript and XML">AJAX</acronym></li>
<li>Combination of these technologies</li>
<li>PDF can be leveraged with any application</li>
</ul>
<p>Adobe Integrated Runtime can be found at <a href="http://labs.adobe.com/technologies/air/" rel="nofollow" target="_blank" title="Adobe Integrated Runtime">http://labs.adobe.com/technologies/air/</a></p>
<h3>Google Gears</h3>
<p>Google Gears is an open source browser extension that lets developers create web applications that can run offline.</p>
<p>Google Gears consists of three modules that address the core challenges in making web applications work offline.</p>
<ul>
<li><a href="http://code.google.com/apis/gears/api_localserver.html">LocalServer</a> Cache and serve application resources (HTML, JavaScript, images, etc.) locally</li>
<li><a href="http://code.google.com/apis/gears/api_database.html">Database</a> Store data locally in a fully-searchable relational database</li>
<li><a href="http://code.google.com/apis/gears/api_workerpool.html">WorkerPool</a> Make your web applications more responsive by performing resource-intensive operations asynchronously</li>
</ul>
<p>Google Gears can be found at <a href="http://gears.google.com/" rel="nofollow" target="_blank" title="Google Gears">http://gears.google.com</a></p>
<h3>Micrsoft Silverlight</h3>
<p>Silverlight is a cross-browser, cross-platform plug-in for delivering the next generation of .NET based media experiences and rich interactive applications for the Web. Silverlight offers a flexible programming model that supports AJAX, VB, C#, Python, and Ruby, and integrates with existing Web applications. Silverlight supports fast, cost-effective delivery of high-quality video to all major browsers running on the Mac OS or Windows.</p>
<p>Microsoft Silverlight can be found at <a href="http://silverlight.net" rel="nofollow" target="_blank" title="Microsoft Silverlight">http://silverlight.net</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>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/the-future-of-the-rich-internet/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

