<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>Simon Horwith&apos;s Blog - ColdFusion</title>
			<link>http://www.horwith.com/index.cfm</link>
			<description>Editorials, technical papers, and fleeting thoughts from a web development dinosaur turned IT Executive.</description>
			<language>en-us</language>
			<pubDate>Mon, 06 Sep 2010 07:48:26 -0400</pubDate>
			<lastBuildDate>Mon, 21 Jun 2010 15:38:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>simon@horwith.com</managingEditor>
			<webMaster>simon@horwith.com</webMaster>
			
			
			
			
			
			<item>
				<title>php.org is written in ColdFusion</title>
				<link>http://www.horwith.com/index.cfm/2010/6/21/php-dot-org-is-written-in-ColdFusion</link>
				<description>
				
				I just thought it was too surprising and funny not to post - &lt;a href=&quot;http://php.org/&quot;&gt;http://php.org/&lt;/a&gt; appears to be written completely in ColdFusion.&lt;br /&gt;&lt;br /&gt;
Doh!
				
				</description>
				
				<category>ColdFusion</category>
				
				<category>PHP</category>
				
				<pubDate>Mon, 21 Jun 2010 15:38:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2010/6/21/php-dot-org-is-written-in-ColdFusion</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>A Few Thoughts About Various Programming Languages</title>
				<link>http://www.horwith.com/index.cfm/2010/5/11/a-few-thoughts-about-various-programming-languages</link>
				<description>
				
				In my role leading development shops, I am constantly having to learn and evaluate new programming languages and tools in order to keep us current as well as in order to discover better ways to accomplish goals. As a developer, I am also constantly learning simply because I want to get better at what I do, I love what I do, and learning new languages is a fun and rewarding undertaking. From time to time, someone writes a blog entry or gives a conference presentation about the importance of knowing more than one language... of not being a &apos;one trick pony&apos;. I was reading Sean Corfield&apos;s recent blog post about Clojure and realized that I&apos;ve never written about my recommendations or opinions of various languages that I&apos;ve used or evaluated... until now. In no particular order, here are several of the technologies that I know and my thoughts about them:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Python
&lt;ul&gt;&lt;li&gt;I&apos;ve recently been spending a decent amount of time learning and using Python - it&apos;s very fast and powerful, and is syntactically one of the most concise and elegant languages I&apos;ve ever seen... it&apos;s VERY readable and the more I use it, the more I like it. Python is definitely one of my favorite languages.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Java
&lt;ul&gt;&lt;li&gt;I&apos;ve used Java off and on since 1995, and somehow keep ending-up having to use it on projects from time to time. The language has gotten larger, faster, and for the most part, better over the past decade and a half - I found the language improvements in Java 5 particularly useful in that they clearly tried to make it easier to do what you want in your code. That said, I don&apos;t find Java programming particularly clever or challenging and on many projects I see, deployment is a terribly painful process. Java applications tend to have ridiculous file/directory structures and I&apos;m not a huge fan of how strict it is. Java is everywhere and does have a huge job market, so it&apos;s worth knowing for those reasons... but it would never be my first choice of languages to use based on any merits other than the large talent pool and number of open source projects.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;PowerShell
&lt;ul&gt;&lt;li&gt;Powershell is probably the coolest new thing I&apos;ve seen in a long time. For those of you unfamiliar with it - it&apos;s a fully OO scripting environment for Windows (runs on .NET) and is free from Microsoft. The syntax is slick and simple, and the power you can pack into a single line of code makes it a no-brainer for anyone who needs or wants to administer a Windows network or machine. With powershell, windows finally has a shell that&apos;s better and more powerful than those available on nix systems. Bottom line: if you use Windows you REALLY should learn Powershell.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;PHP
&lt;ul&gt;&lt;li&gt;PHP is yet another free technology - we use PHP and CF for most of our projects, and I like PHP a lot. A long time ago, some people called PHP &quot;poor man&apos;s ColdFusion&quot;... well, I think it&apos;s more true today than it was back then. It&apos;s simple, lightweight, and fast... and development times really aren&apos;t much longer than with CFML provided you&apos;re not trying to do something that CF does out of the box that there&apos;s no PHP module to do. I don&apos;t see it having many advantages over CF aside from price, the huge talent pool, and the number of open source projects. There&apos;s a good job market for PHP but those jobs don&apos;t typically pay as well, so I&apos;d learn it because of it&apos;s popularity but I wouldn&apos;t choose a career focused exclusively on it. 
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Flex/ActionScript
&lt;ul&gt;&lt;li&gt;I&apos;ve used Flex since beta 1, and I enjoy seeing how it evolves with each new release. I don&apos;t particularly like programming with ActionScript for the same reasons I don&apos;t like Java - but unlike Java, I do love the end result you get with Flex... enough to want to do it. No technology to date that&apos;s tried to compete with Flash has been compelling enough to use in lieu. There&apos;s also a great job market for Flex - especially here in New York City, and it&apos;s one of the top 3 or 4 technologies I&apos;d recommend learning to anyone who wants a successful web development career right now.  
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;ColdFusion
&lt;ul&gt;&lt;li&gt;I&apos;ve used CF since the beginning and continue to use it heavily. It&apos;s not the best performing technology available but it performs well enough for most needs. No, it&apos;s not free, but development/debugging time is rapid enough to easily justify the cost. These days, CF&apos;s closed architecture and code base is a real turn-off for me personally, but it&apos;s the lack of talent (and the poor quality of most &quot;talent&quot;) that is it&apos;s only solid turn-off from a business perspective. The native support for Flex is probably its most compelling unique feature... that, and it&apos;s rapid development nature. It&apos;s a good choice when you want a very robust user-friendly platform in a turn-key solution. 
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;LISP
&lt;ul&gt;&lt;li&gt;LISP is, hands down, personally my favorite language. Five or six years ago I set-out to spend 6 months of my free time teaching myself LISP, and I enjoyed it so much that I just never stopped. The syntax took a little getting used to, and emacs takes even longer to get used to - which is probably the most annoying part of learning LISP (I haven&apos;t found a better free IDE for LISP yet). LISP is beautiful in the simplicity of its design - most notably in the interchangeable nature of code and data. It is definitely the most expressive and flexible language I&apos;ve used - as well as the most powerful. Be warned; it takes a while to un-train yourself and learn how to really harness the power of LISP (particularly of macros and, if you&apos;re new to it, thinking in functional terms). I also, surprisingly, find the implementation of OOP in LISP (CLOS) much nicer and cleaner than that of any other language. I strongly recommend learning LISP. Not because there&apos;s a huge job market for it (there isn&apos;t) but because it puts other languages into perspective and because it WILL make you a better developer (I&apos;ve learned more from &apos;tinkering&apos; with LISP than any other language). 
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

So, those are the main languages I&apos;ve played with and developed feelings for recently (within the past 2 years). It&apos;s worth noting that there are other languages I left off for brevity. I&apos;ve also been getting back into JavaScript these days - I have a new appreciation for it&apos;s functional nature and closures, and I think JQuery is pretty slick. I&apos;ve taken a pretty good look at Objective C - it&apos;s a decent language but not worth learning unless you want to do a lot of Apple development. I&apos;ve also played around with Clojure - which is essentially a pseudo-LISP implementation for the JVM - I liked it, but prefer to use &apos;pure&apos; LISP... though it&apos;s attractive being able to write LISPy code that I can run on a JVM, since Java is everywhere. There are a few other languages I haven&apos;t had time to take a good enough look at yet but hope to very soon. Specifically, I&apos;m interested in looking at Scala and Caml... and I&apos;ve begun learning some Haskell and hope to dig into that a little deeper.
				
				</description>
				
				<category>Flex</category>
				
				<category>ColdFusion</category>
				
				<category>Java</category>
				
				<category>Misc</category>
				
				<category>PHP</category>
				
				<category>LISP</category>
				
				<pubDate>Tue, 11 May 2010 17:40:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2010/5/11/a-few-thoughts-about-various-programming-languages</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Standardizing ColdFusion</title>
				<link>http://www.horwith.com/index.cfm/2010/2/25/standardizing-coldfusion</link>
				<description>
				
				I recently wrote (&lt;a href=&quot;http://www.horwith.com/index.cfm/2010/1/6/can-coldfusion-handle-enterprise-applications&quot;)&gt;http://www.horwith.com/index.cfm/2010/1/6/can-coldfusion-handle-enterprise-applications&lt;/a&gt; about the lack of predictable behavior in CFML - something that I think is a terrible shame and is personally my biggest complaint about the product. I was a little worried that this sentiment isn&apos;t being expressed too often or with much vocal strength by many other developers, but was happy to read Alan Williamson&apos;s recent post on the topic at &lt;a href=&quot;http://alan.blog-city.com/cfml_conventional_wisdom.htm&quot;&gt;http://alan.blog-city.com/cfml_conventional_wisdom.htm&lt;/a&gt;. Alan went a step further and created a Google Group for the topic as well.&lt;br /&gt;
When defining a language there are two traits to be concerned with: syntax and semantics. I&apos;d like to see an Extended Backus Naur Form (EBNF) definition for the language syntax.  This would give developers a reliable syntax specification for the language, engine implementers a specification to code off of and the ability to claim compatibility with an official language version, and IDE developers an easy industry approved method for syntax recognition. Semantics, i.e. the meaning behind the syntax, is more difficult to define and there are several languages for doing so (all essentially based on mathematical notation and logic).  I don&apos;t know whether we need a formal semantics definition or if a more &apos;plain English&apos; language specification or hyperspec would suffice.  My guess is that a plain English language specification would serve the purpose (similar to the ANSI Specification for Common LISP or SQL).&lt;br /&gt;
The issue in any event, is that Adobe owns the most original and most popular ColdFusion Server on the market, so without their support I have to question the usefulness of any specification - syntactic or semantic. Remember how difficult it was to code cross-browser sites in the 90&apos;s because Microsoft and others refused to strictly enforce support for the official HTML specification? You ended up having to do all sorts of crazy hacks from browser to browser. Well, that&apos;s essentially what&apos;s happening, and will continue to happen, to server side CFML unless all the server vendors agree to support some common language definition.&lt;br /&gt;
It&apos;s time for Adobe to decide whether or not they want ColdFusion to be a platform that rivals the other server-side web technologies not only in capabilities but in popularity, or if they want to continue developing it as a proprietary product with a niche following. They do a fine job innovating the product and integrating it well with Adobe (and other) technologies, but in today&apos;s IT world I don&apos;t think that&apos;s enough. If the community of developers and customers is to significantly grow and thrive, the evolution of the platform must be driven by an open group. This model worked for Java and for PHP... and I believe it is the key to ColdFusion&apos;s ensured success for many years to come. I&apos;m not suggesting Adobe gives the server away, nor that they couldn&apos;t add proprietary extensions in order to give themselves competitive edge (as I&apos;m sure other vendors also would), only that the product should be one of a group of products from various vendors who are all adhering to one specification and who support a unified customer base. I know that, especially for Adobe, it&apos;s just not that easy... but it&apos;s also not impossible. I&apos;d love to see someone from Adobe chime in on this topic.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 25 Feb 2010 11:20:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2010/2/25/standardizing-coldfusion</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>State of CF in India</title>
				<link>http://www.horwith.com/index.cfm/2010/2/14/state-of-cf-in-india</link>
				<description>
				
				A little over a year ago I blogged about the complete unavailability of ColdFusion books in bookstores in India (&lt;a href=&quot;http://www.horwith.com/index.cfm/2009/1/16/namaste-coldfusion&quot;&gt;http://www.horwith.com/index.cfm/2009/1/16/namaste-coldfusion&lt;/a&gt;). I am writing again from my annual pilgrimage to &apos;Mama Hindustan&apos; and thought I&apos;d follow-up and see how the market has changed. I believe that the availablity of books about a particular programming language is a reasonably good reflection of the popularity and job market in a region, though I don&apos;t know of any real data that backs-up that claim.&lt;br /&gt;&lt;br /&gt;
One year later, the number of book stores in Delhi is about the same, but there are a greater number of much larger book stores (similar to Borders and Barnes and Noble in the U.S.) and the size of the &apos;computer&apos; section in these book stores is much larger than last year. A few of them are comparable in size to the computer section in a large bookstore in the U.S. That said, I could not find a single copy of any book about ColdFusion. I found this a little surprising for three reasons:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I&apos;m under the impression that there&apos;s a decent job market for CF developers in India.&lt;/li&gt;
&lt;li&gt;These computer sections didn&apos;t only carry books about very common technologies - I found books about pretty much every language, theory, and computer-related topic I could think of - including very obscure and outdated technologies.&lt;/li&gt;
&lt;li&gt;One large bookstore even had an entire &apos;Adobe&apos; subcategory (made up of 6 large shelves of books) in their computer section&lt;/li&gt;
&lt;/ol&gt;
Whether or not CF has a job market here, it is clearly much less popular than in the other countries I&apos;ve visited. If I had to generalize about what technologies are the most popular (and most available) in book stores, it would be (in order):&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Flash/ActionScript&lt;/li&gt;
&lt;/ol&gt;
I&apos;m sure most people, like myself, don&apos;t find this very surprising. Also worth noting is that the most significant difference between the computer book inventory this year vs. last year - hands-down there is a significant increase in and dominance of PHP books.  One other thing I noticed, which did surprise me a little, was that there are far more Oracle books than SQL Server books on the shelves... I&apos;m not sure why, but I expected the opposite.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 14 Feb 2010 08:33:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2010/2/14/state-of-cf-in-india</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Can ColdFusion Handle Enterprise Applications?</title>
				<link>http://www.horwith.com/index.cfm/2010/1/6/can-coldfusion-handle-enterprise-applications</link>
				<description>
				
				There are a few common reasons given whenever a company says they don&apos;t want to use ColdFusion or a developer says &quot;Oh, ColdFusion isn&apos;t a REAL programming language&quot;. One of these claims is that ColdFusion can&apos;t handle large scale enterprise applications. The majority of ColdFusion developers, especially the fanboys, immediately take offense and dive into a passionate discourse on the merits of ColdFusion, blah, blah, blah. I&apos;ve done my fare share of CF-Evangelism over the years, and I do still believe that the merits of the platform make it a great solution a lot of the time... but I&apos;m much more technology-agnostic these days than I was in my youth, and as I fall in love with other languages because of their merits, I find myself reflecting and sometimes re-evaluating my feelings about ColdFusion. In this entry I&apos;d like to share my thoughts about CF: the good and bad, some advice for developers and companies, and some stories about recent real-world experiences I&apos;ve had.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;The Good&lt;/strong&gt;&lt;br /&gt;
There are some things that make ColdFusion a terrific platform. Deployment is a breeze compared to most other programming languages. CFML is not a perfect language, but it is a simple language that makes most programming tasks easy to tackle. This tends to make rapid development easier to accomplish and lends itself particularly well to iterative, agile development practices and all that comes with it (like refactoring). This, coupled with the server error reporting and a few programming language constructs, also means that debugging ColdFusion applications is relatively painless and quick compared to other languages. Speaking directly to the questions of performance and scalability, it is possible to write applications that perform very well and scale exceptionally well with ColdFusion. For example, we (at &lt;a href=&quot;http://www.nylontechnology.com&quot;&gt;Nylon Technology&lt;/a&gt;) recently successfully developed and deployed a large scale content management system across multiple servers and server instances. This CMS manages gigabytes of content (tens of thousands of pages) and has a lot of remarkable features (workflows, a robust permissions based security API, etc.).&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;The Bad&lt;/strong&gt;&lt;br /&gt;
There are a few negatives about ColdFusion that should not be ignored. ColdFusion and CFML&apos;s ease of use means that you don&apos;t have to be a rocket scientist to use it. As I said, this is a strength, but it is also a weakness. There are far too many poorly developed CF applications &quot;in the wild&quot; and far too many &quot;ColdFusion Developers&quot; aren&apos;t good &quot;Software Developers&quot;. I&apos;m not saying all developers should have a degree in computer science, but more CF Developers should have a better understanding of the ramifications of the code they write, the limitations of the environment they&apos;re writing software in, and how to design (&quot;architect&quot;) and develop applications that are not just modular, but easy to read, maintain, and extend. Sub-par programmers and poorly written applications will give any programming language a bad reputation. Coupled with the relatively small pool of available talent, it&apos;s no wonder some companies want to shy away from ColdFusion, is it?&lt;br /&gt;
So let&apos;s assume that good developers do create a well-written Enterprise ColdFusion application and have tweaked the hardware and JVM so that they know those won&apos;t factor-in as negatives - will it scale and perform well? The three second answer is &quot;maybe... it might and it might not&quot;.&lt;br /&gt;
The Adobe ColdFusion Application Server is a commercial product and, as such, is a &quot;black box&quot;. You write your code and save it somewhere that CF can see, and it &quot;does it&apos;s magic&quot; and spits out the results. If you don&apos;t like the results, you can change your code and try again, but you can&apos;t change what&apos;s inside that black box (i.e. the server internals). The most you can do is optimize the Application Server (CF and J2EE) and runtime (JVM) but not the way the server actually works with your code. This is obviously a problem if it turns out that some built-in ColdFusion function or tag is what&apos;s killing performance.&lt;br /&gt;
Though our client is happy with the CMS I mentioned earlier, along the way we did encounter several (performance related) stumbling blocks that were not the fault of the hardware or software architecture, but ColdFusion itself. One of the things that the CMS does is work with Objects (CFCs) a lot - and constructing/populating thousands of objects comes at a price. The CMS has a caching architecture that in simple terms boils down to storing CFC instances in a structure, using the ID of the content as the key name. We found that as the number of objects in memory grew, performance crept to a complete stand still - the server eventually died, as more and more threads timed out waiting for the threads that were accessing the structure keys to complete their job. Turns out that not caching the instances was the fix - but why? Because of a bug in ColdFusion that as far as I know, was first reported by David Sheldon on his blog at &lt;a href=&quot;http://cfdumped.blogspot.com/2006/09/bad-hash-function-causes-problems-with.html&quot;&gt;http://cfdumped.blogspot.com/2006/09/bad-hash-function-causes-problems-with.html&lt;/a&gt;. Maybe this bug doesn&apos;t affect the majority of applications, but for applications that need to store a large number of values in a complex data type, structures are not an option. One of the few fundamental data types in CF is broken - that&apos;s a big deal. I believe this issue was addressed in a CFMX 8.01 hotfix this year, but I haven&apos;t confirmed... and I personally think it&apos;s unacceptable for that bug to be made public knowledge and not be fixed for 2+ years.&lt;br /&gt;
We recently had another performance related issue with the application. The unique IDs of search results from a SQL statement are stored in a string and that string of IDs persisted and used for pagination. This is necessary because re-running the query isn&apos;t an option and storing the entire recordset would use far too much memory. So, the approach is right... but performance is abysmal (to the point that internal server errors are thrown) when lists get large - sometimes they&apos;re as large as 150,000+ (remember, this is an enterprise application and we need to work with huge volumes of data). The code that kept crashing looked something like this:&lt;br /&gt;
&lt;code&gt;
&lt;cfscript&gt;
for(j = 1;j lte listLen(daList);j++){
     test = listGetAt(daList,j);
}
&lt;/cfscript&gt;
&lt;/code&gt;
OK, so you&apos;re thinking, &quot;Remove the listLen() call from the loop condition&quot; - right? We did, and it got a little better but would still time out sometimes and would be very slow other times.  That code looks like:&lt;br /&gt;
&lt;code&gt;
&lt;cfscript&gt;
tmpVal2 = listLen(daList);
for(j = 1;j lte tmpval2;j++){
     test = listGetAt(daList,j);
}
&lt;/cfscript&gt;
&lt;/code&gt;
Turns out that listGetAt() is just a horribly inefficient beast. Temporarily replacing the list with an array and then accessing indeces in the array worked like a charm and made an exponential difference to performance:&lt;br /&gt;
&lt;code&gt;
&lt;cfscript&gt;
tmpVal3 = listToArray(daList);
tmpVal2 = arrayLen(tmpVal3);
for(j = 1;j lte tmpval2;j++){
     test = tmpVal3[j];
}
&lt;/cfscript&gt;
&lt;/code&gt;
&lt;br /&gt;
The example of listLen() brings up a good question - is there something wrong with that code or is it fair to say that ColdFusion is to blame? Rather than answering directly, I&apos;ll describe how I view the roles and responsibilities of CFML and the (ColdFusion) server, as well as my own complaints/disappointments with each. We&apos;ll start with the language - CFML. The CFML programming language is not the problem - in fact I think it&apos;s a good language (note that by &quot;CFML&quot; I mean &quot;CFML and CFSCRIPT&quot;). When I first heard about the CFML advisory panel, though skeptical, I did think it was a good idea - I still do. However, what I believe we truly need is a real language specification - one that states how the built-in tags and functions are to be implemented. Of course, since Adobe owns the server, though they&apos;ve put together an advisory board, they have not published the language as a public specification. I would be pleasantly surprised if they did. There are several good examples of how a language specification is implemented and of the benefits that come from a public spec. One example is ANSI SQL - if a vendor says they support it, you are assured that your SQL will work. Another good example is ANSI Common LISP - the specification states exactly what (and in many cases how) vendors must implement the language. If you write your applications in Common LISP, you know exactly what to expect from implementation to implementation. Unlike CFML, for which a public specification could easily be made, the ColdFusion Server is a product owned by an entity and it wouldn&apos;t be fair (or make sense) to publish a standard defining how to write the server. Perhaps there is a solution, though. At a high level, the server is responsible for serving two primary functions: it is a compiler and it is a runtime platform. Perhaps it does not make sense to have an open standard that states how the runtime must work internally (beyond a specification for the side effects and behavior of the CFML language constructs), but a specification for how the server works as a compiler, if expressed at the language construct level and as part of a CFML specification, is plausible. For example, in my first list code snippet I pointed out that the listLen() in the for loop condition (for(j = 1;j lte &lt;strong&gt;listLen(daList)&lt;/strong&gt;;j++)) was causing a serious performance problem because it&apos;s evaluating on every pass... but there&apos;s no reason that the server, when compiling that CFML, couldn&apos;t have introspected the contents of the loop and determined that it was safe to compile it as byte code that evaluates a number (instead of the actual expression) on each pass. &quot;Compiler Optimization&quot; is something I&apos;ve learned a lot about in my continuing education and experimentation with LISP - and it&apos;s something that the Adobe Engineering team should be focused on. I&apos;m not saying they aren&apos;t (I really don&apos;t know) - I know they do focus on making the internal server code faster (the actual tags/functions) and the compilation process faster, but I do not know if they look at ways to optimize the actual results of the compilation process (rather than the code those results executes). A language specification that defines the compiler behavior for some, if not all, of the language would be a huge benefit to all.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;The bottom line&lt;/strong&gt; is that in the Enterprise, ColdFusion absolutely can perform and scale very well - but that no matter how great the hardware, how tweaked the VM and servers, and no matter how well written and well architected the code base, a very resource intensive application may perform poorly for no reason other than what can only be nicely described as &quot;quirks in the server&quot;.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 06 Jan 2010 15:04:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2010/1/6/can-coldfusion-handle-enterprise-applications</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Framework F - My New Subway Project</title>
				<link>http://www.horwith.com/index.cfm/2009/12/15/my-new-subway-project-framework-f</link>
				<description>
				
				A while ago I posted several common sorting and searching algorithms implemented in CFML (&lt;a href=&quot;http://www.horwith.com/index.cfm/2009/7/10/coldFusion-searching-and-sorting-algorithms&quot;&gt;http://www.horwith.com/index.cfm/2009/7/10/coldFusion-searching-and-sorting-algorithms&lt;/a&gt;). The code, documentation, blog entry, etc. were all written over the course of a couple of months during my 45 minute commute to and from work on the New York City Subway. As a side note - it&apos;s very interesting some of the conversations people strike-up with you when you write code on the subway. Now that I finished that, you may be wondering what my next &quot;subway project&quot; is? I&apos;m writing a framework.&lt;br /&gt;&lt;br /&gt;
Yes, that&apos;s right - &quot;a framework&quot;. I&apos;m sure people will have a few questions - the framework is still in it&apos;s early stages so I don&apos;t want to say too much. That said, I&apos;ve tried to address some of the questions that people might have about the project and/or its objectives:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Question: Why a framework?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;I hate to call it a framework to be honest - frameworks tend to centralize control of your application whereas what I&apos;m working on simplifies architecture without actually telling you how to glue the pieces of your project together. That said, theoretically this code base could be used as a framework that glues an entire application together, so I decided to use the &quot;f&quot; word.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Question: What are the objectives of this framework?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;There are a few very specific objectives of this framework. The first objective, and reason I wrote it, is to encourage and allow CF developers to take a more functional approach to programming (&apos;functional&apos; in the &apos;functional programming&apos; sense). There are three business needs that this framework addresses - it will have a short and easy learning curve, functionality expressed with it should be easy to test, and functionality built with it should be easy to maintain. In addition, the framework must be lightweight and fast, and it must be non-obtrusive. You must be able to drop this code into any application and use it as much or as little as you want without penalty. A more technical description of the main objective is to simplify the architecture of applications by encouraging use of &apos;pure&apos; (no side-effect) functions and, if desired, an OO aproach based on using objects only to represent the business domain (data). This is realized by centralized function library management and a few encouraged practices (all documented, of course).&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Question: Why functional programming?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;The more I play with functional languages and try to build applications in a functional way, the more I appreciate the benefits attained by doing so. I&apos;ve seen many projects go south and many developers produce poor product simply because the company, tech lead, and/or developer try to do everything according to the notion that Object Oriented Programming is &quot;the best and only way&quot;. Often times they also don&apos;t even fully understand OO, which makes matters worse. Though the framework encourages a functional approach, OOP has some good qualities and I&apos;ve tried to also encourage using those qualities in order to simplify the process of designing and building applications. Before any functional purists speak out, I should state for the record that this framework only attempts to offer some of the benefits of functional programming that have been enjoyed by some developers for 50+ years... ColdFusion is an imperative language, CFML is not equipped to offer true functional features, and I cannot change the way the server works under the hood.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Question: Is there a feature list for the framework?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;There are some specific technical features and tools I have, or am, implementing - this list won&apos;t change (it could grow) but I may not necessarily push it live with everything complete. The feature list, in no particular order, is:
&lt;ul&gt;
&lt;li&gt;Mount function libraries which can then be called as if they were defined locally&lt;/li&gt;
&lt;li&gt;Mount individual functions from libraries&lt;/li&gt;
&lt;li&gt;Dynamically load libraries or functions for use&lt;/li&gt;
&lt;li&gt;Allow global functions to be overridden by more local (session and request level) functions&lt;/li&gt;
&lt;li&gt;Allow functions to be dynamically defined (and loaded for use)&lt;/li&gt;
&lt;li&gt;Ability to chain function calls and to call function chains&lt;/li&gt;
&lt;li&gt;Ability to define failover method for function/chain calls&lt;/li&gt;
&lt;li&gt;Simplified domain object use by using a generic DTO base class&lt;/li&gt;
&lt;li&gt;Simplify library and DTO creation via a lightweight object factory&lt;/li&gt;
&lt;li&gt;Simplify testing with a simple unit testing tool&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Question: What version(s) of ColdFusion will this framework support?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;I&apos;m writing the framework to run on CF 8 and above. There are a few language features in CF 9 that would make a couple things easier for me or faster for you, but the trade off isn&apos;t worth it.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Question: What will the framework be called?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;I don&apos;t know - names aren&apos;t my thing. It&apos;s just some code I&apos;m throwing out there. That said, I have to call it something (internally in the code if nowhere else) so for now it&apos;s &quot;Framework F&quot;. No, not &quot;F&quot; for &quot;functional&quot;... the idea for this framework came to me while I was riding an F Train one morning.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Question: What will the framework cost?&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;As with everything else I code for fun and post on my blog - this code is costs nothing. I don&apos;t know if I&apos;ll release it with any license or put it anywhere special besides a link to it here on my blog. I also don&apos;t know if I&apos;ll maintain it or add to it ever. I&apos;m writing it for my own professional use, so as I need to modify it I will, and if I do something I think others would find useful by all means I&apos;ll post an update. Otherwise, if people use it and like it and someone wants to take &quot;ownership&quot; of it, or simply use and abuse it in whatever way they choose, they&apos;re welcome to. I don&apos;t like the &quot;black box&quot; aspect of frameworks, and I have deliberately gone out of my way to make the code base for this framework as short and simple as possible so that people can reach in and pull out its guts and play.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
I don&apos;t have a date in mind yet as far as when it will be done - I&apos;m working on several side projects for fun, reading several books, and working on &quot;real work&quot; for clients all at once... but I&apos;m trying to squeeze-in time for this project whenever I can. I wrote the core several months ago and then put it down for several months, but I am going to try and get back to finishing it off soon. Sean Corfield has graciously agreed to look at it, do some testing, and provide feedback as soon as I have it ready for him - I asked Sean to do the initial review because he not only has CF Expertise and Framework experience; he also has experience/knowledge of functional programming languages and functional programming as an approach. Anyone interested in gaining early access to the code base before I&apos;m ready to release it to the wild should email me at simon at horwith dot com or shorwith at nylontechnology dot com. As I said above, I&apos;m writing this my my own real world use, and I have no intention of making it publicly available until I&apos;ve used it enough to know that the kinks are worked out, that it&apos;s useful, and that it&apos;s documented well enough.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 15 Dec 2009 11:42:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/12/15/my-new-subway-project-framework-f</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Flex Camp Wall Street in New York Next Week</title>
				<link>http://www.horwith.com/index.cfm/2009/11/13/flex-camp-wall-street-in-new-york-next-week</link>
				<description>
				
				If you&apos;re a Flex developer in New York and don&apos;t know about it yet, there&apos;s a 2 day Flex Conference called &apos;Flex Camp Wall Street&apos; (&lt;a href=&quot;http://flexcampwallstreet.com/&quot;&gt;http://flexcampwallstreet.com/&lt;/a&gt;) on November 16 and 17 that at $49 to attend, looks like a great deal for attendees (what else can you do in New York for less than $50??)&lt;br /&gt;&lt;br /&gt;
I&apos;ll be presenting on ColdFusion/Flex integration at the conference on Monday.
				
				</description>
				
				<category>Flex</category>
				
				<category>ColdFusion</category>
				
				<category>Writing and Presenting</category>
				
				<category>AIR</category>
				
				<pubDate>Fri, 13 Nov 2009 12:34:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/11/13/flex-camp-wall-street-in-new-york-next-week</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Figleaf Takes Adobe Training Online</title>
				<link>http://www.horwith.com/index.cfm/2009/10/23/figleaf-takes-their-adobe-training-online</link>
				<description>
				
				Fig Leaf Software (&lt;a href=&quot;http://www.figleaf.com&quot;&gt;http://www.figleaf.com&lt;/a&gt;, an award winning Adobe Training Partner, is taking their training online - they&apos;re offering free training via the web for several Adobe products. Nice job, guys!&lt;br /&gt;You can register and find out more at: 
&lt;a href=&quot;http://training.figleaf.com/tutorials/&quot;&gt;http://training.figleaf.com/tutorials/&lt;/a&gt;
				
				</description>
				
				<category>Flex</category>
				
				<category>ColdFusion</category>
				
				<category>Misc</category>
				
				<category>AIR</category>
				
				<pubDate>Fri, 23 Oct 2009 10:16:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/10/23/figleaf-takes-their-adobe-training-online</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>CF 8.01 Cumulative Hotfix 3 JVM Compatibility Problem</title>
				<link>http://www.horwith.com/index.cfm/2009/9/2/CF-8-01-Cumulative-Hotfix-3-JVM-compatibility-problem</link>
				<description>
				
				One of our staging environments is running CF 8 multi-server and has instances running CF 8.01 and instances running CF 7 - all running on 32 bit Windows Server 2003. If you look at the system reqs for ColdFusion (&lt;a href=&quot;http://www.adobe.com/products/coldfusion/systemreqs/#coldfusion&quot;&gt;http://www.adobe.com/products/coldfusion/systemreqs/#coldfusion&lt;/a&gt;) on 32 bit windows, JDK 1.4.2_14, 1.5_13, and 1.6_04 are supported.  If you want to run all instances on one JDK, using JDK 1.4.2_14 makes the most sense, as CF 7 does not support JDK 1.5 or 1.6.&lt;br /&gt;&lt;br /&gt;
After applying CF 8.01 Cumulative Hotfix 3 (&lt;a href=&quot;http://kb2.adobe.com/cps/511/cpsid_51180.html&quot;&gt;http://kb2.adobe.com/cps/511/cpsid_51180.html&lt;/a&gt;) to a CF 8.01 server instance, the instance appears to start, but any requests for CF pages that you make result in a 500 error with the following description: &quot;coldfusion.server.ServiceFactory$ServiceNotAvailableException: The Security service is not available.&quot;. Switching to the JVM that installs by default with CF 8 makes the error go away.&lt;br /&gt;&lt;br /&gt;
Unfortunately, the hotfix tech note does not currently mention that it breaks the CF 8 compatibility with JDK 1.4.2_14 and the system reqs doc still states that CF 8 supports this JDK. The CF 8.01 cumulative hotfix 2 did not break this JDK compatibility. My advice to anyone thinking of upgrading to CF 8.01 Cumulative HF 3 is to first confirm that the server instance(s) you plan to update are at least running on JDK 1.5_x or above.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 02 Sep 2009 11:37:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/9/2/CF-8-01-Cumulative-Hotfix-3-JVM-compatibility-problem</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Is Adobe the Next Microsoft?</title>
				<link>http://www.horwith.com/index.cfm/2009/8/6/is-adobe-the-next-microdoft</link>
				<description>
				
				Adobe could be the next Microsoft... and that&apos;s not necessarily a compliment. Today, ZDNet News published an article titled &quot;Is Adobe the next (pre-2002) Microsoft?&quot; in which they compare the rising number of security holes being found and exploited in Adobe Flash Player and Adobe Acrobat Reader with the problem Microsoft had with vulnerabilities being exploited in their products years ago. It was so bad that among many circles, suggesting Microsoft products as a solution to whatever requirements you needed to meet was grounds for public humiliation. Their products were known targets and it was understood by many that using certain MS software was risky. No software is really 100% safe, but Microsoft took it seriously and became very proactive about addressing the (technical and image) issue both internally before software is released and publicly when a vulnerability is found. The article does give Adobe credit for being proactive and doing a reasonable job addressing vulnerabilities when they&apos;re found, but doesn&apos;t hide an opinion that Adobe still has a way to go.&lt;br /&gt;&lt;br /&gt;
The ZDNet article is online at &lt;a href=&quot;http://news.zdnet.com/2100-9595_22-329118.html&quot;&gt;http://news.zdnet.com/2100-9595_22-329118.html&lt;/a&gt;
				
				</description>
				
				<category>Flex</category>
				
				<category>ColdFusion</category>
				
				<category>Misc</category>
				
				<category>AIR</category>
				
				<pubDate>Thu, 06 Aug 2009 12:02:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/8/6/is-adobe-the-next-microdoft</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>A Bit of Advice When Running CF 8 on 64 Bit</title>
				<link>http://www.horwith.com/index.cfm/2009/7/28/a-bit-of-advice-when-running-coldfusion-8-on-64-bit</link>
				<description>
				
				By now everyone has probably heard that the optimal JVM and J2EE Application Server settings in any given environment depends primarily on six factors:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;What OS you&apos;re running on&lt;/li&gt;
&lt;li&gt;What hardware you&apos;re running on&lt;/li&gt;
&lt;li&gt;What application software (CF and J2EE Server) you&apos;re running&lt;/li&gt;
&lt;li&gt;What JDK version you&apos;re running your server instance(s) on&lt;/li&gt;
&lt;li&gt;What the typical traffic for your web application(s) looks like&lt;/li&gt;
&lt;li&gt;What those web application(s) do&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
It&apos;s true - there&apos;s no silver bullet for optimizing a CF/J2EE installation - it is very dependent on all of the variables I listed above, among other factors. That said, I&apos;ve recently optimized and deployed several applications on the 64 bit version of CF 8.0.1 Enterprise running on top of Windows Server 2003 (64 bit, of course) and have come to two useful conclusions that appear (so far) to be consistent and worth keeping in mind if you ever move, or consider moving, to a 64 bit platform with CF:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;If you want to take advantage of what a 64 bit environment can do, have at least two physical CPUs. Though you might think that doubling the CPUs from one to two would cut the average execution time in half, in my experience it generally improves (that is, &quot;decreases&quot;) execution time by 75% just by adding a second CPU to a single CPU machine running a 64 bit OS (cores don&apos;t appear to make anywhere near as much impact - I&apos;m talking physical CPUs here).&lt;/li&gt;
&lt;li&gt;Running several instances with smaller (3 Megs or less) memory stacks tends to perform better than one instance with a big memory heap&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Though my testing results have been consistent, please remember the rule about the six variables that determine an optimal configuration... the bottom line is that there&apos;s never any guarantee about what works best in a specific environment - only what&apos;s proven to work and what&apos;s proven not to work.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 28 Jul 2009 10:42:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/7/28/a-bit-of-advice-when-running-coldfusion-8-on-64-bit</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>If you&apos;re Having Problems with ColdFusion 8.0.1 - Make Sure You Have Cumulative Hotfix 2</title>
				<link>http://www.horwith.com/index.cfm/2009/7/24/make-sure-you-have-cumulative-hotfix-2-when-troubleshooting-coldfusion-801</link>
				<description>
				
				I just wanted to point out that if you&apos;re running CF 8.01 and go to the ColdFusion support page (&lt;a href=&quot;http://www.adobe.com/support/coldfusion/&quot;&gt;http://www.adobe.com/support/coldfusion/&lt;/a&gt;) to get the latest cumulative hotfix, it shows a link to ColdFusion 8.0.1 cumulative hot fix 1 (&lt;a href=&quot;http://www.adobe.com/go/kb403622&quot;&gt;http://www.adobe.com/go/kb403622&lt;/a&gt;) but  it should show a link to the more recent ColdFusion 8.0.1 cumulative hot fix 2 (&lt;a href=&quot;http://kb2.adobe.com/cps/403/kb403781.html&quot;&gt;http://kb2.adobe.com/cps/403/kb403781.html&lt;/a&gt;).  Anyone not aware that hotfix 2 was released could end up installing the older hotfix and go on their merry way, not realizing their server is not actually up to date with the latest patches.&lt;br /&gt;&lt;br /&gt;
I&apos;ve made Adobe aware of this and I&apos;m sure it will be corrected in the immediate future.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 24 Jul 2009 13:31:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/7/24/make-sure-you-have-cumulative-hotfix-2-when-troubleshooting-coldfusion-801</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Advice For Working Around Getting An Error When Creating CF Server Instances on Windows</title>
				<link>http://www.horwith.com/index.cfm/2009/7/21/advice-for-fixing-an-error-creating-cold-fusion-server-instances-on-windows</link>
				<description>
				
				Ever get an error at the bottom of the page when you try to create an instance (ColdFusion Enterprise, Multi-Server or J2EE configuration) on Windows via the CF Admin that looks something like this?&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;There was a problem&lt;br /&gt;
Message: The specified Directory attribute &lt;jruninstallpath&gt;\servers\cfusion\SERVER-INF\temp\cfusion-war-tmp\{some-UUID}\cfusion.ear\cfusion.war\CFIDE\scripts cannot be deleted.&lt;br /&gt;
Detail: You may not have permissions to delete this directory. The exception occurred during a cfdirectory action=&quot;delete&quot;.&lt;/em&gt;
&lt;br /&gt;&lt;br /&gt;
I recently did, and after several minutes of Googling, still didn&apos;t find the answer.  I also tried several different file system permissions settings at the Windows OS level and got inconsistent results. The one thing that did seem to work fairly consistently is to grant full privileges to the &quot;CREATOR OWNER&quot; user account (as well as whatever account you have the CF Service running under) to the &quot;servers&quot; directory and all its children. Among other things, I initially tried this same tactic on the &quot;{path-to-cfusion-instance}/SERVER-INF/temp/cfusion-war-tmp&quot; directory in which the error occurs but surprisingly found that it works some, but not all, of the time.&lt;br /&gt;
On a side note, if you get this error I also recommend turning off Windows Firewall and any other firewall/anti-virus software that might be running, while you&apos;re trying to create the instance(s).
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 21 Jul 2009 23:32:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/7/21/advice-for-fixing-an-error-creating-cold-fusion-server-instances-on-windows</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>ColdFusion Admin Datasource Page Glitch in CF 8</title>
				<link>http://www.horwith.com/index.cfm/2009/7/17/coldfusion-admin-datasource-page-glitch-in-CF8</link>
				<description>
				
				Just experienced this and didn&apos;t find anything via Google that described the exact same thing so I thought I&apos;d blog it.&lt;br /&gt;
If you leave a browser window open to a CFAdmin datasource details pagelong enough to time out and then click a link, it prompts you to log-in again. When you log in again, you&apos;re on the same page you were on before in the admin (the details for the datasource) but the datasource name has now been replaced with &quot;foo?targeted=true&quot; where &quot;foo&quot; is what the actual datasource name is. I&apos;d expect you&apos;d get an error if you actually submitted the page... or you&apos;d rename the datasource, which would cause errors in any applications that use it.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 17 Jul 2009 20:43:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/7/17/coldfusion-admin-datasource-page-glitch-in-CF8</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Another Open Letter To The CF Server Team</title>
				<link>http://www.horwith.com/index.cfm/2009/7/16/another-open-letter-to-the-coldfusion-server-team</link>
				<description>
				
				Nearly three years ago, I wrote an &quot;open letter to the CF server team&quot; in which I listed and briefly described many features that I&apos;d like to see implemented in the server (&lt;a href=&quot;http://www.horwith.com/index.cfm?mode=entry&amp;entry=9C5F8D69-E081-0478-47FF6F46263B7F5D&quot;&gt;http://www.horwith.com/index.cfm?mode=entry&amp;entry=9C5F8D69-E081-0478-47FF6F46263B7F5D&lt;/a&gt;). The public beta of CF 9 means that in all likelihood they&apos;re in the early stages of planning/programming CF 10, so I thought it was high-time I send another letter and share what my wishlist for ColdFusion looks like these days.&lt;br /&gt;&lt;br /&gt;
Dear CF Server Team,&lt;br /&gt;
It&apos;s been a while since I last wrote you, I trust you are doing well? It&apos;s been a while since I last sent you a list of requests/suggestions, so I thought I&apos;d reach out and give you a few ideas to implement, debate, and/or laugh about amongst yourselves. In no particular order, they are:&lt;br /&gt;&lt;br/&gt;
&lt;ol&gt;
&lt;li&gt;Add J2EE Server Tuning Features&lt;/li&gt;
&lt;li&gt;Add Source Control Integration&lt;/li&gt;
&lt;li&gt;Give Us More Compiler Control&lt;/li&gt;
&lt;li&gt;Improve the Datasource Pool&lt;/li&gt;
&lt;li&gt;Give Us Lexical Closure&lt;/li&gt;
&lt;li&gt;Add Diff and Merge Functionality&lt;/li&gt;
&lt;li&gt;Add Method Overloading&lt;/li&gt;
&lt;li&gt;Give Us Modular Deployment (aka &quot;features a&apos;la cart)&lt;/li&gt;
&lt;li&gt;Offer Cloud Support&lt;/li&gt;
&lt;li&gt;Give Us the Ability to Override/Extend Core CFML Constructs&lt;/li&gt;
&lt;li&gt;Improve the Exception Handling Framework&lt;/li&gt;
&lt;li&gt;Add an Internal Mail Server&lt;/li&gt;
&lt;li&gt;Add Social Networking Support&lt;/li&gt;
&lt;li&gt;Expose the Cluster&lt;/li&gt;
&lt;li&gt;Improve Performance&lt;/li&gt;
&lt;li&gt;Add Content Management Support&lt;/li&gt;
&lt;li&gt;Do Not Simply Imitate/Expose Java&lt;/li&gt;
&lt;li&gt;Give Us AJAX Framework Flexibility&lt;/li&gt;
&lt;li&gt;Let Us Treat Data As Code&lt;/li&gt;
&lt;li&gt;Add Support for Regex Lookbehinds&lt;/li&gt;
&lt;li&gt;Enhance CFC Functionality&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;strong&gt;Some Explanations:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Regarding #1&lt;/strong&gt;&lt;br /&gt;
Optimizing the JVM (primarily jrun.xml and jvm.config) makes a massive impact on performance, and the optimal settings varies based on what version of the JVM you are running, what version of CF you are running, how your application(s) are coded, and what hardware and OS you&apos;re running on. Unfortunately, only a handful of CF developers know how to tweak these settings. It would be extremely useful if there was a screen in the admin that tries to suggest (and implement) optimal changes to these settings based on current performance and available resources.
&lt;br /&gt;
&lt;strong&gt;Regarding #2&lt;/strong&gt;&lt;br /&gt;
Integration with source control systems so that in the admin you could point an application at a repository and deploy or automate deployments, as well as interact programmatically with the repository from code, would be nice. I&apos;d imagine it&apos;d be relatively straightforward to add an SVN Event Gateway, if nothing else.
&lt;br /&gt;
&lt;strong&gt;Regarding #3&lt;/strong&gt;&lt;br /&gt;
I&apos;d like to see administrators/developers have more control over how code is compiled/executed. CF 8 introduced a checkbox in the admin for turning off type checking for function arguments - I&apos;d like to see more, similar, checkboxes. For example, it&apos;d be nice to be able to turn off case insensitivity, turn off type checking all together, or turn off searching through the scopes for variables that aren&apos;t prefixed.
&lt;br /&gt;
&lt;strong&gt;Regarding #4&lt;/strong&gt;&lt;br /&gt;
My understanding is that each datasource defined in the CFAdmin results in one connection in the pool, which is shared by all queries/stored procedure calls that use that datasource. The ability to specify that &apos;x&apos; number of connections should be in the pool for a single datasource name could drastically improve performance in many applications.
&lt;br /&gt;
&lt;strong&gt;Regarding #5&lt;/strong&gt;&lt;br /&gt;
Currently, we can declare a variable local to a page/CFC, local to a tag, and local to a function. I&apos;d like to be able to declare variables that are local to loops and other constructs. These variable references would have to cascade, so if I have a &apos;for&apos; loop with an &apos;i&apos; counter, and in that I have a &apos;for&apos; loop with a counter &apos;i&apos;, the proper i reference is referenced in the proper location. It would also mean that a loop that references a variable &apos;foo&apos;, which is undefined in that loop, would look first for a &apos;foo&apos; variable defined in its enclosing loop, which would do the same in turn, and so on until the server is looking at the variables scope of the caller code. I&apos;d also like for the &quot;Compiler Control&quot; feature to include a checkbox in the admin by which I could enforce lexical closure - i.e. restrict access to any shared scopes outside the current available scope (for example - inside a function you cannot access the server, application, session, form, etc. scopes). I&apos;d imagine code compiled this way would perform better, and it would make testing infinitely easier and more reliable.
&lt;br /&gt;
&lt;strong&gt;Regarding #6&lt;/strong&gt;&lt;br /&gt;
The addition of functions to perform a diff or a merge on the contents of arrays and structures would be very useful. The only thing we currently have that&apos;s close to this is the ability to structAppend() keys into a structure that doesn&apos;t have them (or that are already there if you&apos;re willing to overwrite) from another structure.
&lt;br /&gt;
&lt;strong&gt;Regarding #7&lt;/strong&gt;&lt;br /&gt;
Method overloading, i.e. the ability to declare multiple functions with the same name but different argument signatures, would add an enormous amount of flexibility to how ColdFusion applications are built. Among the benefits developers might gain are a more robust form of polymorphism, multiple inheritance, and the ability to break away from the &quot;message passing&quot; paradigm of Object Orientation in favor of a more functional approach to OO - similar to how CLOS implements objects. It would also be fundamental for implementing my suggestion for an &quot;Improved Exception Handling Framework&quot; (see # 11 below).
&lt;br /&gt;
&lt;strong&gt;Regarding #8&lt;/strong&gt;&lt;br /&gt;
I know this is something that marketing/sales would weigh-in on heavily, but rather than having one version of CF at one price that just &quot;includes all&quot; and one version that either limits or disables certain functionality, I&apos;d prefer to see CF support a paradigm by which you pay for and install only the modules you want. If nothing else, the ability to simply turn on and off modules in the admin would be useful. After all, if I have an application that, for instance, doesn&apos;t use charting, why should I pay for the performance price of loading the graphing and charting components when my server starts?
&lt;br /&gt;
&lt;strong&gt;Regarding #9&lt;/strong&gt;&lt;br /&gt;
I&apos;d like to see a realistically priced licensing model for running CF in a cloud. My personal feeling is that running CF in a cloud right now really does little more than allow you to do fail-over (which you can already do with load balancers and/or J2EE clustering) and some fancy server hardware upgrading on demand. Ideally, supporting clouds would at some point be complemented by programmatic functionality that allows developers to MULTI-PROCESS page execution to take advantage of the cloud.
&lt;br /&gt;
&lt;strong&gt;Regarding #10&lt;/strong&gt;&lt;br /&gt;
If I want to modify, extend, or override the default behavior of a tag or function that&apos;s built-in to ColdFusion, why shouldn&apos;t I be able to? I&apos;d like to see the core language (tags/functions) exposed in a namespace that we can access. If, when the server compiled your CFML, it looked first for a function or tag in a local or application namespace, THEN if it&apos;s not found looked for the function or tag in it&apos;s internal namespace (the one containing the core language that ships), much like the way it searches through scopes to find a variable when you haven&apos;t prefixed it, developers could override and extend the built-in language constructs. This would not only make the language much more useful for developers, but would allow Adobe to let the community help define new and improve existing CFML language constructs.
&lt;br /&gt;
&lt;strong&gt;Regarding #11&lt;/strong&gt;&lt;br /&gt;
The current &quot;try-catch-throw&quot; methodology has some limitations, as do all languages that handle exceptions this way. I&apos;d prefer to see exception handling work more like &quot;conditions&quot; in LISP. It goes something like this: Developers would write functions that handle errors and register them in some way with the server (or just have them available in the current request, I suppose). When developers want to programmatically raise an exception, they would simply throw a CFC instance they&apos;ve created (the instance would either extend a CF Error object or implement its interface. When an exception occurs (or is raised/thrown programmatically), CF looks for the function who&apos;s arguments most closely match the arguments generated by the error. CFML would have some functions that allow the developer not only to re-throw the exception or end handling their, but also to return to the code that was executing when the exception occurred, or immediately after or before where the exception occurred.
&lt;br /&gt;
&lt;strong&gt;Regarding #12&lt;/strong&gt;&lt;br /&gt;
I&apos;m not suggesting that the team implement a full-featured mail server, just a very lightweight outbound-only mail server that maybe has just a few configuration options (like &apos;from address&apos; and &apos;port&apos;). So often, developers use CFMAIL to send themselves error emails. This currently isn&apos;t an option when there&apos;s no mail server available, and often times it is less than ideal to use a mail server that&apos;s also being used in production for these &apos;debugging emails&apos;. A CFINTERNALMAIL tag that only uses the lightweight internal mail server would be great.
&lt;br /&gt;
&lt;strong&gt;Regarding #13&lt;/strong&gt;&lt;br /&gt;
Of all the items on my wish list, I&apos;m least enthusiastic about this one. That said, clients are asking for social networking more and more frequently - whether in the form of integration with sites like facebook or twitter, or by way of some other community building functionality on their site. I haven&apos;t put a ton of thought into what this feature would look like (though I know it would have to include data push to AJAX) but I know that requests for social networking functionality are only going to rise, and anything that makes that quicker/easier to do would be great.
&lt;br /&gt;
&lt;strong&gt;Regarding #14&lt;/strong&gt;&lt;br /&gt;
Though there are workarounds for much of this, I&apos;d like to see information about the cluster (if CF is a member of one) and about the J2EE instance CF is running on exposed via some CF functions or built-in variables. Railo added a &apos;cluster scope&apos; to their server - when I heard about that I thought, &quot;now there&apos;s a great idea - I wonder why nobody on the ColdFusion engineering team thought of that yet?&quot;
&lt;br /&gt;
&lt;strong&gt;Regarding #15&lt;/strong&gt;&lt;br /&gt;
Performance is getting better and better with every release it seems, but there&apos;s always room for improvement, and improving performance is always a feature I&apos;d like to see in a release.
&lt;br /&gt;
&lt;strong&gt;Regarding #16&lt;/strong&gt;&lt;br /&gt;
So many companies want some level of content management functionality for their intranet/internet applications. I&apos;m not suggestion that the engineering team necessarily implement a completely feature rich CMS inside of CF, but some simple content management functionality would definitely make life easier for a lot of developers and would save a lot of companies money (either by reducing programming hours or avoiding purchasing a commercial product). I wrote a little about this not too long ago (&lt;a href=&quot;http://www.horwith.com/index.cfm/2008/6/28/would-adobe-integrate-a-CMS-into-ColdFusion&quot;&gt;http://www.horwith.com/index.cfm/2008/6/28/would-adobe-integrate-a-CMS-into-ColdFusion&lt;/a&gt;)
&lt;br /&gt;
&lt;strong&gt;Regarding #17&lt;/strong&gt;&lt;br /&gt;
This isn&apos;t so much a feature request as it is a word of caution/advice. I understand that CF was moved onto a Java platform nearly 10 years ago largely so that the engineering team could take advantage of the vast amount of Open Source code that is available, and I realize that it is also tempting (because it is so quick and easy) to simply drop an Open Source project into the server and expose it with a tag. If there is something CF doesn&apos;t do out of the box, and there&apos;s an Open Source Java project that does what I need, it&apos;s usually not much work to integrate the project into my server library and figure out how to use it myself. For example, whenever I needed image manipulation functionality in CF I always just dropped the Jakarta tag lib on the server and away I went (&lt;a href=&quot;http://jakarta.apache.org/taglibs/sandbox/doc/image-doc/intro.html&quot;&gt;http://jakarta.apache.org/taglibs/sandbox/doc/image-doc/intro.html&lt;/a&gt;). I&apos;m not saying it&apos;s not easier now, but it wasn&apos;t difficult before, and I rarely had to do it on a project so I&apos;d rather not have the server load those libraries if I&apos;m not going to use them. Also, one benefit of using Open Source libraries directly is that when I can&apos;t get them to do what I want, or an error is occurring, I have many more options for troubleshooting and fixing the problem. When it&apos;s built-in to the server and it doesn&apos;t work the way I want, my hands are tied by the &quot;black box&quot; that is the commercial product, which in the end usually results in wasted hours.
&lt;br /&gt;
&lt;strong&gt;Regarding #18&lt;/strong&gt;&lt;br /&gt;
I think developers would benefit from having more control over what JS libraries are used (and how they are used). Being able to tell CF you want it to use JQuery, or YUI, or &apos;JS Framework XYZ&apos; would be great.
&lt;br /&gt;
&lt;strong&gt;Regarding #19&lt;/strong&gt;&lt;br /&gt;
The ability to treat data as code and code as data is something I would love to see in CF, though of all the features listed here, I would be most surprised to see implemented. The &apos;evaluate&apos; function supports similar but limited functionality. I&apos;d like to take any string and be able to treat it like code, with an escape character to delay evaluation. This would be particularly useful in that it would allow developers to work with anonymous functions and would allow code to write code. I realize that the latter use case can be achieved by using the CF 9 Virtual File System, but the feature I&apos;m describing would eliminate the I/O aspect that&apos;s present with virtual files all together.
&lt;br /&gt;
&lt;strong&gt;Regarding #20&lt;/strong&gt;&lt;br /&gt;
This one isn&apos;t a big deal until you need it, but I can&apos;t think of any reason why regular expression lookbehind support has never been implemented, and I wouldn&apos;t think that it&apos;d be very difficult to implement.
&lt;br /&gt;
&lt;strong&gt;Regarding #21&lt;/strong&gt;&lt;br /&gt;
The support for CFC constructors and for importing CFCs that were added in CF 9 were big improvements. I think the OO implementation would be rounded-off well if we had support for implicit getters and setters, as well as support for a deconstructor method.
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;In Closing&lt;/strong&gt;&lt;br /&gt;
I realize that the AJAX framework flexibility, social networking, cloud support, and CMS integration features are the only things on the list that directly help sell servers, whereas the rest are primarily for the benefit of developers. However, performance is also a selling point and is certainly necessary to keep repeat business, and many of these features aid in performance. Aside from my own reasons for wanting them, the remaining features, if nothing else, should make the server more attractive to &quot;seasoned developers&quot;, would allow developers to do things they wouldn&apos;t think of doing now, and would help argue the case that ColdFusion is a mature (or &quot;serious&quot;) language.
				
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 16 Jul 2009 10:52:00 -0400</pubDate>
				<guid>http://www.horwith.com/index.cfm/2009/7/16/another-open-letter-to-the-coldfusion-server-team</guid>
				
			</item>
			
		 	
			</channel></rss>