Version 3.4.0 Released

I've published a new version of the framework core. As with the previous versions, the PluginManager is now included in the core download (even though it's a separate project with its own SVN repository). The newest version adds a few very minor feature enhancements. The largest change is the removal of the Scriptaculous library, which has been replaced with a jQuery plugin in the PluginManager source directory. Also, the PluginManager index page now scans for and automatically expands new zip archives in the source directory.

See the release notes for additional feature info.

Getting back into things... sorry for being so jumpy!

Hey guys!

I've posted several blogs here in the past few days... and in retrospect I realize that I've been pretty knee-jerk about some issues I've encountered as I've started updating code for CF9.

I guess let me back up a bit here... a lot of you know that in 2008 I was diagnosed with Asperger Syndrome around the time I released the CacheBox framework (which I'm flattered to see has been downloaded quite a bit and I'm happy folks are enjoying it). :) Then in 2009 I moved from Boston back to Dallas TX where I grew up. I wasn't real sure what I was going to do professionally, but I wanted to move back to be near my kids who I'd unfortunately not been around for because I'd been chasing jobs around the country since my ex and I split up in late 2000. After getting back, Tiffany and I realized that my kids were in a really bad situation. Their mother was developing Alzheimer's disease and so the kids care was getting progressively worse. I won't get into the litany of things that were going wrong here, but suffice to say that I had to start stepping up and taking over care of the kids. Child Protective Services was involved and it wasn't until February last year (2011) that I finally got custody of my kids (which thankfully is now permanent). So I've been pretty busy with all of that and I'm now officially on disability.

A few weeks ago I got a server that I could use and I discovered that I can actually host it out of our rent-house. So since I had a license for CF9 that I got just before we moved back, I started setting it up to work on this other project I wanted to build.

The thing is I haven't done any serious programming work in a few years now and so I'm jumping back into CF9 a bit late... and I guess I'm out of practice and this past few days as I've been debugging the upgrades I've found myself pretty jumpy. So I'm gonna try to be less knee-jerk about things from now on. ;P And maybe I can get back to being the cool-headed developer I used to be. :)

Thanks guys!

Trace function improperly handled by ColdFusion 9

While the function probably works exactly the way you would expect, the code analyzer for CF9 doesn't produce an error (or even an "information") flag if you have a function in your code named "trace".

You can even create the function and the server won't throw an error like it's supposed to when it encounters this:

<cffunction name="trace" ...>...</cffunction>

Instead it will compile fine and then when you try to use the function you may or may not get an error message like "Attribute validation error for TRACE. The value of the VAR attribute is invalid. Cannot set variable with name [blah blah]".

This is about the 3rd or 4th time I've discovered unexpected and mostly undocumented changes in behavior in CF9 or 9.0.1. Does anyone else feel like the release of this version of CF was a bit sloppy or is it just me?

(not so) massive problem with Query of Query in ColdFusion 9.0.1

Sorry for this... I've had a closer look at all the code and calmed down a bit and realized actually that the core CacheBox framework service had already been rewritten (years ago) to store content in a structure. So this problem turned out to be isolated to the agent CFC and only if the service wasn't installed. So updating the code for the agent to work the same way as the service seems to have resolved the issue.

I'm going to try not to be so jumpy from now on. ;P

----------

OH CRAP! THIS IS A GIANT PROBLEM!

ColdFusion 9.0.1 changed the behavior of Query of Queries and appears to have eliminated the ability to select from ANY query containing non-simple values... like we did just fine in ColdFusion 8.

Here's some code...

<cfset test = QueryNew("") />
<cfset QueryAddColumn(test,"columna",['a','b','c']) />
<cfset QueryAddColumn(test,"columnb",[1,2,3]) />
<cfdump var="#test#" />

<cfquery name="test2" dbtype="query">
   select * from test
   where columna = <cfqueryparam value="b" cfsqltype="cf_sql_varchar">
</cfquery>
<cfdump var="#test2#" />

This works fine on both CF8 and CF9.

Now we make one small tweak and add a complex value in columnb and it continues to work on CF8, but fails completely on CF9 with the message "complex objects cannot be converted to simple values".

<cfset myStruct = {a=1, b=2} />

<cfset test = QueryNew("") />
<cfset QueryAddColumn(test,"columna",['a','b','c']) />
<cfset QueryAddColumn(test,"columnb",[1,myStruct,3]) />
<cfdump var="#test#" />

<cfquery name="test2" dbtype="query">
   select * from test
   where columna = <cfqueryparam value="b" cfsqltype="cf_sql_varchar">
</cfquery>
<cfdump var="#test2#" />

Building the query isn't the problem -- that works fine in both cases -- there's nothing wrong with HAVING complex values in queries... and in CF8 as long as you didn't try to perform comparison operations against them, you could use a query-of-query to select those rows.

But on CF9, the presence of any non-simple value (it seems to be anywhere) in a query-of-query causes it to fail completely... even if I'm not selecting the rows where the structure is located, it still fails. And WHY WOULD IT? What's special about selecting a value in columnA that FORCES it to check the entire columnB column to make sure that every value is simple?! Doesn't that even run contrary to the logic that the query-of-query shouldn't constraint columnB unless it needs to?

This is HUGE because the entire CacheBox framework completely DEPENDS on query-of-query functionality that we had in CF8 and appear to have lost in CF9!

Damnit! I have no idea how to move forward from here...

If you've got a non-updated copy of CF9 (before the 9.0.1 update) it would be nice if you could run this code and see if it works there. I'd like to know if this happened in 9 or 9.0.1. Thanks.

ColdFusion 9 Point Release

I've just updated the core framework for CF9 and uploaded a new zip. There's been minimal testing on CF9 yet. I fixed a couple of obvious problems (functions with names that match new native function names) and I ran the code analyzer in the CFIDE. Oh and I fixed the issue with the undocumented behavior change with OnRequestEnd I mentioned in the last blog. Of course, if you have any problems let me know and/or submit them to the bugbase.

Thanks!

OnRequestEnd behavior changed in CF9 (was Request Variable Bug in ColdFusion 9)

Here's a weird one. I haven't had any luck finding any information about this on Google, so I'm wondering if any of you have seen this before?

I've got a CFC in the request scope and then in the onRequestEnd event I grab that CFC out of the request scope and do some end-of-request stuff with it. The problem is I can't reference the variable in my onRequestEnd event because it produces an error that says it's not defined in the scope... but here's where it gets really weird and why I KNOW this is a bug (it's not just a suspicion)... If I DUMP the variable, the cfdump tag successfully displays the CFC and all its stuff... and then produces the same "is undefined in scope" error. Here's a screen-capture.

So... anybody seen this before? 'Cause I'm totally stumped. I've already installed the 9.0.1 updater and both of the cumulative hot fixes.

p.s. Yeah, I know it says OnRequestEnd.cfm, but this is actually inside the Application.cfc onRequestEnd method -- it's a legacy from the framework dating back originally to CF5, just go with it. ;P


Okay, it just got weirder... I tried using evaluate() to set it to a local variable, which apparently works because then I dump the local variable and the dump still works even though it's now on line 2 AFTER line 1 where the error is still occurring.


EDIT: Here's the code from the Application.cfc that includes the file where the error occurs:

<cffunction name="onRequestEnd" access="public" output="true">
<cfinclude template="OnRequestEnd.cfm">
</cffunction>

It appears to have something to do with the combination of the method and the include file.

It still fails if I execute the method in the onRequestStart like this:

<cffunction name="onRequestStart" access="public" output="true">
<cfset onRequestEnd() />
</cffunction>

But it works fine if I include the file in onRequestStart like this.

<cffunction name="onRequestStart" access="public" output="true">
<cfinclude template="OnRequestEnd.cfm">
</cffunction>

HOWEVER! There's obviously more to this because I can't create a simple test case. If I create a new project with a very simple application.cfc in it and replicate all these details, it works fine. So there's something else in the framework that's contributing to it beyond just the method names and file names.

And the file name doesn't seem to actually contribute, since it still fails in the same way if I change the name of the file like this:

<cffunction name="onRequestEnd" access="public" output="true">
<cfinclude template="reqend.cfm">
</cffunction>

Okay it has nothing to do with the file... well it does, but not with the file name... At the bottom of the onRequestEnd.cfm is this code

<!--- this seems to help resolve a leaky-memory issue in CF/JRun --->
<cfset structClear(variables) />
<cfset structClear(request) />
<cfabort />

If I comment out those StructClear statements, then the error goes away, which told me that it was executing the OnRequestEnd.cfm twice... and I THINK that means that CF9 changed the behavior of the CFABORT tag and it now executes the onRequestEnd event when the tag is used... it didn't in previous versions of cf...

I didn't find documentation of this, but I did find this blog from Ben Nadel that mentions it also occurring with CFLOCATION, so it seems to be more generally about the onRequestEnd event. It seems now in CF9, no matter how a page finishes executing, the onRequestEnd event is executed at the end... That's a change from all the previous versions and so it mucks with code I had created in order to actually cause this to happen on previous versions. Since I was causing execution of the onRequestEnd and then aborting the page early, CF now executes the onRequestEnd, aborts and then executes the onRequestEnd again because of the abort. (I tested to see if this happens with an OnRequestEnd.cfm and it doesn't -- it's just the Application.cfc method.)

Luckily, this fairly simple bit of code at the top of the template seems to fix the problem:

<cfif structIsEmpty(request)>
   <cfexit method="exittemplate" />
</cfif>

Seeking a New Home for the onTap framework website

Hi guys.

A while ago, Brian Meloche turned me on to the folks at HostMySite.com (now Hosting.com) because they were helping out in the community with some free accounts for hosting open-source projects and they agreed to set me up a free account for the onTap framework. I then put the DataFaucet site on that same account... apparently something happened (I'm not real sure what) and the account was closed a few months ago. I suspect it was a clerical issue, because I never got a notification about it being closed (although I did get a bill that I was told by their support staff to ignore).

This is by no means a complaint about HostMySite.com - I was actually very happy with them in general and would definitely recommend them in the future.

This does however change things for me a bit and I'd like to see if I can find a place to home those open-source project sites where I'd have a more one-on-one kind of relationship with whoever is hosting them. So if any of you have some extra space where I could set up these sites (and the AutLabs project site -- creating jobs for people with Autism and Asperger Syndrome), I'd be mighty grateful. :D

All three of them are low-traffic sites, so they shouldn't have much impact on your server.

Here are the RIAForge Projects for them:

And at some point I may also want to get domains and create official project sites for CacheBox and FreeAgent, but probably not right away.

Thanks! :D

Oooops!! Collaboration Chat II Recording

We've got some good news and some bad news.

The good news is that even on 24-hrs notice, we can easily get a dozen folks in one of these chat sessions to talk about improving collaboration within the CF community. Sean Corfield turned out, Henry Ho(?), KymK, Jason Dean, Oguz Demirkap, Dennis Clark, AJ Mercer and a few others. And there was a very enthusiastic discussion of collaboration and open-source.

The bad news is that we had some technical difficulties on this chat. Apparently just as I switched the Connect presentation to sharing mode to demo the early beta version of FreeAgent, it popped off the talk button. So although there's video of some screens of me showing the sample app and the code, for about 10 minutes, there's no audio to go with it, so that may not be very helpful. If anyone mentioned it while I was sharing I didn't see, because I still only have one monitor currently. And then I talked to everyone for an hour and nobody could hear me and I just never noticed that the talk button had popped off. Oooops! So because of that I think the conversation derailed starting about the time I started demoing the FreeAgent beta and although it was a very lively discussion, we didn't cover some of the specific topics I wanted to cover and some questions folks have about FreeAgent didn't get answered.

So on the balance of it all, I'll be holding another collaboration chat soon and keeping a closer eye on that talk button, so that I can correct the problems we ran into this time. :) It probably will be some time next week.

If you're interested in seeing the transcript of the discussion however, with commentary about how collaboration and open-source in the CF community differs from the PHP and Rails community, etc. (which actually is some interesting discussion), here's the recording of this just held session:

http://experts.na3.acrobat.com/p66907015/

Thanks to everyone for coming and sharing your views. I actually did enjoy the discussion despite the technical problems, and I'm really glad to see everyone's enthusiasm for the subject of collaboration. :)

Collaboration Chat - the Sequel

Tomorrow, Tuesday around 6pm Central I plan to open up the CF Community Collaboration Chat room again for another session. This is an informal discussion of tools and techniques for improving collaboration within the ColdFusion community and encouraging integration between various open-source (and/or commercial) projects.

http://experts.na3.acrobat.com/collab/

In the weeks since the first chat, we've made good progress on the FreeAgent project, which is designed as a system for creating applications that can be easily installed into any of the MVC frameworks for ColdFusion. I'll talk a bit about what we're doing with this project, and probably show some code and I hope as well that some of you will bring your thoughts, tips, tools and techniques that you've used to create integration between projects. Or even just your thoughts on the subject, since this isn't something we see much in the community yet. :)

Had a great time last time, and although I know this is short notice, I expect to have a good fun session this time as well. :)

See you there!

Collaboration Chat Recording

I'm new to hosting discussions with Adobe Connect. ;) And it's taken me a little bit to figure out how to find the recording URL for the collaboration discussion we had the other day.

For an informal chat on relatively short notice, I think we had a good turnout and I really enjoyed the discussion. :) Sean Corfield dropped in briefly while at a cat show in So Cal, Andy Scott, Dominic Watson and several others.

Here is the recording of our chat:

https://admin.na3.acrobat.com/_a204547676/p30824199/

I don't hear any problems with the audio in particular on this recording. I was listening over it and Tiffany said that there's a whistling on the recording that made it rather difficult for her to listen to. I don't hear it. I don't know why. Sean Corfield had showed up briefly and also mentioned a whistling sound during the chat, so maybe he was hearing the same thing. I wish I knew what it was.

I also discovered a small bug(?) in the Connect login. The login URL I was given for my account was https://admin.na3.acrobat.com/system/login but I was having problems being unable to log in at that URL. I ended up having to use the "forgot password" feature several times, but the problem wasn't that I'd forgotten it. I would get the reset password URL in my email, go reset the password, and then log in fine, but then I would log out and be unable to log back in. It turns out that when I went directly from the reset-password page to the login, it added a URL parameter to the login url of ?next=/ so the full URL was https://admin.na3.acrobat.com/system/login?next=/ and without that URL parameter, it would never let me log in. But that's not the URL I was given in the original email when my account was set up. Hopefully that will be helpful to someone else who might be having the same problem.

Community Collaboration Chat

I have an active interest in collaboration within the ColdFusion community, particularly between projects. On Sunday, I'd like to talk about ways that we can foster more integration between various projects.

For example, there's Mango Blog that Laura Arguello did an excellent job with, there's Ray Camden's Galleon Forums and there's Codex Wiki written in ColdBox and Transfer. And I might like to run all of these, but they're written on different frameworks (or no framework) and generally built as stand-alone apps. So how do I integrate these seamlessly into a single website or extranet, without having to make wholesale changes to the code that would make upgrading later a major challenge?

Some of us have already done some work in this arena. For example, Laura did an excellent job with Mango Blog in creating a delegated login option. But these great innovative integration features aren't widely known and for many challenges it seems that none exist at least in common usage within the community.

This chat is an open invitation for anyone in the community who's interested in improving collaboration between projects, to discuss the projects we've worked on, the challenges we've faced and solutions we've created or potential solutions we'd like to see.

I hope you'll join us. :)

Time: 3PM CST Sunday, Nov 15th (1PM Pacific, 4PM Eastern)

More Entries

BlogCFC was created by Raymond Camden. This blog is running version 5.5.006. | Protected by Akismet | Blog with WordPress