Project #3: Post-mortem

What went well?

Prognosticator – This was the name my lovely spouse came up with for the component that predicts what word Intelliwriter thinks you are typing. This was hands-down the most fun component to put together. I used a simplified Markov Chain algorithm that analyzes existing texts and formulates for any single word, what are the most common following words. A simple idea but impressively good at efficiently suggesting words based on previous words.

Tab-completion – The output from the Prognosticator was a quick reference of words-to-next-word. This made the tab-completion logic super simple and way more effective than I had originally imagined.

Look-and-feel – I didn’t think about this one much until a friend tried out an early version of Intelliwriter and commented of the smooth look-and-feel. I wasn’t really trying to make anything special, but I think that not trying to make something special was accidentally what a distraction-free text editor should be. Simple is as simple does.

What was terrible?

Brew-your-own-text-editor – When starting development of a new component, the first question any developer should ask is “hasn’t someone done this before?” There are a million text editors out there and probably lots that open source their code, and yet here I was re-implementing a text editor and spending at least half my time figuring out the logic of drawing letters in the right places, handling weird characters (…or not), and having to solve the problem of text editing for the millionth time. If I ever decide to go fo’-realz on Intelliwriter, I have got to take this out the equation and find some text editor I can hack apart.

Start Stop Continue

START – I have got to build something that ships. Granted, Who Goes First? technically shipped but I’ve never been thrilled with its resource inefficiency. That thing eats batteries like an old dog. I’ve always told myself that I love software development because you get to constantly learn new things. Though I don’t think anyone should lose their need for learning, I need to take these 10 years as a professional developer and getting down to moonlighting business.

STOP – It may be time to thank the 24-hour project limit for its contributions and revamped my initial principles into focusing on delivery rather than time-management. I feel I have learned a lot from imposing the limit and I see improvements in my time management both at home and at work. Now it is time to take this personal advancement and focus on results.

CONTINUE –  I started breaking down projects into independent components with Mars Commander and really took it to heart with Intelliwriter. This is how the modern software world works and I consider it a part of my more principles of development.

Project #3: IntelliWriter Update

A dictionary and 79 epubs walk into a bar…

IntelliWriter Logo

Word Suggestion Engine

This was the major theme of the first half of the work so far. After spending a few hours crawling the interwebs for someone who has done this in an open-source, information should be free, hack-the-planet kind of way, I gave up a decided I needed to do it myself. I took a hint from an old friend, Markov chains.  I needed an engine that when given a word, it would spit out a list of words that would most-likely come next. In this scenario, Markov chains basically say ignore everything but the word that comes before it and that works pretty well.

So! I grabbed a pile of almost 80 fiction books in epub format and wrote an analysis tool that calculates for any given word, what are the most likely words to come after it. Filter all those words with actual words from a fully resolved Open Office dictionary (which was a bit of a project on its own)…and done!

Here’s how we are looking so far:

IntelliWriter_update

Look good? I think it looks pretty good. The word recommendations are normally pretty close if not spot-on for this passage. There’s no tab-completion yet, which is really the linchpin to see if this little experiment is actually useful. Better get back to work!

The task list as it stands today, for posterity:

intelliwriter_taskudpate