CodeFactor: The Biological Parent of DataCrux

As my first "real" Cocoa project, I created a class outlining tool that could generate actual code files. This was a great learning project since it required me to get my hands dirty with NSOutlineView, file storage, drag-and-drop, and customizing table cells.

the CodeFactor main window:


The tool was already somewhat usable when I settled on the name "CodeFactor" and created an icon for it. This was supposed to be the first Tree House Ideas project. Then I heard some mumblings about people looking for a nice solution for database storage.

some early CodeFactor icons


the "final" CodeFactor icon


I already had quite a bit of experience with SQL, so this struck me as interesting. I looked at the source code for CodeFactor and realized that formatting user data for a database wasn't conceptually all that different than formatting it for code generation.

So I took a 90 degree turn and starting modifying the code to insert data into a SQLite database. Foruntately, Blackhole Media had released a little class called SQLDatabase, which was an easy front end to the C-based SQLite 2.x API. Although it was a relatively simple set of code, it was enough that I could just start sending commands to SQLite (never underestimate the impact of a small amount of effort!).

After getting a basic version working and creating an icon and a website, I released DataCrux beta 1. It didn't do a whole lot. There was no support for arrays or dictionaries -- only individual instances of objects. Technically, I have never released another "official" beta, but the framework grew by leaps and bounds over the next year or so.

As a side note, I suspect some people were surprised that DataCrux had an icon and a web site before it was really done. My feeling was that people wouldn't really "get" it unless there was some sort of visual representation. Abstract text-based descriptions just don't get the idea across. I think really paid off and made the whole thing more real.

A slight tangient on licenses -- I wasn't sure which open source license to go with initially. Like many people, I considered just going with GPL because it was the one I had heard the most about. A friend of mine explained how the GPL and BSD licenses differed.

After that discussion, I was sure I wanted to go with a BSD-style license. I simply wanted as many people as possible to have access to the code. The whole idea with the framework was to support independent developers trying to make a living. Releasing DataCrux under a GPL license would have hindered their ability to use it in software they designed and sold themselves, so I went with BSD.

A lot of people were curious why I didn't try to create a WebObjects clone. I actually had only very limited experienced with WebObjects. All DataCrux was meant to do was make it easy to insert objects into a database and retrieve them later, similar to NSKeyedArchiver. Like many things, it ended up growing far beyond its original intentions.

It turns out there were all sorts of requests for improvements right off the bat, and this kept me quite busy up until Core Data was announced. I actually knew Core Data was in development for some time prior to its introduction, but kept plugging away at DataCrux anyway, as there were enough people using it.

Also interesting is that DataCrux actually just barely escaped being named "Core Data" or "Data Core". Both were on the short list of names I had for final consideration.

I've stopped actively developing DataCrux myself, but there are some quite active users, and some have taken it upon themselves to make their own improvements. The DataCrux design itself has also lived on into another project I plan to talk about soon.
Design Element
CodeFactor: The Biological Parent of DataCrux
Posted Jul 6, 2005 — 0 comments below




 

Comments Temporarily Disabled

I had to temporarily disable comments due to spam. I'll re-enable them soon.





Copyright © Scott Stevenson 2004-2015