Bluemini.comBluemini.com

Intelligent Fusion - Nic Tunney

Job: LiveCycle Resource

posted: 13 Jan 2009

I have a need for a LiveCycle ES developer. Java background is a huge plus. Anyone out there fit that description? Great pay!

cf.Objective() 2009 News

posted: 30 Dec 2008

News item 1: Call for speakers/topics closes on December 31st!!! News item 2: Registration is open. News item 3: Topics and speakers will be announced VERY SOON.

Socialize Me

posted: 06 Dec 2008

I've had some time recently and have been trying to reconnect with the community at large. Here are some ways to Socialize with me: LinkedIn: Profile Start Page
Twitter: ntunney
Skype: Click the Skype button over on the right nav bar

Web 3.0 and the Government

posted: 06 Dec 2008

Cross post heaven this week! Another rambling I put together on the semantic web and it's place in Government. -- snip --
"Imagine if local law enforcement was able to instantly query the Social Security Agency's database from their in-car HUD while (and here comes the magic) using data from Department of Homeland Security and FBI through secure channels within the same data query to cross check all available data for a suspicious individual (i.e. Service Orchestration). This data could then be analyzed and massaged in real time specifically for the enforcement officer's current use case. This is all possible through the 'webulous' cloud of semantic data that will make up one aspect of Web 3.0."
-- snip -- Full Post Here

Agile Government Article Posted

posted: 05 Dec 2008

I wrote up a short article entitled 'Does an Agile Methodology work in a Government Environment?' that may interest some of you. It's a pretty long post, so I'll just post an excerpt here: "Thinking back to when I was first learning what Agile was, I can recall needing an AgileSpeak to GeekSpeak dictionary. Remembering that one of the key tenets of Agile methodologies is to engage the customer throughout the process in ways that they can understand (think user stories) you have to wonder, how can this occur if they don't understand the high level process? It actually will not matter, as they may be reluctant to continue when you approach the idea of involving an Agile process asking if they want to be the chicken or the pig." Full Post

cf.Objective() 2009 Call for Speakers and Topics

posted: 02 Dec 2008

The cf.Objective() Steering Committee just announced they are accepting topic and speaker suggestions. More info can be found here. I look forward to seeing many of you at cf.Objective() again this year!

LiveCycle SP1 installation bug

posted: 30 Nov 2008

Quick cross post: Good info an error that can occur when launching the configuration manager after installing SP1. Post

Looking to the past - and moving towards the Futur

posted: 29 Nov 2008

Today is my last day with AboutWeb after working with the great folks there for a bit over three years. I've learned much during my tenure at AboutWeb as VP of Architecture, and hopefully my colleagues there have learned a few things from me as well. I will always think fondly of AboutWeb and it's employees, as well as the friends I've made while working on projects there. AboutWeb is a great shop and I encourage you to continue to contact them for the service you have come to expect over the last few years. On Monday, I will begin a new career with Twin Technologies. I will still have my hand in the ColdFusion world, but will be focusing more of my time on Flex, AIR and LiveCycle, as well as processes and management. I look forward to working with the top-notch developers at TT and getting to know the entire team and their clients. I'll post more information as I am able.

Tracks Announced for cf.Objective() 2009

posted: 26 Aug 2008

cf.Objective() will have 4 tracks this coming year. The track descriptions just hit the web site: http://www.cfobjective.com/sessions.cfm Can't wait for 2009!

Early cf.Objective() News

posted: 07 Aug 2008

The site has been updated with new dates and a solid location: May 14-16, 2009 at the Hyatt Regency Minneapolis, MN Last years event was awesome, as usual, and I am looking forward to hearing more details about the 2009 conference. It seems like the conference is lining up to be another great one! Hope to see you all there! cf.Objective()

Baltimore Adobe User Group Meeting

posted: 03 Aug 2008

The first meeting of the Baltimore Adobe User Group will be this Wednesday, March 26th at 6:00 pm. Topics include:

  • Intro to Object Oriented Programming in ColdFusion - Curtis Layton
  • What's all the buzz about Adobe LiveCycle ES? - Rolando Lopez
  • Unleash the power of Reader Extensions ES - Rolando Lopez
Hope to see you all there! Please RSVP if possible so I can judge how much pizza and soda to order.

Reminder: BAUG Meeting Tomorrow!

posted: 03 Aug 2008

The Baltimore Adobe User Group is meeting Wednesday, April 23, 2008 at 6:00 PM. Pizza and drinks will be provided. Topics include:

  • Using ColdFusion with AIR - Samer Sadek
  • Introduction to Unit Testing with MXUnit - Marc Esher
Update: The Adobe Connect link is http://adobechats.adobe.acrobat.com/r77036285/

Baltimore Adobe User Group Broadcast

posted: 03 Aug 2008

We will be attempting to broadcast tonight's Baltimore Adobe User Group presentations on ColdFusion and LiveCycle via connect: http://adobechats.adobe.acrobat.com/baug032608/ I will post the recording's URL as a comment to this post as soon as possible.

Transfer goes 1.0

posted: 03 Aug 2008

Kudos to Mark! Transfer ORM is now 1.0. The feature list definitely makes it worth the wait.

Exciting Balitmore adobe User Group Announcement

posted: 03 Aug 2008

One of our sponsors, Towson University, has agreed to let us extend the UG meeting. This means no more rushing our presenters to finish on time, and no more cutting Q&A short! Doors will now open at 5:45 pm, with the first presentation running from 6:00 - 7:15. The next presentation will run from 7:45 - 9:00. I will announce the details of the next meeting (May 28) very soon at www.baltimore-aug.org.

cf.Objective() 2008 Slides and Files

posted: 03 Aug 2008

Here are the files from my presentation "Intelligent Approach to OO Design in CF" from cf.Objective() 2008. Presentation (PDF)
Files (zip) Thanks again to all who attended!

cf.Objective() Presentation

posted: 03 Aug 2008

I just wanted to thank everyone who attended my presentation. I am always amazed at the level of developer that I see at cf.Objective(). I promised to put the code and presentation up here, and will have to do that once I get home as I am having some problems with the wireless here at the hotel. If I promised you an email, I will send it to you as soon as I can get a good connection as well.

BAUG Meeting

posted: 03 Aug 2008

If you want to watch along, here is the URL: https://admin.acrobat.com/_a204547676/baug0508/

Baltimore Adobe User Group Meeting Topics Posted

posted: 03 Aug 2008

I just posted the topics for this month's Baltimore Adobe User group. Hope to see you all there! Link: http://www.baltimore-aug.org

JavaScript Custom Events and YUI

posted: 03 Aug 2008

Are you using custom events in JavaScript? If not, they are something you should really look at, especially if you are building JS heavy applications, or building applications using Ajax. I'm pretty sure that most developers are familiar with JavaScript events. The basics and terminology are that an event is fired when a specific action is taken within your DOM. Listeners subscribe to an event and wait for the event to fire, and when it does, they call a bit of JavaScript or a complete JS function. Common events include click, submit, and mouseover. In HTML, we can create listeners for these events directly through HTML tags using tag attributes. An example of this is the "onclick" attribute of the button tag. Click the following button to see an example: Example 1 Code:

<button id="myBtn" onclick="alert('howdy');">Click Me</button>

Note that in the "onclick" attribute, we do not have to use "javascript:alert('howdy');" as we would within an "href" attribute, as it is implied that event attribute values will be JavaScript. The standard JavaScript events are great, but what if you need to define and subscribe to your own events? With the Yahoo! User Interface (YUI) libraries, this is really simple. Why would you need a custom event? Well, tons of reasons. A recent example I needed was to trap ColdFusion errors being returned via an Ajax call to CF. Since the CF error is returned as HTML, just viewing the serialized return value as plaintext was tedious. By applying a regular expression to the value being returned from my Ajax call to CF which looked for the error, I could fire a custom event that notified a listener that an error was found, and show that error in a pop up window as HTML (which is MUCH easier to read!). Another Ajax example would be a form submission that checks values server side. The standard JS submit event (usually defined in the "onsubmit" attribute of the form tag) is fired every time a user clicks a submit button. This tells us that the form was submitted, but does not tell us if the server side validations being handled through Ajax were successful. To get around this, in my Ajax callback function I checked to see if the validation was successful, and if so I fired a custom event called submitSuccess. Listening for this event, I could then run the appropriate logic within my Web 2.0 application to let the user know their form was submitted successfully and continue within the app. The YUI can be downloaded from SourceForge (other JS frameworks also have similar functionality). At a minimum, you will need to include the base Yahoo! library and the Event library. During development, you can use the following code, but I would recommend local files in a production environment:

<!-- Dependency -->
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.2/build/yahoo/yahoo-min.js" ></script>

<!-- Event source file -->
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.2/build/event/event-min.js" ></script>

To create a custom event, simply define it as such:

// create a custom event
myEvent = new YAHOO.util.CustomEvent('myEvent', this);

I generally create a JS object to hold my custom events. It makes keeping track of events and notifying other developers of your events much easier. Now that you have an event, you must subscribe to it (an event without listeners is like a tree falling in the woods with no one to hear it ;) ). We also need to define a callback function, which is the function that runs when the event is heard:

// define a callback function
function callback (e, args) {
   alert('myEvent Fired! Argument: ' + args[0]);
}

// subscribe to the custom event
myEvent.subscribe(callback);

Notice that two arguments are defined in the callback function. The first is the event object itself. The second is an array of arguments passed from when you fire the event. You do not have to pass any arguments, but in the example below, we pass one string argument when we fire the custom event. To fire the event within your code is also simple:

myEvent.fire('Argument');

Hope this helps someone out there. There is more that you can do with custom events that outside of the scope of this introductory article, so please refer to the YUI Event documentation. I plan to blog a few more tips in the near future relating to the YUI, so if there is anything you've been dying to try that you need an example for, let me know.

Not Using CFCs?

posted: 03 Aug 2008

I am giving a presentation to a ColdFusion User Group tomorrow on CFCs (ColdFusion Components), and I wanted to quickly post some thoughts. I follow the CF-Talk lists regularly, and see many conversations about CFCs. The good things about this is that more people are digging their claws into the power that are CFCs. The bad thing about this is that people are getting into CFCs about 6 years after they were introduced. This could be for many reasons (and more): 1. New to ColdFusion
2. Just upgraded from a pre-MX version
3. Just plain comfortable with procedural inline coding.
4. ColdFusion is only a small aspect of the job.
CFCs are a great way to maximize code reuse and maintainability across your application, as well as across other apps. They also enable you to build web services, manage events, extend your code, etc. Really, they are an essential part of any CF developer's toolkit, whether or not you intend to use them for writing Object Oriented CF, or just to organize your code for improved reuse and maintainability. My challenge to new, existing, whomever developers this week is to learn these four tags. When coupled with CFOBJECT and CFINVOKE, or createObject(), these four tags will make you a pro at CFCs no time! 1. CFCOMPONENT
2. CFFUNCTION
3. CFARGUMENT
4. CFRETURN
These tags can be found for MX, MX7 and CF8 in the appropriate livedocs. Google for "livedocs" and your CF version number to get started.

Broadcast: Railo road Show

posted: 30 Jul 2008

Railo Road Show is coming to Baltimore this Wednesday. If you can't mke it in person, feel free to join in online at 6:00 PM EST: http://adobechats.adobe.acrobat.com/baug73008/

Special UG Event - Railo

posted: 29 Jul 2008

Gert Franz will be joining us at the Baltimore Adobe Users Group Wednesday, July 20, 2008 as part of the Railo Road Show. Hope you can make it! Details NOTE: Please RSVP as space is limited.

Gumbo is beta

posted: 16 Jul 2008

FYI: http://opensource.adobe.com/wiki/display/flexsdk/Gumbo

Top 6 Underused ColdFusion Functions

posted: 02 Jul 2008

In keeping with my "back to basics" theme, I wanted to give my opinion on the top 6 functions that developers often overlook. Are these the most important CF functions? No, but, I often see developers using a combination of other functions, inferior functions, or large code blocks to achieve the same results. 6. HTMLEditFormat(): All this function does is escape special HTML characters. Why is this important? Well, I see many sites that will display a user entered form field in their error message. Using HTMLEditFormat() helps to ensure that a malicious user is not injecting code. 5. REFind(): By golly, regular expressions are not that hard. The power that regex unleashes is amazing, especially when coupled with the other available regular expression functions found in ColdFusion. The complex string searches you can produce with REFind() puts find() to shame. Give it a try ;) 4. structKeyExists(): As a best practice, structKeyExists() should always be used as opposed to isDefined(). It is faster. It is safer (think scopes). It is easy. 3. mid(): When performing code reviews, I often see something like this:

// get rid of first and last 3 characters
foo = left(right(bar, len(bar)-3), len(right(bar, len(bar)-3))-3);

instead of simply:

// get rid of first and last 3 characters
foo = mid(bar, 4, len(bar)-6);

While this is a poor example, I've seen mid() not used many, many times. 2. duplicate(): Structures in ColdFusion are passed by reference. This means that if you pass a structure and make changes to it, the changes are replicated back in the original structure. This is a good thing. It can also be a bad thing when you really want a new and totally different structure value. Here is where duplicate() comes in. 1. listAppend() and listQualify() Two list functions actually make my number one spot. I have seen more chunks of code to handle these two functions, simply because developers forget to check the livedocs when dealing with lists (or arrays or structures...). Consider this:

<!--- create an empty list --->
<cfset myList = '' />
<!--- loop over a query and add one columns values to my list --->
<cfloop query="qFoo">
   <cfset myList = myList & qFoo.myCol & ',' />
</cfloop>
<!--- gotta get rid of that last trailing comma --->
<cfset qFoo = left(qFoo, len(qFoo)-1) />

instead of just:

<!--- create an empty list --->
<cfset myList = '' />
<!--- loop over a query and add one columns values to my list --->
<cfloop query="qFoo">
   <cfset myList = listAppend(myList, qFoo.myCol) />
</cfloop>

Also, listQualify() is a forgotten function. Lets say we have a form with a multiselect box, and are searching against a database using an IN clause against the selected value(s). Well, string values need to be qualified with single quotes (') to work in an IN clause. I've seen this (and this assumes they are using listAppend() ;) ):

<cfset tmpValue = '' />
<cfloop list="#form.myVar#" index="i">
   <cfset tmpValue = listAppend(tmpValue, "'" & listGetAt(form.myVar, i) & "'") />
</cfloop>

Wasted cycles. Instead of just using:

<cfset tmpValue = listQualify(form.myVar, "'") />

So, this post isn't really about if these functions make your list or not. What they are meant to really illustrate is that it is high time everyone heads over to the livedocs and review functions that have been added over the last few versions of ColdFusion, or even functions that have been there all along. Then, bookmark the page and refer to it next time you say "Man, there's gotta be an easier way to perform this simple task", because there just may be! BTW, if I were to pick my top few underused CF tags, they would have to include: CFTRY/CFCATCH/CFTHROW
CFSWITCH/CFCASE
CFOBJECT (when calling multiple functions in the same CFC with CFINVOKE, although I prefer createObject() )
CFTRANSACTION