GraphicConverter can now re-compress multi-page TIFF files. It also does a good job of converting multi-page PDFs to TIFF format. This will make it much easier for me to archive my paper documents.
Archive for November 2004
Here’s another UI pet-peeve entry: source lists don’t belong in drawers.…The problem here is that the mailbox (source) list is not secondary to the usability of the product, unless you have only one inbox, no trash, draft or sent boxes, and zero folders! For most users, the source list in this drawer need to be visible all the time, because they’re integral to the workflow of using mail.
It was, I confess, a reaction to that terrible feeling you get when you’re faced with creating yet another NSTableView data source and delegate. I just couldn’t face another objectValueForTableColumn:blah:blah:whatever:.
and he likes them. I actually had the opposite reaction a few days ago. I was excited to use bindings, as I had already made the decision that the application would require Panther. I love the idea of bindings. And, indeed, bindings made it very easy to implement the basic functionality for the table. No datasource methods! No need to sort! Automatic updates! But the last 20% looked daunting. I needed typehead, editing and insertion validation that depended on objects outside of the row, control over when editing and deletion should be enabled, standard keyboard shortcuts that aren’t implemented by the framework, etc.
I started mapping out the subclasses I would need—you have to subclass to even know what the view objects are bound to—and how they would be hooked together, and decided that I could probably get it to do what I wanted to do, but that it just wasn’t worth it. There’s no sense in fighting the framework. Sure it’s kind of silly that I have to write
-numberOfRowsInTableView: yet again, but it’s also the simplest method in my class so it’s not a big deal if the framework can’t handle it automatically.
Another case where I ended up not using bindings was in a pop-up menu that needed to be populated from an array, but that also needed a few extra menu items. Bindings don’t seem to have been designed to handle that.
This is not to say that I don’t like bindings or that I won’t use them. Like
-takeStringValueFrom:, they make for a great demo, and sometimes they do exactly what you want (most likely for uneditable views). But they’re not as flexible as other means and are not always the right solution. As I write new code, I will keep looking for places where it looks like bindings will help, but I have no desire to convert my old code to use them. Aside from the extra work, I am convinced that in some cases it would make the code harder to understand and slower.
A final point: it’s not bindings or nothing. Developers can build their own helper objects that work with the standard datasource and delegate methods. These can provide some of the convenience of using bindings, but with easier customizability and more room to grow.
The idea behind the drawer is both interesting and attractive: it is an optional element that contains additional information, allowing users the choice of whether they want to display this information. But in practice it is an annoyance, since it neither functions correctly nor does it display as it should.
SpamSieve 2.2.2 adds support for Growl notifications, opens up some customizability for Apple Mail and Entourage users that was previously only available to AppleScripters, and includes the usual round of accuracy improvements, enhancements, and bug fixes.
The idea is simple: FireWire provides direct memory access. So I can plug in my PowerBook into an Xserve, and arbitrarily read and write to all of the Xserve’s RAM, sans any logical protection.…It took a couple of years, but the security community community eventually made this a little more high-profile. Their hook, of course, was the iPod. “Use an iPod to 0wn an Xserve” the cry went. Everything’s sexier if you can tie it to the iPod.
Jobs wanted to know how big we were, and how long we’ve been doing this. He wanted to know a few more things that I can’t even really remember. I remember he asked, “Do you have any other ideas for apps you want to work on?” I replied, genuinely, “Well, we’ve got an idea for a digital photo management program…” and he replied with a simple, “Yeah. Don’t do that one.” Everyone in the room laughed but I had no idea why—remember, my head was still exploding—so Steven Frank had to explain to me that he meant, basically, it was already being made and, of course, it would be called iPhoto. Oh. I get it now.
(via Steven Frank)
Hanaan Rosenthal has written a book about AppleScript:
Another book about AppleScript? No, not really; this is the book about AppleScript. There are enough books that either summarize the language or just touch on the basics; this one is written for real people who need to use AppleScript to get real things done.
This book starts from the scripter’s point of view. It is organized based on the way the scripter uses the language, and pulls together all aspects of the language that pertain to that subject.
My favorite AppleScript book is AppleScript: The Definitive Guide. It’s kind of like the Think Unix of AppleScript: it’s clear, concise, and gets you to think about the language in the right way. It doesn’t teach you how to do many specific things with AppleScript, but it gives you the proper foundation to solve new problems on your own.
But every cerebral book could use a good cookbook (e.g. Unix Power Tools) as a companion. I haven’t read it yet, but with 888 pages full of examples, perhaps that’s what Rosenthal’s book tries to be.
Comments on Delicious Library:
- John Siracusa
- Christopher Clark
- Erik Barzeski
- Sven-S. Porst
- It looks great, except for the wood.
- iSight and DV-cam barcode scanning: sounds cool, but I don’t have the hardware.
- In investigating how to get my existing data into it, I found that it’s not scriptable and there’s no documentation about the supported import formats (or anything else, for that matter, aside from the FAQ).
- The Details view doesn’t auto-complete like Address Book.
- It’s full of links to Amazon, but unfortunately can’t log in and import my purchase history.
- Not all the fields are searchable.
- It doesn’t remember my borrowers list between sessions. The borrowers are sorted by first name, rather than last name, and they don’t really scale up: the only way to find a particular borrower is to scroll through the list.
- There doesn’t seem to be a way to batch-assign metadata (such as location or owner), as in iTunes.
- I think it’s missing a field for My Category. I categorize items my own way, and I don’t want to use the Genre field for this, as it will get wiped out if I reload the data from Amazon. In fact, I think it needs support for labels and a bunch of custom fields.
- Overall reaction: nice, but I don’t know what I’d use it for.
- The Candy Apple: Buy Low, Sell High
- Bloggable: A Civil War of Attrition
- Segments: Slices from the Macintosh Life: My Mac OS X Switching Saga
- How To: Share Content Between Web Sites: Creating a Dynamic Hypernetwork Using PSS
- Cartoon: Cortland
- Cartoon: iTrolls
- Desktop Pictures: Ireland
- Frisky Freeware: Meteorologist
- Review: Waterfield Design Medium Cargo Suite Spot
- Review: FrogPad USB
- Review: IOGEAR and Dr. Bott KVMs
- Review: Nisus Writer Express 2.0
- Review: Stuffit Deluxe 9
- FAQ: Frequently Asked Questions
Icons in the Dock are a unique breed of proxies. When you drag them, they are not direct representations of the items themselves. But neither are they aliases, which is what they should be — and which is how app proxies are handled in third-party “dock” utilities such as DragThing.