00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:07  * ircretaryjoined
00:02:02  * perezdquit (Quit: perezd)
00:04:30  * TheJHjoined
00:04:41  * indexzeroquit (Quit: indexzero)
00:30:10  * karupaneruraquit (Excess Flood)
00:33:07  * karupanerurajoined
00:33:24  * loladirojoined
00:33:24  * paddybyersquit (Ping timeout: 248 seconds)
00:40:11  * piscisaureus_joined
00:40:24  * piscisaureus_quit (Client Quit)
00:40:36  <TooTallNate>isaacs: did you see my end(fn) patch?
00:41:16  <isaacs>TooTallNate: haven't looked yet.
00:41:17  <isaacs>sorry
00:41:39  <isaacs>TooTallNate: is this something we actually need to support, though?
00:41:48  <isaacs>i guess it is if it's supported by the 0.8 api..
00:41:50  <TooTallNate>frankly, i think yes
00:42:02  <TooTallNate>we're "backwards compatability's bitch" as you once said
00:42:08  <isaacs>TooTallNate: yes.
00:42:10  <isaacs>we are.
00:42:12  * isaacscries
00:42:15  <isaacs>TooTallNate: where's the patch?
00:42:44  <TooTallNate>isaacs: patch here https://github.com/TooTallNate/node/commit/a9c4a20331d123dc38dcc878af335d88e1933562
00:42:55  <isaacs>k, one sec
00:43:03  <TooTallNate>isaacs: i know it breaks at least node-formidable on v0.9.8 https://github.com/felixge/node-formidable/issues/191
00:43:12  <TooTallNate>well, not having the patch that is
00:43:45  <trevnorris>isaacs: looks like you have so much time for this and all, but here's your example quickly rewritten: https://gist.github.com/trevnorris/4719197
00:43:46  <isaacs>all tests still pass?
00:43:55  <isaacs>TooTallNate: ^
00:44:00  <isaacs>TooTallNate: if so, lgtm
00:44:25  <TooTallNate>isaacs: the relevant test passes, but i'll run the suite just to be sure
00:44:26  <TooTallNate>and then land
00:44:32  <isaacs>TooTallNate: yes, please do
00:44:41  <isaacs>TooTallNate: messing around in these classes, it's surprising sometimes what can break.
00:44:48  <TooTallNate>indeed
00:45:28  <TooTallNate>haha, this "resolve python" thing makes me realize where my python exe is
00:45:33  <TooTallNate> /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
00:45:43  <TooTallNate>nice homebrew
00:46:09  <trevnorris>isaacs: oh, and fwiw. you're right. fs write is about 2x's as slow
00:47:24  <trevnorris>wait... other way around...
00:47:27  <isaacs>trevnorris: 2x's as slow huh?
00:47:31  <isaacs>2x's as fast?
00:47:37  <trevnorris>let me run those again. one sec.
00:47:49  <isaacs>trevnorris: be advised, fs.WriteSTream throughput speed starts moving around a LOT once you're bound by the fs
00:47:56  <isaacs>trevnorris: since file systems are awful liars.
00:48:05  <isaacs>they cache stuff to hell and back
00:48:58  <trevnorris>yeah... this is harder to benchmark properly then the tcp was... how is that possible?
00:50:56  <isaacs>:)
00:51:11  <isaacs>just wait until you get into benchmarking using ab
00:51:38  <isaacs>were you MUST wait for 120 seconds between tests, and increase the ephemeral ports, etc.
00:51:47  <trevnorris>ugh... is it at all possible to create node-ab and use that?
00:51:49  * c4milojoined
00:52:43  <isaacs>haha
00:52:48  <isaacs>not if we want to have our tests mean anythign
00:53:10  <isaacs>actually, part of my growing aversion to using bench-timer is that it does a lot of node stuff.
00:53:29  <isaacs>which, for anything bigger than a microbench, makes the numbers a bit more suspect
00:54:55  <trevnorris>isaacs: what's the alternative?
00:55:28  <isaacs>trevnorris: take a hrtime at the start, then an hrtime at the end, and divide the number of operations yo udid by the difference.
00:55:41  <isaacs>trevnorris: but with as little "outside of this file" code as possible.
00:55:50  <isaacs>except for the code under test
00:56:28  * c4miloquit (Ping timeout: 272 seconds)
00:56:35  <trevnorris>that's exactly what bench-timer does, and being included as an external has no discernible effect on the benchmarks. or else I wouldn't have created it that way.
00:57:22  <trevnorris>it has been tested in every use case using `--trace-opt --trace-deopt --trace-inlining --code-comments` to make sure it never shows up.
00:57:47  <trevnorris>only scenario where it will is when you're incrementing numbers so quickly is when they leave the Smi range.
00:57:52  <trevnorris>but that would happen regardless.
00:58:56  <trevnorris>and the simple hrtime start/end leaves out use cases like bnoordhuis asked for (to only run one test in a suit against valgrind, etc.)
00:59:16  * lohkeypart
00:59:32  <trevnorris>isaacs: anways, i've updated https://gist.github.com/trevnorris/4719197 with the numbers at the bottom.
00:59:39  <isaacs>kewl
00:59:48  * AvianPhonejoined
00:59:55  <trevnorris>regression gets worse when buffer size increases.
00:59:58  <TooTallNate>isaacs: so only "test/simple/test-process-getgroups.js" is failing
00:59:59  * bnoordhuisquit (Ping timeout: 260 seconds)
01:00:06  * EhevuTovquit (Quit: This computer has gone to sleep)
01:00:30  <TooTallNate>isaacs: but the same happens without the patch
01:00:32  <TooTallNate>so landing
01:00:51  <isaacs>TooTallNate: weird.
01:00:57  <isaacs>TooTallNate: what results do you get from it?
01:00:59  * EhevuTovjoined
01:01:04  <isaacs>TooTallNate: wanna fix that, too?
01:01:05  <isaacs>;)
01:01:14  <TooTallNate>i can take a look
01:01:20  <TooTallNate>getting:
01:01:21  <TooTallNate>AssertionError: 9 == 13
01:01:22  <TooTallNate> at i (/Users/nrajlich/node/test/simple/test-process-getgroups.js:33:12)
01:01:44  <MI6>joyent/node: Nathan Rajlich master * a9c4a20 : stream: make Writable#end() accept a callback function This is more back - http://git.io/zsNAHA
01:06:16  * EhevuTovquit (Ping timeout: 245 seconds)
01:08:58  <trevnorris>isaacs: is it possible to do another thing w/ fs like you did with tcp_wrap?
01:09:54  <TooTallNate>trevnorris: it's software - of course it's possible :D
01:13:53  <trevnorris>TooTallNate: lol. yeah.
01:14:14  <TooTallNate>apple probably thought their OS was secure…
01:14:21  <TooTallNate>there's always… some… way…
01:18:03  <trevnorris>man, fs tests need to be done a couple dozen times to get a good result set.
01:18:59  <trevnorris>isaacs: after running the tests many times (and closing my browsers, sheesh) looks like master is ~20% slower than v0.8
01:19:10  <trevnorris>so about the same as net is showing.
01:19:14  <isaacs>k
01:20:09  <trevnorris>isaacs: and fwiw I ran tests against both our scripts, and they came out the same.
01:20:15  <trevnorris>(just as a sanity check)
01:20:49  * trevnorrisquit (Quit: Leaving)
01:22:18  * sblomquit (Ping timeout: 276 seconds)
01:24:05  * TheJHquit (Ping timeout: 252 seconds)
01:28:12  * sblomjoined
01:30:45  * mikealquit (Quit: Leaving.)
01:34:40  <isaacs>kewl
01:35:01  <isaacs>indutny: i have a new incentive to review your tls patch now. just realized that's why a few npm tests are failing to exit in a timely fashion.
01:38:04  * bradleymeckjoined
01:55:35  * abraxasjoined
02:00:55  * mikealjoined
02:10:24  * EhevuTovjoined
02:11:56  <TooTallNate>Readable#push() is really confusing to me
02:12:08  <TooTallNate>now there's 2 ways i can implement my Readable stream
02:12:13  <TooTallNate>and they don't really play well together
02:12:50  <TooTallNate>like… why do i have to define an empty _read() if it's a push-based stream?
02:15:21  * kazuponjoined
02:16:32  * kazuponquit (Remote host closed the connection)
02:16:43  * kazuponjoined
02:19:20  <isaacs>TooTallNate: don't define an *empty* _read
02:19:25  <isaacs>TooTallNate: how would you do backpressure otherwise?
02:19:30  <isaacs>TooTallNate: if push() returns false, you must pause
02:19:38  <isaacs>TooTallNate: and nto resume the source until you get _read called
02:20:09  <TooTallNate>ohhhh, so i think that helped me understand
02:20:17  <TooTallNate>it's still confusing though
02:21:06  <isaacs>yeah, it's a bit oddball
02:25:36  <TooTallNate>well whatevs… we'll wait for the user feedback i guess
02:25:53  <TooTallNate>i had a *feeling* that someone was gonna report that .read(0) thing though
02:25:57  * EhevuTovquit (Quit: This computer has gone to sleep)
02:27:09  <isaacs>yeah, the read(0) thing is weird.
02:27:17  <isaacs>but, otoh.. when *should* we read?
02:27:22  <isaacs>we can't do that for repls, or sockets
02:27:36  <isaacs>or else it'll keep stuff open incorrectly
02:28:01  <TooTallNate>well i guess that's when .push() comes in I thought
02:28:39  <isaacs>TooTallNate: so push() should trigger a read(0)?
02:28:43  <isaacs>TooTallNate: i don't get it
02:29:23  <TooTallNate>i mean ya maybe
02:29:34  <TooTallNate>the guy said setting "needsReadable" in push() does it as well
02:29:45  <TooTallNate>but that doesn't work for streams that only implement _read()
02:29:55  <TooTallNate>(my preferred way of implementing Readable)
02:30:26  <isaacs>right
02:30:33  <isaacs>for *most* streams you really just want to implement _read
02:30:39  <isaacs>but that would require massive changes to libuv
02:30:56  <TooTallNate>agree'd, but i don't think that's the implication with .push() atm
02:30:58  <isaacs>or would at least, changes to stream_wrap
02:31:03  * bradleymeckquit (Quit: bradleymeck)
02:31:15  <TooTallNate>the people i've talked to (trevnorris) assume .push() is the "main" implementing API
02:31:40  <TooTallNate>and then are like "wtf is _read() for?"
02:31:56  <isaacs>right
02:32:06  <TooTallNate>and probably don't even know to check the return value in that case
02:32:08  <isaacs>further proof of my theory that no one reads docs ever.
02:32:14  <TooTallNate>hahaha
02:32:21  <isaacs>because this is clearly documented
02:32:22  <isaacs>with examples.
02:32:41  * mikealquit (Quit: Leaving.)
02:34:08  <TooTallNate>i don't think the docs explain well enough that .push() is meant for implementors
02:34:15  <TooTallNate>i know, i know, patch welcome :p
02:34:27  <isaacs>yeah
02:34:41  <isaacs>you're a big time author now :)
02:34:45  <isaacs>write some docs ;)
02:34:51  <TooTallNate>it's almost like, if you're doing a .push() stream, the function should be _resume() instead
02:34:55  <TooTallNate></bikeshed>
02:35:06  <TooTallNate>and ditch the "size" arg :p
02:35:16  * qmx|awayquit (Ping timeout: 272 seconds)
02:35:23  <TooTallNate>isaacs: in the docs, in your example, you don't call _read()'s cb… is that ok?
02:35:29  <TooTallNate>http://nodejs.org/docs/v0.9.8/api/stream.html#stream_readable_push_chunk
02:35:32  <isaacs>TooTallNate: yeah, it's fine
02:35:43  <tjfontaine>TooTallNate: fwiw, darwin's getgroups is "broken" it doesn't return the same set as `id -G`, python's os.getgroups() agrees, and their test suite skips a similar test if run on darwin
02:35:56  <TooTallNate>isaacs: ok :\ a little weird again
02:35:59  <isaacs>TooTallNate: _read's cb = function(er,chunk) {if(er)this.emit('error',er);else this.push(chunk) }
02:36:10  <TooTallNate>oh, haha, nice
02:36:27  <TooTallNate>i was just thinking to myself a few minutes ago "it's like _read() should be built on top of .push()"
02:36:31  <TooTallNate>and so it is… :p
02:36:50  <TooTallNate>tjfontaine: ok good to know, i didn't take a look into that one yet
02:37:10  <TooTallNate>tjfontaine: did we recently add that function?
02:37:20  <tjfontaine>TooTallNate: ya, it's a .9 thing
02:37:26  <TooTallNate>ahhh
02:37:27  <TooTallNate>k
02:38:34  * c4milojoined
02:39:46  <tjfontaine>I haven't found a good explanation as to why getgroups doesn't do the right thing
02:43:30  * c4miloquit (Ping timeout: 272 seconds)
02:46:14  <TooTallNate>tjfontaine: well we should check the `id` program's source code :D
02:46:22  <TooTallNate>see what it's doing differently
02:46:33  <tjfontaine>TooTallNate: indeed I'm looking at dtruss at the moment :)
02:46:40  <TooTallNate>hahah
02:46:45  <TooTallNate>one step ahead of me as always
02:47:44  <TooTallNate>i can't even find the damn source
02:48:03  <TooTallNate>google only cares about iD software :p
02:48:06  <TooTallNate>the company
02:48:37  <tjfontaine>darwin id comes up with the wrong things as well :)
02:48:55  <TooTallNate>http://www.opensource.apple.com/source/shell_cmds/shell_cmds-116/id/id.c
02:49:02  <isaacs>ok, lockfile issues should be fixed entirely in npm 1.2.7
02:49:18  <isaacs>(tomorrow: 0.9.9 and 0.8.19, for reals)
02:49:20  <TooTallNate>tjfontaine: what do you mean?
02:49:24  * isaacs&
02:49:39  <TooTallNate>isaacs: kewl, the native addon module version change has been annoying me :p
02:49:45  <tjfontaine>TooTallNate: nothing
02:49:46  <TooTallNate>need v0.9.9 in PATH!
02:50:11  * sblomquit (Ping timeout: 256 seconds)
02:51:56  * qmx|awayjoined
02:52:00  <TooTallNate>tjfontaine: getting close https://gist.github.com/TooTallNate/4719821#file-id-c-L357-L411
02:53:36  <tjfontaine>ya I'm just not sure why it's doing what it's doing
02:56:01  * TooTallNatequit (Quit: Computer has gone to sleep.)
02:57:45  <tjfontaine>I love doing a full rebuild on this laptop, blah
03:03:20  * dapquit (Quit: Leaving.)
03:03:23  * skebcio_joined
03:03:50  * EhevuTovjoined
03:04:56  * skebcioquit (Read error: Connection reset by peer)
03:07:03  * mikealjoined
03:20:07  * bradleymeckjoined
03:20:14  * qmx|awayquit (Ping timeout: 272 seconds)
03:22:46  <tjfontaine>ircretary: tell TooTallNate http://bugs.python.org/msg99908
03:22:46  <ircretary>tjfontaine: I'll be sure to tell tootallnate
03:26:57  * qmx|awayjoined
03:30:51  * AvianPhonequit (Ping timeout: 276 seconds)
03:31:56  * bradleymeckquit (Quit: bradleymeck)
03:33:59  * jmar777joined
03:34:08  * trevnorrisjoined
03:44:29  * AvianPhonejoined
03:57:03  * Aviaphonejoined
03:58:07  <trevnorris>isaacs: 3 reasons why _read breaks end user intuition
03:58:14  <trevnorris>doesn't look like the event emitter syntax
03:58:17  <trevnorris>except for modules, only time a function is assigned, not passed
03:58:21  <trevnorris>'_' are pretty much only seen used in source core
03:58:24  <trevnorris>so the line "you are expected to override this method" takes a while to sink in
03:58:29  <trevnorris>and eyes are pulled directly to .push() which makes a lot more sense
03:58:55  <trevnorris>once everyone patiently explained it, made a lot of sense. but was a paradigm shift. =)
04:00:06  * AvianPhonequit (Ping timeout: 276 seconds)
04:04:39  * Aviaphonequit (Ping timeout: 276 seconds)
04:10:50  * brsonquit (Quit: leaving)
04:11:27  * abraxasquit (Ping timeout: 276 seconds)
04:20:10  * qmx|awaychanged nick to qmx
04:24:33  * c4milojoined
04:29:16  * c4miloquit (Ping timeout: 272 seconds)
04:31:37  * AvianPhonejoined
04:35:15  * indexzerojoined
04:40:31  <mmalecki>isaacs: ping?
04:40:53  * TooTallNatejoined
04:42:19  * abraxasjoined
04:44:17  * TooTallNatequit (Client Quit)
04:59:10  * c4milojoined
05:05:01  <mmalecki>isaacs: if you could merge and publish https://github.com/isaacs/rimraf/pull/16, it would be awesome
05:09:21  * kazuponquit (Remote host closed the connection)
05:13:32  * qmxchanged nick to qmx|away
05:14:39  * kazuponjoined
05:15:30  * AvianPhonequit (Ping timeout: 276 seconds)
05:18:00  * txdvquit (Read error: Connection reset by peer)
05:18:08  * txdvjoined
05:19:20  * c4miloquit (Remote host closed the connection)
05:24:17  * AvianFlujoined
05:29:16  * txdvquit (Read error: Connection reset by peer)
05:29:24  * txdvjoined
05:37:55  * EhevuTovquit (Quit: This computer has gone to sleep)
05:49:01  * txdvquit (Read error: Connection reset by peer)
05:49:10  * txdvjoined
05:49:35  * TheJHjoined
06:03:12  * bradleymeckjoined
06:08:51  * perezdjoined
06:09:45  * c4milojoined
06:14:24  * c4miloquit (Ping timeout: 272 seconds)
06:14:25  * perezdquit (Quit: perezd)
06:15:27  * TheJHquit (Ping timeout: 260 seconds)
06:22:12  * AvianFluquit (Remote host closed the connection)
06:31:02  * paddybyersjoined
06:51:44  * wolfeidauquit (Remote host closed the connection)
06:59:36  * mikealquit (Read error: Connection reset by peer)
07:00:05  * mikealjoined
07:19:27  * c4milojoined
07:19:59  * CoverSlidequit (Ping timeout: 255 seconds)
07:20:58  * CoverSlidejoined
07:27:52  * paddybyersquit (Ping timeout: 272 seconds)
07:37:01  * kazuponquit (Remote host closed the connection)
07:37:52  * bradleymeckquit (Read error: Connection reset by peer)
07:38:13  * bradleymeckjoined
07:44:51  * rendarjoined
07:48:15  * c4miloquit (Remote host closed the connection)
07:50:10  * loladiroquit (Quit: loladiro)
08:13:31  * toothrquit (Ping timeout: 260 seconds)
08:15:41  * indexzeroquit (Quit: indexzero)
08:15:46  * toothrjoined
08:47:33  * rendarquit (Read error: Connection reset by peer)
08:48:10  * rendarjoined
08:50:59  * rendar_joined
08:51:33  * rendarquit (Read error: Connection reset by peer)
08:54:48  * indexzerojoined
08:58:59  * rendar_quit (Ping timeout: 240 seconds)
09:03:02  * paddybyersjoined
09:05:52  * kazuponjoined
09:06:15  * rendarjoined
09:06:24  * kazuponquit (Read error: Connection reset by peer)
09:06:53  * kazuponjoined
09:07:22  * kazuponquit (Remote host closed the connection)
09:17:37  * stagasjoined
09:22:13  * stagas_joined
09:24:17  * stagas__joined
09:24:45  * stagasquit (Ping timeout: 276 seconds)
09:24:48  * stagas__changed nick to stagas
09:25:33  * `3rdEdenjoined
09:25:50  * bradleymeckquit (Quit: bradleymeck)
09:27:14  * stagas_quit (Ping timeout: 255 seconds)
09:27:35  * hzjoined
09:31:40  <MI6>joyent/node: Bryan Cantrill master * 202b5db : v8: loosen artificial mmap constraint Fixes #4010. - http://git.io/l92P6A
10:08:22  * trevnorrisquit (Quit: Leaving)
10:34:27  * wolfeidaujoined
11:16:51  * mraleph1quit (Ping timeout: 248 seconds)
11:31:41  * c4milojoined
11:35:45  * bnoordhuisjoined
11:35:48  * c4miloquit (Ping timeout: 248 seconds)
11:40:04  * indexzeroquit (Quit: indexzero)
11:44:17  * jmar777quit (Remote host closed the connection)
11:44:52  * jmar777joined
11:45:37  * indexzerojoined
11:49:18  * jmar777quit (Ping timeout: 264 seconds)
12:05:41  * `3rdEden_joined
12:05:41  * `3rdEden_changed nick to V1
12:06:10  * `3rdEdenquit (Disconnected by services)
12:06:16  * V1changed nick to `3rdEden
12:06:16  * abraxasquit (Read error: Connection reset by peer)
12:06:49  * abraxasjoined
12:11:36  * abraxasquit (Ping timeout: 272 seconds)
12:30:58  * sgallaghjoined
12:39:28  * paddybyersquit (Ping timeout: 272 seconds)
12:47:19  * cjdjoined
12:48:44  <cjd>Hi guys, I have a question, I needed an analog of event_base_loopbreak() from libevent so I wrote a function which uses uv_walk() and uv_unref() on every event then when the event loop ends, the function which starts the loop walks the events again and calls uv_ref() on them all.
12:49:26  <cjd>I call this "loopbreak" function from inside of a callback and I'm finding it works ok on linux but for some reason it fails on apple.
12:49:38  <cjd>Am I relying on undefined behavior here or is this a potential bug?
13:00:30  <bnoordhuis>cjd: sounds like it should work
13:00:53  <bnoordhuis>cjd: "and calls uv_ref() on them all" <- you mean uv_unref, right?
13:02:08  <cjd>the callback calls unref, the main function calls ref after the event loop ends
13:02:38  <cjd>I will collect more info and try to write a test, it still very well might be a bug in how I'm adding events so I'll try to get more info
13:02:38  <bnoordhuis>if you have a test case, i'll look into it
13:02:50  <cjd>thx
13:17:26  * c4milojoined
13:19:58  <saghul>cjd I guess you are looking for something like this: https://github.com/joyent/libuv/pull/676 unfortunately looks like it won't make it into libuv :-S
13:21:54  * c4miloquit (Ping timeout: 272 seconds)
13:24:20  <saghul>bnoordhuis any chance I could get uv_udp_connect/6 into libuv 0.10.0 if I submit a PR in the next few days?
13:24:49  <bnoordhuis>saghul: i think txdv was working on unifying that, actually
13:25:02  <saghul>oh, nice!
13:25:15  <saghul>txdv are you adding uv_udp_connect/6 ?
13:25:22  <bnoordhuis>oh wait, connect
13:25:26  <bnoordhuis>why do you want that?
13:26:23  <saghul>we had a short discussion the ML, if a udp socket is connected the kernel filters the packets coming from elsewhere
13:27:27  * mralephjoined
13:27:51  <bnoordhuis>ah right, i remember that
13:28:00  <bnoordhuis>well, okay i guess
13:28:44  <MI6>joyent/node: Ben Noordhuis master * 01ee551 : typed arrays: only share ArrayBuffer backing store Follow browser behavi - http://git.io/99Nf2g
13:29:27  <bnoordhuis>^ that commit makes me sad :(
13:34:00  <indutny>haha
13:34:41  <cjd>saghul: yeah, I didn't want to suggest a stop() function because it's not needed for nodejs so it's probably born dead
13:37:26  <saghul>cjd well, it is useful if you leave node out of the scope, but anyway, I count that as a lost battle :-)
13:37:44  <saghul>bnoordhuis ok, I'll try to get those done tonight / tomorrow
13:43:58  * piscisaureus_joined
13:44:24  <piscisaureus_>bnoordhuis: re timing for close callbacks -> I don't think it matters
13:44:51  <piscisaureus_>bnoordhuis: you should be aware that windows makes no guarantees about when the close callback will run (it may take multiple loop iterations)
13:45:02  <piscisaureus_>bnoordhuis: so I think it's fine leaving this unspecified
13:45:16  <bnoordhuis>okay, maybe
13:45:18  <piscisaureus_>(except of course we do it ASAP)
13:45:26  <saghul>hum
13:45:42  <saghul>so if a loop is stopped because you closed all handles
13:46:05  <saghul>and you call run(UV_RUN_NOWAIT) is there still a chance that close handles didn't run?
13:46:08  <saghul>piscisaureus_ ^
13:47:03  <bnoordhuis>saghul: if with 'loop is stopped' you mean uv_run(UV_RUN_DEFAULT) returns then no
13:47:17  <bnoordhuis>all the close cbs will have run
13:47:45  <saghul>bnoordhuis that's what I meant, then it does work as I expected it then :-)
13:48:30  <piscisaureus_>saghul: good question. I know I considered this possibility but I don't recall what we decided.
13:49:49  <bnoordhuis>ah... it might work different on windows, of course
13:50:33  <bnoordhuis>saghul: with uv-unix, at least, it works like you expect it to :)
13:50:54  <saghul>I know if works like that on unix, I have an assert to check, but I haven't tested it on Windows yet
13:51:08  <saghul>I guess it's a good time to test it then
13:51:21  <bnoordhuis>i guess it should work the same on windows
13:51:31  <piscisaureus_>saghul: ok here's the answer
13:51:34  <bnoordhuis>uv-win tests that endgame_handles == NULL before it exits
13:51:44  <piscisaureus_>saghul: for the purpose of "loop has work to do" closing counts
13:52:09  * hzquit (Disconnected by services)
13:52:10  <piscisaureus_>saghul: so libuv normally won't return from uv_run as long as there are handles which are closing
13:52:12  * hzjoined
13:52:14  * paddybyersjoined
13:52:39  * hzquit (Read error: Connection reset by peer)
13:52:45  <indutny>isaacs: I'll find you
13:52:48  <indutny>and probably kill you
13:52:52  <saghul>piscisaureus_ please elaborate on that "normally" :-) is there any chance this is not the case?
13:52:54  <indutny>streams2 are so complicated
13:53:07  <indutny>piscisaureus_: hi bertje
13:53:09  <indutny>how are you?
13:53:37  <piscisaureus_>saghul: uv_run(UV_RUN_ONCE) should return 1 because there will be more close callbacks
13:54:06  <piscisaureus_>saghul: if you unref a handle it's different.
13:54:27  <indutny>bnoordhuis: what do you think about lock elision http://lwn.net/SubscriberLink/534758/bcb45583bc25268d/ ?
13:54:29  <piscisaureus_>saghul: that's the only normal non-normal case that is not a bug :-)
13:54:57  <piscisaureus_>indutny: hi fedor. I am fine but also busy
13:55:11  <bnoordhuis>indutny: do i need to have an opinion?
13:55:34  <saghul>piscisaureus_ I see, then looks like we are ok :-) thanks!
13:56:18  <piscisaureus_>saghul: "@iElectric: Awesome, libuv for #python! #fosdem" <-- you responsible for that?
13:57:45  <saghul>piscisaureus_ yep, that was me :-)
13:58:00  <piscisaureus_>saghul: nice! You did a talk?
13:58:41  <saghul>piscisaureus_ yes, in the Python devroom. Here ae the slides: http://www.slideshare.net/saghul/how-do-eventloops-work-in-python
13:58:54  <piscisaureus_>saghul: you need to tweet these things :-)
13:59:02  <saghul>I did!
13:59:03  <indutny>bnoordhuis: not necessary
13:59:53  <piscisaureus_>saghul: ah I wasn't even following you. Silly me.
14:00:10  <saghul>piscisaureus_shame on you Mr! xD
14:00:45  * hzjoined
14:11:41  <MI6>joyent/node: Ben Noordhuis master * b58efe7 : test: add cluster EADDRINUSE test Check that having a worker bind to a p - http://git.io/7Wv4PQ
14:14:29  * paddybyersquit (Read error: Connection reset by peer)
14:14:35  * paddybyers_joined
14:15:00  <indutny>bnoordhuis: what do you think about 5daa701a
14:15:16  <indutny>Andreas has contributed another amazing patch, isn't he?
14:15:51  <bnoordhuis>indutny: no opinion so far. what about it?
14:15:58  * cjdquit (Ping timeout: 240 seconds)
14:16:04  <indutny>bnoordhuis: well, it contains bug I'm fighting with
14:16:07  <indutny>in a few words
14:16:15  <indutny>if stream emits 'finish' first, and 'close' later
14:16:26  <indutny>when another stream is piped into it
14:16:33  <indutny>that another stream won't be unpiped
14:16:39  <indutny>because 'finish' listener removes 'close' listener
14:16:44  <indutny>pretty nice change
14:17:07  <indutny>I guess 'finish' listener should call unpipe() too
14:17:10  <bnoordhuis>'that another stream' == 'that other stream'?
14:17:31  <indutny>yes
14:17:32  <indutny>so
14:17:35  <bnoordhuis>right
14:17:36  <indutny>src.pipe(dst)
14:17:38  <indutny>dst.emit('finish')
14:17:40  <indutny>dst.emit('close')
14:17:45  <indutny>src.unpipe(dst) won't be called
14:17:58  <bnoordhuis>why are there two events anyway?
14:18:09  <bnoordhuis>i.e. what's the difference between finish and close?
14:18:23  <indutny>'close' is socket-specific thing
14:18:27  <indutny>basically
14:18:32  <indutny>half-open socket may emit 'finish'
14:18:34  <indutny>and not emit 'close'
14:18:40  <indutny>or other way
14:18:47  <indutny>'close', but no 'finish'
14:19:05  <indutny>'finish' is emitted when .end() is called
14:19:11  <indutny>after all queued data is consumed
14:19:37  <indutny>ok, better wait for isaacs anyway
14:20:13  <bnoordhuis>if it's like you're describing
14:20:27  <bnoordhuis>then 'finish' seems like a more appropriate place to unpipe
14:20:53  <indutny>well
14:21:00  <indutny>the problem is that 'close' may happen without 'finish' event
14:21:30  <indutny>because its emitted from ._destroy()
14:21:43  <indutny>I'll open pull request
14:21:59  <indutny>with test case...
14:22:13  <indutny>all tests are passing with this fix
14:23:52  <bnoordhuis>indutny: i'm looking at https://github.com/joyent/node/pull/4718
14:23:57  <bnoordhuis>but it's all chinese to me
14:24:05  <indutny>the same thing on my end
14:24:51  <indutny>bnoordhuis: ask questions for particular lines :)
14:24:58  <indutny>and I'll either add comments in code
14:25:01  <indutny>or answer them inline
14:25:27  <indutny>brb
14:29:37  <bnoordhuis>saghul: e p o l l a n d k q u e u e s u p p o r t b o t h m e c h a n i s m s
14:29:46  <bnoordhuis>hah, that's awesome
14:29:59  <bnoordhuis>but anyway, i don't think kqueue supports edge-triggered i/o
14:30:14  <saghul>according to the docs it seems to, let me find a link
14:32:31  <saghul>bnoordhuis IIRC using EV_CLEAR is the flag that makes kqueue behave edge-triggered
14:33:30  <indutny>ONESHOT
14:33:55  <indutny>EV_ONESHOT
14:34:50  <bnoordhuis>HEADSHOT!
14:34:55  <bnoordhuis>where is LOUDBOT when you need it?
14:35:19  <bnoordhuis>interesting. i checked freebsd's kqueue implementation a while back
14:35:33  <bnoordhuis>and it didn't look like it supported ET i/o
14:35:37  <indutny>haha
14:35:38  <bnoordhuis>maybe i should look at it again :)
14:35:39  <saghul>indutny oneshot remove the event from the queue, but don't you want to keep it?
14:35:39  <indutny>well
14:35:42  <indutny>I haven't tried it
14:35:50  <saghul>but clear it's state, that is
14:36:06  <indutny>saghul: aaah
14:36:14  <indutny>saghul: well, may be you're right
14:36:31  <indutny>yes, you're right
14:36:35  <indutny>bnoordhuis: EV_CLEAR
14:37:27  <bnoordhuis>When the last writer disconnects, the filter will set EV_EOF in flags. This may be cleared by passing in EV_CLEAR, at which point the filter will resume waiting for data to become available before returning.
14:37:39  <bnoordhuis>that's for EVFILT_READ
14:37:47  <indutny> EV_CLEAR After the event is retrieved by the user, its state is reset. This is useful for filters which report state transitions instead of the current state. Note that
14:37:47  <indutny> some filters may automatically set this flag internally.
14:37:59  <indutny>ah
14:38:01  <indutny>I got your idea
14:38:43  <indutny>looks like there're no edge-triggered apis
14:38:54  <bnoordhuis>doesn't look like it, no
14:39:11  * toothrchanged nick to toothrot
14:39:44  <indutny>and this is sad
14:39:52  <indutny>because its relatively easy to implement
14:39:54  <indutny>in kernel
14:39:55  * jmar777joined
14:40:00  <bnoordhuis>yes
14:40:20  <bnoordhuis>i think it's actually easier to implement ET semantics than LT semantics
14:40:27  <bnoordhuis>from a kernel developer's perspective
14:40:32  <indutny>obviously
14:40:49  <bnoordhuis>fun fact, the original epoll implementation was ET only
14:41:23  <bnoordhuis>they only added LT semantics because most programmers couldn't wrap their head around edge-triggered i/o :)
14:41:43  <indutny>well, in many cases LT is more useful
14:41:45  <bnoordhuis>of course, ET is less forgiving of mistakes
14:41:51  <indutny>indeed
14:41:55  <indutny>you need to handle more
14:43:56  <bnoordhuis>so the EU is going to cut its own budget
14:44:03  <bnoordhuis>hell freezes over, pigs fly!
14:45:53  <indutny>haha
14:46:00  <indutny>interesting news
14:46:23  <indutny>russia makes having accounts in another countries illegal
14:46:28  <indutny>well, you can have account
14:46:32  <indutny>but you can't receive any money on it
14:46:38  <indutny>from outside russia
14:46:48  <indutny>so if you want to get money on us account
14:46:55  <indutny>you'll need to wire them to russian bank first
14:46:58  <indutny>and only then to that account
14:47:30  <indutny>bnoordhuis: btw, https://github.com/joyent/node/pull/4723
14:47:44  <indutny>tests are passing on my machine
14:48:28  <indutny>gtg
14:48:29  <indutny>dinner
14:57:47  * qmx|awaychanged nick to qmx
14:58:28  * qmxquit (Changing host)
14:58:28  * qmxjoined
15:00:16  * c4milojoined
15:03:41  * philips_quit (Excess Flood)
15:08:41  * philips_joined
15:12:39  <MI6>joyent/libuv: Ben Noordhuis master * 60dd395 : Revert "darwin: merge uv_cond_timedwait implementation" Using mach_absol - http://git.io/vUgT6A
15:18:49  <bnoordhuis>^ i have a macbook again, can you tell?
15:21:59  <isaacs>bnoordhuis: woot
15:22:13  <isaacs>bnoordhuis: just curious, is that related to the mac spending gobs of time in gettimeofday?
15:22:23  <bnoordhuis>isaacs: no, not really
15:22:25  <bnoordhuis>that's a v8 thing
15:22:27  <isaacs>bnoordhuis: k. didn't think so.
15:22:37  <isaacs>yeah, i think it has more to do with us spending gobs of time in gc
15:22:55  <isaacs>and v8's tick perf stuff isnt' telling us the full stack there
15:25:15  <bnoordhuis>if that's a problem, you could consider raising TickSample::kMaxFramesCount
15:25:22  <bnoordhuis>it's capped at 64 frames now
15:27:06  * indexzeroquit (Quit: indexzero)
15:33:47  <MI6>joyent/libuv: Ben Noordhuis master * 8d746ff : unix: remove scandir prototype workaround in fs.c It's not necessary for - http://git.io/r8NN7w
15:35:27  <tjfontaine>bnoordhuis: btw, getgroups is "broken" on darwin, the result differs from `id -G` python skips the test in their testsuite, we should probably do the same
15:35:45  <bnoordhuis>tjfontaine: yes, i read that in the logs
15:35:52  <bnoordhuis>it depends on _DARWIN_C_SOURCE?
15:36:05  <tjfontaine>that's what I thought, I tried setting it, no change
15:36:36  <tjfontaine>the source to id uses getgrouplist_2 which is an undocumented api, but the python 2.6 apple branch uses it as well
15:37:07  <bnoordhuis>btw, it seems to work okay for me
15:37:13  <bnoordhuis>$ out/Release/node -p 'process.getgroups()'
15:37:13  <bnoordhuis>[ 20, 401, 402, 12, 33, 61, 79, 80, 81, 98, 100, 204 ]
15:37:16  <tjfontaine>the test?
15:37:20  <bnoordhuis>test too
15:37:56  <tjfontaine>which version of osx?
15:38:03  <bnoordhuis>10.8.2
15:38:16  <bnoordhuis>$ uname -a
15:38:17  <bnoordhuis>Darwin hermes.local 12.2.1 Darwin Kernel Version 12.2.1: Thu Oct 18 12:13:47 PDT 2012; root:xnu-2050.20.9~1/RELEASE_X86_64 x86_64
15:38:39  <tjfontaine>interesting
15:38:57  <bnoordhuis>it's failing for you?
15:39:16  <tjfontaine>ya, it's returning 9 elements, and id is returning 13, similarly for nate
15:40:02  <tjfontaine>I'm backing out my hacks as I was playing and rebuilding
15:40:44  <tjfontaine>./node_g test/simple/test-process-getgroups.js
15:40:44  <tjfontaine>[ 20, 402, 501, 12, 61, 79, 80, 81, 98 ]
15:40:45  <tjfontaine>[ 20, 402, 501, 12, 33, 61, 79, 80, 81, 98, 100, 204, 401 ]
15:41:07  <tjfontaine>d -Gn
15:41:09  <tjfontaine>staff com.apple.sharepoint.group.1 access_bpf everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer com.apple.access_screensharing
15:41:47  <bnoordhuis>same version of os x or?
15:42:10  <tjfontaine>Darwin Kernel Version 12.2.0
15:42:13  <tjfontaine>so I'm a rev behind
15:42:46  <tjfontaine>or that could be just a point for your model, as I'm not seeing an update
15:51:36  * loladirojoined
15:53:23  * bradleymeckjoined
15:54:49  * loladiroquit (Client Quit)
15:55:31  <indutny>isaacs: hoya
15:55:45  <indutny>isaacs: is regression test sort of thing that fails before commit
15:55:47  <indutny>and works after? :)
16:05:22  * TheJHjoined
16:15:54  <isaacs>indutny: yes.
16:16:03  <isaacs>indutny: so that we can know if we break it like that again :)
16:16:07  <isaacs>ie, to prevent regressions
16:20:27  * dapjoined
16:21:08  * paddybyers_quit (Ping timeout: 272 seconds)
16:22:48  <indutny>ok
16:23:00  <indutny>isaacs: I mean, I can easily create artificial test case
16:23:13  <indutny>but it might be pretty hard to do the same thing with net.Socket
16:23:24  <isaacs>yeah, dont' worry about net.Socket
16:23:42  <isaacs>just do something dumb like pipe a fake reader into a fake writer, then emit finish on it, and verify that you gt an unpipe
16:23:49  <isaacs>i think there are some tests like that already
16:23:58  <indutny>o
16:24:00  <indutny>k
16:24:05  <indutny>n
16:24:05  <indutny>o
16:24:05  <indutny>t
16:24:08  <indutny>_
16:24:09  <indutny>w
16:24:10  <indutny>i
16:24:10  <indutny>t
16:24:11  <indutny>h
16:24:11  <indutny>_
16:24:12  <indutny>f
16:24:12  <indutny>i
16:24:13  <indutny>n
16:24:13  <indutny>i
16:24:14  <indutny>s
16:24:14  <indutny>h
16:29:11  * bradleymeckquit (Quit: bradleymeck)
16:33:10  <indutny>isaacs: https://github.com/joyent/node/pull/4723
16:33:54  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
16:34:12  <indutny>isaacs: it might sound wrong to you, but this is exactly what happens with net.Socket
16:34:33  <indutny>when allowHalfOpen=false
16:34:37  <isaacs>orly?
16:34:42  <indutny>yes
16:34:49  <isaacs>what's piping into the socket?
16:34:54  <indutny>.destroySoon() is called when socket is experiencing EOF
16:34:59  <indutny>well EncryptedStream
16:34:59  <isaacs>or rather, who's *ending* the socket?
16:35:01  <isaacs>ohhhhhhh
16:35:03  <isaacs>right.
16:35:05  <isaacs>it ends itself.
16:35:08  <isaacs>nice.
16:35:11  <indutny>yep
16:35:13  <isaacs>yes, that is correct.
16:35:19  <indutny>LGTY?
16:35:20  <isaacs>ok, yes, please land this patch.
16:35:23  <isaacs>wait
16:35:27  <isaacs>does the test actually fail in master?
16:35:36  <indutny>yes
16:35:37  <isaacs>ok.
16:35:39  <indutny>go try it
16:35:40  <indutny>:)
16:35:40  <isaacs> acomment in there would be nice
16:35:43  <indutny>just to be sure
16:35:50  <indutny>ok
16:35:51  <isaacs>about what that is for. because the test looks a bit trivial
16:36:00  <isaacs>at least to say what the bug is, or a link to this pull req
16:36:07  <isaacs>i guess we can just look at the commit
16:36:08  <isaacs>i'm just lazy
16:36:14  <isaacs>yeah, whatever, land it, lgtm
16:37:29  <isaacs>ok! 0.8 release starting now
16:37:40  * CoverSlidequit (Ping timeout: 248 seconds)
16:38:35  <indutny>:)
16:39:00  <MI6>joyent/node: Fedor Indutny master * c024d2d : streams: both `finish` and `close` should unpipe Otherwise sockets that - http://git.io/KKvE7A
16:39:57  <MI6>joyent/node: isaacs v0.8 * 5aef65a : npm: Upgrade to v1.2.10 - http://git.io/W9-cuw
16:41:47  <indutny>isaacs: what will be included in 0.8 release?
16:42:13  <indutny>documentation fixes, zlib fixes
16:42:14  <indutny>ok
16:42:15  <indutny>:)
16:42:25  <indutny>enough to publish it
16:43:13  <MI6>joyent/libuv: isaacs created tag node-v0.8.19 - http://git.io/t6LzZw
16:43:26  <isaacs>and a lot of npm bugfixing in cases where you have tons of parallel installs of the same package.
16:43:32  <isaacs>adn some windows glob stuff for npm, too
16:43:42  <isaacs>bugfixes for everyone!
16:45:15  * hzquit (Disconnected by services)
16:45:19  * hzjoined
16:45:53  <bnoordhuis>ah, you already landed it
16:46:37  <MI6>joyent/node: isaacs created branch v0.8.19-release - http://git.io/mmnXKg
16:46:41  <isaacs>review changelog? ^
16:47:24  <indutny>lgtm
16:47:46  <indutny>bnoordhuis: I've already pushed it, sorry
16:47:56  <indutny>but basically it just should not throw
16:48:56  <isaacs>bnoordhuis: there's already some tests that 'finish' will always get called.
16:49:05  <isaacs>on writable streams
16:49:47  <indutny>isaacs: after you'll publish and do all that stuff
16:49:47  <indutny>please don't fogret to take a look at tls-streams2
16:50:08  <isaacs>indutny: yes, i'm very eager now, since i've tracked it down to the stupid long pause at theend of most npm commands.
16:50:17  <isaacs>indutny: since the socket isn't getting destroyed right.
16:50:22  <isaacs>by the http client
16:51:29  * CoverSlidejoined
16:52:08  <bnoordhuis>isaacs: changelog lgtm
16:52:49  * mikealquit (Quit: Leaving.)
16:54:01  * indexzerojoined
16:54:29  <bnoordhuis>nathan turns 24 today. oh, they grow up so fast!
16:59:04  <indutny>ok
16:59:32  * CoverSli1ejoined
17:00:15  <isaacs>bnoordhuis, indutny: do you think we should have dtls in core?
17:00:22  <isaacs>(datagram tls)
17:00:30  <indutny>I guess no
17:00:42  <indutny>noone has ever asked us about it
17:00:48  <isaacs>well, someone is asking me about it :)
17:00:54  <isaacs>and on the list
17:00:54  <indutny>who is he?
17:00:58  <indutny>well
17:00:59  <indutny>he's not asking
17:01:03  <indutny>he saying he can implement it
17:01:10  <isaacs>yeah
17:01:10  <indutny>:)
17:01:15  <indutny>that's a big difference
17:01:17  <isaacs>he's saying that it has to be in core, for some reasons
17:01:28  <indutny>well, lets wait for his patch
17:01:28  <isaacs>i'm thinking, show me the code, and i'll show you how to make it an npm modue.
17:01:33  <indutny>yes :)
17:01:35  <indutny>exactly
17:01:37  <isaacs>he's asking me permission to send us a patch.
17:01:44  <isaacs>clearly not an oss veteran, this dude.
17:01:49  <isaacs>but still, well intentioned.
17:01:55  <isaacs>i don't want to tell him to shove off, of course.
17:03:23  <tjfontaine>isaacs: clearly you need to try harder at being a bofh
17:09:10  <isaacs>bofh?
17:09:21  <isaacs>bully of fisty hardiness?
17:09:34  * bnoordhu1sjoined
17:09:35  <tjfontaine>heh http://en.wikipedia.org/wiki/Bastard_Operator_From_Hell
17:09:39  <isaacs>ohhh... ok
17:09:43  <isaacs>yes, i fail at bofh
17:13:19  <indutny>:)
17:13:20  <indutny>I can do it
17:13:31  <indutny>sometimes I feel really misantropic
17:13:42  <indutny>s/t/th/
17:18:58  * bnoordhu1squit (Ping timeout: 240 seconds)
17:31:46  * AvianFlujoined
17:44:12  <isaacs>wow, all tests pass.
17:44:16  <isaacs>swish release?
17:44:21  <MI6>joyent/node: isaacs created tag v0.8.19 - http://git.io/BIrbQQ
17:46:31  * hzquit
17:47:00  * garbagecollectiojoined
17:47:01  <MI6>joyent/node: isaacs v0.8 * ccf2712 : Now working on 0.8.20 (+2 more commits) - http://git.io/U25lOw
17:47:01  <AvianFlu>I thought that said "swedish release" at first... I'm admittedly a bit disappointed XD
17:47:33  * paddybyersjoined
17:48:50  <MI6>joyent/node: isaacs v0.8 * 1389727 : blog: v0.8.19 release - http://git.io/ySWRzg
17:50:58  <isaacs>yeah
17:51:08  <isaacs>AvianFlu: like you throw the ball up, and it just goes in, no bouncing around.
17:51:09  <indutny>kewl
17:51:18  * sblomjoined
17:51:21  <isaacs>that's like the second time that's happened. i think the last one was 0.6.22 or somethign
17:51:50  <isaacs>now for 0.9.9. will not be as nice, i suspect.
17:51:58  <isaacs>indutny: i'm going to try to get your cryptostream stuffin there first.
17:52:06  <isaacs>indutny: because i am a glutton for punishment, apparently :)
17:52:09  <indutny>ahhaha
17:52:22  <indutny>well, I'm pretty sure we'll get a lot of bug reports
17:52:29  <indutny>though tests are passing
17:52:36  <indutny>so I hope they will be not trivial ones :)
17:53:13  <indutny>isaacs: but please do a sanity check first
17:53:19  <indutny>like building it, running tests :)
17:53:21  <indutny>reading code
17:55:50  <isaacs>yeah, that kinda stuff
17:55:56  <isaacs>i'm still reading through the code, but got distracted by v0.8.19
17:56:00  <isaacs>back to it :)
17:57:27  * loladirojoined
18:01:37  <isaacs>bnoordhuis: this lgty? https://github.com/isaacs/node/compare/econnreset
18:02:19  <isaacs>bnoordhuis: basically just updated a few other tests that were failing once i landed your patch
18:02:54  * mikealjoined
18:04:12  * trevnorrisjoined
18:09:07  * loladiroquit (Quit: loladiro)
18:13:47  <indutny>bnoordhuis: who is Albert and Raymond?
18:13:57  <indutny>and Luciano?!
18:14:11  <indutny>basically your slogan is a lie
18:14:22  <indutny>there're only two of 6 developers
18:17:03  <isaacs>indutny: npm closes so fast now with your patch!
18:17:05  <isaacs>it's wonderful.
18:17:10  <indutny>huh
18:17:11  <indutny>really?
18:17:12  <isaacs>it doesn't sit hanging with the connection open until the server kill sit
18:17:14  <isaacs>yeah
18:17:19  <indutny>interesting
18:17:22  <isaacs>because http client end was not being handled properly.
18:17:28  <indutny>haha
18:17:29  <isaacs>er, https client
18:17:29  <indutny>nice
18:17:36  <indutny>what patch?
18:17:37  <isaacs>so it would just sit there, until the server destroyed the connection
18:17:38  <isaacs>super annoying
18:17:39  <indutny>'finish'?
18:17:45  <isaacs>nono, cryptostream
18:17:47  <indutny>ooh
18:17:49  <indutny>even this
18:17:52  <indutny>interesting :)
18:18:11  <isaacs>not that you fixed that specifcially, but the interface was all screwey that http.js saw, so https was kinda weird.
18:18:15  <isaacs>now it's more consistent
18:18:31  <indutny>yeah
18:18:37  <indutny>you know
18:18:41  <indutny>I don't care much about it
18:18:47  <indutny>it just wasn't working in another way
18:18:48  <indutny>:)
18:19:32  <indutny>isaacs: apparently we've company that'll fix any bug in node core http://www.strongloop.com/#what-we-do
18:19:37  <indutny>now we can safely go home
18:19:41  <isaacs>yep :)
18:19:43  <indutny>and just pay some money from our salaries
18:19:49  <indutny>not really that much
18:19:53  <isaacs>yes, i would like to hire strongloop
18:19:59  <indutny>yep, me too
18:20:10  <indutny>bnoordhuis: should I pay you money to get my PR reviewed now?
18:20:17  <isaacs>i think my salary is more than it would cost to just hire them to fix all my bugs.
18:20:18  <trevnorris>bnoordhuis: missed one part of the typed array implementation. i'll update the bug w/ the information.
18:20:22  <isaacs>arbitrage.
18:20:28  <indutny>isaacs: obviously
18:20:30  <isaacs>then i can get a job at a bakery and be happy and stress free and make donuts
18:20:40  <indutny>but not fat free
18:20:46  <indutny>working at bakery is rather hard
18:20:56  <isaacs>depends on the bakery.
18:21:01  <isaacs>i always found it to be very relaxing and nice.
18:21:07  <isaacs>but i did smoke a lot of pot back then.
18:21:07  <indutny>oh, ok :)
18:21:10  <isaacs>so maybe that's why it was that way.
18:21:12  * bnoordhu1sjoined
18:21:17  <indutny>you was working at backery?
18:21:32  <indutny>s/back/bak/
18:21:40  <indutny>interesting
18:22:08  <isaacs>indutny: yeah, before i had computer jobs, i worked at 2 bakeries, and at a coffee shop (as the baker)
18:22:15  <isaacs>i's pretty mind-numbing work.
18:22:21  <indutny>yeah, I guess so
18:22:21  <isaacs>and you have to get up super early
18:22:27  <isaacs>but like, a robot can do it.
18:22:28  <indutny>I was doing sound-design before computer job
18:22:32  <indutny>for like a couple of years
18:22:44  <isaacs>and then you walk out at 1 or 2pm, and you don't think about it again until the next morning.
18:22:47  <indutny>its often pretty boring too
18:22:54  <isaacs>instead of this computer work where you can't ever stop thinking about it.
18:22:58  <indutny>hahaha
18:23:01  <indutny>no real life
18:23:03  <isaacs>srsly
18:23:09  <indutny>I agree with you
18:23:16  <indutny>but I feel like my mind is busy
18:23:23  <indutny>and that makes me feel more comfortable
18:23:42  <isaacs>indutny: so, cryptostream
18:23:47  <isaacs> function CryptoStream(pair) {
18:23:53  <isaacs>should take an options object as thte second arg
18:23:57  <isaacs>and pass that options to duplex.
18:24:13  <isaacs>indutny: so you can set high/low water mark, allowHalfOpen, etc.
18:24:22  <isaacs>though i guess you'rejust not allowing half open at all anyway..
18:24:43  <indutny>yep
18:24:44  <indutny>not yet
18:24:51  <indutny>I don't like touching it right now
18:24:59  <indutny>its full rewrite of things man
18:25:09  <indutny>already a lot of stuff that have >0 possibility of being buggy
18:25:43  <indutny>so
18:25:47  <indutny>where should it take options from?
18:25:51  <indutny>SecurePair constructor?
18:26:09  <isaacs>yeah, the higher up constructor that does CryptoStream.call(this, pair, options)
18:26:12  * loladirojoined
18:26:14  <indutny>ok
18:26:29  <indutny>I guess { encrypted: {}, cleartext: {} } will be the most appropriate format for it?
18:26:31  <indutny>agree?
18:26:40  <isaacs>options = stream options
18:26:45  <isaacs>readable/writable stuff
18:26:49  <indutny>yes
18:26:50  <isaacs>stuff that gets passed to stream.Duplex()
18:26:58  <indutny>{} === { highWatermark: 123 }
18:27:01  <indutny>something like this
18:27:29  <indutny>the thing is that its called without options
18:27:31  <indutny>SecurePair
18:27:33  <indutny>most of the time
18:27:38  <indutny>or without user options
18:28:09  <isaacs>https://gist.github.com/4724663
18:28:20  <isaacs>right, because the user usually doesn't pass it in.
18:28:21  <isaacs>that's fine
18:28:23  <indutny>yes
18:28:25  <indutny>I did it
18:28:28  <isaacs>kewl :)
18:28:36  <indutny>but there're more than it :)
18:28:40  <isaacs>also: this.pair.encrypted._internallyPendingBytes() < 512 * 1024)) {
18:28:47  <indutny>yeeah
18:28:48  <indutny>magic
18:28:50  <isaacs>why the magic number changes from 128 to 512? (and why a magic number?)
18:29:03  <indutny>where was 128?
18:29:07  <indutny>was it in previous version?
18:29:08  <isaacs>it seems like that should be one of the high/low water mark values somewhere?
18:29:09  <isaacs>yeah
18:29:12  <indutny>oops
18:29:15  <indutny>I thought I copied it
18:29:20  <indutny>looks like I rewrote it while I was debugging
18:29:22  <isaacs>- if (this._pendingBytes >= 128 * 1024) {
18:29:28  <indutny>kk
18:29:43  <isaacs>i'm more concerned about having a magic number at all, than whether it's 128 or 512
18:29:43  <indutny>isaacs: no
18:29:44  <indutny>not really
18:29:53  <indutny>the thing is
18:29:56  <indutny>that you write N bytes to cleartext
18:30:03  <isaacs>in the past, unconfigurable magic numbers are a source of bugs.
18:30:07  <indutny>but it'll emit approximately 1.5xN bytes
18:30:12  <isaacs>hm. ok
18:30:17  <indutny>framing
18:30:20  <indutny>padding
18:30:20  <isaacs>right
18:30:22  <indutny>you know
18:30:29  <indutny>and if watermark is too low
18:30:32  <indutny>and usually it is
18:30:42  <indutny>it won't call clearIn at all
18:30:46  <isaacs>i see..
18:30:55  <indutny>and its very very bad
18:31:12  <indutny>lets say its something that we should think about
18:31:16  <indutny>but a little bit later
18:31:18  <isaacs>ok
18:31:19  <indutny>I can add // TODO comment
18:31:20  <isaacs>i'm fine with that.
18:31:21  <isaacs>sure.
18:31:30  <isaacs>or post an issue :)
18:31:42  <isaacs>issues are way better than TODO comments, because other people come along and figure them out for you :)
18:33:15  <indutny>I agree
18:35:06  * perezdjoined
18:36:17  <trevnorris>isaacs: re benchmarks. will they be used with more cleanup, or we going down another path?
18:36:39  <isaacs>trevnorris: i think it would be good to go down a simpler path.
18:36:47  * `3rdEdenquit (Quit: brb switching devices)
18:36:58  <isaacs>trevnorris: i'm sorry, i know you put a lot of work into the bench_timer thing, and i want to use as much if it as i can.
18:37:23  <isaacs>but adding another arg parser, etc, is too much stuff for someone to have to grok in order to add a bench
18:37:26  <isaacs>you know?
18:38:04  * `3rdEdenjoined
18:38:28  * perezdquit (Client Quit)
18:38:42  <isaacs>trevnorris: we will ladn this in 0.9.10
18:38:46  <indutny>isaacs: force pushing
18:38:59  <isaacs>trevnorris: hopefully with some things to make some of the benchmarks have better numbers, as well :)
18:40:10  <trevnorris>isaacs: understand. tried to create it so users don't need to use things like cli parser to create a benchmark.
18:40:17  <isaacs>right
18:40:28  <indutny>isaacs: review streams changes https://github.com/joyent/node/pull/4718/files
18:40:46  <isaacs>indutny: yeah, i'm reviewing locally
18:40:46  <indutny>interesting bits: https://github.com/joyent/node/pull/4718/files#L0R1051
18:40:48  <isaacs>and git pulling
18:40:51  <trevnorris>isaacs: but part of my reasoning is we don't want users throwing in benchmarks like they do tests. they're a lot more delicate to get right.
18:41:03  <indutny>isaacs: ah, ok
18:41:04  <isaacs>trevnorris: well, they have to be reviewed more closely
18:41:11  <isaacs>trevnorris: when i say "users", mostly i mean "us"
18:41:12  <trevnorris>isaacs: like your tcp_raw bench's. those are genius, and require a solid understanding of how the internals work.
18:41:13  <isaacs>trevnorris: :)
18:41:20  <trevnorris>ah, ok.
18:41:46  <isaacs>trevnorris: if i have to load a bunch of know-how into meatspace memory in order to add a test or bench, i'll just not do it, usually. speaking from past experience.
18:42:17  <isaacs>trevnorris: the test/common.js stuff is useful because it's just a few little "use this if you need it" type things.
18:42:36  <isaacs>trevnorris: it might be good to have a pretty solid "run a thing a bunch of times and get the hrtime diff" util in something like that.
18:42:48  <isaacs>trevnorris: there ARE some repeated bits of functionality that every benchmark will have.
18:43:22  <isaacs>trevnorris: i've just found that we get the best results when our tolerance for complexity borders on absurdly low.
18:43:46  <isaacs>complexity in the sense of "how much stuff i need to know to do X"
18:43:47  <isaacs>you know?
18:43:56  <isaacs>maybe not "know" as much as "learn"
18:44:05  <isaacs>knowing is easy. *learning* is expensive and hard
18:44:15  <isaacs>indutny: was this already there? options || (options = {});
18:44:27  <isaacs>indutny: thats.... um. too cute ^_^
18:44:34  <isaacs>like an ascii kitten
18:44:34  <indutny>yes :)
18:44:36  <isaacs>ok
18:44:41  <isaacs>then i won't hold it against you :)
18:44:50  <indutny>I did it long time ago, I guess :)
18:44:54  <indutny>or that wasn't me
18:44:59  <trevnorris>isaacs: yeah. when/if you have time (cause seems to be in short order right now ;-) mind reading the Sync section of https://github.com/trevnorris/bench-timer/wiki/Docs
18:45:08  <isaacs>indutny: oh, yeah, it was you: 9010f5fb (Fedor Indutny 2011-07-28 22:52:04 +0700 770) options || (op
18:45:22  <indutny>yes
18:45:22  <isaacs>trevnorris: ok
18:45:32  <isaacs>indutny: i'll just hope that you've grown since then :)
18:45:32  <indutny>sometimes I've feeling that I made so many changes to it
18:45:37  <indutny>haha
18:46:00  <isaacs>indutny: i'm running npm tests as well, with this
18:46:07  <indutny>oh, kewl
18:46:11  <indutny>and how is it?
18:46:13  <isaacs>indutny: that does a ton of https requests.
18:46:14  <isaacs>seems fine
18:46:23  <isaacs>everything was working before, though, so that just means you didn't break anything :)
18:46:24  <indutny>good
18:46:28  <indutny>haha
18:46:34  <indutny>that was the main goal
18:46:59  <indutny>what I do really like here is that code is much simplier now
18:47:02  <indutny>it just reads/writes
18:47:05  <isaacs>yeah
18:47:05  <indutny>no more cycling
18:47:22  <isaacs>i think ryah wrote that cycling thing before we really had a concept of a stream base class.
18:47:26  <indutny>yes
18:47:33  <indutny>I don't blame him
18:47:36  <indutny>he did a good job
18:47:43  <isaacs>it'd be nice when writing software if we could see the future instead of having to discover it.
18:47:46  * perezdjoined
18:47:46  <indutny>I remember people was complaying about tls
18:47:53  <indutny>like everyone has it and you don't have support for it
18:48:06  <isaacs>yeah
18:48:08  <indutny>and then, after struggling with everything
18:48:12  <indutny>people told him
18:48:13  <isaacs>well.. .we sort of did, but it was terrible.
18:48:18  <indutny>your tls implementation is shitty
18:48:22  <indutny>yes :)
18:48:23  <indutny>exactly
18:48:29  <isaacs>it didn't work reliably, especially teh client
18:48:34  <indutny>ok
18:48:36  <indutny>back to present
18:48:40  <isaacs>the server was bad, and is still pretty bad, but at least it works at all :)
18:48:56  <indutny>its not that bad, actually
18:49:01  <bnoordhu1s>didn't pquerna wrote most of the initial openssl bindings?
18:49:06  <bnoordhu1s>*write
18:49:10  <indutny>bnoordhu1s: oh, I don't remember this
18:49:28  <isaacs>indutny: outside the scope of this PR, but i cringe when i see stuff like this:
18:49:31  <isaacs> if (this === this.pair.cleartext) {
18:49:31  <isaacs> debug('cleartext.write called with ' + data.length + ' bytes');
18:49:31  <isaacs> written = this.pair.ssl.clearIn(data, 0, data.length);
18:49:31  <isaacs> } else {
18:49:31  <isaacs> debug('encrypted.write called with ' + data.length + ' bytes');
18:49:33  <isaacs> written = this.pair.ssl.encIn(data, 0, data.length);
18:49:36  <isaacs> }
18:49:38  <isaacs>like.. that's what OOP is for.
18:49:48  <isaacs>the function should just do this._in(...)
18:49:48  <indutny>well
18:49:54  <isaacs>yeah, it's preexisting
18:49:56  <trevnorris>isaacs: thanks. since this was created for node, would like some feedback where it got too complicated.
18:50:03  <indutny>no it was better before
18:50:08  <isaacs>trevnorris: sure
18:50:28  <indutny>isaacs: I'll do OOP Style fixes
18:50:30  <isaacs>indutny: how was it better?
18:50:37  <indutny>._puller/._pusher
18:50:44  <indutny>they were calling internal methods
18:50:51  <isaacs>it's fine. we'll fix it up when we attack this thing with our slicing inline knives
18:50:52  <indutny>I mean better from OOP point of view
18:51:11  <isaacs>but it was still doing that if(this == this.pair.clearText) bs
18:51:22  <isaacs>instead of just a method call
18:51:27  <indutny>well
18:51:29  <indutny>debug information
18:51:35  <indutny>it is useful
18:51:45  <indutny>and most interestingly
18:51:52  <indutny>doesn't hurt performance at all
18:51:58  <indutny>because its slow as hell
18:51:59  <indutny>:)
18:52:01  <isaacs>in a few places anyway
18:52:02  <indutny>ssl
18:52:10  <isaacs>right
18:52:14  <isaacs>yeah, leave it as-is. it's fine
18:52:16  <indutny>that's what I like about it
18:52:18  <indutny>ok
18:52:31  <indutny>you can always patch it yourself afterwards ;)
18:52:50  <isaacs>indutny: yeah, this is a lot simpler to follow.
18:52:53  <isaacs>without the cycle stuff.
18:52:54  <isaacs>i like it
18:53:06  <isaacs>maybe i just think it's easier because i have streams2 all in my blood now :)
18:53:42  <indutny>:)
18:54:14  <isaacs>yeah, npm tests pass, and faster than they were passing before.
18:54:56  <indutny>side-effect
18:55:39  * Ralt_joined
18:56:16  <isaacs>yep :)
18:56:18  <isaacs> // 'finish' of encrypted side should not emit 'end' on clear side
18:56:18  <isaacs> // XXX: WHY?!!
18:56:18  <isaacs> if (this !== this.pair.cleartext) return cb(null, null);
18:56:24  <isaacs>this is weird..
18:56:28  <isaacs>do you know why this is?
18:57:00  * brsonjoined
18:57:41  <indutny>I've few ideas
18:58:20  <indutny>but I forgot them
18:58:25  <indutny>let me think about it for a bit
18:58:27  <indutny>that was yesterday
18:58:46  <isaacs>so the writable side of the enc flushed everything, and is now finished
18:58:59  <indutny>also comment is incorrect
18:59:04  <isaacs>yeah, it's confusing me...
18:59:13  <indutny>its the other way around
18:59:22  <indutny>so basically
18:59:28  <indutny>cleartext.end() was called
18:59:37  <indutny>and encrypted._read() can't read anything
18:59:40  <isaacs>so.. in the encrypted side, we read zero bytes, and the cleartext side is finshied
18:59:48  <indutny>yes
18:59:51  <indutny>and we emit 'end'
18:59:55  <indutny>through streams2
19:00:02  <indutny>but if encrypted.end() was called
19:00:10  <indutny>we should not emit 'end' on clear side :)
19:00:14  <indutny>because it breaks tests :)
19:00:16  <indutny>hahaha
19:00:31  <isaacs>heh.
19:00:33  <isaacs>hm.
19:00:38  <isaacs>ok.
19:01:17  <isaacs>enc reads from the actual socket or whatever
19:01:18  <isaacs>right?
19:01:29  <indutny>let me try removing condition
19:01:34  <indutny>and see what'll fail
19:01:40  <indutny>isaacs: yes
19:01:47  <isaacs>so, when IT gets no bytes from its read, it means that the end is happening
19:01:56  <isaacs>ie, the client sent us an EOF
19:02:25  <isaacs>so, cb(null,null) is appropriate
19:02:28  <isaacs>because it's actuall EOFing
19:02:38  <indutny>yes, I know
19:02:48  <indutny>I suspect we wasn't emitting 'end' on it before
19:02:55  <indutny>and probably because of this some tests are broken
19:03:06  <indutny>but let me check tests first
19:03:15  <isaacs>on the cleartext side, if you read(), and get 0 bytes, and there's nothing internal, and enc is finished...
19:03:22  <isaacs>it seems like we should still cb(null,null)(
19:03:40  <isaacs>indutny: also this:
19:03:41  <isaacs>+ if (this._opposite._finished && this._internallyPendingBytes() === 0) {
19:03:41  <isaacs>+ // Perform graceful shutdown
19:03:42  <isaacs>+ if (this._opposite._finished) {
19:03:47  <isaacs>second if is redundant
19:03:53  <isaacs>it'll always be true because that's how && works ;P
19:03:53  <indutny>right
19:04:17  <indutny>:P
19:04:20  * TooTallNatejoined
19:04:25  <isaacs>so, if this == clear, opposite.done(), else cb(null,null)
19:05:03  <indutny>well, if it isn't working without condition
19:05:26  <isaacs>+ // Consume data automatically
19:05:26  <isaacs>+ setImmediate(function() {
19:05:26  <isaacs>+ self.read(bytesRead);
19:05:28  <isaacs>+ });
19:05:41  <indutny>yes?
19:05:41  <isaacs>seems like that should be called right now, not in a setImmediate
19:06:25  <indutny>yeah
19:06:54  * `3rdEdenquit (Remote host closed the connection)
19:07:38  <isaacs>indutny: same on line 594
19:07:43  <isaacs>(in destroy())
19:07:48  <indutny>isaacs: simple/test-https-eof-for-eom fails
19:07:50  <indutny>without this check
19:08:04  <indutny>isaacs: I copy net.js behaviour there
19:08:09  <indutny>isaacs: on 594
19:08:30  <isaacs>hm.
19:08:34  <isaacs>ok, at least it should be nextTick
19:08:44  <isaacs>there's no need to wait for the event loop here.
19:08:49  * lohkeyjoined
19:09:00  <isaacs>(it sucks that setImmediate is on the next tick, and nextTick is immediate, btw)
19:10:00  <indutny>yes
19:10:05  <isaacs>hm. i see a failure on simple/test-https-drain with that change. ok. i'm sold.
19:10:09  <indutny>running tests again
19:10:12  <indutny>with proposed fixes
19:10:20  <isaacs>k
19:10:26  <indutny>isaacs: so it seems that 'close' isn't happening
19:10:37  <indutny>if 'end' is emitted after encrypted side has ended
19:10:42  <isaacs>i see.
19:10:42  <indutny>I mean 'close' on clear side
19:11:02  <isaacs>ok, leave it as-is there, then
19:11:08  <indutny>yep
19:11:11  <indutny>I'll add comment about failing test
19:11:14  <indutny>will return to it later
19:11:46  <isaacs>k
19:12:13  <isaacs>sure
19:12:25  <isaacs>ok, 0.9.9 after yoga class, i guess.
19:12:48  * isaacsback to reading diff...
19:12:52  * piscisaureus_joined
19:14:36  <indutny>isaacs: removing setImmediate() from consuming read call seems to be making other tests fail
19:14:43  <isaacs>yeah
19:14:44  <isaacs>i see this
19:14:58  <indutny>I'll leave nextTick there
19:15:01  <indutny>it seems to be working this way
19:15:14  <indutny>ok, running tests again
19:15:17  <isaacs>works with nextTick though
19:15:19  <isaacs>yeah
19:15:25  <indutny>isaacs: don't forget to run pummel tests
19:15:26  <indutny>just to be sure
19:15:30  <indutny>there're a couple of tls things
19:15:31  <isaacs>i will after class
19:15:36  <indutny>ok
19:15:36  <isaacs>have to leave in 5 minutes.
19:16:26  <indutny>sure
19:16:28  <indutny>yoga is cool
19:16:49  <indutny>I'm thinking about practicing mediation
19:16:56  <indutny>this is quite good thing too
19:18:19  * `3rdEdenjoined
19:18:52  <isaacs>yep[
19:19:17  <isaacs>yoga is good for me. keeps my back and wrists strong. helps to prevent the natural progression from programmer to hunchback.
19:19:42  <isaacs>ok, i can't find anything else to complain about here.
19:19:45  <isaacs>this is loooking pretty good
19:19:57  <isaacs>if tests pass, and you fix the stuff i said, go ahead and land it. i'll push out 0.9.9 in a few hours.
19:20:05  <piscisaureus_>isaacs: hey
19:20:11  <isaacs>piscisaureus_: hey
19:20:33  <isaacs>piscisaureus_: congrats on the strongloop website release etc.
19:20:41  <piscisaureus_>isaacs: thanks!
19:20:50  <piscisaureus_>isaacs: I was wondering, what do you mean with https://github.com/isaacs/npm/pull/3093#issuecomment-12714845 ?
19:21:17  <piscisaureus_>isaacs: your problem is that logic for managing multiple repos should be in npm-registry-client instead of npm ?
19:21:29  <indutny>piscisaureus_: congrats
19:21:33  <isaacs>piscisaureus_: yes. and the configuration reading stuf should be in npmconf
19:21:36  <indutny>piscisaureus_: i've recommended you to my friend
19:21:42  <indutny>piscisaureus_: his name is Anton Checkhov
19:21:48  <indutny>please be careful with him
19:21:52  <indutny>as I'm afraid of Anton
19:22:01  <piscisaureus_>indutny: :-p I saw that yes
19:22:10  <indutny>isaacs: I removed this check
19:22:14  <indutny>isaacs: near XXX
19:22:16  <isaacs>indutny: kewl
19:22:17  <indutny>isaacs: and removed another check
19:22:19  <isaacs>indutny: it still works?
19:22:20  <indutny>and all tests are passing
19:22:20  <indutny>:)
19:22:22  <isaacs>awesome.
19:22:22  <indutny>yes
19:22:29  <isaacs>cleared for landing, then
19:22:30  <indutny>it was hiding the bug from me
19:22:30  <isaacs>lgtm
19:22:33  <indutny>haha
19:22:34  <indutny>ok, good
19:22:39  <isaacs>indutny: is anton in russia?
19:22:56  <indutny>em...
19:22:59  <isaacs>indutny: already today i had death threats from russia on irc. but russia is so far away, so i'm not afraid :)
19:23:01  <indutny>his long dead
19:23:06  <isaacs>oh, ok
19:23:15  <indutny>http://en.wikipedia.org/wiki/Anton_Chekhov
19:23:25  <isaacs>i see this :)
19:23:41  <isaacs>piscisaureus_: the comment about having multiple npm-registry-client objects is interesting..
19:23:46  <isaacs>that might be a worhtwhile approach
19:24:06  <isaacs>but really, i'd like isaacs/npm to be not modified too much by this. it should be all in those other repos.
19:24:31  <MI6>joyent/node: Fedor Indutny master * d59beb9 : tls: port CryptoStream to streams2 - http://git.io/x90-KA
19:24:33  <isaacs>ok, have to run
19:24:36  <indutny>muhahaha
19:24:36  <isaacs>indutny: thanks%
19:24:41  <piscisaureus_>isaacs: I think the multiple client objects approach is nicer indeed
19:24:41  <indutny>isaacs: no, thank you
19:24:42  <piscisaureus_>anyway
19:24:47  <piscisaureus_>later
19:24:51  <isaacs>piscisaureus_: but then the npm client has to know which npm.registry to use...
19:24:53  <isaacs>ig uess that's not so bad.
19:24:59  <isaacs>ok, back in a few hours.
19:25:00  * isaacs&
19:25:14  * piscisaureus_&
19:25:42  <ryah>is this & thing supposed to mean that you're going in the background?
19:25:48  <ryah>:)
19:25:51  <ryah>(i hope)
19:25:52  <piscisaureus_>Hahaha
19:26:12  <piscisaureus_>I don't know. I just thought it was funny that it wakes up loudbot.
19:26:20  <indutny>isaacs: fg
19:26:23  * ryah&
19:26:24  <sblom>fg piscisaureus_: any feedback on installer?
19:26:29  <indutny>SUMMON HIM
19:26:29  <tjfontaine>^Z
19:26:53  <tjfontaine>binders full of women
19:26:56  <ryah>i find it really strange that /me is part of irc's protocol - makes no sense
19:27:06  <tjfontaine>it's actually CTCP ACTION
19:27:11  <indutny>haha
19:27:17  <indutny>yes
19:27:24  <indutny>IRC protocol is a little bit retarded
19:27:35  <ryah>just a little - mostly decent though
19:27:46  <indutny>yes, but some parts
19:27:47  <indutny>you know
19:27:50  <indutny>meh
19:27:50  <indutny>:)
19:27:56  <indutny>though its very good
19:27:57  <indutny>as good as email is
19:28:02  <indutny>I mean
19:28:03  <indutny>SMTP
19:28:06  <indutny>and IMAP
19:28:08  <ryah>much better than email
19:28:27  <piscisaureus_>sblom: well, I think it should be landed.
19:28:31  <tjfontaine>hey it supports utf8 without any change, it was ready before the rest
19:28:34  <ryah>if you were to sit down and design a chat protocol, you'd come up with something close to irc
19:28:40  <piscisaureus_>sblom: BUT there was a minor thing ...
19:29:21  <ryah>i guess if you were to sit down and design an email protocol you'd come up with someothing close to smtp too.. *shrug*
19:29:24  <ryah> :)
19:29:44  <tjfontaine>ryah: probably with saner binary encapsulation and user verification
19:30:27  <ryah>yeah - no one cares about being 7bit clean anymore
19:30:36  <piscisaureus_>sblom: <Feature Id="nodejs.shortcuts" ...
19:30:49  <piscisaureus_>sblom: that needs a level="1" tag or it won't build for me
19:31:35  <sblom>piscisaureus_: Should be fixed with https://github.com/MSOpenTech/node/commit/e88cdcf3e35f817151e2844a4eb0d3933b9e67db .
19:31:58  <sblom>I'll double-check the fix and then land.
19:32:01  <piscisaureus_>cool
19:32:41  <indutny>ryah: :)
19:35:04  <piscisaureus_>sblom: ok so there are some things I would do a little differently (e.g. now that we're going for feature selection, we might as well make NPM optional).
19:35:35  <piscisaureus_>sblom: BUT since this is already a good step forward let's land it.
19:36:05  <piscisaureus_>sblom: the only thing I'd like you to do is squash and reword commits
19:38:19  * Ralt_quit (Remote host closed the connection)
19:40:27  <piscisaureus_>sblom: actually I would probably also remove the "add stuff to the registry" patch
19:41:06  <trevnorris>anyone know if we're definitely reverting _makeCallback back to cc land?
19:41:10  <piscisaureus_>sblom: if we do something like that it should be in HKLM\Software\Joyent\Node.js\v0.8
19:42:05  <piscisaureus_>or possibly even if we do something like that it should be in HKLM\Software\Joyent\Node.js\0.8\x64
19:44:10  * AvianFluquit (Remote host closed the connection)
19:44:52  <piscisaureus_>When just registering the path to node.exe that should go into App Paths HKLM\SOFTWARE\Micorosoft\Windows\CurrentVersion\App Paths\Node.exe\(default) = (REG_SZ) c:\the\path\to\node.exe
19:55:00  * perezdquit (Quit: perezd)
19:56:45  * Ralt_joined
19:56:54  * Ralt_quit (Remote host closed the connection)
19:59:06  <MI6>joyent/libuv: Ben Noordhuis master * d5dd7d0 : darwin: merge uv_cond_timedwait implementation This is a revised version - http://git.io/Pb2rsw
20:01:43  * EhevuTovjoined
20:04:02  * mikealquit (Quit: Leaving.)
20:04:16  * indexzeroquit (Quit: indexzero)
20:07:06  * txdvquit (Read error: Connection reset by peer)
20:07:14  * txdvjoined
20:07:58  <trevnorris>indutny: yo yo. have a curiosity about v8.
20:08:27  <trevnorris>indutny: looking at --trace-deopt, v8 says if a function is deopt'd enough it will never try to optimize it again.
20:08:54  <trevnorris>won't that hurt long running server processes that may occasionally be deopt'd?
20:09:46  * mikealjoined
20:13:38  * mikealquit (Client Quit)
20:17:58  <bnoordhu1s>trevnorris: what's the message you see?
20:18:03  <sblom>piscisaureus_: The installer uses the result of the registry patch to cause upgrade installs to install to the same location as the previously used custom path.
20:18:13  <bnoordhu1s>i don't think v8 permanently disables functions
20:18:24  <bnoordhu1s>(from getting optimized, i mean)
20:18:24  <sblom>piscisaureus_: Could certainly do that using a different regkey.
20:18:56  <trevnorris>bnoordhu1s: message? about typed arrays?
20:19:19  * loladiroquit (Quit: loladiro)
20:19:32  <bnoordhu1s>trevnorris: no, the 'never try to optimize again' message
20:19:55  <trevnorris>ah, one sec and I'll post a test case.
20:20:44  * bradleymeckjoined
20:23:32  <indutny>trevnorris: well, its heuristic anyway
20:23:37  <indutny>trevnorris: if it won't disable it
20:23:43  <indutny>it might hurt performance much more
20:25:25  <trevnorris>bnoordhu1s: "[disabled optimization for process._makeCallback, reason: optimized too many times]"
20:26:10  <trevnorris>indutny: understand that. but is it possible the heuristic isn't meant for long running processes? it just seems to keep a counter.
20:26:36  <trevnorris>not like "oh, it's been a day since last deopt so might be fine now"
20:28:28  * stagas_joined
20:29:36  * stagasquit (Ping timeout: 252 seconds)
20:29:51  * stagas_changed nick to stagas
20:30:57  * loladirojoined
20:33:23  <bnoordhu1s>trevnorris: oh, i guess you're right
20:33:48  <bnoordhu1s>hmm, seems it only does it after 1000 deopts
20:34:27  <trevnorris>yeah. and when I was learning as a jr sys admin one of the first rules was to never develop with needing a restart in mind.
20:34:35  <trevnorris>(though I'm sure that has a more common term)
20:55:52  <saghul>piscisaureus_ is there an alternative to using GYP on Windows?
20:56:21  <saghul>gyp itself doesn't support python 3, so building pyuv for python 3.3 is well,
20:56:25  <saghul>fucked up
20:56:35  * perezdjoined
21:03:59  <indutny>trevnorris: well, it probably should decay after some time
21:04:14  <indutny>I mean it should deopt a 100 times per lets say 15 seconds
21:04:23  <indutny>but there're a lot of discussions about this
21:04:29  <trevnorris>really?
21:04:32  <indutny>generally 0-decay works better
21:04:39  <indutny>with everything
21:05:06  <indutny>and if v8 can't optimize your function well
21:05:24  <indutny>it might be not really necessary to optimize it at all
21:06:17  <indutny>its really very complicated topic
21:06:28  <indutny>and different people think different things about it
21:06:46  <indutny>to conclude
21:06:54  <indutny>some programs benefit from such behaviour
21:06:56  <indutny>some not
21:07:00  <indutny>that's how things are working :)
21:07:03  <trevnorris>heh, then i'll leave it up to the experts. ;-)
21:07:42  <indutny>you can become one :)
21:07:46  <indutny>just read a lot of papers
21:07:49  <indutny>do some research
21:07:57  <indutny>read v8's code
21:08:00  <indutny>contribute patches
21:08:23  <indutny>very interesting topic
21:08:26  <trevnorris>or we could go all out and track an aggregate of time spent optimizing that decays w/ time and track time in opt and time in deopt to do a statistical analysis if opt'ing after n attempts would be best. =))
21:08:44  * loladiroquit (Quit: loladiro)
21:08:53  <indutny>I bet octane results will be worse with decay
21:09:09  <indutny>http://octane-benchmark.googlecode.com/svn/latest/index.html
21:09:45  <trevnorris>ooohh. pretty.
21:10:04  <indutny>you see
21:10:10  <indutny>in this world everything depends on benchmark
21:10:15  <indutny>you can't optimize things blindly
21:10:40  <trevnorris>honestly I need to first understand what crankshaft means by "optimize". like what happens to the function.
21:10:50  <indutny>well
21:11:04  <indutny>it uses information collected when running non-optimizing version of function
21:11:08  <indutny>types
21:11:16  <indutny>variance
21:11:21  <indutny>and is making assumptions
21:11:25  <indutny>about them
21:11:45  <indutny>and after, compiles simplified version of function
21:11:50  <indutny>with less handling of edge cases
21:12:00  <indutny>suppose you do: `i + 1`
21:12:10  <indutny>un-optimized code may look like this:
21:12:17  * TooTallNatequit (Quit: Computer has gone to sleep.)
21:12:27  <indutny>if typeof i === 'number' => add(i, 1)
21:12:34  <indutny>else call C++ function to do this
21:12:47  <indutny>if crankshaft will see that i is always integer
21:12:54  <indutny>it might simplify it to just
21:12:56  <indutny>add(i, 1)
21:13:07  * TooTallNatejoined
21:13:15  <indutny>(its more complex than this, but that's how it generally works)
21:13:22  <indutny>mraleph: right? ^
21:13:22  <indutny>:)
21:13:41  <indutny>I'm not sure about crankshaft, but that's how dynamic optimization works anyway
21:13:57  <trevnorris>the concept sound simple enough, but my brain instantly melts when considering how it'd be implemented.
21:14:05  <trevnorris>*sounds
21:14:12  <indutny>oh, pretty simple
21:14:24  <indutny>there's such thing: inline cache
21:14:32  <indutny>have you heard about it?
21:15:05  <trevnorris>just read about it on wiki. =)
21:15:15  <indutny>ok
21:16:06  * `3rdEdenquit (Remote host closed the connection)
21:16:22  <indutny>I'll explain it on objects
21:16:23  <trevnorris>guess the part that confuses me the most is how does it catch when an optimization will fail w/o checking all the args like it was before the optimization.
21:16:33  <indutny>aha
21:16:55  <indutny>checking all args before optimization will not always work
21:17:01  <indutny>that's why deopts are happening in different places
21:17:12  <indutny>so about IC
21:17:23  <indutny>there's an article
21:17:25  <indutny>by mraleph
21:17:39  <indutny>http://mrale.ph/blog/2012/06/03/explaining-js-vms-in-js-inline-caches.html
21:17:44  * `3rdEdenjoined
21:18:37  <indutny>and also this https://docs.google.com/viewer?a=v&q=cache:1km997GCLOcJ:www.cs.ucsb.edu/~urs/oocsb/papers/ecoop91.pdf+&hl=en&gl=ru&pid=bl&srcid=ADGEESgxTF6DTvp8f6Me16JwU1ruOjmM75BFfSuFS5YkShbowkS7m8N457-JSxl792-_7iVtSeYaSH1ZvJHg1Qbze7DXHuVmLOLdWKMbMMISuEg0k2ZfvA_jMCXx89WjWeKx9WEzoG16&sig=AHIEtbSlhg3v0SkrZsrbr12vZ7K0YdiPHg
21:18:49  <trevnorris>dude. he's that guy? his Grokking V8 closures for fun blew my mind.
21:18:51  <indutny>smalltalk's compiler is pretty much father of everything
21:19:09  <indutny>I hope so
21:19:20  <indutny>otherwise I'm pretty scared about his true identity
21:19:27  <trevnorris>lol
21:19:39  * loladirojoined
21:20:28  <indutny>so you know what's type feedback
21:20:33  <indutny>it comes from inline caches
21:20:34  * hzjoined
21:20:41  <indutny>and might come from other places as well
21:20:49  * bradleymeckquit (Quit: bradleymeck)
21:20:53  <indutny>but generally inline caches are the most imporant source of it
21:21:36  <indutny>also I recommend this http://wingolog.org/
21:21:42  <indutny>wingo is a smartass guy
21:21:44  <indutny>definitely
21:22:52  <CoverSlide>people still use guile?
21:23:07  <indutny>yes
21:23:17  <indutny>but that doesn't really matter for me :)
21:23:31  <trevnorris>indutny: not that you haven't given me enough to read for the next 2 weeks, but have a doc on that old heap new heap thing
21:23:32  <indutny>his ability to explain things is much more important
21:23:39  <trevnorris>you talked about a while ago?
21:23:51  <indutny>trevnorris: oh, generational garbage collectors?
21:23:56  <trevnorris>yeah
21:24:24  <indutny>its called Garbage Collection handbook
21:24:35  <indutny>http://www.amazon.com/The-Garbage-Collection-Handbook-Management/dp/1420082795/ref=sr_1_1?ie=UTF8&qid=1360185870&sr=8-1&keywords=garbage+collection+handbook
21:24:50  <indutny>I'm afraid there're no ebook around
21:25:14  <indutny>and anyway those people did awesome work to create this book
21:25:23  <indutny>you better reward them a little :)
21:25:32  * perezdquit (Quit: perezd)
21:25:34  <bnoordhu1s>CoverSlide: i occasionally write programlets in it :)
21:25:45  <indutny>bnoordhu1s: shame on you :)
21:25:54  <bnoordhu1s>i've even submitted a patch or two, i think
21:26:06  <indutny>what's up with your nickname, btw?
21:26:57  <bnoordhu1s>indutny: oh, i'm on my MBA now
21:27:02  <indutny>aah
21:27:06  <indutny>bnoordhu1s: too much shame on you today
21:27:59  <bnoordhu1s>how so?
21:28:28  * AvianFlujoined
21:29:03  <MI6>joyent/node: Ben Noordhuis master * 7b0770b : typed arrays: copy non-ArrayBuffer in DataView ctor This is commit 01ee5 - http://git.io/0AqSSQ
21:30:59  <indutny>trevnorris: also, have I shown you this: https://github.com/indutny/candor/wiki/Compiler-papers ?
21:31:05  * sgallaghquit (Remote host closed the connection)
21:32:19  <trevnorris>indutny: nope... now I have enough reading to last the next few months.
21:35:53  * jmar777quit (Remote host closed the connection)
21:37:13  <bnoordhu1s>indutny: but why the shame?
21:37:24  <indutny>bnoordhu1s: apple and guile
21:38:07  <bnoordhu1s>what's wrong with guile?
21:38:44  <bnoordhu1s>re apple, i'm going to SF next week. if i don't have a macbook, people won't take me seriously
21:38:45  <indutny>well, it's a bit retarded
21:38:53  <indutny>bnoordhu1s: same thing here in moscow
21:38:59  <indutny>though people don't take me seriously anyway
21:39:05  <indutny>people who don't know what I'm doing
21:39:22  <indutny>even buying iphone hasn't improved the situation
21:39:37  <CoverSlide>I have a 10" EeePC that I take everywhere. noone takes me seriously
21:39:40  <bnoordhu1s>so what's your beef with guile?
21:40:11  <CoverSlide>the whole ice-9 stuff?
21:40:17  * loladiroquit (Quit: loladiro)
21:40:30  <TooTallNate>hmmm, the ssl streams2 refactor seems to be messing up "ws" module
21:40:52  <bnoordhu1s>CoverSlide: yes?
21:41:08  <bnoordhu1s>it takes ages to compile, if that's what you mean
21:41:11  <bnoordhu1s>but apart from that
21:42:11  * loladirojoined
21:42:19  <indutny>bnoordhu1s: well, it's retarded don't it?
21:42:28  <indutny>I think there're a lot of much better things for scripting
21:42:32  <indutny>take lua for example
21:42:34  <indutny>or even python
21:42:35  * qmxchanged nick to qmx|away
21:42:50  <CoverSlide>and even for scheme, i think guile's been supplanted
21:43:01  <bnoordhu1s>"retarded" is such an unqualified statement
21:43:07  <CoverSlide>by racket, gambit, chicken
21:43:20  <indutny>bnoordhu1s: its my opinion anyway
21:43:23  <bnoordhu1s>oh right, i'm not suggesting guile is the definitive word on scheme
21:43:23  <indutny>bnoordhu1s: :)
21:43:36  <indutny>bnoordhu1s: how could be my opinion qualified for you
21:43:50  <indutny>I mean it just doesn't work for me
21:43:50  <indutny>and I don't like scheme that much
21:43:59  <indutny>it seems to be good only for historical reasons
21:44:29  <bnoordhu1s>mwah. it's in the same ballpark as python imo
21:44:38  <CoverSlide>the one reason i ever tried out guile was that it ran on cygwin. although chicken came out since then
21:44:41  <bnoordhu1s>good for calculations in the repl, number crunching, that kind of thing
21:44:59  <bnoordhu1s>not number crunching in the fortran sense perhaps
21:45:18  <bnoordhu1s>but in the 'massaging raw data in something we can draw meaningful conclusions from' sense
21:45:19  <CoverSlide>I do like how schemes handle numbers though, fractional types, implicit bigint
21:45:34  <bnoordhu1s>yeah, it's got a sensible numeric tower
21:46:11  <bnoordhu1s>*numerical
21:46:33  <CoverSlide>i think it even handles complex numbers
21:50:19  <indutny>brb
21:52:47  * loladiroquit (Quit: loladiro)
21:52:50  * rendarquit
21:55:03  * indexzerojoined
21:56:01  * wolfeidauquit (Remote host closed the connection)
22:03:45  <MI6>joyent/libuv: Saúl Ibarra Corretgé master * 5fa6903 : win: Avoid using subversion to download gyp - http://git.io/Z-b1Bw
22:04:43  <piscisaureus_>ha! bnoordhuis beat me to it. Good idea saghul
22:05:05  <saghul>thanks guys, I just setup a new windows installation and ran into it :-)
22:05:21  <saghul>btw, piscisaureus_ any way around GYP on Windows?
22:05:50  * `3rdEdenquit (Remote host closed the connection)
22:05:50  <bnoordhu1s>you can check in the msvc files it generates, i think that mostly works
22:06:27  <saghul>hum, but aren't those dependant on the options supplied to gyp?
22:06:35  <saghul>I can't run gyp with Python 3.X :-S
22:07:11  <saghul>maybe a Makefile to be sued with nmake.exe?
22:07:20  <saghul>*used
22:07:46  <bnoordhu1s>as long as piscisaureus_ maintains it :)
22:08:39  <bnoordhu1s>saghul: re options supplied to gyp, i don't think it matters except maybe for file paths
22:09:03  <bnoordhu1s>uv.gyp doesn't do anything complex on windows
22:09:56  <saghul>yeah, the problem is that I can't even run it without having both Python 2 and 3 installed and a) running it manually or b) mofifying the path to python.exe on vcbuild.bat
22:11:17  <mraleph>indutny: trevnorris: I am not Urs Hoelzle just for the record :-)
22:12:29  <indutny>:)
22:13:04  <indutny>too bad for you :)
22:13:10  <indutny>and too good for us
22:13:28  <trevnorris>heh, yeah.
22:13:30  <indutny>(don't take seriously, I'm just in that mood, you know)
22:13:46  <trevnorris>but you author mrale.ph?
22:14:59  <CoverSlide>crazy russian compiler engineer?
22:15:36  <CoverSlide>what is with you russians and that gloria hallelujah font?
22:16:11  <CoverSlide>oh wait, fedor's uses something else
22:16:14  <CoverSlide>looks similar though
22:16:56  * wolfeidaujoined
22:17:11  * `3rdEdenjoined
22:17:56  <mraleph>trevnorris: yes, I am. I wish I could remove that dot and register my own TLD :-)
22:18:20  <CoverSlide>you could get a .name domain
22:18:42  <mraleph>CoverSli1e: I just needed something looking a bit like hand writing (mraleph.name looks worse than mrale.ph to me :-))
22:19:27  <mraleph>CoverSli1e: when drawing pictures I actually prefer to use 'Complete in Him' which is a better font IMHO
22:20:32  <trevnorris>the post on �benchmark fairy tails is genius.
22:20:34  <trevnorris>sent it to my js buddies that mocked me for so long when I told them their benchmarks were meaningless.
22:24:06  <piscisaureus_>saghul: there's a makefile for mingw32
22:24:18  <piscisaureus_>saghul: nmake is really from the nineties man, nobody uses that anymore
22:24:32  <saghul>piscisaureus_ yeah, but I want to use MSVC
22:24:38  * jmar777joined
22:24:46  <saghul>oh, I didn't know, not much of a windows guy myself
22:24:52  <saghul>:-)
22:25:10  <piscisaureus_>saghul: you could indeed land the visual studio files. I wouldn't mind but I suspect that bnoordhuis may be more opinionated about this sort of thing
22:26:07  <saghul>piscisaureus_ hum, would the one for 2010 workon 2008 and vice versa or would we need 2?
22:26:15  <piscisaureus_>saghul: one issue though is that vcbuild generates a solution with only one [arch, library_type] configuration. It'd be nice if could generate one that has both x86/x64 and both static and shared
22:26:25  <piscisaureus_>saghul: no
22:26:47  <piscisaureus_>saghul: I think the vs project for '10 works on '12 too
22:26:56  <piscisaureus_>but '08 and '10/'12 is a no go
22:27:26  <MI6>joyent/libuv: Ben Noordhuis master * 3b51949 : darwin: make uv_cond_timedwait() clock skew safe Use pthread_cond_timedw - http://git.io/M3mwgg
22:27:26  <piscisaureus_>Welcome to windows man :-)
22:27:26  <saghul>piscisaureus_ sigh, for Python I need 2008 and 2010, which works now, but it requires that extra step
22:27:40  <bnoordhu1s>christ, pushed the wrong commit
22:27:40  <piscisaureus_>saghul: you need both? why?
22:27:46  * stagas_joined
22:28:06  <saghul>piscisaureus_ Python 2.6 - 3.2 use 2008, Python 3.3 uses 2010
22:28:13  <piscisaureus_>right
22:28:13  <saghul>so I need to work with both
22:28:36  * christ_joined
22:28:37  <MI6>joyent/libuv: Ben Noordhuis master * da33bba : darwin: make uv_cond_timedwait() clock skew safe Use pthread_cond_timedw - http://git.io/jambLw
22:28:39  <christ_>bnoordhuis: sup?
22:28:40  <bnoordhu1s>victory!
22:28:54  <bnoordhu1s>hohoho
22:29:20  * stagasquit (Ping timeout: 255 seconds)
22:29:26  * stagas_changed nick to stagas
22:29:54  <christ_>nick bnoordhui5
22:30:11  * christ_quit (Client Quit)
22:32:33  * mikealjoined
22:44:48  * c4miloquit (Remote host closed the connection)
22:47:12  <trevnorris>mraleph: mind giving a tip on how the function "add" can be inlined in the following: https://gist.github.com/trevnorris/4726596
22:51:03  <saghul>bnoordhu1s: src/unix/fs.c:205: warning: passing argument 3 of ‘scandir’ from incompatible pointer type
22:51:26  <bnoordhu1s>saghul: upgrade your os x and the warning goes away :)
22:51:41  <bnoordhu1s>the warning itself is harmless btw
22:51:51  * hzquit
22:51:54  <saghul>bnoordhu1s ok, nothing to worry about then :-)
22:52:09  <saghul>I'm trapped on OSX 10.6, aka OSX XP
22:52:34  <bnoordhu1s>os x pleiocene
22:54:10  <saghul>OSX and Windows have followed parallel lives: XP was good back in the day, as was Snow leopard, then came Vista and Lion, which sucked and now things got better With 7 and Mountain Lion :-)
22:55:55  * qmx|awaychanged nick to qmx
22:55:59  * AvianFluquit (Remote host closed the connection)
22:57:54  * bnoordhu1squit (Ping timeout: 276 seconds)
23:00:01  <CoverSlide>explain to me the difference between 7 and Vista
23:00:12  <CoverSlide>aside from the big icons
23:00:40  <CoverSlide>i remember when 7 came out, everyone was like "Oh so much better than vista" I was like, um what changed?
23:01:29  * loladirojoined
23:05:06  * `3rdEdenquit (Remote host closed the connection)
23:11:37  <saghul>hum, connect(2) says it blocks, but if used with UDP it doesn't actually send any data, is there any chance I can get EINTR or EWOULDBLOCK?
23:11:44  <saghul>bnoordhuis ^
23:14:20  * TheJHquit (Ping timeout: 255 seconds)
23:17:16  * qmxchanged nick to qmx|away
23:20:36  * CoverSlidequit (Quit: leaving)
23:21:09  * CoverSli1echanged nick to CoverSlide
23:23:18  * AvianFlujoined
23:28:40  * c4milojoined
23:29:02  * mikealquit (Quit: Leaving.)
23:35:38  * `3rdEdenjoined
23:43:58  * `3rdEdenquit (Ping timeout: 240 seconds)
23:47:39  * lohkeyquit (Ping timeout: 276 seconds)
23:49:09  * mikealjoined
23:49:40  * perezdjoined
23:52:07  * lohkeyjoined
23:54:30  * isaacsfg
23:55:00  <trevnorris>isaacs: i take your make-callback-revert and raise it another 5%
23:57:50  * jmar777quit (Remote host closed the connection)
23:58:26  <TooTallNate>indutny: did you see that ws issue i cc'd you on?