Oddbean new post about | logout

Notes by Mike Dilger | export

 8 fighter jets flew by in 2 mins.

Probably nothing 🤷‍♂️ 
 Just vote Kamala and pay no attention to the skies, noise, or shrapnel. 
 "far right" is a CIA dogwhistle that means "you are authorized to use our funding to fuck with them" 
 source: https://x.com/MikeBenzCyber   (BTW "far left" is too) 
 The more words you string together, and the faster, the less people can stop and think about what they mean. 
 no 
 If we are talking about Etymology, then sure it originally meant convicts escaping from prison.  Then it was used by communists in support of anarchism.

In the USA where I grew up, from long before me (1880s) it is a term that means essentially what "classical liberal" means in England.  Because in the US the term "liberal" became synonymous with the political left, so it being widely misunderstood, the old term libertarian was redefined in it's place. 
 Well now you are qualifying it with "as long as it doesn't impinge on the freedom of others."   That's pretty close to my understanding if you do that.

But your previous definition included Bibi Netanyahu, Charles Manson, and the like. 
 Sometimes I feel like I'm being a dick but I don't mean to be 
 Eugenics has the same problem that censorship has.  Just like with speech where we can't answer the question "who gets to decide what is and isn't true?" neither can we answer the question "who gets to decide what is and isn't bred into the next generation?" (well, we can decide for our family, but not for others)  None of us is wise enough to answer that, even if we understand the general principle that suspending natural selection must be weakening us.

I predict within 200 years A.I. will perform eugenics on us. 
 We will be their pets. They will breed us. 
 I hope nobody digs up my old notes. I say some pretty dumb things and would hate to confront them... 
 * the Streissand effect wakes up and goes to town* 
 Don't worry I'll make new notes so much worse that nobody will notice yours. 
 Awesome!  Now I should add 20 more tests and so you have more work to do! 
 make france french again 
 But make them regret arresting Durov 
 Only a mad man would use a nuke and Putin is clearly not a mad man.  That is why NATO/Ukraine can attack Russia with impunity.  If you guys want to survive, you should replace Putin with someone a lot more unhinged, a lot more likely to do something rash and vindictive.  Only then will NATO actually fear the nuclear threats and back off. 
 Boycott France 
 Make them regret arresting Durov. Somehow without hurting the wine growers. 
 But make them regret arresting Durov. Somehow without hurting the wine growers. 
 Irrespective of whether Telegram is shit or not, arresting somebody for supporting free speech certainly is shit. 
 Well if I understand correctly, he was exiled from Russia for refusing to censor anti-Russian information on Telegram.  Now he is arrested in France for refusing to censor pro-Russian information on telegram.  It sounds to me like he doesn't care about nation states, he only cares about privaacy and free speech.  So irrespective of who uses telegram for what, or whether or not telegram is or isn't good technology, clearly this guy is one of us and we should support defenders of free speech, and therefore we should be against the French government.

Of course if you are against all governments this is a no brainer. 
 I have discovered that Nostr has a single point of failure!  Scroll down to see what it is ....
























it is you. 
 I will concede that point.  I was thinking about how people call nostr "censorship resistant" but what it really is is a system without a single point of failure.  Then my brain jumped to post the OP. 
 Now that I re-read my post, I can see how it could be interpreted as saying "nostr needs you" "nostr fails without you" (and of course not you in particular, ha ha).  But that wasn't even what I meant....  what I meant is that nostr has no single point of failure...but you have a single point of failure if you screw up managing your key.  This was meant in contrast to "nostr is censorship resistant" which isn't quite as on the money as "nostr doesn't have a single point of failuire".  Anyhow, I don't think people are reading it that way and I wanted to put down somewhere what I was actually thinking. 
 Wow! Never would have thought that we would not have a democratic process on Nostr. I find it amu... 
 I think they are rotating around the globe -- Americas,  Asia/Oceania,  Europe, now it's America's turn again. 
 Pffffft! 
 This is so insane… 

Brazil banning X and fine anyone $8,000 per day if they see them use X via... 
 I had this poster on my wall at work some 3-4 years ago, so I could point people to their mistake. 
 No, only other people. I have no biases. ;-) 
 Q: what inflammatory information will be posted if there is no moderation? 

A: forest garlic. no... 
 anti-inflammatory 
 Only in the most magical of universes does a seed of corn, when heated in oil, turn itself inside out and become uniformly palatable.  In most universes the seed just burns.  In some it inverts but there are very solid hard to chew areas.  Which kind of universe are you in? 
 I will have to do it that way, it sounds like the flavor profile would be more uniform. 
 I didn't believe in God.  Then I thought about popcorn. 
 Ok well I wrote a nostr chess server and a command line client and I played a game of chess with myself (the library that manages the game state and legal moves and stuff was written about a month ago).

The nostr events I'm using (all ephemeral) are documented here:  https://github.com/nostr-protocol/nips/issues/1453

The server is running in case anyone else wants to write a client:
   pubkey of the chess server:  dbb45efeb8cc10e6f75fdff7e561e7db39cc7ba6592f4c22e26f3ee36b2e7bc2
   relay it is running on:  wss://chorus.mikedilger.com:444/

If it stops responding, get in touch with me and I'll restart it.  I'm just running it from a terminal and I may forget about it and reboot or something.

I'll bet some brilliant graphic designer out there could create a beautiful client where the pieces slide, there are noises, the square it came from remains highlighted, all that jazz. 
 Yes NIP-64 it defines one event, which is the outcome of a game after it is played.   It could be used as a game in progress too, but that requires clients to understand chess logic and to interpret algebraic notation, so I'm proposing FEN which allows clients to remain dumb and still play chess.  And NIP-64 doesn't have any way of pairing people together for a game, reporting errors, dealing with draws or resigning, timing, etc.  My proposal adds more parts but still is far from complete. 
 I agree we should stop trying to use nostr for all the things.

I did it in a day because I had a bad week and I needed a win. 
 I just whipped up a chess server, running on wss://chorus.mikedilger.com:444/ using all ephemeral events, no access control required.

I was having a horrible week, doing huge coding but getting no wins and probably have to throw out my efforts.  I really needed a win.  So I did this chess thing which was (for me) easy with super rapid progress.

Here is the protocol, anybody can write a client for this.  People connect and get paired up and play each other.  There is no fancy Elo score matching yet.  Nor did I write a client yet.  Just the server... which is currently running and listening for chess events tagging this pubkey(hex):  dbb45efeb8cc10e6f75fdff7e561e7db39cc7ba6592f4c22e26f3ee36b2e7bc2

(NIP-64 is not related to this work... yet)

Please somebody write a nice client.


// Event kinds (not yet allocated in nostr)
const REQ_TO_PLAY: EventKind = EventKind::Ephemeral(20300);
/*
 * {
 *   "pubkey": <player-asking>,
 *   "kind": 20300,
 *   "tags": [
 *     ["p", <server-pubkey>],
 *   ],
 *   "content": "",
 *   ...
 * }
*/

const RESP_TO_PLAY: EventKind = EventKind::Ephemeral(20301);
/*
 * {
 *   "pubkey": <server>,
 *   "kind": 20301,
 *   "tags": [
 *     ["p": <player-asking>],
 *   ],
 *   "content": "queued",  // 'queued' or 'error:<error>' or 'started:<d-tag-of-game>'
 *   ...
 * }
 *
 */

const GAME_STATE: EventKind = EventKind::Ephemeral(20302);
/*
 * {
 *   "pubkey": <server>
 *   "kind": 20302,
 *   "tags": [
 *     ["d": <game-id>],
 *     ["p": <pubkey-for-white>],
 *     ["p": <pubkey-for-black>],
 *   ],
 *   "content": <FEN>,
 *   ...
 * }
 */

const GAME_MOVE: EventKind = EventKind::Ephemeral(20303);
/*
 * {
 *   "pubkey": <player>,
 *   "kind": 20303,
 *   "tags": [
 *     ["d": <game-id>],
 *     ["e": <last-game-state-event-being-reacted-to>],
 *     ["p", <server-pubkey>],
 *     ["p": <pubkey-for-white>],
 *     ["p": <pubkey-for-black>],
 *   ],
 *   "content": <long-algebraic-move>, // or various other signals like 'quit' TBD.
 *   ...
 * }
 */

const GAME_ERROR: EventKind = EventKind::Ephemeral(20304);
/*
 * If the game is known, and the error event came from a player of the game:
 * {
 *   "pubkey": <server>,
 *   "kind": 20304
 *   "tags": [
 *     "e": <event-that-was-in-error>,
 *     "d": <game-id>, // if relevant (not present if game not found)
 *     "p": <pubkey-for-white>, // if game not found, this is the author of event reacted to
 *     "p": <pubkey-for-black>, // only if game was found, this is the other player
 *   ],
 *   "content": <error message>
 *   ...
 * }
 *
 * If the game is not known:
 * {
 *   "pubkey": <server>,
 *   "kind": 20304
 *   "tags": [
 *     ["e": <event-that-was-in-error>],
 *     ["p": <pubkey-of-error-event>],
 *   ],
 *   "content": <error message>
 *   ...
 * }
 */
 
 NOTES:
1. FEN notation: https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation
2. Long algebraic move is just the source, then the dest, then the promotion piece if it is a pawn promotion, e.g. b7b8Q or e2e4 or b1c3.
3. The engine does not detect checkmate, for the time being you have to submit 3 illegal moves to lose.
4. If I restart the engine (and I surely will) it will forget all the current games.

 
 The client does NOT need to understand chess.  But it should understand the 8x8 board, the initial piece layout, moving a piece from source to destination, and allowing the player to move a piece and submit that to the server. 
 Strange coincidence.  I wrote a chess app on the weekend a few weeks ago because I wanted to practice a bunch of Caro-Kann lines (I'm an aggressive player and I wanted to try to play defensive instead to expand my reperitoire).

The game state library imports/exports FEN or a series of algebraic moves. It uses bitboards and verifies legal moves, 'in check', etc, including en passant, castle rights, halfmove clock, etc.. the only major thing it doesn't do yet is determine checkmate (I just hadn't gotten that far in a weekend). 

I got it plugged into stockfish and I can play against stockfish in a terminal. I didn't even get started on the gui.

Then I got it working beyind PyChess as an engine. The engine makes any of the "likely" Caro-Kann opponent moves and then I have to make the correct Caro-Kann response.  This way I could practice those lines.  If it gets into a state I didn't prepare for, it makes an illegal move to end the sequence.

Anyhow.... 
Even though I was able to write that rather quickly, I don't expect other nostr developers to write a chess engine for NIP-64.  However, in order to display the chessboard from PGN notation, they will need to use a chess engine.... to either write one or to link to one... that makes each move specified one after another, each one validated, and then you end up with a board state.

It would be far easier for a nostr client to take a FEN and display the board state, because that is what a FEN is. Then nostr clients wouldn't need a chess engine inside of them.
 
 

we need to connect our self-custody BTC account to our profiles
#Nostr #Bitcoin then #Twitter #... 
 I'm trying to stay out of tying money into nostr.  Other people are super keen to do it though, so the other clients are better bets for your idea than gossip is. 
 Yes gossip stores the petnames in your "People Lists > Followed" event (kind 3) when you publish that list.

Petnames can be strung together as paths.  If you read the bottom of NIP-02, you see an example `david.erin` which means "the person that erin calls david" (david within the subdomain of the person erin).  Dots in petnames would mess up such parsing/usage.  Gossip doesn't use petname paths anywhere, but we don't want to produce data in kind-3 follow lists that messes this up if other clients wanted to. 
 no 
 The relays in the 'p' tags are hints.  I'm not sure they are useful in kind-3 events as we use NIP-65 now to specify what relays the people you follow use.  Gossip may or may not write them (I can't remember).

The contents however are YOUR relays, if you choose to store them there, as some clients have done in the past.  This is very old stuff, Damus and Astral stored them in there to auto-configure when you went to a different client.  Gossip reads and uses them if it can't find a NIP-65 event. 
 I argued for multiple relay hints a long long time ago but it didn't get any traction, got pushback on being too much overhead instead, and pushback on the fact that these things rot over time.

The NIP-02 relay hints are 3rd party.  Somebody's follow list claims somebody else uses that relay, but do they really?  That is why I don't use them for authorative data.

The authorative data is NIP-65 kind 10002 (and new 10050 for DMs).  That is meant to be the real deal.

But in case somebody didn't publish what relays they use, there are fallbacks:
1) The contents of kind-3 (although not documented in NIP-02), since some clients put them in there for self-configuration
2) relay hints in other people's kind-3 (NIP-02), but these are 3rd party
3) NIP-05 nostr.json may have relays, but nostr.json is unsigned!
4) Maybe you saw their events on a relay before, so you might remember that as a possibility
5) Any 'p' tag can have a relay hint (again 3rd party, plus they rot, but if you have nothing else....)

Gossip keeps all these relationships and scores them, and it has been a long road of tweaks to that system to get where it is today.  If all the other clients did the outbox model, I could throw all that stuff away and just use NIP-65 and be done. 
 I'm not sure I follow 
 The bootstrapping issue was kinda solved with a brute force hack.  Broastcast your 10002 event everywhere.  You won't actually get it everywhere, but you will get it to enough places that maybe it can be found.

I don't know how to solve the bootstrap problem truly.  This hack seems good enough.  As long as there are a group of very popular relays, if you use all of those and look things up on all of those, people will find each other.

People have suggested a DHT in the past, but I think this also has the bootstrapping issue, which doesn't really seem solvable to me, at least not perfectly.  You can always have a set of relays distinct from all the others which can never find your event.  Say there were 10 relays on mars.  How can they get your event from Earth if Mars and Earth aren't connected?  Not possible.  So without centralization, it is strictly provably impossible to do it perfectly. 
 Well you are just copying from my kind 0 when my kind 0 updates. And that is a lot of copying and republishing overhead. And yet you still have to find my kind 0 to do that, which was the original problem.  So I don't think you've solved anything.  Unless you are saying that you would look into a bunch of other people's kind 3 lists to see if any of them know where I have moved to.  So what you are doing is creating a bunch of redundancy of my kind 0 information distributed all around the place.  We could achieve the same thing more simply by just having relays copy/push people's kind 0 (or 10002) information to all the other relays they know about once they first discover a new version... a kind of relay-to-relay propagation... or even have clients blastr the thing in the same way. 
 I just had to change about 1000 lines of code because rust doesn't support async closures on stable.  And gossip code is becoming more and more async. 
 The cost of migrating the code base is too high.

The fact that rust has crazy complexity at this point and the rust developers can't seem to solve basic things like this does worry me though.

Maybe rust should have remained a systems level language and not tried to be all things to all people.

We need a rust-like higher-than-systems-level language that doesn't have these complexity nightmares, but is just as security proving. 
 Which nip46 servers support connecting with nostrconnect: schema? nak doesn't seem to, what about... 
 Not gossip. It only supports the signer-initiated bunker:// 
 When people think about padlocks and security, they think about criminals trying to crack the combination or break the padlock open or simply cutting it off with bolt cutters.  That is, they think about defeating the padlock.

Not too many people think about the far easier thing you can do with a padlock.  The denial of service attack.  Padlock somebody's gate closed and throw away the key.  That is also a security issue, super easy, and nearly impossible to defend against.  I don't even know what to do with this thought other than to keep it in my arsenal of civil disobedience techniques along side things like removing the valve stems from someone's tires. 
 Whenever I cross a crosswalk I think about how easy it would be to run me over.  Defense is far harder than offense, and we rely on consequences to disincentivize bad behavior.  That works only in so much as someone isn't insane, and isn't willing to die themselves in order to kill you (e.g. a suicide bomber).

High value targets have to avoid being seen in public. 
 I just want to say to the powers that be... if you think I'm doing something wrong please just contact me. I'm very law abiding, I'm risk averse, and I've always avoided anything that I think is legally nebulous (e.g. money transfer services).

I think it is a big stretch to think that nostr developers or even relay operators are government targets at this time.  We are just developing a new Internet protocol.  AFAIK we aren't supporting illegal content and we aren't refusing to take down illegal content.  The powers that be need only ask and we will (in the main IMHO) comply with all lawful demands.

BTW, none of you rely on me not taking down your stuff. All of you have the self-power to be fully distributed and censorship resistant.  So my compliance with a lawful government demand should not affect your ability to be heard (if you are using nostr correctly).

Also, I will burn gossip before I ever allow in any kind of government backdoor. No law compels me to write code for them. (Actually I'll just stop development, I won't burn it, but you should keep a local git clone).

nostr is still censorship resistant even if they came and shut most of us down. You can just stand up your stuff  somewhere else and make them play whack-a-mole.  That is the architecture that we cannot change now even if we wanted to or were compelled to by force.

As world conflict ramps up, controlling the narrative becomes a strategic lever that most nations want to pull.  That means censorship is on the rise and personal liberty is on the decline.  I don't think this is a permanent thing, a big brother one world government is a silly fear IMHO.  Rather, I think it is a current trend reflecting the current trend of increased world conflict.  During the next peace, liberties will come back and censorship will wane again.  In the mean time, please take care.

nostr:nevent1qqspwxkj0n8qphzrckv8h5d383gm38a5qavkhxhpuxer7xg7dp6sp9gxw7d24 
 It is not that the government shouldn't censor us.  It is that the government WILL NOT censor us.  WE WONT BE CENSORED.

OH SHIT, MY CAPS LOCK!  IM TURING INTO O'DELL! 
 what just happened?  I just woke up on the floor shivering. 
 Hey nostr:npub1acg6thl5psv62405rljzkj8spesceyfz2c32udakc2ak0dmvfeyse9p35c how do I remove a publi... 
 Is it not showing "Delete this identity?"  I don't often test it in public-key-only mode, so if it is not I'll make a fix. 
 I just finished a very large RCT study on ice cubes, double blinded, placebo controlled (I guess some of them weren't actual ice cubes they were glass made to look like ice cubes). Anyhow, I brought these ice cubes up from -10 C to -5 C under very controlled conditions, and none of them melted.  That is very statistically significant given the number of ice cubes that we studied.  So I can confidently say that raising the temperature does not melt ice cubes.  Go ahead and play with your ice cubes in any environment at any temperature and stop believing in the stupid mainstream science. 
 I doubt your methods. You're study was a sham. 
 Masks can prevent monkey pox but you have to wear them properly.... across your ass. 
 I think Riga, Latvia must be underwater.  Derek sounds like he's blowing bubbles. 
 Trump speaks from behind bullet-proof glass.  My first thought:  OMG Trump is like the Pope! 
 I am guessing it might take a while for peeps to settle and for nostriga to start.  But when it does, hopefully it will stream here:

https://www.youtube.com/live/9p6mfqcP9Ic 
 Five months ago my mom suffered a series of strokes that resulted in paralysis on her right side,... 
 Vegetarians historically did it for ethical reasons. Pythagoras because he believed animals have souls, Plato too, Benedictine monks ate fish because fish don't care for their young so the parents won't be upset if you eat their children (!), etc, etc.  Even Alex Gleason does it for ethical reasons.

YET epidemiological studies show vegetarians living a very long time, and it's pretty obvious when you know a lot of them (I grew up a Seventh Day Adventist, many of my ancestors lived to about 100), and track health gurus and see the vegetarians living past 100 but the meat heavy promoters dying in their 60s.  I've got a huge list of people, it's super obvious, but people just refuse to accept it because IMHO they like to eat meat, so their active brains construct reasons and logic to defend this position... which is the common backwards way most people think.

I'm not saying a little meat is bad.  It isn't.  Pure vegetarianism has problems with iron, B-12, protein quality, and probably other things.  That's why I'm not a vegetarian.

And while I agree with Pythagoras that animals have souls (that is to say, they are conscious aware beings)... they don't after they are dead.  After they are dead, they are meat, which is good as a food. 
 That is a good point.

Also, I'm far more skeptical of the ability to correct for confounders than, say, Walter Willett is.  For example, once they found a confounder and adjusted for it and their results changed massively, and an interviewer asked them about this problem, and they just tried to play it down.  But clearly, getting the confounders correct is essential... and also impossible.

Nonetheless, I'm also not convinced that this is entirely explanatory.

Koreans are small.  It is well known that within a species, the smaller individuals live longer.  (Between species, the larger ones live longer).  So that one is confounded too. 
 I think that is likely true. 
 I fully agree that, as you say "energy poisoning" is one of the major causes of modern disease, is THE cause of diabetes, is the primary cause of gout, and also increases risks of cancer and atherosclerotic diseases.  And probably the most important one to correct.

But (and this is where we differ) I also think saturated fat (apoB to be precise) accelerates atherosclerosis. And so limiting red meat (as long as you can do so without gaining wait) is another good target for health.

But avoiding energy poisoning is the bigger of the two levers. 
 Paul Mason is a physiotherapist. That means he has as much actual research and clinical experience on this topic as I have: none.  Many of his citations don't say what he claims they say.

I prefer to listen to this guy:
https://www.youtube.com/watch?v=M8tzaXQH1G4
https://www.youtube.com/watch?v=-xTaAHSFHUU 
 If in the future you receive a note from me like this, how would you react?

"After some deliberation I have decided not to host your content on my relay. You are free to repost your content onto other relays. Your subscription fee of 0 sats will be fully refunded once you provide a bitcoin or lightning address. Considering that content on nostr is generally mirrored, it has already been deleted from my relay." 
 NIP-65 says "Clients SHOULD spread an author's kind:10002 event to as many relays as viable"  the idea being that there is no centralized index, but these events are small and one-per-person (replaceable) so they can go just about everywhere without much overhead.  That way people can be found as they move around.