00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:00:50  <dap>isaacs, tjfontaine: Thanks.
00:01:13  <isaacs>tjfontaine: oh, ok, cool
00:01:15  <tjfontaine>dap: no no, thank *you* :)
00:02:05  <isaacs>really, one of the best things that Joyent has done for node is get a bunch of experienced systems engineers to use it on a daily basis.
00:02:48  <isaacs>if it wasn't for that, all this stuff would go to benefit ruby or somethign
00:02:55  <tjfontaine>nod
00:03:11  * loladirojoined
00:04:23  * bnoordhuisquit (Ping timeout: 255 seconds)
00:08:59  <isaacs>tjfontaine: what are your feelings about https://github.com/joyent/node/pull/3872?
00:09:06  <isaacs>tjfontaine: i haven't been following it closely.
00:09:15  <isaacs>but it looks like ben is saying it's pending a change to libuv?
00:09:38  <isaacs>i *adore* his loop diagrams, btw.
00:09:43  <isaacs>we need to collect these and put them in the docs.
00:12:38  <tjfontaine>isaacs: oh, I forgot about libuv 699, my feelings on the bug are that I'm mostly ashamed that I missed the 1ms delay bug in my initial implementation
00:13:04  <tjfontaine>isaacs: and yes that loop diagram needs to be reappropriated
00:14:08  <tjfontaine>I wouldn'y classify libuv 699 necessarily as a blocker, but it helps make sure that the loop diagram is true on all platforms
00:27:57  <isaacs>right
00:28:02  <isaacs>yeah, i'm gonna land it
00:28:17  <isaacs>all tests pass, and it's faster, libuv#699 is just as broken with this as without it.
00:28:25  <isaacs>and we can fix it whenever.
00:28:31  <isaacs>(libuv is officially internal api)
00:29:51  <MI61>joyent/node: Shigeki Ohtsu master * 401cef7 : doc: add setImmediate execute timing description (+1 more commits) - http://git.io/nQOWAw
00:30:00  * c4miloquit (Remote host closed the connection)
00:32:14  * loladiroquit (Quit: loladiro)
00:51:31  <tjfontaine>isaacs: thanks
00:51:54  <isaacs>tjfontaine: thank shigeki :)
00:52:09  <tjfontaine>heh indeed, I wish he lurked on irc more
00:56:28  <dap>Hi TooTallNate
00:56:50  <TooTallNate>dap: yo
00:56:59  <dap>Would you call yourself a GYP expert? :)
00:57:24  <TooTallNate>dap: not really :p but i've done a couple things that impressed me
00:57:25  <TooTallNate>dap: sup?
00:59:03  <dap>I'm looking into adding CTF support (debug information with very low space overhead) to Node. This requires two new build steps: for each .o file, you run a command that modifies that file in place, and after you link the final executable you run another command that modifies it in place.
00:59:20  <tjfontaine>hrm
01:00:22  <dap>Thinking out loud: maybe I can make the "node" target explicitly depend on a target which takes the object files as inputs, but I want it to produce no outputs.
01:00:43  <dap>That can cover the object files step, but I'm not sure how to run a step after the final "node" binary gets created
01:00:55  <tjfontaine>I've not seen an example of gyp where things work around the .o's
01:01:23  <dap>We do some trickery for the DTrace object files, but in that case, we're still producing a new object file that's going to be linked in, so it's not *so* gross.
01:02:06  <TooTallNate>dap: you can define a target of type "none" that does arbitrary actions, and have it depend on the "node" main target
01:02:35  <dap>and then "make $mytarget" instead of just "make"?
01:02:59  <TooTallNate>dap: i'm not sure… don't all top-level gyp targets get built by default?
01:03:12  <dap>Maybe
01:03:17  <dap>ISTR that.
01:05:10  <dap>TooTallNate: this seems promising. How do I refer to the "node" executable built by the "node" target so that I can make it an input to my action?
01:05:32  <TooTallNate>that… is a good question…
01:08:39  <dap>PRODUCT_DIR may be the answer.
01:08:53  <TooTallNate>ya that sounds about right
01:18:09  * qmx|awaychanged nick to qmx
01:19:47  <dap>TooTallNate: That seems to have gotten me the final step. Can I use that to do something for each object file too? (I don't see how, but I'm not yet accustomed to all the ways of tricking GYP ;)
01:20:39  <TooTallNate>dap: this is like the middle step you're on now?
01:20:57  <dap>Yeah. It needs to happen for each object file after it's built, but before the final link.
01:21:12  <TooTallNate>hmmm
01:21:51  <TooTallNate>dap: you might be able to define a rule https://github.com/rbranson/node-ffi/blob/master/deps/libffi/libffi.gyp#L64-L80
01:22:47  <dap>But how do I get that rule to be invoked? It needs to output something that the top-level "node" rule depends on, right?
01:23:25  <dap>I could imagine an elaborate thing where the rule emits a valid but basically empty ${inputfile}_ctf.o, and I added ${inputfile}_ctf.cc to the list of sources. But gross.
01:23:50  <TooTallNate>dap: ya that's the hard part i think… usually you'd define those as "sources" but we want to process the output .o files
01:23:57  <TooTallNate>from the previously specified .cc files
01:27:24  * hzquit
01:28:06  <roxlu>yay! just got p2p video streaming with VP8 (webm) working using libuv
01:28:18  <roxlu>for who is interested: https://github.com/roxlu/roxlu/blob/master/addons/Webm/src/webm/VPXStream.cpp <-- networking code + framegrabber
01:28:33  * jmar777quit (Remote host closed the connection)
01:29:10  * jmar777joined
01:33:23  * jmar777quit (Ping timeout: 248 seconds)
01:42:27  <dap>TooTallNate: Still not sure, but I'll pick this up next week. Thanks for the help!
01:42:45  <TooTallNate>dap: no prob! (i didn't do much :p)
01:43:31  <dap>Your idea solved at least half the problem :)
01:46:05  <isaacs>yeah, not going to release 0.9.10 tonight, i think
01:46:54  <dap>Later guys.
01:46:56  * dapquit (Quit: Leaving.)
01:49:20  * dapjoined
01:49:40  * dapquit (Client Quit)
01:59:07  * mikealquit (Quit: Leaving.)
02:01:40  * brsonquit (Ping timeout: 248 seconds)
02:18:00  * wolfeidaujoined
02:20:01  * wolfeidauquit (Read error: Connection reset by peer)
02:27:26  * wolfeidaujoined
02:33:34  * pooyaquit (Quit: pooya)
02:43:17  <MI61>joyent/node: isaacs master * 9299168 : test: Bump up debugger timeouts 200ms is still short enough for occasion (+3 more commits) - http://git.io/U80o2g
02:47:26  * TooTallNatequit (Quit: Computer has gone to sleep.)
02:48:36  * mikealjoined
02:49:46  <MI61>joyent/node: isaacs master * 8476aef : fs: Change default WriteStream config, increase perf This increases fs.W - http://git.io/yU-kxg
03:02:52  <MI61>joyent/node: Gil Pedersen master * 0a9930a : stream: Pipe data in chunks matching read data This creates better flow - http://git.io/94c76A
03:09:32  <isaacs>landin patches, all day long.
03:09:38  <isaacs>landin patches while i sing my song
03:20:11  * c4milojoined
03:23:17  * kazuponjoined
03:47:52  * trevnorrisjoined
03:50:46  * loladirojoined
03:54:45  <trevnorris>isaacs: awesomeness. now time to jam out on those streams.
03:55:23  <isaacs>trevnorris: we still need to have benchmarks that actually work.
03:55:46  <isaacs>trevnorris: especially if you're going to start polishing streams. i don't want you wasting effort chasing mice.
03:55:59  <isaacs>trevnorris: we need to be cutting into the thick beefy heart of our regressions
03:56:37  <trevnorris>mmmm.... thick beefy heart. sounds good to me =)
04:00:17  * kazuponquit (Remote host closed the connection)
04:00:46  <trevnorris>isaacs: i'll try to setup a script this weekend that will run over a slew of the tests with a steady variance in parameters.
04:02:03  <trevnorris>isaacs: the idea being to help us understand how/if the benchmarks can be improved for stability. so they don't have to be run many times for good results.
04:02:12  <trevnorris>sound like a plan?
04:02:38  <isaacs>yeah, that sounds fantastic.
04:03:46  <trevnorris>cool.
04:03:52  <isaacs>trevnorris: if we can get something so that `make bench` is no more than, say, ±2% variable from one run to the next, and takes < 10 minutes to run, then we've got something we can actually use to evaluate progress in the real world.
04:04:32  <isaacs>if a patch is < 2% of a difference, it doesn't matter, and if it takes longer than ~10 minutes to run, then no one will run it.
04:05:57  <trevnorris>isaacs: might be over the top, but what about a "check these while developing" type of runs (i like to keep those to around a minute for quick iteration) and a larger suit for before submitting pr?
04:06:16  <isaacs>trevnorris: sure.
04:06:30  <trevnorris>i'm checking my benchmarks just as often as i'm checking the tests, and don't like either of them taking more than a couple minutes.
04:06:32  <isaacs>trevnorris: so, `make bench-http` should be fast enough that we can run it quickly
04:06:46  <isaacs>trevnorris: or `make bench-fs` if you're doing fs stuff
04:07:31  <isaacs>already on benchmark-refactor-2, `make bench` runs fs, tls, net, http
04:07:44  <isaacs>if any of those sink, it's a problem.
04:08:03  <isaacs>but like, if you're way deep in lib/fs.js, you're not going to somehow accidentally break the http bench
04:08:35  <isaacs>the key is that you don't wnat to make a change, then run the benchmark, and then think it was a good/bad change based on machine entropy.
04:08:38  <trevnorris>yeah, and any actual breaks will show up in the tests.
04:08:39  <isaacs>that's no way to prgram :)
04:08:48  <trevnorris>lol, seriously.
04:08:50  <isaacs>yeah, totally
04:09:06  <isaacs>it's like using a ouija board as your text editor
04:10:09  <trevnorris>feel like i've done that before. sort of, "eh, no idea what's going on but i'll just change this variable for fun and see what happens"
04:10:26  <isaacs>oh, i do that all the time
04:10:43  <isaacs>if you have really good tests and benchmarks, you can kinda stumble around until you hit something, and then go back and figure out why it works.
04:10:50  <isaacs>and then usually polish it up a bunch
04:10:59  <isaacs>but that's like, absolutely an essential exploratory technique
04:11:08  <isaacs>totally depends on having valid tests/benches
04:11:49  <trevnorris>definitely.
04:19:36  <trevnorris>isaacs: thought for events. use .call() and .apply() on .once() callbacks, but think i'm going to try using .bind() on the others as they come in.
04:19:50  <trevnorris>then they can just be run with fn(arg[0], arg[1], ...)
04:19:57  <isaacs>hm.
04:20:07  <isaacs>should be effectively equivalent
04:20:28  <isaacs>also, you can do the unrolling trick that we had in process._makeCallback
04:20:43  <isaacs>i think we do that for one or two, but then we .apply()
04:21:00  * wolfeidauquit (Read error: Connection reset by peer)
04:21:47  <trevnorris>yeah. right now we use .call() for args < 3, then .apply(this, args.slice(1)) (sudo-code way)
04:21:56  <trevnorris>so either way every call requires a change of context.
04:22:33  <isaacs>right
04:22:43  * wolfeidaujoined
04:22:57  <isaacs>in my experience, fn.bind(obj)(arg) is about equivalent to fn.call(obj, arg)
04:23:01  <isaacs>if not worse
04:23:08  <isaacs>but, definitely worth testing
04:23:16  <trevnorris>well, you only need to run .bind() once. then call it normally from then on.
04:23:33  <isaacs>right, but i mean, even calling the function multiple times, is equivalent to using .call
04:24:22  <trevnorris>actually the reason i'm brining it up is because my benchmarks just finished. and
04:24:51  <trevnorris>the initial bind is 47x's more expensive then using .call(), but then it's equally as quick as calling the function directly.
04:25:29  <trevnorris>so the question is if, statistically, for every function callback passed, they average out to at least 47+ calls.
04:25:36  <trevnorris>if that's the case then there's a savings.
04:27:12  <trevnorris>isaacs: the main reason is that v8 can inline a bound function. by whatever magic sauce it uses.
04:27:41  <isaacs>i see
04:27:50  <isaacs>well, i'm sure you know what i'll say :)
04:27:58  <isaacs>if it makes tls or tcp or http or fs faster, i'm all for it :)
04:28:10  <isaacs>we do have a lot of events that only ever fire once, though, or never at all
04:28:22  <isaacs>if you bind in .on() then you're moving the cost up front
04:28:28  <isaacs>consider a .on('error', neverHappens)
04:28:55  <isaacs>i mean, you could count function calls and .bind() the hot ones..
04:28:59  <isaacs>but now you'er redoing what v8 does
04:29:36  <trevnorris>lol, yeah. thought about that for a sec. that seemed like a crazy overkill solution. even for me. ;-)
04:30:02  <isaacs>also, heuristics generally suck.
04:30:06  <isaacs>they're super duper magical
04:30:13  <isaacs>hard to reason about
04:30:19  <isaacs>qv: v8's inlining logic
04:30:36  <trevnorris>yeah, fn can't have more than N characters. what's up with that?
04:31:48  <trevnorris>isaacs: was doing some additional tests. v8 has improved their call to from cc from to js a lot. if we upgrade to 3.16 in v0.11 then i think passing part of events to cc could be a big win.
04:32:14  <isaacs>"passing part of events"?
04:32:50  <isaacs>like, having node::Emit(obj, event, argv)?
04:34:33  <trevnorris>like ->Call() takes context, and N arguments. so no need for apply() or call()
04:35:21  <isaacs>right.
04:35:30  <isaacs>except... we emit most events from JS
04:35:31  <isaacs>not from C++
04:35:39  <isaacs>and moving EventEmitter into C++ kinda sucks
04:37:54  <trevnorris>isaacs: well, just another crazy idea. sure you've noticed that i'm full of those.
04:38:01  <isaacs>hehe
04:38:02  <isaacs>sur
04:38:25  <trevnorris>btw, love the "don't do this without a good reason" comment.
04:39:47  * TooTallNatejoined
04:41:07  * TooTallNatequit (Client Quit)
04:44:57  <trevnorris>isaacs: well, while i'm waiting for a build. if events were, say, move to cc. where would you hypothetically like them to live (e.g. node_events.cc or directly in node.cc)?
04:46:39  <trevnorris>does anyone else see that "test/simple/test-http-get-pipeline-problem.js" is failing with an "Abort (core dumped)"?
04:55:02  * c4miloquit (Remote host closed the connection)
04:57:59  * qmxchanged nick to qmx|away
04:58:22  * c4milojoined
05:09:28  * kazuponjoined
05:53:00  * c4miloquit (Remote host closed the connection)
06:29:33  * AvianFluquit (Remote host closed the connection)
06:30:25  * kazuponquit (Remote host closed the connection)
07:00:43  * kazuponjoined
07:07:17  * trevnorrisquit (Quit: Leaving)
07:09:50  * kazuponquit (Ping timeout: 252 seconds)
07:18:45  * loladiroquit (Quit: loladiro)
08:01:22  * benoitcquit (Excess Flood)
08:06:05  * benoitcjoined
08:06:42  * kazuponjoined
08:11:17  * kazuponquit (Ping timeout: 244 seconds)
08:17:53  * rjequit (Quit: Leaving...)
08:20:49  * rjejoined
08:20:49  * rjequit (Excess Flood)
08:22:02  * rjejoined
08:22:02  * rjequit (Excess Flood)
08:22:35  * rjejoined
08:22:35  * rjequit (Excess Flood)
08:28:27  * rjejoined
09:03:14  * mikealquit (Read error: Connection reset by peer)
09:07:41  * kazuponjoined
09:08:26  * mikealjoined
09:12:58  * kazuponquit (Ping timeout: 256 seconds)
09:26:36  * bnoordhuisjoined
10:06:33  * bnoordhuisquit (Ping timeout: 252 seconds)
10:09:24  * kazuponjoined
10:13:13  * bnoordhuisjoined
10:14:08  * kazuponquit (Ping timeout: 255 seconds)
10:31:23  <txdv>bnoordhuis: yoohoo
10:32:29  <txdv>bnoordhuis: https://github.com/joyent/libuv/pull/712 https://github.com/joyent/libuv/pull/710
10:34:50  * bnoordhuisquit (Ping timeout: 252 seconds)
10:35:19  <txdv>FUUUUUUU
10:45:48  * hzjoined
11:10:15  * kazuponjoined
11:14:53  * kazuponquit (Ping timeout: 252 seconds)
11:20:28  * TheJHjoined
11:22:29  * wolfeidauquit (Remote host closed the connection)
11:55:14  * benoitcquit (Excess Flood)
12:05:05  * benoitcjoined
12:11:33  * kazuponjoined
12:16:00  * kazuponquit (Ping timeout: 252 seconds)
13:00:05  * benoitcquit (Excess Flood)
13:05:07  * benoitcjoined
13:11:57  * kazuponjoined
13:16:00  * benoitcquit (Excess Flood)
13:19:37  * benoitcjoined
13:30:12  * kazuponquit (Ping timeout: 248 seconds)
13:48:50  * mralephjoined
13:54:12  * c4milojoined
14:27:09  * kazuponjoined
14:31:12  * AvianFlujoined
14:31:53  * kazuponquit (Ping timeout: 255 seconds)
14:34:31  * kazuponjoined
14:36:49  * kazupon_joined
14:36:52  * kazuponquit (Read error: Connection reset by peer)
15:22:48  * benoitcquit (Excess Flood)
15:24:09  * benoitcjoined
15:25:13  * c4miloquit (Remote host closed the connection)
15:35:04  * c4milojoined
15:36:16  * xaqjoined
15:53:01  * jmar777joined
16:01:16  * benoitcquit (Excess Flood)
16:02:40  * benoitcjoined
16:03:38  * c4miloquit (Remote host closed the connection)
16:34:01  * bradleymeckquit (Quit: bradleymeck)
16:41:54  * qmx|awaychanged nick to qmx
17:10:04  * qmxchanged nick to qmx|away
17:22:59  * benoitcquit (Excess Flood)
17:32:11  * benoitcjoined
17:43:20  * bradleymeckjoined
17:48:24  * bradleymeckquit (Ping timeout: 244 seconds)
17:49:36  * bradleymeckjoined
17:57:14  * c4milojoined
18:23:39  * benoitcquit (Excess Flood)
18:30:40  * benoitcjoined
18:33:00  * bnoordhuisjoined
18:34:08  * bradleymeckquit (Ping timeout: 256 seconds)
18:34:45  * bradleymeckjoined
18:39:25  * mikealquit (Quit: Leaving.)
18:59:00  * bnoordhuisquit (Ping timeout: 256 seconds)
19:03:08  * mikealjoined
19:18:59  * `3rdEdenjoined
19:21:27  * kazupon_quit (Remote host closed the connection)
19:44:03  * benoitcquit (Excess Flood)
19:46:42  * loladirojoined
19:52:11  * benoitcjoined
19:58:54  * mikealquit (Quit: Leaving.)
20:00:10  * mikealjoined
20:06:22  * c4milo_joined
20:20:12  * `3rdEdenquit (Remote host closed the connection)
20:20:20  * xaqquit (Remote host closed the connection)
20:29:15  * mikealquit (Quit: Leaving.)
20:31:53  * kazuponjoined
20:37:11  * kazuponquit (Ping timeout: 240 seconds)
20:42:59  * AvianFluquit (Remote host closed the connection)
20:44:24  * benoitcquit (Excess Flood)
20:48:11  * benoitcjoined
20:50:42  * perezdjoined
20:52:32  * loladiroquit (Quit: loladiro)
20:59:28  * mikealjoined
21:00:42  * c4miloquit (Remote host closed the connection)
21:01:18  * loladirojoined
21:04:50  * c4milo_quit (Remote host closed the connection)
21:05:39  * wolfeidaujoined
21:08:26  * mikealquit (Ping timeout: 255 seconds)
21:15:18  * mikealjoined
21:16:06  * mikealquit (Client Quit)
21:18:05  * AvianFlujoined
21:18:38  * bradleymeckquit (Quit: bradleymeck)
21:24:39  * benoitcquit (Excess Flood)
21:25:43  * benoitcjoined
21:25:45  * benoitcquit (Excess Flood)
21:26:42  * benoitcjoined
21:28:04  * jmar777quit (Remote host closed the connection)
21:28:42  * jmar777joined
21:30:56  * AvianFluquit (Remote host closed the connection)
21:33:19  * mikealjoined
21:33:26  * jmar777quit (Ping timeout: 256 seconds)
21:51:09  * benoitcquit (Excess Flood)
21:58:13  * loladiroquit (Quit: loladiro)
22:00:13  * benoitcjoined
22:08:13  * loladirojoined
22:20:15  * AvianFlujoined
22:24:00  * papertigersquit (Ping timeout: 260 seconds)
22:48:54  * mikealquit (Quit: Leaving.)
22:56:20  * benoitcquit (Excess Flood)
22:59:37  * hzquit
23:01:12  * benoitcjoined
23:02:05  <txdv>ARGGH
23:03:55  * mikealjoined
23:04:12  * mikealquit (Client Quit)
23:34:59  <isaacs>happy birthday, node
23:37:32  * mikealjoined
23:47:45  * stagasquit (Ping timeout: 248 seconds)
23:53:56  * loladiroquit (Quit: loladiro)