The minutia of optimizations

We just released Curio 3.2.1. Definitely grab it since it's packed with goodies for you. Yay!

The most important thing in there is a fix for wacky selection handling if you happened to have a list with an empty list item in it. Very flakey and we're very sorry about that one.

However, to make it up to you, we've added some other treats! :-)

All color pickers have opacity sliders for super flexible effects in combination with the overall figure opacity slider. New much easier methods for creating jump anchors and jump actions simply via Edit > Copy and Edit > Paste As > Jump Anchor or Jump Action. Cleanup in the Organizer to automatically purge orphaned assets when idea spaces are deleted, if requested. A tweaked HTML export template so the result looks more like the real Curio UI.

And the super-yummiest goody (IMHO) is a slew of optimizations. Perhaps this shouldn't be surprising but I love Apple's Shark profiler. I could spend days sleuthing around in its analytics.

Shark works by watching what you do and seeing what routines are called in an application. So, for example, I could start it, add a new list item to Curio, then stop it, and it'll tell me what routines were called and how much time as a percentage of the total time was spent in those routines.

The "minutia" word in the title is appropriate here. Most obvious big time sinks were found and tweaked a long time ago. Now, Shark tells me we're spending 1% of the time in this function. 2% in that function. In most cases, the tweak to make isn't obvious at all. Then you pull yourself back and say, wait a sec, I believe all 15 of these functions are all related. Why are they getting called? Do they have to be called? Can I avoid a call to sin or cos or sqrt which are all super slow?

Then you try an experiment: wait, if I simply cache the bezier path for each figure and maybe its rendered rectangular bounds so I don't compute it each time what'll happen? Zowee! I'm now avoiding tons of functions! What if I do smarter hit testing and distance calculations when users drag figures around? Zowee! More time is saved. What if I queue up all refreshes when a list is modified and do one big update instead of a jillion? Zowee! Zowee!

You get the idea.

After just a few of days of this, some operations, like adding a new, complex list item to a list which is sitting in a very complex idea space, went from (an embarrassing) 13 seconds down to almost immediately. Yeah, that's more like it!

We'll keep spelunking around in Shark of course as we've done all along. The joy of this job is that we truly love working on Curio. Features, fixes, and fine-tuning are all equally important to us, as is your feedback (nice alliteration!).

Take care and enjoy Curio 3.2.1!

Blog Subscription

Blog Search