Recent Posts

Maintainable Web Development without Javascript

2 minute read

In the years 2002-2003, Internet Explorer captured 95% of world-wide browser market share. It was unfathomable to many that over the next 10 years IE would d...

Web Components

1 minute read

At the heart of a web page, there are UI elements and these elements interact: with the user, each other, and the server. Although HTML5 expanded the origi...

Real-time Data Mining with Spark

8 minute read

There are 2 new principles at the vanguard of today’s technology: Reactive UX. As the world’s population spends an increasing portion of their lives elect...

Finagle ServerSet Clusters using Zookeeper

5 minute read

The key to high availability is redundancy; it follows that if uptime matters, Finagle needs to be deployed to multiple servers. This article walks through...

Separation of Concerns with Finagle

3 minute read

The Separation of Concerns (SoC) pattern is one of those software architectural choices that everyone is helpful. It increases clarity, shortens the amount o...

Transitioning C# to Scala Using Thrift

less than 1 minute read

A 30 minute presentation I made on Sept 19th in a Scala-Toronto Meetup. The slides introduce Apache Thrift and the additional features offered by the Twitter...

Binary Semaphore Filter

3 minute read

Long running queries are very taxing on a database. But caching idempotent queries may not always be a suitable solution. What happens if queries run for N-s...

Tracking Clients with Finagle

3 minute read

In a Service Oriented Architecture, a service may be used by many different clients – each with with different usage patterns and performance profiles. Behin...

Reusing Finagle Server Filters on the Client

2 minute read

When using Thrift, Finagle Filters on the client inherit from SimpleFilter[ThriftClientRequest, Array[Byte]], while on the server they must inherit from Simp...

Finagle Query Cache with Guava

4 minute read

For many data services, any easy way to reduce database load is to cache calls to semi-static data (ie: append-only, or refreshed only on a set schedule), an...