Blog

131 posts that I've written since 2012.

How to filter shell output with grep

Embracing the Unix philosophy and some basic grep tricks to easily scan noisy logs.

Recreating the Matrix Effect

How to build a Matrix-style background in pure HTML, CSS, and JavaScript.

Running a Ruby on Rails Application in Nix

A minimal configuration for running a Ruby on Rails application in Nix

Beverage Hydration Index

Why Coca-Cola may be better than water.

Just enough Obsidian

More about my Obsidian process: themes, plugins, styling, best practices.

My starter macOS Nix Config

What I used on a new macOS machine to write and publish this post.

Message of the Day

Different ways to implement the 'Message of the Day' in Unix machines

Success with Obsidian

Maybe the trick is just to write about and document things you actually care about.

Effective web clipping with Obsidian

How to make custom clipping templates with Obsidian Web Clipper

Install fonts with Homebrew

How to install most fonts in a single command, using Homebrew.

Cloudflare Stream

How to use Cloudflare Stream to host videos for your website.

Domain ranking experiment

A continuous experiment to increase the domain ranking of this site.

Get started with 𝕏 AI and Grok

An introduction to 𝕏 AI and the Grok foundational models, with sample code.

Workers GraphQL Server v2

Showing off some updates to my workers-graphql-server project.

How I Record Videos

A description of my process for recording videos for software developers, in 2024.

M4 Macs

Some brief thoughts on the new Mac hardware announced this week.

Tailwind Child Selectors

How to use child selectors in Tailwind CSS 3.1+.

Workers Entrypoints

A Cloudflare Workers application can have multiple entrypoints, allowing for different usage patterns.

An introduction to Cloudflare Workflows

How to get started with a great new feature in Cloudflare's developer platform.

Announcing the Astro Cloudflare Redirects integration

A plugin for Astro to automatically generate redirects using Cloudflare's _redirects file specification.

Recommended Icon Libraries

A rundown of three icon libraries I recommend for React/webdev projects.

Donor Advised Funds

A tax-advantaged investment vehicle for charitable donations.

Building an indexer

An open-source solution for indexing your site.

Effective indexing

Strategies for improving your site's SEO and indexing.

The Astro Rewrite

Migrating my blog from bearblog.dev to Astro.

ShipFast Vulnerabilities

A look at the vulnerabilities in ShipFast.

The McMaster-Carrification effect

Improving this site with tweaks inspired by McMaster-Carr.

Sleepy Time Tea

My recipe for tea at nighttime.

Building Your Own Radio Network with Liquidsoap

Building a localhost radio empire.

My Morning Coffee

My morning coffee routine.

Releasing my bearblog Chrome extension

A Chrome extension for navigating bearblog.

Defer Loading CSS with One Line of Code

How to defer CSS loading with one line of code.

Increasing Lighthouse Score to 100

Some performance tricks for improving the Lighthouse score of this site.

Understanding Astro's getStaticPaths function

How to use one of Astro's most powerful features for static site generation.

An Introduction to Astro's Content System

An in-depth look at how to use Astro's powerful content system.

How to Add Cloudflare Turnstile to Your Ruby on Rails Application

Adding protection to your Rails app with Cloudflare Turnstile.

The big bearblog syntax highlighting hack

A terribly convoluted way to add syntax highlighting to bearblog.

How to use Lucide icons via a CDN

A simple way to use Lucide icons in situations where you can't use NPM.

Just enough Zustand

An introduction to Zustand, a great state management library for React.

The quest for pure aspirin

Sourcing high quality aspirin powder.

Deploying Astro Applications to Cloudflare

Details on how to deploy full-stack Astro apps to Cloudflare.

Shadcn/ui review

A quick review of an excellent React UI library.

Create a Zellij instance with a useful session name

Fixing one of zellij's annoying quirks.

Creating a custom post list page in Bear

How to add custom pages to bearblog for a specific tag.

Blog RSS auto-backlinks on a GitHub repo

A tricky hack for adding backlinks to a GitHub repo.

IDGAF git commit

A quick way to commit early, and often.

Shopping list of non-toxic products

A running list of health products I'm using, primarily around eliminating toxic PUFAs.

Honor the change

Reflections on the summer of 2024.

Recent developer tool discoveries

Some tools I've discovered recently that have improved my development experience.

What to do with a newsletter?

A thought on the value of newsletters.

Digital throwaways, physical keepsakes

Collecting physical media, versus staying fully digital.

Full-stack development is a superpower

Developers: invest in full-stack development skills.

Replaying Majora's Mask

A great way to replay one of the greatest video games ever made.

Second brain alternative

What if we don't need a second brain?

What comes next after simple chat UIs in AI?

A look at the next step in developing with AI.

Quick review of Zellij

Reviewing a modern terminal multiplexer.

LLMs and voice are really something else

A look at how to use LLMs with voice.

ShipFast and the world of starter kits

What is the value of a starter kit for builders?

The WHOOP is quite cool

A review of the WHOOP fitness tracker.

A great usage of QR codes in the real world

A look at how I built tools for managing my home using QR codes.

Authenticity and producing content as a Developer Advocate

Some unstructured thoughts on working as a Developer Advocate in 2024.

How to fix 𝕏's broken "Download an archive of your data" feature

A fix for a crucial feature in 𝕏.

Second Brain-less

Thoughts on Obsidian and the "second brain" process.