IRC Log


Sunday September 5, 2010

[Time] NameMessage
[05:40] sustrik lestrrat: both are going to be in 2.1
[05:40] sustrik ZMQ_FD as already there
[05:41] sustrik i'll write an email about EINTR & 2.1 today
[06:00] sustrik DasIch: That's a bug in OpenPGM library
[06:00] sustrik if you don't need PGM, just compile 0MQ without it
[06:01] sustrik it have been fixed in newer OpenPGM releases
[06:01] sustrik but haven't got into 0MQ as for now
[06:01] sustrik anway, creating multiple contexts is pretty useless
[06:02] sustrik why do you do that?
[06:32] lestrrat sustrik: by "it's already there" you mean the github repo, right?
[06:34] sustrik yes
[06:34] sustrik the master branch
[06:34] sustrik EINTR on eintr branch, FD & EVENTS on master branch
[06:35] sustrik if i have some spare time today, i'll merge EINTR fix to master as well
[08:39] pieter_hintjens sustrik: hi
[09:54] sustrik pieter_hintjens: hi
[09:57] pieter_hintjens hi martin... i was wondering about different ways to submit patches
[09:57] pieter_hintjens people are using at least three different routes
[09:57] pieter_hintjens patches to zeromq-dev, issues, and pull requests
[09:58] sustrik i am using patches from the mailing list
[09:58] sustrik are there any pending patches anywhere else?
[09:59] pieter_hintjens i saw one pull request on the ML today
[09:59] sustrik yup
[09:59] sustrik that's a packaging script thing, it's up to mato to manage that one
[10:00] pieter_hintjens :-) it's more of a consistency thing than anything else
[10:00] pieter_hintjens ok, totally different thing, i have a trivial inproc example that refuses to work
[10:00] sustrik can you paste is somewhere?
[10:00] pieter_hintjens yes, i raised an issue (62) with an example and analysis
[10:01] sustrik let me see
[10:01] pieter_hintjens i've spent several hours trying different things, ended up doing a sleep... :-/
[10:03] sustrik i would say it's the inproc reconnect thing
[10:03] sustrik inproc reconnect is still unimplemented
[10:03] sustrik thus doing connect before bind does not work
[10:04] sustrik so, if step1 connects before step2 binds
[10:04] sustrik :|
[10:04] pieter_hintjens ah, it's not just for PAIR sockets
[10:05] sustrik it's inproc as well
[10:05] pieter_hintjens with PUSH/PULL it works a little better, say 90% of the time
[10:05] sustrik it's not that visible as inproc connection cannot break
[10:05] pieter_hintjens with PAIR it dies almost immediately
[10:05] sustrik it's a timing issue
[10:05] pieter_hintjens ok, if this is a known restriction that's fine, I can document it
[10:06] sustrik Connecting a socket
[10:06] sustrik When connecting a socket to a peer address using zmq_connect() with the inproc transport, the endpoint shall be interpreted as an arbitrary string identifying the name to connect to. The name
[10:06] sustrik must have been previously created by assigning it to at least one socket within the same 0MQ context as the socket being connected.
[10:06] pieter_hintjens there is no technical reason it could not work, right?
[10:06] sustrik no
[10:06] pieter_hintjens hmm, ok
[10:06] sustrik just not implemented
[10:06] pieter_hintjens excellent, that is all I need
[10:06] pieter_hintjens i'll close the issue
[10:06] pieter_hintjens thx
[10:06] sustrik np
[10:08] pieter_hintjens "ZeroMQ is quickly becoming an even bigger hammer in the premature optimization planet of Newbo-Thumbia."
[10:08] pieter_hintjens vs. "Then they'd better find a new rite of passage, because ZeroMQ is turning into a category killer."
[10:08] sustrik :)
[10:08] pieter_hintjens that is an excellent discussion...
[10:09] sustrik yes, i liked it
[10:09] pieter_hintjens i'm wondering if it's worth resurrecting the old amqp file transfer semantics as an example over 0MQ
[10:09] pieter_hintjens should be nice and easy to implement
[10:09] sustrik if you have resources to do that
[10:09] sustrik an example?
[10:10] pieter_hintjens well, it's a question of what examples are the most valuable
[10:10] pieter_hintjens would you rather have a name resolution service or a file transfer service over 0MQ?
[10:10] sustrik ah, in the guide?
[10:10] pieter_hintjens yeah
[10:10] sustrik afaiu the examples in the guide are to be simple
[10:10] sustrik file transfer is rather complex
[10:10] pieter_hintjens sustrik: with 0MQ everything is simple :-)
[10:11] sustrik i mean chopping the files
[10:11] sustrik reassemblig them
[10:11] sustrik etc.
[10:11] pieter_hintjens maybe
[10:12] pieter_hintjens actually it's not that complex, really
[10:12] sustrik it's up to you
[10:12] pieter_hintjens the sophisticated part is the stage / delivery semantics but that's a neat demo of 0MQ IMO
[10:12] pieter_hintjens we'll see...
[10:12] sustrik optinally, it can be a tutorial
[10:12] pieter_hintjens yes
[10:12] pieter_hintjens it reminded me that someone said "80% of messaging is still file transfer"
[10:13] pieter_hintjens and it kind of seems that by covering the extreme other side of messaging (from low-latency) we prove the generality of the model
[10:14] pieter_hintjens also it fits into the notion of distributed device management via shuffling config files around
[10:14] sustrik ok
[10:14] pieter_hintjens we will need a simple tutorial on how to make and submit git patches
[10:14] sustrik enumerating the steps won't do?
[10:15] pieter_hintjens that would be a simple tutorial, then
[10:15] pieter_hintjens it would do, yes
[10:15] sustrik gitt diff, send as a main, put [PATCH] in the subject, state it's under MIT
[10:15] sustrik that's it, no?
[10:15] sustrik git, mail*
[10:16] pieter_hintjens roughly, but some of the details cause problems
[10:16] pieter_hintjens "Honestly? I spent too much time being stuck. I ended up on some crappy tutorial that said to type "git-format-patch", when of course it was "git format-patch". I got stuck on that until I trial-and-error'd."
[10:16] sustrik so far we don't require formatted patches
[10:17] sustrik so simple diff would do
[10:17] sustrik not even git diff is needed
[10:17] sustrik but it would be nice if people sent formatted patches
[10:17] pieter_hintjens mato was saying something about signed-off-by
[10:17] sustrik yup
[10:17] pieter_hintjens indeed
[10:17] pieter_hintjens for later...
[10:18] sustrik would be nice to document it though
[10:18] pieter_hintjens yes
[10:18] pieter_hintjens did you update the contract page or shall I do that
[10:18] pieter_hintjens i thought the way you expressed it in the email was very clear
[10:19] pieter_hintjens but it needs to be written down, or it'll get lost
[10:20] sustrik ok, i'll do that
[10:20] pieter_hintjens what we found, in FFII work, was that it was usually better to edit the page first, then post to the list explaining the change
[10:21] pieter_hintjens this is kind of a standard pattern to avoid losing stuff in the email list
[10:25] sustrik ok
[10:25] sustrik btw, the inproc example
[10:26] sustrik you can fix it by launch step1's thread from step2
[10:26] sustrik that should synchronise it
[10:27] pieter_hintjens hmm, nice solution...
[10:31] pieter_hintjens ack, that works
[10:31] sustrik great
[10:35] guido_g hi
[10:35] guido_g just saw the patch thing
[10:36] guido_g I used git format-patch
[10:36] guido_g but i had my changes in a local branch
[10:37] sustrik guido_g: hi
[10:37] sustrik i am not an expert on git
[10:38] sustrik do you need a local branch to be able to format a patch?
[10:38] guido_g i'm no expert neither, but will have a look
[10:39] sustrik looks like there's a "single-commit" mode
[10:42] guido_g git format-patch -k --stdout R1..R2 <- from the examples of git help format-patch
[10:43] guido_g seems that it works for commits and ranges of commits
[10:43] sustrik nice
[10:43] guido_g git format-patch -3 <- sweet
[10:43] guido_g last three commits as patches
[10:44] sustrik bingo
[10:44] sustrik that's what most people need
[10:44] guido_g uh
[10:46] sustrik they should, but you don't expect newbies submitting patches to deal with branching
[10:46] sustrik installing git and learning how to commit is hard enough
[10:46] sustrik that's why i am happy with applying simple git diffs for now
[10:47] sustrik or even dumb old diffs
[10:47] guido_g ok
[10:48] sustrik step-by-step would be nice though
[10:48] guido_g so I spend hours for nothing...
[10:48] guido_g :)
[10:48] sustrik i mean, that's the goal
[10:48] sustrik we have to educate people
[10:48] guido_g right
[10:48] sustrik do we have a patch process described anywhere?
[10:48] sustrik hm
[10:49] pieter_hintjens gudio_g: i think branches are orthogonal to patches
[10:50] pieter_hintjens in the simplest case, you clone a repo, make changes, do a diff or git diff, and get a patch
[10:50] pieter_hintjens well, that's the medium hard case
[10:50] pieter_hintjens in the simplest case you take the source code package, make changes, do a diff and get a non-git patch
[10:51] pieter_hintjens but that only applies to projects that make source code packages
[10:51] sustrik ack, and the hard case requires a topc branch
[10:51] sustrik topic*
[10:52] pieter_hintjens yes, exactly
[10:53] pieter_hintjens for projects like zguide, there is no source package
[10:53] pieter_hintjens we have to educate people, as you say
[10:54] sustrik we are at the beginning of the road, it'll take some time to make this work
[10:54] sustrik but it's worth of doing
[10:55] sustrik guido_g: can you write down your experience with format-patch?
[10:56] sustrik it could be used as a basis for the patch process tutorial
[10:57] guido_g hmmm
[10:58] guido_g i did it by book, three steps and done
[10:58] guido_g but if you really want it...
[10:58] sustrik yes, please
[10:58] sustrik you'll spare me an hour :)
[10:58] pieter_hintjens guido_g: yes please, we'll have to document the whole thing
[10:58] guido_g *sigh*
[10:58] pieter_hintjens how to submit patch from source package
[10:59] pieter_hintjens how to submit patch from git repository clone
[10:59] guido_g ok, then i'll write down what *I* did
[10:59] sustrik thanks
[10:59] pieter_hintjens how to make topic branches and then submit them as patches
[10:59] pieter_hintjens can you create a page on the wiki, minimal, and we can take it from there?
[10:59] pieter_hintjens you should be able to create pages in the docs: category
[11:00] pieter_hintjens "we" = everyone who cares about this
[11:01] guido_g this cross-domain cookie thing sucks
[11:02] sustrik ah, yes
[11:02] sustrik pieter, any idea what's the problem?
[11:02] guido_g ok, where's the how-to for the wiki?
[11:03] guido_g sustrik: it's a wikidot thing
[11:03] sustrik guido_g: just post the command lines here
[11:03] guido_g ok
[11:11] guido_g http://gist.github.com/565948
[11:11] guido_g that's the whole magic
[11:12] guido_g "git format-patch -1" is really nice
[11:13] sustrik thanks!
[11:16] jond hi
[11:16] sustrik jon: hi
[11:16] jond good to see a policy round the patches
[11:17] sustrik ack
[11:17] sustrik will you be able to make it for the meetup on tuesday?
[11:17] jond I've had trouble squahsing commits in the past, which are meant to be easier for maintainer
[11:17] sustrik i would like to have a talk with you about the subscription forwarding
[11:18] jond tues: should be ok, though had to re-arrange a family thing
[11:18] sustrik ah, sorry about that
[11:19] sustrik discussing development via emails takes much more time than having a private talk
[11:19] jond also; i can't see irc in the dayjob, or twitter etc so if there's any last minute change mailing list is best
[11:19] sustrik jond: ok, will do
[11:21] jond on the subject of git, the chacon book seems to recommend git pull requests and format patch. it's all very powerful but seems easy to hang yrself
[11:22] sustrik we'll refine the process as we get better in using git
[11:22] guido_g format-patch itself is quite nice, as shown above
[11:22] jond am I meant to bring my local patch branches upto date with master/maint before running the diff/format-patch?
[11:23] sustrik jond: that would be nice
[11:23] sustrik otherwise it's up to me to resolve the conflicts
[11:23] sustrik which can in turn break your code
[11:24] sustrik well, it depends
[11:24] sustrik if you are submitting a single-line patch
[11:24] sustrik and there have been a lot of change on master
[11:24] sustrik it's probably easier for me to merge it then for you
[11:24] jond I also think we should recommend squashing the commits, as it makes the patch simpler to read (if git rebase -i works that is)
[11:25] sustrik squash = rebase to the actual head?
[11:25] guido_g already going way to far
[11:26] jond i am trying to keep in line with 2.0.9 and maint at the moment. what mato seems to have put in place is similar to waht we do with clearcase in the day job.
[11:26] guido_g pull -> [branch or not] -> changes -> commit [may be repeated] -> format-patch -> mailing list
[11:27] jond well in the past, I used the rebase to make all the individual commits I did on my branch appear as 1 for delivery. It's really annoying to have seperate commits for typo's etc
[11:28] guido_g but it's great if you have different changes made in a row
[11:28] guido_g so the maintainer can the ones he likes
[11:29] guido_g anyhow, i think i'll stick with this easy way
[11:29] jond i'd use a seperate branch for each change.
[11:30] guido_g if you do large changes, that might be ok
[11:30] guido_g for smaller ones it's sounds like a nightmare
[11:32] sustrik jond: i wouldn't bother with maint branch for the development work
[11:32] sustrik it's meant rather for small fixes
[11:34] sustrik guido_g: yes, the smaller the patch the simpler the process should be
[11:34] sustrik that's why i'm saying i would accept even plain old diffs
[11:34] guido_g great
[11:35] guido_g lowers the entry barrier
[11:35] sustrik exactly
[11:35] sustrik however, if you ar woking on new functionality that'll take 1/2 yesr to complete
[11:35] sustrik you definitely want your own branch
[11:35] guido_g and i'd demand payment :)
[11:35] sustrik good point :)
[11:37] guido_g so, now that i burned my eggs for brunch while writing git examples, i'm in the right mood for writing some more tests...
[11:37] jond the many branches thing pretty much also depends on the turnaround of the patch getting to master etc
[11:38] jond guido_g : i should send you the prefix_tree test ( was on the mailing list, i think we need tests now)
[11:39] jond sustrik: hopefully get chance to discuss that pub filtering on tuesday
[11:41] sustrik jond: sorry, i've seen it, but i was busy since :(
[11:43] jond yes me too; 0MQ stuff very intermittent , as dayjob is not involving it all.
[11:44] guido_g *sigh* at least, I'm not alone...
[11:44] jond incidently a SUB socket can bind can't it and then mutiple PUB's connect
[11:46] sustrik jond: yes
[11:47] sustrik thus the subscription should be forwarded to _all_ connected publishers
[11:47] jond ok, then maybe that's one for the docs, someone asked that last night on here, they wanted fan-in to single server, I don't think we cover that in the docs.
[11:48] sustrik it kind of follows from the orthogonality of socket types and binds/connects
[11:48] sustrik but yes, it would be nice to mention it somewhere
[11:49] sustrik maybe in the guide?
[11:49] jond sustrik: sorry I meant the guide
[11:50] sustrik pieter_hintjens: see above, suggestion for the guide
[11:51] sustrik btw, the fact that binds/connects are independent of socket types is something that most people don't get immediately
[11:55] jond yes, i think that is the problem. there's that big book enterprise messaging or whatever be nice to lift some scenarios from there and put in guide in 0MQ terms, which is pretty much what ph has been doing very well.
[11:56] sustrik yes, it seems to work
[11:57] sustrik btw, i've already seen some job ads requiring 0MQ knowledge so hopefully we'll get into the phase where people are actually paid for working on 0MQ
[11:57] sustrik we'll see
[11:58] jond that's interesting news. I can see it being difficult to get 0MQ in some places with established code (understandly so in some cases, like reliable multicast)
[12:01] sustrik well, i don't expect nasdaq to replace their infrastrucutre by 0mq any time soon :)
[12:02] sustrik but small companies are more flexible in adopting new technologies
[12:05] guido_g hopefully
[12:05] guido_g would be nice to have a ømq related day job
[12:09] sustrik my guess is that the early adopters are stock trading start-ups
[12:09] sustrik that would mean that places like NY, London or Chicago are most interesting
[12:09] sustrik i may be wrong though
[12:10] guido_g hmmm... with mongrel2 there might be even ordinary web-work available
[12:10] sustrik interesting point
[12:11] sustrik i haven't thought of that as i never done anything with web myself
[12:11] guido_g i left it in early 2005 and never looked back :)
[12:11] sustrik :)
[12:11] guido_g never did fronted things anyway
[12:12] lestrrat I doubt mongrel2 would really generate that much 0mq jobs... not at least from the web developer's standpoint.
[12:12] lestrrat zeromq is completely abstracted away in the web framework layer, so the web developers won't even know ;)
[12:12] sustrik right -- unless you want to scale
[12:13] sustrik what if you want N web servers
[12:13] lestrrat of course, some of the more curious guys will do interesting web stuff with 0mq
[12:13] sustrik and load-balanced services
[12:13] sustrik persistence in the middle, etc.
[12:13] sustrik that are google-like scenarios afaics
[12:14] guido_g would also be nice to have it for mor ebay like things
[12:14] guido_g *more
[12:14] lestrrat well, you're talking about the smart guys, they'll do anything. your average joe web devs won't touch it with a 40ft pole
[12:14] lestrrat ;)
[12:14] guido_g lestrrat: you're wrong
[12:14] guido_g they do touch it
[12:14] guido_g which is the problem...
[12:15] lestrrat I knew where that was going ;)
[12:15] sustrik :)
[12:15] guido_g hehe
[12:31] guido_g q: where do i find the declaration of int64_t?
[12:33] sustrik guido_g: stdint.h
[12:33] guido_g thx
[13:15] jond sustrik: yes, for the large orgs change more likely thru acquisition/merger so small is best for more leading stuff
[13:16] jond re : mongrel2 does anyone understand how the 0MQ integration works? It uses that c based co-routine library?
[13:37] sustrik jond: i think so, but i haven't checked
[17:25] cremes Tasser: i'm not on irc very much during the weekends (Chicago, IL, US); if you have questions i recommend you send them to the mailing list
[18:05] pieter_hintjens sustrik: re, was out with the family in the woods...
[18:08] pieter_hintjens i will cover publishers connecting to subscriber when i find a sensible use case
[18:08] pieter_hintjens "this is what you can do" is not useful but "this is how you solve problem X" is useful
[18:09] pieter_hintjens fan-in to single server... maybe for collecting statistics
[18:09] pieter_hintjens though why not use PUSH rather than PUB...?
[18:30] cremes pieter_hintjens: fyi, there are some comments on that igvita article that probably need a response
[18:30] pieter_hintjens cremes: am actually doing that right now
[18:30] cremes i would respond if i knew anything about boost::asio or sc-whatever
[18:31] cremes cool
[18:31] pieter_hintjens though I doubt they "need" a response except "download it and try it"
[18:31] cremes ha
[18:31] pieter_hintjens i'm reminded of the virgin declaring why sex is so pointless and messy
[18:31] cremes it's just a good idea to make sure comments like that don't go unanswered especially when google turns up that article in 6 months
[18:32] pieter_hintjens ack
[18:32] cremes l8r
[18:32] pieter_hintjens if you have specific questions you'd like me to pontificate on, send me the URLs
[18:32] cremes ack :)
[18:35] sigmonsays does zeroMQ implement AMQP?
[18:35] DasIch sigmonsays: no
[18:37] sigmonsays [newb] is there a doc that describes what protocols it uses? I mean i'm sure the same concepts exist that AMQP implements..
[18:41] pieter_hintjens sigmonsays: rfc.zeromq.org but it's out of date
[18:42] pieter_hintjens this is one thing i have wanted to make for a while, a correct spec of the protocol
[18:42] pieter_hintjens but it is very different to AMQP
[18:42] pieter_hintjens AMQP has stupid clients talking to a smart broker
[18:43] pieter_hintjens 0MQ has smart clients talking to each other
[18:43] pieter_hintjens it means the wire level protocol can be a lot simpler
[18:50] zedas jond: i do. it uses the coroutines and zmq_poll
[18:52] sigmonsays So, if persistence were required, would that be something you'd implement on the sending side? How does the "broker" play a role if clients talk directly to each other? I'm having a hard time finding a doc that demonstrates a traditional setup
[18:53] pieter_hintjens sigmonsays: see if this helps at all: http://www.zeromq.org/whitepapers:switch-or-broker
[18:55] sigmonsays Thanks, will do
[18:55] sustrik in short, there are so called "devices" which are basically "mini-brokers"; it you need a full fledged broker, there's a project that allows you to plug rabbitmq into 0MQ network
[18:56] sigmonsays Yah, I was scanning the amq C API to see what it implements. Quite sexy API =P
[19:02] sigmonsays Is SCTP a supported transport?
[19:03] sustrik it would be nice if it was, but no, it isn't yet
[19:04] sustrik actually, it used to be implemented in old versions of 0MQ but people weren't much interested :|
[19:05] sustrik it seems there's still some kind of fear of using anything other than TCP
[19:05] pieter_hintjens I proposed to the IETF that they use SCTP as the basis for WebSockets
[19:05] pieter_hintjens the response was interesting
[19:06] pieter_hintjens something along the lines of "it's not present on most boxes and therefore will never be used by anyone at all"
[19:06] sustrik hm, right, it not on win boxes
[19:06] pieter_hintjens yes indeed
[19:06] pieter_hintjens end of story, pretty much
[19:06] Zao Nor on most FreeBSD boxen, as it conflicts with things like VIMAGE, if you're insane enough to want that.
[19:07] pieter_hintjens If anyone wants to comment on http://www.reddit.com/r/programming/comments/d9jrm/zeromq_networking_stack_sending_millions_of_small/#c0ylyla
[19:07] pieter_hintjens i can't login for some weird reason
[19:09] sustrik hm, win64 comment
[19:09] sustrik does anyone have a win64 installation here?
[19:09] sustrik it should be easy to fix
[19:09] sustrik if it doesn't work
[19:10] pieter_hintjens sorry, my virtual box is 32-bit...
[19:12] jond ph: the fan-in question was asked by twcc on irc about 20:00-21:00 last night. they wanted multiple publisher to single server.
[19:13] pieter_hintjens jond: do you recall the use case?
[19:13] pieter_hintjens "anyone have a drill for me?"
[19:14] pieter_hintjens "why?"
[19:14] pieter_hintjens "i have a headache that won't go away"
[19:14] jond ph: shall i mail the irc, I didnt answer as I wasnt around; steve-o was
[19:14] Zao sustrik: Does he refer to PGM being hard/impossible to build?
[19:14] jond ph: you considering trepanation then?
[19:14] pieter_hintjens well, exactly
[19:14] pieter_hintjens before answering people's questions about "how to do X", ask them "why"...
[19:14] sustrik zao: who are you referring to?
[19:15] pieter_hintjens i can see the irc log, will check
[19:15] Zao sustrik: I thought that by "win64" comment you referred to the lad talking about 64-bit windows in the reddit thread?
[19:16] pieter_hintjens jond: bah, simple PUSH->PULL pattern would do it IMO
[19:16] sustrik ah, yes, maybe he was referring to pgm rather than 0mq as such
[19:16] sustrik i don't have win32 box, cannot check
[19:16] sustrik win64*
[19:16] jond ph: IIRC correctly he wanted intermittent/transient clients sending no-ack-needed messages to single server. it was pretty vague
[19:16] Zao sustrik: I've got a 64-bit Windows box, but I don't trust ømq on it at all.
[19:17] sustrik Zao: why so?
[19:17] sustrik does it fail?
[19:17] pieter_hintjens jond: i just read it twice, he wants a push/pull fanin afaics
[19:17] pieter_hintjens it's covered in chapter 1 of the guide even
[19:18] pieter_hintjens should be a standard answer to people who ask for help
[19:18] pieter_hintjens "if you've not read ch1 & ch2 of the guide, do so and then come back"
[19:18] Zao sustrik: I set up a PUB and bind. I set up another thread with a SUB and connect. I subscribe to all topics. I then send lots of short messages which the SUB gets, until after a few dozen, it just blocks in zmq::poll.
[19:18] Zao sustrik: I've got to boil it down to a test case before I report it on the issue tracker.
[19:18] Zao As well as testing it with another compiler.
[19:18] sustrik Zao: great, thanks
[19:19] Zao This is 32-bit VC10, by the way.
[19:19] sustrik ack
[19:21] jond ph: yes, but you can also do a sub that binds and a pub that connects. There's more than one way at present, which is good.
[19:21] sustrik ph: centralised logging scanrio?
[19:25] sigmonsays Is the concept of headers up to the user to implement or does something like "routing-key" exist? ideally I wouldn't want to subscribe based on the serialized data, but the headers accompanying it.
[19:26] sigmonsays ie, ZMQ_SUBSCRIBE example from the user guide
[19:27] Zao As far as I understand it, the topic is the prefix part of the data.
[19:28] sigmonsays Well I wouldn't want to unpack a serialized message to inspect it is where i'm getting
[19:28] sigmonsays I suspect I would prefix the compress data with HTTP like headers, but i thought i'm missing something..
[19:29] sustrik you can place your topic into one message part, data to another
[19:29] sustrik the matching is always done on the first message part
[19:29] sigmonsays that's what I was missing. Thanks
[19:31] jond sustrik: i think logging would be scenario for that use of pub/sub
[19:32] sustrik jond: that's what ph asked for, no?
[19:33] sigmonsays Is there anything to facilitate message persistence? I am thinking of a WAN setup where aggregation points exist in each pop. Is that where a queue would fit in?
[19:34] DasIch fyi logbook (a python library for logging) does now provide support for a zeromq handler/subscriber
[19:34] DasIch http://packages.python.org/Logbook/api/queues.html#zeromq
[19:35] sustrik you want messages just to be offloaded to disk, or do you want to survive crash/shutdown?
[19:36] sigmonsays sustrik, good question, You mean HA replication versus disk persistence? I just want the message to be delivered and not lost/corrupted/etc.
[19:37] sustrik i mean swapping vs. storage
[19:37] sigmonsays Well swap dies when the box does. So that's not ideal
[19:38] sustrik then you have to put something that persists messages into the network
[19:38] jond sustrik: i think so. you could probably do a really nice demo with tokyo tyrant which is the reverse index lookup thing of tokyo cabinet. especially if log messages are text
[19:39] sustrik i've laready meantioned that there's a project that allows you to use RabbitMQ broker as a node in 0mq network
[19:39] pieter_hintjens jond: sorry, was writing a post on reddit
[19:39] pieter_hintjens sustrik: centralized logging... yes, perhaps
[19:39] pieter_hintjens why is that not a push/pull then?
[19:40] pieter_hintjens i mean, pubsub is a natural pattern with subscribers that select data
[19:40] pieter_hintjens centralized logging is a sink pattern
[19:40] pieter_hintjens i don't like using knives as screwdrivers, though it works
[19:40] sustrik think of the case you would add another application listening to log feed
[19:40] sigmonsays sustrik, I see, rabbitmq broker seems like overkill for persistence. I could see using tyrant/cabinet -- Was wondering if any facilities were already provided. Still newb here.
[19:40] sustrik would you want the logs to be load balanced?
[19:41] sustrik i don't think so
[19:41] pieter_hintjens sustrik: then every single app needs to connect to TWO sinks
[19:41] pieter_hintjens that's insane
[19:41] pieter_hintjens or you use a broker/forwarder
[19:41] sustrik but not streamer
[19:41] pieter_hintjens but then you don't connect pubs to subs
[19:41] pieter_hintjens no, not streamer
[19:41] pieter_hintjens broker, in that case
[19:41] sustrik => it's pub/sub
[19:42] pieter_hintjens why not push=>pull?
[19:42] sustrik because push/pull load balances
[19:42] sustrik rather than distributes
[19:42] pieter_hintjens yeah, if you want multiple sinks
[19:42] sustrik right
[19:42] pieter_hintjens you'd do a push-pull to the broker and then pub-sub to all sinks
[19:42] pieter_hintjens still not a use case for pub->sub connections
[19:42] sustrik you can do that, but why?
[19:43] pieter_hintjens because it's a sink
[19:43] pieter_hintjens not a subscriber
[19:43] pieter_hintjens ... message queuing semantics work better
[19:43] pieter_hintjens i don't want to lose log messages if broker isn't there
[19:43] pieter_hintjens i don't want subscriptions
[19:43] pieter_hintjens i want everything from all my upstream nodes
[19:43] pieter_hintjens it's a sink
[19:43] pieter_hintjens pubsub is just not accurate...
[19:44] pieter_hintjens we do IMO need a new socket type
[19:44] pieter_hintjens which is the bus
[19:44] sustrik shrug, it depends on you, if you believe that pipelining is the right pattern for message logs go for it
[19:44] pieter_hintjens ... as we discussed before wrt error messages internally
[19:44] pieter_hintjens it's not the right pattern, it's part of the pattern
[19:44] sustrik pub/sub is a bus
[19:44] jond ph+sustrik: what if we said 'audit' rather than logging. centralised audit of all messages?
[19:45] pieter_hintjens audit, yes, nothing can be lost
[19:45] pieter_hintjens pubsub is a stream with no guaranteed start
[19:45] sustrik then yes, you want something reliable, like req/rep or pipeline
[19:45] sustrik that's what most logs are
[19:45] pieter_hintjens yes
[19:45] sustrik audit is different
[19:46] pieter_hintjens logs are audits
[19:46] Zao Oh joy. Even more fun behaviour sneaks up. zmq::poll(NULL, 0, t) asserts as winsock select craps itself on maxfd=~0.
[19:46] pieter_hintjens losing a single message can be fatal
[19:46] pieter_hintjens Zao: FD_SETSIZE?
[19:47] pieter_hintjens what is ~0...?
[19:47] sustrik nope, zero-sized pollset
[19:47] sustrik win32 select obviously don't handle it well
[19:47] Zao pieter_hintjens: maxfd is initialized to zmq::retired_fd and never gets assigned to anything else, as itemcount is 0.
[19:47] sustrik Zao: can you report it please?
[19:47] Zao winsock whines about invalid parameter, and the only one looking shady is the maxfd.
[19:48] Zao sustrik: Yeah.
[19:48] sustrik thanks
[19:51] pieter_hintjens it looks to me that logging is a good usecase for a broker in fact
[19:52] pieter_hintjens i'll add this to the list of examples for the guide
[19:55] pieter_hintjens sustrik: would it be fair to generalize that any N-to-N architecture needs a device in the middle?
[19:55] sustrik definitely
[19:55] pieter_hintjens except multicast, perhaps
[19:55] pieter_hintjens ok
[19:56] sustrik even with multicast you need a network switch in the middle
[19:56] pieter_hintjens yes!
[19:56] sustrik which is actaully a HW forwarder device
[19:56] pieter_hintjens this is worth stating explicitly, it's not clear initially why we need devices
[19:56] pieter_hintjens i shall do this
[19:56] sustrik ok
[19:57] Zao Interesting. My testcase code doesn't break.
[19:57] Zao That's annoying :D
[19:57] sustrik you mean the poll bug?
[19:58] sustrik it's obvious what's going on there, no need for test case
[19:58] sustrik just report it
[20:00] pieter_hintjens cremes: ok, here's my reply on Reddit: http://www.reddit.com/r/programming/comments/d9jrm/zeromq_networking_stack_sending_millions_of_small/c0ymlox
[20:00] Zao sustrik: No, my other bug where poll on a SUB socket blocks even though the PUB peer keeps spamming it.
[20:00] Zao sustrik: The one I'm trying to drum up a test case for, which doesn't depend on D3D11.
[20:01] sustrik ah
[20:02] pieter_hintjens sustrik: you realize we're totally screwed?
[20:02] sustrik why so?
[20:02] pieter_hintjens lol :-)
[20:02] pieter_hintjens 10pm on a Sunday night and this is the most fun place to be
[20:03] sustrik good god
[20:03] pieter_hintjens yeah
[20:03] pieter_hintjens and 0MQ is still under the radar...
[20:03] sustrik i've been at a party, but returned to where fun is
[20:03] pieter_hintjens splutter...!
[20:04] sustrik :)
[20:04] pieter_hintjens btw i added two concepts in the latest guide
[20:05] pieter_hintjens 1. "0MQ string" -> length-delimited string with no trailing null
[20:05] pieter_hintjens all the examples now correctly read/write strings in that format when they use strings
[20:06] sustrik ok
[20:08] Zao Hrm. Docs say that it should completely ignore the maxfd parameter.
[20:12] sustrik Zao: i think it does
[20:12] sustrik Win32 fd_set is not a real fd_set
[20:12] sustrik instead it's a vector of SOCKETs
[20:12] sustrik it's vector of size 0 which causes trouble imo
[20:18] sigmonsays How does using (e)pgm allows multicast to be used reliably?
[20:19] sustrik check RFC3208
[20:19] sustrik there's a resend mechanism
[20:19] sigmonsays rgr