Wordpress Founder Slams Six Apart
Techcrunch has a hilarious exchange of fire between Wordpress founder Matt Mullenweg and Six Apart’s evangelist Anil Dash over the relative merits of Wordpress and MovableType:
Anil Dash: “WordPress 2.5 is about to be released, and we wanted to encourage WordPress users to upgrade. To Movable Type.”
Matt Mullenweg: “Six apart is getting desperate, and dirty.”
Anil Dash: “Desperation is resorting to name-calling and slander instead of substance — if there’s a factual error, i’m glad to fix it.”

I’ve written before about how I personally prefer Wordpress to Movable Type because it offers me an unprecedented open source experience, tons of community support, and easy hackability. It’s also pretty damn fast, so I don’t worry about my server crashing or overloading.
However, it’s also totally ok in the competitive marketplace of free blogging software for one manufacturer to directly tote its own features in comparison to another piece of software. What’s wrong with saying that Movable Type has features x, y, and z that Wordpress is still dreaming of?
Update: Mullenweg, of Wordpress, has followed up his Twitter with a post Wordpress Is Open Source, in which he says “I had held off criticizing [MovableType and Six Apart] after they went OS and before they decided to start an all-out confrontation because that’s not generally what OS projects do to each other.”
Clever Personalized Mortgage Spam
I got an extremely clever personalized spam email today, something that I’ve never seen before. They took my first name and used it to address me, and then took my last name and suggested I “move the Back family there.” Wow! Check this out:
From Homes4Half [info@lafdeb.com]
date Thu, Feb 28, 2008 at 6:24 PM
subject A Half-priced Home in ITHACA for the BacksDear Elliott,
Imagine moving the Back family into a fabulous new home in the ITHACA area that you bought for HALF it’s market value! You can find homes priced as LOW as $10,000. Search the ITHACA area for the best bargains today!
They even spelled my name right, which is fairly amazing.
How many users does DIGG have?
When John Graham-Cumming asked the question How Many Users Does Digg Have?, there were a few things he couldn’t tell you, since his data consisted of randomly self-sampled users. Well, with the power of two PHP scripts, we can pull large amounts of user data and form queries. Our first question is how has DIGG grown over time?

A graph of 187,054 digg users, randomly plotted against when they joined
This doesn’t tell us much, though, about how many DIGG users there actually are, or how active they are, so I plotted a histogram of the number of times these 200k users’ profiles had been viewed; the answer, unsurprisingly, is not very often in most cases:

83% of users had less than 50 profile views
And what about users who are active? How many people are digging stories every day? The answer is very few. I took a sample of 29,225 users from the previous sample (randomly) and used the DIGG API to query for their last digg. It turns out 31% (9125) had never dugg anything! After I removed those, here is the histogram I got:

About 15% of Digg users dugg a story in the last week
Concluding thoughts
Digg boasts an official tally of 2.2M users, but at most 20% of them can be considered real, active users. That would bring their user count down to 440,000, far far less than a popular web 2.0 boom child can boast about, and significantly hurting that $300M (or ~$700 a user) valuation that they keep trying to get.
Code Appendix
The {digg user, time joined, digg id, profile page views} information was gathered by the following script:
<?php
error_reporting(E_ALL);
ini_set(‘user_agent’, ‘My-Application/2.5′);
ini_set(“include_path”, “.:/usr/share/pear”);
require_once ‘Services/Digg.php’;
require_once ‘Services/Digg/Response/php.php’;
$base = ‘http://services.digg.com/users/?appkey=http://example.com&type=php’;
$data = unserialize(file_get_contents($base.‘&count=0′));
$total = $data->total;
echo “There are $total total users\n”;
echo “ID,Number,Name,Date,Views\n”;
for($i = 0; $i < 1000; $i++){
$offset = rand(0, $total - 100);
$data = unserialize(@file_get_contents($base.‘&count=100&offset=’.$offset));
$j = 0;
foreach($data->users as $user){
$page = @file_get_contents(‘http://digg.com/users/’.$user->name.‘/’);
if(!$page)
continue;
preg_match(‘/id=”userid” value=”(\d+)”/i’, $page, $matches);
echo $matches[1] . “,”;
echo ($offset + $j++) . “,”;
echo $user->name . “,”;
echo $user->registered . “,”;
echo $user->profileviews .“\n”;
}
}
?>
Benchmarking Wordpress with Apache Bench
A lot of people talk about Wordpress performance, and how to get a webserver to perform as efficiently as possible. However, without a quantifiable methodology to testing website performance, you can’t actually talk about it. ApacheBench (ab) is the solution to the problem of measuring website performance. What is ApacheBench? The man page provides a suitable answer:
ab - Apache HTTP server benchmarking tool
ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how your current Apache installation performs. This especially shows you how many requests per second your Apache installation is capable of serving.
If you have installed apache or apache-devel, you should be to simple invoke ab by typing it on the command line. For example, to benchmark my own site here, I would write:
[root ~]# ab -n 10000 -c 100 http://elliottback.com/wp/
This says “make 10,000 concurrent requests to host elliottback.com via http and request /wp/ on 100 threads.” The result of this is the following report:
This is ApacheBench, Version 2.0.40-dev < $Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/Benchmarking elliottback.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requestsServer Software: Apache/2.2.6
Server Hostname: elliottback.com
Server Port: 80Document Path: /wp/
Document Length: 34331 bytesConcurrency Level: 100
Time taken for tests: 13.596345 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 346230000 bytes
HTML transferred: 343310000 bytes
Requests per second: 735.49 [#/sec] (mean)
Time per request: 135.963 [ms] (mean)
Time per request: 1.360 [ms] (mean, across all concurrent requests)
Transfer rate: 24868.08 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.6 0 20
Processing: 8 134 12.7 132 190
Waiting: 4 134 12.7 132 190
Total: 16 134 12.1 132 190Percentage of the requests served within a certain time (ms)
50% 132
66% 134
75% 136
80% 137
90% 145
95% 160
98% 175
99% 179
100% 190 (longest request)
According to these numbers, my dual core server can do 750 requests per second, fulfilling each within about 150ms each. That’s pretty fast, probably because I know the secrets of Wordpress Optimization. If you make every layer as fast as it can be, and cache heavily, you too can see lightening fast Wordpress installations!
New Website Features
I’ve just added two little cute features to the main page of my website. They don’t do much more than improve the usability and aesthetic of the front page by a tiny margin. The first is quite practical–it alerts you and sets the 404 status code if you loaded my site through a domain or subdomain:

The second is a Flickr badge across the top of my page, with a custom-made Flickr logo to take you to my Flick page:

But this is Web 2.0, and I use the Thickbox script in other places on my site, so why not here too?

It’s fun tinkering around with your main page. I need to add a cookie-rotator to the image on the front page, rather than make it time based. Then people can see different versions of me everytime they come back, rather than the current “new elliott at 1 AM” business.
