I’m job hunting and today I had the pleasure of talking to Cable. They want to tackle financial crime and improve our currently abysmal efforts to reduce financial crime (currently only a tiny percentage of financial crime is caught).

In preperation I watched this talk by Natasha the founder, which really got me thinking about the nature of crime. Natasha’s point is that most crime is financial crime, in that lots of crime involves a financial gain. That means if you can tackle financial crime in some way you make a good dent in all crime.

Why does crime happen?

Laws and law enforcement…

Photo by Edu Lauton on Unsplash

I wanted to show the way I’ve been thinking about structuring umbrella apps in Elixir applications. I’ve been using this approach for a while and have found it useful. I have also made a template repo in github to get you started if you want to try it out when building a graphql API in elixir.

I like umbrella apps because they are a nice way to declare and separate internal dependancies. They enforce a one way relationship between apps; one app includes the other, and that’s that. …

Photo by Shaojie on Unsplash

What exactly is immutability? What are the implications of immutable data types in our languages?

What is it?

Immutability is a constraint on our data types that says “this data type cannot be modified”. On the surface this sounds like very counter intuitive thing to want. How on earth can we do anything if we can’t change any data?!

Well, we do it by making a copy. Here are two examples in javascript the first uses a mutable data structure, the second is how we would have to do it if the data type was immutable in javascript

let mySandwich = { bread: "brown", butter: false}// This is a mutable update
function mutableButterSandwich(sandwich) {
return sandwich["butter"] =…

Pictured: disappointment. Photo by Sarah Kilian on Unsplash

Let me tell you about the time I accidentally deleted the users table. Why? Well people make mistakes all the time andI think it’s important to be open about them so they get fixed quickly. I think it’s important to normalize talking about mistakes because they are a part of learning, we all make them, and they are hilarious. So gather round….

We, like most businesses, have a users table. It has, as you may have guessed, data for all of the users of Nested. At the time of deletion the table was moderately large - not huge but several…

Photo by Tomas Sobek on Unsplash

Protocols are a very powerful feature of Elixir. I’ve introduced them before here, and I looked at how you might use them to solve the expression problem here.

Today I want extend an idea I touched on in that last article and explain it better. It doesn’t matter if you haven’t read the previous article, but for context at the end of it I tried to show an example of triple dispatch. The idea was that you could decide which specific function gets executed according to the types of three arguments passed to a function. Usually we use single dispatch…

Creating a has_one_of association in Ecto with EctoMorph

Photo by Jason Leung on Unsplash

So what do I mean by has_one_of? Well sometimes when modelling data we want to say something like “this thing can be one of these types of things”. That is to say, our thing can be one of a group of possibilities, and can only be one of those at any one time. Why is this a useful way to talk about data? Isn’t that just a has_one anyway? Let’s look at an example to see…

We want to track athletes and their results in different events. To begin with we decide to have athletes, who have_one medal. …

Photo by Brooke Lark on Unsplash

In our previous post we took a little look at the differences between some common changeset functions in Ecto. Here I want to look a little bit more deeply into the cast functions cast_embed and cast_assoc. I want to show you how it is implemented (conceptually at least) and then present a library which provides some sugar over Ecto’s great work to help make turning raw data into validated structs a breeze. If you are not familiar with cast_embed and cast_assoc I highly recommend you read this post first

TL;DR the library is called EctoMorph and is availalble on Hex…

Currying. Another in a long list of words that anyone outside of programming hears and just assumes you are making up. Currying is a way to partially apply a function. What the hell does that mean? It turns a function that takes two arguments into a function that takes one argument and returns a function which takes the other argument.



In javascript, instead of having this:

let add = function(x, y) {
return x + y

we could do this:

let add = function(x){
return function(y){
return x + y

We could then call it…

knowledge DOES grow on trees

This is part 2 of a three part series. Part one here, Part three coming soon.

Let’s start with a definition. When I say coaching, I mean the efficient transfer of knowledge from someone with more of it, to someone with less of it. In this article when I talk about coaching, I’m imagining you (the coach) as the person with more of the knowledge.

Coaching is a skill that will always be useful to anyone in programming. If you are senior, you will need to coach. If you are junior you will need to coach. …


Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store