A blog on software engineering by Trevor Brown

Erlang Records vs. Elixir Structs

I use Erlang and Elixir regularly, and I often get hung up on the differences between Erlang records and Elixir structs. Both serve the same purpose most of the time but are implemented differently.

In this blog post I will document the differences between these two constructs.

Benefits of Living Without a Smartphone

It’s immediately obvious what the disadvantages are of living without a smartphone. Lots of things in modern life are more difficult without without the help of a smartphone. Smartphones augment our own knowledge and keep us connected to people, systems, and services we rely on. In my previous blog post I wrote about my experience living with only a dumb phone.

In this blog post I list the benefits of living without a smartphone that I have noted over the last 15 months. Some of these things I experienced myself and others are things I have read about.

Running Dialyzer for Elixir Projects in GitHub Actions

I recently published an article on the Code for RentPath blog about running Dialyzer with GitHub Actions.

In this blog post I’ll show you how to set up GitHub Actions to perform type analysis on an Elixir project with Dialyzer. I’ll also share optimal settings for Dialyzer PLT caching.

Running automated tests for every commit or pull request has become common practice and is a good way to validate the correctness of your Erlang or Elixir software. Type checking with Dialyzer is another way to ensure the quality of your code changes.

I have previously written about how to run Dialyzer in a Jenkins build and here I’ll share how to do the same with a GitHub workflow.

Read the rest of the article on