Sean Corfield's post about the perils of NIH and RTW
and Peter Bell's subsequent one entitled Should you Release Your Framework?
got me thinking about my own decision to release cfrails.
Sean mentioned that the not-invented here syndrome, along with reinventing the wheel, "plagues any coherent attempt at Open Source within the ColdFusion community - look at the number of half-baked calendars available (and don't get me started on the unit testing frameworks!)." I wanted to add, "and look at all the generation going on!" (as I can think of at least 5 such projects off the top of my head, my own being one of them.
In general, NIH and RTW are bad things. And Sean is right, to a degree. But I also agree with the sentiment of Peter's post: more is better but if it is substantially similar to another project, it may be better to contribute to that one instead.
I'm a big fan of choice, and of learning, so I tend to think that having more choice (to learn from as well) is better, but if choices are substantially similar, one should certainly strongly consider contributing to the similar project. Of course, a question reveals itself here: "how can I be sure what I'm doing is substantially different?" One cannot take the time to review every framework out there, and probably asking for just a couple is too much. In my case, I didn't review all the frameworks I knew about, but I did read up on them, at least. (As a side note, I don't know when Model Glue started generating code, can anyone confirm when for sure - has it always been there?)
I feel like cfrails is "substantially" different than anything I've seen (even CF on Wheels, which I also plan to contribute to), but I always worry if what I'm doing may at some time be considered to be stepping on toes. I don't want to be perceived that way, for sure.
Further, I don't think I'm solving any problem that hasn't been solved before, but I do think I'm doing it in a different way - and I think there is merit in that, even if, in doing so, I am duplicating some of the effort of others (for instance, cfrails has its own ORM, but I felt that changing what I knew about the existing ones might make them more specific than they were intended to be). With all that being said, I think generating code, while certainly being nothing new in computer science or even ColdFusion, is relatively new to being done publicly or in Open Source in ColdFusion. So, even though there are a lot to choose from, right now, it is a good thing, in my opinion, as we are all able to learn from each other, and may discover better ways of doing things.
In the end, as far as the generators go, it seems most of them are quite different in how they tackle the problem, and some of them even in the problems they solve. I think it would be great if those behind the various frameworks would write about how they came about (or, if you don't mind, leave a link here if you've already written it) and what problems they are intended to solve, and how they solve those problems. That might be a great learning exercise for all of us in the community (I plan to write that up for cfrails after the next couple of weeks -- midterms, you know? =) ).
Hey! Why don't you make your life easier and subscribe to the full post
or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate
wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!
Leave a comment
Great post! As for the frameworks, get with Nick over at http://www.cfframeworks.com
and Brian with the Open Source Update at http://www.remotesynthesis.com/blog.
I would characterize CF Frameworks as the place for collating frameworks information and collaborative reviews. The Open Source Update if the place for what is new and happening in ColdFusion OSS.
I would love to see all key announcements reported to Brian (although he does a great job of ferreting them out anyway) and all of the "this framework is good for xxx") in a searchable database at the CF Frameworks site . . .
Posted by Peter Bell
on Feb 25, 2007 at 01:13 PM UTC - 5 hrs
Those are two great resources, to be sure.
I would love to see both of those things too, but I don't want to be spamming Brian. And Brian, if you're reading, and want updates sent directly to you, please let us know =).
On the searchable DB- that would be cool too. I guess everyone would need to get writing on that specific topic (or let them know the links). It might be best to have a form to fill out, but then again, it might be hard to express the answers to those questions in form answers (although, I'm confident someone could find a way).
It's so easy to lose stuff on this vast web, and for that reason I am particularly grateful for the categorizing and one-stop shopping that Nick at CF Frameworks and Brian with the Open Source Update are providing us.
Posted by Sam
on Feb 25, 2007 at 02:15 PM UTC - 5 hrs
Is cfrails substantially different to CF on Wheels? (I don't know - I haven't looked at either because I don't like a lot of what Rails is/does) Hasn't CF on Wheels split into two very similar frameworks as well? (Again, just an impression I got from a couple of blog posts)
Fusebox starting generating code in release 4 back in 2003. Model-Glue started with the Unity Beta back in 2006 (was it really only last year?).
Posted by Sean Corfield
on Feb 25, 2007 at 05:20 PM UTC - 5 hrs
Thanks for answering my questions, and also for giving me the opportunity to clarify some of my statements.
Yes, cfrails is substantially different from CF on Wheels. From what I know, CF on Wheels was intended to be a port of Ruby on Rails for ColdFusion.
On that note, cfrails is shaping up to be quite different. It's got a horrible name in that respect, I know =). There are some things I like in the real Rails (in particular, its use of ActiveRecord), but there are some things I don't like as much. So, cfrails is my attempt at reconciling those things. I'm not an expert in Rails by any means, but I do have a couple of relatively small to mid-sized projects under my belt in it.
The thing I like is the code generation, and especially the ORM. But the main thing I don't like about it is that the scaffolding seems to be either default (if it is "synthesizing" the code) or up to you to maintain if you write it to files. (By synthesizing, I mean it is not writing to live files for you to change).
In cfrails, I'm attempting to let you be as DRY as possible with your code (which, I know, Rails is a lot about). It doesn't generate code to be written to files for you to change (although, I won't rule that out as a future possiblity when there is something for which you have that need). Instead, the goal is to provide a DSL to allow you to modify the "synthesis" to your needs. One is always welcome to drop out of the framework if they wish, of course.
So forms, lists, validation, db code, etc come for free, as in other frameworks. In this case, all you need to do is call a function to modify it if it isn't what you expect, rather than change the generated code. But, if there isn't a function that does that for you, you'll need to drop out of the framework.
Now, I don't know if that truly qualifies as substantially different, if all I am doing is adding a DSL on top of what other frameworks do to keep generation to files to a minimum. But, in doing what I'm doing, I'm also adding a lot of metadata to the mix. So, I don't know if other frameworks want that clutter.
I'm guessing a substantial majority of the code I've written in the past several years could have been synthesized by what I'm doing now (though naturally, I haven't done any true experiments =) ). So, what I'm trying to do is learn from all that, and see where these apps have truly differed, and eliminate everything else.
As for the split on CF on Wheels, I cannot confirm or deny that, but from what I understand, Rob Cameron isn't developing on it as much as he used to ... but Per Djurner has been taking the reins. (In fact, Rob just posted a not-so-nice sounding post on his blog that mentions this...) Is that what you are referring to?
I didn't know Fusebox generated code! To be honest, I haven't taken a good look at it since version 3. Back then, I didn't think it was for me, but back then I may have been too dense to understand it =). I thought Model-Glue was only doing it recently, and thanks for the confirmation.
I'll have to take a look into Fusebox to see what type of generation it is doing. Thanks for the heads-up!
In the end, if nothing comes out of it other than my own learning, I don't suppose it will be a bad thing. If someone likes the ideas behind it and a couple of those ideas get incorporated into the vision of another framework, I'll be just as happy to work on them there. =)
Posted by Sam
on Feb 25, 2007 at 06:11 PM UTC - 5 hrs
Thanx for posting more information about cfrails - the name certainly put me off but I might have a closer look at it now. CF on Wheels put me off pretty much immediately because it wasn't cross-platform - a big mistake, IMO, given that CF itself *is* cross-platform.
As for Fusebox, check out the custom lexicons available in Fusebox 5.x - download the preso and code from my blog "Extending the Language of Fusebox" which shows how Fusebox 5.x supports DSLs directly.
Posted by Sean Corfield
on Feb 25, 2007 at 06:47 PM UTC - 5 hrs
Yeah - Custom lexicons are extremely cool. Also, Sean, in addition to your CFFrameworks podcast, was it the CFWeekly where you were interviewed on Fusebox and introduced custom lexicons? It was a while back now, but it was a really nice introduction . . .
Posted by Peter Bell
on Feb 25, 2007 at 07:41 PM UTC - 5 hrs
Wheels is currently split in a Lite version and a Full version of which the Full version does not actually exist as of yet. We previously had some discussion about splitting these into 2 entirely separate frameworks and I think this is what Sean is referring to.
The reason we don't have a full version is partly due to the very issue Sean brought up... people work on their own little projects instead of working as a team on one framework.
To be honest though, I don't think of it as much of a problem... sure, in an ideal world we'd get 10 or so of the best CF programmers working on the same framework and making it the default one for ColdFusion.
What is more likely to happen though is that people work on their own projects and learn from each other... eventually someone will come along that has something substantially better than anything else already out there (I'm betting on Peter Bell for this...) and at least a few will drop their own framework and start helping out on this new one.
Posted by Per Djurner
on Feb 26, 2007 at 03:02 AM UTC - 5 hrs
Sean - I'll most definitely give Fusebox another look. I've read that its grown quite a bit, but I don't recall reading about the custom lexicons. It may very well be that what I'm trying to achieve may be better served as a Fusebox extension of sorts.
About the cross platform issue- I thought originally that was the case as well, but I was under the impression it wasn't anymore. In any case, cfrails is currently the same way (in needing MS SQL Server), because I started with the basics of what I *knew* I needed, and am adding to it (only what makes sense, of course) as I work on other projects that are using it. This most certainly will be rectified well before a version 1 would come out, but since I'm building initially as a productivity booster for my own work, I had to start there.
I think it will be better for it in time, even if in the near term, it suffers. In any case, I feel it will be easy enough to provide other DB support, because even if JDBC doesn't offer all of what I need, it would be easy enough to write the "getDBMetaData" part for different DBMSs (assuming they provide out metadata, as I think MySQL didn't prior to version 5), and call the correct version according to one more setting. In all, its just a matter of sitting down for a couple of hours and doing it - but its just not been a priority of mine yet. =)
Who knows, this conversation may get me off my butt - I've been promising Per now for a couple of months that I'd be contributing that to the Wheels project (sorry Per!) =)
And Per, Thanks for the clarification on that "split" as well. I didn't even think about /that/ issue.
In any case, I want to thank all of you (and others) who are giving me advice and pushing the issues. That's the reason I started blogging - to get some criticism and learn from it (or, as Chad Fowler put it - "be the worst"). You've all been a great help to me, especially in that regard!
Posted by Sam
on Feb 26, 2007 at 06:03 AM UTC - 5 hrs
@Per, "at least a few will drop their own framework and start helping out on this new one" - did the CF Wheels folks help out with Fusebox, Mach II or Model-Glue? :)
You also say "in an ideal world we'd get 10 or so of the best CF programmers working on the same framework" - most frameworks tend to be the product of just one or two developers. ColdSpring probably has the biggest team right now with founders Dave Ross and Chris Scott and regular contributions from Kurt Wiersma and Jared Rypka-Hauer. Kurt is also a committer on Mach II, along with Matt Woodward and Peter Farrell.
@Sam, "assuming they provide out metadata, as I think MySQL didn't prior to version 5" - MySQL 4 provided metadata thru introspection rather than in separate tables (as in MySQL 5). I wrote the initial metadata support for Reactor for MySQL 4.
FWIW, I've contributed code to Fusebox, Mach II, Model-Glue, Reactor, Transfer and ColdSpring (basically every framework I've used).
Posted by Sean Corfield
on Feb 27, 2007 at 01:50 AM UTC - 5 hrs
@Sean, I started on a project in Fusebox but simply did not like the way it worked so I looked at other frameworks and eventually ended up working with Ruby on Rails. I missed ColdFusion too much though and when I saw that Wheels existed I started to help out on that. So, no, I have not contributed any code to the other frameworks because I chose the one that I liked most at the time.
What I meant was that people working in _similar_ frameworks will learn from each other over time and either merge them or drop the unsuccessful ones.
What's happening in the Ruby world is ideal I think, they have a core team of 10+ people, a large number of contributors and Rails is the de facto framework. The main reason this was possible though was because no one really cared about Ruby before Rails came along so it will be hard to repeat that in the CF community.
Posted by Per Djurner
on Feb 27, 2007 at 02:53 AM UTC - 5 hrs
Leave a comment
Sean- Cool. I don't have as much experience with MySQL, so it's good to learn that it has support in version 4. I'll definitely check that out (assuming I can get that version).
Also, that is quite an impressive list of contributions, and it is very inspiring! I only hope that in time, I will be such a valuable resource to the community (not just CF of course, but in my other interests as well). I've been lying dormant all these years, and as you already know, only recently decided to break out of my shell =).
Per- I wouldn't say *no one* really cared about Ruby. But certainly Rails is behind its explosion in popularity ... I knew what you meant though. =)
Also, I think Fusebox is becoming that dream development team of which you speak. Check out the impressive list at http://trac.fuseboxframework.org/fusebox/wiki/Team...
Posted by Sam
on Feb 27, 2007 at 07:41 AM UTC - 5 hrs