Mike Myers does not seem to use his iconic Scottish accent for the line "It's on my to-do list!"
Articles
Search with cmd/ctrl + f, use site search, browse by tag, or try a random article.
We know how to pronounce "er", "her", and "pher", so why is it hard to pronounce "McPherson"?
Our older son struggled with training wheels, but after switching to a balance bike he and his younger brother learned in no time.
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.
To dissuade drivers from speeding down my neighborhood street, I make the choice to smile and wave at them.
Pittsburgh TechFest 2024 was a good experience and valuable opportunity to connect with the local tech scene
The new majority shareholders of Inverness Caledonian Thistle FC are passing sponsored content off as an award from the Independent
Adding a little chaos to spellcasting in your adventure games (TTRPGs)
Adding a space to the end of the prompt text appears to be a workaround for this error
When you need to reference the previous state, pass a callback function to React's setState.
Issues and solutions for my VIVO sit/stand desk
Fonts (typefaces) that I like and where to find them
Event delegation is a useful pattern for managing descendant interactions and Element.closest helps with simple and robust code
You can use colons in the header row separator to align content in a Markdown table
A starter-package table for Cairn based on Into the Odd.
Resources and more for Cairn, the rules-light tabletop roleplaying game
Latin phrases that are good to know
General recommendations for creating five-room dungeons for your adventure games
The best prompts for playing adventure games alone with AI
It's not quite ready for production use, but we are very close to getting native CSS nesting
Eleventy is looking better and better as an alternative to Astro for simple or long-lived websites
The missing getting-started guide for the Eleventy (11ty) static-site generator.
Resources for table-top adventure games
When asked, ChatGPT provides sources but they don't contain the information provided
Astro is a great framework, but it's frequent updates are overwhelming
Renders are called top-down, but effects are called bottom-up.
Resources on debugging
A new way to visualize garden details
Documenting this site
Take a minute to review all photos from today's date and delete the ones you don't need
tl;dr I removed dark mode, `/contact`, likes, analytics, Netlify, and changed random articles
Some things that I value for personal sites.
Measuring twice, cut once is good advice for woodworking but maybe not for software engineering
A collaborative interactive, Toto on ocarina, a word-based strategy game, and a classic infinite runner
A personal apologetic, assessing the world, Scotland's rainforests, and finding new music
A pink lake in Senegal, an Indian community that solved drought, and the strange origin of Idaho's name.
A high-level overview of why and how I built a URL-powered fuzzy search feature for this site
Astro generated CSS files start with an underscore which causes them to be ignored by GitHub Pages
Using the Navigator's onLine property and online/offline events to create a custom React hook
I needed to change the name of the exported function and make sure that it was returning a Response or Promise<Response>.
I needed to update dependencies, change a client directive, and then update configuration in Netlify
A reflection on silence contemplation, the art of bookmaking, semantic satiation, and soccer logo design
Thoughts on avoiding then embracing the word "blog"
Tree mails, disappearing cockroaches, and an entry in the game dev log genre
Edge has all of the features of Chrome with some additional features
I switched for performance reasons on an older device, and so far Linux Mint seems to be an improvement
7 million syllabi, trash bag testing, a skeleton gardener, and jokes that probably aren't that funny.
Reflections on digital waste, a great green wall, beautiful illuminations, and a fun trivia game
You can run Ollama on an older device, but the response will be slow and/or low quality.
Get started working with AI, Ollama, and large-language models in four steps
A quick reference guide for working in Python
Handwriting research, medieval fighting snails, wholesome comics, and banana price projections
Ollama makes it easy to run LLMs locally and provides experimental compatibility with OpenAI's APIs
After a recommendation from Syntax.fm, I added a public page to see all of the components that I’ve created for this site
My experiences after one week of building a game with my kids using Kaboom.js
An investigation in remote Madagascar, Parkinson's Law, writing letters to your future self, and a live shark tracker.
The Japanese art of repair, a movie/TV recommendation service, a relaxing gardening game, and answering the question "Can elephants swim?"
To create an Adobe account, you are required to count the value of a pile of dice 120 times
Reflections on creation, the NFL's success, a map of lightning strikes, and Chester A. Arthur holding ham.
I've started receiving cold-emails from maintainers after starring a repository on GitHub, and I don't like it.
An app to help you travel, dispelling an American myth, reflection on creation, and a game that will make your head spin.
When given a simple prompt, OpenAI's Web Browser GPT seems to leak its prompt.
I was able to transfer two domains from Google to Porkbun without any issues or downtime
By transforming your data into a consistent structure, you can reduce the complexity of your code
Chat GPT and Khanmigo join Copilot in the regular category this month
A great tool that gets out of the way when creating slides
Using a single file seems to reduce response times, but there is more to the story
As of November 15, 2023, the limit is 10 files.
GitHub Copilot is still the most popular, but I found myself using ChatGPT more frequently in October.
Use text files instead of markdown with OpenAI’s custom GPTs
Browser native text-to-speech is neat, but it lacks the polish that most users expect
Maxi Ferreira in Frontend At Scale on how declarative code can reduce cognitive load.
#divtober seems like a fun alternative to Hacktoberfest for October
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
JavaScript's Proxy object can be used to watch an object and respond whenever any of its properties are accessed or reassigned
Using sets to de-dupe arrays of primitive and object-like values
My first born starts Kindergarten today and boy am I going to miss him
This article marks the 1000th commit to this website's repository
Some more competitors are entering the ring, but GitHub Copilot remains the only AI-powered product that I use regularly
In order to maximize the value of types and your time, consider timeboxing the amount of time that you spend writing any given type
The columns property is CSS divides content among a set number or width of columns
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
A list of software-engineering focused writing prompts to help programmers get started writing
The default GNOME emoji picker is limited to certain applications, but you can find copyable emojis in the Activities view
This year started strong on writing, but I have found little motivation recently
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
GitHub Copilot has pulled away from the rest as the only AI product/service that I use regularly
A growing list of artists that I like to listen to while programming.
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
A list of some of my favorite podcasts
Despite being a regular listener, I am unable to review podcasts
A garden all about VS Code
You could use an Object, but Maps are probably best for lookup tables and WeakMaps are useful for memory performance
Chrome, Edge, Firefox, and Safari all have built-in accessibility tools to help you create accessible experiences for all
After experimenting with Linux last year, I am happily using Ubuntu on a Lenovo Yoga as my personal computer
GitHub Copilot is the top product this month, but Bard, Bing, ChatGPT, and Warp all have their uses
You can declare variables with var, :=, and const depending on your use case
Nullish values are null and undefined, and it's important to thing of them separately from falsy values
Everyone on the product team should ask verifying, discovery, and critical questions to ensure quality
Learning the Go programming language for professionanl development has been an enjoyable experience
Decap CMS is the official successor to Netlify CMS and works well with the old tooling.
Zed is a new Rust-powered editor by the creator of Atom that focuses on speed but lacks a lot of features
To get a boilerplate Fastify app to deploy on Render.com, you need to read to listen on PORT environment variable
Create Regex groups with parentheses for powerful find/replace patterns
Safari 16 has trouble with CSS animations on SVG child elements, but you can resolve them by using a combined transform property.
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
Thanks to Netlify Analytics I know to focus on writing how-to articles, but it has less data than I hoped
We can use inline blocks to bring subheadings on the same line as the following text while preserving the visual spacing
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
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
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
I can publish an article exclusively to the RSS feed with a special flag in the frontmatter
Closings are lovely in letters but unnecessary online. I'm going to try to omit closings from my articles.
Can I write articles in five minutes that are worth my and my reader's time? I don't know, but I think it's worth exploring.
The process involves mostly manual steps, and I am looking for a better solution.
Axios co-founder Jim VandeHei advocates for a writing style that is clear and concise. I'm interested in learning whether I can provide more value through direct and informative writing.
Mathias Bynen has a handy tool for determining what characters are allowed in a JS variable name
Burrito means thank you. Thank you means burrito. Enjoy the burrito.
A little write-up about my migration from Fosstodon to IndieWeb.social
The Qwik team has made creating and publish Qwik components a smooth and painless process.
The issue for me was calling useCollection on an entry with a layout.
An unordered list of things that I would like to change about this site in 2023.
Reflecting on taking a break for all of January 2023
JavaScript's parseInt, parseFloat, and Number constructors struggle with comma-separated number strings.
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.
I don't know how applicable this solution will be to your situation, but it worked for me!
I went through the process of adding images back to my articles with a helpful script to automate image processing for me.
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.
Documenting my first attempt at switching from Netlify CMS to Static CMS
Props are merged, but attributes are not. This is an important rule to know when authoring Astro components.
The npm-run-all package allows you to run multiple scripts from your package.json in parallel
You need to include additional properties in your netlify.toml to get it working correctly.
Announcing astro-netlify-components, a library for using Netlify features in your Astro projects.
A little code walk through a the new Activity Graph on my homepage.
A quick guide on using an Astro endpoint to generate the webfinger you need to use your domain on Mastodon.
Steve Jobs had some opinions on consulting, and it sparked a few thoughts of my own. What makes a valuable consultant? Experience.
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?
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!
Detailing some of the struggles that I've encountered while trying to do front-end development on a Raspberry Pi.
After a lot of trial an error, I settled on Raspberry Pi OS and Firefox for my little Linux-powered computer.
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.
A curated list of helpful browser extensions.
A curated list of helpful browser extensions.
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.
Detailing why and how I rebuilt this site with Astro.
A growing list of little things that make working with Jest a little better
A growing list of little things that make working with Jest a little better
A curated list of great extensions that might fly under your radar
Disable enhanced tracking protections to use StackBlitz with Firefox
A drop-in replacement for Math.random that generates cryptographically strong random values
A write-up on the new star feature on seanmcp.com
With specialized profiles, you can help identify issues without messing with your favorite settings.
The memo higher-order component can prevent your component for re-rendering unnecessarily, but you should use caution before using it
A little tool to calculate 5 + 4 + 3 + 2 + 1
A tool to look up common words by their consonant-vowel pattern and resources for the rest
A growing list of artists that I like to listen to while programming.
Walking through the steps within the Google Chrome dev tools to better mimic your users' devices.
Make sure the you are using Node.js version 12 or later
How to make a custom web component with only a few lines of code
A clever extension can prevent Google Meet from muting your bluetooth microphone
A curated list of the best reaction emojis that I have created for Slack
A curated list of the best reaction emojis that I have created for Slack
Features and examples for some of the tools that I use to create illustrations and diagrams
An brief explanation of Gradle and build.gradle files for JavaScript developers
Turtle Guide, Paint Pig, and Spotlight all help children build computer literacy
A growing list of terms you need to recognize when working in React Native
A growing list of terms you need to recognize when working in React Native
Why you won't be installing any community packages on your next React Native project
How to find a simulator ID using the Xcode UI or terminal
A quick how-to without committing to whether it's a good idea or not
Moving into mobile development at Niche and looking back on how I got here
Hermes is a JavaScript engine that is designed to run on mobile devices. It helps power React Native on Android – and now iOS – devices.
A quick guide to writing a time-saving shortcode to create the embeddable code from a YouTube url
Using the Google app's music recognition feature, I was able to identify the song as "Banana" by Stony Pony
Writing a little helper function to grab the HTML of all children of a shallow wrapper in Enzyme
The missing "hello world" example to get up and running with remark
Although JS treats them like object, finding the methods of a class programmatically is trickier than I thought.
Freshening up SeanMcP.com for the new year
Permanently moved to gardens
A garden all about Git
A curated collection of git commands that help me do my job better
How to use URLSearchParams to parse any search parameters string like window.location.search
Make sure that the path to your font is correct before going down the debugging rabbit hole.
Make sure that your configuration file is being copied to the destination directory.
A one liner to copy the last commit hash to the clipboard on a Mac
Recording my experience contracting COVID-19 in 2020
A guide to using the eleventy-plugin-heroicons package in your Eleventy projects
Build your very own shortener in six quick steps
You can use an HTML expression to add valid markup to an element
Some resources and guides for making browser add-ons/extensions
Proposing an alternative, more constructive idiom to "there's more than one way to skin a cat"
A terminal command to search for all the files in the current directory that contain two independent strings.
This is a WIP that I probably will never finish.
Not a true fix, but a decent workaround when paginating collections in Eleventy
When building something new, get your foundation in place before building upon it.
How to create a shortcode to expose data for client-side scripts
Using a git shorthand to checkout the most recent branch
Using the Required utility type to required all properties of a type
Using a shell script to add a line to every file with a given extension
A little Bash script to rename all files from `.jsx` to `.tsx`
A simple solution to stop Sass from transparent hsla colors to opaque hex colors.
Since audio and video are native HTML elements, you can change the playing speed with a quick console script
How to use npm view to see all the published versions of a package on the registry.
Two CSS properties that make letters and numbers the same width.
TypeScript provides valuable features but complicate the development process. What are some alternatives that provide the features without the headache?
Simulating your web pages on Apple devices is easy with Safari's responsive design mode
This is a WIP that I probably will never finish.
A sample POST with fetch for those of us who can never remember how.
Sidestep slicing and splicing and use Array's filter method for a no-hassle solution.
This is a WIP that I probably will never finish.
For some unknown reason, you need to enable tab highlighting in the browser's settings.
This is a WIP that I probably will never finish.
When trying to run Jest in watch mode, this error may mean that you are missing a dependency.
Demand inelasticity in web development, why its bad, and what we can do about it.
Reviewing and updating my TypeScript mega-course on Egghead.io
Why developers should rely on markets to make the best decisions for their product
Using Deno's environment to determine your computer's home directory
This is a WIP that I probably will never finish.
How developers can reduce opportunity costs and avoid the sunk-cost fallacy
An organized approach to debugging your code
An organized approach to debugging your code
Introducing a new series on how economics helps explain the decisions we make when developing software
Denon is a utility for Deno that provides source watching and process restarting just like Nodemon
How the right design and process for sourcing images made all the difference for me
Using Deno's standard flags module to parse command-line arguments with aliases
By calling your asynchronous functions before awaiting, you can save valuable time in your JavaScript programs
Creating a playlist to learn TypeScript
Lessons learned from publishing six videos on YouTube
How to use Deno's standard library to read and parse data from a json file.
How to use Node.js's file system to read and parse data from a json file.
Why I started a YouTube channel and what I learned in the process
A brief journey into the dangerous world of user agent sniffing
Adding a simple filter to save you a lot of grief.
When forced between storing data for humans or computers, choose the former.
A list of articles, topics, and resources that are currently over my head
Some notes from the talks that I was able to attend
A comprehensive guide for opening the dev tools in Chrome and Firefox
This is a WIP that I probably will never finish.
The full toolbelt for making your own custom Slack emojis
A list of articles, books, and resources for software engineers
A list of articles, books, and resources for software engineers
Why tests (should) free you to grow with confidence
Writing a script to read the package.json for you
Not as easy as we'd like it, but not as hard as it could be
This is a WIP that I probably will never finish.
Easily spin up a new article when you don't have a CMS
Kicking off 2020 with (yet another) new handle
Correcting my mental model
Reflecting on last year while looking forward the next
Checking in on the goals I set for myself in 2019
This is a WIP that I probably will never finish.
A quick review of Jeff Olson's article on teaching code with translated examples
A few things I've learned from managing a modestly popular open-source package.
The temptation is strong, but consider some of the tradeoffs.
Some notes and thoughts from Pittsburgh's cross-discipline software conference
The steps to edit recent or ancient commit messages
An attempt to remember the difference between the two
This is a WIP that I probably will never finish.
A guide to pronounce my often-mispronounced name
How to create a custom event listener for class names using the MutationObserver API
Why do we store data in state as opposed to on the class?
This is a WIP that I probably will never finish.
Using a console script to alter the content on a webpage
A few tools to help you build more accessible React applications
A few reasons why you should learn Python.
Using JavaScript's Math object to generate random numbers
Demystifying the inline if statement
Learning and sharing about accessibility for everyone
A step by step guide to converting old components to modern React
Reflecting on last year while looking forward to next
An effort to preserve my content on the ever-changing web
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.