Friday, September 26, 2014

My Video Game's Leaderboard

So, for the last for days I've been working hard on my game and generally ignoring blog related activities. This has resulted in two things. The first is that there's been no blog posts but the second is that I can finally see the light at the end of the project. The game I'm writing is nearing completion and this make me happy.

I decided to stop working on the blog when I started working on the global leaderboard for my game. The idea is that instead of having a top ten list only for the local machine you have one giant one for the entire world.. Consequently it has to have more than ten entries in it. I figure the world must contain several dozen people so I should use a database for that sucker (I'm not actually sure of the world's population since I don't go outside anymore :(   ).

The problem with databases is that I've spent most of my time as a professional developers trying to avoid SQL. I don't like SQL, It reeks too much of command lines and the 1970s. My internal conceptually associations go something like silly hair, the colours orange and brown, tiny tennis rackets and SQL. SQL is an injection attack just waiting to happen. Seriously. You need to escape stuff properly or use an API with prepared statements. Otherwise the teenage equivalent of me is going to turns the database into a playground.

In order to hook up the leaderboard to my application I also needed to use Apache and PHP. I chose these two things because my ISP chose these things and was nice enough to let me use them.

In order to write my code without affecting production I needed to create a test environment. This proved to be extremely difficult partly because I'm on Windows and this is considered weird by the UNIX crowd who make all this stuff (also 1970s, BTW). But mostly because I was trying to match all the version numbers with the ones my ISP had installed. It's generally a good idea to test on the same software as you deploy on because it has a better chance of working. In this case that would probably require time travel as the ISP hasn't updated its software since dinosaurs roamed the earth.

Space: The go-to place for all good video games

In any case, I eventually got a decent test setup using fairly up-to-date versions of everything but it took just about a week to do. Normally I wouldn't mind too much since I'm being paid to do it, however in this case I was fully aware I was wasting my own time and could probably build my own server software quicker at this point (it never works out this way but it feels like it should).

Anyway, the general upshot is that my game now has a global (as well as local) leaderboard. Hopefully gamers will like that and compete for higher rankings. If they don't I just wasted a huge chunk of time.

Tuesday, September 9, 2014

Advanced Settings Blog

At some point someone noticed that there was a bunch of stuff in the setting panel. "This is too cluttered!", someone said, "Some of this stuff must be for power users! Put those settings in an 'advanced' section.".

Ah, but what is "advanced"?  This is, apparently, a hard question to answer because every thing I want to change seems to be in the "advanced" section.

I would suggest a few guidelines:
  1. "Advanced" is not a synonym for miscellaneous. Just because it's not used or doesn't fit into any other category doesn't mean it's "advanced".
  2. "Advanced" is not a synonym for rarely used. Sure, I rarely delete a password using the password manager but deletion of a remembered password isn't rocket science.
  3. "Advanced" does not mean hidden. Sometimes you need to get technical, that doesn't mean it has to be hidden like some kind of video game secret level. It's getting to the point I need to google the entire internet to get the Konami code to change a setting.
  4. If >90% of users don't know what it means and it can seriously screw things up by messing with it, then it's an advanced setting. Be sure to include a "reset to defaults" button somewhere. Maybe a help button too since you are allowed to try and help interested users understand things. You're just not allowed to assume that they'll read it.

Thursday, September 4, 2014

Headset replacement

So my Plantronics 655 headset recently stopped working. This is annoying but it does gives me a good excuse to get a better one. While I was impressed with the decent microphone and lack of any background hiss, the Plantronics headset had some issues. The biggest problem was that it became very uncomfortable over time.

Note to self: supra-aural headphones are not good for wearing long term.

For my headset, I've been looking at gaming gear because I've come to learn that, for some things, gamers are the most demanding. Best audio quality, best microphones, best comfort, rugged etc.. Gaming headsets need to do all these things.

I'm also determined to get a USB headset because I'm addicted to the quiet. To quote myself:
Usually a headset plugged into the stereo mini jack on the computer will create a tiny background hum or hiss all the time. This is typically because the audio card on the machine isn't perfectly isolated from all the electrical noise coming from inside the computer. Because this is a USB headset, however, there is none of that. It sounds as if the headphones are not plugged in, as if the computer is not playing any sound.

So, to re-cap, I'm looking for a circumaural set with good audio, good microphone (ideally one that doesn't pick up room noise), and is USB.

My current lead contender is the Razer Kraken USB. Razor has many headsets available. Most of the seem to be named the Kraken. Razer has a web page so you can wade through the morass of Kraken models. Want to know the difference between the Razer Kraken 7.1 (which is USB) and the Razer Kraken USB (which also does 7.1 audio!)? Heavy sigh. The Razer Kraken USB is relatively inexpensive too so I won't feel to bad next time I sit on them and they break.

There are many other contenders though and I'll be looking through the online reviews and checking them out. Until next time...