Blog
2024
- Scheduling Conference Talks with Linear ProgrammingSchedule talks for a multi-track conference with an eye to avoiding conflicts
- Cross-platform dotfile Management with dotbotUse dotbot to link your dotfiles to the right spots on macOS, Linux and Windows
- Neovim smart-splits on macOSSetting up neovim smart-splits with kitty on macOS
- Fix line breaks in comments with VS Code RewrapVS Code Rewrap is a handy extension for wrapping long comments in your code.
- Using Alpine.js with Astro View TransitionsAstro View Transitions can break Alpine.js components. Here's how to fix it.
- JavaScript Package DevelopmentSetting up a JavaScript package repo with multiple packages, TypeScript, testing, codegen, and automatic releases
- Solving the New York Times Letter Boxed Puzzle with Regular ExpressionsCan we solve the Letter Boxed puzzle with a regex?
- Behind the Scenes: How We Fixed Leftover Underlines in the Grammarly Text Editor PluginA look at the challenges faced by the Grammarly for Developers team when fixing a bug in the Grammarly Text Editor Plugin.
2023
- Recover a Lost Commit MessageHow to recover a lost git commit message
- Swimming with AudiobooksI've been swimming a lot recently. I find swimming to be pretty boring, so I've been listening to music with swim headphones to occupy my mind. A few weeks ago, my cheapo headphones were stolen from the side of the pool. To replace them, I bought some Shokz OpenSwim headphones. Wow, these are so much better.
- Changesets vs Semantic ReleaseA comparison of two tools for managing version numbers and changelogs in a monorepo
2022
2021
- Alpine.js vs StimulusA comparison of Alpine.js and Stimulus.js for adding interactivity to server-rendered pages (Alpine.js wins IMO).
- Avoiding CORS with a proxyHow to avoid CORS restrictions by setting up a proxy with AWS Cloudfront
- Clipbox for S3Clipbox is a little utility that I've been using in some form or another for years. It is a utility that provides a keyboard shortcut to select a region of the screen, upload the screenshot to a server, and put a link to the image on your clipboard.
- Aurora Serverless DB ExportSave a snapshot of an Aurora Serverless database to an S3 bucket
- DB Export for DatalakeSolving a difficult problem with Aurora Serverless
- Readable Bash ScriptsA technique for breaking bash pipelines into smaller, more easily debuggable pieces.
2020
- Vue Browser Extensions with ParcelUse parcel to build a browser extension with Vue
- I was Promised PizzaA coworker had a question about combining the values from multiple javascript Promises. I've tried to cull the interesting Promise construction out of the original problem, and came up with an example about pizza.
2019
- Writing an Implementation PlanA technique for getting work done in the face of overwhelming challenges.
- A Tale of Two Sorted Lists: Comparing Inheritance and CompositionWe'll explore two different approaches to solving the same problem: Inheritance and Composition. At first glance, the Inheritance example looks more correct and is a bit shorter. I want to convince you that the Composition approach is more correct.
- Scheduling a Medical Residency using PythonUsing linear programming to schedule a medical residency program
2018
- Migrating an ASP Web App to .NET CoreMigrating a small ASP.NET web api from .NET Framework 4.6 to .NET Core.
- Vanquishing CORS with CloudFront and Lambda@EdgeUsing CloudFront to host a single-page web app and avoid CORS issues
- Programming on MacOS in 2018A list of software I find useful for programming on MacOS, circa 2018.
- A Cloudfront MysteryA detective story of debugging a Cloudfront 502 error
- Mongo Schemas with PokemonUsing JSON Schema to validate pokemon documents in MongoDB.
2017
- Copy on Read with ES6 ProxyUsing a Proxy object to enforce making a deep copy of default values on read.
- d3 Event IssuesA detective story tracking down why d3.event was null in a throttled function.
- Inline SVG stylesA quick script to inline styles in SVGs
- Python-style Context Managers in JavaScriptPython's context managers are a great feature. Here's how to approximate them in JavaScript.
- Migrating a Primary Key to BigintHigh volume tables can run out of ids. Here's how to convert a Django model's primary key to a bigint.
- Django Migrations TribulationsEnsuring merge migrations are unique in Django
2016
- Setting up GNU pass with AlfredHow to set up pass, the open source password manager, with Alfred on OSX
- Meddlesome DecoratorsWhen your decorators want to meddle with the function's arguments, things can get tricky. Here's a pattern for writing decorators that need to access the function's arguments.
- Facebook Messages Auto-replyUse selenium to check for unread Facebook messages and send a reply
2015
- Postgres Advisory LocksAcquire and release postgres advisory locks from python with a decorator
- Decorators without the MagicDecorators look like magic when you first see them, but they don’t feel like something mere mortals could write. We’ll go through some examples of exactly how they work (without the scary <code>@</code> syntax), and why they are a nice pattern for writing elegant, easy to understand code.
2014
- Pair Programming with wemux and ngrokShare your terminal with friends!
- Where's the Facebook app?Disappointed by the lack of an official Facebook app for your Mac? Make your own! (download provided for the lazy)
- Event Triggered Averages TutorialEvent-triggered averages, also known as Peristimulus Time Histograms (PETHs) are a method of analysis commonly used in neuroscience, but also in the finance industry and others.
2013
- pthreads and PRNGs, oh my!Professors teaching Concurrency classes are fond of saying that when there is a race condition in your code, anything can happen. But can it?
- Grading on a CurveEveryone's happy to hear that a test will be curved, but what does that even mean?
- Putnam Boxes and BallsEvery December, undergrads across the country take the Putnam Exam, regarded as one of the toughest math competitions around. This is a walkthrough of a problem from the 2010 test.
- Muggles and Base TwoYou can be half muggle, quarter muggle, or even 13/16 muggle. But can you be 1/3 muggle?
- LaTeX Therefore packageThis LaTeX package alleviates the constant struggle in mathematical writing of finding synonyms for 'therefore'.
2012
2011