00:00:00  <CoverSlide>execSync? why?
00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:07  * ircretaryjoined
00:10:11  <TooTallNate>cause shell scripting 'nd stuff
00:10:44  <deoxxa>execSync... wow
00:10:49  <deoxxa>that's going to be interesting
00:11:07  <isaacs>piscisaureus: oh, right
00:11:08  <isaacs>shit
00:11:25  <isaacs>piscisaureus: we don't really *need* it for 0.10
00:11:33  <isaacs>piscisaureus: the one pushing for it the most has moved onto go
00:11:44  <TooTallNate>isaacs: are we doing 0.9.4 this week? or next?
00:11:56  <TooTallNate>isaacs: felix?
00:11:57  <isaacs>TooTallNate: we could do it tomorrow
00:11:59  <isaacs>TooTallNate: yeah
00:12:03  <isaacs>i'm kinda half-joking
00:12:07  <isaacs>i mean, it'd be ag reat feature
00:12:17  <isaacs>piscisaureus: but we can totally wait for 0.12 for that
00:12:29  <isaacs>piscisaureus: i'd rather get what we have now into a good state, and release it
00:18:25  <isaacs>Raynos, TooTallNate: new readable-stream pushed. 0.1.0
00:19:40  <TooTallNate>isaacs: :)
00:19:57  <isaacs>i'm fixin to merge streams2 into master once we land that libuv update.
00:20:18  <TooTallNate>isaacs: so it's pretty cool using my own Readable (node-despotify) and my own Writable (node-speaker) and having .pipe() drive node :)
00:20:27  <isaacs>piscisaureus: you recommend i merge ben's patch?
00:20:27  <TooTallNate>isaacs: in short, good fucking work on streams2 :)
00:20:43  <isaacs>TooTallNate: thanks :)
00:21:18  * jmar777joined
00:22:09  <piscisaureus>isaacs: ben's patch looks good to me
00:22:24  <isaacs>k, i'm landing it
00:22:32  <piscisaureus>isaacs: you don't have to merge it, but if you want to move forward it could be helpful :-)
00:22:44  <isaacs>piscisaureus: did you land the libuv bit in libuv?
00:22:51  <piscisaureus>isaacs: no
00:22:55  <isaacs>want me to?
00:23:02  <piscisaureus>isaacs: if you want to :-0
00:23:10  <isaacs>i feel a bit weird putting a non-master version of libuv into node-master
00:23:11  <isaacs>not sure why
00:23:17  <piscisaureus>you are totally right
00:23:19  <piscisaureus>don't do that
00:23:25  <isaacs>k, i'll land it.
00:23:28  <isaacs>admin rights ftw!
00:24:03  <MI6>joyent/libuv: Ben Noordhuis master * e079a99 : unix: fix event loop stall Fix a rather obscure bug where the event loop - http://git.io/yOwA8g
00:25:19  <MI6>joyent/node: Ben Noordhuis master * 6cf68ae : deps: upgrade libuv to e079a99 - http://git.io/gyzTiA
00:25:28  <isaacs>ircretary: tell bnoordhuis Landed libuv-streams2-fix in libuv and node. Thanks!
00:25:29  <ircretary>isaacs: I'll be sure to tell bnoordhuis
00:25:52  <TooTallNate>isaacs: did the uv_work signature end up changing?
00:25:54  * travis-cijoined
00:25:54  <travis-ci>[travis-ci] joyent/libuv#954 (master - e079a99 : Ben Noordhuis): The build passed.
00:25:54  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/92fb84b751e1...e079a99abddb
00:25:54  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/3655940
00:25:54  * travis-cipart
00:26:08  <TooTallNate>https://github.com/joyent/libuv/commit/e079a99abddb30a7f935792eda003b5ce37b396b#commitcomment-2305760
00:26:19  <isaacs>TooTallNate: so, the after_work function takes an int "status" arg as well as the req
00:26:38  <piscisaureus>isaacs: it doesn't really change that much
00:26:43  <piscisaureus>isaacs: it'll just generate a warning
00:26:59  <piscisaureus>people will be able to hide the warning by explicitly casting to uv_work_cb
00:28:16  <TooTallNate>piscisaureus: nice, i wasn't aware of this type
00:28:37  <TooTallNate>isaacs: did that change happen in a different commit?
00:30:17  <isaacs>piscisaureus: yeah, if we have a simple workaround, that'll be good.
00:30:34  <isaacs>piscisaureus: i mean, "explicitly casting" = "make a code change"
00:30:48  <isaacs>piscisaureus: if they're going to change the code, they can also add the arg to their after function
00:30:55  <piscisaureus>isaacs: yes
00:31:04  <piscisaureus>isaacs: true ;-)
00:31:18  <piscisaureus>isaacs: although then it will generate a warning on older versions of libuv
00:31:24  <isaacs>true.
00:32:13  <isaacs>so. i'm gonna merge in streams2 into master tomorrow. last objections?
00:32:43  <isaacs>or, maybe right now. cuz why not.
00:32:58  <Raynos>isaacs: thanks
00:33:42  <Raynos>isaacs: have you done any work to make anything here ( https://gist.github.com/3791742 ) wrong?
00:34:07  * jmar777quit (Remote host closed the connection)
00:34:39  * jmar777joined
00:36:19  * c4miloquit (Remote host closed the connection)
00:36:45  <mmalecki>isaacs: only thing I can suggest is making abstract data types a first class citizen
00:37:13  <isaacs>mmalecki: that'll come before 0.10
00:38:55  <mmalecki>okay
00:39:14  * jmar777quit (Ping timeout: 260 seconds)
00:43:47  <piscisaureus>isaacs: so did you test streasm2 on the glassy os?
00:44:00  <isaacs>(merging v0.8 into master now)
00:44:11  <isaacs>piscisaureus: not nearly as exhaustively
00:44:26  <isaacs>piscisaureus: i'll do that prior to mergin in
00:44:33  <piscisaureus>kewl
00:44:50  <isaacs>you mean Moon Safari Wonky Donky WeirdOS, right?
00:47:28  <isaacs>Raynos: I don't think you need that gist any more. The docs are basically that.
00:48:12  <isaacs>Raynos: and i want to support synthetic streams before 0.10 goes out (mentioned to mmalecki)
00:48:22  <isaacs>Raynos: as yo know, i think it's stupid, but whatever, people ask for that all the time
00:48:57  <Raynos>isaacs: I'll alot some time soon to port my abstractions to use _read and _write
00:49:09  <Raynos>then check whether I broke chain-stream :D
00:49:19  <Raynos>if chain-stream still works then it's probably ok
00:52:45  <isaacs>Raynos: kewl
00:52:48  * EhevuTovquit (Quit: This computer has gone to sleep)
00:54:00  <piscisaureus>isaacs: I mean chocolate factory os
00:54:20  <isaacs>piscisaureus: chocolate factor?
00:54:31  <piscisaureus>factory, even
00:54:32  <TooTallNate>isaacs: what will "support synthetic streams" entail?
00:54:45  <piscisaureus>execSync execSync execSync
00:54:56  <isaacs>TooTallNate: well, the arg to read() will be ignored, and it'll always return one thing
00:55:15  <isaacs>TooTallNate: so "length" will just be the number of objects in thequeue
00:55:43  <TooTallNate>well… ok…
00:56:39  <isaacs>yeah
00:56:43  <isaacs>streams are for bytes.
00:56:48  <isaacs>but... well... you know.
00:56:51  <isaacs>"users"
00:56:58  <isaacs>ruin everything
00:57:03  <isaacs>;P
00:57:04  <Raynos>EVERYTHING
00:57:12  <TooTallNate>idk, it seems like a better abstraction should be possible
00:57:33  <TooTallNate>(*cough* generators)
00:57:35  <Raynos>https://github.com/gozala/reducers
00:57:59  <Raynos>streams of objects is nice for things like json parsing
00:58:25  <TooTallNate>Raynos: i get your stance, i just don't agree with it
00:58:53  <Raynos>the main problem is that we have no alternative to pipe for non buffer stuff
00:58:58  <MI6>joyent/node: isaacs master * 77ed12f : Merge remote-tracking branch 'ry/v0.8' into master Conflicts: AUTHORS (+45 more commits) - http://git.io/Wrq-wg
00:59:09  <Raynos>if there was a nice pipe abstraction that left streams behind cleanly then awesome!
01:00:10  <TooTallNate>Raynos: but what's so bad about: JSONParser(readable)?
01:00:20  <TooTallNate>compared to readable.pipe(jsonParser)
01:00:24  <Raynos>what does it return?
01:00:37  <Raynos>does it return a non stream?
01:00:39  <TooTallNate>an event emitter
01:00:46  <Raynos>that kind of works
01:00:56  <Raynos>I actually don't mind readable streams as arguments
01:01:11  <TooTallNate>Raynos: re: backpressure, make the "object" event take a callback for when you're done with it
01:01:11  <Raynos>But JSONStringer(writable) feels bad
01:01:47  <Raynos>that doesnt even make sense
01:02:01  <Raynos>as for a callback for object event meh reinventing pipe
01:02:22  <TooTallNate>Raynos: i thought that's what you wanted!?
01:02:43  <Raynos>I dont know what I want!
01:04:29  <isaacs>TooTallNate: the thing is, you want source.pipe(JSONParser()).pipe(DoesStuffWithobjects()).pipe(EncodesObjects()).pipe(destination)
01:04:35  <loladiro>piscisaureus: ping
01:04:45  <isaacs>TooTallNate: so that you get backpressure th ewhole way down
01:05:09  * stagasjoined
01:05:36  <TooTallNate>ya i have problems with that but i digress
01:05:41  <piscisaureus>loladiro: sup?
01:06:16  <Raynos>its not that pattern
01:06:38  <Raynos>Well meh
01:06:41  <Raynos>It doesnt matter :D
01:08:32  * dapquit (Quit: Leaving.)
01:09:13  <piscisaureus>loladiro: ?
01:18:33  * EhevuTovjoined
01:21:52  * warzjoined
01:30:57  * ericktjoined
01:44:56  <loladiro>piscisaureus: Oh, sorry I had accidentally turned off notifications in my IRC client and misses your reply. Are you still there?
01:45:26  <piscisaureus>loladiro: I am
01:46:17  <loladiro>piscisaureus: great. I wanted to see what your plans were with regards to every using that new pipe API we had talked about a few months back.
01:46:40  <piscisaureus>loladiro: ah yes that :-)
01:46:58  <piscisaureus>loladiro: I still want to make it better but I was always distracted by more important stuff.
01:47:08  <piscisaureus>loladiro: is there a specific problem you are running into at this time?
01:47:42  <loladiro>piscisaureus: Not at all we've been using it and it's working great. The only thing is all the distribution maintainers complaining to me that we have an incompatible libuv
01:47:56  <piscisaureus>loladiro: aah right haha
01:48:04  <piscisaureus>loladiro: you mean folks like sgallagh :-)
01:48:12  <piscisaureus>loladiro: what is the patch you are floating now?
01:48:56  <loladiro>We basically haven't touched libuv since implementing the patch back when we last talked (the one whose windows version was in the pull request)
01:50:00  <piscisaureus>loladiro: only that -> https://github.com/joyent/libuv/pull/451 ?
01:51:09  <piscisaureus>oh right i remember
01:51:24  <loladiro>piscisaureus: Plus the implementation of that on the linux side and a few minor changes that we should really get rid of
01:51:31  <piscisaureus>uv_pipe_close_sync made kittens die
01:51:51  <loladiro>piscisaureus: your idea, not mine ;)
01:51:57  <piscisaureus>yeah
01:51:59  <piscisaureus>I had no better ideas
01:52:36  <piscisaureus>I would have to berate you about mixing tabs and spaces as well
01:52:39  <piscisaureus>:-p
01:53:02  <piscisaureus>I think some of this stuff actually went in
01:53:11  <loladiro>Oh, did it?
01:53:12  <piscisaureus>like, configurable stdio endpoints
01:53:33  <piscisaureus>but I don't thing we let you make spawn-safe pipes at this time
01:53:42  <piscisaureus>so that's sort of shit
01:54:01  <loladiro>yeah, that's basically what we need
01:55:52  * mjr_quit (Quit: mjr_)
01:56:18  <piscisaureus>hmm
01:57:49  <piscisaureus>loladiro: I will take a look again.
01:57:56  <piscisaureus>loladiro: that's all I can promise now
01:58:04  <loladiro>piscisaureus: Ok, thanks. Let me know if I can be of any help
01:58:23  <piscisaureus>loladiro: so do these package maintainers really care at this point?
01:58:59  <loladiro>piscisaureus: Not really, I convinced them that it was a necessary evil, but then again it would be nice to have to maintain a fork
01:59:16  <piscisaureus>yeah
01:59:21  <piscisaureus>ok, that's good
01:59:35  <piscisaureus>I mean they are not packaging up libuv because we don't do releases ;-)
01:59:43  <piscisaureus>I have built up such a huge backlog since last summer
01:59:51  <piscisaureus>because that was also one of these things that I was supposed to be doing
02:06:05  <txdv>lulllzzz
02:10:24  * stagasquit (Ping timeout: 264 seconds)
02:12:08  * joshthecoderquit (Quit: Leaving...)
02:14:47  <piscisaureus>ok i quit once again
02:14:56  <piscisaureus>have a nice day everyone
02:15:01  * piscisaureusquit (Quit: ~ Trillian Astra - www.trillian.im ~)
02:15:28  * mjr_joined
02:24:47  * EhevuTovquit (Quit: This computer has gone to sleep)
02:26:16  * abraxasjoined
02:47:48  * TooTallNatequit (Quit: Computer has gone to sleep.)
03:19:00  * warzquit
03:26:16  * mjr_quit (Quit: mjr_)
03:27:34  * ericktquit (Ping timeout: 265 seconds)
03:28:14  * brson_quit (Ping timeout: 255 seconds)
03:31:14  * toothrotquit (Read error: Connection reset by peer)
03:35:15  * toothrjoined
03:51:20  * joshthecoderjoined
03:54:47  * c4milojoined
04:08:53  * ericktjoined
04:25:08  <rvagg>I don't suppose anyone has a commit ref handy for the fd leak fix in Node 0.8.16?
04:25:32  <rvagg>oh, forget it... pretty obvious in the commit history!
04:33:19  * mjr_joined
04:36:45  * piscisaureus_joined
04:37:01  * piscisaureus_quit (Client Quit)
04:37:46  * bradleymeckquit (Quit: bradleymeck)
04:47:15  * warzjoined
04:47:15  * warzquit (Changing host)
04:47:15  * warzjoined
05:07:04  * btraskquit (Remote host closed the connection)
05:14:26  * piscisaureus_joined
05:14:29  * piscisaureus_quit (Client Quit)
05:15:11  * piscisaureus_joined
05:26:33  * c4miloquit (Remote host closed the connection)
05:50:14  * AvianFluquit
05:53:09  * ericktquit (Quit: erickt)
06:00:35  * mjr_quit (Quit: mjr_)
06:08:39  * warzquit
06:28:34  * piscisaureus_quit (Ping timeout: 244 seconds)
07:11:27  * `3rdEdenjoined
07:33:20  * rendarjoined
07:37:08  * benoitcquit (Excess Flood)
07:39:26  * benoitcjoined
07:43:43  * joshthecoderquit (Quit: Linkinus - http://linkinus.com)
07:57:31  * benoitcquit (Excess Flood)
08:01:26  * benoitcjoined
08:40:50  * stagasjoined
08:59:42  * darkyenjoined
09:08:31  <darkyen>Is it necessary to
09:08:37  <darkyen>clear slow/Fast buffers
09:08:46  <darkyen>explicitely if they originate from C++ ground ?
09:18:14  * peterrsjoined
09:37:19  <darkyen>Anybody around ?
09:48:04  * bnoordhuisjoined
09:48:56  <bnoordhuis>morning
09:51:36  * bradleymeckjoined
09:53:06  <darkyen>Good Morning
10:01:56  * darkyenquit (Quit: Page closed)
10:13:19  <abraxas>good morning
10:13:41  <abraxas>bnoordhuis: mind if I ask you a question about signals..? indutny suggested I ask you
10:13:48  <bnoordhuis>abraxas: sure
10:13:51  <abraxas>Is there a good reason why signal handlers don't reveal their source? (pid, etc)
10:14:15  <bnoordhuis>because there's no good way to emulate that on windows
10:14:28  <abraxas>I was afraid of that :)
10:15:47  <abraxas>thanks
10:15:52  <bnoordhuis>np
10:24:00  * loladiroquit (Quit: loladiro)
10:25:20  <indutny>bnoordhuis: thats what I thought too :)
10:25:36  <indutny>bnoordhuis: hi
10:25:37  <indutny>howdy?
10:25:41  <bnoordhuis>indutny: hoya
10:25:51  <bnoordhuis>before you ask, i'll review your PR today :)
10:26:03  <indutny>haha
10:26:04  <indutny>ok
10:26:08  <indutny>though I wasn't going to ask
10:27:38  * abraxasquit (Remote host closed the connection)
10:28:37  * abraxasjoined
10:28:51  * loladirojoined
10:32:09  * abraxasquit (Remote host closed the connection)
10:34:11  * loladiroquit (Quit: loladiro)
10:34:37  * bradleymeckquit (Quit: bradleymeck)
10:41:47  * roxlujoined
10:50:57  <MI6>joyent/libuv: Ben Noordhuis master * a3b57dd : test, bench: remove unused includes (+2 more commits) - http://git.io/B29TWA
10:52:05  * travis-cijoined
10:52:05  <travis-ci>[travis-ci] joyent/libuv#955 (master - a3b57dd : Ben Noordhuis): The build passed.
10:52:05  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/e079a99abddb...a3b57dd5987c
10:52:05  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/3661901
10:52:05  * travis-cipart
11:00:39  <MI6>joyent/libuv: Andrew Shaffer master * f5a2304 : sunos: properly disarm PORT_LOADED fsevent watcher Fixes a segmentation - http://git.io/IxwuHw
11:02:27  * travis-cijoined
11:02:27  <travis-ci>[travis-ci] joyent/libuv#956 (master - f5a2304 : Andrew Shaffer): The build passed.
11:02:27  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/a3b57dd5987c...f5a2304c9219
11:02:27  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/3661977
11:02:27  * travis-cipart
11:08:13  <MI6>joyent/libuv: Ben Noordhuis master * c6c5b7a : Merge branch 'v0.8' - http://git.io/jfQoXQ
11:08:15  <MI6>joyent/libuv: Andrew Shaffer v0.8 * 4997738 : sunos: properly disarm PORT_LOADED fsevent watcher Fixes a segmentation - http://git.io/DC48rg
11:09:56  * travis-cijoined
11:09:56  <travis-ci>[travis-ci] joyent/libuv#958 (v0.8 - 4997738 : Andrew Shaffer): The build was fixed.
11:09:56  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/527a10f90428...49977386e93d
11:09:56  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/3662068
11:09:56  * travis-cipart
11:10:26  * travis-cijoined
11:10:26  <travis-ci>[travis-ci] joyent/libuv#957 (master - c6c5b7a : Ben Noordhuis): The build passed.
11:10:26  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/f5a2304c9219...c6c5b7a901d2
11:10:26  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/3662066
11:10:26  * travis-cipart
11:13:59  <MI6>joyent/libuv: bnoordhuis created tag node-v0.8.12 - http://git.io/78vb4g
11:14:01  <MI6>joyent/libuv: bnoordhuis created tag node-v0.8.15 - http://git.io/CBwu5A
11:14:03  <MI6>joyent/libuv: bnoordhuis created tag node-v0.9.3 - http://git.io/FSlrQw
11:18:12  <indutny>finally
11:18:13  <indutny>we've tags
11:53:06  * peterrsquit (Remote host closed the connection)
12:34:25  * sgallaghjoined
13:15:32  * bnoordhuisquit (Ping timeout: 248 seconds)
13:38:51  * jmar777joined
14:31:40  * stagasquit (Ping timeout: 265 seconds)
14:56:55  * c4milojoined
15:04:48  * bradleymeckjoined
15:13:13  * bradleymeckquit (Quit: bradleymeck)
15:15:39  * bradleymeckjoined
15:42:10  * tomshredsjoined
16:02:01  * tomshredsquit (Quit: Linkinus - http://linkinus.com)
16:04:12  * c4miloquit (Remote host closed the connection)
16:04:31  * hzjoined
16:09:49  * piscisaureus_joined
16:10:21  <piscisaureus_>hello kids
16:11:08  <indutny>piscisaureus_: you know what
16:11:12  <indutny>better ignore this :)
16:11:41  <piscisaureus_>indutny: ?
16:13:04  <indutny>piscisaureus_: you're troll
16:16:34  * `3rdEdenquit (Remote host closed the connection)
16:24:21  <piscisaureus_>indutny: I cried softly
16:35:24  * Soarezjoined
16:35:33  <Soarez>hello
16:36:57  <Soarez>is it ok to ThrowException() in the init() of a Node.js addon?
16:37:01  * loladirojoined
16:38:35  * stagasjoined
16:48:55  * dapjoined
16:57:02  * ericktjoined
17:00:15  * ericktquit (Client Quit)
17:04:05  * jmar777quit (Remote host closed the connection)
17:04:28  * AvianFlujoined
17:04:40  * jmar777joined
17:06:00  * jmar777quit (Read error: Connection reset by peer)
17:06:12  * jmar777joined
17:11:59  * jmar777quit (Remote host closed the connection)
17:12:34  * jmar777joined
17:15:21  * Ralt_joined
17:17:09  * jmar777quit (Ping timeout: 276 seconds)
17:31:47  * hzquit
17:46:14  * c4milojoined
17:47:59  * Ralt_quit (Read error: Operation timed out)
17:48:48  * bradleymeckquit (Quit: bradleymeck)
17:59:33  * warzjoined
17:59:34  * warzquit (Changing host)
17:59:34  * warzjoined
18:00:43  * mjr_joined
18:01:35  * TooTallNatejoined
18:03:43  * Ralt_joined
18:17:37  * jmar777joined
18:23:57  * `3rdEdenjoined
18:25:42  * tomshredsjoined
18:35:04  * tommybergeronjoined
18:35:18  * c4miloquit (Remote host closed the connection)
18:36:10  * Ralt_quit (Ping timeout: 250 seconds)
18:38:07  * tomshredsquit (Ping timeout: 255 seconds)
18:43:36  <indutny>Soarez: that's not really good thing to do, but it won't break anything
18:43:38  <indutny>as far as I can see
18:45:37  * tommybergeronquit (Quit: Linkinus - http://linkinus.com)
18:53:01  <MI6>joyent/node: isaacs streams2 * 6285056 : test: Update simple/test-fs-{write,read}-stream-err for streams2 Streams (+70 more commits) - http://git.io/h_X0Zw
18:55:17  <isaacs>i really wish that make tracked files a bit more smartly than just looking at atime
18:55:51  <isaacs>sucks when i accidentally check out a v8 change, then go back, and now have to rebuild the world.
18:56:48  * Ralt_joined
18:57:49  <TooTallNate>isaacs: http://xkcd.com/303/
19:07:49  * brsonjoined
19:12:42  * Ralt_quit (Ping timeout: 264 seconds)
19:12:48  * brsonquit (Ping timeout: 264 seconds)
19:13:14  * brsonjoined
19:14:13  <Soarez>indutny: thanks
19:14:17  * Soarezpart
19:17:28  <MI6>joyent/node: isaacs streams2 * 4791c32 : test: Update simple/test-fs-{write,read}-stream-err for streams2 Streams - http://git.io/SAgjKw
19:18:09  <isaacs>ircretary: tell bnoordhuis Does this still strike you as a valid test? https://github.com/isaacs/node/commit/4791c3205d0b54753916d569202b54e90d86f8c9
19:18:10  <ircretary>isaacs: I'll be sure to tell bnoordhuis
19:19:39  * lohkeyjoined
19:33:31  <isaacs>yoga, then merging streams2 into master.
19:41:55  * bradleymeckjoined
19:58:35  <indutny>:)
20:01:50  * mikealjoined
20:03:31  * mikealquit (Client Quit)
20:09:11  * piscisaureus_changed nick to piscisaureus_awa
20:10:28  * brsonquit (Ping timeout: 248 seconds)
20:19:16  * stagas_joined
20:19:27  * stagasquit (Ping timeout: 260 seconds)
20:19:30  * stagas_changed nick to stagas
20:26:08  * brsonjoined
20:29:16  * jmar777quit (Remote host closed the connection)
20:29:49  * jmar777joined
20:34:04  * dap1joined
20:34:23  * jmar777quit (Ping timeout: 260 seconds)
20:35:29  * dapquit (Ping timeout: 265 seconds)
20:41:05  <indutny>piscisaureus_awa: haha
20:41:06  <indutny>piscisaureus_awa: yt?
20:41:10  <indutny>pquerna: heya
20:41:15  <piscisaureus_awa>indutny: ?
20:41:15  <indutny>pquerna: yt?
20:41:28  <pquerna>indutny: hi
20:41:38  <indutny>pquerna: oh goodness, you're here
20:41:45  <indutny>glad to see you Paul
20:42:05  <indutny>pquerna: it looks like I'm going to start adding "isolates" support to OpenSSL
20:42:13  <indutny>pquerna: do you know if anyone already tried/did it?
20:42:34  <indutny>by "isolates" I mean moving all static variables into object
20:42:55  <indutny>which would be either thread-local or required-to-pass as a first argument to all api functions
20:43:31  <pquerna>no
20:43:43  <pquerna>its mostly in the crypto code right?
20:43:52  <pquerna>not the actual ssl code iirc
20:45:29  <pquerna>i'd actually look at the ciphers you use and see if they need it
20:45:36  <pquerna>is it showing up in profiling?
20:48:24  * sgallaghquit (Ping timeout: 256 seconds)
20:48:50  <indutny>pquerna: right
20:48:53  <pquerna>like the actual tls code is already all local tot he session or context
20:49:06  <indutny>well, there're a lot of locks
20:49:16  <indutny>and disabling them helps a lot :)
20:49:33  <indutny>pquerna: see https://github.com/indutny/tlsnappy/blob/master/src/tlsnappy.cc#L44
20:50:03  <indutny>it doesn't seem to be an issue with 4 threads, but with 24 threads - wait time is visible
20:50:06  <pquerna>interesting approach
20:50:58  <pquerna>unsure you can do that for the session store?
20:51:02  <pquerna>unless you implement your own
20:51:17  * indutny_webjoined
20:51:23  <indutny_web>pquerna: sorry, irccloud is lagging agin
20:51:34  <indutny_web>pquerna: so look at this https://github.com/indutny/tlsnappy/blob/master/src/tlsnappy.cc#L44
20:51:41  <indutny_web>I've already disabled some locks in my application
20:51:50  <pquerna>https://gist.github.com/7a5e14d44fcf0bd95055
20:51:50  <pquerna>yeah
20:51:56  <indutny_web>because lock contention was visible on 24 thread machine
20:52:08  <pquerna>right
20:52:15  <indutny_web>ah, great
20:52:24  <indutny_web>well... I'm not using session storage right now
20:52:32  <pquerna>i just noticed its set to OFF :)
20:52:38  <indutny_web>yes
20:52:51  <pquerna>CRYPTO_LOCK_SSL_CTX is a risky one too
20:52:51  <indutny_web>so far it doesn't matter that much :)
20:53:01  <pquerna>things like random cert chain validation
20:53:03  <indutny_web>yeah, I know... but it seems to be working
20:53:04  <pquerna>i think use that
20:53:10  <pquerna>well, if you turn on client certs?
20:53:22  <pquerna>i guess if you don't modify the main context after startup
20:53:24  <pquerna>it might just work
20:53:37  <indutny_web>I'm working with context only from one thread
20:53:44  <indutny_web>i.e. each thread has it's own context
20:53:47  <pquerna>ah
20:53:57  <pquerna>how bad is the memory on each context?
20:54:08  <indutny_web>pretty interesting question
20:54:14  <indutny_web>I haven't measured it yet
20:54:51  <pquerna>the other one that could be interesting is the x509 store
20:54:51  <indutny_web>right now only speed matters for me, and I want to beat nginx :)
20:55:11  <pquerna>either implementing the interface so your internal storage is stable after config / lockless
20:55:18  <pquerna>or just turning them off if you never modify
20:55:27  <indutny_web>hm... yeah
20:55:39  <indutny_web>but why not just move everything to separate Isolates
20:55:40  <pquerna>how far off is it right now from nginx?
20:56:04  <pquerna>most of the locking isn't even for globals is it?
20:56:06  <indutny_web>4200 vs 5000
20:56:14  <pquerna>its just for certain objects that are shared
20:56:21  <pquerna>at least on the ssl side
20:56:23  <indutny_web>pquerna: well, there're some globals
20:56:25  <indutny_web>and also
20:56:28  <indutny_web>locks are not cheap
20:56:30  <pquerna>the contxt, itss shared x509 store
20:56:38  <indutny_web>considering that they have memory barriers inside them
20:57:08  <indutny_web>hm... which reminds me about running it through cachegrind
20:57:23  <pquerna>another thing ot look at
20:57:30  <pquerna>we call like the openssl get_error thing...
21:00:11  <pquerna>ERR_get_state locks too
21:00:12  <pquerna>sigh
21:00:16  <pquerna>this is kinda sucky :-/
21:00:20  <indutny_web>well, I'm not using it much
21:00:34  <indutny_web>actually, contention is visible, but not that high
21:00:46  <indutny_web>I'm just afraid of memory barriers which probably kills cpu pipeline
21:00:54  <pquerna>nginx at 5k, is that multi-proc?
21:00:58  <indutny_web>yes
21:00:59  <pquerna>or just threaded
21:01:05  <indutny_web>nginx is multiproc
21:02:43  * `3rdEdenquit (Remote host closed the connection)
21:04:19  <indutny>hm...
21:04:20  <indutny>oh shit
21:04:25  <indutny>I was using only 16 processes for nginx
21:04:30  <indutny>it's probably even more faster
21:04:54  <indutny>palmface
21:05:06  <indutny>pquerna: 6747 rps
21:05:07  <pquerna>have you played with pin'ing the processes to the cpus?
21:05:33  <pquerna>guess it'll depend on what machine you are doing it on quite a bit too
21:08:00  <indutny>interesting
21:08:06  <indutny>I think I've cap limit on that machine :)
21:08:21  <indutny>I'm getting only 200 rps on tlsnappy now :)
21:08:49  <indutny>hm...
21:08:52  <indutny>6700...
21:08:52  <indutny>wtf
21:08:57  <indutny>how is it that fast
21:09:06  <indutny>I've profiled tlsnappy a lot
21:09:20  <indutny>and the most of it's time it's doing BN_... stuff
21:10:38  <indutny>ok, I think I need to dig into it a little bit more...
21:12:30  * roxluquit (Quit: Page closed)
21:20:23  * yawntjoined
21:20:47  <yawnt>hai
21:25:50  * bazjoined
21:26:02  <baz>Hi guys
21:26:12  <indutny>hi
21:26:19  <baz>I have a really deep question to ask about libuv - and I have no idea how to proceed
21:26:22  <baz>Is this the correct place?
21:26:39  <indutny>yes
21:26:45  <indutny>the most correct one
21:26:47  <baz>okay, here goes...
21:27:02  <baz>okay, I am porting the scrypt key derivation library to node. In fact, its done. npm install scrypt will get it. Also, the github page explains a lit about it: https://github.com/barrysteyn/node-scrypt
21:27:11  <baz>The thing is, scrypt takes as input a time variables (it is a double, its unit is in seconds). Its security relies upon the fact that you have to take this amount of time to compute your answer.
21:27:22  <baz>When I put a lot of them up on the event queue (it is asynchronous), the functions always seem to be cut off and not allowed to finish. Which ruins the derivation function
21:27:34  <baz>I am not experienced enough with Node internals, so I don't really know how to proceed
21:27:37  <baz>Any suggestions?
21:27:54  * piscisaureus_awachanged nick to piscisaureus
21:27:58  <baz>BTW: I am experienced in crypto, so I can explain scrypt if anyone wants to know
21:28:25  <piscisaureus>baz: so what do you mean with "put a lot of them up on the event queue" ?
21:28:32  <piscisaureus>what libuv functions are you calling for that?
21:28:39  <piscisaureus>baz: and "not allowed to finish" ?
21:28:47  <baz>Sorry, I may not be explaining myself correctly
21:28:49  <piscisaureus>baz: they never complete, or they crash, or ?
21:30:02  <baz>The scrypt function has both an encrypt and a decrypt part. Lets say we choose a time of 2.0 seconds to perform encryption, then decryption with the resulting cipher MUST be 2.0 seconds as well. Anything less and it will return an error
21:30:10  * indutnysigns off
21:30:11  <indutny>ttyl
21:30:12  <baz>So with that in mind, look at this...
21:30:51  <baz>Assume that maxtime is set to 2.0
21:31:28  <baz>scrypt.encrypt(message, password, max_time, function(err, cipher) {scrypt.decrypt(cipher, password, max_time, function(err, msg) { if (err) console.log(err);});});
21:31:47  <baz>The above will return a scrypt error after running it say 50 times
21:32:18  <baz>In my code, I am just doing the work by using uv_queue_work
21:32:22  <piscisaureus>ah
21:32:29  <baz>So when I put lots of them on
21:32:32  * indutny_webquit (Ping timeout: 245 seconds)
21:32:59  <baz>It somehow does not allow some of the functions to finish??? At least this is what I suspect
21:33:08  <piscisaureus>well, no
21:33:16  <piscisaureus>libuv never interrupts work in the thread pool
21:34:09  <piscisaureus>baz: so, the error is that it couldn't encrypt the data?
21:34:13  <baz>Can you suggest anything I can do (or do you know what the problem is). I am excited about booting Ruby from my job, but I need to have this working before I do
21:34:25  <baz>Actually, it could not decrypt the data
21:34:31  <piscisaureus>ah right
21:34:51  <piscisaureus>so how does scrypt know how much time it spends decrypting the data?
21:35:05  <baz>You have to give it a value
21:35:10  <piscisaureus>baz: yes - ok
21:35:34  <piscisaureus>baz: so my assumption would be that it expects a certain number of computations
21:35:41  <baz>For testing, I have hard coded these values (not on the release version) to make sure something like a rounding error was not involved
21:35:47  * bradleymeck_joined
21:35:49  <baz>Yes
21:35:58  <baz>It is quite a beast
21:36:00  <baz>:)
21:36:03  <piscisaureus>how many cores does your machine have?
21:37:18  <baz>two
21:37:23  <baz>It is my dev laptop
21:37:53  <baz>I am able to run this perfectly over a loop of 1000 in Python and Ruby
21:37:54  <piscisaureus>baz: so what happens if you encrypt something for two seconds, while the cpu is otherwise unused
21:38:09  <baz>It works.
21:38:34  <piscisaureus>baz: but then you decrypt it in the thread pool, so you might end up doing 4 decryptions in parallel
21:38:51  <piscisaureus>so each decryptor gets only half of a cpu core
21:39:05  * bradleymeck_quit (Client Quit)
21:39:19  <baz>Why do you say 4 decryptions in parallel?
21:39:20  <piscisaureus>baz: does scrypt have some trickery to deal with this?
21:39:38  <piscisaureus>baz: well the uv_queue_work thread pool scales up to 4 threads typically
21:39:46  <piscisaureus>(atleast in node 0.8 on unix)
21:40:02  <baz>Not that I know of. I know about the key derivation function well, but I do not know the internals inside out. But I don't think it has any trickery...
21:40:15  <baz>Okay, I did not know that
21:40:18  * bradleymeckquit (Ping timeout: 264 seconds)
21:40:18  <baz>Thanks
21:40:40  <piscisaureus>baz: so what you could try is just running one decryption at a time to figure out if that solves your problem
21:40:53  <baz>I have done that
21:40:59  <baz>Actually, what I did was more simple
21:41:10  <baz>I tried one encryption followed by a decryption
21:41:24  <baz>And it works - most of the time. But sometimes it does not.
21:41:42  <baz>That was when I decided to try it in a loop, and then it always failed some of the time
21:41:59  <piscisaureus>hmm
21:42:11  <baz>I was thinking of launching separate threads instead of putting is in the event queue
21:42:19  <baz>Would that help?
21:42:23  <piscisaureus>baz: you could do that
21:42:38  <baz>Then, some more questions
21:42:46  <baz>My threading knowledge is not the best
21:43:25  <baz>If I fire multiple threads, will the OS take care of when to run them. In other words, if there is not enough resources around, will the OS just delay things until there is, and then run the thread
21:43:38  <baz>So will the thread be guaranteed to run eventually?
21:43:57  <piscisaureus>baz: but to be honest I have no clue what's going on. If scrypt actually requires exactly 2.0 seconds of uncontended CPU time, that sounds like a major design problem in the library to me. Would it not be an option to set maxTime much higher for the decryption process?
21:44:41  <piscisaureus>baz: yes the os takes care of that.
21:44:49  <piscisaureus>baz: but it doesnt do resource management for you
21:45:22  <baz>Most things in computers are good if they run fast. For key derivation, its different: The longer it takes, the more secure it is (thus brute force attacks are difficult)
21:46:05  <piscisaureus>baz: the OS will make a core run your thread and interrupt it when it's time quantum is up (quantums are typically a couple milliseconds). Then it will run another thread on that core for a quantum, etc
21:46:12  <baz>If I have encrypt m, and it becomes c, during the encryption phase, if I set the maxtime to 2.0 seconds, then I must have a maxtime of 2.0 seconds during the decryption
21:46:40  <piscisaureus>baz: so it is not possible to encrypt with maxTime 2 and decrypt with maxTime 10?
21:46:43  <baz>Maxtime is a variable, it can be set to 0.5, 1.0, 3.0. As long as the same maxtime is used for decryption as it is used in encryption, we are all good
21:46:57  <baz>Yes, that can be done
21:47:15  <baz>But it does not guarantee it will work, and it sounds like a bit of hack to me
21:47:56  <stagas>shouldn't it encrypt with a minTime and decrypt with a maxTime or no upper limit on the decryption?
21:48:01  <baz>When you say it does not do resource management, what do you mean by that (resources as in memory???)
21:48:45  <piscisaureus>baz: yes, or file descriptors, or whatever
21:48:59  <piscisaureus>baz: it just runs stuff "in parallel"
21:49:03  <baz>I will quote from the author of scrypt: maxtime - maximum amount of CPU time to spend computing the derived keys, * in seconds. This limit is only approximately enforced; the CPU * performance is estimated and parameter limits are chosen accordingly. * For the encryption functions, the parameters to the scrypt key derivation * function are chosen to make the key as strong as possible subject to the * specified limits; for the decryption
21:49:57  <piscisaureus>baz: so what is scrypt the error you got?
21:50:22  <baz>What do I have to watch out for when I execute multiple threads if I have to manage resources. Also, I assume I can use uv_thread_create
21:51:19  <baz>The error I got was error 9: Not enough time for for decryption
21:51:26  <piscisaureus>ah
21:51:29  <baz>Here is what the author says about decryption
21:51:31  <baz>for the decryption functions, the parameters used are * compared to the computed limits and an error is returned if decrypting * the data would take too much memory or CPU time.
21:51:32  <piscisaureus>baz: so i have another suspicion
21:51:40  <baz>Okay, please do tell
21:51:55  <piscisaureus>baz: do you properly copy stuff before moving it off the thread pool?
21:52:09  <piscisaureus>baz: er, *onto the thread pool
21:52:21  <baz>Do you mean do I perform a deep copy?
21:52:33  <baz>And then do I release my data afterwards from the heap?
21:52:46  <baz>Is that what you mean?
21:52:49  <piscisaureus>baz: because this -> https://github.com/barrysteyn/node-scrypt/blob/master/scrypt_node.cc#L193-L213
21:52:56  <piscisaureus>baz: is wrong
21:53:36  <baz>Thanks for spotting this. To tell you the truth, seven days ago, I did not even know about how to do with this NodeJS
21:53:55  <baz>So if you could tell me what I am doing wrong, I would greatly appreciate it
21:54:28  <baz>I just followed an example to tell you the truth
21:55:46  <baz>Also, the error that I get is number 9
21:56:49  <stagas>baz: I think the error you're getting is normal
21:57:09  <stagas>baz: the security of scrypt seems to be that you are not allowed to run decryptions in parallel that consume more cpu / memory
21:57:14  <baz>Cool. I am just glad that you guys know what the error is
21:58:16  <stagas>baz: so you are kind of forced to run that slow decryption serially
21:58:19  <piscisaureus>baz: String::Utf8Value makes a temporary "copy" of the string on the c heap, but that copy disappears at the end of the function.
21:58:37  <baz>Actually @stagas, I was giving you the wrong error. It was returning number 10
21:58:46  <piscisaureus>baz: however you are just copying a pointer to that string into the baton object - you should copy the string itself
21:58:52  <baz>If CPU/Mem was an issue (as opposed to time) it would be a different error
21:58:53  <piscisaureus>(because the pointer will not be valid)
21:59:12  <baz>Ahhhh
21:59:15  <baz>That makes sense
22:00:26  <baz>But the baton->message is std::string - I thought the = operator was overloaded to perform a deep copy? Am I wrong?
22:01:53  <piscisaureus>you might be right - euh
22:01:59  <piscisaureus>I never use std
22:02:25  <baz>I was hoping I was wrong - it would be the easiest fix :(
22:04:34  <baz>@stagas - if you are correct (you must run decryption serially), how do I accomplish that within the node framework?
22:05:43  <tjfontaine>setup a queue on the js side that handles dispatching
22:06:42  <baz>@tjfontaine - thanks. Can you point me to some documentation on how to do this?
22:07:26  * rendarquit
22:09:40  <tjfontaine>baz: not really, a crude implementation would be to just change .encrypt and .decrypt to [].push() and then proxy the cb which would then check if there are more actions to be performed
22:10:40  <baz>@tjfontaine - hmmmm, I really need to read up on this stuff. is [].push a node internal command?
22:10:59  <tjfontaine>baz: no [] is a javascript array
22:11:26  <baz>Yeah, so push it on an array, and then pop it off the array when the time comes?
22:11:31  <baz>Okay, that makes sense.
22:11:49  <baz>But yikes, Ruby and Python will beat the living daylights out of this implementation then....
22:12:04  <tjfontaine>not if it all has to be done serially
22:12:08  <baz>My dream of ousting Ruby and using Node will never fly in the in the office
22:12:41  <baz>But surely Python just uses multiple threads?
22:14:48  <baz>I think what I may be forced to do is to ask Colin Percival (the author of scrypt) for some help. He may ask me some questions regarding libuv that I may not know. Can I fire them back to this channel?
22:15:59  <stagas>baz: the queue won't scale also beyond one node process, so a cluster all trying to decrypt will fail again. I think you shouldn't use a queue and fail, then a higher level abstraction should take care of that
22:17:37  <stagas>baz: also are there any docs online for scrypt? can't seem to find anything beyond the pdf
22:17:42  <baz>stagas: my understanding is that using a queue will work, but it will make it as slow as hell
22:18:30  <baz>You can go to the tarsnap page, and you can see the author's comments there. Besides the paper, one also has the code. After that, we are on our own...
22:18:55  <stagas>baz: my understanding is that each decryption should be slow as maxtime or it will fail
22:19:13  <baz>At least as slow as maxtime
22:19:15  <baz>Yes
22:19:34  <baz>But I suspect (and I am no expert) that Python or Ruby will fire several threads that will deal with this
22:19:52  <baz>Because when I do a loop in the python implementation of Scrypt of 1000 loops, it works well
22:21:27  <stagas>baz: you do these in parallel?
22:23:00  <baz>stagas: No, I just run a loop. I am using time to test my assumption though that nothing happens behind the scenes...
22:23:36  <stagas>baz: and how long does that take
22:23:49  <baz>I am testing now...
22:23:53  <baz>Will put the results up soon
22:25:22  <txdv>piscisaureus: what do you think about uv_udp_dualstack(handle, enable) ?
22:28:16  <stagas>baz: anyway, I believe the expected behavior of scrypt is not to allow you to run multiple decryptions in parallel and the error is normal since you try to do 50 of them. that's like brute force, the thing it's trying to solve by using sequential key derivation functions
22:28:52  <stagas>baz: but better ask the author about it
22:29:43  <baz>stagas: After running it in python (doing 100 encrypts, and 100 decrypts - each with a maxtime of 1.0 sec), it takes 2m30.875s
22:29:57  <baz>I am going to ask the author about it, and will report back here
22:30:03  <baz>If you are interested that is :)
22:30:15  <stagas>baz: and it's also probably the reason it's not highly adopted, since if you have hundreds of users trying to login at the same time would keep them waiting for ages
22:30:35  <stagas>baz: though it's very secure
22:31:31  <baz>stagas: Actually, I believe it will be the future. Tarsnap has an incredible load, and it is able to handle things perfectly. I will get the answers from Dr Percival, and I will provide this community with this wonderful resource (if it is possible to do so).
22:36:39  <stagas>baz: try doing the same test in your lib in sequence I suspect the same result in time
22:37:31  <baz>stagas: okay :)
22:37:37  <baz>I will report back to you guys...
22:39:27  * TooTallNatequit (Ping timeout: 260 seconds)
22:40:52  * TooTallNatejoined
22:43:37  * joshthecoderjoined
23:18:02  * piscisaureusquit (Quit: ~ Trillian Astra - www.trillian.im ~)
23:19:07  * bradleymeckjoined
23:50:20  * stagasquit (Ping timeout: 250 seconds)