Friday March 11, 2011

[Time] NameMessage
[06:38] sena hi I have a bit of cleanup problem when using zeromq.
[06:38] sena i am using the c++ classes for coding
[06:39] sena when deleting the object windows gives an run time error which says that the application was shutdown in an unusual way
[06:40] sena before deleting the objects i am deleting the sockets and then contexts
[06:40] phaplt i am newbee zmq
[06:40] sena the delete is fine but when trying to delete the encapsulating class the program gives the error
[06:41] sena any suggestions
[06:41] phaplt anybody help me tutorial
[06:41] sena The version is 2.1 rc2
[06:41] sena all the sockets are using ZMQ_PAIR
[06:42] sena this is all inter thread communication
[06:53] guido_g sena: try to give a minimal working code example and the complete error message, otherwise it's not possible to help you
[06:54] guido_g sena: put both on a paste-bin like
[08:35] sena got the problem solved
[08:49] pieterh g'morning folks
[08:51] guido_g mornin
[09:00] pieterh hi guido_g!
[09:05] sena in PAIR socket pattern can one socket pair with many sockets
[09:18] Guthur sena: From the man: A socket of type ZMQ_PAIR can only be connected to a single peer at any one time. No message routing or filtering is performed on messages sent over a ZMQ_PAIR socket.
[09:18] Guthur
[09:23] sena thanx for clarifying.
[09:24] Guthur you're welcome
[09:49] Guthur pieterh: Should the EINTR situation be documented?
[09:49] Guthur or is the mailing list message enough
[09:49] pieterh Guthur: certainly in the C# binding page...
[09:49] pieterh the mailing list message was clear
[09:49] Guthur yeah, it's not specific to C# and Mono though
[09:49] pieterh indeed...
[09:50] Guthur just more apparent due to the runtimes use of signals
[09:50] pieterh I'm still somewhat... surprised... that Linux poll() seems broken this way
[09:50] pieterh i.e. any user signaling at all will cause EINTR
[09:51] Guthur yeah, it's not nice
[09:51] pieterh there is perhaps a workaround
[09:51] pieterh there are two issues. first, trapping a real interrupt, i.e. SIGINT (Ctrl-C)
[09:52] pieterh second, continuing with the poll if it's not a real interrupt
[09:52] Guthur yep
[09:52] pieterh for the first, a normal signal handler will do it, I've an example in zhelpers.h, at the end
[09:52] pieterh for the second, the problem is calculating the time properly so the remaining poll is not longer than expected
[09:53] Guthur hehe, that was just on the tip of my tongue
[09:53] pieterh I believe there is an example of code that does this, since zmq_poll used to have the same issue of exiting randomly
[09:53] pieterh it's on the wiki somewhere, afair, let me check
[09:53] pieterh heh
[09:53] pieterh
[09:55] Guthur I could work that into clrzmq2 at the very least
[09:56] Guthur cheers for the suggestion pieterh
[09:56] pieterh np :-)
[09:56] Guthur this has been a nice adventure, hehe
[09:56] Guthur it would be good to end it with some sort of solution
[09:57] pieterh it's great that we have the binding layer where we can fix up this kind of stuff
[09:58] Guthur yeah I'm happy doing that, my worst case scenario was having to leave it for the user to deal with
[09:59] Guthur would make app code necessarily complex imo
[10:13] Guthur unnecessarily*
[10:16] guido_g unbelievable, c++ socket_t miss a close method
[10:17] guido_g so you can't close a socket in c++
[10:20] pieterh srsly? wow
[10:21] pieterh guido_g: can you provide a patch for that?
[10:21] guido_g on the way
[10:21] guido_g first issue
[10:21] guido_g then ranting
[10:21] guido_g then patch
[10:21] pieterh excellent :-) I'll make sure it gets into 2.1 stable
[10:21] guido_g stick to the process :)
[10:21] pieterh process is everything
[10:21] Guthur guido_g: I thought you were a python hack
[10:22] guido_g Guthur: sure
[10:22] guido_g re-learning c++ atm
[10:23] Guthur you have my utmost sympathies
[10:24] guido_g it's wanted in the industry, so i've close to no choice :/
[10:24] Guthur crumbs, which industry?
[10:24] Guthur broadcast?
[10:24] Guthur media*
[10:27] guido_g it consulting in generall, i'm only little conslutant ,)
[10:28] guido_g pieterh: will a simple pull req on zeromq2/master do?
[10:29] pieterh guido_g: nope, that's the one thing that won't work
[10:29] pieterh sustrik is not accepting pull requests
[10:29] pieterh (yet)
[10:29] guido_g *sigh*
[10:29] pieterh feel free to lobby him to do so, I've tried and failed (hi sustrik!)
[10:30] pieterh simplest is to send a signed patch to zeromq-dev
[10:30] guido_g forgot how to do this...
[10:30] pieterh then I can apply that to zeromq2-1/master (my git for 2.1 releases) and sustrik can do the same for zeromq2/master (source development git)
[10:31] pieterh easy
[10:31] guido_g so reading
[10:31] pieterh yeah, I don't keep it in memory cache either...
[10:31] pieterh i assume this fix can also go into 2.0 stable?
[10:31] guido_g yes, it's extremly small
[10:32] pieterh lovely lovely
[10:32] Guthur I'm sure there is benefits to going with the patch strategy
[10:32] pieterh not really
[10:33] pieterh it's better than nothing but it's weak compared to pull requests
[10:34] pieterh when all our gits are on github there is really no excuse for NOT doing pull requests except "not familiar with it, won't use it, don't trust github". Sigh.
[10:46] guido_g hope that goes through
[10:47] guido_g <- for review
[10:48] pieterh guido_g: this affects just the C++ API?
[10:48] guido_g yes
[10:48] guido_g in zmq.hpp, nothing else
[10:48] pieterh you have a test case?
[10:48] guido_g you're joking?
[10:48] pieterh ok, my question is 'what's your confidence level that this patch is correct?'
[10:49] pieterh assume I don't know the code
[10:50] guido_g this is mostly stolen from the existing destructor code and a the error reporting of other methods.
[10:51] guido_g so, given that all the other mthods are tested well... *cough*
[10:51] guido_g i sure that the patch is ok
[10:51] guido_g btw, will use it myself in a few seconds :)
[10:52] pieterh ok, I don't want to be ungrateful, but since I'd like to put this into two stable version (2.0, 2.1), could you please confirm that it actually works by running a before/after test?
[10:52] pieterh *versions
[10:52] guido_g i'm on my to compile w/ and test w/ the patch
[10:52] guido_g just a few seconds...
[10:52] pieterh ack
[10:53] guido_g oh
[10:53] guido_g this is master...
[10:53] guido_g are thre known issues?
[10:55] pieterh what do you mean?
[10:56] guido_g i'm using zeromq2-1 as development env
[10:56] guido_g normally
[10:56] pieterh sure
[10:57] pieterh I've already pushed your patch to the 2-1 master, at
[10:58] guido_g ok, the close works
[10:58] guido_g but...
[10:59] guido_g the destructor doesn't like it.
[10:59] guido_g next patch
[10:59] pieterh bah, pull requests only work between forks of the same repository... :-/
[11:00] pieterh cumulative patches, guido_g, or one clean one with all changes?
[11:01] pieterh I'll go undo that last patch then
[11:01] guido_g no
[11:01] lestrrat you don't really need a pullreq to do inter-repo merges.
[11:01] lestrrat in git.
[11:01] guido_g i'll send an addition
[11:01] guido_g +inal one
[11:01] pieterh lestrrat: I've used fetching + cherry-picking
[11:01] pieterh is that what you mean?
[11:02] pieterh guido_g: you'll want to submit a single clean patch to the list
[11:02] pieterh for me, fine to patch the patch
[11:03] lestrrat so if guido wants to you to pull what he's got, 1) guido fetch+merge from main repo master, 2) perterh fetches and merges from guido's repo
[11:03] lestrrat this is by far the cleanest way to merge stuff
[11:03] lestrrat cherry-picking is great if you have a really complex patch application, but generally you just want to merge
[11:03] lestrrat just make sure merging to the mainline is done cleanly
[11:03] lestrrat (i.e., fast-forward only)
[11:04] pieterh lestrrat: hang on, you overloaded my git jargon buffer... :-)
[11:04] guido_g ok
[11:04] guido_g unfortunately i send the first one to the list
[11:04] pieterh guido_g: let's try what lestrrat is describing here...
[11:04] guido_g *sent
[11:04] pieterh guido_g: just email again to cancel it...
[11:05] pieterh lestrrat: can you please walk us through this with actual git commands? Afterwards I'll document it, useful stuff
[11:05] Guthur pieterh: does patches not become more trackable
[11:05] lestrrat sure, but let me rephrase what I was saying
[11:05] Guthur making it easier to review and possibly back out
[11:05] pieterh Guthur: on an email list? up to a point, yes
[11:06] lestrrat you basically don't want to make conflicts in master. you want the cleanest possible git merge, which is "fast-forward"
[11:06] pieterh ok
[11:06] lestrrat to do this, the merge target ( guido's ) need to be aligned with the mater's history
[11:06] lestrrat that can only be done by hand -- and guido needs to do this by pulling from master
[11:07] pieterh lestrrat: hang on, let me explain the context a little
[11:07] lestrrat sure
[11:08] pieterh we have three gits, a 2-2 master, a 2-1 master, and a fork of the 2-1 master which guido_g is working on
[11:08] guido_g going to make a clean patch now
[11:08] pieterh we want to get changes from guido_g's git into the two other gits
[11:09] pieterh the 2-2 master and 2-1 master have diverged some time ago
[11:09] lestrrat k
[11:09] pieterh 2-1 cherry-picks specific commits from 2-2, over time
[11:09] pieterh we also have a 2-0 master
[11:09] pieterh :-) that's our arrangement
[11:09] pieterh we're now looking for a simple process everyone can use
[11:10] lestrrat between 2-2 and 2-1 , you'd need to cherry-pick
[11:10] pieterh right
[11:10] lestrrat between 2-1 and guido_g, you shouldn't
[11:10] pieterh we'd have made 2-1 and 2-0 *forks* except github doesn't allow that within one username
[11:11] pieterh ok, so guido_g first pulls from 2-1 master, makes sure his history is correct
[11:11] lestrrat well
[11:11] lestrrat forking doesn't change anything in this context
[11:11] pieterh ok'
[11:12] lestrrat if you want to merge 2-1 and 2-0 (or whatever else), all you really need to do is to let your local git repo know about these repos
[11:12] lestrrat using "git remote"
[11:12] lestrrat and then, git merge would just allow you to merge these.
[11:12] lestrrat (no pullreqs required)
[11:12] pieterh right
[11:12] lestrrat you merge, tweak, and then "git push 2-1 mybranch" or whatever.
[11:13] pieterh the advantage of pullreqs is that they are like issues, trackable, discussion, etc.
[11:13] lestrrat yeah, that's understood, but if somebody wants to make changes to 2-1 and 2-0, you just going to have to
[11:14] lestrrat 1) fork 2-1 2) make changes and send pullreq to 2-1 3) do the above git remove dance, and merge stuff to 2-0 3) push to github 2-0
[11:14] pieterh yeah, and forking isn't an option, so pull reqs are basically out
[11:15] pieterh ok, fast-forward merging, makes sense
[11:15] pieterh thanks, I'll do my reading and make sure I understand that
[11:15] Guthur we have just had the craziest enquiry from one of our clients, a rather large internet based firm, their legal team fears that because of the OCaml and Ruby code generators in the Thrift library their code maybe infected by GPL
[11:15] Guthur we don't even use these code generators, doh
[11:15] Guthur I think they need a new legal team
[11:16] lestrrat on a different project with about 10 devs, they just follow that rule: "all merges to master MUST be fast-forwards (to make sure they apply cleanly)" "Otherwise, create your own branch and do whatever you want to do. When you're done, let us know the name of the branch so we can merge to master"
[11:17] pieterh guido_g: ok, waiting for your new patch
[11:18] lestrrat well, good luck with the merges :)
[11:18] pieterh :-) thanks
[11:19] pieterh lestrrat: good luck, I hope things aren't too bad
[11:19] lestrrat things around my home is sane enough that I can blab about git merges :) but thanks anyways
[11:23] guido_g < -the new and better tested one
[11:24] pieterh "tested", that has a nice ring about it
[11:25] pieterh guido_g: ok, thanks, applying that now to 2-0 and 2-1
[11:25] guido_g tested means compiled and used in a program w/o problems
[11:28] guido_g and now for the ml again
[11:30] pieterh ok, applied to 2-0 and 2-1
[11:30] guido_g and sent to the ml
[11:30] guido_g i should really become more patient
[11:31] pieterh nah, we release maintainers just have to make sure to ask the right questions
[11:33] guido_g btw, why did you disable multicast loop in 2.1?
[11:33] pieterh Steve-o's contribution
[11:35] guido_g should be mentioned at a prominent place in the release notes, because it will break single-box testing
[11:35] pieterh there was iirc some discussion of this on the list, let me check...
[11:38] pieterh there is some discussion about a week ago but tbh I'm not following it totally
[11:39] guido_g yes, but everyone is reading the ml or remembers all topics going on there
[11:39] guido_g *but *not*
[11:39] pieterh yes, I meant just for us, now, to understand this
[11:39] pieterh afaics Steve says multicast loop doesn't work on Linux and lo is lossy
[11:40] guido_g going to read the patch...
[11:44] guido_g seems like the socket optoin for multicast loopback is turned off, nothing to w/ the lo interface
[11:45] pieterh I'd suggest asking Steve, on the ml, where he posted the patch, what the rationale is
[11:46] guido_g ok
[11:51] guido_g time for a break (
[11:51] pieterh :-)
[12:12] Eruquen Just one quick question: "When sending messages a ZMQ_XREP socket shall remove the first part of the message [..]". Is that my job or is it what XREP does automatically?
[12:14] pieterh Eruquen: this is how the XREP / ROUTER socket works, read Ch3 of the guide for extensive explanation
[12:14] pieterh the socket gives you an extra frame on recv and expects an extra frame on send
[12:14] pieterh that frame has the identity of the sender, and the recipient, respectively
[12:15] Eruquen great, thank you.. I think that was the only piece of the puzzle I was missing
[13:10] guido_g re
[16:08] Guthur has anyone ever looked at using ZeroMQ as the transport for Thrift RPC stuff?
[16:33] Guthur guido_g: It was more the RPC stuff
[16:33] Guthur Thrift seems to have succumb to the we will do everything project syndrome
[16:34] Guthur It even offers transport and server solutions
[16:34] Guthur guido_g: sorry I should have read closer
[16:35] Guthur it does RPC
[16:35] Guthur msgpack
[16:35] guido_g i know :)
[16:35] guido_g and can read thrift idl
[16:35] guido_g at least they claim that it can
[16:54] guido_g at least, it compiles :)
[17:08] Guthur guido_g: is there more marketing than substance
[17:08] jobytaffey Hi, I'm having a problem with zeromq-2.1.0. I have a program in C, using libev to have one ZMQ REP socket and stdin. I'm compiling against libefence for malloc checking and I'm getting ocassional crashes. But, when I remove libefence I can't reproduce the problem. Could it be a problem with efence's malloc wrappers not being thread safe? Or a 0mq bug?
[17:09] guido_g Guthur: yes, it's all a little shallow
[17:09] Guthur the 4x faster than protocol buffers seems hard to believe
[17:09] Guthur in all but the most contrived test
[17:11] guido_g otoh, i like the dynamic typing feature
[17:17] pieterh jobytaffey: could well be a problem with efence, yes
[17:17] pieterh I'd suggest valgrind instead
[17:18] jobytaffey Thanks, I'll try it.
[17:23] pieterh jobytaffey:
[17:24] pieterh all, I've rewritten the contribution tutorial, it was a bit messy
[17:24] jobytaffey Thanks again.
[17:24] pieterh np
[17:41] cremes can someone put the link to the 0mq irc logs up in the channel topic please?
[17:41] cremes i always forget what it is...
[17:43] pieterh cremes: it's travlr who keeps it, afair, perhaps the link should go on this page
[17:43] pieterh we don't seem to have a channel admin
[17:44] cremes indeed, you are correct
[17:45] cremes i'll add a link to travlr's github page to the wiki
[17:48] cremes oh, it's already there
[17:48] pieterh :-)
[17:48] cremes i'll make it more prominent
[17:48] pieterh I didn't even see it...
[17:49] cremes refresh and look
[17:49] cremes it's slightly easier to find
[17:50] pieterh still seems very bland, let me try...
[17:52] pieterh try now, cremes
[17:52] cremes ooh, even better
[17:53] pieterh someday a student of technology history will read these logs and gaze in wonder...
[17:53] pieterh "how did they actually *do* anything, with all that inane chatter...?"
[17:55] michelp now that I know they exist i'll be reading them myself ;)
[17:55] cremes s/inane/insane/
[17:56] michelp BTW freenode policy asks that you inform all channel users of logging in a topic or autojoin notice of some kind.
[17:56] cremes though both fit
[17:56] pieterh cremes: you take insane, I'm better with inane
[17:56] pieterh michelp: true, but we seem to have lost our channel admin somewhere in 2009
[17:57] pieterh michelp: I guess stating this on the IRC page on the wiki is almost good enough
[17:57] michelp ah i see. i bet there are some freenode peoples who can help you with that
[17:58] michelp yeah, as long as you say it somewhere it's better than nowhere ;)
[17:58] michelp is the topic locked down? in other channels I am in anyone can change it
[17:59] michelp yeah :(
[17:59] pieterh op
[17:59] pieterh nope, that didn't work :-)
[18:00] michelp i'll ask in #freenode
[18:00] michelp i bet we can either get the topic unlocked or get someone op'ed
[18:00] michelp or both ;)
[18:01] pieterh unlocked would be simplest, we don't need an op otherwise
[18:04] michelp well there's no staff currently in #freenode, i'll try again in a bit
[18:05] pieterh yeah, no hurry
[18:05] pieterh actually I wanted the topic to say, "Have you read the Guide yet?"
[18:06] michelp i've been reading through the docs myself the past couple of days, 0mq is pretty fascinating
[18:06] michelp that's why i jumped in here was to see what was going on
[18:06] pieterh it's pretty fascinating, indeed... :-)
[18:06] pieterh have you read the Guide yet?
[18:07] michelp we use amqp currently where i work and personally I'm pretty unhappy with it
[18:07] pieterh amqp/0-9-1?
[18:07] michelp skimmed it, i've started with the docs comparing amqp to 0mq mostly to try and get my head around it
[18:09] michelp i'm not sure which protocol version, we use rabbitmq. i didn't build that part of the system, i just inject messages into it and pray they get somewhere
[18:09] pieterh 0-9-1, then
[18:09] michelp i may end up writing the bit that replaces it ;)
[18:10] pieterh it's a good implementation but the protocol is clunkier than it should be
[18:11] michelp are there centralized brokers written on top of 0mq? the docs say that it can be done as one of the many possible patterns but some digging around i didn't find any. preferably one written in python which is our primary shop language
[18:11] michelp i didn't dig to hard or necessarily in the right direction
[18:12] pieterh so... in fact we only recently finished our first protocol spec able to turn into real brokers and clients
[18:12] pieterh
[18:13] pieterh there is a small implementation in C, and one in Python by guido_g
[18:13] michelp ah nice
[18:13] michelp i'll check that out
[18:13] pieterh depending on the kind of messaging you're doing, you may want brokers (of various types), or not
[18:14] michelp we might be able to give it some production time, we have been kicking around the idea of having a "shadow" message system that runs alongside rabbit so we can evaluate other technologies
[18:14] michelp we push a few hundred thousand message through per day so it would be a good medium-scale test
[18:14] pieterh 0MQ architects end up making their own mini brokers, highly customized, for the places that need them
[18:14] pieterh this is what 0MQ is really for, a toolkit to make the architectures you need
[18:15] pieterh reliable messages?
[18:15] michelp reliable in the sense that they can't be dropped?
[18:15] pieterh have to survive crashes etc.
[18:15] michelp yeah, they are critical to our business flows
[18:15] michelp lots of our backend is async
[18:16] pieterh so, read the Guide and especially Ch4
[18:16] michelp awesome, thanks for the pointers, i'll check them out this weekend
[18:16] pieterh np
[18:17] michelp i'm sure i'll have some questions so hopefully i don't annoy you too much until it all sinks in my head
[18:17] kdj I've found the examples in the guide really helpful
[18:18] pieterh ideally, read the Guide slowly over a week, try every example, and it'll become clear
[18:18] pieterh kdj: thanks :-)
[18:26] michelp kdj, oh hey Kyle ;) not at pycon?
[18:26] kdj Heh, I wish
[18:26] kdj Are you there?
[18:26] michelp kdj, not that I've seen you in here I'm going to have to bug you about giving a 0mq talk at the next pdxpython meetings
[18:27] michelp nah... i've been to enough pycons. i always end up just hanging out with jaded zope programmers from the good old days and drinking too much whiskey
[18:27] kdj pieterh: Thanks for putting together the guide. :)
[18:27] kdj michelp: Haha
[18:28] pieterh kdj: my pleasure, this will hopefully become a printed book
[18:28] michelp kdj, what do you guys use 0mq for?
[18:29] kdj michelp: A couple pretty simple work broker and task status implementations
[18:30] michelp using python?
[18:30] kdj Python and C#
[18:31] michelp how long did you think you could get away with not giving a presentation at pdxpython on that? ;)
[18:32] kdj Long enough to actually have something worth presenting. :)
[18:32] pieterh Ian Barber raised the 0MQ presentation stakes somewhat
[18:33] michelp is there a video?
[18:34] michelp looks like he's talking at pycon
[18:35] kdj Here are some slides, it looks like?
[18:36] michelp ah zed is talking too
[18:36] michelp
[18:37] kdj Nice
[18:38] michelp now i kinda want to go to pycon just to see that one talk ;)
[18:40] kdj Gah. Yes. How long does it usually take for them to get the videos up? :)
[18:40] michelp days, weeks, never
[18:40] kdj Never is a long time.
[18:41] kdj I hope those presentations happen to get put up
[18:51] michelp so it looks like dermoth sustrik and mato are channel admins
[18:51] michelp according to chanserv
[18:53] michelp so if dermoth|home can op someone else we can get the channel topic unlocked
[19:00] michelp pieterh, so a freenode staffer said if you follow this process they can help unlock the channel
[19:01] michelp the process is verified by phone, apparently
[19:01] pieterh ok, will take care of it
[19:01] michelp here is a blog post about it
[19:01] michelp oops
[19:01] michelp
[19:03] michelp the staffer wants me to tell him when it's sent, i can do that or you can contact him directly
[19:05] michelp pieterh, his nick is 'niko' and he says you can contact him directly when it's filed
[19:05] pieterh ok, will do...
[19:05] pieterh thanks a lot michelp
[19:05] michelp yeah no sweat
[19:05] michelp it's the least I can do until i crank out some 0mq using code :)
[19:07] pieterh I'm randomly electing myself "Chair" of the 0MQ community so I can tell them what my role is here
[19:08] pieterh Anyone wants to fight me for chair, please wait until the music stops
[19:09] pieterh michelp: form is submitted, why not ping niko, he'll be happy to hear from you
[19:09] michelp sure thing
[19:10] michelp for future reference the syntax for a private message is "/msg <nick> blah blah blah..."
[19:10] pieterh I'm so happy in my ignorance...
[19:10] michelp irc is the original distributed message system ;)
[19:11] pieterh indeed
[19:15] guido_g pieterh: is it ok to call all the message frames between empty frames a message segment?
[19:16] pieterh 'segment' has no defined meaning, nor do two empty frames have any semantics that I'm aware of
[19:16] pieterh I tend to stick to "envelope" vs. "body"
[19:17] pieterh what's the context?
[19:17] guido_g but we make heavy use of empty frame separated multipart messages
[19:17] guido_g a multipart message class
[19:17] pieterh 'we' is your project, right?
[19:17] pieterh then 'segment' seems fine
[19:17] guido_g we as in mdp protocol
[19:18] guido_g ok
[19:18] pieterh ah, hang on, nope in that case
[19:18] guido_g huh?
[19:18] pieterh we don't, in MDP, give any special meaning to bunches of frames separated by empty frames
[19:18] pieterh do we?
[19:19] pieterh if you add such meaning in your implementation, it can break arbitrarily when we modify the protocol
[19:19] guido_g it's not about the meaning, it's just for the fact that there are logical groupings of frames
[19:19] pieterh the only two cases I see are in REQUEST and REPLY
[19:19] guido_g in mdp, yes
[19:20] guido_g but i'm on a general multipart message class
[19:20] pieterh and there, the first empty part is... meaning free
[19:20] pieterh in MDP what we have are 'envelope' and 'body'
[19:20] guido_g so i came up with the idea of having a method that helps on getting these groups
[19:20] pieterh personally I'd not invent concepts that don't come from actual use
[19:21] pieterh weird semantics that don't quite work
[19:21] guido_g can't follow you
[19:21] pieterh well, in all the examples I've made so far, this notion of groups of frames doesn't occur once
[19:22] pieterh we use frames in MDP because we're too lazy to do encoding
[19:22] pieterh the real semantics, the meaning, in MDP is a stack
[19:22] pieterh the body is the last set of frames
[19:22] pieterh the envelope comes before that
[19:22] pieterh both may contain empty frames
[19:23] pieterh 0MQ REP socket has a similar notion, of envelope ending in empty frame, followed by body
[19:23] pieterh a stack
[19:23] pieterh do I make sense?
[19:24] guido_g nevertheless an empty frame is a very easy and already implemented method of doing this logical grouping
[19:24] pieterh two problems
[19:25] pieterh a. "groups of frames" is not a concept I've seen actually used or useful
[19:25] Bloudermilk Hi all. I was hoping someone could voice their opinion/experience on using 0mq with media streaming. My initial estimate is that it adds significant overhead, but I'm not sure
[19:25] pieterh b. when you could claim "groups" in real cases, they can contain empty frames
[19:25] pieterh Bloudermilk: why would it add overhead? Compared to what?
[19:25] cremes Bloudermilk: i'm using it for disseminating market data which needs low latency and low overhead
[19:25] Bloudermilk pieterh: Comapred to vanilla TCP
[19:25] cremes i wouldn't have chosen 0mq otherwise
[19:26] pieterh Bloudermilk: ... what is your estimate based on?
[19:26] pieterh and how do you define "significant"?
[19:26] Bloudermilk pieterh: Absolutely nothing :) That's why I wanted to ask
[19:27] Bloudermilk pieterh: I'd define significant as a subjective point where the performance overhead outweighs the convenience
[19:27] pieterh ok, no, it does not add significant, or even moderate overhead
[19:27] pieterh not even small overhead
[19:27] Bloudermilk That's great news!
[19:27] pieterh something between "tiny" and "insignificant", I'd say
[19:27] Bloudermilk Haha
[19:28] pieterh it is easy to measure with running code, and you should try
[19:28] pieterh guido_g: go for it, it could work, my initial feeling is it's not a natural 'pattern' for using multipart messages but it could be within some applications
[19:28] guido_g ok
[19:29] pieterh just don't come back and ask me to make MDP work better with 'segments' :-)
[19:29] guido_g nope
[19:29] guido_g its working fine
[19:29] guido_g using it to test my c++ ioloop :)
[19:29] pieterh nice...
[19:30] pieterh do announce your implementation on zeromq-dev and the Labs page so people know about it
[19:30] guido_g <- the test program, so far
[19:30] guido_g will do, after some more tests and some *sigh* documentation
[19:31] pieterh guido_g: do you have a dedicated key on your keyboard that prints *sigh*?
[19:31] guido_g not yet
[19:31] pieterh lol
[19:59] mikko howdy
[20:57] troutwine Compiling 2.0.10 from source on a Posix system I find that there's no .pc for pkg-config, than pkg-config does not list libzmq as a known package. I'm doing the standard ./configure&&make&&make install. Am I forgetting something?
[21:02] guido_g get 2.1.x, the build system was improved
[21:02] guido_g and it's more stable
[21:10] troutwine guido_g: More stable?
[21:10] guido_g yes
[21:10] guido_g lots of bugs removed
[21:12] troutwine Thanks.
[21:57] troutwine I'm running wuserver with wuclient from the Guide on 2.1.2. When I netstat -ant I see the following:
[21:57] troutwine For each pub/sub connection made to the wuserver, why are two sockets in use?
[22:02] troutwine I am reading netstat's output correctly, yes?
[22:15] guido_g no
[22:15] guido_g read the heading of the netstat output
[22:16] guido_g it says local and foreign address
[22:16] guido_g and a tcp connection has 2 endpoints, so for every endpoint is a local and a foreign view
[22:17] guido_g add the -p flag and see which processes are using the connections
[22:21] troutwine guido_g: Thanks. I need to read up on TCP more, clearly.
[22:23] michelp might I suggest
[22:34] michelp the guide is pretty mindblowing
[22:35] michelp i got a chuckle that it goes Chapters One, Two, Three and 4