Wednesday, April 17, 2002


side note...updating the description.

On several parallel lines, the poet will throw out several chains of color, sound, smell, noise, weight, thickness, analogy. One of these lines might, for instance, be olfactory, another musical, another pictorial. F.T.Marinetti

1:44:19 PM  blips[]    
OmniOutliner, Cocoa, and I'm probably babbling.
Since it's Outliner screen shot day or something close to it, I'm posting pictures of the Outliner that got me happy about Outliners again - OmniOutliner.

OmniOutliner is a Cocoa application, based on the old NeXT frameworks. I was a fan of the NeXT day one, even though I was still somewhat of a wee pup at the time. I played around with them at universities over the years and tried a few times to get a previous employer to invest in WebObjects. I was always impressed with what they were able to get the software to do, and how nice most NeXT applications felt. So when the Apple/NeXT merger was announced, it was a joyous day. I loved both companies, and both were struggling, but Apple was still in enough of a position to get some recognition drummed up - finally - for the NeXTStep software.

It's taken many years, but Mac OS X is - for the most part - proving itself as a viable competitor in the new world of Operating Systems. I would have loved to see Pink and Taligent happen (pure object oriented operating systems), and for OS/2 and OpenDoc to have succeeded. But such was not the case. So what we've got these days in Windows, which has become a decent example of a heavily component based operating system, even though it's taken Windows 2000 and XP to address the "DLL Hell" issues that have shown up as a result; in the Linux world, GNOME and KDE are trying to mirror some of the success that Windows achieved with COM/OCX/ActiveX, and they're doing a decent job of it; and there's Mac OS X, a hybrid of computing models (traditional Mac programming, Cocoa's aggressive object orientation, Java Swing, and BSD). And then there are the platforms like Java 2, .NET, and so on.

Cocoa has long been my favorite. It's very well designed, and the fundamentals of that design haven't changed much since NeXTStep 1.0 back in 1988. That design has spent time on Solaris and Windows. That design was doing Distributed OLE while before DCOM even entered its long beta cycle. That design yielded one of the best Object-Relational persistence frameworks. And it's yielded some of the best Mac OS X applications, like many of the OmniGroup's products.

OmniOutliner is great. It's still relatively simple, compared to some outliners like MORE, but that seems to be the driving design of Mac OS X in general. It's beautiful - Cocoa apps talk to the Quartz graphics system directly, while many Carbon apps go through a QuickDraw layer (this layer lets them run on carbonlib equipped classic Mac OS's). The difference can be stunning. Quartz directly yields beautiful antialiasing. Text is a joy to read. The OmniWeb web browser has become my browser of choice simply because it's the best browser to read news and blogs and articles on.

There's a great uniformity to many Cocoa apps. Editing text in TextEdit, iJournal (a LiveJournal client), OmniOutliner, and in OmniWeb's text areas -- it's all the same. All Cocoa text areas have basic EMacs key bindings built in - ctrl-A/E/K/Y/D, the main ones I use, so going from code development mode in XEmacs to commenting on a LiveJournal post to entering a note in my outliner have all or many of the same keystrokes. All text fields in Cocoa can have spell checking enabled. As I'm writing this post in OmniOutliner, little red-dotted underlines are all over the place. Someone even released a nifty "autocomplete" feature which can be turned on in any Cocoa text area, but I've been having trouble finding out more information about it. The built in AppKit outliner object behaves well and similarly across its many different uses (as a hierarchy of mail folders in Mail.app, as bookmarks and history in OmniWeb). And now that all of this power is being buddied up with AppleScript in AppleScript studio, I think we'll start seeing a lot of easy to use specialized applications. They'll be similar to what people have been doing with RealBasic/Visual Basic for a while, possibly, but AppleScript's ability to communicate with just about everything on the system, and also on the web through XML-RPC/SOAP, combined with its new ability to use first-class AppKit components to make full-fledged applications is very powerful indeed.

Now, Apple's done well with the Java-Objective C bridge. Java, Objective C, and now C# all have many similarities - dynamic C based object oriented languages. Much of the .NET framework could probably be mapped to FoundationKit and AppKit classes. It would be nice to have Mac OS X be a first class player in a .NET world, just as it seems to be doing in the Java world.

But back to OmniOutliner -- simple, beautiful, plays well with others. A great example of good Cocoa programming.

OmniOutliner Screen Shot 1

11:22:06 AM  blips[]