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…