<sb0>
"broadcast all side effects" - does zmq allow initialization? afaict it doesn't
<sb0>
if you subscribe too late, your data is corrupted
<whitequark>
uh, corrupted?
<whitequark>
if you subscribe too late, you don't get the earlier messages. this is a deliberate facet of 0mq's design
<sb0>
yes, so inappropriate for synchronizing data structures
<whitequark>
0mq is, roughly speaking, a replacement for sockets, not for a consensus protocol
<sb0>
i don't understand why zmq sockets are that great, the publish/subscribe stuff is just "for client in clients: client.write(message)"
<sb0>
it makes sense if you're using a language like C, but if your language easily supports lists of whatever, the zmq stuff becomes pretty redundant
<whitequark>
yeah, except you have to handle: DNS resolution, authentication, transport-layer encryption, network erros, ...
<sb0>
python libs do that as well
<sb0>
again, useful with C, but doesn't make sense with python
<whitequark>
I haven't seen a way to do that in python that's as simple and efficient as using zmq
<sb0>
a zmq-like publish server is ~15 lines of code with asyncio
<whitequark>
with authentication and encryption?
<sb0>
there are SSL features in asyncio, so maybe. I haven't tried them.
<whitequark>
lol, SSL
<whitequark>
that's a really bad answer
<sb0>
why?
<whitequark>
it's very hard to use correctly
<whitequark>
e.g. how do you deploy PFS?
<whitequark>
what ciphers do you use?
<whitequark>
how do you prevent amplification attacks if you use UDP?
<sb0>
so ZMQ is a suckless openssl then?
<whitequark>
it provides a solution for transport layer encryption that's far better than openssl, yes
<whitequark>
but that's not all; the socket layer has other useful functionality
<whitequark>
reconnection with exponential backoff, queueing, etc
<whitequark>
mind you I have some complaints about zmq as well, e.g. last time I looked, authentication errors were very opaque
<sb0>
doesn't SSLv3 support PFS?
<whitequark>
if you set your ciphersuites just right, yes
<whitequark>
do you know how to do it correctly offhand?
<sb0>
that sounds less painful than pulling the zmq dependency and configuring it
<whitequark>
yeah, and then you have to deal with X.509 to do authentication
<sb0>
and zmq is better there?
<whitequark>
sure, you generate a curve25519 keypair. the authentication function gets the public key of the client. done
<whitequark>
and while we're on it, generating a curve25519 keypair involves taking 40 random bytes.
<whitequark>
that's all.
<sb0>
well, isn't it possible to do something similar with X.509?
<whitequark>
I'm not sure what your point is. there's a decent solution that works and you want to muck with openssl because installing libzmq is apparently too hard?
<whitequark>
I've done what you suggest, though not with asyncio but with EventMachine and Ruby. zeromq is incomparably more convenient to work with
<sb0>
SSL is standard and support for it ships with Python. dependencies and especially C/C++ ones can be messy, see how cr1901 struggled with the h5py install...
<whitequark>
SSL is still an extension, and in fact you need libopenssl-dev
<sb0>
i wonder what the point of publishing kernel outputs are in ipython... multiple views of the same notebook in jupyter are not synchronized
<sb0>
(since it's the same kernel, variables etc. are, but you can achieve that without this complicated messaging system)
aeris has quit [Quit: Leaving]
aeris has joined #m-labs
aeris has quit [Client Quit]
aeris has joined #m-labs
rohitksingh has quit [Ping timeout: 260 seconds]
<sb0>
I really don't see what purpose this multi-socket mess inflicted by zmq serves
<sb0>
a simple two-way stream of messages, similar to the usual python stdin+stdout, would work just as well
<whitequark>
that's a different question
<sb0>
everything is sequential and all
<sb0>
yes, but seeing this mess does not improve my skepticism of zmq
<sb0>
I actually tried to use it last year to implement what became artiq.protocols.sync_struct, and even this simple task does not fit into the zmq model
<sb0>
you can pub/sub changes, but then you have a race condition with the initialization that needs to use a different socket
<whitequark>
um, yeah
<whitequark>
pub/sub model does not work if you have implicit state
<sb0>
"At present, embedding IPython cannot be done from inside IPython. Run the code samples below outside IPython."
<sb0>
i wonder what problem zmq solves, exactly. had they used file descriptor inheritance for IPC, I guess this would not be a problem.
<sb0>
maybe their qt console widget can be recycled for artiq gui, but i really don't dig the rest
bentley` has quit [Ping timeout: 272 seconds]
<sb0>
this thing opens no fewer than 5 TCP ports
<sb0>
just for the "kernel"
Guest51191 has quit [Quit: This computer has gone to sleep]
<whitequark>
can't use that on windows...
<whitequark>
btw, new zmq has "resources" so you don't have to open five ports
<whitequark>
(new = 4+)
<sb0>
you can use that on windows with the msvcrt trick (used in myhdl) that I mentioned a while ago
mithro has joined #m-labs
rohitksingh has joined #m-labs
Mon_ has joined #m-labs
Mon_ is now known as Guest55711
Guest55711 has quit [Quit: This computer has gone to sleep]
rohitksingh has quit [Ping timeout: 250 seconds]
rohitksingh has joined #m-labs
mumptai has joined #m-labs
ylamarre has joined #m-labs
bentley` has joined #m-labs
rohitksingh has quit [Quit: Leaving.]
hozer has quit [Remote host closed the connection]
mumptai has quit [Quit: Verlassend]
aeris has quit [Read error: Connection reset by peer]