Blog

Tonight at SacInteractive -- 2015 Planning meeting and Software Raffle!

This month we're going to do an "all hands on deck" planning session for 2015. Everyone is encouraged to bring their ideas for SacInteractive. If there's a topic you'd like to see us present, or something you'd like to present on yourself, please come to the meeting and discuss with us. We'll also be going over plans for the new logo, website, and other enhancements for the group. Plus tonight will be our SOFTWARE RAFFLE! Attendees will be entered for a chance to win a 1-year subscription to Adobe Creative Cloud.

Note the new location for tonight's meeting:

California Art Institute
2850 Gateway Oaks Drive
Room 250. Sign in at the front desk.

Starts at 6:30pm.

See you there.

-Nolan and Jon / SacInteractive

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

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