Monthly Archives: August 2005

Time Management & Invoicing

Long ago in a galaxy far, far away I worked on a project for an employer. They wanted some way for us developers (and eventually QA, and such) to track our time. The reason was two fold; see what we were spending our time on, and capitalize any new development in order to manage costs.

Well as resident CF Guru the application we needed fell to me. Not only was I the sole developer, I was the technical architect, before such titles existed. Long story short I came up with a pretty damn robust time tracking app, with lots of reporting features. When I left there and the company folded, I modified the application (which I somehow accidentally left on a CD) to be my time tracking and invoicing app for my consulting business. The time entries I made, were then translatable to an invoice that I could print or email. This was all CF5, so none of the cool new features we have today.

A badly planned HD wipe and restore left me with a copy of my app that was 5 months old a few years ago and I never came back to it, since I was a full time employee. Well I’m getting back into consulting again so I’ve resurected the app and am bringing it up to 2005.

Once I get it back to mostly stable I’ll start posting Zips of it for download by anyone interested. Screen shots are available over at my other site.

Scope Creep! I damn near killed her!

There really should be fines for those who indulge in either scope creep or over engineering a solution. I’m all for delivering a quality product, obviously. I’m a professional. However, delivering an over engineered solution that solves problems that people aren’t having, late, is not cool. In my experience users would rather have what they asked for on time, and then think about V2 to address the difficencies in the current version. Windows 3.0 wasn’t the last version of Windows. Too many developers out there, are so concerned with only working on cool new shit that they forget that if not them, someone has to maintain the beast they create. So they build this massive impossible to understand frankenstein monster of an application.

It really sucks some times.

My version of Captcha

Rob Brooks Bilson has an interesting post on how CFX_captcha is (or was at the time of his post) is proving to be tough to beat.

For those (are there any) that don’t know, captcha systems are those annoying little things that ask us to type in some random string of letters and numbers.

As Rob points out, for those of us that are color blind these systems are really hard to deal with. Hell I’m not color blind and I often have to refresh until I get a legible string.

So this brings us to my version. I could have used cfx_captcha, but I’m cheap and it woulda cost like $10/month for CrystalTech to host the CFX for me. Pass!

I launched my blog with no spammer protection initially. That, as you can imagine didn’t go well. My comments were flooded with Spam almost immediately. Short of disabling comments I needed a solution, so I came up with something pretty elegant IMO.

On the surface it’s a Checkbox with a label of “I am human”

under the covers, I create a random number and save it to session scope. That number becomes the name of the form field for the checkbox. On the processing end of  the comment processor, I look for a form field that matches my random number. If I have it, the comment passes. If not, I quietly disregard the comment.

<!— Random GUID Maker to fool spammer assholes —>

<CFSET SESSION.RandPart = RandRange(1,999999999)>

<CFOUTPUT><BR><input type=”checkbox” name=”FORM_#SESSION.RandPart#” value=”1″> I am Human (no check, no post).<BR></CFOUTPUT>

On the processing page it’s pretty simple.

<CFSET VARIABLES.LocalName = “FORM_#SESSION.RandPart#”>
<CFIF (Find(“www.johnwilker”, CGI.HTTP_REFERER) OR Find(“localhost”, CGI.HTTP_REFERER)) AND IsDefined(“#VARIABLES.LocalName#”)>

If it passes then the post is put into the database, if not the form says thanks and moves on.

I’m not sure how foolproof it is, but since I launched it. it’s never failed me. And it doesn’t offend the color blind.

Paul Graham nuggets

I was killing some time at work today… ironic when you read this

Here are some really great quotes. I decided to pull a few quotes out in case you don’t want to read the whole article. Paul really does have some incredible insights into how developers think. He calls us hackers, which doea sometimes fit. Not often enough for me.

“The atmosphere of the average workplace is to productivity what flames painted on the side of a car are to speed.”


How true is this? I come in every morning to a literal maze of cube walls. Sometimes when there’s a loud noise lots of heads pop up. I’ve had the opportunity to work remotely before and can definitely atest to the truth that I was much more productive, and actually worked more hours when working from home.


“The basic idea behind office hours is that if you can’t make people work, you can at least prevent them from having fun.”

My current employer is all about this, despite what the marketing department thinks. There’s no fun there. Lots of cheifs, very few indians. the top down approach is in full effect.

“The third big lesson we can learn from open source and blogging is that ideas can bubble up from the bottom, instead of flowing down from the top. Open source and blogging both work bottom-up: people make what they want, and the best stuff prevails.

The number of really, truly cool and useful ideas that have been offered up to the ivory tower is truly amazing. The answer is always the same. Well sometimes they actually give and answer, mostly the cogs are ignored.

“So these, I think, are the three big lessons open source and blogging have to teach business: (1) that people work harder on stuff they like, (2) that the standard office environment is very unproductive, and (3) that bottom-up often works better than top-down.”

I wish my current employer would realize these very obvious facts. I doubt they ever will, but for the short time that I will be there I’ll keep trying… Some one has to be the trouble maker. That’s TO and I for sure.