All Blog Posts

Changed Opinions - Livebook Desktop

November 30, 2022

A few months ago, the Livebook team announced the Livebook Desktop app, which bundles everything necessary to run Livebook locally. This…

Changed Opinions - Alternative Escape Sequence in Vim

October 31, 2022

In this post, I provide a brief background on using alternatives to the ESC key in Vim (and Vim-like emulators) and how my opinion has…

Compiling Erlang Documentation

September 30, 2022

If you install Erlang with kerl (which asdf does), you can configure it to build its documentation by setting the environment variable KERL…

Add Timestamps to org-roam Files

August 31, 2022

In this post, I cover adding timestamps to track creation and modification times in org-roam files and how to update existing nodes to…

Just-in-time Feature Surfacing

July 31, 2022

Last week I was in a coffee shop when I overheard someone ask their friend if they successfully connected to the Wi-Fi. In disbelief, they…

Using the new GitHub feed

June 30, 2022

In this post, I want to share how some of my usage patterns in GitHub have changed. These changes are not related to the code or project…

Adding commit message trailers with Magit

May 27, 2022

In this quick tip post, I cover how adding messages such as Co-authored-by or Signed-off-by with Magit. These commit annotations are…

--if-missing flag for standalone CLI wrappers

April 30, 2022

If you work on any Phoenix applications that leverage the standalone versions of build tools like esbuild, Tailwind, or Dart Sass, you are…

Open Source Opening My Eyes

April 23, 2022

Update Added additional donation links suggested by @d12frosted The world of open-source has opened my eyes to many things. It is hard to…

EXPLAIN Query with Ecto

March 31, 2022

In a previous post, I gave a brief introduction to understanding the results of an EXPLAIN query (from postgres, at least). In this post, I…

Taking Breaks

February 27, 2022

I recently joined a weekly "life retro" group that some former teammates have been running. Similar to how a sprint retrospective provides…

Running Async Shell Commands with Projectile

January 31, 2022

In this quick tip post, I wanted to highlight a function from the projectile project that I have been using a lot lately. If you are…

2021 Gratitude

December 30, 2021

For the past few years, I have been working on the habit of listing three things I am grateful for or excited about. For most of 2021, I…

Pattern Matching Empty Maps with Elixir

November 30, 2021

Unlike lists, using an empty map in pattern matching does not only match empty maps; it matches empty and populated maps. This was a bit of…

Using Mix.install for Benchmarks

October 30, 2021

In a previous post, I covered using the recently released function, Mix.install. In this post, I cover how to use Mix.install for…

Intro to Postgre EXPLAIN

September 30, 2021

For most of the database performance work I have done, simply looking at the queries has been enough to identify the issue. However, I've…

Adding Randomness to Test Data

August 30, 2021

While tests can help improve the robustness of our applications, there is a limitation inherent to example-based testing - the sample data…

Creating Development-Specific Migrations with Ecto

July 31, 2021

Inspired by the setup script used by my previous team and GitHub's Scripts To Rule Them All repository, I recently set out to create a setup…

Creating More Specific Factories with Traits

June 30, 2021

In a previous post, I wrote about creating more specific FactoryBot factories using FactoryBot's inheritance and nested factories…

Using Mix.install

May 28, 2021

Despite being a compiled language, Elixir has provided support for running code in a single file as though it were a scripting language…

Running a Phoenix App in an iframe

April 26, 2021

For a side project, I am working on building a Jira Connect application using Elixir and Phoenix. With a Connect application, your UI is…

Singing 99 Bottles of Elixir

March 30, 2021

At work, we have begun reading through 99 Bottles of OOP as a book club book. The tongue-in-cheek tl;dr of the book, laid out in the preface…

A Quote Against Imposter Syndrome

February 26, 2021

I want to share one of the quotes included a few months back in James Clear's weekly 3-2-1 newsletter because it has provided me with a new…

Receiving Code Review Feedback

January 20, 2021

Code reviews are a powerful tool for spreading knowledge, improving code quality, and, when done right, can strengthen team bonds. Often…

Leveraging the GitHub CLI During Hacktoberfest - Maintaining

December 04, 2020

In a previous post, I mentioned using the GitHub CLI during Hacktoberfest to make it easier to contribute to projects. This year, I was also…

Leveraging the GitHub CLI During Hacktoberfest - Contributing

November 04, 2020

Recently coming out of beta, the GitHub CLI is a tool for interacting with GitHub directly from your terminal. A successor to hub, CLI…

Contributing GitHub Actions

October 28, 2020

tl;dr When possible, use a fork to run GitHub Actions before merging them into a repository GitHub Actions is a feature that enables…

Concurrent Ruby - Lazy Threads

September 10, 2020

In this post, we try to understand how the concurrent-ruby gem leverages Threads within its Async module. In a previous post, we began the…

Initial Hash Value in Ruby

August 27, 2020

Ruby's Hash.new has three different options for initialization. These options differ in how they handle missing keys. In this post, we will…

Writing While Remote

August 04, 2020

At the time of writing, many people around the world are forced to work from home as a result of the COVID-19 pandemic. This sudden…

Comparing Ruby's Splat with JavaScript's Spread

July 31, 2020

At work, we have been developing a mentorship and training program to help provide our team members time for deliberate practice. A recent…

Decision Making Spectrums

June 19, 2020

My friend and former co-worker Charlie (@C-Saunders) and I make a point to periodically catch up with each other. Because I am lucky and…

Concurrent Ruby - Hello, Async

May 14, 2020

Over the last few years, I have been fiddling on-and-off with Elixir and have loved it. One of the reasons there is so much hype around…

Referencing a local gem in Gemfile

April 10, 2020

In a recent post, I discussed my new debugging technique of pulling down third party libraries. While having the code local to read and…

How I Debug My Dependencies

March 08, 2020

Recently at work, I decided I wanted to set up the annotate gem for one of our Rails applications. I expected this to be a quick win to…

Deploying a Simple Go FaaS

April 12, 2019

This post covers building a function as a service using: golang - I've been interested in playing around with golang and thought this would…

Hacktoberfest 2018

October 30, 2018

This post is serving as my fifth and final (required) open source Pull Request for Hacktoberfest 2018. This method of getting my final Pull…

Glossary of Homebrew Terms

October 24, 2016

While listening to the most recent episode of the Changelog podcast, Homebrew and Package Management with Mike McQuaid, I began to realize…

Creating More Specific Factories with Inheritance

November 17, 2015

Update (6/21) Post has been updated to reflect rename from FactoryGirl to FactoryBot. I also have a new post where I discuss using traits…

Trip Picks

November 09, 2015

NYC Coffee Shop Hipster This week I decided to take a long weekend off work and spend it in New York City. This will come as no surprise to…

Using Vim to Drive TDD

November 08, 2015

A lot of recent developments in my programming career have been inspired by thoughtbot. This began as the result of using their gems and…

GIF Picks

November 01, 2015

April 2019 Update Popkey is no longer serving gifs: As a result, you will need to look elsewhere for your gif fix (and some imgs below are…

The Power to Say No

October 27, 2015

A few months ago I was promoted to Lead Software Developer. I had been taking on the responsibilities of a lead developer over the past year…

Spotify Running

October 25, 2015

Inspired by the Ruby Rouge's picks section and Tim Ferriss' 5-Bullet Fridays I have decided to start creating short, weekly posts…

Making NERDTree and CtrlP Play Nice

September 19, 2015

I am a few months in to my switch to Vim and so far have been working to keep a fairly minimal vimrc and not use too many packages. There…

Why I Love the Cloud

May 09, 2015

Disclaimer: While I know it is overused, I am going to use the term "cloud" a lot. By cloud I mean data stored remotely that can be accessed…

My First Open Source Contribution

May 03, 2015

In working towards my original goals, I finally opened my first pull request on an open source project. For my first project I chose Rubocop…

Adding Carnival Comments to a Jekyll Blog

April 30, 2015

Update April 2019 The carnival repository has been archived and the site fails to load, so it looks like the service is no longer being…

2015 BarCamp Orlando

April 18, 2015

While not on the scale of a Silicon Valley or New York City, Orlando is working to gain traction to have a booming tech scene. I think a lot…

Are Your Class Methods Actually Private?

April 09, 2015

While no methods in Ruby are really safe, even when private, it's possible the class methods you think are private aren't actually private…

Bulk SQL Statements with ActiveRecord - delete_all

March 28, 2015

New Rails developers tend to fall in love with ActiveRecord. More specifically they fall in love with the "magic" of ActiveRecord - the…

The Anatomy of a Ruby Class

March 15, 2015

In this post I am going to break down the basic parts of a Ruby class. For this example we will look at the following Cat class: Creating an…

Memoization in Ruby

March 08, 2015

Meomization in Ruby is a pretty simple to accomplish. You basically use an instance variable and the ||= operator: How ||= works The…

Return Struct as JSON

March 01, 2015

I am working on a side project in which I want to use Sinatra as a simple backend and experiment with a more rich Javascript front end. The…

Why I made this blog

February 28, 2015

Like many developers I felt the need to create a blog. The dream is, it will provide some benefit to other software developers around the…