Thursday April 28, 2011

[Time] NameMessage
[04:59] Dantman I'm writing something with Java and jzmq. I'm doing a NIO server handling multiple client sockets and using NIO's Selector API. From there, I want to send and receive messages over ZMQ to other things. Is jzmq compatible with NIO's Selector API? Can I register a ZMQ socket with a Selector and incorporate waiting for incoming messages on the ZMQ socket into the .select();, or do I have to create a separate thread just to efficiently send and receive stuff
[04:59] Dantman over ZMQ.
[04:59] guido_g yes
[04:59] guido_g see getsockopt and ZMQ_FD
[05:00] guido_g you get a fd you can use w/ poll/nio or whatever
[05:01] Dantman Java NIO... I mean, is it part of the JZMQ java api...
[05:01] Dantman There's no API docs I can see to check
[05:02] guido_g
[05:05] jer only a couple days into 0mq, but it is one of the coolest libraries i've used. to play, i rewrote some code, and managed to quite literally, throw away several hundred lines of code (and the program was already just over a thousand lines of code... 40%, gone.)
[05:07] Dantman I get that the C api has the ability to return a descriptor that can be polled or selected, so it's possible for jzmq to do it. But I need to know if jzmq has implemented that into a java.nio.channels.SelectableChannel that I can use in conjunction with a java.nio.channels.Selector.
[05:08] guido_g if you can't figure it out, ask the author of the binding
[07:00] Steve-o goijfgdgdfg.
[07:02] guido_g Steve-o: get more coffee :)
[07:02] Steve-o That's what I"m thinking of MSVC 100
[07:02] Steve-o They've introduced a tonne of socket option definitions which aren't used anywhere
[07:03] Steve-o And still a typo on the current page listing IPPROTO socket options
[07:04] guido_g poor Steve-o
[07:04] Steve-o oh well, done now, release early, release often.
[07:04] Steve-o Looks like Martin & Pieter are having similar fun with recent 0mq builds too though :D
[07:07] Steve-o aren't there a few low latency events in NYC this week?
[07:08] Steve-o "The Business and Technology of Low-Latency Trading" at Crowne Plaza
[07:09] Steve-o looks like I miss everything by a week again
[08:28] mikko Steve-o: hi
[08:28] Steve-o yo
[08:28] mikko how was your travelling?
[08:29] Steve-o not stopped, back to nyc next monday
[08:29] mikko did i send you an email about mac os x build failure --with-pgm?
[08:30] mikko i think i was supposed to send but i dont know if i ever did
[08:30] Steve-o I have something, one moment
[08:30] mikko i was in lisbon for holidays
[08:30] mikko lovely city
[08:30] Steve-o fixed already
[08:30] Steve-o Lisbon? You like it? It's bit of a dump
[08:30] mikko ah, nice
[08:30] mikko yeah, it's not nice and shiny
[08:31] mikko but a lot of character
[08:31] Steve-o Zurich is funny, everyone is so old
[08:31] mikko i shot five rolls of film there
[08:31] Steve-o we had a nice apartment over looking the lake though, v. nice
[08:31] mikko i've never been to zurich
[08:32] Steve-o nice chocolate :-)
[08:32] mikko i would love to go to south of france at some point
[08:32] Steve-o st tropez?
[08:32] Steve-o or just abouts
[08:32] mikko just anywhere there
[08:33] Steve-o I see a lot of Brits on HGTV moving to South of France
[08:33] Steve-o good weather and large residences
[08:34] Steve-o so I'll be NYC for near 3 months
[08:34] Steve-o waiting for Green Card interview
[08:37] Steve-o I've switched my lab off, so that might be entertaining for future updates.
[08:38] mikko hehe, where is the lab located at?
[08:38] Steve-o in my office in HK
[08:38] mikko if we wanted to add PGM testing to daily builds what would that need?
[08:38] Steve-o although there is a OS X server still running with the source tree on
[08:38] mikko what kind of gear?
[08:39] Steve-o bare minimum normally for anything but performance testing
[08:39] Steve-o you can get away with really crappy gear
[08:40] Steve-o after all White Barn made PGM in the days of Sparc 1 & 2's
[08:40] mikko i'm just looking for 'does it work' kind of testing
[08:40] mikko currently i got two HP DL380s running VMWare ESXi with some amount of virtual machines
[08:43] Steve-o the unit tests are trivial to run on the command line for any hardware
[08:43] Steve-o the network tests are not so straight forward
[08:44] Steve-o I ideally want to rewrite them in 0MQ + Python or something higher level
[08:44] Steve-o make a great GSoC project :/
[08:47] Steve-o Ideally you could say 0MQ should be able to mock the PGM socket interface
[08:57] mikko hmm
[08:57] mikko do the network tests work with vmware virtual networking?
[08:59] Steve-o with ESX or VirtualBox would work
[09:00] Steve-o the older VMware VM's don't support multicast NICs
[09:01] Steve-o just going to pop out to find an IP-KVM device, later
[09:02] mikko later
[11:58] th pieterh: could you give me a pointer where to find the "patch for 191" which applies to 2.1? i'm adapting my testcase to get more information then.
[11:58] pieterh th: hi
[11:58] pieterh sustrik posted the patch to the mailing list
[11:59] pieterh i've also attached it to the issue in github
[11:59] pieterh in this gist repo:
[12:00] pieterh however... it doesn't apply to 2.1 cleanly...
[12:00] pieterh give me a second and I'll make a patch for 2.1 and include it in that gist
[12:00] th pieterh: great thanks!
[12:01] th pieterh: i did not reduce it to a C testcase (yet) because i could imagine that the issue is within the C++ "bindings"
[12:01] th some destructing done in incorrect order or something...
[12:02] pieterh th: could be, esp. since the error always hits the same place afaics
[12:02] pieterh i've added that patch to the gist repo
[12:03] th pieterh: the main difference with your patch is that the CLIENT dies while in my testcase the server dies
[12:04] th 2-1/issue191.patch got it
[12:05] th pieterh: is it a good idea to use 2.1.6 for this?
[12:05] pieterh th: should not make any difference
[12:05] th ok
[12:08] th pieterh: i can not confirm any change with that patch. i dont get the error you get, it's still the server failing because of intermixed message.
[12:09] pieterh right...
[12:09] pieterh anyhow the patch didn't fix issue 191, it caused 0MQ to die nastily
[12:09] th pieterh: which 2.1 revision did you use?
[12:10] th pieterh: it does not die here
[12:10] th pieterh: at least not nastily
[12:10] pieterh indeed, neither with me, then it's probably a different issue than 191
[12:10] pieterh i'd suggest the best step is to make a C test case that reproduces the problem on 2.1
[12:10] th ok
[12:10] pieterh the revision is not going to be significant, anything recent
[12:10] th and testing 3.0 i assume
[12:10] pieterh and then, a second test case for 3.0 (it'll be very similar)
[12:11] pieterh don't use zmq_device, that's gone in 3.0...
[12:11] th pieterh: i didn't
[12:11] th pieterh: must be indirectly
[12:12] pieterh ah, perhaps a side effect of using the C++ binding
[12:13] pieterh it was a compile error, not a link error
[12:13] th pieterh: i only use {context,socket,message}_t and bind,connect,recv,send,{get,set}sockopt
[12:13] th ahh ok
[12:14] th removing C++ first then, i'd say. to know where it comes from.
[12:15] pieterh yes
[12:50] th reference manual says about zmq_msg_init_data: "ØMQ shall take ownership of the supplied buffer", is that only true when a deallocation function pointer is given?
[12:51] mato th: you mean "... is not given" ?
[12:51] pieterh mato: when give, I think...
[12:51] pieterh *given
[12:51] th there are examples in the guide passing a constant static string, and NULL,NULL for ffn,hint
[12:51] th it makes no sense to giveownership to a string like that
[12:51] mato it does what you think it does :-)
[12:52] th mato: so it does not call any free() unless i pass a function pointer to a free()?
[12:52] mato th: actually good question
[12:52] pieterh th: those examples should absolutely not be using the _data method, I'm changing that
[12:52] th ????????zmq_msg_init_data?(&reply,?"World",?5,?NULL,?NULL);
[12:52] th talking od that code
[12:52] pieterh yes, hwserver & hwclient
[12:52] th sorry for the broken paste
[12:53] mato th: if no ffn is passed, none is called
[12:53] pieterh mato: problem is that statement in the man page, "shall take ownership..."
[12:53] th pieterh: i'm looking fo replacemtn of `zmq::message_t m(len); memcpy((void *), buffer, len);`
[12:53] mato pieterh: yes, it's wrong
[12:54] th mato: then i think the reference manual should be changed to make that clear. it says "shall take ownership"
[12:54] pieterh th: in C, zmq_msg_init_size() and then memcpy into zmq_msg_data()
[12:54] th perhaps it should more hint to the user to keep that buffer valid until message's EOL
[12:55] mato yes
[12:55] mato if you don't supply a ffn then the buffer must stay around forever
[12:55] mato or at least until context deinit anyway
[12:55] th mato: _context_ deinit? not message deinit?
[12:56] mato th: technically message deinit, but due to internal refcounting that's probably not a 100% safe approach
[12:56] th (which should be msg_close, i assume)
[12:56] mato yes
[12:56] th pieterh: is it wrong in the examples because it is easily used incorrectly?
[12:57] th pieterh: or is there another reason?
[12:57] pieterh th: the init_data method is rather poorly named
[12:57] pieterh it should be called zmq_msg_zero_copy_do_not_use_unless_you_know_what_its_for()
[12:58] mato :-)
[12:58] th pieterh: should it be named something like zmq_msg_set_data_reference?
[12:58] pieterh and my error in using that in hello world methods
[12:58] th ahh ok
[12:58] pieterh highly misleading, but I also got caught by the name originally
[13:10] Steve-o pieterh: updated PGM github issues in libzmq/zeromq2-1, mainly appear to be cases resolved in newer versions. One wishlist issue for improved logging.
[13:11] pieterh neat, thanks
[13:12] pieterh Steve-o: btw I put Miru on
[13:12] pieterh can you take a look and see if the description is OK for you?
[13:14] Steve-o Cool, I have a Chinese site too: http://見.香港/
[13:15] Steve-o Well, Traditional Chinese anyway.
[13:16] pieterh Steve-o: afaik isn't available in mainland China... :-/
[13:18] Steve-o Works in Hong Kong & Taiwan though
[13:20] pieterh It could be neat to make a Chinese site... but not using Wikidot then
[13:21] Steve-o is it just .org blocked?
[13:21] pieterh Steve-o: it's Wikidot that's blocked
[13:21] pieterh the IP address, afaik
[13:21] Steve-o oh, as a wiki, igi
[13:21] ezl having trouble installing zeromq on ubuntu 10.10
[13:21] ezl uuid-dev : Depends: libuuid1 (= 2.17.2-0ubuntu1) but 2.17.2-0ubuntu1.10.10.2 is to be installed
[13:21] ezl E: Broken packages
[13:21] ezl But installing uuid-dev shows I have the most recent version
[13:22] Steve-o pieterh: all wikis are blocked, including similar bits of Google
[13:22] ezl any ideas?
[13:23] pieterh Steve-o: I assume the Chinese govt hates the Internet
[13:23] pieterh ezl: no ideas immediately, haven't hit this on Ubuntu 10.10 myself
[13:23] pieterh ezl: when do you get this error message?
[13:24] ezl .configure
[13:24] pieterh what 0MQ package did you download?
[13:24] ezl 2.1.6 off the website this morning
[13:25] pieterh let me just try that for sanity's sake...
[13:25] ezl thanks pieterh
[13:25] ezl checking for uuid_generate in -luuid... no
[13:25] ezl configure: error: cannot link with -luuid, install uuid-dev.
[13:25] ezl was the 2 lines of output before configure quit
[13:26] pieterh ezl: so I have uuid-dev installed
[13:26] pieterh it sounds like you don't have it installed (or properly)
[13:27] ezl ah. right, i don't. when trying to install uuiddev, i get the error message above about Depending on libuuid1
[13:27] ezl "Depends: libuuid1 (= 2.17.2-0ubuntu1) but 2.17.2-0ubuntu1.10.10.2 is to be installed"
[13:27] ezl which when i try to install linuuid1, it says that i have the latest version
[13:28] ezl libuuid1 is already the newest version.
[13:28] pieterh ezl: I know there was a Ubuntu update today
[13:28] pieterh maybe you're halfway through an update?
[13:28] ezl (sorry, I did google it too, just didn't get very far)
[13:28] ezl (also pretty new to ubuntu, so it could be just a newb problem)
[13:29] pieterh try sudo apt-get dist-upgrade
[13:29] pieterh all the way through, including restart if needed
[13:29] ezl ok thanks trying
[13:29] pieterh it's something aberrant because this normally /always/ works on Ubuntu
[13:30] ezl dist upgrade: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
[13:30] ezl yeah my problem seems to be libuuid1
[13:30] mikko ezl: can you put config.log to
[13:30] pieterh hmm, try uninstalling that, and then installing uuid-dev
[13:30] ezl says its installed, but then when i try to install uuid-dev, it complains that i don't have libuuid1
[13:30] ezl ok
[13:30] ezl mikko ok also
[13:32] ezl mikko: pieterh: config.log >>
[13:32] mikko ezl: can you do ldconfig -p | grep uuid
[13:34] ezl mikko: ok
[13:34] ezl mikko: (libc6) => /lib/
[13:35] ezl piterh: as per your recommendation also tried to uninstall, but didn't go smoothly
[13:35] ezl
[13:38] mikko ezl: looks like you have it
[13:39] mikko interesting
[13:39] ezl mikko: yes, ubuntu thinks i have it, but then when i try to install uuid-dev, it says it can't because it needs libuuid1
[13:39] mikko you also need /usr/lib/
[13:40] ezl "Depends: libuuid1 (= 2.17.2-0ubuntu1) but 2.17.2-0ubuntu1.10.10.2 is to be installed"
[13:40] ezl sounds sort of like a version problem
[13:40] ezl but i can't decipher what that error means
[13:42] ezl what are ".so" and ".so.1" files?
[13:43] ezl (linux newb)
[13:52] mikko ezl: i think thats the so version
[13:52] mikko it sounds like ubuntu has messed up the dependencies
[13:54] ezl how can i force ubuntu to reinstall it?
[13:55] macson_g hi, I have problem with app crashing on SIGPIPE on exit in 2.1.6. Can anyone help?
[13:56] macson_g The backtrace is: zmq::mailbox_t::send, zmq::object_t::send_stop, zmq::ctx_t::terminate
[13:59] mikko ezl: i don't know
[13:59] pieterh ezl: remove it, reinstall it
[13:59] ezl -- not letting me remove it
[13:59] pieterh oh...
[14:00] ezl I'm getting that E: broken packages thing on anyhting surrounding libuuid1
[14:00] ezl not sure what that means, but "broken" sounds suboptimal
[14:00] ezl =P
[14:01] pieterh ezl: try 'apt-get clean', 'purge', 'update'
[14:02] pieterh ezl: actually, looks like you have quite a mess
[14:02] ezl haha awesome.
[14:03] ezl i really haven't done much on my machine, not sure how i got into this
[14:03] ezl (i did clean, purge, update: libuuid1 is still installed, tried to uninstall, wouldn't allow again.)
[14:06] headzone this is why it pays to use debian
[14:12] pieterh ezl: if you haven't done much on the system, reinstall it...
[14:13] pieterh headzone: I thought Ubuntu was basically debian, especially its package management layers...
[16:32] ParadoxG #gitready
[16:32] ParadoxG sorry, wrong command
[16:40] mabes does anyone know if zdevice ( is available as binaries/in a deb package?
[17:08] pieterh mabes: nope, it's not
[17:08] pieterh it's a single C source file...
[17:10] mabes pieterh: I know, but my sysadmins like packages :) I'll have to look into creating our own I suppose. thakns
[17:10] pieterh mabes: you're using zdevice?
[17:13] mabes pieterh: well, no, not yet... I'm investigating zeromq and I need to use ROUTER/DEALER (XREQ/XRES). One process is in ruby and the other Java. Anyways, I need to use the zmq_queue and it seemed like using zdevice was the easiest way to do that from a deployment standpoint. I am new to zeromq so I may be wrong though- if so please clue me in...
[17:14] pieterh mabes: the simplest for you would be to rewrite zdevice in Java or Ruby IMO
[17:14] pieterh it's a very simple app, mostly concerned with reading configuration data
[17:14] pieterh that should be trivial in Ruby
[17:15] pieterh all the hard work is done by the zmq_device() call at the end
[17:15] pieterh before you do this you need to read the Guide and understand how devices work
[17:16] pieterh there is a detailed explanation of what zmq_device() actually does, and how to roll your own
[17:16] mabes pieterh: Yeah, I read the guide and I actually already translated the c msgqueu example that uses zmq_queue into ruby already.
[17:16] pieterh that's what you want to use then
[17:17] mabes pieterh: ok, thanks for the advice. I'll go ahead with that approach then.
[17:17] pieterh np
[18:52] DanielFriesen I'm trying to figure out what type of ZMQ sockets I should use; Say I have 1 A and a number of B's. There are multiple requests A can send messages to B for. Individual requests can be sent to any B, but all subsequent messages related to that same request have to be sent to the same B as the first one, so push/pull is out. That sounds like req/rep but A needs to be able to send multiple messages to B and B needs to be able to make multiple replies,
[18:52] DanielFriesen they can't wait for a message from the other before sending the next, so req/rep seams to be out.
[18:57] guido_g sounds like a job for xreq/xrep sockets
[18:57] mikko XREP/XREQ with multipart messages
[18:57] guido_g why multipart?
[18:58] guido_g multipart is just one message send in one go
[18:58] mikko depends on how far apart the messages are i guess
[18:58] guido_g see
[18:59] guido_g DanielFriesen: The Guide has a chapter on lru routing, just replace the lru algo with one that fits your need
[18:59] DanielFriesen Ok, I thought about XREP/XREQ but didn't know if it was usable as the primary pair
[19:00] guido_g first of all, check if you really need stateful routing
[19:00] guido_g most of the time it's not worth the trouble
[19:02] DanielFriesen I'm writing a NIO http server, sending requests to workers doing the request handling... request initiation/headers, and body are separate messages... naturally the body of a http request needs to go to the same worker as the headers went to...
[19:02] guido_g a request should be a single message
[19:02] mikko DanielFriesen: have you checked mongrel2 as well?
[19:03] DanielFriesen That would destroy streaming capability
[19:03] guido_g as mikko pointed out, you might use multipart messages
[19:03] mikko guido_g: not necessarily assuming request has large body
[19:03] DanielFriesen When I saw how mongrel2 was explained in that video I shuddered...
[19:04] guido_g some of us have the same feeling when seeing the average java software...
[19:05] guido_g which is the only way to use java :)
[19:06] guido_g whatever that might be
[19:06] DanielFriesen JavaScript
[19:06] DanielFriesen ;) cept much cleaner
[19:07] guido_g back to streaming
[19:08] guido_g if you have content to stream, why partiition it into discrete messages?
[19:09] DanielFriesen Open up a new socket for each connection?
[19:10] guido_g no, thinking about where to get the streams content and why
[19:11] guido_g streaming and request/reply are not different enough to treat them differently
[19:11] guido_g ups
[19:11] guido_g i ment: streaming and request/reply are different enough to treat them differently
[21:23] chuck hello
[21:24] chuck I'm reading through the guide, and I'm sort of confused
[21:24] chuck if I want to be able to start multiple "worker" processes for a backend service and I want to contact those processes from my web application server, which socket types should I be looking at?
[21:31] mikko chuck: what kind of communication are you looking at?
[21:31] mikko fire and forget ?
[21:32] chuck mikko, yeah
[21:32] mikko then you want PUSH on the web application server
[21:32] mikko and pull on backend
[21:33] chuck mikko, what would it be for a synchronous response?
[21:36] mikko XREP/XREQ
[21:36] chuck hrm
[21:37] chuck mikko, i'm just trying to think how I would set this up
[21:38] chuck mikko, so I would create a server that binds, and then multiple worker clients that would connect to that
[21:38] chuck and then somehow I would contact the server from my web application?
[21:39] mikko yes
[21:42] chuck mikko, is that the most straightforward way? it seems like the server middleman should be cut out somehow but I can't see how it would be
[21:45] mikko chuck: sorry, i don't follow
[21:45] mikko chuck: what server middleman?
[21:46] mikko you mean "Architecture of a Single Cluster" in guide?
[21:48] chuck mikko, well I mean, what I'm describing is this: web application -> backend server -> backend clients
[21:49] chuck is there any way to talk directly to the clients while retaining the ability to add and remove clients from the "cluster" easily?
[21:49] mikko the middleman is usually there to do routing
[21:49] chuck right, and if that's necessary that's fine, i'm just not familiar with the ins and outs of every socket type so i'm not sure if it's necessary or not
[21:49] mikko if there are multiple web application servers they have no idea of amount of work each backend server has
[21:50] mikko the backend server in your scenario would probably do the distribution of work
[21:50] mikko you can connect to backend clients directly from the web application as well
[21:50] chuck can't zeromq balance the messages it sends to each backend client?
[21:51] mikko it can, but if you have 10 web application servers they all balance differently
[21:51] mikko you can end end up into situation where 10 servers all send work to 1 worker
[21:52] mikko unless you syncronise the state across all web application servers
[21:52] chuck hmm
[21:52] mikko or implement a protocol where you ask each backend client how much work they have
[21:53] mikko the middleman in your case would maintain LRU list of work distribution
[21:53] mikko or any other algo suitable for the scenario
[21:58] mikko let's say in the simplest scenario you would connect the web application server directly to backend client
[21:58] mikko now when you add another backend client and connect to that as well zeromq will do round robin balancing between those backend clients
[21:59] mikko now when you add another web application server and connect to those backend workers it will do round-robin as well
[21:59] mikko so work goes to 1 then 2, 1, 2, 1, 2 etc
[21:59] chuck but the downside is that I can't just start backend clients and call it a day, i have to add their IP addresses to the code my web app server is running?
[21:59] mikko if you got two web application servers your work might go 1, 1, 2 ,2, 1,1, 2,2,
[22:00] mikko due to naive round-robin and no state between the two web application servers
[22:00] mikko so let's say you add third web application server
[22:00] mikko worst case is: 1,1,1,2,2,2,1,1,1,2,2,2
[22:00] chuck oh okay, i gotcha
[22:01] chuck mikko, so this is what i should be doing?
[22:01] chuck the single cluster architecture
[22:01] mikko the middleman allows you to do a bit more intellegient routing
[22:01] chuck right
[22:01] mikko chuck: it all depends on the application as well
[22:03] chuck mikko, so in that single cluster architecture, on the worker side, the broker would be PUSHing and the workers would be PULLing, right? how would the "clients" (in that diagram) contact the broker?
[22:03] mikko the broker would be XREP and clients would be XREQ
[22:04] mikko XREP = ROUTER
[22:04] mikko in that diagram
[22:05] chuck oh so that's not a PUSH/PULL thing?
[22:07] mikko nope
[22:07] mikko XREP/XREQ allow to do custom routing
[22:07] mikko take a look at "A Request-Reply Message Broker"
[22:15] chuck mikko, will do
[22:15] chuck i've got to go, thanks for the help though, I understand it much better now. not all the way, but I'm getting there ;)
[22:17] mikko cool
[22:52] Bartzy Hi
[22:52] Bartzy I currently have a PHP app that uses system sometimes to call executables that create images on-the-fly... I now need to separate the app to scale: one or more machines for PHP (FastCGI) only, and one ore more machines for running the executables..
[22:52] Bartzy I also want to be able to use multiple "executing" servers.
[23:10] DanielFriesen 'Assertion failed: rc == 0 (zmq_connecter.cpp:48)' caused by accidentally using "tcp://localhost:localhost", should I report that as a bug somewhere?
[23:51] mikko Bartzy: what is the actual question?
[23:51] mikko DanielFriesen: yes, if you don't mind opening an issue
[23:52] Bartzy mikko: I was wondering if zeromq is suitable for that... I'll need to script some custom code for the 'server' part, right?
[23:53] mikko Bartzy: yes, that is correct
[23:53] Bartzy Also, if I do a script in PHP or python for example.. and it does a while (true) { ... } and receives data from ZMQ inside the while... What happens if this server-script dies for some reason ?
[23:53] Bartzy I'm responsible to re-spawn it, right ?
[23:53] mikko Bartzy: yes
[23:54] Bartzy mikko: OK, what's considered a good way to do that ?
[23:54] mikko for respawning the scripts?
[23:54] Bartzy yes
[23:54] Bartzy inittab? monit?
[23:54] mikko if it's calling an external executable i would create a simple C or C++ daemon
[23:55] Bartzy and what will spawn that C daemon if it dies ? :)
[23:55] mikko
[23:55] mikko that is a very good read on running processes
[23:55] Bartzy Thank you very much.
[23:56] Bartzy I'm viewing "ZeroMQ is the Answer" talk... I'm quite amazed how easy it is
[23:56] mikko it's a very good talk
[23:56] Bartzy But I'm wondering if Gearman would be more suitable because I wouldn't have to code the 'server'
[23:56] mikko i saw it in london
[23:56] mikko with gearman you still need the script running
[23:56] Bartzy yes it's very straight-forward...
[23:57] Bartzy So what's different between gearman and zmq ?
[23:57] mikko zeromq is more oriented towards messaging
[23:57] mikko where as gearman is more strictly for distributing work
[23:59] Bartzy messaging, how ? What do you mean by messaging ?
[23:59] Bartzy Because most of the talk I'm viewing is about distributing work in zmq
[23:59] mikko with zeromq the core concept is sending a message using different patterns