Articles
You'll find articles I publish on Substack as well as technical posts here. You can read my Substacks directly at Life, the Universe, and STEAM and Ask me about my podcast.
Test thrown errors in Next.js 14 with Storybook
Throw errors in Next.js components and make them testable in Storybook interaction testsJune 16, 20241 minsTesting Next.js 14 and Supabase
Pro tips for getting testing up and running with Next.js 14.May 29, 20242 minsHelp, I'm stuck in a time loop!
The one about identity verification when science fiction is science factMay 21, 20248 minsTransfer assets between Meta Business Portfolios
The art of social-media management with Meta is apparently a convoluted one.May 15, 20242 minsNext.js ForwardRef Error in Storybook
Getting around interesting quirks with dynamically loading components in Next.jsMay 7, 20242 minsSystems thinking our biosphere
The one about the interconnectedness of conservation scienceMarch 24, 20249 minsDe-extinct our future
The one about some colossal work in de-extinction scienceFebruary 18, 20246 minsSlugify headings for filenames in Obsidian
I was mildly inconvenienced in my quest for improved publishing workflows, so I figured out how to write an Obsidian plugin to slugify filenames from headings.December 31, 20233 minsInteractive Transcripts with YouTube & Descript
I recently added interactive show notes and transcripts to the STEAM Powered website. Here's how I did it.December 28, 20235 minsConvert Gist Links in Markdown to Embeds in Next.js
Convert unadorned gist links in markdown to React-compatible embeds in Next.js.December 24, 20232 minsGenerate QOTD in Obsidian templates
Programmatically insert quotes into Obsidian templates with TemplaterDecember 20, 20231 minsShare sessions across subdomains with Supabase
Quick snippet for sharing cookies across subdomains using Supabase auth.October 5, 20231 minsMigrate WordPress to Eleventy with Colocated Images
How I migrated old WordPress blogs to Eleventy with colocated image support.September 23, 20236 minsAccessing pathname in Next.js generateMetadata
An annoying hack to get access to the current pathname in Next.js 13 app router generateMetadata function.September 10, 20231 minsRecently, in workflow optimisation
An revision of tools for improved productivity and workflow management.August 28, 20235 minsSomething wicked this way comes
The one about why we need to talk about new technology.July 2, 20239 minsChatGPT, my drunk friend
A cursory foray into using ChatGPT for research purposes.April 30, 20238 minsKeeping it real while making reels
Reviewing my reel making strategy for podcast promotion.March 14, 202310 minsWhat I didn't know about podcast hosting platforms
Sharing what I've learned about podcasting lessons the long way so that you don't have to.January 15, 202312 minsConvert DeepGram to Descript transcript format
Use DeepGram transcripts in your Descript projects.January 1, 20231 minsProgrammatically Post to Mastodon with Make
Use web requests to automate or programmatically post to Mastodon with Make.January 1, 20233 minsHoly Shark
A tale of YouTube granting me some nice numbers by connecting naked yoga and sharks.January 1, 20234 minsI have no idea what I'm doing
A few people have told me what I post about the backend of my podcasting journey on Facebook is interesting/amusing and I should make it more accessible.December 18, 20222 minsColocated images with MDX and Next.js
An inelegant workaround to use colocated images with MDX on Next.js.November 8, 20223 minsConvert DeepGram to autoEdit transcript format
Use DeepGram as your Speech-to-Text (STT) engine in autoEdit 3.November 2, 20221 minsBuggy Font Display on MacOS
Workarounds for letters displaying with cutouts on MacOS.September 5, 20221 minsProxy Redirect Netlify Sites
Proxy redirect parts of one Netlify site to another.August 22, 20222 minsImprove DaVinci Resolve Audio Export Quality
Reduce artefacts in audio exports from DaVinci Resolve.August 5, 20223 minsContentful Embedded Content in Gatsby
Integration and rendering of Contentful embedded assets and entries.March 18, 20221 minsBookmark everything (Raindrop.io to Tumblr with Zapier)
Automatically post Raindrop.io bookmarks to Tumblr.February 6, 20222 minsClean-up Extraneous Paragraph Tags and Table Whitespace in MDX on GatsbyJS
MDX wraps components with paragraph tags and can add extra whitespace in tables which produce invalid HTML. This GatsbyJS plugin cleans up the markup.October 9, 20211 minsBake-in SRT Captions into Videos Using ffmpeg
How to create baked-in captions in videos using srt files and ffmpeg.October 1, 20211 minsEducational Engagement
The one about motivating curiosity and a desire to learn.September 29, 20218 minsCartoons and Classical Music
The one about Bluey, Sarah and Duck, Looney Tunes, and Disney.September 11, 20215 minsConfigure audio over Xrdp on CentOS
Configuring Xrdp on CentOS for use over Microsoft Remote Desktop.December 23, 20203 minsGenerate SRT files with Google Cloud Services
Using Google Cloud Services Speech to Text to generate SRT files from short videos.December 4, 20202 minsCreate Group Permissions with Migrations in Django
How to create permissions on groups in Django in a migration.November 6, 20201 minsFairlight Audio Clean-Up
The technical details behind the creation of STEAM Powered.October 1, 20204 minsConvert DaVinci Resolve Markers to YouTube-Compatible Timelines
Use DaVinci Resolve marker EDLs to create timelines that can be used in show notes and YouTube timelines.July 29, 20201 minsCopying Fairlight settings between timelines
Replicate Fairlight settings when using the same track on multiple timelines.July 26, 20201 mins