Here’s my notes about what went wrong in this project, ( so far).
2007. A coder who had approached me, to show me his first-ever coded project, which was a remake of the talking moose. It wasn’t well-done, but I didn’t have the heart to get mad at him, so I gave him some money and bought-out his code, which was in VB6. Then I hired him to do a few little fixes on it. Well, at first those went OK, but he posted it on Softpedia, and it was the kind of crap you find on softpedia.
2007-2010. I continued to employ this coder, to improve it. But productivity was poor, and my ability to supervise a guy in a different country was poor. He was charging 8 hours per day, getting little accomplished. After a year or two, I had him start using RentACoder (which later became vWorker.com, which later was absorbed into Freelancer.com). With RentACoder doing the time-tracking, it became apparent that we was only working 2 hours a day, just a few days a week. Claiming that depression and fibromyalgia were the cause. Also there were interruptions in contact, due to a pattern of him not paying his phone and internet bills, or his rent, then moving to a different town and starting again. Working from a laptop.
I persisted with him, because I regarded this as an exploratory project, not intended to be released. I ended up with a 2D animation, with some scripting and web-scraping abilities.
2010. Choosing to embark on a 3D project, I used RentAcoder to ask artists to do some concept work, changing 2D pictures of the original moose, into a 3D version. I tried 5 different artists, and the 3D models were ugly. That process of switching from artist to artist to artist, took many months.
Somehow, I met up with Randy at Meta3D studios, and he offered an artist on staff to do the 3D model creation. As that started to show some initial promise, I asked Randy for a referral to a coder who knew how to write 3D graphics code. Randy referred me to my first professional coder. How that turned out badly, will be described below. But at least the 3D model was showing progress.
My first new coder was a games-promoter with coding experience, and he had a way of being very flattering regarding my ideas, and always able to explain-away any delays. But after 6 months, not a single line of code had been written, and he had been ignoring more and more of my emails and phone calls. I had to drop him and start again from scratch.
I found my next coder on RentaCoder (or vWorker.com). and he was an experienced fellow with corporate C# work, but had never done 3D C++ graphics coding. I put him onto the task of starting make the control panel in C#.
( see below, why I chose C#, and why it ended up being a big costly mistake.)
He quit after a year. A year of frustration for both of us. We were gradually arguing back and forth on emails, and it was generally because I wanted things done differently than whatever was “the standard” microsoft way. For instance, I wanted multi-language translation ability, and he believed the only correct way was putting strings into the compiled resource files method. Conversely, I wanted all the strings in human-editable text files, in XML format, and I wanted comments in the XML. He refused to work on extending XML, because Microsofts API of XML-reading functions would generate warnings or errors. I would ask for a custom XML reader to overcome that, and he wouldn’t code it. Instead it was back and forth emails, arguing.
We argued about inter-application communication methods. I wanted to use Memory-Mapped-Files, to send messages between my C# app and C++ app. He tried coding it, but never succeeded, and claimed that what I was asking for, wouldn’t work. Anyway, he quit, and I was back to square one.
By this time, my first 3D model from Meta3D was complete, and I needed to put it into code, to see it moving. Randy suggested a replacement coder, Bobby. Bobby had written a working 3D MMO, and was still keeping it going. Bobby used a copy of his MMO code, and stripped out the multi-character support. (my project only needs 1 character). He managed to get the 3D model moving, with lighting, playing animations, morphing, and so on. It was Bobby’s suggestion that I should license the “Granny” graphics engine from RAD game tools, which I did. Bobby worked mostly on the 3D C++ graphics app, with just a wee bit of C# testing. (partial success with Memory-Mapped-Files.) After about 9 months, Bobby resigned from the project, to take a staff job full time in a bigger firm. For him, moving to the new job was higher pay, regular hours and a path to advance in a company. I had lost a decent coder and had to start again.
Bobby had managed to show me the first 3D model in motion, and that was exciting, but also sad, because I gradually realized that the model just wasn’t cute enough. I had to make the difficult decision to throw it all out, and start again. At this moment. No coder, no 3D model.
Having lost a coder, I went back to vWorker.com, and advertized. I found a coder who asked for even more money. This fellow, who still works for me, is paid at the high end of the scale. His work started from scratch. He had to learn the Granny 3D graphics engine, and then wrote code to display the old 3D model. Then gradually got the Memory-Mapped-File method for transferring data back and forth between apps.
This was the first big success, as far as I’m concerned. It gave incredibly fast ability to transfer large amounts of information, in both directions, between the C++ and C# apps.
Lets digress and discuss C++ and C#. I had to use C++ for 3D graphics,because C# wasn’t able to run DirectX 3D or the Granny 3D engine. C++ ends up being the “good” choice. C# was my bad choice.
Why did I want C# .NET for my User Interface control panel? I didn’t want my new app to look like a win32 api piece-of-crap on Softpedia. C++ apps tended to use win32 api, in that era of time.
I had read about the fancy new graphics abilties of WPF (windows presentation foundation), with its color gradient backgrounds and easing-function jiggly buttons, and I wanted that stuff.
Only much later, did I learn the limitations of WPF. Like, it can’t support “multiply mode” overlaying of multiple layers, or any other modes that are useful in photoshop. It can’t make a line change thickness from one end to the other. That’s just 2 of about 20 things it can’t do.
Also, I had read that .NET would give more mature Unicode support for multiple languages than C++, and I wanted to be sure that I had the widest possible multi-language support going into the text-to-speech engine. THAT turned out to be a BIG mistake. We implemented the C# text-to-speech, which was very poorly documented by Microsoft, and gradually discovered so many limitations, that we eventually had to switch over to using a C++ interface to the text-to-speech. So months of work on struggling to figure out our problems with C# text-to-speech, were ultimately wasted.
Oh, I also concurrently wasted a year of time and expense, on a different graphic artist, who was a friend of my current coder. He also was demanding top-dollar salary, and his task was to design a 3D-look control panel, having moving gears and rods. He had a recurring pattern of working in directions I didn’t want, because I didn’t understand what I had asked for. I eventually got too frustrated with him. I was explaining what I wanted, over and over and over, and getting wrong stuff back each time, costing a few thousand dollars each time, over and over, for unusable stuff.
All that 3D concept work for a mechanical steampunky control panel, sits unused for a year. Our work on the C# control panel isn’t close to needing it yet.