This week
- May 10, 2026 Chris Morgan is tired of people tacking query strings onto his URLs — e.g. www.robinsloan.com/lab/?like=this&and=this—so he’s set his website up to reject those requests outright, rather than suffer in silence. Naturally, anybody is free to set up their server in...
- Incidents are boring. Most of what you actually do during an incident is wait: for some other team to investigate, or for a deploy to finish, or for the result of some change to become apparent, or for someone else who’s been paged to come online. It’s stressful, but there’s...
- This is the seventh chapter of my SQLAlchemy 2 in Practice book. If you'd like to support my work, I encourage you to buy this book, either directly from my store or on Amazon. Thank you! Starting with release 1.4, SQLAlchemy includes support for asynchronous programming with...
Last week
- In this guide, you'll build a Mastra agent that responds to messages and mentions on Slack. You'll configure a channel adapter, set up a Slack app with the appr......
- “If it compiles, it works.” This feeling is one of the main things Rust engineers love most about Rust, and a reason why using it with coding agents is especially nice. After debugging some code that compiled but mysteriously stopped in production, I realized that it’s useful to...
About a month ago
- When you start a new project, it feels nice that everything lives in a single main.go file. When things start to grow, you split things into multiple files. We will add tests later, right? Requirements change, someone joins the team, and in the meantime, you swapped SQLite for...
about 1 month ago
- This is the third chapter of my SQLAlchemy 2 in Practice book. If you'd like to support my work, I encourage you to buy this book, either directly from my store or on Amazon. Thank you! In the previous chapter you learned how to execute a variety of queries on the products...
- for (i = 0; i < numberOfElements; i++) { doSomethingWith(element[i]); } This works, but isn't very elegant. The Ruby way is much more elegant. elements.each do |element| do_something_with(ele...
- I originally posted this as a Twitter thread in March 2018. It went viral, probably because Charles Stross quote-tweeted it with the comment “This thread. You read!” - yes, _that _Charles Stross. 😮 It was at https://twitter.com/i/web/status/976852582084808704, and I bookmarked...
about 2 months ago
- A JavaScript engine (e.g. V8, JavaScriptCore) executes JavaScript code. It doesn't know about things like files, HTTP requests, or timers.On the other hand, a JavaScript runtime (e.g. Node.js, Bun) is a more complete environment where JavaScript runs. It contains a JavaScript...
- Creating a subset of Go that translates to C was never my end goal. I liked writing C code with Go, but without the standard library it felt pretty limited. So, the next logical step was to port Go's stdlib to C.Of course, this isn't something I could do all at once. So I...
- At this point in history, AI sociopaths have purchased all the world's RAM in order to run their copyright infringement factories at full blast. Thus the amount of memory in consumer computers and phones seems to be going down. After decades of not having to care about memory...
- Starlette 1.0 is out! This is a really big deal. I think Starlette may be the Python framework with the most usage compared to its relatively low brand recognition because …
- I'm working on a new programming language named Solod (So). It's a strict subset of Go that translates to C, without hidden memory allocations and with source-level interop.Highlights:Go in, C out. You write regular Go code and get readable C11 as output.Zero runtime. No garbage...
- Squawk’s language server uses lsp-types, which provides serde-friendly types for the Language Server Protocol (LSP). This avoids us having to implement a lot of boilerplate ourselves. Before: A Manual Approach One of the provided types is SelectionRangeRequest, which is used for...
- This post is the third in a series comparing the same sample blog in Web Origami and Eleventy: - Eleventy version: Source code and Demo - Origami version: Source code and Demo This post looks at another advantage of code over configuration: the degree to...
2 months ago
- In 2023 I wrote "SQLAlchemy 2 In Practice", a book in which I offer an in-depth look at SQLAlchemy version 2, still the current version today. SQLAlchemy is, for those who don't know, the most popular database library and Object-Request Mapper (ORM) for Python. I have a...
- The interesting part of moving kentcdodds.com to npm workspaces was not the file moves. It was everything the file moves broke....
- I like pie. And I’ve learned that if I want a pie done right, I gotta do it myself. Somewhere along my pilgrimage to pie perfection, I began taking a photo of each bake — pic or it didn’t happen. Despite all my rhetoric for “owning your own content”, I’ve hypocritically used...
- Introduction You built a thing. You want people to pay once and use it forever. Here is exactly how to do that with Convex and @convex-dev/stripe. Install npm install @convex-dev/stripe stripe npx c...
- The following is a write up of a talk I delivered at MLOps Community’s “Coding Agents” conference, on March 3rd. There’s a video version of the talk available on YouTube. I share what I learned building a no-code library, why spec-driven development is a feedback loop not a...
- TypeScript and Rust-Analyzer support a handful of quality of life, code navigation improvements. For example, if you try to go-to-definition on a variable in your IDE, but end up clicking the trailing comma, it still navigates to the variable. let a = 10 // ^ go-to-def...
3 months ago
- How many millions of times have you seen this pattern in Go where a variable is pre-created just to make a pointer to it down the line? There is a high chance your codebase includes a utility to do that. // Something like this a := 123 aPtr := &a // Or like this func Pointer[T...
- Blog About Moonbound Shop This is a post from Robin Sloan’s lab blog & notebook. You can visit the blog’s homepage, or learn more about me. February 23, 2026 My path through programming has largely involved strategic avoidance: of complexity, fragility, excessive moving...
Rows per page