Sunday, January 4, 2009

New Year, New Autocrat

For those of you who don't already know, most of's software is built on top of an automation framework called Autocrat. This software allows us to focus our efforts on the task our programs are meant to fulfill, rather than having to deal with the low-level automation-oriented code. As the designer and developer of the Autocrat framework, it's my job to ensure the framework is as easy to use as possible.

Well, in the most current incarnation, Autocrat 3.5, I tried something new. I centered almost all of the functionality around the Window object (which encapsulates an HWND and exposes some window-specific properties and methods). In order to prevent the Window object from becoming a god-object (that is, an object with all the functionality in the entire framework - can you imagine?), I used extension methods to 'add' opt-in functionality. Simply add a using directive for the class of methods you want, and you're good to go.

The problem with being extension-method happy is that extension methods are not incredibly discoverable. It's difficult to know where to look when there are 50-million namespaces hiding as many extension classes. Most of my folly of course came from inexperience with extension methods - they were new, and I wanted to try them out. Alas, it turns out that in several real-life use-cases, extension methods are more harm than good, and don't do much to take away from the so-called god-classes.

To that end, I've decided to remake Autocrat as version 4, to facilitate the creation of EverHarvest 2. About 90% of the work is done, actually - including a new state machine model, a brand new Pointer system, and the beginnings of a new pathwalking framework - so starting on EverHarvest will be a cinch. Not to mention somewhat vital - EverHarvest 1 provided much of the inspiration behind Autocrat 2 and then 3.5, so it seems fitting that EverHarvest 2 facilitate Autocrat 4.

Enough babbling. I'm sure you're thoroughly bored by now - so I'll end with this: my new-year's resolutions.

First, get EverHarvest 2 out the door in beta before Summer rolls around. Second, learn F# finally, by completing at least one of the ideas I blogged about last year. Third, learn the MVC Framework finally, by completing at least one of the ideas I blogged about last year (this actually will be a requirement rather than a resolution given one of my goals at my real job is converting the public-facing website to MVC, probably starting second quarter). Forth, get a hunter bot beta out the door before Summer as well - this will definitely be an integration with EverHarvest. In fact I'm building EH2 with this integration in mind from the start.

So, that's about it. Hope I didn't bore you completely to tears... At least I didn't talk about what I've been doing at work for the past quarter - seriously, dealing with shipping APIs is *not* what I thought I'd be doing when I first started working here... Not fun, not fun - but then again, everyone's got to do some dirty work every now and then. I am grateful for the job, that's for damned sure.

Take care all.

No comments: