April 13, 2009

Many governments now employ 'internet filters' in order to censor the content which their citizens receive whilst browsing. As expected, China does this, and more suprisingly so does Thailand. Much more unexpectedly, so do the UK and Australia, as well as Denmark, and a host of other countries that should know better.

Whilst I can see the need for secrecy and censorship in certain very marginal cases, censorship is in general a bad idea, and this particular form of censorship is ridiculous and arbitrary. Much better is an educated citizenry who are free to decide their own morality and life choices. The Australian government for example has, at the request of some fringe nut, banned access to an anti-abortion site, and a site that has published a list of the sites censored by the Danish government, and also images of the band Hanson, and the website of a Queensland dentist (say what?). The UK government restricted access to a Wikipedia page recently because of a picture that some unaccountable, hypersensitive, parent run NGO found contained an objectionable image. The image was a low resolution scan of an album cover from the 1970s by the rock band The Scorpions. The premise for these bans (child pornography) makes no sense at all since the filters will have no effect at all against the perpetrators and those types of crimes are much better combatted at the source than by censoring the public who are largely uninterested in looking at such sites anyway. In other words, the filters are 100% political props and 0% useful in preventing crimes against children.

The good thing about all of this is that if you don't want the government deciding what you can and can not see on the web, it's extremely easy to route around, which is another reason why they shouldn't even bother: people will just find ways to route around their stupid filters anyway. In order to use one simple method of routing around government web filters you will need to do three things:

  • Get a unix-based server of some sort, hosted in a country where they don't do this type of content-based filtering, such as the United States which has freedom-of-speech laws.
  • Run this simple command on your local machine: ssh -D 8080 -f -C -q -N SERVERIP where SERVERIP is the IP address of your server.
  • Set your browser's proxy to point to a socks 5 proxy at localhost:8080

Getting a unix-based server is extremely easy these days thanks to the abundance of VPSes or Virtual Private Servers. The company I use to host my email and websites is called vpsland and they offer a machine running GNU/Linux for about $15 US per month. I suggest creating a user on your new machine and setting up an ssh-key so that you won't have to enter your password every time you start up your proxy. You can learn the ip address of your new server by typing 'ifconfig' after ssh'ing in to it.

Note that this means that all of your web traffic will now appear to come from the server, not from your local machine. Some geographically sensitive sites will now assume that you are browsing from where your server is located. For example, my server is located in Atlanta, USA, so if I ran a proxy like this it would appear to websites that I was browsing from there, not from here in the UK.

"Those who would give up essential liberty to purchase a little temporary safety, deserve neither liberty nor safety." -- Benjamin Franklin

April 10, 2009

Ubuntu GNU/Linux is a nice way to try out Linux, if you're interested.

April 4, 2009

Moose and I are in Barcelona for a couple of weeks while I get properly up to speed on the RjDj iPhone code which I haven't really been involved enough with so far, concentrating mainly as I have on the server side of things. We are really digging Barcelona and its lovely relaxed atmosphere, great food, and amazing buildings everywhere. We have even tried to pick up a little local vocabulary. Today we plan on taking a day trip up to Montserrat by cable car.

The social and server side features I've been working on for the last 5 months for Reality Jockey Ltd. along with the rest of the team, are finally online, co-incident with an update of the main app and the albums being made free for a limited time. This is in huge part due to Andie, who really kept us all focussed and moving constantly towards this target. Live site, at last! Feels great.

This is pretty exciting for me as it's the first time a project that I've been a part of has made it onto the Boing Boing network. Offworld post, yay!

In addition to that, RjDj chose to feature a couple of my scenes, which I worked on in my spare time outside company hours: CanOfBeats, and GhostWave, which has propelled them to into the 'most popular' position on the website. They never would have been finished in time if it was't for Frank and Florian's hard work at the last minute, fixing all my horrible bugs and adding nifty features.

My excitement is only tempered by the fact that I wrote a large amount of the server side code, so if it collapses in a heap under the weight of the ogling internet it's probably my fault. It seems to be holding up alright so far though, with most of the heavy content in Amazon's S3 cloud, and liberal use of FastCGI and LightHTTPd. The backend is mostly written in Django + Python if you'd like to know. Python is a king amongst programming languages and it means that I go to work each day looking forward to writing code instead of dreading null pointers, buffer overflows, lack of type flexibility, arcane syntax, and all of the other horrid issues which plague other popular programming languages.

The other huge piece of amazing tech that I should mention and which makes up probably the bulk of the client side code is the free and Open Source (BSD license) Pure Data DSP patching language by Miller S. Puckette. Whilst not a wonderful general purpose programming language, it does one thing and does it superbly. All of the RjDj scenes are actually just Pd patches with a fancy image or two and some custom externals running.

Good times!

March 24, 2009

I shouldn't call this a game design, because really it's just a random assortment of ideas thrown together in my head, and a mockup of the aesthetic I have in mind. The x's and o's in the background would move in parallax with relation to the ships and rocks.

Asteroids TNG Mockup

If I had time to make a game right now, this would be it. Basically it looks and plays a bit like Asteroids, but the rocks don't fly around crushing you - they hang still in space, and you shoot the coloured ones to get minerals from them. It's multiplayer and set in a persistent universe, so I guess that makes it an MMO. You can fly up to other people and talk to them, trade items with them, etc.

I remember the intense excitement of the first time I played a MUD, back in the mid 90s. It wasn't the game element of it that excited me - it was the exploration and social elements. I guess I am a fan of virtual worlds more than games in that respect. I'm not that interested in grinding.

Asteroids TNG would be a bit like Diabolo, but in space and with vector graphics. That is to say, there are some asteroids that you can land on, and when you do, the game turns into a Roguelike with one short 'dungeon' per asteroid, and simple vector graphics instead of ASCII graphics. All of the monsters would be futuristic alien sounding monsters, and instead of wands and scrolls you would find rayguns, data nodes, and nanotech stems, and instead of armour you would find field generators and shielding, etc. You get to keep the inventory of things you find in the asteroid 'dungeons', and you can trade these items with other people. Later there would be space stations where you could dock to meet up with people.

The whole thing would be procedurally generated using Perlin noise to generate an infinite asteroid map, and Rogue-like logic to generate the asteroid dungeons. Lately I have been reading and obsessing over the source code of Donny Russell's AGB Rogue, which is a conversion of the original BSD Rogue for the Gameboy Advance, and probably my all-time favorite Rogue. It goes with me everywhere on my Nintendo DS. The code is incredibly unclean, but it's fun to look at the probability tables and dungeon generating functions to get an insight into how they balance the game.

The music would be chippy as hell.

Won't someone give me a wad of cash to make this social roguelike space MMO? I swear I will port it to Nintendo DS, iPhone, web, Xbox360, widgets, gadgets, screenlets, Windows, MacOS, Linux, and the Wii, and make you millions of dollars.

March 21, 2009

PodSixNet is a lightweight network layer I've written to make it easy to write multiplayer games in Python. It uses Python's built in asyncore library and the simplejson 3rd party library to asynchronously serialise network events and arbitrary data structures, and deliver them to your high level classes through simple callback methods.

Click here to download it

I wrote this library because I'm forever thinking up multiplayer game designs and then starting, but never finishing, a new multiplayer game library for every multiplayer game idea. In other words, I get bogged down writing low level code and eventually lose interest in my original idea as it proves tricky to implement. I decided to get the multiplayer game library written once and for all so that whenever I get an idea for a multiplayer game, I can now prototype it up rapidly. I'm quite proud of the fact that this library is only a handful of simple classes, and weighs in at just two hundred odd lines of code. This is of course because I built it on top of Python's already cool asynchat (used by Twisted) and simplejson.

Two example apps are included with the source to help you get started. The first one is a simple console based chat program, and the second is a pygame based collaborative whiteboard. For each example start one copy of the respective server, ChatServer.py or WhiteboardServer.py, and then start multiple copies of the client to test.

Would really love to hear about it if you use this in a game!