Boogie Board Rip on Linux

I’m fed up of making notes on scrappy bits of paper that I lose, so with some money I got for Christmas I got myself a Boogie Board Rip. I’m not going to do a full-blown review here, but essentially it’s an etch-a-sketch on top of a portable graphics tablet. The graphics tablet bit is battery powered, and converts what you draw to PDF. The PDFs can be accessed by plugging the board into a PC via a Micro USB cable. Some people complain that it’s not very good for drawing, but I only wanted it for writing and it’s great for that.

After using the board for a couple of days I found this piece of software and this blog post. It turns out that as well as appearing as a USB storage device when plugged in, it also appears as a human interface device and spits out a stream of binary (32 bytes of it to be exact) for each event that occurs on the device (button presses, movement of the stylus, etc). With a bit of help from the aforementioned blog post I’ve managed to decode the binary and write a short Ruby script that reports what’s happened each time you do something.

The script as it stands at time of posting is shown below. The latest version is available on github.

    lsusb = `lsusb`
    if lsusb.split("\n").select{|l| l.include? "2047:ffe7"}.count == 0
        raise "Boogie Board Rip not currently connected"

        dmesg = `dmesg`
        bbdev = dmesg.split("\n").select{|l| l.match "2047:FFE7.*hidraw[0-9]"}.pop.match("(hidraw[0-9]+)").to_s
        raise RuntimeError if bbdev.empty? 
    rescue NoMethodError, RuntimeError
        raise "Boogie Board Rip detected, but device's path could not be determined"

    events = []
    threads = []

    thread = do
        board ="/dev/"+bbdev, 'r')
        while true do
            data = board.sysread(32)
            event =
            data.bytes { |b| event << b }
            events << event
    threads << thread

    thread = do
        previous =, 0)
        current = []
        while true do
            current = events.shift
            next if current.nil?

            if current[10] != previous[10]
                state = current[10]
                pstate = previous[10]
                lock = 32
                erase = 4
                wake = 2
                if (pstate == pstate | lock) && (state != state | lock)
                    puts "Board unlocked"
                elsif (pstate != pstate | lock) && (state == state | lock)
                    puts "Board locked"
                if (pstate == pstate | erase) && (state != state | erase)
                    puts "Erase released"
                elsif (pstate != pstate | erase) && (state == state | erase)
                    puts "Erase Pressed"
                if (pstate == pstate | wake) && (state != state | wake)
                    puts "Wake released"
                elsif (pstate != pstate | wake) && (state == state | wake)
                    puts "Wake Pressed"
            if current[3] != previous[3]
                state = current[3]
                pstate = previous[3]
                detected = 32
                contact = 1
                if (pstate == pstate | detected) && (state != state | detected)
                    puts "Pen Lost"
                elsif (pstate != pstate | detected) && (state == state | detected)
                    puts "Pen Detected"
                if (pstate == pstate | contact) && (state != state | contact)
                    puts "Pen contact lost"
                elsif (pstate != pstate | contact) && (state == state | contact)
                    puts "Pen contact detected"
            cury = current[4]+(current[5]*256)
            curx = current[6]+(current[7]*256)
            prey = previous[4]+(previous[5]*256)
            prex = previous[6]+(previous[7]*256)
            if cury != prey || curx != prex
                puts "Pen moved from ("+prex.to_s+","+prey.to_s+") to ("+curx.to_s+","+cury.to_s+")"
            previous = current
    threads << thread

    threads.each{ |thread| thread.join}
rescue RuntimeError => error
    puts error

It’s very rudimentary at the moment, and needs to be run as root so the device can be accessed, but hopefully with a bit more hacking I’ll be able to get something graphical up and running. It also strikes me that you should be able to use the Boogie Board like a Wacom tablet if someone would be good enough to write a device driver. It’s a bit beyond me but the information’s pretty much all there in the script!

Falling out of love with Spotify

I’m sitting at my computer about to cancel my subscription to Spotify Premium. They’d like to know why I’m cancelling, which is fair enough, so I’m going to go through the reasons here. It might get a bit long, but hopefully it’ll be worth reading. If I get a bit passionate I’ll probably swear a bit too. Stick with it.

The Short Version

Spotify is no longer worth £10 a month to me.

The Long Version

There’s a few reasons why I’ve decided to cancel my subscription. Once this is for certain: it’s nothing to do with the service. Spotify as a concept and a technical implementation is excellent. I’ve used it for about two years, first as a free user then as a subscriber. I will probably continue using it as a free user.

No Comment

However, I do have a few issues with Spotify as a company, particularly when it comes to customer service. Lets take a couple of examples.

I have always ripped my music to the free high-quality Ogg Vorbis format, rather than MP3. Spotify also uses Ogg Vorbis for streaming, yet doesn’t allow you to play your own Ogg files through Spotify, only MP3s. When I questioned their customer support about this I pretty much received “Fuck off and die, no comment”. I mean, I’m not a journalist probing you for a juicy story, I’m a paying customer who wants to use your software! Is it too much to ask for a proper answer?

Another fine example of this attitude is this Get Satisfaction thread pertaining to an issue with the Spotify Android client. Essentially, if you try to use a decent sized MicroSD card to sync your Spotify songs offline, it tells you the card is full and won’t sync. Spotify’s initial response was akin to “have you tried turning it off an on again?”. After they realised this didn’t work, they simply said “We can’t recreate this” and stopped responding. That was a year ago. There have been 34 further reports from customers.

Pay Per Play

The primary reason I’m leaving has very little to do with Spotify themselves. It has to do with the other people who make Spotify work: the record companies and musicians.

If you follow my blog you’ll know that InsideOut Music, purveyors of the world’s finest Progressive Metal, recently pulled their entire catalogue from Spotify with no warning. They have since posted a statement explaining why. This seems to be a bit of a trend recently, as a couple of articles on from around the web show. The trouble is that, as Techcrunch put it, they’re “totally missing the point”.

InsideOut justify their departure with the sweeping statement that “Physical sales are dropping drastically in all countries where Spotify is active.” No shit, Sherlock. Physical sales? Physical sales have been dropping since the invention of the iPod. The noise that these labels make is all focusing on how much artists get paid. Now if you’re in a band, correct me if I’m wrong, but if I want to make sure you get a decent amount of money from me, I’m not going to buy your CD. I’m going to pay to come to one of your gigs, and probably buy some merchandise. Am I right?

It actually surprises me how much I, and apparently other people, will pay for gigs and merchandise. Through Spotify, I’ve discovered some amazing bands who I’d love to see live. If Arjen A. Lucassen’s Star One tour the UK, there’s virtually no ticket price that I’d consider too much. If I’d joined Spotify a year later than I did, InsideOut would have already pulled the music, and I wouldn’t have known that. Every time Iron Maiden play a gig, there’s a T-shirt which you can only get at that gig, featuring their mascot Eddie. They usually cost £20/£25 a time, and they sell like the hottest of cakes. Stop worrying about how much you get paid per play, start worrying about how people find out when you’re playing, and that you’ve got T-shirts to sell them. Spotify can help you do this.


When it comes down to it, the problem is that the people responsible for keeping a large portion of the music I love on Spotify don’t get it. For the service to be worth money to me, they need to get it. I will still keep using Spotify Free as my primary way of discovering new music. Is your music on there?

Oggcamp 11 – the inevitable write-up

I’m back in the land of the living after catching the dreaded lurgy on Monday morning. I’m pretty convinced this was in no small part to a lack of proper nourishment and excess of tasty beer consumed over the weekend. What can I say? I was busy.

Those of you who follow me in any capacity online will be at least peripherally aware that I’ve been involved in organising this year’s OggCamp, a 2-day unconference/barcamp style event celebrating Open Technology. It was an amazing event, with talks and sessions covering music, electronics, ethics, and of course software and computing. From my point of view, everything to do with the event went really well, and I’d just like to the opportunity to share my highlights and thank some people.

The first highlight for me happened at about 3pm on Saturday. I got a call on the radio from Tony, one of my co-organisers, to this effect:

Hello Mark? Can you get some loo roll brought to the gents? There’s three cubicles and we’ve all run out of paper!

Another cool thing for me was Adam Sweet coming up to me after the live podcast recording and chatting to me about how it went. Those of you unfamiliar with the name, Adam is one of the presenters of LugRadio, the long-running Linux podcast whose live event, LugRadio Live, gave rise to the first Oggcamp 3 years ago. The reason that this was a particular highlight for me was that listening to Adam and his partners in crime including Stuart “Aq” Langridge and Chris Proctor who I also had a good chat with was what made me want to get into radio and podcasting in the first place. Musicians, imagine being told you’ve just played a good set by the band who first made you think “I want to play like that” when you heard them.

The final highlight I’d like to share is the sheer relief when everything fell in to place at the last minute. The doors opened at 10am on Saturday, and people could submit talks to be given throughout the day. Our first scheduled talk was to start at 11. Around 10.30, I realised that our first speaker was no-where to be seen, and a lot of the talks people were proposing weren’t appearing on the scheduling system. Slightly panicked, I proceeded to sit down with my laptop and try and work out where everyone’s talks were. By 10.50, I’d managed to debug the problem and fix it, just in time for us to get on stage for our welcome talk. At 10.55, our first speaker walked in the door. I love it when a plan comes together.

Lastly, there are a lot of people I’d like to thank publicly, in no particular order:

  • Tony Whitmore, for somehow managing to keep an eye on everything in the lead-up to and during the event (not least the finances) without his head exploding.
  • Dan Lynch, for always having an idea when a problem arose.
  • Jon Spriggs, for a very long Skype call.
  • Laura Cowen, for telling me I was doing a good job exactly when I needed someone to.
  • Les Pounder and the rest of the event’s crew, for who there simply aren’t words. You guys are incredible, and without you there would be no Oggcamp.
  • All our sponsors: Bytemark Hosting, Canonical,, Bitfolk, Google, Apress, O’Reilly (ya, Reilly) and Linux Format, who without which there would also be no OggCamp, since they paid for it. Buy their stuff.
  • Alan Pope, for this, and Alan Bell for filming it:

If you think you deserved thanks and I’ve missed you out, you’re absolutely right, shame on me. Thank you.

See you at OggCamp 12!

Victim of the Modern Age – an open letter to Inside Out Music

Dear Inside Out Music

I’d like to start by thanking you for bringing the world such great music. Symphony X, Pain of Salvation, Star One and a whole host of other bands from the progressive metal genre have been an inspiration to long-established fanbases, and newer fans (like me) alike.
I haven’t known about your record label for long. In fact, it’s only yesterday that I realised so many of my new favourite bands were on the same label. While my music taste is quite varied, my profile shows that your bands have been in my ears a lot in the past few months, and as a label you’ve certainly dominated my new listening for the past year.

Now you’re probably wondering what happened in the past year? Most of your bands have had well-established followings for many years, and I’ve been a metal fan for just as long. So what’s the incredible marketing force that’s drawn me towards your music? The answer is one simple word: Spotify.

I joined Spotify as soon as they were giving out accounts. At first I didn’t listen much, as their music which fitted my tastes was limited. However, as their library grew, I found myself listening more and more. Eventually, as I see the value of the service they provide, I decided that it was right to subscribe. £10 a month, for all the music I want. I get my music, I support a new and exciting business model, bands and labels still get paid. It’s using this service that I came across a compilation called “Music in progress“.

It’s fair to say that the album represented a turning point in my musical tastes. I was just getting in to Prog at the time (lots of Dream Theatre and Uriah Heap), and discovering such a great collection of bands with just the music I needed at the time was golden. What’s more, each of the artists’ back catalogues were just a click away on Spotify. Pretty soon my main playlist was about 50% Inside Out bands, and 50% other bands, some I already knew, some I was just discovering.

I recently took some time off work where I do most of my music listening (I’m a programmer, and the right music greatly helps my concentration and productivity). When I came back, I hit play on my usual playlist. After a while, none of my favourite bands of the moment had played, so I skipped a few tracks until one popped up (I listen on random). None came up. I took a look at the playlist for one of the bands, and found Symphony X, and all of their songs were greyed out. “That’s weird,” I thought, so I clicked through to the album and was greeted with a red banner proclaiming “This album is not available”. I looked back at the playlist. Star One – not available. Pain of Salvation – not available. Transatlantic – not available. Say it isn’t so?

What could have made all my current favourites disappear in one go? What was the link? Were Spotify just out to get me? Looking at the footer on the album pages, they all had one name in common: Inside Out Music.

So it seems that you’ve taken your music off Spotify. Pretty much all of it. And I have to say I’m heartbroken. Like I said, I’m not listening to your music for free, I subscribe to Spotify, and you get paid every time I play your songs. I discovered all of these bands through the same great service, and now they’ve been taken away from that service. Why? Who knows.

Now, I’m not presuming you’re to blame here. It could be that Spotify put you in an impossible situation and you had to pull out, or it could be that you haven’t fully grasped the modern age of music. (I have to say that your dead Twitter account and lack on fan engagement on Facebook suggest the latter). Whatever the reason, as a fan who likes his music digitally, legally, reasonably priced and on demand, it’s left me feeling confused and alienated, and I’m not the only one. Surely you’ve published an explanation of this travesty? No. There’s not even a mention of it on your website’s news feed, and other fans like me have been actively ignored on your Facebook page.

If you and Spotify can’t sort out your differences, at least give your fans a reason, and let them know how they can still listen to their favourite bands on the terms they’ve become used to. Need I remind you that your music is still available digitally, on demand and at a reasonable price? It’s available free, in fact, just not legally. Is that the road you want fans like me to take? I’m very respectful of copyright, but I can guarantee you that there are those who will respond to a situation like this by jumping straight to bit torrent, and that’s not good for anyone.

Mark Johnson

Drupal as an office suite

So right now, ownCloud looks like it’s going to provide a platform for running Google Apps-style web apps (presumably with access to the files you have stored in ownCloud), but it doesn’t provide it yet. My next task, then, is to find a system that can provide me with “office productivity” functionality on my Microserver. There’s a few things that this functionality could include, but I’m looking for the “big three” functions of documents (primarily simple stuff for note-taking), spreadsheets and presentations. There’s a few solutions out there that aim to provide an open source could office suite, including Feng and Zimbra, but neither provide all three functions that I’m after, and both provide a lot of extra functionality (such as email) that I don’t need.

When I found a solution that gave me the three functions and was installable on my own server, I have to say it surprised me a bit – it was Drupal. The thing with Drupal is that while it’s a “content management system” (CMS), it’s extremely extensible and configurable, and can be made to handle pretty much any content you want in the way you want. Here are the steps I took to turn Drupal into my cloud office suite:

  1. I did a standard install of Drupal 6.2
  2. I disabled anonymous access, so even viewing the front page requires a login
  3. I installed Sheetnode. This is a Drupal module that’s based on SocialCalc, a Javascript-based spreadsheet system created by the co-author of VisiCalc, the original spreadsheet software. The SocialCalc code needs to be downloaded from GitHub seperately from the Sheetnode module. Once this is set up, you can create new Drupal nodes that contain a spreadsheet.
  4. I installed the Content Construction Kit (CCK) and s5 Presentational Player module. This allows you to view specially marked-up pages using Eric Myer’s Simple Standards-based Slideshow System (s5), which has been my preferred presentation format for a while. Getting it working required a fair bit of tweaking, and again some of the code (specifically the s5 engine) needs to be downloaded separately from the module. Luckily the author has a pretty good video explaining how to set it all up, although it appears to be based on a slightly older version of Drupal so I still had to tinker a bit.
  5. As part of the s5 setup, I installed the Markdown filter. This lets you really easily create formatted text with wiki-like syntax that’s human readable and can be rendered as HTML. Only a subset of HTML tags are supported, but it’s fine for about 90% of the documents I’ll write, and I’m happy enough to code tags for anything else I need.
  6. Now the main functions were taken care of, all that remained was to make it easier to get to my documents. I started this by enabling the Search module, meaning all my documents would be indexed and searchable.
  7. I added 3 Primary Links which appear at the top of every page. One to create a new document (or presentation, since they use the same page), one to create a new spreadsheet, and one to view the list of all my documents. I also set the site’s homepage to show the list of all my documents, which gives it a nice Google Docs feel.
  8. I enabled Tags to allow my to quickly categorise all my documents as I go
  9. For Mobile access, I enabled the Mobile Theme module with Browscap to automatically switch the theme for mobile browsers. The theme I found to work best was Nokia Mobile, with the following tweaks to the styles.css improve the editing form when viewed on my phone (an HTC Legend):
    #edit-body {height: 20em;}
    .collapsible.collapsed {display:none;}

This solution may not be spot on for everyone, although I see it as fairly optimal for the way I work. Alternatives (for the less text-oriented) might include using the s5 Book module included in the Presentational Player package, and using a WYSIWYG editor instead of Markdown.

One other things that is missing is real-time collaborative editing. There have been several projects started to implement these features in Drupal but not a lot of progress seems to have been made. The one promising-looking module is Etherpad Integration, although it appears to pull Etherpads from an existing installation rather than having the functionality in Drupal. Probably still worth a look if that’s what you’re after, especially if it can be made to work in conjunction with the new Node.js implementation of Etherpad.

ownCloud – It does exactly what it says on the tin

The first step of my self-hosted cloud is to find a replacement for DropBox, the habitual solution for storing files online and syncing them to your various machines. While there’s lots of alternatives to DropBox (there’s even one built in to Ubuntu), they all follow the same model of renting disk space on the provider’s server, with no scope for installing on your own hardware. So I looked for an open source solution, and while there’s about 3 in the works, none of them are a drop-in (pardon the pun) replacement for DropBox. These include SparkleShare, which seems more geared towards collaborating on documents than Dropbox-style functionality, not that that’s an undesirable feature in itself, Syncany, which allows you to use any storage you care to name, but doesn’t have a stable release yet, and ownCloud, which doesn’t yet sync your files.

This sounds like a bit of a non-starter, but on closer inspection ownCloud does something wonderfully simple and frightfully clever. You install it as a PHP web application, and it provides a web interface to upload and access your files, nothing too exciting there. It also acts as a WebDAV server, however, which allows you to access your files in most desktop file managers on Linux, Mac and Windows. I’ve even found a decent WebDAV client that gives me access via my Android phone, and provides functionality on par with the Android DropBox client (which doesn’t do syncing anyway). It does rely on you having an Internet connection at the moment, but a syncing client is in the works as part of Google’s Summer of Code, and it could even work in conjunction with Syncany since Syncany supports WebDAV as a storage engine. The other brilliant thing about the choice of WebDAV is that it operates over HTTP, which means that you can pretty much guarantee access through any firewalls you might be behind.

There are additional merits to ownCloud’s file storage alongside WebDAV access, some of which are already in the stable version (1.2) and others which are in the works for the next version (2.0). These include version control using Git, automated backups of all your files, and encryption.

Aside from the file storage, ownCloud has serious ambitions. It provides a plugin architecture, which it looks like will enable web applications to be written and run on top of the ownCloud platform. Once the API of the new version is stable and documented, I’m hoping it’ll be possible to build some seriously cool stuff on top of ownCloud (open source Google Docs anyone?). However, that’s for the future.

Self-hosted cloud

So now I’ve got my Microserver set up, I’ve got a machine in my own house, which is always on, and provides me with some peace of mind that data I put on it wont get lost as the result of a single hardware mishap.

A while ago I experimented with Dynamic DNS, a system which allows you to direct a hostname to a dynamic IP address used for your home connection. This means that, even though your IP address changes, you can always access it through the same human readable address.

I’m a big fan of the convenience that “cloud-hosted services” provide. I use Flickr to host photos, I sync my files through DropBox, I make notes in Google Docs. However, there are 2 things that really bug me about these services. You have a complete lack of control over the service, where it stores your data, if and when it’s encrypted, and who has access to it. Also, you can never use your own resources – for example DropBox gives you 2GB of data, and you have to pay for more. Never mind if you’ve got a 1TB drive in your desk drawer, or 100GB of web hosting you’re not using, you’re using their resources and that’s it. That’s not the way I think of computing.

So I’ve hatched a plan: I’ve now got a terabyte of storage connected to the Internet, and an address that allows me to access it from wherever I am – At home, at work, on public WiFi, on my phone, all the places I might use cloud services. My plan now is to replace all the hosted services I currently use with an equivalent, open source solution that runs on my own hardware, and I’ll cover it in a series of posts. Keep watching folks!

HP Proliant Microserver review

I’ve been looking for a while for a machine that can run a RAID array, giving me somewhere to put my media and backups that wont lose everything if a hard disk dies. My real problem when looking for something that fits my needs is price. There’s plenty of capable devices out there, but they tend to get expensive quickly – a Drobo or multi-disk NAS box can set you back £300 before you’ve bought any disks.

HP have a product that fits the bill in both features and price – the Proliant Microserver. The unit retails at £199 + VAT, and HP have been running some amazing cashback schemes netting you the box for about £140 all in.

Microserver on a desk
The form factor is similar to that of a shuttle case, but not as deep. It sits quite nicely on a desk, and is small enough to hide away anywhere with decent ventilation.

Microserver front panel
The front of the Microserver has 4 USB ports, the power button, and two indicator lights – 1 for disk activity and one for network activity. The power button glows orange when in standby and green when powered on. Additionally there’s a nice blue light that illuminates the HP logo when the machine’s on.

Microserver back panel
Things are kept simple round the back, with a couple of extra USB ports, the Gigabit Ethernet interface and an e-SATA interface. There’ also a VGA port for connecting a monitor during installation. It’s worth noting the lack of PS/2 interfaces – you’ll need a USB keyboard (or at least an adapter) for installation.

Microserver with front panel open
Opening up the Microserver is simple. The keys provided open the lock on the right of the front panel, which swings open like a door to reveal the innards. Here you have the 4 hard drive bays, with the power supply tucked away on the left, and the motherboard underneath.

Microserver Motherboard
The motherboard is easily accessibile by removing a couple of torx screws (using the supplied torx wrench) and unplugging a few cables, after which is slides out. Notable features here include an internal USB port (could be used to add WiFi, or even USB storage for the OS) and the passive heat sink on the processor at the back. All cooling is provided by the large fan at the back of the case – luckily this is big enough to be able to run reasonably quietly while still providing adequate cooling.
There’s 2 RAM slots available – the model I bought came with a single 1GB stick, but up to 8GB is supported. There’s also a couple of half-height PCI-e slots which can be used to expand the server’s functionality.

Microserver hard drive bays
There’s room in the server for 4 hard drives. Each needs to be screwed into one of the supplied mounts, after which is can be easily slotted in to the mounted SATA connectors – no faffing around with cables! The disks dont connect to a RAID controller, although Fake RAID is supported by the motherboard. However, I’ve been advised it’s safer to rely on software RAID in this case. My server was supplied with a 250GB drive – I’ve added 2 1TB drives in a RAID 1 (mirroring) configuration. There’s room for an optical drive in the bay above the hard drives, but this can also be converted to fit an extra hard drive. Of course, if that’s still not enough for you, the e-SATA port and PCI-e slots leave room for even more storage to be added on.

Installing the server was straightforward – I created a bootable USB drive and popped it in the front, then told the server to boot it (it defaults to PXE boot when there’s no OS installed). Once up and running, it’s nice and quiet thanks to the single large fan, although it does vibrate slightly. Placing the server on my wooden desk amplified this somewhat beyond acceptable levels, so I ended up sitting it on some of the plastic foam that came in the box (as shown in the first picture) which fixed the problem straight away. The 1GB of RAM is easily enough for my purposes (more on that in the next few posts), although the processor isn’t going to win you any races. You get a dual-core 1.3GHz Athlon, which spends a lot of its time dynamically throttled down to 0.8GHz. This can make some things (like installing updates) take longer than you might expect, but it does give the machine a big advantage – very low power consumption.

All in all, this server is one of those devices, like the O2 Joggler, that’s not amazing in itself but is great for the money you pay. At the time of writing, HP are still offering £100 cashback for up to 5 units, and we’re running a competition to win one in an upcoming episode of the Ubuntu UK Podcast.

I mentioned on the show that I’ve been using the server to replace some of the cloud services I use with self-hosted applications. My next few posts will talk about how I’ve done it!

5-line Random Password generator

I needed to generate a random password. There’s plenty of scripts out there for doing this, but most involve creating a dictionary of characters, then looping for a given number of times generating a random number and picking out a character based on the number. I wanted a more compact solution so here’s what I came up with:

$chars = str_split(sha1(rand()),2);
foreach ($chars as $k => $char) {
    $chars[$k] = chr((hexdec($char)/255*95)+31);
$password = implode($chars);

It’s PHP, but can probably be replicated easily in other languages. Here’s what it does:

  1. Generates an SHA1 hash of a random number, then splits the hash into groups of 2 characters (each is a hexadecimal number =<255).
  2. Converts each hex number into decimal, scales it to value between 32 and 127, then converts that number to an ASCII character
  3. Creates a string from the array of characters

More Oggcamp Tickets (get ’em while they’re hot!)

Never mind hot, get then while they’re still there!
OggCamp tickets have been flying out the door as fast as we can release them, and we’ve just released another batch of 100!

About 45 of those have already gone at the time of writing, so if you want to come, you’d better get in quick! It’s awesome to see that there’s such a buzz around our little event that we do for the fun of it (we’re not making any money out of it, it’s purely for the giggles).

If the tickets are already gone by the time you read this, please do add yourself to the waiting list. You may be lucky enough that there’ll be returns, and if we know that demand is outstripping supply, we can look at which rooms we’ve got in the venue and possibly make more room.

If you’ve got a ticket and need a place to stay, we’re recommending the Premier Inn, Aldershot. It’s a pretty good deal and not too far away.

See you there!