As threatened, I re-ran my Browser Market Share numbers, but restricting the analysis to people who came to ongoing as the result of a search. It shows a pattern much more like what others in the industry are reporting: Internet Explorer has a large but steadily-diminishing lead. Here’s the chart, plus some notes on methodology and believability.
I think the people who come here via a search engine are much more representative than the geeks, hacks, and weirdos in the regular readership (but hey, I love y’all). Here’s some evidence; the top ten Google searches so far this week are: “mukhtaran mai”, “dyndns”, “tim bray”, “ongoing”, “browser market share”, “binary search”, “bittorrent porn”, “debbie does dallas”, “glitters”, and “white flowers”.
Even stronger: remember that I get way more Google image than string searches, and the top ten image searches are: “grass”, “beach”, “yankee stadium”, “sun”, “construction”, “bristol”, “white flowers”, “9/11”, “concorde”, and “glacier”.
Interestingly, ongoing has progressed from just over 3,000 search-sourced visitors a week in early 2004 to around between 9,000 and 12,000 these days.
As always, transparency is good, so I attach the Perl script that I use to process one week’s data. Bug reports are gratefully received.
#/usr/bin/perl
use strict;
my $f = '\S+\s+';
my %engines;
my @bnames = ('IE', 'Mozilla', 'Safari', 'Opera', 'Lynx');
my %browsers;
my $count = 0;
my %puzzle;
my $lastGImage;
while (<STDIN>)
{
my $who;
my $referer;
my $agent;
if (/^(\S+)\s+$f$f$f$f$f$f$f$f$f\"(\S+)\"\s+\"(.*)\"$/o)
{
$who = $1;
$referer = $2;
$agent = $3;
}
s/\" .*$//;
my $e = '';
next if ($referer =~ /^-?$/);
if ($referer =~ /search\.yahoo/) { $e = 'Yahoo'; }
elsif ($referer =~ m@^http://images.google@)
{
if ($who ne $lastGImage) { $e = 'Google Images'; }
$lastGImage = $who;
}
elsif ($referer =~ m@^http://www.google.*search@) { $e = 'Google'; }
elsif ($referer =~ m@^http://search.msn.com@) { $e = 'MSN'; }
elsif ($referer =~ m@^http://web.ask.com@) { $e = 'Ask Jeeves'; }
if ($e)
{
$engines{$e}++;
&browser($agent);
}
}
my $b;
# Turn on from time to time to sanity-check
if (0)
{
foreach $b (sort keys(%puzzle))
{
print "$puzzle{$b} $b\n";
}
}
$ARGV[0] =~ s/\..*$//;
print "$ARGV[0]\t";
foreach $b (@bnames)
{
printf "%0.1f\t", 100.0 * $browsers{$b} / $count;
}
print "\n";
print STDERR "Total searches: ", $count, "\n";
sub browser
{
my $b = shift;
my $a = '';
if ($b =~ /lynx/i) { $a = 'Lynx'; }
elsif ($b =~ /Safari/i) { $a = 'Safari'; }
elsif ($b =~ /opera/i) { $a = 'Opera'; }
elsif ($b =~ /MSIE/) { $a = 'IE'; }
elsif ($b =~ /Mozilla.*Gecko/) { $a = 'Mozilla'; }
if ($a)
{
$browsers{$a}++;
$count++;
}
else { $puzzle{$b}++; }
}