Cache Hits in Web Browsers

I’m looking for an easy way to tell if a web browser downloaded a web page element (image, CSS, JavaScript, etc.), or if it got a positive cache hit and pulled it from there. Does anyone know of plugin for Firefox, Internet Explorer, Safari or Opera that will do this?

Here’s an example of what I’d like to do. Flush the browser cache, load a page. There should be zero cache hits on the first page load because I just flushed it all. Then load the page again, after which I’d get a list of object in the page that were pulled from cache and those that weren’t.

Any change Firebug 1.0 will have this feature?

How To Pronounce Melbourne

This weekend (18-19 Nov 2006) is the G-20 summit in Melbourne, Australia. Normally this would not be a huge blip on my radar, but listening to people report on it (NPR in this case) is starting to grind on me a bit. Not because they are covering it in excruciating detail (which they aren’t), but because most Americans don’t know how to properly pronounce Melbourne.

As an American, I can understand. When you look at the world Melbourne it looks like it should come out Mel-born. As someone who lived in Melbourne, Australia for two years hearing that is just wrong. The Australian way to pronounce Melbourne is more like Mel-bun.

And while I’m at it let me pick on how to pronounce Aussie. Parsing that as American it seems like it should come out aw-see. But the Australian version is more like Ozzie. Think of it as being spelled Auzzie and that should get you pretty close. Yahoo! Answers covers this as well.

I got back from Australia in late 1994, since then I have dropped any hint of an accent and reverted back to using the American versions of words (and their spelling) except for one. I’ve had a hard time dropping use of the word serviette in place of napkin.

Check out the Australian-American Dictionary for a list of Australian words and their American counterparts.

Jason Calacanis Leaves AOL

Earlier today TechCrunch rumored that Jason Calacanis was leaving AOL. Given how passionate Jason seemed to be about the new Netscape.com I figured it wasn’t too likely. But sure enough, the New York Times confirmed it and then Jason announced he was indeed leaving AOL.

I haven’t been watching Netscape.com much after its initial release except for what Jason posted about on his blog. Now that Jason won’t be there any more it will be interesting to see if AOL has (or will hire) someone else who can keep it going.

Has anyone been keeping a score card for the rumors that TechCrunch breaks early?

Yahoo, Google and Microsoft agree on Sitemaps Spec

Yahoo, Google and Microsoft (Windows Live / MSN Search) have all agreed to the use sitemaps protocol. Sitemaps.org has information on how sitemaps work. This is being announced all over the place:

Just in case you aren’t familiar with sitemaps, they are XML files that describe the different URLs available on your site. The details are available at http://www.sitemaps.org/protocol.html.

An important aspect of this is that you can ping search engines to let them know that your sitemap has been updated. From the FAQ on sitemaps.org:

Q: What do I do after I create my Sitemap?

Once you have created the Sitemap file and placed it on your webserver, you submit it to search engines that support the Sitemaps protocol. The search engines can then retrieve your Sitemap and make the URLs available to their crawlers. Refer to each search engine’s documentation for more information about submitting to them. You can also submit your Sitemap using an HTTP request (replace <searchengine_URL> with the URL provided by the search engine):
Issue your request to the following URL:

<searchengine_URL>/ping?sitemap=sitemap_url

For example, if your Sitemap is located at http://www.example.com/sitemap.gz, your URL will become:

<searchengine_URL>/ping?sitemap=http://www.example.com/sitemap.gz

URL encode everything after the /ping?sitemap=:

<searchengine_URL>/ping?sitemap=http%3A%2F%2Fwww.example.com%2Fsitemap.gz

You can issue the HTTP request using wget, curl, or another mechanism of your choosing. A successful request will return an HTTP 200 response code; if you receive a different response, you should resubmit your request. The HTTP 200 response code only indicates that the search engine has received your Sitemap, not that the Sitemap itself or the URLs contained in it were valid. An easy way to do this is to set up an automated job to generate and submit Sitemaps on a regular basis.

Note: If you are providing a Sitemap index file, you only need to issue one HTTP request that includes the location of the Sitemap index file; you do not need to issue individual requests for each Sitemap listed in the index.

So I tried to ping for updates to this blog at:

Unfortunately none of those URLs seem to be working. Both Yahoo! and Google return error pages. The MSN Search URL returned an error indicating it didn’t like the format of my sitemap, with Google has been consuming without a problem for months.

It has been more than two years since I first wrote about the idea of pinging search engines for site updates. The implementation that I had in mind was different, but the concept is the same. Nice to see this finally get some traction at the big three search engines.

Job Boards Are The New Google AdSense

This week Jeremy added a job listing board to his site. Adding job listings to sites has become a bona-fide trend this year. It would seem that job boards are becoming the new Google AdSense as a way for people to generate some revenue from the popularity of their site.

I don’t have any problems with concept in general, people should be able to benefit from their sites. What gets me is when sites start to feel like they are turning into job boards. I like the way that Jeremy has the job listings as a side box on his site. If half of his posts turn into ads for jobs, then it will get old fast.

So how long until we start seeing job listing networks that operate in same way that ad networks work? Perhaps Yahoo! should jump on this trend and start offering to display ads on other sites, basically a YPN for job listings. They already have plenty of jobs to list from HotJobs.

William Shatner And Leonard Nimoy Sing The Hits

One of our favorite ways to torture each other in the office is to fire up the William Shatner version of Rocketman on YouTube. The Wikipedia entry on Rocket Man covers some of the shows that have made fun of Shatner’s version of the song.

Then I recalled that Leonard Nimoy had done a few really bad songs as well. I was specifically thinking of his Ballad of Bilbo Baggins. So on a whim I started looking through iTunes. Turns out someone has put together an album with some of Shatner and Nimoys songs, Spaced Out – The Best of Leonard Nimoy and William Shatner. Be careful, you really need to be in a certain kind of mood to subject yourself to these songs.

What is it about Star Trek and singing? Brent Spiner also recorded an album, Ol’ Yellow Eyes Is Back (which I wasn’t able to find on iTunes).

I’m ….. A ….. Ro …. cket …. …. …. MAN!

Universal Gets A Cut Of Zune

The New York Times is reporting that Microsoft has made a deal with Universal, which will more than $1 (of the $250 device) to Universal Music. Of that $1 roughly half would go to artists. Universal will also get a portion of the fee charged for purchasing music online via Microsoft. And here is the choice quote:

Universal said it was only fair to receive payment on devices that may be repositories for stolen music.

Remember when music companies want a piece of every blank CD that was sold, using the argument that it could be used to record music illegally? Let me spell it out very clearly, just because a device can be used to break the law doesn’t mean that it should automatically be assumed to do so. We can go on to create many absurd examples using this argument:

  • Car manufactures should pay a portion of the sale price of new cars to local police on the basis that a car can be used as an escape vehicle after committing a crime.
  • Companies that produce tape decks that can be used to record on to tapes should pay a portion of their sale price to music companies.
  • Dell should pay a portion of their computer sales to music companies because they could be used to store music illegally.
  • Hard drive manufactures, Internet Service Providers, software companies that write web servers and anyone that had anything to do with spec for TCP/IP will have to pay money to music companies for being involved in technology that could be used to download or store music illegally.

Others have already pointed out why this is a bad precedent for Universal to pursue. If I’ve already paid upfront in the cost of the device money required to recover from illegally downloaded music, then maybe it isn’t illegal anymore because I’ve already paid for it. I’d love to see that one go to court.

“It’s a major change for the industry,” said David Geffen, the entertainment mogul who more than a decade ago sold the record label that bears his name to Universal. “Each of these devices is used to store unpaid-for material. This way, on top of the material people do pay for, the record companies are getting paid on the devices storing the copied music.”

I don’t think anyone likes to be assumed guilty. Are digital music players (DMPs) used to store illegal music? Sure, but that is a far cry from indicating that everyone who has a DMP is storing illegal music on it.

Steve Gordon, an entertainment lawyer, said that Universal was saying, in effect: “Look, we know new technologies are here to stay. We know CDs are like typewriters, and are being replaced. ”

The part that Mr. Gordon left is that they are still clinging to their typewriters with both hands, kicking and screaming.

None of these arguments get to the core of things though:

In addition, the deal may provide leverage for Universal to insist on a cut of future iPod sales when its existing contract with Apple expires next year.

See, I think both Microsoft and Universal are thrilled with this deal. Yes, Microsoft is positively giddy over their new deal with Universal (and others). Why? Because they are trying to change the nature of the game, and they can afford to do so because they’ve got tons of money. This agreement is going to create angst between Apple and Universal, which will either cause Apple to cave in (and make less money) or Universal to be ticked and pull their license all together. At least these are the two results that Microsoft is hoping for. Another option is that nothing will change between Apple and Universal, as result that is more likely if Zune is flop.

Different parameters, but this is not unlike what Microsoft did with Internet Explorer to crush Netscape. By leveraging their existing wealth they are able to make things harder for the competition.

And of course Universal is thrilled because they believe that this is the dawning of a new day, where they will be able to milk money from other companies products. Even if those products never hold a single song from Universal.

UPDATE : Om brings up a good point, the $1 per device is roughly just one more $0.99 song. If charging the equivalent of one more song takes care of the pirating loss then they really should focus on developing more compelling content.

The Times is also running a review of Zune: Trying Out the Zune: IPod It’s Not. Not exactly a glowing review.

TechCrunch has a different take on this.

Verizon Wireless Voicemail Supports Fax

Learned something new this week, the voicemail on my Verizon Wireless mobile phone account supports storing faxes. To access the fax you call into the voicemail service and provide a number to send the fax to. After digging around the Verizon site the only reference to this that I could find was under Enhanced Voice Mail. Looks like the basic voicemail service doesn’t have this feature.

This is nice if you need to get a fax while you are on the go, but I’d really like to see is GrandCentral supporting fax reception. Then I could view faxes (PDF?) just by logging into my account, and printing it out only if I really need a hard copy.

Multiple Output Formats For Web APIs

Yahoo! Developer Network has been pushing an interesting trend, providing REST API output in various formats. In addition to the more traditional XML output, you can also get serialized PHP and JSON (JavaScript Object Notation) output for many of their services. This includes other Yahoo! properties like the Flickr API (serialized PHP and JSON) and Del.icio.us API (JSON).

It isn’t hard to imagine why Yahoo! and friends would be interested in these format. Providing serialized PHP provides for easy consumption in PHP via unserialize. No matter how you feel about PHP as a language, it is insanely popular, so it makes sense to make it easy to use Yahoo! output in that environment. JSON appeals to both the JavaScript specific crowd and the more general XML crowd at the same time. With the resurgence of JavaScript in the last year or two JSON has specific appeal in the same way that serialized PHP does. But the simplicity and cross platform nature of JSON makes it a potential XML replacement.

Curious about how much work was involved in supporting these three formats (XML, JSON and serialized PHP), I put together a simple PHP class that can convert a PHP array to and from these formats. By using existing off the shelf PHP modules, Services_JSON from PEAR (or the json pecl extension if you have it installed) and PHP XML library by Keith Devens (with some minor fixes to quite warnings with PHP5) it turned out to be quite easy. You can grab a copy of the OutputFormat class, an example script on how to use it, Services_JSON and PHP XML library at http://josephscott.org/code/php/outputformat/outputformat.tgz.

Before you try it out there is one specific piece of information that you need to know about. The PHP array that is being converted must contain at least one layer. This requirement comes from supporting the XML format, which must have one root element to be valid. Here is an example of simple array that works, with a “person” layer (or root element):

$output_array = array(
  "person" => array(
    "name" => "Joseph Scott",
    "age" => 33,
    "url" => "http://joseph.randomnetworks.com/"
  )
);

Here is an example of an array that WILL NOT WORK (same example as above minus the “person” layer/root element):

$output_array = array(
  "name" => "Joseph Scott",
  "age" => 33,
  "url" => "http://joseph.randomnetworks.com/"
);

If you aren’t interested in supporting the XML format then both of the examples above will work just fine for JSON and serialized PHP.

Depending on the type of data that you have there is no reason to limit your self to these three formats. If your data fits into a feed model then the OutputFormat class could be extended to include RSS and ATOM. All the heavy lifting could be done using the FeedCreator class and Magpie or SimplePie to parse feeds back into PHP data structures.

I’m under no illusion that either of the non-XML formats with displace XML over night, but I do like having alternatives. And if you just want to get a quick idea what these three different formats look try out Yahoo!’s getTime service (using their YahooDemo appid):

So branch out a little bit. You don’t have to feel like XML is the only way to go.