<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>nil desperandum</title>
			<link>http://nil.checksite.co.uk/index.cfm</link>
			<description>ColdFusion, CFML and web development related stuff</description>
			<language>en-us</language>
			<pubDate>Mon, 21 May 2012 05:46:08 -0700</pubDate>
			<lastBuildDate>Tue, 27 Sep 2011 22:42:00 -0700</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>stephen@checksite.co.uk</managingEditor>
			<webMaster>stephen@checksite.co.uk</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>stephen@checksite.co.uk</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			<item>
				<title>Lightning Introduction to CFML</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/9/27/Lightning-Introduction-to-CFML</link>
				<description>
				
				Last night I did my lightning talk to Northeast UK tech group SuperMondays (&lt;a href=&quot;http://www.supermondays.org&quot; target=&quot;_blank&quot;&gt;http://www.supermondays.org&lt;/a&gt;).  The overall topic for the night was programming languages you might not have heard of. 

How could I pass up the chance to pimp my favourite web application language?  So I offered to talk about CFML.The presentation took 20 minutes including questions, so I probably talked a little more than I should have done, but it seemed to go quite well and hopefully I managed to at least plant the seed in the minds of a bunch of php, ruby and .net developers that ColdFusion is still alive and kicking and a powerful tool to have available.

A surprising number of people actually knew of ColdFusion and some had even used it. One chap was actually using Railo as his CFML server and CFWheels as development framework. I managed also to introduce a couple of my colleagues to new CFML tags they&apos;d never seen or heard of before, so even those that knew of and used ColdFusion managed to get at least a little something out of it.

As a bit of a personal challenge to try something that I&apos;ve never used from ColdFusion and to prove a point of the power of ColdFusion I actually set up my presentation using ColdFusion 9 and the cfpresentation set of tags. Its not a particularly practical use of CFML, but it was fun to play with. I changed the tags this evening and exported it out of Adobe Presenter to a ppt and exported that as a pdf. The PDF is now available on SlideSix, a ColdFusion and Flex based presentation sharing site. The presentation isn&apos;t pretty. I am, after all, a developer not a designer. ;)

This is my presentation:
&lt;object  height=&quot;371&quot; width=&quot;480&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://slidesix.com/viewer/SlideSixViewer.swf?alias=Lightening-Introduction-to-CFML&quot; /&gt;&lt;param name=&quot;menu&quot; value=&quot;false&quot;/&gt;&lt;param name=&quot;scale&quot; value=&quot;noScale&quot;/&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param value=&quot;transparent&quot; name=&quot;wmode&quot; /&gt;&lt;param value=&quot;quality&quot; name=&quot;best&quot; /&gt;&lt;embed src=&quot;http://slidesix.com/viewer/SlideSixViewer.swf?alias=Lightening-Introduction-to-CFML&quot; allowscriptaccess=&quot;always&quot; allowFullScreen=&quot;true&quot; height=&quot;371&quot;  width=&quot;480&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; quality=&quot;best&quot; /&gt;&lt;/object&gt;

The other talks were on Node.js (&lt;a href=&quot;http://slidesix.com/view/Nodejs&quot; target=&quot;_blank&quot;&gt;http://slidesix.com/view/Nodejs&lt;/a&gt;), Backbone.js (&lt;a href=&quot;www.slideshare.net/pootsbook/backbonejs-9432525&quot; target=&quot;_blank&quot;&gt;www.slideshare.net/pootsbook/backbonejs-9432525&lt;/a&gt;) and R, a statistical analysis language.  All the talks were very interesting. I&apos;ve already looked at Node.js previously, but will be looking at both R and Backbone.js.

All the presentations were recorded on video which will be available on the &lt;a href=&quot;http://www.supermondays.org&quot; title=&quot;SuperMondays&quot; target=&quot;_blank&quot;&gt;SuperMondays website&lt;/a&gt;, so you&apos;ll be able to see all my presentation ticks in their full glory.
				</description>
				
				<category>Web Development</category>
				
				<category>Adobe</category>
				
				<category>CFML</category>
				
				<pubDate>Tue, 27 Sep 2011 22:42:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/9/27/Lightning-Introduction-to-CFML</guid>
				
				
			</item>
			
			<item>
				<title>How I got started in ColdFusion</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/8/1/How-I-got-started-in-ColdFusion</link>
				<description>
				
				As per usual its been far too long since I wrote anything on my blog, so it seems fitting that I join in with the &quot;How I got started with ColdFusion.&quot; day. 

I suppose I should start with where I actually started with this Internet malarkey.In 1989, I started at what was Newcastle Polytechnic, and is now Northumbria University, a year late having flunked a year of A level Math, Biology and Chemistry and gone off to college to get a National Diploma in Computing for Business. Two years of Higher National Diploma in Computing for Business with a year of work placement in the middle and a lot of time spent building various applications on the DEC Vax system in poly I decided to top my HND up to an honours degree. To be fair,  I did rather well in my HND and I was offered the opportunity to do an extra two years to get the &apos;better&apos; qualification and not really knowing what I wanted to do I took the opportunity. 

From the HND I went into the third year of the four BSc Honour Computing course, where they proceeded to bore me silly with stuff I&apos;d already done. More time &apos;hacking&apos; around with the DEC Vax system ensued along with lots of time in the student bar play table football,  drinking Newcastle Brown Ale and organising band nights in the bar. 

The final year of my Degree course was where it finally got interesting. In the course of messing around with the poly network in the previous year, me and some friends had discovered a gateway out of the national joint academic network onto this &quot;Internet&quot; thing. Back then we were using paper terminals and one old green screen that allowed us through the gateway unchallenged.  We played with FTP, NNTP and gopher. Then http suddenly started providing more content that we were just about able to find and get to using lynx. In the latter part of the year we got access to the unix terminals and with it we also found Mosaic shortly followed by Netscape.  With DEC&apos;s Altavista search engine and then Yahoo! we were able to find loads of total rubbish and academic waffle all over the then minuscule World Wide Web.

I knew about the Internet and I knew how to make HyperText Markup Language and I was one of less than a handful that did, so that was my final year dissertation. I created a computer aided learning tool, using HTML and perl that did some rudimentary sign in and progress recording to help students and lecturers at the Poly learn about the various aspects of the Internet. That was a fun year of trying to find out exactly how you design an application that is basically a set of linked web pages, with a whole bunch of emails from around the world that amounted to &quot;when you find out let me know will you? I&apos;m really interested in that too!&quot;, my lecturer saying things like &quot;Sounds good to me, just keep going&quot; with a blank look on his face, that culminated in having to persuade my second marker that the internet and HTML was a good thing and they had a purpose and future, so that he didn&apos;t fail me! As it turned out my second marker understood it all better when it was demonstrated to him and I didn&apos;t get failed, in fact I got 83% after going through the wringer.

Cut forward a little bit and I managed to get myself a job working for a web development company in Newcastle city centre. I got to build a couple of rough and ready data driven websites using perl before the company went under leaving me short a months pay at Christmas time.  Around that time web development companies were few and far between, so I ended up working IT support for Newcastle Chronicle and Journal. I&apos;d stayed in touch with a couple of the guys from the web development company and they happen to mention that they knew the business development manager at &quot;The Chron&quot; and one day whilst fixing someone&apos;s PC I dropped this nugget into the conversation with the new business development manager. It wasn&apos;t long after that conversation that I started a new job at The Chron as a web developer.  Their first web developer.  The NBDM hired a great designer who had a background in architecture and grasped the three dimensional and inter-related nature of a website. We knew what we wanted to do to develop websites for the newspapers, but we still didn&apos;t have the technology to build the sites with.  We&apos;d pretty much got the choices down to Active Server Pages and Allaire Cold Fusion 2.  We were on the verge of going with asp, when Cold Fusion 3 was released and we never looked back since!  

Cold Fusion 3 was a revelation. Our database was updated with news stories directly from the Quark Express documents of the newspapers up to 6 times in a day. Cold Fusion 3 made it extremely easy to connect to the database and pull out the latest news in any way we liked, connecting ex-pat Geordies around the globe. 

Fourteen years on I&apos;m still a ColdFusion developer. I&apos;ve been through a few jobs since then, including a stint as a self-employed developer, helping to create solutions for the BBC in 1999 for their Today2000 broadcast and Formica UK and Europe among other projects. I&apos;m now Software Development Manager for Enigma Interactive in Newcastle where we create ColdFusion solutions for a varied selection of clients and projects. 

I&apos;ve been involved in helping run ColdFusion conferences here in the UK and I had the honour and pleasure of speaking at Scotch on the Rocks this year.

Well I seem to have written a small novel, so I should probably stop now.

The future is bright for ColdFusion with an ongoing plan for development of Adobe&apos;s ColdFusion as well as two other solid and continually developed Open Source CFML engines, in the form of Railo and OpenBluedragon. ColdFusion is here to stay and it only gets better.
				</description>
				
				<category>Web Development</category>
				
				<category>CFML</category>
				
				<pubDate>Mon, 01 Aug 2011 23:08:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/8/1/How-I-got-started-in-ColdFusion</guid>
				
				
			</item>
			
			<item>
				<title>ColdFusion Java Query Object</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/6/27/ColdFusion-Java-Query-Object</link>
				<description>
				
				I&apos;m currently refactoring some code from a client website to be used in a standalone application. I&apos;ve been having some fun sorting through old legacy code, as well as some interesting ummm... code written by various past developers.

Hidden in amongst the chaff I found a slightly unusual bit of code that made me scratch my head.In the code I was tidying up and restyling I came across this line of code 
&lt;code&gt;
&lt;cfif getNewsCategories.IsLast()&gt;
&lt;/code&gt;

&quot;getNewsCategories&quot; is a poorly named CFQuery result set with a function call of &quot;isLast()&quot; on the end of it. This confused me because this site is a pre-ORM style site, so there&apos;s no Transfer-ORM or ColdFusion 9 Hibernate in there and the rest of the time the query is accessed normally.

A quick scout around dug up this article about &lt;a href=&quot;http://www.zrinity.com/developers/mx/undocumentation/query.cfm&quot; target=&quot;_blank&quot; title=&quot;&quot;&gt;undocumented ColdFusion QueryTable feature&lt;/a&gt;. Scanning down through the article I eventually came to a reference to the actual java class in ColdFusion and the java classes it extends.

I knew this, honest I did, but I&apos;d forgotten.  ColdFusion QueryTable extends &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/javax/sql/RowSet.html&quot; title=&quot;JRE 6 : javax.sql.RowSet&quot; target=&quot;_blank&quot;&gt;javax.sql.RowSet&lt;/a&gt; which has all sorts of methods that it inherits from &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/javax/sql/RowSet.html#methods_inherited_from_class_java.sql.ResultSet&quot; title-&quot;inherited from java.sql.ResultSet&quot; target=&quot;_blank&quot;&gt;java.sql.ResultSet&lt;/a&gt; which include isFirst() and isLast().  

I haven&apos;t played with any of the other methods, but I thought it was something fun to play with at some point and thought I&apos;d run up this quick blog post to remind myself if nothing else.
				</description>
				
				<category>CFML</category>
				
				<pubDate>Mon, 27 Jun 2011 12:45:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/6/27/ColdFusion-Java-Query-Object</guid>
				
				
			</item>
			
			<item>
				<title>My SOTR 2011 Presentation : AJAX Longpolling with BlazeDS</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/5/11/My-SOTR-2011-Presentation--AJAX-Longpolling-with-BlazeDS</link>
				<description>
				
				I&apos;m rubbish I know...  Takes me forever to actually post anything on my blog. Let me throw you a small bone.

Scotch on the Rocks 2011 was a marvelous event, even if I did manage to trash my ankle stepping off the train on the Wednesday night. Not that you care, but if you saw me hopping around, it turns out that I actually chipped a bit of bone off my ankle when I twisted my ankle. I&apos;m sure you&apos;ll be ecstatic to know that after two and a half month I&apos;m finally back to biking to work again. Anyway....Andy Allan, the lovely Leanne and the ColdFusion Monkeh, Matt Gifford, as always, put on a grand event.  Some top class ColdFusion developers and speakers from around the globe. While I enjoyed every presentation I went to, Robert Rawlins presentation &quot;The Pen Is Mightier Than The Keyboard&quot; sticks in my mind as one of the most entertaining and inspirational of the two days.

Enough about them though!  What about me!?
Quite frankly I nearly had kittens! Its the first time in a very long time that I&apos;ve done a presentation of this nature. I was in the smallest presentation room and it was overflowing even before it had started.  I was afraid that when I hopped off for a minute or two that I&apos;d come back to find someone had pinched my seat! Thankfully my seat was still there when I got back.

A fair percentage of my presentation was actually based around live coding a small chat application. Amazingly it all went perfectly to plan!  Code worked because I remembered to start my ColdFusion server and there were no dodgy porn sites in background web pages. (If you were there you&apos;ll know what I&apos;m alluding to. ;) )

You can find my presentation on SlideSix :

&lt;img style=&quot;visibility:hidden;width:0px;height:0px;&quot; border=0 width=0 height=0 src=&quot;http://c.gigcount.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEzMDUxNDcwMTU2MDcmcHQ9MTMwNTE*ODY3MDgwMyZwPTEwMDA3NTImZD*mZz*yJm89ZTdkNDVhNjEwOTgwNGQ*N2Fl/MDIyMDdmMGQ3OWIyZDkmb2Y9MA==.gif&quot; /&gt;&lt;object height=&quot;400&quot; width=&quot;490&quot;&gt;
	&lt;param name=&quot;movie&quot; value=&quot;http://slidesix.com/viewer/SlideSixViewer.swf?alias=AJAX-Longpolling-with-ColdFusion-9-and-BlazeDS&quot;/&gt;
	&lt;param name=&quot;menu&quot; value=&quot;false&quot;/&gt;
	&lt;param name=&quot;scale&quot; value=&quot;noScale&quot;/&gt;
	&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;
	&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;
	&lt;embed src=&quot;http://slidesix.com/viewer/SlideSixViewer.swf?alias=AJAX-Longpolling-with-ColdFusion-9-and-BlazeDS&quot; allowscriptaccess=&quot;always&quot; allowFullScreen=&quot;true&quot; height=&quot;400&quot; width=&quot;490&quot; type=&quot;application/x-shockwave-flash&quot;  FlashVars=&quot;gig_lt=1305147015607&amp;gig_pt=1305148670803&amp;gig_g=2&quot;/&gt;
 &lt;param name=&quot;FlashVars&quot; value=&quot;gig_lt=1305147015607&amp;gig_pt=1305148670803&amp;gig_g=2&quot; /&gt;&lt;/object&gt;

The code I used throughout my presentation is also attached to the slide show on SlideSix. The code is in the state it was at the end of my presentation, but you can find the bits that I used to build the application up step-by-step in the &quot;Bits&quot; folder.  You&apos;ll also find the updated FABridge.js so that the Flex-AJAX bridge will also work in Chrome in the ChromeFix folder.  

You&apos;ll also find a &quot;BluePeter&quot; folder. If you&apos;re British you&apos;ve probably already guessed what is in this folder. &quot;Here&apos;s one I prepared earlier&quot; is a well known phrase from the children&apos;s program Blue Peter when they are making or baking anything on the show. My BluePeter folder is just that.  A complete working application, one I prepared earlier, just in case anything didn&apos;t go quite to plan.

I got some great comments and compliments from those that attended my presentation and for that I thank all of you that attended. Here&apos;s hoping I can come up with something to talk about at the next one.
				</description>
				
				<category>Scotch on the Rocks</category>
				
				<category>BlazeDS</category>
				
				<category>Conference</category>
				
				<category>AJAX</category>
				
				<pubDate>Wed, 11 May 2011 21:44:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/5/11/My-SOTR-2011-Presentation--AJAX-Longpolling-with-BlazeDS</guid>
				
				
			</item>
			
			<item>
				<title>Exporting only changed files from SVN</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/2/3/Exporting-only-changed-files-from-SVN</link>
				<description>
				
				At work we&apos;ve got a number of large projects that have a considerable number of very large binary resources that we manage under source control with SVN.

The problem we have is that some of the legacy projects have resource in folders underneath the code base rather than outside of the code base. This makes it difficult to update just the code from an export of a tag. This is exacerbated by the fact that the large resources are binary, so we can&apos;t patch using an svn diff.

For some time now I&apos;ve been looking for a means to get a diff, pick up the files that have changed or added and export only those files into an appropriate directory structure that I can easily drop into place.

I finally have one!I&apos;m not sure how I haven&apos;t found this &lt;a href=&quot;http://stackoverflow.com/questions/417960/svn-export-just-the-changed-files-from-tags&quot; title=&quot;svn export just the changed files from tags&quot; target=&quot;_blank&quot;&gt;StackOverflow post&lt;/a&gt; previously, but find it I did.

On this post were a couple of different solutions. Most of them involve tortoiseSVN, which I detest for the number of times its destroyed working copies for me in the past. (It may be better now but I don&apos;t care it will never be installed on my computer ever!)

A chap called Phil Gloyne posted a jar file that he created to address this same issue.  Unfortunately when I tried it out it seemed to blow up on the authentication and I couldn&apos;t easily work out what the problem was.

A frenchman by the name of Julien Falconnet posted a &lt;a href=&quot;http://www.falconnet.fr/Subversion-export-des-fichiers.html&quot; target=&quot;_blank&quot; title=&quot;Subversion: export files from a revision in bash&quot;&gt;bash script&lt;/a&gt; that he&apos;d created. This &lt;i&gt;almost&lt;/i&gt; did what I wanted it to do, but is set to export the difference between specific revisions. 

What I really needed was to export difference between two tags or urls in the repository rather two revisions, so I tweaked it to use URLs rather than revisions in the svn diff.  This almost worked, but while spotted a flaw in the script when using two urls.  Using only one url and revisions, the url in the summarized svn diff are the correct url to export from. When you use two urls the url in the summary are those of the OLD url and not the new url, so when the script exports the files, it gets the revision from the old url and fails to get file that have been added since the old tag was created.

Fortunately for me, Julien had already pulled the relative file path in order to build the correct file structure when exporting the files, so it was a simple matter to switch the export to use the new url with the relative file path instead of the one in the diff.

I am now a very happy man!  A considerable weight and arduous task has now been lifted from my shoulders!  A 15 minute task is now a 30second one.  I hope it makes someone else out there very happy too.

Incidentally, should you still wish to use this script to export between revisions use the url form for revisions of &lt;a href=&quot;http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.diff.html&quot; target=&quot;_blank&quot; title=&quot;svnbook : red-bean : svn diff&quot;&gt;svn diff OLD-URL[@OLDREV] NEW-URL[@NEWREV&lt;/a&gt;

&lt;strong&gt;NOTE :&lt;/strong&gt; The bash script can be downloaded using the download button just below.
				</description>
				
				<category>Web Development</category>
				
				<category>svn</category>
				
				<pubDate>Thu, 03 Feb 2011 16:13:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/2/3/Exporting-only-changed-files-from-SVN</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/svnexport1.sh" length="2208" type="application/octet-stream"/>
				
			</item>
			
			<item>
				<title>Getting values out of MySQL TinyInt(1)</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/1/25/Getting-values-out-of-MySQL-TinyInt1</link>
				<description>
				
				One of my colleagues pestered me just now asking me why his Tinyint(1) on MySQL was being mangled by ColdFusion so that it only ever returned 1 or 0. 

You read the documentation on numeric data type is MySQL and you see &quot;BIT is a synonym for TINYINT(1)&quot; or &quot;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html#id3976941&quot; title=&quot;MySQL 5 numeric types&quot; target=&quot;_blank&quot;&gt;BOOLEAN is a synonym for TINYINT(1)&lt;/a&gt;&quot;, so when ColdFusion returns only 1 or 0 for a TINYINT its kind of understandable.But then again, no it isn&apos;t really. 

The description of TinyInt is :
&lt;blockquote&gt;
A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255.
&lt;/blockquote&gt;

so you should be able to insert and extract values from -128 to 127 or 0 to 255 if you create your database field as unsigned.

So why doesn&apos;t this work in ColdFusion?  Well to be fair its not really ColdFusion at fault here. Its actually down to the JDBC drivers connecting CF to MySQL.

By default the JDBC drivers assume that TINYINT is a bit value and returns data accordingly; 0 is zero and anything else is 1.  What you need to do is tell the drivers to treat TINYINT as an integer rather than as a bit.

You can do this with an addition to the connectstring  of :
&lt;code&gt;
tinyInt1isBit=false 
&lt;/code&gt;

I haven&apos;t tried this out on ColdFusion 9, but my colleague had to make use of this &lt;a href=&quot;http://kb2.adobe.com/cps/403/kb403748.html&quot; title=&quot;Workaround for MySQL 5.x tinyInt(1) NULL value returned as zero (ColdFusion 8.0.1)&quot; target=&quot;_blank&quot;&gt;Adobe Technote kb403748&lt;/a&gt; to get ColdFusion 8.x to use the connectstring correctly and much heartache, swearing and changing of database tables was averted.
				</description>
				
				<category>Adobe</category>
				
				<category>CFML</category>
				
				<category>MySQL</category>
				
				<pubDate>Tue, 25 Jan 2011 11:52:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/1/25/Getting-values-out-of-MySQL-TinyInt1</guid>
				
				
			</item>
			
			<item>
				<title>Manually connecting Apache to a ColdFusion instance</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/1/21/Manually-connecting-Apache-to-a-ColdFusion-instance</link>
				<description>
				
				I realised the other day when I was talking to a friend that my previous post on manually creating ColdFusion instances was kind of missing the last part of the process.

You&apos;ve created a ColdFusion instance. You can start it up and you can access the admin. You&apos;ve even made sure that proxy port is active, but now what?  How do I manually hook up my shiny new instance to a web server?  So I thought I&apos;d write up this bit as well.  

I haven&apos;t used IIS in a long time, so I&apos;m not even going to contemplate how you would manually set that web server up with ColdFusion, but I can tell you how to connect Apache.First of all if you&apos;ve never hooked apache up to a ColdFusion instance you&apos;re going to need to sort out the jrun module that it needs to be able to pass through requests to JRun and your ColdFusion instance.

Tell apache to load the jrun module you need a line the main config that looks like this :

&lt;code&gt;
LoadModule jrun_module /opt/jrun4/lib/wsconfig/1/mod_jrun22.so
&lt;/code&gt;

The path to the mod_jrun22.so file can be anything you like, but this the location that wsconfig will most likely push the module to if you use that to configure your server.  We&apos;re doing this by hand, so we need to find and extract the module so that we can use it with apache.

The connectors all live in a file called wsconfig.jar which lives under jrun4/lib folder.  If you open the jar up in winrar or whatever your favourite archive application is you see a connectors folder. Inside of that are the following folders :

&lt;ul&gt;
	&lt;li&gt;src&lt;/li&gt;
	&lt;li&gt;nsapi&lt;/li&gt;
	&lt;li&gt;isapi&lt;/li&gt;
	&lt;li&gt;installers&lt;/li&gt;
	&lt;li&gt;apache&lt;/li&gt;
&lt;/ul&gt;

The important folder to us is the apache folder which contains a bunch of folder for 32bit and 64bit versions of apache connectors for the following operating systems:

&lt;ul&gt;
	&lt;li&gt;sparc-solaris&lt;/li&gt;
	&lt;li&gt;ppc-macosx&lt;/li&gt;
	&lt;li&gt;ppc-aix&lt;/li&gt;
	&lt;li&gt;pa_risc-hpux&lt;/li&gt;
	&lt;li&gt;intel-win&lt;/li&gt;
	&lt;li&gt;intel-macosx&lt;/li&gt;
	&lt;li&gt;intel-linux&lt;/li&gt;
&lt;/ul&gt;

Inside the appropriate OS folder for your processor type (32bit vs 64bit) there is a &quot;prebuilt&quot; folder.  There are generally three versions of the jrun module;  mod_jrun.so, mod_jrun20.so and mod_jrun22.so. mod_jrun.so is for apache 1.x, mod_jrun is for apache 2.0 and mod_jrun22.so is for apache 2.2.  Extract the .so file relevant to you out to somewhere that apache can get access to it and add the LoadModule line above to your apache config with this path.

There&apos;s another line of config that I usually put with the LoadModule line;
&lt;code&gt;
AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
&lt;/code&gt;
This just tells apache to send any requests for files ending in .jsp, .jws, .cfm, .cfml, .cfc, .cfr, .cfswf to JRun.

Apache on ubuntu has load and conf files for modules, so this goes in my jrun_mod.conf while the LoadModule goes in a jrun_mod.load file. On Windows I just lump the two config lines together in the httpd.conf file.

With this done all that is left is to connect your VirtualHost for the site needing ColdFusion to the proxy port of your ColdFusion instance.
In your VirtualHost entry you will need to tell apache some JRunConfig to set the connection up, the most important one being:

&lt;code&gt;
JRunConfig Bootstrap 127.0.0.1:51000 
&lt;/code&gt;

This tells apache to connect to the proxy port ColdFusion instance with a proxy port of 51000, so going back to my previous post I used the example of 51020 as the proxy port.  To connect to this instance from apache we&apos;d use &quot;JRunConfig Bootstrap 127.0.0.1:51020&quot;.  That on its own should be sufficient. However, there are usually a few other config items that the wsconfig would add for you :

&lt;code&gt;
JRunConfig Verbose false 
JRunConfig Apialloc false 
JRunConfig Ssl false 
JRunConfig Ignoresuffixmap false 
JRunConfig Serverstore &quot;C:/JRun4/lib/wsconfig/1/jrunserver.store&quot; 
JRunConfig Bootstrap 127.0.0.1:51000 
#JRunConfig Errorurl &lt;optionally redirect to this URL on errors&gt; 
#JRunConfig ProxyRetryInterval &lt;number of seconds to wait before trying to reconnect to unreachable clustered server&gt; 
#JRunConfig ConnectTimeout 15 
#JRunConfig RecvTimeout 300 
#JRunConfig SendTimeout 15 
&lt;/code&gt;

Verbose is how much the JRun connector logs to the apache logs.  Setting this to true will generate loads of information that can be useful for debugging.
Apialloc false allows the connector to grab memory from the operating system rather than apache assigning it memory.
Ssl allows you to create Secure Socket Layer connections to your ColdFusion instance if you&apos;ve set them up. (look in the Jrun.xml file near the web and proxy connection information for the config for this)
Ignoresuffixmap - I&apos;m actually not entirely certain what this one does. I assume it makes the connector ignore the AddHandler and just send all requests to the JRun/ColdFusion instance. I could be wrong. Happy to be corrected.
Serverstore is the location for of the jrunserver.store file that is used if you are clustering multiple instances.

The last four items I&apos;ve thrown in for good measure and should be fairly obvious as to their meaning. The # at the front means that they are commented out.  Generally I have Bootstrap, Verbose, Apialloc and Ssl enabled and all the rest removed or commented out.

The last thing to add to this; I tend not to do this, but if you want to you can wrap your JRunConfig in a check to make sure that the jrun_mod has been loaded. This would give you a config that looks like this : 

&lt;code&gt;
&lt;IfModule mod_jrun.c&gt;
	JRunConfig Verbose false 
	JRunConfig Apialloc false 
	JRunConfig Ssl false 
	JRunConfig Ignoresuffixmap false 
	JRunConfig Bootstrap 127.0.0.1:51020 	
&lt;/IfModule&gt;
&lt;/code&gt;

Hope that helps someone out. 

Also if anyone knows where the definitive list of JRunConfig options lives I&apos;d love to know. I&apos;ve hunted around to find out what the ones shown mean, but never found all the config items in one location with decent descriptions as to what they do.
				</description>
				
				<category>JRun</category>
				
				<category>Adobe</category>
				
				<category>CFML</category>
				
				<pubDate>Fri, 21 Jan 2011 14:25:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/1/21/Manually-connecting-Apache-to-a-ColdFusion-instance</guid>
				
				
			</item>
			
			<item>
				<title>Getting the Flex-AJAX Bridge (FABridge) working in Chrome</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/1/19/Getting-the-FlexAJAX-Bridge-FABridge-working-in-Chrome</link>
				<description>
				
				Very brief blog post.

I&apos;ve been working on my longpolling blog posts trying to resolve why I&apos;m having problems with the dynamic channel creation with ColdFusion 9.0.1. 

I&apos;ve been trying to call my application from Firefox and Chromium on the same laptop.  Firefox has been working beautifully, but Chromium 10 has not been playing nice. 

Finally (I can be a stubborn fool sometimes) I decided to check from Internet Explorer, Safari and Firefox from my desktop all of which work first time, but Chrome just wasn&apos;t working. 

So brain engages and I google &quot;FABridge Chrome&quot;.  The very first entry that turns up is this one on Tim&apos;s Blog called &lt;a href=&quot;http://www.timothyhuertas.com/blog/2010/11/30/fabridgejs-play-nice-with-chrome/&quot; target=&quot;_blank&quot;&gt;FABridge plays nice with chrome&lt;/a&gt;. In it Tom points out a bug in the javascript of FABridge.js, specifically the FABridge__bridgeInitialized function. This function does a browser test, but doesn&apos;t include Chrome. Add a check for Chrome and everything starts working just as it should!

For the record this is the change : 

&lt;quote&gt;
In FABridge.js if you change:
if (/Explorer/.test(navigator.appName) || /Konqueror|Safari|KHTML/.test(navigator.appVersion))
to:
if((!(/Chrome/.test(navigator.appVersion))) &amp;&amp; ((/Explorer/.test(navigator.appName) || /Konqueror|Safari|KHTML/.test(navigator.appVersion))))
&lt;/quote&gt;

Thank you Tom!  Much appreciated!  Only wish I&apos;d looked sooner!
				</description>
				
				<category>BlazeDS</category>
				
				<category>CFML</category>
				
				<pubDate>Wed, 19 Jan 2011 23:59:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/1/19/Getting-the-FlexAJAX-Bridge-FABridge-working-in-Chrome</guid>
				
				
			</item>
			
			<item>
				<title>Manually creating MultiServer instances of Adobe ColdFusion Server</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/1/12/Manually-creating-MultiServer-instances-of-Adobe-ColdFusion-Server</link>
				<description>
				
				In the past I&apos;ve blogged about manually deploying &lt;a href=&quot;http://nil.checksite.co.uk/index.cfm/2006/5/3/cfmx-multiserver-set-up&quot; title=&quot;CFMX MultiServer Set Up&quot;&gt;ColdFusion instances on Multiserver JRun&lt;/a&gt; and Apache. For a while now I&apos;ve been meaning to write about the process of doing a complete manual creation of a JRun instance and deploying Adobe ColdFusion Server on that instance.

Why?  Well. Its something I do all the time and its actually really easy.
But why?  Well I broke my JRun admin instance about 18 months ago. I couldn&apos;t fix it and no one seemed to be able to help me, so I resorted to manually creating and deploying ColdFusion instances on JRun.

Before Christmas, one of my colleagues had the exact same problem I has with JRun admin as I had.  She asked me if I knew how to fix it. Having spent time on it and abandoned it I told her to manually create her instances.  Inevitably she asked me if I&apos;d written it down anywhere. Of course, I haven&apos;t, so now I&apos;m going to.I am going to take for granted that you have already done a Multiserver install of ColdFusion, so that you have a JRun folder somewhere on your computer.

Something that I do for myself and for my colleagues is maintain a number of cfusion EAR folders for various versions of Adobe ColdFusion Server. I keep these EARs up to date with the latest updates, hotfixes and security patches. To create these folders you&apos;ll need to follow my instructions on my &lt;a href=&quot;http://nil.checksite.co.uk/index.cfm/2006/5/3/cfmx-multiserver-set-up&quot; title=&quot;CFMX MultiServer Set Up&quot;&gt;MultiServer Set Up&lt;/a&gt;. Specifically, you need to do steps 3 through 7 and step 16 to create a cfusion-ear folder that you can quickly drop into a new JRun instance. Make sure you hang on to the EAR.  When there is a updater available from Adobe you can point the updater at the EAR and it will update it for you.

To manually create a new instance under JRun you need an empty folder somewhere, anywhere, but jrun4/servers/ is the usual location. Create a folder named appropriately for your server instance. For this blog post I&apos;m going to use &quot;myinstance&quot; as the server name, so I would create a folder called &quot;myinstance&quot; under jrun4/servers.

Next you need to add some server information for JRun. This comes in the form of a &quot;SERVER-INF&quot; folder that needs to live in your new server folder. If you take a look in the jrun/servers folder you should see a &quot;template.zip&quot; file. Open this up. In there you&apos;ll find a &quot;SERVER-INF&quot; folder and a &quot;default-ear&quot; folder.  You&apos;re going to need to discard the default-ear folder, so don&apos;t bother extracting this folder. Drop the &quot;SERVER-INF&quot; folder into your &quot;myinstance&quot; folder.  In &quot;SERVER-INF&quot; there are two files that we&apos;ll edit shortly; jrun.xml and jndi.properties.  Open them up in your text editor of choice. For me its Notepad++ on windows or GEdit on Ubuntu (not that I&apos;m basking in the glory of my newly installed Ubuntu laptop).

In both of these files you need to set port numbers.
To start with head into the jndi.properties file. Near the top of the file you will see :

java.naming.provider.url=localhost:2908

This is the port number that JRun uses to identify individual instances.  If you get two JRun instances that try to start with the same provider port number, then the second instance will not start.  What I&apos;ve taken to doing to avoid hitting any port numbers already in use by JRun or the default ColdFusion install is to jump my port numbers up to xx20 to start with and then move up from there.  To start with lets set the java.naming.provider.url to be 2920.

Next open up the jrun.xml file. In here you&apos;ll need to set two port numbers.  The first is the one the webserver port number. Search for &quot;jrun.servlet.http.WebService&quot; and then scroll down to the port attribute. You should see:

&lt;code&gt;
    &lt;attribute name=&quot;port&quot;&gt;8300&lt;/attribute&gt;
&lt;/code&gt;

In line with my policy of bumping up the port numbers up to xx20, set this port number to 8320.  This is the number that you can access the JRun instance from in a browser. When your ColdFusion application is set up you will be able access the ColdFusion administrator. Given a port number of 8320, the cfadmin will be http://localhost:8320/CFIDE/administrator/index.cfm

Scrolling down a little you&apos;ll find class=&quot;jrun.servlet.jrpp.JRunProxyService&quot;. The proxy service is the section that allows you to connect a webserver to the JRun instance. There are two settings you need to change here. The first you will come to is the double negative of deactivated - true. You will need to set this to deactivated - false, so that the proxy port is active. Next set the port number that is a little futher down. The default is 51000; for my example set the proxy port number to 51020.

So now you should have:
&lt;ol&gt;
    &lt;li&gt;JNDI Port 2920&lt;/li&gt;
    &lt;li&gt;WebServer port 8320&lt;/li&gt;
    &lt;li&gt;Proxy Server Port 51020&lt;/li&gt;
    &lt;li&gt;Proxy Server deactivated set to False&lt;/li&gt;
&lt;/ol&gt;

That is the settings for your JRun instance set up so now you need to add the ColdFusion Server application to your instance. Its as simple as this: take a copy of the EAR folder you created earlier and drop it into the &quot;myinstance&quot; folder at the same level as SERVER-INF.

That really is it!  

Given that we&apos;ve done everything else manually here&apos;s how you start a ColdFusion instance manually from the command line.

Depending on your operating system.

/opt/jrun4/bin/jrun -start myinstance

or

c:\jrun4\bin\jrun -start myinstance

I hope this helps someone out.
				</description>
				
				<category>Web Development</category>
				
				<category>JRun</category>
				
				<category>Adobe</category>
				
				<category>CFML</category>
				
				<pubDate>Wed, 12 Jan 2011 21:46:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/1/12/Manually-creating-MultiServer-instances-of-Adobe-ColdFusion-Server</guid>
				
				
			</item>
			
			<item>
				<title>ColdFusion Blog Roundup - 7th December 2010</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/12/7/ColdFusion-Blog-Roundup--7th-December-2010</link>
				<description>
				
				I&apos;m not entirely sure why, but I&apos;ve had a sudden urge to write a blog round up! So here we go :I&apos;d be very surprised if you haven&apos;t heard of Matt Gifford&apos;s &lt;a href=&quot;https://www.packtpub.com/object-oriented-programming-in-coldfusion/book&quot;&gt;OO Programming in ColdFusion book&lt;/a&gt;  Having written the book Matt is now looking at a User Group tour or workshop tour as well. In order to better understand everyone&apos;s requirements he&apos;s asking if people interesting in attending a session could &lt;a href=&quot;http://www.mattgifford.co.uk/coldfusion-oop-workshop-survey/&quot; title=&quot;ColdFusion OOP Workshop Survey&quot; target=&quot;_blank&quot;&gt;complete a very brief survey&lt;/a&gt;.  If you&apos;d like to know a little more about the book take a look &lt;a href=&quot;http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/288&quot; title=&quot;Object-Orientated Programming in ColdFusion Book Review&quot; target=&quot;_blank&quot;&gt;John Whish&apos;s review&lt;/a&gt;

Another conference to add to your calendar for 2011, other than wonderful, the glorious, the magnificent &lt;a href=&quot;http://www.scotch-on-the-rocks.co.uk&quot; title=&quot;Scotch on the Rocks 2011&quot;&gt;Scotch on the Rocks 2011&lt;/a&gt;, is the &lt;a href=&quot;http://www.opencfsummit.org/&quot; title=&quot;OpenCF Summit&quot; target=&quot;_blank&quot;&gt;Open CF Summit&lt;/a&gt; in Feburary held in Texas. Speaker already confirmed are &lt;a href=&quot;http://corfield.org/blog/post.cfm/opencf-summit-speakers-partners&quot; title=&quot;OpenCF Summit Speaker Partners&quot; target=&quot;_blank&quot;&gt;Sean Corfield&lt;/a&gt;,  Chris Chalk from Google, Kurt Wiersma, &lt;a href=&quot;http://alan.blog-city.com/&quot; title=&quot;Alan Williamson&quot; target=&quot;_blank&quot;&gt;Alan Williamson&lt;/a&gt; and Matt Woodward.  

Currently not attending, but would like to attend is the lead developer of CFEclipse. Unfortunately, its not in his or his employer&apos;s budget, so the CFEclipse team have started &lt;a href=&quot;http://www.markdrew.co.uk/blog/post.cfm/get-the-lead-dev-of-cfeclipse-to-cfopensummit&quot; title=&quot;Get the lead developer of cfeclipse to cfopensummit&quot; target=&quot;_blank&quot;&gt;a whip round&lt;/a&gt; to see if they can get Denny to the conference.  If you&apos;re a user and abuse of CFEclipse, why not help Denny out.

Ray Camden always has some interesting little gotcha&apos;s on his blog and this &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/12/2/Quick-Test--Script-Based-UDFs&quot; title=&quot;Quick Test - CFScript UDF&quot; target=&quot;_blank&quot;&gt;Quick Test - CFScript UDF&lt;/a&gt; is no different, pointing out a change in the way arguments in UDFs have changed from CF5-8 to CF9.

Another neat little tidbit is this one from Andy Jarrett, with a little bit of jQuery for &lt;a href=&quot;http://www.andyjarrett.co.uk/blog/index.cfm/2010/12/4/finding-all-empty-text-fields-with-jQuery&quot; target=&quot;_blank&quot; title=&quot;finding all empty text fields with jQuery&quot;&gt;finding all the empty form fields&lt;/a&gt;.

Recently the chaps at AW2.0 added a neat feature to Open Bluedragon in the form of &lt;cfscript&gt; that can directly &lt;a href=&quot;http://alan.blog-city.com/cfc_with_java.htm&quot; title=&quot;cfc with java&quot; target=&quot;_blank&quot;&gt;embed a third party language&lt;/a&gt;. At the moment this is currently only in the form of java, but I believe there are plans for other languages, possibly including server-side javascript. Alan Williamson recently put this new feature to good use to &lt;a href=&quot;http://alan.blog-city.com/cfml_mongodb.htm&quot; title=&quot;Integrating MongoDB with CFML:Java on OpenBD&quot; target=&quot;_blank&quot;&gt;create a wrapper for accessing MongoDB&lt;/a&gt;.  A similar project for other versions of CFML Server is Marc Esher&apos;s &lt;a href=&quot;http://cfmongodb.riaforge.org/&quot; title=&quot;CFMongoDB on RIAForge&quot; target=&quot;_blank&quot;&gt;CFMongoDB&lt;/a&gt; on RIAForge.

The ColdFusion Meetup has got another great speaker and topic lined up in the form of &lt;a href=&quot;http://ricardo.parente.us/2010/12/coldfusion-meetup-jvm-configuration-and-cf-with-carl-meyer/&quot; target=&quot;_blank&quot; title=&quot;JVM configuration and CF, with Carl Meyer&quot;&gt;Carl Meyer talking on JVM Configuration and CF&lt;/a&gt;. This is something that I seem to end up tinkering with quite frequently, so its a topic that I am particularly looking forward to.  

John Whish has just posted an article on &lt;a href=&quot;http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/292&quot; title=&quot;Caching views but not layouts in ColdBox&quot; target=&quot;_blank&quot;&gt;caching views but not layouts in ColdBox&lt;/a&gt; and is definitely one I&apos;ve book marked to read later.  

There are a whole host of other posts, but these are the ones that particularly peaked my interest. I hope you find them useful too.
				</description>
				
				<category>Blog Round Up</category>
				
				<category>CFML</category>
				
				<category>Conference</category>
				
				<pubDate>Tue, 07 Dec 2010 16:47:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/12/7/ColdFusion-Blog-Roundup--7th-December-2010</guid>
				
				
			</item>
			
			<item>
				<title>ColdFusion Community Rumbles in the Jungle</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/11/24/ColdFusion-Community-Rumbles-in-the-Jungle</link>
				<description>
				
				You&apos;d have to be entirely shut off from the ColdFusion community to have completely missed that there&apos;s been a bit of an ummm... internal ruckus.  This community discord has been over a whitepaper published by Adobe that Adam Lehman posted on &lt;a href=&quot;http://www.adrocknaphobia.com/post.cfm/coldfusion-builder-and-cfeclipse&quot; target=&quot;_blank&quot; title=&quot;ColdFusion Builder and CFEclipse&quot;&gt;his blog&lt;/a&gt; regarding &quot;differences&quot; between &lt;a href=&quot;http://www.adobe.com/products/coldfusion/cfbuilder/features/&quot; target=&quot;_blank&quot; title=&quot;ColdFusion Builder&quot;&gt;Adobe&apos;s ColdFusion Builder&lt;/a&gt; and the open source ColdFusion IDE, &lt;a href=&quot;http://cfeclipse.org/&quot; target=&quot;_blank&quot; title=&quot;CFEclipse&quot;&gt;CFEclipse&lt;/a&gt;.

I seem to have managed to write a blog posts worth in comments on two of the resulting blog posts, so I decided that perhaps I should post them to my blog and round them off a bit with a few thoughts.The post generated a slew of tweets falling on both sides of the fence as well as on the fence which were followed up by a shortish conversation on the &lt;a href=&quot;http://groups.google.com/group/cfeclipse-users/browse_thread/thread/ce311bebd26dd21e?hl=en&quot; title=&quot;Adobe reviews CFEclipse vs CFBuilder&quot; target=&quot;_blank&quot;&gt;CFEclipse mailing list&lt;/a&gt;. After calming himself, Jim Priest posted a remarkably restrained blog post; &lt;a href=&quot;http://thecrumb.com/2010/11/24/adobe-wants-your-lunch-money-now/&quot; title=&quot;Adobe wants your lunch money now&quot; target=&quot;_blank&quot;&gt;Adobe wants your lunch money now&lt;/a&gt;. 

My response to Jim&apos;s post was &lt;a href=&quot;http://thecrumb.com/2010/11/24/adobe-wants-your-lunch-money-now/#comment-1644&quot; target=&quot;_blank&quot;&gt;my feelings&lt;/a&gt; from Adam&apos;s initial post. 
&lt;blockquote&gt;
I think what I found most galling from the summary more than anything is the insinuation that you aren&apos;t a professional developer unless you do use cfbuilder and that cfbuilder gets professional support and regular updates and cfeclipse doesn&apos;t.

Neither of those are true. I could use notepad and be a professional developer. The support and development for cfeclipse may not be wage supported, but, even as the summary states, cfeclipse has a large community behind it who provide professional support and cfeclipse does have regular stable releases as well as irregular preview and developer releases between those releases.

I couldn&apos;t possible comment on updates that cfbuilder does or does not receive as I haven&apos;t used it since late beta releases because of stability issues. What I do recall is that it does not benefit from the built in eclipse update service.
&lt;/blockquote&gt;

Nic Tunney posted a rebuttal, &lt;a href=&quot;http://blog.nictunney.com/2010/11/adobe-can-have-my-lunch-money.html&quot; title=&quot;Adobe can have my lunch money&quot;&gt;Adobe can have my lunch money&lt;/a&gt;, which has a good discussion of the merits of comparing different CFML editors, ending in a &lt;a href=&quot;http://blog.nictunney.com/2010/11/adobe-can-have-my-lunch-money.html?showComment=1290628184130#c3731746940842096742&quot; target=&quot;_blank&quot;&gt;long and good comment by Peter Boughton&lt;/a&gt; on an approach that Adobe should have taken when they drew up their whitepaper that would have been less likely to be misinterpreted and more useful as a promotional tool than the posted whitepaper ended up being. It is a view that I agree with entirely.

Time passes. ;) And then Charlie Griefer weighs in with his post &lt;a href=&quot;http://charlie.griefer.com/blog/index.cfm/2010/11/25/On-ColdFusion-Builder-vs-CFEclipse-and-the-Sky-Falling&quot; title=&quot;On ColdFusion Builder vs CFEclipse and the Sky Falling&quot; target=&quot;_blank&quot;&gt;On ColdFusion Builder vs CFEclipse and the Sky Falling&lt;/a&gt;. Charlie&apos;s post gives the ColdFusion Community a gentle but pointed slap &quot;Stop the infighting! It&apos;s killing us!&quot; and, again, everything he says is reflects my feelings on the subject. My &lt;a href=&quot;http://charlie.griefer.com/blog/index.cfm/2010/11/25/On-ColdFusion-Builder-vs-CFEclipse-and-the-Sky-Falling#cFEFF777C-E6B5-FF63-A98BCF573F60CB27&quot; target=&quot;_blank&quot;&gt;excessively long comment&lt;/a&gt; on his blog says just that and also makes a bit of a half-arsed suggestion towards working together as a community.

&lt;blockquote&gt;
I&apos;d just like to say &quot;hear! Hear!&quot;

Every single one of us that develops using ColdFusion has had to put up with some jeering, sneering developer or sys admin professing that their &quot;latest greatest&quot;, but inevitably also &quot;outdated&quot; technology, is better suited for the job and &quot;why are you using that ColdFusion rubbish?&quot;.

Kev keeps saying that &quot;its just a marketing tool, it wasn&apos;t and attack&quot; and he&apos;s right, but the wording at the top of Adam&apos;s blog post and in the summary are taunting to say the least. Had the white paper compared more than just cfeclipse and cfbuilder or simply expounded the glory that is the feature set of cfbuilder, then all would have been good. Unfortunately, because of these two areas of the post it feels, whether that was the intention or not, that Adobe, the writer of the whitepaper and Adam are belittling cfeclipse, it&apos;s developers (even if Denny is gracious enough to laugh it off ;)), it&apos;s community and the ColdFusion developer who use it.

Intentional or not, the wording and content could have been better written to help promote the commercial product that is cfbuilder without causing a whole bunch of infighting.

I have no idea why the CFML Steering committee collapsed and I have no interest in finding out, BUT the ColdFusion development community would benefit from a least a modicum of coherence across the 3 most active servers. They are never going to work exactly the same and they never should. They all have their strengths in different areas. However, it would be nice if the core functionality of all the server agreed with one another and that the fixes and extension to those core area are coordinated.

I recently read the Ruby wikipedia entry (after the BarCamp &quot;ColdFusion outdate&quot; blog post) I really liked the fact that Rail is actually used as the bar by which Ruby servers are ratified. jRuby and, the original, Ruby MRI are the only &quot;complete&quot; Ruby servers. Its a shame that we don&apos;t have such a stick by which to measure the ColdFusion server and that each of the ever increasing number CF Frameworks tweak their codebase to make sure that they work on the 3 servers.

Anyway, I&apos;ve written an entire blog post or at least it feels like that. Sorry Charlie.

Basically, as you so eloquently put it Charlie, I agree, the whole community needs to pull together and work together. Intentional or not, we all need to be aware of what we write to avoid causing silly ructions like today&apos;s for no real reason because of a few ill phrased words. 
&lt;/blockquote&gt;

There are a few things that came out of the comments made by everyone and places that the ColdFusion community and organisations can contribute;
&lt;p&gt;
&amp;raquo; Perhaps there should be a full grid comparison of CFML editors.&lt;br/&gt;
As it happens Jim Priest has already &lt;a href=&quot;http://groups.google.com/group/cfeclipse-users/browse_thread/thread/163ffc86e37cd569?hl=en#&quot; title=&quot;CFML Editor Matrix&quot; target=&quot;_blank&quot;&gt;started working on this&lt;/a&gt;, with the intention of posting the grid on the CFEclipse Wiki. If you want to help, join the CFEclipse mailing list and contribute to the thread I just linked to. The CFEclipse Wiki, being part of the Open Source project, can be edited by anyone, so its not like this would be a closed grid only open to CFEclipse developers and supporters.  For obvious reasons, you do need to request a registration to be able to edit the wiki. Damn spammers!
&lt;/p&gt;
&lt;p&gt;
&amp;raquo; Without the presence of a CFML Steering committee is there a common location to discuss core ColdFusion language issues and changes? &lt;br /&gt;
Well actually there is;  Alan Williamson who you all should know as chief architect of BlueDragon started a Google group back in February this year called &lt;a href=&quot;http://groups.google.com/group/cfml-conventional-wisdom&quot; target=&quot;_blank&quot; title=&quot;CFML Conventional Wisdom&quot;&gt;CFML Conventional Wisdom&lt;/a&gt;.  On this list there are key member from each of the ColdFusion Server developers, including Adam Lehman, Mark Drew, Peter Bell and Sean Corfield.
&lt;/p&gt;
&lt;p&gt;
&amp;raquo; Working together as a community&lt;br /&gt;
Coming up on December 8th will be the &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/11/23/Announcing--The-End-of-the-Year-ColdFusion-Panel-of-Uber-Awesomeness&quot; target=&quot;_blank&quot;&gt;End of the Year ColdFusion Panel of Uber Awesomeness&lt;/a&gt;. Adam Lehman will be one of the panelist along with key ColdFusion community members from around the globe. I can only hope that there is at least one Railo and one OpenBlueDragon representative on that Uber Panel. *cough* *hint* *hint* ;)

It should prove to be an very interesting international ColdFusion community event to bring 2010 to a close. Make sure you take part.
&lt;/p&gt;
&lt;p&gt;
&amp;raquo; A stick with which to measure a ColdFusion Server.&lt;br/&gt;
I quite liked the Ruby &lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_%28programming_language%29#Implementations&quot; target=&quot;_blank&quot; title=&quot;Ruby Server Implementations&quot;&gt;measure of it&apos;s servers&lt;/a&gt;. If you can&apos;t run Rails, then you can&apos;t be considered production ready.

This is the only part of my thoughts from today that I have no idea where to go with it or if it is even possible at this point. I welcome any suggestion or thought anyone might have on this.
&lt;/p&gt;

So to try and bring this gargantuan post to an end I&apos;m simply going to quote the last part of Charlie&apos;s excellent post :
&lt;blockquote&gt;
We&apos;re all human and all subject to emotional responses. I&apos;m asking that before we go public with those responses, we take a moment to compose ourselves and consider the response as objectively as we can. I mean all of us. Adobe people. Railo people. OpenBD people. Developers. You. Me.

As a community, we&apos;re either going to stand together or die alone.
&lt;/blockquote&gt;
				</description>
				
				<category>CFML</category>
				
				<pubDate>Wed, 24 Nov 2010 22:35:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/11/24/ColdFusion-Community-Rumbles-in-the-Jungle</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/fighting-robots.jpg" length="18811" type="image/jpeg"/>
				
			</item>
			
			<item>
				<title>Moving MangoBlog Database entries to BlogCFC</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/10/20/Moving-MangoBlog-Database-entries-to-BlogCFC</link>
				<description>
				
				Ray Camden got asked recently if it is &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/10/8/BlogCFC-597-Released#cCFD0F743-D923-719E-2FCECCCB45D8A01D&quot; target=&quot;_blank&quot; title=&quot;BlogCFC migration comment&quot;&gt;possible to migrate database entries from MangoBlog to BlogCFC&lt;/a&gt;.

Ray kindly pointed them to my &quot;Return to BlogCFC&quot; post where I talked about my trials and tribulations of moving from MangoBlog back to BlogCFC.What I didn&apos;t do in that blog post is provide the code that enabled me to actually do the move. Since I was asked for &lt;a href=&quot;http://nil.checksite.co.uk/index.cfm/2010/1/27/A-Return-to-BlogCFC#cAD9F6778-988D-8DD0-262B7DDE5FBA3C2F&quot;&gt;step by step instructions&lt;/a&gt; I thought I would post the code I used with a few notes.

So here are the notes : 
&lt;ul&gt;
&lt;li&gt;Its CF9 only, as I&apos;ve used CF ORM functionality to hook into the MangoBlog database, rather than make calls through the MB API.&lt;/li&gt;
&lt;li&gt;MangoBlog doesn&apos;t do enclosures by default, so if anyone has gone from BlogCFC to MB and back again they will lose all their enclosures.&lt;/li&gt;
&lt;li&gt;If you&apos;ve got excerpts in MB, then they will be dropped, as I couldn&apos;t come up with a good way of making sure that the excerpt wasn&apos;t also the first section of the content and insert a [more] tag appropriately.&lt;/li&gt;
&lt;li&gt;Pages that are disabled on MB will still be copied across to BlogCFC and be displayed as there&apos;s no show/hide functionality on BlogCFC pages.&lt;/li&gt;
&lt;li&gt;It does differentiate between posts and pages and inserts them into blogcfc appropriately&lt;/li&gt;
&lt;li&gt;This code does take into account the revisions database table and uses the latest revision data to add to blogcfc.&lt;/li&gt;
&lt;/ul&gt;

The attached code doesn&apos;t move subscribers across, but it wouldn&apos;t be difficult to add.

The final output is the number of blog entries posted across into BlogCFC along with dumps of any comments and their posts where comment spam was found.

You need to have a datasource set up for your MangoBlog alongside a working copy of your new BlogCFC blog. You&apos;ll need to point the ORM part of the code at your MangoBlog DSN in the Application.cfc and configure the BlogCFC login and page cfc  initialisation in the index.cfm. 

The only other thing that you will need to do is change the addComment() function in blogcfc.cfc.  It needs an argument called &quot;posted&quot;.  You should default posted to blogNow().  The &amp;lt;cfqueryparam value=&quot;#blogNow()#&quot; cfsqltype=&quot;CF_SQL_TIMESTAMP&quot;&amp;gt; should be changed to use arguments.posted instead of blogNow().  This change allows you to add comments in with a specific date and time rather than &quot;now&quot;, so that the date and time that the comment was originally posted can be maintained.

And that&apos;s it really. 

The code isn&apos;t pretty, because I only wrote it for my own personal use, but it should be easy enough to see what is going on. Also, I haven&apos;t tested this code since blogcfc 5.9.5.004, so it might not work first time.  Please do send me any tweaks you have to make to get it working with the latest version of BlogCFC and I&apos;ll make sure that the enclosure on this post stays up to date.
				</description>
				
				<category>BlogCFC</category>
				
				<category>Mango Blog</category>
				
				<pubDate>Wed, 20 Oct 2010 12:26:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/10/20/Moving-MangoBlog-Database-entries-to-BlogCFC</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/blogMove.rar" length="3211" type="text/plain"/>
				
			</item>
			
			<item>
				<title>ColdFusion 9 ORM : newbie error - component not found</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/9/21/ColdFusion-9-ORM--newbie-error--component-not-found</link>
				<description>
				
				I&apos;m tinkering with a little project and having moved my blog to HostmediaUK I&apos;ve decided to have more of a play with ColdFusion 9 features.

I&apos;ve looked at ColdFusion 9&apos;s ORM stuff a couple of times, but I&apos;ve never actually used it properly, so I thought I&apos;d write the database access functionality using ORM.&lt;ol&gt;
&lt;li&gt;Create a couple of CFCs for my datatypes. &lt;/li&gt;
&lt;li&gt;Tell the Application CFC that the application is ORMEnabled.&lt;/li&gt;
&lt;li&gt;Tell ColdFusion to generate my database tables&lt;/li&gt;
&lt;li&gt;Add some data&lt;/li&gt;
&lt;li&gt;Save my object&lt;/li&gt;
&lt;/ol&gt;

Job done... ummm no.

&lt;blockquote&gt;
&quot;Error Occurred While Processing Request
Could not find the ColdFusion component or interface user&quot;
&lt;/blockquote&gt;

In Application.cfc I have :
&lt;code&gt;
		this.ormsettings.cfclocation = &quot;/com/nil/orm&quot;;
		this.ormsettings.dialect = &quot;MySQLwithMyISAM&quot;;
		this.ormsettings.logSQL = true;
		this.ormsettings.dbcreate =&quot;dropcreate&quot;;
&lt;/code&gt;

In my application page I have :
&lt;code&gt;
&lt;cfscript&gt;
	user = new user();
	user.setUser_ID(session.user_id);
	user.setName(session.name);
	EntitySave(user);
&lt;/cfscript&gt;
&lt;/code&gt;

Why can&apos;t I find my &quot;user&quot; component?  
I changed my code to user = EntityLoad(&quot;user&quot;).  Now I&apos;m getting method not found. 

I go through a bunch of iterations based around this and even get a &quot;Mapping for component user not found&quot; error before I start to talk through my rubbish code with &lt;a href=&quot;http://www.aliaspooryorik.com/blog&quot; title=&quot;Aliaspooryorik Musings&quot; target=&quot;_blank&quot;&gt;John Whish&lt;/a&gt;.

There were two things I was doing wrong.

The first thing is that I should be using EntityNew() not EntityLoad().  I&apos;ve got so used to Transfer-ORM and just getting a data object ie. Loading it whether I want a new or an existing data record.

Secondly, the reason why user = new user(); doesn&apos;t work is because its looking for my component in the root path.  My user cfc actually lives in /com/nil/orm as I specified in my Application.cfc.

The entity functions such as EntityNew() and EntityLoad() work using simple names because Hibernate basically creates a &quot;bean factory&quot; of the data components.  When I do EntityNew(&quot;user&quot;) it looks in the pot for a component of the same name and uses that. 

If I want to use the &quot;new user()&quot; style of instantiation I have to give the full path to the component. 

&lt;code&gt;
user = new com.nil.orm.user();
&lt;/code&gt;

Its a silly error that I&apos;m entirely embarrassed about making, but its important distinction that might be missed when you first start out playing with ColdFusion&apos;s ORM features.

By the way, the &quot;Mapping for component not found&quot; error was caused by moving the user.cfc to the root of my application and then calling EntityLoad(&quot;user&quot;). Hibernate was looking in my cfc location and couldn&apos;t find the &quot;user&quot; component.
				</description>
				
				<category>ORM</category>
				
				<category>CFML</category>
				
				<pubDate>Tue, 21 Sep 2010 12:41:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/9/21/ColdFusion-9-ORM--newbie-error--component-not-found</guid>
				
				
			</item>
			
			<item>
				<title>I&apos;m speaking at Scotch on the Rocks!</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/9/1/Im-speaking-at-Scotch-on-the-Rocks</link>
				<description>
				
				Today the &lt;a href=&quot;http://www.scotch-on-the-rocks.co.uk/&quot; title=&quot;Scotch on the Rocks 2011&quot; target=&quot;_blank&quot;&gt;Scotch on the Rocks&lt;/a&gt; Speakers list was release by &lt;a href=&quot;http://twitter.com/fymd&quot; title=&quot;Andy Allan : Twitter&quot; target=&quot;_blank&quot;&gt;Andy Allan&lt;/a&gt; and his &lt;a href=&quot;http://twitter.com/coldfumonkeh&quot; title=&quot;Matt Gifford : Twitter&quot; target=&quot;_blank&quot;&gt;motley crew&lt;a/&gt;.You can find the &lt;a href=&quot;http://www.scotch-on-the-rocks.co.uk/blog/index.cfm/2010/9/1/SOTR2011-Speakers-Unleashed&quot; title=&quot;SOTR 2011 Speakers Unleashed&quot;&gt;speaker list&lt;/a&gt; on the &lt;a href=&quot;http://twitter.com/SOTR&quot; target=&quot;_blank&quot; title=&quot;Scotch on the Rocks : Twitter&quot;&gt;SOTR&lt;/a&gt; blog. 

There is a superb mix of new, old, local and international speakers. On the international front, Ben Nadel and Ray Camden will be back again in 2011 along with the likes of Steven Erat and Rob Brooks-Bilson.

For returning local talent there&apos;s Mark Drew and John Whish; Mark being an old hand at this presentation lark, John presenting at SOTR for the first time this year.

Bruce Lawson and Chris Mills from Opera will be presenting, Chris returning for a second year. 

Adobe will be there in force with Adam Lehman, Terry Ryan, Claude Englebert and engineers, Sagar H Ganatra and Vinu Kumar. Gert Franz will be making his presence felt from the Railo camp with Peter Bell and Sean Corfield. 

Of the new talent to be speaking this year we have Robert Rawlins,  Faisal Abid and a couple of other names I haven&apos;t seen at SOTR before.

Lastly I suppose I should mention that I&apos;ll be talking this year...  I&apos;ve been putting it off and putting it off for years now and I finally decided to drop in a couple of topics, one of which got selected! I&apos;m now going to spend the next 7 months reading up and preparing myself for my first structured public presentation for a long long time, so I don&apos;t make a fool of myself in such esteemed company!  

If you haven&apos;t already, take a look at the speaker list and get your tickets purchased before its too late!!  2011 is warming up to be an excellent year for ColdFusion in the UK and the Scotch on the Rocks Conference.
				</description>
				
				<category>Web Development</category>
				
				<category>Scotch on the Rocks</category>
				
				<category>CFML</category>
				
				<category>Conference</category>
				
				<pubDate>Wed, 01 Sep 2010 13:03:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/9/1/Im-speaking-at-Scotch-on-the-Rocks</guid>
				
				
			</item>
			
			<item>
				<title>Truly mixing your components</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/8/27/Truly-mixing-your-components</link>
				<description>
				
				I&apos;ve recently been looking at different ways to extend and reuse code within various frameworks with a couple of the guys at work. We looked a all aspects of the systems that go to make up a web application and the content management that is involved.

One of the area&apos;s we looked at was data definition, how it could be made more intuitive, more convention based, more extensible and more reusable.  We talked around a lot of concepts. One of those concepts was something called data streams from the &lt;a href=&quot;http://www.fedora-commons.org/documentation/3.0b1/userdocs/digitalobjects/objectModel.html&quot; title=&quot;Fedora Content Model&quot;&gt;Fedora Content Model&lt;/a&gt;.I can&apos;t pretend that I actually understand what the Fedora model is doing, but what I took away from it is that it would be neat if we could have content objects eg. &quot;Product&quot; or &quot;News&quot; that could be built using pre-built &quot;data streams&quot;.  The data streams would provide properties and functionality that the content object would inherit and be able to use. A content object would have one or more datastreams and more could be added at a later date to extend the content object further without having to write any additional functionality.

Let me give you a quick example : 
News - has a title, some body content and a publish date. At some point down the line the client decides that they need to have historical versions of the news. Previously we built a data stream for products that allows us to manage version data for products.  Regardless of the fact that products have completely different data properties the functionality for version control is basically the same.  The functions relating to version control would mostly be identical. I should be able to take the version control data stream from products, apply it to the news content object and immediately be able to have version control in the news object.

Now you may be thinking inherit/extend, but that really only works for one object in one direction. It should be possible to use more than one data stream in a content object.  You might also be thinking &quot;Dependency Injection&quot;, but that doesn&apos;t really work in this instance either.  You have to know that you are injecting a bean/service/helper into your component. You have to &quot;get&quot; the injected component and write functions inside your parent component that map to the injected functions, so that they become available outside of your parent component.

So how the hell can you simply &quot;inherit&quot; the complete contents of another CFC into a parent CFC?  I decided to make a prototype to see if this concept would even be possible in ColdFusion. Turns out it is, using the onMissingMethod functions and the metadata functions.  At this point it is definitely worth reading &lt;a href=&quot;http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/cfproperty-onmissingmethod-and-data-type-validation-140&quot; title=&quot;CFProperty OnMissingMethod and Data Type validation&quot; target=&quot;_blank&quot;&gt;John Whish&apos;s article on onMissingMethod&lt;/a&gt;. Some of the techniques he uses I&apos;ve blatently stolen and extended upon. Under standing those techniques will help with understanding some of the stuff I do that I&apos;m not going to explain. 

The code I&apos;m going to share with you is a prototype, so its really only meant to prove the point that it is possible.  Its probably not very practical and probably not very efficient, but it is pretty cool.

So, the goal I want to achieve;  a cfc with a bunch of cfproperties, some of which are just data and some of which that are streams, and some functions.  The functions in the streams should function exactly the same way as functions in the cfc itself.

The first thing I did quite unconciously is decide that I would have a naming convention for the properties, so that it was easy to tell the difference between a property and stream. Stream property names end in the word &quot;Stream&quot; - inventive!! Here&apos;s a simple News content object :

&lt;code&gt;
&lt;cfcomponent displayname=&quot;newsArticle&quot; output=&quot;false&quot; extends=&quot;ContentObject&quot;&gt;
	&lt;cfproperty name=&quot;articleStream&quot; type=&quot;CO.streams.ArticleStream&quot; &gt;

	&lt;cffunction name=&quot;dumpThis&quot;&gt;
		&lt;Cfdump var=&quot;#this#&quot;&gt;
	&lt;/cffunction&gt;
&lt;/cfcomponent&gt;
&lt;/code&gt;

Couple of things to notice : 
 extends=&quot;ContentObject&quot; - we&apos;re telling this component that it a &quot;ContentObject&quot;
 type=&quot;CO.stream.ArticleStream&quot; - there are no properties in this component to do with data there is only an &quot;article&quot; data stream in the component &quot;CO.streams.ArticleStream&quot;
 
ArticleStream looks like this : 
&lt;code&gt;
&lt;cfcomponent output=&quot;false&quot; displayname=&quot;Article Data Stream&quot; extends=&quot;CO.base&quot;&gt;
	&lt;cfproperty name=&quot;Title&quot; type=&quot;string&quot;&gt;
	&lt;cfproperty name=&quot;description&quot; type=&quot;string&quot;&gt;
	&lt;cfproperty name=&quot;ImageName&quot; type=&quot;string&quot;&gt;

	&lt;cffunction name=&quot;uploadImage&quot; access=&quot;public&quot;&gt;
		&lt;cfreturn true&gt;
	&lt;/cffunction&gt;

&lt;/cfcomponent&gt;
&lt;/code&gt;

The ContentObject and ArticleStream CFCs both extend off of a base CFC.  There&apos;s a bunch of functionality in there that both streams and content objects will need.  At this time in this prototype I don&apos;t have any additional functionality in streams that would require an intermediate &quot;StreamObject&quot; CFC, so I&apos;m just heading straight to the &quot;base&quot; CFC.

In the Article Stream you will see I have a bunch of simple properties and a stub function called &quot;uploadImage&quot; - make believe that this function actually handles all the upload etc relating to the ImageName property. [Normally stuff like file uploads would be handled in a service not a business object. I just came up with a random function name when I was &lt;i&gt;prototyping&lt;/i&gt; this. Now shush Mr Whish &amp; let me get on with this. ;)]

In my index.cfm file I have a bit of code that looks like this : 
&lt;code&gt;
&lt;cfscript&gt;
oNews = new news();

news.setTitle(&apos;Ben Nadel and Ray Camden caught in comprising photograph&apos;);
news.setDescription(&quot;Today allegation were made that Ben Nadel has been using a fake arm to secretly pinch the behinds of people he is photographed with. In this photograph of Ben and Ray, you can clearly see the poor stitch work in the shoulder of the fake arm and Ben&apos;s real hand reaching to grasp Ray&apos;s left buttock&quot;);
uploadResult = news.uploadImage(&apos;benandray.jpg&apos;);

writeOutput(&apos;Image upload complete : &apos;&amp;YesNoFormat(uploadResult));

writeDump(news.getMemento());
&lt;/cfscript&gt;
&lt;/code&gt;

So I create a new News object, I add a title and an inflamtory and entirely untrue news description, I &quot;upload&quot; an image and get a result which I output.  I&apos;m also outputting a memento using writedump().  The memento idea I stole from Mark Mandel&apos;s Transfer ORM. Its a nice way to easily dump the data stored in an object and helped me with debugging the prototype, so I left it in there. 
Something to note here: I&apos;m using CF9 notation, but equally you could call oNews = createObject(&apos;component&apos;,&apos;news&apos;).init() and the outcome would be the same.

How the hell did that all work then with just a cfproperty in my news ContentObject?  Well hopefully the init() on the createObject will have given a hint.

The ContentObject CFC has 3 functions, initMetaProperties, initStreamProperties and initStreamFunctions. InitMetaProperties is called when the content object is initialised. It pulls the properties out of the content object and then either save those property attributes and sets the default values or runs the initStream methods.

The initStreamProperties method perform the same process of saving the properties as happens for the content object, but rather than saving the properties into the variables scope of the stream CFC it pulls them forward into the content object variable scope. The initStreamFunctions does the same thing, for the functions that are in the stream cfc.  

Now that I have the properties and functions pulled into a nice struct in my content object I need to be able to call them.  The properties and functions in the content object itself are fine, we can call them as we would normally.  The properties and functions from the stream still don&apos;t exist in the component in the normal way, nor can we call functions that are assigned to variables in the normal way.  This is where the onMissingMethod function in the base cfc comes into its own. 

The onMissingMethod has 3 &quot;modes&quot;; get and set, both of which you will have seen in John&apos;s onMissingMethod blog post, and thirdly there is a callMethod() mode.  This last mode will pass the name of a &quot;missing&quot; function and its arguments to a callMethod().  callMethod pulls the function out of the variable scope and executes the function by passing in an arguments collection.  NOTE : this is a prototype; the code doesn&apos;t handle a truely missing function, but it wouldn&apos;t be hard to add it in.

So why is this pretty cool?  Take a look at the Property.cfc :
&lt;code&gt;
&lt;cfcomponent output=&quot;false&quot; extends=&quot;ContentObject&quot;&gt;
	&lt;cfproperty name=&quot;ProductName&quot; type=&quot;string&quot; default=&quot;Product with no name&quot;&gt;
	&lt;cfproperty name=&quot;articleStream&quot; type=&quot;CO.streams.ArticleStream&quot; &gt;
	&lt;cfproperty name=&quot;versionStream&quot; type=&quot;CO.streams.VersioningStream&quot; &gt;

	&lt;cffunction name=&quot;dumpVariables&quot;&gt;
		&lt;Cfdump var=&quot;#variables#&quot;&gt;
	&lt;/cffunction&gt;

&lt;/cfcomponent&gt;
&lt;/code&gt;

I&apos;ve now got two streams in the component; I&apos;m reusing the articleStream and adding in a versioning stream. If my application were capable of &quot;reading&quot; the component my Product content object can go from being a product with article stream properties injected to a product with a version number, change date and author in one cfproperty. 

Obviously you need a system that is capable of managing changes to objects like this, as well able to understand and use specific streams, such as the concept of the version stream, but it was certainly fun to build this prototype and to actually truly mix components into one amorphous blob.

&lt;strong&gt;NOTE :&lt;/strong&gt; Just in case you hadn&apos;t noticed, you can download the code for this prototype using the download button below.
				</description>
				
				<category>CFML</category>
				
				<pubDate>Fri, 27 Aug 2010 00:45:00 -0700</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/8/27/Truly-mixing-your-components</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/CO.rar" length="3252" type="application/octet-stream"/>
				
			</item>
			</channel></rss>
