<?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; Server Side</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/server-side/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>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>JavaScript Frameworks &#8211; Let There Be Light</title>
		<link>http://www.simonwhatley.co.uk/javascript-frameworks-let-there-be-light</link>
		<comments>http://www.simonwhatley.co.uk/javascript-frameworks-let-there-be-light#comments</comments>
		<pubDate>Wed, 16 Jul 2008 17:27:58 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe ColdFusion]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[client-side]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[server-side technology]]></category>
		<category><![CDATA[Spry]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[web developers]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[Yahoo user interface]]></category>
		<category><![CDATA[Yahoo! User Interface Library]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=599</guid>
		<description><![CDATA[For many web developers, whenever JavaScript is mentioned it provokes a rye smile; JavaScript is one of those programming languages that is rather avoided than embraced. This is not the fault of the language itself, but rather the browsers.]]></description>
			<content:encoded><![CDATA[<p>For many web developers, whenever JavaScript is mentioned it provokes a rye smile; JavaScript is one of those programming languages that is rather avoided than embraced. This is not the fault of the language itself, but rather the browsers. A few years ago, the landscape of client-side scripting was a bleak scene. Browser inconsistencies, particularly with the dominant Internet Explorer, implementation bugs and numerous target platforms made developing client-side JavaScript a tricky undertaking.</p>
<p>To the consternation of these same developers, the landscape changed and Web 2.0 hit the mainstream. Almost overnight, every website on the internet wanted to use or was using AJAX. Marketers joined the bandwaggon and every feature requested had to involve something dynamic and revolutionary. Thus JavaScript development quickly hit the forefront of peoples minds and became as important as any server-side technology available at the time.</p>
<p>Over the next few blog posts, I will be using the popular frameworks <a href="http://jquery.com" title="jQuery" target="_blank" rel="nofollow">jQuery</a>, <a href="http://developer.yahoo.com/yui/" title="Yahoo! User Interface Library" target="_blank" rel="nofollow">Yahoo! User Interface Library</a> (<abbr title="Yahoo User Interface">YUI</abbr>), <a href="http://extjs.com" title="ExtJS" target="_blank" rel="nofollow">ExtJS</a> and Adobe&#8217;s <a href="http://labs.adobe.com/technologies/spry/" title="Spry" target="_blank" rel="nofollow">Spry</a> with ColdFusion to demonstrate various techniques, such as autocomplete and form validation.</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/javascript-frameworks-let-there-be-light/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Poor Man&#039;s HTTP Compression with ColdFusion</title>
		<link>http://www.simonwhatley.co.uk/poor-mans-http-compression-with-coldfusion</link>
		<comments>http://www.simonwhatley.co.uk/poor-mans-http-compression-with-coldfusion#comments</comments>
		<pubDate>Sat, 17 Mar 2007 15:11:23 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Application Servers]]></category>
		<category><![CDATA[Coldbeans]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTP protocol]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[web application]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Web Browser]]></category>
		<category><![CDATA[Web Servers]]></category>
		<category><![CDATA[WEB-INF folder]]></category>
		<category><![CDATA[WEB-INF/lib folder]]></category>
		<category><![CDATA[web.xml]]></category>
		<category><![CDATA[web.xml file]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=260</guid>
		<description><![CDATA[Almost every web application will benefit from the compression of content. A compression filter optimises the size of the content that is sent from a webserver to a web browser via the Internet. Since generating content and serving pages via the World Wide Web is the core behind web applications, it is simple components that aid these processes that are incredibly useful. This is where servlet filters come into play.]]></description>
			<content:encoded><![CDATA[<p>An interesting article I read in the CFDJ recently was entitled Poor Man&#8217;s HTTP Compression with ColdFusion. Almost every web application will benefit from the compression of content. A compression filter optimises the size of the content that is sent from a webserver to a web browser via the Internet. Since generating content and serving pages via the World Wide Web is the core behind web applications, it is simple components that aid these processes that are incredibly useful. This is where servlet filters come into play.</p>
<p>Servlet filters are tools available to web application developers. They are designed to be able to manipulate the request and responses that are sent to a web application, without manipulating the servlets, static pages like HTML and, in this case, CFM pages that are being used by the web application (unless of course that is the desired response). Servlet filters act like a chain of steps that a request and response must go through before reaching the page in the 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>Compressing Content Using a Servlet Filter</h3>
<p>Compression is a process that reduces the number of bytes required to define a document in order to save disk space or transmission time. It is extremely useful for sending information across the web, because the speed at which people receive information from a web application is dependent upon how much data you are trying to send. The smaller the amount of information that is to be sent, the faster it can be sent. Therefore, compression and the associated responsiveness is a key component to retaining users and generating revenue from those retained users.</p>
<p>Compression can be effectively achieved by having a servlet filter conditionally pipe the produced content to a GZip-compressed file. GZip is supported by the HTTP protocol and almost all modern browsers (hence the servlet filter conditionally compresses the content).</p>
<p>GZip compression usually results in a 6:1 compression ratio, although this depends on how much content is being sent and what the content is.</p>
<h3>Setting up the Servlet Filter in ColdFusion</h3>
<p>Using the ColdBeans servlet filter found at the following URL:</p>
<p><a href="http://www.servletsuite.com/servlets/gzipflt.htm" rel="nofollow">http://www.servletsuite.com/servlets/gzipflt.htm</a></p>
<ul>
<li>Download the <a href="http://www.servletsuite.com/servlets/gzipflt.jar" rel="nofollow">GZipFilter.jar</a></li>
<li>Save GZipFilter.jar in the WEB-INF/lib folder in the ColdFusion Server wwwroot.</li>
<li>Edit the web.xml file in the WEB-INF folder in the ColdFusion Server wwwroot with the following code:

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;filter&gt;
&lt;filter-name&gt;GzipFilter&lt;/filter-name&gt;
&lt;filter-class&gt;com.cj.gzipflt.GzipFilter&lt;/filter-class&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;GzipFilter&lt;/filter-name&gt;
&lt;url-pattern&gt;*.cfm&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</pre></div></div>

</li>
<li>Restart the ColdFusion Service</li>
</ul>
<p>Now, when you invoke any <code>.cfm</code> page the GzipFilter will check out client&#8217;s browser settings. If the browser does not support gzip, the filter invokes resource normally. If the browser does support gzip, output will be compressed.<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/poor-mans-http-compression-with-coldfusion/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>onTap &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/ontap-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/ontap-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 15:41:43 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[onTap]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=13</guid>
		<description><![CDATA[The onTap framework is an Open Source Framework for quickly developing powerful web applications using Macromedia's ColdFusion application server.]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.fergusonhouse.com/">onTap</a> framework is an Open Source Framework for quickly developing powerful web applications using Macromedia&#8217;s ColdFusion application server. The framework itself bears a marked resemblance to the recently buzzy <a href="http://www.rubyonrails.org/">Ruby on Rails</a>.</p>
<p>The <a href="http://www.fergusonhouse.com/">onTap</a> Framework can be downloaded at the following <acronym title="Universal Resource Locator">url</acronym>:</p>
<p><a href="http://www.fergusonhouse.com/?netaction=download">http://www.fergusonhouse.com/?netaction=download</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/ontap-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fusebox &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/fusebox-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/fusebox-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 14:59:53 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Fusebox]]></category>
		<category><![CDATA[Fusebox application architect]]></category>
		<category><![CDATA[Fusebox architect]]></category>
		<category><![CDATA[good manager]]></category>
		<category><![CDATA[machinery]]></category>
		<category><![CDATA[Magicbox (FLIP) Twin 1-Line Cordless Phone]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sean Corfield]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web framework]]></category>
		<category><![CDATA[web-based application frameworks]]></category>
		<category><![CDATA[Web-based applications]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=7</guid>
		<description><![CDATA[Application developers face a daunting task: they must translate the often fuzzily-defined requirements for a new application into the rigid language of computers.]]></description>
			<content:encoded><![CDATA[<p>Application developers face a daunting task: they must translate the often fuzzily-defined requirements for a new application into the rigid language of computers. While the Fusebox Lifecycle Process (<acronym title="Fusebox Lifecycle Process">FLiP</acronym>) offers help in managing the project management aspects of creating a new application, what help is there available to developers approaching the technical challenges of creating and maintaining applications?</p>
<p>Application frameworks answer this question, offering pre-built (and pre-tested) code &#8212; a collection of services that can provide the architectural underpinnings for a particular type of application. Web-based applications are increasingly the choice for new application development in which the browser becomes the &#8220;universal client&#8221;. As web development matures, web-based application frameworks allow the developer to concentrate more on meeting the business needs of the application and less on the &#8220;plumbing&#8221; needed to make that application work.</p>
<p>Fusebox is, by far, the most popular and mature web framework available for ColdFusion and PHP developers. The architecture of a Fusebox application is divided into various sections (&#8220;circuits&#8221; in Fusebox parlance), each of which has a particular focus. For example, the responsiblity for ensuring that only authorized users have access to all or part of the application might fall under a Security circuit.</p>
<p>The Fusebox application architect defines these circuits, as well as the individual actions (&#8220;fuseactions&#8221;) that may be requested of it. When a fuseaction request is made of the application, the Fusebox machinery (the &#8220;Fusebox&#8221;) routes the request to the appropriate circuit, where the fuseaction is processed. This idea of encapsulation of responsibilities makes it easy for different functional circuits to be &#8220;plugged&#8221; into an application, making it possible to reuse code.</p>
<p>Within the individual circuit responsible for carrying out the requested fuseaction, the Fusebox architect specifies the individual files (&#8220;fuses&#8221;) needed to fulfill the fuseaction request. Thus, the Fusebox acts like a good manager, delegating tasks to appropriate departments where it is decomposed into individual tasks, each of which can be assigned to individuals to carry out.</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/fusebox-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mach-II &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/mach-ii-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/mach-ii-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 14:56:39 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Ben Edwards]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Hal Helms]]></category>
		<category><![CDATA[Mach-II]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[web-application framework]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=8</guid>
		<description><![CDATA[Mach-II is a web-application framework focused on easing software development and maintenance developed by Hal Helms and Ben Edwards.]]></description>
			<content:encoded><![CDATA[<p>Mach-II is a web-application framework focused on easing software development and maintenance developed by <a href="http://www.halhelms.com/">Hal Helms</a> and Ben Edwards.</p>
<p><a href="http://www.mach-ii.com/">http://www.mach-ii.com</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/mach-ii-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Model-Glue &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/model-glue-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/model-glue-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 14:55:28 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Alagad Inc.]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Doug Hughes]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Joe Rinehart]]></category>
		<category><![CDATA[Lightweight]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[Model and Controller]]></category>
		<category><![CDATA[Model-Glue]]></category>
		<category><![CDATA[Paul Kenney]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=9</guid>
		<description><![CDATA[Model-Glue is an Implicit Invocation framework simplifying use of the Model View Controller design pattern in ColdFusion applications. It's designed to be easy to use and play well with others, like Tartan.]]></description>
			<content:encoded><![CDATA[<p>Model-Glue is:</p>
<ul>
<li>An Implicit Invocation framework simplifying use of the Model View Controller design pattern in ColdFusion applications. It&#8217;s designed to be easy to use and play well with others, like <a href="http://www.tartanframework.org/">Tartan</a>.</li>
<li>Released under the Lesser GPL, meaning that it&#8217;s free to download, use, and alter.</li>
<li>A framework encouraging clear seperation of Model, View, and Controller</li>
<li>Lightweight enough to play well with others: it comes with out-of-the-box connectors to Paul Kenney&#8217;s <a href="http://www.tartanframework.org/">Tartan Framework</a>.</li>
<li>Akin to <a href="http://www.mach-ii.com/">Mach-II</a>, another II, MVC framework, but with slightly simpler functionality, and more clearly defined boundaries between Model and Controller.</li>
<li>Written by <a href="http://clearsoftware.net/">Joe Rinehart</a>, a quasi-popular ColdFusion blogger with an interest in developing better <acronym title="Object Orientated">OO</acronym> applications in ColdFusion, with constant feedback provided by <a href="http://www.doughughes.net">Doug Hughes</a> of <a href="http://www.alagad.com/">Alagad, Inc. </a></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>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/model-glue-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TheHub &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/thehub-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/thehub-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 14:55:09 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[DSP]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[TheHUB]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=10</guid>
		<description><![CDATA[TheHub, like other application development frameworks, utilizes the notion of a central hub template that all requests for the application pass through. That cental hub is the point or place within the application that the processing of all code hinges upon.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codesweeper.com/">TheHUB</a>, like other application development frameworks, utilizes the notion of a central hub template that all requests for the application pass through. That cental hub is the point or place within the application that the processing of all code hinges upon. The code simply checks for a query string and then reads the parameters passed to handle template loading and screen rendering.</p>
<p>The concept is that each request passes a unique set of keys that relate one-to-one with a site or application directory and template within the named directory. In applications and websites that utilize <a href="http://www.codesweeper.com/">TheHUB</a>, the query string looks like &#8220;?dsp=the_hub&#8230;&#8221;. This indicates to the &#8220;framework hub&#8221; template&#8230; the &#8220;index.cfm&#8221; that it should include the &#8220;the_hub.cfm&#8221; template from the &#8220;dsp&#8221; directory.</p>
<p>Download the code at this <acronym title="Universal Resource Locator">url</acronym> <a href="http://www.codesweeper.com/index.cfm?code=main">http://www.codesweeper.com/index.cfm?code=main</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/thehub-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tartan &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/tartan-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/tartan-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 14:54:59 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[public services]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[Tartan]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=11</guid>
		<description><![CDATA[Tartan is a command-driven service framework for ColdFusion. It was built to help produce the service layer within a larger application architecture which relies on strict separation or layering of functionality.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.tartanframework.org/">Tartan</a> is a command-driven service framework for ColdFusion. It was built to help produce the service layer within a larger application architecture which relies on strict separation or layering of functionality.</p>
<p>All access to the underlying business logic is controlled by public services which are available locally as <acronym title="ColdFusion Components">CFCs</acronym> and remotely via Flash Remoting and <acronym title="Simple Object Access Protocol">SOAP</acronym> web services. A service can be composed of any number of commands, each of which implements a discreet operation within the application. These contain the core logic for the application. Commands can communicate with databases via <acronym title="Data Access Object">DAOs</acronym>, manipulate values received from the client, execute other commands and even communicate with services available on other remote servers.</p>
<p>At the center of <a href="http://www.tartanframework.org/">Tartan</a> are 6 Core classes : LocalServiceProxy, LocalService, Command, <acronym title="Data Access Object">DAO</acronym>, ValueObject and ExceptionHandler. They provide most of the functionality of the framework, and must be extended by the application developer.</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>Overview and Explanation</h3>
<p>The driving need behind <a href="http://www.tartanframework.org/">Tartan</a> was a production application that needed to transfer data between 5 different databases and 3 different applications. There was a complex set of <abbr title="Data Access Object">DAO</abbr> classes and a faade class that provided access. Each fa ade class had a single public method called &#8220;execute&#8221; that would simply take arguments and return a result.</p>
<p>This concept worked well, but obviously had its limitations. So <a href="http://www.tartanframework.org/">Tartan</a> was created to be able to quickly and easily add new commands to services, and new services to the system.</p>
<p>Tartan is described as a &#8220;command-driven service framework.&#8221; What does that mean? In this context a &#8220;service&#8221; is a set of commands that have commonality, and a &#8220;command&#8221; is a method that executes any number of other methods and returns a result. It&#8217;s that simple. A service such as &#8220;televisionViewer&#8221; could include a command such as &#8220;getListings&#8221; which would, based on locality data provided either by a config file or a method argument, check local listings and return a collection of data regarding current television listings.</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>To further explain the concept of &#8220;commands,&#8221; we could offer that method a second argument such as &#8220;returnType&#8221; and return the listings as an array of structures, a <abbr title="ColdFusion">CF</abbr> query object, or an <abbr title="eXtensible Markup Language">XML</abbr> file. By adding commands from granular to broad, we can incorporate them into sequences. For instance, if we wanted to offer the findMyShow command, we could have it first execute getListings, then parse the resulting data and determine if our show is on soon or not.</p>
<p>By doing this carefully and with some planning, we develop a very simple interface between our application and any persistant storage mechanism and/or business objects, with the ability to filter, alter, or convert our results before they&#8217;re returned to the caller. If we start with granular and move to broad commands, we maintain the flexibility and encapsulation of an <abbr title="Object Orientated">OO</abbr> design, but gain the convenience and natural-thinking appeal of procedural programming.</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/tartan-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

