Sign in

rain 🌦️

@sunshowers.io
4.7K followers 441 following 1.5K posts

(gender)queer transsexual / they/them / eng @oxide.computer / atheist and scientific humanist / 🦀 #rustlang / #jj-vcs #1 fan / nexte.st / sunshowers.io also on mastodon: @rain@hachyderm.io / hachyderm.io/@rain

PostsRepliesMedia
rain 🌦️ @sunshowers.io · 15h
Ah never mind, the prep commits were fine but the bugfix I asked it to do is slop. Oh well, redoing that from scratch lol
0100
rain 🌦️ @sunshowers.io · 17h
these things have gotten good enough that I can fire this off at 30k feet, get something working, pull down locally, make minor tweaks, and have it all work
screenshot of claude code:

Thank you. Landed the first commit on main. Fetch, and rebase the stack on that. Then in the second commit I noticed we still use numbered capture groups, they should be named groups instead like the first one

Fetching main to find the landed commit.

Ran
a command
The landed commit 9e53f7f has the same tree as my 85e3f45. Rebasing the other two commits onto it.

Rebased onto
origin/main
Rebased cleanly. Now finding the numbered capture groups the fixture commit adds.


Ran 2 commands
Both new stress regexes use numbered groups. I'll fix them on the fixture commit, then cherry-pick the fix commit back on top.

Ran
git switch…
The only numbered groups this commit adds are gone, and clippy is clean. Amending the commit and running the integration suite.

running
Running
a command
1220
Reposted by rain 🌦️
ae @aelkus.bsky.social · 22h
the philosophy of the cat is to not think outside the box. it is to find a box, any box, and utterly own it no matter the state of the box itself
1849
Reposted by rain 🌦️
Graydon Hoare @graydon-pub.bsky.social · 27/09/2026
I wholly and un-ironically believe that versioning ought to make up a significant fraction of any formal training in computers. Multiple full year courses in your degree. And there should be a set of journals and conferences on it, endowed chairs, advanced research institutes, the whole nine yards.
013414
rain 🌦️ @sunshowers.io · 30/09/2026
Yeah sorry I was trying to make a joke. See (I consider versioning to have a very strong dev tools component): bsky.app/profile/gray...
220
rain 🌦️ @sunshowers.io · 30/09/2026
But I didn't take any dev tools classes either, and yet that's one of the most important parts of the software world lol
140
rain 🌦️ @sunshowers.io · 30/09/2026
I didn't take any AI/ML classes in university lol
150
rain 🌦️ @sunshowers.io · 30/09/2026
thanks for the cite!
030
rain 🌦️ @sunshowers.io · 30/09/2026
the full phrase "newtype wrapper"?
160
rain 🌦️ @sunshowers.io · 30/09/2026
I was curious specifically about attaching the word "wrapper" to "newtype"
130
rain 🌦️ @sunshowers.io · 30/09/2026
Is the specific phrase "newtype wrapper" a thing only Rust sickos say? Do Haskell people say "newtype pattern"?
6220
rain 🌦️ @sunshowers.io · 29/09/2026
thanks. yeah this came out of a couple of pain points at work
000
rain 🌦️ @sunshowers.io · 29/09/2026
Alternatively maybe it's just this verse from Frost
But yield who will to their separation,
My object in living is to unite
My avocation and my vocation
As my two eyes make one in sight.
Only where love and need are one,
And the work is play for mortal stakes,
Is the deed ever really done
For heaven and the future’s sakes.
100
rain 🌦️ @sunshowers.io · 29/09/2026
Maybe this is a spectrum not a binary etc
100
rain 🌦️ @sunshowers.io · 29/09/2026
Hmm, probably missing something here but I'm not sure this distinction is as robust as it's being made out to be — I labor to make sure the bills are paid but I really like what I do. So it's not undesired, but also not an end in itself (I would be doing an overlapping but different set of things)
100
rain 🌦️ @sunshowers.io · 29/09/2026
My belief that these are mass hacks on human psychology without a patch available (other than maybe GLP-1s? maybe??) remains uncontested
0180
rain 🌦️ @sunshowers.io · 29/09/2026
propublica.org
I Deliberately Bet Like a Problem Gambler. DraftKings Made Me a VIP.
Amid growing public health concerns, operators like DraftKings have touted “responsible gaming” tools and prompts. But as I went off the deep end, I found they were no match for the incentives and pro...
1181
rain 🌦️ @sunshowers.io · 29/09/2026
anyway this is out
crates.io
crates.io: Rust Package Registry
crates.io serves as a central registry for sharing crates, which are packages or libraries written in Rust that you can use to enhance your projects
1441
Reposted by rain 🌦️
H.E. Cas Piancey @cascoinfoundation.org · 28/09/2026
I started writing a big article on Pokemon TCG, the reselling scene, whatnot, etc. and look what I’ve been blessed with today
Coinbase: Your binder is about to get a major upgrade.
Rip packs on your phone.
Every pull backed by a real, physical card.
Vault it or ship it.
Soon on Coinbase.
1713814
rain 🌦️ @sunshowers.io · 28/09/2026
(also, she isn't white)
1230
rain 🌦️ @sunshowers.io · 28/09/2026
Yes I do make an effort to check pronouns and/or other clear signifiers, and use they if I'm not sure. Guess which technologies don't do this? LLMs.
1110
rain 🌦️ @sunshowers.io · 28/09/2026
oncall death spiral has been a real issue for a long time haha
110
rain 🌦️ @sunshowers.io · 28/09/2026
2026 brings about fun new horseshoe theories
0130
rain 🌦️ @sunshowers.io · 28/09/2026
Certainly not when you multiply the equity with the probability the company will go somewhere
070
rain 🌦️ @sunshowers.io · 28/09/2026
People desperate to ride the AI wave I guess
220
rain 🌦️ @sunshowers.io · 28/09/2026
I get the most normal recruiting emails
Hey Rain,

I'm working with a stealth robotics company in SF. The team is ex OpenAI, xAI, Jane Street, Citadel, and Zoox, they've raised $23M, and they're training foundation models so robots can do industrial work. They need an infra engineer to own training orchestration, GPU scheduling, and petabyte-scale data pipelines.

Pays 200k to 350k base plus early equity. One thing to know up front: it's in person in SF, 6 days a week.

Open to a quick call this week? I can share the company name and details.
5720
rain 🌦️ @sunshowers.io · 28/09/2026
The second run was so broken. I don't think you're meant to have 6 energy in this game haha
030
rain 🌦️ @sunshowers.io · 28/09/2026
back on my nonsense again
Slay the Spire 2 run summary: Regent victory at Ascension 10. Caption reads "The Regent has made it to the top?" Final stats: 22/99 HP, 49 gold, floor 49, run time 57:09. Singleplayer Standard, seed KDJ7CKT3CKX8, September 26, 2026, v0.111.0. Map path through Underdocks, Hive, and Glory. 25 relics (3 Ancient, 1 Event, 2 Rare, 5 Uncommon, 13 Common, 1 Starter). 31-card deck: Strike+, Crush Under, 2x Supermassive, Child of the Stars, Whistle, 4x Defend, Gather Light, Collision Course, Black Hole+, Guiding Star+, Falling Star+, CHARGE!!, 2x Bundle of Joy, BEGONE!+, Cloak of Stars+, Venerate, 2x Gamma Blast, Shining Strike, Guiding Star, Convergence, Ascender's Bane, Patter, Quasar, GUARDS!!!, Hidden Cache.Slay the Spire 2 run summary: Necrobinder victory at Ascension 10. Caption reads "The Necrobinder has made it to the top?" Final stats: 63/66 HP, 47 gold, floor 49, run time 56:45. Singleplayer Standard, seed 3HWPUBCL45QU, September 27, 2026, v0.111.0. Map path through Underdocks, Hive, and Glory. 21 relics (3 Ancient, 3 Rare, 6 Uncommon, 8 Common, 1 Starter). 34-card deck: Strike, Greed, Drain Power+, 2x Demesne+, Deathbringer, Veilpiercer, 2x Defend, High Five, Fear+, Sleight of Flesh+, Veilpiercer, Sacrifice, Bodyguard, Outmaneuver, Reanimate+, Dredge+, Cleanse+, Finesse, Unleash, 3x Defy, Enfeebling Touch, Ultimate Defend, Flatten+, Defy+, Ascender's Bane, Friendship, Bone Shards, Pagestorm+, Sic 'Em+, Lethality+. Several cards show enchantment icons.Slay the Spire 2 run summary: Defect loss at Ascension 10, ending on floor 49 at the final boss. Caption reads "The Defect tried its best, but it wasn't enough…" Stats shown: 53/85 HP, 18 gold, run time 49:03. Singleplayer Standard, seed 8C8AUC7GVQ30, September 27, 2026, v0.111.0. Map path through Overgrowth, Hive, and Glory. 16 relics (3 Ancient, 2 Rare, 3 Uncommon, 7 Common, 1 Starter). 33-card deck: 2x Defend+, Sunder+, Null, Feral+, 2x Chill+, Claw, Defend, 2x Go for the Eyes, Hailstorm, Echo Form+, Synchronize+, 2x Loop+, Zap+, Barrage, Echo Form, Hologram+, Squash, TURBO, Dualcast, Leap, Machine Learning+, Chill, Ice Lance, Hailstorm+, Ascender's Bane, Cold Snap, Scavenge+, Claw+, Signal Boost+.
3190
Reposted by rain 🌦️
Natsuka @octopodeeznuts.bsky.social · 27/09/2026
it's a loyalty test. costly signaling, and the cost is losing credibility outside of the in-group. the more absurd and transparently false, the costlier and therefore the more effective as in-group signaling. that's pretty Veblen-good-shaped if you ask me. (but don't ask me, i'm not an economist)
210411
rain 🌦️ @sunshowers.io · 27/09/2026
If all the data fields were inlined (internally tagged representation), the envelope deserialization would remain problematic
010
rain 🌦️ @sunshowers.io · 27/09/2026
Ah you are right -- I guess this is the adjacently tagged case. That would do internal buffering, yeah. Hmm. Well, this isn't an issue if you go through my crate to do the deserialization, lol
110
rain 🌦️ @sunshowers.io · 27/09/2026
if you use non-externally-tagged deserialization, serde buffers all the keys, looks for the tag, then forwards the remaining keys to the deserializer. This has a bunch of undesirable consequences, e.g. serde_ignored doesn't produce the right ignored keys
100
rain 🌦️ @sunshowers.io · 27/09/2026
Ah -- well, haha. I like separate version and data fields because it dodges internal buffering concerns
220
rain 🌦️ @sunshowers.io · 27/09/2026
the former is how my crate encodes things, yeah
100
rain 🌦️ @sunshowers.io · 27/09/2026
BTW I think this is what non-slop agentic engineering or whatever looks like -- careful experimentation, rigorous analysis, and me making the judgment calls
0350
rain 🌦️ @sunshowers.io · 27/09/2026
going to put it up on crates.io soon, but for now: github.com/oxidecompute...
github.com
oxide-versioned-envelope/crates/oxide-versioned-envelope/README.md at jj-stack/initial-commit-xmnltvrs · oxidecomputer/oxide-versioned-envelope
Versioned envelopes for JSON blobs. Contribute to oxidecomputer/oxide-versioned-envelope development by creating an account on GitHub.
180
rain 🌦️ @sunshowers.io · 27/09/2026
Friends don't let friends use serde_json::Value as a stepping stone
Appendix: why not serde_json::Value?
For reading versioned data, a naive implementation might do something like:

struct ReadEnvelope {
    version: u32,
    data: serde_json::Value,
}

impl ReadEnvelope {
    fn deserialize_data<T: serde::de::DeserializeOwned>(
        &self,
    ) -> Result<T, serde_json::Error> {
        serde_json::from_value(self.data.clone())
    }
}
But this has a few pitfalls:

serde_json::Value has funky behavior around objects in a few different ways.

For a payload like {"a":1,"a":2}, serde_json::Value drops the first a and only keeps the last one. This crate lets the deserialized type decide what to do with duplicate keys (a derived Deserialize would typically reject duplicate keys).

There is no workaround for this with serde_json::Value.

Object key order is only preserved if the preserve_order feature is enabled. This can lead to surprising roundtrip behavior. There are a couple different workarounds, neither of which is satisfying:

Enable the preserve_order feature, which affects all other crates in the Cargo dependency graph.
Accept that key order might not roundtrip. This feature-flag coupling is hard to explain to users; we can do much better than this.
With default features, serde_json::Value cannot represent certain types that serde itself supports deserialization for, such as u128s. Like 1.2 above, turning on arbitrary_precision would fix this, but that is undesirable for the same reasons.

If deserialization fails, the error message doesn’t carry a line/column offset.

An in-between option is serde_json::value::RawValue, which allows part of a JSON payload to be stored as a string, and addresses points 1 and 2. But for point 3, RawValue produces incorrect line and column offsets on error (the offsets produced are relative to the captured part of the payload, not relative to the full payload). Incorrect values are worse than not having the line and column offsets at all.Instead of either option, we perform passes over the underlying JSON directly:

The first pass validates that the JSON is well-formed, and for envelope reads, records which top-level fields are present.
For envelope reads, the second pass reads the version, ignoring the data.
Then, depending on the read method called, we perform one or more deserialization passes through the VersionSet::parse callback.
Why not one streaming pass? Because data could come before version, for example if serde_json::Value is used without preserve_order, or with jq -S.
5775
rain 🌦️ @sunshowers.io · 27/09/2026
Oh is that the origin
110
rain 🌦️ @sunshowers.io · 27/09/2026
Yeah I kind of think of it as a weirdness budget. my problem is just that, unlike normal play parties where most people stay well within the lines, that kind of party attracts people who push the boundaries
2140
rain 🌦️ @sunshowers.io · 27/09/2026
I'd agree with you in general about play parties, but I think cnc parties specifically ought to be verboten in any context
1200
Reposted by rain 🌦️
Embrace the Void @etvpod.bsky.social · 27/09/2026
Hard to imagine a better set of case studies on the harms of gifted and talented programs than the current crop of rationalists. Telling kids they’re special is such a blight.
2211
Reposted by rain 🌦️
Tom Flood @tomflood.bsky.social · 26/09/2026
“I will love you till I die And I will love you all the time So please put your sweet hand in mine and float in space and drift in time”
4643
rain 🌦️ @sunshowers.io · 26/09/2026
(The IDL/OpenAPI doc is generated from the Rust server as opposed to the other way round. Clients are generated from the OpenAPI doc but many types are replaced to be the same as server types)
000
rain 🌦️ @sunshowers.io · 26/09/2026
Definitely very Rust-oriented, yeah. In particular we strongly believe that the source of truth should be Rust types, not an IDL
110
rain 🌦️ @sunshowers.io · 26/09/2026
I assume you mean that the blood of the covenant is thicker than the water of the womb? Fully agreed!
0290
rain 🌦️ @sunshowers.io · 26/09/2026
ls-apis in particular is very cool. we: * extract a graph specification of service dependencies via the Cargo graph * formally verify certain properties on the spec, such as its acyclic nature (modulo certain exceptions) * simulate a full update in memory, ensuring that the impl is in topo order
010
rain 🌦️ @sunshowers.io · 26/09/2026
120
rain 🌦️ @sunshowers.io · 26/09/2026
Working on great docs for this. For now see: github.com/oxidecompute... and the associated RFDs github.com/oxidecompute...
github.com
GitHub - oxidecomputer/dropshot-api-manager: OpenAPI manager for Dropshot
OpenAPI manager for Dropshot. Contribute to oxidecomputer/dropshot-api-manager development by creating an account on GitHub.
120
rain 🌦️ @sunshowers.io · 26/09/2026
Our equivalent to that is docs.rs/drift which is an important pillar of our story, but only one of 20 or so problems we've solved
docs.rs
070
rain 🌦️ @sunshowers.io · 26/09/2026
(here, BSR is a "Buf Schema Registry", meant to register your protobuf schemas so that schema evolution is relatively safe. I think the Oxide solution to this problem is significantly better along every dimension, least of all that it's FOSS and you can use it too!)
5160