Open Letter to the CF Server Team

Dear 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.

  1. Make CFC instances Serializable
  2. Add support for image creation/manipulation
  3. Add Interfaces to CFCs
  4. Add support for CFC Constructors
  5. Add support for method overloading in CFCs
  6. Integration of Breeze functionality
  7. Add CSS/HTML 'pod layout' support
  8. Add native support for RSS
  9. Control logging at the application level
  10. Give us an IDE with CFC introspection
  11. Expose more of what's going on under the hood
  12. Give us an IDE or some hooks into better (interactive) debugging
  13. Add accessibility (508) checking to an IDE or to the compiler (accessibility compiler warnings)
  14. Introduce better control over threading (code and DB)
  15. Add cache control at the application level
  16. Add native support for several MS Office formats
  17. Add support for granular control (grouping, flushing, etc.) of DB and content caches
  18. Enhanced Flash forms using Flex 2
  19. Add refactoring to an IDE
  20. Make general improvements to CFDOCUMENT (performance and otherwise)
  21. Add PDF Forms support
  22. Add support for AJAX/Spry generation
  23. Make improvements to large file parsing
  24. 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.

Comments
Great list, Simon, and duly noted.

Message received, loud and clear.

Damon
# Posted By Damon Cooper | 7/23/06 12:34 PM
Great list. I would sell an arm for

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..."
# Posted By Dave Ross | 7/23/06 1:32 PM
It's a great list, the number 2 is a MUST HAVE in CF. With the MM-Adobe fusion, CF not having internal and complete support for image creation and manipulation would be a shame.
# Posted By Fernando da Silva Trevisan | 7/23/06 1:33 PM
I can add some small requests. :)

- Native MySql 4.x & 5.x support.
- Native PostgreSQL support.
- Debian Linux support.

# Posted By O?uz Demirkap? | 7/23/06 1:34 PM
I totally agree with almost every item on this list, except I would also like to see what the possibility is of getting better support for shared hosting or site-seperated systems.

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.
# Posted By Mike Kelp | 7/23/06 3:39 PM
Better Regular Expression Support
# Posted By Stephen Cassady | 7/23/06 4:48 PM
* FDS EventGateway for server push from CF to clients
* Configuration propagation between nodes in a cluster
# Posted By João Fernandes | 7/23/06 6:30 PM
How about a review of some basic inconsistencies in the language, such as the difference between value and "name" attributes? I constantly do this:

<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?

# Posted By Joe Rinehart | 7/24/06 6:17 AM
Simon -

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.

# Posted By Patrick Whittingham | 7/24/06 6:35 AM
Number 4 (Constructor) Is something that came up earlier in the version 7 cycle. There was a post to the bug/feature list added on that topic. This would be a good thing. The focus of the constructor added the ability of the CFC to set and get values just based on the object.attribute without having to call object.getAttribute(). PHP and other languages have done this and it is a right way to do it. We need to come up to speed on this technology also.
# Posted By John Farrar | 7/24/06 7:17 AM
Nice list. 1+23 are the most important for me.

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
# Posted By Adam Cameron | 7/24/06 7:34 AM
In regards to better regular expression handling I would like to be able to change some of the components that are used for various features. For example it would be nice to exchange or at least change the mail handler to be able to send iCal requests. Change the regular expression handler to use some of the various regex parsers available such as Jakarta Oro. Change the XML parser to use something else.
# Posted By J Enters | 7/24/06 8:23 AM
Simon,

You forgot sFTP for the CFFTP tag. FTP is no longer secure enough for data transfers.

# Posted By David Fekke | 7/24/06 12:54 PM
Simon,

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.
# Posted By Asif Rashid | 7/24/06 1:06 PM
Good list. In response to items 1-5:

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?
# Posted By Vince Bonfanti | 7/24/06 4:12 PM
For what it's worth, I would love to see static functions in Bluedragon and/or Adobe CF server. That would make DAO methods a world easier and speed things up quite a bit if they were implemented correctly.
# Posted By Mike Kelp | 7/24/06 5:02 PM
First - thanks, All for the comments about additional features - keep 'em coming.
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?
# Posted By Simon Horwith | 7/24/06 5:04 PM
Hi Simon,

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.
# Posted By Vince Bonfanti | 7/24/06 7:12 PM
Ahh, Vince takes another CF Server discussion off-topic. Ass. And yeah, reply to this too so you can take the thread off topic more. Forgot to add again: Ass.
# Posted By Sarah Belo | 7/24/06 7:27 PM
Improved support for COM objects would be nice. Also, as echoed earlier, Exchange integration would be a great feature. Intranet applications with the ability to create and read Exchange objects (contacts, appointments, etc.) without writing C++ code would allow CF developers in IT shops to do great things...

By the way, what's Blue Dragon? ;)

M. McConnell
# Posted By Mike McConnell | 7/24/06 7:41 PM
I also want built in image resizing manipulation. I have no idea why this "wow" features isn't in there yet. Part of me belives that this might be in the planning, and might be why AAlagad is on the block for sale (or was the last time I heard).
# Posted By Stephen Cassady | 7/25/06 4:53 AM
Hi All,

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
# Posted By Darren Pywell | 7/25/06 11:35 AM
Careful, Darren. If you take the discussion off-topic someone might get their panties in a wad and call you naughtly names. ;-)
# Posted By Vince Bonfanti | 7/25/06 12:42 PM
Vince... My apologies to everyone if I'm going off-topic. Certainly not my intention! I'd read it that these are things that people want (and need) and some of them are going to be available soon. Was really just trying to help. Thanks for the hint ...Darren
# Posted By Darren Pywell | 7/25/06 12:59 PM
Application level Caching would be awesome!
# Posted By Joe Smith | 7/26/06 10:56 AM
Good list, Simon! Thank you for sharing.
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?
# Posted By Giampaolo Bellavite | 7/27/06 7:31 AM
Image creation/manipulation for GOD's sake! I've been wanting this since CF 5 when I realized just about every other language out there had it and ran into trouble with CFXes that don't thread well. The UDFs and free libraries that are out there are nice, but this should really be built into CF and utilize Adobe's superior compression routines.
# Posted By Doug | 7/27/06 8:58 AM
I would add that they keep all database support regardless of Standard or Enterprise. That is the only feature I need and upgrading to Enterprise is a lot of pennies. I would also like to see Debian Support especially for Ubuntu Server 6.06.
# Posted By Chris | 7/27/06 5:39 PM
It would be really nice if they could add functionality for variable scoping to CF. Currently you need to declare all your "local" variables at the top of your function block, which in my opinion harkens back to the days of Pascal and other languages. Giving the prorammer the option to declare variables withing the current "block" scope would also increase efficiency as the memory reference to the variable could be disposed of as soon as the block in which the variable was created was exited.
# Posted By Grant | 8/2/06 4:18 AM
re: #15: Add cache control at the application level.
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.
# Posted By Bert Dawson | 8/9/06 8:34 AM
Furthermore , <a href="http://www.rings4women.com">rings 4 women</a> when new technology is introduced <a href="http://www.necklaces4women.com">necklaces 4 women</a>there is often too low a level of expertise to <a href=" http://www.earrings4women.com ">earrings 4 women</a>exploit it for native development. This means that while elites, foreign communities and subsidiaries of transnational corporations may benefit , those whose lives depend on access to the information are denied it.
# Posted By endeavor09 | 6/22/10 10:50 PM
# Posted By july | 7/22/10 11:28 PM
<a href="http://www.gold4maple.com/maplestory-mesos">quick mesos</a>
<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>
# Posted By july | 7/22/10 11:29 PM
This site is hosted by HostMySite and runs off of BlogCFC - thanks, Ray.