We had a nice short vacation visiting friends in Campanha, in the interior of Minas Gerais, Brazil. This is a small town, almost equidistant from Rio de Janeiro, São Paulo and Belo Horizonte, and the main focus is coffee and tangerine plantations. I’ve posted 10 selected photos and maybe later I’ll post some more.

Meanwhile, I’m glad to report that XRay II is slowly getting back up to speed. I lost over 2 months doing premature optimization… yes, I should have known better, but it snuck up on me in the form of caching.

The file system browser in XRay 1.x was an afterthought, tacked on because I needed to check out many files to test. I used Apple’s SimpleBrowser sample code nearly as-is and only cached each item’s 16×16 icon. It worked amazingly well, but it didn’t react properly to events like volume mounting/unmounting and folders changing.

One of the first things I did for XRay II was to make a better browser. I also decided to use the same backend data structures for the browser and for the object that represented the file item being XRayed. Of course this meant that the icon had to be cached in each object, as well as the name, the FSRef, the pointer to the parent folder… then I thought, I’d also better cache catalog info results, metadata, etc. etc., as all this would be needed later. Soon this object grew like topsy, adding all sorts of interesting information about the file item, each added lazily whenever requested…

…but it turns out that it became increasingly complex to keep this back-end cache synchronized with the actual file system. In fact, everything I did to optimize the cache internally made it more difficult to do external synchronization.

So, over the last month I basically started out from scratch with the back-end and, as soon as possible, implemented mount/unmount modifications, and folder change notifications (using M. Uli Kusterer‘s excellent UKKQueue). It turns out that it’s basically unproductive to cache anything but the name and icon… except, of course, while an item is being XRayed.

More as it happens…