The Curious Engineer

All blogs / Ruby / Rails

Jake Zimmerman

blog.jez.io

A collection of blog posts about programming, software, types, programming languages, Sorbet, Vim, Markdown, and more.

Ruby / RailsCompilersDev tools / editors / IDEs

Posts
117 from 6 May 2014 to 21 Jan 2026
Posting
now and then (3 in the last year)
Kind
personal blog
Feed
https://blog.jez.io/atom.xml

2026 1

  1. Bugs Block Blogs

2025 4

  1. Mechanical tips to improve shipped emails
  2. Why have lower bounds on generics?
  3. Past, Present, and Future of Sorbet Type Syntax
  4. Typing instance variables in mixins

2024 8

  1. What if typing on phones was fast?
  2. Approximating strace with Instruments.app
  3. Using my iPhone as a travel laptop
  4. Bug squash: An underrated interview question
  5. Generic methods cannot have non-generic defaults in Sorbet
  6. A trick for invariant generics in Sorbet
  7. Old vs new case statement in Ruby
  8. Abstract singleton class methods are an abomination

2023 15

  1. Why don’t constructors have override checking?
  2. Inheritance in Ruby, in pictures
  3. A trick for generic constructors in Sorbet
  4. It’s okay to work on tiny projects
  5. Only return nil if given nil
  6. Ruby’s Conditional Send is not Safe Navigation
  7. ActiveSupport’s Concern, in pictures
  8. Driving Bazel with fzf
  9. Why Sorbet needs T.let(…, T::Boolean)
  10. Every type is defined by its intro and elim forms
  11. Typing klass.new in Ruby with Sorbet
  12. Ruby’s private keyword is weird
  13. Problems typing equality in Ruby
  14. Making Sorbet more incremental
  15. Runtime type checking is great

2022 17

  1. Gripes with RSS after one week
  2. Moving to excerpt-only for feeds
  3. My workflow for hand-drawn diagrams
  4. Some Old Sorbet Compiler Notes
  5. Don’t bury the lede in technical docs
  6. Tips for large-scale codemods
  7. Read more →
  8. Control Flow in Sorbet is Syntactic
  9. Parse Error Recovery in Sorbet: Part 4
  10. With types, seeing is believing
  11. Is tree-sitter good enough?
  12. What would a type-aware Rubocop look like?
  13. T::Enum Pros & Cons
  14. Parse Error Recovery in Sorbet: Part 3
  15. Parse Error Recovery in Sorbet: Part 2
  16. Parse Error Recovery in Sorbet: Part 1
  17. Sorbet, Generics, and Parametricity

2021 4

  1. Typed Errors in Sorbet
  2. Sorbet Does Not Have Checked Exceptions
  3. perf, Rinse, Repeat: Making the Sorbet Compiler faster
  4. Instant Runtime Type Checks in Ruby

2020 12

  1. GC.compact in Pictures
  2. Mimicking Opaque Types in Sorbet
  3. Questioning self in Ruby
  4. Singletons and Flow-Sensitive Typing
  5. Fast While Loops in Ruby
  6. Another Look at Typed Array Access
  7. Types Make Array Access Faster
  8. Exploring Ruby with clangd
  9. Linkers & Ruby C Extensions
  10. Search Down the Stack
  11. Sorbet Does Not Have FixMe Comments
  12. Intersection Types in Sorbet are Surprisingly Common

2019 8

  1. What makes type checking Ruby hard?
  2. Surgery on Code from the Command Line
  3. On Programming Language Choice
  4. Notes on Continuations
  5. A Debugger for Bash in Six Lines of Bash
  6. Improving CLIs with isatty
  7. Standard ML in Travis CI
  8. Read more →

2018 8

  1. Concurrent Programming in ML: A Race
  2. Prefer .then() over .catch()
  3. Read more →
  4. Case Exhaustiveness in Flow
  5. Lenses & Composition
  6. Some Intuition on Lenses
  7. Read more →
  8. Thoughts and opinion pieces

2017 11

  1. Presenting Data & Information: Notes
  2. ABTs in Haskell
  3. Variables and Binding
  4. System Fω and Parameterization
  5. Variables in Types
  6. Recitation Notes
  7. Tests, Types, & Correctness
  8. If, Else, & Purity
  9. Haskell Development with Neovim
  10. Read more →
  11. Talks I’ve given

2016 4

  1. Troubleshooting Haskell Stack Setup on OS X
  2. Let’s Have a Chat about Encryption
  3. SML Dev Setup
  4. Starter Zsh Setup

2015 11

  1. Leaking Free Disk Space
  2. Docker Tips and Cheatsheet
  3. Show where a Python package is used
  4. Why zsh?
  5. Noteworthy Dotfile Hacks
  6. Getting Started with RCM
  7. Vim as an IDE
  8. New GitHub Username
  9. Mastering git log for Collaboration
  10. The LaTeX homework Document Class
  11. Offline LaTeX Development - Part 2

2014 14

  1. Google Chrome: A Memory Hog
  2. Ruby Virtualenvs
  3. Vim as a Man Page Viewer
  4. The Joys of the Craft
  5. Using Multiple Git Remotes
  6. Using Google OAuth2 for CMU Authentication
  7. Offline LaTeX Development
  8. Solarized LaTeX Listings
  9. A LaTeX Homework Template
  10. Setting up MobaXterm for SSH on Windows
  11. Molokai: An iTerm2 Color Scheme
  12. HPSTR: An Octopress Theme
  13. Adding a Network Printer to a Linux Server
  14. Shiny New Octopress Blog