API  AWS  CI  Deno  Git  GitHub  Go  Growth  Heroku  Markdown  Netlify  Postgres  Product  Ruby  Shell  Tests  TypeScript  Unix  Vim 
Configure Vim for React and TypeScript

Syntax highlight, tab complete, auto-fix, lint, and jump to definition, implementation, and references

Heroku Postgres Restore to Staging and Development

Restore a production database into staging and development environments

Heroku Postgres Read Replica with Rails

Read and write to a Heroku Postgres database as primary and read from a follower in targeted call sites

Postgres concat_ws() Function

Use concat_ws() instead of concat() to avoid ugly output

Postgres \set Variable

In psql, set variables and reference them

Run SQL from Vim

Run SQL against a Postgres database from Vim

Format SQL in Vim

Format SQL on save in Vim

Cache API Requests

Caching HTTP GET requests can improve performance and help avoid hitting rate limits

Heroku to Slack with AWS Lambda

When my production app processes change state on Heroku, I want to be notified in Slack

Deno

A secure runtime for JavaScript and TypeScript

Thin API Clients

When to access an API with a specialized library and when to write a custom thin client

Circular Favicon from GitHub Avatar

Command-line script that accepts a GitHub username and generates a circular favicon and Apple Touch icon

SSH Key with Ed25519

Make ~/.ssh/authorized_keys look nicer

Schedule Netlify Builds with GitHub Actions

Daily deploys with Netlify build hooks, GitHub Actions' scheduled workflows, and GitHub encrypted secrets

Pull Requests and Kanban

End-to-end with a kanban board, GitHub code review, continuous integration, and continuous delivery

Update a GitHub Fork

Keep it synced with the upstream repository

Block with /etc/hosts

Block ads, trackers, and malicious websites with /etc/hosts

Spell Check in Vim

Avoid mistakes when editing prose in Markdown files and Git commit messages

laptop.sh

My laptop repo sets up a macOS machine as a software development environment

Monorepo

How we organized our code into a monorepo at our startup and how it evolved over time

Process Model

Define Unix processes in a manifest named Procfile and use tools to manage those processes

.gitignore

Dirs and files matching the patterns defined in this file are ignored for git commits, ag searches, and fzf searches

Email from Rails with SES on EC2

Deliver email from a Ruby on Rails app using Amazon's Simple Email Service (SES) hosted on EC2

ASDF Version Manager

Set up and configure ASDF as a version manager for multiple programming languages

Semantic Linefeeds

A formatting style for prose that breaks lines at the end of a sentence or clause

DNS to CDN to Origin

Rather than pointing DNS directly to an origin server, point it to a CDN that pulls content from the origin

Align Markdown Tables in Vim

Align GitHub-Flavored Markdown tables in Vim in a few quick keystrokes

Reduce Heroku Slug Size

Steps to resolve the 'Compiled slug size: 300.1M is too large (max is 300M)' error

Retention Curves

How to build a retention curve chart in Google Sheets from a Mixpanel tabular cohort report

Full Text Search with Postgres

Speed up Postgres full-text searches with a tsvector column as cache and trigger to keep the cache updated

Log and Alert on Heroku Routing Errors

Heroku routing errors don't reach error-tracking code in app processes, have to track with a logging service

Test Mock vs. Stub vs. Spy

Tradeoffs for unit tests that use mocks, stubs, or spies

North Star Metric

How many people get authentic value from our product?

Search Projects in Vim

Search a project for files, text, or word under cursor

Run Tests in Vim

Runs focused tests from Vim with a keystroke

Create Indexes Concurrently

Use Postgres' CONCURRENTLY option for CREATE INDEX to avoid locking writes to a table

Wrap Text in Vim

Wrap text to set textwidth with visual select and gq

Sort Lines in Vim

Sort lines alphabetically with visual select and :sort

Four-Phase Test

A pattern for unit tests (but not integration tests)

Decorators with Ruby

Extend an object's responsibilities without subclassing

Pessimistic Operator

Ruby's pessimistic operator with Semantic Versioning can help stabilize dependencies

Config Block with Ruby

How to implement a common interface for configuring a third-party library in Ruby

Mystery Guests in Tests

An anti-pattern that hides cause and effect because part of it is done outside the test method