When I was 12, I was given a Raspberry Pi. For the first couple of days, it was really fun. After I had browsed the web for a while and played a bit of Minecraft, it sat in it's box for a few months. I really had no idea what to do with it. That was until I discovered that I could build a website with it.
Wow, that was cool. I installed Apache and spent some time finding out where I needed to put the code. I started off getting to grips with HTML in nano (using inline styling, of course) until I realised I could write CSS in separate files and load them in. That was a bit more manageable, to say the least. I decided that I wanted to create a website where I could try out new things I'd learnt, as well as a sort of hub for all my projects. I ended up 'borrowing' the background from iOS 6 and whacking the Raspberry Pi logo onto it. As you can see, my grasp of typography was fantastic, as was choosing hi-res images. I can hazard a guess at this being the point I discovered
text-align: center, too.
Right. So I had a website. Now I wanted to show people. That was really easy for people on my home network, I could just send them to
fxapi.local. It took me a bit of time to get my head around the fact that no-one on the other side of the firewall would be able to do the same. I remember feeling slightly despondent about that. How was I going to show people my brand new 'shiny' website? I resigned myself to continue making stuff for it and decided to figure out that particular problem later.
Enter server side scripting, stage right
Somewhere along the line, PHP reared it's head. Oooo, I could write code that was run and displayed in the browser! Now, what to do with it.
The next thing I wanted to do was build a login system. Due to the fact that I had no idea I could do it with PHP and databases, I decided to go down the route of implementing a cookie-based authentication flow entirely in the browser. Yeah I know, secure right? I found the GateKeeper JS project online and decided to use it.
Once a user was logged in, they could access the protected pages. These consisted of a page with the live stream of two USB cameras plugged into my Pi (using 'Motion' as the server), complete with capture buttons (emailed you the picture via my Gmail) and my sounds page. I had a speaker connected to my Pi in my room and whenever you clicked on any one of a series of images on this "sounds" page, it would play the corresponding sound out. The sounds and actions were associated with recordings of my dad saying things like "Get up!" or "Lunch is ready". I inflicted a large amount of pain on myself by including the wake up ones, I'm still not sure why I subjected myself to that.
My website was now looking pretty good. I had updated the background with the new one that came in with iOS 7 (blue bubbles) and changed the font. I felt that now was the time for the world to see it. With hindsight, the easiest thing would have been to port forward our router and used No-IP or similar. In contrast, I opted to go with LogMeIn Hamachi, following this tutorial. Although the tutorial was for SSH, I knew that my website was running on port 80 so I reckoned I could make it work. As it turned out I could, and did. This remains one of my accomplishments that I'm most proud of. It allowed me to simply add another computer to the VPN network, send them their configuration details and they could view my site. I still remember the IP, 184.108.40.206.
Moving into other areas
After this, I moved into other areas aside from web development for a while. I did quite a few projects with Python, like building this robot with some friends in 2014. This included learning a lot about how TCP works because we used Hamachi for remotely controlling the robot (other side of the county type of remote). On the back of that, I started getting interested in the differences between TCP and UDP and how they're used in different scenarios. This is still knowledge that comes in handy today.
I think it was at about this point that one of my siblings started playing Minecraft. I looked into running a server for him to play with his friends on and decided to give it a go. It may have been the most unstable server of all time. I was running all the stuff I've talked about above, plus the Minecraft server java app on a 512MB RAM computer, which meant it crashed with even one player on the server. Never mind, I learnt what happens when you overload a computer.
Open source contributing
It was about then that I started using GitHub. One of my first ever projects was writing a wrapper around a Python library which used Minecraft's Rcon to control the game. As part of this, I submitted the perfect example of what a bad pull request looks like.
In the summer of 2014, I found myself in one of the teams from Raspberry Pi during the Festival of Code. We created a project in Python called "Ace your Place" and had an awful lot of fun. The idea of a hackathon was completely knew to me and I picked up a lot of great contacts during the competition heats at the weekend.
During the next few months, I started to build functional sites using PHP with MySQL for storage, mostly things like UIs for small projects. Predominantly, I was building micro-projects, usually as either a proof of concept (not that I knew it then) and the EOL was about a month.
Now I knew something
2015 brought a lot more fun, I continued projects on GitHub and created some more. In the summer, I headed off to BT for the Festival of Code 2015, where I met the fantastic group of coders I worked with. We named ourselves "SubjectRefresh" and proceeded to create a revision application, Refresh, with questions sourced from open data (i.e. the internet). At the start of the project, it was deemed that we would use Node.js. This was something I had never heard of before but luckily I knew what the extension meant. I managed to get to grips with Node in about 4 days, mainly due to already knowing JS. Seriously, JS is taking over the world - it's currently my #1 choice for new apps. Refresh went on to be a finalist in the competition category for design, which is one of my proudest moments.
In November of that year, SubjectRefresh was invited to the Open Data Institute Annual Summit at the BFI in London. The day involved presenting our YRS 2015 projects and hacking together a project in four hours. The project guidelines were to use open data and to get people to eat more healthily, so we came up with the original name of "Healthy" and started hacking. Our app still works to this day: subjectrefresh.info/healthy. The user gives Healthy a food and then it goes away and works out how long it would take to burn the calories doing various different activities.
2016 started with a bang; my father and I started running a Code Club at a local school. It was one of the biggest learning experiences of my life. Keeping kids engaged is extraordinarily difficult, especially when all they want to do is play games. We went through Sonic Pi, Python coding, and of course, Minecraft.
Build, Ship, Run - Docker
In November 2016, I was introduced to Docker by a friend and I went on to build a Raspberry Pi Swarm. We made a cardboard dashboard to monitor load across the cluster, as well as visualising it on a PiGlow. Since then, I've been playing around with Docker for a couple of small projects and intend to use it for a lot more things in the future - "Docker all the things!".
Recently I've been primarily developing web-based, responsive, data-driven apps & services. I like developing projects in the rapid prototyping style, with a bit of agile sprinting in there as well. I find that this is the quickest way of writing good code, whilst still retaining the buzz of writing code collaboratively. Let's be honest, writing unit tests is not the most exhilarating experience and therefore I tend not to bother for small scale projects. Of course, for larger ones I always do because it provides peace of mind. It's also immensely satisfying seeing all the green ticks when all your tests pass 🤘.
I've also ventured into the world of cyber security and have completed a couple of pentesting assignments for people. I really enjoy it as it's really rewarding if/when you get somewhere but I've also learnt a lot more about how to secure my own stuff. As part of SubjectRefresh, I entered into the UK Cyber Centurion Security Challenge and we managed to battle our way through the rounds to end up competing in the final at Bletchley Park. The whole thing was one of the most exciting but tense experiences of my life. The whole atmosphere was fantastic with young tapping furiously at keyboards. I cannot wait for the competition this year!
That just about brings us up to speed with my adventure in coding from the age of 12 when I was given a Raspberry Pi as a present, up to now where I'm 16 and deploying distributed apps and services. I started out without knowing anything whatsoever about computers, programming or even what an HDMI cable was. Since then, I've had the privilege of meeting some fantastic people and working on some awesome stuff. There is absolutely no way I could have done what I have without the amazing support of the various tech-related communities who make the internet their home. For me, these were mostly the Raspberry Pi, Node.js and Docker communities. I look forward to a future of working with more inspirational people on brilliant bits of software. Bring on the next four years!
- More Docker! - I'll have a whale of a time.
- More servers - the more the merrier
- Contributing to more open source projects
- Helping more young people get started with coding
- Delving deeper into the world of cyber security
If you've not tried Docker out yet, what are you waiting for? It's seriously cool and the community is fantastic. Go for it: https://docs.docker.com/engine/getstarted/