Latest posts

My Last Three Years in Numbers

I am coming to the end of three years of working on a long running contract on a 'quantified self' system for a client, enquos. This is a system to help people measure and track their nutrition, exercise and wellbeing in order to effect change in their life. It has been a fascinating three years, but gave me an idea for a blog post: Some of the numbers of the last three years of some of the work I've been doing. Both for enquos, and also side-projects I've been working on.

So here we go...

enquos team sprint

I've been working on enquos for 1117 days. In that time I built our mobile development team from scratch and I have found/hired/managed a total of 12 developers. We have built 6 apps in total across both iOS and Android platforms. I set up a continuous integration test and build server that has started at least 3876 complete signed, distributable builds of the apps.

The iOS app has been developed over two languages (Swift and Obj-C) and three major version of Xcode (7,8 9).

Between the Android and iOS versions of the latest app 'enquos Total Health', we have over 1250 automated tests.

enquos mobile app jenkins pipeline view

The final iOS app take approx 37 minutes to build, test, package and deploy. The Android app takes approx 8 minutes to build test, package, and deploy. So assuming we built the same number for each, and over the life of the app the build time average is half the final time, then the build server has spent a total of 31 days solid building the app. Our build numbering system changed halfway through, so I reckon that 3876 is only half the number of builds we have done. And the total time and number of builds is likely double that, more like 2 months solid building.

I introduced Slack into the company and in that time there have been a total of 324,964 messages sent on Slack between us.

When I first started, the iOS app I inherited from an outsourced app development company in another country, was over 1 GB in size. It is now 84 MB, yet still retains a complete offline searchable database of nutrition items. Each entry containing up to 160 different nutrients.

enquos iOS app screenshots

In this time I have given five talks at 3 conferences and 2 user groups. I have also given four talks at schools and universities as a STEM Ambassador.

Speaking at SWMobile on automating iOS code signing

I now know more about iOS app signing and provisioning profiles than any sane human should.

Global Festival of Ideas conference game

In other projects, I built the Python back end for a budget simulation game for a UN conference on sustainable development. The game was used by 450 people at the conference over 3 days and processed a peak of 10,000 financial transactions per second. It was a collaboration between three different companies, one doing the mobile apps, one the overall idea and strategy and myself doing the backend.

Ripple trading bot app screenshot

I have also stared to learn Node.js and get more interested in cryptocurrencies. Specifically, the real-time settlement network, Ripple. You know how an international SWIFT payment takes four days to complete? Ripple does the same in 4 seconds. So fast, you can actually try and make money foreign exchange trading by sending currency back and forth across the network. I wrote a bot to do just that, which is currently trading £1.2 million per month between eight currency pairs. And making a small profit in the process.

Oh, and I've lost 10kg in weight in this time.

So if any of this experience sounds like it would benefit your project, then get in touch and let's chat! For more background on me and past experience in Plone and Python, then see my bio or linkedin profile

Intro to Ripple and XRP

I've recently started playing about with the cryptocurrency XRP and the Ripple network, here is a quick introduction to it.

My University Thesis - Full Text Indexing

I found my university thesis from 17 years ago, along with the code for the full text indexer I wrote back then.

Automating Feature Branch Builds on iOS and Android

This is a talk given at Codemobile 2017 conference in Chester, UK. It was a 5 minute lightning talk detailing how to automate the building of apps for each and every feature branch created as ...

How To Make Better Coffee Without Breaking the Bank

With about £60 of equipment and a bit of knowhow you can produce far better coffee at home than your cup of instant.

Testing Randomness in Python

I needed to be able to unit test some python code that had a random element to it. Here's how I made it deterministic.

Finding Provisioning Profiles by Name Rather than UUID

Despite my previous thoughts, you can actually use Xcode 8’s find-by-name functionality for manual signing on a CI setup.

Duplicate Keychain Entries in macOS Sierra

I upgraded a build server to macOS Sierra and the keychain unlocking stopped working, here is how I fixed it.

Lockable Resources Jenkins 2.0 pipeline builds

If you want to increase concurrency in your Jenkins pipeline builds, but need to ensure that certain resources are not used concurrently, then you can use lockable resources

Automating Xcode 8’s New Automatic Signing

Picture of Matt speaking at SWMobile meetup

This was a talk I gave at the SWMobile Meetup in Bristol in October 2016. The talk was a lightning talk on automating the new Xcode 8 automated signing system when using it in a CI setup. In our case we use it with Jenkins and Fastlane to automate all ...