What do you want to see in CF 9?
What do you want to see in ColdFusion 9 (codename Centaur)? Yes Kevin Lynch, Chief Architect of Adobe told the crowd of 4300 attendees at MAX the other week that work is already underway on the new version, and showed ColdFusion's place on Adobe product roadmap. Puts to rest all that hullabaloo the other
month from a few folks thinking that CF was dead! The silent majority know CF rocks and is
alive! So what do you want to see in CF 9?


1. Setting default attributes for tags (usually placed in 'Application.cfm') so you don't have to write always all attributes again and again.
<cftagdefault tag="cffile" action="READ">
<cfsettagdefault name="charset" value="iso-8859-1">
</cfdefault>
<cftagdefault tag="cffile" action="WRITE">
<cfsettagdefault name="mode" value="644">
</cfdefault>
<cftagdefault tag="cfquery">
<cfsettagdefault name="datasource" value="mydb">
</cfdefault>
<cftagdefault tag="cfhttp">
<cfsettagdefault name="proxyserver" value="????">
<cfsettagdefault name="proxyPort" value="9999">
</cfdefault>
2. Enhance existing functions:
<cfset replace(string, sub, sub2 [, scope [, start [, end] ] ])>
scope: LAST/REST/comma delimited list = number of occurence(s) to replace
<cfset find(sub, string [, start [, end [, scope] ] ]>
scope: FIRST/LAST/number of occurence (allows list): find("a", "abbaccadda", 1, -1, "5,3") = "7" for 3rd "a" because no 5th "a" ouccurence found!
valueList(query.column, delimiter, startrow, endrow, condition for each row to be included )
arrayDeleteAt(array [, pos]) - pos optional, default is the last element
mid(string, start[, count]) - count optional, default is rest
listLen(list [, delimiter] [, ignoreEmptyElements]) - default of "ignoreEmptyElements" is "true" to be compatible with CF 6-8
listLen("a,,,b") IS 2 but listLen("a,,,b", ",", false) IS 4!
listGetAt(list, position [, delimiter] [, ignoreEmptyElements]), listToArray(list [, delimiter] [, ignoreEmptyElements]) and other list functions...
3. Attribute onnestedtransaction="ignore" for CFTRANSACTION because
"You cannot nest a cftransaction tag within another cftransaction tag..."
I only want a transaction if there is none around:
<CFTRANSACTION onnestedtransaction="error|ignore">...</CFTRANSACTION>
4. compare(arg1, arg2) for structs, arrays and even queries
result = 0: equal, 1: not equal, -1: same as 1 but with special meaning: arg2 extends arg1, having more keys/rows
5. CFARGUMENT
CFARGUMENT could have "list, separator and maxlength" from CFQUERYPARAM and "max, min, pattern" from CFPARAM...
and a new attribute that defines the argument as "called by reference"
(which is now for complex values only ...) or "called by value": <CFARGUMENT CALLBY="reference|value" ...>
6. Current tag nesting
A function like activeArguments("CFTRANSACTION") gives you a struct with currently active arguments for the tag
(empty if function is not nested inside). Especially helpfull in includes/custom tags where you don't know current
value of CFFORM (format?), CFSETTING (showdebugoutput?) among others
7. More string / list functions to complete the functionality
- Get the index of the (list) element at the Nth position of a string:
listIndex(string, pos [, delimiter])
listIndex("alpha,beta,gamma,delta", 13) = 3
listIndex("ColdFusion is great.", 13, " ") = 2
- Get the position of a specified index in a list/string
listIndexPos(list, entry number [, delimiter])
listIndexPos("aa,bb,cc,dd,ee", 3) = 7
listIndexPos("ColdFusion is great.", 2, " ") = 12
- listLeft(list, entry number), listRight(list, entry number), listMid(list, entry number, count)
2) Share and CoCoMo tags - cfShare docId="90707ad234" action="display", cfMeetingRoom
3) Speed ups, like in string handerling (use Java's StringBuffer under the hood).
It'll be a great feature to sell Coldfusion for medium and big teams.
<cfmail to="kevin@adobe.com" subject="Fix CF9 Attributes" attributeCollection=
<cfmail to="kevin@adobe.com" subject="Fix CF9 Attributes" attributeCollection=#application.mailOut#"> Now!</cfmail>
directly rather than through POI would be better.
1. support spell checking in the ColdFusion 8 rich text editor.
2. instead of using Verity search engine, I suggest cfsearch to be able to integrate other search utilities like Apache Lucene, IBM OmniFind, and perhaps Google Co-op.
3. new <cfcompare> tag to facilitate the data comparason over different data sources.
4. manage the URL mapping dynamically to a DB data field, which offer a better SEO-style URLs.
5. a new variable scope that leverage Flash Shared Object to store data objects in client's machine.
6. better support of OR-Mapping and DTO patterns, perhaps integrate the ColdSpring framework.
7. secure form submission with AES Encryption enabled.
8. native support drag and drop features in ColdFusion UI Components.
9. new <cftheme> tag to manage and switch web themes (defined by css) rapidly.
Steve P's comment comes closest to what the CF team are really looking for I think.
2. A greater capacity to remain within cfscript to run queries with queryparam() and query(){select * etc...} abilities. e4x in cfscript blocks would be brilliant, although so would a full implementation of AS3 :)
3. More database obfuscation for getting database properties so building scaffolding features or just finding out db properties can be a much easier exercise, working on any db type with the same code.
My 2 cents.
1. CFIMAP tag
2. Word/Excel-to-PDF using CFDocument
3. Drag-and-drop (for organization and reordering) of CFPOD and/or CFDIV tags - like Scriptaculous drag/drop
4. MUCH smaller JS files for Ajax features, CFForm scripts, and cfgrid scripts.
1. CFIMAP tag
2. Word/Excel-to-PDF using CFDocument
3. Drag-and-drop (for organization and reordering) of CFPOD and/or CFDIV tags - like Scriptaculous drag/drop
4. MUCH smaller JS files for Ajax features, CFForm scripts, and cfgrid scripts.
So I can do
<cfset myObject = new com.company.Image('C:\Path\name.png') />
For example
So the Image.cfc would have
<cffunction name="Image" access="public" returntype="component">
<cfargument name="name" required="true" />
... Some Code ...
<cfreturn this>
</cffunction>
Now if they introduce this, it will make a lot of people happy, it is making CF more OO and more consistant with other languages, and it would not break anything as existing code that was out there wouldn't use the new keyword and as such the common init method would still function
onServerStart(), onServerEnd() -- events to fire when the server start/ends
2) nested CFTRANSACTIONs - this is a pain point of mine!
3) Query-of-query enhancements to support more SQL/DML (esp INSERT, UPDATE, DELETE)
@Adam, cfcontinue is evil - it creates unstructured code. So does cfbreak to some extent.
C'mon folks, Jason's already said he's looking for high-level features not nit-picky little language syntax issues!
Darrin is closer to being on the ball here.
how about bringing more automated proesseses to web applications?
background:
http://brianchau.wordpress.com/2007/08/11/flash-vi...
we can now programatically work on image files. I can see a need to do the same for video
- directory watcher sees a new .avi file added
- process avi into various formats, inc flv
- generate JPG thumbnails
- load results into website, generate RSS feed
- record file info into database
sure this can be done manually but I'm after an automated process with an easy to use API.
oh, and inbuilt CoCoMo server for the enterprise version of CF9 as another feature..
CF can communication with humans using email, SMS and IM. All that's missing is telephone, and perhaps fax which can also be achieved using VoIP. There are so many applications where VoIP can be used, and since CF is so good at being the glue that binds so many technologies together it's odd that one of the oldest communications technologies isn't supported - telephone.
Come on Adobe, get your chops around that one! :-)
Adobe are working on VOIP technology - using Flash (of course) right at this moment - it's called Pacifica.
Having said that, I actually don't think VOIP is the right thing for CF (unlike Breeze-like Cocomo) simply because it's primarily peer-to-peer - I just can't see anything worthwhile with it for a server technology.
eh, my 2c.
Adobe Acrobat Connect / Connect Professional relies on Flash Media Server (or whatever it's called these days ;) which is an expensive server product in and of itself. CoCoMo is a client side set of Flex components to talk to an existing Connect server setup (either Enterprise or Hosted). You're not going to see that server setup as part of CF9 - Connect Enterprise (where you host it) is a six figure dollar cost. The whole point of CoCoMo is that any Flex developer will be able to use the CoCoMo components to build a *front* end collaborative application that leverages the massive hosted infrastructure the Adobe provides. It really has nothing to do with a server product like CF. FWIW, you can already drive the Connect system via XML APIs that can be manipulated from CF but that's pure backend stuff and nothing to do with CoCoMo. You are spot on with Pacifica being client only (again, a set of Flex components that will leverage Adobe hosted infrastructure to some extent but mostly operate as peer-to-peer, client-to-client).
Now, video transcoding... yes, I can see that as a set of tags and functions in CF at some point.
@ignite: why do you want CF to be open source? What would that buy you? Today, Adobe are able to provide deep cross-product integration because they can leverage proprietary technology components. It's not like the CF community could actually maintain and enhance a Java-based open source CFML engine - otherwise we'd see huge amounts of interest in Smith and an active community of CFers working on it. No, these constant calls for open sourcing CF are just a knee-jerk reaction to corporate ownership... After all, Allaire released Spectra as open source and the CF community didn't do anything with it - it pretty much just died. You don't want that to happen to ColdFusion itself do you?
* Pay by phone
* Information lines
* Surveys & polls
* Government & commercial message delivery
* Account info or balance tracking
* Hotlines and helpdesk
* Status reporting
* Web callback
* Price/stock enquiries
* Market research (I really hate those calls)
* Security checks / account activation verification
* Appointment/meeting reminders (dentists, doctors, corporate)
* Alerts
I already run commercial telephony apps but have to use other systems to achieve it. There is huge potential here for CF to muscle in and grown new tentacles. Most people here must be able to imagine how one of their apps/interests can benefit from something from the above list?
I can see your point and infact I saw something similar with doing things during a LiveCycle demo where you could - from accessing PDF - be able to connect with someone on staff with audio - and - video to help fill out some forms ("it looks like you're filling out one of our forms" says the bouncing Adobe paperclip...)
Audio is something special (I'm an ex-audio engineer so I'm biased). Most of what you suggest could be done with Flash Media Server or Connect/Breeze. For pure audio use best uses are:
as a radio replacement (broadcast)
as a telephone replacement (peer-to-peer)
@Sean, yes you're correct about me being greedy and wanting to roll FMS functionality with Flex componetary into CF9 enterprise. But this is for 2 reasons:
- I'm working on getting Connect in here. Part of that will be integration with existing CF systems: automatically saving the recording URL's into the CMS-based system, authentication and access, etc.
- my take so far on CoCoMo is that it's more than the Flex Componetary. To get a lot of the Connect functionality to work takes a lot of server tricks. It looks like Adobe are moving into hosted services with CoCoMo - the componetary is available but you'll be connecting to Adobe Connect rooms on an ASP model. That's briefly mentioned here http://blogs.adobe.com/collabmethods/2007/10/cocom...
(unless I musunderstood). Not exactly what I'm keen on...
Off topic: This is the first instance of CFBlog 5.9 I've used and it still has the IE6 bug where the textarea for comments always runs off the right-side of the page, even when my browser window is maximised to 1920x1200.
In other words, do not explicitly load url, form, session, client, application, server scopes into the CFC everytime a CFC is createted.
@David, what you're saying makes no sense at all: the scopes are *not* loaded into CFCs, they are just part of the variable lookup mechanism and it does not have a significant effect on performance. Can you *prove* otherwise?
and its still toooooo hard!
I want to do mail merge into PDF docs or better still Word
docs. Simple exercise like replacing bookmarks with text
from a query and being able to save and or rpint the result.
I know CFPDFFORM kind of does this but its not nice and
simple. I want to open a doc and replace the bookmarks
and have the doc reflow.
It would be so useful.
(I've been learning the hard way that some things a web language just shouldn't do ... horses for corses)
create = "yes, no"
name = "subDomainName"
delete = "yes, no"
nuff said. :)