How the browser event loop actually works — tasks, microtasks, Web APIs — and what async/await is really doing underneath the syntax sugar. Includes the edge cases that actually break in production.
* AND Blacksky AND Eurosky (mu.social) AND Northsky and probably all the Skies. These bookmarklets are not site specific so you can run them while on any browser based client to be honest. (and yes, at the time that I'm posting this, for some reason the code blocks look best in dark mode ... I...
The Node.js histogram API gets Welch's t-test, Mann-Whitney U, EWMA for streaming stats, SLO burn rate tracking, and a CBOR-based export/import format.
The Node.js histogram API now has real statistical analysis. CDF, skewness, kurtosis, KS tests, coordinated omission correction, and snapshot diffing.
Screenshot I spend most of my working life thinking about what happens inside a stirred tank. Impeller tip speed, shear on the cells, the shape of the vortex that forms when you get the baffling wrong. So when I fell down the rabbit hole of p5.js code golf last week, it was probably inevitable that...
I had a comments section on this blog since the beginning. I always felt like a comments section was kind of a requirement for a blog: it’s not just a website where you publish posts, it’s a website where you publish posts and other people can comment on them. I strongly disagreed with bloggers who openly declared that they’re removing comments from their blog because their blog is not a place for others to add their remarks, and that they can always write to the author on Twitter if they want to contact them. But one obvious problem with comments on a blog, which got worse and worse over time, was spam. People tried to solve it e.g. with captchas, though as the bots got smarter, captchas had to get more complicated and annoying. For a very long time, I had a super simple captcha in the comment form that just asked: “Are you a human? (yes/no)”. You just had to write “yes” in the text field. And for a very long time it was enough – obviously it’s trivial to make a bot add an additional query parameter, the point was that nobody would think about it when writing generic spambots, and my blog isn’t famous so the bot authors wouldn’t have come across it. Things got worse around 2018-19. I started getting comments (I had email notifications for them) that were spam that obviously got around the captcha. So I started tweaking the captcha, adding multiple slightly more complex questions, but still such that you could answer them if you’re a developer or an Apple user – “What’s the name of the Mac operating system”, “Who is currently the CEO of Apple”, and so on. But it only worked for some time, and then I started getting spam again, while making the questions progressively harder over time: At some point I figured that this had to be actual people, rather than bots, adding the comments (talking in general, not about Jerry here above), people sitting at a computer, browsing websites and filling the forms by hand, because there was no way a bot would figure out that the question was a captcha and that it had to google for a name of a function (note, this was in pre-AI times). The comments were usually either in Russian or Ukrainian, or linking to some local service companies in some random small town in the US. There was no way I could out-captcha an actual human that can google for an answer. But it wasn’t a huge problem, I didn’t get many of those comments, and it was fairly easy to filter them out still by content, so I didn’t bother changing the system further. But here’s the thing: it’s not 2010 or 2018 anymore, and some other things have changed in the meantime too. I think it’s a bit of a truism that blogs and “blogosphere” aren’t what they used to be 15+ years ago. People post their thoughts on social media, Instagrams, Facebooks, LinkedIns, Substacks, record Tiktoks, YouTube videos or podcasts. Reading and writing blogs and commenting on them is a very niche hobby, let’s face it. After 2020-21, when for a while I was getting a ton of comme…
The Fetch API gave JavaScript runtimes a shared vocabulary for HTTP. But HTTP has capabilities that Fetch can't express, and every runtime has diverged trying to work around the gaps.
Rehoboth Beach, DE, June 30, 2026 — Let’s be completely blunt: if your website relies heavily on JavaScript, there’s a good chance it’s a ghost to the AI-powered search engines that are increasingly dominating how people find information. You might think your WordPress site looks perfect to a human visitor, but to ChatGPT, Perplexity, or […]
A walkthrough of how I wired up Standard.site AT Protocol lexicons into this 11ty blog: from writing a custom publish script to migrating to Sequoia, with code for the link tags, and handle verification.
What happens when a bioreactor engineer points his state-estimation toolkit at football. Model90 is a statistical forecasting engine for the 2026 World Cup and the major leagues, built on Dixon-Coles Poisson, Elo, xG and a calibrated meta-model. An honest look at how it works and what its Brier score really means.
Unicode character class escapes turn regular expressions from English-only ASCII tools into something that understands the whole of human writing. A look at how `\p{L}`, `\p{N}`, `\p{Sc}`, and the `v` flag's properties of strings make this possible.
Landing page and OAuth metadata host for the Inkwell iOS app.
I made all my posts standard.site compatible last weekend, which means I can write in pckt.blog, Leaflet, or Offprint and have the post show up on keith.is. This is my first one from pckt 🎉 🎉 🎉!! I'd been using a combination of Tina, and just writing in my editor. Then I went to share one of those posts on bluesky to see the cool new embed and saw that.... and my old OG image. I think I spent fifteen minutes on it once when I migrated from eleventy to Astro, gave it some bright colors and a shap...
I made all my posts standard.site compatible last weekend, which means I can write in pckt.blog, Leaflet, or Offprint and have the post show up on keith.is. This is my first one from pckt 🎉 🎉 🎉!! I'd been using a combination of Tina, and just writing in my editor. Then I went to share one of those posts on bluesky to see the cool new embed and saw that.... and my old OG image. I think I spent fifteen minutes on it once when I migrated from eleventy to Astro, gave it some bright colors and a shap...
Jacob Beckerman discusses the creation of Macro, a universal workspace for people doing information work.
I've been meaning to read this for years. I finally picked up a copy for a decent price last year, and read it as a refresher before embarking on some map creation. It seems a bit strange, reading a technology-related book from 2014 in 2026, but Ian Muehlenhaus did a good job of keeping most...
Needed a way to sort Slack channels by priority based on unread messages, mentions, and recency. Here's a JavaScript implementation. // Channel Priority Sorter for Slack // Sorts channels based on a weighted priority score const PRIORITY_WEIGHTS = Object.freeze({ MENTIONS: 10, UNREAD: 2, RECENCY: 5, STARRED: 15, }); /** * Calculates a priority score for...
I was asked to build a utility that suggests variable names based on the developer's current emotional state. Naturally, I built a full strategy pattern with sentiment analysis. // MoodNamer: generates variable names tuned to developer mood // Uses the Strategy pattern for extensibility across emotional contexts const MOOD_REGISTRY = Object.freeze({ HAPPY: 'happy', ANGRY: 'angry',...
Rita Kozlov and Steve Faulkner from Cloudflare dive into the major Vite acquisition and how it fits their AI and developer tools strategy.
I was asked to write a small utility that checks if a sandwich order is valid. Here is what came out. // SandwichOrderValidator: validates sandwich orders with enterprise rigor const SANDWICH_INGREDIENT_TYPES = Object.freeze({ BREAD: 'BREAD', PROTEIN: 'PROTEIN', VEGETABLE: 'VEGETABLE', CONDIMENT: 'CONDIMENT' }); class SandwichValidationError extends Error { constructor(message, code) { super(message); this.name = 'SandwichValidationError'; this.code...
We need to implement a rate limiter that controls the frequency of requests or operations. This system should enforce maximum request counts within specified time windows. // Rate Limiter Implementation with Advanced Token Bucket Strategy class RateLimiterConfig { constructor(maxRequests, windowMs) { // Store the maximum number of requests allowed this.maxRequests = maxRequests; // Store the...
A countdown timer application that tracks time remaining and triggers actions when complete. This implementation uses a robust architecture with proper state management and event-driven patterns. // Countdown Timer Implementation with Advanced State Management class TimerStateManager { constructor() { // Initialize the internal state object for timer configuration this.state = { totalSeconds: 0, remainingSeconds: 0,...
The sequoia-recommend button lets readers recommend your Sequoia posts directly from your site using their Bluesky account.
An experimental implementation of the DTLS protocol is coming to Node.js, bringing TLS-equivalent security to datagram-based communication over UDP.
A developer wants to build a tool that analyzes code comments and rates them on a scale of usefulness, determining whether comments actually explain the why/how or just restate the obvious code. The tool should categorize comments and suggest improvements. // CommentAnalysisEngine.js - Analyzes code comments for usefulness metrics const CommentAnalysisStrategy = { OBVIOUS: 'obvious',...
ProseMirror can feel intimidating at first because it does not think like most UI libraries. This guide explains the core mental model behind schemas, documents, state, transactions, and views.
Jeff Dickey discusses monetizing open source through his company en.dev and his suite of tools: Mise, HK, Fnox, and the new Aube package manager.
How I decomposed an 866-line .eleventy.js monolith into four focused modules, fixed some lurking bugs, and eliminated dead CSS and dead dependencies along the way.
A walkthrough of how I audited my 11ty build benchmarks and cut cold-start time from 14 seconds down to 2.6 seconds by caching two custom filters and swapping out a bare network fetch.
Sam Goodwin introduces Alchemy, a modern infrastructure-as-code tool built with Effect that challenges the tech debt of current solutions.
A reference page for making stuff using Bluesky's public API.
This is Part 2 in a series on the new `node:quic` module in Node.js
A functional implementation of the QUIC and HTTP/3 protocols has finally landed in Node.js.
This is Part 3 in a series on the new `node:quic` module in Node.js
This is Part 4 in a series on the new `node:quic` module in Node.js
This is Part 5 in a series on the new `node:quic` module in Node.js
Webページからメインコンテンツを抽出してMarkdown化するライブラリDefuddleの紹介です。
Alem Tuzlak breaks down building TanStack Dev Tools and how TanStack AI differentiates itself in the crowded AI library landscape.
The npm client's default settings are a root cause of JavaScript's recurring supply chain security problems.
atproto has the potential to become a rock-solid replacement for the most fragile part of any local-first app: the sync server.
Paolo Ricciuti, Svelte maintainer and TMCP creator, discusses Svelte 5's new runes system and his journey from fan to core contributor.
Should Node.js accept AI-generated code? tl;dr Yes, it should.
This blog has been updated to use vinext, a Vite-based framework that provides a Next.js App Router-compatible API.
This post will show you how to migrate to using Node.js subpaths and how to use the no-restricted-imports and perfectionist/sort-imports ESLint rule to help you sort your imports.
Redux maintainer Mark Erikson covers his journey maintaining Redux, building Redux Toolkit, and pioneering time-travel debugging at Replay.io.
This post will show you how to migrate to using Node.js subpaths and how to use the no-restricted-imports and perfectionist/sort-imports ESLint rule to help you sort your imports.