Viewing By Month : May 2004 / Main
May 21, 2004
Blackstoned - O'Reilly Drops ColdFusion MX Title
With all the current buzz over Blackstone (the next version of ColdFusio MX), I decided to shoot an email over to my editor at O'Reilly to gauge their interest in having me write the 3rd edition of my book Programming ColdFusion MX.

Well, I heard back from him today, and it looks like they are going to pass on a new edition. I'd like to say that I was crushed by their decision, but honestly, I'm a little relieved. It was hard work turning out two books over the past few years, each as the sole author while maintaining a full-time job, National Guard service, and a marriage (maybe a bit of a social life too). The first edition of my book ended up selling about 9,000 copies after the majority of the returns were in. Given that an author pulls in 10% of what the publisher sells the book to retailers for, this translated to apprx $2 a copy. Do the math and $18k looks like a nice bit of pocket change - until you also realize that the taxes on that come to apprx 40%. Then take the 1500+ hours I put into the first edition and you can see it didn't amount to much more than minimum wage! I'm fine with that, though, as I didn't write the first edition to make money. I wrote it because I used ColdFusion every day, and I loved sharing my enthusiasm for web application development with CF.

When O'Reilly asked me to write the 2nd edition for CF MX, I was a little hesitant because of the amount of time it took to do the first edition (almost 2 years). I relented and managed to squeeze it out after the 6.1 release after investing about 1000 hours (yes, I'm rounding a bit). It was a fairly major rewrite as CFMX was a huge improvement over CF 5. Lots of new features and revisions added about 250 pages to the book, bringing it in at around 1100 pages.

That brings me to today. Programming ColdFusion MX, 2nd. edition is the second best selling ColdFusion MX book (at the register as it goes), behind Ben's CFMX WACK. Given that it's only sold around 5,000 copies or so in the past year, that's pretty sad, and I can see why O'Reilly isn't interested in doing a third edition. It isn't that the book isn't good (it's gotten many positive reviews), and I realize that the market for technical books is saturated and not in the best of shape, I guess I'm just a little sad (not bitter) that the ColdFusion community is losing the backing of O'Reilly given their reputation in the technical community. I always felt that having an O'Reilly book for a particular technology (even if I weren't the author) put some weight behind it.

So, it's on this note that I'd like to thank all of you who have purchased and read my book. I've recieved many kind emails over the years and have enjoyed corresponding with each and every one of you. I'd also like to take this opportunity to urge all ColdFusion developers to support the other authors of ColdFusion books out there. If we really want ColdFusion adoption to continue to spread, there has to be good material available for the developers who want to learn it.

May 12, 2004
My Blackstone Wishlist
I know several people have already blogged CF MX 7 (Blackstone) feature requests, but I figured I'd share the list of features I've been compiling. This list represents enhancements that I along with many other developers have been asking for, some of them going back several versions of CF. I've submitted this entire list to Macromedia, but I wanted to see what others out there think. I realize that some are much more doable than others, and that some of my requests fall within the category of "niche" feature, but I thought I would share nonetheless:
  1. tag for spawning multiple threads for asynch processing
  2. As mentioned by others, event based session/application/server functions: onSessionStart(), onSessionEnd(), onApplicationStart(), onApplicationEnd(), onServerStart() and onServerEnd(). Along these lines, I'd like to see an XML based config file that runs when the server is restarted. This XML file could contain info on queries to automatically run and default variables to be assigned for the server/applications
  3. Add functions to programmatically list all current sessions/applications on a server (without the Java workarounds we're currently using). Include info such as when the session/application was started, how long until expiration and whether or not it has already expired. Examples are getSessions(), getClients(), getApplications(), getSession(), getApplication(), etc
  4. Enhance the CF Scheduler so that it can operate in a cluster. I want to synchronize events between servers in a cluster so that you can setup a scheduled task on any server, and it would replicate out to all the other servers (similar to the buddy server concept), but the event would only fire on a single server, not on all of them at once
  5. Further enhance the cf scheduler to use its own thread count (as opposed to the one that's defined in the CF Admin now). This would allow the scheduler to use a different threading model than "active" applications on the server
  6. Add interfaces to CFCs
  7. cfconstructor tag for use in CFCs and deprecate the pseudo constructor area
  8. Deprecate cfscript and add ActionScript 2.0 support. You could easily do this by adding a new attribute called "language" to the cfscript tag where language="actionscript" or something like that. This way, existing cfscript would continue to work
  9. Overloading for functions and CFCs
  10. Mechanism for dealing with name conflicts (overriding) with native CF functions/tags in order to future proof. So, if I already have a UDF called wrap(), upgrading my version of CF won't break my app when CF get's its own wrap() function
  11. Build stronger partnerships with companies like IBM, Actuate, etc to get support for CF into their products
  12. Make CF's security framework more granular. I always need an additional level of security beyond roles. How about groups, roles, and permissions. While you are at it, give us a way to programatically get a list of users currently logged in, their roles/permissions, etc
  13. Add IMAP, NNTP, and SMTP tags
  14. Functions/tags for image manipulation
  15. Tags/functions for manipulating PDF. I saw the Max preview and was impressed with the cfdocument tag. I think this is a good start. I think for the report type, you also want to add Flash Paper in addition to HTML and PDF. Excel would rock.
  16. Since there is already support for Crystal Reports via cfreport, I'd like to see integration with Actuate too. It's J2EE based, so I would think that there are several integration points possible here.
  17. Add the Lotus Notes JDBC driver, free from IBM to the list of native drivers
  18. Tags/functions for dealing with Zip files
  19. Fix reFind() and reFindNoCase() to return the positions for all matched subexpressions
  20. Spell check tag
  21. Wrap up all hot fix in a Zero G installer so that they can easily be backed out. Also, when a hotfix is applied, log it in a server var available in the CF Admin so that an admin can tell what hot fixes have been applied
  22. JDO support if you can think of a way to do this
  23. Add a TRACE attribute to CFQUERY for debugging so that we can see what CF is doing with the underlying JDBC driver. Most drivers have a trace capability that can be logged to a text file, but I'd like to see what's happening from a CF's perspective so I can see exactly what calls to my drivers it is making
  24. Scrap the JS validation in CFFORM and implement the qForms JS API from PengoWorks. It's much more powerful, flexible, and extensible and works very well with CF.
  25. Add XMLDoc as a return types for methods in CFCs. Right now, you can't return a CF XML Document from a CFC as a native type
  26. Add an interface to the CF Admin to allow me to "reset" a datasource without having to restart the CF server. Right now, several of my iSeries DB2 data sources (JTOpen driver) occasionally hang. The rest of the CF server is fine as are the rest of my data sources. In order to free the hung data source, I have to restart my CF Application Server service. I would rather kill the connection to the hung data source and restart it (if that's how it works) without having to restart the server. It would be even better if I could to this programmatically, so I could call it from a cfcatch block if I detected the specific error a hang causes
  27. cfsocket tag (like in DRK5)
  28. Better caching than cfcache provides. See Brandon Purcel's CF_Accelerate. Not sure if you could replace cfcache with this or if it would be a new tag.
  29. In the CF Admin (and programmatically), give us a way to see and admin (expire) cached queries.
  30. Allow for mappings on an application level so that mappings defined in the CF Admin can apply to either the entire server, or a specific application.
  31. More metadata in the cfquery result set. I'd like to see the size (bytes) of the returned record set, column types, etc
  32. Official framework for unit testing CFCs
  33. Support for portlets as outlined in JSR 168 and JSR 170. I'd really like to see the ability to create a portlet in CFML, then have CF generate a WAR file for the portlet that can be deployed to any compliant portal server.
  34. Make the cfproperty tag actually define properties for CFCs as opposed to just for web services and meta data.
  35. Allow parameters for the JDBC URL to be passed dynamically at run time if possible. For example, right now, if I want to add an extra parameter to my data source just for testing, I can't do it from the cfquery tag. I have to go in and make the change in the CF Admin, and then change it back later if I want to "undo" it.
  36. Add XML validation against a DTD
  37. Integrate with JMS
  38. Allow sorting scheduled tasks within the CF Admin alphabetically by name, or time (interval). I have a server with 600+ scheduled tasks, and I'd like to group by time so I can tell whether I need to move any to a different time to avoid using too many of my server's available threads.
  39. Within a CFC method (and a UDF), allow us to VAR variables anywhere, not just at the beginning of the method. I often need to var a variable with a value that is dependant upon another condition (such as a conditional based on an argument being passed in). Because I have to var before any other cfml statements, I first have to var the variable and set it to empty (var=""), then do the conditional later. I'd like to see VAR implemented like in JavaScript. It would be great to var a loop variable inline, as opposed to at the top of the page for example
  40. Make the installer for deploying multiple instances of CFMX easier
  41. Make it possible to deploy a "clone" of an existing instance of a CFMX deployment right from within the CF Admin of that instance. Similar to your archive and deploy, but have the deploy actually create the new instance and then clone the original
  42. Make it easier to tie a different jvm classpath to each instance of CFMX when using multiple instances.


Join The CFCDev Mailing List
If you are interested in ColdFusion Components (CFCs), and aren't already a member, you might consider joinging the CFCDev mailing list. This moderately trafficed list (avg 35 posts per day) currently has 601 subscribers of varying skill levels. Topics tend toward more advanced subjects, but all discussion related to CFCs is welcome.