Dogfood, Nom Nom Nom

Dog food, the common noun, is reasonably self explanatory (pro tip: it’s food for dogs). Dogfood the verb or dogfooding the verbal noun, though, might require a little bit of explanation.

At the root of it is this: if you make dog food, you should feed it to your own dogs. There are essentially two reasons for this:

  1. If you don’t personally test it, how will know if it’s any good?
  2. If your dogs don’t eat it, why the hell should anyone else’s?

The same principle applies to software. Even more so in fact, as it’s something you’re more able to test directly. As a simple example: in Google, we use Google docs for most documentation purposes (design docs, presentations, etc.). I’m willing to bet that folks at Apple use iWork for much the same purpose. I’m absolutely certain that Microsoft employes use Office, excepting those times when it’s necessary to write a document in the blood of a green eyed virgin upon the pressed skin of an albino goat.

This process is called dogfooding. You use the software internally before it’s released to users, ensuring that it gets a lot more test usage. As an added bonus, developers who actually use the software they create are more likely to create software that’s actually worth using. That’s not always the case, of course, since most developers don’t really fall into the “average users” category. Case in point: upgrading my computer to Lion broke my installation of Steam. I fixed it with a quick command line incantation, then performed a couple more in order to make The Stanley Parable functional under OSX. Most computer users would not be comfortable doing something like this, nor should they have to.

As well as using your company’s products at work, it’s generally a good idea to use them at home. It’s always good to have a feel for what your company actually does and get more experience with it. I’ve used Google search more or less exclusively for at least ten years. That’s not really a hard choice. It gives the best results. Likewise, I started using Google Chrome is my main web browser pretty much as soon as it was available for the platforms I used (in my last job that was actually Windows, OSX and Linux). I use iPhone in preference to Android, however, though I do have an upgrade due me towards the end of the year and it’s not completely inconceivable that I might switch. For the time being at least, I’m definitely sticking with WordPress, so I won’t get to play with Blogger, Google Analytics or AdSense, either.

As well as dogfooding Google products at work, we also dogfood technologies and platforms. This sounds fairly obvious, but it’s not always the case with companies who create platform technology. Microsoft, for instance, used to be famous for not using the technologies they provided to developers internally, though they are getting better now. Some of Google’s technologies are open source, and thus available for everyone to use. Guice and Protocol Buffers are pretty good examples of this. Guice is amazing, by the way. This being the case, there’s nothing to stop me using them on personal projects, should that be appropriate. Personal projects such as Clockwork Aphid, for example.

I’ll talk about which particular Google technologies I think might be useful in later blog posts, but since I brought it up, I suppose I should probably say something about Clockwork Aphid. I’ve blown the dust off the code, tweaked a couple of things and got a feature I’d left half finished back on track. I tried switching my current implementation from jMonkeyEngine version 2 to version 3, only to find that while it does appear a lot faster and improved in several other ways, the documentation is pretty crappy, and it’s less… functional.

I’ll talk about that more later, but for now just know that things are once again happening.



Yes. That’s right. I did it. I used a sed expression as post title.

I’ve been very quiet as of late, though in my defence I’ve been very busy for a few months. In the middle of that I had a potentially life changing decision to make, and then I was dealing with the ramifications of the choice I made.

As you may have gathered from the post title (even if it mostly looks like crazy speak to you), the choice was whether I should accept a job at Google or not. Believe it or not, it was a choice, and a fairly hard one. There are various reasons for this. I’m not going to go into all of them, though I will go into some, but let’s start with a little bit of background.

It started with the receipt of a LinkedIn message with the subject “Hello from Google.” and ended with me standing in a car park being offered a very good job. Regarding what happened in between: the Google interview process is lengthy and pretty hardcore. Reputedly the most hardcore in the entire of the tech industry. But having a gruelling four and a half hour viva a little over a week before your main interview can make it seem like a walk in the park, albeit a mentally tiring one.

So then I was left with a choice. I could stay at my good job at a small but growing company with a lot of potential, at which I knew I had some prospects. I’d still be working in an industry which I know, and which to some extent knows me. I’d stay in a city I love (and have loved since the moment I set eyes upon it ten years ago), surrounded by a wonderful group of friends.

Alternatively I could accept an incredible opportunity to work at one of the most exciting companies in the world, which is famous for treating it’s employees incredibly well, and has projects which excite me more than I can adequately express in words. But I’d be changing industries and I good portion of my existing knowledge might be useless (or more useless, as the case may be). I’d have to move to London, a city I like but don’t know that well, and feel slightly intimidated by. As luck would have it, though, I do have a group of close friends living in London, who are also awesome.

It was a very hard choice, and it came down to a couple of things:

  • A former colleague put it to me that if I turned this offer down I’d hate myself for it every time I had a bad day (or spent a year putting my life on hold for a field trip which was consistently two weeks away from happening);
  • Another colleague suggested that I would be swallowed up by Google. A tiny cog in a huge machine. Which is potentially true… and a little scary. But… the other analogy people use here is “small fish in a big pond.” There’s a distinction to be made: fish grow, cogs don’t. Unless you put yourself in a bigger pond, you’ll never find out if you have the potential to get any bigger.
  • It would be nice to not work for the oil companies and the military. Not necessarily because either party is evil, but because of the shear amount of red tape involved.
  • I’d been feeling as though I’d been stuck in a rut for a while, and really wanted to shake things up somehow.
  • It’s frickin’ GOOGLE!

So. Here I am. In London. Staying in wicked temporary accommodation. Tomorrow is my first day at my shiny new Google job, and right now I should really go to bed!

PS More updates coming soon I swear, though it may be a month before I can get back to my Clockwork Aphid project, for logistical reasons.

Brave New Worlds

If you were writing a taxonomy of stories you might choose books as a good place to start. Flicking your way through the world’s libraries, time and the Dewey Decimal System would eventually bring you to the fantasy genre. There is a lot of fantasy writing out there, and you might choose to subdivide it further. A one potential way of cutting it neatly in twain is like so:

  1. Stories set in our world;
  2. Stories not set in our world.

Simple. Harry Potter, for instance is set in our world. That’s a big part of the appeal. Likewise so are Neverwhere, Kracken (if you like’d Neverwhere, you’ll want to read this), and most of Stephen King’s work. Lord of the Rings is not set in our world. Simple. There are other options, of course. What about the  Chronicles of Narnia, for example (which is set in a world beyond our own)? Or Magic Bites* (which is set in an alternate version of our world)? Clearly we’re looking at some shades of grey here as well, but I’m sticking the with the original idea while it still serves my purpose.

What is my purpose here, though? Why the ramblings on this most nerdy or genres? Well, I’m thinking about procedurally generated landscapes again, you see. Clearly, if you’re generating your landscape procedurally, it’s going to be entirely of this world. Existing fantasy landscapes are a good place to look for ideas, then, particularly because they were designed specifically for the purpose of telling stories in.

The quintessential fantasy landscape is, of course, Tolkien’s Middle Earth, which looks a lot like this:

Middle Earth

That should look vaguely familiar to anyone who’s read the films or seen the books (or words to that effect). There’s a definite feeling of size there. Clearly we’re looking at a chunk of a continent, split into something not unlike countries. It always bothers me on maps like this, though: what about the rest of it?

There are a couple of well known knock offs of Tolkien’s work out there, so why don’t we consider a few of those as well? One which used to be close to my heart in my adolescent years is Games Workshop’s Warhammer:

The Warhammer World

Now, it should be quite obvious that the good chaps at GW are knocking off more than just Tolkien here. The Big G / the anthropic principle (depending on your world view) could probably claim some royalties here, because the shape of some of those continents looks very familiar. Grand Cathay, indeed. Now we appear to be looking at close to an entire planet, though, unwrapped using something not unlike the good old Mercator projection (or possibly something more politically correct). I assume so, anyway. It’s entirely possible that the Warhammer world is flat.

Another world with more than a bit of Tolkien about it it the World of Warcraft:

The World of Warcraft

Blizzard have taken no chances, though. This is a world you can actually go wandering about on, virtually speaking. They’ve made sure there aren’t any inviting edges for you to go wandering off. If this isn’t the entire of the world, it is at least self contained. That doesn’t stop Blizzard causing new continents to pop to surface whenever they need to make new content, of course.

Okay, I’m only going to show one more, then I’ll get to the actual point. This is a big one, though, so take a deep breath:


This is also one you might be less familiar with. If you haven’t already, I heartily suggest you take a look at George R R Martin’s “A Song of Fire and Ice” series, which starts with “A Game of Thrones,” which is not coincidentally the name of the TV adaption of the books which starts on HBO quite soon. This is probably the best of the four maps I’ve posted here, thanks to a fairly stupid amount of detail (click on it, I dare you). This detail is evident in the books themselves (which I have to confess are not for the faint of heart) as well. This giant map actually represents only a smallish portion of the world these books are set in. It makes a good illustration though. We have mountain ranges, plains, rivers, cities, castles and so on.

If I’m going to procedurally generate a landscapes to tell stories in, they need to have at least a percentage of this amount of detail. Take “The Neck,” the narrow portion of land around halfway up, for example. The fact that the land perceptively narrows here feeds heavily into the plot at several points in the books. This is a choke point which cuts the continent in half. Likewise, “The Eyrie” (*shudder*) is a fort sitting at the peak of a mountain range. Towns are in places that towns would be placed: bridging point on rivers, sheltered harbors, and so on.

The point is this: my procedurally generated landscapes will need variety, but the right kind of variety. They will need “features.” That’s the first major problem I’m going to need to work on once the basic engine is in place, but first I need to make a decision: should this be done top down, or bottom up? Or some combination of the two?

First, though, I need some terrain simplification and some unit tests. The unit tests I’m actually quite looking forward to doing (oddly), since I’m going to try doing them in Groovy.

PS I wanted to include the world from Brandon Sanderson’s utterly spectacular “Mistborn” series here as well, but I couldn’t find a good map online. These books are truly awesome, though. As well as been part of a series, each actually stands alone and completes it’s own story, unlike the fast majority series in the fantasy genre. Seriously. Read them.

* Confession: I enjoyed this book, even if there is a gramatical error in the first sentence. The very first sentence.

Location Location Location

One of the few things I’ve missed since abandoning the good ship Windows PC for the Mac… er… Zeppelin (why not?) is magazines. I used to really enjoy reading the PC gaming and hardware mags. Oftentimes they were pitched at about the right level for me. I felt neither patronised nor confused. I’m afraid to say that this is not the case with Mac magazines. For the most part they tend to aim a little low, tech wise (no kidding, right?). I did also try Linux magazines, but generally found them to be way too dry and not especially well written. Once again, quelle surprise. Quelle surprise beaucoup.

So I was, as I’m sure you can imagine, quite overjoyed to discover Wired magazine. A platform agnostic tech magazine pitched about the right level (ish) for me, tech wise, whilst also having some focus on the business side of technology? Win! If you’re not reading it already, I highly recommend it. So, when Wired decided to give the cover story to location based social networks, concentrating on Foursquare and Gowalla, I though “sure, what the hell?” and gave them both a go.

That was a good couple of weeks ago now, and I can categorically say that I’m not sure if I like them or not. Nor am I sure which of the two I prefer. The idea, basically, is that you periodically tell them where you are.

Where are you going? Wait, there’s more.

It’s a game of sorts, you see. Foursquare awards you points for visiting places (more if they’re new places) while Gowalla gives you badges in your”passport.” Both of them also award you bonuses for various things, and Foursquare declares you the “Mayor” of locations if you visit them more than anybody else. There is a bit more to it than this, of course, there’s a social aspect, connected to both locating your friends and finding out where is currently “happening,” (this is the correct term, yes?) but I think I’ve given you the gist.

On balance: foursquare seems to do more in terms of the whole “life as a game” idea, and makes it feel more worthwhile to visit places multiple times… but Gowalla has a MUCH better design, and the badges and pins (achievements) it gives you are much prettier, but lacks the competitiveness of Foursquare. I think, at this point, I would tentatively recommend both, but particularly Foursquare if you’re a competitive sort. Either way, feel free to friend me if you do give them a try (it’s free).


Note: If you’re reading this on facebook, thanks for reading my blog! Please do leave comments, but I’d be very appreciative if you could leave them on WordPress (here) and not on facebook. Thanks!

As you may or may not know, I’m currently in Australia. In fact, I’ve now been here for a little over a month. I’ll blog about it sooner or later, but not yet. This is largely because I don’t know what I’m going to say. This trip has been an alarming combination of coolness and frustration so far, and I don’t want to let too much of the later slip out. That would be highly unprofessional of me, and possibly not great either for my employer or my career.

This post shall be about something else.

I have a side project that I’ve chomping at the bit to get started on, and while I’ve been here I’ve worked up a couple of fairly good ideas for it. I can’t start work on it, though, because I only have my work computer with me, and a studiously avoid doing any side projects or personal work on it, just to be on the safe side, intellectual property wise. Aside from reading up on things and doing some scribblings on paper, the other thing I can do is set up a bit of infrastructure. I’m going to make the project public, both in terms of open sourcing the code and blogging about the ideas behind it (at least to begin with). But where, though? Here’s my dilema: I’m HarveyNick on wordpress, Tumblr, Twitter* and now BitBucket (the place I’ll be hosting the code – side note: I’ll be going with Mercurial for revision control). Should I write the blog entries here (and have them trickle down to tumblr and twitter), and host the code directly under HarveyNick’s account on BitBucket? Let’s say I name the project after my old band, the repository would be

Which stamps my ownership on it quite heavily. Likewise, if I put blog entries here: same situation. In some senses that’s a good thing. Right now, it’s my project. I might not always want it to be that way, though. Getting other people involved might also be good. I tend to work better (a lot better) when I have someone to bounce ideas off. So let’s consider option 2; I put the project under another umbrella, and give myself (ie the harveynick identity) access to it. Let’s say I go with one of the names my old band was thinking of switching to after some assholes in Chicago threatened to sue us. That would put it here:

I could then start a blog to talk about it, and perhaps link the entries here. Should other people start playing in this particular sandpit, then they could perhaps add their own entries to this blog.

You’re probably not interested in this. I’m mostly just thinking out loud. But if you have any thoughts, I’d love to hear them.

* Why do I have all three of these? I’m not entirely sure yet, other than because they’re there.

That iPad thing

Originally, right after I got around the watching the keynote presentation which launched the iPad, I was going to write a blog post about how disappointed I was. I thought they’d screwed the pooch and I, for one, was seriously underwhelmed.

Needless to say, I didn’t quite get around to writing it. Since then I’ve read all the criticism by the naysayers and Apple haters, all the gushing praise from the fanatics and all the stuff in between from the more sensible people*. Now, after some reflection, I find myself somewhere in the middle. I flip back and forwards between thoughts of “that could be awesome,” and “that’s far too much of a compromise.”

Ironically, the thing that’s bringing me around to the idea is the very thing which people seem to be complaining about the most. Specifically: “It’s just an iPod Touch with a bigger screen,” which, in fairness, is exactly what I was thinking. It’s not a bad thing, though. The iPod Touch (and iPhone) have a spectacular interface. The touch controls work well enough and the device is responsive enough to make you feel is though you’re interacting with your music or the internet or your emails in a very direct manor. As a matter of fact, the main limitation of the interface is the small size of the screen. Ah hah…

I think what actually happened is that Apple made a mess of the keynote. Yes, the first person shooter was very pretty, but not really ideal for the interface. A real time strategy game, something like command and conquer, could really sing on this thing. The iWork apps look pretty cool, but a multi-touch version of iMovie or GarageBand could have been seriously impressive. They really didn’t make me believe that I could comfortably read a book on this thing… but if they’d announced text books for the iBooks store and placed an iPad next to the pile of books you usually need each year… well, then we’d have been talking. If they’d have shown how you could search the contents of a text book, spot light style, I might have been sold. Instead they left me to have to think of these things by myself.

I still not 100% certain I know what it’s for, though. Does it replace my laptop? Does it go alongside my laptop? Would I use on the sofa? Probably. On a short journey? Can’t see me getting it out on the bus. A long journey? Yes, I think so. Sitting in a coffee shop? Maybe. It would take up less room on the table. Sitting in the park? A tad more risky. But still, I don’t know. I’m disinclined to spend £500+ on something which is just a toy. I think I can live without multi-tasking, but there needs to be a better system to allows different apps to work together. What use are great OmniGraffle and Pages apps if I can’t insert a diagram from the former into the latter?

Bottom line: I’ll go and have a play with one after they come out. Then we’ll see.

PS For my parents, though, the damn thing is almost perfect.

*Well… I say “all”… what I actually mean is “some.”

Call by the what now?

Some not work related computery bits and pieces have been percolating around my head for some time now. I think we should talk about them for a while. That is: I’ll talk. You listen.

I’m probably going to write a couple of more techy blogs, all loosely interrelated. I am going somewhere with them, but I’m not entirely certain as to how much of this journey I will share with you.

First of all, I’m going to talk about the fairly simple computer related concept of “Call by reference” versus “Call by value”. This is fairly basic computer science (though I wish they’d taught it properly earlier on in my course). It’s possible (probable, even) that this example (or variations of it) has been used a thousand times before. I’m not going to go look for one (or the absence of one), I’m just going to write down my own particular take on it. I assure you that any plagiarism I’m about to commit is in no way deliberate. So, without further ado…

Let’s say you want to send a specific piece of information to someone via email. Let’s say it’s part of today’s featured article on Wikipedia (William I of Orange, at the time of writing). In today’s connected digital world, you have too main options. First of all, you could send them the information itself, like so:

William was born in the castle of Dillenburg in Nassau, present-day Germany. He was the eldest son of William, Count of Nassau and Juliana of Stolberg-Werningerode, and was raised a Lutheran. He had four younger brothers and seven younger sisters: John, Hermanna, LouisMary, Anna, Elisabeth, Katharine, Juliane, Magdalene, Adolf and Henry.

There are several things your recipient can do with this. They can read it. They can edit it, but this will only edit their local copy. The original remains unchanged. If they want to request that a change be made, they can, however, edit it and send it back to you. This is “calling by value.”

Your second option is to send them a link to the information:

This, again, allows them to read it. They have to follow the link to the information it points to first, though. This time, if they make an edit (this being wikipedia) they actually are changing the original copy. They can also see what other information is around it, and if they feel so inclined they can change that is well. You might consider this to be an undesirable consequence. This method has the aditional advantage, however, that you did not have to take the time and effort to make a copy, and the amount of information you had to actually send is significantly smaller. This is “calling by reference.”

If you deal with this sort of thing on a day to day basis, you may well be aware that when you do this sort of thing in a computer program you have another option. You can send a constant reference, which would be analagious to sending a link to a website the recipient has no write access to. For example: