Category Archives: Geeky

The Gaming

My biggest hobby has become gaming. Not so much video gaming any more but table top gaming.

Every Monday night for the past 9 years I’ve been getting together with five other guys (there was a woman too but she “retired”) to play Dungeons and Dragons. We currently play 3.5 edition but we’re switching to 5th soon.

There are two campaigns running in parallel, one set in a world of undead where I play a gnome rogue called Garwicket, and the other set in a more mixed world where I played a fighter called Hunter, until he got eaten.

On top of that I’ve started a Pathfinder campaign with some of the kids at the boy’s homeschooling centre. It’s my first experience in being a Game Master and so far it’s going very well, although managing 7 kids all under 12 can be a little chaotic.

When I’m not playing RPGs I also play Magic: The Gathering, which is an expensive hobby but I’ve tried to keep my card purchasing to a minimum. We mostly play the Commander variant these days.

We also play the occasional board game, like Small World, Pandemic, Game of Thrones, Lords of Waterdeep and of course trusty old Settlers of Catan. I watch Wil Wheaton’s Tabletop to keep on top of new and interesting games.

So far the boy hasn’t been hugely into gaming but I’m hoping he’ll get more involved as he gets older. He does play Small World and Pandemic with me sometimes but he’s not quite ready for Pathfinder, and didn’t enjoy Magic: The Gathering when I tried to teach him.

Gaming is a great way to blow off some steam and get away from computers for a few hours and a great way for someone who isn’t particularly social to interact with people, so perfect for me.

Me and Calendars

Over the years I’ve tried many different ways to remember stuff. I’ve tried paper calendars and diaries, which just got forgotten and gathered dust. I’ve tried post-it notes, which just get lost. I’ve tried keeping stuff in my head, which works some of the time, but the amount of time it works decreases with age.

Of course, I’ve also tried many software solutions. I’ve tried iCal, which is great but not portable enough. I’ve tried Google Calendar, which is very cool but for some reason doesn’t work for me. I’ve tried 30Boxes, which is beautifully designed but also doesn’t quite work for me. I’ve even tried Outlook, but that has the same problem as iCal.

After realising that graphical calendar applications don’t work for me, and because of my love of the command line, I went looking for a command line application. I found remind, and so far it’s working better than anything I’ve tried before.

Remind uses text files to store reminders, so you can edit them with any text editor you like, or write scripts to add reminders, or there are front-end applications if you like that sort of thing. The contents of the files look something like this:

REM      Feb  2        MSG Ground Hog Day%
REM      Feb 14        MSG Valentine's Day%
REM      Mar 17        MSG St. Patrick's Day%
REM      Apr  1        MSG April Fool's Day%
REM      May  5        MSG Cinco de Mayo%
REM  Sun May [Week_2]  MSG Mother's Day%
REM  Mon May [Week_3]  MSG Victoria Day%
REM 06 Nov 2008 +3 AT 13:00 +120 MSG Doctor %b.%
REM 24 Nov 2008 +3 AT 08:00 +60 MSG Dentist %b.%
REM Tue 1 +3 MSG Quiz Night %b.%

REM is the keyword for reminder, which most of your entries will begin with (there are other keywords, but for simple usage REM is all you need).

After REM comes the date the reminder will happen on. There is a huge variety of possible date formats making for ultimate flexibility. You can specify a full date, like the Doctor appointment above, or just a partial date, such as the statutory holidays above or even the quiz night entry, which evaluates to the first Tuesday of every month.

After the date you can specify an optional delta, for example +3, which means remind me every day starting 3 days before the event. You can also use *n which means repeat every n days.

Next is the optional time setting, for example AT 13:00, meaning the event happens at 1pm. This can also have a delta, for example +60, meaning remind me 60 minutes before the event starts.

Finally, we tell remind what to do when it’s time to remind us. Usually we just want a message, so that’s what the MSG keyword is for, which is followed by the message itself. The message can contain substitution variables, such as the %b in the above examples. The %b evaluates to “in n days”, “tomorrow” or “today” depending on how close we are to the event.

There are many other options, and it can be a little overwhelming if you try to figure it all out, but if you stick with the basics until you find you need something more, it’s a very powerful tool. There are lots of useful resources relating to remind at Roaring Penguin.

The Uncanny Valley

I used to enjoy computer games. Having a small child means time becomes a lot more valuable, and one of the casualties for me was the gaming. I’m still interested in the gaming industry though, so some announcements catch my attention.

One of the problems I always had with games which try to present a reality containing actual humans was that the humans never looked quite right. That lack of rightness had a fundamental psychological effect which made it difficult to believe in the characters you were seeing. This isn’t just a problem in gaming; animated movies have the same problem, which is why the more successful computer animated movies are those that don’t have too many humans, or that make the human characters ‘cartoony’.

For example, Polar Express was a good movie, but it tried too hard to make the human characters look really human, and it didn’t quite work. The animated Tom Hanks just looked slightly wrong.

What I didn’t know until today was that this phenomenon has a name. It’s been called the “uncanny valley”, the point where human likeness is almost, but not quite reached. And apparenty the valley has been bridged. According to the chief honcho at game developer Quantic Dream – “I can officially announce that there is no uncanny valley any more, not in real-time.”.

I’m skeptical until they release a demo, but it has to happen at some point.

Sloppy Programming

There are certain things in computer programming that some people do right, and some people do lazily. There have been times where I’ve taken the lazy option, but those are very rare, and when they do happen they don’t affect the user experience.

The worst kind of laziness is the kind that the person using the software can immediately notice, and nothing is more noticeable than bad grammar. A computer program doesn’t understand spoken language grammar, but the person writing the code should.

The classic example of this shoddiness is when an email program tells you:

You have 1 new messages.

It’s uncomfortable to read, and it’s completely un-necessary. Some programmers might take the next level of laziness as acceptable and show you:

You have 1 new message(s).

OK, it’s better, but it’s still up to the reader to decide if the s in brackets is needed to make the sentence work. It’s still incredibly lazy, because the code required to make it perfect is so trivial:

print(“You have “+msgs+”new message”+ (msgs == 1 ? “.” : “s.”));

So now, if the user has 1 message, there will be no s, otherwise message will be pluralized. A simple piece of extra code has given the end result the polish it deserves. You could even take this example a stage further by converting ‘1’ into ‘one’. The code for that isn’t so trivial but it would be a nice touch.

The example that made me write this post is a little different. I’m currently addicted to the Traveler IQ Facebook application, which reports in my news-feed when I improve my traveler IQ. The latest report says:

Mark now has a Oceania/Australasia Traveler IQ of 91.

Ignoring the fact that my southern hemisphere geography seems to suck, it’s  a sloppy sentence. I can’t read it out loud, or even in my head, without cringing slightly, and it’s another trivial piece of code to make it right:

print(name+” now has a” + (substr(challenge,1,1) in (‘A’,’E’,’I’,’O’,’U’,’H’) ? “n ” : ” “) + challenge + ” of ” + score + “.”);

(Note I’m using pseudo-code in these examples, but most languages have similar constructs.)

So if you’re writing programs which output information to the user in plain English, please take a moment to consider if that plain English will be correct for all possible values of your variables. It doesn’t take long, and your end product will look more professional.

The belated birthday gift

My wife has been having secret email conversations with some of my work colleagues. This is a good thing.

I recently had a conversation with work colleague E about the universal remote control he has. It sounded cool, so I relayed the conversation to Jen. She didn’t know work colleague E, but she did know work colleague D. So she emailed work colleague D asking him for the email address of work colleague E. Work colleague D sent Jen the email address of work colleague E. Jen emailed work colleague E asking for details of said remote. Work colleague E replied with the details of the remote and where he bought it.

The result of all this clandestine communication was a belated birthday gift for me of a Logitech Harmony 880 universal remote control. It has replaced the four remote controls we had littering the living room before and was very easy to set up. The press of a single button turns all the necessary things on to watch TV or listen to music. It has full control of the TV, the PVR, the receiver and even the Mac Mini. Sadly the IR interface in the Mac has a limited number of commands, but that’s a limitation of the Mac, not the remote.

So if you’re in the market for a universal remote, I highly recommend the Harmony 880, available at many online retailers. Or you could just mention it to your wife.

Online banking security

I have an account with BMO Investorline from back when I dabbled in the stock market and got burned. I tried to log in to it the other day to change my address and discovered something disturbing.

When I first created the account, the password could be any length, so I chose a password which was 10 characters long. Apparently at some point since then BMO have changed their system so that passwords have to be six characters long. This is a disturbing trend that I’ve seen popping up in a few places, including where I work.

Fixed length passwords are a bad idea for one very simple reason. They are easier to guess. The number of possible combinations of six characters is much, much smaller than the number of possible combinations of random length passwords. Granted it’s still a fairly large number, but why not make it as large as possible?

So I called the bank to get my password reset. They asked me a bunch of security questions, which is good, although a determined cracker could probably find out the answers, but then they reset my password. They reset it to something very, very simple. Now I can only assume they use the same very simple password for all password resets, and I’m guessing they get more than a few password resets every day, so it’s probably a good password for those evil crackers to try.

I understand that banks are treading a fine line between making their online banking as user-friendly as possible while keeping it as secure as possible, but security has to come first. Always.

A strange and scary night

Tuesday night was a scary one. First of all we encountered a strange hound whose terrifying howls sent me into a blind panic. Out of my senses, I ran in the opposite direction to the howls, smashing into a door and scrabbling at the handle until I got it open. As I was running through the door I caught sight of something very ugly with tentacles out of the corner of my eye but I was still too panic-stricken to react. Suddenly my entire body went rigid and I collapsed to the floor.

Having recovered from my paralysis and panic and discovering my party had quickly dispatched the ugly tentacle thing we continued onwards, only to be set upon by two very unpleasant lions. While trying to avoid those nasty claws, a massive spider suddenly blinked into existance next to me. In a panic I started casting a spell but before I could complete it the spider had sunk its fangs into me and I felt poison coursing through my veins. Before my colleagues managed to kill the nasty arachnid it had bitten me once more.

I was very close to death and still badly poisoned. Luckily we managed to make our way to the swamp to get help and healing from the lizardmen. Free from the poison I was able to sleep un-interrupted for 24 hours thanks to the protection of Antonio and Nedgie. The following day I was able to restore myself to full health.

That was a close one.

Politicians and their hairbrained ideas

When will politicians learn to do a bit of research before coming up with wacky new ideas? The latest suggestion for protecting kids online is to force sex offenders to register their email address on an online database. Anyone with even a tiny bit of knowledge about the online world will immediately realise how completely futile this is.

If I started now I could probably have 100 new email addresses at countless different providers by the end of the day. I could use anonymizing services to further cover my tracks. I could join a multitude of social networking sites using fake email addresses; some of the sites don’t even insist on an email address.

It’s a stupid idea; it shouldn’t have made it past the “hmm, I wonder if…” stage without someone saying: that’s never gonna work. Do these people not have technical advisors?

The only way to protect children online is to educate parents and teachers so that they can educate and monitor their kids. I don’t know how much setting up a pointless database like this would cost, but I’m sure it’s enough to fund a few free training sessions at local community centres.

Banking Security

I just went to the bank to make a wire transfer.

The guy who dealt with me was almost completely clueless; he spent 10 minutes trying to find my account details despite having my access card in his hand, and spent another 10 minutes trying to figure out how the wire transfer screen worked.

Finally he gave up and went to get help.

He left me alone in his office, with his computer unlocked and logged into both the bank mainframe and the bank intranet. He left me there for 10 minutes.

Oh, the temptation.

Geeky Memories

This made me laugh, and brought back some fond memories.

I got my first computer as a Christmas gift when I was very young, a Sinclair ZX81 with a whopping 1k of memory and a deliciously untactile membrane keyboard. Within six months I was pushing the limits of what 1k could hold, plus I wanted to play 3D Monster Maze, so I upgraded with a wobbly 16k RAM pack and got scared witless by that dinosaur advancing toward me.

Soon even 16k wasn’t enough, and black and white block graphics were getting boring, so the Sinclair 48k ZX Spectrum was on my Christmas list. 48k of memory, a keyboard that responded when you pushed a key, colour not-so-blocky graphics AND sound. OK so it was annoying beepy sound but still it was sound and that was just too cool.

I spent the next couple of years hunched over that tiny keyboard writing code or trying desperately to get the latest game to load off casette tape (usually pirated casette tapes thanks to my biology teacher who had a tape to tape deck in his office that he let us use.). Manic Miner, Jet Pac, Chaos, Sabre Wulf, Ant Attack, 3D Deathchase; some of the best games ever written were written for that unassuming little computer.

Clive Sinclair turned me into a geek. I still want a C5.

Gaming the old-fashioned way

For about 9 years now I’ve been playing a MUD online. MUD stands for Multi User Dungeon or Multi User Domain. The MUD I play is called Deeper Trouble. It’s a text based multiplayer role playing game set in a vaguely tolkienesque world. For the last year or so I’ve actually been a wizard on the mud, which means I do the coding side of things, fixing bugs, writing new areas and maintaining the existing code base.

If you’re not already hooked on the latest graphical MMORPGs and you’re looking for a game that requires a bit more imagination and thought, then why not give Deeper Trouble a go? All you need is a telnet client, which you use to connect to on port 4242. There is also a website: