One Great Thing About FeedDemon 2

Unread Feed View
I didn’t install FeedDemon 2.0 beta 1 right away because the current version (1.6) worked so well for me. Why upgrade an app that does everything you need?

I installed the beta today and found one feature I absolutely love – Unread Feed View. A little button on the side bar makes it easy to toggle between Folder View (old style view which shows all your feeds as icons, even ones that don’t have unread items) and Unread Feed View, which only shows icons for feeds with unread items. I don’t think I’ll ever leave Unread Feed View. Before this beta, I had to hunt through a long (and growing longer) list of feed icons to find the ones that had changed. Now I get a short little list of only the feeds that have changed. You gotta love features you never knew you needed and later can’t imagine living without.

Technorati Tags:

Hacking Apache HTTP Server at Yahoo!

How does the busiest web site on the planet squeeze maximum performance out of Apache? Check out the talk notes from Michael Radwin’s ApacheCon 2005 session titled Hacking Apache HTTP Server at Yahoo!.

Here’s the excerpt:

Since 1996, Yahoo has been running Apache HTTP Server on thousands of servers and serving billions of requests a day. This session reveals the secrets of how Yahoo gets maximum performance out of minimal hardware by tweaking configuration directives and hacking the source code. Radwin will cover topics such as reducing bandwidth costs, extensible logfile format and rotation schemes, dumping core gracefully, and how to avoid the dreaded MaxClients, Max/MinSpareServers, StartServers configuration nightmare.

Technorati Tags: ,

Aging Google Satellite Imagery Using Football Stadiums

Ever wonder how old Google Local’s satellite pictures are?

The new zoom levels that Google announced yesterday make it even easier to tell. One method is to look at local football stadiums and see how the fields are decorated.

Rose BowlI checked the Rose Bowl in Pasadena, site of this years BCS national championship, and found the field decorated for a USC-Michigan game. That game was probably the Rose Bowl played January 1, 2004, when USC beat Michigan 28-14 to claim a share of the national championship. So – these images are about two years old.

Orange BowlThe imagery of Dolphins Stadium, where the Orange Bowl is played, was fuzzier because the new zoom levels aren’t available for that location yet. However, It looks like Iowa versus USC, a game played January 2nd, 2003 (three years ago). USC won that one too – 38-17

I checked the other BCS bowls too… but the Georgia Dome is covered so I couldn’t see anything and the Fiesta Bowl wasn’t decorated at all.

Anyone else?

Tags: , ,

Update: Fixed name of stadium where Orange Bowl is played.

Malicious Host File Hijack

Sunbelt BLOG describes a virus that modifies the host file on victim machines to facilitate phishing attacks. By modifying the host file, the virus ensures that users attempting to visit sites like PayPal, Wachovia, BankOne, LloydsTSB and others are directed to a phishing server at IP address 216.32.94.147.

This kind of attack represents a departure from the typical one-off phish-by-email attacks that we normally see. Not only is it a passive attack (the phisher has to wait for you to attempt to visit one of its targets), but it also requires a much smarter web site to host the attack. When a user connects to phishing site, code on the server (PHP in this case) must look at the “host” header to determine where the user intends to go (remember, all the target financial sites are hosted on the same site). Depending on the header information, the site does an internal redirect to the appropriate sub-site.

Tags: ,

Running WordPress Feeds Through FeedBurner

I like stats. I use Google Analytics to track standard web stats, but it relies on javascript and can’t track subscriptions to my RSS feeds. Enter FeedBurner.

FeedBurner lets you publicize, optimize, analyze, and monetize your RSS feeds – basically putting your standard RSS feed on steroids. You tell FB where it can find your blog feed (mine’s at http://adamstiles.com/feed/) and it produces a souped up version that can be downloaded from a FeedBurner URL (e.g. http://feeds.feedburner.com/adamstiles). Once you have this new feed URL, you just need to get your subscribers to download it from the new location. Easy enough for new subscribers, but what about existing ones? I want my stats to include all readers, not just existing ones.

A little WordPress background is in order. WP processes all pages on your blog, including your feeds, through a PHP file called index.php. It uses a couple of mod_rewrite rules to make this happen.

#
# Apache mod_rewrite rules that rewrite URLs from:
#
# OLD: http://adamstiles.com/feed/
# NEW: http://adamstiles.com/index.php?feed=feed
#
# OLD: http://adamstiles.com/feed/rss/
# NEW: http://adamstiles.com/index.php?feed=rss
#
# Etc… for rdf, rss2, atom
#
RewriteRule ^(feed|rdf|rss|rss2|atom)/?$ /index.php?&feed=$1 [QSA,L]
RewriteRule ^feed/(feed|rdf|rss|rss2|atom)/?$ /index.php?&feed=$1 [QSA,L]

Its important to get this to avoid a gotcha later. Your subscribers download your feed from a URL that looks like this http://adamstiles.com/feed/ but WP processes that request like this http://adamstiles.com/index.php?feed=atom. Your feed subscribers will use the first URL, even though WP uses the second internally. Nobody subscribes to the index.php?feed=atom version of your feed but we’ll use that when we tell FB where it can find your feed.

Now that that’s out of the way we can get started.

Step 1: Setup Your FeedBurner Feed

The first thing you need to do is tell FeedBurner where to find your feed. There is an important gotcha here – use a WP feed url with index.php in it, don’t use the rewritten WP feed URL. In my case, I told FB that my feed was located at http://adamstiles.com/index.php?feed=atom. FB now makes my souped up feed available at http://feeds.feedburner.com/adamstiles. The reason you need to tell FB to use the index.php url and not your rewritten URL is that we’re going to tell Apache to redirect subscribers to our old feed URL to the new FeedBurner URL. See the problem? If FB is grabbing the URL from the rewritten URL, but we’re redirecting the rewritten URL to FB, it gets caught in a loop and never actually gets any feed content. Make sure you’re using the index.php?feed=something URL when setup your account with FB.

Step 2: Redirecting Old Subscribers to the New URL

We’ll use some custom mod_rewrite rules to redirect feed readers from the old WordPress feed URLs to the new FeedBurner URLs. Modify the feed-related rules in your .htaccess file to redirect to FeedBurner.

#
# Replaced /index.php?feed=$1 with my FeedBurner URL
# The R in brackets tells apache that this is an external redirect
# The L means this is the last rule for processed for the URL
# http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
#
RewriteRule ^(feed|rdf|rss|rss2|atom)/?$ http://feeds.feedburner.com/adamstiles [R,L]
RewriteRule ^feed/(feed|rdf|rss|rss2|atom)/?$ http://feeds.feedburner.com/adamstiles [R,L]

I also updated some other rules that I originally setup when I moved to WordPress from TypePad:

RewriteRule ^adam/atom.xml$ http://feeds.feedburner.com/adamstiles [R,L]
RewriteRule ^adam/index.rdf$ http://feeds.feedburner.com/adamstiles [R,L]

After this, test the rules. Go to your old, rewritten feed url (e.g. http://adamstiles.com/feed/) in a browser and you should be redirected to your FeedBurner URL. FB will detect that you’re using a browser to display your feed and it will add some markup to it to make it easy to read (not just XML).

Step 3: Making Redirects Permanent

This step is optional but some will find it useful. At this point your redirects are temporary – feeds readers will still come to you first and they’ll be redirected to the FeedBurner URL each time. If you use a permanent redirect, many feed readers will update their subscription data so they go directly to the FB URL and don’t have to come to your first. To do this, you need to change your rule modifiers from [R,L] to [R=permanent,L].

RewriteRule ^(feed|rdf|rss|rss2|atom)/?$ http://feeds.feedburner.com/adamstiles [R=permanent,L]
RewriteRule ^feed/(feed|rdf|rss|rss2|atom)/?$ http://feeds.feedburner.com/adamstiles [R=permanent,L]

Tags: , , ,

2006 Health and Fitness Goals

Goal 1: Complete the Big Sur International Marathon on April 30, 2006 in Under 5 Hours

My main goal when I ran the Long Beach marathon in October 2005 was to complete my training program and finish the race injury-free. A minor goal was to break 5 hours for the race. I achieved the first goal but was well off my time goal which suprised me, given my times for 20 and 22 mile training runs. This year, I’m planning to run the Big Sur marathon with my brother and my dad and my goal is to break five hours.

Big Sur is a much tougher marathon than Long Beach (big hills!) so I’m making a bunch of changes to my training program to set myself up for success. For Long Beach I modified a low-mileage Jeff Galloway training program which consisted of two thirty-minute runs a week and one long race-pace run (between 6 and 22 miles). For Big Sur, I’m lengthening my shorter runs to 40-50 minutes and will keep a similar schedule for longer runs. The Galloway plan has three weeks between the longest runs but that felt too long to me so I’m shortening the interval to two weeks. I’m also planning on higher quality off-week long runs of 10-12 miles. For Long Beach, I substituted several of the off-week long runs for triathlon training bricks (bike/runs) and I think the skipped runs hurt me. Finally, I will be doing lots more hills in preparation for Hurricane Point.

Besides my training changes, another place I plan to pick up some time is by weighing less for the race. That brings me to my next goal.

Goal 2: Weight 205 or Less Pounds on April 30th and December 31st

I ran Long Beach while weighing about 220 pounds but I’m sure the race would have been easier without the extra pounds I’m carrying. Dropping 15 pounds (and keeping it off through the year) should make running easier on my body and make me faster too. I plan to lose the weight through better food choices and increased exercise. Achieving my third goal should should help me reach this one too.

Goal 3: Row 1,000,000 Meters in 2006

Nancy and I have been looking to add a low/no impact aerobic exercise to our routine that would be super-convenient and provide an upper body workout too. I’d love to swim again but that isn’t convenient enough for our busy life at this point. Rowing has turned out to be the perfect option so Nancy and I got ourselves a Concept2 rower for Christmas. I’ve been rowing three times a week for two weeks and am starting to love the rhythm. Indoor rowing is suprisingly addictive. There are even competitions if I’m every so inclined. You can’t beat the convenience either – just head out to the garage. I row about 6100 meters in 30 minutes at this point. To row a million meters in 2006, I need to row three times a week and average 6400 meters. I’m on track at this point 😉