> good does not need to destroy evil; good needs only to resist evil, and when it does that, evil destroys itself
1,879 karma · joined November 21, 2015
> good does not need to destroy evil; good needs only to resist evil, and when it does that, evil destroys itself
x = 0.999...
x - x/10 = 0.9
x = 1The podcast No Dogs in Space brought this back for me. They discuss the stories of different artists, playing clips of their songs and explaining which got them their first gigs or record deals, when band members joined or left, other artists and music styles of the time, etc.
I've always been terrible with names, so I could never follow along with pop culture songs, albums, or artists. For the first time in my life I can overhear a song and identify it, the artist's influences, and related songs. I'm no longer a complete outsider in conversations about music.
Maybe once upon a time radio provided a lot of that--before it was taken over by standardized programming and advertisements.
The problem is that clients generally have a bunch of verbs they need to do. You have to design your objects and permissions just right such that clients can do all their verbs without an attacker being able to PATCH "payment_status" from "Requires Payment" to "Payment Confirmed".
RPC uses verbs, so that could just be the SubmitPayment RPC's job. In REST, the correct design would be to give permission to POST a "Payment" object and base "payment_status" on whether that has been done.
If you're thinking from the API author's point of view, I might agree with you if there was a ubiquitous JSON annotation standard for marking optional/nullable values, but I am sick of working with APIs that document endpoints with a single JSON example and I don't want to inflict that on anyone else.
It fixes a lot of the problematic stuff with grpc and I'm excited for webtransport to finally be accepted by safari so connectrpc can develop better streaming.
I initially thought https://buf.build was overkill, but the killer feature was being able to import 3rd party proto files without having to download them individually:
deps:
- buf.build/landeed/protopatch
- buf.build/googleapis/googleapis
The automatic SDK creation is also huge. I was going to grab a screenshot praising it auto-generating SDKs for ~9 languages, but it looks like they updated in the past day or two and now I count 16 languages, plus OpenAPI and some other new stuff.Edit: I too was swayed by false promises of gRPC streaming. This document exactly mirrored my experiences https://connectrpc.com/docs/go/streaming/
The problem with buses is that car traffic can never be bad enough to make cars worse than buses. Buses are doomed to always be worse than cars unless they have dedicated lanes or parking is unbearable. So cars slow down to equal the metro system, bikes, ferries, etc.
A dedicated bus lane can speed up cars more than another car lane because it pulls traffic off the road until driving convenience equals bus convenience.
It’s unfortunate how many APIs are documented with a single json example, but annotating them with comments (and maybe types?) would help immensely.
The simple term for this is Sharpe Ratio https://en.wikipedia.org/wiki/Sharpe_ratio
If you want to get really deep into investment theory, Beta implies basically everything is a good investment in small enough amounts https://en.wikipedia.org/wiki/Beta_(finance)
Though in practice, Beta is mostly irrelevant beyond a relatively simple portfolio https://finance.yahoo.com/news/warren-buffett-myth-more-why-...
Bonds may have gone down, but they still paid out. Unless people sold at a loss for liquidity or could’ve timed the market and bought low, they were better off than people stashing money in a mattress or most bank accounts.
2x0 = 2x1 + 2x(-1) = 2-2 = 0
and 2xx0 = 2xx1 x 2xx(-1) = 2/2 = 1
Inverting the concept and having those patterns stem from a fundamental identity can wait until its not seen as the mathematical equivalent of "Because I said so".