<?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; Code</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/code/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>Invaluable Online Website Tools</title>
		<link>http://www.simonwhatley.co.uk/invaluable-online-website-tools</link>
		<comments>http://www.simonwhatley.co.uk/invaluable-online-website-tools#comments</comments>
		<pubDate>Sun, 03 Jun 2007 15:30:51 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Browser Simulators]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Code Validation]]></category>
		<category><![CDATA[SEO Tools]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Website Accessibility]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=286</guid>
		<description><![CDATA[Thousands of businesses worldwide face the challenge of establishing their web presence; a goal difficult to achieve without efficient web site development and testing tools. If someone where to ask you how good your website was, how would you answer; could you answer? There are so many factors to take into consideration, such as code validation, speed of download accessibility, usability etc, that there is no one correct answer and subsequently no one website that can provide you the definitive answer.]]></description>
			<content:encoded><![CDATA[<p>Thousands of businesses worldwide face the challenge of establishing their web presence; a goal difficult to achieve without efficient web site development and testing tools. If someone where to ask you how good your website was, how would you answer; could you answer? There are so many factors to take into consideration, such as code validation, speed of download accessibility, usability etc, that there is no one correct answer and subsequently no one website that can provide you the definitive answer.</p>
<p>This article was inspired by a great blog post at Aviva Directory, entitled <a href="http://www.avivadirectory.com/free-online-tests/" title="Grade Your Website: 31 Free Online Tests" target="_blank" rel="nofollow">Grade Your Website: 31 Free Online Tests</a>.</p>
<p>Below is a compendium of tools I use on a regular basis to test website I work on, based on Aviva Directory&#8217;s headings (incidentally they list the same tools I use regularly).:</p>
<p><strong>Code Validation</strong></p>
<p>The <acronym title="Web Design Group">WDG</acronym> <a href="http://www.htmlhelp.com/tools/validator/" rel="nofollow" title="Open link in new window" target="_blank">HTML Validator</a> is an excellent tool for identifying syntax errors on pages driven by markup languages. There is also an option to recursively check for errors on every page in the website directory, which is invaluable when checking large, dynamic websites.</p>
<p>The <acronym title="World Wide Web Consortium">W3C</acronym> <a href="http://validator.w3.org/checklink" rel="nofollow" title="Open link in new window" target="_blank">Link Checker</a> searches for and identifies broken links for a given <acronym title="Universal Resource Locator">URL</acronym>. The tool specifically checks that all the links are de-referenceable, no links and anchors are defined twice and warns about invalid http and directory redirects.</p>
<p><strong>Accessibility</strong></p>
<p>Watchfire&#8217;s <a href="http://webxact.watchfire.com/" rel="nofollow" title="Open link in new window" target="_blank">WebXACT</a> is a must use tool for all serious designers and developers. The tool lets you test single pages and generates a very detailed report on the quality, accessibility and privacy of a website.</p>
<p><strong>Speed</strong></p>
<p><a href="http://www.websiteoptimization.com/services/analyze/" rel="nofollow" title="Open link in new window" target="_blank">Web Page Analyzer</a> from Website Optimization is an excellent tool that calculates page size, composition, and download time. The script calculates the size of individual elements and sums up each type of web page component (objects, <acronym title="Cascading Style Sheets">CSS</acronym>, images etc). Based on these page characteristics the script then offers advice on how to improve page load time. The script incorporates best practices web site optimisation techniques into its recommendations.</p>
<p><strong>Browser Simulator</strong></p>
<p><a href="http://browsershots.org/" rel="nofollow" title="Open link in new window" target="_blank">Browsershots</a> is a tool, created by Johann C. Rocholl, which takes screenshots of your website in various browsers and platforms including Firefox and Internet Explorer on Windows, Firefox and Safari on Mac OS X and Iceweasal and Konqueror on Linux. When the user submits a <acronym title="Universal Resource Locator">URL</acronym> it is added to a job queue. Unfortunately the queue requires you to wait up to three hours before retrieving your screenshots, but the results provide a clear indication of how the website will be received by different user setups.</p>
<p><strong>Search Engine Optimisation (<acronym title="Search Engine Optimisation">SEO</acronym>)</strong></p>
<p>SEO Workers <a href="http://www.seoworkers.com/tools/analyzer.html" title="SEO Workers SEO Analysis Tool" target="_blank" rel="nofollow">SEO Analysis Tool</a> is an extremely useful tool that analyses an assortment of page features including meta tags, keyword density and load time. A user simply submits a <acronym title="Universal Resource Locator">URL</acronym> for testing and the report is returned.</p>
<p align="center"><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/invaluable-online-website-tools/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PNG Support in IE6</title>
		<link>http://www.simonwhatley.co.uk/png-support-in-ie6</link>
		<comments>http://www.simonwhatley.co.uk/png-support-in-ie6#comments</comments>
		<pubDate>Thu, 12 Apr 2007 19:18:28 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Angus Turnbull]]></category>
		<category><![CDATA[behavior]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[cascading stylesheets]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[HTML & XHTML]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[transparency]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=261</guid>
		<description><![CDATA[There is a web browser that has only a vague association with modern web standards. That browser is Internet Explorer 6. Wouldn't it be great if it supported stuff like translucent PNGs? Well, now you can add decent PNG support to IE5.5+ on Windows with no changes to your website HTML source code. This script will add near-native PNG support with full alpha opacity, with only one line in your CSS file, that applies to all &#60;img&#62; tags and also background images!]]></description>
			<content:encoded><![CDATA[<p>Internet Explorer 6 is notoriously rubbish at supporting PNG transparency resulting in images that appear with a grey background; not very useful. All is not lost. <a href="http://www.twinhelix.com/" rel="nofollow" title="Angus Turnbull">Angus Turnbull</a> has created a work around for this issue. You can get all the information needed at this link <a href="http://www.twinhelix.com/css/iepngfix/" rel="nofollow">http://www.twinhelix.com/css/iepngfix/</a>, including support forums. This is possibly the easiest way to get full PNG transparency and importantly the technique works for CSS backgrounds, albeit when no used with the no-repeat attribute.</p>
<p>The secret behind this implementation is a filter introduced in IE55 that is called AlphaImageLoader. This filter takes an image with alpha channels and displays it. It has also a property for deciding how to scale the image.</p>
<p>To download this permanently: <a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2007/04/iepngfix.zip' title='IE PNG Fix'>iepngfix.zip</a> (15kb).</p>
<p><strong>How to Implement</strong></p>
<ol>
<li>Put the iepngfix.htc file into your CSS directory</li>
<li>Put the blank.gif file into your CSS directory (otherwise you will need to edit the HTC file)</li>
<li>Edit your CSS to include the following line behavior:url(iepngfix.htc); for the &lt;img&gt; tag</li>
</ol>
<p><strong>Known Issues</strong></p>
<p>This uses CSS &#8220;behaviors&#8221;, a custom Microsoft extension to CSS. As such, it will not affect any other browsers like Mozilla and Opera which already implement good PNG support. It will also not help IE4.0 and IE5.0, which don&#8217;t include the necessary IE filter, and does nothing with IE5/Mac (which natively supports translucent PNG foreground images, however).</p>
<p>You should not apply other visual filters to the iamge with the PNG behavior because these other filters do not respect the alpha channels and the result will most likely not be satisfactory.</p>
<p><strong>Alternatives</strong></p>
<p>An alternative source that I recently discovered is found at the following link <a href="http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html" rel="nofollow">http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html</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/png-support-in-ie6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Developer&#039;s Journal 2006</title>
		<link>http://www.simonwhatley.co.uk/java-developers-journal-2006</link>
		<comments>http://www.simonwhatley.co.uk/java-developers-journal-2006#comments</comments>
		<pubDate>Thu, 18 Jan 2007 15:28:37 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[journal]]></category>
		<category><![CDATA[sys-con]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=244</guid>
		<description><![CDATA[The worldâ€™s premier independent, vendor-neutral print resource for the ever-expanding international community of Internet technology professionals using the Java programming language and the Java development platform, has just completed volume 11.]]></description>
			<content:encoded><![CDATA[<p>The world&#8217;s premier independent, vendor-neutral print resource for the ever-expanding international community of Internet technology professionals using the Java programming language and the Java development platform, has just completed volume 11.</p>
<p>Below are links to of each of the 12 issues.</p>
<ul>
<li><a href="http://pdf.sys-con.com/Java/JDJJan2006.pdf" rel="nofollow">January</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJFeb2006.pdf" rel="nofollow">February</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJMarch2006.pdf" rel="nofollow">March</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJApr2006.pdf" rel="nofollow">April</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJMay2006.pdf" rel="nofollow">May</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJJune2006.pdf" rel="nofollow">June</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJJuly2006.pdf" rel="nofollow">July</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJAugust2006.pdf" rel="nofollow">August</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJSept2006.pdf" rel="nofollow">September</a></li>
<li><a href="http://pdf.sys-con.com/Java/JDJOct2006.pdf" rel="nofollow">October</a></li>
<li><a href="http://pdf.sys-con.com/Java/XSLTJava.pdf" rel="nofollow">November</a></li>
<li><a href="http://pdf.sys-con.com/Java/Queries.pdf" rel="nofollow">December</a></li>
</ul>
<p align="center"><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/java-developers-journal-2006/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion Developer&#039;s Journal 2006</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-developers-journal-2006</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-developers-journal-2006#comments</comments>
		<pubDate>Fri, 05 Jan 2007 15:01:04 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[journal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[sys-con]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=206</guid>
		<description><![CDATA[The world's only magazine aimed specifically at Webmasters and Web application developers who use the fast-evolving and comprehensive Internet platform offered by Adobe Corp. and based around ColdFusion, has just completed volume 8.]]></description>
			<content:encoded><![CDATA[<p>The world&#8217;s only magazine aimed specifically at Webmasters and Web application developers who use the fast-evolving and comprehensive Internet platform offered by Adobe Corp. and based around ColdFusion, has just completed volume 8.</p>
<p>Below are links to of each of the 12 issues.</p>
<ul>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0106.pdf" rel="nofollow">January</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0206.pdf" rel="nofollow">February</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0306.pdf" rel="nofollow">March</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0406.pdf" rel="nofollow">April</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0506.pdf" rel="nofollow">May</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0606.pdf" rel="nofollow">June</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0706.pdf" rel="nofollow">July</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0806.pdf" rel="nofollow">August</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/CFDJ0906.pdf" rel="nofollow">September</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/NewLife.pdf" rel="nofollow">October</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/ContentCF.pdf" rel="nofollow">November</a></li>
<li><a href="http://pdf.sys-con.com/ColdFusion/Dangers.pdf" rel="nofollow">December</a></li>
</ul>
<p align="center"><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-developers-journal-2006/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MicroID &#8211; Small Decentralized Verifiable Identity</title>
		<link>http://www.simonwhatley.co.uk/microid-small-decentralized-verifiable-identity</link>
		<comments>http://www.simonwhatley.co.uk/microid-small-decentralized-verifiable-identity#comments</comments>
		<pubDate>Sat, 16 Dec 2006 12:13:39 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[decentralised]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[Jeremie Miller]]></category>
		<category><![CDATA[microid]]></category>
		<category><![CDATA[small]]></category>
		<category><![CDATA[verifiable]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=111</guid>
		<description><![CDATA[MicroID is a lightweight identity layer for the web, invented by Jeremie Miller (creator of Jabber). MicroID enables anyone to claim verifiable ownership over content hosted anywhere on the web (social networking sites, discussion forums, blogs, etc.).]]></description>
			<content:encoded><![CDATA[<p>MicroID is a lightweight identity layer for the web, invented by <a href="http://jeremie.com/">Jeremie Miller</a> (creator of <a rel="nofollow" href="http://www.jabber.org/">Jabber</a>). MicroID enables anyone to claim verifiable ownership over content hosted anywhere on the web (social networking sites, discussion forums, blogs, etc.). MicroID is not an authentication or single-sign-on service, just a straightforward method for identifying content ownership that complements existing technologies such as <a rel="nofollow" href="http://openid.net/">OpenID</a> and <a rel="nofollow" href="http://microformats.org/">microformats</a>. The technology is radically simple and enables developers to build new and unique meta services with minimal effort. It&#8217;s already being used by the likes of <a rel="nofollow" href="http://claimid.com/">ClaimID</a>, <a rel="nofollow" href="http://www.last.fm/">Last.fm</a>, <a rel="nofollow" href="http://ma.gnolia.com/">Ma.gnolia</a>, <a rel="nofollow" href="http://wikitravel.org/en/Main_Page">Wikitravel</a>, and <a rel="nofollow" href="http://yedda.com/">Yedda</a>.</p>
<p>For more information about MicroID, check out the <a rel="nofollow" href="http://microid.org/blog/">blog</a>, read the <a rel="nofollow" href="http://www.simonwhatley.co.uk/microid.html">spec</a>, download <a rel="nofollow" href="/code">example code</a> or join the <a rel="nofollow" href="http://lists.ibiblio.org/mailman/listinfo/microid">discussion list</a>.</p>
<p align="center"><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/microid-small-decentralized-verifiable-identity/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Occam&#039;s Razor</title>
		<link>http://www.simonwhatley.co.uk/occams-razor</link>
		<comments>http://www.simonwhatley.co.uk/occams-razor#comments</comments>
		<pubDate>Tue, 21 Nov 2006 21:43:55 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[assumotion]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[few assumptions]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[law of succinctness]]></category>
		<category><![CDATA[lex parsimoniae]]></category>
		<category><![CDATA[logician]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[occam]]></category>
		<category><![CDATA[ockham]]></category>
		<category><![CDATA[okham]]></category>
		<category><![CDATA[phenomenon]]></category>
		<category><![CDATA[principle]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[simplest]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[William of Ockham]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=147</guid>
		<description><![CDATA[Occam's Razor (also spelled Ockham's razor) is a principle attributed to the 14th-century English logician and Franciscan friar William of Ockham. Occam's razor states that the explanation of any phenomenon should make as few assumptions as possible. The principle is often expressed in Latin as the lex parsimoniae (law of succinctness).]]></description>
			<content:encoded><![CDATA[<p>Occam&#8217;s Razor (also spelled Ockham&#8217;s razor) is a principle attributed to the 14th-century English logician and Franciscan friar William of Ockham.</p>
<p>Occam&#8217;s razor states that the explanation of any phenomenon should make as few assumptions as possible. The principle is often expressed in Latin as the lex parsimoniae (law of succinctness):</p>
<blockquote><p>entia non sunt multiplicanda praeter necessitatem</p></blockquote>
<p>which translates to:</p>
<blockquote><p>entities should not be multiplied beyond necessity</p></blockquote>
<p>This is often paraphrased as &#8220;All things being equal, the simplest solution tends to be the best one.&#8221; One consequence of this methodology is the idea that the simplest or most obvious explanation of several competing ones is the one that should be preferred until it is proven wrong.</p>
<p>So, how can this apply to web development. There is an analogy between software development and the scientific theory as a means to enhance the credibility of a particular set of programming practices. Once a programmer has a theory (model) of the software in their head, they can talk about and explain its behavior to others. When they make changes to the code, they do so in a way that is consistent with the theory and therefore &#8220;fits in&#8221; with the existing code base well. A programmer not guided by such a theory is liable to make modifications and extensions to the code that appear to be &#8220;tacked on&#8221; as an afterthought, and not consistent with the design and  philosophy of the existing code base.</p>
<p>Simply, don&#8217;t add markup where markup is not needed. Don&#8217;t over complicate an application structure. If you have the choice between 2 or 3 paths to the same end &#8211; choose one and let it be the simplest and shortest, but with the caveat, don&#8217;t cut corners. This will make for cleaner, understandable code with faster download times, something all developers should work towards.  <acronym title="Cascading Style Sheets">CSS</acronym> has helped this concept immersurably by removing the need to use inline styles, font tags, tables for positioning etc.</p>
<p>In terms of ColdFusion, the use of design patterns (e.g. Singleton, Model-View-Controller&#8230;) and the now numerous frameworks (e.g. Fusebox, Model-Glue, Mach-II, Reactor&#8230;) has reduced or even removed the concept of &#8220;spaghetti code&#8221;, the bane of may a web developer&#8217;s life and indeed the often muted argument against ColdFusion as an enterprise level application development environment.</p>
<p align="center"><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/occams-razor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion ORM Frameworks &amp; Tools</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-orm-frameworks-tools</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-orm-frameworks-tools#comments</comments>
		<pubDate>Thu, 27 Apr 2006 20:53:05 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Active Record Factory]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[code generation]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Doug Hughes]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[generation]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Nicholas Tunney]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[object relational mapping]]></category>
		<category><![CDATA[object-oriented programming]]></category>
		<category><![CDATA[ObjectBreeze]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Reactor]]></category>
		<category><![CDATA[Reactor Reactor]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transfer]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=65</guid>
		<description><![CDATA[Object-Relational Mapping (or ORM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a "virtual object database". There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to code their own object-relational mapping for their systems.]]></description>
			<content:encoded><![CDATA[<p><strong>Object-Relational Mapping (or ORM)</strong>, is a programming technique that links databases to object-oriented language concepts, creating (in effect) a &#8220;virtual object database.&#8221; There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to code their own object-relational mapping for their systems.</p>
<p>In object-oriented programming, programming objects represent real-world objects. To illustrate, consider the example of an address book, which contains listings of people along with zero or more phone numbers and zero or more addresses. In object-oriented terms this would be represented by a &#8220;person object&#8221; with &#8220;slots&#8221; (fields, members, instance variables etc.) to hold the data that make up this listing: the person&#8217;s name, a list (or array) of phone numbers, and a list of addresses.</p>
<p>The crux of the problem is in translating those objects to forms which can be stored in files or databases, and which can later be retrieved easily while preserving the properties of the objects and their relationships; these objects can then be said to be persistent.</p>
<p>Object-Relational systems attempt to solve this problem by providing libraries of classes which are able to do this mapping automatically. Given a list of tables in the database, and objects in the program, they will automatically map requests from one to the other. Asking a person object for its phone numbers will result in the proper query being created and sent, and the results being &#8220;magically&#8221; translated directly into phone number objects inside the program.</p>
<p>From a programmer&#8217;s perspective, the system looks like a persistent object store. One can create objects and work with them as one would normally, and they automatically end up in the relational database.</p>
<p>A number of ORM frameworks have been created for ColdFusion:</p>
<h2>Reactor</h2>
<p>Reactor, created by Doug Hughes of <a target="_blank" title="Alagad" href="http://www.alagad.com/">Alagad</a> fame, is a very simple <acronym title="Application Program Interface">API</acronym> for ColdFusion which generates and instantiates database abstraction <acronym title="ColdFusion Components">CFCs</acronym> on the fly as needed.</p>
<p><a title="Reactor for ColdFusion" target="_blank" href="http://www.doughughes.net/index.cfm?filter=category&#038;categoryId=30">http://www.doughughes.net/</a></p>
<h2>Arf!</h2>
<p>Active Record Factory (Arf!) is a Rails-style ActiveRecord implementation in ColdFusion.</p>
<p>Below is a list of the basics that Arf! provides:</p>
<ul>
<li>JDBC metadata based reflection:  not database specific</li>
</ul>
<ul>
<li>Creates ActiveRecord <acronym title="Application Program Interface">API</acronym>&#8216;d instances out of <acronym title="ColdFusion Components">CFCs</acronym> that extend a base ActiveRecord component</li>
</ul>
<ul>
<li>Implements hasMany() and belongsTo() methods for establishing Record properties that point to other tables</li>
</ul>
<ul>
<li>Allows for overloading any of the automagically generated methods to add custom business logic</li>
</ul>
<ul>
<li>Automagic methods on Records include GetInstance(), Create(), Read(), Update(), Delete(), Save() [smart create/update], List(orderBy, whereClause), Validate() [does type and length checking], and SetNNN()/GetNNN() methods for each DB column</li>
</ul>
<p><a title="Arf!" target="_blank" href="http://www.clearsoftware.net/index.cfm?mode=cat&#038;catid=4BF355FB-E081-2BAC-691AF2BBF35F5E7C">http://www.clearsoftware.net/</a></p>
<h2>objectBreeze</h2>
<p>Developed by Nicholas Tunney, objectBreeze is an <acronym title="Object-Relational Mapping">ORM</acronym> tool that allows you to interact with your data persistence layer and easily model objects within your ColdFusion applications. With no setup, objectBreeze will instantly create objects directly from your database schema. objectBreeze requires that your table has -a- primary key defined. Currently, objectBreeze works with Microsoft SQL, Oracle, MySQL and PostgreSQL, but other versions are on the way.</p>
<p><a title="objectBreeze" target="_blank" href="http://www.objectbreeze.com/ob/">http://www.objectbreeze.com/ob/</a></p>
<h2>cfcPowerTools</h2>
<p>Batch generation of your data layer objects in minutes.</p>
<p><a title="cfcPowerTools" target="_blank" href="http://cfcpowertools.riaforge.org/">http://cfcpowertools.riaforge.org/</a></p>
<h2>Transfer</h2>
<p>Transfer was built out of a need to speed up the development process that is normally slowed down by the development of Business Objects and Data Access Objects.</p>
<p>Transfer does this through a series of methods, including SQL generation and CFML code generation, that all occur during the run-time process.</p>
<p>All this is configured through a XML file, that maps your object generation back to the tables and columns in your database.</p>
<p><a title="Transfer object Relational Mapping" href="http://www.compoundtheory.com/?action=transfer.index">http://www.compoundtheory.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/coldfusion-orm-frameworks-tools/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CAPTCHA</title>
		<link>http://www.simonwhatley.co.uk/captcha</link>
		<comments>http://www.simonwhatley.co.uk/captcha#comments</comments>
		<pubDate>Sat, 15 Apr 2006 20:40:49 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[automated]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Captcha]]></category>
		<category><![CDATA[Carnegie Mellon University]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[humans]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[John Langford]]></category>
		<category><![CDATA[Luis von Ahn]]></category>
		<category><![CDATA[Manuel Blum]]></category>
		<category><![CDATA[Nicholas J. Hopper]]></category>
		<category><![CDATA[online polls]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Turing]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=68</guid>
		<description><![CDATA[A CAPTCHA (an acronym for "completely automated public Turing test to tell computers and humans apart", trademarked by Carnegie Mellon University) is a type of challenge-response test used in computing to determine whether or not the user is human. The term was coined in 2000 by Luis von Ahn, Manuel Blum, and Nicholas J. Hopper of Carnegie Mellon University, and John Langford of IBM. A common type of captcha requires that the user type the letters of a distorted image, sometimes with the addition of an obscured sequence of letters or digits that appears on the screen. Because the test is administered by a computer, in contrast to the standard Turing test that is administered by a human, a captcha is sometimes described as a reverse Turing test. This term, however, is misleading because it could also mean a Turing test in which the participants are both attempting to prove they are the computer.]]></description>
			<content:encoded><![CDATA[<p>A <strong>CAPTCHA </strong>(an acronym for &#8220;<strong>C</strong>ompletely <strong>A</strong>utomated <strong>P</strong>ublic <strong>T</strong>uring test to tell <strong>C</strong>omputers and <strong>H</strong>umans <strong>A</strong>part&#8221;, trademarked by Carnegie Mellon University) is a type of challenge-response test used in computing to determine whether or not the user is human. The term was coined in 2000 by Luis von Ahn, Manuel Blum, and Nicholas J. Hopper of Carnegie Mellon University, and John Langford of IBM. A common type of captcha requires that the user type the letters of a distorted image, sometimes with the addition of an obscured sequence of letters or digits that appears on the screen. Because the test is administered by a computer, in contrast to the standard Turing test that is administered by a human, a captcha is sometimes described as a reverse Turing test. This term, however, is misleading because it could also mean a Turing test in which the participants are both attempting to prove they are the computer.</p>
<p>Captchas are used to prevent bots from using various types of computing services. Applications include preventing bots from taking part in online polls, registering for free email accounts (which may then be used to send spam), and, more recently, preventing bot-generated spam by requiring that the (unrecognized) sender pass a captcha test before the email message is delivered.</p>
<h2>Captcha Implementations</h2>
<p><strong>ColdFusion:</strong></p>
<ul>
<li>The <a target="_blank" title="The Alagad Captcha" href="http://www.alagad.com/index.cfm/name-captcha">Alagad Captcha</a>, a ColdFusion Component (CFC) written in 100% native ColdFusion.</li>
<li>The <a target="_blank" title="Compound Theory Captcha" href="http://www.compoundtheory.com/?action=captcha.index">Compound Theory Captcha</a> CFC, A Free Coldfusion Captcha Component (CFC)</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/captcha/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion &amp; Lucene</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-lucene</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-lucene#comments</comments>
		<pubDate>Sun, 09 Apr 2006 22:54:09 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Aaron Johnson]]></category>
		<category><![CDATA[Aaron Johnson Inspired]]></category>
		<category><![CDATA[alternative]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Lucene Java library]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[author]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[dynamic Web applications]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[Full-Text Search]]></category>
		<category><![CDATA[indexing]]></category>
		<category><![CDATA[Jakarta]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[Lucene Java library]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[search capabilities]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[text search engine library]]></category>
		<category><![CDATA[Verity]]></category>
		<category><![CDATA[web application]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=75</guid>
		<description><![CDATA[One of the many reasons to use ColdFusion MX is that it has a large, standard toolset that enbales the creation of full-featured, dynamic Web applications. The tag-based language makes it relatively simple to query a relational database and send e-mail. In a similar way, you can create and search Verity full-text indexes.]]></description>
			<content:encoded><![CDATA[<p>One of the many reasons to use ColdFusion MX is that it has a large, standard toolset that enables the creation of full-featured, dynamic Web applications. The tag-based language makes it relatively simple to query a relational database and send e-mail. In a similar way, you can create and search Verity full-text indexes.</p>
<p>However, there are situations where you cannot use the full-text searching capabilities of Verity. For example, Verity only runs on Windows, Linux and Solaris, therefore the ability to run ColdFusion MX on the Apple OS X operating system, whilst advantageuos to developers who code on the Apple platform, does not include the ability to use Verity. Furthermore, programmers who work in a hybrid J2EE/ColdFusion MX environment cannot natively use the Verity search capabilities in the J2EE environment. Finally, programmers who need customized searching and indexing capabilities may find the standard Verity integration limiting. There are work-arounds include installing Verity on a Windows, Linux, or Solaris server and configuring your ColdFusion server to use the remote Verity server, however these may not only be impractical, but cost-prohibitative.</p>
<p>Enter Lucene, an open source full-text searching framework from the Apache Jakarta project, which, when combined with ColdFusion MX, can be run on Apple OS X, can be programmatically accessed by both J2EE and ColdFusion MX developers, and can be fully customized and extended.Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.</p>
<p>Apache Lucene is an open source project available for <a title="Download Apache Lucene" target="_blank" href="http://www.apache.org/dyn/closer.cgi/lucene/java/">free download</a>.</p>
<p><strong>Features</strong></p>
<ul>
<li>Lucene offers powerful features through a simple API.</li>
</ul>
<p><strong>Scalable, High-Performance Indexing</strong></p>
<ul>
<li>Over 20MB/minute on Pentium M 1.5GHz</li>
<li>Small RAM requirements &#8212; only 1MB heap</li>
<li>Incremental indexing as fast as batch indexing</li>
<li>Index size roughly 20-30% the size of text indexed</li>
</ul>
<p><strong>Powerful, Accurate and Efficient Search Algorithms</strong></p>
<ul>
<li>Ranked searching &#8212; best results returned first</li>
<li>Many powerful query types: phrase queries, wildcard queries, proximity queries, range queries and more</li>
<li>Fielded searching (e.g., title, author, contents)</li>
<li>Date-range searching</li>
<li>Sorting by any field</li>
<li>Multiple-index searching with merged results</li>
<li>Allows simultaneous update and searching</li>
</ul>
<h2>ColdFusion &#038; Lucene Implementations</h2>
<p>If you don&#8217;t fancy attempting the task of writing your own ColdFusion implementation of Lucene, below are a couple of projects that will give you a kick-start along the road to indexing database content.  With the addition of other Java projects such as <a title="PDF Box" target="_blank" href="http://www.pdfbox.org/">PDFBox</a> the textual content of a pdf can also be extracted and indexed.</p>
<h2>Aaron Johnson</h2>
<p>Inspired by Lindex, Aaron Johnson has created a CFX Tag called CFX_Lucene that closely mimics the ColdFusion cfsearch tag, but uses Lucene rather than Verity.</p>
<p><a target="_blank" title="cfx_lucene" href="http://cephas.net/blog/lucene/index.html">http://cephas.net/blog/lucene/index.html</a></p>
<h2>CFLucene</h2>
<p>CFLucene is an open source project that attempts to provide developers an easy way to integrate the indexing and searching functions of the Apache Lucene Java library with a ColdFusion web application. The CFLucene is a collection of ColdFusion Components that natively call the Lucene Java classes to index and search any sort of textual data.</p>
<p><a title="CFLucene" target="_blank" href="http://www.cflucene.org/">http://www.cflucene.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/coldfusion-lucene/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

