00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:07  <bnoordhuis>txdv: yes, UV_EINVAL. UV_EFAULT was an oversight
00:00:08  * ircretaryjoined
00:00:34  <txdv>so EINVAL?
00:00:39  <bnoordhuis>yes
00:00:47  <bnoordhuis>indutny: i reverted it in v0.8
00:01:01  <indutny>yeah, figured this out
00:01:02  <indutny>b4b750b
00:01:09  <indutny>what do you think about applying this on top of revert of revert
00:01:14  <indutny>seems to be working fine in master
00:01:17  <indutny>I just forgot to backport it
00:01:21  <txdv>will you be around for 1 hour bnoordhuis?
00:01:22  <bnoordhuis>"seems"
00:01:24  <bnoordhuis>txdv: no
00:02:00  <txdv>ok, i'll do that address struct by reference commit for that issue tonight
00:02:14  <bnoordhuis>indutny: i'm okay with reapplying it as long as it doesn't break the tests again
00:03:20  <indutny>running testes
00:05:43  <indutny>bnoordhuis: wfm
00:05:53  <MI6>joyent/node: Fedor Indutny v0.8 * 31583be : tls: follow RFC6125 more stricly * Allow wildcards only in left-most par (+1 more commits) - http://git.io/PXo-Ww
00:06:23  <txdv>is it "a IPv4" or "an IPv4"
00:07:28  <bnoordhuis>txdv: in what context
00:07:51  <txdv>"bind to a IPv4" or "bind to an IPv4", which sentence is correct
00:08:54  <cmr>neither, but the second is more correct
00:09:27  <txdv>+ if (handle->type != UV_TCP) {
00:09:27  <txdv> uv__set_artificial_error(handle->loop, UV_EINVAL);
00:09:33  <txdv>+ if (handle->type != UV_UDP) {
00:09:33  <txdv> uv__set_artificial_error(handle->loop, UV_EFAULT);
00:09:50  <txdv>thsi is mixed up too, bnoordhuis this should be EINVAL too, right?
00:11:06  <txdv>yes it should be
00:12:56  <txdv>ok, should I commit a fix for that in a seperate commit?
00:17:06  * c4miloquit (Remote host closed the connection)
00:17:46  <indutny>ok, time to sleep
00:17:46  <indutny>ttyl
00:18:28  <isaacs>TooTallNate: yeah, let's put this on the list for 0.12
00:18:36  <isaacs>TooTallNate: it's not major, but it's a feature
00:18:48  <isaacs>and might break some stuff
00:18:49  <TooTallNate>isaacs: yup yup, no prob
00:19:05  <TooTallNate>indeed, i don't know if it'll be possible to do in a backwards compat way
00:19:27  <bnoordhuis>txdv: yes
00:24:45  <txdv>bnoordhuis: you know that EFAULT means bad address, but you say that a garbage address should return EINVAL?
00:24:59  <bnoordhuis>txdv: yes. EFAULT means bad _memory_ address
00:25:06  <txdv>aaa
00:25:06  <bnoordhuis>EINVAL is just a generic 'bad input' error code
00:25:13  <txdv>EINVAL makes sense then
00:25:44  <txdv>ok ill open up an issue and I hope you gonna pull it fast so I can do the 'address struct by reference' on top of it
00:31:36  <trevnorris>isaacs: fwiw I ported the http_simple test to the new lib.
00:32:16  <isaacs>kewl
00:32:46  <txdv>and uv_udp_send doesn't even have a check if the handle is valid or not
00:33:03  <txdv>i'm going to open up an issue!!!
00:34:46  <MI6>joyent/node: Ben Noordhuis master * 8b0f3ce : v8: add %p option to --logfile, expands to pid Useful when you are profi - http://git.io/OxieqQ
00:35:54  <isaacs>bnoordhuis: so, remember this? https://github.com/joyent/node/issues/3945
00:36:11  <isaacs>bnoordhuis: it looks like we have a test that fails when I add the 'emit socket errors on req' bit
00:36:27  <isaacs>bnoordhuis: specifically, test/simple/test-http-blank-header.js has a Parser Error from the http parser
00:37:10  <bnoordhuis>isaacs: sorry, i'm about to sign off. it's 1.30 am and i have to get up early tomorrow
00:37:23  <isaacs>oh, no worries
00:37:24  <isaacs>g'nite
00:37:54  <bnoordhuis>thanks, sleep tight
00:41:07  <trevnorris>isaacs: so just realized that i'm testing my v0.8.17 build against the master http_simple bench. are there any changes from streams2 that would affect that bench?
00:42:17  * bnoordhuisquit (Ping timeout: 256 seconds)
00:45:46  * rumpjoined
00:53:31  <isaacs>trevnorris: we should be able to backport master's benchmark/ folder entirely onto v0.8
00:54:09  <isaacs>ah, so... our http_parser does NOT like getting a request body without a content-length
00:55:28  <trevnorris>isaacs: ok. so does that mean some tests will need two versions. One using the old stream api, and the others optimized for the new streams2 api?
00:55:55  <isaacs>trevnorris: the benchmarks all should work on both, at least, the ones we have so far.
00:56:11  <isaacs>trevnorris: it's mostly API compatible
00:57:24  <trevnorris>isaacs: ok (and sorry i'm tired) so because you made the new streams2 api compatible with the old one the benchs will work. but would they perform better if they were updated?
00:58:41  <isaacs>trevnorris: well, maybe, but that's cheating
00:58:50  <isaacs>:)
00:59:23  <isaacs>trevnorris: http_simple just uses the very basic http apis. net-pipe.js uses Socket.pipe only
01:00:38  <trevnorris>isaacs: hm, ok. guess i'm wondering things like, say, if all the backwards compatibility bits were removed would it improve performance?
01:01:27  <isaacs>trevnorris: perhaps. but that's not a luxury we have at this point in time.
01:01:47  <isaacs>trevnorris: maybe for 2.0
01:02:20  <trevnorris>isaacs: yeah I totally understand. just want to prevent undo head bashing figuring this out when the problem isn't actually there. for example
01:02:48  <trevnorris>when you call a method in the buffer.prototype to the buffers parent, you lose 20% performance because v8 requires a context change.
01:03:03  <trevnorris>so unless we move the entire buffer class to C that's performance we'll never get back.
01:03:54  <txdv>I think I am going crazy
01:04:41  * AvianFluquit (Remote host closed the connection)
01:05:44  <isaacs>trevnorris: right
01:07:17  <trevnorris>anyways. i'm out. going to try and port the rest of the existing benchmarks tonight.
01:07:18  * trevnorrisquit (Quit: Leaving)
01:12:02  * qmx|awaychanged nick to qmx
01:19:15  * rumpquit (Quit: rump)
01:22:46  * sblomquit (Ping timeout: 245 seconds)
01:28:34  * EhevuTovjoined
01:28:47  * AvianFlujoined
01:38:42  * indexzerojoined
01:41:40  * loladiroquit (Quit: loladiro)
01:42:42  * abraxasjoined
02:09:26  * AvianFluquit (Remote host closed the connection)
02:15:43  * loladirojoined
02:29:28  * dapquit (Quit: Leaving.)
02:44:35  * loladiroquit (Quit: loladiro)
02:46:11  * TooTallNatequit (Quit: Computer has gone to sleep.)
02:52:45  * qmxchanged nick to qmx|away
02:56:49  * pooyaquit (Quit: pooya)
02:58:05  * TooTallNatejoined
03:04:45  * abraxasquit (Remote host closed the connection)
03:05:22  * abraxasjoined
03:09:53  * abraxasquit (Ping timeout: 248 seconds)
03:13:35  * indexzeroquit (Quit: indexzero)
03:30:23  * wavdedjoined
03:33:18  * LOUDBOTquit (Remote host closed the connection)
03:33:32  * LOUDBOTjoined
03:37:08  * LOUDBOTquit (Read error: Connection reset by peer)
03:37:13  * CAPSLOCKBOTquit (Ping timeout: 245 seconds)
03:39:55  <wavded>can someone tell me if incoming OS notifications (e.g. kqueue, etc.) are handled in a seperate thread or on main one in Node/libuv?
03:52:45  * brsonquit (Quit: leaving)
03:55:04  * LOUDBOTjoined
03:55:04  * CAPSLOCKBOTjoined
04:05:31  * cmrquit (Ping timeout: 240 seconds)
04:17:46  * cmrjoined
04:18:53  * TooTallNatequit (Quit: ["Textual IRC Client: www.textualapp.com"])
04:21:35  * abraxasjoined
04:25:53  * sblomjoined
04:34:14  * abraxasquit (Remote host closed the connection)
04:37:10  <wavded>is libuv polling on these OS notifications when it loops? if so is that a seperate thread that's doing that or? and how if so, how often does it poll?
04:40:39  <wavded>i'm bowing out for now but will check back in tomorrow, if anyone has any info it would be greatly appreciated, trying to understand this stuff as JS guy who knows little C and little systems programming
04:40:50  * wavdedquit (Quit: WeeChat
04:42:34  * abraxasjoined
04:45:33  * indexzerojoined
04:52:26  * trevnorrisjoined
05:05:43  * pooyajoined
05:20:09  * brsonjoined
05:22:55  * loladirojoined
05:24:36  * mikealquit (Quit: Leaving.)
05:31:36  * wolfeidauquit (Read error: Connection reset by peer)
05:31:53  * wolfeidaujoined
05:33:25  <txdv>wavded_: main one
05:35:16  * wolfeida_joined
05:35:37  * rumpjoined
05:35:53  * wolfeidauquit (Read error: Connection reset by peer)
05:38:16  * wolfeida_quit (Remote host closed the connection)
05:40:27  * TheJHjoined
05:43:18  * stagasjoined
05:43:53  * c4milojoined
05:46:08  * pooyaquit (Quit: pooya)
05:47:06  * pooyajoined
05:57:50  * wolfeidaujoined
06:02:56  * ericktjoined
06:03:21  * bradleymeckjoined
06:06:05  * mikealjoined
06:07:06  * TheJHquit (Ping timeout: 252 seconds)
06:07:45  * trevnorrisquit (Quit: Leaving)
06:14:25  * mikealquit (Ping timeout: 248 seconds)
06:15:12  * mikealjoined
06:18:19  * c4miloquit (Remote host closed the connection)
06:24:09  * abraxasquit (Remote host closed the connection)
06:24:45  * abraxasjoined
06:29:00  * abraxasquit (Ping timeout: 240 seconds)
06:35:15  * paddybyersjoined
06:42:50  * ericktquit (Quit: erickt)
06:49:33  * pooyaquit (Quit: pooya)
06:51:52  * stagas_joined
06:52:23  * stagasquit (Ping timeout: 252 seconds)
06:52:25  * stagas_changed nick to stagas
07:06:20  * rumpquit (Quit: rump)
07:15:08  * Benviequit
07:15:25  * pooyajoined
07:15:41  * pooyaquit (Client Quit)
07:27:52  * paddybyersquit (Remote host closed the connection)
07:28:11  * paddybyersjoined
07:29:51  * AvianFlujoined
07:40:27  <indutny>isaacs: y?
07:40:33  <indutny>s/y/yt/
07:42:10  * loladiroquit (Quit: loladiro)
07:44:18  * indexzeroquit (Quit: indexzero)
07:52:35  * rumpjoined
07:52:46  * stagas_joined
07:54:12  * stagas__joined
07:56:21  * stagasquit (Ping timeout: 256 seconds)
07:56:37  * stagas__changed nick to stagas
07:57:00  * stagas_quit (Ping timeout: 240 seconds)
08:01:15  * rendarjoined
08:07:27  * loladirojoined
08:08:42  * stagas_joined
08:11:12  * stagasquit (Ping timeout: 252 seconds)
08:11:22  * stagas_changed nick to stagas
08:14:14  * stagas_joined
08:16:33  * brsonquit (Quit: leaving)
08:17:30  * bradleymeckquit (Ping timeout: 240 seconds)
08:17:42  * stagasquit (Ping timeout: 276 seconds)
08:17:54  * stagas_changed nick to stagas
08:18:22  * bradleymeckjoined
08:21:42  * stagas_joined
08:23:40  * stagas__joined
08:25:38  * stagasquit (Ping timeout: 252 seconds)
08:25:50  * stagas__changed nick to stagas
08:26:14  * rumpquit (Quit: rump)
08:26:41  * stagas_quit (Ping timeout: 244 seconds)
08:26:54  * loladiroquit (Quit: loladiro)
08:44:27  * EhevuTovquit (Quit: This computer has gone to sleep)
09:09:06  * `3rdEdenjoined
09:10:29  * bradleymeck_joined
09:11:06  * bradleymeckquit (Ping timeout: 272 seconds)
09:11:07  * bradleymeck_changed nick to bradleymeck
09:22:10  * abraxasjoined
09:22:41  * abraxasquit (Remote host closed the connection)
09:36:19  * bradleymeck_joined
09:36:40  * bradleymeckquit (Ping timeout: 256 seconds)
09:36:40  * bradleymeck_changed nick to bradleymeck
09:59:01  <txdv>indutny: a better argument would be that most of the java libs are build on top of blocking libraries
09:59:09  <indutny>emh
09:59:11  <indutny>meh
10:00:00  <txdv>what meh
10:02:30  <indutny>meh
10:02:37  <indutny>blocking libs is not only reason
10:05:17  <txdv>well your reason was like 'o all the nice java ecosystem libs? who needs them, i can code that all myself!'
10:05:24  <txdv>go go go git implementation in pure javascript
10:05:41  <txdv>you do that, I send you vodka from lithuania
10:06:06  <indutny>erm
10:06:10  <indutny>I think it's already done
10:06:12  <indutny>partially
10:06:23  <indutny>I mean, you can use C libraries from node
10:06:26  <indutny>or C++ ones
10:06:31  <indutny>or you can write it yourself
10:06:35  <indutny>honestly, I can write a git library
10:06:41  <indutny>I just don't have resources for it
10:07:02  <indutny>but if I'll ever need it - I'll either use bindings for libgit or write it myself
10:07:13  <indutny>I won't ever feel urge to move to another platform just because of this
10:07:48  <txdv>fucking keyboard drivers
10:08:29  <txdv>java has a lof resources
10:08:34  <txdv>there are so many developers for it
10:08:39  <txdv>jgit was way out there before libgit2
10:09:41  <indutny>and?
10:09:51  <txdv>thats not an argument
10:10:12  <txdv>that is an obnoctious self fullfilling statement
10:10:39  <indutny>I won't argue about historical importantness of java
10:10:47  <indutny>it was quite a good think at it's time
10:10:53  <indutny>I remember coding a lot on it
10:11:09  <indutny>but now there're no real arguments to write programs in it
10:11:16  <indutny>unless it's required by your employer
10:11:31  <txdv>a lot of them do
10:12:26  <rendar>i agree with indutny
10:12:49  <txdv>I agree with him too
10:12:58  <rendar>and i wonder why some of the newest no-sql technologies are actually written in java instead of C/C++
10:13:42  <rendar>all the Apache ecosystem uses java, basically
10:15:02  <txdv>so you agree with indutny statements, which are basically truths, but then you repeat what I say that java has a big ecosystem
10:16:21  <rendar>txdv: yeah, thats because i wrote "i wonder why", i agree with its statement that now there're no real arguments to write programs in java, so i wonder understand _why_ some people (dunno if many or few) starts projects in it :D
10:17:03  <txdv>imo java has fallen behind in language features
10:18:10  <rendar>also, why applications that are so critical in CPU and memory like DBs (nosql, sql or whatever) are written in java
10:18:57  <txdv>Because one day there might appear a java compiler and virtual machine
10:19:15  <txdv>which will execute them faster than the a native implementation
10:19:28  <txdv>it is just like christians waiting for the rapture
10:19:32  <rendar>what about if it won't? :D
10:19:39  <rendar>lol
10:21:13  <txdv>and then they go on doing these really ugly java hacks because 'it is faster'
10:21:26  <txdv>so they loose everything, readability, speed
10:22:35  * stagasquit (Ping timeout: 255 seconds)
10:22:40  <rendar>txdv: exactly i totally agree with you
10:28:21  <txdv>good talk on why githbut still uses the default ruby and not jruby - http://vimeo.com/43698188 - we do not believe in the jvm
10:29:50  <rendar>txdv: cool
10:30:22  <rendar>txdv: i think C++ would be a nice language to develop server-side stuff, what you think?
10:30:50  <txdv>I think node.js is more popular than node.native
10:31:13  <rendar>well yeah
10:31:41  <rendar>but can node.native be used to develop stuff as well?
10:32:17  <txdv>but you have to become a dark wizard first
10:32:28  <rendar>eheh yeah
10:32:49  <rendar>txdv: now imagine for example node.native with very simple and clear apis like Qt's ones
10:33:40  <txdv>I implemented the qt serialization protocol in c#
10:33:44  <txdv>not clear and simple
10:33:51  <rendar>eheh, well yeah
10:34:01  <rendar>Qt sometimes is not an example of clearness :)
10:34:33  <txdv>and QT is not c++
10:34:39  <txdv>it compiles it's code to c++
10:34:51  <rendar>txdv: i know, that really sucks indeed
10:38:15  <txdv>my wrapper has more activity than native.node
10:41:03  <rendar>ahah
10:41:24  <rendar>the c# wrapper to libuv?
10:41:32  <txdv>ja
10:41:36  <rendar>cool
10:43:06  <txdv>why not
10:43:08  <txdv>i'm good at that
10:43:15  <rendar>nice
10:45:17  * bnoordhuisjoined
10:46:55  <txdv>o bnoordhuis
10:46:58  <txdv>my favourite person to whine to
10:48:20  * bnoordhuislistents
10:48:24  <bnoordhuis>listens, rather
10:49:12  <indutny>listens
10:49:25  <indutny>I've started calculating my taxes for last year
10:49:29  <indutny>god damn it!
10:49:38  <indutny>receiveing money in currency is so complicated
10:49:48  <txdv>do people in russia pay taxes?
10:49:56  <indutny>I'm afraid some do
10:50:17  <indutny>my bank has notified tax inspection about my income
10:50:22  <txdv>bnoordhuis: https://github.com/joyent/libuv/pull/689
10:50:23  <indutny>so I need to calculate it myself
10:50:27  <indutny>and fill a lot of paper
10:50:32  * indutnykills trees
10:50:47  <txdv>why can't they automatically calculate the taxes and send you a fill out form
10:50:56  <bnoordhuis>txdv: thanks but i won't have time to look at it today
10:50:59  <bnoordhuis>busy, busy, busy
10:51:01  <indutny>txdv: good question
10:51:09  <indutny>bnoordhuis: btw, about socket sending
10:51:13  <bnoordhuis>they do in NL btw
10:51:20  <indutny>I've just realized that we don't need track: true
10:51:25  <indutny>if we deprecate connections property
10:51:31  <indutny>it was so fast paced yesterday
10:51:36  <indutny>I had no time to think about it
10:51:43  <txdv>waste of human time
10:51:50  <txdv>the germans are masters in burecratism
10:51:51  <indutny>well, you'll receive 'close' event on socketts that were sent
10:52:04  <indutny>but is it that useful that we need to introduce APIs for this?
10:52:06  <txdv>took them an entire year to start paying social benefits
10:52:10  <indutny>I think it can't be handled in user-land
10:52:13  <indutny>bnoordhuis: thougths?
10:52:20  <txdv>lithuanians only took 9 months
10:52:21  <bnoordhuis>indutny: not really, at the moment :)
10:52:21  <indutny>s/thougths/thoughts/
10:52:32  <bnoordhuis>indutny: but less api > more api so i agree in general
10:52:37  <indutny>bnoordhuis: oh, you enterprise slug
11:00:50  <txdv>it's a 6 line patch bnoordhuis
11:09:36  <indutny>brb
11:13:00  * c4milojoined
11:14:43  <MI6>joyent/node: Dan Milon v0.8 * 7295bb9 : dns: make error message match errno - http://git.io/0gzweg
11:17:46  * c4miloquit (Ping timeout: 272 seconds)
11:21:06  <MI6>joyent/libuv: Andrius Bentkus master * 017e2d5 : unix, windows: make uv_*_bind() error codes consistent Just like uv_tcp_ - http://git.io/vL2c7w
11:21:34  <bnoordhuis>txdv: ^
11:22:10  <txdv>awesome
11:23:38  * travis-cijoined
11:23:38  <travis-ci>[travis-ci] joyent/libuv#1036 (master - 017e2d5 : Andrius Bentkus): The build has errored.
11:23:38  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/372ac34d5f80...017e2d5fde0c
11:23:38  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/4229407
11:23:38  * travis-cipart
11:35:27  <saghul>TRAVIS Y U NO WORK
11:40:49  <txdv>wow
11:40:56  <txdv>that was rude LOUDBOT
11:43:29  * paddybyers_joined
11:46:23  * paddybyersquit (Ping timeout: 252 seconds)
11:46:23  * paddybyers_changed nick to paddybyers
11:48:38  <bnoordhuis>indutny: ping
11:48:41  <indutny>pong
11:49:18  <MI6>joyent/node: bnoordhuis created branch issue4617 - http://git.io/JmbMvA
11:49:20  <bnoordhuis>indutny: ^ review
11:49:29  <indutny>please?
11:49:41  <bnoordhuis>with sugar on top
11:49:59  <bnoordhuis>i always forget the question mark when i type that :)
11:51:45  <indutny>one sec
11:51:46  <indutny>:)
11:52:24  <indutny>may be use regexps?
11:52:29  <indutny>indexOf = meh
11:52:40  <bnoordhuis>oh. i guess
11:52:58  <indutny>otherwise lgtm
11:57:40  <MI6>joyent/node: Ben Noordhuis master * 6b713b5 : cluster: make --prof work for workers Profiling in clustered environment - http://git.io/dkeTuw
12:02:31  * bnoordhuisquit (Read error: Operation timed out)
12:31:45  * qmx|awaychanged nick to qmx
12:41:59  * toothrchanged nick to toothrot
12:58:15  * c4milojoined
13:02:40  * c4miloquit (Ping timeout: 252 seconds)
13:23:33  * EhevuTovjoined
13:24:57  * jmar777joined
13:26:13  * jmar777quit (Remote host closed the connection)
13:26:50  * jmar777joined
13:27:06  * jmar777quit (Read error: Connection reset by peer)
13:27:37  * jmar777joined
13:31:12  * loladirojoined
13:31:41  * loladiroquit (Client Quit)
13:55:12  * piscisaureus_joined
14:12:30  * bradleymeckquit (Quit: bradleymeck)
14:16:46  * sgallaghjoined
14:17:04  * sgallaghchanged nick to sgallagh_fudcon
14:21:08  * AvianFluquit (Remote host closed the connection)
14:44:04  * c4milo_joined
14:46:42  * EhevuTovquit (Quit: This computer has gone to sleep)
14:51:46  * stagasjoined
14:57:11  * stagasquit (Ping timeout: 255 seconds)
14:57:38  * stagasjoined
14:58:04  * dapjoined
14:59:20  * stagas_joined
15:02:12  * stagasquit (Ping timeout: 248 seconds)
15:06:17  * stagasjoined
15:06:28  * stagas_quit (Ping timeout: 256 seconds)
15:28:28  * piscisaureus_quit (Ping timeout: 246 seconds)
15:40:41  <isaacs>good morning
15:40:56  <isaacs>i totally forgot to do a 0.9.7 yesterday. starting that now
15:43:02  * `3rdEdenchanged nick to `3E|EGONE
16:00:02  * sblomquit (Quit: leaving)
16:04:27  * qmxchanged nick to qmx|lunch
16:07:56  * `3E|EGONEchanged nick to `3rdEden
16:13:48  <isaacs>ircretary: tell bnoordhuis to review https://github.com/joyent/node/pull/4618 since it solves the bug he posted.
16:13:49  <ircretary>isaacs: I'll be sure to tell bnoordhuis
16:14:28  <isaacs>or really anyone can review it
16:23:12  <hij1nx>isaacs: how relevant/up to date is this? https://github.com/bnoordhuis/node-event-emitter
16:25:17  * pooyajoined
16:28:06  * `3rdEdenquit (Remote host closed the connection)
16:29:03  <isaacs>hij1nx: it's about a year old
16:29:06  <isaacs>so probably not domain-aware
16:29:27  * mikealquit (Quit: Leaving.)
16:29:36  <hij1nx>isaacs: im not going to use it
16:29:42  * pooyaquit (Read error: Connection reset by peer)
16:29:43  <hij1nx>isaacs: talking to indutny now
16:29:45  <isaacs>oh, but it uses MakeCallback, so it might be actually
16:29:59  * pooyajoined
16:31:39  <hij1nx>yeah, so libdtrace module is basically dead, which is kind of crazy. i need to revive it, i have got it up to date using gyp, etc. but i want to make it more node-like, so im turning it into an emitter.
16:32:01  <hij1nx>or something. i dont know i just started on it.
16:38:14  <indutny>ohohoho
16:38:16  <indutny>I'm here
16:39:07  <hij1nx>lol
16:40:50  <isaacs>hij1nx: i thought everyone used node-dtrace-provider now
16:40:58  <isaacs>hij1nx: oh, wait, libdtrace is for the other side, right?
16:41:15  * qmx|lunchchanged nick to qmx
16:41:15  <isaacs>like, running dtrace commands from node, not instrumenting node programs
16:41:35  <isaacs>hij1nx: i'd suggest not trying to make the C++ interface "node-like"
16:41:46  <isaacs>hij1nx: just make it what it is, and wrap in javascript, since javascript is so much easier to work with
16:42:32  <MI6>joyent/node: isaacs master * 0459a60 : npm: Upgrade to 1.2.2 - http://git.io/EGJqKQ
16:43:12  <MI6>joyent/node: isaacs created branch v0.9.7-release - http://git.io/c3qqIA
16:43:14  <isaacs>review please? ^
16:44:51  <hij1nx>isaacs: im all about doing as litte in c++ land as possible. but the way its set up is kin of strange and i was thinking it could simplify it a lot. i'll contemplate it a little first.
16:45:38  <hij1nx>skin/kind/
16:52:25  <hij1nx>isaacs: ok, i should rephrase my intent, it was less about aesthetic and more about being able to know when the snapshot sequence has ended, this is essentially an `end` event.
16:54:30  <isaacs>hij1nx: i see.
16:54:36  <isaacs>hij1nx: you should attach an `onend` function and call it.
16:54:48  <isaacs>hij1nx: using node::MakeCallback
16:55:05  * TheJHjoined
16:55:13  <isaacs>hij1nx: and when your handle object is created, assign a "domain" member to process.domain
16:55:18  <isaacs>boom: domain-aware
16:55:25  <hij1nx>isaacs: nice
16:55:50  <isaacs>that's how we do it with HandleWraps and such
16:56:08  * trevnorrisjoined
16:56:38  <hij1nx>isaacs: when would you add the domain member?
16:56:57  <hij1nx>oh when the handle is created
16:56:59  <hij1nx>nm
16:59:06  <isaacs>from js
17:03:44  * ericktjoined
17:07:34  * ericktquit (Client Quit)
17:12:59  <rendar>hmm, can i see the uv_loop_t structure like a threadpool?
17:18:22  <isaacs>ircretary: tell sblom https://gist.github.com/4566249
17:18:22  <ircretary>isaacs: I'll be sure to tell sblom
17:18:28  <isaacs>ircretary: tell piscisaureus_ https://gist.github.com/4566249
17:18:28  <ircretary>isaacs: I'll be sure to tell piscisaureus_
17:19:27  <isaacs>trevnorris: actually, it looks like that's yours ;P
17:19:35  <isaacs>trevnorris: INFINITY is not defined on windows, it would seem
17:19:51  * mikealjoined
17:20:32  <trevnorris>isaacs: freakin, seriously? ugh.
17:21:00  <isaacs>yeah
17:21:20  <trevnorris>so math.h doesn't contain that on windows, huh? ok, unless you already have a solution I'll get one right now.
17:22:01  <isaacs>googling suggests pulling in std::limits
17:22:02  <isaacs>but eff that
17:22:25  <trevnorris>yeah, I felt the same way. there is a hack where `float inf = 1e308`
17:22:43  <trevnorris>will overload the value to infinity, but don't know if that's reliable.
17:22:50  <isaacs>trevnorris: INFINITY is a float, yes?
17:23:07  <isaacs>what is its value on unix? we can just defined it ifndef
17:24:19  <trevnorris>isaacs: in LE it's 0x0000807f
17:25:07  <isaacs>hrm. but i guess that's the whole point of using a define rather than a hard-coded value, because it varies based on stuff.
17:25:14  <isaacs>some resources suggest using HUGE_VAL instead
17:25:59  <trevnorris>isaacs: just as fyi it's also a double as 0x000000000000f07f. But we're only checking float.
17:26:24  <trevnorris>since if a user types in a value larger than double max, we'll receive it as Infinity anyways and there's nothing that can be done.
17:29:00  <trevnorris>isaacs: also, it's not currently supported in d8's or chromes typed arrays to check for that. It just silently converts the larger double to infinity.
17:29:15  <trevnorris>so do we want to do the same, or figure out the check?
17:29:56  <trevnorris>(e.g. writeFloatLE(1e300,0) -> writeFloatLE(Infinity, 0))
17:30:22  * loladirojoined
17:33:19  * pooyaquit (Quit: pooya)
17:38:32  <isaacs>trevnorris: what's the best test to run to see if a workaround works?
17:39:11  <trevnorris>isaacs: that test should be covered in test/simple/test-writefloat.js
17:39:28  * sgallagh_fudconquit (Remote host closed the connection)
17:40:35  <isaacs>hm. that seems to work.
17:42:51  <isaacs>but it looks like HUGE_VALF is not quite the same semantically
17:44:10  <isaacs>A positive float constant expression. Used as an error value returned by the mathematics library. HUGE_VALF evaluates to +infinity on systems supporting IEEE Std 754-1985.
17:44:19  <isaacs>INFINITY
17:44:19  <isaacs>A constant expression of type float representing positive or unsigned infinity, if available; else a positive constant of type float that overflows at translation time.
17:47:32  <trevnorris>hm... so is the difference basically that one sets the actual bits and the other just assigns a value that overflows when compiled?
17:49:30  <indutny>isaacs: yt?
17:49:45  <isaacs>hi
17:50:32  <indutny>isaacs: so I was like thinking
17:50:38  <indutny>why do we need track: true
17:50:41  <indutny>in .send()
17:51:53  <isaacs>indutny: you mean, just remove it, and use getConnections() instead of .connections?
17:51:58  <indutny>yes
17:52:01  <isaacs>indutny: i'm game.
17:52:02  <indutny>we've deprecated it anyway
17:52:04  <isaacs>indutny: sounds simpler.
17:52:17  <isaacs>indutny: and i think in 0.8 it just goes to null anyway, right?
17:52:38  <isaacs>trevnorris: well, using HUGE_VALF makes the test pass.
17:53:27  <indutny>well, there're no track: true in 0.8
17:53:29  <indutny>right now
17:54:40  <isaacs>trevnorris: hah! and on os x, it does this: #define INFINITY HUGE_VALF
17:55:16  <trevnorris>isaacs: seriously? heh, ok that sounds good to me.
17:55:19  * AvianFlujoined
17:58:10  * pooyajoined
17:58:31  <isaacs>trevnorris: on linux:
17:59:14  <isaacs> 26 #if __GNUC_PREREQ(3,3) 27 # define INFINITY (__builtin_inff()) 28 #else 29 # define INFINITY HUGE_VALF 30 #endif
17:59:44  <isaacs>is there some kind of noflood flag set on this room recently?
18:00:53  <tjfontaine>no that's probably your irssi trying to be smarter than you
18:01:22  <isaacs>probably
18:01:35  <isaacs>anyway, yeah, i guess setting it to HUGE_VALF is fine if it's unset.
18:01:45  <isaacs>the only advantage is that some gcc's have a __builtin_inf()
18:01:49  <isaacs>which is preferred
18:01:52  <trevnorris>isaacs: is there like a minimum version of gcc node supports?
18:02:00  <isaacs>but they all seem to fall back to HUGE_VALF
18:02:07  <isaacs>trevnorris: yeah, but we also support msvs
18:03:05  * TooTallNatejoined
18:03:31  <trevnorris>isaacs: nm. read the __GNU_PREREQ backwards. cool. so basically just check if it's not defined and define it as HUGE_VALF?
18:04:41  <indutny>isaacs: so I'm removing this code then, ok?
18:04:56  <MI6>joyent/node: isaacs reviewme * cca4a16 : buffer: Define INFINITY for MSVC compiler - http://git.io/T03fkQ
18:05:04  <isaacs>indutny, trevnorris ^ review?
18:05:18  <isaacs>indutny: go for it, but it'll be in 0.9.8, not 0.9.7
18:05:18  * rumpjoined
18:05:23  <indutny>wait
18:05:25  <indutny>0.9.7?
18:05:25  <isaacs>indutny: pull req it
18:05:29  <indutny>have we released it?
18:05:34  <isaacs>indutny: not quite :)
18:05:39  <isaacs>indutny: need to fix the windows build :)
18:05:45  <isaacs>see the reviewme above :)
18:05:46  <indutny>and remove this thing
18:05:47  <indutny>:)
18:07:44  <isaacs>wait, wtf...
18:08:01  <isaacs>review this: https://github.com/joyent/node/commit/reviewme
18:08:32  <trevnorris>isaacs: heh, yeah. lgtm
18:10:20  <MI6>joyent/node: isaacs v0.9.7-release * ecf426a : 2013.01.18, Version 0.9.7 (Unstable) * V8: Upgrade to * npm: (+1 more commits) - http://git.io/s_Ow3Q
18:11:45  <isaacs>ok, rebuilding the world
18:11:56  <indutny>release
18:11:58  <indutny>oh oh
18:12:09  <indutny>can you please remove track: true from documentation
18:12:12  <indutny>isaacs: ^
18:12:17  <indutny>it's pretty harmless change
18:12:24  <isaacs>indutny: yeah, sure
18:12:30  <isaacs>since it's gonna disappear in next release anyway
18:12:34  <indutny>yes
18:14:09  * AvianFluquit (Remote host closed the connection)
18:14:32  <isaacs>indutny: https://gist.github.com/4566794
18:14:35  <isaacs>lgty?
18:14:42  <indutny>erm?
18:14:50  <isaacs>er... wait a second..
18:15:02  <isaacs>https://gist.github.com/4566800
18:15:04  <isaacs>that one :)
18:15:08  <isaacs>paste buffers are hard :)
18:15:08  * mikealquit (Quit: Leaving.)
18:15:35  <indutny>huh?
18:15:37  * mikealjoined
18:15:39  <indutny>what's about example header
18:15:47  <isaacs>indutny: just fixing up style a little bit
18:15:50  <indutny>ah
18:15:53  <indutny>ell
18:15:55  <indutny>lgtm
18:15:57  <isaacs>k
18:17:12  <indutny>thank you
18:18:07  <MI6>joyent/node: isaacs v0.9.7-release * 4708b9d : 2013.01.18, Version 0.9.7 (Unstable) * V8: Upgrade to * npm: (+1 more commits) - http://git.io/F0PuKQ
18:18:50  <isaacs>ok! no more changes now
18:18:54  <isaacs>:)
18:19:12  <trevnorris>uh... I can build node like 10x's faster than I can make doc
18:19:30  <isaacs>trevnorris: really? that's weird..
18:19:37  <isaacs>trevnorris: maybe node is already built mostly?
18:20:02  <isaacs>or you're using a lot of parallel jobs?
18:20:43  <trevnorris>isaacs: yeah. have an i7 and build node with -j 8, so that's super fast.
18:20:53  <trevnorris>isaacs: but ran a make docclean then `make doc`, it just hangs at `bash tools/build-changelog.sh`
18:20:57  <isaacs>doc should be parallelizable as well
18:21:03  <trevnorris>freakin...
18:21:04  <isaacs>orly? that's a bit odd.
18:21:27  <isaacs>flies through for me
18:21:39  <trevnorris>well. there we go. for some reason passing -j 6 made it fly
18:22:06  <isaacs>weird
18:22:15  <isaacs>i usually use -j4 because i have 4 cpus
18:22:24  <trevnorris>but it still hangs and the process "marked" just spins at 100%
18:22:56  <rendar>trevnorris: what the -j 8 options is for?
18:23:11  <rendar>oh for multiple cpus, ok
18:25:35  <isaacs>trevnorris: that's weird
18:27:26  <isaacs>trevnorris: os x?
18:27:51  <trevnorris>isaacs: ubuntu 12.10. i'm running through the script line by line to figure out why.
18:28:24  <isaacs>great!
18:28:28  <isaacs>i only ever make doc on darwin
18:28:47  <isaacs>and it seems to run fine there. but since marked is just some node program, there's a possibility that it's a bona-fide node bu
18:28:50  <isaacs>*bug
18:28:55  <isaacs>or it could be something oddball with make of course
18:29:00  <trevnorris>ok. so it's hanging when piping to tools/doc/node_modules/.bin/marked
18:31:31  * stagasquit (Ping timeout: 246 seconds)
18:35:17  * `3rdEdenjoined
18:37:09  * mikealquit (Quit: Leaving.)
18:38:27  * loladiroquit (Quit: loladiro)
18:42:41  <trevnorris>isaacs: so I think it's hanging because stdin is not firing the 'end' event.
18:45:09  <isaacs>trevnorris: interesting
18:45:17  <isaacs>hmm... so...
18:45:25  <isaacs>it seems that HUGE_VALF is not defined on windows either.
18:45:28  <isaacs>only HUGE_VAL
18:45:45  * sgallaghjoined
18:45:46  <trevnorris>mother effing, seriously?
18:45:58  <trevnorris>well we could just pull the define from math.h
18:47:56  <trevnorris>isaacs: would it be horrible if we just injected something like this: https://gist.github.com/4567189
18:48:48  <isaacs>trevnorris: then define HUGE_VALF based on __HUGE_VALF_BYTES?
18:51:33  <trevnorris>isaacs: just updated it with the entire bits/huge_valf.h file.
18:52:00  <trevnorris>isaacs: figured that setting the bytes directly should work, i think...
18:52:43  <isaacs>so, there's no need to set it if we're in GCC
18:53:05  <trevnorris>yeah. this is really only for msvc
18:54:02  <isaacs>well, hm.
18:54:11  <isaacs>check out deps/v8/src/globals.h
18:54:17  <isaacs>#ifdef _MSC_VER
18:54:17  <isaacs>#undef V8_INFINITY
18:54:17  <isaacs>#define V8_INFINITY HUGE_VAL
18:54:17  <isaacs>#endif
18:54:27  <isaacs>they just use HUGE_VAL
18:54:36  <isaacs>so... maybe it's ok to just do the same thing?
18:55:06  <isaacs>or, i wonder if we can just use V8_INFINITY instead of INFINITY?
18:55:42  <trevnorris>isaacs: they only use it in code in comparison to a double (that I can find)
18:58:09  <trevnorris>isaacs: my solutions are: use the define by setting the bits based on machine endianness; overload a float variable so at compilation time it gets set to INFINITY; or just leave the check out like d8 does with typed arrays.
18:59:12  <trevnorris>heh, and you should love this line from globals.h: `#define V8_INFINITY std::numeric_limits<double>::infinity()`
18:59:19  <isaacs>yeah
18:59:21  <isaacs>srsly
19:05:04  <isaacs>trevnorris: https://gist.github.com/4567330
19:06:34  <trevnorris>thank you msvc...
19:07:03  <trevnorris>ugly as hell, but definitely the safest approach.
19:07:03  <isaacs>bnoordhuis will get nauseus looking at this patch, i'm sure.
19:07:05  <isaacs>:)
19:07:12  <trevnorris>lol, yeah.
19:07:24  * mikealjoined
19:08:13  <trevnorris>wish it was as simple as `const float INFINITY = 1.0/0.0;`
19:08:58  <trevnorris>and funny thing is I was so happy to get rid of the extra code in buffer_ieee754.js, but not sure this is looking much better. =)
19:09:23  <isaacs>passes tests on windows x64
19:09:26  <isaacs>waiting on ia32
19:12:12  <trevnorris>keep forgetting those need to be tested when making cpp changes. lived too long in the world of js.
19:12:28  <isaacs>passes on ia32, also
19:12:41  <isaacs>tell me about it
19:13:07  <MI6>joyent/node: isaacs v0.9.7-release * 9e7bebe : 2013.01.18, Version 0.9.7 (Unstable) * V8: Upgrade to * npm: (+2 more commits) - http://git.io/ToUFgA
19:14:00  <isaacs>last one, hopefully :)
19:14:29  <tjfontaine>of .9?
19:15:05  <trevnorris>tjfontaine: no, of figuring out how to define INFINITY for msvc.
19:16:06  <trevnorris>erm... at least that's what we've been screwing with.
19:16:17  * mikealquit (Ping timeout: 248 seconds)
19:16:53  <isaacs>tjfontaine: last one of 0.9.7 :)
19:16:59  * mikealjoined
19:17:28  <tjfontaine>ahh, ok I thought maybe I overslept or something :)
19:17:41  * rumpquit (Quit: rump)
19:17:59  <trevnorris>isaacs: heh, we're now using 3 different ways in two files to determine machine endianness.
19:18:04  <isaacs>tjfontaine: though, we did discuss yesterday rebranding 0.9 as 0.10-RC
19:18:16  <isaacs>trevnorris: ugh
19:18:19  <tjfontaine>that's probably a beneficial approach
19:18:22  <isaacs>trevnorris: patch welcome :)
19:18:54  <isaacs>tjfontaine: probably there's gonna be 0.9.8, and then 0.10.0-RC0/RC1/etc. until 0.10.0 lands
19:19:14  <trevnorris>i'll clean up the buffer side. the other is for typed arrays, and deanm is particular about those.
19:19:37  <tjfontaine>isaacs: makes sense, hopefully it will spur more testing on the leading edge for the release
19:20:24  * brsonjoined
19:21:07  * AvianFlujoined
19:22:45  <trevnorris>isaacs: keep getting side tracked by regressions while working on the benchmarks. (e.g. net-pipe.js shows 5.3Gb on master and 6.3Gb on 0.8.17)
19:22:50  <isaacs>trevnorris: well, if it's just a matter of detecting endianness in 3 different ways, then we can pick one.
19:23:29  <isaacs>trevnorris: maybe make the buffer ones do it the same way as deamn's ;)
19:23:43  * loladirojoined
19:23:56  <trevnorris>isaacs: sounds good. think we could define it in a generic spot? didn't want to need to include v8_typed_array_bswap just for the endianness macro.
19:24:30  <isaacs>trevnorris: i have a hard time caring about stuff like that.
19:24:46  <isaacs>trevnorris: bnoordhuis is more opinionated about our C++ layout. whatever he says, i'll agree with.
19:24:53  * loladiroquit (Client Quit)
19:25:01  <trevnorris>cool. i'll hit him up.
19:25:02  <isaacs>trevnorris: actually, even having 3 different endianness macros is not so bad to me. <shrug/>
19:25:12  <isaacs>as long as it works, id ont' care that much
19:26:45  <isaacs>man, compiling all the binaries on darwin SUUUCCCKKKSSS
19:27:03  <isaacs>for some reason it makes my mac mini freak the hell out when i try to build node on it
19:27:14  <isaacs>i wanted to use that as a build slave of sorts.
19:28:02  <isaacs>since it has way more ram, and double the CPUs
19:28:12  <isaacs>and doesn't set my pants on fire.
19:30:51  <tjfontaine>define: "freak the hell out"
19:31:12  <isaacs>tjfontaine: stops responding, have to hard-restart to use it
19:31:28  <tjfontaine>ouch.
19:31:29  <isaacs>tjfontaine: spinning beachball of death
19:31:37  <isaacs>tjfontaine: all bluetooth devices stop responding
19:31:57  <isaacs>and networking. which is rough, because it's a mac mini, so it's only got bluetooth keyboard etc
19:32:17  <trevnorris>isaacs: how much you want to focus on regressions before 10 lands?
19:32:19  <tjfontaine>that's quite bizarre, have you tried in a new user account? and also with -j1?
19:32:38  * lohkeyjoined
19:34:37  <trevnorris>that makes me feel pretty good about my 40 sec build times.
19:35:17  <isaacs>trevnorris: i want that to be our primary focus.
19:35:24  <isaacs>trevnorris: node 0.10 must be faster than 0.8
19:35:26  <MI6>joyent/node: isaacs created tag v0.9.7 - http://git.io/iY50Lw
19:35:34  <MI6>joyent/libuv: isaacs created tag node-v0.9.5 - http://git.io/0XSTlQ
19:35:36  <MI6>joyent/libuv: isaacs created tag node-v0.9.6 - http://git.io/N73hCQ
19:35:38  <MI6>joyent/libuv: isaacs created tag node-v0.9.7 - http://git.io/smF6fA
19:38:00  <trevnorris>isaacs: hm. i'll keep working on the bench's. right now i'm getting a 17% reg on net pipe and 11% on http.
19:39:28  <isaacs>ok
19:39:44  <isaacs>that about gels with what i'm seeing as well
19:39:47  <isaacs>a lot of that is in src/
19:39:50  <isaacs>i suspect
19:41:32  <trevnorris>isaacs: so you don't think using the deprecated streams api has much impact?
19:41:34  * paddybyersquit (Ping timeout: 260 seconds)
19:41:56  * paddybyersjoined
19:42:16  <isaacs>trevnorris: well, net-pipe.js isn't using the deprecated streams api
19:42:23  <isaacs>trevnorris: neither is http_simple
19:42:41  <isaacs>trevnorris: but nevertheless, switching to old mode shouldn't be a 10% hit
19:43:03  <isaacs>trevnorris: i have a "streams1" branch, which is master + the lib/ folder from right before the streams2 merge.
19:43:17  <isaacs>trevnorris: you'll see a similar regression vs v0.8 on that branch
19:43:36  <isaacs>trevnorris: but v0.8 with master's v8 and master's libuv is faster than v0.8
19:43:56  <trevnorris>isaacs: really? that's actually the next question I was about to ask.
19:44:13  <isaacs>trevnorris: so, it looks like our binding layer is to blame. bnoordhuis looked into it somewhat, and suspects the slab allocator is Doing It Wrong sometimes
19:44:43  <isaacs>mostly i worry that it's obscuring JS-layer performance regressions.
19:45:03  <isaacs>which i know how to track down and fix, but it's tricky to do so when you don't have valid comparisons
19:47:12  <trevnorris>isaacs: has the slab allocator api changed since 0.8?
19:48:03  <isaacs>trevnorris: yeah, a lot of stuff in src/ got moved around
19:48:41  <MI6>joyent/node: isaacs v0.8 * 1c35ee8 : blog: Post for v0.9.7 release - http://git.io/gPNXow
19:49:41  <trevnorris>isaacs: bugger. so no easy way... i'll try to identify the micro tests that use the slab buffer. getting closer to the problem should grow the regression.
19:49:55  <isaacs>trevnorris: one would hope, yes
19:49:55  <MI6>joyent/node: isaacs master * fc3547b : Now working on 0.9.8 (+4 more commits) - http://git.io/U_aKKg
19:55:03  <trevnorris>isaacs: well at least fast buffer creation is ~20% faster, and slow buffers are on par.
19:56:09  <isaacs>kewl :) good job
19:56:34  <isaacs>trevnorris: easy-to-run, consistent, easy-to-interpret benchmarks will go a long way
19:57:54  <trevnorris>thanks. been a perf nut for years.
19:58:32  <trevnorris>funny though. I like creating new features, but find it funner to examine existing code for perf hits and mem leaks.
20:01:09  * loladirojoined
20:03:05  * rumpjoined
20:03:44  * rumpquit (Client Quit)
20:09:28  <trevnorris>holy crap. is there some sort of dependency graph somewhere? my brain is cramping up keeping track of the includes.
20:11:16  <isaacs>haha
20:11:20  <isaacs>no, i don't think so
20:11:53  * indexzerojoined
20:16:01  <isaacs>round 2!!
20:16:29  <MI6>joyent/node: isaacs created branch v0.8.18-release - http://git.io/UiKPVw
20:16:50  <trevnorris>awesome. that has the buffer slice fix.
20:17:32  <isaacs>just runnign tests again
20:18:01  <isaacs>you can tell when a stable branch is about "done" and ready for retirement when the releases have hardly anything in them
20:18:27  <trevnorris>heh, nice rule of thumb
20:42:25  * hzjoined
20:44:50  * jmar777quit (Remote host closed the connection)
20:45:28  * jmar777joined
20:46:03  <trevnorris>isaacs: are you concerned with warnings like "node_crypto.h:156:10: warning: private field 'written_' is not used"
20:46:43  <isaacs>not very
20:46:58  <isaacs>trevnorris: i mean, it probably is a bug, or at least something less elegant than it could be.
20:47:06  <isaacs>but sometimes we keep stuff like that around just to not change the ABI
20:47:21  <isaacs>in this case, it's aprivate field... so... it's not that
20:48:07  <isaacs>trevnorris: indutny had some refactoring planned for src/node_crypto.* so maybe talk to him about it
20:48:13  <trevnorris>ok, i'm not worried about it. and v8 throws plenty of warnings on its own.
20:48:15  <trevnorris>will do.
20:49:34  * qmxchanged nick to qmx|away
20:49:47  * jmar777quit (Ping timeout: 252 seconds)
20:50:39  <MI6>joyent/node: isaacs created tag v0.8.18 - http://git.io/36xJhg
20:51:50  <MI6>joyent/node: isaacs v0.8 * 4598a4c : Now working on 0.8.19 (+3 more commits) - http://git.io/0vZoFg
20:54:36  <MI6>joyent/node: isaacs v0.8 * 9c2c845 : blog: Post for v0.8.18 release - http://git.io/yxlFig
20:57:33  <indutny>trevnorris: this will be fixed
20:57:36  <indutny>once 0.10 will be released
20:57:50  <indutny>we just don't want to touch this code until branching stable release
20:58:28  <trevnorris>indutny: cool. honestly don't even think I've opened the file. been concentrating on buffers.
20:58:48  <MI6>joyent/node: isaacs master * 3d7818f : Merge remote-tracking branch 'ry/v0.8' into master Conflicts: AUTHORS (+17 more commits) - http://git.io/HHwR7w
20:59:20  <indutny>yeah
20:59:24  <indutny>I believe
20:59:44  <trevnorris>indutny: I was chatting w/ you and pisc. about buffer memory usage and performance, and he suggested to "disable slabs".
20:59:49  <trevnorris>indutny: know what he was talking about?
20:59:57  <indutny>slab allocator
21:00:07  <indutny>every buffer is a slice of slab allocator
21:00:15  <indutny>disabling slabs will only improve memory usage
21:00:18  <indutny>not performance
21:00:23  <indutny>performance will degrade
21:00:34  <trevnorris>indutny: um.... i think it's the other way around. slabs call the buffer constructor.
21:00:43  <indutny>aaah
21:00:44  <indutny>terminology
21:00:46  <indutny>anyway
21:00:50  <indutny>slab allocator has big buffer
21:00:58  <indutny>everytime you want to create small buffer
21:01:04  <indutny>you request some space from slab allocator
21:01:10  <indutny>if it doesn't have enough space/is ended
21:01:18  <indutny>new slab buffer will be allocated
21:01:23  <indutny>that's why it's called slab "allocator"
21:02:01  <trevnorris>hm. buffers don't allocate segments using slabs. it uses the v8 api.
21:02:08  <indutny>huh?
21:02:13  <trevnorris>it uses "SetIndexedPropertiesToExternalArrayData"
21:02:25  <trevnorris>and indexes against a smaller segment of the parent buffer
21:02:43  <indutny>and?
21:02:47  <indutny>who is watching watchers?
21:03:15  <trevnorris>what do you mean?
21:03:56  <indutny>one sec
21:04:26  <indutny>oh
21:04:27  <indutny>I lied you
21:05:05  <indutny>buffers are allocated with "new char[]"
21:05:27  <trevnorris>yeah. in Buffer::Replace
21:05:28  <indutny>ok, so bert probably meant that slices of buffers are referencing their parents
21:06:08  <indutny>and, if flattened, memory usage might be lower
21:06:21  <trevnorris>so basically just use slow buffers?
21:06:22  <indutny>by flattening I mean, copying contents of parent buffer and creatining new
21:06:25  <indutny>yes
21:06:30  <indutny>but again
21:06:37  <indutny>you won't get performance improvement
21:06:40  <indutny>only RSS improvement
21:07:03  <trevnorris>yeah. allocating a slow buffer is 10x's slower than a fast buffer.
21:07:27  <indutny>obviously
21:07:53  <trevnorris>so what I wanted to explore was if the parent buffer could be alerted when the referenced fast buffer was no longer being used.
21:08:16  <indutny>and?
21:08:25  <indutny>suppose you've one million of such buffers
21:08:30  <indutny>how will you copy them
21:08:31  <indutny>all at once?
21:08:38  <indutny>this may took several seconds
21:08:40  <indutny>depending on size
21:08:54  <indutny>this won't solve your problem
21:09:15  <indutny>you can use some smart heuristic, but it'll work only in some specific cases
21:09:24  <trevnorris>i wanted to track how much free space a parent buffer has after it's left the allocation pool. then if it has more than, say, 50% free space it would compact it.
21:09:35  <indutny>compaction is slow
21:09:53  * jmar777joined
21:09:59  <indutny>I really suggest exploiting young vs old space
21:10:13  <indutny>if you want to do this
21:10:17  <indutny>but you should try experimenting first
21:10:42  <indutny>suppose you've some event for buffer
21:10:47  <indutny>s/event/event listener/
21:10:58  <indutny>that's triggered when GC suggests you to flatten it
21:11:07  <indutny>run this event manually
21:11:12  <indutny>and experiment with number of buffers
21:11:27  <indutny>the thing is that pause should be unnoticible
21:11:32  <indutny>if you'll get this working
21:11:42  <indutny>I'll try helping you with getting this API into v8
21:11:51  <indutny>trevnorris: is it clear?
21:11:52  <trevnorris>ok. so does v8 let node know when it can clean up parent buffers? (like when there are no more fast buffers pointing to it)
21:12:02  * qmx|awaychanged nick to qmx
21:12:34  <indutny>well, you can remove code that is referencing parent Buffer
21:12:37  <indutny>in C++
21:12:41  <indutny>and keep track of all children
21:12:45  <indutny>and when ~Buffer is called
21:12:49  <indutny>flatten them
21:12:55  <indutny>that's what you can already do now
21:13:08  <indutny>but my opinion is that you should not touch short-living objects
21:13:22  <trevnorris>but isn't ~Buffer only called when there are no more child buffers pointing to it?
21:13:30  <indutny>trevnorris: "remove that code"
21:13:40  <indutny>ah
21:13:42  <indutny>well
21:13:43  <indutny>hm...
21:13:51  <indutny>yeah, just remove it
21:13:57  <indutny>and keep track of children in C++ land
21:14:43  <indutny>sorry, shower time
21:14:44  <indutny>brb
21:17:14  * einarosquit (Remote host closed the connection)
21:19:23  <MI6>joyent/node: Yi EungJun master * 33d2242 : doc: Add NODE_DEBUG env to the first example. The first example in clust - http://git.io/Md7cMg
21:25:27  <TooTallNate>isaacs: so with streams2, how would I detect a "pause" in read() calls?
21:25:41  <isaacs>a "pause"?
21:25:48  <isaacs>that would switch you into streams1 mode
21:26:11  <TooTallNate>no, i want to still use the new API
21:26:32  <TooTallNate>but one of my streams wants me to send a "pause" event to the service if i'm gonna stop reading from it
21:27:16  <MI6>joyent/node: Dave Olszewski master * 14c911d : domain: empty stack on all exceptions Due to the nature of asyncronous p - http://git.io/SbIxcA
21:28:29  <isaacs>oic
21:28:42  <isaacs>so... you can look at how this is handled with readStop() in net.js
21:29:00  <isaacs>TooTallNate: if (!me.push(chunk)) src.readStop()
21:29:15  <isaacs>TooTallNate: or, if (!me.push(chunk)) me.emit('pause')
21:29:17  <isaacs>if you prefer
21:30:29  * jmar777quit (Remote host closed the connection)
21:31:07  * jmar777joined
21:35:45  * jmar777quit (Ping timeout: 256 seconds)
21:37:14  <trevnorris>is there any use for the "ObjectWrap ( ) {" declaration at the top of the ObjectWrap class?
21:38:46  <isaacs>trevnorris: hm...
21:38:48  <isaacs>$ ./node test/simple/test-writedouble.js
21:38:48  <isaacs>assert.js:102
21:38:48  <isaacs> throw new assert.AssertionError({
21:38:48  <isaacs> ^
21:38:50  <isaacs>AssertionError: 127 == 255
21:38:53  <isaacs> at test (/Users/isaacs/dev/js/node-master/test/simple/test-writedouble.js:171:10)
21:39:56  <isaacs>which is really weird because it was passing on 0.9.7 just a few hours ago, but now after the v0.8 merge, it's failing all over the place...
21:41:16  <trevnorris>isaacs: I had to change a few of the tests to handle quiet NaN's. I'll check that now.
21:41:26  <isaacs>bisect says: 22b84e6216b86f9d5178e7d8a4d1a577209b7008 is the first bad commit
21:41:58  <isaacs>thanks
21:42:24  <trevnorris>isaacs: yup. that's the test.
21:42:33  <trevnorris>must have been reverted by the merge.
21:43:16  <trevnorris>wait....
21:45:06  <isaacs>well, what's weird is that when i check master before the merge, it still fails, in the same way
21:45:11  <isaacs>but i could've sworn i'd already tested that
21:45:14  <isaacs>trevnorris: ^
21:45:39  <trevnorris>yeah... i'm double checking something.
21:45:49  <isaacs>i was testing it over and over again, because of the HUGE_VALF business
21:47:27  <trevnorris>just built 14c911d and ran all tests. worked fine.
21:47:48  <isaacs>weeeiiirrrdd
21:47:52  <trevnorris>so that test specifically is failing because it's writing a signaling NaN instead of a quiet NaN.
21:47:54  <isaacs>lemem distclean and start over
21:48:05  * rendarquit
21:48:09  <trevnorris>it's one of the tests I had to change.
21:48:11  <isaacs>while that's cooking, it's lunch time.
21:48:36  <isaacs>trevnorris: what about master?
21:48:42  <isaacs>oh, 14c911d is master
21:48:43  <isaacs>:)
21:49:18  <trevnorris>what platform are you building/testing on?
21:49:57  <isaacs>os x in this case
21:50:31  <trevnorris>well. let me know what happens when you get back.
21:50:34  <trevnorris>that is really strange.
21:51:03  * einarosjoined
21:53:09  <isaacs>trevnorris: distclean and test worked fine
21:53:11  <isaacs>false alarm, i gues
21:53:30  <isaacs>must've had some oddball ia32/x64 stuff kicking around
21:53:30  <trevnorris>really strange.
21:53:58  <trevnorris>did you build 0.8 before this?
21:54:27  <trevnorris>anyways. doesn't matter. it works!
21:58:26  * TheJHquit (Ping timeout: 256 seconds)
21:59:05  <isaacs>all tests pass.
21:59:13  <tjfontaine>ship it.
21:59:15  <isaacs>didn't build it in that folder, no
21:59:34  <tjfontaine>heh
22:02:54  <TooTallNate><3 LOUDBOT
22:12:13  * indexzeroquit (Quit: indexzero)
22:14:35  * stephankquit (Quit: *Poof!*)
22:24:39  * stephankjoined
22:30:10  <indutny>ttyl
22:30:13  * indutny&
22:30:56  <indutny>what's with loudbot
22:31:01  <indutny>he's gone mad?
22:31:30  <indutny>ok
22:31:32  <indutny>bye bye
22:32:13  <trevnorris>who's the resident expert in ObjectWrap?
22:33:59  * mikealquit (Quit: Leaving.)
22:34:17  * mikealjoined
22:35:49  <TooTallNate>trevnorris: ben probably… but what's the question?
22:36:35  <trevnorris>TooTallNate: couple small things. First there's "ObjectWrap ( )" at the top of the class that doesn't look like it's doing anything. commented it out and works fine.
22:38:10  <trevnorris>also i'm just trying to get a grip on the whole weak callback thing.
22:38:48  <TooTallNate>trevnorris: the weak callback gets invoked right before the object gets GC'd
22:38:57  <TooTallNate>trevnorris: so ObjectWrap calls it's own destructor then
22:39:32  <trevnorris>TooTallNate: so will v8 just call WeakCallback when it can be gc'd?
22:40:02  <TooTallNate>ya, right before it does it's thing
22:40:44  <TooTallNate>node-weak leverages this callback :)
22:40:54  <trevnorris>man. I feel like an idiot. ok, so that's how buffer's know when they can be cleaned up.
22:41:11  <trevnorris>ah, nice.
22:41:33  <TooTallNate>yup, totally
22:41:41  <TooTallNate>not the "idiot" part :p
22:41:45  <trevnorris>heh.
22:42:49  <trevnorris>ok. but that's only for the parent buffer. i'm looking for a way to detect when a fast buffer is no longer used.
22:44:33  * indexzerojoined
22:44:53  <trevnorris>TooTallNate: thanks. you answered my million dollar question. kept wondering how those classes knew when to be cleaned up.
22:45:23  <TooTallNate>trevnorris: ya a fast buffer is a little trickier
22:45:27  <TooTallNate>since it's not a native object
22:46:30  <trevnorris>yeah. i'm trying to figure out how v8 keeps track of those. there's got to be a way to tap into that.
22:53:05  <TooTallNate>i mean v8 doesn't keep track of themm
22:53:12  <TooTallNate>they just keep a reference to "parent"
22:53:30  <trevnorris>so how does the parent know when there are no more fast buffers pointing to it?
22:54:03  <TooTallNate>so that doesn't get GC'd until after all the fast buffers with references to that parent are gone
22:54:24  <TooTallNate>trevnorris: it just does… that's the v8 magic sauce
22:54:28  <trevnorris>lol
22:54:49  <TooTallNate>like reference counting, but v8 is a lot smarter about it
22:55:20  <TooTallNate>trevnorris: in JS, an object will never be GC'd as long as another object is keeping a reference to it
22:55:26  <TooTallNate>but i think you knew that already :p
22:55:40  <trevnorris>heh, don't know what I know anymore.
22:55:57  <trevnorris>js lang was so happy and simple. then I decided to learn cpp and the internals of v8
22:56:03  <trevnorris> /lang/land
22:57:09  <trevnorris>so v8 keeps track of the fact a local object was created in a new handlescope, and it automatically tracks when that object is no longer referenced in js?
22:58:39  <trevnorris>mother effin. ok, I think I understand. yeah, that's freaky magic sauce.
23:08:25  * sgallaghquit (Remote host closed the connection)
23:14:23  <trevnorris>TooTallNate: have much xp w/ valgrind? pisc used it to determine the .slice() bug was pointing beyond itself. but haven't been able to figure out the options to do that.
23:14:46  <TooTallNate>trevnorris: 0 xp points for me
23:16:39  <trevnorris>TooTallNate: sorry, one more. is the following just creating a new slowbuffer? https://gist.github.com/4569502
23:19:22  * `3rdEdenquit (Remote host closed the connection)
23:39:34  <MI6>joyent/node: isaacs master * 539bf1d : console: Support formatting options in trace() Fix #4589 - http://git.io/rgReDw
23:40:27  <trevnorris>isaacs: just dinking around, but i'm trying to understand what's happening with this: https://gist.github.com/4569502
23:45:35  * qmxchanged nick to qmx|away
23:46:15  <isaacs>trevnorris: yeah, don't mess with .length
23:46:22  * hzquit
23:46:26  <isaacs>trevnorris: if you change that manually, you end up with weirdness
23:46:57  <trevnorris>isaacs: heh, yeah. just seeing how badly I can screw up my computer. ;-)
23:47:44  <trevnorris>isaacs: but I think that's allowing me to point the buffer at any memory within the v8 heap.
23:47:50  <isaacs>all you'll do is maybe overwrite some section of the node process's memory
23:47:55  <isaacs>yeah
23:47:59  <isaacs>it is doing exactly that
23:48:04  <isaacs>so... don't do that :)
23:48:29  <isaacs>it's more a "Velvet ropes" kind of safety than a "guard rail" kind of safety
23:48:55  <trevnorris>that's a nice way of putting it. man, it's definitely a friday.
23:49:51  * `3rdEdenjoined
23:51:15  <isaacs>yeah, i'm calling it a day
23:51:25  <trevnorris>nice. you're in sf?
23:51:28  <isaacs>thanks for your help with the build, trevnorris
23:51:30  <isaacs>oakland
23:51:38  <isaacs>you?
23:51:43  <trevnorris>ah, cool. in mountain view.
23:51:50  <isaacs>oh, nice. i used to live in mtv
23:52:00  <isaacs>right across from the safeway on Shoreline
23:52:17  <trevnorris>nice.
23:52:25  <trevnorris>well then, have a good long weekend.
23:52:38  <isaacs>i miss mountain view. boring, but really nice.
23:52:48  <isaacs>oakland's not quite as nice, but way less boring.
23:53:08  <trevnorris>yeah. if didn't have a kid would have probably moved to sf.
23:53:11  <isaacs>yeah
23:53:18  <trevnorris>and np. thanks for checking inf on windows.
23:53:20  <isaacs>i've thought if i had a kid i might move back down that way
23:54:20  <trevnorris>that's probably a good idea. close proximity to a lot of kid friendly things.
23:58:03  * `3rdEdenquit (Ping timeout: 245 seconds)