Blog

74 Posts

How to Amend a Git Commit Author

July 24, 2021

Recently, I enabled the "Keep my email address private" feature on GitHub. This isn't all that useful to me at the moment since my email…

Tips from a Tech Interviewer (2021 Edition)

May 01, 2021

The technical interview can be one of the most dreaded parts of finding a job as a software engineer. Depending on the company where you’re…

Optimizing a Background Job

January 08, 2021

I know it seems like all I do is optimize queries, but I swear that's not all that I've been up to. I did, however, recently take a…

Read-only Active Record Objects

October 06, 2020

The other day, I was trying to make an Active Record query for some data and scope that query down by its associated records when I ran into…

Hints for Optimizing a SQL Query

July 26, 2020

A few weeks ago, I fielded a bug report about an API endpoint that was timing out and showing a 500 error to a client. For one of our seller…

How to Convince Yourself to Use TDD

April 04, 2020

There comes a time in every developer's career when they must ask themselves if they want to write a test before they write the actual code…

Using SQL Union

March 22, 2020

I had the chance recently to use in my everyday work, so I figured I'd write this to remind myself of why it's so useful. First, though…

Surviving Software Engineering Interviews

January 29, 2020

A few years ago, as a brand-new apprentice developer, I was doing an AMA session on campus with current students of the bootcamp I had…

Ecto Embedded Schemas in Action

October 13, 2019

I mentioned in my last post the benefits of a nice design pattern, and in this post, I'll expand on that same Enrollment Unification…

Fun with Design Patterns for an Admissions Portal

October 12, 2019

The Enrollment Unification I recently led and planned a project to migrate our legacy billing system from a Rails monolith to an Elixir…

7 Secrets for Scaling Your Technical Book Club

August 07, 2019

Our weekly technical book club is one of the things that I think makes our engineering team at the Flatiron School special. Since I joined…

Debugging an Orphaned Slack App

July 05, 2019

The last thing people think about when they leave an organization is their Slack app ownership. And as soon as someone's account gets…

How to Use Ecto.Changeset

April 16, 2019

or, be the changeset you want to see in the world This post explains how can help you make safer changes to your data by providing a…

DDD Even Quicker

March 24, 2019

Notes and thoughts from my reading My team had mixed reviews of Domain Driven Design by Eric Evans when we first tried to read it for our…

The Ultimate Generating Migrations Checklist

February 10, 2019

Maybe it's a little presumptuous to call this the "ultimate" checklist, but I've noticed that in my own work I tend to overlook the same…

GatsbyJS Plugins I'm Hyped About

December 30, 2018

After I heard practically everyone I know rave about GatsbyJS, I decided to give it a try. And you know what? It did not disappoint. I…

Removing Single Table Inheritance from Rails

December 09, 2018

When Learn's main codebase came into existence five years ago, Single Table Inheritance (STI) was pretty popular. The Flatiron Labs team at…

Fixing Random, Intermittent, and Flaky RSpec Test Failures

October 27, 2018

In my view, there's almost nothing more annoying than a randomly failing, intermittent, flaky test failure. Run the test suite locally and…

Living with Legacy JavaScript: Event Proxies, App Seams, and the Road to Rewrites

September 25, 2018

EmpireJS Last week, I had the privilege of speaking at this year's EmpireJS conference! The following is the text of my talk, or really…

Which Data Structure Should I Use? An Elixir Cheat Sheet

August 05, 2018

As an Elixir novice, I think one of the hardest things about getting started in Elixir is figuring out what kind of data structures to use…

How to Give and Get Better Code Reviews

August 04, 2018

This post originally appeared on Hackernoon. Ask any random developer what part of their jobs they loathe the most and you’ll frequently…

How Refactoring Helped Me Give Learn.co's Lesson Page a Crazy Performance Boost

July 01, 2018

Learn Lesson Page Learn.co's Lesson Pages The lesson pages on Learn.co are the most important pages of the app. They are the portals for…

How the Lights on Learn.co Work

June 15, 2018

I originally wrote this post for the brand-new Flatiron Labs Engineering Blog, but I'm reposting it here. Learn Test-driven Learning on…

Using Window.postMessage to resize an iframe

May 22, 2018

Jupyter Lab Jupyter Notebooks on Learn Recently, I worked on integrating Jupyter Notebooks into Learn as part of the data science course…

Configuring Courses with YAML

April 07, 2018

I've done a lot of onboarding sprints during my time building Learn.co. It seems like no matter what you build, you'll always need to…

How and When to Start Using tmux

March 04, 2018

tmux Over the past week, I've been trying to start using tmux in earnest. On a typical day, I don't need to start a process in more than two…

Building Assignments on Learn.co

March 03, 2018

This post originally appeared on the Flatiron School engineering blog. The product and engineering team at Flatiron School recently released…

On the Importance of Cleaning Up After Your React Component

January 28, 2018

For the past few months, I've been working on/leading a pretty large feature generically named "Assignments." It provides the ability for…

Setting Up ESLint Globally

December 28, 2017

Vim ESLint For a while, I was using StandardJS to lint my JavaScript files because it required virtually no setup and it was easy to use. I…

Important Things I Learned from Reading Practical Vim

December 27, 2017

I started reading Practical Vim by Drew Neil after Christmas because I truly think this will be the year I go all in on vim. I'll be honest…

Tips for Upgrading to React 16 and React Router 4

December 02, 2017

I recently had the pleasure of upgrading a large codebase to React 16 and React Router 4. Pleasure is perhaps an exaggeration. The upgrade…

Building an In-Browser IDE

November 22, 2017

Learn IDE in Browser We put an IDE in the browser! The following post first appeared on the Flatiron School blog. This week, Flatiron School…

Build a Slash Command

November 06, 2017

Now, in our product development journey of "Commits", we've built a Phoenix API as well as a React front-end and a Chrome extension to…

Turn a Simple React App Into a Chrome Extension

November 05, 2017

Yololo When designing my Commits app, I thought that it would be more useful if I could also access a random commit message without having…

How to Build a Super Simple React Component in a Phoenix App

October 14, 2017

Phoenix + JS The Phoenix framework ships with Brunch, an easy-to-use asset build tool. If you're building fairly straightforward front-ends…

3 Ways to Improve Your Mobile Dev Workflow

September 12, 2017

Mobile Orientation Mobile First? I've been hearing people say that we need to design for mobile first for what feels like years, but…

Querying GitHub's GraphQL API

September 10, 2017

As part of my "Commits" app, I decided to fetch commit data from GitHub's new GraphQL API. I figured that while I'm learning something new…

Building a Basic Phoenix API

August 28, 2017

Commits Recently, I started learning Phoenix, a Rails-like framework written in Elixir that has sometimes been called "Rails, the Good Parts…

Making a React Menu

July 23, 2017

FittingRooms Making a React Menu When creating a menu of possible actions, the two hardest things to me are positioning the menu and…

React Basics: A Simple Fitting Room Component

July 04, 2017

FittingRooms React and Everything Amazing About It I've been writing apps in React for a little over eight months now, and I love it…

Java Basics for Rubyists and JavaScripters

May 25, 2017

Great news, Rubyists and JavaScripters, if you know ES6 and have read up on object-oriented Ruby, it's not terribly difficult to learn Java…

Autocomplete an Address with a React Form

May 20, 2017

Autocomplete One neat feature you can incorporate into a form that requires an address is Google Place Autocomplete for Addresses and Search…

Promises in JavaScript: A Gentle Introduction

April 18, 2017

tl;dr Personally, I think you should know what Promises are, but you don't really need to know the internals to be a fairly productive…

Refactoring with the Strategy Pattern

March 17, 2017

About a year ago, as part of the technical book club on the labs team at Flatiron School, we read the infamous Design Patterns - Elements of…

Setting Up Your Rails App Test Suite with RSpec, Factory Girl, and Faker

February 12, 2017

Lately, I've been impressed with the importance of testing when writing an application. Writing tests forces you to slow down and really…

The Rails Asset Pipeline

January 12, 2017

What the Asset Pipeline Is & Does According to the Rails Guides documentation, the asset pipeline is a framework to concatenate and minify…

All About Rack

December 28, 2016

As it turns out, I made it through just about 10 months of professional web development without really digging into Rack. That's probably…

How to Write a Rake Task

December 27, 2016

Since I switched to Jekyll, I lost out on the nice Rake tasks that Octopress provided. That's okay though. I thought this would be a good…

An Intro to Object-Oriented CSS

December 26, 2016

After working with an object-oriented CSS framework over on Learn.co, it's almost impossible for me to write CSS any other way. Thinking…

Migrating from Octopress to Jekyll

November 20, 2016

After a lot of frustration trying to get Octopress to work, I decided to simplify and switch to Jekyll. So please forgive any missing images…

Writing Straight Up SQL

October 29, 2016

As much as I enjoy Active Record as an ORM (Object Relational Mapping) Framework, it's sometimes necessary and easier to write your own SQL…

Exporting a CSV File from Rails Console

September 08, 2016

TIL that creating your own CSV file from Rails console, or, I suppose, anywhere in Ruby isn't that hard. All you have to do is use the…

Customizing Dotfiles for Vim

September 04, 2016

I've finally gotten around to learning Vim, and wouldn't you know -- it's not that bad once you get the hang of it. Right now I'm using Vim…

Learning Vim

August 25, 2016

I finally decided that it's time to really learn Vim. Hey, remember me? It's been a while. Life got in the way, etc., etc. I launched two…

Converting Numbers Between Decimal, Binary, and Hexadecimal

June 09, 2016

For a while now, as part of our Labs Book Club, we've been exploring some computer science topics, which we don't get to cover a lot of…

Using ActiveRecord Transactions to Make Actions Atomic

May 27, 2016

I know, I know, I promised to write about some crazy Slim stories (far too long ago, really), but I just learned about this really cool…

Enums in ActiveRecord

May 24, 2016

I stumbled upon something cool in our codebase today while doing some much-needed refactoring on a feature: Enums! Basically, in any model…

Aw, CRUD. I Need Some REST.

May 18, 2016

For a while now I've been confusing CRUD and REST. It's easy to do so when you speed through a full stack web development curriculum in the…

Slimming Down: Tips and Pitfalls

May 17, 2016

There are a bunch of templating languages to choose from out in the wild, but the one we use over at Learn for server-side view renders is…

Keyboard Shortcuts

May 01, 2016

When I was first starting to learn how to code, I thought that I should dedicate all of my time to learning how to construct efficient…

Send More Beautiful HTML Emails with Rails

March 27, 2016

The first time I discovered mailers in Rails, I was basically in awe. Many of my classmates felt the same, and throughout our semester at…

An Idiot's Guide to Leveling Up with Ember

January 28, 2016

##Basics of Building an Ember App I'll preface this by saying that I'm no Emberista, but I one day hope to be. Most of the tutorials I ended…

Building a Rails API for Use with Ember

January 26, 2016

While I was a student at the Flatiron School, I was introduced to Ember, a front-end framework to simplify and streamline all the clunky…

What's a Viewport?

January 06, 2016

Yesterday, I experienced a big "duh" moment in web design. It's bound to happen when you task yourself with learning how to code in 12 weeks…

Dissecting a JavaScript On-Page RegEx Filter

December 31, 2015

It occurred to me while building Sourcery that, once our app gains traction and has tons of groups and followers, users might want to be…

The Benefits of Semantic HTML

December 21, 2015

Lately I've been researching the pros and cons of writing semantic HTML, and after reading a bunch of articles and taking some time to form…

Document Never Ready? Blame Turbolinks

December 07, 2015

A few weeks ago, I was working on adding some JavaScript to a multi-page Rails project when I ran into some issues. Whenever I tried to…

Using GitHub OmniAuth Login with Scopes to Access the GitHub API

November 19, 2015

Using the OmniAuth gem, it's relatively easy to implement a third-party login for your Rails application. If you read the steps outlined in…

Advanced SQL, the Sequel: Multiple Joins in Active Record Queries

November 01, 2015

This past Halloween weekend, the only thing truly scary was how much time I spent alternately staring at my laptop screen blankly, downing…

Overlaps with Ranges and How Ruby Just Gets Me

October 31, 2015

Until recently, I didn't think that natural languages and computer languages had much in common. Natural languages, or languages for humans…

Flatiron Follower, a Twitter CLI

October 20, 2015

alt text ##The Problem I'm having a great time at the Flatiron School, so much so that I wanted to connect with all of the friends I've made…

How to Add Some Sass to Your Blog

October 11, 2015

##Unleash the Power of Sass All right, as you might have noticed, my blog looks like a jazzed up version of the classic Octopress theme, and…

Styling the Octopress Blog

October 04, 2015

Wow, this was super confusing. But I think I successfully changed the color scheme to something more stylish. ##How I Did It With lots of…

My First Post on Octopress

September 29, 2015

"Hello, World."