sm

Feed

All content on seanmcp.com


  1. in Articles
    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.
  2. Silent Sequence
    A cooperative card game where players must place all of the cards in order without speaking.
  3. Atom Smasher
    An educational chemical-compound-building card game
  4. in Blog
    A premature review of Maul: Shadow Lord
    Disney 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.
  5. in RPGs
    Town advancement, part 2
    Captivated by the idea, I explore the required components of a town-advancement system.
  6. in RPGs
    Town advancement
    Player advancement is one thing, but what if towns could grow in RPGs as well?
  7. in Blog
    Reorganizing the site into Categories
    I have divided content into four Categories to enable each to have a unique experience.
  8. in Articles
    Defaults 2026
    A list of the default apps that I use in 2026.
  9. in Articles
    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.
  10. in RPGs
    I tried mapping and didn't like it
    Mapping 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.
  11. in RPGs
    Cairn Advancement Hack
    An additive hack for Cairn that enables characters to grow through failed attribute saves.
  12. in Blog
    Lost Stranger Things finale mid-credits scene
    A totally-authentic screenplay discovered on a doorstep on New Year's Eve.
  13. in RPGs
    Random Table of German Names
    A 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!
  14. in Articles
    Install curl with apt (and not snap)
    When trying to install Node, I encountered an issue that was resolved by installed curl with apt.
  15. in RPGs
    GM Mistake #2: Blocking low-stakes exploration
    If a player wants to explore and the stakes are low, then let them do it. It's good for morale and the game.
  16. in Articles
    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.
  17. in Articles
    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.
  18. in Articles
    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.
  19. in RPGs
    Shadowdark characters are fragile
    If you don't treat low-level Shadowdark characters with care, they will die.
  20. in RPGs
    Cairn 1999
    A Cairn RPG hack inspired by Stranger Things and set in a small Pennsylvania town in the late 1990s.
  21. in Blog
    Dog Poo
    Axioms for home-owners and dog-owners to live peacefully together.
  22. in Articles
    Colocate functionally-related code
    My preference is to colocate code based on functional relation–what it does–and not domain relation–what it is.
  23. in Blog
    Maccy is a great clipboard manager for Mac
    Maccy has improved the way that I work. What more can you ask for in a free tool?
  24. in RPGs
    Hazard table
    A d6 hazard table lightly edited from the Necropraxis Productions Hazard System.
  25. in RPGs
    5 tips for designing better adventures
    Good adventures have an objective, a reason, a location, a time limit, and a villain.
  26. in Blog
    Kellen Lovejoy presumptive winner in primary election for Wilkinsburg Council Ward 1
    Kellen 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.
  27. in RPGs
    The Copper Caves
    A simple dungeon-crawling setting for table-top role-playing games like Dungeons and Dragons.
  28. in RPGs
    GM Mistakes #1: Balancing Realism and Playability
    A lesson in balancing realism and playability in your adventure games.
  29. in RPGs
    Rethinking wolves
    Subverting the trope of villainous wolves from folklore for your adventure games.
  30. in RPGs
    SoloDark Together: Session 1
    Retelling the first session playing the SoloDark rules for Shadowdark with two players.
  31. in Articles
    My on-again-off-again relationship with AI assistants
    I keep subscribing to and canceling AI assistant plans without finding lasting value.
  32. in Blog
    What to do when you find a dead deer on the street in Allegheny County?
    Roadkill on state roads are disposed of by PennDOT.
  33. in Blog
    Introducing Speed Catan
    I like Settlers of Catan... in theory. But in practice it needs some changes to make it fun for everyone.
  34. Speed Catan
    Speed Catan is a variation of the popular board game Catan that emphasizes game speed and simplicity for younger (or impatient) players.
  35. in RPGs
    Random Encounters
    Resources for adding random encounters to your adventure.
  36. in Articles
    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.
  37. in Blog
    Rewriting in Eleventy (again)
    Why I rewrote this site with Eleventy after a two-year sojourn with Astro.
  38. in Blog
    The only line from Shrek with a Canadian accent
    Mike Myers does not seem to use his iconic Scottish accent for the line "It's on my to-do list!".
  39. in Blog
    Mc-Pher-son
    We know how to pronounce "er", "her", and "pher", so why is it hard to pronounce "McPherson"?
  40. in Blog
    Balance bikes are just better
    Our older son struggled with training wheels, but after switching to a balance bike he and his younger brother learned in no time.
  41. in Articles
    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.
  42. in Blog
    Smile and wave
    To dissuade drivers from speeding down my neighborhood street, I make the choice to smile and wave at them.
  43. in Articles
    Pittsburgh TechFest 2024
    Pittsburgh TechFest 2024 was a good experience and valuable opportunity to connect with the local tech scene.
  44. in Blog
    Seventy7 Ventures feigns credibility with fake "Best of British Business" award
    The new majority shareholders of Inverness Caledonian Thistle FC are passing sponsored content off as an award from the Independent.
  45. in RPGs
    Spellcasting Chaos Table
    Adding a little chaos to spellcasting in your adventure games (TTRPGs).
  46. in Articles
    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.
  47. in Articles
    Use state callbacks in React
    When you need to reference the previous state, pass a callback function to React's setState.
  48. in Articles
    VIVO sit/stand desk
    Issues and solutions for my VIVO sit/stand desk.
  49. in Articles
    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.
  50. in Articles
    Align content in Markdown tables
    You can use colons in the header row separator to align content in a Markdown table.
  51. in RPGs
    Cairn Starter-package Table
    A starter-package table for Cairn based on Into the Odd.
  52. in RPGs
    Five-room Dungeons
    General recommendations for creating five-room dungeons for your adventure games.
  53. in Articles
    CSS nesting is (almost) ready
    It's not quite ready for production use, but we are very close to getting native CSS nesting.
  54. in Articles
    Looking over the fence at Eleventy
    Eleventy is looking better and better as an alternative to Astro for simple or long-lived websites.
  55. in Articles
    Getting started with Eleventy
    The missing getting-started guide for the Eleventy (11ty) static-site generator.
  56. in Articles
    ChatGPT 4o isn't a good researcher yet
    When asked, ChatGPT provides sources but they don't contain the information provided.
  57. in Articles
    Astro and release velocity
    Astro is a great framework, but it's frequent updates are overwhelming.
  58. in Articles
    Render and effect call order in React
    Renders are called top-down, but effects are called bottom-up.
  59. in RPGs
    Cairn RPG
    Resources and more for Cairn, the rules-light tabletop roleplaying game.
  60. in Articles
    Manage your photo archive
    Take a minute to review all photos from today's date and delete the ones you don't need.
  61. in Blog
    Site update May 2024
    tl;dr I removed dark mode, `/contact`, likes, analytics, Netlify, and changed random articles.
  62. in Articles
    Measuring and cutting
    Measuring twice, cut once is good advice for woodworking but maybe not for software engineering.
  63. in Blog
    A Few Things #12
    A collaborative interactive, Toto on ocarina, a word-based strategy game, and a classic infinite runner.
  64. in Blog
    A Few Things #11
    A personal apologetic, assessing the world, Scotland's rainforests, and finding new music.
  65. in Blog
    A Few Things #10
    A pink lake in Senegal, an Indian community that solved drought, and the strange origin of Idaho's name.
  66. in Articles
    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.
  67. in Articles
    Fix missing Astro files on GitHub pages
    Astro generated CSS files start with an underscore which causes them to be ignored by GitHub Pages.
  68. in Articles
    Create a useIsOnline React hook
    Using the Navigator's onLine property and online/offline events to create a custom React hook.
  69. in Articles
    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.
  70. in Blog
    Upgrading from Astro v2 to v4
    I needed to update dependencies, change a client directive, and then update configuration in Netlify.
  71. in Blog
    A Few Things #9
    A reflection on silence contemplation, the art of bookmaking, semantic satiation, and soccer logo design.
  72. in Blog
    On articles and blogs
    Thoughts on avoiding then embracing the word "blog".
  73. in Blog
    A Few Things #8
    Tree mails, disappearing cockroaches, and an entry in the game dev log genre.
  74. in Articles
    Why Microsoft Edge?
    Edge has all of the features of Chrome with some additional features.
  75. in Articles
    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.
  76. in Blog
    A Few Things #7
    7 million syllabi, trash bag testing, a skeleton gardener, and jokes that probably aren't that funny.
  77. in Blog
    A Few Things #6
    Reflections on digital waste, a great green wall, beautiful illuminations, and a fun trivia game.
  78. in Articles
    Running Ollama without a GPU
    You can run Ollama on an older device, but the response will be slow and/or low quality.
  79. in Articles
    Use Ollama with the official Python library
    Get started working with AI, Ollama, and large-language models in four steps.
  80. in Blog
    A Few Things #5
    Handwriting research, medieval fighting snails, wholesome comics, and banana price projections.
  81. in Articles
    Get started prompt engineering with local LLMs
    Ollama makes it easy to run LLMs locally and provides experimental compatibility with OpenAI's APIs.
  82. in Blog
    Adding a components page
    After a recommendation from Syntax.fm, I added a public page to see all of the components that I’ve created for this site.
  83. in Blog
    Making a video game with my kids
    My experiences after one week of building a game with my kids using Kaboom.js.
  84. in Blog
    A Few Things #4
    An investigation in remote Madagascar, Parkinson's Law, writing letters to your future self, and a live shark tracker.
  85. in Articles
    Python Reference
    A quick reference guide for working in Python.
  86. in Blog
    A Few Things #3
    The Japanese art of repair, a movie/TV recommendation service, a relaxing gardening game, and answering the question "Can elephants swim?".
  87. in Blog
    Adobe has the worst captcha
    To create an Adobe account, you are required to count the value of a pile of dice 120 times.
  88. in Blog
    A Few Things #2
    Reflections on creation, the NFL's success, a map of lightning strikes, and Chester A. Arthur holding ham.
  89. in Blog
    Receiving cold-emails from GitHub stars
    I've started receiving cold-emails from maintainers after starring a repository on GitHub, and I don't like it.
  90. in Blog
    A Few Things #1
    An app to help you travel, dispelling an American myth, reflection on creation, and a game that will make your head spin.
  91. in Articles
    Did OpenAI's Web Browser GPT leak its prompt?
    When given a simple prompt, OpenAI's Web Browser GPT seems to leak its prompt.
  92. in Articles
    Migrating from Google Domains to Porkbun was...
    I was able to transfer two domains from Google to Porkbun without any issues or downtime.
  93. in Articles
    Normalizing data is a good idea
    By transforming your data into a consistent structure, you can reduce the complexity of your code.
  94. in Articles
    How I'm using AI in November 2023
    Chat GPT and Khanmigo join Copilot in the regular category this month.
  95. in Articles
    Sli.dev review
    A great tool that gets out of the way when creating slides.
  96. in Articles
    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.
  97. in Articles
    What is the file limit for GTPs?
    As of November 15, 2023, the limit is 10 files.
  98. in Articles
    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.
  99. in Articles
    GPTs read text files better than markdown
    Use text files instead of markdown with OpenAI’s custom GPTs.
  100. in Articles
    Thoughts on Web Speech API
    Browser native text-to-speech is neat, but it lacks the polish that most users expect.
  101. in Articles
    Declarative code and cognitive load
    Maxi Ferreira in Frontend At Scale on how declarative code can reduce cognitive load.
  102. in Articles
    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.
  103. in Articles
    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.
  104. in Articles
    Remove duplicates from an array in JavaScript
    Using sets to de-dupe arrays of primitive and object-like values.
  105. in Blog
    Off to Kindergarten
    My first born starts Kindergarten today and boy am I going to miss him.
  106. in Blog
    1000 commits
    This article marks the 1000th commit to this website's repository.
  107. in Articles
    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.
  108. in Articles
    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.
  109. in Articles
    CSS columns are neat
    The columns property is CSS divides content among a set number or width of columns.
  110. in Articles
    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.
  111. in Articles
    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.
  112. in Articles
    Writing Prompts for Programmers
    A list of software-engineering focused writing prompts to help programmers get started writing.
  113. in Blog
    Losing steam
    This year started strong on writing, but I have found little motivation recently.
  114. in Articles
    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.
  115. in Articles
    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.
  116. in Articles
    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.
  117. in Blog
    I have never reviewed a podcast
    Despite being a regular listener, I am unable to review podcasts.
  118. in Articles
    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.
  119. in Articles
    Web-browser Accessibility Tools
    Chrome, Edge, Firefox, and Safari all have built-in accessibility tools to help you create accessible experiences for all.
  120. in Articles
    Linux Update in 2023
    After experimenting with Linux last year, I am happily using Ubuntu on a Lenovo Yoga as my personal computer.
  121. in Articles
    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.
  122. in Articles
    Declaring variables in Go
    You can declare variables with var, :=, and const depending on your use case.
  123. in Articles
    What is nullish in JavaScript?
    Nullish values are null and undefined, and it's important to thing of them separately from falsy values.
  124. in Articles
    QA questions for everyone to ask
    Everyone on the product team should ask verifying, discovery, and critical questions to ensure quality.
  125. in Articles
    Learning Go
    Learning the Go programming language for professionanl development has been an enjoyable experience.
  126. in Articles
    Set up Decap CMS
    Decap CMS is the official successor to Netlify CMS and works well with the old tooling.
  127. Sanders of Catan
    Sanders of Catan is a variation of the popular board game Catan that emphasizes game speed and competition, with a little bit of political humor.
  128. in Articles
    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.
  129. in Articles
    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.
  130. in Articles
    Find and replace with Regex groups
    Create Regex groups with parentheses for powerful find/replace patterns.
  131. in Articles
    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.
  132. in Articles
    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.
  133. in Blog
    Reviewing my Netlify Analytics
    Thanks to Netlify Analytics I know to focus on writing how-to articles, but it has less data than I hoped.
  134. in Articles
    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.
  135. in Articles
    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.
  136. in Articles
    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.
  137. in Articles
    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.
  138. in Blog
    Starting an RSS Club
    I can publish an article exclusively to the RSS feed with a special flag in the frontmatter.
  139. in Blog
    On closings
    Closings are lovely in letters but unnecessary online. I'm going to try to omit closings from my articles.
  140. in Blog
    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.
  141. in Blog
    My writing process in February 2023
    The process involves mostly manual steps, and I am looking for a better solution.
  142. in Blog
    Learning about Smart Brevity for writing
    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.
  143. in Articles
    Valid JavaScript variable names
    Mathias Bynen has a handy tool for determining what characters are allowed in a JS variable name.
  144. in Blog
    Burrito emoji
    Burrito means thank you. Thank you means burrito. Enjoy the burrito.
  145. in Articles
    Migrating to IndieWeb.social
    A little write-up about my migration from Fosstodon to IndieWeb.social.
  146. in Articles
    Publishing a Qwik component
    The Qwik team has made creating and publish Qwik components a smooth and painless process.
  147. in Articles
    Fix Astro dev server hanging with new collections API
    The issue for me was calling useCollection on an entry with a layout.
  148. in Blog
    Site improvements in 2023
    An unordered list of things that I would like to change about this site in 2023.
  149. in Blog
    Back from time off
    Reflecting on taking a break for all of January 2023.
  150. in Articles
    Be careful parsing formatted numbers in JavaScript
    JavaScript's parseInt, parseFloat, and Number constructors struggle with comma-separated number strings.
  151. in Articles
    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.
  152. in Articles
    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!
  153. in Blog
    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.
  154. in Articles
    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.
  155. in Articles
    A first look at Static CMS with Astro
    Documenting my first attempt at switching from Netlify CMS to Static CMS.
  156. in Articles
    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.
  157. in Articles
    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.
  158. in Articles
    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.
  159. in Articles
    Astro components for Netlify features
    Announcing astro-netlify-components, a library for using Netlify features in your Astro projects.
  160. in Articles
    Create a "Dave Rupert"-inspired activity graph
    A little code walk through a the new Activity Graph on my homepage.
  161. in Articles
    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.
  162. in Blog
    Thoughts on Steve Job on consulting
    Steve Jobs had some opinions on consulting, and it sparked a few thoughts of my own. What makes a valuable consultant? Experience.
  163. in Articles
    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?
  164. in Articles
    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!
  165. in Articles
    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.
  166. in Articles
    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.
  167. in Articles
    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.
  168. in Articles
    Awesome browser extensions
    A curated list of helpful browser extensions.
  169. in Articles
    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.
  170. in Blog
    Rebuilding with Astro
    Detailing why and how I rebuilt this site with Astro.
  171. in Articles
    Jest
    A growing list of little things that make working with Jest a little better.
  172. in Articles
    How to use StackBlitz with Firefox
    Disable enhanced tracking protections to use StackBlitz with Firefox.
  173. in Articles
    How to replace Math.random with crypto in JavaScript
    A drop-in replacement for Math.random that generates cryptographically strong random values.
  174. in Articles
    Use multiple Chrome Profiles when debugging
    With specialized profiles, you can help identify issues without messing with your favorite settings.
  175. in Articles
    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.
  176. in Articles
    Calculate the sum of everything up to a given number
    A little tool to calculate 5 + 4 + 3 + 2 + 1.
  177. in Articles
    English words by consonant-vowel pattern
    A tool to look up common words by their consonant-vowel pattern and resources for the rest.
  178. in Articles
    Add a custom emulated device in Chrome
    Walking through the steps within the Google Chrome dev tools to better mimic your users' devices.
  179. in Articles
    Upgrading an Eleventy site to 1.0.0
    Make sure the you are using Node.js version 12 or later.
  180. in Articles
    Make a web component
    How to make a custom web component with only a few lines of code.
  181. in Articles
    Prevent Chrome from adjusting audio input levels on Mac
    A clever extension can prevent Google Meet from muting your bluetooth microphone.
  182. in Blog
    Slack Emojis
    A curated list of the best reaction emojis that I have created for Slack.
  183. in Articles
    Helpful online tools for diagramming
    Features and examples for some of the tools that I use to create illustrations and diagrams.
  184. in Articles
    What is a build.gradle file?
    An brief explanation of Gradle and build.gradle files for JavaScript developers.
  185. in Articles
    Three new games on Toollama
    Turtle Guide, Paint Pig, and Spotlight all help children build computer literacy.
  186. in Articles
    React Native Glossary
    A growing list of terms you need to recognize when working in React Native.
  187. in Articles
    What happened to @react-native-community packages?
    Why you won't be installing any community packages on your next React Native project.
  188. in Articles
    Find an iOS simulator identifier
    How to find a simulator ID using the Xcode UI or terminal.
  189. in Articles
    Using BEM names in React Native
    A quick how-to without committing to whether it's a good idea or not.
  190. in Blog
    Reflecting on a new role
    Moving into mobile development at Niche and looking back on how I got here.
  191. in Articles
    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.
  192. in Blog
    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.
  193. in Articles
    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.
  194. in Articles
    Get innerHTML of Enzyme wrapper
    Writing a little helper function to grab the HTML of all children of a shallow wrapper in Enzyme.
  195. in Articles
    Use remark to covert markdown into HTML
    The missing "hello world" example to get up and running with remark.
  196. in Articles
    Count class methods in JavaScript
    Although JS treats them like object, finding the methods of a class programmatically is trickier than I thought.
  197. in Blog
    A modest redesign for 2021
    Freshening up SeanMcP.com for the new year.
  198. in Articles
    Git
    A practical resource for Git.
  199. in Articles
    Read URL search parameters with JavaScript
    How to use URLSearchParams to parse any search parameters string like window.location.search.
  200. in Articles
    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.
  201. in Articles
    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.
  202. in Articles
    Copy the last git commit hash on macOS
    A one liner to copy the last commit hash to the clipboard on a Mac.
  203. in Articles
    Add Heroicons to an Eleventy site
    A guide to using the eleventy-plugin-heroicons package in your Eleventy projects.
  204. in Articles
    Create a URL shortener with Netlify
    Build your very own shortener in six quick steps.
  205. in Articles
    Set innerHTML of an element in Svelte
    You can use an HTML expression to add valid markup to an element.
  206. in Articles
    Let's stop skinning cats
    Proposing an alternative, more constructive idiom to "there's more than one way to skin a cat".
  207. in Articles
    Search all files for two strings
    A terminal command to search for all the files in the current directory that contain two independent strings.
  208. in Articles
    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.
  209. in Articles
    Geddes' Guide to Crafting
    When building something new, get your foundation in place before building upon it.
  210. in Articles
    Send data to the window with Eleventy
    How to create a shortcode to expose data for client-side scripts.
  211. in Articles
    Checkout the previous git branch
    Using a git shorthand to checkout the most recent branch.
  212. in Articles
    Make all properties required in TypeScript
    Using the Required utility type to required all properties of a type.
  213. in Articles
    Add text to the beginning of every file
    Using a shell script to add a line to every file with a given extension.
  214. in Articles
    Sass converts hsla to hex incorrectly
    A simple solution to stop Sass from transparent hsla colors to opaque hex colors.
  215. in Articles
    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.
  216. in Articles
    Standardize character width with CSS
    Two CSS properties that make letters and numbers the same width.
  217. in Articles
    See all package versions in npm cli
    How to use npm view to see all the published versions of a package on the registry.
  218. in Articles
    TypeScript without TypeScript
    TypeScript provides valuable features but complicate the development process. What are some alternatives that provide the features without the headache?
  219. in Articles
    Emulate iPhone & iPad in Safari
    Simulating your web pages on Apple devices is easy with Safari's responsive design mode.
  220. in Articles
    Make a POST request with fetch
    A sample POST with fetch for those of us who can never remember how.
  221. in Articles
    Remove an item at a given index in JavaScript
    Sidestep slicing and splicing and use Array's filter method for a no-hassle solution.
  222. in Articles
    Tab focus not working in Safari?
    For some unknown reason, you need to enable tab highlighting in the browser's settings.
  223. in Articles
    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.
  224. in Articles
    Updated TypeScript mega-course on Egghead.io
    Reviewing and updating my TypeScript mega-course on Egghead.io.
  225. in Articles
    Access the home directory in Deno
    Using Deno's environment to determine your computer's home directory.
  226. in Articles
    Before You Debug
    An organized approach to debugging your code.
  227. in Articles
    Before Debugging
    An organized approach to debugging your code.
  228. in Articles
    Nodemon for Deno
    Denon is a utility for Deno that provides source watching and process restarting just like Nodemon.
  229. in Blog
    Adding images to my articles
    How the right design and process for sourcing images made all the difference for me.
  230. in Articles
    Parse argument aliases in Deno
    Using Deno's standard flags module to parse command-line arguments with aliases.
  231. in Articles
    Await multiple promises in JavaScript
    By calling your asynchronous functions before awaiting, you can save valuable time in your JavaScript programs.
  232. in Articles
    TypeScript mega-course on Egghead.io
    Creating a playlist to learn TypeScript.
  233. in Articles
    Six video update
    Lessons learned from publishing six videos on YouTube.
  234. in Articles
    Read a json file in Deno
    How to use Deno's standard library to read and parse data from a json file.
  235. in Articles
    Read a json file in Node.js
    How to use Node.js's file system to read and parse data from a json file.
  236. in Articles
    Publishing my first YouTube video
    Why I started a YouTube channel and what I learned in the process.
  237. in Articles
    How to get the browser and version in JavaScript
    A brief journey into the dangerous world of user agent sniffing.
  238. in Articles
    Logging with Eleventy and Nunjucks
    Adding a simple filter to save you a lot of grief.
  239. in Articles
    Store readable data
    When forced between storing data for humans or computers, choose the former.
  240. in Blog
    MagnoliaJS 2020 conference notes
    Some notes from the talks that I was able to attend.
  241. in Articles
    How to open the Dev Tools
    A comprehensive guide for opening the dev tools in Chrome and Firefox.
  242. in Articles
    Tools for custom Slack emojis
    The full toolbelt for making your own custom Slack emojis.
  243. in Articles
    Programming reads
    A list of articles, books, and resources for software engineers.
  244. in Articles
    Free to grow
    Why tests (should) free you to grow with confidence.
  245. in Articles
    How to check npm scripts in current directory
    Writing a script to read the package.json for you.
  246. in Articles
    How to remove duplicates from an object array?
    Not as easy as we'd like it, but not as hard as it could be.
  247. in Articles
    Write a draft script for your SSG blog
    Easily spin up a new article when you don't have a CMS.
  248. in Blog
    A new Twitter handle
    Kicking off 2020 with (yet another) new handle.
  249. in Articles
    What default parameters do (and don't do)
    Correcting my mental model.
  250. in Blog
    Reviewing 2019 goals
    Checking in on the goals I set for myself in 2019.
  251. in Articles
    "Stop Teaching Code" in JavaScript
    A quick review of Jeff Olson's article on teaching code with translated examples.
  252. in Articles
    5 Lessons from 10k open-source downloads
    A few things I've learned from managing a modestly popular open-source package.
  253. in Articles
    Should I snapshot my UI components?
    The temptation is strong, but consider some of the tradeoffs.
  254. in Blog
    Lessons Learned at Abstractions 2019
    Some notes and thoughts from Pittsburgh's cross-discipline software conference.
  255. in Articles
    Edit a previous commit message
    The steps to edit recent or ancient commit messages.
  256. in Articles
    Arguments or parameters?
    An attempt to remember the difference between the two.
  257. in Blog
    How to pronounce my name
    A guide to pronounce my often-mispronounced name.
  258. in Articles
    Add event listener for class change
    How to create a custom event listener for class names using the MutationObserver API.
  259. in Articles
    Storing data in state vs. class variable
    Why do we store data in state as opposed to on the class?
  260. in Articles
    Filter out premium Medium articles
    Using a console script to alter the content on a webpage.
  261. in Articles
    Adding accessibility checks to your React app
    A few tools to help you build more accessible React applications.
  262. in Articles
    Three reasons to learn Python
    A few reasons why you should learn Python.
  263. in Articles
    JS Basics: Generate a random number
    Using JavaScript's Math object to generate random numbers.
  264. in Articles
    JS Basics: Ternary Operator
    Demystifying the inline if statement.
  265. in Articles
    Convert class components to functions with React Hooks
    A step by step guide to converting old components to modern React.
  266. in Articles
    Accessibility Wednesday
    Learning and sharing about accessibility for everyone.
  267. in Blog
    2018 into 2019
    Reflecting on last year while looking forward to next.
  268. in Blog
    Why a blog?
    An effort to preserve my content on the ever-changing web.
  269. in Articles
    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.