Open Letter to the CF Server Team
For quite a while now I've been piecing together a mental list of the features that I'd love to see added to ColdFusion. Damon Cooper recently blogged about two proof of concept tags at Adobe (http://www.dcooper.org/blog/client/index.cfm?mode=entry&entry=916FEFD9-4E22-1671-57A23859C50FFF47) which look pretty cool. There have also been a few public demonstrations of Scoprio (CF 8) features - obviously until the final release nothing is set in stone, but they've been pretty cool features so far. Today I thought I'd share my list of the top features I'd like to see in the next release - some of them simply to make my life easier and some of them because I think it'd help Adobe sell more CF. I've put them in an ordered list so I can reference the number when explaining below, but they're in no particular order. Note - though I do see and hear quite a bit of NDA information, none of the features I've listed came from this information. Some of them I've been told are definitely in the works, some I have no, and no, I won't specify which are which.
- Make CFC instances Serializable
- Add support for image creation/manipulation
- Add Interfaces to CFCs
- Add support for CFC Constructors
- Add support for method overloading in CFCs
- Integration of Breeze functionality
- Add CSS/HTML 'pod layout' support
- Add native support for RSS
- Control logging at the application level
- Give us an IDE with CFC introspection
- Expose more of what's going on under the hood
- Give us an IDE or some hooks into better (interactive) debugging
- Add accessibility (508) checking to an IDE or to the compiler (accessibility compiler warnings)
- Introduce better control over threading (code and DB)
- Add cache control at the application level
- Add native support for several MS Office formats
- Add support for granular control (grouping, flushing, etc.) of DB and content caches
- Enhanced Flash forms using Flex 2
- Add refactoring to an IDE
- Make general improvements to CFDOCUMENT (performance and otherwise)
- Add PDF Forms support
- Add support for AJAX/Spry generation
- Make improvements to large file parsing
- Add non-DOM based XML Parsing (SAX or STAX)
Some Explanations:
Regarding #1
The claim that CF is an 'enterprise solution' is difficult to defend when someone points out this flaw. The fact that CFCs don't replicate is a bug, and one that is long over due to be fixed.
Regarding #3
A while ago there was a lot of discussion in the community about whether or not CF needs Interfaces. Many developers think that it's silly to have in a loosly typed environment. I didn't chime in back then, but will do so now. As someone who is often filling the role of 'architect' on projects, Interfaces would make my life easier. I'd love to diagram the objects in a business domain, create the Interfaces, and then hand that over to a team.
Regarding #4
It would be great if, inside of the opening CFCOMPONENT tag, we had a 'constructor' attribute to specify the constructor method. For backwards compatibility, I don't think just naming a method the same as the CFC would be received as well. In order for this to work properly, CFOBJECT and createObject() would need to support passing additional arguments.
Regarding #7
CF developers seem to like letting the server determine Flash Form layout with the various CFFORM tags, and many developers are asked to create pages/applications that use a 'pod layout' either with CSS or simple HTML. Why not give us some tags that create HTML and/or CSS in order to lay the content inside of them in a pod fashion?
Regarding #8
With the popularity of RSS, wouldn't it be nice to be able to specify that the server should convert a recordset straight to RSS?
Regarding #9
It'd be nice to be able to specify 'this.log='whatever' in Application.cfc (or CFAPPLICATION) so that a log file specific to the activity of that application is used for all long running templates, errors, application events, etc.
Regarding #11
Being able to see how many active sessions, current requests being served, which templates are being currently accessed and frequency of access, currently long running templates and queries, etc. would be VERY nice. This feature request also includes being able to view and control the JDBC connection pool from the CFAdmin.
Regarding #15
Having to turn trusted cache on for the whole server or not at all, sometimes means not optimizing one application because another app on the same server needs trusted cache turned off - why not turn it on with a Boolean 'this.trustedcache' in Application.cfc? Also, being able to control whether class files are saved to disk, the cached queries number, and the number of templates in the template cache - all at the application level, would be extremely useful for optimizing the applications that need it.
Regarding #24
Let's face it, XML is verbose by nature... and reading and parsing a large XML stream in CF is usually less than elegant. In fact, it's not difficult to crash your server parsing large XML packets. Offering XML parsing based on SAX or STAX as opposed to DOM, would drastically improve this. Jim Collins has already created an open source implementation of STAX for CF at http://sourceforge.net/projects/cfsynergy (CFDJ article online at http://coldfusion.sys-con.com/read/236002.htm) - I'd LOVE to see this integrated with the server.
I didn't think there was much that needed to be said about the other features I've listed, but I'd gladly elaborate more on any of these. Since the CF server Team is still deceiding on what's in CF 8, I encourage my readers to contribute to this list in the comments area, to blog their own lists, and/or to send feature requests for CF 8 directly to Adobe at http://www.adobe.com/go/wish.

Message received, loud and clear.
Damon
1,3,4,5,9,10,11,12,14,15,19,24
THOSE are the things that we as developers *need*. The push should always be platform/language first, "features" (as we've come to know the additions in MX7) second. "Buy a man a fish... Teach a man to fish..."
- Native MySql 4.x & 5.x support.
- Native PostgreSQL support.
- Debian Linux support.
As we get nice features like easy-to-use threading, etc. it will be more and more valuable to have per-site settings, like:
- How many threads each site account can spawn
- Caching limits per site
- seperate mappings for each site, so people don't blow up your site by creating an "objects" mapping when you have an "objects" folder
Just some examples...anyway, great list and I would definitely put my vote in for all of those things.
Mike.
* Configuration propagation between nodes in a cluster
<cfquery value="#myQuery#">
Seems like you should be able to, given:
<cfloop collection="#myCollection#" item="foo">
Re: The list
Yes, CFCs should be serializable, and they really need to work in clustered environments. If they have to, take the Rails way out, simply stating that things like CFCs with open file handles can't be serialized, etc.
The only one here that confuses me is the "CSS/HTML 'pod layout' support" - how would this be anything but a CF tag that generates a <div> where you pass along a class name?
Good list of enhancements. IMO, I think cfmx 8 should make sure the string processing is faster (ie., appending) like cf 5 and also make the overall performance faster. It does no good to have 'slow' performing enhancements (ie., PDF creation - enterprise version). Verity is alot slower than cf5 when you compare times from gettickcount and its 'status' time. The delta time should be closer to each other.
Other things I'd like:
The engine that provides the charts for <cfchart> has an awful lot of additoonal power than <cfchart> doesn't seem to deliver. It'd be great if there was some sort of API access to it as well as just <cfchart>.
I would like the function-local scope to actually be given a name.
xpath queries can return results other than just xml node sets (not sure of the correct jargon for that). It'd be nice if xmlSearch() was aware of that.
I would like more <cfscript> support.
As someone else's list mentioned: something like <cfexchange> which effects the creation of things like contacts, tasks, meetings, etc, in MS Exchange. Maybe something more vanilla-sounding if there's requirement for more than something other than exchange? <cfmessaging>?
Some better way of logging wishlist items that the veritable black hole that is the Macromedia / Adobe wishlist. If all the enhancements everyone had raised were exposed, we could all vote for them, rather than making blog postings such as this, and commenting on them.
They should look at how Atlassian do their issue tracking for their software: http://jira.atlassian.com
--
Adam
You forgot sFTP for the CFFTP tag. FTP is no longer secure enough for data transfers.
I am also an Architect and have successfully completed projects in .NET and J2EE (on all applications servers). I never rely on Interfaces for ensuring my model consistency. I used written documentation and more control, unit cases.
Instead of implementing Interfaces, if Adobe implements some good way to test you code (unit and integration test), it will be much better. Testing is much easier concept then interfaces to teach any new developer.
As someone else also mentioned about cfchart. This functionality also makes CFMX unique among other Web development tools (J2EE, PHP, ruby etc.). No one offers this as part of plateform. How about improving this. Allwo to deal with large amout of data, data streaming. more chart types etc.
1. Already in BlueDragon since 6.1.
2. Already in BlueDragon since 3.0.
3. Already in BlueDragon 7.0 (public beta to be released soon). Also abstract CFCs, abstract functions, and "null" support. Possibly static functions.
4. Not sure this is better than the current standard practice of using init() methods and using:
<cfset myObj=CreateObject( "component", "my.cfc" ).init( parm1, parm2 )>
5. Not sure method overloading in CFCs is necessary or even makes sense as long as you have optional arguments with default values. If I have a function that takes two string parameters, and an overloaded version of the same function that takes three string parameters with the third being optional and having a default value, then when I invoke this (overloaded) function with two string parameters, which one gets invoked?
Second - Vince, two things:
First, so right, so right - a bunch of these are aleady in BD. Second, in all fairness, you REALLY don't want me to post a list of features NOT in BD do you?
There's no need to post a list of features not in BD since we already provide a complete list in our documentation, as we always have:
http://www.newatlanta.com/products/bluedragon/self...
I'd be more interested in your response to my comments about the lack of need for CFC constructors or overloaded functions.
By the way, what's Blue Dragon? ;)
M. McConnell
FusionReactor already covers much of point 11, and does a lot of extra stuff too.
We are also releasing FusionDebug, an Eclipse based ColdFusion interactive debugger which will cover point 12 and 10 (while debugging) within the next few weeks. Check out :
http://www.fusion-reactor.com ,
http://www.fusiondebug.com
As now, we can have some of those features through the JVM. I always feel I can do anything with ColdFusion, and I'm building great applications with it. I'm glad to hear that the CF team listens to us, too.
But the most important point I feel is always underestimated: the IDE. We really need a *good* IDE for hard coding developers. What is doing Adobe with the CFEclipse team, as Macromedia promised? When I see something as Aptana (http://www.aptana.com/) I think, ehy cool, I like that! Finally! But I'm a ColdFusion developer, I have to use the never-features-complete CFEclipse: I like CFEclipse, but that's always because I know there's nothing better (sometimes I switch to Dreamweaver too): that's frustrating, we work all the day with a tool that is not so comfortable. I remember the old-cfstudio-days, and how I was used to feel me always using it. Now I see other IDE for other server languages and sometime I think I'd like to use other language only for having a good IDE.
Am I the only developer that needs a good IDE before other features?
I'd like the ability for specific templates to be excluded from a trusted cache. i.e. I want to turn on trusted cache for everything except a couple of templates which should never be trusted because they get changed by the application.
Also, how about the ability to define a default timeout for cfquery tags: I want all my queries to have a 35 second timeout, except a couple which will be defined explicitly using the timeout attribute in the cfquery tag.
http://www.maplestorymesosshop.com http://www.maplestorymesosstore.com maple story mesos
<a href="http://www.gold4maple.com/maplestory-mesos">mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">mesos sale</a>
<a href="http://www.gold4maple.com/maplestory-mesos">mesos seller</a>
<a href="http://www.gold4maple.com/maplestory-mesos">ms mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maplestory gold</a>
<a href="http://www.gold4maple.com/">maplestory seller</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maplestory mesos</a>
<a href="http://www.gold4maple.com/">maplestory sale</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maplestory money</a>
<a href="http://www.gold4maple.com/">buy maplestory</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buy cheap mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buy maple story mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buy maplestory gold</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buy maplestory mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buy maplestory money</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buy mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">buying mesos</a>
<a href="http://www.gold4maple.com/">cheap maple story</a>
<a href="http://www.gold4maple.com/">cheap maplestory</a>
<a href="http://www.gold4maple.com/maplestory-mesos">cheap mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">cheap ms mesos</a>
<a href="http://www.gold4maple.com/">cheapest maple story</a>
<a href="http://www.gold4maple.com/">cheapest maplestory</a>
<a href="http://www.gold4maple.com/maplestory-mesos">cheapest mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">easy mesos</a>
<a href="http://www.gold4maple.com/">easy maplestory</a>
<a href="http://www.gold4maple.com/maplestory-mesos">fast mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maple mesos</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maple money</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maple gold</a>
<a href="http://www.gold4maple.com/maplestory-nexon-cash" target="_blank">http://www.gold4maple.com/maplestory-nexon-cash">maple story cash</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maple story gold</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maple story mesos</a>
<a href="http://www.gold4maple.com/">maple story sale</a>
<a href="http://www.gold4maple.com/maplestory-mesos">maple story money</a>
<a href="http://www.gold4maple.com/">maple story shop</a>
<a href="http://www.gold4maple.com/maplestory-stuff">maple story item</a>
<a href="http://www.gold4maple.com/maplestory-stuff">maple story stuff</a>
<a href="http://www.gold4maple.com/maplestory-equipment">maple story equipment</a>
<a href="http://www.gold4maple.com/maplestory-powerleveling">maple story powerleveling</a>
<a href="http://www.gold4maple.com/maplestory-accounts" target="_blank">http://www.gold4maple.com/maplestory-accounts">maple story accounts</a>