All blogs / JavaScript / TypeScript
Alex MacArthur's Blog
I'm a software engineer in Nashville, bossing around computers in made-up languages.
JavaScript / TypeScriptFrontend / CSS / browsersWeb development
- Posts
- 75 from 8 Sep 2022 to 30 Mar 2026
- Posting
- now and then (3 in the last year)
- Kind
- personal blog
- Feed
- https://macarthur.me/rss/feed.xml
2026 2
2025 9
- DNS Resolution Adds Up
- `document.currentScript` is more useful than I thought.
- I think the ergonomics of generators is growing on me.
- I guess some request headers are more trustworthy than others.
- There are a lot of ways to break up long tasks in JavaScript.
- We'll soon be able to slide open a `height: auto` box with native CSS.
- I didn't know you could compose template literal types in TypeScript.
- Short-Lived, Tick-Bound Memoization in JavaScript
- Using Forced Reflows and the Event Loop to Slide Open a Box
2024 27
- You Might As Well Use a Content Security Policy
- Avoiding a "Host Permission" Review Delay When Publishing a Chrome Extension
- Collect All Requested Images on a Website Using Puppeteer
- TIL: inline event handlers still fire when passed to React's dangerouslySetInnerHTML
- Streaming Text Like an LLM with TypeIt (and React)
- I didn't know you could use sibling parameters as default values in functions.
- Empty Building
- JamComments Now Offers AI-Powered Moderation
- It Might Be Worth Converting that GIF to an Animated WebP
- Exploring the Possibilities of Native JavaScript Decorators
- How to Back Up Self-Hosted Plausible Analytics Data to an R2 or S3 Bucket
- On Building Structured Data with Client-Side JavaScript
- Control JavaScript Promises from Anywhere Using Promise.withResolvers()
- Re-Enabling Emails for Ghost CMS Members
- Adding Structured Data in Astro's Starlight Documentation Framework
- It’s Probably Only Getting More Important to Use (Good) Structured Data
- Helpful Guidelines for Posting on LinkedIn
- Looking Forward to (Hopefully) Not Needing Responsive Images One Day
- You Might Consider Using an Image Sitemap
- The Architecture Might Not Be the Problem
- Transform Image URLs with a Simple Cloudflare Worker
- Hold a Healthy Sense of Caution Whenever Running a curl|bash Command
- It's Never Been Easier to Performantly Put Images on the Web
- Why Am I Getting a 502 Bad Gateway After Turning on Plausible?
- How to Back Up Your Self-Hosted Plausible Analytics Data
- Picking the Right Tool for Maneuvering JavaScript's Event Loop
- Raise the API Rate Limit for a Self-Hosted Instance of Plausible
2023 32
- Let's Bring Back JavaScript's `with()` Statement
- Executing Dangerously Injected Scripts Inside React Components
- "Server-rendering your UI is expensive!"
- You should still look at your site with JavaScript disabled.
- Strive for Being "Feature-Complete"
- There Are a Lot of Ways to Hide Stuff in the Browser
- Lighthouse is Not Your User
- Deserializing Polymorphic Lists with Kotlin, Jackson, and Spring Boot
- For Maximum Accessibility, Be Careful About Using a .dev Domain
- Don't Let Visitors Know Your Origin Server Exists
- PicPerf's Impact on Jane Ross Tutoring's Website
- TIL: A Link’s Download Attribute Won’t “Just Work” for Cross-Origin Resources
- Get All That Network Activity Under Control with Priority Hints
- Your Cache Headers Could Probably be More Aggressive
- Reviewing PicPerf's Impact on SongwriterCity.com
- Building a Two-Way Data Binding Hook for Form Inputs in React
- Taking Variable Fonts for a Spin
- Run Puppeteer with Docker on Fly.io
- How to Better Leverage Browser Preloading
- Mount a Multi-Page SPA into an App with Server-Side Routing
- Why I Moved from Notion to Ghost for My Headless CMS
- Why Your Website Should Use Modern Image Formats
- Why I Like Using Maps (and WeakMaps) for Handling DOM Nodes
- Elegant Memoization with Ruby’s .tap Method
- If Possible, Don't Run Prism.js in the Browser
- Consider Animating Your Canvas in a Web Worker
- More Elegant Destructuring with JavaScript Generators
- Use a MutationObserver to Handle DOM Nodes that Don’t Exist Yet
- You’ve Got Options for Removing Event Listeners
- Use the .matches() Method to Determine if a Selector Matches an Element
- What I Like About Astro
- How to Lazy Load Disqus for Improved Site Performance