The meeting starts at 6:30 at HackerLab (1715 I St, downtown Sacramento). Hope to see you there!
-Nolan / SacInteractive
CF Camp 2014 is done. Overall I think it was a success for everyone. It was a very intense schedule, leaving CF Summit and immediately flying to Germany the very next morning (especially having to give presentations at both conferences). I've been a little under the weather most of the time I've been in Germany, probably mostly due to exhaustion (sleeping on a plane is never fun, nor comfortable). Much to my surprise, CF Camp had an on-site chiropractor giving free adjustments to the attendees! This was brilliant, and a huge help! She wan an excellent chiropractor, very friendly and American to boot (I was able to ask her a few things about German culture, to make sure I wasn't being rude accidentally to the locals).
All the presentations I saw were very well structured and delivered exactly what they claimed to. Feeling ill during most of Monday, I didn't take quite as many notes (nor chat with as many people) as I had intended, but still got quite a bit of value out of the sessions.
Highlights for me included...
CommandBox (Luis Majano) – Admittedly I haven't looked at all of the *Box projects as in-depth as others. I've used ColdBox for a client project before and enjoy it fine. I'd heard of CommandBox before but didn't investigate it closely. It's becoming a really impressive project! Even before Luis was done presenting, I was getting inspired, and thinking of several things I could use CommandBox for. I hope this takes off and gains popularity quickly among the ColdFusion community.
Multiply Like Rabbits (Markus Schneebeli) – I knew nothing about Message Queue servers before this talk. Nothing. Markus did an excellent job explaining what they do and how they work both in general and with Rabbit MQ (and via ColdFusion). He is an excellent presenter and very nice guy, I wish I had more time to talk with Markus at the conference.
Dependency Injection with DI/1 (Chris Schmitz) – I feel there's always been a lack of -good- quality "intro to dependency injection" talks in ColdFusion. For a long time most of them used the same "cflog example", which never really worked for me, nor did I feel the explained things in a way that was truly beneficial to new developers. Chris did a great job explaining the basics of DI and how to start using DI/1 to solve problems. He gave me a few ideas for how I can improve my own Dependency Injection presentation as well.
Event Gateways (Gert Franz) – Thank you, Gert, for finally explaining Event Gateways in a way that made sense! This is one of the areas of ColdFusion that I've never bothered using, because (again, one of my biggest pet peeves) there hasn't been a good, clear, explanation as to why we should use them. Nothing had "clicked" for me, so I skipped this feature. Now they make sense, and I'm excited to try and use Event Gateways in an application.
It was a little disappointing that Adobe was a no-show. I'm unclear as to what the reasoning was for that, so I can't really place judgement or anything, but it would have been nice to see them with a presence at the conference.
Thank you again to all the European folks I met. Your hospitality was greatly appreciated. Perhaps I'll see some of you again at the WAIT Conference – I'm considering submitting a few presentations, hopefully something is selected. :)
Now to brave the weather and do some tourist things with my last day in Germany.
"Life is really simple but we insist on making it complicated." --Confucius
Almost all quality improvement comes via simplification of design, manufacturing, layout, processes, and procedures
To get Grunt running, must have Node.js installed first
Current rev is 0.4+
Lots of tutorials are for 0.3 and a LOT changed since then.
over 3700 plugins as of today.
You need --
and the grunt file
-- node builds this file for you.
-- defaults everything based on the folder name
now we need to install grunt itself:
npm install [ whatever the module name is ]
npm install grunt-cli -g
-g installs the CLI package globally.
Now has the ability to run different local versions of Grunt
so if you have a legacy project on version 3, it can still use version 3 tasks. But my new project can use version 4, etc.
Now that we have the global CLI, we need to install it into our project.
checks version number
Lives in the root directory of your project
commit it into your source control repo
holds your task configuration
can be written as a gruntfile.coffee (coffeeScript file)
module.exports = function(grunt)
the bare minimum we need to get Grunt up and running:
npm install grunt-contrib-concat --save-dev
anything -contrib is pretty forwrad-version compatible, developed by the Grunt team
if it doesn't have this, it's community built and more prone to breaking
tells Grunt "here's a plugin i want to use"
generates a hash off the file contents, so you can easily tell if, say, your CSS has changed and needs to be re-minified, etc.
aka "cache busting"
essentially this deletes files we don't need any more
too many tasks --
we already have several tasks going on
what happens when we need to run them all
type each command out?
grunt.registerTask('myCustomTaskName', [ array of ORDERED tasks we're going to run via Grunt ] );
task for watching files
removes console.log calls from your JS files!
Linting in your JS files
to perform http requests so you don't have to jump out of IDE and go to /?reload=true to restart my app/framework and uncache things, etc.
Event Gateways -- Gert Franz
What are Event Gateways
anything that java/railo can "react" to is an Event Gateway
additional way to contact the app server (aside from web services, etc)
doesn't have to be over HTTP, can be triggered by FTP too, etc.
CLI -- we don't have a "request" form the command line.
Example gateways in CF
Text Messages from Phones
Java Messaging Service
- can use RabbitMQ to send events to/from Railo
File System Changes
- uses poling, waits for a second, does a cfdirectory to see if the info changed from what it had before.
- very inefficient
Example Gateways in Railo
Active MQ messenger
- can trigger something just by sending an email to a certain address
- it uses cfpop. end result is sort of like a scheduled task but it's 'event based' in this case.
ANY custom CFML event gateway
-- someone who sends an SMS text (for example)
-- the thing that "reacts" to the event (a Java file, cfc etc)
Event Gateway Services
-- i have 50 listeners, let's inform those listeners that this thing happened.
CFC that reacts to outside events
onAdd, onDelete, onChange, etc.
Method specified in Configuration is called
CF Event Structure passed as an argument
-- relatively complex
-- all the info that the event gateway passes on to the CFC
-- complex because it's decoupled from the rest of your code
Gateways aren't popular because they're complicated. and you need to know Java and need to know what you're doing. So they become difficult very quickly.
Interaction with CFML itself is limited.
--querying the database isn't possible
Code reuse isn't very easy either.
Write them in CFML (Railo) when possible.
Eventgateways written in Java for CF can be done also (Railo uses the same interface as the Java stuff)
-- event gateways in Railo
and vote for Railo
Hidden Gems in ColdFusion 11, Charlie Arehart
Not discussing everything in CF11, just things that don't get much PR
There's no single document that lists all the new features, that makes it hard to find them.
Don't miss the docs:
Adobe ColdFusion CFML Reference (>3000 pages!)
Developing Adobe ColdFUsion Applications (>2000 pages!)
Installing Adobe ColdFusion (~100 pages)
Configuring and Adminstering ColdFusion (215 pages)
(New) Mobile Application Development (72 pages)
docs are updated with every release of CF.
More resources on what's new --
first chapter of the first 2 books have a "what's new" section
There's a "release notes" guide generally too. Not as substantial as they used to be tho.
new "secure profile" added in CF10
in 11, you can enable/disable it via the Admin (in 10 you could only do this via Installation)
if you turn "secure profile" on, it modifies how CFlocation works
new page in Admin shows you the ~20 settings that are affected by this profile
3 cols - what is, would be and was this setting.
New option to expose pdfg/solr as a service.
There's a new "expression" edition too.
intended to make it easier to get CF without having to run a full installer
offered as an EAR or ZIP file.
don't have to run the installer
Install instructions are in the CF manual
NOT INTENDED FOR PRODUCTION
-all debugging settings are enabled by default
-you can't add a license key to this, it's been disabled.
doesn't include Solr, .net integration, remote integration, pdf generation (each of those is a separate "service") but they can be downloaded separately.
the point of Express is there are no "extra" things.
Can now have more than 1 Admin logged in at the same time. Used to be only 1 person.
-Configurable in admin Security page
-Allow Admin API setAllowConcurrentAdminLogin, isAllowConcurrentAdminLogin
Can how specify EITHER sticky sessions, OR replication, OR both
Server updates feature --
in 10, when you ran an update, last step was restarting CF so it could apply the update. then it'd automatically refresh itself after about 30 seconds. if it was back up, you'd see the login screen. if it DIDN'T come up then the refresh would cause an error saying "CF isn't running". Used to have to hit the refresh button (it was a fake "error" if CF took LONGER than 30 seconds to run).
NOW they have a thing that checks in a loop to see if/when CF is back up and running. So the server update is a bit cleaner now.
Security enhancements --
if you enable this CFLocation does NOT automatically include AddToken="yes" as the default.
new admin api methods: enableSEcurePriflie, disableSecureprofile, getAllSecureProfileSettingsInArray
new isSafeHTML, getSafeHTML, etc
there's a policy file you can edit to tweak this to your liking too.
new generatepbkd2key function
"derive a crypto strong random key of any desired size from the hum any manageable password or passphrase"
CFmail supports encrypted email
JVM included w/ cf11 IS 1.7.0_55 (you can update to a more recent one).
the 1.7.0_56 is an important update, so it's recommended that you update to that one.
can now call Window Auth / NTLM pages
couldn't do this before cf11
new authtype="ntlm" attribute
new XML / XPath encoding functions
CFLogin changed w/ respect to CF Admin
under the covers, CF Admin uses CF Login
CF Login is what used to have the "single login" issue that affected CF Admin
new allowConcurrent on cflogin; session attr on CFLogout
can now limit what file extensions can be CFlincluded
can set in CF admin or in application cfc/cfm
Language enhancements -- new tags
no longer Windows-only (different from the Beta version)
this is the "pixel perfect" tag for making PDFs
new IMAP filter (cfimapfilter)
creates "like" buttons, etc.
Member functions --
Full cfscript parity with tags -- should be 100% of what you can do in CFML
new Elvis operator ?:
built-in functions as first-class objects
new settings in application.cfc
app specific datasources
was in CF5, then gone in 6, now it's back in 11
structNumberValidation - to change new default of stricter validation
complexexforinclude - to control that cfinclude allowed list
customSErialize - to support new rest CUSTOM SERIALIZATION
some old features are not just deprecated but are "obsolete", they've been dropped and are no longer usable
mostly old attributes but some tags too -- cfgraph, cfservlet
page called "deprecated features"
things now supported in CF Standard that used to be only in CF Enterprise --
CF archive (car) mechanism (to move CF admin settings from server to server)
- datasources, all the admin settings, SOME admin settings, etc.
secure sandbox (to lockdown what code in different directories can do).
Limits on Web Sockets are gone now too
CF 10 limited # of web sockets yo could have
Some features ARE Enterprise-only
Full DDX Support
Websocket cluster support
CFHTMLtoPDF Cluster Support
There's a guide on "edition differences" available at the Adobe website.
have to switch from CFDocument to CFHTMLtoPDF to get the new pixel perfect output.
-- note that cfhtmltopdf stops page processing (Charlie found this).
CF10 had intro'd new access log, tracking every request
-- Provided via Tomcat AccessValue
(not enabled by default in cf11)
Charlie's talk "what's new and different about CF10 on Tomcat" for more info on this stuff.
Minor change in cfhttp
it appends the port to the URL even if it's port 80.
Google don'ts like this, some other sites maybe too
can override it with a cfhttpparam setting to get around it
Bugs -- yes there are some bugs
has been a CF11 update, addressed some very important bugs, especially if you're on IIS and REBUILD YOUR CONNECTOR
if you changed ANY setting in IIS THE application pool locked up.
there's an article on carehart.org with more info on this.
Update 2 came out this week -- mostly a security update.
Another update planned soon
update 14 for cf10, those fixes haven't been added to cf11 yet
To get unreleased patches listed there, email firstname.lastname@example.org (yes it's one L, that's not a typo)
Other things --
CF9 support ends at the end of 2014
CF10 installers were gone but that's because of a legal issue with something in the installer. 10 is still supported, it's just that the installer isn't available.
Can still find them in other places
Amazon AMI's have been updated
CF Builder 3 --
ripped out Aptana, made it faster
automatic update/notification so you can stay up to date (already been 3 updates to Builder 3)
new templateing feature
and it runs on linux now too
CFBuilder LIcenses are included with ColdFusion server licenses.
Other resources --
Akbar Sait's site has a ton of CF links and resources
Charlie's slides are available at PDF of my slides at carehart.org/presentations