Tuesday, 6 June 2017

Running A Code Club, Not A One Way Educational Street

You'd think that running a Code Club was a one way educational street, with the volunteer enthusing the children about what they could make these things called computers do, but after 5 years I've found the street to be very different with traffic flowing in both directions! You see by day I'm a software developer who once a week goes to a local primary school to run an after school coding club. You'd think that after 20+ years in the IT industry there would be nothing that the children could teach me, but every week I'm learning and being reminded of things!

Today primary school children are taught coding and computational thinking through environments like Scratch, a fantastic, welcoming and friendly place to start that firmly puts fun and creativity front and central. Individual commands are replaced with colourful blocks which can be snapped together to make programs that animate characters or control a robot. For developers who live in Microsoft's Visual Studio world, these definitely aren't fully fledged development environments! With a limited instruction set, few variable types and not the smallest hint of objects you are constantly having to go back to basics. And this is the thing that I am constantly reminded, "Keep it simple". At a time where new frameworks and developer tools are being thrown at us on a daily basis it's all too easy to get swept along with using them. Now I'm not saying that all these technological advances should be thrown away but a happy medium between the two should be striven for. Throwing in a "clever solutions" just for the sake of it while might seem like a good idea, could lead to others wondering how something works. Remember you’re not always the developer who will be doing the next change! If working as part of a team, code produced should not only do what is asked of it but also be easily manageable!

A child's head being full of ideas is the next thing I constantly face. Once they start seeing what they can create, ideas start tripping over each other. I want to create a game, a car driving game, through a maze, with monsters, and can shoot lasers! All this after they managed to make Felix the cat (Scratch's introductory character) bounce around the screen. This is the next skill the children constantly bring out in me, one of listening to someone's requirements. Then after listening, feeding back to them in achievable chunks and letting they know when something is impossible to do. Personally I want the children to leave each week feeling happy with what they have created and if they have some grand plan that they can see progression towards their goal. All of this isn't just applicable to the children's requests, as developers we can face these sort of challenges on a daily basis and if not handled properly can result in others not being happy with what is delivered and more stress on yourself.

Next is the children's level of creativity, it constantly reminds me to keep searching for new ways of doing things and to never accept the status quo. It's all too easy to just do something because it's the way it's always been done. But this doesn't mean it’s the right or best way. The children's creativity is never constrained by a box of what has gone before and neither should ours. Yes we may have been bitten by failures in the past and we bring these experiences to the table but that doesn't necessarily mean the same will happen now! Technologies change, advancements are made, so re-evaluate before casting an idea on the scrap heap.

Finally we have the children's boundless energy and enthusiasm. Sometimes it's all too easy to forget why you got into the IT industry, for me it was the love of coding, problem solving and logical thinking. Sometimes a job can end up being a mundane routine, something you do Monday to Friday, 9 till 5. Then every week the children's energy and enthusiasm remind me that I love to code too. Their attitude to all this coding lark is infectious. They remind me of my younger self, without the pressures of everyday life, where I was coding my own ideas, without deadlines. They remind me that within the confines of an IT job there are still places for everything they hold dear, keeping things simple, listening, realism, creativity, energy & enthusiasm. These kids aren't being forced to attend Code Club, they want to be there, they want to learn, they want to express themselves, they want to have FUN!

This blog post was written off the back of a lightning talk that I gave at a developers conference.

Wednesday, 17 August 2016

A New Academic Year, New Children To Introduce To Coding

13:07 Posted by Unknown , , No comments
As the start of the new academic year approaches I'm looking forward to returning to my Code Club and meeting my new "clubbers". Another group of children to enthuse about computers, encourage their creativity and show them what they can make these magical little devices do. OK over the last few years the primary educational computing landscape has changed, but I still see what I do as important as ever.

Even though I am a software developer my wish isn't to just roll out the next generation of software developers, there is so much more can be done. For starters to be able to show children that they can be creators and not just consumers is an amazing enabler. This one thing starts their creative journey and once their eyes have been opened there is just no stopping their ideas flowing. But creativity isn't alone for long as it's soon joined by enthusiasm, with ideas tripping over each other, each grander than what came before! Even if a child draws a blank for ideas, all that's usually needed is a small creative nudge. Now this is where the skill of honing a child's ideas into something that's achievable comes in.

Whatever a child comes up with, it is never a bad idea, maybe one that just needs a bit of tweaking. At the end of the day I want each child to walk out proud of achieving something, something that they want to share with others. If an idea is too challenging then they may walk out feeling deflated for not completing everything. If it is break it down into smaller chunks, let them see the steps they need to take to achieve their final goal, giving them something to tick off. It's also about managing expectations, making sure they understand how their ideas are being interpreted. I do all of this under the overriding umbrella of FUN! It doesn't matter if an idea completely changes or new elements get introduced part of the way through, just go for it. I embrace their creativity at every opportunity, interpreting their imagination into achievable outcomes.

Another thing that the children can't get away from is that computers are everywhere! With a better understanding, through coding, of how they work they will be able to get so much more from them (whatever they are doing). Familiarisation is everything. When something doesn't go right they'll hopefully be able to see it with fresh eyes and maybe correct the situation. There's nothing worse than being presented with a message and no idea of what to do next.

Also with this better understanding of computers they will now be able to embrace other subject areas within school with a new found skill. A skill that will be second nature to them, allowing them to concentrate on the subject matter and not the delivery method. This is the educational landscape that is changing the most at the moment as teachers get to grips with the demands of the new computing curriculum.

Of course I'm not doing all this by myself. Whilst I bring my enthusiasm, I don't have the educational knowledge to make sure I'm ticking all the right boxes. This is where being a Code Club volunteer means so much to me. I get all the support and resources I need. This includes fantastic projects that provide a framework for the children to both learn and to build their creativity upon. Usually by the end no two projects are the same, every child has put their own twist on what they were being asked to do. Seeing this amount of variation is great as it shows me that they are understanding what they are being asked to do as well not being afraid to go off track and experiment with their own ideas and concepts. Through this experimentation they find out more that the projects cover, collaborate with children and constantly surprise me with new and exciting creations.

So onward to another rewarding year of being a Code Club volunteer.

School vector designed by Freepik

Friday, 22 July 2016

Code Club, Making a Difference

16:01 Posted by Unknown , , 5 comments
For the last 4 years, once a week, during term time I have run an after school Code Club at a local primary school. If you haven't heard of Code Club before it's a nationwide network of volunteer-led after school coding clubs for children aged 9-11. In the 4 years since it's launch there are now more than 4,500 clubs being run each week across the country reaching over 64,000 children, and all this for free!

Now you may ask why I do this, well it's simple, to make a difference. Children are so open to ideas and to be able to show them what they can do with computers is a fantastic opportunity, it opens their eyes to a whole new world of possibilities. Many children are happy playing computer games but never once think how the games were created, how pressing left on the controller moves their character on the screen. Through Code Club I get to show them how to create simple animations and games and introduce them to coding concepts.

It doesn't just stop at coding though, it's also "Computational Thinking". For example we introduce to the children the idea of breaking big problems down into manageable chunks (decomposition) and developing steps to find a solution to a problem (algorithms). These aren't just applicable to coding either, they can be used across the whole school curriculum and provide a valuable life skill. So even if the children decide that coding isn't for them, they'll still take away something very useful. All of this is done under the overriding umbrella of just having fun, we don't force them to stick to the projects, if they want to add their own creativity, just go for it. The more they enjoy what they are doing the more they are learning.

Recently Code Club uploaded a post to their blog (https://blog.codeclub.org.uk/2016/06/28/the-benefits-of-code-club-for-schools-teachers/) that was written by Matt Warne, the teacher that I had run my club at Malvern Wells Primary School with until summer 2015. He moved onto a new school and I continued running my club with his replacement. The position he took at a large primary school in Worcester was as head of computing and IT. In his blog post he kindly finished off by saying;

“Code Club was a big factor in my journey as a teacher and also the impact of a volunteer Robert Bilsland was enormous. He was a fabulous role model and continues to inspire pupils and teachers to ‘have a go’ in this enormously rewarding subject.”

I find the fact that someone took the time to write such kind words humbling. The "Code Club Effect" is being felt by more than just the children in the club. By teachers helping at a club they are able to gain more confidence in the subject which in turn leads to better inclusion in other subject areas and sharing what they are learning with colleagues. This results in even more children (that don't even attend a Code Club themselves) benefiting indirectly.

Earlier in the year Code Club also named me as one of their "Champions". This recognised my continued support of Code Club, sharing my volunteer experiences with others, supporting activities like science fairs and presenting at meetings. I find the opportunities that I am given to help enthuse children about computing and share my enthusiasm for what Code Club is trying to achieve very rewarding. It is moments like these that mean so much to me as it shows I am truly making a difference.

Friday, 7 August 2015

Why now is a great time for VR and digital planetariums

We are at the beginning of a fantastic period for Virtual Reality, the latest of many waves going back as far as I can remember. With a whole field of VR headsets (Oculus Rift, Microsoft Hololens & Google Cardboard to name but 3) all vying to be the next big thing, focus is switching from the devices themselves to what they are going to be used for. After all without content they are nothing more than items that collect dust on a shelf.

Up to now a lot of developers have been focusing on virtual worlds to explore and play in, but now with advances in technology and falling costs the opportunity to shoot 360° video is now within the reach of more people. Everything from multi-camera solutions (360Heros & Google Jump), through single camera / multi lens devices (Giroptic 360Cam & SpheriCam) to single camera / single lens devices (Kodak SP360 & Eye Mirror 360ยบ). None of these devices are perfect, each having their own pro and cons, but all having the ability to shoot 360° video.

Now some of these devices, in my option, have reached a quality / cost / complexity tipping point. Before this if you wanted reasonable quality it came at a cost and required a certain amount of technological know how. But now there are devices that are  affordable, produce reasonable quality content and don't require an in-depth knowledge on the subject. This in turn is resulting in a whole swath of film makers getting access to the format for the first time.

This is where things are getting great for digital planetariums too. You see in most cases the 360° content that is being produced for VR headsets just needs a bit of tweaking to be able to be projected into a dome (something most content creators hadn't even considered as an option). Unfortunately not all content is suitable, especially where the viewer is required to look down! Most domes only covers a 360° x 90° view (the top half of a sphere) so you can look from straight up to the horizon in all directions, but with a bit of adjustment it is possible to extend what is projected to an amount below the horizon as well.

Over the past couple of years I have been experimenting with re-projecting 360° content from a wide list of genre's (artistic, music, action, scenic) with great success. It has provided a fantastic learning experience as to what works / doesn't work in a dome and how people experience the format. It has shown me that digital planetariums aren't just one trick ponies that only show journeys into space. They can just as easily show an immersive environments as VR headsets, placing the viewer in the middle of an all round view.

Some people may question if its worth bothering with digital planetariums as the number of people who have access to one is lower than VR headset ownership and the domes that are out there are already fully booked showing their own content. Well things have changed, there is now a whole new breed of portable digital planetariums that can sit up to 40 adults (or even more children) where ever there is enough space. You don't even have to own one yourself as there are companies that will bring a dome and show your content for you (here in the UK there is a company called Immersive Theatres).

Finally one of the biggest advantages of domes over VR headsets in my eyes is a social one. If what you are looking for is the ability to be immersed in a virtual environment by yourself then maybe a VR headset is for you, but the experience doesn't always have to be like this. The experience could be one that you share with others.

Thursday, 9 July 2015

Another Code Club Year Comes To An End

Another amazing Code Club year complete, my 3rd and I'm still having so much fun. Of course all this is mixed in with feelings of sadness as I said goodbye to some of my children as they move onto secondary school. But as I saw them for the last time I was proud at what Code Club had enabled me to do. I'm sure either with or without the club they would all love using computers (they're a fantastic bunch), but I hope I have been able to open their eyes to a whole new world of possibilities and help fill their heads with ideas of what they could achieve. In the 3 short terms we had gone from coding Scratch, through to soldering Technology Will Save Us's DIY Gamer Kits and finally ending up coding Arudino's.

Everything I threw at them they handled with confidence, enthusiasm and creativity. I was concerned that the soldering was going to be too much, but how wrong I was, the level of concentration during those weeks was off the scale. Every single switch, resister, light dependent resister and buzzer on those kits was 100% soldered by the children. It would have been a lot quicker (and safer) to allow each child to solder a single switch and then do the rest myself, but it was achievement I wanted the children to feel for themselves. For them to be able to hold a piece of technology in their hands and feel proud at what they had put together, after all computers are nothing without hardware.

They also took their knowledge (and creativity) of Scratch and mapped those skills onto Arduino sketches with ease, it really showed that they were learning skills that they could transfer from one area to another.

Earlier in the year we were also lucky enough to be visited by BBC Midlands Today. They were looking for a school that used computers in their lessons and Malvern Wells was able to be that school. The kids loved seeing themselves on TV and I managed to get a small mention for Code Club in too.

The other good news, tinged with a note of sadness was that the teacher I had worked with for the last two years, Matt Warne, had got himself a new Job as the head of computing at the much larger school in Worcester. He said that I had inspired him to push his teaching career further into computing and after becoming a CAS Master Teacher he applied for the position of head of department and got it. I find his words very humbling and kind and wish him all the success that he deserves. I'm sure with our common interest our paths will cross again and I look forward it. Good luck Matt.

So now I'll spend my summer months making sure I'm up to date with all the new Code Club worksheets, reading up as much as I can on the BBC micro:bit (it looks like it could be so much fun, for everyone involved!), thinking about what to start the new Autumn term with and looking forward to meeting new children and a class teacher, all hopefully as eager to find out what this coding thing is all about.

Tuesday, 18 November 2014

Adventures in Sonic Pi

Well what a fun few weeks this has been getting to this point. I had been aware of Sonic Pi for quite a while, but not having a Mac or easy access to my Raspberry Pi I hadn't been able to play much. This all changed with the release of the PC edition. With easy access to desktop PC's and laptops around the house I could play to my hearts content.

Like everyone else I started by looking at examples and what others had already done, there was so much creativity out there. One of the first things I came across was Robin Newman's blog and his posts about using a limited set of samples of a Grand Piano to create an instrument that could play a much wider range of notes (here). I liked the technical aspect of this but wondered if the concept could be made more accessible.

I set about attempting to create a Ruby class that would provide the same functionality. After plenty of reading up on Ruby (its not a language I usually develop in) and a few coding dead ends, I ended up with a couple of Ruby classes that did the job. Of course just releasing this code would have been no fun at all, people want to hear Sonic Pi playing music. So I set about putting what I had just created to use and coded a version of "The Entertainer".

If you want to jump direct to the code then I've dropped it on a Gist here and the required Grand Piano and Clarinet samples taken from the fantastic Sonatina Symphony Orchestra resource are in a zip file here (Google Drive has a download link at the top of the page). Once downloaded remember to change the use_sample_pack (line 143) to point at the location you have extracted the samples to.

If you just want to enjoy this rendition of  "The Entertainer" then the mp3 file can be found here (again Google Drive has a download link at the top of the page if required).

So you want a bit more of a breakdown of what I created?

First I created a class that all it does is play a specific note from a given sample (line 5). Each instance of the class contains the name of the sample to be played and amp, attack, rate, release and sustain settings. When the play method is called a duration is passed and is combined with the attack, release and sustain settings. These three settings are more reflecting how much of the duration should be spent doing each and in total should add up to 1. If they don't this will shorten or lengthen the requested duration. This feature can be turned to our advantage by allowing the note to carry on longer than the requested duration. This is done by the three settings totalling up to a number greater than 1. This would allowing, for example, piano strings to ring for slightly longer.

Next I created a class that contained all the samples for an instrument (line 55). Each of the 128 midi notes is mapped to their nearest sample and appropriate playback rate calculated. Every time a new sample is added it first inserts itself at the correct position before making sure that neighbouring notes use the nearest sample. For each of the notes an instance of the note playing class is created and held in an array.

Now how are these two classes put to use. Well everything is done through the second, instrument bank class. First a new instance of the class is created (line 146) passing in a reference to Sonic Pi itself. Next all the samples are loaded (line 147 - 153) each defining which base note the sample is for (in either midi number or note symbol) and what sample to use (either as file name in the sample pack folder or by sample symbol). Finally you can amend any required settings (line 154) from the internal defaults provided. At this point your new instrument bank is ready to go. All you have to do to play a note is call the play method passing in a note (again in either midi number of note symbol) and a duration. Also if you want to play a chord just pass in an array of notes.

The Entertainer (line 140) is played by creating three arrays of notes and durations (one for clarinet, one for grand piano right hand and one for grand piano left hand). A synchronisation thread is started whose only task is to provide the cues for the threads playing each of the arrays. As these threads receive the cues they count them and play the appropriate note for the required duration.

This is my first Sonic Pi project and I'm not even sure I've finished it yet. But as I thought that it was at a good point I thought it was worth sharing. It would be great to hear what you think of it or if you have any questions then please ask away.

Saturday, 21 June 2014

Playing in a Dome

I love going out and creating spherical panoramas of the places I visit, its a fantastic way to capture some amazing sights. But after I've created them I'm left with the same ways to visualize them, either using some sort of interactive viewer or a flat static view which sort of removes the immersive 360° experience. Well luckily for me I've recently had the offer of a third way of viewing my work, in a 180° dome.

Last October (2013) I visited an Art event in Birmingham called Illuminate and as the name suggests it was all to do with light. The bit that I was interested in experiencing was the 360° Panoramic Cinema, not a full dome projection but a cylindrical slice all around the walls. It was here I met Toby Norman-Wright and Mario Di Maggio and got discussing my panoramas with them. I was told by Mario about another event he runs in Birmingham on a regular basis called Dome Club and I was invited to bring along some of my content to be shown.

Now we fast forward to today. After some initial experiments with preparing content for a dome, only showing an 180° view meant that you would only experience the world from the horizon up (or maybe slightly tilted forward). I started thinking about showing more, seeing a bit of the floor too. This presented it's own problem. The projection that the dome required was circular fisheye so expanding the view to 250° was not a problem. What was a problem is that the view would be distorted making buildings tower in above you and to correct this I would need to re-map my images. After a bit of scribbling ideas on paper, some Maths and a Python script to do the work my images were re-mapped and ready for projection.

I visited Dome Club being held at the Q Club Complex in Birmingham on Friday 13th June and there I was able to experience my work being projected in a 7 meter dome. I had given Mario both original and re-mapped 250° views so that comparisons could be made to judge if the re-mapping was a success and in my eyes it was. Vertical edges now appeared vertical (again) and the ceiling didn't seem so distant. It's truly a great way to re-live the immersive experience of the original panoramic image.

My static panoramas wasn't the only content that I took to Dome Club, I also took Giroptic's demo panoramic video from Times Square in New York shot on their amazing 360Cam. I converted the original 360° x 180° equirectangular projection to a re-mapped 250° fisheye. This was a bit of an experiment for me as I hadn't worked with panoramic video before and the 360Cam is still only a kickstarter project (over $1.1 million funded project at the time of writing!). The immersive experience was outstanding and from such a small handheld device. It really did show what will be possible for content creation that is then shared with a mass audience. Truly interesting times for spherical panoramic video and an area that I want to carry on experimenting with.

For anyone interested in seeing what a re-mapped 250° fisheye video looks like you can see the Time Square demo video over on my YouTube channel here http://youtu.be/VUZKKxP1DYA.