04:03 |
crtdaydreams |
hardcopy of sicp came today :D |
| |
~ 2 hours 26 minutes ~ |
06:30 |
crtdaydreams |
http://logs.bitdash.io/pest/2022-09-06#1012359 << handle is "crt"daydreams, not "steampunk"daydreams |
06:30 |
bitbot |
Logged on 2022-09-06 18:16:22 asciilifeform[5]: steam -- simpler, mechanically, and -- with sumthing resembling modern machining -- with turbine, ~similarly efficient to the carburetted 'ice' |
06:31 |
crtdaydreams |
in all rationale though, defo merit for i.e. boiler-powered workshop using old skool belts and pulleys |
06:32 |
crtdaydreams |
high torque applications |
06:33 |
crtdaydreams |
but then again, wai mess with steam machine wen perfectly good D7 in shed that can last over9000 hours |
06:34 |
crtdaydreams |
be better off using the water for e.g. electrolysis |
06:35 |
crtdaydreams |
or better yet; Drink it. Fresh water might be scarcity in apocalypse |
06:36 |
crtdaydreams |
http://logs.bitdash.io/pest/2022-09-06#1012365 << why car? why not balloon? |
06:36 |
bitbot |
Logged on 2022-09-06 20:53:49 asciilifeform[jonsykkel|crawlerbot|billymg]: ( laff, but occasional crackpot actually proposes 'compressed air car' in earnest. 'folx who can't do arithmetic are doomed to talk nonsense'(tm)(r)(jmc) ) |
06:38 |
crtdaydreams |
perhaps merit to steam with complexity, could make on home lathe & mill if in a pinch |
06:40 |
crtdaydreams |
will always have shit to burn and water to boil |
06:44 |
crtdaydreams |
http://logs.bitdash.io/pest/2022-09-06#1012368 << what like cap? not sure what adding a tank would do, there's a finite potential to which you can store superheated pressurized steam efficiently |
06:44 |
bitbot |
Logged on 2022-09-06 21:05:50 jonsykkel: im joking, but jokes aside, u would have the steam engine + tank to solve the slow to revv problem. why wouldnt that work |
06:46 |
crtdaydreams |
all it would do is allow you to continue running for a little bit after the boiler has cooled |
06:46 |
jonsykkel |
u cud use superhot steam to press air into tank then put that into wheels |
06:48 |
crtdaydreams |
there's a finite linear expansion coefficient and thermal conductivity |
06:48 |
crtdaydreams |
steam engines can only go so fast |
06:49 |
crtdaydreams |
s/finite/finite limit to |
06:53 |
jonsykkel |
maybe it dosnt work, im low steam-iq so i cant say |
| |
↖ |
06:54 |
crtdaydreams |
new meaning to "runnin outta steam" |
06:54 |
crtdaydreams |
tank psi exponentially decayed fug |
07:05 |
* |
crtdaydreams wonders if we'll ever see airships again |
| |
~ 1 hours 26 minutes ~ |
08:32 |
jonsykkel |
in non-steams, ive ben experimenting with nat traversal |
08:32 |
jonsykkel |
this is my observations |
08:33 |
jonsykkel |
i got setup that looks like this http://zzz.st/up/EKRUGKwc/20220907_143211.png |
08:33 |
jonsykkel |
2 machines behind same nat, 1 behind difrent nat, and 1 not behind any nat |
08:33 |
jonsykkel |
the natted machines are not able to communicate with each other using the same ext.port as D is using |
08:33 |
jonsykkel |
if C forwards port, A and B can reach it, but C sees diffrent src ports than what D is seeing |
08:33 |
jonsykkel |
http://zzz.st/up/eReJlvWl/20220907_143255.png |
| |
~ 2 hours 18 minutes ~ |
10:51 |
asciilifeform |
jonsykkel: 2 boxes under 1 nat likely won't link up, addrcast won't help, as you illustrated. fortunately this doesn't often occur in nature |
10:53 |
asciilifeform |
( however each of'em ought to still be able to peer with stations ~outside~ that nat ) |
10:53 |
jonsykkel |
ryte but im talking about boxes from different nats trying to link |
10:56 |
jonsykkel |
seems all the nats im behind cares about where packets come from in adition to port |
10:56 |
asciilifeform |
jonsykkel: does e.g. 'skype' work from behind your nat? may be worth experiment |
10:57 |
asciilifeform |
( not all nats are drillable ) |
10:57 |
asciilifeform |
konsoomer nats typically are |
10:58 |
jonsykkel |
no idea but does skype even do p2p |
10:59 |
jonsykkel |
but it does drill, just have to initiate conection from behind nat |
11:01 |
jonsykkel |
cannot use external port that someone else is using (see fig. 2, nat assigns diffrent ports for difrent hosts outside the nat) |
11:01 |
asciilifeform |
afaik with 'symmetric' nats of the type apparently victimizing jonsykkel , the only drill that worx is to hammer random ports, from both directions, until match |
11:01 |
jonsykkel |
weird |
11:02 |
jonsykkel |
gota read up on that |
11:02 |
jonsykkel |
why would random ports work |
11:02 |
asciilifeform |
jonsykkel: be sure to post your findings here |
11:02 |
jonsykkel |
sure |
11:11 |
jonsykkel |
oh i see how random hammering owkrs |
11:11 |
jonsykkel |
will do some experiments |
| |
~ 37 minutes ~ |
11:48 |
awt |
http://logs.bitdash.io/pest/2022-09-06#1012221 << any thoughts on this asciilifeform? |
11:48 |
bitbot |
Logged on 2022-09-06 11:49:29 phf[awt]: awt, so for example if there's a complete pest net of n stations, everyone's online, then 1 station drops out, now the network in aggregate starts transmitting n-1 address cast messages, because everyone is looking for that 1 offline station? 2 station, n-2, etc. |
11:49 |
awt |
$ticker btc usd |
11:49 |
busybot |
Current BTC price in USD: $18885.31 |
| |
~ 18 minutes ~ |
12:08 |
asciilifeform |
awt: indeed you'd want some sorta randomization & backoff there, as suggested by folx in prev thrd |
12:09 |
asciilifeform |
in fact imho oughta have it across the board, wherever a timeout triggers sumthing 'public' |
12:11 |
asciilifeform |
awt: of course yer example presupposes that the net is a 'clique' (i.e. erryone-to-erryone peering) |
12:11 |
asciilifeform |
in actual practice (even on current pestnet) this aint so |
12:13 |
* |
asciilifeform suspects that even very naive algo, e.g. 'if there is a cold peer in wot -- then erry second 1/60 chance of shooting addrcast to all hot peers' -- would prevent 'chorusing' |
12:14 |
asciilifeform |
notion in spec was simply that there aint any point in emitting addrcast if yer actually in contact with yer entire wot at given time |
12:15 |
asciilifeform |
(and otherwise you want periodic beacon so that the missing peer, in the event he still has a working link with 1 or more on the net, can reconnect) |
12:17 |
asciilifeform |
(ditto ~processing~ addrcast; is rather expensive, so if all yer peers 'hot', no point in doing so) |
12:19 |
phf |
the icky part is that if your or your counterparty's pest is complete, then you don't have to process anything. but with a single node falling out on either side, you start getting packets or start having to process packets |
12:19 |
phf |
in practice that means that if one of your nodes falls out, suddenly you have to drink from the firehose of address packets |
12:20 |
asciilifeform |
phf: correct |
12:20 |
asciilifeform |
the choice afaik is to 'drink always' or 'drink when missing 1 or moar peer' |
12:21 |
asciilifeform |
asciilifeform didn't see a point in 'drink always' |
12:22 |
asciilifeform |
if bandwidth were somehow in infinite supply, could simply carry ~all~ traffic in addrcast-style broadcast msgs. but in practice this'll get outta hand rather quickly. |
12:24 |
asciilifeform |
(the other , not unimportant, point, is that such 'cheat' would eat away at the p2p topological redundancy of pest. stations oughta directly link up with peers whenever possible, and operator oughta know (via hearsayism) if fails) |
12:32 |
phf |
i'm more trying to understand this particular mechanism better, because it seems like it feels like it has a potential for a firehose |
12:33 |
phf |
you have n stations, one drops out, now n-1 stations are sending n-1 packets to each other to find the missing station, indefinitely. which (n-1)*2 decrypt operations on each machine |
12:34 |
asciilifeform |
phf: the 'firehose' is that addrcasts are broadcasts and thereby may be coming from l2+ |
12:36 |
phf |
it being l2 kind of reduces the load, if you consider n to be a complete pest net, something being l2 implies subgraph size m, where m<n by definition, so inseead of it being n-1 packets, it's m-1 |
12:37 |
asciilifeform |
well note that 'complete n' may vary by station depending on what bounce knob is set to |
12:37 |
asciilifeform |
but yes |
12:40 |
phf |
or rather x-missing nodes, n-total stations, m-size of subgraph, ≤x*(m-x) packets, where m=n in the worst case |
| |
~ 1 hours 14 minutes ~ |
13:55 |
* |
asciilifeform at various times tried to come up with somehow moar efficient mechanism than addrcast, but utterly failed |
13:56 |
asciilifeform |
given the prior where 'only peers have any biz knowing yer addr/port', it's afaik the only possible one |
13:59 |
phf |
asciilifeform, why not make who you're looking for public? |
14:00 |
asciilifeform |
phf: cuz then you gotta make yer own addr/port public, neh |
14:00 |
asciilifeform |
the 'who' has to be able to answer. |
14:01 |
phf |
why would you? e.g. station phf looking for station asciilieform, and here's a crypto payload that only asciilifeform will know |
14:02 |
asciilifeform |
peers are identified by keys tho (shared strictly b/w the 2 peers) |
14:02 |
phf |
immediately that'll only solve 2x decode, but then peers can have some kind of coordination thing going |
| |
↖ |
14:02 |
asciilifeform |
rather than handles |
14:02 |
asciilifeform |
(which anyone can set to anyffin) |
14:03 |
phf |
anyone can also not-retransmit which is functionally equivalent to preventing decode based on target station's nick |
14:03 |
phf |
lets say it's ascii looking for phf, i know i'm phf, so i decode. attacker changes that to dog, so i don't decode. but then attacker can also simply not send, with same result. |
14:03 |
asciilifeform |
phf: elaborate plz re 'coordination thing' |
14:04 |
asciilifeform |
'looking for phf' in this case means 'here's a phf-encoded addr/port for asciilifeform' tho |
14:06 |
asciilifeform |
issue with coordination schemes is that not erry peer has biz being able to ask for addr/port of arbitrary peer of $station |
14:06 |
phf |
yes, but addr/port is payload, coordination can be done at the level "who are we looking for" |
14:06 |
asciilifeform |
a |
14:06 |
phf |
if i get 30 packets from asciilifeform that are asking for phf, i can choose to retransmit only a subset of those. that would be one form of coordination |
14:07 |
asciilifeform |
so notion is to place the handle in addrcast outside the ciphered payload? |
14:07 |
phf |
i might know where asciilifeform is in the above scenario, because he's in my l1, or i might just wait until he comes up to send him the last packet from a particular set |
14:07 |
phf |
asciilifeform, yah |
14:09 |
phf |
but i'm also thinking out loud, because maybe there needs to be more policy around it, if one were to do it |
14:09 |
phf |
e.g. does l2 need to know who you're looking for, that's possibly a leak |
14:11 |
phf |
lets come back to this, i want to think about it some more, before i raise it as an explicit RFC :> |
14:12 |
* |
asciilifeform when orig wrote section, defaulted to 'no one but the target has any biz knowing anyffin', but agree that subj needs thought |
| |
↖ ↖ ↖ ↖ |
14:13 |
phf |
the policy might be something like "if you're increasing bounce you should zero out looking-for-station-nick field" |
14:13 |
phf |
so your l1 knows who you're looking for, but not l2 |
14:14 |
phf |
this will give you enought rope^Wknowledge to do better coordination, letting the subnet be pretty conservative about the address requests |
14:15 |
asciilifeform |
fwiw addrcast does already include ~originator~ handle outside of ciphered blob |
14:15 |
asciilifeform |
(but not the target's) |
14:15 |
phf |
yah |
14:17 |
phf |
"someone is looking for someone" "phf is lookibng for someone" vs "phf is looking for asciilifeform", that seems like the kind of knowledge that's can be practically applied at different bounce levels, and then scrubbed |
14:27 |
asciilifeform |
phf: what should l1 actually do with this info tho? intention of addrcast is to diffuse as widely as possible |
14:27 |
asciilifeform |
so suppose l1 get to avoid expensively decoding the thing if they don't need it. but l2+ is stuck doing so anyway |
14:29 |
asciilifeform |
(fwiw 'expensive' may be an exaggeration, decoding an addrcast simply costs what decoding 2 ordinary packets costs ) |
14:32 |
phf |
asciilifeform, well, nothing's really "expensive" since we're running this on machine from the future, but so far this is the first mechanism which is a free-for-all |
14:33 |
phf |
ignore is the other one, but it comes with an explicit policy of "station can decide what to do" |
14:40 |
phf |
x lookingfor y is the entirety of the fact, from which it's possible to reason. in the simplest case "i know where y is" or "i'm also looking for y". in which case you can reduce the incoming stream to "i'm looking for y" and then you keep a backlog of last packets of everyone who's also looking for y. |
14:43 |
phf |
so for example in a complete graph of n nodes, where one of the nodes is disconnected, the "everyone's looking for missing node" is n messages every at some die off frequency |
14:44 |
phf |
where's in current approach it's at least n^2 (but not more, since that's going to get deduped on second bounce), and there's no way to coordinate the die off |
14:46 |
phf |
re coordinating the die off, if you're already in stable state of looking for y, and there's an eager node that keeps sending "looking for y" messages, you can choose to just go "yeah yeah there's a bunch of people looking for him, settle down" |
14:46 |
asciilifeform |
phf: fwiw note that per spec, stations aint required to decode addrcasts ('may decode, if spare cycles') |
| |
~ 1 hours 2 minutes ~ |
15:48 |
asciilifeform |
phf: 1 aspect not already mentioned is that decoding addrcast doesn't actually cost same as regular packet, because only need to try keys of 'cold' peers |
15:48 |
asciilifeform |
(for the payload, that is) |
15:49 |
asciilifeform |
*as two regular packets |
15:50 |
asciilifeform |
i.e. if you've no cold peers, you stop immediately once see that it's addrcast; if have 1 cold, you try only that key; 2 -- the 2 respective keys; etc |
15:51 |
* |
asciilifeform not made this explicit in spec, but really oughta |
| |
~ 29 minutes ~ |
16:20 |
phf |
i wrote some SIMULATION CODE |
16:21 |
phf |
because i can't graph theory rightn ow |
16:23 |
phf |
so far i've discovered that a complete graph pest net of 10 with 1 missing generates 648 packets if everyone node were to send out the request once |
16:25 |
phf |
a 15 node graph with 3 missing generates 4752 packets |
16:27 |
phf |
a 20 node graph with 3 missing generates 13872… |
16:28 |
phf |
that's my “send” http://paste.deedbot.org/?id=10e3 |
16:30 |
phf |
actually that's the simulation code in case anyone wants to check it for mistakes http://paste.deedbot.org/?id=nd1x |
| |
~ 30 minutes ~ |
17:01 |
asciilifeform |
phf: possibly also 'can't graph theory' but e.g. 10 where 1 missing oughta result in each of the 9 present stations shooting precisely 8 each (1 getaddr, given as 1 missing peer, going to the 8 remaining -- not counting self) |
17:01 |
asciilifeform |
similarly for the others ( 15 w/ 3 missing -- each of the present 12 shoots 11 getaddrs in total , etc ) |
17:01 |
asciilifeform |
what am i missing |
17:02 |
phf |
propagation |
17:02 |
asciilifeform |
a hm |
17:03 |
phf |
wait, let me fix some stuff in my code, possibly stupid |
17:05 |
asciilifeform |
phf: if the graph is fully connected, there'll be no propagation, as the thing'll get deduped |
17:05 |
asciilifeform |
(or rather, there'll be 1 bounce's worth) |
17:05 |
phf |
well, that's not what my code is doing :D |
17:07 |
phf |
ah i think i understand where i'm wrong |
17:07 |
* |
asciilifeform also aint thinking straight, as the getaddrs are unique per shooter and will in fact propagate to all peers, within bounce limit |
17:07 |
asciilifeform |
err, addrcasts |
17:07 |
* |
asciilifeform oughta come back to this thrd when awake |
17:08 |
* |
asciilifeform bbl |
17:10 |
phf |
right, i'm not wrong, because in my simulation there's no red layer. so a station generations 1 unique getaddr, that is then sent to all peers |
17:20 |
phf |
ok, so on 10 1 i get (:TOTAL-SENT 648 :TOTAL-RECEIVED 648 :SAMPLE-SENT 72 :SAMPLE-RECEIVED 72) |
17:20 |
phf |
current state of simulation code http://paste.deedbot.org/?id=TzYt |
| |
↖ |
17:21 |
phf |
the propagation logic is in “meat”, please to rea |
17:21 |
phf |
d |
| |
~ 1 hours 39 minutes ~ |
19:01 |
shinohai |
$ticker btc usd |
19:01 |
busybot |
Current BTC price in USD: $19338.76 |
| |
~ 2 hours 6 minutes ~ |
21:08 |
jonsykkel |
ur code relays packets to the guy it recved from |
21:08 |
jonsykkel |
dosnt make a big difrence in results tho |
21:22 |
phf |
ah ty |
21:24 |
phf |
ah poop that breaks the clean interface |
21:24 |
jonsykkel |
2bad |
21:26 |
jonsykkel |
# of pakets sent can be reduced somwat by adding a propagation delay before relaying. only relay to ppl u didnt yet recv a copy from. such mechanism alredy exists in specful pestron in form of hearsay buffer. maybe can be generalized for all pakets that are to be flod routed |
21:26 |
jonsykkel |
but wil not change the results of this particular test, cuz all nodes are interconected |
21:28 |
phf |
jonsykkel, the argument from the relevant thread is that there's nothing to hook the concept of "copy" to |
21:29 |
jonsykkel |
i dont undersand |
21:30 |
jonsykkel |
hash of message is hook innit (or wat is huk here) |
21:31 |
phf |
jonsykkel, maybe i'm misunderstanding your proposal also, but each instance of packet in my code correspondes correspondence to what would be a unique hash in prod |
21:32 |
phf |
but there's also no other data on each packet except origin and hash |
21:32 |
jonsykkel |
presumably prod=addrcast |
21:33 |
phf |
i meant "hash in production", and yes each packet is an addrcast |
21:33 |
jonsykkel |
but it wont be unique since u are relaying them wihtout modification |
21:34 |
phf |
right |
21:34 |
phf |
wait, i think i understand what you're saying "only relay to ppl u didnt yet recv a copy from." |
21:34 |
phf |
that mechanism is already in my code |
21:35 |
phf |
that's the (unless (cache ...) ...) check |
21:36 |
jonsykkel |
sec gota think |
21:36 |
phf |
"such mechanism alredy exists in specful pestron in form of hearsay buffer." right, that's correct, but as far as i understand address message is a broadcast, it's already supposed to share same machinery as a regular broadcast, which is what i'm emulating in simulation |
21:40 |
jonsykkel |
the cache doesnt do the same thing, if u recv a packet and immediately broadcast it, u might send the packet to a guy who has alredy sent the same packet to u but it hasnt arrived yet |
21:41 |
phf |
ah fuck |
21:41 |
jonsykkel |
it doesnt affect ur simulation cuz theres no alive node that is >1 distance from any other alive node |
21:44 |
jonsykkel |
(and the packets are receved instantly) |
21:45 |
jonsykkel |
i supose could affect a real net even if 100%interconected, but less likely |
21:46 |
phf |
i think all this idea communicates is that there might be slightly more packets in air, then the simulation predicts (i'm not sure that's correct, i'm failing to visualize it, because end of day) |
21:47 |
phf |
the delay just adds jitter though, to probabily of that falling out, but doesn't necessarily predict it |
21:47 |
phf |
*prevent it |
21:48 |
phf |
jeez, let me retype that sentance |
21:50 |
phf |
the delay just adds jitter though to the probabily of the backets being in air despite the cache, but otherwise the delay doesn't prevent that situation from happening |
21:50 |
phf |
bepis |
21:53 |
phf |
in related, i sort of assumed that the delay on hearsay was there so that you could get missing packets before you spool them to write only irc log, so that you preserve order, rather than for p2p purposes. i don't know if i'm correct though |
21:53 |
jonsykkel |
if i understand u corectly, the delay inded dosnt improve things for the first bounce, it probably even makes sense to skip it for first bnc, but it does make a difrence after that |
21:55 |
phf |
that's my intuition, i'll have to revisit this point though |
21:55 |
jonsykkel |
i think primary purposes of hearsay for messages is to give the imediate message a chance to arive , or in the case where it never arives, colect the list of peers that u received same mesage from so can be listed in irclog |
21:55 |
phf |
yeah |
21:56 |
jonsykkel |
purposes of hearsay bufer delay, that is |
21:56 |
jonsykkel |
and the same info can be used incidentaly to reduce # of packets in air |
| |
~ 18 minutes ~ |
22:14 |
phf |
well, order of arrival matters |
22:15 |
phf |
or the other option is that my code is buggy. i think i'm going to stop working on it for now |
| |
~ 58 minutes ~ |
23:14 |
signpost |
http://paste.deedbot.org/?id=Kc1c << in other news, onlinecodes lisp prototype works now. working through sbcl's optimization warnings atm, refactoring, etc |
23:15 |
signpost |
planning on turning this prototype into a little command line tool that can send/receive a given file to an IP:PORT |
23:24 |
jonsykkel |
ur code propagates packets depth first |
23:24 |
jonsykkel |
but i think ends up with right numbers for math reasons |
23:24 |
jonsykkel |
at least thats wat proof by mspaint says http://zzz.st/up/PJvbnNoR/20220908_052234.png |
| |
↖ |
23:25 |
jonsykkel |
re phfcode, not onlinecode, onlinecode - nice |
23:25 |
signpost |
ty.bmp |
23:26 |
crtdaydreams |
http://logs.bitdash.io/pest/2022-09-07#1012570 << mspaint is literally goto wen want to explain something |
23:26 |
bitbot |
Logged on 2022-09-07 23:24:29 jonsykkel: at least thats wat proof by mspaint says http://zzz.st/up/PJvbnNoR/20220908_052234.png |
23:26 |
crtdaydreams |
<3 |
23:27 |
jonsykkel |
its a powerful beast to have in ur toolbox |