Table Of Content8067FM.qxp 3/20/07 7:54 PM Page i
Web Development Solutions
Ajax, APIs, Libraries, and
Hosted Services Made Easy
Christian Heilmann
Mark Norman Francis
8067FM.qxp 3/20/07 7:54 PM Page ii
Web Development Solutions: Ajax, APIs,
Libraries, and Hosted Services Made Easy
Copyright © 2007 by Christian Heilmann and Mark Norman Francis
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-59059-806-1
ISBN-10 (pbk): 1-59059-806-7
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
All Google screen captures and logos are used with the express permission of Google Inc.
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner,with no intention of infringement of the trademark.
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail orders-ny@springer-sbm.com,or
visit www.springeronline.com.
For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA
94710. Phone 510-549-5930, fax 510-549-5939, e-mail info@apress.com,or visit www.apress.com.
The information in this book is distributed on an “as is” basis, without warranty. Although every precaution
has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to
any person or entity with respect to any loss or damage caused or alleged to be caused directly or
indirectly by the information contained in this work.
The source code for this book is freely available to readers at www.friendsofed.comin the Downloads section.
Credits
Lead Editors Assistant Production Director
Chris Mills, Matthew Moodie Kari Brooks-Copony
Technical Reviewer Production Editor
Ian Lloyd Kelly Winquist
Editorial Board Compositor
Steve Anglin, Ewan Buckingham, Gary Cornell, Lynn L'Heureux
Jason Gilmore, Jonathan Gennick,
Jonathan Hassell, James Huddleston, Artist
Chris Mills, Matthew Moodie, Jeff Pepper, April Milne
Paul Sarknas, Dominic Shakeshaft,
Jim Sumser,Matt Wade Proofreader
April Eddy
Project Manager
Sofia Marchant Indexer
John Collin
Copy Edit Manager
Nicole Flores Interior and Cover Designer
Kurt Krames
Copy Editor
Liz Welch Manufacturing Director
Tom Debolski
8067FM.qxp 3/20/07 7:54 PM Page iii
To my darling, long-suffering, and endlessly patient girlfriend,
Sarah-Jane. Thank you.
–Mark Norman Francis
To my brother for keeping the family matters in check so I have time to
spend on things like writing and for showing me that people can be
happy with what they are given. To my parents for never stopping me
from learning more and doing new things although neither
surroundings nor technology were on my side. You showed me how to
help someone become independent by showing love and challenging
him at the same time.
–Chris Heilmann
8067FM.qxp 3/20/07 7:54 PM Page v
CONTENTS AT A GLANCE
Chapter 1: Stop the Web . . . You’re Getting On! . . . . . . . . . . . . . . . . . 3
Chapter 2: The Dilemma of “Rolling Your Own” Solutions . . . . . . . . . 11
Chapter 3: What You Need to Get Started . . . . . . . . . . . . . . . . . . . . . 49
Chapter 4: Spoiled for Choice—What the Web Offers You. . . . . . . . . 75
Chapter 5: Retrieving and Displaying Content
with REST and Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Chapter 6: Adding Media Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Chapter 7: Promoting Your Content. . . . . . . . . . . . . . . . . . . . . . . . . 153
Chapter 8: Layout and Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Chapter 9: Adding Special Effects. . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Chapter 10: What to Do and Where to Find Help
When Things Go Wrong . . . . . . . . . . . . . . . . . . . . . . . . 225
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
8067FM.qxp 3/20/07 7:54 PM Page vii
CONTENTS
Chapter 1: Stop the Web . . . You’re Getting On! . . . . . . . . . . . . . . . . . 3
Web presence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Why set up your own site?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
The root of all evil (making money from the Web) . . . . . . . . . . . . . . . . . . . . . . . 5
Steve Pavlina—personal productivity guru. . . . . . . . . . . . . . . . . . . . . . . . . . 6
Daring Fireball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Shameless self-promotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Your résumé/curriculum vitae and portfolio. . . . . . . . . . . . . . . . . . . . . . . . . 8
Archive your hobbies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
The scrapbook of your memories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Chapter 2: The Dilemma of “Rolling Your Own” Solutions . . . . . . . . . 11
You in the limelight on a shoestring budget . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Homepage services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Hosted blogging services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The “knowledgeable buddy solution”. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
WYSIWIG—What You See Is What You Get solutions . . . . . . . . . . . . . . . . . . . 17
Basics of web development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Acrash course in technologies and languages that drive the Web. . . . . . . . . . . . 19
Protocols and file naming gotchas . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Image optimization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
CSS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Classes and IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Server-side languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Who is on the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8067FM.qxp 3/20/07 7:54 PM Page viii
CONTENTS
Chapter 3: What You Need to Get Started . . . . . . . . . . . . . . . . . . . . . 49
The right mind-set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Things not to focus on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Things to focus on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Your local development environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Installing a local server on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Tweaking PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Installing a local server on the Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Tweaking PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Installing WordPress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Tweaking WordPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Chapter 4: Spoiled for Choice—What the Web Offers You. . . . . . . . . 75
RSS feeds/REST APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
RSS feeds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
REST APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
CSS templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
CSS page layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
WordPress themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
JavaScript libraries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
“Web 2.0” hosted services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
The social Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
What’s in it for me?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Chapter 5: Retrieving and Displaying Content with REST and Ajax . . . 95
What is REST? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
What is Ajax?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Abit of theory about Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
What Ajax is not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
How to use Ajax to help your visitors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Ajax solutions for your visitors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
The problems with Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
JavaScript dependency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Slow and unreliable connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Making the visitor aware of what is going on. . . . . . . . . . . . . . . . . . . . . . . 106
Security restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Changing surfing behavior patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Assistive technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Some simple Ajax examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Displaying Lyrics via Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Using a server-side proxy script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Retrieving del.icio.us links with JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
viii
8067FM.qxp 3/20/07 7:54 PM Page ix
CONTENTS
Chapter 6: Adding Media Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Images with Flickr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Inserting Flickr images into your posts. . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Show your most recent Flickr images . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Agallery powered by Flickr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Inserting videos with YouTube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Adding music and podcasts with Odeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Adding maps with Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Start by getting your Google developer key . . . . . . . . . . . . . . . . . . . . . . . 137
The lazy option: let others do the tricky work for you. . . . . . . . . . . . . . . . . . 137
The Online Map Maker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The GEOPress WordPress plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
The DIY option: using the Google API . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Displaying a map with a marker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Amore accessible alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Using XML for marker data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Chapter 7: Promoting Your Content. . . . . . . . . . . . . . . . . . . . . . . . . 153
Basic SEO for your site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Blog search engines and aggregators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Automatically telling blog search engines about updates . . . . . . . . . . . . . . . . 156
Tagging—the other way to get found . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Improving the page search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Adding a web search option with Yahoo! . . . . . . . . . . . . . . . . . . . . . . . . . 159
Cross-linking with the attention services . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Showing your attention. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Encouraging others to bookmark you. . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Alternatives to del.icio.us. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Promoting your events with Upcoming.org . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Chapter 8: Layout and Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Navigation is not a matter of technology . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
How do visitors get to your site? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
The bare necessities of a good site menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
What can you do to help visitors find content in your site?. . . . . . . . . . . . . . . . . 174
Fallback mechanism 1: the site map. . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Fallback mechanism 2: the FAQ page . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Site internal linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Offering chronological navigation . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Offering similar content pages via categories . . . . . . . . . . . . . . . . . . . . 176
Tags—the less rigid category option. . . . . . . . . . . . . . . . . . . . . . . . . . 177
Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Page-internal navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
ix
8067FM.qxp 3/20/07 7:54 PM Page x
CONTENTS
Different menu formats for different needs. . . . . . . . . . . . . . . . . . . . . . . . . . 184
Hierarchical and tree menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Drop-down, pull-down, or fly-out menus. . . . . . . . . . . . . . . . . . . . . . . . . 185
Tabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
The organic growth of a web site and how to cater for it . . . . . . . . . . . . . . . . . . 189
Link and menu accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Different layouts for different needs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
The need for flexibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
The “above or below the fold” myth . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
The “fixed font” myth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
The “screen resolution” myth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Chapter 9: Adding Special Effects. . . . . . . . . . . . . . . . . . . . . . . . . . . 199
The why of JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
What JavaScript can do for you. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
The why of JavaScript libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
The dangers of JavaScript libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Fighting the temptation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
The two tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Creating a hierarchical navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Animating page elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Understanding and using jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Hierarchical navigation in jQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Animation in jQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Understanding and using MooTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Hierarchical navigation in MooTools. . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Animation in MooTools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Understanding and using YUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Hierarchical navigation using YUI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Animation using YUI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Chapter 10: What to Do and Where to Find Help
When Things Go Wrong . . . . . . . . . . . . . . . . . . . . . . . . 225
Of egos and altruism. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Danger, incoming egos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Friendly advice, given for free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Things to do before asking for help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Search the Web for solutions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Validate your code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Validating HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Validating CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Of DOCTYPEs and rendering modes. . . . . . . . . . . . . . . . . . . . . . . . . . 232
Using the developer toolbar to check the rendering mode. . . . . . . . . . . . . 234
Validating JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Wrapping up validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
x
8067FM.qxp 3/20/07 7:54 PM Page xi
CONTENTS
Make your problem reproducible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Taking screenshots on Mac OS X Tiger . . . . . . . . . . . . . . . . . . . . . . . . 237
Taking screenshots on Windows XP . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Screen capturing with a Firefox extension . . . . . . . . . . . . . . . . . . . . . . 238
Reproduction wrap-up and example . . . . . . . . . . . . . . . . . . . . . . . . . 238
Different help channels and their best practices . . . . . . . . . . . . . . . . . . . . . . . 239
Mailing lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Things to keep in mind about mailing lists . . . . . . . . . . . . . . . . . . . . . . 240
Things not to do on mailing lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Things to keep in mind about forums. . . . . . . . . . . . . . . . . . . . . . . . . 243
Things not to do on forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Chat systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Things to keep in mind about chat systems . . . . . . . . . . . . . . . . . . . . . 245
Things not to do in chats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
xi
8067FM.qxp 3/20/07 7:54 PM Page xiii
ABOUT THE AUTHORS
Christian Heilmann is a German web developer stranded in London
after a journey around the world working for various web agencies
and dotcoms. With a background in social work with disabled peo-
ple and radio journalism, he sees the Web as a perfect media to
allow access for everyone and keeps a pragmatic view on how to
convey information. He currently works as a lead developer and
trainer for Yahoo!, writes for .net magazine, and blogs at http://
wait-till-i.com.
Mark Norman Francis is a Londoner, born and bred. He spent
many years doing various IT jobs for City University,including work-
ing on the support desk and systems administration. After tiring of
the relaxed environment and long holidays, he entered the real
world. In 2000 he joined Purple Interactive, a commercial web com-
pany with clients such as Barclays, IBM, and Honda. One site pro-
duced there was an unofficial F1 site, later acquired by Formula
One Management. After leaving the world of motorsport, he joined
Yahoo! in June 2004. He blogs at http://cackhanded.net/.