Fake Steve Jobs Is On Form Tonight
2007-05-31

Fake Steve Jobs is a hilarious blog that is being written at a furious pace by an unknown writer even as D: All Things Digital is still going on. He's obviously spent considerable time in the UK and has a good knowledge of journalism and Silicon Valley. My money is on John Paczkowski, as proposed by Valley Wag.
|
Microsoft Surface: The Segway of Coffee Tables
2007-05-31

Microsoft announced their first sand table for grown-ups yesterday. The web site is all Flash, so that's an immediate black mark against it (I first thought it was called "buffering").
There have been several demos of this kind of technology on the web in the past few years. That it has taken six years to get from the technology demos that I have seen to this current technology demo is amazing. The original iPod was done in six months and the iPhone in two and a half years. Six years is two technology generations at least.
The real deal-killer is its fundamental ergonomic problem: you can't get your legs underneath it. The original product idea (see the pencil drawing in Origins on the web site) was just like a sand table -- deeper than a table but not uncomfortably so. But this one is a bath tub with a screen on top, so users either suffer from gorilla arm or dinosaur back. The people who are using it in the PR are grinning relentlessly to cover up the pain from their sore arms and aching backs.
A tabletop is actually a pretty bad environment for sharing and collaboration. It has no defined orientation. This means that you have competition among participants who try to out do each other in defining "up". The winner ends up with a haggle of people on their side and the losers are left to mentally rotate everything they see from their respective geometric wastelands. Even without the orientation problem, each participant also gets a different perspective and the table space becomes a hoarding area close to the dominant people. There is a reason we use whiteboards and computer screens in a vertical orientation: they are naturally placed, allow large audiences to share and view information comfortably, and don't suffer from the same degree of competition.
I suppose that the reason for the bath tub design is that there is a camera underneath (and possibly lighting and projection too) that is used to track the movements and recognize objects. The better approach is to build the light sensors into the screen as Apple has patented. The large depth quite substantially limits the places that the device could be used if it were wall-mounted. It simply has to be built in to a structure or mounted on its side like a huge CRT TV. Another challenge for any stand-alone device like this is getting power and data in and out. There will either have to be built-in power, or somebody gets the side with the wires. Venting the heat means that if the top is cool, someone gets warm air blowing at their legs. At least wireless links will rid it of the problem of networking.
Like the Segway, it's cool technology and well-implemented for some very limited applications. But also like the Segway and despite the maker's ideas, it won't change the way almost anyone does anything.
He's a Mac. And He's a PC
2007-05-29
In February I fantasized that Steve Jobs and Bill Gates could have some fun together when they meet at D: All Things Digital on May 30th. That's tomorrow, so let's see what happens.
Airport Extreme
2007-05-29

One of the new Apple Airport Extreme base stations now has a home in my computer closet --I mean literally - it is a closet. It's freeing up space, replacing some very old hardware, giving me a way of wirelessly connecting old devices, providing a Mac OS X computer for the kids, increasing my wireless network range, and centralizing a printer. All for $180.
My previous wireless network was based on an Airport Express operating in bridge mode. The Airport Express had a somewhat limited range, but the Airport Extreme gives a much stronger signal and does better against the 2.4MHz interference and other networks around here. The Airport Express will be pressed into service as a way of networking an older computer that lacks a wireless card, or connecting to the Brother printer if I move it.
A now ancient Linksys router connected the network to the internet via a DSL modem, but that is no longer needed. That also saves a huge power brick.
The largest space saving is in the exit of a G3 iMac DV. That used to be a server, but I don't need one any more. The Brother laser printer has a print server built in, so out goes that function. I no longer host anything from home, so no need for those services. The iMac is now running games. All my shared storage needs are met with a USB drive attached to the Airport Extreme. On the network the partitions look like separate shared disks on a server. Mounting the disks can either be done through the Finder or by a utility that uses Bonjour to automatically mount the disk when it is available. I had hoped that the two partitions on my disk could be configured in such a way that one would be public and one local, but that is not the case: the sharing settings are global. Either all the disks and partitions are available to the internet or none are.
The disk shares the USB port with a printer via a passive 4 port hub. That centralizes my HP color printer.
Set up was easy, but not so obvious in places. Initial configuration with the Airport Utility is straight forward, but you have to know to select Manual set up when you want to change more parameters later. I initially typed in an IP address incorrectly and the base station spotted the error and took me to the page where I could correct it. That was a nice touch.
I did have a hang up that required a reboot. Something happened to the USB disk, and the result was a frozen router. It is also inconvenient that the Airport Extreme must be rebooted to store any parameter change, even if it has nothing to do with communication. So my entire network and file sharing goes down for 20 seconds at a stretch. I am finding that my work PC laptop is much happier with the Airport Extreme than it was with the Linksys router. DHCP actually seems to work now and the weird delays and timeouts have gone.
Aperture: How Do I Manage Adjusting, Rating, and Keywording In The Field With A Small Hard Drive?
2007-05-27
I am a photographer and travel to various "Locations." I am having a workflow problem with Aperture and image storage. It seems to me that there is probably an easy fix either in Aperture or in modifying my workflow but the Apple discussion group is unable to grasp my problem. One kind responder pointed me to your site and so perhaps you would allow me to ask my question. While traveling I download from the camera to my laptop MacBook Pro each day. Dependent upon opportunities I sometimes need to download from the SD cards directly to a Wolverine battery operated hard drive while continuing to shoot. I then copy from the Wolverine to my MB Pro at the end of the day. I use Aperture to rate, cull, add keywords, put into projects etc etc. As the laptop's hard drive is too small to store all of my images i usually need to make additional DVD backups of my images and erase the files from my laptop. This is where the problem starts.
After I erase the master files the images and ratings etc still appear in Aperture but of course the images show as off line. Upon returning home I copy all of my images onto my eSATA hard drives (from DVD or from Wolverine). Now I want to have Aperture look for the master images on the eSATA drive and re connect, but cannot figure out how to do this. The only solution I have so far is to re do the rating, culling, keywords etc referencing the images on the eSATA drive and erase the older versions. This besides being time consuming is for me fraught with peril. My administrative skills are almost non existent.
You can reconnect the copied masters with the Referenced File Manager. I have an article that describes how to do this called Burning Masters To DVD and The Referenced File Manager. However, you can make all of this workflow faster and less perilous by working with complete projects rather than individual masters. And you won't have to go near the Referenced File Manager to do it.
As you import images into the Aperture library on your laptop, make the projects fairly small. Do your rating and sorting. When your laptop is too full, export these projects a few at a time.

You can check that the projects look OK by dropping them onto an open TextWrangler document and seeing if the expected files are present:

Looks good to me. Also check the size of the project in the Finder as a sanity check:

My project has 18 images of about 2.5MB each, so that looks right.
Burn as many as will fit onto a DVD, verify the DVD, and then delete the project in the Aperture library and empty the trash. Emptying the trash is necessary because the deleted masters in the projects will be moved there. Repeat with all the projects you want to move. You'll have to come up with a foolproof scheme for naming these projects so there is no chance of deleting the wrong thing.
Now when you get back into the office, just import the projects into Aperture's library. That's it. Mount the DVD and drag the projects to the library:

If you trust that the keywords coming in with the projects are well-behaved (ie match the scheme you are using, have the correct spelling etc.) then before importing the projects, unlock the keyword HUD by bringing it up with shift H and clicking the lock icon. This will give the newly-imported images the same keywords are are already used in the library. If you leave the keyword HUD locked, the imported keywords will be added to a separate keyword hierarchy called Imported Keywords and have to be merged later.
The big advantage of using projects to move images around is that they are self-contained. They include all the masters, versions, keywords, ratings, albums, adjustments, and everything else needed to work instantly as soon as they are put back into the library. They even contain thumbnails, so you won't have to wait for them to be regenerated once you are back in the office.
After I erase the master files the images and ratings etc still appear in Aperture but of course the images show as off line. Upon returning home I copy all of my images onto my eSATA hard drives (from DVD or from Wolverine). Now I want to have Aperture look for the master images on the eSATA drive and re connect, but cannot figure out how to do this. The only solution I have so far is to re do the rating, culling, keywords etc referencing the images on the eSATA drive and erase the older versions. This besides being time consuming is for me fraught with peril. My administrative skills are almost non existent.
You can reconnect the copied masters with the Referenced File Manager. I have an article that describes how to do this called Burning Masters To DVD and The Referenced File Manager. However, you can make all of this workflow faster and less perilous by working with complete projects rather than individual masters. And you won't have to go near the Referenced File Manager to do it.
As you import images into the Aperture library on your laptop, make the projects fairly small. Do your rating and sorting. When your laptop is too full, export these projects a few at a time.

You can check that the projects look OK by dropping them onto an open TextWrangler document and seeing if the expected files are present:

Looks good to me. Also check the size of the project in the Finder as a sanity check:

My project has 18 images of about 2.5MB each, so that looks right.
Burn as many as will fit onto a DVD, verify the DVD, and then delete the project in the Aperture library and empty the trash. Emptying the trash is necessary because the deleted masters in the projects will be moved there. Repeat with all the projects you want to move. You'll have to come up with a foolproof scheme for naming these projects so there is no chance of deleting the wrong thing.
Now when you get back into the office, just import the projects into Aperture's library. That's it. Mount the DVD and drag the projects to the library:

If you trust that the keywords coming in with the projects are well-behaved (ie match the scheme you are using, have the correct spelling etc.) then before importing the projects, unlock the keyword HUD by bringing it up with shift H and clicking the lock icon. This will give the newly-imported images the same keywords are are already used in the library. If you leave the keyword HUD locked, the imported keywords will be added to a separate keyword hierarchy called Imported Keywords and have to be merged later.
The big advantage of using projects to move images around is that they are self-contained. They include all the masters, versions, keywords, ratings, albums, adjustments, and everything else needed to work instantly as soon as they are put back into the library. They even contain thumbnails, so you won't have to wait for them to be regenerated once you are back in the office.
RapidWeaver 3.6 Released
2007-05-24

Realmac Software released RapidWeaver 3.6.0 today. RapidWeaver is just as it sounds: a quick way to make great web sites. I've been beta testing it for a while, and publishing this site with it for as long as it has been stable.
For a quick look at what it does and how it does it, see the intro video and quick-start guide on the tour page. The quick-start shows how to create a blog in five minutes. It really is that quick. Customization is possible both through the RapidWeaver interface and by adding and editing HTML, PHP, and CSS. But there is no need to get embroiled in the details if you don't want to. There are plenty of low-cost themes and plug-ins available.
Do You Recognize This Apple Mouse Pad?
2007-05-24
Aperture: Resources for Book Designs
2007-05-22

Mac:Method is selling Aperture book templates. The format that Apple uses in Aperture is not documented, but it is straight forward and easy to adapt and build on. There is always a risk that installing the next update will break this kind of add-on, at least for a short time while the developers catch up. [Update: A reader has informed me that Mac:Method had accepted his payment for one of these templates but had not provided them. Further investigation seems to show that Mac:Method is no longer in business, but Kagi is accepting payments through their site].
Another way to jazz up Aperture's books is with graphics, frames, textures, and backgrounds. Gina Miller sells all of these. Using the wash feature of Aperture's books backgrounds can be desaturated so they don't overpower the images. Here is an example of a coordinated kit that contains many elements that can be used together in a book:

In my own book examples I specifically took pictures of some things so that I could use them as backgrounds and textures. The result was the pebble background that I incorporated on some pages.
The Apple Product Lifecycle
2007-05-22

With the hype of the Apple iPhone in full swing and the stock reacting admirably, now is the time to recall the Apple Product Lifecycle. It all starts innocently enough:
An obscure component manufacturer somewhere in the Pacific Rim announces a major order for some bleeding-edge piece of technology that could conceivably become part of an expensive, digital-lifestyle-enhancing nerd toy.
Some hardware geek, the sort who actually reads press releases from obscure Pacific Rim component manufacturers, posts a link to the press release in a Mac Internet forum.
The Mac rumor sites spring into action. Liberally quoting “reliable” sources inside Cupertino, irrelevant “experts,” and each other, they quickly transform baseless speculation into widely accepted fact.
Eager Mac-heads fan the flames by flooding the Mac discussion forums with more groundless conjecture. Threads pop up around feature wish lists, favorite colors, and likely retail price points. In a matter of days, a third-hand, unsubstantiated rumor blossoms into a hand-held device that can do everything except find a girlfriend for a fat, smelly nerd...
Some hardware geek, the sort who actually reads press releases from obscure Pacific Rim component manufacturers, posts a link to the press release in a Mac Internet forum.
The Mac rumor sites spring into action. Liberally quoting “reliable” sources inside Cupertino, irrelevant “experts,” and each other, they quickly transform baseless speculation into widely accepted fact.
Eager Mac-heads fan the flames by flooding the Mac discussion forums with more groundless conjecture. Threads pop up around feature wish lists, favorite colors, and likely retail price points. In a matter of days, a third-hand, unsubstantiated rumor blossoms into a hand-held device that can do everything except find a girlfriend for a fat, smelly nerd...
Migrating Away From .Mac
2007-05-21
Apple's homepage.mac.com is nice to get started with, but don't do what I did and build a 130 page site on it. Migrating away from homepage.mac.com is painful: .htaccess files are not recognized, so there is no way to put a 301 permanent redirect on it. There is no custom 404, so any deleted pages just go to a generic Apple 404: no place to put a friendly message telling the user that all the content has moved. Google will now get all confused as it finds the content has gone.
So I'm replacing old pages with individual redirect pages, pretty much by hand. The one remaining problem is replacing more than 500 web pages that represent the permalinks for my home page. These are all in one place and I need to do exactly the same thing to each of them. I would welcome a script (shell, perl, python, Applescript, or anything else I can run) that does the following:
For each html file in the current directory:
Rename the file to "old"+currentfilename
Copy template file to currentfilename
Replace all occurrences of "zzz" in currentfilename with "currentfilename"
The template file is my redirect page. The string zzz in that template file completes a link to the new site.
Any takers?
So I'm replacing old pages with individual redirect pages, pretty much by hand. The one remaining problem is replacing more than 500 web pages that represent the permalinks for my home page. These are all in one place and I need to do exactly the same thing to each of them. I would welcome a script (shell, perl, python, Applescript, or anything else I can run) that does the following:
For each html file in the current directory:
Rename the file to "old"+currentfilename
Copy template file to currentfilename
Replace all occurrences of "zzz" in currentfilename with "currentfilename"
The template file is my redirect page. The string zzz in that template file completes a link to the new site.
Any takers?
http://www.bagelturf.com
2007-05-19
Since you are reading this, you have made it to the new site: http://www.bagelturf.com. All new content will be posted here, so please update your links, feeds, and bookmarks.
At the old http://homepage.mac.com/bagelturf/ site all the existing material is still available, but nothing will be updated.
The layout and content links are all exactly the same, so if you want to globally update your links, just replace "homepage.mac.com/bagelturf" with "www.bagelturf.com" and you should be good to go.
One difference between the sites is that I am now publishing with a beta copy of RapidWeaver 3.6. This results in the permalinks being the title of the post, not listed separately. You will also find that the archive and category links have meaningful names now.
At the old http://homepage.mac.com/bagelturf/ site all the existing material is still available, but nothing will be updated.
The layout and content links are all exactly the same, so if you want to globally update your links, just replace "homepage.mac.com/bagelturf" with "www.bagelturf.com" and you should be good to go.
One difference between the sites is that I am now publishing with a beta copy of RapidWeaver 3.6. This results in the permalinks being the title of the post, not listed separately. You will also find that the archive and category links have meaningful names now.
Aperture: How Do I Change The Color Of The Boxes In A Book?
2007-05-18

Great site of Aperture how-to's and tips. A question for you. In a book, special occasion template, how does one change the color of all those colored boxes? What are those boxes, If I drag one from one page to another the color seems to vanish, though the selection handles are still there.
Here is an example of the colored boxes in that theme:

The colored boxes in the Special Occasion book are defined in the Aperture application itself. They are part of the theme, and so unless you hack into the theme by opening up the Aperture application bundle and edit plists, you cannot change them. You can, however get rid of them and add your own without any hacking.
If you do want to hack, then open the Aperture application with a control click and select Show Package Contents. Navigate to the folder Contents > Resources > Book Themes > Special Occasion > Hardcover > Graphics and you will see that it holds the files that define the blue rectangle and other things:

The BlueRect plist file contains just this, as shown by the plist editor:

and can be easily modified. However any modification will be lost if you update Aperture, so this is not advised.
To replace the blue rectangles with your own creation, you will need a colored graphic. Just a plain color square made in PhotoShop or some other utility will work fine. Perhaps you have some already available.
Here is is how I do it with ImageWell. I launch ImageWell and click Edit and delete anything that is there by selecting it and pressing delete:

I click on the rounded rectangle top left and drag the rectangle onto the editing area:

And change the size using the numbers bottom left to something that is big enough for print, say 3000 x 3000 pixels. I click the small rectangle on the right just below the yellow rectangle in the image above:

This opens the color picker and lets me pick a nice color. I don't have to be particularly fussy with my choice as you will see. I also set the border width to zero by editing the number bottom right:

I click the ImageWell icon top left to go back to the main window and give the image a name. Then I click and drag the image to the desktop.

Now I have my green image I import it into Aperture (just dragging onto a project works) and then drag the Aperture thumbnail to my book album. Here it is:

In my book I change to editing the layout:

and click on the blue rectangle I want to change. A right-click and a Cut removes it:

To put in the color I want, I create a new photo box and drag in my color image:

And there it is in the book:

If I don't like it, I can always change it. I just click on the thumbnail image and adjust the color and lightness using the controls in the HUD:
Adjusting the thumbnail will affect all the boxes that show that same color image, so I can adjust the look of the whole book with just a few HUD sliders. I can work with multiple versions of the same starting image and adjust each of them independently to vary the color scheme in many ways. This same method can be used to set background colors and patterns as well, of course.
Aperture: View Your Library With A Web Browser
2007-05-16

This is really neat. John Hoogstrate has created a PHP-based system for browsing, filtering, and viewing Aperture libraries with a web browser called PHPture. It's open source and available at Source Forge . It uses SQLite to access the Aperture database and makes use of the high-resolution previews feature of Aperture 1.5 to display the images. It only ever reads the database so should be completely safe. Installation is not trivial since it needs PHP 5.
The design is very Aperture-like as you can see from the screen shot. An obvious application for this is when you have a number of people who need to be able to browse a library. Share it on the network or your machine and point PHPture at it. Multiple copies of Aperture are not needed.
It *does* need a new name though.
Purple and Brown
2007-05-16

Thirty-two Purple and Brown shorts in about 16 minutes. If the style reminds you of Aardman Studios, that's because it is Aardman Studios.
Aperture Plugin: Preparing For Localization
2007-05-14

Random Wok 1.0 is currently not localized: the only language it supports is English. Before I release the 1.1 version I am going to add translations for the languages that Aperture supports: French, German, and Japanese. This requires extra files in the plugin's bundle that provide the language information.
To prepare, I replace all the messages and strings that are generated by the program and are human-readable with macros that retrieve the localized version. Code like this:

is replaced by code like this:

I use the NSLocalizedStringWithDefaultValue macro because it allows me to provide a key (exporting-images in this case) that is not the same as the string Exporting Images.... It also supports use of a specific bundle. I need that because Random Wok is a plugin and otherwise Aperture's main bundle would be used.
Once I have replaced all the strings in my code with macros, I use the terminal to run the genstrings utility on all the source files in my project:

I get this entry in the text file Localizable.strings created by genstrings for the exporting-images string above:
To provide for other languages the Localizable.strings file is duplicated and the string on the right replaced by the translation. When the plugin is run, the correct language files in the bundle are accessed and the key used in the code (exporting-images) matched with the entry in the file. Since the file is encoded UTF-16, the right hand string can contain ASCII and any unicode characters.
There are two other sources of strings that I need to worry about for localization in my plugin. First, the nib file contains all the strings used in the interface and it is currently English-only. To fix that I will need a new nib file for each language and will probably have to adjust the placement of some interface elements due to the size of the new strings. Second, I have an image that is displayed when there is no thumbnail available that says "No Image". That will have to be replaced with a new image for each language.
Apple provides a tool for helping with the translation of nibs called nibtool. Nibtool used with the -L option extracts all the strings from a nib file and sends them to stdout. The Random Wok nib file generates entries like these:

As before, a translation replaces the right hand string. Nibtool is used again to replace the strings in copies of the nib file with the translated versions.
The other parts of this series can be found via the Cocoa page.
A New Mac Printer
2007-05-13

I actually have two of them. The first started to have printing problems and needed a good cleaning inside the optics to fix. But I found a secondhand one at Weird Stuff for $30 and it worked perfectly, only having ever printed 1200 pages. So I kept the first one for spares and carried on with the new one for another couple of years. Printer cartridges are available, but they are getting pricey, so recently when the toner started to run low I went searching for a replacement.
The result is that I now have a $100 laser printer that is a fraction of the weight, much, much faster, and takes cheap cartridges -- a Brother HL-2070N. It comes with a Mac driver and runs Ethernet or USB and has a print queue built in in case I ever need to talk to it with a PC.
It's not a Postscript printer like the Laserwriter, so the host does the RIPping. But that is OK. The host is much faster than the printer and the network is 100BaseT, so the result is that it beats the pants off the old one. The Mac driver installs and works just fine. The printer can be configured and monitored via a web browser. It isn't any good at printing photos. But again that's fine by me.
Any takers for two unwanted Apple Laserwriter Select 360s?
Canon Powershot S5 IS
2007-05-11

Canon has announced the Powershot S5 IS and dpreview has the details. It uses the DIGIC III processor, has a hot shoe, and a bigger flip screen. Now 8 megapixels in the sensor.
I have the Canon S3 IS and am planning to replace it next spring. Do I get an S5 or go for an DSLR?
Pro Application Support 4.0
2007-05-09
Pro Application Support 4.0 is now available from Apple. It updates various system components that are used by Aperture and other Pro Apps.
Why These Buttons?
2007-05-07

That's the top-level screen (or so we believe) for the iPhone. But why those buttons? It's really not all that different from any smartphone or PDA and I wonder why. Everything else about the device is revolutionary.
I see icons denoting services and tools, but none relating to people. Communication starts with a person, then with a selection of the method. iChat works like this. With iChat the method is easy to select because I can see if and how the person is currently connected. With the iPhone interface I have to select how first, then who. Which means that I have to know who has SMS, who has voice, and who has email right at this instant.
And what of incoming information? If someone urgently contacts me three ways, I don't know that. All I see are three items in different media: one phone message, one SMS message, and one email. From the top level which do I check first? How do I know these are all the same person?
What would I change? At least half of the main screen should be dedicated to people, either icons of individuals or groups (such as colleagues). Those icons should show me how many voice messages, SMS messages, notes, and anything else associated with that person I have currently, and should also show their availability. Some icons should be fixed, reserved for family members and colleagues who I communicate with regularly. The others should vary according to what messages I have. Having a small number of people icons available on the screen would also add a social twist to the iPhone: being on someone else's iPhone would be a badge of honor, getting bumped an embarrassment.
The design reinforces my opinion that the iPhone is destined to be more of a machine communication device than a human communication device. In other words, its ability to communicate with people is secondary to its ability to communicate with other devices. This may seem like an odd idea, but it is exactly what the iPod achieves with the support of a desktop computer and the iTunes music store: seamless communication of music. The iPhone really is a hand-held computer, an extension of the desktop, and of anything else connected to the internet.
CocoaHeads May 10: Write An Aperture Plug-In
2007-05-06

CocoaHeads on May 10th at the Apple campus in Cupertino features John Anon giving a presentation on writing Aperture Plug-Ins. More information on Scott Stevenson's site.
Aperture Plugin Writer Needed
2007-05-06

Fotki, a photo sharing and printing site, has contacted me looking for someone who can write an Aperture export plugin for their service. If you are interested, email mail me and I will forward to Fotki. I have some travel coming up, so you will not get a response for a few days.
Aperture Plugin: Problems With Arrays and Key Presses
2007-05-05

A problem that I encountered along the way as I implemented my cache was that any change to the data always caused the array controller to load all the elements. This was exactly what I was trying to avoid with a cache, yet it was happening.
After much hair-pulling (and posting to Apple's Cocoa mailing list) I figured that the array controller believed that my array (implemented by methods in my Random_Wok class) was immutable, and therefore any observed change must mean that the entire array had changed and so need a reload. The fix was to make the array controller believe that the array was mutable. To do this I added three more methods:

These are the mutable array methods. I didn't even have to write any code for them because they are never called. They are just there so that the array controller knows that my array is mutable and so will allow updates to individual elements.
Another problem I found that was while the Page Up and Page Down keys worked on the NSTableView, the Home and End keys did not. A little odd. To fix this I subclassed NSTableView and overrode -keyDown:.
I created a custom class called BTKeydownTableView and told Interface Builder to use it instead of NSTableView. Here is the interface:

The implementation is very simple. I read the first character from the event queue and act on it:

To scroll the window to the right place I tell the view to scroll to the first or last rows, as required.
The other parts of this series can be found via the Cocoa page.
A Great Guide To Buying A DSLR
2007-05-04
As seen on Daring Fireball, Philip Greenspun has a very clear and practical guide for anyone considering buying a digital SLR on his site photo.net. Lots of other useful material on the site to explore as well.
Simplicity Sells
2007-05-03

David Pogue talks (and sings) at TED about simplicity and its ability to sell. Will Shipley (articles 0, 1, 2, 3) and Thomas Dolby were there too (articles 1, 2).
Aperture Plugin: Caching Table Data
2007-05-02

Retrieving the thumbnail image and generating the text for the table is time-consuming and called very often by the array controller that is controlling the table of images. This results in very slow scrolling of my table. To solve this problem, I added caching; the idea being that repeated requests for the same data come out of memory and do so quickly.
Adding caching was relatively simple, at least to implement simply. Here is the code:

The cache needs a key to cache on. For this I turn the index number into a string and use that as the key. The cache itself is a mutable dictionary that holds dictionaries:
This stores the data I get from Aperture fine and the interface is fast again. But now I have another problem. When the random file name parameters are changed, the cached data becomes stale. So each time a change occurs, I must update the cached text:

And the cached images:

This code enumerates through the cached data replacing the cached text and thumbnail objects. Bindings take care of the table updates. -updateCachedFilenames is called whenever anything changes that could affect the file name, such as a change of alpha case:

-updateCachedImages is called when the type of image changes:

This all works well, and is how Random Wok 1.0 was released. But it still has a problem. The cache grows forever, eating memory as it goes. And as the cache grows, the time taken to update the cached data grows. What is really needed is a cache that throws away the oldest entry once it reaches a certain limit and more data is added. So that is what I implemented next.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Translations Needed
2007-05-01

My next release of Random Wok will be localized. Since Aperture supports English, French, German, and Japanese my plugin cannot successfully support any more languages than those.
Are there any readers interested in volunteering their language skills to this task? There are probably less than 20 translations needed in all, maybe 150 words total. I will provide plain text files for translation: there is no need to have XCode or any development tools.
The Bagelturf site welcomes Donations of any size


