This week I'm working on a tool to generate a navigation mesh for my world. The world is currently made up of about 200,000,000 triangles. For each of those triangles I need to evaluate if they are walkable, and then combine those triangles into larger convex polygons, removing any unneeded vertices so that the navmesh is smaller and more efficient for searching.
The example I have been looking at builds its navmesh by comparing every triangle in the world with every other triangle in the world to see if they are connected. Thats 40,000,000,000,000,000 comparisons. And you end up with tens of millions of triangles in your navmesh. Even on a quad-core hyperthreaded Core i7, I need something a little more efficient.
In a few days I'll have been working on this game for 18 months. Longer if you consider previous projects that are now incorporated into this one.
That's a long time. Longer than any other project I've done. In the past when I reached the year mark, I wanted that software out the door. And it went.
At 18 months, this one isn't ready yet. And that's hard.
Persistence, determination, confidence, they all fail at some point. This takes faith.
A few years ago I built a credit card processing system. It used 2048 bit RSA encryption to encrypt the credit card data on the customer's own computer, then stored the encrypted information on our server until the order could be processed. Then that encrypted data was transferred via floppy to a PC which was never connected to the internet where the decryption key was stored so the order could be processed. That system was pretty secure against outside breaches.
I had to shut it down when the credit card PCI data security standard came out because the cost of security auditing the software plus annual third party security audits for the rest of the company combined with the potential for $500,000+ fines levied by the credit card companies in the event of a security breach made it totally not worth the hassle and financial risk.
So I feel a lot of irony today with Sony saying this about their 77 million PSN accounts:
we believe that an unauthorized person has obtained the following information that you provided: name, address (city, state, zip), country, email address, birthdate, PlayStation Network/Qriocity password and login, and handle/PSN online ID ... profile data, including purchase history and billing address (city, state, zip) ... PlayStation Network/Qriocity password security answers ... your credit card number (excluding security code) and expiration date may have been obtained.
Wow. All that information. Apparently none of it encrypted. Too bad they're big enough that those PCI fines won't really hurt. I expect their security auditor will get hung out to dry.
Something I struggled with for quite a while was trying to figure out how to build a good-looking and functional user interface. I could certainly have built my own, but that would have been a major undertaking, as a lot goes into a user interface. You need a layout engine to manage where everything lands on the screen when you resize the window, you need widgets such as buttons, text areas, password boxes, scroll bars, radio buttons, progress bars, and more, and you need a way to author all that that is easy enough to use that if you change your mind, you can afford to do that.
That's a pretty tall order. And ideally I wanted it to be free.
There was a bit of a scandal recently when it was revealed that Rogers Cable here in Canada was throttling its World of Warcraft users. Rogers quickly came out with a release that this was a mistake, but it turns out the reason they are (still) throttling, is that World of Warcraft uses Bittorrent as the primary means to transfer its multi-gigabyte client patches. And it does it in the background while you are playing - so when Rogers throttles your connection, it kills gameplay at the same time.