Finally, Error Page v1.2

It took a couple days longer then I had planned but it’s finally out:

Got all the Akismet features working. While the plugin will work without an API Key, you really should get one. All comments that are tagged as spam by Akismet are placed into an array in the WPDB. You can manage it from the regular Error Page management window. I used the Akismet Comment Spam plugin as a basis for a lot of the UI, so things should be pretty familiar.

Read more:


[tags]wordpress, plugin, akismet, dunstan-style error page, php[/tags]

But No 30Boxes?

Julia over at 30Boxes writes:


There was an article today in the Wall Street Journal touting Google Calendar as “quick and easy” and although there is a mention of 30 Boxes, we think he is inaccurately portraying Google as the lead innovator in this space

We want anyone out there who really loves 30 Boxes to please set Walt straight. Let him know why you use our product.

mossberg AT

Make some noise. Old media shouldn’t have this much power over new media.

So I wrote:

Dear Mr. Mossberg,

No doubt you have already received many emails asking why the lack of coverage for I find disgusting that you choose to profile Google Calendars and simply glance over the rest, calling 30Boxes and others simply “decent offerings”, especially when Google was so late to the field. But just “decent offerings”? Surely you must be joking. I have been using 30Boxes since the end of February and have simply loved it. It has one of the simplest and intuitive interfaces I have ever seen. 30Boxes is also consistently adding new features to their service, features that users have requested. In fact, I would venture to say that 30Boxes is more innovative than Google Calendars because of this. Google has to serve the public at large and I feel they are getting too big for their own good. In short, Google can’t serve more than one master. 30Boxes, on the other hand, is small and nimble. They can afford to make a tweak, try it out, and if it doesn’t work, roll it back. In the end, I see 30Boxes winning. They have it all and they’re willing to risk it all.

In case it matters, I do have a GMail account and I still use 30Boxes.

Best Regards,

Andrew Ferguson

PSA: Living Library on Dead Day!

This is a Public Service Announcement:

Sigma Lambda is holding the 1st Living Library on Dead Day between 11am-5pm in the library.

So you are asking yourself what is Living Library?? Living Library is where students will ‘check out’ other people to become more knowledgeable about different races, sexes, interests, clubs, and so much more. The main point is to help get rid of the stereotypes on the CSM campus and to
learn more about people that they didn’t know about before.

All right, that’s the official announcement. Here’s my bit:
It’s at the CSM Arthur Lakes Library (Google Map). I’ll be there from 11am to 3pm answering all your questions. My keywords are:

  • Christian (Presbyterian)
  • Seattle, Washington
  • Straight (The event is sponsored by Sigma Lambda, the CSM Gay, Lesbian, Bisexual, Transgender Club)
  • Politically independent
  • Trekkie (As in: Fan of Star Trek)
  • Computer Guru (or nerd, geek, etc)
  • Web Developer
  • Chief Engineer – Mines Internet Radio
  • ADD
  • Photography and Film
  • Electronics in general
  • …anything else I can think of

There’s free coffee and if your interested in being checked out, there’s still time! Contact Rachel at ratrujil at mines dot edu.

[tags]living library, colorado school of mines, csm[/tags]

Weederbot III

I was walking back from Quant Lab (in Coolbaugh Hall) when I came across this over at Kafadar Commons:

It’s a Senior Design project that took a conventional riding lawnmower and robotized it by adding a MIT Handyboard and some linear actuators with feedback loops. They said it took 9 months to complete, which seems a little odd because I’ve done things very similar to this when I was at the UW during my Senior year of high school. They’re actually going to the hand the project off to a graduate student to implement a GPS receiver. Should be interesting.

Here are some pictures I snapped with my camera phone:
04-27-06_1253 04-27-06_1255
04-27-06_1254 04-27-06_1256

I talked with one of the creators and he’s going to send me some white papers and more photos.

[tags]colorado school of mines, senior design, robot, robotics, weederbot III[/tags]

A New Project X (Codename: SeattleCreatesRain)

I just had this great idea for a new plugin for WordPress. It’s really stupid, but could be fun. I won’t be released until version 1.2 of the Error Page is released, so maybe next Monday. Any guesses on what it is?

[tags]wordpress, plugin[/tags]

But What If I Don’t Want to CURL?

It seemed too easy. It was too easy. I made an assumption about the initial configuration of a users PHP installation and didn’t think about the consequences. cURL needs to be included during compilation of PHP and if it’s not, then you can’t use the magic that is cURL. One of my goals as a programmer is to make my software as compatible as possible. This is good for many reasons, but in the end I do it because it keeps everyone happy. So I tweaked the Akismet class I’ve been using to use fsockopen. It’s literally the exact same code that Akismet uses in their documentation:

function call($meth, $post_args, $host, $port = 80) {
	$post_args['blog'] = $this->blog;

	foreach($post_args as $key => $value){
		$http_content .= $key."=".urlencode($value)."&";

	$http_content = rtrim($http_content, "&");
	$http_request  = "POST $meth HTTP/1.0\r\n";
	$http_request .= "Host: $host\r\n";
	$http_request .= "Content-Type: application/x-www-form-urlencoded; charset=" . get_settings('blog_charset') . "\r\n";
	$http_request .= "Content-Length: " . strlen($http_content) . "\r\n";
	$http_request .= "User-Agent: WordPress/".get_bloginfo('version')." | afdn_errorPage/1.2\r\n";
	$http_request .= "\r\n";
	$http_request .= $http_content;

	$response = '';
	if( false !== ( $fs = fsockopen($host, $port, $errno, $errstr, 3) ) ) {
		fwrite($fs, $http_request);
		while ( !feof($fs) )
			$response .= fgets($fs, 1160); // One TCP-IP packet
		$response = explode("\r\n\r\n", $response, 2);

	return $response[1];

Note that the array has to be built into a string so that it can be passed properly. You also probably want to build the string before you start building the request because you’ll need to specify the length of your content which I found out the server actually pays attention to.

The only other changes that when using the call function, $meth needs to be preceded by /1.1/ and you need to drop the /1.1/ from the end of $host. Thus a call to check a comment would now look like:

$this->call('/1.1/comment-check', $post_args, "{$this->api_key}");

[tags]akisment, api, curl, fsockopen, php[/tags]

Acid and IE7

While I’m on the subject of IE7, I ran the Acid2 Test on it. Horrible still. The Acid test is designed as a way to check standards compliance and ability of browser to handle non-compliant CSS and such. It’s not designed to test for everything; instead, it tests for practices that web developers are looking for in a browser. For the long winded explanation, see

What the image is supposed to look like is displayed in your upper right (ignore the bottom reflection thingy, that’s just me trying to be cool with some fancy JS).

Here’s how Firefox did:
PXN8.COM - Wed Apr 26 15:40:39 2006

And Now IE7 Beta2:
Acid2 Test: IE7 Beta 2

Pretty bad still.

[tags]Internet Explorer, IE7, Firefox[/tags]

Why IE 7 Won’t Cut It

…at least among the savvy computer users.

Take a look at, Add-Ons for MSIE. To me, it looks likes Microsoft version of Mozilla Firefox’s, Firefox Addons. There are two major differences though. First, look how sparse the IE addons are? Granted, IE7 is still Beta2, but I’d expect tons more addons by now. Second, take a look at what the addons for IE cost. That’s right, you can get IE7 for free, but if you want to extend it’s functionality you’d better be ready to shell out some green.

[tags]Microsoft, IE7, Internet Explorer, Mozilla, Firefox[/tags]

Not a Blog

I’m tired of organizations trying to use catch phrases, such as “blog”, when they really have no idea what they’re talking about. Case in point:

The Colorado School of Mines has a some Student ‘blogs’ on their First-Year Students page.

The first thing I would like to draw your attention to is the complete flip of gender diversity. Mines is predominately male. I’m not sure if there are any statistics someplace, but it’s easily 4:1 (that would be four males for every one female).

Second, take a look at the content. That’s not a blog. It’s a “What I do at Mines when I’m not in class” page with the date put on the top and some pictures thrown in for good measure.

Third, (and I’m going to pick on Jessica because I know her) there are only 5 posts for the entire school year (and we only have about two weeks left). Yes, I know there really isn’t a rule that says you must update at least every xx number of days, but please! Last year, I had arount 650 posts (or almost 2 a day). Since the end of March, I’ve had 8 posts about Mines alone (see more: Posts on Mines).

If they’re really trying to give students a real idea of what’s going on, why not just link to student blogs?

Let’s do that! If you go to Mines, leave a comment with your name and blog URL. I’ll start…

Update: Another reason it’s not a blog? You can’t post comments!