inessential by Brent Simmons

July 2003

Good deed for the day

I did a good deed today—I reported a memory leak in Web Kit to Apple. I went through the whole online form thing at bugreport.apple.com.

The thing about bugs is, developers have to know about bugs before they can fix them. Reporting bugs is your civic duty.

(If you’re curious, here’s the source for a simple app that demonstrates it. It’s quite intensely boring.)

More on NetNewsWire and Updated Items

It’s starting to look like there are two ways to deal with the issue. They may co-exist—in fact, I’m leaning toward doing both.

1. A pref that allows you to include updated items when going to the previous/next unread item.

In other words, if you hit the space bar, the next item might be an updated item or it might be an unread item.

It’s a simple solution—but if you turn it on it means you’d end up seeing all the little typo fixes updates.

2. An algorithm for determining significant updates. This should be more complex than just a change in length.

Manton Reece suggested among other things that counting the number of links in a description is a good idea—a change in links is probably a significant change, more than just a typo fix. In other words, descriptions aren’t just any old text, they’re text that often contains links, and should be analyzed that way. (They’re also generally made up of sentences and paragraphs, as opposed to C code or something like that.)

What about an HTML diff view?

Aaron Swartz suggested that an HTML diff view would be cool for updated items. And I agree—at least as an option for power users. But the HTML display of updated items is a different issue than whether or not you get to them via the space bar.

NetNewsWire and Updated Items

In NetNewsWire 1.0.3, we added an updated items feature. The idea is that NetNewsWire can often tell if an item is updated (edited) rather than new.

Updated items do not get marked as unread. There’s a reason for this: the majority of updates are inconsequential and you don’t want to be annoyed by them. They’re typo fixes, slight re-wordings, that kind of thing.

But sometimes an update is significant, and you don’t want to miss it. There’s no bullet-proof way for NetNewsWire to tell the difference.

I have a few ideas, one or more of which might be good, and I wonder what you think.

Some ideas

1. Try to detect significant updates. There’s no way this could be perfect, but it could be pretty good—NetNewsWire could compare the length of the old description versus the new description. If it differs by n characters (where n is something like 50, or is configurable), then it’s a significant update, and therefore the item is marked as unread.

2. Have a global pref: a “Mark updated items as unread” pref, so people could say they never want to miss any updated item. Also perhaps make it so that this pref can be over-ridden for individual subscriptions.

3. Add a bunch more UI for unread items. For instance, unread counts that now appear as one number would appear as two: the unread count and the updated items count. (As in 22, 7). Add commands for going to the next and previous updated items. Add a new pseudo-feed for just updated items. Etc.

(This option is horrible, because it means an entire parallel to all the unread items UI, but I mention it for completeness, and because I might be wrong about its horribleness.)

Analog thinking

I read with some happiness today that Marvin Minsky declared Artificial Intelligence research “brain-dead.”

You’re going to think I’m weird. Maybe this is surprising coming from a computer programmer.

But listen, the only thing that makes microprocessors tolerable is that they don’t really think.

On Thursday Robert Scoble wrote about how analog thinking is Microsoft’s biggest enemy. And the biggest enemy of Linux and so on.

As I read that, I was thinking about how much I love pen and paper. And record albums. And shoes. And grass.

The analog world is made up of atoms of poetry. The digital world is made up of bits.

Amazon.com Syndicated Content

Amazon.com is now generating RSS: “Selected categories, subcategories and search results in Amazon.com stores now have RSS feeds associated with them, delivering a headline-view of the top 10 bestsellers in that category or set of search results.” (Via Ben Hammersley.)

Very cool!

I sent them feedback on a couple issues: there’s a bunch of whitespace inside the top-level title and link fields, and their RSS auto-discovery link uses type="text/xml" rather than type="application/rss+xml".

Bug in some RSS feeds

I’m seeing a bug in some RSS feeds (both RSS 1.0 and RSS 2.0).

The bug is using the same item_uri or guid in multiple items in a feed. (I’m not going to point to any examples, because I don’t want to embarass anybody.)

In RSS 1.0, unless I read the spec wrong, the {item_uri} in <item rdf:about="{item_uri}"> should be unique for each item.

And in RSS 2.0, the guid should also be unique.

Something like this would be incorrect:

<item rdf:about="http://example.com/somePage.html">
   ...title, link, description stuff...
   </item>
<item rdf:about="http://example.com/somePage.html">
   ...some other title, link, and description...
   </item>

Or, in RSS 2.0, this would be incorrect:

<item>
   ...title, link, description stuff...
   <guid>http://example.com/somePage.html</guid>
   </item>
<item>
   ...some other title, link, and description...
   <guid>http://example.com/somePage.html</guid>
   </item>

Using non-unique identifiers is worse than using none at all. The reason to have identifiers is so that newsreaders can identify an item. If two items have the same identifier, a newsreader may think it’s really the same item.

It’s like in email: if you look at the headers you see a Message-Id which identifies each email. If it’s missing—or, worse, not unique—email apps could get confused. Update 3:24 p.m.: Message-Ids are not required, so a missing ID should not confuse an email app. Which is similar to RSS: identifiers are not required. It’s the case when they’re not unique that’s the problem.

P.S. If I’m wrong in my understanding of the RSS 1.0 spec, please don’t hesitate to let me know.

History

I’ve been reading this book on Western history: it’s a general, chronological textbook, starting with the earliest Tigris and Euphrates civilizations and continuing to the near-present.

I just got to the Renaissance last night. Wow! It’s like fireworks going off.

If I had to write a capsule history of Western civilization, it would go like this:

Prehistory. Then the explosion of philosophy and art in Greece and Rome. Then a long period of near-total forgetting. Then the Renaissance!

20% Linux is all we need

20% Linux is all we need, writes Robin ‘Roblimo’ Miller. Let’s “think rationally about what percentage of the world’s desktops we really need to switch to Linux. I figure 10% would be a minimum, and 20% would be more than enough.”

When articles about Linux desktops come up, I usually read them, because in the back of my mind is the thought that a Linux port of NetNewsWire would be fun to do. (I like Linux. I even like Linux desktops, now that the font situation is improving.)

Miller continues: “One factor that may slow the adoption of Linux by consumer and small office-oriented software vendors is the perception of Linux users as freebie-hustlers who refuse to pay for software.”

That puts it bluntly. It’s an accurate statement: there is that perception. I myself have that perception, which is why I haven’t ever come close to breaking ground on a Linux version of NetNewsWire.

Am I wrong? (I’m no stranger to being wrong.)

More questions answered

I’ve gotten a couple more good questions about my participation in the RSS advisory board. I’ll answer them here:

1. Will NetNewsWire support Echo?

If/when Echo is ready, NetNewsWire will support it.

In fact, my plan is to go a step further and create a plugin interface for NetNewsWire, so that developers can add support for other formats too, even non-XML formats.

Just because I’m on the RSS advisory board doesn’t mean I see this all as some kind of war. I’m no soldier. My focus remains making software that people like.

2. Why did I jump in the fray?

As stated above, I don’t think of this as a war. But that there has been conflict between some people about syndication standards is undeniable.

I consider the move and re-licensing of the RSS spec a move away from conflict. That’s a good thing.

There’s a difference between being an RSS advocate, which I am, and an RSS absolutist, which I am not.

RSS Spec Moves to Berkman, Advisory Board Formed

UserLand has transferred ownership of its RSS 2.0 spec to Berkman. The spec is now licensed under the Creative Commons Attribution/Share Alike license. An advisory board was formed to support and advocate RSS.

That’s where I come in: I’m on the advisory board. Its initial members are Dave Winer, Jon Udell, and me.

I think this is a very good move for RSS.

Dan Gillmor has a good overview in RSS Moves a Step Forward.

Two questions have come up so far regarding my participation in the advisory board. I’ll answer them:

1. Do I own stock in UserLand?

No.

2. Given that I used to work for UserLand, will I be independent, or will I vote as Dave votes?

I have and will continue to vote independently.

If you want some evidence of my independence, an obvious thing is that NetNewsWire and Radio UserLand are competing products. Both are RSS aggregators; both run on OS X. They work together, too—you can post to a Radio weblog from NetNewsWire—but NetNewsWire also works in the same way with Blogger, Blosxom, Movable Type, and other systems.

I could go on, but I hope that’s enough.

If you have other questions about my participation, please feel free to email me or add a comment to this site.

Cops and Bloggers

Scott Johnson, Feedster guy, asks What If I Winer Watched You? In other words, Feedster could track edits for every weblog in a way similar to Mark Pilgrim’s Winer Watcher.

I wrote on the comments for his post: “Do we really need to turn the blogosphere into a police state?”

I want people to read my weblog, but I don’t want my weblog to be an object of surveillance. Yes, the technology makes it possible, and probably pretty easy, but that doesn’t mean we need to use it this way.

Beware of the impulse toward becoming an accountability cop.

Queer Eye: loved it

Sheila and I watched Queer Eye for the Straight Guy last night—both episodes—and loved it.

I love make-over shows. Trading Spaces and What not to Wear are two faves. But if I see that Oprah or anybody else is doing a make-over show, I’ll watch. I have to.

Make-overs are magic transformations. With just mundane tools—scissors and mousse, or hammers and saws, depending on the type of make-over—the best magic happens. People turn into their better selves, their happier, more confident selves.

Call it shallow, and I’ll remind you that Oscar Wilde said it’s only shallow people who don’t judge by appearances. So it’s shallow, but it’s also powerful.

And the Fab 5, the group of gay men who transform the straight guy and his home and his manners, they get this. To see them at the end so happy for the man they transformed—and to see the man happy—well, it would bring a tear to me eye if I weren’t straight.

Response to Sharecropper metaphor

I like Tim Bray and Robb Beal—but I don’t like the sharecropper metaphor they use to describe developers who write apps for specific operating systems.

Me, I write Web-related desktop apps for OS X. Because:

1. I like the Web.

2. I like desktop apps.

3. I like OS X.

I’m not unobservant, though—I know the operating system vendor has a great deal of power. And that the relationship between OS vendor and developer is a symbiotic relationship.

However, to think of myself as a sharecropper would be to insult myself and what I do.

Sharecropper implies a level of poverty, captivity, and hopelessness that’s not remotely applicable. I make money from NetNewsWire sales. I’m smart, skilled, and nimble—if I want to or need to come up with a new app or switch to a different OS, I will. I’m not stuck with a single square patch of dirt.

I love doing what I’m doing: I love writing Web-related desktop apps for OS X. But, more than that, I love writing software that people like.

The metaphor I use is the metaphor of dinosaurs and the early mammals. The dinosaurs were slow and heavy. The mammals had to watch out where the dinosaurs stepped. The dinosaurs probably didn’t even notice most of the time when they stepped on a mammal.

But then the mammals ate dinosaur eggs. They were faster and smarter. And the mammals survived quite well.

Safari Tip

Now and again I notice that people don’t know this about Safari—you can get URLs displayed when mousing over a link. It’s just turned off by default. (Maybe that’s changed for 1.0.)

From the View menu, choose Status Bar. That will give you a status bar that displays URLs like in other web browsers.

It’s very weird I think to have this feature turned off by default. It’s such a standard part of web browser UI.

But it’s also a very Apple thing to do. They must have decided it’s a power-user feature, that most people don’t look at the URLs when hovering over links. They may be right.

Every gal...

Every gal in Constantinople lives in Istanbul—not Constantinople. So if you have a date in Constantinople she’ll be waiting in Istanbul.

Even old New York was once New Amsterdam

I’m reading a book about the history of Western civilization. It’s an old textbook left over from my college days that didn’t get much use.

(I love reading history, so yes, this is just something I’m doing for fun.)

Anyway, I’ve hit a snag. I’m reading about the early Byzantine Empire now. And I can’t focus because I keep hearing in my head at max volume the classic They Might Be Giants song:

Istanbul was Constantinople
Now it’s Istanbul not Constantinople
Been a long time gone Constantinople
Now a Turkish delight on a moonlit night

Help!

By the way: before it was Constantinople it was Byzantium. But that would have just complicated the song. Constantine originally called it New Rome, but that didn’t stick: they called it City of Constantine, Constantinople.

Blogger to the rescue

I wrote the other day how I was mad at Blogger because people were having trouble posting to Blogger from NetNewsWire.

Then today I was contacted by Steve Jenson (from Blogger) about the problem, and now it’s fixed.

I had wrongly assumed that it had to do with their sites and servers moving around. (Since that was in fact causing some temporary problems a little while ago.)

I was wrong. It turns out that it was a bug.

So I sent Steve the info to reproduce it, and now the bug is fixed.

Thanks!

What this means: if you’ve been having trouble posting to a Blogger weblog from NetNewsWire—if you’ve been getting an error message that says something about a Java NullPointerException—then it should work now.

If you still have trouble posting to Blogger, please send me email with what you tried and what error message you got.

Web Kit progress

I’ve been working on getting Web Kit into NetNewsWire. It’s going pretty well. Here’s a screen shot of it in use with the Combined View.

There are still some bugs. It’s not ready for testing yet, but it’s getting there. I’ve been very pleased with how easy Web Kit is. So far so good, anyway.

The screen shot looks much like non-Web-Kit screen shots of the Combined View—except for one major difference: right-aligned images actually appear on the right, as they should.

Finished with Echo (for now)

I’m spending too much time on Echo, and I’m disappointed with it. The momentum is definitely with people who think of weblog syndication and editing as a blank slate.

That’s okay, I guess, but it’s a bad use of my time. So I’m going to pull back for now. Once Echo is ready I’ll support it in NetNewsWire.

Echo and namespaces and stuff

I’ve been looking around more at the Echo wiki—and I’m happy to find things that could go either way and I don’t care.

Namespaces, for instance. I find namespaces cluttery, but I recognize that they can have value as an extension mechanism. So either way is fine by me.

Another thing is—should Echo be XML only? I would naturally say yes, and I expect most people would say yes. But even if something other than XML is permitted, no one who cares about interoperability would implement it, so it doesn’t matter.

The question on whether the Echo data model should be an InfoSet seems not to be hotly debated. Good, because I don’t even know what an InfoSet is.

I’m in the minority on the Escaped HTML Discussion. I think HTML and XHTML should be escaped. But I can hack my way around this issue. (I think that proponents of inline XHTML are wildly optimistic. If inline XHTML is used extensively, then there’s going to be a huge problem with non-well-formed feeds.)

Blogger: We are moving away from XML-RPC

The Blogger folks posted a Blogger API Update. The gist of it: they will continue to support the Blogger 1.0 API, and they will also support Echo in the future.

Okay, that makes sense. It’s not my personal preference, but it makes sense.

One thing kinda pissed me off: “We are moving away from XML-RPC,” they write.

The thing is, I’ve already been so pissed at Blogger lately. They’ve been moving servers and sites around, and their support for the Blogger API keeps breaking, so I have a bunch of people sending me bug reports about null Java exceptions and stuff—errors on the Blogger side when people try to post to their weblogs.

It’s been so bad that I even thought about dropping support for Blogger in NetNewsWire’s weblog editor. But I won’t do that because there are people who bought NetNewsWire to edit their Blogger weblogs, and these people are far more important than my being pissed off at Blogger.

The Blogger folks continue: “If you choose to take advantage of the capabilities of the new API, you will need to use SOAP instead of XML-RPC. This was a difficult decision (made collectively by the designers of Echo), because there is a lot of investment in XML-RPC in the blogging tool space, and it is great for getting things done quickly.”

Okay, if this is true, I totally missed it. My fault. Will the Echo API mandate SOAP rather than XML-RPC?

It seems like my to-do list is getting longer every day with crap. I want to do bug fixes and cool new features (Web Kit, synching, Rendezvous support, etc.). I don’t want to have to deal with SOAP. Feh.

A new syndication format, okay, a new editing API, okay, but now I have to use SOAP?

From the user’s point of view, they just want to be able to use titles with their Blogger posts. Seems like it should be simple.

I’ll use SOAP if I have to. Of course I will.

I keep seeing phrases like “benefits to users and developers...” Which makes me laugh.

The Ministry of Benefits to Developers and Users—where “benefits to developers” means you have to do a bunch of extra work on things that you already had nailed down. Where “benefits to users” means users have to wait for the features they’re excited about because the developers are too busy dealing with all the wonderful “benefits” they’re having to support.

Radio/Frontier tips

Now and again I’m reminded of things that not all Radio/Frontier scripters know that they should know:

Here are two that just came up:

1. You can get the text from a wp-text very easily.

People often write something like this:

edit (@some.text.object)
local (s = wp.getText ())
close (@some.text.object)

Here’s the better way:

local (s = string (some.text.object))

Yes, you can coerce directly to a string. Very clean.

2. You can open sub-tables in their own windows.

Just double-click in the Value column for a table, and that table will open in a new window. Or type cmd-enter (on Macs; I forget what it is on Windows).

Anyway, this has been a public service announcement. Now back to your regularly scheduled programming.

Trailing slash

Here’s one way fairly reliable way to tell the writing of a Windows user from a Mac user: Windows users tend to omit trailing slashes from URLs.

It’s not 100% reliable, but I’ve noticed it’s pretty reliable.

A Windows user will type: http://www.example.com

A Mac user will type: http://www.example.com/

Same with sub-folders...

Windows user: http://www.example.com/some/sub/folder

Macintosh user: http://www.example.com/some/sub/folder/