Thursday, December 24, 2009

Merry Christmas! Here are my Latest Christmas Recordings

First off, I hope everyone is having a great Christmas season. Over the past few years, I've recorded some Christmas music for family and friends. This year my band has released some recordings in album format. There are a couple of samples online. First off, here's a cover of "Baby, It's Cold Outside", which I sang with Catherine Taddo.

Secondly, my bandmate Andrew recorded an excellent version of Away in a Manger.

That's it for today, really. You'll notice some improvements to the WunderCounter going into the month of January, but that's not a topic for today.

Merry Christmas and Happy New Year!


Sunday, December 13, 2009

Analyze Your Traffic Before You Optimize Your Site

Recently I was asked if I do SEO. That's "Search Engine Optimization", if you're not familiar with that acronym (and a lot of people aren't). I actually do some SEO work for clients and, of course, for the WunderCounter and I've also talked a bit about it on this blog. I explained why it's a waste of money to pay someone to submit your site to search engines and I also gave some tips on how to create Google friendly URLs.

To be honest, a lot of what passes for SEO involves a lot of smoke and mirrors. People will call and email you saying they can get you on the first page of Google search results. In many cases the claims are likely true, because anyone can do it. Optimizing your site for Google isn't about learning a lot of secret tricks as much as it is about using common sense and making sure you have relevant and unique content on your site. Thinking you need to optimize your site? Ready to start today?


Do you know how much traffic you're getting now? Do you know which search terms are driving visitors to your site? Which are your most popular pages? Which are the least popular? How often does the Googlebot visit your web site?

You don't know? In that case, what you shouldn't be doing is optimizing your site. What you should be doing is analyzing your site traffic. If you're going to increase your site traffic, you'll never know if it's working until you know your current traffic patterns. Don't pay some guy thousands of dollars to increase your traffic if you don't know how much traffic you're currently getting. It's a fool's errand. He can tell you you're getting twice as much traffic and you'll never be able to verify it.

Before you do any kind of work on your site, get yourself set up with a good web site traffic analysis tool. The WunderCounter can give you all the information you need to arm yourself with before spending the time and/or money on optimizing your site. There are also a number of other services you can use to analyze your site traffic. The main thing is to be fully informed before you go making changes. You should also be aware that, by making a lot of changes, you may actually decrease the amount of traffic you're getting, so you should have a way of measuring that so that you can protect yourself and be able to reverse bad choices.

So, basically what I'm trying to say is that any meaningful set of measurements requires a baseline to measure against. If you optimize before setting your baseline, many of your measurements will largely be meaningless.

Tuesday, December 8, 2009

Twitter and Avoiding Weak Passwords

A friend and I were recently poking around the Twitter signup process, having a look at how the field validation takes place. As we were doing so, we noticed that Twitter has embedded a list of banned passwords into the source of the following page:

Just to make it easy for you, I've reproduced the list on this page. I've filtered out some of the racier ones just to keep things family friendly. If you'd like to see the full, original list, just open up the source code of with your favourite browser, search for "twttr.BANNED_PASSWORDS" and you'll find the entire list.

The reason I present this is because it's an interesting study of what Twitter thinks is a bad idea. I would guess that many of these passwords were taken from published lists of passwords used when cracking accounts. If you currently use passwords which resemble any of these listed below, I'd encourage you to change them as soon as possible.
  • 111111
  • 11111111
  • 112233
  • 121212
  • 123123
  • 123456
  • 1234567
  • 12345678
  • 131313
  • 232323
  • 654321
  • 666666
  • 696969
  • 777777
  • 7777777
  • 8675309
  • 987654
  • aaaaaa
  • abc123
  • abc123
  • abcdef
  • abgrtyu
  • access
  • access14
  • action
  • albert
  • alexis
  • amanda
  • amateur
  • andrea
  • andrew
  • angela
  • angels
  • animal
  • anthony
  • apollo
  • apples
  • arsenal
  • arthur
  • asdfgh
  • asdfgh
  • ashley
  • august
  • austin
  • badboy
  • bailey
  • banana
  • barney
  • baseball
  • batman
  • beaver
  • beavis
  • bigdaddy
  • bigdog
  • birdie
  • bitches
  • biteme
  • blazer
  • blonde
  • blondes
  • bond007
  • bonnie
  • booboo
  • booger
  • boomer
  • boston
  • brandon
  • brandy
  • braves
  • brazil
  • bronco
  • broncos
  • bulldog
  • buster
  • butter
  • butthead
  • calvin
  • camaro
  • cameron
  • canada
  • captain
  • carlos
  • carter
  • casper
  • charles
  • charlie
  • cheese
  • chelsea
  • chester
  • chicago
  • chicken
  • cocacola
  • coffee
  • college
  • compaq
  • computer
  • cookie
  • cooper
  • corvette
  • cowboy
  • cowboys
  • crystal
  • dakota
  • dallas
  • daniel
  • danielle
  • debbie
  • dennis
  • diablo
  • diamond
  • doctor
  • doggie
  • dolphin
  • dolphins
  • donald
  • dragon
  • dreams
  • driver
  • eagle1
  • eagles
  • edward
  • einstein
  • erotic
  • extreme
  • falcon
  • fender
  • ferrari
  • firebird
  • fishing
  • florida
  • flower
  • flyers
  • football
  • forever
  • freddy
  • freedom
  • gandalf
  • gateway
  • gators
  • gemini
  • george
  • giants
  • ginger
  • golden
  • golfer
  • gordon
  • gregory
  • guitar
  • gunner
  • hammer
  • hannah
  • hardcore
  • harley
  • heather
  • helpme
  • hockey
  • hooters
  • horney
  • hotdog
  • hunter
  • hunting
  • iceman
  • iloveyou
  • internet
  • iwantu
  • jackie
  • jackson
  • jaguar
  • jasmine
  • jasper
  • jennifer
  • jeremy
  • jessica
  • johnny
  • johnson
  • jordan
  • joseph
  • joshua
  • junior
  • justin
  • killer
  • knight
  • ladies
  • lakers
  • lauren
  • leather
  • legend
  • letmein
  • little
  • london
  • lovers
  • maddog
  • madison
  • maggie
  • magnum
  • marine
  • marlboro
  • martin
  • marvin
  • master
  • matrix
  • matthew
  • maverick
  • maxwell
  • melissa
  • member
  • mercedes
  • merlin
  • michael
  • michelle
  • mickey
  • midnight
  • miller
  • mistress
  • monica
  • monkey
  • monkey
  • monster
  • morgan
  • mother
  • mountain
  • muffin
  • murphy
  • mustang
  • naked
  • nascar
  • nathan
  • naughty
  • ncc1701
  • newyork
  • nicholas
  • nicole
  • nipple
  • nipples
  • oliver
  • orange
  • packers
  • panther
  • panties
  • parker
  • password
  • password
  • password1
  • password12
  • password123
  • patrick
  • peaches
  • peanut
  • pepper
  • phantom
  • phoenix
  • player
  • please
  • pookie
  • porsche
  • prince
  • princess
  • private
  • purple
  • pussies
  • qazwsx
  • qwerty
  • qwertyui
  • rabbit
  • rachel
  • racing
  • raiders
  • rainbow
  • ranger
  • rangers
  • rebecca
  • redskins
  • redsox
  • redwings
  • richard
  • robert
  • rocket
  • rosebud
  • runner
  • rush2112
  • russia
  • samantha
  • sammy
  • samson
  • sandra
  • saturn
  • scooby
  • scooter
  • scorpio
  • scorpion
  • secret
  • sexsex
  • shadow
  • shannon
  • shaved
  • sierra
  • silver
  • skippy
  • slayer
  • smokey
  • snoopy
  • soccer
  • sophie
  • spanky
  • sparky
  • spider
  • squirt
  • srinivas
  • startrek
  • starwars
  • steelers
  • steven
  • sticky
  • stupid
  • success
  • summer
  • sunshine
  • superman
  • surfer
  • swimming
  • sydney
  • taylor
  • tennis
  • teresa
  • tester
  • testing
  • theman
  • thomas
  • thunder
  • thx1138
  • tiffany
  • tigers
  • tigger
  • tomcat
  • topgun
  • toyota
  • travis
  • trouble
  • trustno1
  • tucker
  • turtle
  • twitter
  • united
  • vagina
  • victor
  • victoria
  • viking
  • voodoo
  • voyager
  • walter
  • warrior
  • welcome
  • whatever
  • william
  • willie
  • wilson
  • winner
  • winston
  • winter
  • wizard
  • xavier
  • xxxxxx
  • xxxxxxxx
  • yamaha
  • yankee
  • yankees
  • yellow
  • zxcvbn
  • zxcvbnm
  • zzzzzz

Monday, November 9, 2009

Preventing DNS Outages

Earlier this afternoon there was a DNS outage at the Cybercon data centre. This interrupted service to the WunderCounter. One of the core WunderCounter machines relied solely on Cybercon DNS for contact with the outside world and it went offline along with the in house DNS. This is known as an SPOF (Single Point of Failure) and, as such, this machine was incorrectly configured. Once the onsite outage was over, I had staff revive the machine and I've reconfigured the DNS to query servers from two unrelated providers in order to avoid this problem in future.

I'm going to audit the rest of the machines on the network in order to ensure that this sort of DNS outage doesn't affect the WunderCounter in future. One positive out of all of this is that all of the WunderCounter servers which rely on OpenDNS were unaffected. I highly recommend OpenDNS for both home and commercial use. I've found it to be an excellent service.

So, my apologies for the DNS issues -- this particular problem will not occur in future. Mistakes will happen, but what's most important is that they're not repeated.

Friday, November 6, 2009

Keeping a Slave Database in Sync

I haven't posted too many details of exactly how the WunderCounter is set up, but it uses MySQL replication. This means that there is always one master database server and one or more slave databases which download database updates from the master. The slave databases work much harder than the master and may occasionally require a reboot. Sometimes when this happens database tables crash and need to be repaired. This happened earlier today.

Usually the slave catches up to the master within a few minutes and the lag is barely noticed, but in this case, the crashed table had over 10 million rows. When you're dealing with that amount of data, MySQL isn't always able to repair the tables in a reasonable amount of time for a live site.

While I was dealing with this user log files appeared to be stuck and were not updating, which would make you think your tracking was not happening. What was actually happening was that your hits were being tracked by the master database, but not being updated on the slave database, which is the database which the reporting scripts connect to. The issue with the rogue table has now been fixed and the slave has caught up to the master. So, you can now view any of the hits which you were unable to view earlier. No data was lost, only delayed. :)

Wednesday, November 4, 2009

Dropping Support for Internet Explorer 6

Internet Explorer 6 is dead. Well, maybe not totally. I did some digging and I see that over the first few days of this month fewer than 2% of traffic to the dashboard page has been from MSIE 6 users.

Normally I wouldn't make an effort to shut a particular browser out, but basic things like CSS menus become much more difficult if you have to account for this very dated browser. I need to update the menu system in the member area. It's a bit buggy and not very pretty and it has to bend over backwards to accommodate MSIE in general.

I realize there are some situations where you are forced to use a particular browser. Some corporate environments lock down their machines to the point where employees cannot install any software at all. In some of these very paranoid cases, MSIE 6 is still the browser of choice. I can't tell you exactly why that is, as it's hard to fathom.

At any rate, if you're one of the remaining MSIE 6 users on this planet and you're able to upgrade or, even better, switch to Firefox or Chrome, I would encourage you to do so in the near future.

Monday, October 12, 2009

Get Instant IP Alerts Via Twitter (Beta)

Sometimes you want to get an alert when certain visitors hit your site. You may already to this by enabling by tagging IP addresses and enabling Tripwire. Those Tripwire alerts are already available to you via RSS feeds. The RSS feeds are well suited to users who have RSS readers available or who want to get their alerts via the API. However, I've just added new functionality which is aimed specifically at users of Twitter.

If you currently use Twitter or want to set up a Twitter account, you may now use the new "TwitWire" feature. It's Tripwire via Twitter. If you enable this functionality you may now get a Twitter Direct Message (DM) when flagged IPs visit your site. You can configure which IPs will trigger messages and how often these messages are sent. This will allow you to track visits to your site via, Twitter clients (like Tweetie or Tweetdeck) or even via SMS if you have your Twitter account set up to send tweets directly to your mobile device.

This function is currently in beta mode, so please do give me feedback about how it's working out for you. To get started:
  1. Log in to your account
  2. Choose Twitter from the Options menu
  3. Enter your Twitter username and password (your password will not be saved)
  4. Enable Twitwire and submit the form
  5. Select IP Tagging from the Options menu
  6. Enable Twitter DM for any tagged IPs you wish to be alerted about
If you need to tag additional IPs, you can do so from the IP tagging page or directly from your log files.

That's all there is to it. Keep in mind that Twitter Direct Messages are private, so they will not appear in your public timeline and only you will have access to them.

As this feature is currently in beta mode, please do take a moment to provide some feedback after you've gotten started.

Thursday, September 24, 2009

Adding a WunderCounter Link to Your iPhone's Home Screen

Since a number of you are checking your stats with your iPhones, I thought I'd share this handy tip with you. To get a link to the WunderCounter directly from your home screen (with your other applications), do the following:

  1. Open Safari on your iPhone
  2. Go to
  3. Click the "Login" link at the top right of the screen
  4. Wait for the login page to load
  5. Now, click the "+" icon at the bottom of your screen
  6. Select "Add to Home Screen"
This will add a new icon to your iPhone which looks a little bit like the home page of the WunderCounter. You can arrange it just as you would any other icon. Clicking it will take you directly to the WunderCounter login page in your Safari browser. It's a handy little thing that can save you a bit of time here and there. You can, of course, do this with pretty much any web page you'd like to bookmark in Safari. I use it myself and I find it to be quite helpful.

Friday, September 18, 2009

HTML::Restrict - Easily Strip HTML From Your Documents

I've just released HTML::Restrict to the world. It's a Perl module which allows you to strip HTML from text very easily. Here's an example:


use strict;
use warnings;

use HTML::Restrict;

my $hr = HTML::Restrict->new();
# use default rules to start with (strip away all HTML)
my $processed = $hr->process('i am bold');

# $processed now equals: i am bold

If you want to allow some HTML but not all, you can add a set of rules to allow arbitrary elements and attributes:


use strict;
use warnings;

use HTML::Restrict;

my $hr = HTML::Restrict->new();
b => [],
img => [qw( src alt )]

my $html = q[hello me];
my $processed = $hr->process( $html );

# $processed now equals: hello me

This has now been released as Open Source software and is available on the CPAN

Tuesday, September 1, 2009

How I Spent My Summer Vacation

Things have been a little quiet on the blog front lately, but that doesn't mean there hasn't been plenty of work behind the scenes. Just thought I'd fill you in on some things I think are interesting.

More Twitter Integration

I've been working on further integrating the WunderCounter with Twitter. Early, you may recall, I added daily stats summaries via Twitter DM (Direct Message). That got me thinking that the immediacy of Twitter lends itself really well to the Tripwire feature. So, I've just about finished setting this up. I'm tentatively calling it Twitwire. The concept is that you can flag IPs which you are interested in and, on a per-IP basis, you can decide which are important enough that you'd like to get a DM when this IP visits your pages. You could find out within seconds who is visiting your pages without even having logged in to check your stats. I think that's pretty cool and I'm looking forward to unleashing it you in the next few weeks. It just needs a bit more testing and then it will be on its way.

Cleaner Looking Reports

I've been integrating the Bluetrip CSS framework with the login area of the WunderCounter. It will make the reports look cleaner and more consistent. Plus, it's just a really handy tool to have in your toolkit. I recently used it on this calendaring system which I put together for the United Nations Association of the United States It makes it very fast to get started with a clean layout which is (I think) very easy on the eyes.

A Little Bit of jQuery

Any JavaScript work I'm doing now is generally based on jQuery. I was using prototype and a while ago, but jQuery is my favourite JavaScript tool right now. It makes working with JS pleasant (never thought I'd hear myself say that) and it makes simple tasks easy. There's a huge community behind it and almost more plugins than you could wish for. If you haven't had a chance to look at it, I highly recommend it.

New Hardware

I've got a couple of new dedicated servers almost configured and almost ready to go. I'll get those pulling some weight as soon as I can slot the time, but they're also available to be used right away if any other hardware melts down. It's always nice to have a couple of spares.

Getting to Know GitHub

Over the summer, I've taken on some new open source projects and posted them to along with some other work which I've had online for a while. My public GitHub projects can be found at The new projects are:

WWW::Mechanize::Cached This is a Perl module which caches web lookups. It allows you to make your own bots, site scrapers etc which can cache pages, which dramatically speeds things up when you have to re-run your scraper or when you're testing etc. It's a module which I took over from Andy Lester, who was kind enough to give me access to it after I approached him about cleaning up some of the open bug tickets.

Net::FreshBooks::API This is a Perl module which is really just a layer over the XML interface to the FreshBooks API. It means you can do cool stuff with their API without having to mess around with XML. Increasingly, I'm finding that this is a very good thing. I've never been a huge fan of XML. It's often very clunky and, in many cases, total overkill for basic API functionality, but that's likely a topic for a different post entirely. Edmund von der Burg was kind enough to make me a co-maintainer of this module so that I could add functionality for recurring billing. This is for some client work I've been doing. More on that when the site is officially online.

Off the top of my head, that's the important coding-related stuff. Watch for some of these improvements to come online over the month of September. I've already got plans for some new functionality after that, so hopefully there will be lots going on to keep you interested.

Monday, July 6, 2009

Premium Accounts Now Track Up to 500 Pages

If you've been managing your Premium account to stay within the 250 page limit, you can take it easy now. The limit for Premium accounts has been raised from 250 to 500 as of this evening, which should be more than enough for the great majority of sites being tracked. No charge for the upgrade!

I've also got some more servers on order. Those are supposed to arrive later this week and I'll be using them to beef up both the web counters and the member area of the site. I'll also throw a new database server into the web hosting side of things, just to keep things fair. :)

Get Your Daily Stats via Twitter

So, I had some free time today and I figured I'd play around with Net::Twitter, which is a handy little Perl module for use with the Twitter API. I have to say that it's so incredibly easy to use that the Twitter integration was a lot of fun. Rather than test it myself and wait around, I've added the feature to the repository today and it's now available on the live site. It's always fun when stuff works out so well that you can go from an idea to production on the very same day!

The summary tweet is a count of your hits + unique hits from the previous day. It's sent to you via direct message, so it's private and does not appear in your timeline.

Here's what you do to activate this new feature:
  • Follow me on Twitter (so that I have permission to send you direct messages)
  • Log in to the WunderCounter
  • Choose Twitter from the Options menu
  • Enter your Twitter username and set Send Daily Tweet menu to yes
  • Click the send test now link.
  • If there is no error and you get a test message from me in your account, you're all set. If you have problems getting going, please get in touch with me via the usual methods
That's it! You'll get the message sometime after midnight CST. Probably within the hour, after all of your daily data has been aggregated. The amount info is obviously limited because of Twitter's format, but I think it could be a handy way of tracking your stats, especially if you're on the go and/or haven't had a moment to log in and check your stats on a given day.

So, let me know what you think. If there's some interest, there are other places Twitter could be used in the application. For instance, getting a Tweet when a certain IP address hits your site might be a worthwhile addition. Another use may be to create a custom schedule of tweets throughout the day when you'd like to be updated on your stats. For example, you could get your summary info sent at 9:00 AM, 5:00 PM and 10:00 PM. Those are just some ideas I've been playing around with, but I'm always open to suggestions, so keep them coming in.

Saturday, July 4, 2009

Bug Fixes: Search and Layout

I've just fixed a couple of noteworthy bugs. First off, in some cases, when a user tried to produce custom report results for specific pages, no results would be returned even when there clearly should have been results. This would have affected all searches which can be constrained by "page". For example, if you had searched on traffic by city and decided to view results only from page "x", you may have (incorrectly) gotten no results. There was a problem with the SQL searching on the wrong column for page names, which has now been fixed.

Secondly, those of you who use Internet Explorer would have seen search results in black text displayed on a black background for some reports, such as the hits by city. This is caused by MSIE not recognizing "fff" as shorthand for "ffffff" (which is how "white" is defined in the source of the report). This has now also been fixed. Thanks, Perry, for pointing out both of these issues.

If you come across bugs (or what you think might be bugs), please let me know when you see them. These can be problems with actual data or even just display issues. I develop in Firefox and don't always have the chance to check things out in Internet Explorer, so occasionally display issues can appear which I'm unaware of. Taking the time to let me know allows me to fix it for you as well as any other users who may be seeing the same thing. The faster you report it, the faster I can fix it!

Thursday, July 2, 2009

Support Emails Back Online

If you sent an email to over the last little while, it probably bounced back to you with an error message. The contact form at was working as was the telephone support, but direct emails to the support address were bouncing. The issue was that my oldest web server (a Sun/Cobalt RAQ XTR) died recently and that machine happened to be hosting the help desk. This was the server which originally ran the WunderCounter when I first got into the web hosting business. It lasted for 9 long years and finally, after some fans began to malfunction, it went to its final resting place. Actually, I'm amazed that something with non-stop moving parts lasted the better part of a decade. I'm also amazed that I've been doing this for this long -- it was just supposed to be a hobby to get my mind off my studies while I was in University.

Now, this machine hasn't hosted the WunderCounter itself for a very long time, but it was running some useful software and it wasn't broken, so it didn't need to be fixed. However, now that it truly is broken, I'm in between help desk systems. I hope to have that fixed in a reasonable amount of time. I'm looking at a couple of ticketing systems, Redmine being my favourite right now. It's a really great project management system and it handles ticketing as well. If you're looking for something to help you keep track of projects, clients and bug reports, you may want to have a look at Redmine. It also integrates with many different version control systems, which is perhaps what I like best about it.

Having said all that, if you need support, there are the traditional methods of telephone and the contact form at, but the email is working again. I'll add a ticketing system back to the list shortly, but in the meantime don't hesitate to get in touch if you have any questions, input etc.

Tuesday, June 30, 2009

Do You Have a GPS-Enabled Camera/Phone?

One of the projects I'm working on right now is a web site which is inspired by the Gawker Stalker. This web app will allow users to upload or email photos, which will then be added to a Google map. In the case where users have GPS data embedded into their photos (like a location-aware iPhone), the images will automatically be thumbnailed and added to the map.

The difference between this site and the Gawker Stalker is that:
  • you'll be able to upload your own photos
  • photos (and sightings without photos) will be mapped in real time (lag will be 1-2 minutes)
  • photos and sightings will be tweeted as they are added to the map
  • you'll be able to map any location which can be mapped by Google maps, so you're not restricted to Manhattan etc
  • if your phone is email-capable, you'll be able to shoot a photo and upload it to the site immediately, giving real time feedback
I'm looking for some beta testers who are willing to help me test out the functionality. We're planning to move to a "live beta" of the site in the next couple of weeks, with a view to going live worldwide later this summer. I'm specifically looking for folks who have camera phones which will embed GPS data into their photos. So, all generations of the iPhone are good. Blackberries may need some tweaking. I'm not too familiar with other phones which may have similar functionality, but if you have one of these phones, please do get in touch with me.

I should add that, for the beta, you won't need to post photos of celebrities in your neighbourhood. This is more about testing the functionality of the site than trying to get any specific content.

Monday, June 29, 2009

How to Get a Discount on Web Hosting

If you're looking for a new web hosting account or want to switch from a different hosting provider, you may be eligible for a WunderSolutions discount. To see if you are eligible for a discount, log in to your WunderCounter account and choose "discounts" from the "options" menu. If you find a discount code displayed on this page, you may use it to sign up for one new web hosting account @ If you have any questions or unsure whether you qualify for a discount, please get in touch with me using the contact form.

Sunday, June 21, 2009

Can I use the WunderCounter to Track Email?

The short answer is Yes (and No). If you want to track who and how many people read your emails, you can certainly do this with the WunderCounter. In order to prevent the tracking code from being stripped out of the email, you should use the Myspace style tracker. There are a few things to keep in mind:
  1. You need to be sending HTML email in order to embed the counter image
  2. Not everyone reads HTML email -- some people have their mail readers display text only
  3. Some people read HTML email, but have images disabled by default
So, you can use the WunderCounter, but you won't get 100% tracking. You'll get a good chunk of it, but there will always be some folks who read the email without you knowing it. It works that way with any email tracking product.

Tracking email reads on a commercial email blast is fine and probably even expected. Beyond that, use your judgment when deciding whether or not to track email reads. There's an expectation of privacy that comes with email which doesn't apply to web surfing. People expect to be tracked online, but they don't necessarily expect to be tracked when viewing non-commercial email, but how you set up your tracking is entirely your decision.

Saturday, June 20, 2009

WunderCounter WordPress Plugin Now Available

If you're a WordPress user and you'd like to track your hits with the WunderCounter, your life just got a little easier. Thanks to my good friend and Perl programmer extraordinaire Dave Doyle, there is now a WordPress plugin for the WunderCounter. (Yes, it's in PHP, but Dave doesn't *just* know Perl. He merely *prefers* Perl...) If you'd like to download and install the plugin, you'll find it here.

To install the plugin, download it, unzip it and rename the folder "wp-wundercounter". This folder should be placed in your wp-content/plugins folder. After you've placed the plugin here, it will show up in your WordPress admin. You'll then need activate the plugin, enter your username and configure your counter appearance (or disappearance) plus some tracking options.

I'm looking to add some additional functionality to this plugin down the road, but it already works, so I wanted to get it out there as soon as possible so that people could start using it and giving feedback.

So, if you have a chance to check it out, please let me know what you think, both the good and the bad. If there's enough interest, we'll continue developing the plugin for you. If you're interested in contributing to the plugin, please let me know and we can get you involved.

Fixed: New Data Highlighting on Dashboard

A few days ago, I posted that some users were reporting that pages with new data were not being highlighted on their dashboard pages. The culprit turned out to be an incorrect system clock on the master database server. This seems to be the only server on the network which does not sync to a network time server. It looks like the machine has been 6 hours behind ever since it was brought back online after the fire. The result is that traffic timestamps for pages were 6 hours behind. (Let me just emphasize that the end user never sees these timestamps. They're only used internally for things such as determining whether traffic has hit your site since your last login.)

The result was that when users logged in to the WunderCounter less than 6 hours after their previous login, the new data was not being highlighted. I reset the clock on Thursday night. If your pages have been hit since Thursday, your timestamps will now be correct. The master database server now also connects to a network time server, so if the clock does get out of sync again (and clocks always do) it will be auto-corrected daily.

Big thanks go to Darla, Shahn, Carol and Bill who all insisted to me that there was a problem, even though I was convinced that everything was fine. ;) It just goes to show how important user feedback is. If you come across a bug, please do everyone the favour of reporting it -- bug reports really do work!

Tuesday, June 16, 2009

Yet Another Perl Conference 2009

Since I'm going to be going to YAPC (Yet Another Perl Conference) in Pittsburgh next week, I just wanted to make a quick plug for the conference for all you programmers out there. YAPC is a great experience and, as far as conferences go, it's affordable and incredibly helpful. There are 3 tracks of talks to choose from on any given day and they're not even all about Perl. For instance, there are some talks on Git which I've already marked on my schedule). The whole 3 day conference is only $150 and it's jam packed with developer goodness.

I haven't really posted about how the WunderCounter works on the back end, but the basic technology is LAMP:
  • Linux
  • Apache
  • MySQL
  • Perl
As far as Linux goes, I strongly prefer Ubuntu. The sites are run under Apache 2, MySQL 5 and Perl 5.8.8 (There's an upgrade to Perl 5.10 likely coming very soon). The web end of things is run under mod_perl using Apache::Registry and dozens of Perl scripts run many, many times on any given day performing maintenance on the WunderCounter. The WunderCounter also has test suites which are run by Perl scripts several times per day to monitor the health of the site, network and databases. So, it depends heavily on Perl, which is why I'd like to give it a little plug.

There are lots of scripting languages out there which can do a lot of the same things which Perl does, but Perl has the advantage of CPAN, which is an open source library of thousands of code libraries. Whenever I'm coding something for the WunderCounter, I check CPAN first to see if somebody else has already tried to solve the problem I'm dealing with. In a lot of cases, there's a module on CPAN which solves my problem, thus saving me from reinventing the wheel.

I've even released some of the code with drives the WunderCounter to my CPAN directory. So, for example, if you need to parse out search engines from referring URLs, you can do so quite easily with URI::ParseSearchString::More, which I published a while back. It's the very same module which the WunderCounter uses and it's free for anyone to copy, use, alter, mutilate etc.

I did mention that I'm going to some talks on Git. Having said that, I should say that the WunderCounter is currently kept in a Subversion repository. Subversion is an excellent source control management system. I plan on sticking with it for some time, but Git does a few things better, so I may switch things over to Git eventually. The new WordPress plugin (to be released shortly) is stored in a Git repository on GitHub, so at least some of the WunderCounter source code will be stored in Git.

Hopefully some of you will find that interesting. As a developer, I'm always curious to find out how people manage things on the back end, so I thought I'd share with you a little about how I like to do things.

Are Your Pages with New Data Being Highlighted?

I've had a couple of users report back to me over the past week that occasionally when they log in, pages with fresh data are not being highlighted on their dashboard page. I'm not seeing this in my accounts, so if this is something you are also seeing in your account, please let me know. That might make the issue a little easier to isolate. :)


Saturday, June 13, 2009

Post Mortem of Last Week's Fire

FYI, here's the official response which Cybercon has provided me regarding last week's fire in the building and the outages it caused:

Cybercon Incident Report: Power Outage on June 6, 2009

1. Incident Date/Time: June 6, 2009 between 10:40am to 11:30am

2. Type of Incident: Power Outage

3. Incident Description: Around 10:40am both the Electric Utility company's (Ameren UE) Transformer fuse and Building's Automatic Transfer Switch's motor blew up.
As a result we lost the utility power and the generator didn't automatically kick in due to ATS motor failure.
Fire trucks were dispatched.

The building owner Digital Realty Trust (, a public company traded on New York Stock Exchange) manages the building power including the generators and Automatic Transfer Switches. After the fire department inspection, the building management switched the power to the backup generator manually.
Around 11:30am power was restored for all servers and equipment in our data center.
The generators provided power to our data center until around 5pm when utility power was restored.

4. Affected Services: The power outage affects all customer's servers and equipment powered by our Powerline A. Servers and equipment powered by our Powerline B were not affected. After power is restored around 11:30am, servers that failed to auto restart will have longer downtime. Customers who use Cybercon DNS servics incurred longer downtime due to firewall issues with our DNS servers. Due to DNS issues Cybercon SMC web portal failed to work which affect some customers. Cybercon's phone system is on UPS but not on the generator. The Phone system's UPS battery lasted about 30 minutes and died, causing the phone system to go down which affected some customers.

5. Action lists:

* The building management has restored power.

* Cybercon name servers are now on dual power sources (on both powerline A and Powerline B)

* Cybercon phone system are now on both UPS and generator.

* We will discuss with the building management (Digital Realty Trust) about installing the best of class Automatic Transfer Switch gears to prevent future failures of automatic failover to backup generators.

Please accept our apology for any trouble it caused to your company and your customers.

Saturday, June 6, 2009

June 6, 2009: Outages Caused by a Fire in the Building

You may have noticed that the WunderCounter was offline between about 1:43 pm and 10:46 pm today. This highly unusual stretch of downtime was the result of a fire in the building. As I understand it, the fire was on a different floor, but it did knock out the power at Cybercon. The backup power did kick in, but some glitch in the system prevented the backup power from properly coming online. The result was that all of my machines lost power at the same time. "Hard shutdowns" being what they are, not all of the machines came back online without some prompting. In a facility where hundreds of servers have been crashed at exactly the same time and initially having only weekend staff on hand, you can imagine what things were probably like.

Without giving you a complete blow by blow of how today has played out, let's just say that most (but not all) of my servers are now back online. Enough machines are online to run the WunderCounter, so that's good news indeed.

I'll be contacting the data centre on Monday to get a "post mortem" from them and to see what they intend to do to ensure that this doesn't happen again in future. I've been with them for about 9 years now and I don't recally this sort of downtime having occurred in the past, so this really is a rare occasion. They've actually been quite helpful with keeping the WunderCounter up and running with excellent uptime over the past years, so I think they deserve the benefit of the doubt.

I do sincerely apologize for any inconvenience this downtime may have caused you!

Wednesday, May 27, 2009

Wanted: WordPress Plugin Beta Testers

Are you a WordPress user looking to integrate the WunderCounter with your blog? I'm looking for some beta testers who can give me feedback on a new WunderCounter plugin. Basically, you just need to have access to your own WordPress installation and you need to have the administrative rights to upload and add custom plugins. If this sounds like you, just send a note to

support AT

and let me know what your username is. When the beta plugin becomes available, you'll be able to test it (and provide feedback) before it's released.

Saturday, April 25, 2009

Let's Connect via LinkedIn

If you've got an account at LinkedIn, please feel free to check out my profile and add me as a connection. If you're a satisfied WunderCounter user and you want to give me a recommendation, I'm happy to accept. It's a bit difficult for me to give a recommendation back if we haven't worked together on a project, but if you've hired me or if we've collaborated on something I'll gladly return the favour.

My profile is at

As long as we're talking about social networking, if you'd like to connect on Myspace you can add my band (Vile Richard) as a friend:

Saturday, April 11, 2009

IP Alerts via Twitter?

After reading about how people are using Twitter to get alerts from their washing machines, cat flaps, etc I decided to have a look at the Twitter API. I have to say it's incredibly simple to use. I'll even take the time to integrate Twitter support with the WunderCounter if there is some demand for it. Possibilities include getting a tweet for:
  1. IP Alerts: If you've flagged an IP, get an alert that this person is currently visiting your site
  2. Account capacity: Get an alert that you're about to or have already exceeded your daily hits
  3. Billing: Get an alert when your account is due for a payment
  4. Alerts about new blog posts, scheduled downtime etc
Tweets #1-3 would come in the form of a direct message, which means that these updates would not be viewable in your public stream. At this point, I'm mostly interested in seeing if there is some demand for this. You can already code #1 yourself if you're an enterprising individual and are using the WunderCounter API, but full site integration would make it just a couple of mouse clicks away.

So, if you are interested in such a feature, just follow the WunderCounter Twitter feed. I've just set up the feed, so there aren't currently any followers. If that continues to be the case, I'll know that there's no interest. ;) Just testing the waters at this point.

Having said all of that, here's an example of how easy it is to use the API. In just 4 lines of Perl, you can update your Twitter status:

use Net::Twitter;
my $twit = Net::Twitter->new({username=>"myuser", password=>"mypass" });
my $result = $twit->update({status => "I use the WunderCounter!"});

You can't make it much simpler than that!

Tuesday, April 7, 2009

API: Geo-location Info Now In Tripwire and Watcher Feeds

The API has now been updated and geo-location info is now available in the feeds. This means that your Watcher and Tripwire feeds will now include City, State/Region and Country information where such information is available. In addition to this, if you examine the XML tags of the RSS feeds, you'll see that longitude and latitude has been added as well. These points don't represent the user's exact location, but they will point you at the correct location for the city (if available).

This kind of information is very handy when coding your own applications to interace with the API. The longitude/latitude info enables you to add pushpins to Google maps without first having to look up and geocode the locations provided in your feed. It opens up a lot of possibilities for working with WunderCounter data and for creating 3rd party applications. Since the RSS feed is made up of valid XML, you can quite easily parse the feed via Perl/PHP/Ruby/Python etc to create some really cool stuff.

If you're a developer and you have some requests for API features and/or documentation, please get in touch with me. I'll try to post some Perl code samples in future, so that you can get some ideas for mashing up your WunderCounter hits with your own web site. If anyone wants to submit some code in other languages, I'd be happy to post it here or point others to your site to get inspiration.

Monday, April 6, 2009

Free Counters are Back!

As I mentioned in a previous article, the WunderCounter started out as a totally free site. It was just a hobby I worked on in my spare time while I was an undergrad. It worked out so well that I eventually had to throw the brakes on the whole free part of the equation and I stopped offering them. The free accounts were maybe a bit too popular for me to handle at the time. However, anyone who had a free account at the time was allowed to keep it (to this day many thousands of people have done so), but it just wasn't possible to get new free accounts.

As of a couple of weeks ago, I'm once again offering free accounts. A brief explanation of the Wunder Free account as well as the signup link can be found here. CPU and bandwidth are plentiful these days and I'd like to encourage you to get the word out to friends and colleagues about these counters.

16 Different Styles

The idea behind the Wunder Free accounts is that these accounts produce only graphical (viewable) counters. They don't track stats, but they offer 16 different graphical styles to choose from. These counters work on, Myspace, LiveJournal, eBay etc. They look great and they're a handy first step to getting involved with web analytics. These accounts can be upgraded to paying accounts at any point, but there's absolutely no pressure to do so. If all you really want is a free counter, you're at the right place. The counters are currently unbranded. That may change in future, but I'm not 100% sure on that. We'll see how the unbranded counters work out to start with.

Earning Money via Free Accounts

You can even earn money with these free accounts. Each graphical counter links back to with an affiliate link. If you opt in to the affiliate program, you can earn money for every paying customer you refer back to the WunderCounter.

So, you can actually earn money while taking advantage of the free counters. Sounds like a pretty good deal to me!

Sunday, April 5, 2009

New Packages and Pricing: I Need Your Input

One of the toughest things about running the WunderCounter is trying to figure out a transparent structure for pricing and packages. Initially, it was an easy task, since everything was free. Not many calculations to do there. As the site grew in popularity and users, expenses increased dramatically. So, I introduced a voluntary paid service for users who wanted to upgrade their accounts. That account was called the Premium account. There were still free accounts available, but they required users to display branded, graphical counters. Eventually I also added an account which had less features than the Premium account and also had a lower price. It was called the Invisible account. The free, branded accounts were called the Regular accounts and they were fairly limited in use, but there was no commitment to pay.

The packages available were: Regular < Invisible < Premium.

Eventually, I had to choose between spending a lot of time supporting the Regular accounts or no longer offering new accounts of that type. I chose to take that option offline. Users who never removed their Regular accounts still have access to them, but new accounts haven't been offered for a few years. That has allowed me to focus on the paying accounts. (Free accounts are now once again available, but that's a subject for a different post).

The packages now available were: Invisible < Premium.

Now, I find myself looking at the packages available and trying to find a way to make them simpler for you to understand and I see that the package names are suboptimal. The Invisible package is a source of confusion, because it implies that that's the only package with Invisible counters, which is not the case. To solve this problem, I need to find a more descriptive name for this package. While I'm at it, I'd also like to bump up the features of the Invisible package.

It can be a bit of a problem to rename an existing package and change the feature set. So, rather than just renaming the Invisible package and tweaking its features, what I've decided to do is to introduce two new package types, which are below the Premium pricing. I'm going to retire the Invisible package as these two packages will effective replace the Invisible. If you currently have an Invisible account, you'll have the option of switching to one of the newer packages. If you're happy with your current account, there's no need to change, but you will have the option to do so if you'd like to take advantage of it.

I've already started restructuring things and I'm working out some ideas. If you'd like to be a part of the process, contact me via or comment back here. Tell me which features you like most and also which features you don't care about. Tell me what you love about the WunderCounter, but also tell me what you hate about it. How do you use it? What makes it useful to you? And, most importantly, tell me what it's worth to you. How much do you pay now? How much would you like to be paying?

As far as what is coming, I can tell you that the Premium package is going to be bigger and better than it now is, but that the pricing is not going to change. Premium users will get a beefed up account without any increase to the current price. Of the two remaining packages, the pricing of one package will be slightly higher than the Invisible account and the other will be lower. That will introduce a pricing range that covers a little more ground and gives users more flexibility in choice.

I can't please everyone (and I never will!), but your feedback is extremely helpful when making these sorts of (very important) decisions. So, let me know where your head is at and I'll keep you in mind as I roll out the new packages.

Friday, April 3, 2009

How to Use Counter Filters: Delete and Freeze

As of today, I'm introducing the concept of filters, which can be applied to the counters and trackers in your account. Filters have been introduced in order to allow you to permanently delete counters and trackers in your account. In the past, if you deleted a counter the same page name would re-appear in your account if it was visited again by you or someone else. In some cases, this is not the desired behaviour and the filters will correct this.

There are currently two filters: delete and freeze. To apply a filter, log in to your account and choose Counter Reset & Delete from the Options menu on your dashboard page. You find the filters on this page.


The delete filter does pretty much what you expect. If you apply this filter to a counter, the counter will be removed from the pages tracked listings on your dashboard page. It will also be removed from search menus on your reports. It will not be removed from aggregate stats or daily log files. So, if the page which you have just marked as deleted was visited 50 times yesterday, your stats for yesterday will not decrease by 50 hits -- they will remain the same and you will still see them as you browse yesterdays log files.

Hits to this counter which take place after you have applied the delete filter will not appear in your stats. If, in future, you choose to re-enable this counter, you may do so by selecting to show deleted counters and then removing the delete filter from this counter. At that point, your counter will begin tracking again.

Some users choose to delete their counters daily as a matter of preference. If you're in the habit of doing this, do not apply the delete filter to your counters as they will become inactive. What you really want to do is reset your counters to zero. This is probably what you want to be doing anyway. If you have any questions about this, please get in touch with me.


The freeze filter is a completely new concept to the WunderCounter. Applying this filter to a counter means that your counter will continue to display, but it will no longer increment or continue to track any stats. You may find this useful if you only want to track certain pages on certain days or if you want control over which stats are collected over certain periods of time.

Removing Old Counter Code

If you really do want to delete a counter, you should also remove the actual code from your pages. This is in the interest of conserving CPU and bandwidth. If thousands (or tens of thousands) of users don't remove unused counter code, it creates a lot of traffic on the Internet (and on WunderCounter servers) which is unnecessary. It eats up resources and electricity. So, in the interest of a greener online experience, please take a moment to remove any counter code which is no longer relevant. It's a bit like turning the lights off when you leave a room. It's a small gesture, but when applied on a grander scale it can make a big difference.

Myspace Blog Trackers

A Myspace Blog Tracker can be added in the following way:
  1. Create your counter code by choosing Myspace counter from the Generate HTML menu on your dashboard page
  2. When the WunderCounter asks you for a page name, use something like this:
  3. When you get your WunderCounter code, copy the URL (everything between the quotes) to your clipboard
  4. Now create or edit a blog post.
  5. Choose the "add image" button
  6. When asked for the image URL, paste the WunderCounter URL which you just copied from your code
  7. Preview and post your blog
You'll want to refresh your dashboard page to ensure that your new blog is being tracked and then that's it -- you're done!

The Lazy (but less effective) Way

Now, if you don't want to add a counter to every single blog post, there is a workaround. It's not as effective, but it gets the job done for lazy people (not that there's anything wrong with that...)

To create a generic blog counter:
  1. Log in to your MySpace account
  2. Click the "Blog" link
  3. Click the "Customize Blog" link (under "My Controls")
  4. Find the "Page Header" section
  5. Add the counter code to the "Your Own Header HTML" text box
  6. Click the "update" button at the very bottom of the page
Now, because the code is going into your blog header, the counter won't distinguish between blog articles. So, all blog article views will be tracked under the same page name. This is convenient, because you don't have to add a counter for each new article that you write. The flip side is that you won't be able to track which article is more popular.

Personally, I prefer the first method, because I want to see which posts are being read most, but there's no right or wrong way here. It's all a matter of personal preference.

How To Track Myspace Music/Band Pages

First off, make sure you select "MySpaceTrackers" from the "Generate HTML" menu when starting the code generator. Once you have created your counter code, there are several ways you can install a counter on your MySpace page. I'm giving you the "easy" way here.

If you have a Band/Musican page:
  1. Log in to your MySpace account
  2. Click "Edit Profile"
  3. Click "Band Details"
  4. Find the "Bio" box
  5. Click the edit link for that box
  6. Copy and paste your counter code into this box
  7. Preview and save the "Bio" section
  8. Refresh your dashboard page to ensure that your new counter has in your account
That should be all there is to it. Just keep in mind that MySpace may not update your account page right away (although it probably will). Since MySpace doesn't explicitly support web counters, this is mostly a "workaround" solution, but it works.

Please keep in mind that MySpace bans JavaScript, so the counter is a pure HTML counter. It will work very well, but it won't have all of the info that a JavaScript counter has. Most notably, you won't get information on referring URLs.

Monday, March 30, 2009

WunderCounter Helps Apprehend Suspected Laptop Thieves

This morning I had a WunderCounter user message me about how she used the site to help recover a stolen laptop. (Thanks, Christine!) I'm publishing it here with her permission :


I just wanted to pass along my story. Last week my laptop was stolen. I do not have an anti-theft device like laptop LoJack so the police told me they would check the pawn shops, but it was probably gone forever.

My personal web page is set as my browser home page. In the small hope they might try to surf the internet, I put your IP Logging page counter on my home page. A few hours later, a suspicious IP address was visiting my web page. I was able to give this info to the police and help them track down the thieves and recover my laptop the next day!

So, thank you, thank you, thank you for your service! I needed something that I could add to my web page immediately and your 2 week free trial provided that. The site was easy to use and the police were excited to have some information to lead them in the right direction. Ultimately, I believe they were caught based on descriptions of the get-away car. However, I'm sure the IP address information provided by your service will be a big help in making sure these guys are convicted.

Thanks again!

This illustrates a use of the WunderCounter which, to be honest, had never occurred to me. :)

Saturday, March 21, 2009

Tracking Perl, PHP, ASP and Other CGI-generated Pages


If your web pages are produced dynamically, adding WunderCounter code can,
in many cases, be very easy. If all of your pages are produced by a central
script or use some sort of common header or footer, you can save yourself
a lot of work and start tracking all of your pages within minutes. Here's
how you do it.

Editing WunderCounter Code

First off, you need to generate some WunderCounter code and have a close look
at it. You'll see that the URL that creates the counter is made up of a series
of name/value pairs, like part of the code used to create invisible counters:


What we're interested in for this tutorial is the page=index.html
part of the URL. If you want to the same style of counters across your entire site,
all you need to do is change the page name in the URL for the various pages/scripts
on your site.

This is where environment variables come in. These are variables that
are passed on by the web server and are available to your scripts. The actual
environment variables that are available to your script depend on the
configuration of your web server. Let's get to the examples that should work
for your right out of the box for you.

Please note:

The counter code used in these examples is very basic -- it's only meant to
get you up and running as quickly as possible. In almost every case, you'll
want to create custom code for your site by generating your own custom counter
code (found under the Generate HTML menu). You may then use this custom
code in your scripts for the best results.

Perl (CGI)

Here's an example of a Perl script that will create some basic counter code:


use strict;
use warnings;

use CGI;
my $q = CGI->new();

# print HTML header
print $q->header;

# usually looks like "/script.cgi", so we remove the first slash to get "script.cgi"
my $page = substr($ENV{'SCRIPT_NAME'}, 1);

my $counter_code = qq[<img src="$page&digits=5" >];

print $counter_code;

If you're using a templating system, like HTML::Template, you can save the
counter code in its own file and then include it in all of your pages via the

Perl (SSI)

Here's an example of a Perl script that will create some basic counter code,
when used via SSI (Server Side Include)


use strict;
use warnings;

use CGI;
my $q = CGI->new();

# print HTML header
print $q->header;

# usually looks like "/index.html", so we remove the first slash to get "script.cgi"
my $page = substr($ENV{'DOCUMENT_URI'}, 1);

print qq[<img src="$page&digits=5" >];

Create a folder in the top of your web directory called "wunder". Save this
script in the "wunder" folder as "". Make sure the script is
executable. On a *nix machine that would be:

chmod 755 wunder/

If you are unfamiliar with Server Side Includes, check the Apache tutorial
Introduction to Server Side Includes
for tips on how to get started. Once you're ready to go, you can include the
counter code in all of your pages by adding the following:

<!--#include virtual="/wunder/" -->


The following example snippet of PHP code can be included by all of your .php
pages. To do so, save the following code snippet as wundercounter.php:


$page_name = substr($_SERVER['SCRIPT_NAME'], 1);
echo "<img src=\"$page_name&digits=5\">";


Now, you can include the counter code in any page you like, using the following

include 'wundercounter.php';


The following example snippet of ASP code can be included by all of your .asp
pages. To do so, save the following code snippet as wundercounter.asp:

' get the script name from environment variable
strPageName = Request.ServerVariables("SCRIPT_NAME")

' remove the slash that begins the script name
strPageName = Mid(strPageName, 2)

<img src="<%=strPageName%>&digits=5">

Now, you can include the counter code in any page you like, using the following

<!--#include virtual="/wundercounter.asp" -->

Friday, March 20, 2009

Getting Started with the WunderCounter: Info for First Time Users

So, you've created a WunderCounter account. Now what? Let's briefly walk through the steps to getting some counters and trackers working for you. If you take the time to read this article, things may make a little more sense. It will probably take about 10 minutes for you to read this article and start tracking your stats. It's a pretty simple process.

Step One: What Are You Tracking?

There are different types of counters, so the first part of the process is figuring out which is the best counter for you. Let's keep it simple for now. We won't talk about any of the fancy stuff here. We'll look at simple web counters -- the ones that increment every time someone visits your page.

There are basically really two types of counters: JavaScript or plain HTML. Both counters work equally well, but the JavaScript counter provides more helpful information. The general rule is that if you can use a JavaScript counter, that should be your first choice. If the page you want to track doesn't allow to you add JavaScript, then you should choose HTML.

For example, you should choose HTML if you're tracking:

Myspace Profiles, Bulletins, Photo Albums, etc
Links in Facebook Notes
Ebay Auction Items
Google Ads

You should choose JavaScript if you're tracking:

Your personal web site
Your business web site
Any site you're accessing via FTP

Those are just general rules. If you use the WunderCounter on a site which is not mentioned here, please email me or comment back about which site it is and whether you're using HTML or JavaScript. It's helpful for me to know!

Step Two: Choose the Correct Code

If you've got the Wunder Free account, there's only one choice for you to use (the visible HTML counter), so your choice is easy. If you have Invisible or the Premium account, you'll find more choices. For all accounts, you'll find your available options under the Generate HTML menu on your dashboard page, after you've logged in.

For example, if you're tracking a Myspace page, choose Myspace Trackers from the Generate HTML menu. The Myspace Tracker is an HTML counter, so you can use it on other sites which don't allow JavaScript. It's just called the Myspace Tracker because that's what many people use it for. It's invisible, so you won't see an incrementing counter appear on your page, so a lot of people choose this option. You can also use it for eBay items etc, so feel free to play around with this type of counter if you want to track a social networking site or some other place which doesn't give you total control of your HTML layout.

If you're generating a counter for your personal or business site, you should be able to use pretty much any counter available on the menu. Experiment a bit to find a format which you like.

Step Three: Generate Your Counter Code

This is the easy part. Once you know which sort of counter you want to create. Just choose that option from the Generate HTML menu and click through the steps. It's pretty straighforward, so it often takes less than a minute to get through this part. At the end of the process, highlight and copy the code which is presented to you. You're now ready for the last step.

Step Four: Add the Code to the Page You'd Like to Track

Here are some instructions for specific sites:

Myspace Profiles
Myspace Blogs

If you're adding the code to a site you have FTP access to, just add the code to the body of your HTML. Add it close to the top of the page, preferably just under the <body> tag. Then, save your page and upload it to your site. You're done!

Did it Work?

No matter which counter you're using or which site it's on, you should always check to ensure that you've added the code correctly. Preview the page in your browser, making sure you refresh the page if it's already open in your browser. Once you have viewed the page with the counter, log in to the WunderCounter and check to see if that page has appeared on your dashboard page. If it has not, try clearing your browser's cache and then reload the page. Reload the WunderCounter dashboard page and check to see if the page name has appeared on your dashboard now. If you don't see the page, try starting again from step 1. If that doesn't work, contact support, by sending an email to Include the full URL of the page in question. Do not remove the code which isn't working as it won't be possible to find the problem if the code is not in the page.

You're Done!

So, basically that's it. Continue adding counters to as many pages as you'd like to track. Keep checking your dashboard page to make sure they appear. Once you're happy with that, sit back and watch your traffic roll by. You'll be surprised at what you may learn!

Thursday, March 19, 2009

Tagging IP Addresses and Myspace Users

A Powerful Feature

One of the most useful features that has been added to the WunderCounter over the past year or so is the IP Tagging feature. At the very least, I should say that it's one of the features which I personally find very useful. I use the WunderCounter to track my own web traffic, so I hope that when I find a feature to be useful, there are lots of you who feel the same way. What clued me in to the importance of IP Tagging is that despite the fact that I added this feature without including any kind of documentation, there were already users tagging IPs within about 5 minutes of the feature being available. That's pretty powerful stuff.

How Does it Work?

Here's how it works. When you log in to you account and view your log files, you should see a column with IP addresses. You'll see a link beside each IP address which is (appropriately) labelled "tag". Click this link and you'll be able to tag your IP. How should you tag an IP? Well, it's really just a nickname or some identifier of your choice. It's hard to look at an IP and say, "that's my friend Dave". So, when you see an IP number come up which you may happen to know is Dave's you can tag with his name. The result is that, in future, when you view your log files, you'll see Dave's name along with his IP number. It makes log files easier to scan and a lot more fun.

A Practical Example

Here's how I use tagging. Whenever you log in to the WunderCounter, I automatically tag your IP with your username. That way, when people email me and say, "I had problems with this feature", I can just view my log reports and follow that user's tags. It makes it a lot easier to figure out what is going on. Auto-tagging is not yet available for users other than myself, but I will make it available via the API if enough people bug me about it. As an aside, if there's something you really want to see, please bug me about it. It may take a fair amount of nagging, but the more you get in my face, the more likely I'll be to add your future. Maybe I'll post an article in future about how to get your feature added, but for now, just let me know what you'd like to see. IP Tagging was a user request and you can see how useful that is for everybody.

Tagging Myspace Usernames

If you're using the WunderCounter to track your Myspace profile, you should consider tagging IPs with the Myspace usernames of your friends. Since it's not possible to automatically associate an IP with a Myspace username, this is the next best thing. You may be able to do this by checking what time friends leave comments on your page and matching this against hits in your log files. Try it out -- you'll be surprised at what you can discover.

Managing Your Tags

Once you have created tags, you may want to alter or delete them. To do so, choose:

"Options" -> "IP Tagging" from your dashboard page. To edit a tag name, just hover over it and click on the name. You'll be able to change the tag name and save it without needing to refresh the page. To remove a tag entirely, just use the "delete" link to the right of the tag.

It's that simple. If you haven't used this feature yet, I encourage you to try it out as soon as you can. It will make your tracking that much more enjoyable!

Saturday, March 14, 2009

How Do I Set My Time Zone?

If North American Central Time is not your time zone of choice, there's no reason you need to view your WunderCounter reports in this time zone. To choose a different time zone:
  1. Log in to the WunderCounter
  2. Choose "Options"
  3. Choose "Time Zone"
From this page, select your country and then choose one of the available time zones. This will immediately switch all timestamps in your log files to the time zone of your choosing and you will no longer need to add or subtract time when trying to decipher your log files. :)

Myspace Headline Tracker Broken in Private Profiles

I've just had a conversation with WunderCounter user who has confirmed that the Myspace Headline Tracker is currently only working when profiles are set to public. (Thanks, Molly!)

I haven't played with this myself, but what I have been told is that if you have a WunderCounter Tracker in your Myspace headline, it will work when your profile is set to public. However, if you set your profile to private, Myspace will expose the WunderCounter code in the headline. This has the affect that:
  1. Page hits will not be tracked
  2. It looks really messy
There's no workaround that I know of at this time. If your profile is private, you'll need to put your tracker code somewhere other than your headline. That way you'll be able to track page views from your friends. Unfortunately you'll no longer be able to track page views from people who aren't your friends, but who tried to view your profile. This is a limitation imposed by Myspace (whether it's intentional or not, I can't say) and it's in no way a problem with the WunderCounter.

If, at some point in the future, this changes, please do let me know so that I can update this post.

Which Operating System is My Web Server Running?

Occasionally you may want to install some new software (perl/php/python/ruby etc) in your web hosting account. The developer you're working with may ask you which OS (operating system) your account is hosted on. You can actually use the WunderCounter to help figure this out.

If you have a Premium account, log in to the WunderCounter. Click "More Stats" -> "Advanced" -> "Server Headers"

Now, enter the domain name of your site and you'll get detailed information which is broadcast by your web server to the world (via HTTP headers).

Let's try a couple of examples. If you enter:

You'll find the following information:

Server: Microsoft-IIS/7.0

OK, so that makes sense. Microsoft is using it's own products.

How about:

Server: Microsoft-IIS/6.0

So, Myspace is also using Microsoft software, albeit an older version.

Now, how about:

Server: Apache/2.0.52 (Red Hat)

Now, that's getting better. Wired is running off Red Hat Linux and Apache2. Now, that's an older release of Apache, but it's nice to see them using Open Source software.

Lastly, let's have a look at my favourite flavour of Linux:

Server: Apache/2.0.55 (Ubuntu) PHP/5.1.2 mod_ssl/2.0.55 OpenSSL/0.9.8a

So, that's a good sign. Ubuntu is running Ubuntu Linux. :) They have a recent version of PHP compiled in with the Apache web server as well as SSL for serving secure web pages.

You can use this feature to get lots of other interesting info from web servers (like the kinds of cookies they set etc). Feel free to play around with it and see what you might learn. Also, feel free to use this tool when trying to dig up information on your own web host as well.

Thursday, March 12, 2009

How To Create Google Friendly URLs

When you're trying to drive traffic to your web site, it's a good idea to make it easy for Google to figure out what your site is all about. Now Google is already very good at doing this, but it doesn't hurt if you give it a little bit of help. One very easy way to do this is to give your pages appropriate URLs.

In the past, many web designers have been fairly unimaginative when naming their web pages. You'll often find pages with the following names:


Those are good page names for a web designer because they're descriptive of the page content and they help the designer easily find the file s/he is looking for when edit the content of your site. The problem, however, is that these names are generic and they don't really tell Google too much about the actual type of content in your web site. What do I mean by this? Well, have a look at these page names:


Do you see the difference? When you see these page names you know what they're about, but you also have an idea of what sort of site you're dealing with.

a) a web developer who specializes in Perl (great choice!)
b) a flower shop in Toronto, Ontario
c) a musician's bio for "Vile Richard"
d) recording studio in Toronto, Ontario

If you can glean this sort of information just by looking at a page name, you know that Google can do the same. The key is to find a few keywords which you'd like to focus on when driving traffic to your site. Then, use these keywords when naming your pages. Take care not to stuff your page names with so many keywords that you've actually obscured the meaning of the title, but be creative.

The format you choose to use is up to you, but I personally prefer to keep everything in lower case, using dashes ("-") in place of spaces or punctuation. Google will be able to strip the dashes out of your page names and make sense out of the words. It will then take these words into consideration when ranking your site in importance for searches on these same words. So, if you choose your page names wisely, you may well drive extra traffic to your site with only a tiny bit of extra effort.

Wednesday, March 11, 2009

Should I Pay to Submit My Site to Search Engines?

This is a question which people ask me fairly regularly. The short answer is:


The long answer is:

You don't have to tell search engines where you are. The search engines will find you. After all, that's what they do.

So, please, whatever you do, don't spend your hard-earned dollars on a search engine submission service. If you really want to part with your money, donate it to your local SPCA, or the shelter where I adopted my cat. These are organizations which could really use your money. A search engine submission service is just going to bank your dollars and offer very little in return.

So, if this isn't a service you should buy, what should you do? Let's be realistic here. If you want to be found online, you want Google to find your site. Maybe you'll add Yahoo to that list, but after that it becomes fairly irrelevant how many other engines pick up your site. (I'm speaking of English language web sites now). The majority of users online are now in the habit of using Google (and occasionally Yahoo) to perform their web searches. There are lots of other search pages out there, but very few will ever drive significant traffic to your site. Trust me on this. In some cases these other search engines are really just portals which feed you information from a larger search engine anyway. The bottom line is that you want Google to find you. After that, everything else is gravy. So how do you do this?

Submit Directly to Google

Google has a page with some useful info to get you started. I recommend you have a look at that. However, if you just want to submit your site to Google directly and be done with it, you can use the Google site submission page. This will officially let Google know that you exist. Now just sit back and wait for the magic to happen. So, if you all you wanted was to have Google notice you, you're done. You can quit reading and check your TiVo to see if the latest episode of Chuck was recorded. If you want to improve your rankings once Google does find you, read on.

Have Other Sites Link Back to You

One way to ensure that your site will be picked up and treated well by Google is to have other sites link back to you. Send out an email to friends or businesses you work with, asking them to post a link back to your site. Offer to link back to their sites as well, since this may give them more incentive to add your link. You can also add your link to the WunderCounter's free directory. There's no requirement to link back to the WunderCounter, but it is appreciated. Find directories online which offer free listings. Use these listings to link back to your site.

How Do Links Help?

When Google is searching the web, it follows the links which it finds. When it stumbles across a link to your site, it will officially know that your site exists and you'll be scheduled to be added to its index. The more links which Google finds which point to your site, the more important Google will assume your site is. This is a simplification of how the process works, but basically, think of it this way:

If thousands of web pages link back to your web site, Google will assume that this is an important web site and will take this into consideration when spidering the site and producing search results -- this is a good thing. Conversely if zero or very few pages link back to your site, Google will also take this into consideration -- this is not a very good thing. You're not likely to appear in the top results of many searches, which means that you'll be in the Google index, but most people will never find you.

So, what you want to do is get your site out there. Let people know about it. Find online directories which offer listings for free. Pester your friends to link back to your site and just generally make sure Google is aware of your existence. This will not only get your site indexed by Google and the other search engines, but it will also increase the likelihood that user searches will produce results which list your site.

This really just scratches the surface of how you can get more people to find you online. If you're interested in further articles on how to optimize your site for search engines, email me or comment below. Or, if you have your own tips, you can add those in the comments as well.

Monday, February 23, 2009

Does the WunderCounter offer web hosting?

I do get a fair number of people contact me about whether I offer web hosting, so I thought I'd do a quick summary of what is available.

The short answer is yes. If you're interested in a web hosting package, have a quick look at the available packages:

If you're looking to host only static content (no Perl/PHP/Ruby/Python etc) and you don't need a database, the Webmaster plan is probably a good fit for you. It's the most economical and allows you lots of upload space, email and bandwidth.

If you're the kind of person who likes to do a bit of scripting or database work, then the Super plan is probably your best bet. I'm a programmer myself and I host my client work on the WunderSolutions hosting machines. So, if you've got a database question or a scripting problem, you'll be getting support from someone who understands your needs.

If you've got needs beyond the Super plan, then the Extreme plan is the next step up. This is generally used by corporate clients or clients with special needs, like lightning-fast mod_perl scripts. If you think you may need the Extreme plan, feel free to call or email me so that we can discuss your particular needs.

Lastly, if you're looking for a place to host or rent a dedicated server, contact me so that we can discuss your needs and get you set up with a solution which works for you. I can host single machines, multiple machines and even get you set up with sophisticated load balancing to ensure maximum uptime for your projects.

What Makes WunderSolutions Different?

My web servers are load balanced. This means that if I need to take a machine offline for maintenance, a backup machine automatically steps in and serves up your web site. This happens automatically, so you don't have to worry about downtime or hardware issues disrupting your web presence.

Often, when you work with a smaller web host, you won't get load balanced machines. In fact, a lot of web hosts run all of their services off the same machine. For example, your email, DNS, web hosting and database server may all be on the same machine with a smaller host. This means that if the machine goes down, all of your services go down with it. This is called an "SPOF" or Single Point of Failure.

WunderSolutions hosting keeps different services on different machines. This avoids the problem of the SPOF and means excellent uptime for web sites and services. If you're thinking of moving web hosts, but you'd like to speak with current clients, feel free to get in touch. I'd be glad to refer you to current customers who can vouch for the quality of WunderSolutions web hosting.

Wednesday, January 28, 2009

Tracking Facebook Links Outside of Notes

By now you may have already read the post on Facebook Link Trackers in Facebook Notes. There are a couple of other places on Facebook where you can place link trackers. Basically, you'll find that wherever you can post an URL, you can post a Link Tracker, since a Link Tracker is really just an URL. The catch is that outside of the notes, you'll probably only be able to enter the actual URL -- you won't need to enter actual HTML like you do with the notes.

There are 2 ways to get the straight link tracker URL. The first way would be to follow all of the same steps you followed in the original tutorial. Just copy/paste the URL (which is everything between the double quotes ("). The other way is to use the Adwords Tracker. Don't let the name throw you off -- it works.

  1. Log in to your WunderCounter Account
  2. Choose Adwords Tracker from the Generate HTML menu
  3. Enter the URL of the page you're linking to. I'll use
  4. Give the tracker a name you can remember. I'll use fb_tracker/
  5. Take the URL which you're provided with and use it in your Facebook account as a tracker URL
Now, where can you place these URLs? I don't claim to be a Facebook expert, but here are a couple of places that should work:

  1. Wall posts
  2. Share a Link (under the Wall tab on your Profile page)
  3. In comments on notes
  4. In comments on status
  5. In the website box under your Contact Information
  6. You can experiment with the other boxes of the Contact Information area (under the Info tab on your Profile page). Many of them may accept tracker URLs as well.
If I've missed anything or gotten something wrong, please comment back and let me know.