Hack Manchester

Last month I attended Hack Manchester – a 24 coding event as part of the Manchester Science Festival, held at MOSI. Having only arranged to team up with Mike, we ended up joining two guys Shaf introduced us to, his colleagues from the BBC, by the names of Jack and Tom. The four of us formed a team, and after browsing the challenges set, we liked the idea of Intechnica‘s Bacon Number problem the most, but rather than just solve the Bacon Number problem, we derived the challenge and set off to build a tool to find the film set with the largest birthday party (most common birthday per film, among actors in the same film).

We decided the data provided was too poorly formatted, and because any alternatives (such as the Open Movie Database) required sign-up and prior approval, we ended up scraping IMDB for the actor birthday data. I wrote a Python script using Beautiful Soup which worked really well, it hit every day page on IMDB and stored each of the actor’s names in a MongoDB collection in the following format:

{
    birthday: '27-10',
    name: 'John Cleese'
}

I ran the script for the 1st Jan page, to see that it worked – and I had a number of records stored, all with ’01-01′ as the date, so it seemed to be working ok. I wrapped a loop around it to hit every day of every month. I started running the script, with no idea how long it would take. I quit it quite early and added a print statement on every new month for indication as to where it was up to. Just how I used to solve most of the number crunching Project Euler problems! I watched it run, and it seemed to take about a minute and a half per month, so it took about 20 mins to run in total (it also crashed out at one point when it got a 500 error from IMDB – I deleted all from the collection from May (incomplete) and ran it from there again, in order not to get duplicates, or miss any out!). Also, I should point out that we were having to run off tethering from my phone, because the Hack Manchester wifi only had 100 IPs to dish out (not ideal for a hackathon with 250 geeks with ~4 devices each!) – a real shame as I’m sure the organisers did all they could to reassure the providers that they would need a lot of connected devices. Quite a lot of data ran through my phone that night – hundreds of hits at IMDB, various packages (such as Beautiful Soup, the Mongo libraries, the IMDB text file data, etc.)

I sanity-checked this data, by looking at the number of records held in each of the dates in the collection. I noticed that 1 January had a significant number more than all the other dates. I assumed I had left the data in from when I initially ran it on 1st Jan to test the script – although it was more than 2, even 3 (actually about 10) times all the other days. I deleted Jan 1st and ran it on that day again, and got the same number. I looked at the IMDB page for 1st Jan and there were genuinely a lot more than for any other day. I asked around my team mates for an idea – someone suggested that people aim for 1st January as a birth date, but I said it’s not distributed among nearby dates, and that didn’t really make sense anyway. Of course (you probably already deduced this – please excuse us – we were tired), it was that 1st January would have been the default value if no date was entered, or maybe this list included actors without a birth date given.

I committed this code at around 1:45am, and about 45 minutes later, while browsing the team’s work on github, I noticed the commit times for some files. The times, given in a friendly time-relative human-readable way were:

30 minutes ago
in 16 minutes
27 minutes ago
an hour ago
5 hours ago

What’s that? I committed the file … in 16 minutes? As in, in the future? How is that so? Well of course, Hack Manchester happened overnight on the day in the year when daylight saving reverts back and we move from BST to GMT, and this happens at 2am, when it goes back to 1am. So every ‘time’ between 01:00 and 01:59 happened twice. I thought this was rather amusing :)

We then had a searchable database of actors and their birthday. Jack whipped up a Twitter Bootstrap web interface, in to which I added some PHP code (using the PHP MongoDB library) to display a list of actors with a given birthday, or show a given actor’s birthday. At this point we have no movies stored, so we had limited functionality.

Meanwhile, Mike had been writing a bunch of PHP classes containing methods for looking up the data. He’d also started writing a Ruby script to extract film-actor data from some text files he found somewhere. He’d had real trouble extracting out the data in a way it would be useful to us. It was tab-separated and had referenced films by random alphanumeric IDs rather than film names, and also contained a ridiculous number of porno films. Later on, Jack and I adapted this code to try to get it to insert the data in to our existing MongoDB collection. It was quite fiddly, and we weren’t really sure how accurately the data was being collated, but worth a try!

At this point we had a discussion about how we would store the data. Someone suggested:

We need another table to store the films, and another to store the film-actor relations

Erm, that’s not how Mongo works. I’m no expert, and my solution may not have been the best, or Mongo-est, but I know you can store lists as values (making multiple ‘tables’, or collections or whatever, unnecessary), so I suggested we would be fine to add a ‘movies’ field to the existing actor storage, which would be a list of films they’d been in, e.g:

{
    birthday: '18-12',
    name: 'Brad Pitt',
    movies: ['Fight Club', 'Inglourious Basterds']
}

We managed to figure out how to add the movie field to an actor, and how to append a movie to list already containing one, and we wrote this in to the script and let it run. We left in a print statement to see what was happening, which obviously slowed the process down a lot. Think about how many movies there are, and think about how many actors there are. Now think about how many instances of an actor being in a movie. That’s a lot. It took bloody ages. And didn’t seem to work. We were out of time by this point (in fact time was almost up when the program started running). Doing this properly we’d have tested it better, and ensured all data was being entered correctly. We were just having a bash at getting it to work.

All of us completely exhausted, we awaited the event closing and awards ceremony. Mike and I had stayed in the museum all night – each attempting a short nap on a couple of occasions, rather unsuccessfully in a room full of geeks bashing away at their respective keyboards. Tom had a prior engagement, so he shot off early evening, and Jack headed home later on due to problems with the wifi, and worked on setting us up an amazon instance to host the project from home.

Among the hackers were many friends of mine – including a team consisting of Michael Heap and Tim Hastings; an MMU team with Farkie; a Manchester Girl Geeks team; a couple of Laterooms team including Mark/Kirsty, Jim & Andy; a Thoughtworks team with Daley, and so on. I had plenty of people to chat to while taking breaks (I drank a lot of coffee) – and met a bunch of new people too.

It came to the closing and the winners of each category was named, and had a chance to give a short demo of their project. Some amazing stuff went on show – it was great to see so much innovation from so many teams. By chance, no-one else had chosen the Bacon Number challenge, so we won by default! A bit lame, I know, but the way I see it is that we weren’t so awful that they decided to withdraw! I count that as a win. And what was the prize? A brand new 512MB Raspberry Pi each! Can’t complain! Huge thanks to Intechnica for the prizes :)

Also a great big thanks to Gemma and Sean for putting the event on. It was fantastic! I will definitely enter events like this in future, even without a team – you can always group up with people and get something done. I was worried about working with people who used different languages or frameworks and that we wouldn’t be able to get things done, but we pooled ideas and skills together and managed to build some cool stuff! Also thanks to MOSI for the use of the space (all through the night!) during the science festival.

The code from our hack is available at github – it may or may not get updated/fixed in future, but at the time of writing was as we left at the end of the event

Also check out Farkie’s blog post on the Magma Digital blog – Hack Manchester 2012

PHPNW12

This weekend I attended the fifth (my third) PHPNW annual conference. As a member of the local PHPNW user group and community, I volunteer as a helper which involves getting delegates registered, getting the speakers to the right place and making sure everything’s running smoothly. Starting on the Friday evening hackathon social, I got chatting with a few faces old and new and once I’d eaten, got coding with Mike – we did the Ordered Jobs Kata in PHP – pairing and using PHPUnit. We continued with this, along with getting in conversations with other delegates, until around midnight – then Mike gave me a kickstarter demo on Phing – the PHP Deploy tool – which I’ve used before, but never written build scripts for, so that was a really useful session – well in to the morning!

Arriving at the conference centre bright and early, donning our new PHPNW12 red helper t-shirts we got people registered and handed name badges out. Once we had everyone settled in, the event kicked off with a truly inspiring talk from Google’s Ade Oshineye on relating API design to real world usability (like doors that are hard to work out how to open). I then shadowed Patrick_Allaert for his talk on PHP Data Structures – I learned an awful lot about the different data structures available in SPL – I had no idea they were even there. Picked up some other useful tricks and tips too.

I chatted with Ben Waine over lunch and headed over to Michael Heap‘s talk on designing systems to scale, though the room was full so I ended up hanging out in the “corridor track” with the Magma crew. In the next session I opted for the unconference track for Ben’s talk on ‘Testing Your Shit with Behat’ – cool to see Behat in action! Next up I was shadowing for Google employee Ian Barber, who gave last year’s keynote (before he worked for Google) entitled ‘How to Stand on the Shoulders of Giants‘, which is well worth a watch. This year’s on ‘How to Build a Firehose’. A really interesting talk on how to deal with exposing live data streams in real time.

Following the usual wrap-up of the day, the social happened.

Somehow I managed to get up in the morning and head back to the conference centre. The first talk was on Responsive Design at the BBC – a fantastic and intriguing talk from John Cleveley. The second talk slot had two talks I really wanted to see – Adrian‘s talk on using nginx on the Raspberry Pi, and ‘To SQL or To No(t)SQL‘ by Joroen Van Dijk – but I was down to shadow the other track, Recognising Smelly Code, which I really enjoyed – had some really good points and the speaker shared my adoration of good naming conventions and the single responsibility principle.

Another great conference – it gets better every year, without ever having been bad. Thanks to Magma for organising, and to all the sponsors and delegates for making it an awesome event. It really reminded me how great the PHP community is.

I will close with a statement expressing my opinion of Drupal:

Photo credit akrabat, Stuart Herbert and vcrgardener

Barcamp Blackpool 2012

This weekend was Barcamp Blackpool – held at the Norbreck Castle Hotel in North Blackpool. It’s the fourth event they’ve run since it kicked off in 2009 – and the second I’ve attended. Last year was great fun but I only stayed for the day – this time I stayed the night before and the night after, which exponentially increased the level of fun!

The pre-barcamp social was held at the West Coast Rock Café, where Robie and I had a “Big Pig” Burger and Ash had a 20oz steak. Don’t believe me? Here it is:

We had some laughs and I discussed music with Alex (aka “The Error Messages Guy”), which led to me debating with Mike about which Tony Hawk’s Pro Skater soundtrack featured the NOFX song The Separation Of Church And Skate.

In the morning we strolled downstairs for breakfast and headed over to the event where people started to congregate. Seeing the familiar faces and a few new ones, I chatted away. I noticed Freaky Clown had arrived, so I went over to introduce myself. I saw him speak at Hack To The Future and we’ve chatted via email and twitter but never properly met. He’s a very interesting guy – a grey hat hacker who goes by an alias. He works in penetration testing and computer security and takes an interest in lock picking. He blogs about his findings at The Grey Hats. He had been observing me throughout the day and watched me enter my phone’s unlock pattern, and told me he had. He also went round stealing people’s identities:

Following an intro talk from the utterly amazing organisers Lally and Les, the board kicked off and began to fill up. Failure on the part of Ash, Robie and me meant that none of us had, as we intended to, prepared a talk to give, so we just waited to see what other people were talking about. I browsed the board and saw a few interesting topics but with getting tied up in conversation with various people – including my old friends from Magma, I didn’t make it along to any talks in the morning. While chatting with Jack, I spontaneously decided to put down a talk I’d given at the first Manchester Raspberry Jam, but unfortunately I didn’t have the slides with me – so I’ll save it for another time. While chatting, Martin brought up the fact that (in his opinion) I want to swap my Android phone for an iPhone, and I explained to the group that it wasn’t true, and obviously they all played along saying I had an iPhone.

In fact in the end I only made it along to two talks – both by Freaky Clown. The first about image manipulation (detecting nippes in a folder of photos, etc.) and how easy it is to find out where someone lives by the EXIF data embedded in the photo file; the second on how he hacked the world in 7 seconds. Both excellent talks – I highly recommend you go see him talk if you ever get the chance. During his first talk my phone bleeped and he jokingly referred to it being my iPhone. Hilarious, FC. Following the closing remarks where I picked out raffle tickets for prizes (Android phone holders) and Gemma (who was the previous organiser) thanked Les and Lally, we headed to the bar. Drinking commenced, followed by dinner.

During Alex’s comedy act in the evening (involving vintage computer games) I was asked to go up to the front to demo a game of music management game Rock Star Ate My Hamster on his ZX Spectrum – a game brought out the year I was born – 1988! I got up to the front to play on it, sat down at the keyboard and realised I’d left my phone, tablet and netbook on the table. I had been sitting next to Freaky Clown. He’d seen me enter my unlock patterns and passwords that day so he could probably get in to them with ease. I was somewhat concerned. When I got back I expressed my concern (admitting my foolishness) and he said he wouldn’t do anything like that…

This was followed by more drinking and a couple of games of Werewolf:


I’ve never played Werewolf before, and the rules weren’t explained before we started playing, so I had a really weird experience. Things happened, I didn’t really follow why. People accused each other of being werewolves, rapists and other things, and some people seemed to get voted out of the game. Every time I shut my eyes I had no idea what, if anything, was supposed to happen. It reminded me of the sorts of games we played in Cub Scouts (wink murder, that sort of thing) but because things happened when my eyes were shut I couldn’t really figure it out. Every time I shut my eyes I had to convince myself this wasn’t some elaborate trick where I was being trolled by Ash, Martin and the others. I was eventually “killed” and left the game at that point. I went over to Tim to demonstrate my Rubik’s Cube solving ability, and went on to rejoin the group for a second game. I kept quiet most of the game while I tried to work out what was going on. It got down to there being four of us and I felt like I had to say something, so I sounded my view that of the two other people than Ash and me, one of them had aired deductive reasoning and the other only spoken up with jokes and messing around, but said it in a really vague way that Ash didn’t get, so they ended up voting to out the other one and if I’d have managed to get my point across I’d have been proved right and we’d have won. I understand the game better now and look forward to playing again. After that, I had my sexuality questioned by Martin’s girlfriend and we talked about Adventure Time. I then solved the Rubik’s Cube so fast it fell apart in my hands:


A few people asked me what the reason behind the emerging micro meme ‘MORNING BEN’ they had witnessed on Twitter. I explained the full story to a few people over the weekend – it starts with a few of us noticing that someone, who shall remain anonymous, always taking the opportunity to put me down and correct me over the tiniest detail, and us joking that if I were to say ‘Good morning’ and it was 12.00 or 12.01 this person would leap at the chance to say I was wrong. So Farkie started saying ‘MORNING BEN’ to me at 12.00 every day. And then Martin saw it, and did the same (not knowing the in-joke), and other people would see one of the tweets, at various times of the day, and do the same. Then a few more people tagged on, assuming the joke was just to say good morning to me in the morning. So now, most days, I get a bunch of tweets with ‘MORNING BEN’. Usually in the morning, which is ironic. And with the iPhone thing that’s now caught on, why not add that in? And call me a hero, like the papers did last week:

Had a fantastic weekend – great to catch up with friends and meet new people. I really feel at home at places like Barcamp, where people share my sense of humour and geekery! Where would I be without it? Probably here.

Hero Kayakers Rescue Whitewater Dinghy Man

Last Wednesday, 26th September 2012, two friends and I took advantage of the rainfall and headed to the River Irwell in Bury to paddle from Nuttall Park to the Burrs Activity Centre. Upon arrival at the park the rain began again, and as we approached the bank to put on, the water was extremely high and running very fast:

We got on and within a couple of minutes we hit the gorge section, which I would say was pushing grade four. Not particularly technical, but rather severe in its volume, with very big waves and rapids:

About half way through the gorge we spotted something orange ahead, as we got closer we noticed it was a person wearing a life jacket, clinging to a branch. We immediately got out to see what we could do to get to him. I paddled over in front of him and got out as close as I could. One of my fellow paddlers, Louis, had run around (there was a bridge ahead) and got to a position above the man. He set up a rope from above and I clipped myself to a tree with a sling. Louis threw the rope to him which he caught, but kept hold of the tree until we instructed him to get hold of the rope with two hands (he also appeared to be pinned against a rock, which made it hard for him to get out of where he was) – once he let go and freed himself, keeping hold of the rope, we guided him to the bank and I stepped out to pull him in (the sling restricting me from getting dragged out in to the flow), and between us we managed to get him safely on the bank. Meanwhile our other paddler Liam had called for the emergency services. I stayed with the casualty, waiting for assistance while Louis went to get a jacket for him to keep warm. The man was bare legged (just in underpants) and barefoot as his trousers and shoes had been swept off him. His legs and feet were cut and very bruised. I spoke to him once I got him seated safely, ensuring he stayed put and not try to stand up. I asked what he was doing, he said “rafting”, I said who was he with, he said by himself. I asked how long he’d been stuck where we found him, he said about half an hour (it was probably less). I asked his name, where he lived and if anyone knew he was out, stuff like that. I reassured him we would get him out soon (we were stuck on the steep rocky bank at this point, with need of assistance to get him up to the path). He kept muttering things like “I’m too old for this” and “I’m not doing this again” – he told me he was nearly 50 (though the papers said 55). He was extremely cold, somewhat bruised and battered (though no serious cuts or gashes) and obviously very shaken up. I also noticed he had a scratch on his head (at this point it occurs to me he wasn’t wearing a helmet!) – he said he’d done it last week, on another river. Shortly after, some rescue workers arrived on the path above and I signalled to them where I was. There were a few minutes of deliberation before they threw a throwline (Palm, might I add – the same ones we all had) down to me and instructed me to wrap it around both of us a few times – I did so, and they sent another one down telling me to do the same – so the two of us were now roped together with the ends tied to trees above. We heard and saw a helicopter above us, and more and more rescuers appeared above the bank. A few times they shouted things down to me, one of which was whether he could walk out. I didn’t think so but asked him, he said yes, so I relayed and added that he was barefoot. Some time later a couple of them (from Fire & Rescue) approached us from the side. They asked him his name and asked if he thought he could walk out if they guided him – he said yes but that he was concerned about sharp rocks, and complained of hypothermia. They shouted up to see if they could get him some shoes but didn’t in the end. They helped me unravel the ropes around us and said to leave them to walk him out. I was with him for about 40 minutes from getting him out of the water to leaving him in the hands of the rescue people. I went round to where it was easier to walk up the bank, and was asked to relay the information I knew to the police and the rescue team. There were about 30 people from the police, fire brigade, paramedics and such – all standing by on the path above, and then I noticed the array of their vehicles along the narrow road! They managed to get him out ok and sent him to hospital. The rescue people told us he had described his craft as an “inflatable dinghy”. We were thanked by the team and eventually we headed back to our car.

Thanks a lot to the fire service who really helped us get this man to safety. Excellent service and fast response. I was impressed with how quickly they started to review the situation and analyse how they could have improved coordination of getting their vehicles to the right place.

The three kayakers had every piece of equipment going, including ropes, wet suits, helmets and mobile phones, and without them and their equipment the man would almost certainly have died – the water was staggeringly fast. When crews arrived, the kayakers were in the water with the man and he was up against the bank, practically unconscious. The crews secured him using rope lines to stop him going down into the water while the water rescue boat made its way to the scene. He was suffering from hypothermia and some cuts to his legs and was taken to hospital for treatment.

~ Station Manager Kev O’Connor, Greater Manchester Fire Service The man was very foolish to be out on his own in an inflatable dinghy in flood without a helmet. (four no-no’s for me!) The annoying thing is this sort of thing gives paddlesport a bad name – when it’s not even real paddlesport. We were definitely in the right place at the right time – and just as importantly – with the right kit. It’s amazing how useful a few slings, carabiners and throwline can be. We could have easily said “we won’t have chance to throwline each other on this river” and not taken them, but we did by habit. To be honest I didn’t take everything I would if I was leading a larger group – no first aid kit, no spare clothes, etc. This has reminded me it’s important to carry emergency kit. It’s unlikely that anyone would have seen him to call for help. If we hadn’t have been there he’d have probably drowned, and then the papers would have said “canoeist dies in accident” – so at least we were there to turn the headlines around as well as rescue the guy.

Thankfully, some well-prepared kayakers were brilliant in helping the man and got our crews to the scene quickly and, with the professionalism and training of the firefighters, they were able to rescue this man. We hope he makes a speedy recovery from his ordeal.

~ Councillor David Acton, Chair of Greater Manchester Fire and Rescue Authority Here are some links to articles:

Also here’s a photo of today’s Manchester Evening News with the picture the fire service took of the three of us:

Update 9th May 2013: We received an award from the fire service.

ram_kayakers_smalljpg_497x350

Receiving the Chief Fire Officer’s Commendation for bravery at a presentation in the Ramsbottom Fire Station ~ River rescuers presented with bravery award

Manchester Raspberry Jam Continued

I’ve now hosted four Raspberry Jams in Manchester. I posted about the first and second, here’s a summary of what went on at III & IV.

The August Manchester Raspberry Jam kicked off when Kat opened up the Madlab and I gave an opening talk about what had been going on in the news in the Raspberry Pi community, featuring announcements like Raspbian and the Gertboard, and showed examples of what people have been doing with their Pis – including Freaky Clown ruinning Metasploit (a pen testing tool) to the Pi and my personal favourite, Pi in the Sky – the first Raspberry Pi to visit near space. I then got people to write down what they wanted to learn, or what they needed help with, and then what they would be able to help others with, and tried to pair or group people together to work on things.

Kat and Alex got straight on with playing Quake on the big TV, which was pretty cool. Meanwhile visiting newcomer Simon – who was shocked when the taxi driver who shuttled him from the station said he’d never heard of the supposedly world famous Madlab – got out his lego-built Pi/breadboard stand and demonstrated his Scratch/Python/GPIO hybrid project which involved a program built in Scratch which would run through the traffic lights sequence on screen when the space bar was pressed, and also feed the same sequence through to the LEDs on his breadboard. Amazing stuff  – if you’re interested in this sort of thing drop him a line on twitter, or take a look at the questions he’s posted to the Raspberry Pi forums to see if you can help.

We also had Paul helping his daughter built a game in Scratch, we saw a Motorola Atrix dock powered by the Pi, we even VNC’d in to a Pi using an Android app on my mobile phone and then from my Nexus 7 tablet! Around 5pm once people had helped my carry my 3 monitors, TV, laptop, netbook and bag full of cables back to my flat, we headed to the pub where we stayed for several hours, and where Simon kept his pink lego Pi kit out on the table. During this time we witnessed HacMan move in to their new hackspace premises just a couple of doors down from Madlab. The phrase “How many geeks does it take to network a hackspace?” was brought up and probably tweeted, as we watched them run a patch cable across the outside wall from Madlab over the café next door. The following day I got my Pi out at home (I never get to play at the Jam – I just end up running around making sure everything’s running smoothly, and in any case all my kit gets handed out and all the screens tend to be in use) and installed OpenElec on a spare SD Card (keeping Raspbian on another), which runs XBMC – a fantastic media centre which I easily managed to use to stream high definition video over the local network from my NAS. I tested it out with X-Men: First Class (720p) which played no problem – looks great on monitor or big TV! I’ve since installed the XBMC Android app on my phone and tablet and I can select something to watch on either device and tell it to play on the TV, then use as a remote control. The future is here.

A month later and we’re back in Madlab for Manchester Raspberry Jam IV – again I begin with a recap of the news: Revision 2.0, Made In the UK and Make Your Own PiOS, and move on to skill share pairing! As usual we get a couple of people who need help setting up their SD card so I volunteered to show them get them up and running, and everybody else just picks something and starts hacking! Simon fires up his pink lego kit again (and eventually ends up blowing it up somehow…), and a newcomer called Ian started work on a project which would allow the Pi to work as Time Machine to back up his Mac!

Later on in the morning a 10 year old kid came up to me and asked if I could teach him some Python (I’d put that up as a sharable skill on the wall) – I said I’d love to, and asked what he wanted to learn, and he said anything to get him started. His Dad sat next to us an observed, saying it reminded him of learning BASIC when he was at school. I started with printing a string, then storing a string in a variable, printing it from its stored value, then storing integers. We then looked at the difference between assignment (x = 1) and comparison (x == 1), and the first idea that came to mind for implementing some of this in a program was checking an entered PIN number against a set value. While showing him the syntax of things like if statements, I let the kid type away, letting him make mistakes if I thought he would learn from the error messages, sometimes asking him what he thought it would do (he would often spot a flaw immediately), sometimes just reminding him to go on to a new line or whatever. But he was doing great. Whenever we completed adding a new feature, I’d ask him what we could do next, so at this point he’d say, “Why don’t we give them 3 chances to get the PIN right?” and we’d look at how to implement that. We’d start by copying the code that asked for the PIN the first time, and sticking it in the ‘else’, so the user would be prompted a second time if (and only if) they got it wrong the first time.

Once we had that working, I introduced the while loop, and explained a simple use case whereby it would count the number of attempts made, and keep running over the same code in the loop until the number of attempts reached 3. Then while adding feedback “Your card is locked” if they were incorrect 3 times, I noted that we could make the number of tries a variable, so that we could change it once at the top and not everywhere in the code. He got that. Then we made it tell you how many attempts you had remaining, by subtracting the number of attempts from the number of attempts allowed. And then he said he thought if he learned any more he might forget what I’d taught him, so he wanted to stop and practise that at home. I emailed the file to his Dad and suggested he might want to try adding something that calculates the balance if they withdrew money.

We finished with a short presentation from a young lad called Barney, who had built a Morse code device with his Dad – you type in a word on the keyboard and the LED on the breadboard flashed according to the Morse codes for the letters in that word. Brilliant! Then we cleared up (and hauled the vast array of monitors to my flat again) and went on to the pub. Everyone always has great fun at the Jams, and everyone’s got something different they want to get out of it. Some just come and take notes and listen to people, some bring their kids to get them excited about computers, some bring crazy contraptions they hope to get working on the Pi with the support of the group, some – like me – just like being there! It’s a great atmosphere and it’s fantastic to see kids and adults playing away, learning and having fun! I don’t generally get much chance to do much myself, but it’s always nice to pass on some python knowledge and help out where possible – and to witness amazing things happening all around me! The Pi is a wonder and we all thank the foundation for all their work in getting it to where it is – and look forward to see where it goes next! Thanks again also to Madlab for hosting the events. I really don’t know how we’d do this if the space wasn’t available.