Tuesday, July 6, 2010

Releasing Golem

Well, I've done it. =) I've released a new product over at ShadowTeq, called Golem, which is a brand new crafting bot. I built Golem a little differently than I've built products in the past - I departed from the tired tab-based single-form format that I've been using for years in EverHarvest, Market Sniper, AutoLotto, and even VanCraft.

The new system is something closer to a wizard view, where you select the task you want to perform and then are guided through how to perform it. Building this from scratch was a bit of a challenge - I ended up building a simple view engine, which hosts the form itself as well as provides View lookup services for the pages themselves. It works well enough, and provides a good deal of separation between the UI concerns and the rest of the application.

Essentially, each page of the application is a 'view,' implemented as a UserControl. These are dynamically created when they're needed, and destroyed when they're no longer displayed. This means that any state that needs to be displayed needs to be saved somehow - I solved this by making the application's controller accessible from the views themselves. No, this is not my ideal mechanism - but I didn't really feel like building an MVC framework myself, and I didn't want to use anybody else's.

Anyway, about Golem: the crafting engine itself was built using my new automation framework called Eidolon. Eidolon is by leaps and bounds more advanced than any other framework I've developed for these purposes, and makes building automation engines a complete snap. Just to give you an idea, the entire crafting engine for Golem takes up maybe 600 lines of code, and took me a few hours to bang out and make run well enough for beta. That's an incredibly small amount of time and code! Of course, I've been working on Eidolon for months - tweaking it, building prototype projects, etc.

One part of Eidolon that I'm particularly proud of is something I call Wraith. Wraith is my new microthreading / workflow library based around C# compiler generated state machines, via the 'yield return' keyword. Using Wraith has allowed me to build the crafting engine without having to worry about things like pausing or canceling early, because the tasks that the engine performs are done so in tiny pieces. Wraith essentially lets me write long blocks of code, but when they're executed they get broken up into small tasks, with pausing, quitting, and other code interleaved between the tasks.

One way I take advantage of that is in tell notification. Tell Notification is a feature that, while you're character is crafting, if you receive a direct message from another player, Golem will let you know about it. While important, Tell Notification has *nothing at all* to do with crafting - so it didn't make sense for me to build it directly into the crafting engine. So what I did was build a Wraith Service, which lets me hook into the task execution portion of Wraith, and have that Tell Notification service perform all the work of listening for these tells.

Alas, I'm rambling. All in all the release went well, and people are picking it up. There were a rocky couple of days where people were having trouble, but due to the diligence of a couple of my customers (thanks guys) we were able to beat the bug. Turned out I wasn't checking log lines for the possibility of null after pulling them out of the log - this was causing Null Reference exceptions, and crashing the program. Tough bug to find after all the obfuscation... =P

So far the ride's been fun - I'm sure it'll only get more interesting as time goes by. =)

Thursday, June 17, 2010

...

Something new is coming...

Tuesday, June 8, 2010

Silence is deafening

So it's been almost 4 months since my last post... To be honest not much has happened that's been worth posting about. Work has been crazy intense lately - I'm responsible for 3 projects, all of which need to be done *now* - plus there's keeping on top of ShadowTeq. EverHarvest is still going strong, continuing to pick up users at a slow but steady pace.

I've been working on a new product that I'm not ready to publicize. That's part of the silence - timing is critical here, and I feel that if I announce it early I'll spoil it. So I'm going to maintain radio silence on that for a while. Testing for it is ongoing - it's in the hands of several of my most trusted users - and initial reports are encouraging. All in all I'm excited for the future, but I'm anxious as well.

Thursday, February 18, 2010

ShadowTeq, EverHarvest, Expansions and Operating Systems

First: ShadowTeq is up and running! Paypal integration has been finished for a couple weeks now, and purchases have been coming in. Thanks you guys by the way - you've all been extremely patient!

There was some initial confusion over the changed subscription and licensing scheme. I noticed a couple people have purchased licenses, but not subscriptions, and therefore ended up using the trial. I have since then reworked the purchasing system to prevent you from buying a license unless you have an active subscription.

Meanwhile, a new EQ2 expansion has been released - "Sentinel's Fate". I haven't had much of a chance to check it out yet. A very friendly user has donated an expansion key, however, so I'll be in there seeing the new stuff with the rest of you soon. That expansion release made some changes to the client code - particularly the code I hook to find the current target name - so this update took me a couple days. Everything's up and running now though so that's the good news.

Speaking of good news - while I was at it, I finished off the last of the reflection code that was preventing me from using the new obfuscation software that works with Windows 7. I was using reflection in several places in EverHarvest - the main UI, the save files, and a few other places - and obfuscating code with reflection in it requires some pretty advanced features. The obfuscator I was using belonged to Michael, and wasn't compatible with Windows 7, so I needed to change. With the old reflection code replaced, I fired up the new obfuscator and lo! it worked! Windows 7 is now officially supported, in all its versions, in both 32- and 64-bit!

Very soon I'll be starting development on a new ShadowTeq harvester. Details on a beta test will come within a month, I'm sure. =) I'm going to experiment with a limited beta test - very small numbers to start with, to grow over time. More details on this to come. =)

Thursday, February 4, 2010

Nearly done setting up ShadowTeq!

Good news everybody! ShadowTeq is nearly done being set up - which means, I'll be monetizing EverHarvest again. The past several months have been interesting - free working EverHarvest for all - but soon I'll be resetting the trials and setting them back to 5 day expirations. After that, you'll have to buy a license (unless you already have one) and subscribe to the site in order to use it.

On my mind is the subject of what exactly EverHarvest is. Most people call it a harvest bot - but I don't personally like that terminology. I prefer harvesting automation software' to harvest bot', but I recognize that there isn't much I can do to change perception. The reason 'harvest bot' is the wrong word for EverHarvest is that it calls to mind unprofessional script-like software, written poorly, unsupported, and requires arcane tricks to get working. That's the same reason we don't call EverHarvest a harvest macro, harvest script, or similar. It's more professional than that - more user-friendly.

Ah well. Just ranting. Take a look at ShadowTeq and let me know what you think. =)

Tuesday, January 19, 2010

Busy busy!

Wanted to post another little update (and then hopefully get back to the programming content, finally!) - the job is going wonderfully; almost too good, I think sometimes. I'm starting to be seen as the go-to guy with the tough problems. In particular I'm getting the things that *have* to go out *now*.

This is great though - it's how I like to work, under a deadline. Deadlines put pressure on me to deliver - if I had no deadline, I'd meander on the project, trying to make it as clean as possible, put off the hard or tedious parts, and in general not deliver much. This is a big part of the reason why I still haven't gotten Paypal integration going on ShadowTeq - it's not that I'm lazy, I've just got no deadline.

So I need to give myself a deadline with the Paypal stuff. Having a busy family life is no excuse - the kids are in bed by 9 anyway. I'm setting the deadline to the end of this coming weekend - so, the 24th. I'm posting this publicly so that I'll have to take some accountability if I fail.