January 28, 2026
Defaults 2026 A list of the default apps that I use in 2026.
January 7, 2026
AI use case: Asking questions of large files When file search isn't enough to surface answers, using an LLM to ask questions of large files is a valuable use case for AI.
August 25, 2025
Install curl with apt (and not snap) When trying to install Node, I encountered an issue that was resolved by installed curl with apt.
August 20, 2025
Four perspectives on AI I respond to Maxi Ferreira's thesis on the two stages of AI adoption among developers with a four-quadrant model based on an individual's beliefs about AI. These gives us four perspectives: Skeptical, Wary, Pragmatic, and Optimistic.
July 16, 2025
Axe DevTools doesn't flag multiple h1 elements on a page Rendering multiple h1 elements on a page isn't technically an issue, but you probably want to avoid it anyway. Here I explain how to configure a snippet in your browser to check the heading levels on a webpage.
July 9, 2025
Writing code was never the bottleneck in software engineering In "Writing Code Was Never the Bottleneck", Pedro Tavares challenges a common assumption in the LLM age. I agree and add some thoughts based on my experience in software-development environments.
June 30, 2025
Colocate functionally-related code My preference is to colocate code based on functional relation–what it does–and not domain relation–what it is.
March 31, 2025
My on-again-off-again relationship with AI assistants I keep subscribing to and canceling AI assistant plans without finding lasting value.
January 15, 2025
Zed still isn't ready Zed is a nice light-weight editor, but the slow searching and memory issues make it a non-option for my work.
November 11, 2024
Deleting my GPTs GPTs provided little value to me now, little potential value in the future, and were the only thing locking me in my Open AI subscription.
September 28, 2024
Pittsburgh TechFest 2024 Pittsburgh TechFest 2024 was a good experience and valuable opportunity to connect with the local tech scene.
June 29, 2024
Bypass "Error: There are no prompts" in promptfoo Adding a space to the end of the prompt text appears to be a workaround for this error.
June 27, 2024
Use state callbacks in React When you need to reference the previous state, pass a callback function to React's setState.
June 27, 2024
VIVO sit/stand desk Issues and solutions for my VIVO sit/stand desk.
June 11, 2024
Simplify event delegation with the Element.closest method Event delegation is a useful pattern for managing descendant interactions and Element.closest helps with simple and robust code.
June 7, 2024
Align content in Markdown tables You can use colons in the header row separator to align content in a Markdown table.
May 27, 2024
CSS nesting is (almost) ready It's not quite ready for production use, but we are very close to getting native CSS nesting.
May 27, 2024
Looking over the fence at Eleventy Eleventy is looking better and better as an alternative to Astro for simple or long-lived websites.
May 27, 2024
Getting started with Eleventy The missing getting-started guide for the Eleventy (11ty) static-site generator.
May 17, 2024
ChatGPT 4o isn't a good researcher yet When asked, ChatGPT provides sources but they don't contain the information provided.
May 17, 2024
Astro and release velocity Astro is a great framework, but it's frequent updates are overwhelming.
May 17, 2024
Render and effect call order in React Renders are called top-down, but effects are called bottom-up.
May 9, 2024
Manage your photo archive Take a minute to review all photos from today's date and delete the ones you don't need.
April 24, 2024
Measuring and cutting Measuring twice, cut once is good advice for woodworking but maybe not for software engineering.
March 22, 2024
Create a custom search for a static site A high-level overview of why and how I built a URL-powered fuzzy search feature for this site.
March 19, 2024
Fix missing Astro files on GitHub pages Astro generated CSS files start with an underscore which causes them to be ignored by GitHub Pages.
March 19, 2024
Create a useIsOnline React hook Using the Navigator's onLine property and online/offline events to create a custom React hook.
March 19, 2024
Fix static file endpoints after Astro v4 upgrade I needed to change the name of the exported function and make sure that it was returning a Response or Promise.
March 6, 2024
Why Microsoft Edge? Edge has all of the features of Chrome with some additional features.
March 6, 2024
Switching from Ubuntu to Linux Mint I switched for performance reasons on an older device, and so far Linux Mint seems to be an improvement.
February 24, 2024
Running Ollama without a GPU You can run Ollama on an older device, but the response will be slow and/or low quality.
February 21, 2024
Use Ollama with the official Python library Get started working with AI, Ollama, and large-language models in four steps.
February 16, 2024
Get started prompt engineering with local LLMs Ollama makes it easy to run LLMs locally and provides experimental compatibility with OpenAI's APIs.
February 6, 2024
Python Reference A quick reference guide for working in Python.
January 18, 2024
Did OpenAI's Web Browser GPT leak its prompt? When given a simple prompt, OpenAI's Web Browser GPT seems to leak its prompt.
January 18, 2024
Migrating from Google Domains to Porkbun was... I was able to transfer two domains from Google to Porkbun without any issues or downtime.
December 20, 2023
Normalizing data is a good idea By transforming your data into a consistent structure, you can reduce the complexity of your code.
December 11, 2023
How I'm using AI in November 2023 Chat GPT and Khanmigo join Copilot in the regular category this month.
November 27, 2023
Sli.dev review A great tool that gets out of the way when creating slides.
November 15, 2023
Is it better to have one large file or multiple small files with GPTs? Using a single file seems to reduce response times, but there is more to the story.
November 15, 2023
What is the file limit for GTPs? As of November 15, 2023, the limit is 10 files.
November 14, 2023
How I'm using AI in October 2023 GitHub Copilot is still the most popular, but I found myself using ChatGPT more frequently in October.
November 14, 2023
GPTs read text files better than markdown Use text files instead of markdown with OpenAI’s custom GPTs.
November 8, 2023
Thoughts on Web Speech API Browser native text-to-speech is neat, but it lacks the polish that most users expect.
October 25, 2023
Declarative code and cognitive load Maxi Ferreira in Frontend At Scale on how declarative code can reduce cognitive load.
October 3, 2023
How I'm using AI in August & September 2023 GitHub Copilot and Warp are the only two AI-powered products that I used in August and September, with Copilot being by far the most valuable.
September 28, 2023
See what object properties are accessed in JavaScript JavaScript's Proxy object can be used to watch an object and respond whenever any of its properties are accessed or reassigned.
August 25, 2023
Remove duplicates from an array in JavaScript Using sets to de-dupe arrays of primitive and object-like values.
August 8, 2023
How I'm using AI in July 2023 Some more competitors are entering the ring, but GitHub Copilot remains the only AI-powered product that I use regularly.
August 2, 2023
Timeboxing types In order to maximize the value of types and your time, consider timeboxing the amount of time that you spend writing any given type.
August 1, 2023
CSS columns are neat The columns property is CSS divides content among a set number or width of columns.
August 1, 2023
Quality requires iteration You're not going to write the perfect program on your first attempt; it's going to take multiple iterations to arrive at the best solution.
July 5, 2023
A workable emoji picker on Ubuntu The default GNOME emoji picker is limited to certain applications, but you can find copyable emojis in the Activities view.
July 4, 2023
Writing Prompts for Programmers A list of software-engineering focused writing prompts to help programmers get started writing.
July 4, 2023
Reviewing "Go By Example" Go By Example is a great resource for learning the syntax and patterns of Go, but you might need to supplement it with other resources to learn how to work in the language.
June 23, 2023
How I'm Using AI in June 2023 GitHub Copilot has pulled away from the rest as the only AI product/service that I use regularly.
June 5, 2023
A quick comparison of JavaScript and Go executables Go is the superior for executables based file size and execution time, but Bun and Deno offer a competitive option for developers familiar with the JavaScript ecosystem.
May 22, 2023
Compairing Objects, Maps, and WeakMaps for lookup tables in JavaScript You could use an Object, but Maps are probably best for lookup tables and WeakMaps are useful for memory performance.
May 19, 2023
Web-browser Accessibility Tools Chrome, Edge, Firefox, and Safari all have built-in accessibility tools to help you create accessible experiences for all.
May 16, 2023
Linux Update in 2023 After experimenting with Linux last year, I am happily using Ubuntu on a Lenovo Yoga as my personal computer.
May 13, 2023
How I'm using AI in May 2023 GitHub Copilot is the top product this month, but Bard, Bing, ChatGPT, and Warp all have their uses.
May 12, 2023
Declaring variables in Go You can declare variables with var, :=, and const depending on your use case.
May 11, 2023
What is nullish in JavaScript? Nullish values are null and undefined, and it's important to thing of them separately from falsy values.
May 10, 2023
QA questions for everyone to ask Everyone on the product team should ask verifying, discovery, and critical questions to ensure quality.
May 9, 2023
Learning Go Learning the Go programming language for professionanl development has been an enjoyable experience.
April 18, 2023
Set up Decap CMS Decap CMS is the official successor to Netlify CMS and works well with the old tooling.
April 1, 2023
Zed is a rocket-powered skateboard Zed is a new Rust-powered editor by the creator of Atom that focuses on speed but lacks a lot of features.
March 28, 2023
Fix failed Fastify deploy on Render To get a boilerplate Fastify app to deploy on Render.com, you need to read to listen on PORT environment variable.
March 14, 2023
Find and replace with Regex groups Create Regex groups with parentheses for powerful find/replace patterns.
March 10, 2023
Fix SVG CSS animation issue in Safari Safari 16 has trouble with CSS animations on SVG child elements, but you can resolve them by using a combined transform property.
March 9, 2023
Listen for class change in JavaScript There isn’t an event for class list changes, but you can write a function that listens for class changes on an element with the MutationObserver API.
March 6, 2023
Create Axios-style articles with CSS We can use inline blocks to bring subheadings on the same line as the following text while preserving the visual spacing.
March 2, 2023
CSS :empty pseudo class Empty elements in a flex or grid container can result in double gaps, but CSS has an pseudo class to select and remove those elements.
March 2, 2023
Fix trailing whitespace in Astro components There is an issue with the Astro compiler that leaves unwanted whitespace in your elements, and this workaround will solve the problem until it's resolved.
February 28, 2023
Farewell Create React App The React team is looking to transition Create React App from a project scaffold to a launcher that includes options other than client-side rendering.
February 25, 2023
Valid JavaScript variable names Mathias Bynen has a handy tool for determining what characters are allowed in a JS variable name.
February 16, 2023
Migrating to IndieWeb.social A little write-up about my migration from Fosstodon to IndieWeb.social.
February 13, 2023
Publishing a Qwik component The Qwik team has made creating and publish Qwik components a smooth and painless process.
February 11, 2023
Fix Astro dev server hanging with new collections API The issue for me was calling useCollection on an entry with a layout.
December 20, 2022
Be careful parsing formatted numbers in JavaScript JavaScript's parseInt, parseFloat, and Number constructors struggle with comma-separated number strings.
December 15, 2022
New command palette I added a new new command/control K command palette to my site. You can use the keyboard shortcut or activate it by clicking the magnifying glass in the header.
December 14, 2022
Fix "package esbuild-linux-64 could not be found" error on Netlify I don't know how applicable this solution will be to your situation, but it worked for me!
December 5, 2022
Portable custom search engines Custom search engines (sometimes called site search) are a great browser feature, but they aren't easily ported from one browser to the next. I created a portable web app to handle your custom search engines from any browser.
November 29, 2022
A first look at Static CMS with Astro Documenting my first attempt at switching from Netlify CMS to Static CMS.
November 29, 2022
Astro components do not merge HTML attributes Props are merged, but attributes are not. This is an important rule to know when authoring Astro components.
November 29, 2022
Run Netlify CMS and your dev server in one command The npm-run-all package allows you to run multiple scripts from your package.json in parallel.
November 29, 2022
Fix Netlify Dev's 'Multiple possible start commands found' issue You need to include additional properties in your netlify.toml to get it working correctly.
November 25, 2022
Astro components for Netlify features Announcing astro-netlify-components, a library for using Netlify features in your Astro projects.
November 23, 2022
Create a "Dave Rupert"-inspired activity graph A little code walk through a the new Activity Graph on my homepage.
November 18, 2022
Use your domain on Mastodon with Astro A quick guide on using an Astro endpoint to generate the webfinger you need to use your domain on Mastodon.
November 17, 2022
Are command bars the future? Command bars are a great way to access functionality through a single user interface, but how much potential does this pattern have to change the way we interact with products?
November 16, 2022
Node.js is great for scripting Node.js and JavaScript are a great option for scripting for the language features and the large ecosystem. Oh, and it's pretty fast too!
November 3, 2022
There is no multi-tasking on the Raspberry Pi Detailing some of the struggles that I've encountered while trying to do front-end development on a Raspberry Pi.
November 2, 2022
Finding a Linux distro and software that work After a lot of trial an error, I settled on Raspberry Pi OS and Firefox for my little Linux-powered computer.
November 1, 2022
Giving Linux another try It's been about 10 years since I last tried using Linux, so I think it's time to explore what it has to offer in 2022.
October 31, 2022
Awesome browser extensions A curated list of helpful browser extensions.
October 29, 2022
Using dynamic routes to organize blog posts in Astro If you want to display multiple blog posts on a single page, then you might want to use a dynamic route to generate pages for your content.
October 6, 2022
Jest A growing list of little things that make working with Jest a little better.
August 23, 2022
How to use StackBlitz with Firefox Disable enhanced tracking protections to use StackBlitz with Firefox.
July 18, 2022
How to replace Math.random with crypto in JavaScript A drop-in replacement for Math.random that generates cryptographically strong random values.
June 6, 2022
Use multiple Chrome Profiles when debugging With specialized profiles, you can help identify issues without messing with your favorite settings.
April 28, 2022
When to use React's memo HOC The memo higher-order component can prevent your component for re-rendering unnecessarily, but you should use caution before using it.
April 23, 2022
Calculate the sum of everything up to a given number A little tool to calculate 5 + 4 + 3 + 2 + 1.
March 3, 2022
English words by consonant-vowel pattern A tool to look up common words by their consonant-vowel pattern and resources for the rest.
February 5, 2022
Add a custom emulated device in Chrome Walking through the steps within the Google Chrome dev tools to better mimic your users' devices.
January 18, 2022
Upgrading an Eleventy site to 1.0.0 Make sure the you are using Node.js version 12 or later.
January 14, 2022
Make a web component How to make a custom web component with only a few lines of code.
January 11, 2022
Prevent Chrome from adjusting audio input levels on Mac A clever extension can prevent Google Meet from muting your bluetooth microphone.
December 15, 2021
Helpful online tools for diagramming Features and examples for some of the tools that I use to create illustrations and diagrams.
November 4, 2021
What is a build.gradle file? An brief explanation of Gradle and build.gradle files for JavaScript developers.
October 27, 2021
Three new games on Toollama Turtle Guide, Paint Pig, and Spotlight all help children build computer literacy.
October 7, 2021
React Native Glossary A growing list of terms you need to recognize when working in React Native.
October 5, 2021
What happened to @react-native-community packages? Why you won't be installing any community packages on your next React Native project.
October 4, 2021
Find an iOS simulator identifier How to find a simulator ID using the Xcode UI or terminal.
September 10, 2021
Using BEM names in React Native A quick how-to without committing to whether it's a good idea or not.
August 17, 2021
What is Hermes in React Native? Hermes is a JavaScript engine that is designed to run on mobile devices. It helps power React Native on Android – and now iOS – devices.
August 10, 2021
Add a YouTube-embedder shortcode to your Eleventy site A quick guide to writing a time-saving shortcode to create the embeddable code from a YouTube url.
July 12, 2021
Get innerHTML of Enzyme wrapper Writing a little helper function to grab the HTML of all children of a shallow wrapper in Enzyme.
July 3, 2021
Use remark to covert markdown into HTML The missing "hello world" example to get up and running with remark.
June 21, 2021
Count class methods in JavaScript Although JS treats them like object, finding the methods of a class programmatically is trickier than I thought.
May 4, 2021
Git A practical resource for Git.
May 1, 2021
Read URL search parameters with JavaScript How to use URLSearchParams to parse any search parameters string like window.location.search.
April 1, 2021
Fix 'downloadable font: rejected by sanitizer' error in Firefox Make sure that the path to your font is correct before going down the debugging rabbit hole.
March 25, 2021
Fix Netlify CMS YAML error 'Implicit map keys need to be on a single line' Make sure that your configuration file is being copied to the destination directory.
March 24, 2021
Copy the last git commit hash on macOS A one liner to copy the last commit hash to the clipboard on a Mac.
March 9, 2021
Add Heroicons to an Eleventy site A guide to using the eleventy-plugin-heroicons package in your Eleventy projects.
February 26, 2021
Create a URL shortener with Netlify Build your very own shortener in six quick steps.
February 25, 2021
Set innerHTML of an element in Svelte You can use an HTML expression to add valid markup to an element.
February 18, 2021
Let's stop skinning cats Proposing an alternative, more constructive idiom to "there's more than one way to skin a cat".
February 15, 2021
Search all files for two strings A terminal command to search for all the files in the current directory that contain two independent strings.
February 6, 2021
Fix "Error: Could not resolve pagination key in template data" in Eleventy Not a true fix, but a decent workaround when paginating collections in Eleventy.
January 29, 2021
Geddes' Guide to Crafting When building something new, get your foundation in place before building upon it.
January 25, 2021
Send data to the window with Eleventy How to create a shortcode to expose data for client-side scripts.
January 22, 2021
Checkout the previous git branch Using a git shorthand to checkout the most recent branch.
December 19, 2020
Make all properties required in TypeScript Using the Required utility type to required all properties of a type.
December 18, 2020
Add text to the beginning of every file Using a shell script to add a line to every file with a given extension.
December 17, 2020
Sass converts hsla to hex incorrectly A simple solution to stop Sass from transparent hsla colors to opaque hex colors.
December 15, 2020
Increase the playback speed on any audio or video online Since audio and video are native HTML elements, you can change the playing speed with a quick console script.
December 9, 2020
Standardize character width with CSS Two CSS properties that make letters and numbers the same width.
December 9, 2020
See all package versions in npm cli How to use npm view to see all the published versions of a package on the registry.
December 8, 2020
TypeScript without TypeScript TypeScript provides valuable features but complicate the development process. What are some alternatives that provide the features without the headache?
September 2, 2020
Emulate iPhone & iPad in Safari Simulating your web pages on Apple devices is easy with Safari's responsive design mode.
August 7, 2020
Make a POST request with fetch A sample POST with fetch for those of us who can never remember how.
August 5, 2020
Remove an item at a given index in JavaScript Sidestep slicing and splicing and use Array's filter method for a no-hassle solution.
August 4, 2020
Tab focus not working in Safari? For some unknown reason, you need to enable tab highlighting in the browser's settings.
July 29, 2020
Fix 'EMFILE: too many open files' error in Jest When trying to run Jest in watch mode, this error may mean that you are missing a dependency.
July 27, 2020
Updated TypeScript mega-course on Egghead.io Reviewing and updating my TypeScript mega-course on Egghead.io.
July 17, 2020
Access the home directory in Deno Using Deno's environment to determine your computer's home directory.
July 10, 2020
Before You Debug An organized approach to debugging your code.
July 10, 2020
Before Debugging An organized approach to debugging your code.
July 1, 2020
Nodemon for Deno Denon is a utility for Deno that provides source watching and process restarting just like Nodemon.
June 26, 2020
Parse argument aliases in Deno Using Deno's standard flags module to parse command-line arguments with aliases.
June 17, 2020
Await multiple promises in JavaScript By calling your asynchronous functions before awaiting, you can save valuable time in your JavaScript programs.
June 15, 2020
TypeScript mega-course on Egghead.io Creating a playlist to learn TypeScript.
June 12, 2020
Six video update Lessons learned from publishing six videos on YouTube.
May 28, 2020
Read a json file in Deno How to use Deno's standard library to read and parse data from a json file.
May 27, 2020
Read a json file in Node.js How to use Node.js's file system to read and parse data from a json file.
May 20, 2020
Publishing my first YouTube video Why I started a YouTube channel and what I learned in the process.
May 19, 2020
How to get the browser and version in JavaScript A brief journey into the dangerous world of user agent sniffing.
May 12, 2020
Logging with Eleventy and Nunjucks Adding a simple filter to save you a lot of grief.
May 11, 2020
Store readable data When forced between storing data for humans or computers, choose the former.
April 15, 2020
How to open the Dev Tools A comprehensive guide for opening the dev tools in Chrome and Firefox.
April 14, 2020
Tools for custom Slack emojis The full toolbelt for making your own custom Slack emojis.
March 20, 2020
Programming reads A list of articles, books, and resources for software engineers.
February 17, 2020
Free to grow Why tests (should) free you to grow with confidence.
February 6, 2020
How to check npm scripts in current directory Writing a script to read the package.json for you.
February 3, 2020
How to remove duplicates from an object array? Not as easy as we'd like it, but not as hard as it could be.
January 31, 2020
Write a draft script for your SSG blog Easily spin up a new article when you don't have a CMS.
January 13, 2020
What default parameters do (and don't do) Correcting my mental model.
November 26, 2019
"Stop Teaching Code" in JavaScript A quick review of Jeff Olson's article on teaching code with translated examples.
November 25, 2019
5 Lessons from 10k open-source downloads A few things I've learned from managing a modestly popular open-source package.
September 11, 2019
Should I snapshot my UI components? The temptation is strong, but consider some of the tradeoffs.
August 23, 2019
Edit a previous commit message The steps to edit recent or ancient commit messages.
July 30, 2019
Arguments or parameters? An attempt to remember the difference between the two.
May 10, 2019
Add event listener for class change How to create a custom event listener for class names using the MutationObserver API.
April 12, 2019
Storing data in state vs. class variable Why do we store data in state as opposed to on the class?
April 8, 2019
Filter out premium Medium articles Using a console script to alter the content on a webpage.
March 4, 2019
Adding accessibility checks to your React app A few tools to help you build more accessible React applications.
February 21, 2019
Three reasons to learn Python A few reasons why you should learn Python.
February 11, 2019
JS Basics: Generate a random number Using JavaScript's Math object to generate random numbers.
February 8, 2019
JS Basics: Ternary Operator Demystifying the inline if statement.
February 6, 2019
Convert class components to functions with React Hooks A step by step guide to converting old components to modern React.
February 6, 2019
Accessibility Wednesday Learning and sharing about accessibility for everyone.
October 9, 2018
How to create a render prop component Render props are a popular technique in modern React, but they can be tricky. Here is a brief explanation and guide to creating your own.