<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-18855252</id><updated>2009-09-24T16:33:33.377+10:00</updated><title type='text'>&lt;cfwhat&gt;</title><subtitle type='html'>An occasional blog about web technologies and programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18855252.post-5749541889588245149</id><published>2009-09-24T16:30:00.002+10:00</published><updated>2009-09-24T16:33:33.475+10:00</updated><title type='text'>Web Standards Curriculum</title><content type='html'>A great &lt;a href="http://dev.opera.com/articles/view/1-introduction-to-the-web-standards-cur/"&gt;online course&lt;/a&gt; from Opera covering HTML, CSS, JavaScript and Web Standards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-5749541889588245149?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/5749541889588245149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=5749541889588245149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/5749541889588245149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/5749541889588245149'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2009/09/web-standards-curriculum.html' title='Web Standards Curriculum'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-396536193299631008</id><published>2009-09-21T16:57:00.006+10:00</published><updated>2009-09-24T16:21:40.030+10:00</updated><title type='text'>Useful regular expressions</title><content type='html'>&lt;strong&gt;Strip all HTML tags&lt;/strong&gt;&lt;br /&gt;REReplace(content,"&lt;[^&gt;]*&gt;","","all")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Strip high ASCII characters (ASCII 128 and above)&lt;/strong&gt;&lt;br /&gt;REReplace(content,"[^\x00-\x7F]","","all")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Encode all ampersands that are not already encoded&lt;/strong&gt;&lt;br /&gt;REReplaceNoCase(content, "&amp;(?!amp;)", "&amp;amp;", "all")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Encode all ampersands that are not part of entities&lt;/strong&gt; &lt;br /&gt;(eg. ignore &amp;amp;nbsp;)&lt;br /&gt;REReplace(arguments.content, "&amp;(?!##?\w+;)", "&amp;amp;", "all")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Validate a list of numbers&lt;/strong&gt;&lt;br /&gt;REReplace(content,"[^0-9,]","","all")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Strip new lines, carriage returns and tabs&lt;/strong&gt;&lt;br /&gt;REReplace(content,"[\n\r\t]","","all")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-396536193299631008?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/396536193299631008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=396536193299631008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/396536193299631008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/396536193299631008'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2009/09/useful-regular-expressions.html' title='Useful regular expressions'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-8757957799531001001</id><published>2008-10-29T16:25:00.005+11:00</published><updated>2009-09-24T16:27:44.801+10:00</updated><title type='text'>ColdFusion performance tuning articles</title><content type='html'>&lt;a href="http://www.simonwhatley.co.uk/coldfusion-mx-tuning"&gt;Coldfusion MX Tuning links&lt;/a&gt; by Simon Whatley&lt;br /&gt;&lt;a href="http://www.alagad.com/go/blog-entry/really-fixing-applications-are-we-inside-out"&gt;&lt;span style="font-size:100%;"&gt;Really Fixing Applications - Are We Inside Out?&lt;/span&gt;&lt;/a&gt; from &lt;a href="http://www.alagad.com/"&gt;Alagad&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cfperformance.com/"&gt;ColdFusion Performance and Troubleshooting Guide&lt;/a&gt; (book)&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/coldfusion/articles/coldfusion_performance.html"&gt;Performance tuning for ColdFusion applications (Adobe)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-8757957799531001001?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/8757957799531001001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=8757957799531001001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/8757957799531001001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/8757957799531001001'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2008/10/coldfusion-performance-tuning-articles.html' title='ColdFusion performance tuning articles'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-6732607374691277312</id><published>2008-02-21T11:12:00.003+11:00</published><updated>2008-02-21T11:27:41.754+11:00</updated><title type='text'>Software QA and Testing Resource Center</title><content type='html'>While I was looking for software to do web application load testing I came across the &lt;a href="http://www.softwareqatest.com/index.html"&gt;Software QA and Testing Resource Center&lt;/a&gt;.  The site has lots of useful information and links, including a good list of &lt;a href="http://www.softwareqatest.com/qatweb1.html#LOAD"&gt;Load and Performance Test Tools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I ended up choosing &lt;a href="http://www.webload.org/"&gt;WebLoad&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-6732607374691277312?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/6732607374691277312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=6732607374691277312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/6732607374691277312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/6732607374691277312'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2008/02/software-qa-and-testing-resource-center.html' title='Software QA and Testing Resource Center'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-2307846247208333176</id><published>2007-03-25T19:13:00.000+10:00</published><updated>2007-03-25T19:30:09.302+10:00</updated><title type='text'>ColdFusion and MSDE 2000 on XP with SP2</title><content type='html'>I set up a new PC for development at home this weekend and I ran into a (common) problem trying to get ColdFusion to work with MS SQL Server 2000 (MSDE) on XP with SP2. It took me ages but eventually I got it working. The solution was to uninstall the copy of MSDE that I originally put on and do a fresh install using &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2000/downloads/servicepacks/sp4.mspx"&gt;SQL Server SP4 for MSDE&lt;/a&gt;. The setup required some parameters, eg.:&lt;br /&gt;setup.exe SAPWD="your_sa_password" DISABLENETWORKPROTOCOLS=0 /L*v C:\MSDELog.log&lt;br /&gt;&lt;br /&gt;If you can't get that to run at the command line (I couldn't) then set up a shortcut to setup.exe and put it in the target field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-2307846247208333176?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/2307846247208333176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=2307846247208333176' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/2307846247208333176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/2307846247208333176'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2007/03/coldfusion-and-msde-2000-on-xp-with-sp2.html' title='ColdFusion and MSDE 2000 on XP with SP2'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-116953247504050916</id><published>2007-01-23T17:04:00.000+11:00</published><updated>2007-01-23T17:07:55.050+11:00</updated><title type='text'>New toy</title><content type='html'>I got a shiny new iPod shuffle a couple of weeks ago. What's the first thing I use it for? Listening to the &lt;a href="http://www.coldfusionweekly.com/"&gt;ColdFusion Weekly&lt;/a&gt; podcast on the way to work of course!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-116953247504050916?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/116953247504050916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=116953247504050916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116953247504050916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116953247504050916'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2007/01/new-toy.html' title='New toy'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-116434497914364859</id><published>2006-11-24T15:55:00.000+11:00</published><updated>2006-11-24T16:33:28.423+11:00</updated><title type='text'>Reading Excel spreadsheet files with ColdFusion</title><content type='html'>A new project I started working on requires the ability to read values from an Excel file using ColdFusion. The last time I looked into doing this (a long time ago) the answer was to use COM. Sometime soon we will be moving our production server from Windows to Solaris so that's not a great solution. After a bit of searching I came across the &lt;a href="http://jakarta.apache.org/poi/"&gt;Apache Jakarta POI project&lt;/a&gt;, a Java API to access Microsoft format files. A little bit more searching revealed that ColdFusion already has this installed. After some trial and error and help from  &lt;a href="http://www.d-ross.org/index.cfm?objectid=9C65ECEC-508B-E116-6F8A9F878188D7CA"&gt;Dave Ross' blog&lt;/a&gt; and the &lt;a href="http://jakarta.apache.org/poi/apidocs/index.html"&gt;API docs&lt;/a&gt; I got it to work.&lt;br /&gt;&lt;br /&gt;Here's  some example code to read a spreadsheet and dump it into an HTML table.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!--- Get the file ---&amp;gt;&lt;br /&gt;&amp;lt;cfset FileIn = createObject("java","java.io.FileInputStream").init("#ExpandPath('myfile.xls')#")/&amp;gt;&lt;br /&gt;&amp;lt;cfset fs = createObject("java","org.apache.poi.poifs.filesystem.POIFSFileSystem").init(FileIn)/&amp;gt;&lt;br /&gt;&amp;lt;cfset workbook = createObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").init(fs)/&amp;gt;&lt;br /&gt;&amp;lt;!--- Get the first sheet ---&amp;gt;&lt;br /&gt;&amp;lt;cfset sheet = workbook.getSheetAt(0)/&amp;gt;&lt;br /&gt;&amp;lt;!--- Get an iterator to loop over each row in the sheet ---&amp;gt;&lt;br /&gt;&amp;lt;cfset rows = sheet.rowIterator()&amp;gt;&lt;br /&gt;&amp;lt;table border="1"&amp;gt;&lt;br /&gt;&amp;lt;!--- Process each row ---&amp;gt;&lt;br /&gt;&amp;lt;cfloop condition="#rows.hasNext()#"&amp;gt;&lt;br /&gt; &amp;lt;tr&amp;gt;&lt;br /&gt; &amp;lt;!--- Get next row ---&amp;gt;&lt;br /&gt; &amp;lt;cfset row = rows.next()&amp;gt;&lt;br /&gt; &amp;lt;!--- Get an iterator to loop over each cell in the row ---&amp;gt;&lt;br /&gt; &amp;lt;cfset cells = row.cellIterator()&amp;gt;&lt;br /&gt; &amp;lt;!--- Process each cell ---&amp;gt;&lt;br /&gt; &amp;lt;cfloop condition="#cells.hasNext()#"&amp;gt;&lt;br /&gt;  &amp;lt;!--- Get next cell ---&amp;gt;&lt;br /&gt;  &amp;lt;cfset cell = cells.next()&amp;gt;&lt;br /&gt;  &amp;lt;!--- Get the cell value's format ---&amp;gt;&lt;br /&gt;  &amp;lt;cfset CellType = cell.getCellType()&amp;gt;&lt;br /&gt;  &amp;lt;!--- Get the cell value ---&amp;gt;&lt;br /&gt;  &amp;lt;cfset CellValue = ""&amp;gt;&lt;br /&gt;  &amp;lt;cfswitch expression="#CellType#"&amp;gt;&lt;br /&gt;   &amp;lt;cfcase value="1,3"&amp;gt;&lt;br /&gt;    &amp;lt;cfset CellValue = cell.getStringCellValue()&amp;gt;&lt;br /&gt;   &amp;lt;/cfcase&amp;gt;&lt;br /&gt;   &amp;lt;cfcase value="0"&amp;gt;&lt;br /&gt;    &amp;lt;cfset CellValue = cell.getNumericCellValue()&amp;gt;&lt;br /&gt;   &amp;lt;/cfcase&amp;gt;&lt;br /&gt;  &amp;lt;/cfswitch&amp;gt;&lt;br /&gt;  &amp;lt;cfoutput&amp;gt;&amp;lt;td&amp;gt;#CellValue#&amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;/cfoutput&amp;gt;&lt;br /&gt; &amp;lt;/cfloop&amp;gt;&lt;br /&gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/cfloop&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;cfset FileIn.close()&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-116434497914364859?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/116434497914364859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=116434497914364859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116434497914364859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116434497914364859'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/11/reading-excel-spreadsheet-files-with.html' title='Reading Excel spreadsheet files with ColdFusion'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-116406975067242816</id><published>2006-11-21T11:34:00.000+11:00</published><updated>2006-11-24T17:15:16.850+11:00</updated><title type='text'>The Joel Test</title><content type='html'>I've been a fan of the &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Joel Test&lt;/a&gt; for a while. Its a a quick test you can use to rate the quality of your development team (or a potential employer). If I apply the Joel test to my workplace I get a score of 3 or 4 out of 12. Hmm, obviously a bit of work still to do.&lt;br /&gt;&lt;br /&gt;Being a web application developer I was very happy to come accross  a great &lt;a href="http://allinthehead.com/retro/228/"&gt;three part series&lt;/a&gt; on Drew McLellan's &lt;a href="http://allinthehead.com/"&gt;blog&lt;/a&gt; talking about applying The Joel Test to a web development setting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-116406975067242816?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/116406975067242816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=116406975067242816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116406975067242816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116406975067242816'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/11/joel-test.html' title='The Joel Test'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-116279127088820668</id><published>2006-11-06T16:33:00.000+11:00</published><updated>2006-11-24T17:12:01.750+11:00</updated><title type='text'>Finding the most recent from multiple related records</title><content type='html'>I'm currently working on a membership database. In this system people can apply to become members for a specific period and then renew their membership when that period expires. The table holding the memberships looks like this:&lt;br /&gt;&lt;br /&gt;CREATE TABLE membership&lt;br /&gt;(&lt;br /&gt;MembershipId INT PRIMARY KEY AUTO_INCREMENT,&lt;br /&gt;MemberId INT,&lt;br /&gt;PeriodId INT,&lt;br /&gt;created DATE,&lt;br /&gt;FOREIGN KEY MemberId REFERENCES members&lt;br /&gt;FOREIGN KEY PeriodId REFERENCES periods&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;There are also related tables to hold the member's details and the membership periods.&lt;br /&gt;&lt;br /&gt;One of the things that the system needs to do is to display a list of members and their latest membership. My first attempt looked like this:&lt;br /&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM membership&lt;br /&gt;WHERE MembershipId IN&lt;br /&gt;(&lt;br /&gt;SELECT MAX(MembershipId)&lt;br /&gt;FROM membership&lt;br /&gt;GROUP BY MemberId&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;Whilst this works its not ideal. In the membership table the primary key really should be a composite of the MemberId and PeriodId fields. Finding the latest membership period would then require a correlated subquery based on the maximum creation date. After a bit of searching on Google I ended up with this:&lt;br /&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM membership&lt;br /&gt;WHERE membership.created =&lt;br /&gt;(&lt;br /&gt;SELECT MAX(membership2.created)&lt;br /&gt;FROM membership AS membership2&lt;br /&gt;WHERE membership2.MemberId = membership.MemberId&lt;br /&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-116279127088820668?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/116279127088820668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=116279127088820668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116279127088820668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/116279127088820668'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/11/finding-most-recent-from-multiple.html' title='Finding the most recent from multiple related records'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-114489928754626774</id><published>2006-04-13T13:30:00.000+10:00</published><updated>2007-02-19T14:08:08.473+11:00</updated><title type='text'>ColdFusion best practice articles and sites</title><content type='html'>&lt;p&gt;&lt;em&gt;Updated 23 August 2006&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;Here are some some sites with advice and best practices in ColdFusion programming that I have found useful.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://livedocs.macromedia.com/wtg/public/coding_standards/contents.html"&gt;ColdFusion MX Coding Guidelines&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dintenfass.com/cfcbestpractices/"&gt;CFC Best Practices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oreillynet.com/pub/a/javascript/2003/09/24/coldfusion_tips.html"&gt;Top Ten Tips for Developing ColdFusion Components&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://clearsoftware.net/index.cfm?mode=entry&amp;amp;entry=039C3509-E081-2BAC-6912DEE1EDC1C588"&gt;CFCs - Ten Spontaneous Tips&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.forta.com/blog/index.cfm/2006/12/1/ColdFusion-Is-Not-A-DBMS"&gt;ColdFusion Is Not A DBMS!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Open Web Application Security Project (OWASP) &lt;a href="http://www.owasp.org/index.php/OWASP_Top_Ten_Project"&gt;Top Ten security issues Project&lt;/a&gt; (not strictly ColdFusion but great web app security info)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-114489928754626774?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/114489928754626774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=114489928754626774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/114489928754626774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/114489928754626774'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/04/coldfusion-best-practice-articles-and.html' title='ColdFusion best practice articles and sites'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-114118923864339068</id><published>2006-03-01T15:50:00.000+11:00</published><updated>2006-08-21T15:56:50.670+10:00</updated><title type='text'>Creating tables in RTF</title><content type='html'>&lt;p&gt;&lt;br /&gt;Occasionally I have to output RTF (Rich Text Format) documents from ColdFusion. For simple paragraphs of text &lt;br /&gt;with basic font formatting its not that hard. Producing tables can be a bit tricky though. Here's an example of the &lt;br /&gt;RTF code for a very simple document with a 3x2 table:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;{\rtf1&lt;br /&gt;Text before table\par&lt;br /&gt;\trowd\intbl&lt;br /&gt;\cellx1000\cellx2000\cellx3000&lt;br /&gt;Row 1 column 1 \cell Row 1 column 2\cell Row 1 column 3\cell &lt;br /&gt;\trowd\intbl&lt;br /&gt;\cellx1000\cellx2000\cellx3000&lt;br /&gt;\row &lt;br /&gt;\trowd\intbl&lt;br /&gt;\cellx1000\cellx2000\cellx3000&lt;br /&gt;Row 2 column 1 \cell Row 2 column 2\cell Row 2 column 3\cell &lt;br /&gt;\trowd\intbl&lt;br /&gt;\cellx1000\cellx2000\cellx3000&lt;br /&gt;\row &lt;br /&gt;\pard &lt;br /&gt;Text after table\par&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;When viewed in an RTF editor (Word, NotePad, etc):&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5698/404/1600/rtf_output.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5698/404/320/rtf_output.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This example is adapted from Steve Skelton's excellent article &lt;br /&gt;"&lt;a href="http://www.devx.com/asp/Article/17964/0/page/3"&gt;How To Output RTF-formatted Documents with ASP&lt;/a&gt;".&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-114118923864339068?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/114118923864339068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=114118923864339068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/114118923864339068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/114118923864339068'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/03/creating-tables-in-rtf.html' title='Creating tables in RTF'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-113988459208276007</id><published>2006-02-14T13:32:00.000+11:00</published><updated>2006-02-14T13:36:32.093+11:00</updated><title type='text'>CFMODULE bug</title><content type='html'>Found an interesting bug in ColdFusion MX 7 today. Adding a closing backslash to CFMODULE (eg. &amp;lt;cfmodule template="module.cfm" /&amp;gt;) causes the module to be executed twice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-113988459208276007?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/113988459208276007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=113988459208276007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113988459208276007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113988459208276007'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/02/cfmodule-bug.html' title='CFMODULE bug'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-113798437892975317</id><published>2006-01-23T13:38:00.000+11:00</published><updated>2006-02-03T09:50:31.843+11:00</updated><title type='text'>News sources</title><content type='html'>&lt;p&gt;A short list of the sites I visit regularly for news. I'll update it from time to time.&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;&lt;a href="http://slashdot.org/"&gt;Slashdot&lt;/a&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;a href="http://slashdot.org/"&gt;Full As A Goog&lt;/a&gt; (agregator for Macromedia-related blogs)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;a href="http://www.alistapart.com/"&gt;A List Apart&lt;/a&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;a href="http://www.fullasagoog.com/"&gt;Sydney Morning Herald&lt;/a&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt; (good articles)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-113798437892975317?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/113798437892975317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=113798437892975317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113798437892975317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113798437892975317'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/01/news-sources.html' title='News sources'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-113685910685331077</id><published>2006-01-10T11:06:00.000+11:00</published><updated>2006-01-23T13:47:31.813+11:00</updated><title type='text'>Storing repeating events for a calendar</title><content type='html'>&lt;p&gt;&lt;br /&gt;I have a calendar application written in ColdFusion. One of the issues that came up in development was how best to store repeating events. There seem to be two main approaches to this:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt; &lt;li&gt; Use one database table to store information about the event and only its repeat pattern (ie. this event repeats every day/week/month/etc). You then use SQL or a programming language to dynamically calculate which days the event should appear on the calendar.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Use two tables. One stores information about the event and its repeat pattern, the other has a record for every day that an event is repeated.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The advantage of method 1 is that it takes up less storage and can handle infinitely repeating events.&lt;br /&gt;&lt;br /&gt;The disadvantage of method 1 is that it is slow to calculate the repeats.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The advantage of method 2 is that it is very quick to retrieve and display the data.&lt;br /&gt;&lt;br /&gt;The disadvantages are more storage required and you can't have infinitely repeating events (there are workarounds though).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://www.houseoffusion.com/cf_lists/messages.cfm/forumid:4/threadid:20542"&gt;This page&lt;/a&gt; has a good discussion of both approaches.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Speed has become an issue so I am going to implement method 2 but limit repeats to 2 years.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-113685910685331077?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/113685910685331077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=113685910685331077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113685910685331077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113685910685331077'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2006/01/storing-repeating-events-for-calendar.html' title='Storing repeating events for a calendar'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-113399656601149595</id><published>2005-12-08T09:42:00.000+11:00</published><updated>2006-08-18T03:15:48.523+10:00</updated><title type='text'>Upgrading Apache commons net library in ColdFusion MX 7</title><content type='html'>After upgrading to ColdFusion MX 7 Enterprise a couple of weeks ago we started getting Java null pointer errors when using cfftp to list directory contents on our production server (Solaris). I did a bit of poking around and found that ColdFusion uses the Apache Jakarta &lt;a href="http://jakarta.apache.org/commons/net/"&gt;commons net&lt;/a&gt; library for FTP functions. ColdFusion MX 7 ships with version 1.2.2 of the library and the current release is version 1.4.1 so I thought it might be worth upgrading to see if that fixed our problem.&lt;br /&gt;&lt;br /&gt;To upgrade the library I stopped the cfusion JRun server and replaced the file {Jrun root}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/commons-net-1.2.2.jar with commons-net-1.4.1.jar. After restarting the server cfftp worked fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-113399656601149595?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/113399656601149595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=113399656601149595' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113399656601149595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113399656601149595'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2005/12/upgrading-apache-commons-net-library.html' title='Upgrading Apache commons net library in ColdFusion MX 7'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-113376362221644951</id><published>2005-12-05T17:11:00.000+11:00</published><updated>2005-12-05T17:28:38.153+11:00</updated><title type='text'>cfheader and filenames with spaces</title><content type='html'>&lt;p&gt;&lt;br /&gt;Some time ago I had a project which required file downloads using cfheader. I found that file names with spaces were being truncated by &lt;br /&gt;some browsers. Recently I came across &lt;a href="http://bluedragon.blog-city.com/cfheadervaluewithspaces.htm"&gt;this blog entry&lt;/a&gt; by &lt;br /&gt;Charlie Arehart from &lt;a href="http://www.newatlanta.com/"&gt;New Atlanta&lt;/a&gt; which provides the solution.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Instead of&lt;br /&gt;&lt;br /&gt;&amp;lt;cfheader name="Content-Disposition" value="attachment; filename=a text file.txt"&gt;&lt;br /&gt;&lt;br /&gt;use&lt;br /&gt;&lt;br /&gt;&amp;lt;cfheader name="Content-Disposition" value='attachment; filename="a text file.txt"'&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-113376362221644951?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/113376362221644951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=113376362221644951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113376362221644951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113376362221644951'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2005/12/cfheader-and-filenames-with-spaces.html' title='cfheader and filenames with spaces'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18855252.post-113167892754596843</id><published>2005-11-11T14:14:00.000+11:00</published><updated>2005-11-11T14:24:28.940+11:00</updated><title type='text'>CSS form layout</title><content type='html'>&lt;p&gt;For a while now I've been looking for a CSS solution for laying out forms. Yesterday I was playing around &lt;br /&gt;and tried using absolute positioning. This seems to work quite well across several browser/platform combinations. &lt;br /&gt;I'll have to test it on more browsers but for now I'm happy. Here's an example:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt; label {&lt;br /&gt;  position: absolute;&lt;br /&gt;  width: 95px;&lt;br /&gt;  text-align: right;&lt;br /&gt;  font-weight: bold;&lt;br /&gt; }&lt;br /&gt; input, textarea, select {&lt;br /&gt;  margin-left: 100px;&lt;br /&gt; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;br /&gt;&lt;form action="index.cfm" method="post"&gt;&lt;br /&gt;&lt;br /&gt; &lt;label for="name"&gt;Name:&lt;/label&gt;&lt;br /&gt; &lt;input type="text" name="name" size="30" maxlength="100"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;label for="gender"&gt;Gender:&lt;/label&gt;&lt;br /&gt; &lt;select name="gender"&gt;&lt;br /&gt;  &lt;option value=""&gt;&lt;/option&gt;&lt;br /&gt;  &lt;option value="Male"&gt;Male&lt;/option&gt;&lt;br /&gt;  &lt;option value="Female"&gt;Female&lt;/option&gt;&lt;br /&gt; &lt;/select&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;label for="AgeGroup"&gt;Age group:&lt;/label&gt;&lt;br /&gt; &lt;input type="radio" name="AgeGroup" value="1"&gt;Under 20 &lt;br /&gt;&lt;br /&gt; &lt;input type="radio" name="AgeGroup" value="2"&gt;21 -30&lt;br /&gt;&lt;br /&gt; &lt;input type="radio" name="AgeGroup" value="3"&gt;31 -40&lt;br /&gt;&lt;br /&gt; &lt;input type="radio" name="AgeGroup" value="4"&gt;Over 40&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;label for="address"&gt;Address:&lt;/label&gt;&lt;br /&gt; &lt;textarea cols="30" rows="5" name="address"&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;style type="text/css"&gt;&lt;br /&gt; label {&lt;br /&gt;  position: absolute;&lt;br /&gt;  width: 95px;&lt;br /&gt;  text-align: right;&lt;br /&gt;  font-weight: bold;&lt;br /&gt; }&lt;br /&gt; input, textarea, select {&lt;br /&gt;  margin-left: 100px;&lt;br /&gt; }&lt;br /&gt;&amp;lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;form action="index.cfm" method="post"&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;label for="name"&gt;Name:&amp;lt;/label&gt;&lt;br /&gt; &amp;lt;input type="text" name="name" size="30" maxlength="100"&gt;&amp;lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;label for="gender"&gt;Gender:&amp;lt;/label&gt;&lt;br /&gt; &amp;lt;select name="gender"&gt;&lt;br /&gt;  &amp;lt;option value=""&gt;&amp;lt;/option&gt;&lt;br /&gt;  &amp;lt;option value="Male"&gt;Male&amp;lt;/option&gt;&lt;br /&gt;  &amp;lt;option value="Female"&gt;Female&amp;lt;/option&gt;&lt;br /&gt; &amp;lt;/select&gt;&amp;lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;label for="AgeGroup"&gt;Age group:&amp;lt;/label&gt;&lt;br /&gt; &amp;lt;input type="radio" name="AgeGroup" value="1"&gt;Under 20 &amp;lt;br /&gt;&lt;br /&gt; &amp;lt;input type="radio" name="AgeGroup" value="2"&gt;21 -30&amp;lt;br /&gt;&lt;br /&gt; &amp;lt;input type="radio" name="AgeGroup" value="3"&gt;31 -40&amp;lt;br /&gt;&lt;br /&gt; &amp;lt;input type="radio" name="AgeGroup" value="4"&gt;Over 40&amp;lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;label for="address"&gt;Address:&amp;lt;/label&gt;&lt;br /&gt; &amp;lt;textarea cols="50" rows="5" name="address"&gt;&amp;lt;/textarea&gt;&lt;br /&gt;&amp;lt;/form&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18855252-113167892754596843?l=cfwhat.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfwhat.blogspot.com/feeds/113167892754596843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18855252&amp;postID=113167892754596843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113167892754596843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18855252/posts/default/113167892754596843'/><link rel='alternate' type='text/html' href='http://cfwhat.blogspot.com/2005/11/css-form-layout.html' title='CSS form layout'/><author><name>Richard</name><uri>http://www.blogger.com/profile/16248139539707818614</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08103360409777863491'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>