RSSAmplifier

Blog

Michael Uloth

Software engineer helping scientists discover new medicines at Recursion.

michaeluloth.comRSS feed ↗37 posts

Latest posts

Ignoring files you've already committed

Cache invalidation is tricky to automate.

Converting a list of JS objects into a parent-child tree

A fun nesting puzzle.

A "!" prefix makes any Tailwind CSS class important

A delightfully succinct bit of syntax.

Tmux's version command is -V

Probably the last option you’d think to try.

SELECT DISTINCT outputs a column's unique values

A very useful keyword when you’re trying to understand sets of values.

It's tricky to statically type a "pipe" function in Python

Less tricky once you understand overloads better.

An iOS Shortcut can add data to a Google Sheet

Workflows you can complete from your phone are seriously underrated.

How to query a BigQuery table from Python

Doesn’t take much to pull in a whole lotta data.

CloudFlare sells domain names at cost

Consumer pricing doesn’t often go down.

Homebrew packages might install dependencies

Brew packages install brew packages.

Shell functions don’t need parentheses

Just in case you see this in the wild and are confused.

You can run shell scripts in tmux.conf

It’s a nice way to integrate whatever behaviour you like.

Why unknown types are useful

Sometimes you want the type checker to help you avoid making assumptions.

Using "object" as an unknown type in Python

Python's base class (and base type) can help keep you safe when your data could be anything.

Defining a custom unknown type in Python

How to replicate TypeScript's unknown type with a generic type variable.

Undoing a merge to your main git branch

How to roll back changes by reverting commits

Switching configs in Neovim

How to maintain multiple Neovim configurations and switch between them

Adding a pull request template to your GitHub repo

How to pre-fill the blank description with helpful prompts.

Dramatically reducing video file size using FFmpeg

How to shrink a video so it’s small enough to upload.

The translateZ trick

How to smoothly animate CSS filters in Safari by engaging the GPU.

What is a Factory Function?

Kyle Shevlin on how to use factory functions as an alternative to classes.

Writing Great Alt Text

Jake Archibald on how to write better image alt text.

Levels of Abstraction in Testing

Sam Selikoff on how to make unit tests easier to read.

Using Slack to report data entry errors to content editors

How the ".com" team at ecobee uses Slack as an alert system.

The filter(Boolean) trick

How to remove empty values from an array.

Using GraphQL with Gatsby

How to write GraphQL queries in a Gatsby project.

Adding content to a Gatsby project

The pros and cons of different approaches.

Writing CSS-in-JS in a Gatsby project

How CSS-in-JS libraries like CSS Modules and Styled Components make it easier to safely add and remove styles.

Writing CSS in a Gatsby project

How to write traditional CSS in a Gatsby project.

Wrapping pages in a layout component

How to share common content and styling between pages.

Adding pages to a Gatsby project

How to add pages to a Gatsby project and navigate between them.

Writing HTML in a Gatsby project

How to use React to split HTML into reusable components.

Gatsby's default files and folders

What's going on inside each folder in a Gatsby project.

Starting a new Gatsby project

How to start a Gatsby project on your computer.

What is Gatsby?

How Gatsby combines the best features of React and HTML.

Introducing Gatsby Tutorials

A new, community-updated directory of Gatsby.js learning resources.

How to set up a Mac for web development

What to install on your Mac before starting a JavaScript project.