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)

Mango Blog Plugin 1.0 beta Released

Okay! There's finally a working plugin for Mango Blog. :)

It did take a bit longer to get this done than I'd hoped, but I'm glad to have a first release available.

It's on the webservice for plugins, so if you've already downloaded a copy of the onTap framework, just go to your Plugin Manager, select the "more" tab and type "mango" into the search form. From there press the install button and it will walk you through the rest of the installation. This version uses the Members onTap user/security plugin to manage users, roles and permissions, instead of the Mango Blog user system. So if you haven't already installed Members onTap, it will walk you through that first (including the DataFaucet installation it needs).

[More]

Mango Blog

Over the course of the past week I've been working on a new onTap framework plugin that will download and install Mango Blog into an onTap framework application.

[More]

CacheBox Presentation Recording

We had a great time with today's presentation of the new CacheBox framework!

We had an even dozen show up and a pleasant surprise at the end. There's a poll at the end of these ColdFusionMeetup.com presentations so the people who attended can anonymously rate the presentation. It asks "was this information useful?" and the options range from 1-star (it was a waste of time) to 5-stars (yes, very much). In this case 50%, an even half of the guys who came gave me 5 stars. So I feel really good about the presentation. :) There is certainly still room for improvement in my presentation skills, but I think this is great progress.

I've also used some of the feedback from this presentation and updated the intro to the documentation for the CacheBox project to clarify the benefits of using it.

Here's the presentation recording for anyone who missed it: https://admin.na3.acrobat.com/_a204547676/p26212200/

CacheBox Presentation

The latest version of the onTap framework includes integration of the new CacheBox project, the hot-swappable caching framework for ColdFusion. That's a great thing for DataFaucet because it means the framework cache is now much more configurable and you've got a handy management application that lets you look right into it, which wasn't there before.

Honestly the framework is still incomplete, but it is in a working state. We could use input into the management application, features (did we cover everything?), and in particular I'm really hoping to get some folks to provide some additional insight to help me finish writing the intelligence portion -- the methods that will allow CacheBox to auto-configure the cache based on usage patterns.

I hope you will all come join us for the discussion tomorrow at 6pm EST at the Online ColdFusion Meetup group.

ColdFusion 9 and the onTap Framework

I'd like to say that every upgrade is as seamless as the upgrade from ColdFusion 7 to 8, where I didn't have to do anything (that I remember). But of course they don't always turn out that way. Back when Macromedia released ColdFusion MX, myself and a number of other developers had to do a fair amount of work to remove references to structure variables named "this". It turns out that they've added a "local" scope in ColdFusion 9 and wouldn't you know, about the time I stopped using "this", I started using "local" instead. ;)

Ryan McIlmoyl gave me the heads up on the issue on the DataFaucet list. About a day and a half later, I've just finished up the basic modifications for CF9. (There were 3.5-thousand references to "local" in the core code, plus another 500 or so in the Members onTap plugin, with plenty of false-positives.) I don't actually know if the onTap framework is still working on CF9 yet, because I haven't installed it to test with yet. If you give it a shot, let me know how it goes for you.

One thing I'm glad of though, is the way I designed the ontap.cfc. This is a component with some basic functionality that was created before onMissingMethod() was added to the language, otherwise it might have looked a bit different. But in essence, the lack of onMissingMethod() is why the ontap.cfc has generic getters and setters (or accessors and mutators for you lingophiles out there). These are two private methods name getProperty() and setProperty() and two public methods named getValue() and setValue() instead of having loads of individual functions named getBlahBlah() and setYaddaYadda(). What's cool about this arrangement is that in all my CFCs, nowhere to I directly reference the structure that holds property values, which was named (you guessed it), "variables.local". Well, nowhere except in about 3 private methods in ontap.cfc. And because all my other CFCs faithfully relied on getProperty() and setProperty() instead of simply referencing local.x or local.y, that means I only had to change "variables.local" in about 3 places. This saved me HUGE headache. If I'd gone the other way and used all hard-coded (or more to the point hand-coded) getters and setters, I'd have had easily another couple thousand references to replace and another day's work on this update for CF9. I love it when a plan comes together! :)

I was actually thinking about this the other day too, because I was looking at a small application someone else wrote (I won't mention any names), where they used all hand-coded getters and setters in their code and I was trying to figure out how to use it for configuration. After about an hour or two of looking through the code for documentation of one of the features I realized that said feature was never completed. There were just 23 references to it hanging out in the code, not doing anything at all (other than passing a useless variable around). All those 23 references were mostly hand-coded getters and setters, plus a couple of form fields and param tags. And I was thinking to myself, how nice it is to know that, for the most part, that sort of thing doesn't happen in my applications. Sure I make mistakes, everyone does, but the point here is, if I'm writing config for an app, there's not going to be 23-lines of code hanging around for a single config value, there's probably going to be about 3 or 5 and that means not only less maintenance, but less work up-front as well. :)

So new zip archives of the core framework and of the Members onTap plugin are up on RIAForge.

Transfer ORM Plugin and ColdBox Importer Released

Building on the previous article where I announced the release of a Fusebox importer, I've now released a similar ColdBox importer that allows you to run ColdBox applications within the context of an onTap framework application as well as a Transfer ORM plugin that downloads, configures and installs Mark Mandel's ORM framework.

I think this is really starting to show how the onTap framework accomplishes one of my long-term goals of encouraging greater collaboration within the community.

In one way ColdBox turned out to be slightly less helpful than Fusebox in creating this integration, because there's no programmatic way for me to set the "AppMapping" setting in the Application.cfc, which means that the installer can't actually do everything for you, you have to set the AppMapping setting yourself in the ColdBox config xml. Bummer. Maybe a future version of ColdBox will allow that.

In another way, ColdBox turned out to be slightly more helpful in creating integration. In both cases the primary method of integration is by a combination of executing the events from the Application.cfc (onApplicationStart, onSessionStart, etc.) and by calling the framework methods that launch and execute an individual request for each page of the application and then scraping the result content for the content elements we want in our onTap framework application. Although this is a less than ideal solution, it is far superior to simply scraping an http request for several reasons, including the fact that all the application and session variables are shared within our new onTap framework application, it's more efficient than an additional http request, and the onTap framework structure allows us to seamlessly modify the CSS or JavaScript without touching the original Fusebox or ColdBox application. The little bit of extra goodness that ColdBox offers in this respect is that the framework gives me a handy RunEvent() method that can be used for further integration.

So for example if I installed a forum written in ColdBox and I wanted to sync-up the user database from the forum with my own user management in the onTap framework (check out the Members onTap plugin) I can look in my user management directories in my own application and I can slip in a handy little call to the ColdBox RunEvent() method any time I create a new user or update a user, to keep the two systems in-sync for a single-sign-on application.

On a similar note, I've also just published a new Transfer ORM Plugin. I found a handy little Transfer Config project on RIAForge from Rolando Lopez, which uses the new CFDBINFO tag in CF8 to introspect your database and generate the required XML config file for the Transfer ORM.

What's really neat about this is that now you can get Transfer all set up and running in your onTap framework application with zero coding (and very little downloading). You just head over to your handy plugin manager, search for new plugins on the webservice, select the Transfer plugin and press the install button. After you've accepted the license agreement, the plugin will optionally download the latest version of Transfer and install it for you. Then it presents you with a small form with some options for how you'd like to generate your transfer config file and viola! You're ready to get transfer objects in your onTap application. :)

Kudos to Rolando for helping to make this possible, and of course to Mark Mandel for giving us Transfer.

Fusebox Importer Plugin

Last year I posted an entry about a CMS plugin for the onTap framework (and I'm still surprised at how much traffic it got). Unfortunately that particular project hasn't become a reality yet, but after having just finished up a revision of the onTap framework and the DataFaucet ORM that both now include integration with the new CacheBox cache-management framework, I decided to start working on plugins again.

Something that came up in that talk about a CMS plugin was how the Sava CMS has managed to create integration with a variety of other ColdFusion frameworks, including Fusebox, ColdBox and Mach-II. I think that shows marked resourcefulness and is a direction I'd like to see the ColdFusion community move more toward. And it's something I've thought about off and on over the past year, but I've not gotten around to doing anything practical about it until now.

Amazingly it's only taken me two days to put together a first release of a Fusebox Importer plugin. Tony Garcia mentioned before that integration between apps in the PHP world actually has a name, they call it "bridging". And that's a fairly good description of what I'm doing here. You install the Importer plugin and from that point, you can then manage fusebox applications that are imported into your onTap framework application through the importer, which acts as a kind of bridge between the Fusebox framework and the onTap framework.

I was hoping that I might be able to find a full-fledged application to test this with, but unfortunately didn't actually find that. I thought maybe there would be a blog or a forum or something available that was written in FB5, but couldn't find one. I did of course find examples of both of those things, but only in older versions of Fusebox (4.1 or 3). So I ended up testing this with a copy of the CatClub sample application that Sean provided when he was lead on the Fusebox project.

I did have to make a few small, yet important modifications to the framework core to get this bridge to work. So if you're interested in trying it out, you'll have to download the latest framework core release (which I just uploaded a few minutes ago). Then use the search form in the plugin manager to find and download the Fusebox Importer.

I'll probably have a look at ColdBox and Mach-II soon for the same thing. If they're similarly easy to integrate, I'll be a very happy man indeed. :)

More Entries

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