I posted a shorter version of this on the FW/1 Slack and – somewhat to my surprise – got no feedback at all on what I expected to be the controversial part, so I’m posting a longer version here, in order to get some discussion going. I hope! There are several questions for you at the end that I really want to hear answers to. And I want a lot of you to respond, not just the handful of “usual suspects”!
First off, the non-controversial part…
If you haven’t already seen it, I’d recommend reading Tony Junkes’ blog post about using a ColdBox module as-is with FW/1:
http://tonyjunkes.com/blog/working-with-fw1-and-qb/
I didn’t realize it was even possible – to use a ColdBox module _unchanged_ with FW/1 – let alone that it might be this easy!
Well, of course it’s not going to be that easy for all modules in general, because ColdBox provides a different set of extension points to FW/1 and modules that leverage those are going to be harder to use with FW/1 than those that don’t. But this – and a few recent discussions on Slack – raises the question: Can FW/1 make it easier to reuse more ColdBox modules? Can FW/1’s documentation offer guidelines on writing ColdBox modules in ways that are easier to use across both frameworks? Those questions are at the heart of this FW/1 issue:
https://github.com/framework-one/fw1/issues/486
If you have any experience with ColdBox modules, I’d welcome your input on that issue.
Now the part where I had expected at least _some_ feedback…
It was interesting for me that these questions came up because I was already having some meta-thoughts about how FW/1 ought to evolve in the context of our community and our tech stack. Years ago, there was Fusebox. Then there was Mach-II (the framework formerly known as FuseboxMX, BTW). Then Model-Glue. ColdBox. FW/1. And several others along the way (anyone remember onTap?). The CFML world was expanding and there was plenty of room for a lot of variation. We saw multiple DI/IoC frameworks arise, and multiple testing frameworks (cfUnit, cfcUnit, MXUnit, TestBox), and a bunch of ORMs (ObjectBreeze! ARF! Transfer! Reactor!).
What happened?
A few of these died out because they were superseded by better frameworks but, if we’re honest with ourselves, the majority of them died out because the maintainers moved on to other technology. At this point, the CFML world is shrinking – we can’t really argue that isn’t the case: it’s just a natural process in any technology – and with key maintainers moving on, we naturally gravitate toward other projects that have active maintainers who are staying with CFML. That means that pretty much by definition, we’re in a phase of consolidation where we coalesce around fewer and fewer frameworks – and those frameworks gain market share (albeit of a smaller market) but they also tend to gain more contributors and better documentation etc, as the focus of the over community narrows, and those folks who naturally want to contribute feel pulled in fewer directions.
There are really only two main camps these days: ColdBox and FW/1. Three if you count cfWheels but it’s had a number of near-dormant periods over the last several years and it seems to have very little traction overall, despite an enthusiastic community (and, interestingly, a _much_ more active mailing list than either ColdBox or FW/1 – although their Slack channel has less than 1/3 of the number of members for either).
There’s no doubt about it: ColdBox is the juggernaut here. They have a whole team of people, consultancy focused on the various framework add-ons, a thriving module community, they have ForgeBox and CommandBox and TestBox. They’ve cornered the market in three key areas: package management, command line tooling (across both CFML engines), and testing (both xUnit and BDD). Both FW/1 and cfWheels use ForgeBox for packages and they are both completely dwarfed by the number of ColdBox (and ContentBox) modules.
And so I get to contemplating what does the future for FW/1 look like in this world? Can FW/1 more closely align itself with ColdBox to take more advantage of the extensive ecosystem there? What does it look like for FW/1 to leverage ColdBox modules? What do the migration paths between FW/1 and ColdBox look like (in either direction)? Are those even feasible paths?
Something I’ve been thinking about a lot is: could FW/1 make it easier for users to migrate to ColdBox?
WAT! WAIT!! WHY???
Whilst I can probably make some headway on having FW/1 reuse ColdBox modules, that’s probably going to add a whole bunch of ColdBox-isms to FW/1. I’m going to guess some of those modules rely on WireBox annotations – should DI/1 support those annotations? Should FW/1 support all of the ColdBox lifecycle extension points in order to support modules? Should FW/1 support “all” of ModuleConfig.cfc in order to wire up those modules?
How far down the ColdBox-compatibility path should FW/1 go? At what point would FW/1 stop being “FW/1” and become “ColdBox-Lite”? Any new functionality added to FW/1 to support ColdBox modules has to be documented and tested and supported. If FW/1 became ColdBox-Lite, why would anyone use FW/1 when they could just use ColdBox in the first place?
So I think that line of reasoning says “There must be limits to how much FW/1 adds, in order to achieve the goal of (some percentage of) ColdBox module reuse.” and so we must look at exactly how much machinery folks – that’s you lot! – think is acceptable to add to FW/1 in the first place.
Why do you use FW/1?
I always said I created FW/1 as a reaction to framework bloat, back when there were still several MVC frameworks out there actively being maintained. FW/1 was intended to be different. Simple. Slim. Invisible. As it’s evolved, I’ve tried to maintain those original goals but the reality is that the framework has grown a lot: FW/1 itself is 3,000 lines, DI/1 is 1,000, the framework folder is about 5,500. It now has a dedicated documentation site that runs close to 3,000 lines of markdown per version. The test suite has 100 CFCs totaling just over 3,400 lines of code. And it relies on TestBox for that. And CommandBox for Continuous Integration, as well as for packaging and release management on ForgeBox (I finally stopped doing the manual process!).
So why do you use FW/1 instead of ColdBox? They both leverage the same infrastructure, they’re both convention-based MVC frameworks, they both offer a convention-based DI/IoC with configuration-based ways to override the conventions. What are the differentiating factors that make you choose FW/1 instead of ColdBox?
ColdBox offers a lot more…
…more documentation, training, consulting, the Ortus Developer Week (of which I was recently reminded – twice), its own conference (Into The Box), and overall a close relationship with Adobe that has led to ColdFusion Builder plugins and more visibility at Adobe events. And of course, all those modules that started this whole thread (although not this line of thinking on my part!).
So, seriously, why FW/1? What keeps you here?
And, on the flipside of that question, what if it was easy to migrate your FW/1 application to ColdBox? Would you do it? How easy would it need to be?
And, finally, what might cause you to abandon FW/1 for ColdBox? What changes to FW/1 itself or how the project is maintained and/or supported would drive you away at this point?
Thanks in advance for all your feedback (I hope!),
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
So, seriously, why FW/1? What keeps you here?
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
How far down the ColdBox-compatibility path should FW/1 go? At what point would FW/1 stop being “FW/1” and become “ColdBox-Lite”? Any new functionality added to FW/1 to support ColdBox modules has to be documented and tested and supported. If FW/1 became ColdBox-Lite, why would anyone use FW/1 when they could just use ColdBox in the first place?
Since both Cameron and John touched on the question of my continued maintenance of FW/1, I want to provide some background to that…
When I designed and built FW/1 (back in 2009), I wasn’t using FW/1 for work. We used ColdBox and we are tied to a customized version of one of the prerelease 3.0 Milestone builds for all sorts of complex reasons. When we needed to add some new web apps (probably 2012?), we started using FW/1 for new apps. Last year we replaced those FW/1 apps with Clojure apps, as part of our overall migration to Clojure.
So I developed and maintained FW/1 for about three years while I was not using it for work and I’ve maintained it for about a year now since we stopped using it for work. I do not expect to use FW/1 for work at any point in the future. I’ve been working with Clojure alongside CFML since 2011 and over the last year or two we’ve shifted focus so that Clojure is our primary language. I am now the only person at work who knows CFML, aside from one co-founder who doesn’t know OOP or ColdBox, so I do any and all maintenance on our three ColdBox apps.
We’re rolling out all-new React.js SPAs now, backed by all-Clojure REST APIs, OAuth2, and several other new server processes. We hope to retire our largest ColdBox app by year end, or early 2018. We expect to rewrite our other two ColdBox apps during 2018. It may take a bit longer (they ain’t broke so…). Bottom line: in another year or two, I won’t be doing any CFML at all – except for continued maintenance of FW/1.
And, yes, I do plan to continue maintenance of FW/1 for a “while” but I can’t provide any guarantees of how long that “while” will be. I’ve hinted a couple of times over the last year or so that I’d like to see a couple of co-maintainers step up so I can mentor them and, ultimately, hand FW/1 over to them – simply because whoever is maintaining FW/1 really should also be using it on a day-to-day basis!
Since no one has volunteered so far, I’ve been considering migration paths so the existing community isn’t left high and dry. Consider what happened to Fusebox: a new maintainer took it over from me but then left the CFML space and 5.6 was never released, so the last official Fusebox release was 5.5.1 in March 2008. The closest migration “path” from Fusebox is really to FW/1 but it’s a lot of work. Mach-II and Model-Glue have no migration path. I don’t want the FW/1 community to be left in that same boat.
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-one+unsubscribe@googlegroups.com.
--
First, I’ve read in a few places that you “tend to see FW/1 as far more lightweight.” I’m curious to find out more about this?
Is this about speed (like requests per second)?
Feature set (ColdBox definitely has more moving parts and features. Maybe that is overwhelming?)
Control over features (having features built-in feels like lock-in?)
Other things that make it “lightweight”?
It sounds to me like the small file footprint [of FW/1 and DI/1] has made it easier for some of you to learn the internals of the framework better.
The last point was with regard to documentation. I think this is the place where I will just comment that I had a hard time getting started with ColdBox. It sounds like that was a big draw for many of you to FW/1. ColdBox was either not clear enough or too much information (or both). We’ve continued to work on that, but would always accept help from the community. It’s my belief that a basic FW/1 app would translate almost directly over to a basic ColdBox app. (This is something I’d love to show and write a blog post about one day.) Maybe once we show that, we can update our docs to match.
All these points are to help bridge the gap between our communities. I feel there are many artificial barriers that we perceive to be between us. I’d like to knock some of those down.
One last question, coming from outside the community, I’m confused about what I perceive to be the death of FW/1 when Sean leaves CFML. Couldn’t you as members of he community take up ownership of FW/1 and advance it along the philosophies that it current embodies?
I guess the reason I’m asking is that it makes me sad to see a bunch of people feel like they are forced into a technology choice or that a merging is inevitable.
It might sound weird coming from a member of the Ortus team, but I like that there are multiple frameworks. It gives us choice and keeps us all improving.
Thanks for the discussion, folks. I look forward to reading your responses!
Cameron, I’ll answer the points from your other email in here (first, and then address some of your points from this thread too):
I am unsure what this does for me (since I don't use much ColdBox). Loads "something" into FW/1?
Per the thread subject lines, this is all about allowing FW/1 users to take advantage of the wide choice of ColdBox modules, directly in their FW/1 apps. The particular examples in this thread are about Eric Peterson’s very cool QueryBuilder library, which provides a really nice DSL for composing SQL queries (something I’ve talked about being able to do in Clojure via the HoneySQL library).
It seems like there are 6 command line things I have to now memorize
It was a proof of concept, just to show how little code would actually be needed to use QB as-is (rather than having to manually perform the DI/1 configuration that Tony talked about in his blog post – which perhaps wasn’t posted here but has been discussed at length on Slack). See http://tonyjunkes.com/blog/working-with-fw1-and-qb/ for the background of all this. Now see the follow-up post in the other thread here and it’s just two function calls to pull in one or more ColdBox modules, and a tiny bit of configuration if you need it. I guess you’ve not been following the Slack conversations recently in #fw1?
I don't know what all of the abbreviations are in the code examples
I’ve no idea what abbreviations you are referring to? Maybe just QB – the name of the QueryBuilder module?
When I read a getting started manual and it starts talking about downloading a bunch of dependancies and running command line stuff it's a pretty big turn off
Well, that’s what the FW/1 Getting Started guide has now http://framework-one.github.io/documentation/#installing-fw1 and it’s much easier than having to download a bunch of different ZIP files, unpack them, copy out the pieces you need, remember to create all the folders you want, etc, etc. Aside from anything else, CommandBox brings versioned packages and dependency management to CFML – like all the “real” languages have (JS/Node/NPM, Java/Maven, etc) – it’s a HUGE win for all CFML developers!
The 20 something year old version of me would have more time. The 40 something year old version of me does not, sadly
LOL! 😊 The recently 55 year old version of me feels your pain! 😊
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
I guess you’ve not been following the Slack conversations recently in #fw1?
My primary problem really is lack of knowledge of ColdBox
A meta-comment about this: TestBox is pretty much the only game in town now for testing – FW/1 switched from MXUnit to TestBox a while back. CommandBox is so amazingly convenient – FW/1’s CI and local testing is all powered by that. See the README: https://github.com/framework-one/fw1#running-the-tests If you want to scaffold out a new FW/1 app, CommandBox is the way to go, with Tony Junkes’ FW/1 Commands https://github.com/framework-one/fw1-commands (an official FW/1 project!). Neither TestBox nor CommandBox require any knowledge of ColdBox! This is just about knowing good CFML tooling.
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
From: Cameron Childress
Sent: Wednesday, August 30, 2017 4:36 PM
To: framew...@googlegroups.com
Subject: Re: [framework-one] Re: ColdBox and FW/1 and CFML's shrinking market?
On Wed, Aug 30, 2017 at 7:25 PM, Sean Corfield wrote:
--
A meta-comment about this: TestBox is pretty much the only game in town now for testing
If you want to scaffold out a new FW/1 app, CommandBox is the way to go,
When you access the application now, it should say Hello anonymous! but if you put ?name=Sean on the URL, it should say Hello Sean! The request context passed to the controller method contains all the URL and form variables from the browser and is also made available to the view directly, as rc.
ColdBox provides you with a nice method for generating links between events by leveraging an object called event that is accessible in all of your layouts/views and event handlers. This event object is called the request context object which models the incoming request and even contains all of your incoming FORM and URL variables in a structure called rc.
--
To unsubscribe from this group and stop receiving emails from it, send an email to framework-one+unsubscribe@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-one+unsubscribe@googlegroups.com.
I suspect that FW/1 will not really need further development
The roadmap is always easily available as a combination of these pages:
https://waffle.io/framework-one/fw1
http://framework-one.github.io/documentation/roadmap.html
The latter is intended to be the high-level overview (and hasn’t actually been updated fully for 4.1 – oops!) and the former is a birds eye view of open issues (with their milestones) and any ongoing and/or recently completed work.
The restructuring for 5.0 is conceptual. I haven’t formalized it yet. It’s intended to allow people to clean up their Application.cfc and to create more commonality between the “extends framework.one” and the Alternative Application Structure. I think it’s more to satisfy my architectural itches than a pressing user need – although perhaps the subsystem.cfc part is important enough to push ahead with, if it can be done in a backward compatible manner?
Given the ongoing work in https://github.com/framework-one/fw1/issues/486 at this point, I may change the focus of 4.5 to be “ColdBox module compatibility”, and revisit the 4.5/5.0 restructuring path.
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
From: Nando Breiter
Sent: Thursday, August 31, 2017 9:03 AM
To: framew...@googlegroups.com
Subject: Re: [framework-one] Re: ColdBox and FW/1 and CFML's shrinking market?
Picking up on the subject of this thread, particularly the phrase "CFML's shrinking market":
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
-Nathan Strutz
To unsubscribe from this group and stop receiving emails from it, send an email to framework-one+unsubscribe@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
---Nathan Strutz
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-one+unsubscribe@googlegroups.com.
Before this goes too far into the weeds, I’ll just ask that we _do not_ discuss religion here. It’s not an appropriate topic for the FW/1 mailing list and I think everyone is already very clear on where they stand on the topic.
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
From: Nando Breiter
Sent: Friday, September 1, 2017 9:33 AM
To: framew...@googlegroups.com
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
--
-Nathan Strutz
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Visit this group at https://groups.google.com/group/framework-one.
For more options, visit https://groups.google.com/d/optout.
--
FW/1 documentation: http://framework-one.github.io
FW/1 source code: http://github.com/framework-one/fw1
FW/1 chat / support: https://gitter.im/framework-one/fw1
FW/1 mailing list: http://groups.google.com/group/framework-one
---
You received this message because you are subscribed to the Google Groups "framework-one" group.
To unsubscribe from this group and stop receiving emails from it, send an email to framework-on...@googlegroups.com.
Also, tabs vs spaces. No holy wars.