Avatar
Rusty Russell
f1725586a402c06aec818d1478a45aaa0dc16c7a9c4869d97c350336d16f8e43
Lead Core Lightning, Standards Wrangler, Bitcoin Script Restoration ponderer, coder. Full time employed on Free and Open Source Software since 1998. Joyous hacking with others for over 25 years.
Replying to Avatar ZEUS

TIL "ineluctably"!

Replying to Avatar Rijndael

One of my goto weekend breakfasts is a dutch baby. It’s like a cross between a souffle and a pancake. It’s simple and you can have it on the table in ~30 minutes.

Last week and this weekend I threw some sliced bananas into it and it’s easily 10x better. Permanent spot in the rotation now. Here’s how you make it:

Set your oven to 425ºF.

Put a big pan on the stove with 4 Tbsp (half a stick) of butter on low/medium-low heat.

While that melts, start mixing your batter. It’s super easy:

- 3 room temp eggs (pop them in hot water for a few minutes if they’re out of the fridge)

- 1/2 cup of roomish temp milk (20 seconds in the microwave if its cold)

- 1/2 cup of flour

- 1 Tbps of sugar

- splash of vanilla

That’s it. Just mix that up until its smooth.

Your butter should be bubbly. Slice up 2 bananas and splread them out in a single layer in the butter. Let them simmer in the butter for like 2 minutes until they’re soft and your kitchen smells amazing.

Dump the batter into the pan on top of everything. You dont need to stir or anything, just dump it in there and give it a little shake. Throw the pan into the oven for 20 minutes. After 20 minutes, it should be puffy and golden. Drop the heat to 300 and cook for another 5minutes.

Take the pan out. The pan is going to be HOT. Leave an ovenmit on the handle so you dont accidentally grab the handle while you’re cutting it.

Cut it into quarters (or whatever you want).

Traditionally dutch babies are served with powedered sugar, syrup, lemon juice, or some combination of them. But there’s so much sweetness from the bananas that we just eat it plain.

So there you go. Easy, 30 minute breakfast that looks really complicated and impressive (seriously when you pull this thing out of the oven you’ll be shocked. It puffs up around the edges like a souffle). And it’s got some protein and fruit in it.

Enjoy!

Your temperature is wrong? 220°C is very hot:

1. Non-spec-final features are always behind a flag.

2. Spec final requires two independent implementations which interoperate.

3. Then nostr:nprofile1qqsvh300dvquh50l5t9et2257pxrsk5ndsdgdcdmnnxl9nc0f6l2ejcpz3mhxue69uhhyetvv9ujuerpd46hxtnfduq3samnwvaz7tmjv4kxz7fwwdhx7un59eek7cmfv9kqzrrhwden5te0vfexytnfdu7y9l4j needs to put in PR to make it on by default.

4. Then we need a release!

Thursday was an amazingly productive #CLN day (took a break from child wrangling during school holidays to go into my coworking space).

I've been grinding askrene's min-cost-flow solver against real data: my new toy is a stress test that asks for a route from my node, then asks again with "maxfee" 1msat less than the returned fee. This makes it prioritize fees more. I repeat this until failure, for each of the 100 most-channels nodes in my gossip snapshot.

This has been great for tuning the various parameters available. In particular, our linearization approximation for basefee (we need a linear function, which basefee breaks, so we approximate) was all wrong. Also, our mixing function (how much to weight fees vs probabilities) was both *complex* and *suboptimal*, so after a few tests I decided to simply multiply the probability factor by 8, which makes them comparable in practice! (This may change: we really want to compare the medians of each, to determine the factor, but 8 is simple, and reasonable for now).

Our algorithm would first run ignoring fees, and if that comes in under maxfee, just return. In practice this is silly: it would sometimes choose the more expensive of two identical paths! So now we start with a 1% fee weighting, to at least have *some* bias.

All this testing on real data is giving me more confidence than I ever had about our previous efforts, but there's still more to do before next month's release...

Of course, CLN allows this "0.012sat" everywhere msat amounts are valid!

You do you, y'know!

As so often, well put by Greg Maxwell:

"The whole point of bitcoin is to exist outside of any centralized control. Satoshi was clearly passionate about this. So much in our lives is mediated through centralized authorities that people seem at times desperate to hand control to someone. The things in our lives that aren't centrally controlled, like -- say-- the English language just get taken for granted. How could Bitcoin achieve its purpose with some founder around? The technology was designed so that the identity of Satoshi is irrelevant, but a lot of people have a hard time understanding that."

https://www.reddit.com/r/Bitcoin/comments/1fzi657/why_not_peter_todd/lrc6ok0/

So, npub.cash and Amethyst: do I really put my nsec into the npub.cash site: that seems like an anti-pattern?

One day I'll de-custodize those sats!

So I compromised and volunteered to talk at OP_NEXT next month, remotely. Now I need to find time to polish up the Script Restoration implementation and draft BIP, and write a talk, while at the same time we're approaching the next CLN release which *needs* all the pay improvements I've been working on.

When I overcommit like this, it's usually my family that ends up short-changed. Yet none of this can be delegated, and both are important, so I suspect that the 28.11 release of CLN may be delayed.

I keep wishing one of my kernel colleagues would want to work on Lightning: a veteran C coder with taste would be a good hire for Blockstream right now!

I've been heads-down working on xpay. We've only a month to the next release, so pressure is building.

Lagrang3 has been giving great feedback on the askrene APIs (the core: getroutes is now about 16x faster than it was!), as he adapts renepay, and I've been writing xpay as clean-slate. We're now pretty happy with it, and it's been a delight to collaborate.

I've also checked a snapshot of mainnet into master, for more accurate testing, using my new topology compressor (500k!).

It's school holidays here so I've had less time than usual to code, but I'm still cautiously optimistic we will make the next release, though as an experimental option...

Great! You'll be happy to know that we're taking the core algorithm of renepay and using it to drive a new payments system in the next release!

"Hand sanitizer smells sad."

My 8yo said this, and they're right. Damn.

I have mid/late twenties friends who live on them. It's weird to me, but definitely a demographic...

[ ] Nice idea, but it would take me longer to explain how it was supposed to be done than it would to rewrite it for you.

The total length needs to fit in 64k, so yes. But the other fields tend to be no more than a few kB...

Yes, but technically you always could.

Because you fetch an invoice, that invoice contains the message. And now you can prove that you wrote the message, and that the recipient received the message: the invoice they sign has your message in it, and your key (often a made up one for that payment).