Sign in

sunshowers.io

@sunshowers.io
0 followers 0 following 1 posts
PostsRepliesMedia
rain 🌦️ @sunshowers.io · 7h
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 · 7h
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 · 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
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
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 · 26/09/2026
Food $200 Data $150 Rent $800 Types $480,000 Utility $150 someone who is good at the economy please help me budget this, etc
4712
rain 🌦️ @sunshowers.io · 24/09/2026
This is a French Reddit discussion about the book. I love that all the Claudeslop markers transmit so easily across languages. "c'était pas x, c'était y" lmao
Screenshot of French Reddit comments in r/Livres debating whether a novel published by Grasset was written by AI. The highlighted comment says: "Can people not read anymore? Those ridiculous metaphors every three lines, the lists of three, the overuse of 'it wasn't X, it was Y'… There are clearly passages written by AI. No need for Pangram or anything else to see that."
0210
rain 🌦️ @sunshowers.io · 21/09/2026
Look, a lot of people are turning their brains off with AI and that's bad. But I consider this an evil ideology — I think automating drudgery is an essential part of human liberation
The Al bros would like us to believe that much of what we spend our time on is busywork/ drudgery/tedium and we would be so much better off if that could be delegated.
1435520
rain 🌦️ @sunshowers.io · 18/09/2026
Gosh I love the writing here. It is so strong, so precise
Epilogue
Software has long benefited from a kind of security through complexity. The code and even the vulnerability could be public, but turning a bug into a reliable exploit still required rare expertise, significant time, and knowledge of the target environment. Known memory corruption vulnerabilities were expensive to operationalize, while zero-days were mostly reserved for the highest-value targets.

This was never a real security boundary, but it protected ordinary companies in practice from software vulnerabilities. AI is removing that protection by turning more of this scarce expertise into compute. Work that once required a well-resourced team and months of effort can now be compressed into days.

Security assumptions must catch up with attacker capabilities. A realistic threat model should take into account the economics of exploitation today, instead of relying on outdated assumptions 6 about who can carry out sophisticated attacks.

Hacktron’s mission is to help secure the internet by finding and eliminating vulnerabilities in widely trusted software before malicious actors do. We are continuing this research across frontier labs and other internet-critical systems. If you are responsible for securing one of them, we would like to work with you.
0141
rain 🌦️ @sunshowers.io · 13/09/2026
had Astra write some tests, it came up with this. what in the world is this wall of text
screenshot of an astra-generated test that contains a wall of text-like code
7540
rain 🌦️ @sunshowers.io · 09/09/2026
sad emoji
tailscale.com connection timed out screenshot
120
rain 🌦️ @sunshowers.io · 07/09/2026
The sense of entitlement is dripping off the page. Wow
As our conversation wraps, I reflect on the fact that Spero has come across as less than 100 percent engaged. Cagey, even. He roamed around his apartment throughout the interview. He took his laptop to sit near his living room, then to a window with a clutter of houseplants, then a different corner of his kitchen. At several points, his face floated halfway out of frame. He slipped on his headphones, then took them off again. At one point, while discussing model training, he gently burped.
I hadn’t expected this. Was he just busy and tired? Did he not take me seriously? Had the deluge of media coverage rendered interviews rote—or annoying? In the end, I could make assumptions, but there’s only so much anyone can ascertain from an hourlong interaction. Pangram aims to take all the nuances, variables, and unknowns from a piece of communication and return a number. Humans, of course, are far more ambiguous than all that.
570
rain 🌦️ @sunshowers.io · 07/09/2026
Here's some example alt text generated by Fable 5.1 for my last sts2 run -- I think it's fine. (I wonder if the game should let you generate alt text for it!)
A run summary from Slay the Spire 2 (v0.111.0): an Ironclad run that ended in defeat at Ascension 10. Green text near the top reads, "The Ironclad tried his best, but it wasn't enough..." The status bar shows 61 of 80 health, 172 gold, four empty potion slots, floor 49, and a timer at 52:57. The run began September 6, 2026 at 1:42 PM on seed CJH1C8HB5DBA in Singleplayer Standard mode.

Below the map, 17 relic icons appear in a line: 3 Ancient, 1 Rare, 4 Uncommon, 8 Common, and 1 Starter (Burning Blood at the far left).

The deck holds 29 cards: 1 Event, 3 Rare, 9 Uncommon, 9 Common, 2 Curse, and 5 Starter. The list, in five columns, reads: Strike, Armaments+, Clumsy, Exterminate, Second Wind; 3x Defend, Molten Fist, Rampage, Burning Pact+, Rage+; Bash, Iron Wave, Brand, 2x Evil Eye, Feel No Pain+; Ascender's Bane, 2x True Grit, Anger+, 2x Tremble, Headbutt+; Battle Trance+, Unmovable+, Stone Armor+, Barricade+. Several names appear in green or purple rather than white.

A yellow back arrow and a red return button sit at the left edge. A Share button in the lower right is crossed out with a red line.
380
rain 🌦️ @sunshowers.io · 04/09/2026
One of the things that's characteristic of slop is not following the basic rules of clarity in technical writing (see Williams): things like short, clear subjects Compare with: "At that scale, no team can do this alone, and no single tool can reason about everything in the standard library."
take it. The standard library is enormous roughly 34,000 functions across core, alloc, and std - and it ships a new release every six weeks. Proving the absence of undefined behavior across a codebase like that was never going to be something any single team,
Company, or tool may have the resources to do alone.
1321
rain 🌦️ @sunshowers.io · 03/09/2026
that number keeps going up
crates.io dashboard screenshot showing that my crates have 608,964,395 total downloads
3460
rain 🌦️ @sunshowers.io · 03/09/2026
This is called mob rule and is the lowest, basest form of government. The political story of humanity has been about finding ways to rise from this Hobbesian state
Bluesky is a community of users. When a community rejects a user account that tries to promote hate or dangerous behavior that community responds accordingly to protect its people.
Do not confuse accountability with "harassment"
31439
rain 🌦️ @sunshowers.io · 28/08/2026
You know how GitHub's review model is broken around force pushes? You lose basic things like the ability to do interdiffs across versions from the UI. Well, it turns out that their shiny new stacked PR tool _also_ does force pushes I'm going to lose it. Does no one there use their product
screenshot of github showing me landing something on main, the base of a stacked PR changing from something to main (fine) but then github doing a force push
41173
rain 🌦️ @sunshowers.io · 23/08/2026
Of course uniform compensation helps here. We don't feel the need to jockey for projects to pad perf review: oxide.computer/blog/oxides-...
It frees us to both lead and follow. We expect that every Oxide employee has the capacity to lead others — and we tap this capacity frequently. Of course, a company in which everyone is trying to direct all traffic all the time would be a madhouse, so we also very much rely on following one another too! Just as our compensation model allows us to internalize the values of different roles, it allows us to appreciate the value of both leading and following, and empowers us each with the judgement to know when to do which. This isn’t always easy or free of ambiguity, but this particular dimension of our versatility has been essential — and our compensation model serves to encourage it.
0241
rain 🌦️ @sunshowers.io · 19/08/2026
"first do no harm" is a sign of, to be charitable, an undeveloped set of morals
We live in a time when to question any prevailing orthodoxy will, in many cases, be met with an emotional outpouring. Casting any form of doubt on ADHD will absolutely not be the exception. But Pemberton answers his questions convincingly. And the redresses proposed – try changing diet, screen and activity levels first, making school curricula more flexible, and making drugs the last resort – seem neither radical nor uncompassionate. They seem, if primum non nocere (“first do no harm”) is your goal rather than profit (there is little money to be made in encouraging parents to take their children to the park), to be quite the opposite.
160
rain 🌦️ @sunshowers.io · 19/08/2026
British media seems to have an allergy to the belief that people can describe their own experiences in good faith. Seems like a foreign concept to them
Pemberton interviews cognitive neuroscientist Prof Katya Rubia, who has 30 years of experience working with brain imaging. She says that there is no convincing data that “ADHD brains” are any different from “normal” brains. Others go through the list of diagnostic criteria, which include things such as finding it difficult to wait your turn, squirming in your seat and being unable to play quietly. The broadness with which the criteria are drawn means that, according to Dr Heath: “If you want the diagnosis, you will be able to get it.”
3260
rain 🌦️ @sunshowers.io · 16/08/2026
yea face meme
110
rain 🌦️ @sunshowers.io · 11/08/2026
Added a note to the XProtect docs within nextest to also add tmux/zellij etc as an exclusion: nexte.st/docs/install...
Adding a terminal multiplexer to Developer Tools¶
If you use a terminal multiplexer like tmux or zellij, you will need to add the multiplexer to Developer Tools. This is because exclusions apply to children of a process, and shells within the multiplexer are not children of the terminal.

If the macOS binary is ad-hoc signed — i.e., not notarized using a paid Apple Developer account — you will need to re-add the terminal multiplexer to Developer Tools after each update. (As of 2026-08, Homebrew's tmux and zellij binaries are ad-hoc signed.) This is because Developer Tools exclusions are based on the cryptographic identity of the binary's signer, and ad-hoc signatures use a fresh identity each time.
1110
rain 🌦️ @sunshowers.io · 02/08/2026
What was "Ascender's Scorn"? 👀 slaythespire.wiki.gg/wiki/Slay_th...
screenhot from link:

Ancients:

Added new positive Neow blessings:
Patience
Violence
Reworked Empower into a downside Neow blessing
Reworked Windfall Neow blessing
Reworked Vakuu's Music Box relic
BALANCE:
General:

First run is now more set in stone
Changed Ascender's Scorn card: now also says "At the end of your turn, if this is in your Hand, take 1 damage."
120
rain 🌦️ @sunshowers.io · 02/08/2026
contra barrier powerup, a red floating thingy with a B written inside it
010
rain 🌦️ @sunshowers.io · 31/07/2026
they were looking for feedback on hacker news and I couldn't help it
HN comment from me:

I apologize for being somewhat direct but what prior art did you engage with? Why are you making people create a branch for each change in a stack? Why do developers have to create new commits when iterating on the PR? Where is the proper support for interdiffs? What about change IDs?
The fundamental issue with GitHub -- really, its original sin -- is that the review model is wrong. It encourages a new commit + merge workflow, which is simply worse than an amend + rebase workflow. Basically every other review system in existence -- Gerrit, Phabricator, what Google and Meta have internally, the LKML -- works around stacks where people amend and rebase their commits when changing them. All of these have some notion of a "diff", with "versions" that are each tracked separately, and the ability in the review tool to do diffs between those versions. My hope with stacked PRs was that for once GitHub would use this as an opportunity to modernize its review system and bring it in line with all of these other ones. But sadly that just doesn't seem like it's on the cards.
2223
rain 🌦️ @sunshowers.io · 26/07/2026
another super easy win. lunar pastry from neow is really great
Slay the Spire 2 run-summary screen for a victorious Regent run (v0.109.1, Ascension 10, seed FECR07HY2N2H, Singleplayer Standard, July 26 2026, 49:29 elapsed). Top bar shows 40/67 HP, 21 gold, and floor 49. A green quote reads "The Regent has made it to the top?" Four small icons at upper right mark run milestones. Below are three act maps — Overgrowth, Hive, and Glory — each a row of encounter icons (elites, unknown "?" rooms, campfires, shops, treasure, and boss nodes), with a few nodes marked by a small red X. The Relics section lists 20 relics (1 Shop, 3 Ancient, 2 Event, 6 Rare, 1 Uncommon, 6 Common, 1 Starter) as a grid of item icons. The Cards section lists 30 cards (3 Rare, 7 Uncommon, 11 Common, 1 Curse, 8 Starter): Strike, 2x Defend, Defend, Defend, Falling Star, Venerate, Ascender's Bane, Defend, 2x Crescent Spear, Hidden Cache, BEGONE!, Guiding Star+, Gamma Blast, Gather Light, Monarch's Gaze, Royal Gamble, Tyranny, Convergence+, Reflect, Glitterstream+, Crush Under, Radiate, Seven Stars+, Refine Blade+, Patter+, Child of the Stars+, Glitterstream, and CHARGE!! Upgraded cards appear in green and modified cards in pink.
010
rain 🌦️ @sunshowers.io · 26/07/2026
Had a few losses lately, but this run annihilated the act 3 bosses -- zero damage from Aeonglass. Double-played Afterimage+ turn 1 is so broken
Slay the Spire 2 run-summary screen for a victorious Silent run (v0.109.1, Ascension 10, seed ZA6GGEJKY6D4, Singleplayer Standard, July 26 2026, 59:08 elapsed). Top bar shows 82/82 HP, 116 gold, and floor 49. A green quote reads "The Silent has made it to the top?" Below are three act maps — Overgrowth, Hive, and Glory — each shown as a row of encounter icons (elites, unknown "?" rooms, campfires, shops, treasure, and boss nodes). The Relics section lists 20 relics (1 Shop, 3 Ancient, 1 Event, 2 Rare, 3 Uncommon, 9 Common, 1 Starter) as a grid of item icons. The Cards section lists 37 cards (1 Event, 4 Rare, 13 Uncommon, 6 Common, 2 Curse, 10 Starter): 3x Strike, 5x Defend, Neutralize, Survivor, Ascender's Bane, Neow's Fury, Noxious Fumes, Dagger Throw, Leg Sweep, The Hunt, Expose, Afterimage+, Outbreak, Scare, Bouncing Flask, Hand Trick, Piercing Wail, Hidden Daggers, Untouchable, Clumsy, Escape Plan, Footwork+, Corrosive Wave, Squash, Tools of the Trade, Leg Sweep+, Backflip, Untouchable+, Deflect, Fasten, and Accelerant. Upgraded cards appear in green.
150
rain 🌦️ @sunshowers.io · 24/07/2026
coward
screenshot from claude code

 Nextest run ID 10577d2b-724b-4ffa-b905-98d6b62b834d with nextest profile: default
    Starting 3 tests across 1 binary (4 tests skipped)
        PASS [   0.392s] (1/3) wicketd::mod integration_tests::commission::test_commission_start_update
        PASS [   0.415s] (2/3) wicketd::mod integration_tests::commission::test_commission_rss_config
        PASS [   0.419s] (3/3) wicketd::mod integration_tests::commission::test_commission_inventory
────────────
     Summary [   0.419s] 3 tests run: 3 passed, 4 skipped


then claude says: Those times look impossible for tests that spin up sp-sim and assemble a TUF repo. Verifying.
1310
rain 🌦️ @sunshowers.io · 23/07/2026
update
PR title showing "[28/n] [wicketd] add the commission API, client, and OpenAPI document"
090
rain 🌦️ @sunshowers.io · 23/07/2026
actually no!
Getting started
If you’re new to this I think it makes most sense to start by considering what kind of paper is going to work best in your life. Are you writing looseleaf, or in notebooks? Legal pads? Blue books? Remember, it’s okay to use lots of paper, so pick something that isn’t too precious and that is easy to replenish. I use a lot of moleskine notebooks and Mead comp books, which I can buy in bulk online. For composing fiction I use fancy looseleaf paper.

If you have access to a store where they sell fountain pens, take some of that paper there and see what works best. If you’re working with cheaper, thinner paper, start with finer nibs and work up to fatter ones until you start to see bleed-through.

Buy cheaper pens until you know what you like. I doubt there’s much of a difference between cheaper and more expensive fountain pens in terms of their actual performance. What you’re paying for, in an expensive pen, is fancy materials and styling. For example, if you look at the Pilot Vanishing Point line of pens - an ingenious fountain pen that you can click, like an old-fashioned ballpoint, to retract the nib inside the barrel - fancier versions cost five times as much as the base model.

In all honesty, the Pilot G-2 gel pens are going to give you 80% of what you could expect from a fountain pen for minimal cost.

On the other hand, a ten-pack of Pilot G-2 gel pens goes for about twenty bucks. For the same amount you can buy a simple but completely serviceable fountain pen that will last longer than you will.
230
rain 🌦️ @sunshowers.io · 23/07/2026
from Neal Stephenson. fully cosigned on not using a pencil or a typical ballpoint to write. but why does it pain him to say that gel pens are about as good as fountain pens? I love gel pens, I use the Zebra Sarasa Clip 0.5 which is basically the perfect pen
Don’t use a pencil (or a cheap ballpoint)
It’s pretty obvious that you’re going to get tired faster if your muscles have to exert more force. Writing with a pencil requires significantly more force than writing with a good pen. Old-school ballpoints with thick ink are no better. You can see visual evidence of this if you flip over a sheet of paper on which you’ve been writing with a pencil or an old ballpoint. The paper will bear a visible imprint where it was pressed down by the writing instrument. Often that will continue down into the stack of paper beneath. That’s because you had to push hard. This doesn’t happen with a fountain pen. If the nib is working properly you need to exert very little force. The nib is basically skating on the little lake of ink that it has just laid down.

Pains me to say it, but rollerball gel pens are about as good as fountain pens on this front.
4100
rain 🌦️ @sunshowers.io · 21/07/2026
back on my BS again
GitHub PR timeline where user 'sunshowers' repeatedly bumps the title counter from '[draft] [11/n]' to '[draft] [16/n]' on a wicketd commission API pull request over 3 days
180
rain 🌦️ @sunshowers.io · 20/07/2026
vibed?
Filip Jerzy Pizło
@filpizlo
Rust isn’t memory safe and every serious PL researcher knows this
10:22 AM · Jul 20, 2026
·
870
 Views
3482
rain 🌦️ @sunshowers.io · 20/07/2026
lol
tweet from Filip Pizlo:

C and C++ programs are already remarkably reliable

The problem with C and C++ is memory safety. Rust and Sig also have this problem. 

Fil-C solves this problem

> drop handlers and sum types

These things have nothing to do with reliability or memory safety
2530
rain 🌦️ @sunshowers.io · 13/07/2026
probably the funniest part of the run. slow deck + bad draw order meant I took more damage here than in either of the bosses
A Slay the Spire 2 floor tooltip, shown when hovering over a monster icon on the run map. The panel reads: Floor 46, 53/69 HP, 183 Gold. Enemy: Many Scrolls of Biting. Below that, in red: Lost 6 Max HP, 17 Damage, and 4 Turns. Rewards: 11 Gold and the card Snakebite+. Skipped: Deadly Poison+, Dodge and Roll, Predator, Dagger Throw+, and Speedster. A monster head icon and yellow cursor arrow sit at the top left, with relic and card icons partially visible behind the panel.
010
rain 🌦️ @sunshowers.io · 13/07/2026
I like slay the spire 2 runs where there isn't a single broken thing but instead there's just a lot going on. feels very fair
Slay the Spire 2 victory screen for the Silent (skull icon, Ascension 10). Run stats: HP 55/69, 183 gold, 49 floors climbed, run time 1:15:23, dated July 12, 2026, seed J2EHZ04W6Q, Singleplayer Standard, version 0.108.0. A green quote reads "The Silent has made it to the top?" Two potions are held in the potion slots (a red flask and a bomb-shaped vial). Three rows labeled Overgrowth, Hive, and Glory show icon sequences tracking the encounters on each act's path — monsters, elites, question-mark events, shops, campfires, and treasure. The Relics section lists 17 relics (1 Shop, 3 Ancient, 2 Rare, 2 Uncommon, 8 Common, 1 Starter) displayed as a row of relic icons. The Cards section lists 41 cards (7 Rare, 17 Uncommon, 6 Common, 2 Curse, 9 Starter): 2x Strike, six Defends, Neutralize, Survivor, Ascender's Bane, Greed, Noxious Fumes, Snakebite, Outbreak, Hidden Gem, Up My Sleeve, Tactician, The Hunt, Shadowmeld+, Bubble Bubble+, Master of Strategy, Prepared+, Discovery+, Leg Sweep, Backflip, Calculated Gamble+, Prepared, Reflex, Speedster, Tools of the Trade, Adrenaline, Blur+, Prowess+, Dodge and Roll, Well-Laid Plans, Well-Laid Plans+, Outbreak, Corrosive Wave, Expose, Memento Mori, and Snakebite+. Upgraded cards show in green, curses and gem-socketed cards in purple. A disabled Share button sits in the bottom right, with navigation arrows on either side of the screen.
170
rain 🌦️ @sunshowers.io · 13/07/2026
I.... don't know how to feel about this
screenshot of YouTube video: slay the spire 2 q&a at manifest 2026 (which is a Yudkowskyian rationalist prediction market festival/conference)
280
rain 🌦️ @sunshowers.io · 13/07/2026
this is very funny, to me
Wikipedia screenshot 

Legal origins theory became popular among economists in the late 20th century, at the same time that practitioners of comparative law were largely abandoning taxonomic classifications of legal systems.
040
rain 🌦️ @sunshowers.io · 11/07/2026
Too bad the faces eaten generally don't overlap with the people who encouraged the leapords
from Scott Alexander:

Some "democratic backsliding" "experts" are biased and left-wing (one favorite trick
is to conduct studies showing that right-wingers are more authoritarian on average,
by using a construct literally called right-wing authoritarianism). This is true of all
experts. Some biology experts are biased and left-wing, but that doesn't mean
vaccines don't work and we should all take hydroxychloroquine instead. I spent the
first half of my writing career calling out biased left-wing experts, the flood swept all
those people away, and now we're ruled by germ-theory-denialists and Waffle-
House-teleporters. Not a day goes by that I don't want the old biased experts back.
To paraphrase Cormac McCarthy, you never know what worse institutions your bad
institutions have saved you from.
2303
rain 🌦️ @sunshowers.io · 11/07/2026
sick day today so did a couple of silent runs. first one died to lagavulin (guess you really need to stuff your deck with damage commons against her) -- second one I turned the cursed pearl into snakebite/well laid plans/horn cleat, which easily won w/shivs and history course
Slay the Spire 2 victory screen for the Silent character (Ascension 10). The run summary reads: HP 20/70, 142 gold, 49 floors climbed, run time 1:08:46, dated July 10, 2026, seed 370HXKL070, Singleplayer Standard mode, version 0.108.0. A green quote reads "The Silent has made it to the top?" Three boss rows labeled Overgrowth, Hive, and Glory show icon sequences tracking the run's path and encounters. The Relics section lists 23 relics (1 Shop, 3 Ancient, 1 Event, 4 Rare, 5 Uncommon, 8 Common, 1 Starter) shown as a grid of relic icons. The Cards section lists 36 cards (1 Event, 2 Rare, 11 Uncommon, 8 Common, 3 Curse, 10 Starter), including 3x Strike, Neutralize, Clumsy, Dodge and Roll, Strangle, Prepared, Noxious Fumes, Defend, Survivor, Finisher, Up My Sleeve, Cloak and Dagger, Backflip, Backstab, 2x Defend, Ascender's Bane, Snakebite, Leading Strike, Noxious Fumes+, Blade of Ink, Blur+, Defend, Greed, Well-Laid Plans+, Knife Trap, Accuracy, Apotheosis+, Deadly Poison, Footwork, Deflect, Calculated Gamble+, and Mad Science.
191
rain 🌦️ @sunshowers.io · 10/07/2026
worth mentioning that one of the interesting things about LLMs is they take some of the context switching pain of long builds away. One bit of our main work codebase I loathe writing by hand is Diesel (SQL ORM) because of the compile times. these days I have Claude write and review most Diesel code
I noticed that you neglected to mention compilation speed. Zig compiler project is about 600,000 lines of code - roughly the same size as Bun before the rewrite, and I'm clocking 16s to build from scratch with a clean cache, followed by 90ms for each subsequent edit with incremental compilation enabled. What are the corresponding measurements of Bun post-rewrite?
2221
rain 🌦️ @sunshowers.io · 10/07/2026
as a maker of tools, if someone stops using them, the appropriate disposition, at least in public, is humility and curiosity. not "git gud" people stop using my stuff all the time. sometimes for good reasons, and sometimes for bad ones. easier said than done, but you just gotta roll with it
The blog post is expertly written. It's almost like the marketing department of a trillion dollar company has a lot of money riding on this article.

I do have some bones to pick however.

There's a dichotomy being presented here where you have to either choose a "style guide" or a programming language feature in order to avoid bugs. The sleight of hand misdirects the reader away from the main way bugs are eliminated: by dedicating engineering resources to it. You're not giving TigerBeetle nearly enough credit. Quite simply they put in the time to find and eliminate the bugs, they make an effort to maintain a healthy relationship with ZSF, and Bun did neither of those things.
2310
rain 🌦️ @sunshowers.io · 05/07/2026
context: upcoming nextest version will let you run `cargo nextest help repo-config`, `cargo nextest help user-config`, etc, and render the config reference in the terminal. akin to man pages that also work on Windows
screenshot of `cargo nextest help user-config` in a terminal pager (less in this case) with syntax highlighting and hyperlink support
090
rain 🌦️ @sunshowers.io · 02/07/2026
google maps with circled, from NWW to SEE, Atherton, Menlo Park, and Palo Alto
030
rain 🌦️ @sunshowers.io · 30/06/2026
we all just got a raise @oxide.computer
Oxide Computer careers page for Control Plane Engineer, showing salary raised from (previously) $250k to $275k
51155
rain 🌦️ @sunshowers.io · 29/06/2026
fixed a little bug in rustdoc recently -- now trait impls with nested fundamental wrappers like `impl From<Box<T>> for U` should show up more consistently 😇 docs.rs/camino/lates...
rustdoc screenshot of camino

impl From<Box<Utf8Path>> for Box<Path>
fn from(path: Box<Utf8Path>) -> Box<Path>
Converts to this type from the input type.
0260
rain 🌦️ @sunshowers.io · 29/06/2026
back on my bs again
Slay the Spire 2 run summary screen for the Silent character. The quote reads 'The Silent tried her best, but it wasn't enough...' The run reached floor 49 over 1 hour 49 minutes, ending with 70/77 HP, 85 gold, and ascension level 10, on Singleplayer Standard mode (seed R15LK9E3JA, v0.107.1). A path map shows three regions traversed — Underdocks, Hive, and Glory — marked with icons for combats, elites, bosses, treasure, shops, and unknown events. The run collected 24 relics (1 Shop, 3 Ancient, 7 Rare, 5 Uncommon, 7 Common, 1 Starter) and a 36-card deck (5 Rare, 10 Uncommon, 10 Common, 2 Curse, 9 Starter), including upgraded cards like Shadowmeld+, Mirage+, Noxious Fumes+, Serpent Form+, and Well-Laid Plans+, plus staples such as Strikes, Defends, Snakebite, and Adrenaline
2180
rain 🌦️ @sunshowers.io · 26/06/2026
fairly prominent open source maintainer, straight up saying projects like Harfbuzz have to be deemed a "malicious fork". The sense of entitlement is shocking
6545
rain 🌦️ @sunshowers.io · 26/06/2026
This is a problem with a far more elegant solution
bsky app list of languages, with the language in the local script first and in the current language later
200
rain 🌦️ @sunshowers.io · 23/06/2026
Reminder
SpaceX post-IPO unlock timeline (when more shares can be sold), in Chinese:

* 20% Q2 2026
* 7% 2026-08-21
* 7% 2026-09-10
* 7% 2026-09-25
* 7% 2026-10-10
* 7% 2026-10-25
* 28% Q3 2026
* 180-day unlock on 2026-12-09
041