Other Recent Articles

“Don’t be bad.” vs. “Don’t be evil.”

From today’s New York Times article, Time Warner to Sell 5% AOL Stake to Google for $1 Billion:

If a user searches on Google for a topic for which AOL has content – like information about Madonna – there will be a special section on the bottom right corner of the search results page with links to AOL.com.

Google will also provide technical assistance so AOL can create Web pages that will appear more prominently in the search results list.

Time Warner asked Microsoft to give AOL similar preferred placement in advertising and in its Web index and… Microsoft refused, calling the request unethical.

Nietzsche distinguishes between good/bad and good/evil. The first is a question of merit; the second a question of morals.

I guess Google believes exchanging preferred placement and teaching one selected partner how to manipulate your objective ranking system in exchange for money is “bad,” but not “evil.” Therefore, it doesn’t break their promise of “don’t be evil.”

In comparison, Microsoft, by using the term “unethical,” clearly sees this as both “bad” and “evil.” It’s interesting how the DOJ can help you find God.

ApacheCon Review and Slides

I got back from jApacheCon last night. I like the show, but the ASF has certainly shifted over the years from programs written in C (httpd, mod_perl, PHP) to programs written in Java (Ant, Axis, Beehive, Cocoon, Geronimo, Jakarta, Struts, etc.).

This has caused the show to have an increasingly large amount of Java content — Day 1 and Day 2 were almost 100% pure Java. Since I can’t even figure out what an application server does (serve up applications?), most of the sessions are wasted on me.

The nice Java programmers try to explain how their sites take advantage of all these nifty Java projects, and I’m always forced to apologize that I really have no idea what they’re talking about. Seriously, what are Tomcat and Jackrabbit? I don’t know.

This has caused the PHP crowd to dub ApacheCon with new names. Chris prefers JApacheCon; Andrei likes JAvacheCon; I want either ApacheCon4J or jApacheCon.

However, Day 3 was a nice mix of PHP, Ruby, and Michael’s httpd talks. Fun stuff.

I think my talk on “Consuming Web Services Using pHP 5” went over well. I was a little rushed at the end because there was a 5 minute delay getting started due to technical difficulties reassembling the sliding wall panels used to split up the ballroom into the separate session halls. It was also the first time I gave the talk, so I didn’t quite have the timing and pacing down pat. (I was also way hopped up on the six glasses of iced tea I drank during lunch.)

I usually find that I need one slide for every two minutes of session time. However, I had 43 slides for a 60 minute talk, which was about 5 too many today. Fortunately, I intentionally put some slides I could skip quickly by at the end of the deck, so there was a few minutes for Q&A. Still, I wish I had left more time for audience participation.

For those of you who are interested, here is a PDF of my slides.

There’s a short over view of REST and SOAP; three increasingly complex REST demos: reading a del.icio.us RSS feed, searching flickr and creating an image gallery, and adding tags to a flicker photo; and an eBay SOAP example leading up to my eBay Motors Google Maps mashup. The final few slides are my overall takeaways from playing around with Web services for the past 18 months.

Afterward, I answered questions for a bit and then managed to stand by for an earlier flight — getting me back to San Jose at 6:30 instead of 8:30 — and letting me drop in on our holiday party at Zibibbo.

John Battelle at eBay

While I’m down in San Diego for ApacheCon, king of search author John Battelle is visiting eBay. I missed the talk, but Alan Lewis has a write up of the Q & A.

A Modest Proposal on How To Commoditize Away Google’s Advertising Revenues.

New eBay blogger Josh Scott muses about Bill Gates’s comments that Google isn’t really free because they serve up ads. To quote Josh paraphrasing Bill:

[S]earch engines like Google get their revenues from advertising because people use these search engines, but they don’t share these advertising revenues with the end users who help them get the revenue.

Later on, Josh hits on my number one long-time issue with making money from search:

[Google should] be concerned about the lack of network effects, but also by the related fact that the switching costs both as a searcher and as an advertiser are so low.

I use Google now because it’s the best. But I used to use AltaVista. And before AV, I used Lycos. If (when?) someone else comes along, I’m going to switch.

Google has no inherent structural advantage over other companies in regards to search. They are no lock-in costs or network effects. They’re just better at it. But companies such as Microsoft and Yahoo! and eBay can also hire engineers who can write search engines. They can even hire away Google engineers.

If eBay sellers will go through the hassle of selling their items through multiple channels, you better believe advertisers will go where they get the best bang for their buck, too. As long as Google continues to aggregate demand and provide the “best” clicks, they’ll continue to capture massive value.

However, when other companies catch up, either by providing a better service or by paying me to use their search engine, Google will need to cut into their AdSense margins to remain competitive. This hurts Google and all search engines on the supply side.

In related news, Tim Bray talks today about “The Future Search Market” He describes an application that has a Web search window and:

When someone types in “Britney Spears” or “Mayan Eschatology”, I send the query off three different search engines who pay me a small retainer for the privilege of getting them…. You could imagine an alternative setup in which you send the search terms to the engines and all they come back with is their per-click bid price, and then you only send the actual search to the winner.

It’s certainly true that companies such as Google and Yahoo! pay to be the search provider for popular applications, such as Firefox and Safari. They also pay to be the search provider for popular Web applications, such as AOL and the Washington Post. However, this doesn’t need to apply to big companies.

Another way Google currently pays for traffic is through their AdWords program. Tim’s idea applies just as well (if not better) to any page on the Web that runs contextual ads — which are essentially embedded search results intelligently served-up based on a fancy back-end algorithm. This algorithm guesses what a visitor would have typed into the search box (if only one had existed).

Right now, Google (presumably) has a nice margin between what they charge advertisers (via AdSense) and payout (via AdWords). This makes them a tidy profit.

But Yahoo! and Microsoft have similar products. As a content provider, you’d switch from AdWords if you made more money from the Yahoo! Publisher Network. But right now, your choice of contextual advertisements is all or nothing: you’re either with Yahoo! or Google or Microsoft. You have a few choices, but you’re forced to pick one and stick with them until you switch.

This is quite coarse and inefficient. You’re leaving money on the table because it’s not really a question of whether you make more money overall from one company or another. What you should really care about is whether you can make more money for them (and thus from them) for this specific visitor at this specific instant in time.

Tim’s idea becomes:

[A]n alternative setup in which you send the search terms page URL to the engines and all they come back with is their per-click bid price, and then you only send the actual search to serve contextal ads of the winner.

If Microsoft and Yahoo! want to make a big dent in Google’s AdWords business, they should provide a pricing Web service for contextual advertisers. By providing transparency in the market, they’d commoditize away Google’s demand side, too.

If you were a company that made money from multiple channels and you were facing a large scary competitor that made 99% of its money from advertising, wouldn’t you do your best to erode as much profit margin from advertising as you could?

ApacheCon Slides Are Finished

ApacheCon has begun and I am happy to say I have finished my ApacheCon slides. My talk on Consuming Web Services Using PHP 5 isn’t until Wednesday afternoon. Therefore, I technically have a few days left before I need to get up on stage and present, so I’m counting this as a victory for getting my act together in a timely manner.

For this talk, I decided to demonstrate Web services using a number of real Web services, so you can get a flavor for how people are actually implementing Web 2.0. Specifically:

  • del.icio.us (bought by Yahoo! earlier this week)
  • flickr (bought by Yahoo! earlier this year)
  • eBay (almost bought by Yahoo!, almost bought Yahoo!)

And, of course, there’s the obligatory Google Maps reference because, well, it’s a rule or something. I think. I can’t remember.

This was my first presentation done in Keynote. It’s certainly easier to make non-ugly slides in Keynote than in PowerPoint, which almost seems to lead you down the path of ugly slides. You think Microsoft could invest in a few good new templates instead of still using the ones their intern programmers designed in 1992.

If you’re going to be at ApacheCon, let me know. I am arriving Monday afternon and leaving Wednesday night, and staying at the conference hotel. I will have a rental car, so if you know a good place to eat or drink or visit that’s off the beaten path, we can help each other.

Re: Web 4.0.1

My cow-orker Jason Steinhorn has lept ahead to Web 4.0.1. Here are my initial thoughts on his ideas.

I think a key take-away is that big web companies with large data stores shouldn’t focus on creating one giant web site application.

Instead, they should make a number of applications that layer on top of their platform powered using the unique information and processing capabilities they have. Each application takes from and contributes back to a different, but complimentary, set of data.

[Insert cool picture here with overlapping circles]

I think Yahoo! does the best job of this on the Web right now. Some of their new services blend together more pieces than just their shared authentication system. (I really like the Travel Trip Planner site.)

This allows you to build up a larger and more robust data store that hits many segments of the population. If you just build the “it’s right for the middle 80%” application, you can get large, but you miss the long-tail of data. (Drink.)

The best way for this to happen is for that company to think of itself as another developer on the platform. Maybe not a co-equal developer, but a developer with benefits, so to speak. This helps ensure your platform is designed in a flexible and scalable manner — because you’ll be eating your own dog food — and you’ll be annoyed when your platform is a limiting factor.

Yet, at the same time, you’ll also be enabling others to build first class applications on the system — the key part of a vibrant platform — all of which contribute back to the data store. And, as Tim O’Reilly says, “Data is the Intel Inside of Web 2.0”.

Joel Spolsky’s Management Training Program

Joel Spolsky just released the first cut of books for his Software Management Training Program. There’s a good mix of product design books along with a lot of company specifc (Dell, Microsoft, Google, PayPal, Amazon, etc.) text. He’s also thrown in a good mix of general MBA texts (Getting to Yes, The Goal, etc.)

Here’s how I score out on the curriculum.

Books I have read (or at least own):

I would also add the following books to his list:

Of the remaining books, these interest me the most:

What would you add or remove?

CSS Tip: Assigning Multiple Classes to a Single Element

The 37signals team wrote up a nice trick on creating a default styling for an element using an element id and then customizing it using an element class.

Here’s one of their examples:

#Flash {
  text-align: left;
  border: 1px solid #ccc;
  font-size: 14px;
  margin: 0 7px 12px 0;
  padding: 5px 5px 5px 30px;

div#Flash.good {
  border-color: #9c9;
  color: #060;
  background: url(/images/alertgood_icon.gif) #E2F9E3 left no-repeat;

<div id="Flash" class="good">Oh yes, that's nice!</div>

This technique is nice when you have one specific element that needs decorating. Since element ids are unique within a document, you can apply the exact formatting you need to that one section. However, you need to define an explicit CSS block — div#Flash.good in this case — each time you wish to combine styles.

A similar approach is assigning multiple classes to the same element:

.Flash {
  text-align: left;
  border: 1px solid #ccc;
  font-size: 14px;
  margin: 0 7px 12px 0;
  padding: 5px 5px 5px 30px;

.good {
  border-color: #9c9;
  color: #060;
  background: url(/images/alertgood_icon.gif) #E2F9E3 left no-repeat;

<div class="Flash good">Oh yes, that's nice!</div>

Use this to compose more general styles. For example, if you want all error text to be red and bold, you could define a general error class. You can then use that style anywhere in the document with any other style without needing to update your CSS.

Nothing too earth shattering, but two good tools to have in your bag.