By Mikell Johnson (Own work) [CC BY-SA 3.0 (], via Wikimedia Commons

A taste of CloudFormation.

Ceri Storey wrote “So, we’ve recently had cause to move one of our internal applications to the cloud; which has largely been an excuse for me to get some experience in some relatively modern operations technologies. Amazon’s CloudFormation is designed so that you can declaratively specify the infrastructure resources (eg: virtual machines, load balancers, container configuration, &c) that…”

Sturmfront auf Doppler-Radar-Schirm, public domain, von

Adventures in TCP latency measurement

Ceri Storey wrote “Re­cently, Google have pub­lished an art­icle on BRR, an al­gorithm that ex­pli­citly meas­ures the round-trip latency and band­width ca­pa­city of the link between two ma­chines (be it in a data­center, or a mo­bile phone) to avoid sending more traffic than is use­ful, causing queues to build up in the net­work that need­lessly in­crease latency. So…”

By John Ficara (This image is from the FEMA Photo Library.) [Public domain], via Wikimedia Commons

Testing as question asking or Hypothesis Driven Development

Ceri Storey wrote “So, my co-worker Ian asks the question “Why bother testing?”. I think that an under-considered question is how we think about testing. I would wager, that a sizable majority of programmers (myself included) will usually learn one or two techniques for testing, and then gravitated towards those same set of answers for most problems. As…”

By Maksym Kozlenko (Own work) [CC BY-SA 4.0 (], via Wikimedia Commons

It’s all happened before

Ceri Storey wrote “It’s all happened before Coming from an operations background, I’ve found that one of the best ways to understand a system’s behaviour is to trace the messages between components. Now, most languages go have a log library, that will at minimum, allow developers to log when an event occurred with a description. However, if we…”

Rules-based Network programming with Mio and Rust

Ceri Storey wrote “One thing that you notice after spending most of your time looking at the insides of a program, is that it’s very easy to get bogged down in implementation detail, and end up with rather an optimistic view of how well the world outside of your application works. This is an especially common theme in…”

By David Ingham from Bury, Lancashire, England (P2204757 Uploaded by oxyman) [CC-BY-SA-2.0 (], via Wikimedia Commons

More Clojure component patterns

Ceri Storey wrote “Like the proper nerd that I am, I’ve been recently playing around with the National Rail data feeds, with a view to drawing some pretty pictures of quite how differently timely our train services are. So, when you’re developing at the REPL, it’s convenient to be able to cleanly shutdown and restart a n service.…”

(defn reloaded/-main [] …)

Ceri Storey wrote “I’ve been using Stuart Sierra’s reloaded pattern on a few Clojure projects recently, and I hit upon the problem of how best to use Stuart Sierra’s reloaded with a typical long running application. So, I thought I’d share one possible solution. Most of the code should be self explanatory, but there are a few things…”

Tell don’t ask with Sinatra handlers

Ceri Storey wrote “In Bigwig, in order to keep our code neat and well factored, we’ve tried to adhere to the principle of tell, don’t ask as much as we can. However, one place this can be difficult is within a handler for an HTTP request (we’re using Sinatra for that).”

My little Backpressure: Flow Control is magic

Ceri Storey wrote “When we’re designing systems that are designed to be robust against failure, it’s important to know how behaviour at your Integration points (a term borrowed from Michael Nygard’s book Relase It!) impacts the rest of the system. For example, if your database or a remote API is running slowly, then in Synchronous systems, because you…”

Precise scheduling with RabbitMQ

Ceri Storey wrote “On a project recently, we needed to be able to process jobs asynchronously, but we also needed to be able to specify that they should be run at a certain point in the future. We also needed to be able to implement exponential backoff on failure. We initially tried to integrate Sidekiq, but unfortunately it…”