Sep 19

Software Release

My first project after leaving Microsoft was to re-release my WebSnatcher products.  Except, this time, I wanted to give this old lineup a brand new handsome face.  That included:  bundling my two products together as a simple “web downloading suite”, update the new graphics with artwork from someone who knew what they were doing, a new name, and a new website.  Of course, I included some small enhancements and a few key bug fixes, but there wasn’t really that much new in terms of functionality; it’s just a much better looking package that runs much better on vista and Windows 7 and, as a package, it’s much cheaper (by a third).

The development was a pain.  The primary source of that was wanting to move the main product, the product formerly known as “WebSnatcher”, to Unicode.  Well, that didn’t work at all (and I believe I covered exactly why in a previous post), so rolling that back was kind of a pain, especially not having source control.

Then, just before I went to the US, I ran out of time and didn’t have all the software that I needed to prepare the installation.  My copy of InstallShield was in my storage unit and one of my first jobs was to pull that out and put together the installation while I was in the US.  But, upon arriving in the US, I discovered unlucky mistake:  Apparently the software that protects my product had corrupted one of my DLLs.  After trying numerous workarounds, I realized I was stuck and had to wait until I got back to China in order to rebuild the DLL and protect it again (I had some vague memory that the protection software would corrupt files one in a hundred times or so…actually, I now have no idea if that’s true).  So, I gave up on releasing my software and forsaked two months of revenue.  But, when I started the project up again in China, I realized that it wasn’t the software at all, it was just some absurd new security feature in Vista.  How many times has Vista prevented me from “realizing my potential”?  Well, let’s not even bother counting.  I immediately got a copy of Windows 7 and installed it on my laptop and reproduced the error.  I fixed it by manually registering the stupid COM DLLs on install and not automatically through DllRegisterServer().  Easy fix…once I knew what the problem was.

Well, as big a disappointment as that was, it paled in comparison to setting up the fulfillment operations.  I assumed that once the product was actually done, setup created, website running, and everything, that the big problems were behind me.  Oh no.  And what’s worse, these problems were even more stupid than the Vista problems.  In fact, all throughout this release, every problem I ran into was not a problem solved by creativity or innovation, but some dumb barrier placed by some bad design choice or lousy support system.

It started off pretty well.  I was set on fully automating order fulfillment.  Before, when a user purchased a product, I’d get an email notification.  Then, I’d log into my Windows machine, start up the software that protected my product, input their name, generate the key, then save the registration key as a text registry file.  I’d then start up my email program, copy the usual mail text from a text file and paste it into the email, then add the registration key as an attachment and send the email.  I got pretty good at this, where it would take two to three minutes to fulfill.  It wasn’t that big of a deal since I didn’t get that many orders, but the one huge downside was that it was dependent on me.  If I didn’t check email, someone wouldn’t get their key for a day or more (if I were a user, that would irritate me).  If I went on vacation and couldn’t bring my laptop, they wouldn’t get their key for a week, or maybe more.  But, at least I set up an autoresponder to let them know (no matter, that would irritate me too).  So, I was committed to 100% automated fulfillment.

The software that I use to protect my application came with a ‘C’ API to implement your own key generating tool.  That’s exactly what I needed and it fit the requirement of the regsoft.com, my fulfillment company of many years.  They simply needed the registration key to be output to stdout (text in a console application, basically) and to know the arguments that you required to be passed to your application.  Easy enough, and I was able to implement it in just a couple of hours (the one party in this whole affair that did do a good job was the protection software).  I then, according to regsoft’s instructions, emailed regsoft and asked them to evaluate my application, I attached the application in a zip file (renamed to .ziz), I included a readme.txt file with the arguments I required and sample output.  I did everything to the letter.  They said they’d review it in two days and get back to me.

Two days came, nothing.  So I wrote back.  I got an email response saying something like, “Oh sorry, we got your email but the file wasn’t attached.  Please send it again.”  I sent it again this time from two different addresses.  Two days later, I followup and get the same response.  This time I send another email and add an FTP link with username and password (which I tested) where they could download the file.  Two days later, maybe more, I follow up again.  I get the same response, except this time they suggest that I add a link where they can download it.  So, I write back nicely saying, “You guys don’t seem to have your act together.  I’ve already provided all of this.” to which they replied with profuse apologies.

It was a little too late anyway because I had learned of another fulfillment company, a sister company in fact, called regnow.com.  This looked more attractive anyway because they had an extensive affiliate network.  So, I was committed to switching.  I started the process to get my software selling on their site.

Of course, their system was way more complex than regsoft’s.  I actually liked the regsoft system quite a bit; it was well designed, they just lacked the affiliate network and their customer service was lacking at times.  Combine the two and you’d have a strong combination.  Anyway, just getting through the first two pages took a whole afternoon.  They had huge sections to prepare affiliate marketing kits and so on.  I had to create graphics from the artwork that my designer created for me in all sorts of dimensions.  No matter, I plowed thorugh it.

Then I got to the automated key generation section.  I assumed that I’d be able to use my little Windows console app to generate my keys.  No such luck.  They had much stricter requirements:  You had to submit source code, not an executable.  And it had to be compiled by the GCC compiler (uh oh) and be able to run on a Solaris machine (or whatever).  Well, I looked a bit into this, but I hate these open source compilers; just getting them to work is a monumental effort.  I don’t understand why they enjoy making it so hard, well actually, I think I do, I should write a post on the psychology of programmers.  Anyway, I realized this was going to be an effort so I first had to ask a key question:  “My key generating application is dependent on a Windows DLL (the protection software DLL), there is no way around this.  Do you support an app that can run on Windows?”  I never really got an answer to that question, but I did submit my source code just to see what would happen.  A tech representative wrote me back with a long list of errors and told me to fix them.  Most all of them were from Windows identifiers that the GCC system didn’t understand.  OK, that settled it for me; this was the wrong battle to engage in.  Was there another solution?

Turns out, there was something that looked promising.  I had recently purchased an upgrade to my protection software which included many updates in custom key generating options.  One was a CGI library.  I’d never done that before, but how cool would it be to generate keys over the web?  Regnow supported this, that was good.  So, I just needed to upload the library to my cgi-bin folder on my website and create a little web page to test it.  I uploaded the library, wrote the page (even easier than writing the first application), and tested it.  ERROR.  So, I opened a ticket with my hosting company to find out if they supported this.  I was suspicious of one little line in their CGI documentation:  make sure your script ends in .pl or (one of the other popular CGI scripting languages).  Mine was a compiled library.  Maybe this was impossible to work.  Regardless, my ticket was there.  In the mean time, I posted the “do you supported compiled CGI libraries on your server?” question to another hosting company.  They wrote back right away with “Yes”.  Would I end up switching hosting companies too?

In the mean time, the other company took forever to answer.  The first response they gave me was, “Can you set up a test page?” to which I replied, “Look at my original request; I’ve pasted in text you need to test it.  Just save that text to a ‘test.htm’ file and open it.”  I won’t go into the details of all the back and forth, but finally they confirmed that it was indeed true – they only supported scripts, not binary CGI solutions.  Time to switch hosting companies.

I started trying to switch hosting companies.  I figured out the plan I wanted and the duration (I wanted the max length so the monthly rate would be very low).  But, my credit card was denied.  Oh no, not now.  I tried jumping over to some software that bypassed the China filters and disguised my IP address.  Still failed.  I called up the company and told them what was going on.  They suggested that I either go to Hong Kong or call someone in the US to make the purchase for me.  So, I called my mom and we walked through it at least two times, maybe three.  DENIED!  Remember, this is all balancing times between the US and China so much of these conversations took place late at night or early in the morning for me.  I called the bank and told them that I was running into these problems.  They suggested that I call the hosting company back and explain to them that I had contacted the bank and so on.  She also gave me a phone number that they could call in order to verify that I was telling the truth.  Back on the phone with  the hosting company, the customer service agent was great; he seemed to understand the pain that I was going through.  As he was communicating with some of the people looking into the credit card, he would quietly pop back on the phone with me and tell me, “They’re asking me if you sound like a real American” to which I could only reply in my best Apu voice, “Yes, thank you, hot dog, Britney Spears…”  We finally got it all straightened out, but I had to email over a scanned copy of my passport and explain again the situation, the people I talked to, the bank phone number, etc. etc. I was relieved when I woke up the next morning and I saw an email message, “Welcome to Host Gator!”  YES!!!

It took me only five minutes to upload the CGI key generating library and test it.  It worked!  Score another one for the protection software!  Now, it was just a matter of getting it plugged in to the Regnow system.  But, remember what I said about it being complex?  Well, it was basically impossible for me to figure out without plowing through reams of web page help which was badly indexed and had no search (what?!?).  So, I spent the next several days on email with support back and forth.  I asked for a phone number twice; never got one.  While these guys were helpful, they were constrained by this complex system, and their time zone.  It was basically an email per day unless I was lucky enough to catch one of them early in the morning (my time) in which case I’d get two emails in one day.  In between all that, technicians were changing parts of my submission, deleting sections, etc. etc.  This prompted more emails like, “Hey, I just added this, what happened!?”  It was a big mess, and they have a lot of improvement to make here.

I realize this post is already long so I’d better stop.  If I went into all the additional little problems of getting this product out the door, I could go on for another few paragraphs.  Let’s just say that it’s finally done and I’ve very happy with it.  An order came in almost right away and it was so sweet to not have to do a thing.  I’m looking forward to turning more of my attention to another project and spending a few hours a week working on marketing this software, something I never did the first time around (I think I could have done really well if I had any business sense back then).

I never would have thought that this little project would have been such a pain.  As they say in Chinese:  “Hao3 Shi4 Duo1 Mo2″,  “????”, or “The road to success is paved with hardship”.  Neat how you can say all that in just four words, huh?

Well, here t’is, finally!

Snatcher and Son banner

4 comments

4 Responses to “Software Release”

  1. t-ron says:

    And…the name of the protection software is ASProtect, which can be found at aspack.com. Great package!

  2. Dick Herson says:

    lol “How many times has Vista prevented me from realizing my potential?” This one is going on my face book as fav quote.
    Congrats of product release.

  3. Theron says:

    Thanks! Yeah, that was actually a running gag w/ some of my fellow co-workers at MS when we were in the midst of developing for Vista.

  4. courseworks says:

    Thanks for sharing! I hope this will work!

Leave a Reply