Today I learnt

Elixir: Saving a tuple in Postgres

22 August 2022

You can sort of get it working - but should you? I'm writing a Connect Four game application in Elixir. I wrote game logic which expects to receive the coordinates of a coin position as a tuple…

Read more

Querying data in Azure Table storage

22 May 2022

Today I learnt about Azure Table storage. At work I needed to find out how many users prefer one UI setting over another. This data was saved in an Azure Table storage database table. What is Azure…

Read more

Terraform basics

24 July 2021

A few weeks ago I was lucky enough to work on a codebase that was getting setup with Terraform. I had never used it before, so it was great to learn about it! Here's what I understand so far... What…

Read more

You can't nest describe blocks in ExUnit

17 May 2021

...and I think that's a good thing! Let me explain why. I write JavaScript in my day job and nesting describe blocks in my tests is such common practise, that I hardly even think about it anymore. I'm…

Read more

Passing props into styled components

28 April 2021

I only just started working with styled components and they seemed pretty straight forward to use. You can use any HTML tag of your choice and pass it your CSS as a JavaScript object. Styling a div…

Read more

Looping over tests with Jest

26 March 2021

When you want to test some simple and repetitive logic, it makes sense to loop over the input and output data and run the test for each. A verbose example Let's imagine we're writing tests for a…

Read more

Learning about Lerna

22 March 2021

Lerna is a tool for managing mono-repos, i.e. Git repos that contain several projects. I'd worked on a repo before that used it but never understood its full capabilities. Now I learnt more! What it's…

Read more

.gitconfig with conditionals

04 March 2021

Today I learnt that you can have conditional statements in your .gitconfig file. This was useful because I now have a second Github account for a client project in addition to my usual public account…

Read more

JavaScript Prototype Pollution

11 November 2020

Prototype pollution seems to come up quite a lot when tells me to upgrade packages. It's a vulnerability that has to do with the way inheritance is done in JavaScript. Any object that is created in…

Read more

Web Shell

10 November 2020

I've been learning more and more about web security recently and today I came across the concept of a web shell. I was going through a course on secure JavaScript coding which mentioned two prime…

Read more

Learnt a new German word - Datensparsamkeit

10 September 2020

Who would have thought that I'd learn a new German word at a conference in Australia - from Martin Fowler! My first language is German. I haven't lived in Germany for over a decade now so I'm somewhat…

Read more

What does hash salt do?

28 August 2020

Adding salt to a password before hashing it makes it more secure. Recently I learnt exactly why that is. When you save a password in your database, you don't want to save it in plain text. In case…

Read more

Pass arguments to a Node script

27 December 2019

We're migrating our old Hugo blog at work to use Gatsby. Mostly the markdown pages can stay the same - except the frontmatter sections at the top of each blog post. In Hugo we were using JSON and…

Read more

Where smoke tests get their name from

18 December 2019

Smoke tests are tests that are run to ensure that the most basic functionality of a program works. So not testing all the edge cases but instead making sure that the main things that the program…

Read more

JavaScript and CSS can communicate

19 November 2019

The first thing I learnt today was about CSS custom properties, also called CSS variables. I might be a bit late to the game here but today was the first time I actually saw these in use - in a PR…

Read more

You can revert a git merge

19 October 2019

We had a little bit of an issue in live today, resulting from a large refactoring that was done this week. We had to urgently fix this issue. It was hard to debug, so we ended up reverting the code…

Read more

You can temporarily ignore vulnerabilities

17 October 2019

At work we have a pre-push hook on our repos that doesn’t allow us to push if we have npm vulnerabilities. That’s great for security, of course, and I see why that’s necessary. It’s not much fun if…

Read more

Web monetisation with Coil

03 October 2019

I was listening to the Shoptalk Show podcast episode about how to make money with your content on the web. And there’s a new way of doing that with one provider called Coil. I think there might be…

Read more


06 September 2019

I'm reading The Pragmatic Programmer at the moment and they explain what orthogonal systems are. I feel like I had heard about it before but never really knew what it meant. Orthogonality is a term…

Read more


01 September 2019

I came across this philosophy in the new edition of the Pragmatic Programmer book. (I guess the original version talks about it too but I don’t think I ever read that). It’s a Japanese concept meaning…

Read more

Assert that an object has keys with expect.js

29 August 2019

We’re using expect.js at work for our test assertions. And today I learnt that you can have an assertion on whether an object has a key or not. I needed to assert that an object was not saved with a…

Read more

Bash script to run a test lots of times

19 August 2019

This is probably more a note for myself rather than anything else… but why not make it public? Maybe someone else is looking for just that. We had a test that was randomly failing when we were running…

Read more

Comparing dates in JS

16 August 2019

I’ve recently done a lot with dates and times. And I found it really fiddly. Comparing dates, comparing times of days… and I learnt a few things about that. Firstly, moment.js is a life saver. It has…

Read more

Vim snippet for console logging

06 August 2019

I did another one today to easier debugging in JavaScript. When your cursor is on a word in normal mode, you can type and it will insert a console.log statement with the word you’re on on the next…

Read more

Vim snippet to focus on a test

05 August 2019

The amount of times that I've finished writing the expectation of a test, then navigated up to the description of the test (usually using to match the closing bracket), then added a after the to…

Read more

What exactly is Opera Mini?

01 August 2019

I feel like every time I look at to see what the browser support is for certain CSS or JS features, there’s usually a mix of green and red - but there’s always one that’s red and nothing…

Read more

WebP image compression

31 July 2019

I’m really not keeping up with the latest web development trends… Today was the first time that I heard about WebP. It’s an image format which is superior to PNG and JPEG in terms of file size and…

Read more

Private and public browser cache

30 July 2019

One of the many wondrous things you can inspect in the Chrome developer console are the cache-control settings. The first value it specifies is either “private” or “public”. And then it shows the max…

Read more

Express routing error

28 July 2019

What Express is trying to tell you is that your route is calling a controller function that doesn’t exist… Because you renamed it in the controller… and then you went and updated some other things…

Read more

Slack - toggle right pane

26 July 2019

I think threads on Slack are great - they keep the channel a lot tidier. It just always annoyed me that I couldn’t figure out which shortcut to use to close that little window on the right, that…

Read more

Elixir module not available

19 July 2019

I’m working on a small side project in Elixir and last time I worked on it, I got stuck because I got this error. I had just written a Supervisor for the first time and created an Agent as a child of…

Read more

Elixir - you can pattern match on strings?!

05 July 2019

Wow, maybe this should have been obvious but I didn’t realise that until now. That’s so cool! I’m working on a slack bot and need to parse people’s commands to the bot. So I’ll be dealing with a lot…

Read more


04 July 2019

Sounds pretty wild and like something you probably don’t want to touch with a bargepole! Au contraire. I’ve seen it all over our Tes codebase and now I’ve come across it again when I was setting up my…

Read more

MongoDb write concerns

30 June 2019

I’ve been doing the MongoDB for JavaScript developers course by MongoDB University. Today I learnt about write concerns. Let’s say we are saving something in the database, but instead of just one node…

Read more

Function capturing in Elixir

29 June 2019

In Elixir you sometimes need an anonymous function instead of a named function. The difference is that an anonymous function has access to anything that is around it, while a named function only has…

Read more

MongoDB lookups

23 June 2019

As part of the MongoDB University course that I’m doing, I had to write an aggregation with a $lookup 😱 And I learnt that lookups are effectively left joins, as we know them from relational databases…

Read more

Edit view vs read-only view

19 June 2019

At work we’re aiming to build a new system in the most Lean way possible. Which basically means that we’re trying to get it up and running with the most minimum amount of work and code written. The…

Read more

React Hooks in production

12 June 2019

Today I used React Hooks for the first time in a production project. Boom! Modern JavaScript. I used the state hook which replaces and . You no longer need a class component to keep track of state…

Read more

Upgrade to Neovim

05 June 2019

As a modern woman, I’d been thinking about upgrading to Neovim for a while. (OK, you might argue, that as a modern woman I should have upgraded to Neovim a long time ago. Or that I would not be using…

Read more

Backpressure and pressure-stream in Node.js

14 May 2019

I’m working on a story to take some data from one database, transform it and then save it in another database. So I need to write a script that does this. Luckily I’m not the first person to have…

Read more

lodash fp

17 April 2019

Today my colleague Federico introduced me to the functional programming library of lodash. We were using . Here’s how we used it: We had a JavaScript object which first needed to be transformed into…

Read more

MongoDB projections

14 April 2019

Every time I have to do a MongoDB query I feel a bit uneasy… I know how to make some basic queries but the rest I always have to google. So I decided to start the Mongo University course for…

Read more

Studio 3T for MongoDB skillz

27 March 2019

Most of us at work seem to be using Studio 3T to access our data in MongoDB. Here are a few things that I've learnt that help me use it better. Shell shortcut To open the shell to write Mongo queries…

Read more

MongoDB compound indexes

21 March 2019

I picked up a story at work today which is related to indexes in MongoDB. Basically, one of my colleagues had run a query to evaluate the usage of our existing indexes for a specific collection and…

Read more

Empty string is not a string in Joi validation

20 March 2019

We’re using Joi validation to ensure that we’re saving the data of the correct types and with the correct fields into our database. I had created a new field which was a string, so I added this to the…

Read more

Mangrove forests

16 March 2019

I was on holiday in Thailand this weekend. Yeah, digital nomad life is tough 🙂 But I still learnt something. My partner and I went on a snorkelling trip. And on the boat to the snorkelling spots we…

Read more

CSS Transition Group

14 March 2019

I read this interesting article this morning in bed (great excuse to stay in bed longer). It's about how someone refactored their frontend to use no (ok, minimal) JavaScript. One of the things the…

Read more