Archive for November, 2004

Audible Barely Usable

I’m a big fan of audio books from Audible.com. Some I put on my iPod to listen to when I run, others I burn on CD to listen to on long car trips. Their selection is good (not great) and they are the only outlet for much of the content they offer.

That said, Audible is easily the most annoying site I frequent for one simple reason: all links are javascript links. Mouseover the average Audible link and you’ll see something like this:

javascript:linkThis(’/store/myBasket.jsp’)

Why is this so annoying? I can’t take advantage of tabbed browsing. I can’t SHIFT-click and open a new tab, I can’t right-click and open a new tab at a link. I can’t have separate searches going on in separate tabs. Their linking strategy makes me an incredibly inefficient browser on their site. If I could get these books anywhere else, I’d do it in a heartbeat.

The silliest thing about this problem is that there is no good reason to require javascript links. Pick apart the linkThis javascript function and all you find are some conditional parameters and location.href calls. There’s nothing in there you couldn’t accomplish by embedding these parameters directly in standard anchor links. Arghh!!!

Comments (1)

My First Roast

A few weeks ago I read an article in my local paper that described an easy way to roast your own coffee beans. You only need a special kind of air popcorn popper that you can find on eBay or a thrift store, green coffee beans, and a timer. I had to try it. I got a Westend Poppery II air popper on eBay.

I went to a local coffee roaster today (with Luke - he almost broke one of their plants) and picked out five different types of beans, one pound each. Prices range from $3 to $5 a pound, and these are high-quality beans. For my first roast, I decided on the Ethiopian decaf.

Thebag

My instructions (from someone using this popper) state that I should use 3/4 of a cup of beans and roast for 6 minutes. Its recommended that you roast outside because the smoke gets stale and stinks. Here goes nothing.

Setup

I plugged in the popper. At between 3 and 4 minutes I’m supposed to hear the "first crack"… the first cracking bean. I’m afraid I’ll miss it - the popper itself is pretty loud. Here are the beans as they start to roast.

Minute0b

2 minutes in… starting to smell a little different, and we see a small change in color. The popper spins and circulates the beans. They bounce around a little and only a couple escaped.

Minute2

3 minutes in… I did hear a crack at about 3 1/2 minutes, sounded a little like a popcorn popping. Now I’m supposed to hear a "second crack" at about 5 minutes. Hmmm… is this a different crack than the "first crack"? How do I tell the difference between the first and second?

Minute3

Back to the instructions. For a dark roast, its recommended that you stop at 6 minutes. Here are the beans immediately after turning off the popper at 6 minutes. I never really heard a "second crack", though I did hear a bunch of "first cracks". Gotta get better instructions.

Minute6

As instructed, I dumped the beans into a collander and stirred them around to help cool them off. Nice color! I expected them to be a little darker and shinier, and perhaps they would have been if I’d let the roast go longer. Maybe I’ll try 7 minutes tomorrow.

Cooling

How did the coffee turn out? Well… the beans are supposed to rest at least 2 hours after roasting, and they are supposed better after 24 hours. I’ll grind them tomorrow morning and see how they turned out.

Comments (3)

Dadhood Tip #1

I really, really, really want to be a good dad. We’ve got three kids - Lauren is 6 and in first grade, Luke is 4 and in preschool, and Claire is 9 months old and follows us everywhere. I’ve got a long way to go to become the dad I want to be, but I thought I would share a few things I’ve learned along the way. So here’s dadhood tip #1:

Whenever possible, take your kids with you on errands

Kids love quality time with parents, even if its just running errands. Today I had to run to the bank, the grocery store (a card for Nancy’s birthday) and to a local coffee roaster. I probably could have gotten my errands done faster without the little rascal, but I took Luke with me so I could have "a helper". Errand time can be quality time if you ask a lot of questions, answer even more questions, think up lots of ways for your helper to help, and talk through everything! What are we doing, why are we doing it this way instead of that way, etc. Its a blast!

Comments (1)

Trading Diet Coke for a HopeChild

I like Diet Coke… I really like Diet Coke. I’ve been a two-can-a-day-er for years (and before that, regular Coke) and this year consumption is definitely up as I compensate for baby-induced sleep deprivation with caffeine.

I’ve been reflecting on my habits and attempting to be more intentional about the things I do and the way I live life. Do I really want to be someone who drinks this much carbonated nutrasweet water? Not really - so I decided to give it up.

I don’t want to backslide on this, so I’ve given myself some extra incentive to stay the course. With the money I’m saving, I just sponsored a child through WorldVision’s HopeChild program. Milly is a 6-year old (who shares my birthday) living in Uganda who lost her father to HIV/AIDS. For $30 a month, I can help to make a difference in her life. I’m sure there’s a psychological term for trading a bad habit for a good one. Whatever it is, I’m doing it.

Comments (1)

If I worked at Google

Google has a cool policy that let’s engineers spend 20% of their time on interesting research projects. If I worked there, I’d probably work on a web-based, rich-client RSS aggregator. Think GMail meets Bloglines.

Comments off

No IE tabs before Longhorn

Here’s a great interview with Gary Schare from Microsoft. I’ve talked to Gary several times and appreciate that Microsoft is turning attention to third-party developers (like me) who built tabbed browsers long before FireFox (NetCaptor in 1998).

Here’s my favorite quote:

We’ve looked at whether you can add tabs through a browser helper object or some other way of extending IE, and it turns out you can’t.

Bingo. If I it was possible to add tabs to IE via a BHO or other addon, I never would have written NetCaptor.

Comments (1)

Start at zero

You know you’re a geek when you teach your kids to count starting with zero instead of one.

Comments (2)

Overture, FeedBurner Ads

Found this via Scoble’s link blog today. Looks like Overture (via FeedBurner) is testing RSS ads. The ads are images, as opposed to text ads, and appear to be essentially static. I downloaded the MobileTracker feed on several different computers (different IP addresses) and using several different clients and always saw the same ads. The images don’t appear to have long enough URLs to be doing much hit or click-tracking, and no cookies either. Here’s an example:

http://feeds.feedburner.com/~a/Mobiletracker?i=bX4NIH

Comments off

MTBF of a Starbucks Cup

I like coffee, alot. If Peet’s was closer, it would be my favorite. But there are three Starbucks that are closer than our Peets, so SB it is. Its not just the coffee - its the memories, the experiences, the associations, even the cup. Any coffee tastes better to me when its served in a paper Starbucks cup. We make coffee at home most days, so to maximize the positive coffee effects produced by my behavioral conditioning, I save and re-use my Starbucks cups for the coffee we brew. Can you guess how many uses on SB cup is good for before it leaks?

3. You can get 3 good uses out of a venti Starbucks cup (including the original serving). After that, the cups tend to start to leak from the side seam near the bottom of the cup. I don’t think I’ve ever had a successful fourth use. The paper holds up fine, but the coffee seems to seep more and more into the seam with each successive use. I could get longer use if Starbucks used better glue.

PS - Google Labs could probably add a question to their employment screenings asking prospects to map my location based on the fact that there are 3 Starbucks closer than the closest Pete’s. Nah - too easy.

Comments off

AdSense for Feeds

This post has been marinating in my head for a while, and Jeremy’s recent writings pushed me over the edge to get them on paper. I traded emails with one of the guys at Google last week on this, but didn’t get very far.

Google AdSense

Google’s AdSense has allowed lots of bloggers to monetize their content (at least on their web sites) by showing context-sensitive text ads on their sites. Google is the obvious player to produce the system I’m describing. But the current system doesn’t work for blog feeds. So, how would the perfect in-feed ad system would work? Here’s my take…

Its important to note that Google and other ad services like to track ad views and ad clicks. This helps advertisers track their return on investment and it helps Google optimize its click-through-rates. So, our ideal solution needs to allow Google to track these ads too. This means no static, same-link-in-every-post style ads like we’re seeing in Engadget right now.

Engadget

If I write about my iPod mini one day, then I should see iPod ads.

The Web Service

The first thing we need is a web service for grabbing ads. Let’s assume that Google is going to add this feature to its AdSense offering. REST would be the easiest way to grab ads. You’d need to pass the IP address of the client who will be viewing the ad (remember that Google likes to track ad views and clicks), the publisher ID of the blog (your AdSense ID), an aggregator ID (more on that later), and the URL of the permalink for the specific blog post.

Something like this:

http://example.com/ads?clientip=127.0.0.1&publisherid=12356&aggregatorid=922983&url=http%3A%2F%2Fwww.engadget.com%2Fentry%2F6707251948314572

This would allow Google to match the ad to the content of the post and also the viewer. You don’t want to send the same ad to the same ad over and over again, hence the IP address. Maybe Google would allow the IP address requirement to slide, but I doubt it. Google would have to speed up its indexing (they don’t seem to get to blog posts as fast as they could, but if ContextWeb (one-time source of NetCaptor’s in-browser ads) can do realtime indexing, Google can too.

Blog authors would mark posts so that aggregators would know they wanted to display a text ad at the bottom of the post. Perhaps they could use a specially formatted HTML comment like a server-side-include or use an additional XML attribute. If you develop a standard interface, you could even swap different ad services.

<!–#include pubid="12345" adserver="http://service.example.com/adsforfeeds" –>

Then, before displaying a post to a viewer, the aggregator would hit our web service, pass URL of the post permalink and other info, and merge the ads into the end of the post. Some authors would only flag every 5th post, some only posts over X characters long, etc. Its that authors choice. Show too may ads, and you’ll lose readers.

Cooperating Aggregators

There are a couple of ways to merge ads from this service into feed posts: a dynamic feed processor could do the merge for each request, but it gets complicated when dealing with different types of aggregators. This would work great for direct aggregators like FeedDemon which have a one-to-one correlation between feed requests and client views. But indirect aggregators like My Yahoo!, BlogLines, Feedster complicate the picture. Remember that Google wants to be able to track ad views and ad clicks. If My Yahoo! downloads the Slashdot feed, and all its subscribers see the same ad, Google would track one ad view and a zillion ad clicks. That doesn’t work. Things would be much simpler if the aggregators merged the ads for us.

So how do we convince aggregators to cooperate and merge these ads as directed by blog authors? I could ramble on about a social contract between aggregators and bloggers, but a financial incentive would probably be more persuasive. That’s why Google would create special aggregator accounts. The aggregator will pass their ID to the web service along with the ID of the blogger so they can split revenue. A business model for aggregators… cool!

Sample Code

I put together a little sample that shows how AdSense displays ads based on page content. It would be trivial to wrap an XML front-end this. GPL’ed PHP code included.

Any comments?

Comments (9)

« Previous entries