A few days ago, Shigeru Harada of MacFreak contacted me with a strange problem: he was unable to schedule backups with SuperDuper. Every time he tried, he’d get an error that the script wouldn’t compile.
In the past, we’ve seen this when drives were named with slash characters, but his were quite normal.
After some back-and-forth, I had him take the script template we use, and try to compile it himself, in Script Editor. Shockingly—it failed to compile, and the problem didn’t make any sense.
If you’re familiar with the Japanese keyboard, the backslash key () is replaced by the symbol for the Yen (¥). Way back when, we did a Japanese version of BRIEF, so I was familiar with this phenomenon—paths would be separated by Yen symbols, but everything worked as expected.
But, in AppleScript, it seemed the backslash/yen “swap” completely prevented backslash from doing its normal thing, so this:
set the URL_A_chars to “$+!’,?;&@=#%><{}[]"~`^\|*()”
completely failed to compile, because it looked like this:
set the URL_A_chars to “$+!’,?;&@=#%><{}[]¥"~`^¥¥|*()”
and ¥ didn’t escape as you’d expect.
A huge surprise to me. I did find it discussed in one place (thank you Google and Takaaki Naganoya), and also a reference to bug fixes in Tiger (Backslash characters and Yen sign characters will now compile correctly when the primary language is set to Japanese. [3765766]), but it didn’t seem to be fixed for him—probably because he’s using Panther (which we need to support).
Anyway, workaround in hand, I modified the script to:
set quoteChar to ASCII character 34
set backslashChar to ASCII character 92
set the URL_A_chars to “$+!’,?;&@=#%><{}[]” & quoteChar & “~`^” & backslashChar & “|*()”
Here’s hoping it works… I hope it’s not a problem with chevrons («») too, because I have no idea how I’d work around
that one…
Small World Friday, June 23, 2006
A few weeks ago, Zabeth and I were sitting with Ketzl the evening after her last physical therapy appointment.
The session at Sterling Impression hadn’t gone well. As Ketzl has declined, we’ve adjusted her exercises, switching from treadmill to pool, eliminating e-stim when it no longer proved beneficial, etc.
As I’ve mentioned before, her decline has accelerated in the past few weeks, and she’s lost nearly all movement in her front legs now (her rear legs have been gone for a year or more). Given the amount of muscle wasting, we’d tried to adjust her life jacket and buoyancy to keep her head above water, supporting her as she did her laps.
She usually attacks the pool with enthusiasm, but this time was different. I don’t know if it was the person in the pool with her, or the life jacket, or that she didn’t feel that she could swim at all. Whatever it was, she was terrified. Wild-eyed, in full panic, doing her best to let me know. We quickly took her out of the pool, made some adjustments and managed to finish her swim session, distracting her with cookies, trying to finish it on a happy note.
But it was clear that swimming was no longer fun: it had crossed from rewarding work to a threat. I can’t bear to put her through it again, to see her so afraid, and so that phase is over.
Z and I talked about that and the things that brought her joy. Swimming was one of her happiest activities, one of the few independent ones she had left. And now, even that has been taken from her.
Her world—once filled with wonder and delight, with swimming and running, rolling and digging, the sights and smells of her dog playmates and other people—has shrunk again.
And still she holds her head up, and meets my gaze with her deep brown eyes, a flicker of defiance lighting them from within.
When does her world become too small to contain her huge spirit?
I/O Error Recovery Monday, June 19, 2006
I read Wolf’s I/O error treatise this morning (as well as Alaistair’s response), and thought I’d write a bit about how SuperDuper! actually handles I/O errors, and why. (In fact, this is an expansion and reworking of some email I dropped to Jonathan after reading the article.)
Although Wolf says otherwise, ditto isn’t our underlying engine. We use a variety of APIs in Cocoa and Carbon, augmented with much additional metadata copying. However, when we get a failure with those (such as an I/O error), we retry twice more: once with copyfile and once—just in case—with ditto, verifying after each one.
We do this because we’ve seen the rare case where one API fails but others do not. Weird, I know, but it happens.
If all three retries fail, we stop. This is done for safety: an I/O error could mean the drive is failing, and since you’re dealing with a live backup, it’s important to understand what’s going on. If a significant failure is occurring, steps should be taken to concentrate on recovering your user files, rather than trying to copy the whole drive. We don’t want a user (or SuperDuper!) to continue past the failure: we want them to stop, diagnose and—if necessary—get help. And since most users won’t know what to do (unlike Wolf or Alaistair, clearly), we make it really easy to contact support.
Our User’s Guide has a Troubleshooting section that helps a user determine whether the error is on the source or destination (I don’t explain there how to use the system log and a System Profiler report to locate the source, because it’s pretty obscure stuff—the amount of detail in our log is confusing enough for most), as well as general steps for recovery. But in most situations, 4K of 0s will pretty much be a fatal problem for the file. (I’m shocked, frankly, that Wolf’s Parallels disk was OK given the damage: he was very lucky.)
Most of the time, the problem is actually an iSight camera, iPod, or other bus-powered device misbehaving on the FireWire bus. On occasion, the problem is with the source.
Errors on the source are problematic. As Alastair mentions, modern disk controllers transparently relocate sectors when errors occur. Real problems happen when the drive’s out of spares, or when the on-disk error correction can’t handle the failure. And at this point, the drive has probably been silently failing for a while.
In many cases, SMART status will flag a drive that’s failing badly—SMART Reporter, a nice bit of freeware from Julian Mayer, can give you an obvious warning when this occurs, or even run a program (like SuperDuper!) to do a quick backup of critical files. But, often, it won’t, and experienced guidance and advice is necessary to help people understand what’s going on.
Anyway, as Wolf’s article indicates, and Alaistair agrees, it’s very difficult to continue in a way that ensures data is preserved as much as possible. It’s hard to know what really happened without being there, and an automated fix isn’t guaranteed. So, we’re super conservative. And while it’s obviously labor intensive, we think injecting a human into the process at this point provides the user with the best outcome.
Users often ask me for drive recommendations, and while I provide general suggestions for FireWire drives in the SuperDuper! User’s Guide, I haven’t suggested any Network Accessible Storage (NAS) devices, mostly because I haven’t been entirely happy with the ones I’ve tested.
In general, most NAS units are Linux-based, with a drive that’s formated as ext3, which allow a large sparse image to be stored on the drive. This works well with SuperDuper!, and lets us properly preserve permissions and metadata with full fidelity. Some, like the LaCie “mini” Ethernet drive, are shipped as FAT32, and need to be reformatted as ext3 (or HFS+, or NTFS) before they can be used.
I’ve tested the Buffalo Linkstation and Gigastation, the LaCie mini ethernet drive, the Linksys NLUS2, and a number of others, and while they all work reasonably well when configured properly, none have been recommendation-worthy.
The units I’ve tried in the past have all had very old AFP (Apple’s network protocol) support, old enough to not support files larger then 2GB or so (even though their file system could handle larger), mostly because they’re all based on an old version of Netatalk. SMB can be used instead, and that does work, but you have to know to do it… and most users don’t. This means their backups would fail in various weird ways.
On top of that, these NAS units are pretty insanely slow. Even the Gigastation, using Gigabit Ethernet, did an initial backup running at less than 1MB/s. This improved once the first copy was done, but it’s painful the first time through.
So… nothing to recommend.
Until now.
Over the last week or so, I’ve been doing extensive testing with the Terabyte version of Infrant’s ReadyNAS NV, and I’m very impressed: impressed enough to give it a big thumbs up.
The ReadyNAS linked above is a 4-drive X-RAID unit (which has four 250GB drives set up for fault tolerance and speed, using Seagate’s Nearline SATA drives which—like Maxtor’s MaxLine III drives—are designed to have a longer life and more heat tolerance than regular drives) in an attractive case, with GigE capability. Like its competitors, the ReadyNAS runs Linux, but unlike the others they’re fanatical about keeping things up to date, and support the most recent Netatalk, which properly handles large files.
On top of that, they’ve spent a lot of time optimizing the unit, and it actually delivers very good performance—I got about 5MB/s on a full copy-- far better than the others, even over AFP. (More AFP-specific optimizations are promised for the future, too.)
But the goodness doesn’t stop there. Infrant knows that their OS can do more than just serve up shared storage, and they’ve gone ahead and created a nice port of Slim Devices‘ SlimServer, which runs on the ReadyNAS and can serve music around the house, through real Squeezeboxen or the Softsqueeze player. (In fact, Slim Devices is offering a bundle of a terabyte ReadyNAS NV and two wireless Squeezeboxen for $1499.) Infrant also supports UPnP streaming, etc, so it’s likely to work with the solution you already have.
And since they have good AFP support, you can point iTunes to its media share, and rip directly to it. Nice!
The ReadyNAS is not inexpensive (although the 250GB, easily expanded one isn’t too bad), and you might wonder whether you should just get a Mac mini with a FireWire drive instead. While you certainly could do that, the RAID capabilities built into the ReadyNAS are invaluable when you’re dealing with critical data. Infrant has clearly designed their unit to be rugged and reliable, and that’s obviously important. A failing/failed drive can be hot swapped for a new one, so your data remains safe even in the event of that inevitability.
The only real downside of the Infrant—other than the expense—is that it’s got a fan. Heat is the enemy of hard disks, so it’s important for the fan to be there, and they’ve made it temperature sensitive so it only runs as fast as it needs to. But, it’s not silent (although it’s not that bad), so if that’s an issue, this isn’t the unit for you.
Otherwise, a very enthusiastic recommendation: Infrant has done some really great work here.
Great deal Thursday, June 15, 2006
I’ve written before about my Sony VGX-XL1 Media Center PC. One of its big advantages (other than near silence) is its 200-disc DVD changer, and you can chain up to five of them to host 1000 movies.
Well, Sony recently came out with a standalone version of the changer that works with any firewire capable Windows Media Center PC (including the XL1 and XL2), and Amazon now has the Sony VGP-XL1B2 Media Changer for $399, after a $100 (online submission) rebate. And shipping is free.
It’s a great price, a great device—and it’s currently selling amazingly well, at the #22 spot in Computers and Electronics.
I’m definitely ordering one!
Rowr! Sunday, June 11, 2006
Next week, we’ll be releasing v2.1.2 of SuperDuper with various improvements, including Growl support. I think you’re all going to like it.
We’d been investigating various methods of notifying users of successful and failed copies for some time, especially for users who are backing up headless or remote systems, and decided to leverage Growl’s well-tested and mature functionality rather than roll our own. It’s a nice package, and I’m glad it’s out there.
There’s a ton of flexibility built into Growl: you can show status visually with various types of floating panels and pop-ups, mail to any account, and even forward notifications to other machines on your network.
Putting this into SuperDuper! initially seemed pretty easy, but we ran into some unusual problems with our AppleScript-based “schedule driver” that I thought might prove interesting.
Obviously, we couldn’t require Growl—a 3rd party application—to be present on a user’s system. The idea here is to use Growl if present, not mandate it. But, our schedule driver—which can be extended by the user—is compiled “on-the-fly” when a schedule is created or modified.
But, while AppleScript has various techniques for dealing with a missing application or dictionary when running a compiled script, it really, really, really wants it to be present during compilation. So, a statement like
tell application “GrowlHelperApp”
notify with name “Scheduled Copy Succeeded” title “SuperDuper! Copy Succeeded” description “Copy was successful.” application name “SuperDuper!”
end tell
won’t work if GrowlHelperApp isn’t present on the User’s System. Drat.
AppleScript does, however, have something called “raw event syntax”. Basically, you pre-compile your statement, hand-compiling it into Apple Events. Thus:
tell application “GrowlHelperApp”
«event notifygr» given «class name»:"Scheduled Copy Succeeded”, «class titl»:"SuperDuper! Copy Succeeded”, «class desc»:"Copy was successful.”, «class appl»:"SuperDuper!"
end tell
But, this won’t work either: even though there’s nothing in the tell block that needs the dictionary, the tell itself will try to reference GrowlHelperApp, and fail. And if GrowlHelperApp is there, your AppleEvents will be magically transformed into AppleScript when you compile!
So, there’s no choice here—you have to have a tell block, or the events don’t go to the right application. But you can’t “tell” an application and have the compilation succeed if the user doesn’t have Growl installed! Or can you…
Fortunately, a little evil goes a long way in AppleScript. By using a string variable, rather than a string literal, we can prevent the compiler from loading the dictionary at compile time—and since we’re using raw event syntax, there’s no error. Thus:
set growlAppName to “GrowlHelperApp”
tell application growlAppName
«event notifygr» given «class name»:"Scheduled Copy Succeeded”, «class titl»:"SuperDuper! Copy Succeeded”, «class desc»:"Copy was successful.”, «class appl»:"SuperDuper!”
end tell
Bingo! This actually allowed compilation… and worked fine when tested in a simple script. But, in the real one, it didn’t work. Instead, I got the following runtime error:
Finder got an error: application “GrowlHelperApp” doesn’t understand the «event notifygr» message.
Now, of course, it does understand the message, because it worked in the simple case!
It took a while for me to figure it out, but the difference, was that in the real script, the Growl notification was in a nested tell block. And, even though the “nearest tell” is for GrowlHelperApp, for some reason this was seen as Finder’s GrowlHelperApp, rather than mine. (You’d think they’d be the same, but not so much.)
The solution, after much gnashing of teeth, was to explicitly reference the script’s main execution context, with:
set growlAppName to “GrowlHelperApp”
tell my application growlAppName
«event notifygr» given «class name»:"Scheduled Copy Succeeded”, «class titl»:"SuperDuper! Copy Succeeded”, «class desc»:"Copy was successful.”, «class appl»:"SuperDuper!”
end tell
I’m telling you, AppleScript has the unique ability to make me feel like the stupidest developer on the face of the earth. Kudos to you, AppleScript!
Anyway, expect this early this week…
Memory Sunday, May 28, 2006
Long term diseases—Ketzl, at 9, has had DM for 3 years, a third of her life—are tough on memory. Tough because now is so much more vivid than then. And when I remember Ketzl after her battle is finally over, I don’t want to forget the dog she was.
It’s been well over a year since Ketzl’s disease forced her into a wheelchair, and even that is coming to the end of its useful life. The progression seems to have reached a critical mass, and while just a month or so ago I mentioned Ketzl was having placement problems with her left front paw, the right has now succumbed as well.
But it wasn’t that long ago—just a few years—when Ketzl was a dog who loved—just loved—to run.
Ketzl and I would walk daily around town, sometimes at 80 Acres (Cat Rock Park), some conservation land a stone’s throw from my house, and sometimes around the Weston Reservoir.
As long as it wasn’t too hot, she’d attack the trail with enthusiasm, especially since she knew she’d get to wade in a pond, stream or pool somewhere along the way.
Half way around was always a good place to take a rest and dry off from the swim.
And, near the end, she’d race me to the end of the trail… and would always win.
Neither Ketzl nor I are good long-distance runners, but we loved sprinting together, dashing to the next interesting thing on the trail, or to the top of the next rise.
One of my very fondest memories of her comes after her second TPLO, near the end of 2001. Recovery complete, we finally were able to take our daily walks again. After the repair of a cruciate tear, you always wonder how much athletic function a dog will get back, so I was a bit nervous as we hit the trail and climbed our usual hill.
Ketzl did great going up, and after the crest, as we came down the other side, she gave me “the look” (see picture #2 above) at one of the places we’d always sprint—the look that said “I am so going to kick your ass again”. Challenge met, we set off at top speed, avoiding roots and rocks, curling around trees, pretty much neck and neck.
The trail forked slightly and, to avoid a downed tree, I took our usual left branch. Ketzl, though, had other ideas. A burst of speed and then—Oh!—she leapt up, over, and broke into the clearing ahead. I was flabbergasted. I’d never seen her do anything that before, ever… and waiting there in the grass, she looked at me as if it was nothing.
And that’s how I want to remember her: not now, near the end, with her body failing her, but then—at the peak of her physical ability—in mid leap, stretched out and soaring over that tree, ears back, finally able to fly.
My Robots Monday, May 15, 2006
When I was a kid, I used a bunch of string, clothespins and pulleys to rig up a gizmo that was supposed to automatically make my bed for me. The idea—which I think I got out of a book (Thanks, Jake!)—was to attach the string to the top of the sheet and blanket, then use pulleys to run it to the edge of the headboard. You then route the string to the bottom of the bed, et voilá: pull the strings in the morning, and your bed’s made!
Except it didn’t really work out that way. Not only did I get tied up in the strings (quite lucky I didn’t strangle myself), but honking the strings didn’t really make my bed. It just sort of pulled the sheet up. Definitely not the hardest part of a properly made bed.
It was an interesting try, though, and a learning experience: automation isn’t easy. It’s relatively easy to get some crude part of the activity done, but the devil’s in the details.
I think a lot of my interest in this stuff was sparked by William Pene du Bois’ book The Twenty-One Balloons (or Roald Dahl’s Charlie and the Chocolate Factory/Charlie and the Great Glass Elevator—or maybe even that great story There Will Come Soft Rains by Ray Bradbury), but whatever it was I’m fascinated by the concept of “automatic houses”, and always wondered if I’d live to see the day when household chores would be done with the push of a button, a glass of scotch, and a comfy chair.
I was pretty excited when Roomba came out a few years ago: they were clearly onto something, were paying attention to price points, and had extensive experience making more expensive robots for commercial and military use. Many improvements were made to their later generations, too, and they’ve now introduced a mop replacement, Scooba.
In parallel—or even before—Sweden’s Electrolux was working on their own robotic vacuum, which they presented to the world back in 1997. They released their first version—the Trilobite—in 2002 or so, followed by a significantly updated US version (also the Trilobite) in 2004, and Trilobite 2.0 in Europe at around the same time. Unlike iRobot, Electrolux wasn’t trying to hit a low price point; for them, the Trilobite is a technology showcase—and an example at what can be done with a mass-produced consumer product at the high end. (Dyson was working on something similar called the DC06, but abandoned the product, at least publicly, for performance reasons; other models, such as the Karcher are out as well, but I have no direct experience with them.)
It’s important to note that none of the robotic vacuums are going to Rosie-up your house. You will still have to use a regular vacuum every so often to do a deeper cleaning; if you dump a box of Quisp on the floor, they’re not going to dash out of their hole, clean it up, and run back. Instead, they’re intended to be used on a regular basis, doing general cleaning in between the times when you use a larger vacuum.
With those expectations in mind, here’s a comparison of the two. (I think this one of the longest posts I’ve written for this blog: sorry if it’s kinda boring, but I’m interested in this stuff.)
Roomba Scheduler - General Description
The Roomba Scheduler is iRobot’s current top-of-the-line model, with a street price of about $300 new. It’s quite similar to their “Discovery” model (priced $50 less), but—as the name implies—it can be scheduled to run automatically as desired.
Both the Scheduler and Discovery come with a docking station that charges the unit, and both will return to the charger at the end of their cleaning cycle.
It’s probably inaccurate to call the iRobot models “vacuums”. While they do have a small vacuum motor in them, their cleaning process is clearly patterned on a “floor and carpet sweeper” such as the Hoky or—given the spinning edge bush—the Leifheit Rotaro S. (There’s a thin, rotating “edge brush” at the front right that sweeps edge dirt toward the main brushes, much like the Leifheit.)
The Scheduler comes with an easily replaced NiMH battery pack, charger, two “virtual walls”, and various spares.
Overall, you can definitely tell Roomba units have been extensively cost reduced. The plastics, rubber, buttons etc are of reasonable but definitely not “high” quality. In the time I’ve had a Roomba, I’ve had to replace it twice due to failure. One failure was within three days of receipt, the other within a few months. Clearly, Roombas are not built to last, but they do come with a one year warranty. It takes a few weeks to get a replacement robot, should you need one. And, if you use a Roomba, you’ll probably need one.
Electrolux Trilobite (US Version - EL520A) - General Description
The US Trilobite EL520A is the only Trilobite available in this country, and streets as low as $1300. It cannot be scheduled automatically, but once turned on, it calculates the size of a room, and varies its cleaning time depending on what it finds.
Like the Roomba Scheduler, the Trilobite comes with a docking station that is placed along a wall, and the vacuum will return to the charger as needed. Unlike the Roomba, if the Trilobite runs out of juice in the middle of a cleaning cycle it will return to the charger and resume cleaning once full.
As you’d expect from Electrolux, the Trilobite has a real, rather strong (90W) vacuum, and relies on that—along with a beater bar with rubberized fins—for its cleaning.
The Trilobite comes with two internal NiMH battery packs (it switches between them automatically during operation), spare filters, and magnetic strips that can be used to prevent the robot from crossing room boundaries.
As mentioned above, Electrolux has released a new Trilobite in Europe—Trilobite 2.0 [ZA2]. The US model seems to have many, but not all, of the changes incorporated in 2.0—it’s more like Trilobite 1.8. Most notably, it has the redesigned fan, improved sensors, beater bar and the like. However, it lacks automatic scheduling and does not adjust its cleaning time based on the number of obstacles it encounters during the cleaning process. There may be other significant differences as well - there are reportedly over 200 changes from 1.0 to 2.0. I’ve tried to get more information from Electrolux without much success.
The Electrolux unit itself is beautifully manufactured. The plastics are of high quality, the industrial design—which resembles a horseshoe crab crossed with a trilobite—is witty and elegant. I’ve experienced no failures with my unit so far.
Roomba Scheduler - Operation
The Scheduler’s UI simple and easy to use: a power button and three operation mode buttons. The modes are:
- Spot - Spot cleaning moves around in a rough circle, and is designed to clean a dirt spot quickly
- Clean - Clean spends about an hour traversing the room, then returns to the dock
- Max - Max cleaning works like clean, but runs until the battery runs out
Any errors are communicated with flashing lights and “beep codes” that indicate the problem area. The unit also communicates effectively with “happy”, “sad” and “what have I gotten myself into” sounds that are witty and helpful.
Roomba primarily uses a front “bump” sensor to detect obstacles. On its right side, it has an infrared sensor that detects walls, and under the bump sensor’s lip it has a series of infrared sensors that detect stairs and other drops. Two wide, nubby, independently powered wheels with black rubber covers move the Discovery from place to place. A small vacuum is integrated into the rear dustbin
The Roomba seems to have a few basic behaviors: wall following, crossing the room diagonally, spiraling and various obstacle avoidance maneuvers. The robot usually starts with a spiral. When it encounters an obstacle (with its bump or stair sensors), it either “bounces” off diagonally, tries to go “around” it (if a chair leg or the like), or tracks it (a wall or corner).
In Clean and Max modes, the Roomba’s “dirt detector” notices when there’s over a certain amount of particulate matter passing some built-in sensors. When this occurs, the vacuum spends extra time circling that area.
These behaviors are mixed randomly. Due to the random element and careful basic behavior choices, most surfaces are covered during the cleaning period.
When it comes time to dock, the Roomba doesn’t seem to actively “seek” its dock. Instead, it continues its regular behavior until it intersects the IR beam emanating from the dock. When it finds that signal, it follows it until it reaches the charging base.
Electrolux Trilobite - Operation
The Trilobite has a small, graphical LCD screen that displays its UI. It also has four buttons: Power, Stop, a navigation button and a “Yes” button. It has three main cleaning modes:
- Normal - Normal mode measures the room size and calculates the amount of time necessary to clean it
- Quick - Quick skips the measurement phase and moves directly into a fixed-time cleaning mode
- Spot - Spot cleans a 10x10 area centered around the initial location
Other menu entries allow the fixed cleaning time and display language to be set. Any errors are displayed in the selected language on the LCD. Overall status is also communicated with various tunes much like the Roomba.
A large dustbin with a substantial filter is easily accessed under the top cover, which is released by a button at the rear of the unit. There’s a bump sensor at the front, but the Trilobite primarily uses its eight ultrasonic sensors, four pointing at about a 45 degree angle up, and four pointing out, to sense its environment. There are three additional infrared sensors on the bottom bumper, and additional sensors under its front lip. Two independently powered, narrow but large diameter wheels with clear urethane covers move it from place to place.
Like the Roomba, the Trilobite has a number of basic behaviors it combines during the cleaning process. In normal mode, it first uses a counter-clockwise wall-following to determine the size of the room. Once it re-encounters its dock, it moves into a cleaning mode.
In cleaning mode, the Trilobite makes diagonal runs, avoiding obstacles and changing speed and behavior depending on what it detects in the room. For example, if it encounters something it considers to be living (like a dog), it quickly “leaps back” to avoid it. If it approaches a “hard” object, it slows as it approaches, stops a fraction of an inch from its surface, and goes around. Steps are detected and avoided as expected.
Interestingly, the upward-facing ultrasonic sensors are used to detect when the Trilobite is under an object, like a bed. The sensors detect the boundaries of the object, and the vacuum uses that to ensure sufficient time is spent cleaning under it.
As with the Roomba, the Trilobite doesn’t really know where it has and hasn’t been, and it relies on a certain amount of randomness and time to ensure it’s covered the surface to be cleaned.
Docking behavior uses the wall-following technique, and moves in a counter-clockwise direction around the room until it encounters the dock. If the battery is depleted during a cleaning cycle, the Trilobite will locate its dock, charge, undock and complete the cycle.
Cleaning and clean-up
Overall, the Roomba and Trilobite do a pretty similar job cleaning a room. Neither “deep cleans” like a powerful vacuum with a beater bar (although the Trilobite gives it a try), but both manage to tidy things up nicely, rarely leaving a “missed” area.
Edging Performance
The Roomba definitely does a better job cleaning edges than the Trilobite. Part of this is due to the Roomba’s “edge brush”, which sweeps fluff and the like into the main brush’s path. But it’s also due to the fact that the Roomba bashes into edges, and doesn’t attempt to avoid contact with them. Although this does allow it to get closer to the wall, it has its downsides: my Roomba’s bumper is often smudged with paint it’s scraped off a baseboard or wall bottom, and this tendency isn’t helped by the sharp mold line on the bumper that’s right at the primary contact point. Should a wall be followed on the Roomba’s left, rather than its right (where the IR sensor is), near constant contact is made along the entire length of the wall.
The Trilobite does a reasonable job with edges (it makes a full, “edging” pass of the entire room during the measurement phase), but does not get as close—there’s probably 1/2” at the very edge that’s not directly cleaned.
Room Preparation
With the Roomba, it’s absolutely critical that all cords and delicate objects be moved before the cleaning takes place. All Roomba units are hungry for string, electrical cords, speaker wire and carpet fringe. Unfortunately, these items just don’t agree with its sensitive digestion and quickly get sucked in and tangled around the edge brush, main brush or rubber roller. When this happens, it plays a sad, sad song to apologize for the appliance it pulled onto the floor. It didn’t mean to be bad—it was just made that way!
The Trilobite, on the other hand, deals with most items—cords, fringe, even small objects—with aplomb. You wouldn’t want to leave a pile of papers or a magazine on the ground—both units will “read” them into bits—but a generally tidy room is easily handled by the Trilobite without any special care.
Both units have a way of preventing the robot from leaving a given area. The Roomba comes with two “virtual walls” that broadcast an infrared beam that the device detects and won’t cross. The Trilobite comes with a magnetic strip that can be temporarily or permanently installed that accomplishes the same thing.
I’ve found it’s far more important to “block” the Roomba into a space than it is to do so with the Trilobite. If the Roomba leaves a single room area, it’s unlikely to make it back to its dock, and will not clean the space effectively. Not so with the Trilobite: in our open plan house, the Trilobite can be switched on and will clean our lower level in one go, including entering the kitchen area, living space, reading area and the like. It needs to charge at the midpoint or so, but it does accomplish the task.
After Cleaning - Robot Needs Help!
In an ideal world, a robot vacuum wouldn’t just automatically top up its power tank—it’d empty its dust bin and take out the trash. Alas, this task is left to you, and there’s a pretty significant difference between the two units, especially if you have a pet with long hair (example: Ketzl, our Bernese Mountain Dog).
Dust Bins
The “dust bins” of both units are easy to remove. Roomba’s rear-mounted bin is designed in a “floor sweeper” kind of way, and it’s hard to avoid dumping fine dust and dirt on the floor when removing it. Once done, it’s easy to shake out particulate matter: you then disassemble part of the lower area where lint gathers by the vacuum filter. The Roomba’s bin isn’t very large, and should be emptied on a regular basis—if you’ve scheduled it to vacuum daily, I’d suggest checking it every few days, depending on the environment.
Trilobite has a large (1.2 Qt) sealed, plastic bin. Dust does not escape from it when it’s disconnected from the main unit: a flap closes over the intake, and the other end is covered by a microfiber filter that’s held closed by a magnetic cover: once open, dirt, fluff, etc is easily shaken into the trash. The 1/2” thick filter traps fine dust and should be replaced when necessary (as with most normal vacuums). The Trilobite automatically signals when the bin is full.
Brushes
Roomba’s brush mechanism must be disassembled and cleaned on a regular basis, and—in the “dog” case—gets seriously bound up with hair. The hair wraps itself around the brush, bearings and rubber bar, and requires a significant amount of time to cut, pull and remove.
Although newer models are easily disassembled (early Roombas required a screwdriver), hair can—and does—tie itself around the bushing on one side of the brush and bar, and—when present in sufficient quantity it’ll literally cause the plastic bearing cover to melt, deform and destroy itself. No doubt this is a known problem: a spare brush is supplied with the unit, as is a Roomba “cleaning tool” that has a razor blade and probe that makes the cleaning process easier. Even with that, it can take 20 minutes to clean the Roomba after it’s spent an hour vacuuming a room.
The Trilobite—since it relies primarily on its vacuum, rather than a brush—doesn’t have the same hair problem. Its bar occasionally gets a small amount of hair around it, but it’s made of aluminum (with urethane-looking fins) and doesn’t self-destruct. It’s easily cleaned when it needs to be, which isn’t very often.
Summary
The Roomba and Trilobite achieve their design goals in a broad sense: they automatically vacuum a room, and do a pretty good job of it. But a closer look reveals design differences and compromises that seriously impact the long term “live-with-it” factor that one must deal with after the initial “cool!” factor wears off.
Both are fascinating to watch do their thing, the Trilobite more so due to the intelligent behaviors it exhibits and the mechanical grace it shows in its movements (watching it carefully pick its way out of a jam, climb up onto a rug, pay special attention to under a bed, dock or follow a complex perimiter really shows what a good job Electrolux’s programmers did). The Roomba feels far more brute force as it bashes its way around the room at full speed (despite the fact that both devices rely on random-walk base behavior), but does an good job despite its lack of finesse.
It’s hard to emphasize this kind of thing enough, though. The more elegant approach of the Trilobite is a big advantage i. With the Roomba, as you watch it, you’re amazed it managed to do what it does at all. With the Trilobite, you’re surprised how well, cleverly, and carefully it performs its task. (This has its downside, too—expectations are very high given the overall “quality” impression and high price: when the Trilobite screws up, it’s harder to understand/forgive its failing. Maybe it needs to play a sadder song.)
At $300 for the top of the line model, Roomba is much, much more affordable, and its scheduling capability is handy (though not as handy as it could be with a larger, less messy bin). In a small, easily-blocked off, cord-free room without fringed rugs or hair, and rugged surroundings that don’t mind extensive “bump” contact, it does a good job. If you stay on top of its maintenance challenges—a significant timesink if you have a long-haired pet—it’ll serve its purpose admirably, although I have serious concerns about its longer term durability.
For me, though, the Trilobite is the clear winner. Its “no contact” approach works much better in most areas in my house, and its general charging and cleaning behaviors are better suited to an open plan space. It’s “vacuum-based” operation requires far less setup and maintenance with a pet in residence, and in that—and its overall elegance—it proves to be something that can be “lived with”, long term, with minimal compromise.
Luminous Love Tuesday, May 09, 2006
It looks like Michael Barrish of Luminous has something important to say:
I love SuperDuper and I don’t care who knows.
Awww. So cute!
(Thanks for the public display of affection, Michael!)