Feed
All content on seanmcp.com
-
What is VS Code doing?VS Code broke Intellisense and started misattributing commits to Copilot. I fear for the future of my once-favorite editor.
-
Silent SequenceA cooperative card game where players must place all of the cards in order without speaking.
-
Atom SmasherAn educational chemical-compound-building card game
-
A premature review of Maul: Shadow LordDisney has tried to split the difference between a kid's show and an adult's show and ended with something that doesn't appeal to either.
-
Town advancement, part 2Captivated by the idea, I explore the required components of a town-advancement system.
-
Town advancementPlayer advancement is one thing, but what if towns could grow in RPGs as well?
-
Reorganizing the site into CategoriesI have divided content into four Categories to enable each to have a unique experience.
-
Defaults 2026A list of the default apps that I use in 2026.
-
AI use case: Asking questions of large filesWhen file search isn't enough to surface answers, using an LLM to ask questions of large files is a valuable use case for AI.
-
I tried mapping and didn't like itMapping sounds fun but the reality is tedium that draws players out of the story. Next time I'll try reviewing the map one room at a time.
-
Cairn Advancement HackAn additive hack for Cairn that enables characters to grow through failed attribute saves.
-
Lost Stranger Things finale mid-credits sceneA totally-authentic screenplay discovered on a doorstep on New Year's Eve.
-
Random Table of German NamesA random table of 200 German-sounding names for boys and girls. Useful for generating names for player characters in a game or story, or for naming your next child!
-
Install curl with apt (and not snap)When trying to install Node, I encountered an issue that was resolved by installed curl with apt.
-
GM Mistake #2: Blocking low-stakes explorationIf a player wants to explore and the stakes are low, then let them do it. It's good for morale and the game.
-
Four perspectives on AII 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.
-
Axe DevTools doesn't flag multiple h1 elements on a pageRendering 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.
-
Writing code was never the bottleneck in software engineeringIn "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.
-
Shadowdark characters are fragileIf you don't treat low-level Shadowdark characters with care, they will die.
-
Cairn 1999A Cairn RPG hack inspired by Stranger Things and set in a small Pennsylvania town in the late 1990s.
-
Dog PooAxioms for home-owners and dog-owners to live peacefully together.
-
Colocate functionally-related codeMy preference is to colocate code based on functional relation–what it does–and not domain relation–what it is.
-
Maccy is a great clipboard manager for MacMaccy has improved the way that I work. What more can you ask for in a free tool?
-
Hazard tableA d6 hazard table lightly edited from the Necropraxis Productions Hazard System.
-
5 tips for designing better adventuresGood adventures have an objective, a reason, a location, a time limit, and a villain.
-
Kellen Lovejoy presumptive winner in primary election for Wilkinsburg Council Ward 1Kellen Lovejoy is the presumptive winner of the Democratic-Party primary for Wilkinsburg Council Ward 1, defeating incumbent Council President William Smith III. Final election results will be posted on Friday, May 23.
-
The Copper CavesA simple dungeon-crawling setting for table-top role-playing games like Dungeons and Dragons.
-
GM Mistakes #1: Balancing Realism and PlayabilityA lesson in balancing realism and playability in your adventure games.
-
Rethinking wolvesSubverting the trope of villainous wolves from folklore for your adventure games.
-
SoloDark Together: Session 1Retelling the first session playing the SoloDark rules for Shadowdark with two players.
-
My on-again-off-again relationship with AI assistantsI keep subscribing to and canceling AI assistant plans without finding lasting value.
-
What to do when you find a dead deer on the street in Allegheny County?Roadkill on state roads are disposed of by PennDOT.
-
Introducing Speed CatanI like Settlers of Catan... in theory. But in practice it needs some changes to make it fun for everyone.
-
Speed CatanSpeed Catan is a variation of the popular board game Catan that emphasizes game speed and simplicity for younger (or impatient) players.
-
Random EncountersResources for adding random encounters to your adventure.
-
Zed still isn't readyZed is a nice light-weight editor, but the slow searching and memory issues make it a non-option for my work.
-
Rewriting in Eleventy (again)Why I rewrote this site with Eleventy after a two-year sojourn with Astro.
-
The only line from Shrek with a Canadian accentMike Myers does not seem to use his iconic Scottish accent for the line "It's on my to-do list!".
-
Mc-Pher-sonWe know how to pronounce "er", "her", and "pher", so why is it hard to pronounce "McPherson"?
-
Balance bikes are just betterOur older son struggled with training wheels, but after switching to a balance bike he and his younger brother learned in no time.
-
Deleting my GPTsGPTs provided little value to me now, little potential value in the future, and were the only thing locking me in my Open AI subscription.
-
Smile and waveTo dissuade drivers from speeding down my neighborhood street, I make the choice to smile and wave at them.
-
Pittsburgh TechFest 2024Pittsburgh TechFest 2024 was a good experience and valuable opportunity to connect with the local tech scene.
-
Seventy7 Ventures feigns credibility with fake "Best of British Business" awardThe new majority shareholders of Inverness Caledonian Thistle FC are passing sponsored content off as an award from the Independent.
-
Spellcasting Chaos TableAdding a little chaos to spellcasting in your adventure games (TTRPGs).
-
Bypass "Error: There are no prompts" in promptfooAdding a space to the end of the prompt text appears to be a workaround for this error.
-
Use state callbacks in ReactWhen you need to reference the previous state, pass a callback function to React's setState.
-
VIVO sit/stand deskIssues and solutions for my VIVO sit/stand desk.
-
Simplify event delegation with the Element.closest methodEvent delegation is a useful pattern for managing descendant interactions and Element.closest helps with simple and robust code.
-
Align content in Markdown tablesYou can use colons in the header row separator to align content in a Markdown table.
-
Cairn Starter-package TableA starter-package table for Cairn based on Into the Odd.
-
Five-room DungeonsGeneral recommendations for creating five-room dungeons for your adventure games.
-
CSS nesting is (almost) readyIt's not quite ready for production use, but we are very close to getting native CSS nesting.
-
Looking over the fence at EleventyEleventy is looking better and better as an alternative to Astro for simple or long-lived websites.
-
Getting started with EleventyThe missing getting-started guide for the Eleventy (11ty) static-site generator.
-
ChatGPT 4o isn't a good researcher yetWhen asked, ChatGPT provides sources but they don't contain the information provided.
-
Astro and release velocityAstro is a great framework, but it's frequent updates are overwhelming.
-
Render and effect call order in ReactRenders are called top-down, but effects are called bottom-up.
-
Cairn RPGResources and more for Cairn, the rules-light tabletop roleplaying game.
-
Manage your photo archiveTake a minute to review all photos from today's date and delete the ones you don't need.
-
Site update May 2024tl;dr I removed dark mode, `/contact`, likes, analytics, Netlify, and changed random articles.
-
Measuring and cuttingMeasuring twice, cut once is good advice for woodworking but maybe not for software engineering.
-
A Few Things #12A collaborative interactive, Toto on ocarina, a word-based strategy game, and a classic infinite runner.
-
A Few Things #11A personal apologetic, assessing the world, Scotland's rainforests, and finding new music.
-
A Few Things #10A pink lake in Senegal, an Indian community that solved drought, and the strange origin of Idaho's name.
-
Create a custom search for a static siteA high-level overview of why and how I built a URL-powered fuzzy search feature for this site.
-
Fix missing Astro files on GitHub pagesAstro generated CSS files start with an underscore which causes them to be ignored by GitHub Pages.
-
Create a useIsOnline React hookUsing the Navigator's onLine property and online/offline events to create a custom React hook.
-
Fix static file endpoints after Astro v4 upgradeI needed to change the name of the exported function and make sure that it was returning a Response or Promise
. -
Upgrading from Astro v2 to v4I needed to update dependencies, change a client directive, and then update configuration in Netlify.
-
A Few Things #9A reflection on silence contemplation, the art of bookmaking, semantic satiation, and soccer logo design.
-
On articles and blogsThoughts on avoiding then embracing the word "blog".
-
A Few Things #8Tree mails, disappearing cockroaches, and an entry in the game dev log genre.
-
Why Microsoft Edge?Edge has all of the features of Chrome with some additional features.
-
Switching from Ubuntu to Linux MintI switched for performance reasons on an older device, and so far Linux Mint seems to be an improvement.
-
A Few Things #77 million syllabi, trash bag testing, a skeleton gardener, and jokes that probably aren't that funny.
-
A Few Things #6Reflections on digital waste, a great green wall, beautiful illuminations, and a fun trivia game.
-
Running Ollama without a GPUYou can run Ollama on an older device, but the response will be slow and/or low quality.
-
Use Ollama with the official Python libraryGet started working with AI, Ollama, and large-language models in four steps.
-
A Few Things #5Handwriting research, medieval fighting snails, wholesome comics, and banana price projections.
-
Get started prompt engineering with local LLMsOllama makes it easy to run LLMs locally and provides experimental compatibility with OpenAI's APIs.
-
Adding a components pageAfter a recommendation from Syntax.fm, I added a public page to see all of the components that I’ve created for this site.
-
Making a video game with my kidsMy experiences after one week of building a game with my kids using Kaboom.js.
-
A Few Things #4An investigation in remote Madagascar, Parkinson's Law, writing letters to your future self, and a live shark tracker.
-
Python ReferenceA quick reference guide for working in Python.
-
A Few Things #3The Japanese art of repair, a movie/TV recommendation service, a relaxing gardening game, and answering the question "Can elephants swim?".
-
Adobe has the worst captchaTo create an Adobe account, you are required to count the value of a pile of dice 120 times.
-
A Few Things #2Reflections on creation, the NFL's success, a map of lightning strikes, and Chester A. Arthur holding ham.
-
Receiving cold-emails from GitHub starsI've started receiving cold-emails from maintainers after starring a repository on GitHub, and I don't like it.
-
A Few Things #1An app to help you travel, dispelling an American myth, reflection on creation, and a game that will make your head spin.
-
Did OpenAI's Web Browser GPT leak its prompt?When given a simple prompt, OpenAI's Web Browser GPT seems to leak its prompt.
-
Migrating from Google Domains to Porkbun was...I was able to transfer two domains from Google to Porkbun without any issues or downtime.
-
Normalizing data is a good ideaBy transforming your data into a consistent structure, you can reduce the complexity of your code.
-
How I'm using AI in November 2023Chat GPT and Khanmigo join Copilot in the regular category this month.
-
Sli.dev reviewA great tool that gets out of the way when creating slides.
-
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.
-
What is the file limit for GTPs?As of November 15, 2023, the limit is 10 files.
-
How I'm using AI in October 2023GitHub Copilot is still the most popular, but I found myself using ChatGPT more frequently in October.
-
GPTs read text files better than markdownUse text files instead of markdown with OpenAI’s custom GPTs.
-
Thoughts on Web Speech APIBrowser native text-to-speech is neat, but it lacks the polish that most users expect.
-
Declarative code and cognitive loadMaxi Ferreira in Frontend At Scale on how declarative code can reduce cognitive load.
-
How I'm using AI in August & September 2023GitHub 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.
-
See what object properties are accessed in JavaScriptJavaScript's Proxy object can be used to watch an object and respond whenever any of its properties are accessed or reassigned.
-
Remove duplicates from an array in JavaScriptUsing sets to de-dupe arrays of primitive and object-like values.
-
Off to KindergartenMy first born starts Kindergarten today and boy am I going to miss him.
-
1000 commitsThis article marks the 1000th commit to this website's repository.
-
How I'm using AI in July 2023Some more competitors are entering the ring, but GitHub Copilot remains the only AI-powered product that I use regularly.
-
Timeboxing typesIn order to maximize the value of types and your time, consider timeboxing the amount of time that you spend writing any given type.
-
CSS columns are neatThe columns property is CSS divides content among a set number or width of columns.
-
Quality requires iterationYou'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 workable emoji picker on UbuntuThe default GNOME emoji picker is limited to certain applications, but you can find copyable emojis in the Activities view.
-
Writing Prompts for ProgrammersA list of software-engineering focused writing prompts to help programmers get started writing.
-
Losing steamThis year started strong on writing, but I have found little motivation recently.
-
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.
-
How I'm Using AI in June 2023GitHub Copilot has pulled away from the rest as the only AI product/service that I use regularly.
-
A quick comparison of JavaScript and Go executablesGo 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.
-
I have never reviewed a podcastDespite being a regular listener, I am unable to review podcasts.
-
Compairing Objects, Maps, and WeakMaps for lookup tables in JavaScriptYou could use an Object, but Maps are probably best for lookup tables and WeakMaps are useful for memory performance.
-
Web-browser Accessibility ToolsChrome, Edge, Firefox, and Safari all have built-in accessibility tools to help you create accessible experiences for all.
-
Linux Update in 2023After experimenting with Linux last year, I am happily using Ubuntu on a Lenovo Yoga as my personal computer.
-
How I'm using AI in May 2023GitHub Copilot is the top product this month, but Bard, Bing, ChatGPT, and Warp all have their uses.
-
Declaring variables in GoYou can declare variables with var, :=, and const depending on your use case.
-
What is nullish in JavaScript?Nullish values are null and undefined, and it's important to thing of them separately from falsy values.
-
QA questions for everyone to askEveryone on the product team should ask verifying, discovery, and critical questions to ensure quality.
-
Learning GoLearning the Go programming language for professionanl development has been an enjoyable experience.
-
Set up Decap CMSDecap CMS is the official successor to Netlify CMS and works well with the old tooling.
-
Sanders of CatanSanders of Catan is a variation of the popular board game Catan that emphasizes game speed and competition, with a little bit of political humor.
-
Zed is a rocket-powered skateboardZed is a new Rust-powered editor by the creator of Atom that focuses on speed but lacks a lot of features.
-
Fix failed Fastify deploy on RenderTo get a boilerplate Fastify app to deploy on Render.com, you need to read to listen on PORT environment variable.
-
Find and replace with Regex groupsCreate Regex groups with parentheses for powerful find/replace patterns.
-
Fix SVG CSS animation issue in SafariSafari 16 has trouble with CSS animations on SVG child elements, but you can resolve them by using a combined transform property.
-
Listen for class change in JavaScriptThere 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.
-
Reviewing my Netlify AnalyticsThanks to Netlify Analytics I know to focus on writing how-to articles, but it has less data than I hoped.
-
Create Axios-style articles with CSSWe can use inline blocks to bring subheadings on the same line as the following text while preserving the visual spacing.
-
CSS :empty pseudo classEmpty elements in a flex or grid container can result in double gaps, but CSS has an pseudo class to select and remove those elements.
-
Fix trailing whitespace in Astro componentsThere 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.
-
Farewell Create React AppThe React team is looking to transition Create React App from a project scaffold to a launcher that includes options other than client-side rendering.
-
Starting an RSS ClubI can publish an article exclusively to the RSS feed with a special flag in the frontmatter.
-
On closingsClosings are lovely in letters but unnecessary online. I'm going to try to omit closings from my articles.
-
How long should it take to write an article?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.
-
My writing process in February 2023The process involves mostly manual steps, and I am looking for a better solution.
-
Learning about Smart Brevity for writingAxios 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.
-
Valid JavaScript variable namesMathias Bynen has a handy tool for determining what characters are allowed in a JS variable name.
-
Burrito emojiBurrito means thank you. Thank you means burrito. Enjoy the burrito.
-
Migrating to IndieWeb.socialA little write-up about my migration from Fosstodon to IndieWeb.social.
-
Publishing a Qwik componentThe Qwik team has made creating and publish Qwik components a smooth and painless process.
-
Fix Astro dev server hanging with new collections APIThe issue for me was calling useCollection on an entry with a layout.
-
Site improvements in 2023An unordered list of things that I would like to change about this site in 2023.
-
Back from time offReflecting on taking a break for all of January 2023.
-
Be careful parsing formatted numbers in JavaScriptJavaScript's parseInt, parseFloat, and Number constructors struggle with comma-separated number strings.
-
New command paletteI 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.
-
Fix "package esbuild-linux-64 could not be found" error on NetlifyI don't know how applicable this solution will be to your situation, but it worked for me!
-
Adding images to articles (again)I went through the process of adding images back to my articles with a helpful script to automate image processing for me.
-
Portable custom search enginesCustom 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.
-
A first look at Static CMS with AstroDocumenting my first attempt at switching from Netlify CMS to Static CMS.
-
Astro components do not merge HTML attributesProps are merged, but attributes are not. This is an important rule to know when authoring Astro components.
-
Run Netlify CMS and your dev server in one commandThe npm-run-all package allows you to run multiple scripts from your package.json in parallel.
-
Fix Netlify Dev's 'Multiple possible start commands found' issueYou need to include additional properties in your netlify.toml to get it working correctly.
-
Astro components for Netlify featuresAnnouncing astro-netlify-components, a library for using Netlify features in your Astro projects.
-
Create a "Dave Rupert"-inspired activity graphA little code walk through a the new Activity Graph on my homepage.
-
Use your domain on Mastodon with AstroA quick guide on using an Astro endpoint to generate the webfinger you need to use your domain on Mastodon.
-
Thoughts on Steve Job on consultingSteve Jobs had some opinions on consulting, and it sparked a few thoughts of my own. What makes a valuable consultant? Experience.
-
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?
-
Node.js is great for scriptingNode.js and JavaScript are a great option for scripting for the language features and the large ecosystem. Oh, and it's pretty fast too!
-
There is no multi-tasking on the Raspberry PiDetailing some of the struggles that I've encountered while trying to do front-end development on a Raspberry Pi.
-
Finding a Linux distro and software that workAfter a lot of trial an error, I settled on Raspberry Pi OS and Firefox for my little Linux-powered computer.
-
Giving Linux another tryIt'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.
-
Awesome browser extensionsA curated list of helpful browser extensions.
-
Using dynamic routes to organize blog posts in AstroIf 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.
-
Rebuilding with AstroDetailing why and how I rebuilt this site with Astro.
-
JestA growing list of little things that make working with Jest a little better.
-
How to use StackBlitz with FirefoxDisable enhanced tracking protections to use StackBlitz with Firefox.
-
How to replace Math.random with crypto in JavaScriptA drop-in replacement for Math.random that generates cryptographically strong random values.
-
Use multiple Chrome Profiles when debuggingWith specialized profiles, you can help identify issues without messing with your favorite settings.
-
When to use React's memo HOCThe memo higher-order component can prevent your component for re-rendering unnecessarily, but you should use caution before using it.
-
Calculate the sum of everything up to a given numberA little tool to calculate 5 + 4 + 3 + 2 + 1.
-
English words by consonant-vowel patternA tool to look up common words by their consonant-vowel pattern and resources for the rest.
-
Add a custom emulated device in ChromeWalking through the steps within the Google Chrome dev tools to better mimic your users' devices.
-
Upgrading an Eleventy site to 1.0.0Make sure the you are using Node.js version 12 or later.
-
Make a web componentHow to make a custom web component with only a few lines of code.
-
Prevent Chrome from adjusting audio input levels on MacA clever extension can prevent Google Meet from muting your bluetooth microphone.
-
Slack EmojisA curated list of the best reaction emojis that I have created for Slack.
-
Helpful online tools for diagrammingFeatures and examples for some of the tools that I use to create illustrations and diagrams.
-
What is a build.gradle file?An brief explanation of Gradle and build.gradle files for JavaScript developers.
-
Three new games on ToollamaTurtle Guide, Paint Pig, and Spotlight all help children build computer literacy.
-
React Native GlossaryA growing list of terms you need to recognize when working in React Native.
-
What happened to @react-native-community packages?Why you won't be installing any community packages on your next React Native project.
-
Find an iOS simulator identifierHow to find a simulator ID using the Xcode UI or terminal.
-
Using BEM names in React NativeA quick how-to without committing to whether it's a good idea or not.
-
Reflecting on a new roleMoving into mobile development at Niche and looking back on how I got here.
-
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.
-
What is the song from Boston Dynamic's Spot Launch video?Using the Google app's music recognition feature, I was able to identify the song as "Banana" by Stony Pony.
-
Add a YouTube-embedder shortcode to your Eleventy siteA quick guide to writing a time-saving shortcode to create the embeddable code from a YouTube url.
-
Get innerHTML of Enzyme wrapperWriting a little helper function to grab the HTML of all children of a shallow wrapper in Enzyme.
-
Use remark to covert markdown into HTMLThe missing "hello world" example to get up and running with remark.
-
Count class methods in JavaScriptAlthough JS treats them like object, finding the methods of a class programmatically is trickier than I thought.
-
A modest redesign for 2021Freshening up SeanMcP.com for the new year.
-
GitA practical resource for Git.
-
Read URL search parameters with JavaScriptHow to use URLSearchParams to parse any search parameters string like window.location.search.
-
Fix 'downloadable font: rejected by sanitizer' error in FirefoxMake sure that the path to your font is correct before going down the debugging rabbit hole.
-
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.
-
Copy the last git commit hash on macOSA one liner to copy the last commit hash to the clipboard on a Mac.
-
Add Heroicons to an Eleventy siteA guide to using the eleventy-plugin-heroicons package in your Eleventy projects.
-
Create a URL shortener with NetlifyBuild your very own shortener in six quick steps.
-
Set innerHTML of an element in SvelteYou can use an HTML expression to add valid markup to an element.
-
Let's stop skinning catsProposing an alternative, more constructive idiom to "there's more than one way to skin a cat".
-
Search all files for two stringsA terminal command to search for all the files in the current directory that contain two independent strings.
-
Fix "Error: Could not resolve pagination key in template data" in EleventyNot a true fix, but a decent workaround when paginating collections in Eleventy.
-
Geddes' Guide to CraftingWhen building something new, get your foundation in place before building upon it.
-
Send data to the window with EleventyHow to create a shortcode to expose data for client-side scripts.
-
Checkout the previous git branchUsing a git shorthand to checkout the most recent branch.
-
Make all properties required in TypeScriptUsing the Required utility type to required all properties of a type.
-
Add text to the beginning of every fileUsing a shell script to add a line to every file with a given extension.
-
Sass converts hsla to hex incorrectlyA simple solution to stop Sass from transparent hsla colors to opaque hex colors.
-
Increase the playback speed on any audio or video onlineSince audio and video are native HTML elements, you can change the playing speed with a quick console script.
-
Standardize character width with CSSTwo CSS properties that make letters and numbers the same width.
-
See all package versions in npm cliHow to use npm view to see all the published versions of a package on the registry.
-
TypeScript without TypeScriptTypeScript provides valuable features but complicate the development process. What are some alternatives that provide the features without the headache?
-
Emulate iPhone & iPad in SafariSimulating your web pages on Apple devices is easy with Safari's responsive design mode.
-
Make a POST request with fetchA sample POST with fetch for those of us who can never remember how.
-
Remove an item at a given index in JavaScriptSidestep slicing and splicing and use Array's filter method for a no-hassle solution.
-
Tab focus not working in Safari?For some unknown reason, you need to enable tab highlighting in the browser's settings.
-
Fix 'EMFILE: too many open files' error in JestWhen trying to run Jest in watch mode, this error may mean that you are missing a dependency.
-
Updated TypeScript mega-course on Egghead.ioReviewing and updating my TypeScript mega-course on Egghead.io.
-
Access the home directory in DenoUsing Deno's environment to determine your computer's home directory.
-
Before You DebugAn organized approach to debugging your code.
-
Before DebuggingAn organized approach to debugging your code.
-
Nodemon for DenoDenon is a utility for Deno that provides source watching and process restarting just like Nodemon.
-
Adding images to my articlesHow the right design and process for sourcing images made all the difference for me.
-
Parse argument aliases in DenoUsing Deno's standard flags module to parse command-line arguments with aliases.
-
Await multiple promises in JavaScriptBy calling your asynchronous functions before awaiting, you can save valuable time in your JavaScript programs.
-
TypeScript mega-course on Egghead.ioCreating a playlist to learn TypeScript.
-
Six video updateLessons learned from publishing six videos on YouTube.
-
Read a json file in DenoHow to use Deno's standard library to read and parse data from a json file.
-
Read a json file in Node.jsHow to use Node.js's file system to read and parse data from a json file.
-
Publishing my first YouTube videoWhy I started a YouTube channel and what I learned in the process.
-
How to get the browser and version in JavaScriptA brief journey into the dangerous world of user agent sniffing.
-
Logging with Eleventy and NunjucksAdding a simple filter to save you a lot of grief.
-
Store readable dataWhen forced between storing data for humans or computers, choose the former.
-
MagnoliaJS 2020 conference notesSome notes from the talks that I was able to attend.
-
How to open the Dev ToolsA comprehensive guide for opening the dev tools in Chrome and Firefox.
-
Tools for custom Slack emojisThe full toolbelt for making your own custom Slack emojis.
-
Programming readsA list of articles, books, and resources for software engineers.
-
Free to growWhy tests (should) free you to grow with confidence.
-
How to check npm scripts in current directoryWriting a script to read the package.json for you.
-
How to remove duplicates from an object array?Not as easy as we'd like it, but not as hard as it could be.
-
Write a draft script for your SSG blogEasily spin up a new article when you don't have a CMS.
-
A new Twitter handleKicking off 2020 with (yet another) new handle.
-
What default parameters do (and don't do)Correcting my mental model.
-
Reviewing 2019 goalsChecking in on the goals I set for myself in 2019.
-
"Stop Teaching Code" in JavaScriptA quick review of Jeff Olson's article on teaching code with translated examples.
-
5 Lessons from 10k open-source downloadsA few things I've learned from managing a modestly popular open-source package.
-
Should I snapshot my UI components?The temptation is strong, but consider some of the tradeoffs.
-
Lessons Learned at Abstractions 2019Some notes and thoughts from Pittsburgh's cross-discipline software conference.
-
Edit a previous commit messageThe steps to edit recent or ancient commit messages.
-
Arguments or parameters?An attempt to remember the difference between the two.
-
How to pronounce my nameA guide to pronounce my often-mispronounced name.
-
Add event listener for class changeHow to create a custom event listener for class names using the MutationObserver API.
-
Storing data in state vs. class variableWhy do we store data in state as opposed to on the class?
-
Filter out premium Medium articlesUsing a console script to alter the content on a webpage.
-
Adding accessibility checks to your React appA few tools to help you build more accessible React applications.
-
Three reasons to learn PythonA few reasons why you should learn Python.
-
JS Basics: Generate a random numberUsing JavaScript's Math object to generate random numbers.
-
JS Basics: Ternary OperatorDemystifying the inline if statement.
-
Convert class components to functions with React HooksA step by step guide to converting old components to modern React.
-
Accessibility WednesdayLearning and sharing about accessibility for everyone.
-
2018 into 2019Reflecting on last year while looking forward to next.
-
Why a blog?An effort to preserve my content on the ever-changing web.
-
How to create a render prop componentRender props are a popular technique in modern React, but they can be tricky. Here is a brief explanation and guide to creating your own.