Friday, July 21, 2006

DocDesignr

This program actually started it's life for me in an IRC channel. Back in the days of yore, the Extropians mailing list had a few IRC chats to try and stimulate interaction. In it, Eliezer expressed his frustration that there was no tool to help him with his personal documentation for his projects. He described a light, outlining text editor that could handle the complicated relationships that exist in a large, interdependent project. Now, there are a number display technologies for this sort of thing, given a pre-existing ontology, or semantic network, or similar, but nothing to actually aid in the production of a document like this.

I was struck by how many of my own ideas had the same network structure, and the seemingly shocking absence of any tool of this kind.

I decided to write the program. At the time I only had a small amount of experience programming, but I was confident I could learn what I needed to in the process. Eliezer wrote up a spec(which is still on that sourceforge site) and I started learning about Mozilla XUL applications.(the chosen platform).

I probably worked about a month of honest days on the program. It was much harder going than I had expected, and I tended to take what excuses I could to avoid the issues for days at a time. At the time I didn't really understand source-control, which is why the sourceforge project is empty. After a few months of painful days in between my regular jobs and other activities, I'd basically managed to design the file format, a basic browser, and some of the UI elements, and was having problems with the javascript (which is how Mozilla handled program logic at the time).

It was at this point that the (only!) copy I had was lost to me, along with my notes and attendant files(in fact, I lost everything at that point, diaries and journals, and datafiles, and god knows how much else). This effectively killed any desire I had to work on the project, as I was now consumed trying to reconstruct my personal files. (I probably lost between 2 and 5 megabytes of plain text files I'd written, and innumerable stubs and outlines of other ideas. I felt as if half my brain had fallen out). So I made my apologies to Eliezer and left the idea to rot. It only took about a year for it to come back.

My friend Tavish came to me with a proposition to join his nascent business effort. They wanted to build a publishing program that would transparent substitution and templating far beyond what was available. Originally the idea started as a way to rapidly put together documentation, but in brainstorming sessions it grew far beyond that, until it was a wonder tool, allowing for multiple representations of the same document, for automatic outlining, for multiple levels of description. I saw it as a chance for redemption, and built a relatively solid xml format based on our ideas, (and allowing for some of my old ones). I don't really know what I expected, but the company slowly died a death of lack of motivation and work being done. We never officially ended the effort, because we really didn't need to.

After this point, I left DocDesignr in my head. I wrote drabbles of use-cases to myself sometimes, or imagined using the tool to explore an engineering design I was struggling with, but I didn't do any more concrete work on it.

Today, DocDesignr is still very clear to me. Any design project of nontrivial size could use it. The essential insight is that designs consist of object-like chunks of functionality and description, that we link together in our minds, via distinct mechanisms. All the portions of an internal combustion engine relate to each other in a particular way with regards to mechanical stress, and in a very different way in regards to heat dissipation, although you would use the same words to describe an individual part in each case(mostly). If you were then describing a time-slice of engine operation, you would want to actually connect each item in your narrative to the previous relationships, because they may be significant.

As far as I know, no real alternative yet exists. There are some academic semantic relationship engines (which are designed mostly for tokens and suggestive sentences), and there are what are called mind mapping, or network browsers. Neither really fit the bill for me, and so occasionally I consider restarting work on it, being reminded whenever I see a particularly clever XML format, or WYSIWYG uml modeler, or see that there are new python bindings for GTK. Or as happened last week, a coworker spends a while messing about with Protege(an ontology editor).

Sooner or later, I'll become annoyed enough to write it, (or as the cost to write it continues to go down, it'll become too easy to avoid). I'm still waiting for someone else to do it, because I'm not very good at actually spending the time to iron out a program enough for general use(I'd end up just getting used to my own version and avoiding hacking it anymore).

No comments: