phf[asciilifeform]: http://logs.bitdash.io/pest/2022-12-07#1017772 << one of the first books that made me "sad" https://www.elsevier.com/books/swarm-intelligence/eberhart/978-1-55860-595-4 because i realized that the "man in an ivory tower" is not a thing
    
    bitbot[asciilifeform]: Logged on 2022-12-07 22:28:20 signpost: grows convinced that the distributed computation is the thing, or is at least more thingly than individual meat puppets.
    
    phf[asciilifeform]: makes this very point that you just made
    
    unpx[asciilifeform]: Currently thinking if I should publish my code that implements some number theoretic algorithms, this is my current progress: https://unpx.net/d4/articles/2022-11-alchemy.xhtml
    
    
    
    unpx[asciilifeform]: Still broken?
    
    unpx[asciilifeform] is working on some Grobner basis stuff
    
    lobbes[asciilifeform]: hello #pest
    
    unpx[asciilifeform]: Hello lobbes!
    
    lobbes[asciilifeform]: hi unpx (odd, I only see your hello from the logs, not my station; possibly it is eating through the backlog atm)
    
    lobbes[asciilifeform]: ah yup, there's the message history. Nice!
    
    awt[asciilifeform]: welcome lobbes!
    
    asciilifeform: welcome lobbes !
    
    signpost[asciilifeform]: howdy lobbes!
    
    asciilifeform: unpx: i do see your msgs (and not only in log.)
    
    
    
    bitbot[asciilifeform]: Logged on 2022-12-08 10:01:35 unpx[4]: Currently thinking if I should publish my code that implements some number theoretic algorithms, this is my current progress: https://unpx.net/d4/articles/2022-11-alchemy.xhtml
    
    asciilifeform sadly not has the cycles atm to properly read. but seems intended as ffa-style 'from 1st principles' Right Thing
    
    signpost[asciilifeform]: lobbes: http://paste.deedbot.org/?id=_G-o << peering info
    
    
    
    signpost[asciilifeform]: http://logs.bitdash.io/pest/2022-12-08#1017775 << ty, just snagged a copy
    
    bitbot[asciilifeform]: Logged on 2022-12-08 09:10:46 phf[awt]: http://logs.bitdash.io/pest/2022-12-07#1017772 << one of the first books that made me "sad" https://www.elsevier.com/books/swarm-intelligence/eberhart/978-1-55860-595-4 because i realized that the "man in an ivory tower" is not a thing
    
    unpx[asciilifeform]: Yes, I published that to force myself on working on it in well defined chunks instead of trying to put something by time to time without a goal. The posts will be more about how I rewrote something and why, rather than here is how to do X, because the latter can already be found in books like the ones I mention or looking
    
    unpx[asciilifeform]: how other computer algebra system do.
    
    asciilifeform: unpx: added yer at entry from pgpgram earlier; use the key asciilifeform sent you, oughta work
    
    lobbes[asciilifeform]: ty awt
    
    signpost[asciilifeform]: phf: speaking of peerings, dunno if this was lost in the pest noise but http://logs.bitdash.io/pest/2022-12-05#1017580
    
    bitbot[asciilifeform]: Logged on 2022-12-05 14:07:03 signpost: phf: http://paste.deedbot.org/?id=RUKq
    
    asciilifeform: lobbes: observe that you can operate normally while the thing getdata's
    
    signpost[asciilifeform]: hilariously just as I do this, I get another mystery replay
    
    signpost[asciilifeform]: yup, seeing your messages via bitbot atm
    
    lobbes[asciilifeform]: heya signpost, asciilifeform! Looks like my station is still processing message history (seeing replays from feb 2022 atm). I'm using blatta with the pure python serpent versus mcrypt, so I think that is adding to my lag. Gonna let it chug for a few hours then hopefully I'll be caught up
    
    asciilifeform: unpx: re: algebratrons, of possible interest re state of art ('80s! and afaik still unsurpassed)
    
    dulapbot: (trilema) 2019-02-04 asciilifeform: http://www.loper-os.org/pub/stoutemyer/index.html << for the l0gz, and for all 'derive' aficionados.
    
    unpx[asciilifeform]: Oh nice
    
    signpost[asciilifeform]: unpx, I'll bake you a peering key too if you like.
    
    unpx[asciilifeform]: signpost, I'd like to
    
    signpost[asciilifeform]: sure, sec
    
    signpost[asciilifeform]: unpx: did you ever have a key registered with deedbot?
    
    signpost[asciilifeform]: http://logs.bitdash.io/asciilifeform/2022-10-21#1114152 << looks like possibly not
    
    bitbot[asciilifeform]: (asciilifeform) 2022-10-21 unpx: I should somehow connect to deedbot to register the GPG public key
    
    unpx[asciilifeform]: I tried, but looks like deedbot didn't add it, signpost
    
    signpost[asciilifeform]: yeah, thing needs an out-of-band registration hole since we don't have n00b lobbies for pest yet
    
    signpost[asciilifeform]: got a link to key somewhere?
    
    signpost[asciilifeform]: actually, you should be able to register here
    
    signpost[asciilifeform]: or at least if it breaks I'll fix the attempt
    
    signpost[asciilifeform]: !!help
    
    signpost[asciilifeform]: hm! deedbot gone
    
    
    
    
    
    dulapbot: Logged on 2022-10-25 09:38:51 unpx[busybot]: !!register https://unpx.net/d4/gpg.txt
    
    unpx[asciilifeform]: asciilifeform, tried, can't reach you somehow
    
    signpost[asciilifeform]: !!help
    
    
    
    signpost[asciilifeform]: !!key unpx
    
    
    
    signpost[asciilifeform]: looks like it's still catching up.
    
    
    
    signpost[asciilifeform]: there we go
    
    unpx[asciilifeform]: !!register http://paste.deedbot.org/?id=_KeG
    
    signpost[asciilifeform]: already reg'd ya
    
    unpx[asciilifeform]: Thanks
    
    signpost[asciilifeform]: from prior input, which contained the [foo][blah]
    
    
    
    signpost[asciilifeform]: seems like simplest fix to deedbot might be to make !!register take a requested-nick arg, !!register <nick> <key-url>
    
    signpost[asciilifeform]: was just a convenience that it took w/e nick currently in use by the sender; sender could /nick fart at any time to reg something else.
    
    signpost[asciilifeform]: unpx says perhaps addrcast got him my IP before he had time to update his AT
    
    signpost[asciilifeform]: pretty cool
    
    signpost[asciilifeform]: makes intros that much more convenient.
    
    asciilifeform: http://logs.bitdash.io/pest/2022-12-08#1017825 << same ip as 2w ago ?
    
    bitbot[asciilifeform]: Logged on 2022-12-08 12:05:32 unpx[jonsykkel]: asciilifeform, tried, can't reach you somehow
    
    signpost[asciilifeform]: !!register signpost http://butts.com/key.txt
    
    deedbot[asciilifeform]: FC66C0C5D98C42A1D4A98B6B42F9985AFAB953C4 is already registered as signpost.
    
    signpost[asciilifeform]: alrighty, deedbot registrations will work for relayed peers now
    
    signpost[asciilifeform]: !!help
    
    
    
    signpost[asciilifeform]: ^ updated with new param
    
    signpost[asciilifeform]: http://wot.deedbot.org/ << fixed the styles causing overlapping graph too; report in if anyone sees a buggered up page pls
    
    signpost[asciilifeform]: still regenerating, so profile pages will be updated soon.
    
    phf[asciilifeform]: signpost, i haven't use for peering yet, because i'm still single station
    
    phf[asciilifeform]: i'm still trying to figure out how to do packet-insert properly
    
    phf[asciilifeform]: actually, maybe i could just add multipeer, meanwhile. because all i need to do is a dup check…
    
    phf[asciilifeform]: i'm trying to understand how multiple parallel netchains are supposed to work…
    
    signpost[asciilifeform]: ah ok. not a rush, key will be there when usable.
    
    shinohai[busybot]: if unpx rejoins, will rate. (Saw in nosuchlabs logs he still has peering difficulties).
    
    signpost[asciilifeform]: shinohai: guy's in wot db now
    
    signpost[asciilifeform]: !!rate unpx 1 https://unpx.net/d4/
    
    deedbot[asciilifeform]: Get your OTP: http://paste.deedbot.org/?id=5DX1
    
    signpost[asciilifeform]: !!v 4271EEA3A812B0ECB01B7C05AC17FD065D7696A3316505630ECF229C12C10B02
    
    deedbot[asciilifeform]: signpost rated unpx 1 << https://unpx.net/d4/
    
    asciilifeform: !!rate unpx 1 maths fella
    
    deedbot[asciilifeform]: Get your OTP: http://paste.deedbot.org/?id=NNmy
    
    asciilifeform: !!v 73DA01D5B98AC8387908190CA9CEE75EA83CA0FF38A0AD229A6569DE6D775F97
    
    deedbot[asciilifeform]: asciilifeform rated unpx 1 << maths fella
    
    
    
    bitbot[asciilifeform]: Logged on 2022-12-08 12:31:44 signpost: !!register signpost http://butts.com/key.txt
    
    signpost[asciilifeform]: was seeing that I got the right error message back.
    
    asciilifeform: http://logs.bitdash.io/pest/2022-12-08#1017856 << asciilifeform still thinking re possible need for ~3~ chain hashes rather than 2 ( if netchain starts being used for threading ), but imho avoidable , introduced 'inv' ( 5.4.9 in predraft spec ) for chronological g
    
    bitbot[asciilifeform]: Logged on 2022-12-08 12:48:37 phf[awt]: i'm trying to understand how multiple parallel netchains are supposed to work…
    
    asciilifeform: ... for chronological getting of 'recent' msgs
    
    asciilifeform: if operating per previous specs, is possible to walk netchain & selfchain and still miss a subthread (if such existed) because of where you started walk from
    
    asciilifeform: ( alternatively, getdata response could return a flag bit, say in formerly 'reserved' field, indicating existence of successor, which one could then fetch via a hypothetical 'getnext')
    
    asciilifeform: ( naturally a msg could have any # of successors per netchain )
    
    phf[asciilifeform]: asciilifeform, i'm talking about the case when you have message A and messages B and C that both reference A as netchain. from that point on D is essentially arbitrary (depends on if B or C arrived last, or have later timestamp, whichever)
    
    asciilifeform: tree, aha
    
    asciilifeform: and yea, currently arbitrary, which is Wrong Thing
    
    asciilifeform leaning towards 'need new knob to make threading go properly' but not yet figured out precisely where
    
    asciilifeform: this is why not 'unpredrafted' the predraft spec yet
    
    phf[asciilifeform]: which also made me wonder, which message exactly should prod return? the latest one recieved, or whichever the station considers to be the latest one by its own sort order
    
    asciilifeform: there's possibly a painful breaking change req'd
    
    asciilifeform: phf: per intent of current spec, the 1 that the station would use as default netchain if it were to transmit a msg at the time of issuing the prod
    
    phf[asciilifeform]: yeah that makes sense
    
    phf[asciilifeform]: which brings back the whole multichains issue
    
    phf[asciilifeform]: you can easily have a case when you have A<B<C A<D<E A<B<X<Y and more because of network congestion, packet loss, etc.
    
    asciilifeform: aha, as asciilifeform understands, already happens regularly
    
    phf[asciilifeform]: and when it lands, and everyone's up to date, there's no authorative way, if it's C E or Y that should be used to netchain
    
    asciilifeform: correct
    
    phf[asciilifeform]: i think awt said his are sorted by timestamp, but then you're in a no mans land of drifting clocks
    
    asciilifeform: per asciilifeform's original intent, netchain of $msg was 'what was at the bottom of my screen when i wrote $msg'
    
    phf[asciilifeform]: if e.g. your drift is at the limit of what's acceptable drift is (5 minutes?) it's possible that your message will be chosen for the next netchain, only because your clock is running 5 minutes late
    
    asciilifeform: ideally should never be necessary to use timestamps for sort
    
    asciilifeform: (given as indeed they aint reliably ordered)
    
    phf[asciilifeform]: asciilifeform, sure, in which case you're using arrival time, which is even more arbitrary
    
    asciilifeform: asciilifeform included timestamp orig. strictly as anti-replay booby
    
    phf[asciilifeform]: i'm still talking about the case of A<B<C A<D<E A<B<X<Y
    
    asciilifeform: aha
    
    signpost[asciilifeform]: !!rate zx2c4 2 linux kernel dev and wireguard author
    
    deedbot[asciilifeform]: Get your OTP: http://paste.deedbot.org/?id=-WlA
    
    signpost[asciilifeform]: !!v C0B7CB4E3D4C257E6E711D7E374DF8569C512E4B9787DD1A936B3A72491BC488
    
    deedbot[asciilifeform]: signpost rated zx2c4 2 << linux kernel dev and wireguard author
    
    asciilifeform: per intent of new spec, netchain oughta be able to point to any previously-existing msg. but this opens q of how to sort (and wat-do with messages where netchain==0)
    
    asciilifeform: imho pestron oughta simply reject'em, unless in fact its db is empty
    
    phf[asciilifeform]: yeah, but that's not possible unless you have mechanism to join multiple chains
    
    asciilifeform: (a new talker oughta sit still long enuff to receive even 1 msg)
    
    asciilifeform: phf: they oughta be joined at the roots
    
    asciilifeform: i.e. ought not be possible to have wholly disjoint subchains
    
    phf[asciilifeform]: what are roots?
    
    asciilifeform: if A <- B <- C, and e.g. B <- P, B <- Q, you have subtrees joined at roots, and all is well
    
    phf[asciilifeform]: so just to clarify < in my diagram is "packet's netchain property", of which there's only one
    
    asciilifeform: roots being the linkages of the 'top-level' chain, there
    
    asciilifeform: i.e. you can walk from P and Q back to B, then to A
    
    phf[asciilifeform]: ah, i get it, you're walking from the opposite direction
    
    asciilifeform: aha
    
    asciilifeform: that's how getdata walks
    
    asciilifeform: atm there's no way to walk 'forward'
    
    phf[asciilifeform]: ugh
    
    phf[asciilifeform]: getdata walks from e.g. C to A
    
    asciilifeform: correct
    
    phf[asciilifeform]: and with getdata there's no way to for example get all the possible packets, in the diagram above there's no way to get from e.g. C to P or Q
    
    asciilifeform: aaha!
    
    asciilifeform: the trouble is, presently a n00b can't retrieve 'world' if all he's got is a coupla recent msg
    
    phf[asciilifeform]: that's not the only problem
    
    asciilifeform: seems to be no way to escape adding 'forward walks' , if want to fix this
    
    phf[asciilifeform]: the other problem is that we a packet loss, it's possible to get to a state where some packets were lost and nobody knows
    
    phf[asciilifeform]: *with a packet loss
    
    asciilifeform: correct, tho unlikely if erryone were regularly prodding
    
    phf[asciilifeform]: that's invalid
    
    asciilifeform: (and observe that there is no way to reduce chance of 'lost but no one knows' to 0, even in principle)
    
    asciilifeform: well if you sent out a packet but yer cable was unplugged, the next time you send it will have selfchain pointing to the lost packet, and folx will getdata for it
    
    asciilifeform: (next time you send with a working cable)
    
    phf[asciilifeform]: e.g. "everyone" sees A<B<C, one station has A<Q, but Q is lost, then B lands, no that one station sent out a packet that nobody knows about
    
    asciilifeform: so eventually the lost packet gets 'unlost'
    
    phf[asciilifeform]: asciilifeform, that's not correct
    
    asciilifeform: phf: hm?
    
    phf[asciilifeform]: please reread my example!
    
    asciilifeform rereads..
    
    asciilifeform: phf: did asciilifeform read the notation correctly, i.e. lost packet Q netchain-points to A ?
    
    asciilifeform: ok;
    
    asciilifeform: sender of Q sends anuther packet, at some later time, R. selfchain of R points to Q.
    
    asciilifeform: receivers of R getdata for Q. no ?
    
    
    
    phf[asciilifeform]: you have a chain A<B<C that's going on and is shared, but you have one station that recieved A and got congested. at this point it can send out any number of packets, that get lost, THEN recieve outstanding B and C. now C is the latest in the netchain, on account of being last to a
    
    phf[asciilifeform]: rrive/having higher timestamp. so the station is going to use C to netchain
    
    asciilifeform: phf: correct re netchain, per current scheme
    
    asciilifeform: but assuming sender of Q at some time sends R, Q will get retrieved by those who see R. problem however is that it will be retrieved ~only~ by those who see R (or a successor of R)
    
    phf[asciilifeform]: right, the way this is recovered is because you have selfchain
    
    asciilifeform: (cuz no fwd walks presently)
    
    asciilifeform: aha
    
    phf[asciilifeform]: of course in the case of "got sepsis, going to hospital", the selfchain might not continue for weeks, so nobody will get those messages until much later "i'm baaack!" :p
    
    asciilifeform: not if erryone has working periodic prod
    
    asciilifeform: (then -- peers of sender notice that his selfchain points to sumthing they haven't got, and they getdata for it)
    
    phf[asciilifeform]: that's not correct
    
    phf[asciilifeform]: you're still missing the specifics of this example
    
    phf[asciilifeform]: oh right, right prod also sends selfchain. right
    
    asciilifeform: aha
    
    asciilifeform: prod, per current (and prev.) spec, sends 1) selfchain (broadcast) 2) netchain (broadcast) 3) selfchain (with $peer directmsgs)
    
    asciilifeform: so handles 'sepsis' for so long as the operator's station did not also get sepsis at same time
    
    asciilifeform: 'prod' presently is what we have instead of synchronicity/acks
    
    phf[asciilifeform]: i guess you could have some kind of getdata, that asks for all the packets that are being referenced by X, e.g. in A<B<C B<P B<Q can say "getdatax B" and get C P and Q. but that violates your whole "no amplification"
    
    asciilifeform: selfchain is intended to be contiguous, per operator -- if you get 1 msg from $operator, can get all prev. msgs from him
    
    asciilifeform: fwd walk.
    
    asciilifeform: but tricky, aha
    
    
    
    asciilifeform: aha
    
    phf[asciilifeform]: well, selfchain doesn't have any of these problems, on account of being objectively linear
    
    bitbot[asciilifeform|asciilifeform]: Logged on 2022-12-08 13:26:28 asciilifeform[jonsykkel|deedbot|awt]: ( alternatively, getdata response could return a flag bit, say in formerly 'reserved' field, indicating existence of successor, which one could then fetch via a hypothetical 'getnext')
    
    asciilifeform: the correct way to 'walk fwd' would prolly be a cmd which returns # of 'inv' payloads req'd to catalogue all successors; which then could request 'inv's and getdata for.
    
    asciilifeform not likes the proliferation of moving parts, but sumthing like above is prolly necessary
    
    phf[asciilifeform]: i guess the remaining hole is that a newb might not be able to get a complete log under some specific circumstances, since netchain/selfchain mostly covers it
    
    phf[asciilifeform]: some birst of "and fuck you all i'm never coming back", that just happened to go into a separate branch, and then there's never been any more messages from that station
    
    phf[asciilifeform]: *burst
    
    phf[asciilifeform]: which is also necessarily hearsay, so is that even a problem :>
    
    asciilifeform: a peer from whom one sees msg with unknown (missed) selfchain predecessor, who drops and never seen again, will indeed leave a perma-hole in the log. but if such holes handled correctly, not mega-problem ultimately
    
    asciilifeform: ( hence 'broken heart' idea earlier, so to avoid eternal hammer of getdata when encountering said hole )
    
    asciilifeform: ditto a peer who emits a msg that is chained to an invalid (violates format rule somehow, i.e. bad uniturd) msg
    
    asciilifeform: the invalid msg ought not to simply get discarded, gotta save it with a 'don't try to display' mark or equiv.
    
    asciilifeform: (otherwise potentially eternal getdata hammer for it)
    
    asciilifeform: this not yet covered in spec.
    
    phf[asciilifeform]: right, ignoring the case of subtly maliciuos peer
    
    asciilifeform: subtly (or not) malicious peer can do various annoying things. from pov of protocol design, q re subj is how to: 1) make immed. obv. ~which~ peer 2) limit same to 'annoying' rather than e.g. 'makes chain perma-inedible'
    
    asciilifeform: (to take 1 example, prolly oughta rate-limit chained msgs. currently not in spec at all)
    
    asciilifeform: right nao sumbody could easily shit out 1TB of chained msgs and fill errybody's hdd.
    
    asciilifeform: ( aaand not even speaking of straight-out lulbugs )
    
    bitbot[asciilifeform]: Logged on 2022-10-05 16:17:44 asciilifeform[6]: in otherlulz, lulzy sideffects of yest.'s blatta bugola.
    
    asciilifeform: ... at the very least, msg-eater oughta hard-prioritize immeds/directs over hearsays in all cases (and remain responsive to operator commands nomatterwhat)
    
    asciilifeform: 1 possible scheme would be -- quota: n peers, erry peer can occupy at most 1/n bw, 1/n cpu, etc
    
    asciilifeform: (outta whatever remains from processing incoming/unidentified blackpackets at line rate)
    
    phf[asciilifeform]: kind of wish™ there was automatic machinery for that kind of stuff on the language level. at present the only language i know that supports "max n-cycles" on environment level is lua
    
    phf[asciilifeform]: it's a pain to write anyway, ough to have a rate limiter on decoder, that backs off to in-memory store, that backs off to drive store, that caps out at some particular size, and then starts evicting old or rejecting new or whatever . ain't nobody got time for that
    
    asciilifeform: phf: asciilifeform was thinking moar in the vein of careful algo design + 'round robin', rather than a custom scheduler with preemption
    
    asciilifeform: ( e.g., what's example of a slow op? let's say getdata -- which may load from disk. so $peer1 asks for getdata, but if he asks again, it sits until erry other peer's possibly queued getdata is handled; etc)
    
    asciilifeform: i.e. no need to actually count cpu cycles or preempt an operation.
    
    asciilifeform: as for rate limit on decoder, is rather easy -- pick a rate you know the box can handle (the hard part is determining the rate) and throw out incoming msgs as req'd
    
    lobbes[asciilifeform]: http://logs.bitdash.io/pest/2022-12-08#1017793 << peered! Looks like packets are being received
    
    bitbot[asciilifeform]: Logged on 2022-12-08 11:41:26 signpost: lobbes: http://paste.deedbot.org/?id=_G-o << peering info
    
    signpost[asciilifeform]: cool, yep!
    
    lobbes[asciilifeform]: I've posted some of my pest (blatta-9971) crib-notes up on my blog. Most likely only of use to me, with the possible exception of the fix I applied to line 71 of blatta/batta in order to get loggin
    
    lobbes[asciilifeform]: g sent to stdout
    
    lobbes[asciilifeform]: Possibly just a peculiarity with python 2.6 versus python 2.7
    
    awt[asciilifeform]: lol lobbes you just had to find an even earlier version of python
    
    lobbes[asciilifeform]: lol. In retrospect I suppose this is precisely the use case for a virtualenv. Ah well, it was still an enjoyable exercise
    
    asciilifeform: lobbes: nifty
    
    asciilifeform: $ticker btc usd
    
    busybot: Current BTC price in USD: $17203.68
    
    asciilifeform: lobbes: fwiw if a box containing pestron is config'd as rec'd in orig spec (i.e. icmp disabled) yer nmap scan won't work.
    
    asciilifeform: this is intentional.
    
    asciilifeform: a key design principle is that a third party oughtn't be able to distinguish a pest box from an unused ip.
    
    asciilifeform: (assuming it aint hosting anyffin else that sits on a port)
    
    asciilifeform: ( see also. )