NBC and tape-delay sitting in a tree

I’m really hating NBC’s Olympics coverage… not showing everything live was understandable when they were broadcasting from China or Europe, but they have little to no excuse this time.

We already know who won… it’s right there on NBC.com! And on the local news of the NBC affliate! Not to mention the Twitter, the facebook, the what-have-you and the whatever.

They have 6 channels on which to broadcast yet they don’t show skiing live, instead broadcasting highlights at night. I suppose it’d make the advertising slots on the primetime program less valuable if it contained rebroadcasts, but live action would make those daytime spots on CNBC worth more. Obviously not enough to make up the difference, but who watches ads anymore, anyways? Hell, it’s already been delayed, so I just DVR it and watch in the morning, skipping over the polar bears and the Coke and the McDonald’s and that damn ad for Visa with Dan Jansen that makes me cry every time (even in fast forward).

I don’t even mind the human interest stories, or the wall-to-wall figure skating, or the new fascination with snowboard halfpipe, which is just figure skating with manlier costumes and pot-heads, minus the footwork and “artistic interpretation” requirements.

C’mon, give me live skiing during the day. I don’t even need an announcer, just set that robot camera to sling up and down its wire all day long and we’re cool.

Popularity: 14% [?]

The next better thing since Google Browser Sync

I’ve been using the Firefox 3 beta exclusively for about two weeks now and I’m very, very happy with it. It’s both faster (not surprising in a beta) and more stable (surprising in a beta). The only real issues I’ve had a couple of websites that have problems (the graphs at MonitorSite don’t appear, for instance) and a couple of plugins that don’t work. None of those are essential… except for Google Browser Sync.

GBS: The. Greatest. Plugin. Ever.

Automatic syncing of bookmarks, history, and (most conveniently) passwords and cookies is a godsend if you work on multiple computers. Combined with a little FolderShare magic1 to sync your plugins and settings and you rarely have to open a browser and see an unfamiliar interface again.

But GBS hasn’t been updated to work with Firefox 3. That, in itself, isn’t very surprising… it would make sense for a plugin developer to wait for at least RC1, especially since the new Places architecture for bookmarks and history would require a lot of changes in sync product. It’s more troubling that, despite much heated discussion, Google hasn’t even confirmed that they’re working on an update.

Maybe there won’t be a new GBS. Perhaps it was someone’s 20% time project, and that someone has since cashed out and moved to Amsterdam and stopped caring about browser plugins. Luckily, that doesn’t matter anymore, because now we have Weave.

Weave is going to be Google Browser Sync shot up with HGH… the Roger Clemens of plugins, minus the underage country singers2. The plan is to allow you to sync to any device, any browser, even any application, and more. Plus, it’s open source, so there’s no chance it’ll become popular and suddenly disappear.

Currently it’s not perfect. It only syncs bookmarks and history (with cookies in alpha and passwords in the planning stages), and it throws a lot of errors. But it does work, and on the first Weave conference bridge we learned the extent of the team’s short term goals:

Feature set being targeted for Weave 0.2 (June 2008):

* Streamlined first run and setup
* Real-time sync
* Additional data-types

  • Tabs and Windows
  • Saved Passwords
  • Saved Form Data
  • Search History

* Bookmark folder sharing between users
* Simple web-based interface for users to gain read-only access to their bookmarks

By next month it’ll do everything GBS did and a little bit more. Imagine what it’ll do by next year.

  1. Sometime soon I’ll share my own special way to sync browsers… I have to use a combo of FolderShare and SyncToy to avoid a few problems with FolderShare not wanting to sync open files. []
  2. This is an assumption, of course. Underage country singers are not currently on the features roadmap. []

Popularity: 29% [?]

Are you for math, or are you for Hillary?

“Are they for the oil companies, or are they for you?” – Hillary Clinton, using her innate powers of economic idiocy to question the patriotism of Senators that won’t vote for her gas tax holiday.

Popularity: 15% [?]

Zero tolerance

A high school student in Portland just pulled an awesome prank, sending a letter to every parent on school letterhead encouraging them to allow parties with alcohol and sex after the prom. Of course the prank was obvious (at one point if referred to the school, Lincoln High, by it’s nickname “Drinkin’ Lincoln,” and the envelope contained a condom), harmless, and very funny (it could even be argued it was sensible… I see nothing wrong with 18 year-olds having a few beers, especially if they have parental consent). So the administrators chuckled a bit, remembered all the shit they got away with when they were kids, sent a correction letter home and let it go at that.

If you believed that then you haven’t been paying attention. Of course they didn’t blow it off, instead they’re totally wigging out.

Shelby said the school is actively trying to find whoever initiated the scam. “It’s a high school and students talk,” he said. “Given the amount of exposure this has had, I’m fairly confident the school administration will find the source.”

But this joke may have severe consequences. Officials say students involved could face punishment ranging from detention to suspension. And a district policy says that any student who receives disciplinary action such as a suspension within two months of graduation can be barred from participating in the graduation ceremony.

And the kicker:

Additionally, officials are working with authorities to find out if any laws were broken.

Popularity: 29% [?]

Yeeeeargh!

At least I’m guessing that’s how Howard Dean punctuated his call for superdelegates to tell him how they voted right now. Rather than wait for the convention. When they actually have to vote. According to Democratic Party rules. You know, the rules that Howard Dean is in charge of.

Dude, you really should have seen this shit coming a mile away, back when you allowed your party to have this ridiculous super-delegate system. Just goes to show… the Democratic Party is teh dumb.

More proof that liberals are stupid, a comment on that article:

FELLOW DEMOCRATS

LET’S WORK TOGETHER
I AM A HILLARY SUPPORTER, HOWEVER I WILL VOTE FOR OBAMA IN THE GE IF HE IS THE NOMINEE.

OUR COUNTRY CAN’T STAND ANOTHER BUSH TERM.

Another Bush term? No, we didn’t repeal the 22nd amendment, and no, Jeb ain’t running. Yet.

Even more proof that liberals can’t read good:

Popularity: 15% [?]

Paging Dr. House

Idolator noticed that Idol Gives Back gave a lot of screentime to other networks’ stars, but they didn’t mention that Fox missed out on a chance to promote one of their biggest stars, who happens to be on a show that runs adjacent to American Idol. That’s right, Hugh Laurie is the usual keyboardist for Band From TV, but he was notably missing from their performance of “Before He Cheats.” Sure, Jesse Spencer was prominently featured on electric fiddle, but Jesse Spencer is hardly a big name… he’s barely getting two minutes per episode on House this season.

So where was Hugh? Does he have a reasoned argument against charity, or does he just hate poor people?

Popularity: 20% [?]

American Idol: Inspiration Night

Otherwise known as David Archuleta has got this in the bag night.

Michael Johns: Fine. I didn’t know he had that falsetto in him.

Syesha Mercado: Fantasia? Really? Yuck. Good technical performance, though.

Jason Castro: Oddly compelling. I didn’t want to like it (ukulele? I mean, really?) but it was good.

Kristy Lee: Good lord, girl, buy a skirt. The less skirt the better, this pants thing has to end. (Her song sucked.)

At this point Lily started to act up, so I brought my live-blogging to the end. Sorry, David, David, Carly, and Brooke.

Popularity: 18% [?]

Is this the FDA, or is this the USA?

The pre-emption doctrine, that the FDA approval process protects companies from liability for bad drugs, is incredibly brazen and dangerous. Johnson & Johnson lied to the FDA, and their customers, about the ingredients in a drug for years… then when they’re found out they try to claim that they’re clean because the FDA should have caught them first.

What’s the solution? Dissolve the FDA completely. Remove the possibility of pre-emption as a legal shield. Make companies liable for their own drugs efficacy and safety, or allow them to hire their own independent review boards, with the power to run their own studies (power the FDA doesn’t have), to take the heat if something goes wrong.

It’s got to work better than the system we have now, what with the slow pace of drug approval (even drugs that have been used for decades in other countries), drugs that are held up for political reasons, and the noisy and expensive lawsuits surrounding FDA approved drugs like Vioxx and Zyprexa.

So why not deregulate?

Popularity: 16% [?]

Hey, my blog’s eyes are up here, pal!

Yes, it’s CSS naked day! Actually, it’s CSS naked 48 hours so that it overlaps with every timezone.

Anyway, it’s a little thing to promote web standards or some such hoo-ha, and it sounded like fun. So TBOTCOTW will look like 1996 for the next couple of days.

Popularity: 23% [?]

Movable Type to WordPress without losing your permalinks

So you’d like to upgrade to WordPress from Movable Type? It’s not very hard… if you’ve always had the same permalink structure. But if you’ve gone through the MovableType versions from 1.5 to 2.x to 3.x and finally to 4.1 (like me) then you’ve probably been through a couple of URL scheme revisions.

In my case, I started out with Movable Type’s default (and, at the time, only) permalink structure… post ID (a six digit number) followed by .html in the archives directory to avoid cluttering up the top one. It looked like this: “http://tbotcotw.com/archives/000334.html.” Of course, from there I switched to .shtml, then quickly to .php, and when MT finally supported it, permalinks based on the post name (all the words with underscores replacing the whitespace). At around the same time I read Mark Pilgrim’s excellent post on cruft-free and future-proof URLs in Movable Type. I’d finally found a URL structure that (I thought, it turns out that the underscore was a bad idea) would stand the test of time: post name with underscores for whitespace and no extension.

This was exasperating, though, since switching to a new URL scheme in midstream meant that my permalinks were now not very perma. I was getting lots of 404s because people had linked to a URL that didn’t exist anymore. And that was hurting my Google page rank. I considered fixing the problem by publishing a page with a php location header that would redirect from the old URL to the new seamlessly (using a 301 error code). But actually building those pages statically slowed down the already miserably slow interface to MT (my server is a piece of crap)… comments would take over a minute to be published when two or three individual entries and two category archives had to be built. So I had to wait until MT caught up and allowed dynamic publication, then I created a new archive mapping for the old URL structure and MT would automatically serve a page with the location header whenever a browser requested an old page. Pretty hacky, but it worked very well.

Fast forward to today and I still get hits on old posts from links that someone wrote in 2002. I wanted to duplicate my redirect scheme after I switched blogging systems but neither the MT export nor the WP import pays any attention to post ID, so I hacked both of them as I mentioned here. I had to use an old (2.1?) version of the import script in WordPress, but it worked just fine. Then I built a series of mod_rewrite rules to redirect from every one of the many URL structures I’ve ever used:

# Convert old archives
RewriteRule ^/archives/([0-9]*)\.php$ /$1/ [R=301,L]
RewriteRule ^/archives/([0-9]*)\.html$ /$1/ [R=301,L]
RewriteRule ^/archives/([0-9]*)\.shtml$ /$1/ [R=301,L]
RewriteRule ^/archives/([0-9][0-9][0-9][0-9]/[0-9][0-9]/.*)\.php$ /$1/ [R=301,L]
RewriteRule ^/archives/old/([0-9]*)\.php$ /$1/ [R=301,L]
RewriteRule ^/archives/cat_(.+)\.php$ /category/$1/ [R=301,L]
RewriteRule ^/archives/cat_(.+)\.html$ /category/$1/ [R=301,L]
RewriteRule ^/archives/cat_(.+)\.shtml$ /category/$1/ [R=301,L]
RewriteRule ^/archives/?$ /archive/ [R=301,L]
RewriteCond %{REQUEST_URI} !^/archives/[0-9][0-9][0-9][0-9]/[0-9][0-9]/?.*$ [NC]
RewriteCond %{REQUEST_URI} !^/archives/[0-9][0-9][0-9][0-9][0-9][0-9]\.?.*$ [NC]
RewriteCond %{REQUEST_URI} !^/archives/tag/.*$ [NC]
RewriteCond %{REQUEST_URI} !^/archives/author/.*$ [NC]
RewriteRule ^/archives/(.*)$ /category/$1 [R=301,L]
RewriteRule ^/archives/(.*)$ /$1 [R=301,L]

This converts the old “/archives/000334.html” format to “/000334/,” changes “/archives/cat_blog_business.html” (another legacy MT convention) to “/category/blog_business/,” and removes the “/archives/” from every other URL. At this point the numeric requests are handled by a plugin called Permalink Redirect. Just put “%post_id%/” in the old permalink structure field and blamo… no more 404s, everybody who clicks an ancient link is sent to the correct post.

The next problem was the MT underscores to WP hyphens issue. It’s actually a good idea to use hyphens… Google doesn’t recognize underscores as whitespace (yet), so you’re destroying a source of relevant keywords if your URL is a big_string_like_this. On the other hand, big-string-like-this then gets your page in the index with those four keywords, raising your page rank. I quickly found that, in most circumstances, WordPress automatically converts underscores to hyphens. Only when the URL has something after the title, like in “/2008/04/big_string_like_this/feed/,” or if a category is involved, does WordPress fail to convert. Perhaps I should take the time to fix that in the code… until then, I’ll use these mod_rewrites:

# Change underscores hyphens
RewriteRule ^/category/([^_]*)_([^_]*)_([^_]*)_(.*)$ /category/$1-$2-$3-$4/ [R=301,L]
RewriteRule ^/category/([^_]*)_([^_]*)_(.*)$ /category/$1-$2-$3/ [R=301,L]
RewriteRule ^/category/([^_]*)_(.*)$ /category/$1-$2/ [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9])/([^_/]*)_([^_/]*)_([^_/]*)_(.*)/(.+)$ /$1/$2-$3-$4-$5/$6 [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9])/([^_/]*)_([^_/]*)_(.*)/(.+)$ /$1/$2-$3-$4/$5 [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9])/([^_/]*)_(.*)/(.+)$ /$1/$2-$3/$4 [R=301,L]

This will ignore the underscores (and let WordPress handle them) unless it’s a category or there are characters after that last slash. Finally, I had to move all my syndication feeds to the new structure:

# Change to wordpress feeds
RewriteRule ^/atom$ /wp-atom.php [R=301,L]
RewriteRule ^/atom\.xml$ /wp-atom.php [R=301,L]
RewriteRule ^/index\.atom$ /wp-atom.php [R=301,L]
RewriteRule ^/index\.rdf$ /wp-rdf.php [R=301,L]
RewriteRule ^/index\.xml$ /wp-rss2.php [R=301,L]
RewriteRule ^/rss\.xml$ /wp-rss.php [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9]/.*)\.atom$ /$1/feed/ [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9]/.*)\.atom/$ /$1/feed/ [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9]/.*)\.xml$ /$1/feed/ [R=301,L]
RewriteRule ^/([0-9][0-9][0-9][0-9]/[0-9][0-9]/.*)\.xml/$ /$1/feed/ [R=301,L]

Nothing complicated there.

Then I found one more problem. Movable Type makes sure that permalink slugs are globally unique, and posts with the same titles get tagged with “-1,” “-2,” etc. WordPress doesn’t care if they’re globally unique, as long as they’re not in the same month. So I had to watch my logs for 404s, then go back and rename the posts. At this point the Redirection plugin was invaluable. It automatically builds a 301 redirect from old name to new when you retitle a post… so I could change all those post names back to the Movable Type default without worrying about blocking new links that pointed to the WordPress format.

I was going to go into a discussion of the relative benefits of dynamic vs. static publishing, and what a wonderful plugin WP Super Cache is, but this post has run on way too long, so that will have to wait for another day. Until then, here’s an interesting discussion on the subject.

Popularity: 75% [?]