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
| * mikeal | joined |
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
| * daehee | joined |
00:55:22
| <SubStack> | yep |
00:58:33
| <rowbit> | Hourly usage stats: [free: 7] |
01:01:57
| * mikeal | quit (Quit: Leaving.) |
01:09:17
| * daehee | quit (Quit: daehee) |
01:16:29
| * isaacs | joined |
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_stevens | joined |
02:58:33
| <rowbit> | Hourly usage stats: [free: 7] |
03:00:52
| * devaholic | joined |
03:22:36
| * TheJH | quit (Ping timeout: 252 seconds) |
03:26:57
| * tilgovi | quit (Remote host closed the connection) |
03:58:34
| <rowbit> | Hourly usage stats: [free: 33] |
04:38:06
| * daehee | joined |
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_luke | joined |
05:41:41
| * rannmann | quit (Ping timeout: 240 seconds) |
05:53:47
| * mikeal | joined |
05:56:20
| * mikeal | quit (Client Quit) |
05:58:33
| <rowbit> | Hourly usage stats: [] |
06:14:49
| * isaacs | quit (Remote host closed the connection) |
06:24:25
| * mikeal | joined |
06:27:29
| <st_luke> | I made the exact same joke as someone else on the internets and I feel ashamed |
06:35:26
| * daehee | quit (Quit: daehee) |
06:55:37
| * st_luke | quit (Remote host closed the connection) |
06:58:33
| <rowbit> | Hourly usage stats: [free: 28] |
07:55:13
| * pkrumins | quit (Ping timeout: 260 seconds) |
07:55:47
| * pkrumins | joined |
07:55:47
| * pkrumins | quit (Changing host) |
07:55:48
| * pkrumins | joined |
07:58:33
| <rowbit> | Hourly usage stats: [free: 1] |
08:00:16
| * niftylettuce | quit (Excess Flood) |
08:01:15
| * niftylettuce | joined |
08:57:56
| * AvianFlu | quit (Quit: Leaving) |
08:58:33
| <rowbit> | Hourly usage stats: [free: 18] |
09:06:35
| * ryan_stevens | quit (Quit: Leaving.) |
09:58:33
| <rowbit> | Hourly usage stats: [free: 18] |
10:10:29
| * TheJH | joined |
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
| * TheJH | quit (Ping timeout: 260 seconds) |
11:47:59
| * daehee | joined |
11:58:33
| <rowbit> | Hourly usage stats: [developer: 1, free: 14] |
12:05:11
| * TheJH | joined |
12:12:23
| * daehee | quit (Quit: daehee) |
12:13:52
| * darshanshankar | joined |
12:15:35
| * darshanshankar | quit (Client Quit) |
12:15:48
| * darshanshankar | joined |
12:20:29
| * darshanshankar | quit (Client Quit) |
12:24:32
| * daehee | joined |
12:27:28
| * daehee | quit (Client Quit) |
12:58:33
| <rowbit> | Hourly usage stats: [free: 22] |
12:59:53
| * Madars_ | joined |
13:05:34
| * chapel_ | joined |
13:08:44
| * chapel | quit (*.net *.split) |
13:08:45
| * Madars | quit (*.net *.split) |
13:37:27
| * daehee | joined |
13:49:45
| * daehee | quit (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
| * devaholic | quit (Read error: Operation timed out) |
15:50:56
| * chapel_ | quit (Quit: ZNC - http://znc.sourceforge.net) |
15:52:04
| * chapel | joined |
15:58:33
| <rowbit> | Hourly usage stats: [free: 19] |
16:05:11
| * devaholic | joined |
16:20:57
| * rannmann | joined |
16:43:51
| * mikeal | quit (Quit: Leaving.) |
16:51:11
| * mikeal | joined |
16:58:33
| <rowbit> | Hourly usage stats: [developer: 1, free: 17] |
17:39:41
| * isaacs | joined |
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
| * devaholic | quit (Ping timeout: 245 seconds) |
18:23:54
| * devaholic | joined |
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
| * isaacs | quit (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
| * AvianFlu | joined |
18:56:27
| * intabulas | joined |
18:58:33
| <rowbit> | Hourly usage stats: [free: 16] |
19:00:45
| * hij1nx | joined |
19:58:33
| <rowbit> | Daily usage stats: [developer: 4, free: 315] |
19:58:33
| <rowbit> | Hourly usage stats: [free: 17] |
20:44:10
| * intabulas | quit (Remote host closed the connection) |
20:44:30
| <devaholic> | greetings |
20:58:33
| <rowbit> | Hourly usage stats: [free: 11] |
21:14:38
| * isaacs | joined |
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
| * AvianFlu | quit (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
| * AvianFlu | joined |
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
| * TheJH | quit (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
| * AvianFlu | quit (Ping timeout: 250 seconds) |
22:58:33
| <rowbit> | Hourly usage stats: [free: 14] |
23:00:00
| * mikeal | quit (Quit: Leaving.) |
23:04:15
| * wiwillia | joined |
23:12:50
| <SubStack> | Raynos: what do you mean using? |
23:13:14
| <SubStack> | just have the modules do their thing |
23:13:16
| * mikeal | joined |
23:13:27
| <SubStack> | like, with programming |
23:13:43
| * AvianFlu | joined |
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
| * mikeal | quit (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 |