Experience

Here are the companies and organizations I have so far had the pleasure of working for in my budding career as a software developer. This is why I say I'm an "experienced creator and developer"; I've had the experience and it's been great so far. Be sure to checkout my github to look at some of the open source projects I've been part of.

Matrix

July 2016 - Present

Matrix is an open standard for decentralised messaging. The team behind it maintain the standard, the SDKs and are also building the most popular, shiny messaging client built on top of Matrix, Riot. I've had the pleasure of being part of the Matrix team, helping to build bridges, improve clients and also have an impact on the Matrix specification itself.

working on the IRC bridge

Technologies: Node.js

When I first started at Matrix, I was put to work on improving the IRC bridge. Many users swap from using IRC as their messaging client of choice to Matrix, mostly due to it's similar decentralised nature but also because of the modern clients are available. The IRC bridge bridges Matrix rooms into IRC channels so that users can continue to stay in their favourite IRC channels and stay in contact with those who'd prefer to stick with IRC. At the time of writing, the IRC bridges hosted by Matrix connects Matrix users to at least 5 different IRC networks and the number of users using this service continues to increase.

My job was to improve the UX by investigating and fixing issues and creating new features (usually in the form of syncing some part of the IRC protocol with Matrix). The IRC bridge is built on top of Node.js and so my experience with it has advanced tremendously since joining. I'm now well-versed in JavaScript and its nuances. I've also been exposed to the concept of Promises, used heavily in the Matrix stack to encapsulate asynchronous work.

working on the Integration Manager

Technologies: React, Node.js, GoLang

Following my work on the IRC bridge, I was tasked with helping to build Riot's integration manager, the UX for dynamically connecting Matrix rooms to third-party networks. These include Slack, IRC, Gitter and Twitter. Through the same interface, users can invite bots to rooms to provide access to some popular services, such as GIF generation (with Giphy and Guggy), RSS feeds, GitHub, and many others!

A big part of my work on the IRC bridge was to get it to point where it could be used as an integration as part of this system. My previous work on the bridge was — of course — a big help in building this component. I also had exposure to the UI side of things through writing the visible part of the integration manager for the IRC bridge. Similarly, I was instrumental in getting the Twitter bridge compatible with the system in collaboration with its maintainer.

working on Riot

Technologies: React

Riot is the flagship app that aims to popularise the Matrix federation. Written on top of the React web UI framework, Riot uses the matrix-js-sdk to access the RESTful HTTP API exposed by the user's Matrix homeserver.

Helping to develop Riot has been a fascinating experience so far: working on a widely-used web app comes with interesting challenges and subtleties that are challenging and truly engaging. This has involved following designs whilst implementing features, fixing bugs and refactoring the code base in order to increase maintainability.

FOSDEM

February 2017

Being part of the Matrix team and the wider FOS community, I had the fantastic experience of going to FOSDEM 2017 where 1000s of FOS enthusiasts descended upon Brussels for a weekend of talks, workshops and lectures. Amongst 100s of stands was ours and amongst those manning the stand was me! Spreading the word of Matrix was immensely fun, whether that meant chatting to Matrix n00bs or debating with Matrix veterans. It was great to put names to faces but also get new people interested and hopefully on-board with Matrix.

Matrix is not your typical messaging system, so my explanation skills were pushed to their limits across the two days. Explaining a system is one thing, but explaining it at an appropriate level of detail whilst covering as many bases as possible is another. Also, admitting lack of knowledge and suggesting a conversation with another team member is a subtle skill, but quite an improvement on "I don't know". I improved on these skills and others at FOSDEM for which I am truly grateful. This was my first opportunity to really "sell" a system to prospect users and also admins hoping to implement Matrix company-wide! I loved every second of it.

FOSDEM was truly mind-blowing and I'd love to go back just to go to a few lectures and to do a bit of hacking.

The Technical Internship

July 2014-2015

CERN offers a 1 year, paid technical internship to the very best students currently studying in its member states.

For the first few months, I was put to work modernizing parts of a web-based interface which was out-dated and painful to work with. By the end, I had created a tool for controlling monitoring systems in the LHC tunnel and sending out SMS and email reports to engineers and another tool for visualizing the signals being monitored.

I worked with a PhD student, also studying within the area of Computer Science. Our job was to create a web-based solution for analyzing a full 8 years-worth of data that had been taken by testing thousands of magnets in CERN's flagship accelerator - The Large Hadron Collider, or LHC. This challenge required excellent ability and understanding with regard to The Web, HTTP, Python and Apache. We chose a combination of software based on the Django framework, using Bokeh, a relatively unknown library to produce interactive data visualizations. Bringing Django's excellent ORM together with the Electrical Quality Assurance Team's Oracle database was an exciting journey and the tool is still being developed to become even more powerful.

The First Internship

August 2012

For two weeks, I worked at CERN under the leadership of Alick Macpherson, a physicist at CERN with another intern. We worked together on a statistical module for use on data generated by the Large Hadron Collider (LHC). The data of concern was the position of the beam at different points of the LHC. The end product was a piece software (written in Java) used to produce further analysis of the proton beam quality. I had to quickly get to know my co-worker and support him when help was needed whilst maximizing my own productivity. It was truly incredible to be given such an opportunity to work at the very forefront of modern physics.

Keytree

Keytree is an SAP consultancy company based in the Soho area of London. They're making waves in SAP innovation and I'm proud to be one of the first interns to have worked with them.

The Internship

July-August 2013

For two months, I had the privilege of working in the Advanced Technologies team at Keytree. The experience was fantastic: not only was the job post in the middle of London, but I was also working on real production software in an excellent team of developers, something that I had never experienced before. We worked on technologies concerning the monitoring of cows for use by farmers. In short, the user story was, "As a farmer, I want to know when my cows are in heat so that I can artificially inseminate them at the perfect time to increase the probability of pregnancy and hence milk production." No, this was not your typical development project! And I'm glad because it really surprises people when they hear how technology really does affect those from all domains.

My responsibilities included fixing bugs with the web front used by the farm owners, converting important scripts from Java to Python and developing on all parts of the stack from farm to cloud. This required video conferences and calls with those working in farms overseas, and also employees working at Ice Robotics, which now claims that over 20 million cow days have been recorded in the system that I helped to develop!

Projects

journal

journal is a blog platform built on Matrix. It uses Matrix in a slightly modified way in order to provide similar functionality to that of a blog site. To comment on blogs, users can log in as guests or using their Matrix credentials. Logged-in users can also make their own blogs within the context of an individual's site. One example of a blog is the announcements journal that I keep up-to-date with the latest improvements of journal.

journal is Open Source and anyone can host their own distributed blog site. In future, I intend on supporting end-to-end encryption so that blog distributors have the option to securely distribute content to readers.

o2m

o2m is a distributed social network for those who would like to share their social content from their own computer. The idea is to host a website on the user's computer that they can use to interact with their friends and their data. All data is stored on the creator's computer and is copied to a friend's computer on request. This way, users can really only share data with people they have given access to, and not unnecessarily with a third party.

With a well-defined protocol in place, anyone will be able to design a client or a server so customization is possible. The protocol is built on top of HTTP and it incorporates many features of HTTP. For instance, the full range of HTTP status codes are used to return meaningful statuses instead of just "500" every time something goes awry. The format of the data being returned in the responses from the server is JSON, and so it can be any dictionary structure, nested or not.

So far, 0.2.0 is the latest version of o2m, which has been created based on Django, a web framework. Currently, the architecture is such that the front end will make HTTP requests to all of the user's friends, which would be fine if it wasn't the web server doing this. A much better implementation would move this sort of functionality to an SPA (Single Page Application) so that the user's web browser is doing all of the requests.

Unify

Unify was another social network that I helped make for my Integrated Project during my second year at The University of Bath. "Integrated" in this context meant that the project gave credit to multiple modules of the course which were Human Computer Interaction, Programming and Systems Development. As a team of 5, we followed the entire software development process from specification to development to testing, with several small iterations throughout. We made our friends test it out and then reported on our findings, which were incredibly useful.

The idea for Unify was given by one of our professors: only be friends with those right in front of you. The challenge was to create a typical social network (for students only, à la early Facebook) with the one quirk that meant that you could only ask to be someone's friend if you were standing right in front of them. Ignoring the fact that GPS locations can be inaccurately reported by devices, networks and of course the user themselves, this system is rather simple. The social network we created was web-based and so we harnessed the geolocation functionality provided by most browsers. Through a simple algorithm to calculate the distance between two points in geolocation coordinate space, the web server would determine whether two soon-to-be friends were close enough. The system worked very well with mobiles, which usually give an accurate (and quite precise) GPS-based location.

Pay/s

On arriving at a certain technical internship at a certain scientific laboratory, I was being paid (a stipend) for the first time in my life. Now for a student, this is very exciting, and so I decided to celebrate by creating a tool in my free time that would calculate the amount someone earns in one second based on their salary, their working hours and their lunch break. The tool includes a table of not only how much the user earns in a second, but also in a minute, hour, day, week, month and year. The inverses of these are also shown, which are the amounts of time required to earn 1 unit of a selected currency.

SandLab

SandLab was a little game written in C++ that I made back in September 2013 based on cellular automata. In it's final form, it directed the user through a set of challenges to create various elements by using their mouse to add other elements to the screen. Rather like in a falling sand game, the pixels of elements would fall and scatter based on what parameters had been defined for that element. Chemistry would occur between pixels to produce other elements, probably producing a small amount of heat in the process. It was also possible to inject heat into the simulation using the mouse again.

Everything up to this point has been done very well by games in the past, such as Burning Sand 2. The quirk in my version was to monetize this process. Chemical companies do this in reality; they take some chemicals, put them together and crank up the heat and voila, they have a more valuable product and a profit has been made! Granted, I have simplified a vastly complex network of suppliers, refineries, chemical plants, factories and more. But the principle remains the same. In SandLab, when you introduce chemicals into the game, you spend money. Your budget starts off as a fixed amount, allowing you to buy a fixed amount of the basic elements. When combined, they may react to produce more valuable elements. When these elements fall out of the bottom of the window, they are effectively "sold". If you find a reaction or set of reactions that are profitable enough, in theory you could create a 2D factory out of the same elements (preferably those that don't react with much).

I left the game at the point where factories were possible, but still theory. I still would like to re-implement this idea and allow it to interface with a web server that controls the global prices of elements. To add a further "multi-player" aspect to the game, I want to make it possible for players to send amounts of chemicals to one another. This could create a global virtual supply chain of huge proportions! Some sort of reward system would also be needed to encourage players to want to earn more money.

AScience

AScience is a revision site I made whilst at St. Thomas More. No word of a lie, I used AScience religiously to plan my own revision for two years of A-Level exams. The planner was by far the most useful feature and one of my friends even started using it seriously! If a user had revision planned for a day, the site would (optionally) send an email in the morning to the user showing them what they had to revise. As well as a revision planner, the site included a few science articles written for Physics, Chemistry and Biology students studying at the same level as I was back then. Not to mention, I wrote my own blog on the site for a while that my friends and family would comment on occasionally (the site would send them an email when a new blog was uploaded).

Colour Kit

This little thing was something I made in 2013 when I was starting my second year of university. The idea is to have a collection of colour palettes for web development that are stored in a browser's cookies and manipulated through a single page. This comes with a caveat: the user must be a wiz with hex colours. So if you didn't know what #BB4499 would look like roughly, you'd better learn a bit of hex colour codes before using Colour Kit!

Features include the ability to save colour palettes and even share them on twitter. Sharing a Colour Kit URL on results in a twitter card being generated that shows the palette with the shared link.

Education

Listed here are all of my academic institutes and achievements.

The University of Bath

Bath is in the south west of England, where the landscape is beautiful and hilly and where cider is plentiful. I was a student at the University of Bath from 2012, graduating with a First-class degree with honours.

BSc (Hons) in Computer Science (Sandwich)

October 2012 - June 2016

June 2016: Awarded Bachelor Of Science In Computer Science with First-class honours

Having completed two years of studies and having achieved 87.1% in the first year followed closely by 83.5% in the second, I graduated in June 2016 with an overall programme average of 77.11%; a strong First-class degree. (If anyone familiar with the US education system is reading this, please note: anything above 70% in the UK is equivalent to a 4.0 GPA. If you're interested, you might want to take a look at these notes on converting UK percentages to US percentages).

Numbers aside, Bath has given me far more than some impressive statistics. Throughout the entire process, we have done constant group coursework, building on time management, communication and team skills. I've been part of no less than 4 teams comprised of computer scientists just like me. Before university, I was shy and reserved. I feel like I've really become truly confident at Bath, which was evident in the final presentation for Unify, mentioned above. In fact, for the same project, I was project leader and main developer.

Not to mention, Bath gave me a truly incredible opportunity. The placement program landed me with a one-year technical internship at CERN, the scientific organization aiming to discover in detail the rules that govern the universe we live in.

The BP Centurion Award

This award is given to top performing first year and second year students for the highest academic achievement in their courses by overall stage average. In terms of academic achievement, I am therefore at least third in my year.

The BP Centurion Award (take two)

It so happens that I have actually been given this award twice, the maximum number of times a student can be given this award for academic achievement! I look forward to being considered for the final year award, which is "Open to final year undergraduates who demonstrate academic excellence, together with a contribution to the life, academic reputation and general work of the University".

St Thomas More RC. Upper School

September 2007-2012

For five years of my life, this is where I went to school. Based in Bedford in The UK, I completed my GCSEs and my A-Levels to become one of the highest-performing students in my year at St Thomas More.

A-Levels

September 2010 - July 2012

A-Levels are completed between the ages of 16 and 18 in the UK and they are very similar to GCSEs. Typically, a student will choose 4 A-Levels and drop one in the second year in order to focus on the three remaining topics. A-Levels are split into two parts, AS and A2. Also typically, these are done in the first and second years respectively. However, I chose to do 4 A-Levels in Maths, Physics, Chemistry and Biology and 1 AS-Level in Further Maths. I dropped Biology after the first year and my final results were A*A*A: 2 A*s in Maths and Physics and an A in Chemistry. I also received an A in Further Maths.

These fantastic grades gave me access to one of the most prestigious universities - The University of Bath. With offers from 5 different universities in the UK, I chose The University of Bath because of it's reputation, location and history.

GCSEs

September 2008 - July 2010

For those who are unfamiliar with the acronym 'GCSE', it stands for 'General Certificate of Secondary Education' and a student takes their GCSEs in the UK for two years between the ages of 14 and 16. The reporting system works by rewarding grades based on the performance of a student relative to the rest of the schools partaking in the use of the same system.

Simply put, I achieved 5 A* grades and in the year I was awarded them, just 7.5% of the total number of grades awarded were A* across the UK. Mine were awarded in Maths, Physics, Chemistry, Biology and Music (BTEC First Certificate, roughly equivalent to two GCSEs - I've rounded down here). I also achieved an A and a B in English Language and Literature, respectively along with an A in French.