Blog

Tuesday at SacInteractive -- Intro to Object Oriented JavaScript

This Tuesday night (tomorrow) at SacInteractive, I'll be giving a new (for me) presentation, "Intro to Object Oriented JavaScript". We'll go over basic terms like "class", "object", "constructor" and "encapsulation". And we'll show you how they fit into the JavaScript world. Object Oriented Programming is its own beast, and there are some aspects specific to JavaScript that are different than other OO languages. This preso hopes to bridge that gap for you.

The meeting starts at 6:30 at HackerLab (1715 I St, downtown Sacramento). Hope to see you there!

-Nolan / SacInteractive

CF Camp Wrap-Up

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.

ECMAScript 6 (Matt Bourke) – Matt's talk was excellent. It was a massive amount of new information about what's coming in in the next version of ECMAScript / JavaScript (and also a few bits about ECMAScript 7) mixed in with a few bits of humour. His slides were clear and easy to understand, with concise and intuitive code samples for all of the topics he discussed. For the first time probably ever, I'm excited about new features coming in JavaScript. :)

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.

Get Grulping With JavaScript Task Runners (Matt Gifford) – Matt's talks are always very enjoyable. He mixes tons of useful info with lots of humor and personality. This talk was no exception. Grunt has been on my "todo" list for a while now, and after Matt's talk I'm very excited to add it into one of my next projects.

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.

-nolan

CF Camp Notes: Get Grulping With JavaScript Task Runners, Matt Gifford

Get Grulping With JavaScript Task Runners, Matt Gifford

"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

http://gruntjs.com
@gruntjs

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 --
package.json
and the grunt file

package.json file:
npm init
-- 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.

grunt --version
checks version number

Gruntfile.js
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)

view plain print about
1module.exports = function(grunt){ grunt.inotConfig({}));


the bare minimum we need to get Grunt up and running:
package.json
Gruntfile.js

CSS concatentation
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

grunt.loadNpmTasks('grunt-contrib-concat')
tells Grunt "here's a plugin i want to use"

minification
grunt-contrib-cssmin

view plain print about
1grunt.loadNpmTasks('grunt-contrib-cssmin')

grunt-rev
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"

grunt-contrib-clean
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?
view plain print about
1grunt.registerTask('myCustomTaskName', [ array of ORDERED tasks we're going to run via Grunt ] );


grunt-contrib-watch
task for watching files

grunt-remove-logging
removes console.log calls from your JS files!

grunt-contrib-jshint
Linting in your JS files

grunt-contrib-uglify
JS minifier

grunt-http
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.

CF Camp Notes: Event Gateways, Gert Franz

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
Instant Messages
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
etc

Example Gateways in Railo
Instant messages
IRC chat
Active MQ messenger
Directory watcher
mail watcher
- 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

Message Generator
-- someone who sends an SMS text (for example)
Event Gateway
-- 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.

Listener CFC
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)

DirectoryWatcher
MailWatcher
-- event gateways in Railo

(Demo time)

bitnami.com/contest
and vote for Railo

CF Camp Notes: Hidden Gems in ColdFusion 11, Charlie Arehart

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:
wikidocs.adobe/com/wiki/display/coldfusionen/

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

Antisamy
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.

cfhttp
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

CFInclude change
can now limit what file extensions can be CFlincluded
can set in CF admin or in application cfc/cfm

Language enhancements -- new tags

cfhtmltopdf
no longer Windows-only (different from the Beta version)
this is the "pixel perfect" tag for making PDFs

new IMAP filter (cfimapfilter)

cfoauth

cf_socialplugin
custom tag
creates "like" buttons, etc.

new functions
ArrayMap, Reduce
Can DeSerialize
CanSerialize
StructMap
STructReduce
etc

Member functions --
[1,2,3].foo()

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
datasources[]array
structNumberValidation - to change new default of stricter validation
complexexforinclude - to control that cfinclude allowed list
customSErialize - to support new rest CUSTOM SERIALIZATION
ETC

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

HTML5 Charts

Some features ARE Enterprise-only
PDF signatures
Full DDX Support
Websocket cluster support
CFHTMLtoPDF Cluster Support

There's a guide on "edition differences" available at the Adobe website.

Gotchas --
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 cfinstal@adobe.com (yes it's one L, that's not a typo)
bugbase.adobe.com/index.cfm

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
gpickin.com/cfrepo/
or tinyurl.com/cfdownloads2

Amazon AMI's have been updated

CF Builder 3 --
vastly different
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 --
blogs.coldfusion.com

Akbar Sait's site has a ton of CF links and resources
akbarsait.com
Charlie's slides are available at PDF of my slides at carehart.org/presentations


More Entries

Recent Comments

CF Camp Notes: Hidden Gems in ColdFusion 11, Charlie Arehart
Nolan Erck said: Hi Charlie, Thanks for the clarifications and extra info. ... [More]

CF Camp Notes: Hidden Gems in ColdFusion 11, Charlie Arehart
Charlie Arehart said: Hey Nolan, thanks for offering those notes to folks. Just a ... [More]

CF Camp Notes: Command Box, Luis Majano
Nolan Erck said: Thanks for the link, Brad! (It really was a great preso -- e... [More]

CF Camp Notes: Hidden Gems in ColdFusion 11, Charlie Arehart
Nolan Erck said: Hi Charlie, Thanks for the clarifications and extra info. ... [More]

CF Camp Notes: Hidden Gems in ColdFusion 11, Charlie Arehart
Charlie Arehart said: Hey Nolan, thanks for offering those notes to folks. Just a ... [More]

CF Camp Notes: Command Box, Luis Majano
Nolan Erck said: Thanks for the link, Brad! (It really was a great preso -- e... [More]



BlogCFC was created by Raymond Camden. This blog is running version 5.9.7. Contact Blog Owner