VOODOO Flashback

When you’ve been involved in (or just been watching) an industry long enough, you begin to see cycles. Or maybe they’re just ideas which were ahead of their time and eventually have come to fruition. (You can stop your smirking right now, Smalltalk advocates.)

Since changing from CVS to Subversion, one of these possible cycles has been tickling my basal ganglia: The change from CVS’ “every file on its own revision schedule” to Subversion’s “one revision for the entire repository state” has been both a blessing and a confusion, but it also reminded me of a revision control system from the pages of MacTech magazine. A few days ago, I finally remembered a keyword (“orthogonal”) at the same moment I had some time to do a bit searching, and I found it: VOODOO. From the stale MacUpdate entry:

VOODOO Personal (Versions Of Outdated Documents Organized Orthogonally) is a stand-alone version control tool, with a neat graphical user interface. It offers simple and clear access for managing projects in which files evolve in numerous versions. The tool manages not only variants and revisions of single files, but of whole software projects (multiple files, multiple users, multiple variants, access rights, project structure, project history, etc.).

VOODOO differs from previous source code control systems in its orthogonal approach to version management. This means that for every component of a project hierarchy, you can not only store its revision history, but also different variants of the same component. The orthogonal organization of revisions and variants leads to a much clearer arrangement than in other tools which use trees for organizing variants and revisions.

VOODOO uses delta storage for storing different versions, which can yield savings of about 95% (up to 99%). It is not restricted to text files but also handles files of arbitrary type (desktop publishing documents, databases, libraries, applications, etc.)

I remember downloading a trial of VOODOO Personal and not grokking it, but I hadn’t even started using CVS at the time; was Subversion simply a descendent? Reading the afore-linked ATPM review and the Google Book Search text of Software Configuration Management, I’d have to conclude “no.” The terminology still seems generically confusing, and the perceived level of fiddlyness is still something of a barrier, even though many of the concepts (variants and freedom of file layout) are appealing.

It seems uni software plus no longer maintains VOODOO–not surprising given all the screenshots you’ll find online are chock full of Platinum window goodness–but I wonder if its absence isn’t just due to it riding a wormhole into the future.

NSArray and stringWithFormat:

The standard Cocoa method for a string with multiple replacements is [NSString stringWithFormat:]. To build a standard analogy string from the SATs:

	hand : palm :: foot : sole

you would break out each of the replaceable elements into separate strings and replace them in the format string with the placeholder ‘%@’. (There are many other format specifiers–look up printf()–but ‘%@’ is very common in Cocoa since it specifies an Objective-C object, not just a simple number or C null-terminated string.)

	NSString * format = @"%@ : %@ :: %@ : %@";

To create the desired string:

	NSString * myString =
	   [NSString stringWithFormat:format,
	                              @"hand",
	                              @"palm",
	                              @"foot",
	                              @"sole",
	                              nil];

If you want to create a different analogy string, just call stringWithFormat: again, using the same format string but different parameters following it.

The stringWithFormat: method takes a list of objects, and the nil parameter indicates the end of the list. If you want to manage the list of substitution parameters, though, you shouldn’t need that nil since NSArray knows how many elements it contains. Unfortunately, there isn’t a method like stringWithFormat: which takes an NSArray instead of a list of objects; there also doesn’t seem to be a simple way to convert the contents of an NSArray to a nil-terminated parameter list.

How then can you make this templating more dynamic at runtime by storing the list in an NSArray?

(Read the article)

Welcome to Corporation Unknown!

Well, here we go…

Corporation Unknown will serve to track the course of my progress to an intended career as an independent Mac software developer. No, I don’t hate my job (even though it’s not Mac development), but I do feel that this is the long-term path to my career happiness and further success. We will track milestones on the way to launch, and share insights gained along the way–both in business and code.

Obviously, there is a product planned; it’s not Web 2.0, and it’s not going to change the world as you know it (in version 1.0, at least). It will be easier to use than what’s out there, yet more powerful at the same time–and I already have plans for more powerful future versions.

Let us begin…

« Previous Page