Captcha Testing

I finally snapped this afternoon. Several months ago I switched to a form based contact method on my website after I was receiving a deluge of Spam through my email address. I then had the form pass on the messages to a new email address and my Spam problems blissfully disappeared. That is, until some enterprising Spam pedlar or pedlars decided to either map my form to an automated system or employ some very cheap labour to submit the hell out of my contact form.

I decided to implement a text based CAPTCHA system. Now most CAPTCHA systems employ the distorted letters image based approach. I suspect those are much harder to defeat but are also much more of a pain for legitimate visitors trying to send a message. I like to employ the lesser used question based method.

What colour is the green monster?

This simple question should be easy enough for a five year old to answer but  changes to a random question each time the form is rendered. It's possible for me to increase the difficulty of the question or change to less predictable questions if the pattern becomes too simplistic or mappable. It has the advantage of accessibility since it doesn't require the visitor to view images or hear sounds. It's also much easier to implement

I simply create a set of questions and answers with a numerical key. The questions are then selected at random when the form is generated and the numerical key is passed along with the form for validation. Before sending the email, the code checks to make sure the associated value matches the correct answer. If not, the visitor is told the answer was incorrect and is presented another random question to try again.

I think the system may actually be more effective than image based techniques as it's not a mindless copying procedure but rather a slightly more taxing logic problem. Time will tell I supposed. If I start getting Spam again I'll change up the question type or make the question slightly harder.

Now to implement this for comments.

After Mesh

Thanks to Stuart, Rob, Michael, Mark and Matthew for putting on a great event.

The presentations served as a great jumping off point for ideas and discussions in the halls, the un-lunch rooms, the bars and the back channel.

Best Presentation: Pinko Marketing by Tara Hunt
Best Quote: "We're like drug dealers...Give em a tast and if they like it, they'll buy in" - Jason Fried
Best Product Advice: Get your product out as sooner rather than later - Jim Coudal
Best Personal Advice: Become a mentor to somebody and help give back to the community - Albert Lai
Best Hangout: The unconference/un-lunch room
Best Conference Feature: Power outlets all over the floor!

Search Zones

Google and Yahoo! have conquered the vast majority of search zones, though I believe they have skipped two areas that I am constantly finding myself yearning to search; history and bookmarks.

So many times I've remembered a story that I've previously read or bookmarked and yet I can't find it because the details I'm looking for are not contained within the meta-data.

The new Mozilla Places functionality may be a good area to test this implementation. The Places Browser History seem like the most likely spot to hook in. Will this be extensible? Can keyword indexing be added through extensions or third party programs like Google Desktop?

WiFi Cell Phone

After playing with Asterisk and the extremely easy to use Asterisk @ Home I'm now thinking of all the wonderful possibilities of VoIP. WiFi cellular hybrid phones are now coming to market and it would be wonderful to piggyback on open WiFi networks instead of cellular network. Unfortunately I see two problems. 1. You can't pass a call between a cellular carrier and your internal PBX. 2. Firewalls. Unless it's your own WiFi set-up or a trusted source chances are it's not going to let a SIP connection through.

Demo Camp 5.0

Just a reminder that DemoCamp 5.0 is tomorrow night at the Bahen Centre for Information (University of Toronto) (Google map) from 6:30PM to 8:00PM.

They're still looking for suggestions on after session drinks and food. I'm looking forward to Chris Nolan's overview of RJS templating and I believe Sutha Kamal or another representative will be demoing the latest from Ambient Vector among other presentations.

Feedburner

As a quick mental diversion today I decided to try out Feedburner instead of the direct RSS feed that I had previously implemented. I also changed my feed icon to the new standard feed icon.

Feedburner provides me with a statistical overview of my RSS traffic but more importantly, they make it much easier for viewers to subscribe to my feed.

It has an easy sign-up procedure and monetizes by item click-throughs and inline ads. I'll have to see if the data is enticing enough to pay $5 a month for the service. I'm guessing my traffic isn't large enough to warrant it though.

The interesting part was figuring out how to automatically redirect all my existing traffic. A simple mod_rewrite rule that permanently redirects all agents that don't identify themselves as Feedburner was all that was needed.

RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^rss/?$ http://feeds.feedburner.com/MichaelGlenn [R=permanent,L]

Simple! Assuming your news reader obeys permanent redirects.

Asterisk and Unlimitel

For months and months we have been using Primus at the office with the intenet that we would go with a more professional phone set-up including a digital receptionist, extensions and personal voicemail. Having a single line is hardly professional but the alternatives were a little pricier than we wanted to pay. I had heard of all these great savings with VoIP but they tend to be a single line set-up with common voicemail, helpful at home but not at the office. Other companies we talked to had fancy VoIP/Internet Telephony options but at steep per employee, per month prices.

I started to research Asterisk again as we had an older PC kicking around to use and I quickly found out about DID lines and how we could utilize them. What I wasn't clear about was whether one DID line meant one phone call or whether you could have simultaneous phone calls. Several DID suppliers suggested that I get multiple DID numbers and they could configure rollover at an extra charge. Not bad, but I'd rather have more control over the options. So I installed Asterisk@Home with no problems and started searching for a DID supplier.

After searching on the Toronto Asterisk User Group mailing archives I came across Unlimitel. They offer Canadian exchange DIDs in Southern Ontario, Ottawa and Montreal at $2.50 per month, 1.1 cents per minute within their calling areas or 4.4 cents per minute anywhere else in Canada and the U.S.

But the service is what I'm writing about. Stephan Monette at Unlimitel was extremely helpful in setting up the system and even went so far as to log into my Asterisk box and help configure it when after following their helpful set-up instructions for Asterisk@Home I made a typo and could receive incoming calls.

Thanks Stephan, we're looking forward to using the system!

Bugmes

When I'm eating my own code dogfood I frequently stumble across needless architecture that slows me down and frustrates me to no end, but I don't have the time re-engineer it right away. The problem is that I need to write down my thoughts about the particular situation that the frustration occured in so later when I'm refactoring I can remember all the issues I need to address and distill them into programming tasks.

So I started a new wiki page on our intranet called bugmes. It's a nice centralized notepad for the users and developers in house to get their gripes out.

TorCamp Thanks

Thanks to David Crow and all the wonderful people I met at TorCamp. It was  a fantastic success and I look forward to meeting more people at the next event. Already Albert Lai of Bubble Labs is organizing a demo night and there is already talk about TorCamp in the Spring.

I was impressed with talks given by Reg Braithwaite, Patrick Dinnen of Wireless Toronto, Leila Boujnane of idee and my business partner Jay Goldman.

Special thanks to the sponsors and John and Geoff of Tehann + Lax for opening up their offices to us.

During my session on time management John Lax and several others in the room raised the issue of valuation of a job versus valuation of time. Jay helped to continue the discussion over on Google Groups.

Spring and Fall Get Shafted

It's snowing in Toronto today. Yesterday it started snowing for the first time this season.

In Toronto, Southern Ontario and perhaps most of Canada, we have adjusted our notion of when the seasons occur largely based on weather and holiday weekends. Officially, each season is supposed to have three months with the following start days (for the northern hemisphere, give or take a few days depending on your country)

Spring, March 21
Summer, June 21
Autumn, September 21
Winter, November 21

According to Wikipedia meteorologists go by the following
Spring: March, April, May
Summer: June, July, August
Autumn: September, October, November
Winter: December, January, February

Which is still fine as far as each season is concerned as they each own three months and they're all quite happy as they have an even share.

Not so here. We define our seasons as the following
Spring, April to start of May 2-4 weekend (Victoria day)
Summer, May 2-4 weekend to Labour Day weekend inclusively (approximately August 31)
Autumn, after Labour Day weekend (approximately September 1) to October 31
Winter, November 1 to March 31

So clearly Winter gets the lion's share with five months, Summer still hangs on with a bit extra totalling just over three months and Spring and Fall get shafted with only two months. Hell, Spring is only like a month and three weeks.

All because it snows in November, doesn't start to warm up until April and we love to mark our Summers with cottage weekends.

Thanks Fall 2005. It was nice knowing you.

Google Analytics - T Minus 12 and Holding

So at least I'm not alone in my wait for Google Analytics data to roll in. Tim Bray has reported seeing the message "Your first reports will be ready within twelve hours" and Stephen O'Grady isn't able to get Google Analytics to recognize that he's enabled tracking on his site. It's now been almost 48 hours since I was able to activate my account and it recognized that I had started to send data it's way.

I would imagine that it's quite a big queue given the amount of attention the new service received. It's interesting to note that a recent post on Digg of Google Base being officially launched today caused my requests to the server to result in a 500 error. I wonder if Google's resources are now starting to be stretched a bit thin such that they can't quite seem to keep up with our voracious demand for these new products.

I'm curious to compare the data Analytics will spit out versus my local package. I'm not sure if you can gleam search engine data from this as spider's probably won't execute the Javascript code to make the call.

T-Minus 12 hours and holding!

Update: Stats! Presumably the numbers aren't matching my local stats due to the RSS feeds but it's quite disparate. I'll have to perform a calculation to see what the differences are between RSS requests and page requests.