inessential by Brent Simmons

January 2006

Flash Crash? WebKit Crash? Both?

At last!

We’ve been getting crash logs lately that point to a bug in WebKit or Flash Player 8.0.22 (or both). I couldn’t reproduce the crashes until a helpful person sent me his prefs—and now I can make it crash at will.

Safari crashes too—not just NetNewsWire.

Here are the steps to reproduce. Bug id 4428609. I do not recommend doing this:

1. Install Flash Player 8.0.22. (Don’t do this!)

2. In Safari's preferences, enable plugins, but disable JavaScript and Java. (Don’t do this either!)

3. Open the following page in Safari: http://www.informationweek.com/blog/main/archives/2006/01/is_unix_dead_i.html (Definitely don’t do this!)

4. Crash! (I told you not to do it!)

I have not seen this crash with Flash Player 7.0.24, which comes with OS X. So it’s either a Flash Player bug or WebKit bug, Flash Player triggering a WebKit bug, or...

I reported it to Apple, so hopefully it will get fixed or worked around, even if it’s a Flash Player bug, since it does actually crash Safari. (I can even make Interface Builder crash with a simple WebKit view that opens that URL—just disable JavaScript, enable plugins, then open the URL.)

Satisfaction! You have no idea how much I love being able to reproduce crashes. Love it.

Now, of course, I want it to get actually fixed. If I had to guess, based on the crash log, I think the problem is that the plugin is trying to run some JavaScript but JavaScript is disabled, and something is not expecting that to happen.

The crash looks like this:

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_PROTECTION_FAILURE (0x0002) at 0x00000000

Thread 0 Crashed: 0 com.apple.JavaScriptCore 0x9579ec74 _NPN_Invoke + 204 1 ...romedia.Flash Player.plugin 0x06b074ec unuse_netscape_plugin_Plugin + 1320 2 ...romedia.Flash Player.plugin 0x06b14140 Flash_EnforceLocalSecurity + 47880 3 ...romedia.Flash Player.plugin 0x06bebaa8 Flash_EnforceLocalSecurity + 930928 4 ...romedia.Flash Player.plugin 0x06bdc3b0 Flash_EnforceLocalSecurity + 867704 5 ...romedia.Flash Player.plugin 0x06bdcea0 Flash_EnforceLocalSecurity + 870504 6 ...romedia.Flash Player.plugin 0x06bdd988 Flash_EnforceLocalSecurity + 873296 7 ...romedia.Flash Player.plugin 0x06b129e0 Flash_EnforceLocalSecurity + 41896 8 ...romedia.Flash Player.plugin 0x06b0a3c0 Flash_EnforceLocalSecurity + 7560 9 com.apple.WebKit 0x956865dc -[WebBaseNetscapePluginView sendEvent:] + 280 10 com.apple.WebKit 0x956883ac -[WebBaseNetscapePluginView sendNullEvent] + 144 11 com.apple.Foundation 0x928e949c __NSFireTimer + 116 12 com.apple.CoreFoundation 0x90770aec __CFRunLoopDoTimer + 184 13 com.apple.CoreFoundation 0x9075d464 __CFRunLoopRun + 1680 14 com.apple.CoreFoundation 0x9075ca18 CFRunLoopRunSpecific + 268 15 com.apple.HIToolbox 0x9318e1e0 RunCurrentEventLoopInMode + 264 16 com.apple.HIToolbox 0x9318d874 ReceiveNextEventCommon + 380 17 com.apple.HIToolbox 0x9318d6e0 BlockUntilNextEventMatchingListInMode + 96 18 com.apple.AppKit 0x9368c104 _DPSNextEvent + 384 19 com.apple.AppKit 0x9368bdc8 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 116 20 com.apple.AppKit 0x9368830c -[NSApplication run] + 472 21 com.apple.InterfaceBuilder 0x00002d04 0x1000 + 7428 22 com.apple.InterfaceBuilder 0x00069b14 0x1000 + 428820 23 com.apple.InterfaceBuilder 0x000699bc 0x1000 + 428476

Yojimbo (what I was thinking of)

About a year ago I was thinking about developing a note organizer app.

I had imagined the layout (NetNewsWire-like, as you might imagine) and some features (notes, bookmarks, web pages, search)—but of course I was just daydreaming. I may have done a quick layout in IB one night, but that’s as far as it got.

So here comes Yojimbo—and it’s exactly what I was thinking of. Only, well, better. Plenty of cool features I hadn’t thought of.

As a developer I can’t help thinking of apps I’d like to do but that I have no time for. It’s rare that someone else does them—so this is a happy occasion and a nice surprise. (And it’s got a place in my Dock already.)

Me at Macworld Live stage

If you’re at Macworld, you can catch me on the Macworld Live stage at 2:15 p.m. Thursday. Booth 807.

I’ll be on a panel with a few other Eddy winners. I don’t know if they’ll be taking questions from the audience—but I hope so! (At any rate I’ll be available after for anyone who wants to talk in person.)

URLs of photocasting feeds?

Does anyone have a URL or URLs to photocasting feeds? I’d like to see what they look like. Thanks!

(Note: I did try at the Apple booth to look at the source for a feed. We got the URL from iPhoto. I then went to Terminal and used curl to download it—and got an HTML page telling my browser doesn’t support it! So there must be some kind of browser detection going on. But I didn’t write down the URL to check it out later.)

On MarsEdit and iWeb

I was concerned that people would misunderstand how MarsEdit and iWeb are related—that people would think they’re competing apps.

They’re not.

Superficially they sound similar: both allow you to edit weblogs. But beyond that simple sentence they’re completely different in intent.

Though I haven’t looked into iWeb’s features in any depth, it appears that it creates weblog pages and uploads them to .Mac. (It may also have an export-to-file-system feature where you can manually upload to other servers too, though I’m not positive of that.)

MarsEdit, on the other hand, is an editor solely. It works with weblog systems like Blogger, TypePad, WordPress, Conversant, and others. It doesn’t actually create weblog pages—that’s not what it’s for. Those weblog systems generate the pages.

(Note that ecto has the same intent as MarsEdit, and thus also doesn’t compete with iWeb.)

iWeb competes with Sandvox, of course, though I have hopes that Sandvox will still do well, especially as it’s not tied to .Mac but works with a variety of servers.

As a weblog generator, iWeb competes with apps like Blogger, TypePad, etc.—all those apps that MarsEdit works with. It also competes with other desktop weblog generator tools such as iBlog and Tangelo.

Just for jazz, to make things clear... there are several aspects to a weblog:

1. Editing interface.

2. Weblog-page creation.

3. Weblog-page serving.

So a workflow that uses MarsEdit might look like this:

1. MarsEdit for editing.

2. WordPress for page creation.

3. Apache plus PHP for page serving.

A workflow that uses iWeb looks like this:

1. iWeb for editing.

2. iWeb for page creation.

3. .Mac for page serving.

MarsEdit only ever does 1, while a big part of iWeb is 2.

It’s worth noting that MarsEdit works with the existing weblog ecosystem and iWeb is part of a top-to-bottom Apple solution. It would be easy to say something negative about how big companies want to lock you into their stuff at every step—but I don’t hang with that, at least not in this case. I like the fact that Apple does a top-to-bottom Apple solution—it leaves open opportunities for developers, which is a Good Thing.

(And, at the same time, it’s also worth noting that iWeb generates RSS, and Steve Jobs in his keynote made the point a couple times that Apple-generated RSS works with whatever RSS reader you have. So it’s not as if iWeb completely ignores the rest of weblog ecosystem: there’s no Apple-only syndication format, for instance.)

To sum up...

iWeb cool. MarsEdit cool. Not competitors.

Pre-Macworld Dinner?

I don’t have dinner plans for tonight—if you’re in SF and want to have dinner, send me email. I’m thinking of eating around 7.

Best time to get in line for Jobs keynote?

I’ve been to several Steve Jobs keynotes at WWDC—but I’ve never attended one at Macworld.

A big difference is that Macworld is first-come first-serve. Question for those of you with experience—how early should I get in line?

How I know I’m a geek

Whenever people ask me if I do lots of little one-off hacks, I tell them no, I don’t. Because I don’t. (No time!)

But a few months ago I did write, for my own personal use, a little hotkey app switcher. All the apps I use regularly can be switched to (launched if necessary) just by typing some keyboard shortcuts.

Purely personal software. Works for me only. Configured by editing the source code and rebuilding it.

And that’s how I know I’m a geek and not just a developer. (Bonus points that it’s a universal binary and runs on my DTK machine.)

Battlecat back

Battlestar Galactica returns tonight! I’m so there.

I feel like real life, in between each series, is just a dream.

(Okay, not really, right? Or else I’d need psychiatric help. The statement is true only in the lyric poetry sense, where hyperbole in pursuit of emotional expressiveness is true by definition rather than empirical verification.)