Visualizing Hold’em Hands

“This grid compares the strength of a particular Texas hold’em hand (in this case 8♥Q♠) against all other hands. Each square represents a pair of opponent cards, and the color represents the relative strength of these two hands — the redder the square, the more likely the opponent hand is to win. These probabilities were computed by enumerating all ≈1.3 trillion hands of heads-up Texas hold’em…”

An opinionated CQRS/ES implementation using Onyx, Datomic, DynamoDB, Kafka and Zookeeper

“An opinionated CQRS/ES implementation using Onyx, Datomic, DynamoDB, Kafka and Zookeeper.

The problem

Best to start with the core problem at hand:

The current relational database is too limiting. We’re dropping all sorts of interesting data on the ground because we don’t have suitable pigeonholes to put it into.

Any system that has enough interesting interaction happening to it faces this problem. The data that we do end up putting into our database tends to inconsistent design. It is then risky to change down the line because it gets treated as our system of record.

To this end, we’ve been doing research into Event Sourcing (ES). This led to Command/Query Responsibility Segregation (CQRS) and touched on the area of Domain Driven Design (DDD)…”

Reverse proxying with dockerized nginx

FROM ubuntu:14.04

# get the nginx package and set it up
RUN [“apt-get”, “update”]
RUN [“apt-get”, “-y”, “install”, “nginx”]

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
VOLUME [“/var/cache/nginx”]
EXPOSE 80 443

# load nginx conf
ADD ./site.conf /etc/nginx/sites-available/correspondence
RUN [“ln”, “-s”, “/etc/nginx/sites-available/correspondence”, “/etc/nginx/sites-enabled/correspondence”]
RUN [“rm”, “-rf”, “/etc/nginx/sites-available/default”]
CMD [“nginx”, “-g”, “daemon off;”]

Go kit: Go in the modern enterprise

This was originally a talk in February 2015 at FOSDEM and the Google Campus London meetup. I’ll post a link to the video when it’s available.

  1. The modern service-oriented enterprise
  2. What Go needs: a Go kit
  3. Let’s collaborate

The modern enterprise

When we read the word enterprise we probably think of older, slow-moving bureaucracies, like IBM, HP, or even Red Hat. But it’s been a long time since companies like those have been technical leaders. Decades, in some cases. Now, companies like Google, Amazon, Twitter, Netflix, Facebook, Spotify, or even SoundCloud set the tone for our industry. These modern enterprises tend to share a few characteristics:

  • Tech-oriented
  • Consumer-focused
  • Successful, exponential growth
  • 100–1000+ engineers
  • A service-oriented architecture

The last point in particular is important…”

Scala Vs Clojure – Let’s get down to business

“Of the new languages that are emerging these days, no two are as interesting as Scala and Clojure. Both claim to be functional and geared for concurrency, one is a Lisp the other a Curly braces language. On paper, they stack fairly well against each other, so let’s investigate how well they are suited for business…”

Nim: How I Start

Nim is a young and exciting imperative programming language that is nearing its 1.0 release. My main motivation for using Nim is its performance / productivity ratio and the joy of programming in Nim. In this guide I’m going to show you how I start a Nim project.

For this purpose we will write a small interpreter for the brainfuck language. While Nim is a practical language with many interesting features, brainfuck is the opposite: It’s impractical to write in and its features consist of 8 single-character commands. Still, brainfuck is great for us, since its extreme simplicity makes it easy to write an interpreter for it. Later we will even write a high-performance compiler that transforms brainfuck programs into Nim at compile time. We will put all of this into a nimble package and publish it online…”