bash bazel books c codemods concurrency data debugging design devprod docker dotfiles flow fragment git haskell in-pictures interviewing javascript language-servers latex linux make markdown meta notes osx parsing plt practices printing programming python reasonml recitation rss rubocop ruby scala sml sorbet sorbet-compiler terminal tmux tree-sitter troubleshooting types unix vim webdev writing zsh
bash
(RSS)
- Driving Bazel with fzf, August 10, 2023
- Surgery on Code from the Command Line, July 30, 2019
- A Debugger for Bash in Six Lines of Bash, June 16, 2019
- Improving CLIs with isatty, June 11, 2019
- Standard ML in Travis CI, June 4, 2019
- Code Review from the Command Line, January 13, 2018
- Show where a Python package is used, June 12, 2015
- Google Chrome: A Memory Hog, December 29, 2014
- Vim as a Man Page Viewer, December 20, 2014
bazel
(RSS)
- Driving Bazel with fzf, August 10, 2023
books
(RSS)
- The Joys of the Craft, December 13, 2014
c
(RSS)
- Linkers & Ruby C Extensions, June 7, 2020
codemods
(RSS)
- Tips for large-scale codemods, November 12, 2022
- Surgery on Code from the Command Line, July 30, 2019
concurrency
(RSS)
- Concurrent Programming in ML: A Race, July 18, 2018
data
(RSS)
- Presenting Data & Information: Notes, December 6, 2017
debugging
(RSS)
- Approximating strace with Instruments.app, October 9, 2024
- Bug squash: An underrated interview question, August 17, 2024
- perf, Rinse, Repeat: Making the Sorbet Compiler faster, May 23, 2021
- Exploring Ruby with clangd, July 21, 2020
- Search Down the Stack, June 6, 2020
- Profiling in Haskell for a 10x Speedup, May 19, 2019
design
(RSS)
- Solarized LaTeX Listings, October 4, 2014
- Molokai: An iTerm2 Color Scheme, June 7, 2014
devprod
(RSS)
- Tips for large-scale codemods, November 12, 2022
- With types, seeing is believing, June 4, 2022
docker
(RSS)
- Docker Tips and Cheatsheet, July 12, 2015
dotfiles
(RSS)
- Driving Bazel with fzf, August 10, 2023
- Starter Zsh Setup, January 3, 2016
- Noteworthy Dotfile Hacks, March 10, 2015
- Getting Started with RCM, March 9, 2015
flow
(RSS)
- Prefer .then() over .catch(), May 31, 2018
- Union Types in Flow & Reason, April 19, 2018
- Case Exhaustiveness in Flow, April 15, 2018
fragment
(RSS)
- Old vs new case statement in Ruby, May 31, 2024
- Gripes with RSS after one week, December 31, 2022
- T::Enum Pros & Cons, March 17, 2022
- Search Down the Stack, June 6, 2020
- Prefer .then() over .catch(), May 31, 2018
- Lenses & Composition, February 6, 2018
- ABTs in Haskell, November 12, 2017
- Tests, Types, & Correctness, September 10, 2017
- If, Else, & Purity, September 1, 2017
git
(RSS)
- Code Review from the Command Line, January 13, 2018
- Noteworthy Dotfile Hacks, March 10, 2015
- New GitHub Username, February 3, 2015
- Mastering git log for Collaboration, January 16, 2015
- Using Multiple Git Remotes, November 1, 2014
haskell
(RSS)
- Profiling in Haskell for a 10x Speedup, May 19, 2019
- Lenses & Composition, February 6, 2018
- Some Intuition on Lenses, February 6, 2018
- ABTs in Haskell, November 12, 2017
- Haskell Development with Neovim, July 16, 2017
- Troubleshooting Haskell Stack Setup on OS X, August 3, 2016
in-pictures
(RSS)
- Inheritance in Ruby, in pictures, December 28, 2023
- ActiveSupport’s Concern, in pictures, August 26, 2023
- My workflow for hand-drawn diagrams, December 13, 2022
- Sorbet’s weird approach to exception handling, September 4, 2022
- GC.compact in Pictures, December 18, 2020
interviewing
(RSS)
- Bug squash: An underrated interview question, August 17, 2024
javascript
(RSS)
- Ruby’s Conditional Send is not Safe Navigation, September 3, 2023
- Prefer .then() over .catch(), May 31, 2018
- Union Types in Flow & Reason, April 19, 2018
- Case Exhaustiveness in Flow, April 15, 2018
- Code Review from the Command Line, January 13, 2018
language-servers
(RSS)
- Making Sorbet more incremental, January 9, 2023
latex
(RSS)
- Reach for Markdown, not LaTeX, February 26, 2017
- The LaTeX homework Document Class, January 10, 2015
- Offline LaTeX Development - Part 2, January 10, 2015
- Offline LaTeX Development, October 6, 2014
- Solarized LaTeX Listings, October 4, 2014
- A LaTeX Homework Template, October 4, 2014
linux
(RSS)
- Approximating strace with Instruments.app, October 9, 2024
- Linkers & Ruby C Extensions, June 7, 2020
- Search Down the Stack, June 6, 2020
- Leaking Free Disk Space, August 3, 2015
- Adding a Network Printer to a Linux Server, May 6, 2014
make
(RSS)
- Offline LaTeX Development, October 6, 2014
markdown
(RSS)
- Reach for Markdown, not LaTeX, February 26, 2017
meta
(RSS)
- Using my iPhone as a travel laptop, September 15, 2024
- Moving to excerpt-only for feeds, December 30, 2022
- My workflow for hand-drawn diagrams, December 13, 2022
- Some Old Sorbet Compiler Notes, December 10, 2022
- Recitation Notes, September 24, 2017
- New GitHub Username, February 3, 2015
- HPSTR: An Octopress Theme, June 4, 2014
- Shiny New Octopress Blog, May 6, 2014
notes
(RSS)
- Presenting Data & Information: Notes, December 6, 2017
osx
(RSS)
- Approximating strace with Instruments.app, October 9, 2024
- Troubleshooting Haskell Stack Setup on OS X, August 3, 2016
- SML Dev Setup, March 9, 2016
- Offline LaTeX Development - Part 2, January 10, 2015
parsing
(RSS)
- Parse Error Recovery in Sorbet: Part 4, June 6, 2022
- Is tree-sitter good enough?, May 30, 2022
- Parse Error Recovery in Sorbet: Part 3, February 28, 2022
- Parse Error Recovery in Sorbet: Part 2, February 22, 2022
- Parse Error Recovery in Sorbet: Part 1, February 21, 2022
plt
(RSS)
- Every type is defined by its intro and elim forms, April 23, 2023
- Sorbet, Generics, and Parametricity, February 18, 2022
- Notes on Continuations, June 18, 2019
- ABTs in Haskell, November 12, 2017
- Variables and Binding, October 28, 2017
- System Fω and Parameterization, September 27, 2017
- Variables in Types, September 25, 2017
practices
(RSS)
- Bug squash: An underrated interview question, August 17, 2024
- It’s okay to work on tiny projects, September 18, 2023
- Don’t bury the lede in technical docs, November 29, 2022
printing
(RSS)
- Adding a Network Printer to a Linux Server, May 6, 2014
programming
(RSS)
- Ruby’s Conditional Send is not Safe Navigation, September 3, 2023
- Every type is defined by its intro and elim forms, April 23, 2023
- On Programming Language Choice, June 21, 2019
- Case Exhaustiveness in Flow, April 15, 2018
- Code Review from the Command Line, January 13, 2018
- Tests, Types, & Correctness, September 10, 2017
- If, Else, & Purity, September 1, 2017
- The Joys of the Craft, December 13, 2014
python
(RSS)
- Show where a Python package is used, June 12, 2015
- Ruby Virtualenvs, December 22, 2014
- Using Google OAuth2 for CMU Authentication, October 20, 2014
reasonml
(RSS)
- Union Types in Flow & Reason, April 19, 2018
recitation
(RSS)
- Notes on Continuations, June 18, 2019
- System Fω and Parameterization, September 27, 2017
- Variables in Types, September 25, 2017
- Recitation Notes, September 24, 2017
rss
(RSS)
- Gripes with RSS after one week, December 31, 2022
- Moving to excerpt-only for feeds, December 30, 2022
rubocop
(RSS)
- What would a type-aware Rubocop look like?, May 16, 2022
ruby
(RSS)
- Generic methods cannot have non-generic defaults in Sorbet, July 28, 2024
- A trick for invariant generics in Sorbet, June 5, 2024
- Old vs new case statement in Ruby, May 31, 2024
- Abstract singleton class methods are an abomination, January 1, 2024
- Why don’t constructors have override checking?, December 31, 2023
- Inheritance in Ruby, in pictures, December 28, 2023
- A trick for generic constructors in Sorbet, October 28, 2023
- Only return nil if given nil, September 15, 2023
- Ruby’s Conditional Send is not Safe Navigation, September 3, 2023
- ActiveSupport’s Concern, in pictures, August 26, 2023
- Why Sorbet needs T.let(…, T::Boolean), May 13, 2023
- Typing klass.new in Ruby with Sorbet, February 19, 2023
- Ruby’s private keyword is weird, February 13, 2023
- Problems typing equality in Ruby, January 24, 2023
- Sorbet’s weird approach to exception handling, September 4, 2022
- Control Flow in Sorbet is Syntactic, August 24, 2022
- What would a type-aware Rubocop look like?, May 16, 2022
- Sorbet, Generics, and Parametricity, February 18, 2022
- Typed Errors in Sorbet, June 5, 2021
- Sorbet Does Not Have Checked Exceptions, May 29, 2021
- perf, Rinse, Repeat: Making the Sorbet Compiler faster, May 23, 2021
- Instant Runtime Type Checks in Ruby, April 25, 2021
- GC.compact in Pictures, December 18, 2020
- Mimicking Opaque Types in Sorbet, December 12, 2020
- Questioning self in Ruby, October 9, 2020
- Singletons and Flow-Sensitive Typing, September 25, 2020
- Fast While Loops in Ruby, September 19, 2020
- Another Look at Typed Array Access, September 11, 2020
- Types Make Array Access Faster, August 28, 2020
- Exploring Ruby with clangd, July 21, 2020
- Linkers & Ruby C Extensions, June 7, 2020
- Sorbet Does Not Have FixMe Comments, February 12, 2020
- Intersection Types in Sorbet are Surprisingly Common, January 4, 2020
- What makes type checking Ruby hard?, December 29, 2019
- Ruby Virtualenvs, December 22, 2014
scala
(RSS)
- Ruby’s private keyword is weird, February 13, 2023
sml
(RSS)
- Standard ML in Travis CI, June 4, 2019
- Concurrent Programming in ML: A Race, July 18, 2018
- System Fω and Parameterization, September 27, 2017
- SML Dev Setup, March 9, 2016
sorbet
(RSS)
- Generic methods cannot have non-generic defaults in Sorbet, July 28, 2024
- A trick for invariant generics in Sorbet, June 5, 2024
- Abstract singleton class methods are an abomination, January 1, 2024
- Why don’t constructors have override checking?, December 31, 2023
- Inheritance in Ruby, in pictures, December 28, 2023
- A trick for generic constructors in Sorbet, October 28, 2023
- Only return nil if given nil, September 15, 2023
- Why Sorbet needs T.let(…, T::Boolean), May 13, 2023
- Typing klass.new in Ruby with Sorbet, February 19, 2023
- Problems typing equality in Ruby, January 24, 2023
- Making Sorbet more incremental, January 9, 2023
- Runtime type checking is great, January 3, 2023
- Some Old Sorbet Compiler Notes, December 10, 2022
- Sorbet’s weird approach to exception handling, September 4, 2022
- Control Flow in Sorbet is Syntactic, August 24, 2022
- Parse Error Recovery in Sorbet: Part 4, June 6, 2022
- With types, seeing is believing, June 4, 2022
- What would a type-aware Rubocop look like?, May 16, 2022
- T::Enum Pros & Cons, March 17, 2022
- Parse Error Recovery in Sorbet: Part 3, February 28, 2022
- Parse Error Recovery in Sorbet: Part 2, February 22, 2022
- Parse Error Recovery in Sorbet: Part 1, February 21, 2022
- Sorbet, Generics, and Parametricity, February 18, 2022
- Typed Errors in Sorbet, June 5, 2021
- Sorbet Does Not Have Checked Exceptions, May 29, 2021
- Instant Runtime Type Checks in Ruby, April 25, 2021
- Mimicking Opaque Types in Sorbet, December 12, 2020
- Singletons and Flow-Sensitive Typing, September 25, 2020
- Sorbet Does Not Have FixMe Comments, February 12, 2020
- Intersection Types in Sorbet are Surprisingly Common, January 4, 2020
- What makes type checking Ruby hard?, December 29, 2019
sorbet-compiler
(RSS)
- Some Old Sorbet Compiler Notes, December 10, 2022
- perf, Rinse, Repeat: Making the Sorbet Compiler faster, May 23, 2021
- Instant Runtime Type Checks in Ruby, April 25, 2021
- Fast While Loops in Ruby, September 19, 2020
- Another Look at Typed Array Access, September 11, 2020
- Types Make Array Access Faster, August 28, 2020
terminal
(RSS)
- Improving CLIs with isatty, June 11, 2019
- Offline LaTeX Development - Part 2, January 10, 2015
- Setting up MobaXterm for SSH on Windows, September 28, 2014
- Molokai: An iTerm2 Color Scheme, June 7, 2014
tmux
(RSS)
- Noteworthy Dotfile Hacks, March 10, 2015
tree-sitter
(RSS)
- Is tree-sitter good enough?, May 30, 2022
- Parse Error Recovery in Sorbet: Part 2, February 22, 2022
troubleshooting
(RSS)
- Troubleshooting Haskell Stack Setup on OS X, August 3, 2016
types
(RSS)
- Generic methods cannot have non-generic defaults in Sorbet, July 28, 2024
- Abstract singleton class methods are an abomination, January 1, 2024
- Why don’t constructors have override checking?, December 31, 2023
- Inheritance in Ruby, in pictures, December 28, 2023
- Why Sorbet needs T.let(…, T::Boolean), May 13, 2023
- Every type is defined by its intro and elim forms, April 23, 2023
- Typing klass.new in Ruby with Sorbet, February 19, 2023
- Problems typing equality in Ruby, January 24, 2023
- Runtime type checking is great, January 3, 2023
- Sorbet’s weird approach to exception handling, September 4, 2022
- Control Flow in Sorbet is Syntactic, August 24, 2022
- Typed Errors in Sorbet, June 5, 2021
- Sorbet Does Not Have Checked Exceptions, May 29, 2021
- Mimicking Opaque Types in Sorbet, December 12, 2020
- Singletons and Flow-Sensitive Typing, September 25, 2020
- Sorbet Does Not Have FixMe Comments, February 12, 2020
- Intersection Types in Sorbet are Surprisingly Common, January 4, 2020
- What makes type checking Ruby hard?, December 29, 2019
- Notes on Continuations, June 18, 2019
- Union Types in Flow & Reason, April 19, 2018
- Case Exhaustiveness in Flow, April 15, 2018
- Lenses & Composition, February 6, 2018
- Some Intuition on Lenses, February 6, 2018
- System Fω and Parameterization, September 27, 2017
- Variables in Types, September 25, 2017
- Tests, Types, & Correctness, September 10, 2017
- If, Else, & Purity, September 1, 2017
unix
(RSS)
- Surgery on Code from the Command Line, July 30, 2019
- Improving CLIs with isatty, June 11, 2019
- Google Chrome: A Memory Hog, December 29, 2014
- Offline LaTeX Development, October 6, 2014
vim
(RSS)
- Exploring Ruby with clangd, July 21, 2020
- Code Review from the Command Line, January 13, 2018
- Haskell Development with Neovim, July 16, 2017
- Reach for Markdown, not LaTeX, February 26, 2017
- Troubleshooting Haskell Stack Setup on OS X, August 3, 2016
- SML Dev Setup, March 9, 2016
- Noteworthy Dotfile Hacks, March 10, 2015
- Vim as an IDE, March 3, 2015
- Offline LaTeX Development - Part 2, January 10, 2015
- Vim as a Man Page Viewer, December 20, 2014
- Offline LaTeX Development, October 6, 2014
webdev
(RSS)
- Using Google OAuth2 for CMU Authentication, October 20, 2014
- HPSTR: An Octopress Theme, June 4, 2014
writing
(RSS)
- Don’t bury the lede in technical docs, November 29, 2022
zsh
(RSS)
- Driving Bazel with fzf, August 10, 2023
- Starter Zsh Setup, January 3, 2016
- Why zsh?, March 10, 2015
- Noteworthy Dotfile Hacks, March 10, 2015