Think Different

Holy cow! I haven't blogged about anything in a very long time. I intend to do something about that starting with this post.

A little while back a colleague asked me to look at some code. He was curious if I thought there was a better way to write it. The only thing I knew about the code was that it worked.

Before you ask. I can't share any of the code. Just let it go.

The code was designed to look for a known string pattern inside a user entered string. The original code was looking for very specific patterns. Also, it had some logic in it that would allow for some of the checking to be bypassed under certain conditions. Like it was explained to me, the code worked and did what was expected of it.

After about 30 minutes I had whipped up, what I felt, was a better way to write the code. My code had about a quarter of the lines and was more efficient. It would check for an infinite number of patterns and conditions. I ended up expanding on it and delivered a couple different ways to make it better. Each one expanding on the previous. Also, I felt my code was better constructed as solve the intent now and still work years from now without alteration.

This is where I feel that experience came into play. I had to write something like this before I was able to pull on that experience when writing it. Not only that, but just my overall time in the field has allowed me more overall exposure to things so my thought processes are just different when presented with a problem.

But, at the end of the day the code is not even the main part if this. All it does is provide context for the main point I want to make.

I think that all of us should strive to be better and "Think Different". What I mean by that is to always look for a better way. Don't continuously rely on how you have always done something. Expand your knowledge and find opportunities to do you what you do, just do it differently, do it better.

Failure is an option, but don't let it deter you. Not every attempt to make things better will work out they way you wish. When trying to find better ways you will more than likely find more ways not do do something. For example, it took Edison over 1,000 tries to invent the lightbulb. He kept striving to find a better way or a different way to accomplish his end goal.

When trying to make it better don't be afraid to reach out and ask for help. With today's technology we are all connected to a vast network of people that have probably already done that. The large majority of them are usually more than willing to help and offer their expertise. There is a large wealth of knowledge and support out there, but if you don't use it you are only handcuffing yourself.

The new year is quickly approaching. Try and spend part, if not all, of 2016 trying to "Think Different".

My Son the Blackbelt

I don't think I have ever used my blog for personal stuff. So if you will indulge me just this once.

Yesterday my son, Bryce, tested and received his 1st Degree Blackbelt in Taekwondo. He started just before he turned 4 and is now 8. Some might say it is a little young but if you knew the dedication and training he has done you would know different.

So, congrats to my son, may this be just the start of your journey.

CFSummit - Ask a speaker

The CFSummit is just a round the corner. Well, a long slow bending corner maybe. The speakers are hard at working trying to bring the best possible content they can to the conference.

The conference organizers have been doing a tremendous job putting everything together. The Trillo board has been used to organize the sessions and session info with great success.

Just recently the board has been updated to allow for public comments on sessions. This will allow you to ask the speaker questions before the conference. You can even suggest they talk about a subject that interests you.

https://trello.com/b/Jcvd0HRs/cf-session-ideas

Till next time...

--Dave

ColdFusion 10 websocket security issue fixed

Updater 11 for ColdFusion 10 has been released today. This updater fixes a number of issues. You can read all about the fixes here, ColdFusion 10 Update 11.

Most importantly, is the fix that will prevent websockets from invoking non-remote methods in components.

There is also a hotfix release for ColdFusion 9 to correct a security issue.

http://www.adobe.com/support/security/bulletins/apsb13-19.html

If you are running ColdFusion 9 or 10 I strongly suggest that you apply this patch.

Till next time,

--Dave

Have a say in the content for the ColdFusion Summit

Help decide on what the content for the Official Adobe ColdFusion Summit this year October 24, 25 in Las Vegas. You can get all the details and how you can help here... http://cfmumbojumbo.com/cf/index.cfm/coding/help-choose-the-content-for-the-coldfusion-summit/.

On a side note.. the site pretty slick use of trello.com

Till next time,

--Dave

Registration open for ColdFusion Summit 2013

In case you missed the announcement at cf.Objective(), there is a new ColdFusion conference coming later this year. This one is being put on by Adobe and will be held in Las Vegas, NV on October 23-24 2013.

Event registration is now open and you can register here. The coolest part of the registration is that it includes a license for ColdFusion Builder. Also, if you register now, the registration cost is less than the cost of Builder. So, it is like getting builder at a discount and then attending a conference for free.

Till next time,

--Dave

Slides from cf.Objective() 2013

Slides from my 2 cf.Objective() presentations can be found here... https://www.dropbox.com/sh/r8tsdygdd0km9ly/BZB4jvIfmx. You will not only find my sides but slides from other presenters there as well.

The file names for my slides start with "dferguson_".

The slides from the presentation I did for Ray Camden will be posted by him (if he posts them).

Till next time...

--Dave

Combining query results using QofQ

I have a process that processes an xml document. For each node in the xml a stored proc is called to update data. What I wanted to do was combine all the results into a single query return. I did some digging and found an old blog post http://www.bennadel.com/blog/114-ColdFusion-QueryAppend-qOne-qTwo-.htm - Ben Nadel that showed how to do it. However, that post was a bit old so I figured there must be a better way by now.

I asked a friend and he suggested to try using query of queries with a union to combine them. This seemed intriguing but there was an issue with this. The code I was working with was all in cfscript. I remembered that dealing with queries of queries in cfscript is, well, challenging. I dug up a ColdFusion Cookbook entry http://cookbooks.adobe.com/post_Query_of_Query_with_CFSCRIPT-16492.html on using QofQ in cfscript.

Using this I was able to fashion together a function to combine two queries into one. I am not sure how will this would work if the queries had different columns. Now, instead of dealing with about 100 independent queries, I can deal with just one.

view plain print about
1private any function combineQuery(qA, qB)
2 {
3 var qry1Result = arguments.qA;
4 var qry2Result = arguments.qB;
5 var qoqResult = '';
6        
7 // create new query object
8 var qoq = new Query();
9
10 // set attribute of new query object to be a query result with arbortrary name
11
12 qoq.setAttributes(QoQsrcTableA = qry1Result);
13 qoq.setAttributes(QoQsrcTableB = qry2Result);
14
15 // use previously set attribute as table name for QoQ andset dbtype = query
16 qoqResult = qoq.execute(sql="select * from QoQsrcTableA union select * from QoQsrcTableB", dbtype="query");
17
18 // return result
19 return qoqResult.getResult();
20
21 }
22    
23}

Till next time...

--Dave

The road to my first commercial app

I have been wanting to build an actual app for such a long time. But, I wanted to build something that was not out there yet. Everything I thought of there was at least 2 of in every app store. I just needed to find that one thing that didn't exist yet. Then I finally figured it out.

My family is very active in Taekwondo. My son will be a black belt soon and he is only 7. We were at a tournament a while ago and I noticed that people always wrote down scores on paper. This is because the judges give a score and write it down on their official paperwork but it is not displayed anywhere. It is up to the spectators to keep track of scores as they deem fit. After watching people fumble around doing this I knew there had to be a better way.

I did some investigation and discovered there was no app to do this. This is when I knew I found the app to build.

I then spent about 3 months building a prototype. I showed it a few people and they were very excited about it. I showed it the school owner and he said he had never seen anything like it. I knew at that point that I was on the right track.

With a working (mostly) prototype I went to a tournament to test it out. I ran into a ton of usability issues that made me rethink how the app should work. I also showed it to a few people and the basic reaction was "Where do I get that?".

The next 2 months were spent rebuilding the app from scratch. I started completely over and redesigned about 90% of it. I needed to make the app faster and cleaner to use. After some more feedback and user testing, the app was complete.

Then, I gave it to my 7yr old son. He played with the app for about 10 minutes and found a very critical bug in the app. I managed to use the app in a way that I never intended or foresaw happening. I made the necessary adjustments to the app and then finalized the rest of it.

My initial intent was to just build it for Android. However, my wife convinced me that I really needed to create it for iOS as well. This process was something I was not looking forward to. But I did it anyways. The process was made much easer as I was using PhoneGap and PhoneGap Build to create the app.

I had to make a few changes to the app so it would work correctly and look right on iOS but it was all minor. If I recall it only took a day to make the adjustments. In the end I was glad that the wife pushed me to do it.

Ultimately I have my first comercial app on the app stores. I think my son is more excited then I am.

You can check it out here...

iOS: Tournament Scorecard

Google Play: Tournament Scorecard

Amazon: Tournament Scorecard

Till next time,

--Dave

Speaking at cf.Objective() 2013

I honored once again to be speaking at cf.Objective(). This year I am privileged enough to have two proposals selected. The ones selected are...

  • My SQL Skills Killed the Server .. This session is all about writing better SQL.
  • Fuse All the Greatness - Combining Charts, Websockets, and Scheduled Tasks to Present Realtime Data .. Long title that pretty much says it all.

I look forward to seeing you all the conference.

Till next time,

--Dave

More Entries