As I was drifting asleep last night I was fixated on my recent changes to LifeFlow, and thinking about how much joy I get out of using my software. There is something about using software and knowing exactly what it is doing that makes using it more fun for me. When you're sitting there and thinking "When I move my cursor out of this textarea it is performing an XMLRequest in the background to save the new changes." When you notice how slow the tags page is to load, and mutter absentmindedly about finally getting around to fixing the abysmal implementation.
Yes, I know about the evils of rewriting software that doesn't need to be rewritten, but the flexibility of knowing exactly what I need to do to add a new feature I want--or more efficient support for my personal workflow--these things really make using software more pleasurable for me.
To finish this entry, lets take a brief guided tour through the software that I have written that I use on a frequent basis. In chronological order:
The winter break of my senior year as an undergraduate I decided that I was going to really make an effort at writing a useful program using Common Lisp. As a student I was spending a lot of time taking notes, and thus DulyNoted interated into existance over the ensuing month.
I wrote it using Steel Banks Common Lisp, and the Ltk graphical toolkit (a Lisp interface to Wish/tk).
Its a simple enough app, but a fairly useful one. Everything is based on a simple tree structure. Each node can have associated text and any number of children. It saves tree structures using simple linked lists. Each node has its raw text, its children, and its formatting data saved. It applies the formatting data to the raw text each time it is loaded. (The text formatting aspects were certainly the most challenging parts, I think largely because I had a crucial misunderstanding about the tk text widgets, which it took me a long time to finally understand.)
It has a simple little module system for adding additional functionality, the example of which is a nice little "export to html" module I wrote that exports the node structure to interlinked webpages with all of the formatting intact.
I don't make a whole lot of use of this little project anymore, but I did use it to take notes for the last semester of college. It was my first program I wrote with enough functionality to actually use, so it holds a fond spot in my heart.
Unnamed Japanese Dictionary
The second program I wrote that I still use (and this one I use daily) is my Japanese dictionary app, which I tenatively named Nihongo Flow, but then realized that was probably a little sillier than I could stomach. Then again Unnamed Japanese Dictionary doesn't really scream out "buy me" either.
I wrote it using PyObjC on OSX 10.4. The database is the JMDict dictionary file parsed from XML into a SQLite3 database. It was my first PyObjC program, so it went through a few iterations before the code got coherent, and I would probably want to do a rewrite of most of the code before continuing work on it (although I'm off the PyObjC wagon at the moment since most of the work there seems to be tightly tied to OSX 10.5 which included PyObjC by default).
I wrote it during a two or three week span the Spring semester of my senior year of undergraduate.
It does English to Japanese lookups, and Japanese to English. Instead of asking you what language you want to use for lookup, it infers it (that is, ah, probably too snobby a word for this situation) by looking at the incoming text. If its in hiragana, katakana or kanji then it searchs J->E, if its in roman letters it searchs E->J. If I was still actively developing it I would have it evaluate incoming roman letters to search for romaji words and then search in both English and Japanese for those cases.
It does flashcards, vocabulary lists, tests, and a few other things. Its a pretty fully featured program, and was intended as an independent learning tool for people studying Japanese. Like I mentioned, I use this daily since I am living in Japan, and its a solid dictionary.
Another program that I use a lot, by far the most of anything I have written, is LifeFlow, which is the blogging software I use for this blog. I won't go on about it since I seem to spend a good bit of time talking about it already.
It has grown a whole lot over the course of its life, and is a fairly full featured blogging agent at this point. Soon with the completion of the LifeFlow Editor it will be a piece of software that I am pretty pleased with.
Using Your Own Software
What software do you use that you have written yourself? Do you think that using your own software is just an ego-trip, or is it sometimes a justifiable and reasonable thing to do? I'm curious to hear other people's thoughts about this.