inessential by Brent Simmons

September 2004

The opposite of Murphy’s Law

In software development, what’s worse than Murphy’s Law is its opposite: that whatever can go wrong, will not go wrong.

Today I’m working on an intermittent crash a few people have reported when marking all as read in a group. I have been completely unable to reproduce it, even using the subscription list of one of the people who reported the crash.

In other words, the thing that should go wrong—the crash—just positively refuses to go wrong.

Well, this wouldn’t be the first time. I’ve fixed many crashing bugs that I was never able to reproduce. But it’s so much easier when I can reproduce the crash.

If NetNewsWire were a car, I could drive it into a brick wall and it would be fine, it wouldn’t even get scratched. In fact, it would go through the wall and just keep going without slowing down. But that’s only if it’s me driving it, it isn’t the same for everyone else.

It’s a reverse Murphy’s law: whatever can go wrong, will not go wrong, will refuse to go wrong—for the developer of the app.

Which is why I live on your crash logs.

The thing to do, when you get a crash log—whether you’re using Lite or the full version, whether you’ve bought NetNewsWire or not—is either post it to the online bug tracker or send it via email to beta at ranchero dot com. Same thing goes for MarsEdit too, of course.

Along with the crash log, some description of what was going on would be nice—for instance, knowing what layout you’re using can be helpful. But crash logs are valuable in any case.

More about Bloglines and NetNewsWire

So—how is the Bloglines integration going to work in NetNewsWire?

I don’t know all the details yet, but there are a few important things I can say right away:

1. It’s not forced on anybody. It will be an option that you can turn on.

2. If you use it, you won’t have to use it for all your subscriptions. You can use it for just a subset if you want to.

3. There will also be other means of syncing in 2.0.

4. We continue to look at other bandwidth solutions too. (For instance: in the comments for my previous post, Jens Alfke mentioned Jabber/XMPP, which sounds pretty cool.)

Anyway, the scoop is, it will be there for people who want it—and I’m already getting feedback on this, so I sense that there are lots of people who want it.

User interface

The UI in NetNewsWire hasn’t been worked out yet.

I note that what FeedDemon does is to have a special Bloglines Channel Group. We may do something similar—because there’s something to be said for a consistent UI even across apps on different platforms, and also because it’s straightforward and explicit.

The equivalent in NetNewsWire would be a special Bloglines folder which contains your Bloglines-managed subscriptions.

Another option would be to allow you to have Bloglines-managed subscriptions interspersed with the rest of your subscriptions—but that might lead to some confusion. I’m leaning toward Nick’s approach.

But feedback is very welcome—post comments here or send me email. Thanks!

Bloglines integration

Last night, Mark Fletcher of Bloglines posted about the new Bloglines Web Services. The first desktop apps set to use them are FeedDemon, Blogbot, and NetNewsWire.

In an interview last May I was asked if I planned to add a server-side component to NetNewsWire.

The gist of my answer was that I’d love to work with an existing system rather than roll my own—this way we can concentrate on the desktop software and the server-side folks can concentrate on the server software.

A little while after the interview, I emailed with Mark Fletcher a couple times, and the idea (at least on my end) sat for a while as I worked on other things, and then it came up again—and this time with Nick Bradbury and Dru Nelson too.

Though I myself set it aside for a while, the Bloglines folks didn’t—they went to work on it. (And did a great job!)

The press release talks about syncing and eliminating the RSS bandwidth bottleneck. I’ll elaborate.

About syncing...

To many NetNewsWire users, being able to use Bloglines and NetNewsWire together will be pretty cool. You could even—for instance—use NetNewsWire at home, FeedDemon or Blogbot at work, and use Bloglines when you’re at your mom’s house.

Importantly, other apps could use this too. The Bloglines Web Services API is not limited to the apps mentioned in the press release.

The API is simple and easy-to-implement. On one hand this should promote wide adoption, but on the other hand it’s easy to criticize it for not doing x, y, and z. My own take is that it’s like all software: you start with something basic but workable, get a solid base, then improve it in increments.

In other words, it doesn’t have to be perfect and comprehensive before real people can get real benefits. (This is a lesson we’ve learned over and over on the Web.)

About the RSS bandwidth bottleneck...

The idea is this: instead of having NetNewsWire ask each site for its feed, NetNewsWire asks Bloglines.

Say feed x has 100 subscribers, so feed x gets 100 requests an hour. But if the aggregators are going through Bloglines, then feed x gets just one request an hour—from Bloglines.

(That’s a simplified view, but it gets across the idea.)

It means that feed x gets far fewer hits, which is good for the folks who pay the bandwidth costs for feed x.

Of course, if you take this to the extreme—that everyone in the world who uses RSS goes through Bloglines—this solution probably won’t scale. Which means it’s not the end-all solution to the problem of syndication and bandwidth.

But, again, it’s a very good thing anyway—even if it’s not perfect and comprehensive, even if it’s not the final word on the topic—because it does mean that less bandwidth is used. (When it comes to real issues like bandwidth, we can’t let the perfect be the enemy of the good.)

I suspect that the problem of bandwidth is going to have several solutions that, taken together, solve the problem. One part of the puzzle is the Bloglines approach, but there will be others too.

New Post in MarsEdit Script

We’ve had a few feature requests for this scenario:

1. You’re in NetNewsWire.

2. You want to start a new, empty post in MarsEdit. (You don’t want to post the item you’re reading, in other words—you want a fresh new post window.)

In NetNewsWire 1.x, you could choose a switch-to-weblog-editor command. But that command doesn’t exist anymore.

Solution: put a script in NetNewsWire’s scripts menu that does that. (You can download this one, if you like.)

Here’s what to do:

1. Download the script and unzip it.

2. In NetNewsWire, choose Open Scripts Folder from the scripts menu.

3. Drop the unzipped script in the scripts folder.

4. Back in NetNewsWire, pull down the scripts menu—you should see a New Post in MarsEdit command. (If you don’t see it, wait a few seconds for NetNewsWire to notice it, then pull down the menu again.)

5. Choose the command—it will bring MarsEdit to the front, launching it if necessary, and create a new, empty post window.

I haven’t tried a similar thing for ecto, Blapp, Xjournal, and others—but I imagine that similar scripts for other weblog editors are just as easy to write.

HotKeyTerminal

Some Mac developers I talk to like doing little hacks, they like programming little customize-the-system stuff.

I understand this: it’s cool, fun, relaxing, a nice way to take a break from the bigger problems of working on an application.

But I myself almost never do this kind of thing. Except recently I did.

I wanted a global keyboard shortcut for launching Terminal or bringing it to the front. I could have chosen from any number of launchers and utilities that make this possible, but I realized I just wanted this one, simple thing—so I wrote HotKeyTerminal which does this one simple thing.

It runs in the background (no dock icon). I made it a startup item so it’s always there. And now whenever I hit cmd-escape, Terminal comes to the front.

There’s an excellent chance you don’t need this, since it was really just written for me. It’s not an official Ranchero Software release, it’s completely unsupported—I’ll probably never mention it again. But you can download the app or the (extremely simple) source.

How to open tabs in background in NetNewsWire

Lots of people like the browsing features in NetNewsWire—but then they ask if it’s possible to open tabs in the background.

Here’s how: open NetNewsWire’s browsing preferences, click the Browsing icon, then un-check the box next to “Select new tabs as they are created.”

Next time you open a tab, it should open in the background.

HTML Tidy rocks

For a little while, in an earlier test version, we had embedded HTML Tidy in NetNewsWire. We ended up not needing it—but I still want to say how cool HTML Tidy is.

The thing was, we needed a way to create valid XHTML. I knew about HTML Tidy, but I expected it would use the GPL license, and so we wouldn’t be able to use it.

I went and checked it out anyway—just in case, on the long shot that it was cool to use it—and, to my surprise, it was.

But then we also needed it to be easy-to-use. I didn’t want to spend hours learning some complicated API, I wanted something easy, where I could say: “Here’s some tag soup. Please give me back some valid XHTML.”

To my delight, that’s pretty much how it worked. Very easy.

The last thing we had to worry about was performance. Was it fast? Yes, it was. I couldn’t perceive a difference between when it was on and when it was off. (Of course, timing tests would show the difference, but a user would never have noticed it.)

So, to the HTML Tidy folks—even though I didn’t end up needing it—I present a small bouquet of <flowers />.

Unsung new feature

One of my favorite new features in NetNewsWire didn’t get its own page or make it as a bullet point on the what’s new page.

It used to be that if you have a group selected and it has unread items—but they’re all above where you are in the headlines table—then going to the next unread item would (annoyingly!) expand the group and take you to a feed inside the group.

There was a logic to this, but it was totally annoying anyway. And it was reported often as a bug.

In talking to NetNewsWire users and testers, we discovered that people really want three distinct behaviors for going to next/previous unread:

1. Always respect the expansion state of the Subscriptions list.

That is, if a group is expanded, it’s okay for next-unread to select a feed in that group. Otherwise it should move on to the next group.

2. Stay at the top level of the Subscriptions list.

That is, don’t ever automatically expand groups, and don’t select feeds if they’re inside a group.

3. Always expand groups and skip to feeds.

Some people like to group their feeds, but they prefer to have a feed (rather than a group) selected when they’re reading.

So these options are available at the bottom of the General preferences pane.

Never made a slide show before

Somehow I made it to the advanced age of __ without ever having made a slide show. I’ve never actually used PowerPoint or anything like that.

I just installed Keynote so I can create slides for my presentation at the OS X conference.

I’ve seen a bunch of slide show presentations, and I’ve sometimes thought, “Hey, I could do better than this.” But now I have to actually do it.

The topic is embedded HTML/browsing and the user interface challenges it brings up. Some of it comes from the experience I had bringing browsing to NetNewsWire, but it will also look at other apps (other newsreaders, iTunes Music Store, mail apps, weblog editors, text editors, and so on).

(Ironically, my favorite example of embedded HTML is Mailsmith. It just doesn’t do it. And that’s one of the big reasons I use it. For me, it’s 99% true that if it’s HTML email, it’s spam. That won’t be true for everybody, of course.)

If you have any comments—such as that you love SubEthaEdit’s HTML preview because x or you think NetNewsWire’s browser would be better if y or you wish the iTunes Music Store also did z—I’d love to hear about it. Put on your user interface hat.

To be clear, the topic is not browsers, it’s everything that displays HTML except for browsers.

NetNewsWire Save Bookmark In Omniweb AppleScript

Jonathan Wight posted a script that saves the current browser page in NetNewsWire as a bookmark in OmniWeb.

I love scripting. The latest beta of NetNewsWire is more scriptable than 1.x—and it’s a safe bet that it will get more and more scriptable in later versions.

One of the common scripting feature requests we got was a way to export subscriptions as OPML, so we added an export subscriptions command. You can choose whether or not it should be flat or with groups. This way you could automate a blogroll, for instance, or export your OPML file to share it with another aggregator.

We added a bunch of other things too—including the ability to script the browser, as Jonathan found.

One script I’d love to see someone write is an Email-this-Story script. It should pay attention to whether you’re looking at a news item or a web page. This is a common feature request, and it’s the kind of thing that a script can do quite well: there’s no need to wait for us to add the feature.

Another feature some people have asked for is a way to launch their weblog editor—MarsEdit, ecto, etc.—from within NetNewsWire but without creating a new post. That’s pretty easy to do: write a one-line script that reads tell application "MarsEdit" to activate. Save it and put it in NetNewsWire’s Scripts folder. (If you use another weblog editor, replace the name MarsEdit with your weblog editor’s name in the script.)

More NetNewsWire and MarsEdit Questions and Answers

Some more answers to common questions about NetNewsWire and MarsEdit...

Can I use SSL?

Yes. It should work in both NetNewsWire and MarsEdit. However, if you have a self-signed certificate, you’ll need to follow this hint on MacOSXHints to get it to work.

Can NetNewsWire’s browser display Flash and other plugins?

Yes. Here’ how:

1. Open NetNewsWire’s preferences window and click the HTML icon.

2. In the popup menu at the top, choose “News Item Descriptions” if it’s not selected.

3. Make sure the box next to “Enable plug-ins” is checked.

4. Go back to the popup menu at the top and choose “External Pages,” and make sure the box next to “Enable plug-ins” is checked.

The weird thing is that for plugins to work for external pages you have to have plugins enabled for news item descriptions. (I suspect this is due to a WebKit bug, but I’m not positive yet. I’ll report it to Apple once I’m sure this is the case.)

How do I set the primary category in MarsEdit?

You set the primary category via the category popup menu. With a document window open, choose View > Customize Toolbar to add the popup menu.

If you think that this should be made easier, I’d agree with you completely.

How come MarsEdit can’t [set post status to published, upload images, etc.] with WordPress?

The WordPress folks are working on making sure WordPress works better with external weblog editors. They’re doing a good job, and I think WordPress 1.3 is going to be cool.

In the meantime, one thing you can do is try Johann Richard’s Combined XML-RPC Patch for WordPress 1.2 and Ecto or MarsEdit. (But note that it’s at your own risk: we can’t help you with your WordPress installation, since we’re working on NetNewsWire and MarsEdit.)

Are you looking for more styles to include with NetNewsWire?

You bet! If you make one, and you’d like to submit it for possible inclusion, just stuff it or zip it and send it to me via email. We can’t guarantee that we’ll include every one we get, of course, but we’ll strongly consider every one. (And if we include it then you will be credited in the About box. I think you’ll find that the WordPress community is quite helpful, though.)

Some of the things we look at:

1. Is it different from the other styles?

2. Does it work with all three layouts (traditional, widescreen, and Combined View)?

3. Does it work with items that have very long titles?

4. Does it work if I make my NetNewsWire window small? Or large?

Can I pay via PayPal?

Yes. Here’s how:

1. Go to the regular Kagi store page and decide what you want and look up the price.

2. Go to the NetNewsWire home page, scroll to the bottom, and click on the PayPal Donate button.

3. Then send us an email letting us know that you paid via PayPal and what product you bought. We’ll email you your serial number(s).

Using Subversion With XCode

The MacZealots folks have posted a tutorial: Using Subversion With XCode. Right on.

In the comments for yesterday’s post about Subversion, Kevin Ballard asked why I’m waiting for NetNewsWire and MarsEdit to ship before I make the switch. Excellent question. The answer is simply that when I’m in the last phase of a project I like to be as conservative as I can. The mindset I have when I’m fixing bugs and adding polish is not compatible with making big infrastructure changes. (You ever watch the TV show Monk? This is the Monk phase of the project.)

I’m not saying that’s a rule all developers should follow—just that it works for me.

Eager for Subversion

I’ve been using CVS for a long time—and sometimes I feel like Gus Mueller (now married!) when he wrote the immortal line Die CVS die.

One item—MacDevCenter on Making the Jump to Subversion—has been staring at me every day since August. I can’t actually make the jump until after finishing the NetNewsWire and MarsEdit releases, but I sure am eager.

I’ve heard from reliable sources that not only does Subversion solve some of the annoyances with CVS, it also makes peppers taste hotter and the sun shine brighter.

NetNewsWire Display Hacks

In the full version of NetNewsWire 2.0 are a couple display hacks. One is documented by Jon Hicks. Another is a hack to add indenting to the datelines and summaries display in the headlines table.

We added the ability to show datelines in the headlines table mainly for the benefit of people using the widescreen layout. (Choose View > Layout > Show Datelines in Table.) This removes the columns and puts a dateline below each title. (Thanks go to Alex King for suggesting this feature.)

There is no exposed preference for adding indenting to the datelines—but you can add it manually via the Terminal.

Indent pixels hack

  1. Quit NetNewsWire if it’s running.
  2. Launch /Applications/Utilities/Terminal.
  3. Type the below and hit return.
    defaults write com.ranchero.NetNewsWire summaryTableIndentPixels 15
    (Make the number the number of pixels you want to indent.)
  4. Launch NetNewsWire. (Be sure that showing datelines and/or summaries is turned on, or you won’t see any effect.)

You end up with something like in the screen shot above (click for a larger version).

Another hack, similar to the above, allows you to set the number of summary lines when showing summaries is on. The key is summaryLinesToInclude.

We call these hacks because you have to use the Terminal to change the settings and also because they’re unsupported. But I couldn’t resist telling you about them.

Enclosures

We almost didn’t add support for enclosures to NetNewsWire 2.0—because they give me the willies. Experts have assured me that my fear of enclosures is irrational and paranoid, and so we went ahead and added support.

We didn’t do the download-enclosures-at-night feature that Radio UserLand has—enclosures are only downloaded when you click on them.

But we did something else: we added AppleScript support for enclosures. You could write a script that gets the enclosure info from your news items and then downloads the enclosures—so you could write a script that downloads at night. Or on your lunch break. Or that just downloads mp3s, or whatever.

My hope is that somebody will take this as an opportunity to do something cool and write an enclosure-downloading script (perhaps an AppleScript Studio app?) that other folks can use.

Weblog editors

A few people have sent me email with ideas on competing with ecto. Here’s the thing, though: I like Adriaan a lot and I think ecto is cool.

The same goes for other weblog editors and their developers: Blapp is cool, Xjournal is cool, and I like Michael and Fraser. Daniel Berlinger does a great job with Archipelago (a Manila editor)—and Daniel and I go waaaay back.

In fact, I was sad to read that Phil Ulrich isn’t continuing Userspace development, because it sounded really good and I like Phil.

One of the luxuries of running your own business that Sheila and I enjoy is that we are allowed to make decisions that go against common business wisdom. We could have made the NetNewsWire-MarsEdit connection proprietary, but that would have been, well, mean.

When NetNewsWire talks to MarsEdit, it uses the exact same API, the exact same code, it uses to talk to ecto, Cocoal.icio.us (by master of ceremonies Buzz Andersen), and other software.

Maybe it’s weird or naive of me, but I like other OS X weblog editor developers. It’s a great group of people. And so I find myself rooting for their success, even when we have products in the same space. And I also find that I really like this situation.

But—more about the weblog editor space—I think the number of people who have already bought a weblog editor is very, very small compared to the number of people who will buy a weblog editor. It’s only just this year that weblog editors are starting to become software you’d want to use day-to-day. (In other words, the success of one editor doesn’t preclude success of another.)

So, it’s not as if different weblog editors don’t compete. Sure they do. But I’m totally not into playing any hardball here: that would suck the fun out of it for me. I think of the competition as being very friendly—but if it gives us all a bit of incentive to work hard and make our software better, that’s cool.

At the same time—and more importantly—we’re all collaborating on showing that weblog editors are getting ready for prime time.

MarsEdit Questions Answered

A few common questions about MarsEdit have come up since the public beta...

Why can’t I set titles for Blogger posts?

Unfortunately, the Blogger API doesn’t support titles, even though you can enter titles through Blogger’s web interface.

On the bright side, once we add support for the Atom editing API, then it should be possible to use titles with Blogger posts.

When will MarsEdit support the Atom editing API?

It won’t happen for 1.0—for 1.0 the plan is to fix bugs and add polish, but not make any big changes from what you see now.

But support for the Atom editing API is a huge priority for after 1.0.

How come I can’t upload images to my WordPress weblog?

Once the WordPress folks add support for the image-uploading part of the MetaWeblog API, it will work. (They’re a hard-working bunch: I expect it won’t take long.)

How do I set a category in Blosxom?

You’ll need to add the category popup menu to the toolbar. With a document window in front, choose Customize Toolbar from the View menu, and drag the category popup menu into the toolbar. Then you’ll be able to set categories.

How do I use MarsEdit with my web browser?

From the MarsEdit menu, choose Install Bookmarklet. You’ll then be able to send a page from your browser to MarsEdit in much the way you can send news items from your newsreader.

When will you add _______?

It’s hard to say—so I think I’ll distract you by saying, “Hey, did you notice the Edit with BBEdit and Edit with SubEthaEdit commands in the File menu?”

NetNewsWire Questions Answered

As you might imagine, we’ve had a ton of email since releasing the NetNewsWire public beta yesterday. A few things have come up more than once, so I thought I’d answer them here.

What happened to the Mark All as Read toolbar button?

It’s still there—choose Customize Toolbar from the View menu to add it. (There are some other toolbar items might want to add, such as Post to Weblog and Mark as Flagged.)

The Find command doesn’t work!

Yes, it’s broken at the moment. It will get fixed before 2.0 ships.

What’s the best place to report a bug? How should I make feature requests?

The answer to both is the on-line bug tracker. You can report bugs and make feature requests from the same form. Choose Report a Bug from the Help menu.

How can I open browser tabs in the background?

Open NetNewsWire’s preferences, click on the Browsing icon, then un-check the box next to “Select new tabs as they are created.”

Is the pricing just a special sale?

It’s not a special sale. NetNewsWire 2.0 is $24.95 or $39.95 bundled with MarsEdit. Those are the regular prices.

How can I read restricted LiveJournal feeds?

Instructions are in the Help book—choose NetNewsWire Help from the Help menu then click on Questions & Answers. The question about LiveJournal is the top item.

Note: we realize that Help viewer used to be so painfully slow that we’ve all become unaccustomed to using it. But it’s pretty fast in 10.3, and NetNewsWire’s help actually has a bunch of info. Also see the Tips page in the Help book.

Is there an alternative to the Yahoo Groups mailing list?

Yes—we’re transitioning away from the Yahoo Groups mailing list to a new one (generously hosted by Aaron Swartz). List instructions are on the beta-download page.

Aggregator inside aggregator

You know whenever people post screenshots of emulators, how it can be weird to see Windows running on a Mac? (Even weirder if you actually use an emulator, until you get used to it.)

Here’s a similar side effect of having embedded a browser in NetNewsWire. (Click for full-size screen shots.)

Bloglines running inside NetNewsWire's browser  Radio UserLand. running inside NetNewsWire's browser

Even though it’s odd, there’s actually a point to it—we discovered that some people use multiple aggregators. One for fun stuff and one for work, that kind of thing.

If one is browser-based and the other embeds a browser, then, well, hey, you’ve got something like the above.

NetNewsWire and MarsEdit public betas

NetNewsWire 2.0 icon

NetNewsWire 2.0b3—full and Lite versions—are now in public beta.

Here’s what’s new in 2.0 and here’s the download page.

If you bought (or will buy) any version of NetNewsWire 1.x, all NetNewsWire 2.x upgrades are free.

Here are a few screenshots of NetNewsWire 2.0: setting up a smart list, creating a new search engine subscription, using the new embedded tabbed browser, a collection of built-in styles, and the activity window.

MarsEdit 1.0 icon

MarsEdit, our new weblog editor, is also in public beta: it’s designed to make weblog writing like writing email.

If you bought (or will buy) any version of NetNewsWire 1.x, all MarsEdit 1.x upgrades are free too. In other words, if you already bought NetNewsWire, you own a license for MarsEdit.

Here’s a screen shot that shows both NetNewsWire and MarsEdit—the Post-to-weblog button has been clicked in NetNewsWire, and the post has opened in a new window in MarsEdit. (More screen shots appear on the MarsEdit home page.)

So, what’s the deal?

We get so many great feature requests, and we wanted to add a bunch of new features to NetNewsWire. But we realized there wasn’t really room to add features to the newsreader and the weblog editor both unless they were split into separate applications.

NetNewsWire’s new features including searching, flagged items, persistence, per-feed refresh settings, new icons by Bryan Bell and Jon Hicks, embedded browser, smart lists, search engine subscriptions, script subscriptions—and more. The weblog editor was removed completely.

MarsEdit screen shot

MarsEdit was more of a from-scratch application. We kept (but revised) some of the under-the-hood plumbing that was in NetNewsWire’s weblog editor, but then we completely re-designed the user interface to make it work more like email. There’s a main window that lists your weblog and recent posts, and you create and edit posts in separate windows—just like using an email program.

Another thing we wanted to do was make it possible to mix and match newsreaders and weblog editors. See the page on NetNewsWire and external weblog editors.

We also wanted to make it so NetNewsWire Lite users could have a Post-to-Weblog button—and now they do. When it comes to weblog editing, there is no difference between NetNewsWire and NetNewsWire Lite.