RSSAmplifier

Blog

Home

Projects, notes, and articles from my work as a Software Engineer.

brianschiller.comRSS feed ↗78 posts

Latest posts

prq: A tool for recycling worktrees

prq is a PR queue with warm worktrees and tmux notifications

Time to Close the Windows

A vibe-coded script reminding me to close the windows as it gets warm is still useful after a year

Libby Web Downloader

Download audiobooks from Libby to listen offline

Stacked MRs with git branchless

Managing stacked Merge Requests with git branchless

Mark Generated Files with gitattributes

Mark files as generated for easier review in Github and Gitlab

AI Position Statement

My feelings about AI are complicated

Claude techniques I like

A couple of simple techniques for getting better results from Claude Code

Check that two types are the same in TypeScript

A TypeScript pattern for ensuring that two types are the same.

Commit Changeset

A git alias to use changeset descriptions as commit messages

Inferred Config for Nx Monorepos

Nx supports inferring tasks by looking at config files, but that's backwards. Better to infer the configs themselves.

Privacy-preserving Analytics with Counterscale

Using self-hosted Counterscale to track page views on my blog

Constraint Solving in Spreadsheets

Can we create a tool that allows users to specify constraints in a spreadsheet and then solve them?

The best Result type for TypeScript

Make Result types in TypeScript as ergonomic as Rust's ? operator

Sync and Swim App

An app to load music and audiobooks onto Shokz OpenSwim headphones

sync-and-swim

Scheduling Conference Talks with Linear Programming

Schedule talks for a multi-track conference with an eye to avoiding conflicts

Baby advice

What I wish I'd known before having a baby

Cross-platform dotfile Management with dotbot

Use dotbot to link your dotfiles to the right spots on macOS, Linux and Windows

Neovim smart-splits on macOS

Setting up neovim smart-splits with kitty on macOS

Fix line breaks in comments with VS Code Rewrap

VS Code Rewrap is a handy extension for wrapping long comments in your code.

Using Alpine.js with Astro View Transitions

Astro View Transitions can break Alpine.js components. Here's how to fix it.

JavaScript Package Development

Setting up a JavaScript package repo with multiple packages, TypeScript, testing, codegen, and automatic releases

Solving the New York Times Letter Boxed Puzzle with Regular Expressions

Can we solve the Letter Boxed puzzle with a regex?

vitest-unsettled

Custom matcher for checking if a Promise is settled (either resolved or rejected).

Behind the Scenes: How We Fixed Leftover Underlines in the Grammarly Text Editor Plugin

A look at the challenges faced by the Grammarly for Developers team when fixing a bug in the Grammarly Text Editor Plugin.

Recover a Lost Commit Message

How to recover a lost git commit message

Swimming with Audiobooks

I'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 Release

A comparison of two tools for managing version numbers and changelogs in a monorepo

Contentful migration strategy

Contentful's migration strategy is lacking. Here's how I've worked around it.

Raw SQL Array parameters in Rails

How to pass an array as a parameter to a raw SQL query in Rails

cpp-subprocess

A C++ library for safely invoking external commands and pipelines.

Alpine.js vs Stimulus

A comparison of Alpine.js and Stimulus.js for adding interactivity to server-rendered pages (Alpine.js wins IMO).

Avoiding CORS with a proxy

How to avoid CORS restrictions by setting up a proxy with AWS Cloudfront

Clipbox for S3

Clipbox 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 Export

Save a snapshot of an Aurora Serverless database to an S3 bucket

DB Export for Datalake

Solving a difficult problem with Aurora Serverless

Readable Bash Scripts

A technique for breaking bash pipelines into smaller, more easily debuggable pieces.

Vue Browser Extensions with Parcel

Use parcel to build a browser extension with Vue

backsplash

Convert between lat-lng, web mercator tiles, and pixel coordinates.

I was Promised Pizza

A 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.

Writing an Implementation Plan

A technique for getting work done in the face of overwhelming challenges.

A Tale of Two Sorted Lists: Comparing Inheritance and Composition

We'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.

superdelegate

alfred-clipbox

inspect.macro

Scheduling a Medical Residency using Python

Using linear programming to schedule a medical residency program

Migrating an ASP Web App to .NET Core

Migrating a small ASP.NET web api from .NET Framework 4.6 to .NET Core.

Vanquishing CORS with CloudFront and Lambda@Edge

Using CloudFront to host a single-page web app and avoid CORS issues

vue-await

Programming on MacOS in 2018

A list of software I find useful for programming on MacOS, circa 2018.