This week, I've been working on Author Intrusion. Mostly I've been inspired by some things at WisCon, but it is also a simple fact I've been talking about this for two years and never getting anywhere. Since I'm not in the mood to write creatively because of everything else going on, I decided to obsess about the program instead.
I've actually got some pretty good progress so far, but I'm still 2-3 weeks from reaching a limited release of 0.1.0.
The ideas are fairly simple, I'm trying to write what is effectively an IDE (like Visual Studio 2012) for authoring that has a flexible system of plugins that will let me do word analysis (find overuse of gerunds) but also let me take the advantages I have with Emacs and combine it with features that I've found I've wanted over the years: such as world- and project-specific dictionaries, character analysis/refactoring (I end up renaming characters a lot), and note taking.
My original efforts suffered greatly from thinking about it too much. So, I decided to dial back my aspirations for this round (version 0.1.0) to the following:
- On-the-fly spell checking
- Auto-correction (I use this a lot because of accented character names)
- Word count (it's trivial, but I like knowing the counts)
I have all of these now with Emacs and they are pretty much the only features I use while writing. So, I figured a good 0.1.0 release would be to duplicate the functionality I already use every day. If you're curious, I'm planning on using ReSharper and Emacs keyboard shortcuts when possible.
I actually have a form of auto-correction in now. It is at the "whole lot of ugly" phase of development because I haven't really worked with it long enough to make it pretty. I'm hoping that after a few weeks of groking the code, I'll start to simplify and make it elegant.
I like elegant code. I love beautiful code. The problem that this is the second time I've done something like this and I don't have a good feel for how it should work. I have ideas, but they are kind of scattered together and squished into a "first draft" mess.
There will be a point when I'm working on this code and I'll just figure out how to make it elegant. Until then, I'm going to pretend it is the first draft of a story and try to keep the bile down enough for me to get to the end before I go back and edit.
All of this is intended to allow for world- and project-specific settings. This way, I can have common names in my Fedran world (name of languages, countries, etc) and project-specific ones (character names). Technical, I'm also going to have a series-specific one for things that spread across multiple books (my Sand series).
This is actually working… sort of. The auto-correction pulls in data from multiple setting files.
The settings are intended to be fairly granular but also shared. So, I want to have different settings for:
- Third person past tense (one of my major oopsies)
- Common fantasy dictionary (because most dictionaries don't have "eldritch" or "mage")
- Specific dictionaries (in theory, Websters, OpenOffice.org, etc)
- "D. Moonfire" specific language
- Fedran world settings
- Constructed language dictionaries
- A book series dictionary
- An individual book settings
I have them as a goal, but very little of this is intended to be for the 0.1.0 version. Instead, I have an infrastructure that appears to work. The scary part is that I wrote that infrastructure two years ago with this intent and it happened to work on the second try.
I don't have a GUI yet. I have bits and pieces of one from my last two attempts at Author Intrusion, but I decided to hold off on the GUI elements until I have a working version of the features. That way, I can try focusing on the functionality without getting lost in the graphical details.
To get around this, I'm writing unit tests for almost everything. It isn't perfect, but at least I feel pretty good that I have something that works the way I intended it. It also makes it easier to refactor (rename, rearrange, and organize) without the GUI dragging me down.
Doesn't this conflict my last post?
A few posts ago, I was talking about focusing on writing instead of doing covers and creating the font. In that aspect, anything not related to writing is pretty much a conflict. However, I feel the difference is skills. I don't know how to draw or make fonts (well), but I know how to program and I'm good at it.
It also gets me something I've been struggling with: the world/series dictionaries. With the current text version using Emacs, I have a 300-word "LocalWords" section on the top of every file that I have to coordinate. It has every name, country, city, and constructed language word used in two novels. If I finish Sand and Love and go into the next, it's just going to get even longer.
The other reason is other projects. Sand and Blood is going to the editor in the next two weeks. Flight of the Scions got into the second round of Harper Voyager. I'm waiting for my weekly serial to finish up (in three weeks) and I have to finish a story for a good friend (which is scheduled to start in three weeks). That is where the 2-3 week sprint is coming from.