I didn’t finish the article because I went down an Ad-bashing rabbit hole though.
Self-hosting may lead to sites gaming impressions data. Not that that's not also a problem with third-party hosting.
Helps your advertiser still gain some info if the user is blocking the 3rd party cookies they'll try to render anyway.
The drive to map 1st party cookies to 3rd party cookies to compensate for stricter default cookie blocking in non-Chrome browsers, and the generalised failure of doing so, is what drove Google's FLoC.
Even though user targeted ads are generally pretty ineffective, advertisers are addicted to them.
We really need some cooperative filtering and/or deep learning approach for ads.
I'm so glad to be out of that market.
Granted, most sites become unusable.
The 2 Generals Problem was the first thing that popped into my head, so I decided to write this guest blog post about it.
For example here is the writeup by Eric Brewer (of CAP fame) how Google is able to achieve CA (consistency and availability) in practice because of their reliable network architecture.
https://cloud.google.com/blog/products/databases/inside-clou...
Along the same lines, notice that while the first message can be arbitrarily long (for example the time and date of the attack, maybe the strategy), the ACK is only a single bit.
So in practice, Alice's message could be, "Attack on May 9th at Dawn, and as soon as you receive the message, set the hill behind you on fire."
So no matter how good the enemy is at capturing messengers, if at least one messenger gets through, and Alice is able to notice whether the hill behind Bob is on fire, they will be able to coordinate successfully.
Quote: "Let us now turn to cases where the CAP theorem might apply. Consider error 6 where a LAN partitions. In my experience, this is exceedingly rare, especially if one replicates the LAN (as Tandem did). Considering local failures (3, 4, 5, and 6), the overwhelming majority cause a single node to fail, which is a degenerate case of a network partition that is easily survived by lots of algorithms. Hence, in my opinion, one is much better off giving up P rather than sacrificing C. (In a LAN environment, I think one should choose CA rather than AP). Newer SQL OLTP systems (e.g., VoltDB and NimbusDB) appear to do exactly this."
Yes, setting a hill on fire may be more likely to "get through" than sending a messenger in response, but there's still a chance that the fire won't be seen.
And, if no messengers (from Alice) got through, you might decide to set the hill on fire anyway, not knowing how Alice will interpret that act.
Yes, better networks help, but as long as they're short of perfect....
for example
Back-To-Basic Reading: Byzantine Generals <https://news.ycombinator.com/item?id=13866732>
The Byzantine Generals Problem (1982) [pdf] <https://news.ycombinator.com/item?id=8697029>
1. Alice sends message to Bob to attack on Tuesday and 9am
2. Bob sends message to Alice confirming this is fine
3. Alice sends confirmation of confirmation to Bob
4. Bob sends confirmation of confirmation confirmation to Alice
5. Alice sends confirmation of the confirmation of the confirmation confirmation to Bob
But at this point, Bob has realized there is a confirmation. Alice has realized there is a confirmation also. Surely this is sufficient?
Alice and Bob must each choose an actual policy for how many confirmations they need before they actually commit to attack. We can number the messages like this:
1. Alice's first message 2. Bob's first message 3. Alice's second message 4. Bob's second message ...
Alice's policy can only commit to attack after receiving some even-indexed message n. Bob can only commit to attack after receiving some odd-indexed message m. So n and m cannot possibly be equal. Therefore the possibility exists that a message fails between n and m, and either Alice or Bob ends up attacking without the other's support.
I am not sure here, but, instead of encoding the desired and actual states via "the current place in the program", maybe it would make sense to write this program as one big for-loop that looks at the desired state and the actual state (explicitly stored in the variables), then does exactly one step to move closer to the goal, and, based on the outcome, updates these variables? I.e. apply the transformation from https://en.wikipedia.org/wiki/Structured_program_theorem#Sin...
2. Bob sends “Got it. Do not send another message.”
3. Alice receives it and then stops sending messages.
4. Bob now knows Alice received the message as she has stopped sending messages.
Ends.
What am I missing?
Note that in this case, Alice does not need to wait for silence from Bob. She can consider her silence a sort of "unbreakable acknowledge", so she doesn't need an acknowledge.
This is an interesting approach. It works to solve the problem with 99.9% certainty if one considers message failure an identically distributed independent event. (I.e. every message is a dice roll with chance p for failure) and the message rate can be considered roughly constant. Then after n 'message intervals' without receiving a message there is chance p^n that Alice received Bobs acknowledge. Picking n large enough gives arbitrary certainty.
I wonder if this has a better message complexity than sending N acknowledges. I imagine it might have to do with latency. Certainly Bobs 'repeat rate' relative to Alice's 'repeat rate' also factors in.
However, the big assumption here is that message failure is an independent event. As pointed out by others, if at some point the connection is completely severed, this approach will fail. Because in that case silence of the other side could be the result of communication failure.
Both parties can never agree on the status of all messages, because you have to generate a new message in order for an old one to advance its state. TCP works on this principle, but because not all messages are semantically relevant to the application, it can generate extra messages to push semantically meaningful messages into the agreed-upon prefix.
On the other hand, a TCP connection must always terminate with at least one message un-ACKed. The best we can do is guarantee that there are no more application-level messages in flight.
But how could using a phone (instead of telegram etc.) fundamentally change anything?
There is one feature of phones that sort-of makes a phone more useful here. You can know whether your 'message' arrived. Because if the other side hung-up then you get a dial tone.
The point is the latency and loss of the message -- for a more red-team angle, suppose someone in the intervening space has captured the communicator and seized their phone?
The story is an allegory (metaphor?) for the inherent unreliability of communications between any given pieces of real-world infrastructure and the problems that arise when that unreliability reaches critical thresholds.