MasterMind Watch: Week 2

The Broncos won the statistical battle and lost the scoring war, out gaining the Jaguars 385 yards to 247. There was plenty of blame to spread around. Special Teams gave up a 49 yard punt return that lead to the winning TD. At the end of the first half, the offense had a first and goal at the 6 and had to settle for a field goal. And a bad exchange from Plummer to Griffin cost the Broncos a chance to kick a winning Field Goal at the end of the game.

Not a good week for the MasterMind. Portis had a bad day for the Redskins with only 69 yards on 20 carries with 2 fumbles. But with 280 prior touches without a fumble, yesterday was an aberration. I think that with Portis in the backfield, the Broncos can get more than a Field Goal and a fumble out of the final drives of the 1st and 2nd halves.

Sticks and Stones

Sticks and stones may break my bones, but words will never hurt me.

I hope they throw the book at Frank Francisco. There is absolutely no excuse for throwing a chair into the stands. I don’t care what the fans were yelling.

In a radio interview, Texas reliever Jeff Nelson (who has first hand experience with fan confrontations) contends that Oakland security was remiss in not stopping the verbal abuse earlier. I need to hear some more specifics. You don’t get paid the big bucks to have rabbit ears.

RSS Bandwidth and If-Modified-Since

Okay, maybe using If-Modified-Since to throttle RSS bandwidth isn’t such a great idea. If I understand the objection correctly, the problem goes something like this:

  1. Tom requests the feed, and the caching proxy retrieves items X and Y.
  2. Dick requests the feed, and the caching proxy replaces items X and Y with Z.
  3. Harry requests the feed, receives item Z from the cache and never sees X or Y.

It seems to me that using If-Modified-Since to throttle RSS bandwidth can still be effective by introducing a minimum number of items. My feed currently contains 25 items. If I introduced If-Modified-Since throttling with a minimum of 7 items, then I’d still get a substantial savings in bandwidth without unduly penalizing readers behind a cache proxy.

PS: This is of course contingent upon my rumored migration to TextPattern.

PPS: I am aware of RFC 3229 and I choose to ignore it. The problem isn’t with well-behaved, standards conforming aggregators.

MasterMind Watch: Week 1

Mike Shanahan is a master of offensive X’s and O’s, able to exploit defensive weaknesses. But he is also Head Coach and General Manager, responsible for defense and personnel. And over the past 3 or 4 years, his defensive personnel decisions haven’t panned out. This off-season, Shanahan traded Clinton Portis for Champ Bailey and a second round draft pick.

So far, so good. Quentin Griffin is the latest incarnation of Broncos running back greatness with 156 yards and 3 TDs. Champ Bailey has been the shutdown corner the defense needed. We still need to see how the running game performs against a quality defense and how the defense performs against a quality passing attack. But right now, the trade is looking like the work of a MasterMind.

World Turned Upside Down

Dan Thompson, Director of External Affairs at Fork Union Military Academy, suggests that I may need to root for the Dallas Cowboys and their 3 Fork Union alumni (Eddie George, Vinnie Testaverde, and Dexter Coakley). My first reaction was that Pete Brown is a good friend, but I don’t know if he’s that good a friend.

But then I found myself actually rooting for Notre Dame to beat Michigan over the weekend. Simply because the Sheriff of Willingham is the head coach. If I can root for the Fighting Irish, then I can root for almost anyone.

Go Cowboys.

RSS Bandwidth

Scoble reports that Bandwidth usage was growing faster than MSDN’s ability to pay for, or keep up with, the bandwidth [referring to MSDN’s decision to switch to excerpts in its RSS feeds]. This is yet another item in my list before moving to TextPattern.

TextPattern is completely dynamic. Unfortunately, its 403 Not Modified behavior isn’t quite up to stuff. Because it is retrieved via query parameters, some aggregators do not supply an if-modified-since header. This is a bad [albeit arguably correct] design choice in those aggregators. So I need a parameter free url.

While I’m in there, I plan to modify the if-modified-since behavior so that only changed entries are returned in the feed. And perhaps add a snarky, one-item feed for requests that do not include an if-modified-since header (with an appropriately early last-modified time).

Countering Comment Spam

It appears that my comment spammers have departed for greener pastures. Meaning that I can defer implementation of any spam counter measures. But if you’re using my Standalone Trackback and Comments, then here’s my defense strategy:

  1. Enable the comment RSS file. This will alert you to any new comments and allow you to remove them promptly. They target old posts in hopes of escaping notice.
  2. Eliminate outbound links from comments. Which is not as easy as I’d like it to be.
    1. Eliminate links from the comment body by setting ALLOWED_TAGS.
    2. Modify the comment entry form to reflect the new allowed tags by setting FORM.
    3. Modify the comment display to unlink the author’s website by setting BODY_FUNCTION.
  3. Modify the package to add comment moderation. I was thinking about eliminating outbound links in unapproved comments and allowing them in approved comments. This would call for the addition of UNAPPROVED_TAGS and UNAPPROVED_BODY_FUNCTION member variables.

After steps 1 and 2, you should end up with a comment script something like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/perl

use lib '../cgi-lib';
use comment::service;

sub my_comment_display {
my ($data) = @_;

my $tmpl = <<TEMPLATE;
<div class="%s">
<div class="comment">%s</div>
<div class="nameDate">%s &#0149; %s</div>
</div>
TEMPLATE

my $i = 0;
for my $item (@$data) {
my $ts = POSIX::strftime("%d %b %Y, %I:%M %p %Z", localtime($item->{timestamp}) );
my $name = $item->{blog_name} || "Anonymous Coward";
my $nameUrl = $item->{url}
? "$name [$item->{url}]"
: $name;
printf $tmpl, ($i % 2 ? "odd" : "even"), $item->{excerpt}, $nameUrl, $ts;

$i++;
}
print "<hr>n";
}

$input_form = <<FORM_END;
<form method="POST" target="_self">
<input type="hidden" name="%s" value="%s">
<input type="hidden" name="link" value="%s">
<input type="hidden" name="%s" value="ping">
<table>
<tr><td colspan="2"><b>Add your comment (b, i, em, p tags allowed):</b></td></tr>
<tr><td valign="top" width="1%">Name:</td>
<td valign="top" width="99%"><input type="text" name="blog_name" size="50"
maxlength="255" />
</td>
</tr>
<tr><td valign="top">Web site:</td>
<td valign="top"><input type="text" name="url" size="50" maxlength="255" /></td>
</tr>
<tr><td colspan="2">Due to a rash of comment spam, links are not allowed in comments</td>
</tr>
<tr><td valign="top" width="1%">Comment:</td>

<td valign="top">
<textarea name="excerpt" rows="7" cols="80" style="width:100%"></textarea>
</td>
</tr>
<tr><td> </td>
<td><input type="submit" name="submitComment"
value="&nbsp;Submit&nbsp;" />&nbsp;&nbsp;<input type="button" name="cancelComment"
value="&nbsp;Cancel&nbsp;" onclick="window.close()" />
</td>
</table>
</form>
FORM_END

$tb = new comment::service(
BODY_FUNCTION=>\&my_comment_display,
ALLOWED_TAGS=>"b,i,em,p",
FORM=>$input_form,
DATA_DIRECTORY=>"/Path/to/comments/directory",
RSS_FILE=>"/Path/to/comments.xml",
BLOG_NAME=>"Take the First Step",
BLOG_URL=>"http://www.ideoplex.com/blog/"
);
$tb->handle();

exit(0);

Umpire Blunder at US Open

The Williams sisters must feel snake bit right about now. At Wimbledon, Venus was on the wrong side of an incorrect score during a final set tie breaker. And last night at the US Open, the umpire took a point away from Serena. The TV replay clearly showed that Serena’s winner was in and that the line official called it in. But Capriati somehow ended up with the point.

The more I think about it, the more I like the NFL treatment of replay challenges. Make review rare to preserve the flow of the game, but make it possible to force review of important plays.