Tuesday 20 July 2004

Dive Into Python

Mark Pilgrim's Dive Into Python is now available in book form . Reading it in print reminded me how good it was, and it has grown a few chapters since I first read it online.

If an aversion to reading online has kept you back, go buy it now. It is a very impressive piece of work - it manages to explain the Python language, and, more importantly the idioms and customs of Python programming, through a series of well-chosen and interesting examples. The chapter on test-driven development shows why this makes sense, how Python supports it, and how it leads to better code.

Mark writes as he does - look at his excellent Universal Feed Parser, with its thousands of test cases for a concrete example of the power of test-driven development.

Python is my favorite programming language. Mark does a great job of explaining why. Try it, you'll like it.

Friday 9 July 2004

Call Off the Search

Explaining Technorati and blogging to people has been tricky. Once I explain we keep track of what people are saying and linking to in weblogs, their first reaction is to say 'Oh you're a search engine' (silent subtext: Google will eat you for breakfast).
This is where it gets tricky, because search is a task, not a goal.
Jeff Bezos and John Battelle help explain this better:
[Bezos uses] "discovery" as an umbrella term which incorporates search. I think in the end when I use the word "search" I really mean "discovery" as Jeff uses it. What's discovery? Well, much more in the book, but in the end, it's search plus what happens when the network finds things for *you* - based on what it knows of you, your actions, and your inferred intent.

Last week I watched Steve Jobs explain Technorati's advantage over Google - he was talking about Safari's RSS search, but Technorati searches millions of blogs for you within minutes of them updating, not just the RSS feeds you have already subscribed to.

But again, searching for keywords is missing the point.

The great thing about weblogs is when you discover someone. Someone who makes sense to you, or someone who surprises you with a viewpoint you hadn't thought of. Once you have found them you can subscribe to their feeds and see how they can keep inspiring or surprising you.
You can even start a blog, link to them, and join the conversation,
The continuity of viewpoint within a blog is key - you can see more about them than just the one comment, and you can keep discovering and growing with them. Conversely, being aware that what you are writing is 'on your permanent record' means that you write more carefully for a blog than for an email.

Blogcritics sent me a CD to review - Call Off the Search by Katie Melua. Rosie loved it, but the title song sums up what I'm getting at here: "Now that I've found you I'll call off the search."

Blogging is about what you discover, not about what you search for.
How you can follow the conversations and make new discoveries is what I'm working on. [updated 2014 - original Steve Jobs link was broken 5 times over by Apple: it linked to homepage.mac.com (Which they killed) hosting a Quicktime reference movie (which they killed) to a streaming Quicktime movie (which they killed) of a Steve Jobs keynote (which is now offline) explaining Safari RSS search (Which they killed).

Tuesday 6 July 2004

Citation and deep linking

Dorothea points out some problems around piecemeal citation:
[...] there’s no automated way to add callouts to one individual paragraph without adding callouts to all of them.

A more subtle explication of the problem: I could, if I chose, add individual id attributes to paragraphs on CavLec I thought especially worthy of notice. But who’s to say that my idea of noteworthy paragraphs meshes with any other blogger’s? Nobody, that’s who. (Not least because it’s an open question whether any paragraphs on CavLec are noteworthy.) The only way to ensure that anyone who wants to link to noteworthy paragraphs can do so is to assume that all paragraphs are potentially noteworthy.

Worse, even if I do add id attributes, there’s no way for a would-be linker to get at them for linking purposes except by inspecting my HTML code. Green hash marks may be crufty, but they address a genuine issue, one we might call “identifier invisibility.”

The way around this is to do what I just did - copy in the piece you are citing and link to the whole. It's a little cumbersome, but it has the benefit of resilience (the original might vanish or be re-edited). A way to take this technique further is to use QuickTopic Document Review, as I did for AKMA's speech for example. This both adds the paragraph citation links, enables inline comments, and archives a copy of the cited source elsewhere, protecting against it changing or vanishing and thus invalidating the citation link.

This is the same issue as discussed by Jon Udell last month for MP3's.
If you want to cite an MP3 in a stable way, you can do it by copying a fragment and saving it locally, and linking back to the original source file. We don't try to dynamically insert chunks of text from other people's servers into the middle of our prose; why do it for media?
What is missing here is the rich media equivalent of QuickTopic Document Review, which mirrors media and adds annotation. Building something to enable this would be a fine project for the Internet Archive.

Dashboard is nice, but how DO I make Safari sidebars?

Dave Hyatt said something interesting about the new dashboard widgets:
Just to prove a point that there are many ways to think about this new feature, here's another take on what Dashboard is. From a browser geek's perspective, the Dashboard is a collection of HTML sidebar panels liberated from the browser window and placed anywhere on your screen. The "Web pages as widgets" concept is really just a logical extension of the Web sidebar panel metaphor fused with Exposé.[...]
However the sidebar metaphor suffers from usability problems, such as the inability to scale up to many panels as well as being constrained by the browser's window width. It's also hard to view multiple panels at once. The panels are also tied to a particular application (the browser) despite frequently having no connection to the application itself.


Which makes sense for sidebars that are decoupled from the current page context. However, what is missing here (and as far as I could tell at WWDC last week, is not available at all in Safari) is a way to put a sidebar in the browser that is informed by the page context therein and can interact with it. As Hyatt says, this is possible in IE on Windows, and in Mozilla derivatives. Can we do this within Safari, using Dashboard or AppleScript, or anything other then hacking the nibs inside Safari itself?