MAX Attendee? You're now a Blackstone Beta Tester!

After picking up my official registration packet this morning, I went through the materials to see what goodies Macromedia had included this year. To my surprise, there was a nicely packaged CD labeled "The Future of ColdFusion - Blackstone Beta 2". So, it looks like all MAX attendees now have a copy of the Blackstone beta code.

It's going to be interesting to watch the reactions as people realize what they've gotten access to. I'm hoping to see a lot of excitement and energy around Blackstone at MAX this year. Expect me to blog a lot more about Blackstone over the next several days as more of what was previously covered under NDA becomes public.

Update: After actually opening the package, it looks like your access to the beta program requires you to first login to the Macromedia beta site and enter your email address (used to register for the conference). You are then given an access code to activate the beta. So, Blackstone beta 2 is not a completely open beta, but you do get to be a part of it!

That said, I'm guessing everything Blackstone is still NDA other than what Macromedia has already publicly released, and what will be demo'd at the general sessions and sneak peek sessions.

Macromedia DRK 9 Now Available

Looks like DRK 9 is now available. Highlights for ColdFusion include:

  • Amazon E-Commerce Services Remote Shopping Cart
  • Soundings Survey App
  • Alagad Image Component

CFCUnit Documentation Updated - How To Write A Unit Test

I'm not sure when Paul Kenney posted this, but I know a lot of people have been waiting for it... The CFCUnit web site has been updated with documentation on writing unit tests. If you aren't already writing unit tests for your CFCs, you should be. Paul's framework is the most complete I've seen for CF yet, and is definitely worth taking a look at. Now that there's documentation on how to write tests, there's no excuse!

Summary of Third Party CFC Documentation Tools

My team has been doing a lot of work with the Mach-II framework lately, and we're extremely heavy users of CFCs. On top of this, we're busy making sure our SDLC complies with the requirements of the Sarbanes Oxley Act. One of the areas of special interest is documentation. The nice thing about CFCs is that they are [relatively] self documenting, provided you populate the various cfcomponent, cffunction, and cfproperty tag attributes. While ColdFusion MX comes with two tools for examining the CFCs on your system. The CFC Explorer can be invoked by entering the URL to any CFC accessible via a URL on your server. In our case, the majority of our CFCs are NOT accessible via URL as they are located in a directory outside of our web root. In this case, you can use the Component Browser that comes with ColdFusion MX. This tool can be accessed like this:

http://localhost/cfide/componentutils/componentdoc.cfm

Using this tool, however, requires that you use either the RDS or CF Admin password to access the browser. This may or may not be an issue depending on your local setup and policies. In any case, the auto generated documentation created by the CFC Explorer and the Component Browser is identical. It's a good start, but there are an increasing number of third party tools that take the basic concepts in these tools and extend them. I'm going to share the three that I'm aware of and have used in various capacities to auto-generate documentation on my CFCs. If you are aware of other tools, let me know!

CFCRemoteDocumenter (Nathan Dintenfass)

CFC Explorer With Usage (Marcantonio da Silva)

CFC Documentation Tool (Spike Milligan)

Component Invoker & Browser (Brandon Purcell)

CFCDoc (Phil Cruz)

Two New CFCs Posted

Two new CFCs have been posted to the site in the past few weeks. Check out checkEquality by Qasim Rasheed and queryTool by Joe Rinehart on the CFC page.

Macromedia DRK 8 Now Available With DevNet Subscription

I didn't see an announcement on the Macromedia DevNet DRK site yet, but when I logged into my subscription tonight, DRK 8 was available for download. Here are the CF highlights incase you can't wait for the official release...

  • New forums application by Ray Camden
  • Assert API - Custom tags for adding special checks in your code.
  • WSDLerator - Tool for discovering and testing Web Services for use within ColdFusion.

Excellent Summary of Ben's Philly Blackstone Presentation

Darron Schall has the best summary I've seen so far of one of Ben Forta's Blackstone preview demos. You can read all about it on Darron's blog.

Paul Kenney Releases cfcUnit Testing Framework

By popular demand, Paul Kenney has provided an early release of his much awaited cfcUnit testing framework. It's basically a port of the jUnit framework and performs the same basic functionality.

If you aren't familiar with testing frameworks, or why you should be considering one, Paul provides a good explanation here (an excerpt from an article published by Christian Cantrell).

Right now, there's basic setup instructions, with more detailed documentation on writing test cases to follow soon. A big thanks to Paul for creating the suite - it's going to go a long way in making development and testing of CFC based applications easier for ColdFusion developers.

Now, if only someone would create a cfcUnit plugin for integration with the CFEclipse!

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.

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.