The story of a Java 17 native memory leak

Context When Java 17 was released in September we (the platform team at Auto Trader) were fairly quick to provide a new Docker base image to allow our developers to gain the benefits of the new goodness in the JDK available since Java 11, the previous LTS version. Over the course of a few years we’ve standardised the way the JVM is configured out of the box for any new applications that make use of the base image.
Read more →

Grow yourself through communities

I recently spoke at Devoxx UK about how you can grow, both personally and professionally, through being involved in communities. It was in the form of an Ignite talk which was great fun but I realised that there were a few slides that felt a little lightweight compared to others. Writing the talk up as a blog post will hopefully help me to fill out the lighter parts, as well as maybe make it suitable for a longer length talk at some point in the future.
Read more →

Debugging a Jaeger memory issue

At Auto Trader UK we use Jaeger as the distributed tracing component within our Istio based service mesh to collect & visualise HTTP request traces for the services we run on our Delivery Platform (using GKE). We have around 400 services running in production and distributed tracing provides a lot of value for us when debugging problems and understanding behaviour across the system. At a high level, Jaeger consists of the following components:
Read more →

Discovering Test Doubles

I wrote most of the content for this post well over a year ago whilst working for Auto Trader. When I joined the company I landed in a team that was pretty unique compared to any I’d worked in before. The focus on quality and technical excellence was very high, there was a real focus on collaboration and I really started to get a feel for what it might be like in an XP team.
Read more →

JAlba 2019

On the morning of 23rd May 2019 a group of Java enthusiasts from around the world converged on the historic Scottish city of Edinburgh for the 2nd edition of JAlba Unconference. For the 2nd time, JAlba did not dissappoint! JAlba is a special kind of conference that follows the open space format. After attending JCrete in 2016, this quickly became my favourite kind of conference, and with JAlba being closer to home it’s an event that would be rude to miss.
Read more →

My thoughts on software development

Around the beginning of this year as I was transitioning between jobs I decided to start writing down my views on software development. The majority of the ideas, approaches, principles and values in here are things I’ve learned about, experienced or simply formed an opinion on over the last 5 years or so. This post is basically a dump of those thoughts. There’s likely nothing new here - I’ve learnt all I know from the amazing people I’ve worked with, consuming many books & videos (both software related and not), attending conferences and simply engaging with the many talented people in the various tech communities I’m involved with such as the Manchester Java Community.
Read more →

A year with the Manchester Java Community

Following JCrete in the summer of 2016 I returned inspired by the people I had met and highly motivated to become more involved in the local tech community. This led me to attend more events such as XP Manchester and the Manchester Java Community (MJC). I also offered to speak at a future MJC event if they would be open to it. In October 2016 I did my first (and only so far) public tech talk for the MJC.
Read more →

Git aliases

Git aliases are a cool feature. With a little config you can power up your Git command line. Here a few I have configured that make my day-to-day use of Git much nicer. status This alias saves me typing a few characters (I’m lazy): alias.st=git status I can then save my fingers some effort by writing git st to quickly check the status of repo. log I have the following alias configured that I use in place of the standard git log command:
Read more →

Reading a file in Java 8

I always forget how to read the contents of a file, here’s the simplest way I’ve come across. import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public static void main(String[] args) throws IOException { List<String> content = Files.readAllLines(Paths.get("input.txt")); } There are other variants of Files.readAllLines such as Files.readAllBytes etc. Also, if it’s a Stream you’re after then use Files.lines, but don’t forget to close the stream (thanks Tim Yates!).
Read more →

Continuous unit testing with Java & Infinitest

As my awareness around automated testing, and particularly TDD, has risen over the last few years I’ve been keeping my ear to the ground for new ideas and techniques I can experiment with. I was recently at a meetup hosted by Equal Experts and there was a talk by Oliver Shaw on what “Doing TDD” is, and isn’t. The talk provided a great live demo of TDD exploring a fairly simple use-case but showing how natural the TDD process can be.
Read more →