00:29:58  <SubStack>Raynos: sure people do that kind of thing
00:30:04  <SubStack>browserling is basically that
00:30:49  <Raynos>Is there a generic open source implementation of shared bags of objects
00:31:19  <Raynos>that tell all clients when any of those objects changed in a bag on any client
00:31:26  <Raynos>Kind of like https://github.com/Raynos/observable#Example
00:32:24  <SubStack>nowjs does that
00:32:39  <SubStack>it's hard to make that kind of thing work browser-side
00:32:46  <SubStack>because you can't use harmony proxies
00:33:03  <Raynos>oh you use an api
00:33:18  <Raynos>observable.on("change", callback) and observable.set(key, value)
00:33:27  <Raynos>I know exactly what you mean, you can't use getter/setters
00:33:33  <Raynos>which is just something I can tolerate
00:35:06  <SubStack>you can pretty much use setters and getters in most browsers
00:35:13  <SubStack>but proxies are different
00:35:21  <SubStack>proxies let you trap deletes and insertions
00:35:31  <SubStack>so you don't need to know what keys are going to be used ahead of time
00:36:02  <SubStack>nowjs has a setInterval to check for new and deleted entries for instance
00:36:29  <Raynos>I know, but I still avoid ES5 get/set because of ES3
00:36:36  <SubStack>I think passing your object explicitly to a synchronize() function would be fine
00:36:39  <Raynos>ive gotten used to set/remove :p
00:36:49  <SubStack>you don't even need set/remove for that
00:37:03  <SubStack>just an algorithm for computing patches
00:37:06  <Raynos>that's a pain though
00:37:11  <SubStack>not really!
00:37:13  <Raynos>because then you always need the entire object
00:37:15  <SubStack>there are libs on npm to do this already
00:37:21  <SubStack>well you can make it implicit
00:37:23  <Raynos>you cant do synchronize({ key: value })
00:37:28  <SubStack>no but
00:37:31  <Raynos>because that would delete all the other keys
00:37:57  <SubStack>you could have a function update(function (obj) { delete obj.a.b[2].c[3]; obj.x = { y : 'z' } })
00:38:04  <SubStack>and that could call synchronize() for you
00:38:16  <SubStack>could even have an async update api
00:38:44  * mikealjoined
00:43:51  <Raynos>SubStack: https://github.com/substack/node-browserify/pull/124
00:43:57  <Raynos>Can you pull that in
00:46:14  * daeheejoined
00:55:22  <SubStack>yep
00:58:33  <rowbit>Hourly usage stats: [free: 7]
01:01:57  * mikealquit (Quit: Leaving.)
01:09:17  * daeheequit (Quit: daehee)
01:16:29  * isaacsjoined
01:19:07  <isaacs>LOUDBOT: be LOUDBOT
01:19:07  <LOUDBOT>isaacs: IT FUCKING MURDERS MY SOUL
01:19:13  <isaacs>LOUDBOT: be SubStack
01:19:13  <LOUDBOT><SubStack> ONLY THE LOUDEST OF US MY STAVE OFF OBLIVION
01:19:17  <isaacs>LOUDBOT: be jesusabdullah
01:19:17  <LOUDBOT><jesusabdullah> ACHIEVEMENT UNLOCKED: MAX-LENGTH TWEET
01:19:21  <isaacs>LOUDBOT: be guybrush
01:19:21  <LOUDBOT><guybrush> WHATS UP AT NODECONF?
01:19:33  <isaacs>LOUDBOT: be COPSLACKBOT
01:19:33  <LOUDBOT>isaacs: I ONLY KNOW THREE TIER YOU FUCK
01:19:41  <isaacs>LOUDBOT: be farnsworth
01:19:41  <LOUDBOT>isaacs: RIGHT THERE. IN YOUR BULBOUS OVERSIZED O OF YOUR HEAD.
01:24:26  <SubStack>isaacs: is travis just being terrible here or is this a real bug?
01:24:26  <SubStack>http://travis-ci.org/#!/substack/node-browserify/jobs/1093365
01:24:35  <SubStack>in an npm package
01:24:40  <SubStack>can't duplicate locally though :/
01:46:17  <Raynos>LOUDBOT: be Raynos
01:46:18  <LOUDBOT>Raynos: PROGRAMMING INTERFACE THIS BEE-AYTCH
01:58:33  <rowbit>Hourly usage stats: [free: 1]
02:06:54  * ryan_stevensjoined
02:58:33  <rowbit>Hourly usage stats: [free: 7]
03:00:52  * devaholicjoined
03:22:36  * TheJHquit (Ping timeout: 252 seconds)
03:26:57  * tilgoviquit (Remote host closed the connection)
03:58:34  <rowbit>Hourly usage stats: [free: 33]
04:38:06  * daeheejoined
04:58:33  <rowbit>Hourly usage stats: []
05:04:31  <SubStack>quiet!
05:04:58  <SubStack>makes sense, people are out doing exciting things on a saturday night
05:29:17  * st_lukejoined
05:41:41  * rannmannquit (Ping timeout: 240 seconds)
05:53:47  * mikealjoined
05:56:20  * mikealquit (Client Quit)
05:58:33  <rowbit>Hourly usage stats: []
06:14:49  * isaacsquit (Remote host closed the connection)
06:24:25  * mikealjoined
06:27:29  <st_luke>I made the exact same joke as someone else on the internets and I feel ashamed
06:35:26  * daeheequit (Quit: daehee)
06:55:37  * st_lukequit (Remote host closed the connection)
06:58:33  <rowbit>Hourly usage stats: [free: 28]
07:55:13  * pkruminsquit (Ping timeout: 260 seconds)
07:55:47  * pkruminsjoined
07:55:47  * pkruminsquit (Changing host)
07:55:48  * pkruminsjoined
07:58:33  <rowbit>Hourly usage stats: [free: 1]
08:00:16  * niftylettucequit (Excess Flood)
08:01:15  * niftylettucejoined
08:57:56  * AvianFluquit (Quit: Leaving)
08:58:33  <rowbit>Hourly usage stats: [free: 18]
09:06:35  * ryan_stevensquit (Quit: Leaving.)
09:58:33  <rowbit>Hourly usage stats: [free: 18]
10:10:29  * TheJHjoined
10:58:33  <rowbit>Hourly usage stats: [free: 9]
11:01:45  <Raynos>SubStack: If I create two dnode servers and attach both of them to one HTTP server do all kinds of bad things happen?
11:24:33  <Raynos>https://gist.github.com/2391988#comments
11:43:37  * TheJHquit (Ping timeout: 260 seconds)
11:47:59  * daeheejoined
11:58:33  <rowbit>Hourly usage stats: [developer: 1, free: 14]
12:05:11  * TheJHjoined
12:12:23  * daeheequit (Quit: daehee)
12:13:52  * darshanshankarjoined
12:15:35  * darshanshankarquit (Client Quit)
12:15:48  * darshanshankarjoined
12:20:29  * darshanshankarquit (Client Quit)
12:24:32  * daeheejoined
12:27:28  * daeheequit (Client Quit)
12:58:33  <rowbit>Hourly usage stats: [free: 22]
12:59:53  * Madars_joined
13:05:34  * chapel_joined
13:08:44  * chapelquit (*.net *.split)
13:08:45  * Madarsquit (*.net *.split)
13:37:27  * daeheejoined
13:49:45  * daeheequit (Quit: daehee)
13:58:33  <rowbit>Hourly usage stats: [free: 6]
14:58:33  <rowbit>Hourly usage stats: [free: 27]
15:06:43  * stlsaint_quit (Ping timeout: 272 seconds)
15:43:16  * devaholicquit (Read error: Operation timed out)
15:50:56  * chapel_quit (Quit: ZNC - http://znc.sourceforge.net)
15:52:04  * chapeljoined
15:58:33  <rowbit>Hourly usage stats: [free: 19]
16:05:11  * devaholicjoined
16:20:57  * rannmannjoined
16:43:51  * mikealquit (Quit: Leaving.)
16:51:11  * mikealjoined
16:58:33  <rowbit>Hourly usage stats: [developer: 1, free: 17]
17:39:41  * isaacsjoined
17:58:33  <rowbit>Hourly usage stats: [free: 5]
17:59:29  * sorensen__joined
17:59:59  * sorensen__quit (Client Quit)
18:20:08  <guybrush>Raynos: why dont you put the dnode1/2 into one dnode - like dnode({dnode1:{},dnode2:{}}).listen(..)
18:20:11  * devaholicquit (Ping timeout: 245 seconds)
18:23:54  * devaholicjoined
18:26:39  <Raynos>guybrush: because dnode1 and dnode2 are in two seperate modules that do RPC using dnode
18:26:50  <Raynos>I have two modules that create their own dnode servers to do RPC for me
18:26:58  <Raynos>I want them to nicely work together in one app
18:27:04  <guybrush>hm
18:27:10  <Raynos>I guess I could pass in a dnode server as a dependency
18:27:10  <guybrush>you can proxy the dnode-api-thing
18:27:12  <Raynos>but that feels ugly
18:28:11  <guybrush>dnode.listen(..,function(rem1,conn1){dnode.connect(..,function(rem2,conn2){rem1.proxy(rem2)})})
18:28:32  <guybrush>and proxy is a function which you can pass the other dnode-api too
18:29:38  <Raynos>ugh that's ugly two
18:29:46  <Raynos>I just want to create two completely seperate dnode servers
18:30:07  <Raynos>I basically want to create a stand alone module that uses dnode and won't break if you also use dnode in your application
18:30:11  <guybrush>or even dnode.listen(port1,function(rem1,conn1){dnode({rem1:rem1,rem2:{}}).listen(port2)})
18:30:45  <guybrush>i think the best way to build things upon (or for) dnode is to write it like a connect-middleware
18:30:57  <guybrush>i think dnode has even the obligatory .use() function
18:31:10  * isaacsquit (Remote host closed the connection)
18:31:20  <guybrush>so every module you write just exports a "dnode-middleware" which can be any object
18:31:28  <Raynos>I see
18:31:31  <Raynos>that could work
18:31:57  <guybrush>in the end, all you do is extending an object which you serve via the dnode-protocol
18:32:12  <guybrush>every "dnode-middleware" is just another extension for that object
18:32:21  <guybrush>thats at least how i like to think about it
18:33:18  <guybrush>like doing: dnode({foo:require('foo')(someOpts),bar:require('bar'),blub:{bla:require('bla')}})
18:34:18  <Raynos>i think that's the nicest
18:34:24  <Raynos>just make a dnode middlware
18:34:39  <guybrush>the best thing with dnode is, it fits so extremly well in the node-module-concept
18:35:08  <guybrush>like make everything a dnode-module which happens to be how you should write any node-module anyways
18:37:52  <guybrush>or maybe not every module :D
18:39:16  <Raynos>that won't quite work :P
18:39:34  <Raynos>but I will go for `dnode.use(clientmongo.middleware).use(observe.middleware)`
18:39:45  <guybrush>sounds cool
18:45:50  * AvianFlujoined
18:56:27  * intabulasjoined
18:58:33  <rowbit>Hourly usage stats: [free: 16]
19:00:45  * hij1nxjoined
19:58:33  <rowbit>Daily usage stats: [developer: 4, free: 315]
19:58:33  <rowbit>Hourly usage stats: [free: 17]
20:44:10  * intabulasquit (Remote host closed the connection)
20:44:30  <devaholic>greetings
20:58:33  <rowbit>Hourly usage stats: [free: 11]
21:14:38  * isaacsjoined
21:20:11  <jesusabdullah>how do the midderwares work again?
21:35:18  <isaacs>LOUDBOT: search semicolon
21:35:18  <LOUDBOT>isaacs: <apeiron:##turtles [11]> SO WE GAVE YOU SEMICOLONS SO YOU CAN PUT STATEMENTS WITH YOUR STATEMENTS
21:35:27  <isaacs>LOUDBOT: twitlast
21:35:28  <LOUDBOT>isaacs: http://twitter.com/loudbot/status/191640769835188224 (apeiron/##turtles)
21:35:42  <isaacs>LOUDBOT: search semicolon
21:35:42  <LOUDBOT>isaacs: <ISH__:#mefi [11]> MAYBE IT CONSIDERS SEMICOLON UNCAPS
21:35:46  <isaacs>LOUDBOT: search semicolon
21:35:47  <LOUDBOT>isaacs: <SubStack:##turtles [11]> YOU ARE IMPRESSED BY THE SEMICOLON USE AND THEREFORE CONSENT TO SEXUAL CONGRESS
21:35:52  <isaacs>LOUDBOT: twitlast
21:35:52  <LOUDBOT>isaacs: http://twitter.com/loudbot/status/191640873346408448 (SubStack/##turtles)
21:36:43  <isaacs>LOUDBOT: search semicolon
21:36:43  <LOUDBOT>isaacs: <apeiron:#stimutacs [11]> THE BEST WAY TO PISS OFF AN ENGLISH TEACHER IS TO USE SEMICOLONS PROPERLY ALL THE TIME.
21:36:50  <isaacs>LOUDBOT: twitlast
21:36:51  <LOUDBOT>isaacs: http://twitter.com/loudbot/status/191641117970808832 (apeiron/#stimutacs)
21:37:09  * AvianFluquit (Remote host closed the connection)
21:42:44  <SubStack>isaacs: any idea why npm install wouldn't work here? http://travis-ci.org/#!/substack/node-browserify/jobs/1100378
21:42:49  <SubStack>I can't duplicate this locally
21:45:10  * AvianFlujoined
21:45:22  <isaacs>SubStack: it looks like someone's package.json isn't json
21:45:42  <SubStack>!
21:48:45  <SubStack>found it
21:48:52  <SubStack>find -name package.json -exec node -e 'try { require("{}") } catch (err) { console.log("{}") }' \;
21:49:58  <SubStack>./node_modules/dnode/node_modules/socket.io/support/socket.io-client/lib/vendor/uglifyjs/package.json
21:51:12  <SubStack>why must socket.io do everything in the most idiosyncratic way possible
21:56:49  <Raynos>SubStack: Did you have an opinion on how to have two seperate modules use dnode without them exporting dnode middleware?
21:58:33  <rowbit>Hourly usage stats: [free: 10]
22:08:46  * TheJHquit (Read error: Operation timed out)
22:40:37  <guybrush>http://www.techweekeurope.co.uk/news/sweden-grants-religious-recognition-to-file-sharing-church-52689 bwahaha
22:56:23  * AvianFluquit (Ping timeout: 250 seconds)
22:58:33  <rowbit>Hourly usage stats: [free: 14]
23:00:00  * mikealquit (Quit: Leaving.)
23:04:15  * wiwilliajoined
23:12:50  <SubStack>Raynos: what do you mean using?
23:13:14  <SubStack>just have the modules do their thing
23:13:16  * mikealjoined
23:13:27  <SubStack>like, with programming
23:13:43  * AvianFlujoined
23:15:49  <Raynos>I have two modules, each create a dnode server that hooks into a http server you pass in
23:16:07  <Raynos>because there is two of them attaching themself to the same http server bad stuff happens
23:16:18  <Raynos>SubStack: is there anything in dnode stopping the bad stuff from happening?
23:22:51  <SubStack>explain 'create a dnode server'
23:23:12  <SubStack>you have some code that offers methods for the client to call?
23:23:42  <SubStack>so you have 2 things that have methods for the client to call?
23:23:49  <SubStack>just compose them
23:24:27  <SubStack>dnode(function (remote, conn) { firstThing.call(this, remote, conn); secondThing.call(this, remote, conn) }).listen(...)
23:24:43  <SubStack>or that is what .use() does for you automatically
23:25:08  <SubStack>var server = dnode(); server.use(firstThing); server.use(secondThing); server.listen(...)
23:25:25  <SubStack>where firstThing and secondThing are functions that can look like:
23:25:41  <SubStack>function (remote, conn) { this.beep = function (cb) { cb('boop') } }
23:28:51  <Raynos>I have two modules that decide they want their own dnode server
23:28:53  <Raynos>(https://github.com/Raynos/clientmongo/blob/master/lib/server.js#L103)
23:29:10  <Raynos>The idea being that the usage of dnode is completely hidden from anyone using the module
23:29:33  <Raynos>I understand I can just create two dnode middlewares and do that but then the user has to know about dnode
23:30:45  <guybrush>wtf why meteor
23:31:20  <SubStack>Raynos: here's what I would do
23:31:32  <SubStack>take the part inside the dnode(...) and put that as an export
23:31:44  <SubStack>then dnode(exports.handler)
23:32:24  <SubStack>actually
23:33:07  <SubStack>do var server = dnode(); server.use(exports.handler); server.use(exports.methods); return server
23:33:23  <SubStack>then instead of passing in httpServer, the client does .listen(httpServer) themselves
23:33:47  <SubStack>serverThing(auth).listen(httpServer)
23:33:57  <SubStack>and if people want they can also compose the handlers themselves
23:34:14  <Raynos>I was thinking that
23:34:43  <Raynos>Thanks o/
23:35:17  <SubStack>another benefit of returning the server object is that people can add their own extensions by doing .use()
23:46:00  * mikealquit (Quit: Leaving.)
23:46:18  <chapel>guybrush: what about meteor?
23:47:00  <guybrush>http://www.meteor.com there isnt even a package.json -.-
23:47:08  <chapel>yeah
23:47:12  <chapel>no npm
23:47:16  <guybrush>i mean i dont understand what this is
23:47:16  <chapel>they use their own module system
23:47:20  <guybrush>why?
23:47:21  <chapel>it also uses fibers
23:47:38  <guybrush>what ever, why dont they make it a npm-package?
23:47:42  <guybrush>i just dont get it
23:47:52  <chapel>probably because they aren't interested in node
23:47:59  <chapel>just utilizing it to make their own thing
23:58:14  <maxogden>SubStack: i wanna hack on domstream
23:58:33  <rowbit>Hourly usage stats: [free: 14]
23:58:49  <SubStack>sounds excellent