<img height="1" width="1" src="https://www.facebook.com/tr?id=1076094119157733&amp;ev=PageView &amp;noscript=1">

Carl Pulley

Recent Posts

Posted by Carl Pulley
Tue, Jul 11, 2017

In this post we look at how we can use SBT's source generators to centrally manage library dependencies across a recursive SBT build. Our aim is to have a single location where library dependencies can be managed and to then have SBT plugin code, build code and source code be able to access the centrally managed ModuleIDs.

Posted by Carl Pulley
Sat, Feb 11, 2017

In this blog post we explain how Typesafe configuration data may be validated. To avoid unnecessary boilerplate code, we use Shapeless to aid the creation of a lightweight validation DSL. We finish off the post by showing how the use of sealed abstract classes can be leveraged to enforce validation constraints to be invariant.

Posted by Carl Pulley
Wed, Jan 18, 2017

As part of a series of blog posts on Chaos engineering, this blog post introduces the open source library docker-compose-toolkit. Here, we use this library to define a Chaos experiment (using extensible effects) that illustrates the impact that auto-downing can have when an Akka cluster is subjected to network partitioning. The previous post Can Real World Distributed Systems be Proven Correct? motivates and explains the need for performing fault injection on distributed applications. In future posts, we will consider more realistic use cases than considered here - so please stay tuned!

Posted by Carl Pulley
Mon, Dec 5, 2016

This blog post explores the degree to which real world distributed systems may be proven to be correct. I outline how fault injection, following Chaos Engineering principles [1], might aid this verification process. Finally, I briefly review existing fault injection frameworks. Future posts shall present a generic fault injection framework - the docker-compose-toolkit - and explore how DSLs, based on IO-automata, may be built allowing the specification of distributed system behavioural properties with their conformance ensured using runtime monitoring.

Posted by Carl Pulley
Mon, Mar 23, 2015

In this post, we monitor real-time streams of event data looking for pattern matches. Monitoring is performed using a novel and expressive query language based on linear dynamic logic (a generalisation of linear time temporal logic), with modern SMT provers (e.g. CVC4 and Z3) defining the pattern matching workhorse.

Posted by Carl Pulley
Wed, Mar 18, 2015

In this post we investigate how Akka streaming can be used to define flexible and programmable workflows that successfully integrate ML classifiers (such as decision trees, Bayesian networks, SVMs, etc.) to build complex classification pipelines.

Posted by Carl Pulley
Sun, Mar 15, 2015

Lift uses Akka streaming workflows to define a flexible and generic exercise classification pipeline. The classification pipeline is able to modularly include any machine learning classifier and is able to monitor the real-time streams of classification results using a linear dynamic logic.

This post provides a summary overview of this classification pipeline with future posts introducing the implementation details.

Posted by Carl Pulley
Mon, Jan 26, 2015

In this post we demonstrate how machine learning (specifically SVMs) may be used to identify gesture events, such as taps, in data steams produced by accelerometers in devices such as Pebble watches.

We start by developing prototype classification models in R and then port those models into Scala.

Applying the trained SVM models to unseen data, we successfully demonstrate an ability to punctuate exercise sessions by identifying taps to tokenise those exercise steams into separate activity periods.

Posted by Carl Pulley
Sat, Dec 20, 2014

Here we present a flexible and generic framework within which distributed applications, built upon a microservice architecture, may be implemented and deployed.

We achieve this by deploying dockerised microservices to a cluster of CoreOS machines (complete with etcd for service discovery and fleet for controlling services and specifying affinity rules).

Microservices are implemented using Akka actors that support clustering, Cassandra persistence and data sharding. Interaction with the microservices is mediated using a Vulcand load balancer that round-robin connects (via circuit-breakers) to microservice REST endpoints.

Posted by Carl Pulley
Tue, Jun 24, 2014

Need help on your next project?

Recent Posts

Posts by Topic

see all

Subscribe to Email Updates