Functional programming in PHP (UK Symfony meetup)

Excellent talk given by Zsolt Sende at the UK Symfony meetup last week.  The first iteration of this talk - for which the slides can be accessed here - was delivered internally at the MSM London office just before Xmas and refined before being presented at the meetup.  Interesting subject content and good delivery in both cases.

(Video to be uploaded at a later date).

"How useful is code coverage" - gamification metrics and code quality

"How useful is code coverage" - gamification metrics and code quality

Anyone who has ever written tests in JUnit, PHPUnit, PyUnit or Karma knows the joy of hitting that 100% code coverage mark, reflected in reports presented on their CI tool, or otherwise generated directly by Clover or Cobertura. It's a rewarding feeling to be sure...but the terrifying question is just how value this 100% code coverage figure is to the quality of our software product. 

Segway Slalom and Mopane Worm Mayhem

Segway Slalom and Mopane Worm Mayhem

For our monthly team building we decided to escape our comfort zones and try something new - a Segway tour at Moses Mahbida stadium.  We were fortunate to have our London CTO join us for the team building so we decided a whirlwind tour of the Durban beachfront promenade would be a great way to show off our beachfront and try our hand at some adrenaline and techi activity.

Consumer driven contracts

Last week I attended a 5 day conference in Austin Texas learning all things open source and attending some great talk and tutorials, Oscon is the largest open source conference in the world and attended by thousands of developers, CTO’s and IT managers to further develop their knowledge and skill set. 

After a 10hr flight, I thought I would stretch my legs and see the sites of Texas’s capital. However, this was a bad decision after getting caught in a thunderstorm and having a 40min walk back to the hotel in the rain.


The 3rd talk of the first day was on transitioning to micro services (, a hot trend in the tech industry today and the lecture hall was fully packed. A very interesting subject that was discussed was ‘Consumer driven contracts’. 

Having recently completed a project building a SOA micro service platform in Quidco and now having that platform being used in we have faced issues with the website or the admin having functionality impacted when there has been a change made within the platform, wanting to release continuously and freely. I felt after listing to the talk that 'consumer driven contracts’ will be an efficient approach for the platform team to check against before releasing any changeS. 


Consumer-driven contracts (CDC) is a pattern for specifying and verifying interactions between different parts/modules of an application. Consumer-driven means that it is the responsibility of the Consumer to specify what interactions it is relying on, as well as their format. Other services must then agree to these contracts and ensure that they are not breaking them. It puts the responsibility on the consumer of the service e.g. in Quidco’s example the team who built and manage the admin and site, to define the coverage and write tests for the platform team to run after they make a change, if the tests pass then the platform team can proceed on pushing these changes out, if the tests fail then they need to fix the failure before proceeding, however, when there are changes in the admin or front-end (consumer), the tests written need to be updated and maintained.  

Without the necessary precautions, there are a lot of ways interactions between services and consumers can be broken by changes made in the different services. The most common one would be that the Provider would change its interface in such a way that the Consumer can no longer interact with it


  • Change of the endpoint URL (e.g. GET /stockLevels renamed to GET /stockLevel)
  • Change in the expected parameters (e.g. GET /stockLevels expecting a new mandatory “category” field)
  • Change in the response payload (returns an array, instead of having an array wrapped in an object)

The concept behind CDCs is to split the work of the integration tests right in the middle, i.e. at the communication stage between the 2 services.

  • The consumer defines what it expects from a specific request to a service
  • The provider and the consumer agree on this contract
  • The provider continuously verifies that the contract is fulfilled

This implies a few things:

  • Consumers need a way to define and publish contracts
  • Providers need to know about these contracts and validate them
  • Consumers and provider might have to agree on some form of common state (if the provider is not stateless or depends on other services)

Since learning about CDC I have shared this with Quidco frontend lead, telling him about how CDC can reduce the reliance of heavy end-to-end or large-scale integration testing, within the conference I was told about Pact and this being a great tool for implementing CDC ( 


Sean Harrison


Hypermedia in RESTful APIs

Hypermedia in RESTful APIs

In the last few years of my IT experience, I have noticed how every company wanted to build microservices, perhaps by splitting up an already existing monolith.  The advantages of having smaller independent services with single responsibility are widely known, which communicate between each other through RESTful APIs.
However, very few companies - startups and corporations alike - pay attention to an aspect of microservices which - in my opinion - is very important: how to represent data to the external world.

Symfony London - Microservices talks

Last week, several members of the Maple Syrup team took part in the Symfony London meetup near Bank, which focused on the very hot topic of microservices.  Overall, we found it was an educational and thoroughly enjoyable experience.  Informative, well-delivered talks as well as collaborative discussions with members of the thriving London tech community are their own reward.

Macbook cannot access certain sites (using eset mac antivirus)

Recently came across some strange behaviour on a couple of OSX macbooks. Both laptops could access some websites but not all and both Safari and Chrome were affected.

After a while of digging around I realised it was sites on port 80 that I had problem with (so SSL sites were not affected). The problem was present regardless of wifi or wired network I was on. The browser would request the page and eventually it would time out and some times the laptop would become unresponsive (especially using chrome which refreshes in the background).

The laptop were new and running ESET mac internet security.  Having looked at the ESET logs I realised that the eset proxy process was crashing on requests on port 80 and getting restarted stopping my browser from working until eventually my laptop would become slower and slower or crash. The error logs showed ESET Daemon Child process proxy did not handle signal restarting as per screenshot below.

To make things more frustrating switching off web access protection from Eset antivirus UI didn't fix the problem and to fix it, I had to switch of web access protection

eset 1.png

I also had to go to web access protection->setup and select a port not used by the browser (I setup port 79, make sure you select a port not used) as per below screenshot.

I waited a few minutes for the eset proxy processes to die and browsers started working fine and not had any issues with browser or slowness anywhere.

The first OS@north is over!

I would like to thank everyone that attended. The team of OS@north enjoyed going through the presentations and answering questions from the audience. Some great ideas on how we can develop a strong tech community from the participants and individuals keen to get involved in the effort.

The team is already busy planning our next even which will focus on training. Elastic search, Angular, Docker and Kubernetes will be on the agenda but please get involved and let us know of your thoughts.

Some snaps below of the great team that put a huge effort to stage the event! Well done everyone! 

We will be publishing shortly the slides and resources of all presentations.