Work has been continuing apace on the all-new ShutOff. Featuring a console application at its core, ITS ShutOff is built on the Microsoft .NET framework. My language of choice is, of course, C#.
What I’m really excited about is the modular way it is built. The console application is fully featured, which means that absolutely all functionality is available there. This is vastly different to ShutOff 2000, which is a GUI-only application. It was impossible to build scripts around it.
The new user interface is also a lot more powerful than the one in ShutOff 2000, and all features from the console application are available, if power users do not want to use the command-line switches.
What’s especially exciting is how I’ve overcome the need to have ShutOff running when you want to perform a shutdown. Once I figured that out, the rest was very easy.
And in other good news, some code that originally was lost when I accidentally deleted a snapshot on my development VM, was reconstituted using a copy of the assemblies and the brilliant .NET Reflector.
Here’s an amusing story about the ShutOff 2000 key generator, and I’m comfortable telling it. I wrote the original algorithm in December of 1999, on paper. I used a combination of Caesar-cipher and ASCII to Hex conversion. I was very proud of this algorithm. In fact, as a one-way hashing algorithm, it’s not bad. I’ll publish it here when the new ShutOff comes out (I’m planning on making the VB 6 code open-source).
So there I was, just turned 23, having written a great piece of computer science geekery. I ported the algorithm into VB 6, and lo, it was good.
Core, one of the more notorious “computer security” groups of that period, cracked the key generator pretty quickly. I think it was a matter of days. What was amusing is how their key generator (also written in VB 6) was more user-friendly than the one I cooked up. It actually generated the key on the fly, whereas with my own personal one, I had to click the “Generate” button.
Then it was time for porting to .NET. I decided a long time ago to utilise the features in C# for encryption, so this was for backward compatibility (another place I’m doing this is by moving the app settings from the Windows Registry into a SQLite database file).
So I ported the code, line by line, into C#. My first challenge was that C# doesn’t have the same functions as VB 6, so I had to work around that. This included beauties like Convert.ToChar() and string.Format(“{0:X}”). Eventually it was complete, and then I wrote a test to check if it was generating the same registration keys.
.NET (thankfully) is a lot less forgiving with casting integers, and I had a bug in my VB code, where an int loop counter was implicitly casting to a floating point number when multiplying with a character position, and in 1 or 2 characters in the 20-character registration key, the value was different to the C# version.
So here’s the funny bit: I had to replicate the bug in my brand new application to allow for the key generator to create the same strings as the old application, even though it’s wrong.
So that’s the current status. Because the Windows platform has changed so much in the last ten years, I’ve also had to rethink certain features. Some have been dropped, others enhanced, and of course the whole codebase is entirely new.
ShutOff 2000 is a labour of love. I don’t make much money out of it, despite the tens of thousands of downloads over the years. What I get out of it is the chance to play with new technology, revisit old technology, and realise how far I’ve come as a software developer.
What makes ITS ShutOff different, then, is that I’ve had to be more professional in its development. I’ve had to do a feature list, I’ve had to plan my time, and just like other dev shops, I threw away my code and started again several times. I think this incarnation, despite being called version 3.0.0, is actually number ten or eleven.
When it is finally done, I’ll know I’ve achieved something great. Along with NCANE.COM, I’m proud of my achievement. It has proved to me, if no one else, that a simple idea can go places, with no money and weekends to work on them.
Thanks for the use of your eyeballs.