Sharing technical knowledge at Codethink


Originally posted here

Codethink’s culture stems from the world of open source software. A large part of what it means to be a Codething is taking part in the sharing of knowledge across the company and learning on a daily basis. This practice drives the development of understanding in different areas of software, programming and allows staff to generally learn as a collective.

One way knowledge is shared around Codethink is through peer-led classes. Recently Daniel, a solutions architect at Codethink, has organised and led a series of classes for other Codethink engineers around Rust.

Rust is a relatively new programming language (Rust 1.0 was released in 2015) but one that is increasingly popular, achieving status as ‘most loved programming language’ in Stack Overflow’s developer survey each year since 2016. Rust boasts a very friendly, and growing community, reliably releasing regular updates, making it an attractive option for developers looking for a project to contribute to.

Rust has been turning heads as a modern alternative to some of the more traditional programming languages. As a memory-safe language, Rust is designed with security in mind — it’s protection against memory corruption vulnerabilities has prompted security engineers to explore its applicability. Focus is increasingly placed on software security in the automotive industry and recent research has pointed at memory safety as a critical problem which needs addressing. This points to Rust as a potential solution and makes it a very relevant language for Codethink engineers, who work on automotive projects frequently.

“It’s *possible* to write good safe clean code in any language but some, such as Rust, make it easier to *not write* bad code in certain senses.” – Daniel Silverstone

Daniel’s Rust course was set up with the ultimate objective that attendees should become comfortable writing code in the language and for the whole group to agree that classes are no longer required. By setting the overall course objective with the group in mind instead of the individual, an environment of collaboration is fostered, where attendees are encouraged to help each other reach a common goal. This is a positive attitude to encourage and one that ultimately benefits a company in their day to day activities.

The schedule for the Rust course was set up with attendees’ work schedules in mind. Daniel delivers 1 hour of lecture style class each week which is recorded for future reference, and attendees agree to a matched amount of signposted, but self-directed, learning. Homework is also set for attendees in the form of programming problems, for which the lecture will be needed in addition to the self-directed learning. Although the course is set to be able to work around attendee schedules and company work comes first, a certain level of commitment to learning is required, which is made clear from the start.

The feedback of the course was positive, the engineers in Codethink share a passion for learning and improving in what they do and the opportunity to take part in Daniel’s Rust course proved popular. As a result of the high interest, the course will be run for a second time with another, larger group of engineers attending. Daniel enjoyed being able to teach other enthusiastic engineers about something he’s interested in and encourage discussion on the topic.

The sharing of knowledge in a company like Codethink is important and allows for technical competencies to develop at a faster rate than normal. This is because staff have more forums to connect on an intellectual level outside of project requirements. For a company where learning is an important part of day to day life, this format proved to be very successful.

“A day without learning is a day wasted. Codethink engineers thrive on learning. Spreading knowledge and skills allows people to improve in all they do.” – Daniel Silverstone

For a company where learning is an important part of day to day life, this format proved to be very successful and allows us to grow our understanding in new technology areas. By doing this we become able to confidently engage with the challenges that those new technologies may bring.

Codethink helps York Instruments to deliver world-beating medical brain-scanner


Originally posted here.

Codethink partnered with York Instruments on a project to develop a new Magnetoencephalogram (MEG) scanner to replace their existing apparatus. This is a neuroimaging device which maps brain activity by recording magnetic fields which are produced by naturally occurring electrical currents in the brain.

The problem at the time was that the capture-and-compute brain of the original scanner was difficult to repair or replace if there was a failure. This was due to the unavailability of the original equipment manufacturer (OEM), resulting in a lack of available parts.

Within the main apparatus of an MEG, superconducting quantum interference devices (SQUIDs), are used to measure very subtle changes in magnetic fields influenced by brain activity. These SQUIDs require super-cooling, commonly with liquid helium, which means that the apparatus to store them needs to be substantial. Liquid helium is also very dangerous to humans so a high level of due diligence is required for the safety of anyone interacting with the scanner. In their new MEG system, York Instruments replaced the SQUIDs used with Hybrid Quantum Interference Devices (HyQUIDs), which are able to operate at higher temperatures than SQUIDs and can operate more accurately. This has positive implications for the safety and cost of the MEG, as less coolant is required.

In this project, Codethink worked on both hardware and software, in a range of different areas including upgrading the Linux kernel used, assisting with updating U-boot, working on the in FPGA and CPLD firmware, working on the core data transfer protocols, the sample data multiplexer, and real-time-displays as well as further software assistance and consulting.

Codethink engineers worked on the full low-level command and control system for synchronising and monitoring a distributed network of data capturing systems. Throughout our time working with York Instruments, Codethink engineers ensured a high standard of code and documentation was maintained.

The development of York Instrument’s main data acquisition pipeline and a variety of GUIs was done in tandem with the hardware design in order to closely integrate the two. One of the most challenging aspects of the work involved developing a system that ensures hundreds of sensors, that were all connected to different computers, actually took measurements within microseconds of each other. Engineers managed this by means of a pair of counter rotating, fibre-optic loops, with a precise calibration algorithm.

The sensors send thousands of samples of data per second over the network to a single system. This system is required to rapidly match up each incoming sample so that all sample numbers are grouped together. Due to the volume of data that the system is required to match together and the minimal amount of time available to do it in, the multiplexer needs to be very efficient. Once the data has been gathered and grouped, it saves samples to HDF5 format and also multicasts to a LAN for real-time data consumers to present or process captured data in real time.

“The real time display we wrote implemented a noise cancellation system. The sizes of the magnetic field fluctuations caused by brain activity is tiny compared to electromagnetic noise created by external sources, such as a passing car. The noise cancellation system worked by having some extra sensors in the magnetically shielded room which were far enough from the head of the patient that they would not pick up the brain activity, only the noise. And then the readings for these were used with the some weightings to subtract the noise from the sensors around the brain.” – Michael Drake

Codethink’s engineers enjoyed working on a medical product, contributing to something that would, in turn, help others.

A horror film that made me think


I recently saw IT: Chapter 2.

It was scary.

But as the title to this blog post suggests, the jump scares weren’t the main thing I took away from the film.

I write this as a reminder to myself, and this may be a ramble, but the intent is that it will provoke positive thought.

The film looks at a group of childhood friends reuniting after 27 years apart and losing touch. They’d grown distant from each other. A childhood promise brings them back together and when they meet again, old friendships resurface.

After the main action of the film ends, two of the characters check in on each other, their bond renewed. They tell each other ‘I love you’. Not knowing when they might be able to see each other again, they let each other know that they are appreciated. That moment resonated with me and it made me reminisce.

During University, we form tight-nit bonds with our peers. We spend three years getting to know our friends and we become very close. The tragedy is that most often, we move apart once University ends and we have to get used to not seeing each other like we’re used to. Nowadays, whilst we are in the age of social media, it’s easier for those bonds to survive, but they are still prone to collapse.

I got thinking about how important it is to cherish what you have while you have it. At some point we all have to say goodbye and it’s important to let the people you choose to spend your time with know how much it means to you. Time is the most valuable resource we have and one that we won’t get back. It’s nice to be told that you’ve spent it well.

What you DON’T need to get a software job


During my time working in the software industry over the last 18 months, I have noticed that there seem to be a large number of people sharing a similar view. That is that in order to get a job in the industry, you need to be a standout computer science graduate, having achieved top marks in every exam from your introduction to the education system.

Okay, perhaps a slight exaggeration, but you get what I mean?

I’m writing this for anyone who has been told something like that and now feel that the software industry isn’t for them. I’m going to review the industry today at a high level

If you’re passionate about it and you’re driven enough to make yourself succeed, this industry is for you. I’m going to tell you why you don’t need a top computer science degree to get a job in software.

What employers looked for ten years ago isn’t what employers are looking for now.

There is currently a war for talent within the technology industry in the UK. A lot of companies are looking to hire but there are more jobs available than there are people who can fill them. As a result of this, the industry needs to become more accessible and work is under way to make that a reality.

Each year, Stack Overflow conduct their Annual Developer Survey. They collect data from their users on topics such as favourite programming languages and education history to identify trends from tens of thousands of responses.

Of all professional developers to respond, 79% have a degree, 63% of which studied computer science, computer engineering or software engineering. However, with this number not satisfying demand, it seems to be that in order to meet the requirement for talented technology professionals, value needs to be sought aside from the traditional degree route.

More employers nowadays are growing more interested in candidates who aren’t just demonstrating good marks in tests but are capable staff members in a number of other ways too.

Academic achievement is one thing but a strong work ethic, empathy and problem solving, is another thing entirely. Those qualities in an individual need to come from within. That’s why employers like to see graduates that show these capabilities already as it’s likely to have a positive influence on their retention numbers.

One particular trait that is highly desirable for employers is the ability to self-learn. If you can teach yourself something, especially if it’s something relevant like a programming language, then that will look great in any job application you make.

A question for the future will be whether these skills and traits will become more valuable than the traditional undergraduate degree.

Software employers have generally become increasingly open to applicants with backgrounds in other subjects as well. People from degrees in alternative subjects such as physics and maths make for great software engineers. I’ve known of successful coders that studied philosophy at University.

The way you get the job if you’ve not studied computer science, is to show a passion for software, to show where you’ve been coding in your degree, and make your intelligence come across in your application. To really sure your application up however, you’ll want to be coding in your spare time. Share your GitHub, even if it’s not perfect. You need to show them that you’re one of them. It just might take that bit extra work.

It makes sense that employers would look outside of the traditional computer science degree. After all, people who have studied different degrees think in different ways and a result, will approach problems differently. Diversity of thought is something a workplace should aspire towards.

Degree apprenticeships are a more recent development and are offered by some universities. They combine part time study in University with work at an employer, the idea being that you study and work at the same time which would end up with a job with the employer after the course, all being well. As degree apprenticeships are relatively new, they haven’t been taken up in every university. As such, available places are limited but they are expected to increase in number.

But what if you don’t have a degree?

In the past few years there has been a growing interest in alternatives to going to University. Traditionally, gaining a degree has been the route to a career but with a university level tuition becoming more and more expensive, it has become less of a practical option for a growing number of people.

When there’s a lack of skills, this creates a need for other routes to employment to emerge. After all, a degree isn’t the only signifier of intelligence.

Coding schools are another option increasingly in popularity in recent years. Northcoders is an example of one of these schools. The benefits of working with organisations like this are that they have direct links to employers, meaning that getting a job can be easier. However, convenience comes at a cost – education is expensive nowadays. They attract the employers by putting the costs onto the attendees. From everything I heard it’s worthwhile if you can do it but it might not be an option for a lot of people.

There is a way for you to gain experience working with other developers, develop your understanding of software practices and further practise your programming skills:

Open Source.

Getting involved with open source and contributing to projects is a great way to develop your programming understanding. Working with developers more experienced than you and having the opportunity for their insight on your code will allow you to progress well.

For more advice on getting started, see the resources below:

Getting into open source

How to Git Going in FOSS

5 reasons you should re-do your first software CV


As of writing, I’ve spent the last 18 months of my life mainly looking over CVs.

I’ve found that a lot of CV’s don’t earn an interview for a very simple reason:

There isn’t enough time spent on them.

Okay, this isn’t very helpful so I’ll break down my thoughts…

  1. You haven’t elaborated on your skillset

If your skills section looks like this, you need to elaborate:

Programming languages: C, C++, Java, SQL, FORTRAN, Haskell, Python, Matlab.

Instead, create a section for projects that you’ve done, tell me what the project was, what you did, and the technology that you used to do it. This will look a lot more structured and is therefore easier to digest.
(Brownie points if you include a link to your work)
(If you were working in a team at a hackathon, you should be specific about the role you played)

Also, despite common advice from educational institutions, there’s no general rule on CV length.

You shouldn’t sacrifice important information to fit the traditionally accepted one/two page criteria

2. I can’t tell what you want

The recruitment process is two way thing.

I state what I want to see in an applicant on a job advert.

When replying to the job advert, I need to know that it’s what you want.

In essence, I need to be able to see the match there.

If I can see that you’ve demonstrated your interest in the job and your passion for the field you want to go in to, I’m more likely to think you’re going to stay in the job longer. If that’s the case, you’re doing well.

By articulating your passion, interest and drive to succeed in your field, you’re creating positive signs for the company you’re applying to.

3. It doesn’t stand out from the crowd

This is important for graduates.

You need to think about what each CV will look like that goes forward for a job.

As most graduates receive similar briefings on producing a CV, from my experience, a lot of the resulting applications tend to look the same.

If you’ve done the same course, with the same modules as someone else and both are formatted it in LaTeX over one page, they’re going to look very similar.

If your CV looks the same as all of the others, it’s more difficult for it to stand out.

In the case of the example, where the majority produce a one page CV, make yours two and include a cover letter. If you decide not to format your CV using LaTeX, use it for your cover letter instead and you’re not losing out.

4. You’ve not tailored your CV to the job you’re applying for

A commonly distributed tip for writing a CV is to include in your professional profile section that you’d specifically like to apply for a job at the company you’re applying to.

If you don’t change that between applications though, it doesn’t look great.

If you send the same CV out to every company that you apply for, it’s likely that you’ll get fewer responses.

Be sure to analyse the detail of what each company is looking for, and emphasise your strengths accordingly.

E.g. If there’s a good chance you’ll be customer facing, emphasise any team activities, or other things where you can point out a need for good communication skills.

Focus on sending fewer CVs, but investing more time into each application.

5. You haven’t come across in the right way

Your CV is you on paper. It’s a representation of you going through the education system, into the world of work and it will be the basis on which you are judged in the application process.

It’s important to make sure that you have a professional email. It should scream the word “Adult”.

You need to spell and grammar check everything. If you’re going to be working in software you will need attention to detail in your work and avoidable spelling mistakes can look lazy.

Getting your CV right is crucial in landing your first role. Once you’ve overcome your interviews and you start on day one, the journey really begins.

If you enjoyed this post, here’s some more below!



f/2.8, 24mm, ISO 500, 1/500sec

November 2018

Gear: Nikon D750, Tamron 24-70 2.8

There is an abundance of dishonesty in Paris. 

You seem to never be far away from someone attempting to scam you in some way. The only thing you can do about this is to look the least like a target possible. A DSLR is quite counter-productive here.

I decided to focus my attention for my photographs on the architecture of Paris. The design of buildings was something that stood out to me, from the apartments to the tower. I wanted to capture as much as I could. 

The difficulty that I found with this task was that some of the buildings, notably the Eiffel Tower, have been photographed so often that to differentiate my images from others would take more effort.

I wanted to focus , taken on the last day during a period of showers on top of an open top tour bus. Due to this, I had one opportunity to line up the shot I wanted. Being on top of the bus, I benefitted from the additional height which helped me frame the subject more effectively.

I decided on to try and make the image feel aged to reflect the subject. This was the reason for using the black and white grainy effect. I feel that image ultimately suited the weather conditions of the day.