My Blackstone Wish List: 10 Things To Add or Fix in ColdFusion MX
As more information is slowly starting to be spread by Macromedia about the next version of ColdFusion, AKA Blackstone, I think it’s important for the community to give feedback to Macromedia about the features and changes we’d like to see in the next version. I’ve posted most of these to the wishlist before, but perhaps by sharing my wishes, others will also find them interesting and/or useful and will request them as well.
I don’t necessarily work on traditional web applications at my day job, so perhaps I have some drastically different needs than the majority of the people out there using ColdFusion. However, these are items which hold back the ability for me to deliver successful products for my company using ColdFusion. Granted, several of these have work around if I want to do them directly in Java, but it’s a much better solution to just have them as a part of CFML.
Anyhow, here is my list, in no particular order except the first item:
1.) Threading
Threading is easily at the top of my list. I’m not sure how many people out there in CF land actually need this functionality, but right now it’s a huge thorn in my side. Unfortunately it’s currently a show stopper for me in many of the products I work on currently, and it’s starting to look more and more like something which could eventually lead to us needing to switch web development platforms because we really need this to get a major boost in performance in our complex products.
I’ve came-up with a couple of methods to get around this shortcoming which we’ve collectively refined more at work, but have yet to try it out in a production environment. I’ll post more about it at a later date if we find it to be feasible, though admittedly it’s just a hack. I think ColdFusion really needs threading support.
2.) Image Manipulation Tags/Functions
I would almost bet money on this being in the next release of CF, but I thought I’d add it anyhow.
3.) Export to PDF/FlashPaper
See above, though I believe I read that this was already shown at a Blackstone presentation at the MXDU Conference.
4.) CFC Enhancements
I’m very far from an OOP guru, however, there are quite a few things that just don’t make sense to me in the way which CFC’s handle inheritance in comparison to other OO Languages such as Java and Python. I’d imagine there will be quite a few improvements to them after many in the CF Community have voiced similar opinions about CFC’s. They’re a good start, and I’m glad they’re here, but they need some help.
5.) CFHTTP Performance Increase
I doubt much of anyone has noticed, but when using CFHTTP in an operation such as spidering a site, it is very, very slow in comparison to CF 5. Unfortunately I don’t really have anywhere to stick CF 5 at the moment to do a scientific comparison and post the results, but it’s really a huge difference. Although, I must say I am happy about all of the extended CFHTTP functionality as of 6.1. Previously, it was one of a few tags in CFML which I felt was way too abstracted and inflexible.
6.) Full functional support for GZip and PK/WinZip (compressed) files
I’m assuming this is something that we’ll see in Blackstone as well since it should be really easy for them to implement using existing Java libraries, but we’ll see.
7.) Support for a True Escape Character
One other thing that has always driven me crazy about CFML is that it doesn’t have a true escape character. In most languages, you can escape characters by putting a backslash in front of them, but you can only escape hash’s (also known as pound signs for those of you unaware that a pound sign is for British currency) in CFML.
For instance, you could pass strings which looked like these without CF choking if there were an escape character available:
<cfset aString = ""No, you're the quote!", exclaimed Jack" />
<cfset theColors = 'red's' />
Wouldn’t that be nice? This would be particularly useful when needing to pass quoted strings to a complex DAO. Of course I would hope there would be an associated function to automatically escape all escapable characters in a given string (or of course I could just write a UDF to do that, but eh.).
8.) Stronger, Industry Standard Encryption for CFENCRYPT
It would make me very, very happy if Macromedia integrated industry standard encryption into CFML (preferably at least AES). It’s definitely a huge pain that the only way to get decent encryption in CFML is to buy 3rd party software and license it / install it on all development, staging, and production servers.
I really have no idea how many people out there rely on encryption for day to day operations in the CF world, but it’s quite important for my current role.
9.) Better Webservices Support
This topic has been beat into the ground, and actually a couple of the bugs I submitted during the RedSky beta have been fixed regarding webservices compatibility. However, if you are returning anything other than a simple string every time in your CFMX webservice, you’ll run into a lot of problems. Especially if you understand SOAP down to a detailed level and want to return custom SOAP faults, or complex data types (such as array’s of structures) to non-CFMX SOAP Clients.
10. Improved Support for Whitespace Suppression
Something that bothers me about using whitespace suppression is that it doesn’t quite work as you think it should, such as when wrapping a <cfprocessingdirective> tag around an output block like so:
<cfprocessingdirective suppresswhitespace="true">
<cfoutput>#Request.Content#</cfoutput>
</cfprocessingdirective>
If the contents of a variable which you are outputting within a cfprocessingdirective tag contains extraneous whitespace such as extra line breaks, etc., the cfprocessingdirective does not make any noticeable change to the text in the above scenario. This particularly bothers me when working with layout templates such as in Fusebox 4 and Mach-II.
No language is perfect, and I think ColdFusion has came a long way over the years, but with these fixes and additions, I can’t imagine myself needing another language (other than integrating the occasional Java code) when developing web applications. Well, at least until I run into another one of those “interesting” puzzles you sometimes encounter when writing software. Hopefully someone out there finds these as constructive and useful suggestions.
:: Edit @ 3/7/2004 11:49PM ::
One last thing I forgot– support in cffile to read/edit/delete files line by line rather than having to load the whole file in memory, as well as associated functions to tell you what line you are currently on in a file, etc.
March 25th, 2004 at 2:59 pm
You’re not opposed to “integrating the occasional Java code” - yet you ask for changes to the encryption. Read up on the javax.crypto package, and you’ll find all the security anything you need.
May 2nd, 2004 at 2:42 am
Would you be so kind to share your results on thriding?
May 2nd, 2004 at 7:35 pm
I’ll go over your whole top 10 and comment or ask for more info:
1. Threading - I’ve seen a couple of requests for this but I’ve not found a need for it myself so I’m curious as to what problems this is a “blocker” for?
2. Image manipulation - there’s some good Java CFX tags and some 3rd-party CFCs that wrap Java so I don’t think this is a high-priority issue for the core product. I agree it would be a nice addition.
3. Export to PDF / FlashPaper - as you noted, PDF generation has already been previewed for Blackstone. FlashPaper would be a sensible and obvious option too.
4. CFC enhancements - I’d like to see interfaces since their absence is hard to work around. I’d like to see constructors but the work around is easier (init() method). Other than that, I think they should be left alone. Overloading and all that stuff really has no place in CF.
5. CFHTTP performance - I’d like to see a CF5 / CFMX6.1 comparison. I’ve done a lot of CFHTTP stuff in 6.1 and it seems fine to me.
6. ZIP support - again, easy CFC wrappers for Java integration abound so this doesn’t seem high-profile for the core product (I agree it would be nice though).
7. True escape character - you just double-up to escape a character “”"No, you’re the quote!”" exclaimed JacK” so I don’t feel ” is necessary. You’re second example doesn’t need it either: “red’s”.
8. Stronger encryption - as ecd observed, a little bit of Java and you have everything you need. Yes, would be nice to see in the core product too.
9. Better webservices - relies on Axis so CFMX can never be better than the latest version of Axis available around each launch (6.1 updated Axis and improved things dramatically so if Axis revs before Blackstone launches…).
10. Better whitespace - an aged-old battle and I agree something better would be nice.
So, generally good points. There’s a lot in Blackstone (based on what’s been previewed so far at the conferences etc). Ben Forta is touring in the Summer so make sure you get to one or more of his CFUG presentations!
May 2nd, 2004 at 11:03 pm
Thanks for stopping by, Sean.
I should of prefaced my entry by saying that there are certainly ways to get around several of these issues, however, they aren’t as seamless as they are in other languages. I’m someone who likes to simplify software as much as possible instead of having external dependencies which can be critical points of failure.
Throw all kinds of 3rd party dependencies into your software when you’re clustering, and it’s neither fun nor easy to troubleshoot intermittent problems when managing a couple dozen websites.
Also, by putting said items into the CF core itself, it would inherently be supported by Macromedia. That sort of thing make’s the PHB’s a little more comfy, and gives you a little more ammo when someone is comparing CF to some other language that already has all of these things built-in.
That said, here are my responses to your points which deem a response:
1.) I work in an environment which has lots of very, very large databases which use a database product called Omnidex. Essentially it’s a database server which works with flat files– our DB’s are so big (around 2 TB total) that it takes way too much horsepower to maintain them in a different format (at least for a company of our size). Given that, on average it takes a range of 1200ms-2000ms to return a query from one of these databases, and on a given request, we might need to search 6-10 of them with varying follow-up queries depending on what data was returned from the first set of queries.
For someone waiting for all of this to happen, it can easily get into the 30-45 second range on the client side just sitting there waiting for the results to pop-back, though we are using a lot of flushing to the screen to let them know the search hasn’t died. Although the DB product is slow, it’s very scaleable, and could easily handle more queries at a time. If we were able to thread the queries to run several at a time rather than serially run them one at a time, the reports we are compiling would return much faster. Our competition is able to do this much faster than us, and it’s really getting to be a bad thing.
One option we are somewhat exploring is rewriting the DAO in pure Java to take advantage of threading, but we really don’t want to do this as we’ve already spent the past year rewriting all of our core CF software which has been a big, painful, ongoing task.
5.) I wish I had a box around here to test this with, but in general, my observation has been that it’s a lot slower if you are opening-up multiple cfhttp calls in a row. You will probably not notice it at all unless your application is doing more than a few cfhttp calls in one page.
The speed difference is really quite shocking if you compare them. You might be able to replicate what I’ve seen by looping a cfhttp to a server not located locally and comparing the two times of the execution scripts?
A good example of the use of cfhttp in this manner would be an application doing a whole slew of cfhttp calls to check and see if various RDF’s/Atom feeds had been updated.
7.) I could of used better, specific examples of this, but perhaps there is something different/better I could be doing when I come across the escape character problem.
9.) Yep, I totally understand the dependency on AXIS. Admittedly I probably have a bit of a textbook slant to my view of webservices after rolling my own SOAP Server in CF 5 a while back, but hopefully it will get there someday.
May 2nd, 2004 at 11:14 pm
Ed,
As far as the threading hack goes, it only works for me because I’m able to write to the database with the spawned threads, and then read back those results later from the database (but not with the parent thread). In otherwords, don’t expect what you want to thread to show-up or be used on the same page that you thread it from.
If something like that still sounds useful, I’ll try to write-up something soon.
At work we mostly develop things which do not fall into your typical website/e-commerce/portal realm, so it may not be helpful to most people and productive for me to spend the time to write out some code samples and so forth. But if it is, let me know!
May 3rd, 2004 at 8:46 am
Brandon, I’d just like to point out that BlueDragon has specifically addressed two of your concerns already (we added a CFIMAGE tag a couple releases ago, and our CFPROCESSINGDIRECTIVE works as you’d expect). And has been noted, most of the others can be enabled by reaching down into Java via CFOBJECT, which you can of course do in BlueDragon as well. And just as we did CFIMAGE to save you that hassle, I could see us doing the same for several of the others. I’ll add all these things to the BlueDragon feature request list (anyone can add to it via the self-help area of our site.)
May 7th, 2004 at 7:40 pm
Re: number 2 on your list, image manipulation.
I recently rediscovered the tmt_java_img CFC by Massimo Foti.
http://www.cfmentor.com/code/index.cfm?action=zipped&id=50
Within 10 minutes of downloading I was resizing images to my will on a $2/month shared server. The catch is you need to be running CFMX 6.1.
I would still like to see better tools available but this is a great solution for those on shared servers.
July 23rd, 2006 at 7:08 pm
[...] A couple of years ago I posted a CFMX 7 wishlist of which most of the things were implemented. Given that CFMX 8 seems to be in heads-down full-development mode at the moment, I thought I’d post a list of things which can be improved from my perspective. In general I find myself using ColdFusion for things beyond e-commerce, marketing sites, etc, so I realize my desires and needs are probably outside the typical ColdFusion developer, but these are things which would help me a lot nonetheless. As I was typing this, I noticed that Simon just posted a list too– ironic. [...]