Safe Ecto Migrations

As an Elixir developer who cares about system up-time and avoiding "scheduled maintenance" windows, and more importantly avoiding "unscheduled maintenance" windows 😉, this guide dives deep into Ecto database migrations and how they can be used safely in production systems.

Read more...

2021-11-15
0m read
elixir, ecto

Nostalgia, Fun, and Programming

When we recognize music, movies, old photos, or video games of the past, it has a powerful effect: nostalgia. It's a pattern of the past that we remember fondly. When we write code, we recall patterns of the past to consider as tools to help solve today's problem. I'd like to explore the connection between software development and nostalgia, and have some fun while we're exploring the theory.

Read more...

2021-01-05
36m read
elixir, gaming

Moving the blog to Elixir and Phoenix LiveView

I moved my blog. It's now powered by Phoenix LiveView. Let me tell you about the transition. I outline the features I lost, I gained, and some performance surprises along the way.

Read more...

2020-08-15
12m read
elixir, phoenix

Phoenix LiveView and Views

Every time I build a LiveView application, I learn something new and find a new pattern, and some concept finally _clicks_. Today, that concept that cemented in my mind is how Phoenix and Phoenix LiveView renders templates. I want to show you a couple different View-rendering strategies. This should help you decide which strategy to use.

Read more...

2020-06-29
22m read
elixir, phoenix

Starting a New Podcast with Thinking Elixir

I joined the Thinking Elixir Podcast! I would really love it if you shared it with shared with your friends who know or are discovering Elixir.

Read more...

2020-06-17
0m read
elixir, podcast

Phoenix LiveView: Multi-step forms

Big forms are a pain to manage-- even harder to manage when you need to change values based on previous input and compute data based on that new selection. Phoenix LiveView can make this easier. Check out some techniques I used to help organize these forms.

Read more...

2020-05-13
33m read
elixir, ecto, phoenix

Ecto Changesets on Elixir Mix podcast

I was invited to talk on the Elixir Mix podcast. We talked about the Ecto Changesets and modeling change well.

Read more...

2020-04-08
0m read
elixir, podcast

NewTab Notes Extension

Today I published a new Chrome Extension in the Chrome Web Store. This extension replaces the New Tab page with a rendered markdown page that you can edit. It's customizable too!

Read more...

2020-03-31
2m read
chrome, javascript

Managing ElixirLS updates in Neovim with asdf and vim-plug

How I manage ElixirLS, neovim, and coc.nvim with vim-plug.

Read more...

2020-03-03
11m read
vim, elixir

Ecto Tips: UUID Boilerplate, Docs, and Composing Changesets

There are some helpful techniques you can employ to help you and your coworkers when writing long changeset functions. It's hard to remember what's required, optional, and defaulted. DB-generated UUIDs. And composing changesets.

Read more...

2020-01-19
15m read
elixir, ecto

DateTimeParser on Elixir Mix podcast

I was invited to talk on the Elixir Mix podcast. We talked about the Elixir community, how to contribute, and the DateTimeParser library I released.

Read more...

2019-09-09
0m read
elixir, podcast

VIM Testing and Workflow

If you develop in Ruby or Elixir or write Markdown, you might find this helpful!

Read more...

2019-08-28
6m read
elixir, ruby, vim

HTTPoison and Decompression

I learned the hard way that the popular HTTP client for Elixir doesn't automatically decompress or re-encode responses. I had to fix it myself.

Read more...

2019-06-01
32m read
elixir

Ruby, Rails, and CircleCI 2.0 Workflows

Know your tools -- CircleCI 2.0 Workflows

Read more...

2018-08-26
22m read
ruby

Querying an Embedded Map in PostgreSQL with Ecto

Structs and maps are easy to work with in Elixir, but if they are stored in the database as JSON and accessed via an Ecto Schema, it's not as clear how to query them. We're going to explore how to do that, and make it clear and easy.

Read more...

2018-03-09
8m read
elixir

Testing Random Data in Emails with Bamboo

Testing a scenario where an app sends an email is easy, but how do you test something random in an email, like a password reset token? When we test a function that intentionally returns random data, it's a little tougher.

Read more...

2017-10-16
4m read
elixir

Lessons From Using Phoenix 1.3

Phoenix 1.3 introduces contexts, which has been met with some resistance. I've developed an application using it and learned some lessons.

Read more...

2017-08-01
19m read
elixir

Simple Phoenix Text Inputs with Formulator

Ugh... three lines for a simple text input for a form in Phoenix? How about one with Formulator?

Read more...

2017-06-30
3m read
elixir

Introduction to Elixir, Phoenix, and Umbrella Apps

Introduction of Elixir and Phoenix for a local coding boot camp. Slides

Read more...

2017-02-06
0m read
elixir

Developer Life After A Bootcamp

What a boot camp developer can expect after graduating their course. Slides

Read more...

2016-03-28
0m read
life

Refactor

Refactoring is scary. I've seen some comments on Twitter indicating that it's generally something really risky, sending tremors through the rest of the team. It's true, it's risky, but it's generally for the better. But I often need to refactor something a bit more scary: life.

Read more...

2015-09-24
7m read
life

Syncing an External USB Drive with a Network NAS

I recently bought a MacBook Pro with a limited 256GB SSD. It's great, btw, but it requires me to now store all my music, movies, and archival-type files on an external drive. It scares me a bit to have all that stuff on a single USB-powered drive, so I also set up a network NAS that contains 2 mirrored 1TB drives (I salvaged these from my desktop that I sold to buy my MacBook). Enter problem: I'm lazy. I don't like manually backing everything up. I just want to manage the stuff I put on the external drive, not the NAS drive. Enter solution: BASH script, and launchd.

Read more...

2013-06-02
10m read
bash