Chris Dickinson

Chris Dickinson

@neversaw.us

former Node.js TSC & NPM registry eng / systems eng (❤️ rust, bash, js, tf) / sometimes illustrator / pets cats; pronouns he/him (@isntitvacant elsewhere)

836 followers511 following116 posts

Chris Dickinson reposted

wasm’ers rise up

Telemelt@telemelt.com

In Telemelt, every player runs the emulator locally while peer-to-peer networking keeps state synced between players. The controller can be passed seamlessly, and the controller player is never subject to any network latency.

gen z (probably?) doesn’t remember having to look up the new 2002 horror film, feardotcom, by navigating to feardotcom dot com

Hazel Weakly@hazelweakly.me

The cultural cutoff between millennials and gen Z is that Gen z doesn’t remember 9/11. That’s kinda the defining event. But also they probably don’t remember pre Google internet. Younger gen z doesn’t remember a world where iPhones didn’t exist, either.

hard agree on all of these, & with the implication of 6 that “no ambient platform deps can be imported” (e.g. you can’t import “node:fs” without declaring it as a dependency)

This post is unavailable.

“there, it’s done, what do you think” as the camera pans over all of the interociter parts on the ground (via mst3k: the movie)

This post is unavailable.

a research q: how many times has the pendulum swung between thick clients and thick servers in computing? examples would be like: time-sharing moving to workstations, server-rendered websites moving to react/client rendered websites (and back), etc etc

just confirmed it on the nodejs/node repo (look at src/node.cc) I, uh, hope they roll that back because that's "look for a new code hosting platform immediately" behavior

I think if I were to summarize “what’s interesting about MCP” it would be that it there’s a kernel of useful interfaces that a lot of people have agreed to implement— both in client applications and server providers. It started as “close enough to the right thing” that it gained adoption and grew.

The flip side is that there’s stuff that doesn’t matter quite as much as the adoption: the transport story (jsonrpc over bidi streams) distracts a lot of folks coming in, as does some of the functionality (resources/prompts are underimplemented imo) But big important parts are clicking, like authn.

View full thread

That hurts. What if we don't do the thing that hurts? One of the big lessons of illustration school is that you can't afford to be precious about your art– that each piece you produce is a set of lessons that you use to refine your practice.

The trick is to develop systems that allow for this continual rewriting– to have a jig where your team can move fast and develop a better understanding of the problem *without* breaking things.

You must always plan to rewrite programs. I don't know a better way to understand the details of the problem & solution. The drift between problem statement and solution is the source of so much pain in programming. We layer on another level: adapting the last solution to the current problem.

so, ICYMI, I've been pushing along a (spec-compliant! slow!) wasm interpreter here: github.com/chrisdickins... I've gotten a lot of the structure incorrect. (quelle surprise!) Part one is to start to put cut points between "machine" and "runtime". So I'm identifying organelles of a Wasm runtime.

github.comGitHub - chrisdickinson/uuasm-rs: wasm interpreter, implemented in rust, for fun and education 🦀wasm interpreter, implemented in rust, for fun and education 🦀 - chrisdickinson/uuasm-rs
Chris Dickinson@neversaw.us

I had a thought last night about writing a follow-up to "understanding wasm": "building wasm" which would take a comparative look at how wasm runtimes are structured, maybe trying to link that back to VM design texts, etc

View full thread

These collections map module-local type indices to vm-global type indices. So if you're using a wasm instruction like "call_indirect" or "table.set", instead of structurally comparing the type, you can map down the two module-local type ids to the vm shared type index and do an integer comparison.

It strikes me that, once you support the Wasm GC extensions, you end up wanting to build a type registry (or canonicalizer, as v8 calls it). Both for cheap type comparison and because the GC types themselves become a garbage-collectable type (potentially holding cycles.)

so, ICYMI, I've been pushing along a (spec-compliant! slow!) wasm interpreter here: github.com/chrisdickins... I've gotten a lot of the structure incorrect. (quelle surprise!) Part one is to start to put cut points between "machine" and "runtime". So I'm identifying organelles of a Wasm runtime.

github.comGitHub - chrisdickinson/uuasm-rs: wasm interpreter, implemented in rust, for fun and education 🦀wasm interpreter, implemented in rust, for fun and education 🦀 - chrisdickinson/uuasm-rs
Chris Dickinson@neversaw.us

I had a thought last night about writing a follow-up to "understanding wasm": "building wasm" which would take a comparative look at how wasm runtimes are structured, maybe trying to link that back to VM design texts, etc

View full thread

so, ICYMI, I've been pushing along a (spec-compliant! slow!) wasm interpreter here: github.com/chrisdickins... I've gotten a lot of the structure incorrect. (quelle surprise!) Part one is to start to put cut points between "machine" and "runtime". So I'm identifying organelles of a Wasm runtime.

github.comGitHub - chrisdickinson/uuasm-rs: wasm interpreter, implemented in rust, for fun and education 🦀wasm interpreter, implemented in rust, for fun and education 🦀 - chrisdickinson/uuasm-rs
Chris Dickinson@neversaw.us

I had a thought last night about writing a follow-up to "understanding wasm": "building wasm" which would take a comparative look at how wasm runtimes are structured, maybe trying to link that back to VM design texts, etc

You can learn a surprising amount just aping the greats– so I've been rooting around in Wasmtime, V8, Wazero, WAMR, and WEdge. So, what does a Wasm engine hold onto? There are a couple of "well, duh, *something* has to own this" things – configuration, for example.

I had a thought last night about writing a follow-up to "understanding wasm": "building wasm" which would take a comparative look at how wasm runtimes are structured, maybe trying to link that back to VM design texts, etc

TIL that the term "pie in the sky" comes from an IWW song also that it was sung to counter the salvation army (!!) who would show up to counter-protest at strikes (!!!)

Chris Dickinson reposted

Chris Dickinson reposted

Do you work at a company you like that is actively hiring Software Engineers? do you know someone who does? Consider referring me to them & them to me! My website homepage now has a "Hire Me!!" section with info about me, what I'm looking for, and how to contact me! esoterra.dev

carping for a second: typescript-lsp includes a formatter (great! good! ok!); typescript-lsp disagrees with prettier on some indentation (okay! fine! alright!); typescript-lsp doesn't seem to expose a way to call its formatter from the command line (terrible! awful! for the love of god, montresor!)

This is what the dylibso team and I have been working on: a safe, portable way to install tools that Claude and other MCP clients can use. Quickly and confidently installing tools from a number of different authors and immediately putting them to use in a Claude session has been eye-opening.

steve.wasm@nilslice.bsky.social

It's only been a handful of days since @anthropic.com announced MCP, introducing a new standard to integrate software tools and data systems into AI applications. I see a promising future for MCP, so much that we're shipping a whole product to help see it grow!

one year (and a half) of working in wasm has made me keenly aware of the difference between address space and committed memory. especially the ease with which you can hit address space limits because of guard pages.

might've just run into a crashing bug in node v22 around worker_threads and/or ESM and/or WASI and/or instrumentation hooks (how's that for surface area?) I'll try to create a reproducible test tomorrow. Mostly segfaults, but got one tcache_thread_shutdown() error from glibc!

I'd, yanno, do more about it now, but it's 11:35pm here and I've got to get up early. So "fix the production outage" is as far as I go tonight, instead of staying up all night reducing the bug and rendering myself useless tomorrow. (Personal growth!)

if i could add one thing to bash, it would be to add a "set -4" which would interpret "echo 4?" as "echo $?" instead of me having to re-run the previous command (I know, I know, it should be in my PS1, but.)

my shameful secret: I built a gaming PC in 2021 so that I could exclusively play remastered editions of games I enjoyed in 1998 (starcraft 1, age of empires 1 & 2, diablo 2)

Matteo continues to put out clear, informational explanations about core platform architecture concepts. (I'm pretty animated by HTTP caching – designing around caching strategies was pretty fundamental to my experience at npm. You can do some pretty nifty stuff with modern CDNs these days, too!)

Matteo Collina@nodeland.dev

I’ve been talking a lot about HTTP caching recently & 2 things are clear. 1️⃣ Caching is the backbone of fast, responsive apps, but when done wrong, things get BAD 2️⃣ We are all responsible for doing caching right We've done a deep dive into HTTP caching fundamentals. https://buff.ly/3Zpg0Re