Tuesday 15 October 2013

CFCamp: Rakshith's Adobe ColdFusion Keynote: notes of my own

G'day:
I fired most of this stuff out on Twitter as it happened, but here's an aggregation of some things that crossed my mind during Rakshith's Adobe / ColdFusion keynote at CFCamp.

First things first... I was very relieved that there was a big chunk of this presentation showed actual code. This is a huge improvement over cf.Objective() and Scotch on the Rocks wherein the main Adobe presentations were aimed at IT Managers rather than developers, and was just promotional material with very little substance. Rakshith's presentation today was really good. This is not just my opinion, everyone else I talked to said the same thing.

Education

The first thing he discussed was the educational initiatives Adobe are planning for "ColdFusion". I use double-quotes there because there was an awful lot of chatter about mark-up, JS, design, JS library integration etc, and only really passing reference to ColdFusion on the back end. It is positioning as an end-to-end approach to web development, so the server side will only be a part of it, but it seems the main emphasis is the more Adobe-friendly elements like pretty pictures and lovely fonts and fluff like that. So I don't know that it's accurate to describe it specifically as a ColdFusion education initiative.

I'm quite keen to see the course material for all this though.

Community Engagement

Rakshith talked about improving Adobe and the ColdFusion team's community engagement: improving assistance given to CFUGs and the like. I wanted to ask a question here:

Where is the team participation in the community? Rakshith posts blog articles occasionally, and participates on Twitter occasionally... but where is everyone else? They have first-level support people answering questions on the Adobe ColdFusion forums, but they are not great at their jobs. And where's the equivalent on Stack Overflow or CFTalk or on Twitter (yes, people ask for CFML help on Twitter... really the wrong place to do it, guys). Obviously there are community members helping on those forums, but the Adobe ColdFusion guys should be members of that community. But they're not.

Another question I had was about conferences. Rakshith listed all the CFML-centric conferences they present at / sponsor: this is great. However given he was also talking about the fact there's a shortage of CFML developers now (quite a change from their recent boasts of there being more than ever, which we all knew was bullshit anyhow)... where's the list of non-CFML conferences they are presenting at? This is where they have to push themselves. Convert people over from other languages. Dispel these myths that are out there that CFML is dead, or rubbish, or just weird and old-fashioned and taggy. Adobe don't need to preach to us: they need to preach to everyone else.

CFScript 100% coverage

This is now definitely happening in ColdFusion 11. However I am not convinced by the approach. Well I am convinced: it's not a great approach. Adobe are taking the Railo approach, and the CFScript implementation of a general tag is this:

Tag:
<cfsometag attr1="value1" attr2="value2">

Script:
sometag attr1="value1" attr2="value2";

So all they've done is take the "<cf" and the ">" away. This is not script. This is just a hack job. Have a look at any ECMA-styled language, and see if they ever have constructs like that? No.

Oh, for block-level tags /. nestable tags, it's like this:

<cfoutertag attr1="value1">
    <cfinnertag attrother="valueOther">
</cfoutertag>

CFScript equiv:

outertag attr1="value1" {
    innertag attrother="valueOther";
}

What Adobe should be doing is to take each tag on its merit & requirements, and come up with an ideal implementation of it. So not this:

savecontent variable="content" {

}

But:

content = saveContent() {

}

It's a trivial difference, but the latter fits in with the general style of ECMA-type lanaguges, and the former - the actual CFML implementation - is an eyesore.

Don't rush shit and just take the approach that's just easy for your team, Rakshith: make them do the job properly. They only have to write this stuff once, so do it right. We have to use it every day.

queryExecute()

ColdFusion 11 has added a queryExecute() function which is a better CFScript implementation than Adobe's horrific previous attempt: Query.cfc. We all know my opinion of that, already.

The interesting / funny thing here is that Micha from Railo was in the audience, and in the course of the presentation he wrote and released Railo's own implementation of same. Ha!

"Member Functions"

These are a great addition to the language, but they need new nomenclature. Adobe are copying the Railo description for these, and even Gert says he wish they didn't call the technology that. It's a Java term, and this is not Java, so is not particularly meaningful in a CFML context. All they are is object methods.

Anyway, this is something I wrote about a while ago: "Improving ColdFusion CFML's OO-ness". Basically ColdFusion's own built-in code has remained procedural-based, even though it's become an OO language:

arrayLen(myArray);

A more OO approach would be to call a method on the object:

myArray.len();

And ColdFusion 11 will have this. Cool. Rakshith said it's coming for a whole bunch of data-types:
  • Strings
  • Lists
  • Arrays
  • Queries
  • Structs
  • XML
  • Dates
  • Images
  • Spreadsheets
This is excellent news. One thing Jerome observed on Twitter

I think the String / List stuff possibly needs rethinking. A list is just a string, so perhaps things like myList.listLen() should just be myList.len(","). And similarly with other functions? People should be thinking as a list as a delimited string, not a thing unto itself. Still: this is a minor gripe in an overall great feature.

Mobile

Rakshith gave the usual spiel on mobile and <cfclient> and that sort of malarky. I have to say some of the things he showed looked more interesting that they initially sounded (more interesting because he showed us code this time), but I'm still meh on it.

One statistic Rakshith cited was "81% of enterprise companies plan to develop mobile solutions; only 24% (?) of them follow-through", as if that's proof that <cfclient> is a good idea. Did 81% of enterprise companies want to implement their mobile solutions with <cfclient>, using CFML to write clientside code? I doubt it. But I doubt it less than I did before, I have to say. I still just worry its implementation is going to be like the <cfform> equivalent of mobile code-automation.

Ram's written the CFSummit mobile app with <cfclient>, and the source for that will be released after CFSummit. It'll be interesting to see it.

Q&A

There was no Q&A after the presentation which was a bit odd. I had these questions (some mentioned above):
  • What's the story with the source code theft? Do Adobe have a position on this that they can talk about yet?
  • When's ColdFusion 11 going into public beta? It must be soon, surely? Can you let us know even to the nearest quarter?
  • Which non-CFML-centric conferences are Adobe presenting ColdFusion at?
  • Where is the ColdFusion Team's presence on social media (Twitter, blogs, forums, etc)? Why aren't they part of the community?
  • What actual percentage of this new web dev curriculum is CFML, as opposed to front-end web stuff?
Hopefully Rakshith can answer these. Either as comments here, or I'll collar him in the bar. I do want to buy him a beer for giving us a great presentation today. And, again, I hasten to add that whilst I have questions about some of the message, it was a really really good presentation. Miles better than at cf.Objective() or SotR.

Cheers, Rakshith!

And now it's lunchtime. And perhaps a beer...

--
Adam