They come in all shapes and sizes, big ones, little ones, quiet ones, and loud ones. They come when you least expect them, and when you most expect them. They can ruin your next two minutes, your day, or, if you're unlucky and stupid, your professional life. I speak, of course, of the crash, the conflict, the bomb, or the bug. My Macintosh takes a long time to start up due to the way I have it configured, so even though I test a lot of software, I still detest crashing needlessly. I almost never lose data because I save frequently, back up frequently, and generally take precautions.
But, as much as I hate the single crash because there's nothing I can do about it, I really hate multiple, reproducible crashes. Crash on me once, no big deal, crash on me twice and it's time to waste some more of my valuable time figuring out why. In the past, I would usually attribute the crash to an extension, stare at my list for a long time while analyzing what the crash might have been related to, and then shut one off. Usually I was right; sometimes I was way off. Those missed guesses were the pits because then I had to turn off half the extensions, test, change the set of active extensions based on the test, and repeat ad nauseam, which is Latin for "until you head butt the screen."
Enter Jeff Robbin's Conflict Catcher, released last year by Casady & Greene. It did a bang up job of taking over the mindless tedium of turning extensions on and off and testing for conflicts. Unfortunately, it was a thoroughly mediocre extension manager. It didn't have the fancy features we now expect in an extension manager, in part because adding links and the like would increase the complexity of the conflict testing algorithm immensely.
Never one to shrink from increased complexity, Jeff set out next to place Conflict Catcher at the top of the extension manager heap, and from what I've seen, the latest release, Conflict Catcher II, meets that goal. I'll try to cover all the major features.
Conflict Catcher allows you to create sets of extensions, Control Panels, System Extensions (the ones loose in the System Folder, including items like MacsBug and other extensions that have to load before Conflict Catcher itself), startup items, and even, if you run System 7.1, fonts. (From now on, I will refer to the lot of them as "extensions" unless I have to address one type specifically.) You wouldn't necessarily want to replace Suitcase with Conflict Catcher, but it can load and unload fonts at startup, which can be useful when tracking printing problems (see TidBITS #172). Incidentally, enabled extensions are highlighted; disabled extensions aren't - I far prefer this to the method of double-clicking on one to check it. And for those of you who care, Conflict Catcher moves extensions into disabled folders rather than change their file types.
Usage -- You can view extensions by Name, Type, Order, or Info - the first two of which are self-explanatory. In Order mode you can reorder extensions simply by dragging them around in the list, and in Info view, clicking on an extension displays its version, location, creator and type, System Memory, and High Memory. When in Info mode, you can delete extensions or open them from within Conflict Catcher. This is a handy method of figuring out what disabled extensions you have lying around that should be thrown out. You can often avoid switching view modes by using click shortcuts. If you shift-click on an extension, Conflict Catcher locks it on for conflict testing (I also lock things like MODE32 and Memory on permanently, since I never want them turned off), but if you option-click, Conflict Catcher displays the information about the extension, just as though you were in Info view. If you command-click, Conflict Catcher opens the extension as though you had done so in the Finder.
Various buttons to the left of the scrolling list provide useful utility functions. In Order view, a Sort button restores the default loading order, and in Info view, that button changes to Open to enable you to open the selected extension. Next are Enable All and Disable All buttons, which are handy to have at times, but more commonly you want to enable or disable all the startup items, or all the fonts, for instance. Jeff added a clever feature that allows you to click on the title of a section in the scrolling list, Fonts for instance, to enable or disable just the fonts. Below those buttons live the Conflict Test and Links buttons, which I'll explain further below. Finally we have the Report button, which creates a detailed system report for you, which can aid developers in tracking down conflicts when you report bugs, the online help button (Conflict Catcher also sports extremely good balloon help), and the Prefs button, for customizing functions like whether or not you want to recognize the Fonts folder and for turning off some options to ensure that Conflict Catcher doesn't patch any traps or cause any conflicts itself.
At the top of the scrolling list of extensions (which can be increased in size by resizing the entire Control Panel window), Conflict Catcher can show estimated memory use for the currently selected set of extensions. No more going through loop of checking About This Macintosh, turning an extension on, and rebooting to determine how much RAM a specific set of extensions uses. You can turn balloon help on with a button up there too, and to the left is a pop-up menu that lets you create, switch between, and assign startup keys to sets of extensions. So for instance, I have a set of extensions that loads MODE32 and the CD-ROM extensions but nothing else so I can play The Journeyman Project, Presto Studios' amazing but sluggish CD-ROM based game that prefers 16 MB of RAM in its fastest configuration. I can restart my machine and hold down the J key to use that set without fussing with any dialogs or anything else. I'm sure you see the utility of sets, but Conflict Catcher does have one neat idea here. It has a default set called Original Settings, which reflects the current state of your extensions when you open Conflict Catcher. If you accidentally Enable All, for instance, selecting the Original Settings set reverts to the original settings. The only slight problem I've found with this is that sometimes I wish to change a set when Original Settings comes up, which requires that I select the set, then make my changes - merely a quibble.
Links -- The Link feature is a major step up from the previous version of Conflict Catcher. You can now create Grouped, Incompatible, and Force Order links using any of the extensions you have on your Mac or any that you can specify through the use of an Add Custom File button. Conflict Catcher ships with six standard links for handling things like various different screen savers, font utilities, and the like, where you don't want more than one on at a time. Four buttons allow you to Create, Remove, Import, and Export links, and a pop-up menu lets you select existing links and edit them. Be careful with links, though, because although logical, they can work in unexpected ways. For instance, if you Group link (so if one is on, the other is also on) a Control Panel and a startup item such as MacTCP and InterSLIP Setup, if you then turn off all the startup items by clicking on the title in the list, the MacTCP will also be turned off, which may not be what you wanted.
Conflict testing -- The Conflict Test feature of Conflict Catcher is in many ways devilishly simple. If you are experiencing a reproducible phenomenon (it doesn't have to be a bug - it might just be strange hard drive accesses, but it must be reproducible or you'll be chasing ghosts), you can click on the Conflict Test button to start the test. Conflict Catcher first asks you to lock any extensions that must remain on, an essential step. For instance, if I was testing a problem with a program compressed by AutoDoubler, I would want to lock AutoDoubler on to make sure I could always access the program (without first expanding the program with DDExpand, which might change the test). I also sometimes use the lock feature to give Conflict Catcher an environment which must exist - the set of extensions without which I can't work in normal life, since I know those extensions work, and if there's a conflict with a new one, the new one must go.
Once you lock on necessary extensions, you restart the Mac and the conflict test begins. I won't bore you with details of the algorithm, not that I know many, but suffice it to say that Conflict Catcher does what a smart, but ignorant, person would do, in that it turns sets of extensions on and off at different times to create different testing environments. The only exception to this is that the first time it turns everything off to ensure that an extension is causing the problem. This technique proved useful recently, when PageMaker 4.2 crashed every time I opened the Define Colors dialog. When I ran a conflict test, Conflict Catcher informed me after one restart that the problem wasn't with any of my extensions, but might be related to 32-bit addressing or virtual memory. That immediately pointed at the 32-bit Enabler, and switching to MODE32 instantly solved the problem.
In normal use, though, you have to go through a series of restarts. First you test the problem to see if it occurs using that set of extensions, then you restart. Conflict Catcher asks you if the problem existed that time or not, and you repeat the process after answering. The number of restarts varies by the number of extensions you have, but it's never excessive. The important part of this process is that you verify the situation each time, since there's no way an automated program could do that (so why try?) and you have to answer the question accurately each restart. If you forget the answer, you can have Conflict Catcher redo the last set.
One of the important facts about the conflict testing is that it works on your system, with what you run, no matter whether it's commercial, shareware, or a freeware extension you just picked up. Unlike Help and some similar programs, Conflict Catcher doesn't worry about a database or anything like that which would be inherently flawed. It simply does what you could do if you had unlimited time and patience.
Other touches -- There's a lot to like in Conflict Catcher II. For instance, even though Now Startup Manager moves extensions into disabled folders, it keeps a list of them separately, which means that you can't manually move extensions in and out of those folders behind its back. Conflict Catcher doesn't care about that at all, so you can manually turn things off by moving them into the appropriate disabled folder. The trade-off is that Conflict Catcher is a bit slower to load, particularly if you have a ton of extensions for it to track each time you open it. I'm willing to take that small speed hit in exchange for being able to move extensions in the Finder though. In addition, if you use Startup Manager already, or another extension manager that uses the "Extensions (disabled)" method of storing disabled extensions, Conflict Catcher can step right in and use your current setup.
One of Conflict Catcher's best features is hidden deep in the preferences. A checkbox labeled Recognize Aliases, when checked, allows Conflict Catcher to load extensions from aliases, rather than requiring the original extension. This has two main uses. First, you can load extensions over a network, so a network manager can keep one updated version available at all times rather than hassle with a bunch of different versions of popular extensions. Also, if you have a small boot disk (like a floppy), you can load more extensions than fit on your floppy. But the coolest use for loading extensions via alias will delight some PowerBook users. If, like me, you boot from a RAM disk, you can keep copies of your extensions only on the hard disk, which allows you to effectively shrink the size of your RAM disk, making more RAM available for programs without losing any functionality. That's way cool. The only caveat to this method is that your hard disk will spin up seemingly randomly a bit more often, since every time an extension wants to look at its file, it must look on the hard drive rather than on the RAM disk. This technique allowed me to save something like 800K of RAM disk size and is a major plus in Conflict Catcher's favor. Note that not all extensions will allow themselves to be loaded via alias, although Super Boomerang is the only exception I've found so far.
Conflict Catcher costs about $50 from the usual suspects and pays for itself the first time it catches a conflict that wouldn't have been immediately obvious (and there's no reason you have to use a conflict test if you think you know what the problem is, although a conflict test can help identify two or three way conflicts a person would be hard pressed to find). Jeff has posted a demo version to <sumex-aim.stanford.edu>, but given their backlog on posting new files, it may take a while to show up. Highly recommended.
Casady & Greene -- 408/484-9228 -- 408/484-9218 (fax)