OmniGraffle 4.2 beta 2 is now available

by Joel on March 14, 2007

OmniGraffle's got a brand new name.

At least, to the Finder it does. OmniGraffle 4.2 beta 2 (including Pro) now sport their major version number in the Finder's view. This is for the benefit of users that get notified of its existence via the software update mechanism, download the new version, and accidentally overwrite their older version of OmniGraffle 3 or OmniGraffle 2.

Other goodies abound, like the Document Settings Inspector getting a new icon and being made available for the standard version of the application, and a number of bug fixes.

This release also represents UI and documentation freeze, and it will be the version submitted to our localization teams—Expect the next release to be fully localized for our international users, we thank you all for your patience in this endeavor.

Release notes are found at the usual location.

And the download is on our scary beta page.


Screencast videos for OmniOutliner now available

by Linda Sharps on March 13, 2007

Say, have you ever found yourself thinking that you'd like to learn more about OmniOutliner, preferably by watching a video narrated by a fellow with a charming accent? Let's say for the sake of this blog post that you have spent literally hours pining for such a thing, one hand draped dramatically across your forehead as you heave the occasional deep sigh, a single tear glistening in the corner of your left eyeball, because in that case have I ever got some good news for you, Mopey McWhimperton.

ScreenCastsOnline has worked with us to create a number of helpful OmniOutliner videos that cover everything from levels and styles to exporting to Pro-specific features. Check them out when you get a chance, and let us know what you think!

By the way, I recommend turning up your speakers and doing the robot to the catchy electronic music at the beginning of each video. If you are unable to adequately perform the robot, the cabbage patch will be acceptable.


Catching float- and struct-returning messages to nil

by Tim Wood on March 11, 2007

Wim came up with a neat trick a while back that we've used to find and fix several bugs in our software, and to file a bunch of Radars.  There are several messenger dispatch functions in the Objective-C runtime.  Of particular interest here are objc_msgSend_fpret and objc_msgSend_stret.  These are used by the compiler when calling a method that returns a float or struct, respectively.

Depending on your architecture, the result of such a message can be undefined when sent to nil.  Messaging nil is very useful most of the time, but you can introduce rarely manifesting bugs in this case.

Looking at the disassembly for these two functions in gdb, though, gives us an easy way to catch them.  Under 10.4.8/x86, we see the following:

(gdb) x/50i objc_msgSend_fpret

0x90a573c0 : mov 4(%esp),%eax

0x90a573c4 : test %eax,%eax

0x90a573c6 : je 0x90a57420

0x90a573c8 : mov 0(%eax),%eax


That is, load the first argument, check for zero, if so jump to 0x90a57420.

Likewise, in objc_msgSend_stret:

(gdb) x/50i objc_msgSend_stret

0x90a57340 : mov 8(%esp),%eax

0x90a57344 : test %eax,%eax

0x90a57346 : je 0x90a573a0

0x90a57348 : mov 0(%eax),%eax


In our ~/.gdbinit we can have:

# Nil-handling path for objc_msgSend_fpret.

b *0x90a57420


p (char *)$ecx


# Nil-handling path for objc_msgSend_stret.

b *0x90a573a0


p (char *)$ecx


(where the print command shows the selector).


OmniGraffle for Bureaucracy

by William Van Hecke on March 9, 2007

Good day.

It took me a while to realize this, but almost every time I need to put some kind of stuff on a page, and it makes a difference where on the page that stuff is, OmniGraffle ends up being the best tool for the job.

Let me 'splain: OmniGraffle might not be the first thing that comes to mind when you need to fill out some official forms for the U.S. Government. Or, say, some character sheets for your weekend Dungeons & Dragons session. But it should be. Check this out:

  • Grab an electronic version of the form you need to fill out. Scan it if you have to, but most official forms are available as PDFs these days. Some of them even claim to be fillable, but I've never gotten them to work properly in Preview or Acrobat.
  • Copy each page from the document (in Preview) and paste it onto a fresh OmniGraffle canvas.
  • For each canvas, lock the layer that has the form on it, and create a new layer for your information.
  • Make text objects all over the canvas to fill in each blank. Once you have a text object you like, you can Option-drag it or paste it all over and just replace the text.


Why this is so much handier than filling out forms by hand:

  • You can use the alignment inspector and smart guides to make sure everything is lined up just right and perfectly legible.
  • If some of the boxes are really tiny, you can play around with the font to get everything to fit in there just right.
  • Filling out the same info over and over is easy: just copy and paste the existing text objects with the info you need.
  • Once you've saved the file, you automatically have a backup copy for reference or revision.
  • You can make an OmniGraffle template that has the right paper size, two layers per canvas, and a nice grid for keeping things orderly.

When I was going through the process to get someone a visa to live in the USA, this technique saved me heaps of time and stress. And now I have backups of every form (there are lots of forms involved).

Have you found any weird or unexpected uses for Omni apps? Maybe next time I'll tell you about how I'm using OmniGraffle as a level editor for a video game I'm working on…