00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:11  * ircretaryjoined
00:08:20  * defunctzombie_zzchanged nick to defunctzombie
00:13:06  * loladiroquit (Quit: loladiro)
00:18:00  * rje_quit (Quit: Leaving...)
00:20:22  * abraxasjoined
00:24:35  * abraxasquit (Ping timeout: 240 seconds)
00:33:01  * kazuponquit (Ping timeout: 272 seconds)
00:39:03  * bnoordhuisjoined
00:39:28  * dshaw_quit (Quit: Leaving.)
00:39:41  * dshaw_joined
00:43:28  * bnoordhuisquit (Ping timeout: 240 seconds)
00:46:23  * inolenquit (Quit: Leaving.)
00:54:51  * inolenjoined
00:57:30  * dshaw_quit (Quit: Leaving.)
00:59:00  * jmar777joined
00:59:19  * jmar777quit (Remote host closed the connection)
00:59:54  * jmar777joined
01:03:56  * jmar777quit (Ping timeout: 245 seconds)
01:21:02  * indexzerojoined
01:22:05  * amartensjoined
01:22:14  * c4miloquit (Ping timeout: 240 seconds)
01:25:02  * inolenquit (Quit: Leaving.)
01:26:50  * c4milojoined
01:28:26  * dshaw_joined
01:29:24  * kazuponjoined
01:29:29  * inolenjoined
01:32:46  * c4milo_joined
01:33:06  * loladirojoined
01:33:25  * c4miloquit (Ping timeout: 248 seconds)
01:33:56  * kazuponquit (Ping timeout: 245 seconds)
01:36:36  * c4milojoined
01:38:46  * c4milo_quit (Ping timeout: 245 seconds)
01:40:13  <othiym23>Domenic_: ping
01:40:26  <othiym23>Domenic_: I was wondering if I could get your eyes on https://github.com/othiym23/node-continuation-local-storage/issues/6#issuecomment-27660529
01:41:08  <othiym23>Q.ninvoke is interacting with my async-listener polyfill in ways I don't really understand
01:41:51  <Domenic_>othiym23: sure
01:42:49  <othiym23>tyvm
01:43:36  * loladiroquit (Quit: loladiro)
01:43:48  <Domenic_>othiym23: so Q would be happy to make changes to simplify stuff, maybe stop bypassing nextTick or similar, if that would help
01:44:03  <Domenic_>we'd have to do version detection or something to make sure we're in a version where recursive nextTick doesn't give warnings
01:44:32  <othiym23>Domenic_: for now, I want to understand what it's doing that might be interfering with asyncListener
01:44:54  <Domenic_>othiym23: well, I imagine its screwy nextTick queue and its domain handling. lemme link..
01:45:13  <othiym23>because if Q can do that, other control-flow libraries can as well, and I'd like to actually resolve the underlying issue
01:45:15  <Domenic_>https://github.com/kriskowal/asap/blob/master/asap.js check out isNodeJS in particular
01:46:12  <othiym23>I've been walking through the Q version of that in the debugger
01:46:31  <othiym23>I guess I'll just have to do some more work to figure out why the state isn't getting propagated the way I expect
01:47:15  <Domenic_>if you want to explain more i could probably be more helpful :). not sure i'm up for groking this issue thread directly.
01:48:21  <othiym23>are you familiar with what the continuation-local storage module does?
01:48:34  * kevinswiberjoined
01:48:50  <Domenic_>Not really... I am familiar with asyncListener on a vague level.
01:49:03  <Domenic_>and I think I know the basic idea of CLS's desired user experience, but not how it works
01:50:03  <othiym23>CLS piggybacks on asyncListener to bind storage to a continuation chain
01:50:32  <othiym23>so the idea is you set a value in one function and then can read the value in another that's on the other side of an asynchronous call
01:52:09  <othiym23>with Redis, because of how pipelining works in the driver, users need to bind their Redis callbacks to the CLS context so everything squares up
01:52:33  <othiym23>I've got a little piece of monkeypatching that does that, but it doesn't work with Q.ninvoke for some reason
01:53:07  <othiym23>the correct CLS context is gone by the time that the ninvoked operation fires
01:53:48  <othiym23>because of asyncListener, the microtasky things Q is doing *shouldn't* lose the state, but for whatever reason, I can see it going
01:54:18  <othiym23>and it's time-consuming (at best) to step through all this stuff in the debugger and figure out what's going on
01:54:23  <othiym23>hence me hassling you ;)
01:54:44  <Domenic_>can you repro it with a simpler part of Q than ninvoke?
01:55:36  * dshaw_quit (Ping timeout: 245 seconds)
01:56:28  <othiym23>that's a good question
01:56:52  <othiym23>I think it's probably Promise.prototype.dispatch or Q.promiseDispatch that's actually causing the problem
01:57:31  <Domenic_>grr Q changed so much last week i barely know it anymore... gonna need to talk with Kris, get some of the deprecated stuff back :P
02:00:25  * inolenquit (Quit: Leaving.)
02:00:41  * amartensquit (Quit: Leaving.)
02:05:28  * indexzeroquit (Quit: indexzero)
02:06:30  * indexzerojoined
02:12:14  * loladirojoined
02:20:27  * indexzeroquit (Quit: indexzero)
02:25:15  * c4miloquit (Remote host closed the connection)
02:27:36  * kevinswiberquit (Remote host closed the connection)
02:28:06  * kevinswiberjoined
02:30:22  * kazuponjoined
02:31:37  * amartensjoined
02:32:14  * kevinswiberquit (Ping timeout: 240 seconds)
02:33:24  * amartens1joined
02:33:41  * amartensquit (Read error: Connection reset by peer)
02:34:48  * kazuponquit (Ping timeout: 246 seconds)
02:37:40  * amartens1quit (Ping timeout: 240 seconds)
02:50:49  * dshaw_joined
02:53:27  * brsonquit (Quit: leaving)
02:55:08  * dshaw_quit (Ping timeout: 245 seconds)
03:09:26  * inolenjoined
03:22:01  * dshaw_joined
03:24:28  * c4milojoined
03:31:20  * kazuponjoined
03:34:06  * amartensjoined
03:35:41  * kazuponquit (Ping timeout: 241 seconds)
03:38:22  * amartensquit (Ping timeout: 240 seconds)
03:41:57  * Benvie_joined
03:43:11  * c4miloquit (Remote host closed the connection)
03:46:07  * bradleymeckquit (Quit: bradleymeck)
03:47:32  * bradleymeckjoined
03:51:27  * inolenquit (Quit: Leaving.)
03:51:47  * inolenjoined
03:51:49  * inolenquit (Read error: Connection reset by peer)
03:56:32  * inolenjoined
03:59:43  * mikealquit (Quit: Leaving.)
04:03:43  * inolenpart
04:07:22  * loladiroquit (Quit: loladiro)
04:10:26  * loladirojoined
04:10:55  * dshaw_quit (Quit: Leaving.)
04:12:54  * abraxasjoined
04:15:49  * dshaw_joined
04:17:02  * abraxasquit (Ping timeout: 240 seconds)
04:20:26  * bradleymeckquit (Quit: bradleymeck)
04:32:00  * kazuponjoined
04:34:30  * Benvie_quit (Ping timeout: 246 seconds)
05:03:59  * rjequit (Quit: Leaving...)
05:04:47  * rjejoined
05:05:33  * kazuponquit (Ping timeout: 245 seconds)
05:11:45  * rjequit (Quit: Leaving...)
05:12:23  * rjejoined
05:13:32  * rjequit (Client Quit)
05:14:35  * rjejoined
05:14:52  * c4milojoined
05:19:18  * c4miloquit (Ping timeout: 246 seconds)
05:35:50  * mikealjoined
05:37:18  * defunctzombiechanged nick to defunctzombie_zz
05:47:56  * Kakera_joined
05:50:46  * bradleymeckjoined
05:51:37  * kevinswiberjoined
05:59:36  * Kakera_quit (Ping timeout: 245 seconds)
06:02:04  * kazuponjoined
06:06:16  * kazuponquit (Ping timeout: 245 seconds)
06:09:21  * kevinswiberquit (Remote host closed the connection)
06:09:47  * kevinswiberjoined
06:13:39  * abraxasjoined
06:14:18  * kevinswiberquit (Ping timeout: 245 seconds)
06:18:06  * abraxasquit (Ping timeout: 245 seconds)
06:21:51  * loladiroquit (Read error: Connection reset by peer)
06:31:16  * bradleymeckquit (Quit: bradleymeck)
06:40:54  * saghuljoined
06:53:08  * saghul_joined
06:53:39  * saghulquit (Ping timeout: 272 seconds)
07:02:51  * kazuponjoined
07:03:09  * c4milojoined
07:06:20  * bajtosjoined
07:07:26  * c4miloquit (Ping timeout: 240 seconds)
07:09:32  <MI6>nodejs-v0.10-windows: #302 UNSTABLE windows-ia32 (14/603) windows-x64 (11/603) http://jenkins.nodejs.org/job/nodejs-v0.10-windows/302/
07:29:30  * saghul_quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
07:36:09  * kazuponquit (Ping timeout: 246 seconds)
07:39:00  * saghuljoined
07:52:23  * kazuponjoined
08:00:12  * rendarjoined
08:14:39  * abraxasjoined
08:15:02  * st_lukequit (Remote host closed the connection)
08:19:02  * abraxasquit (Ping timeout: 240 seconds)
08:23:42  * dshaw_quit (Quit: Leaving.)
08:26:08  * kazuponquit (Remote host closed the connection)
08:26:36  * FROGGSjoined
08:26:37  * kazuponjoined
08:31:43  * kazuponquit (Ping timeout: 272 seconds)
08:46:47  * hzjoined
08:51:41  * c4milojoined
08:53:51  * wolfeida_joined
08:54:09  * wolfeidauquit (Remote host closed the connection)
08:54:22  * wolfeida_changed nick to wolfeidau
08:56:47  * c4miloquit (Ping timeout: 272 seconds)
09:08:15  * hueniverse1joined
09:12:13  * hueniversequit (Ping timeout: 245 seconds)
09:38:52  * kazuponjoined
09:42:17  * inolenjoined
09:43:15  * bnoordhuisjoined
09:51:03  <trevnorris>hello everyone
09:55:30  <bnoordhuis>sup trevor?
09:56:28  <trevnorris>bnoordhuis: not much. just hacking on some new stream api ideas. you?
10:00:39  <bnoordhuis>working on some company related projects today
10:04:51  <trevnorris>fun-ish
10:15:26  * abraxasjoined
10:17:10  * inolenquit (Quit: Leaving.)
10:18:48  <trevnorris>wow, templates can get weird.
10:19:18  <trevnorris>bnoordhuis: is it possible to pass a template function as a callback. e.g. handle.MakeWeak(ptr, WeakCallback<TypeName>); ?
10:19:35  <trevnorris>getting some compiler errors that I don't fully understand.
10:20:30  * inolenjoined
10:20:39  * abraxasquit (Ping timeout: 272 seconds)
10:22:46  <bnoordhuis>trevnorris: sure, should be possible
10:24:37  <trevnorris>bnoordhuis: cool. v8's just complaining about "couldn't infer template argument 'S'", so gives me a no matching function call to MakeWeak.
10:25:49  <trevnorris>oh wait. think I figured it out :P
10:26:36  <trevnorris>wait. wtf. MakeWeak is on the deprecation list, and now it's SetWeak. man, they like to swap api's a little too much.
10:27:19  * inolenquit (Quit: Leaving.)
10:30:02  * inolenjoined
10:39:38  * c4milojoined
10:42:45  <indutny>heya
10:42:47  <indutny>morning
10:45:05  * c4miloquit (Ping timeout: 272 seconds)
10:45:47  <bnoordhuis>morning fedor
10:48:49  <MI6>nodejs-v0.10: #1578 UNSTABLE smartos-x64 (4/603) smartos-ia32 (4/603) http://jenkins.nodejs.org/job/nodejs-v0.10/1578/
10:49:02  <trevnorris>ok, this SetWeak API seems really strange to me.
10:54:12  <indutny>bnoordhuis: how are you today?
10:57:25  <bnoordhuis>indutny: same old. nothing special
10:57:31  <indutny>ok
10:58:08  <bnoordhuis>what about you?
10:58:52  <bnoordhuis>quick question: debugger breakpoint requests, does the line number start at 0 or 1?
10:58:56  <bnoordhuis>zero, right?
11:00:20  * bajtosquit (Quit: bajtos)
11:03:54  <indutny>bnoordhuis: good good
11:04:01  <indutny>bnoordhuis: I think zero
11:04:21  <indutny>hm...
11:04:23  <indutny>trying to figure out
11:04:28  <indutny>how could SSL_read() return 0
11:04:49  <indutny>and then, without any input from socket return > 0
11:05:58  <bnoordhuis>trailing data?
11:06:44  <indutny>huh?
11:06:49  <indutny>why it was zero before?
11:06:52  <trevnorris>bnoordhuis: i'm trying to create a class that has a set of static variables for each inheriting class. is that possible using a template class?
11:07:24  <indutny>bnoordhuis: oh god, I think I've an idea
11:07:33  <indutny>bnoordhuis: it could be empty APPLICATION_DATA record
11:07:41  <bnoordhuis>yes
11:07:58  <bnoordhuis>trevnorris: well... yes and no
11:08:31  <bnoordhuis>trevnorris: if you're trying to do what i think you are, then it won't work as you'd expect
11:08:53  <bnoordhuis>trevnorris: maybe i should ask 'what are you trying to do?' first :)
11:09:00  <indutny>bnoordhuis: odd, but documentation says nothing about it
11:10:48  <trevnorris>bnoordhuis: heh, i'm almost afraid to say. the code I produce at 3 am is a little strange :)
11:10:50  <trevnorris>I'm creating a new stream-like class that allows you to set the default callback on the constructor (e.g. TCP.onread(fn)) that will be automatically inherited by all new instances.
11:11:42  <trevnorris>so I was thinking, it'd be nice to have a set of static Persistent's that can have each callback type, and each inheriting class will have access to it's own set of static callbacks.
11:11:50  <trevnorris>if that makes any sense at all :P
11:17:08  <indutny>bnoordhuis: rm
11:17:22  <indutny>bnoordhuis: it seems that it'd be ret=0 and SSL_ERROR_SYSCALL
11:17:32  * indutnyisaacs: yt?
11:19:28  <trevnorris>indutny: it's 320am here :)
11:19:33  <indutny>mah
11:19:36  <indutny>sleeping is for loosers
11:21:01  * inolenquit (Quit: Leaving.)
11:25:37  * inolenjoined
11:25:58  <trevnorris>heh
11:26:10  <trevnorris>well, my code is starting to scare me. better hit the sack.
11:28:01  <bnoordhuis>sleep tight revor
11:28:05  <bnoordhuis>*trevor
11:28:08  <bnoordhuis>mac keyboards...
11:29:23  <trevnorris>:)
11:29:26  * trevnorris&
11:29:27  <LOUDBOT>LONDON OUTRANKS EDINBROURGH!!!
11:31:25  * wolfeidauquit (Remote host closed the connection)
11:31:52  * wolfeidaujoined
11:36:15  * wolfeidauquit (Ping timeout: 245 seconds)
11:36:26  * inolenquit (Quit: Leaving.)
11:44:51  <indutny>bnoordhuis: what do you think https://github.com/joyent/node/issues/6451#issuecomment-27679300 ?
11:45:19  <indutny>bnoordhuis: also, mind landing my PRs today? :)
11:45:23  <indutny>that'll be a big relief to me
11:45:26  <indutny>s/to/for/
11:45:40  <indutny>cleaning out 3 emails from inbox
11:52:16  * kazuponquit (Remote host closed the connection)
11:52:47  * kazuponjoined
11:57:08  * kazuponquit (Ping timeout: 240 seconds)
11:59:38  <bnoordhuis>indutny: sorry, working on company stuff today. don't think i'll have time
11:59:51  <indutny>oh oh
12:00:00  <indutny>ok
12:01:59  * piscisaureus_joined
12:16:22  * abraxasjoined
12:20:36  * abraxasquit (Ping timeout: 245 seconds)
12:25:31  * bnoordhuisquit (Ping timeout: 272 seconds)
12:27:53  * c4milojoined
12:30:14  * kevinswiberjoined
12:32:41  * c4miloquit (Ping timeout: 245 seconds)
12:48:24  * kevinswiberquit (Remote host closed the connection)
12:48:51  * kevinswiberjoined
12:53:16  * kazuponjoined
12:53:27  * kevinswiberquit (Ping timeout: 260 seconds)
12:54:46  * inolenjoined
12:55:57  * bnoordhuisjoined
12:58:27  * kazuponquit (Ping timeout: 272 seconds)
13:09:40  * wolfeidaujoined
13:13:05  * bajtosjoined
13:14:10  * wolfeidauquit (Ping timeout: 245 seconds)
13:14:54  * bajtosquit (Client Quit)
13:29:51  * saghulquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
13:33:39  * Benvie_joined
13:40:39  * bajtosjoined
13:43:49  * saghuljoined
13:44:56  * inolenquit (Quit: Leaving.)
13:54:23  * kazuponjoined
13:55:59  * piscisaureus_quit (Ping timeout: 272 seconds)
13:59:08  * bnoordhuisquit (Ping timeout: 240 seconds)
14:16:12  * c4milojoined
14:16:57  * kevinswiberjoined
14:17:11  * abraxasjoined
14:20:51  * c4miloquit (Ping timeout: 245 seconds)
14:21:26  * abraxasquit (Ping timeout: 240 seconds)
14:22:17  * piscisaureus_joined
14:27:40  * kazuponquit (Ping timeout: 240 seconds)
14:39:49  * bnoordhuisjoined
14:50:04  * defunctzombie_zzchanged nick to defunctzombie
14:53:09  * kazuponjoined
14:53:48  * jmar777joined
14:56:47  * piscisaureus_quit (Ping timeout: 272 seconds)
14:59:55  * piscisaureus_joined
15:00:11  <bnoordhuis>sssh, bert is back
15:02:31  * kevinswiberquit (Remote host closed the connection)
15:02:57  * kevinswiberjoined
15:06:22  * pachetjoined
15:07:13  * kevinswiberquit (Ping timeout: 245 seconds)
15:08:44  <piscisaureus_>ssh?
15:09:28  * wolfeidaujoined
15:13:45  * wolfeidauquit (Ping timeout: 245 seconds)
15:13:50  * wavdedjoined
15:14:02  * indexzerojoined
15:14:55  <kaeso>it looks like the soname for 0.10.x is libuv.so.0.10, while for 0.11.x is libuv.so.11
15:15:07  <kaeso>is the current-vs-age change on purpose?
15:15:08  * kazuponquit (Remote host closed the connection)
15:15:52  <kaeso>*current-vs-revision
15:16:16  * kazuponjoined
15:17:56  <bnoordhuis>kaeso: pretty much. it's an artifact from the switch to autotools
15:18:14  * bradleymeckjoined
15:20:51  <kaeso>bnoordhuis: it looks nicer now :)
15:21:41  <kaeso>bnoordhuis: I'm also carrying a pkg-config file in debian, do you like to have it upstream?
15:22:31  <bnoordhuis>kaeso: that'd be nice
15:23:44  * bradleymeckquit (Quit: bradleymeck)
15:23:54  <kaeso>bnoordhuis: I'll try to sneak it in for next tag, rust may also benefits from it
15:24:29  * kenperkinsjoined
15:29:56  <MI6>nodejs-master: #671 UNSTABLE smartos-ia32 (8/674) smartos-x64 (9/674) linux-ia32 (2/674) http://jenkins.nodejs.org/job/nodejs-master/671/
15:38:02  * paulfryzeljoined
15:43:32  * indexzeroquit (Quit: indexzero)
15:45:01  * piscisaureus_quit (Ping timeout: 272 seconds)
15:48:01  * defunctzombiechanged nick to defunctzombie_zz
15:51:55  * AvianFlujoined
15:52:18  * Kakera_joined
16:03:46  * bajtosquit (Quit: bajtos)
16:04:34  * c4milojoined
16:06:17  * inolenjoined
16:06:47  * wavdedquit (Ping timeout: 265 seconds)
16:09:30  * wolfeidaujoined
16:09:43  * c4miloquit (Ping timeout: 272 seconds)
16:10:08  * wavdedjoined
16:10:34  * inolenquit (Read error: No route to host)
16:10:54  * inolenjoined
16:13:16  * dap_joined
16:13:57  * wolfeidauquit (Ping timeout: 248 seconds)
16:15:03  * inolenquit (Ping timeout: 240 seconds)
16:18:06  * abraxasjoined
16:22:16  * c4milojoined
16:22:54  * hzquit
16:23:17  * abraxasquit (Ping timeout: 272 seconds)
16:24:36  * wavdedquit (Quit: Hasta la pasta)
16:26:45  * c4miloquit (Ping timeout: 246 seconds)
16:28:24  * c4milojoined
16:30:04  * TooTallNatejoined
16:35:50  * bradleymeckjoined
16:36:29  * bajtosjoined
16:40:49  * indexzerojoined
16:47:55  * mikealquit (Quit: Leaving.)
16:52:19  * inolenjoined
16:53:09  * defunctzombie_zzchanged nick to defunctzombie
16:54:55  * kevinswiberjoined
16:55:42  * inolenpart
16:57:37  * inolenjoined
16:57:41  * inolenquit (Client Quit)
17:03:30  * `3rdEdenchanged nick to `3E|PANCAKE
17:04:22  * c4miloquit (Remote host closed the connection)
17:04:56  * c4milojoined
17:09:10  * c4miloquit (Ping timeout: 245 seconds)
17:16:09  * inolenjoined
17:17:06  * octetcloudjoined
17:18:05  * inolenquit (Client Quit)
17:20:22  * inolenjoined
17:20:23  * inolenquit (Client Quit)
17:24:25  <indutny>bnoordhuis: heya
17:24:30  <indutny>still doing daytime job?
17:26:55  * defunctzombiechanged nick to defunctzombie_zz
17:29:31  * amartensjoined
17:32:31  * c4milojoined
17:35:06  * kevinswiberquit (Remote host closed the connection)
17:37:05  * c4miloquit (Ping timeout: 245 seconds)
17:39:09  <bnoordhuis>indutny: yep
17:39:27  <bnoordhuis>apropos nothing, it's kind of daft that uv_buf_t.base is a char* instead of a void*
17:39:36  <bnoordhuis>i think i'm going to change that
17:39:43  <bnoordhuis>but not today
17:43:01  <indutny>i like it
17:43:06  <indutny>but may be unsigned char
17:43:19  <indutny>or event uint8_t
17:43:29  <indutny>char is really stupid
17:43:33  <indutny>bnoordhuis: +1 for unsigned?
17:46:34  <bnoordhuis>indutny: +1 for void. libuv shouldn't care what type it is
17:47:02  <bnoordhuis>because i like to read all my network data as doubles
17:47:16  <bnoordhuis>AS __MM128!
17:47:16  <LOUDBOT>HI MARC HOW ARE YOU
17:47:27  <bnoordhuis>LOUDBOT: whosaid
17:47:27  <LOUDBOT>adam in #megashark on
17:48:02  * st_lukejoined
17:49:13  * mikealjoined
17:50:49  <indutny>bnoordhuis: no way
17:54:37  <octetcloud>-1 for unsigned char/uint8_t as a generic type for network data... means a string literal can't be assigned to it without type mismatch (type of "xxx" is char, which is technically allowed to be signed or unsigned, but is usually signed)
17:55:06  <octetcloud>libnet did that, getting code to compile without warnings is like cleaning the Agean stables
17:55:19  <octetcloud>++ for void*.
17:57:23  <rendar>what is libnet?
17:59:13  <octetcloud>packet construction and send toolkit, with wide platform support. widely used, but abandoned by upstream, so I've adopted. https://github.com/sam-github/libnet
18:00:58  <rendar>i see
18:00:59  * piscisaureus_joined
18:01:22  <octetcloud>bnoordhuis: github added a query criteria for commenter last week
18:01:48  <tjfontaine>oh github ...
18:01:54  <octetcloud>cooincidence, or because I asked, no idea. https://help.github.com/articles/searching-issues#commenter
18:02:17  * brsonjoined
18:02:20  * piscisaureus_topic: Liberal utopian void ~ http://logs.libuv.org/libuv ~ http://groups.google.com/group/libuv
18:02:38  <octetcloud>tjfontaine: ?
18:02:51  <tjfontaine>they troll the shit out of me, with their social network ways
18:05:16  <trevnorris>morning
18:06:46  <trevnorris>piscisaureus_: do you need access to the context of the object just before it's about to be destroyed?
18:07:07  <trevnorris>piscisaureus_: also, there are some things that seem pointless to run "don" on. like a nextTick callback.
18:07:45  <piscisaureus_>trevnorris: sorry, sec, you're the third person talking to me now... be there in a bit
18:08:02  <trevnorris>piscisaureus_: np. that's what irc and a persistent connection is for :)
18:09:12  * wolfeidaujoined
18:10:20  <indutny>tjfontaine: /home/jenkins/workspace/node-pullrequest/8794ed89/out/Release/node --debug=13237 -e setTimeout(function () { console.log("blah"); });setInterval(function () {}, 1000000);
18:10:25  <indutny>tjfontaine: what's that for?
18:10:40  <indutny>I see like 16 processes doing that
18:10:52  <indutny>oh, wait
18:10:53  <indutny>much more
18:10:54  <tjfontaine>if they're hanging around that means we have broken tests again.
18:10:59  <indutny>yeah
18:11:02  <tjfontaine>because
18:11:04  <indutny>they're hanging around
18:11:04  <tjfontaine>why would we care
18:11:35  <indutny>:)
18:11:45  <tjfontaine>I'll go around checking it out
18:12:00  <indutny>thanks
18:12:21  <piscisaureus_>trevnorris: ok, now only 2 parallel
18:12:26  * jmar777quit (Remote host closed the connection)
18:12:39  <piscisaureus_>trevnorris: eh, I might not need access to the actual object in the destruction stage
18:12:54  <piscisaureus_>trevnorris: but I do need *something* for nextTick
18:13:07  <piscisaureus_>trevnorris: it's built on reference counting
18:13:28  <piscisaureus_>trevnorris: so when I increase the "subtasks" count on nextTick I have to decrease that count when the nextTick happens
18:13:42  <piscisaureus_>trevnorris: I don't particularly care *how* I get notified though
18:13:48  <trevnorris>piscisaureus_: well, technically the "after" is the same as "done", for performance just want to figure out how to minimize the number of fn calls that need to be made.
18:13:52  <trevnorris>piscisaureus_: ok. i'll think about it.
18:14:10  * wolfeidauquit (Ping timeout: 245 seconds)
18:14:24  <piscisaureus_>trevnorris: so yeah - I've piggybacked the `isFinal` stuff on the before/after callbacks, but if you can think of a cleaner way you're more than welcome
18:14:58  <piscisaureus_>trevnorris: I think a "weak" or "finalizer" callback would be cleaner, but that implies another call per async source
18:15:11  <trevnorris>piscisaureus_: the same goes w/ timers. setTimeout and setImmediate. I have a simple way for the items that are attached to a class
18:15:13  <trevnorris>piscisaureus_: https://github.com/joyent/node/pull/6450
18:16:59  <trevnorris>I have an alternative implementation with the same idea. still need to benchmark both.
18:17:11  <piscisaureus_>trevnorris: nice
18:17:22  <trevnorris>thanks :)
18:18:30  <trevnorris>bnoordhuis: I'me sure you've looked at the new SetWeak() syntax. What do you think their reasoning was for changing that _yet again_?
18:19:01  * abraxasjoined
18:20:11  <piscisaureus_>trevnorris: about nextTick context - I don't *need* this but this is what I would "like"
18:20:47  <piscisaureus_>trevnorris: Have some sort of base class (in js) that I can construct, and then it'll trigger the 'listener' callback
18:21:13  <trevnorris>piscisaureus_: specifically nextTick, or for all of them? Because it would be possible to shim a way to call a callback in the MakeWeak callback that passes the context just before it's Dispose()'d.
18:21:25  <piscisaureus_>trevnorris: then when I call a method on that object, it'll call some function *on the next tick* and trigger before/after
18:21:58  <piscisaureus_>trevnorris: the reason is that Tasks are basically composed of async wraps
18:22:16  <piscisaureus_>trevnorris: but I can't trigger the async listener for Tasks, but just for the primitive building blocks within them
18:22:26  <piscisaureus_>trevnorris: for me that's pretty easy to work around
18:23:09  <trevnorris>piscisaureus_: cool. i'm doing a little code cleanup. that should make it easier to put this in place.
18:23:26  <piscisaureus_>trevnorris: but that's not a requirement for me. Just to make async listeners more useful :)
18:23:34  * abraxasquit (Ping timeout: 265 seconds)
18:25:42  <trevnorris>piscisaureus_: thanks. i'm going to finish cleaning up those unnecessary calls and we'll take it from there :)
18:25:50  <piscisaureus_>trevnorris: thank you!
18:25:59  <trevnorris>np
18:26:21  <piscisaureus_>trevnorris: I feel just an observer in this context
18:28:15  <trevnorris>piscisaureus_: hey, no worries. feel like this stuff is a good stepping stone to the more complex performance enhancements in v0.13.
18:28:15  <trevnorris>and giving everyone this ability to debug will allow me to relax and really try out a few things.
18:31:26  * st_lukequit (Read error: Connection reset by peer)
18:31:35  * st_lukejoined
18:33:01  * indexzeroquit (Quit: indexzero)
18:40:48  * defunctzombie_zzchanged nick to defunctzombie
18:41:19  <trevnorris>piscisaureus_: I was thinking, things like TCPWrap do sort of have deterministic lives. I mean, once there's nothing keeping them in the event loop their destructor could be called. right?
18:42:21  <piscisaureus_>trevnorris: well - no :)
18:42:54  <piscisaureus_>trevnorris: atleast, in practice, TCPWraps just leak when you fail to close them
18:43:07  * `3E|PANCAKEchanged nick to `3rdEden
18:47:16  * inolenjoined
18:47:48  * bnoordhuisquit (Ping timeout: 240 seconds)
18:48:45  <indutny>oh
18:52:38  * piscisaureus_quit (Ping timeout: 245 seconds)
18:53:07  * jmar777joined
18:54:07  * c4milojoined
19:01:46  <indutny>and so ben left us tody
19:01:55  <indutny>hopefully he'll have more time tomorrow
19:02:18  <trevnorris>indutny: heh, for a split second I thought you meant he left us, as a maintainer. :P
19:02:25  <indutny>hahaha
19:02:32  <indutny>that would be terrible
19:03:49  <trevnorris>seriously. then I'd have to start bugging you and bert with all my coding questions ;)
19:04:32  <indutny>ahahah
19:04:45  <trevnorris>indutny: have you looked at the new Persistent::SetWeak() ?
19:04:50  <indutny>You're doing it now anyway, right? :)
19:04:54  <indutny>not yet
19:04:57  <trevnorris>haha
19:04:58  <indutny>what's up about it?
19:05:28  <trevnorris>in the callback they pass a class of WeakCallbackData<T, P>&. the syntax is all funky.
19:05:38  <indutny>well, its ok :)
19:05:45  <indutny>do you need help?
19:05:57  <indutny>T is a persistent's base, I guess
19:06:02  <indutny>P is a supplied user-data
19:06:08  <trevnorris>yeah.
19:06:20  <indutny>so
19:06:27  <indutny>you may want to have S instead of T
19:06:37  <indutny>like Value callback for String persistent handle
19:06:53  <trevnorris>what I'm wondering though is, do you not have to Dispose() the persistent? because they don't give you access to it.
19:08:04  <trevnorris>indutny: well, the class is overloaded. So it's MakeWeak<P> and MakeWeak<S, P>
19:08:21  <trevnorris>(i'm just taking the letters straight out of their docs)
19:09:45  * wolfeidaujoined
19:10:27  <trevnorris>erm. not Dispose() now it's Reset()
19:10:36  <trevnorris>freak. this API changes by the week.
19:13:03  <othiym23>it's alsmost as if the V8 maintainers don't care that there are other consumers of their API aside from Chrome
19:13:08  <othiym23>almost!
19:13:15  <tjfontaine>they also don't care about chrome
19:13:20  <trevnorris>seriously.
19:14:10  * wolfeidauquit (Ping timeout: 245 seconds)
19:14:35  <trevnorris>i don't remotely see what this api change buys them, other than you can't access the Persistent<T>&, which is stupid because you still have to Reset() the stupid thing in the weak callback.
19:14:49  <trevnorris>instead they give you back the Local<T>
19:16:33  <trevnorris>wtf. how are you supposed to get access to the original Persistent in the callback?!?! they give you no way to Reset() it.
19:27:33  * c4miloquit (Remote host closed the connection)
19:32:45  * bnoordhuisjoined
19:36:21  * kazuponquit (Remote host closed the connection)
19:36:47  * kazuponjoined
19:36:55  * piscisaureus_joined
19:40:12  * saghulquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
19:40:31  <TooTallNate>comments? https://github.com/TooTallNate/node/commit/9bc53d887ad8b7da1b6656a14ccc56fa3312bda5
19:40:42  <TooTallNate> /cc bnoordhuis, since you did the HTTPParser.methods commits
19:41:31  * kazuponquit (Ping timeout: 272 seconds)
19:43:14  <bnoordhuis>TooTallNate: saw the issue, figured it was me that broke it
19:43:42  <indutny>bnoordhuis: and you're back
19:45:13  <bnoordhuis>indutny: i might be. depends on what you're going to ask next
19:45:18  <indutny>haha
19:45:27  <indutny>I was playing drums today
19:45:32  <indutny>that was totally exciting
19:45:44  <bnoordhuis>for you or for the drums?
19:45:56  <indutny>not for drums, definitely
19:46:24  <indutny>I'm not really a decent drummer
19:46:27  <indutny>unfortunately
19:46:41  <indutny>but can play few songs :P
19:46:48  <indutny>bnoordhuis: anyway, mind reviewing code?
19:47:01  <indutny>see it was a maneuver
19:49:27  <MI6>joyent/node: Nathan Rajlich master * 9bc53d8 : http: make DELETE requests set `req.method` - http://git.io/L12xPw
19:50:16  <bnoordhuis>indutny: sorry, still busy with company stuff
19:50:26  <indutny>ok
19:50:26  <indutny>np
19:50:29  <indutny>I understand
19:51:47  <MI6>nodejs-master-windows: #459 UNSTABLE windows-x64 (28/674) windows-ia32 (30/674) http://jenkins.nodejs.org/job/nodejs-master-windows/459/
19:52:50  * bajtosquit (Quit: bajtos)
19:54:19  * philipsquit (Quit: http://ifup.org)
19:56:33  * philipsjoined
19:56:48  <trevnorris>piscisaureus_: what were the classes that don't have MakeCallback calls?
19:57:06  <piscisaureus_>trevnorris: erm, hmm
19:57:34  <piscisaureus_>trevnorris: all that inherit from WeakObject, except ZCtx and FSEventWrap ?
19:58:00  <trevnorris>ok, yeah. and also a few from node_crypto. like DiffieHellman I think.
19:58:13  <piscisaureus_>trevnorris: I don't think so but let me look
19:58:54  * mikealquit (Quit: Leaving.)
19:59:29  <trevnorris>ah, there we go. got the search figured out. ok. I see them. thanks :)
20:04:47  * mikealjoined
20:05:29  <MI6>nodejs-master: #672 UNSTABLE osx-x64 (1/674) smartos-ia32 (5/674) linux-x64 (1/674) smartos-x64 (10/674) linux-ia32 (1/674) http://jenkins.nodejs.org/job/nodejs-master/672/
20:07:00  * wavdedjoined
20:08:30  * wolfeidaujoined
20:17:15  * inolenquit (Ping timeout: 272 seconds)
20:19:53  * abraxasjoined
20:21:21  * AvianFlu_joined
20:22:26  <piscisaureus_>trevnorris: good news ;-)
20:22:38  <trevnorris>sup?
20:24:23  <trevnorris>bnoordhuis: if you can use composition over inheritance, would you usually recommend it?
20:24:39  * abraxasquit (Ping timeout: 260 seconds)
20:25:51  * AvianFluquit (Ping timeout: 272 seconds)
20:26:23  * c4milojoined
20:27:40  <bnoordhuis>trevnorris: almost always, yes
20:27:47  <trevnorris>bnoordhuis: coolio, thanks.
20:29:34  * robonerdchanged nick to testr0n
20:30:29  * indexzerojoined
20:37:30  * piscisaureus_quit (Ping timeout: 245 seconds)
20:47:27  * kazuponjoined
20:51:42  * kazuponquit (Ping timeout: 246 seconds)
21:00:53  * indexzeroquit (Quit: indexzero)
21:06:55  <isaacs>trevnorris: bnoordhuis ++
21:07:10  <isaacs>composition is almost always a better choice. when inheritance makes sense, it makes so much sense it's obvious.
21:07:22  <tjfontaine>ok, time to start deploying some windows vms on azure
21:07:32  <isaacs>when it's even a question, composition is almost certainly better
21:07:35  <trevnorris>whoot!
21:07:42  <isaacs>tjfontaine: \o/
21:09:37  * inolenjoined
21:10:29  <tjfontaine>4 cores, and 7 gb seems sufficient, yes?
21:10:29  * Domenic_quit (Remote host closed the connection)
21:10:29  * `3rdEdenquit (Remote host closed the connection)
21:10:34  * saghuljoined
21:13:10  <MI6>nodejs-master-windows: #460 UNSTABLE windows-x64 (30/674) windows-ia32 (30/674) http://jenkins.nodejs.org/job/nodejs-master-windows/460/
21:13:21  * hzjoined
21:14:01  * inolenquit (Client Quit)
21:15:25  * AvianFlu_changed nick to AvianFlu
21:17:43  * wolfeidauquit
21:18:08  * wolfeidaujoined
21:19:03  * swajquit (Remote host closed the connection)
21:22:12  <indutny>isaacs: what's up with npm?
21:22:22  <indutny>morning, btw :P
21:22:46  * Raynosquit (Read error: Connection reset by peer)
21:22:57  <tjfontaine>it's afternoon now :)
21:24:08  <indutny>meh
21:24:15  <indutny>that depends on when you get up )
21:24:21  <indutny>I usually do in 11 am
21:24:25  * inolenjoined
21:24:28  <indutny>sometimes at 12 pm
21:30:17  <indutny>anyway
21:30:21  <indutny>where is npm?
21:32:47  * jmar777quit (Remote host closed the connection)
21:33:22  * jmar777joined
21:34:47  <trevnorris>bnoordhuis: naughty causing cpplint to fail ;)
21:35:55  <indutny>haha
21:38:21  * jmar777quit (Ping timeout: 268 seconds)
21:40:01  * saghulquit (Ping timeout: 245 seconds)
21:41:09  <bnoordhuis>oh god, is it complaining about that again?
21:41:18  <bnoordhuis>seriously, i'm going to rip that out
21:41:22  <trevnorris>heh
21:44:00  <indutny>bnoordhuis: hm...
21:44:07  <indutny>bnoordhuis: what exactly?
21:44:10  <indutny>also, guys
21:44:19  <indutny>how would you name shelf full of plates?
21:44:22  <indutny>like in kitchen
21:44:27  <MI6>joyent/node: Ben Noordhuis master * 7acdabb : src: fix whitespace/braces lint error from 962686b - http://git.io/jXWOmg
21:44:34  <indutny>are people usually calling it "shelf"?
21:44:35  <bnoordhuis>indutny: ^ that
21:44:47  <indutny>oh
21:44:49  <bnoordhuis>it lives for another day... this time
21:44:55  <trevnorris>bnoordhuis: well, hope you don't mind a few implementation changes, but it'll remove the need for inheritance in several places. :)
21:45:17  <bnoordhuis>trevnorris: sounds good. i will probably cheer you on
21:45:20  <indutny>bnoordhuis: so what about plates?
21:45:24  <bnoordhuis>(from the sidelines)
21:45:39  <trevnorris>indutny: well, I think you might mean a cabinet.
21:45:42  <indutny>oh
21:45:52  <bnoordhuis>a cabinet's not a shelf though, is it?
21:45:53  <indutny>kewl
21:45:54  <indutny>thanks
21:45:57  <indutny>well yeah
21:46:05  <indutny>I'm trying to explain bump allocation
21:46:06  <trevnorris>well, the cabinet is the thing that contains the shelves.
21:46:11  <indutny>using shelf full of plates
21:46:15  <indutny>placed vertically
21:46:18  <indutny>||||||||||||||
21:46:21  * saghuljoined
21:46:29  <indutny>that's how I store them in my house
21:46:39  <bnoordhuis>i think if you do that, the plates will fall off
21:46:44  <indutny>not really
21:46:50  <indutny>they're fit in the grid
21:47:07  <indutny>anyway
21:47:12  <bnoordhuis>so how does bump allocation factor in to that? :)
21:47:14  <indutny>I fail to find any image of that process on the internet
21:47:16  <indutny>haha
21:47:21  <indutny>you take one plate from the left side
21:47:32  <indutny>multiple, if you need to allocate bigger object
21:47:33  <indutny>:)
21:47:41  <indutny>then you might return them back
21:47:46  <indutny>at their initial place
21:47:47  <trevnorris>indutny: like this? http://img2-2.timeinc.net/toh/i/g/10/kitchens/01-stylish-upgrades/05-kitchen-upgrades.jpg
21:47:53  <indutny>yikes
21:47:54  <indutny>yes!
21:47:58  <indutny>hm...
21:48:06  <bnoordhuis>saghul, tjfontaine: not a fan of pinning gyp btw
21:48:26  <trevnorris>indutny: maybe this is better: http://img2-1.timeinc.net/toh/i/g/11/kitchens/08-28-thrifty-kitchen/08-kitchen-for-less.jpg
21:48:32  <indutny>yeees!!!!!!!!
21:48:37  <indutny>so what do you think about analogy?
21:48:57  <indutny>...continuing
21:49:10  <indutny>waiter can return plates back to their initial places
21:49:17  <indutny>and that would be free-list allocation and GC
21:49:42  <indutny>if it'll take it back from the various places later on
21:49:46  <indutny>meh
21:49:51  <indutny>it sounds too complex
21:49:57  <indutny>I need to find way to rephrase it
21:50:11  <indutny>may be, dirty and clean plates
21:50:13  <bnoordhuis>there's this guy on slashdot, posts under the moniker BadAnalogiesGuy
21:50:19  <bnoordhuis>you sure you're not him?
21:50:35  * bnoordhuisducks
21:50:40  <indutny>bnoordhuis: your humour is too intelligent for me
21:50:51  <bnoordhuis>i hear that a lot :)
21:50:55  <indutny>:)
21:51:09  <indutny>anyway, you don't like that plate shelf analogy?
21:51:31  <bnoordhuis>i don't know. what kind of audience are you assuming?
21:51:37  <trevnorris>bnoordhuis: if you're bored, mind giving this a quick look (not even a review): https://github.com/trevnorris/node/commit/1b3c3a3
21:51:45  <indutny>developers without experience in heaps and GCs
21:52:13  <bnoordhuis>trevnorris: well... i'm supposed to be hard at work
21:52:30  <trevnorris>heh, and here you are making jokes about plates and bad analogies ;)
21:52:36  <bnoordhuis>indutny: sure, but they probably know what lists and pointers are, etc.?
21:52:46  <bnoordhuis>trevnorris: yeah. my 5 minute break
21:53:15  <tjfontaine>bnoordhuis: I'm not a fan either, but I'm also not a fan of gyp breaking shit arbitrarily
21:53:19  <tjfontaine>brb
21:53:42  <indutny>bnoordhuis: you must be kidding
21:53:42  <trevnorris>man, bert really needs to stay up later. it's a pain to coordinate w/ his "tasks" idea when he's not here.
21:53:46  <indutny>bnoordhuis: ok, let me rephrase
21:53:51  <indutny>bnoordhuis: arbitrary javascript developers
21:54:00  <bnoordhuis>ooh... why didn't you say so?
21:54:11  <indutny>haha
21:54:19  <bnoordhuis>you should use a car analogy in that case. everyone understands car analogies
21:54:25  <indutny>god :)
21:54:26  <trevnorris>indutny: you're js dev should understand a pointer at least. all arrays/object are passed by pointer.
21:54:39  <indutny>trevnorris: yep, basic pointer knowledge :)
21:54:41  <trevnorris>if they don't, then they have other problems.
21:54:52  <indutny>that's why I was thinking about plates
21:54:54  <indutny>so
21:54:56  <indutny>returning back to it
21:55:04  <indutny>what if waiter would be putting dirty dishes back to the cabinet
21:55:13  <indutny>in the same places where he took them from
21:55:24  <indutny>and giving visitors only clean plates
21:55:25  <bnoordhuis>bad waiter?
21:55:27  <indutny>yes
21:55:29  <indutny>mad
21:55:41  <indutny>mad waiter
21:55:46  <indutny>so
21:55:52  <trevnorris>wait. so what does a dirty and a clean plate represent?
21:55:54  <indutny>when he sees that there're not enough clean plates
21:56:02  <indutny>trevnorris: free, occupied
21:56:07  <bnoordhuis>he kicks the dish washer?
21:56:16  <indutny>bnoordhuis: hahahahahahaha
21:56:44  <trevnorris>indutny: honestly i'd use the analogy of the tables in the restaurant.
21:57:06  <indutny>that's not really what's happening here
21:57:58  <bnoordhuis>a stack of crates. you keep stacking on crates until you hit the ceiling, then you start sorting them and throwing away the ones that are not used anymore
21:58:03  <trevnorris>well, think of it like this. there are several waiters, each one is given a section of the restaurant and are responsible for that. it's like gc and the different pages?
21:58:32  <trevnorris>or whatever that thing is called. ok, nm me. really don't know what i'm talking about anyways :P
21:58:46  <indutny>hahahaha
21:58:52  <indutny>bnoordhuis: crates are interesting
21:59:02  <indutny>bnoordhuis: but that's more like a stack
21:59:10  <indutny>bnoordhuis: and it isn't it in reality
21:59:15  <indutny>it is a bump allocation
21:59:19  <indutny>but perhaps I will stick to it
21:59:22  <bnoordhuis>okay, a warehouse then
21:59:23  <indutny>or a stack of plates
21:59:33  <indutny>why do I like plates that much
21:59:37  <indutny>perhaps, I'm too fodie
21:59:39  <indutny>foodie*
21:59:44  <bnoordhuis>you keep stuffing in crates until the warehouse is full, then you start sorting them out
22:00:19  <bnoordhuis>for kicks, have a smaller temp storage room in front of the warehouse
22:00:27  <bnoordhuis>(the young space)
22:00:32  <indutny>hahaha
22:00:33  <bnoordhuis>man, i'm good at this stuff
22:00:38  <trevnorris>oh man. a moving truck. that has happened to me many times. randomly placing boxes in the back until you realize you were an idiot and have to go back and start stacking stuff nicely.
22:00:49  <indutny>that's not what it is again
22:00:55  <indutny>you're not throwing away things
22:01:00  <indutny>when you're starting over again :)
22:01:08  <indutny>same with warehouse
22:01:16  <indutny>but if plates are not used anymore - they're just dirty
22:01:19  <indutny>and could be returned back
22:01:24  <indutny>but couldn't be used immediately
22:01:29  <trevnorris>well, i don't start over. I just start sorting stuff by weight and packing it better.
22:01:44  <indutny>trevnorris: but that's not what bump allocation does :)
22:01:51  <indutny>you slice the memor
22:01:54  <indutny>in page
22:01:55  * trevnorrisgoes back to coding javascript...
22:01:56  <indutny>into blocks
22:02:04  <indutny>and give them to users
22:02:07  <indutny>when you have no memory left
22:02:12  <indutny>you go through stack
22:02:17  <indutny>and decide which blocks are used
22:02:26  <indutny>and start marking them and their references
22:02:34  <indutny>then you discard everything that is not marked
22:02:50  <indutny>and either replace all blocks to the equal from another page
22:02:58  <indutny>or put not marked stuff into free-list
22:03:02  <indutny>depending on the algorithm
22:03:08  <indutny>also you may do mark-compact
22:03:13  <indutny>and move stuff to the start of the page
22:03:29  <indutny>anyway, finding analogy that works best for it
22:03:31  <trevnorris>you don't have to free a class member variable (when doing composition) right?
22:03:32  <indutny>is a bit problematic
22:03:42  <indutny>trevnorris: is it embedded?
22:03:49  <indutny>trevnorris: class A { B b }
22:03:53  <trevnorris>yeah
22:03:58  <indutny>if yes - it'll be destructed automatically
22:04:04  <trevnorris>cool. thanks.
22:04:42  <bnoordhuis>trevnorris: just to be sure, what kind of variable is it? a pointer?
22:04:51  <MI6>nodejs-master: #673 UNSTABLE smartos-ia32 (7/674) linux-x64 (3/674) smartos-x64 (10/674) osx-ia32 (3/674) http://jenkins.nodejs.org/job/nodejs-master/673/
22:05:35  <indutny>oh, I know I know
22:05:37  <trevnorris>bnoordhuis: no. from the examples i'm using, I was just going to: BaseWrap base_;
22:05:38  <indutny>hahaha
22:05:48  <indutny>concert and tickets
22:05:55  <indutny>you give away tickets from stack
22:06:02  * dshaw_joined
22:06:12  <bnoordhuis>trevnorris: okay. yeah, those get auto-destructed when the embedding class's destructor runs
22:06:16  <indutny>nah, no one does that
22:06:36  <trevnorris>cool. thanks.
22:06:50  <indutny>so, you've immigrants
22:06:56  <indutny>each got work permission
22:07:05  <indutny>and have family that requires permissions to stay
22:07:12  <indutny>when you're running low on permissions
22:07:19  <indutny>you must go through all immigrants
22:07:22  <indutny>find dead ones
22:07:26  <indutny>and take their permissions
22:07:34  <indutny>and also from their dead families
22:07:34  <trevnorris>wtf....
22:07:47  <indutny>bnoordhuis: I think I found good analogy
22:07:58  <bnoordhuis>are you _sure_ you don't post on slashdot?
22:08:02  <trevnorris>dead immigrants?
22:08:08  <indutny>trevnorris: deceased
22:08:10  <indutny>:)
22:08:25  <indutny>small country with high demands of cheap workers
22:08:34  <indutny>but it can't fit a lot of them
22:08:41  <trevnorris>hah, but do any immigrants get "terminated" early to make room for more desirable immigrants? ;P
22:08:41  <indutny>haha
22:08:52  <indutny>trevnorris: they couldn't be
22:08:58  <indutny>it is a democratic government
22:09:15  <indutny>as far as they're used - they can't be eliminatd
22:10:35  <indutny>ok...
22:10:42  <indutny>it might be a better idea to explain it as it is
22:11:06  <indutny>without all that shit
22:12:24  <indutny>my wife just proposed to use domino for analogy
22:12:29  <indutny>bnoordhuis: what do you think?
22:12:43  <bnoordhuis>domino is probably a safer choice than dead immigrants
22:13:02  <bnoordhuis>^ bash.org worthy quote
22:13:04  <indutny>you meant more tolerant, right?
22:13:25  <trevnorris>bnoordhuis: you recommended a book or something about C programming a little while ago. can't find the url. know what i'm talking about?
22:13:29  <trevnorris>i can't find the link
22:13:30  * TooTallNatequit (Remote host closed the connection)
22:13:37  * bradleymeckquit (Quit: bradleymeck)
22:13:48  <bnoordhuis>indutny: i think that in general, people are more tolerant of domino than dead immigrants, yes
22:13:55  * TooTallNatejoined
22:14:01  * Domenic_joined
22:14:28  <bnoordhuis>trevnorris: c programming?
22:14:39  <bnoordhuis>no bells are ringing just yet
22:15:18  <trevnorris>bugger. i was skimming the logs and swear I remember someone asking you about C standards, and you gave them a link.
22:15:41  * `3rdEdenjoined
22:15:43  <indutny>bnoordhuis: I don't know good books on this topic
22:15:55  <indutny>trevnorris: https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Coding+Standard
22:16:06  * `3rdEdenchanged nick to Guest16573
22:16:28  <bnoordhuis>what fedor said :) that's not so much about standards as it is about secure coding practices
22:16:34  <rendar>trevnorris, the best book about C programming ever: K&R
22:16:51  <bnoordhuis>they're somewhat related, of course. the things you don't know may end up killing you
22:17:01  <bnoordhuis>though, hopefully, not literally
22:17:20  <indutny>bnoordhuis: haha
22:17:26  <indutny>bnoordhuis: pills?
22:17:32  <bnoordhuis>trevnorris, rendar: don't know about k&r. it's a little long in the tooth by now
22:17:39  <trevnorris>ah yeah. that's the link.
22:17:49  <trevnorris>thanks.
22:17:51  <bnoordhuis>k&r is a very readable book, i'll give it that
22:17:59  <rendar>bnoordhuis, yeah its a little bit dated, but very insightful reading
22:18:14  <rendar>there i learned about binary trees for the first time, and why they're O(lg N) :)
22:18:18  <rendar>much years ago, eheh
22:18:25  <indutny>haha
22:18:28  <indutny>that's nice
22:18:32  <indutny>I learned that on ACMs
22:18:41  <indutny>when my solutions were failing to executed in a fixed amount of time
22:18:49  <rendar>:-)
22:19:15  <trevnorris>i mean, you're taking to someone that has learned as needs required. like, just learned what "composition" is today. I'd used it before from bnoordhuis usage in env.h, but never knew what it was called.
22:19:31  <trevnorris>like someone learning a language w/o ever taking a grammar class.
22:20:18  * c4miloquit (Remote host closed the connection)
22:20:39  <indutny>well
22:20:43  <indutny>that's what people usually do?
22:20:51  * abraxasjoined
22:21:29  <trevnorris>i dunno. it's the same way I learned js, but js never caused a segfault :P
22:25:50  * abraxasquit (Ping timeout: 268 seconds)
22:31:01  * rendarquit (Quit: i need to sleep, good night)
22:31:26  * Kakera_quit (Ping timeout: 240 seconds)
22:31:58  * saghulquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
22:33:13  * mikealquit (Quit: Leaving.)
22:33:45  * hzquit
22:36:09  <trevnorris>bnoordhuis: is it safe to do like:
22:36:09  <trevnorris>class B { template <typename T> inline void destroy(void* p) { delete static_cast<T*>(p); } };
22:36:09  <trevnorris>class A { private: B b_; public: ~A() { } };
22:36:37  <trevnorris>if that makes any sense. basically trying to destroy the class from the class member.
22:43:59  <trevnorris>would someone mind giving this a quick look over. i'm not sure if it's a sound (or even good) implementation idea: https://github.com/trevnorris/node/commit/15c979d
22:45:00  <bnoordhuis>trevnorris: not sure i follow
22:45:14  <bnoordhuis>who/what would call B::destroy<T>()?
22:45:22  <trevnorris>a weak callback.
22:45:34  <trevnorris>that was just for example than anything
22:45:48  <bnoordhuis>what type is T?
22:46:21  <trevnorris>the class that contains the class member. check out the github link just above.
22:46:33  <indutny>trevnorris: sounds a bit complicated :)
22:46:39  <trevnorris>i reimplemented weak object stuff
22:47:04  <bnoordhuis>trevnorris: wait, you want the embedded class to destruct the embedder?
22:47:14  <trevnorris>bnoordhuis: basically
22:47:35  <bnoordhuis>well... sure, it's possible. if it's considered good style, that's something else
22:47:46  <trevnorris>indutny: yeah. i'm trying to prevent inheritance hell. the AsyncWrap thing is touching a lot of classes it doesn't need to. so trying to work that out.
22:48:08  <indutny>trevnorris: ok
22:48:18  <indutny>trevnorris: I don't really enjoy it
22:48:24  <indutny>trevnorris: I think you should use virtual destructors instead
22:48:45  <trevnorris>man, that stupid Joyent header. makes git think small files are copies :P
22:48:56  <indutny>ttyl
22:48:57  <tjfontaine>what?
22:48:58  <indutny>sleep time
22:49:04  <bnoordhuis>sleep tight, fedor
22:49:08  <trevnorris>indutny: but wouldn't the class need to be inherited to use a virtual destructor?
22:49:19  <indutny>trevnorris: well, you choose the right base for it :)
22:49:26  <indutny>and use it among all embedded classes
22:49:37  <indutny>erm
22:49:39  <indutny>embedder*
22:49:52  <indutny>than embedded class might reference embedder via Base* pointer
22:49:56  <indutny>and delete it safely
22:50:13  <trevnorris>that's where it is now. there's a single base class that right now is inherited by almost everything: http://git.io/sOLwZg
22:50:13  <indutny>ttyl
22:50:14  <indutny>honestly
22:50:16  <indutny>its time to sleep
22:50:21  <trevnorris>heh, ok see ya
22:50:26  <indutny>see ya
22:50:33  <trevnorris>tjfontaine: who? when? where?
22:50:36  <tjfontaine>trevnorris: what was your problem with what header where?
22:50:45  <tjfontaine>oh
22:50:52  <tjfontaine>the copyright
22:50:56  <trevnorris>yup
22:50:57  <tjfontaine>that happens all the time
22:51:15  <bnoordhuis>trevnorris: https://github.com/trevnorris/node/commit/15c979d <- looks like an okay change imo
22:51:16  <tjfontaine>it's not just us. git is to blame :) welcome to the world of Content-Addressable-Storage
22:51:46  <trevnorris>bnoordhuis: cool. thanks. a lot of classes in crypto are setup that same way.
22:51:53  <trevnorris>tjfontaine: heh
22:52:04  <bnoordhuis>trevnorris: what does that BaseWrap class do btw?
22:52:40  <bnoordhuis>i guess i could skim that other commit and find out myself
22:52:52  <trevnorris>bnoordhuis: it's basically a slight tweak on WeakObject that made it easier to be below the AsyncWrap class: http://git.io/N04olg
22:53:16  <trevnorris>that way classes that need to be weak that don't make MakeCallback calls don't do the AsyncWrap checks.
22:53:22  <bnoordhuis>okay
22:53:41  <bnoordhuis>if you're embedding it everwhere, BaseWrap is something of a misnomer
22:53:54  <trevnorris>ok. what would be a better name?
22:54:02  <bnoordhuis>uh...
22:54:04  <trevnorris>ah yeah. now I see it.
22:54:25  <bnoordhuis>that'll teach me to bring up naming issues
22:54:33  <trevnorris>haha
22:55:09  <trevnorris>the class is meant to just deal w/ the Persistent object that's tied to an async event (e.g. ReqWrap/HandleWrap)
22:55:10  * jmar777joined
22:55:40  <trevnorris>ah, maybe BaseObject
22:56:01  <trevnorris>bnoordhuis: the slight change from WeakObject is that making the handle_ weak is optional.
22:56:19  <trevnorris>it's done in the constructor of the inheriting class, if it's necessary.
22:57:10  <trevnorris>though, also not sure I like that it currently requires the object to have an internal field count. doing a Wrap<T>(args.This(), this); in the constructor would be enough.
22:58:02  * bradleymeckjoined
23:01:33  <trevnorris>bnoordhuis: i'm trying to set it up so we can move to events being pull based like you discussed w/ me.
23:01:33  <trevnorris>run a single callback in the eloop and it hands back all contexts that have callbacks ready to be run.
23:01:47  <bnoordhuis>trevnorris: where else would you store the object pointer if the js object doesn't have internal fields?
23:02:03  <bnoordhuis>unless i'm misunderstanding what you mean, of course
23:02:14  <trevnorris>bnoordhuis: making it weak doesn't mean it needs an object pointer. that's passed via SetWeak()
23:02:33  <bnoordhuis>oh, like that. okay, that makes sense
23:02:56  <bnoordhuis>but then you can't expose the object to js land
23:04:22  <trevnorris>setting the object pointer is optional. like, say, in a HandleWrap it'll need one since from js it'll need to recover the pointer.
23:04:22  <trevnorris>but in a ReqWrap that usually passes the request object up to js and doesn't care about it anymore.
23:04:31  <trevnorris>basically any class where Unwrap<T>() is used.
23:05:15  * wavdedquit (Quit: Hasta la pasta)
23:05:40  <trevnorris>sorry, that making sense?
23:06:10  * mikealjoined
23:06:12  * swajjoined
23:07:09  * jmar777quit (Remote host closed the connection)
23:07:24  <bnoordhuis>trevnorris: i'm not clear on how a ReqWrap is different
23:07:51  * jmar777joined
23:08:10  <bnoordhuis>oh wait, i am :)
23:08:33  <bnoordhuis>yeah, i guess that makes sense
23:09:01  <MI6>nodejs-master-windows: #461 UNSTABLE windows-x64 (27/674) windows-ia32 (27/674) http://jenkins.nodejs.org/job/nodejs-master-windows/461/
23:09:16  <trevnorris>mainly, it's more a case of explicit > implicit. it wasn't apparent that some classes depended on the fact calling MakeWeak set the internal pointer.
23:09:53  <trevnorris>because you can make the handle weak w/o needing to set an internal pointer. if that makes sense.
23:12:03  * jmar777quit (Ping timeout: 246 seconds)
23:12:05  <bnoordhuis>yes, makes sense
23:14:31  <trevnorris>:)
23:16:25  <bnoordhuis>valgrind 3.9.0 is out and my FIOCLEX/FIONCLEX patches are still only half-merged...
23:16:47  <bnoordhuis>i submitted said patches in the summer of 2012 iirc
23:17:03  <bnoordhuis>at least linux's fixed
23:17:10  <trevnorris>wow, took some time.
23:18:18  <bnoordhuis>yeah. i won't make snarky comments about our slow release cycles anymore :)
23:18:28  <trevnorris>haha
23:22:46  * mikealquit (Quit: Leaving.)
23:25:35  * defunctzombiechanged nick to defunctzombie_zz
23:28:16  <trevnorris>bnoordhuis: also, is it bad for an inherited class to depend on the parent class having implemented some type of functionality?
23:28:52  <trevnorris>bnoordhuis: e.g. SSLWrap uses Unwrap<Base>(), but doesn't actually store the object itself. just uses args.This().
23:29:14  * amartensquit (Read error: Connection reset by peer)
23:29:40  <bnoordhuis>trevnorris: i can't say without more context. in general though, the principle of least surprise should apply
23:30:15  <trevnorris>now, class Connection also uses Unwrap, so it's apparent that it needs that functionality. but if some class inherited SSLWrap w/o needing to Unwrap, SSLWrap wouldn't have that available.
23:31:14  <trevnorris>basically, SSLWrap just does an Unwrap on args.This() depending on the fact the inheriting class set the class pointer on the object.
23:31:35  <bnoordhuis>ah. that's kind of an implicit dependence
23:31:54  <trevnorris>ok
23:32:01  <bnoordhuis>not a great thing from a maintenance perspective because it's easy to overlook later on, when you make changes
23:32:21  <trevnorris>yeah. hence why i'm bringing it up now :)
23:32:38  <trevnorris>because i was segfaulting in a not very obvious way.
23:32:43  <bnoordhuis>right
23:33:05  <bnoordhuis>if at all possible, write it in a way that, when incompatible changes are made later on, result in a compile-time error
23:34:03  <trevnorris>ah, ok. i'll see if I can't work that in. thanks.
23:39:18  * paulfryzelquit (Remote host closed the connection)
23:42:41  * bradleymeckquit (Quit: bradleymeck)
23:45:09  * pachetquit (Quit: leaving)
23:45:58  * dshaw_quit (Quit: Leaving.)
23:49:40  * bradleymeckjoined
23:52:41  * testr0nquit (Quit: ...)
23:52:59  * robonerdjoined
23:53:27  * robonerdquit (Remote host closed the connection)
23:53:42  * AvianFluquit (Ping timeout: 246 seconds)
23:53:47  * bradleymeckquit (Client Quit)
23:56:36  * Raynos_joined
23:56:51  <bnoordhuis>let gensym = let x = ref 0 in fun () -> let x' = !x in incr x ; string_of_int x' |> (^) "g"
23:56:58  <bnoordhuis>i love how much ML can look like line noise
23:57:23  <trevnorris>wtf.
23:57:37  * robonerdjoined
23:57:43  * robonerdquit (Remote host closed the connection)
23:58:17  <trevnorris>bnoordhuis: iyo, what would be the easiest functional programming language to learn?
23:58:35  <bnoordhuis>trevnorris: probably a scheme
23:58:42  <trevnorris>cool.
23:59:00  <bnoordhuis>the parens takes some getting used to with some people
23:59:29  <bnoordhuis>when writing lisp code, just pretend you're writing out the AST by hand. it's not too far from the truth
23:59:42  <trevnorris>hehe