00:00:25  <mmalecki>oh? what happened here ^ ?
00:01:50  <mmalecki>ah, I see, nvm.
00:03:38  <bnoordhuis>forced push, i updated the commit message with an issue number
00:04:09  <mmalecki>sure. I thought it was travis derping.
00:07:13  * bnoordhuisgoes off to write some php
00:07:30  <mmalecki>bnoordhuis: hahahaha, that's totally a good joke
00:07:53  <bnoordhuis>i promised my girlfriend to update her website :/
00:07:58  <mmalecki>someone on #nodejitsu came up with an interesting description for php, btw
00:08:04  <bnoordhuis>tell me!
00:08:12  <mmalecki>turing-complete templating language
00:08:49  <bnoordhuis>heh
00:09:05  <bnoordhuis>well, i don't hate php that much - it does the job fine
00:09:18  <mmalecki>not sure who did. AvianFlu or jesusabdullah.
00:09:30  <mmalecki>bnoordhuis: I used to do freelancing in PHP. I hate it.
00:09:58  <bnoordhuis>i don't really want to ask 'why' because i've probably heard it all before :)
00:10:14  <mmalecki>bnoordhuis: I don't think I even know why
00:10:43  <mmalecki>I just moved on. I hate coming back to old things
00:10:50  <mmalecki>php didn't give me any fun at all
00:12:04  * isaacsjoined
00:12:28  <bnoordhuis>mmalecki: work is not supposed to be fun
00:13:13  <mmalecki>bnoordhuis: haha, yes, it is :)
00:37:09  * paddybyersquit (Quit: paddybyers)
00:56:44  * piscisaureus_joined
01:08:26  * mikealquit (Quit: Leaving.)
01:27:47  * isaacsquit (Quit: isaacs)
01:33:36  * mikealjoined
01:39:24  * isaacsjoined
01:54:43  * CIA-111quit (Ping timeout: 240 seconds)
01:57:19  * bnoordhuisquit (Ping timeout: 268 seconds)
02:01:55  * isaacsquit (Quit: isaacs)
02:30:06  * mikealquit (Quit: Leaving.)
02:35:41  * CIA-115joined
02:37:54  * mikealjoined
02:38:57  * isaacsjoined
02:54:39  <CIA-115>node: koichik master * r70033bd / (3 files in 3 dirs):
02:54:39  <CIA-115>node: net: make connect() accept options
02:54:39  <CIA-115>node: This makes API even with tls.connect().
02:54:39  <CIA-115>node: Refs #1983.
02:54:39  <CIA-115>node: See also:
02:54:40  <CIA-115>node: http://groups.google.com/group/nodejs-dev/msg/3b6dbcc4a9a82d99
02:54:40  <CIA-115>node: Fixes #2487. - http://git.io/Rfwiyw
02:54:41  <CIA-115>node: koichik master * rc1a63a9 / (3 files in 3 dirs):
02:54:41  <CIA-115>node: tls: Allow establishing secure connection on the existing socket
02:54:42  <CIA-115>node: This is necessary to use SSL over HTTP tunnels.
02:54:42  <CIA-115>node: Refs #2259, #2474.
02:54:43  <CIA-115>node: Fixes #2489. - http://git.io/koj7pw
02:54:43  <CIA-115>node: koichik master * r08a91ac / (3 files in 3 dirs):
02:54:44  <CIA-115>node: http: better support for CONNECT method.
02:55:36  <CIA-115>node: server (http.Server).
02:55:36  <CIA-115>node: Refs: #2259, #2474.
02:55:36  <CIA-115>node: Fixes #1576. - http://git.io/Jd2C9A
02:59:55  * brsonquit (Ping timeout: 252 seconds)
03:06:19  * travis-cijoined
03:06:19  <travis-ci>[travis-ci] joyent/node#205 (master - 08a91ac : koichik): The build is still failing.
03:06:19  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/0321adb...08a91ac
03:06:19  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/495624
03:06:19  * travis-cipart
03:12:28  * piscisaureus_quit (Ping timeout: 260 seconds)
03:13:30  <CIA-115>node: Ryunosuke SATO v0.6 * r22d7fe1 / (2 files in 2 dirs):
03:13:30  <CIA-115>node: events: fix checking max listeners with `1`
03:13:30  <CIA-115>node: Fixes #2490. - http://git.io/K-KSXA
03:16:04  * mikealquit (Quit: Leaving.)
03:21:28  * travis-cijoined
03:21:28  <travis-ci>[travis-ci] joyent/node#206 (v0.6 - 22d7fe1 : Ryunosuke SATO): The build passed.
03:21:28  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/9a79bb6...22d7fe1
03:21:28  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/495636
03:21:28  * travis-cipart
03:36:00  * ryahtopic: libuv
05:32:31  <indutny>good evening, everyone
05:41:51  * slaskisjoined
06:26:17  * dshaw_quit (Quit: Leaving.)
06:44:41  * ircretaryquit (*.net *.split)
06:44:41  * pquernaquit (*.net *.split)
06:44:51  * 16SAAH4T6quit (*.net *.split)
06:44:51  * rmustaccquit (*.net *.split)
06:44:51  * igorziquit (*.net *.split)
06:44:51  * Raynosquit (*.net *.split)
06:44:51  * sh1mmerquit (*.net *.split)
06:44:51  * CIA-115quit (*.net *.split)
06:44:51  * slaskisquit (*.net *.split)
06:44:51  * benviequit (*.net *.split)
06:44:51  * raggiquit (*.net *.split)
06:44:51  * dannycoatesquit (*.net *.split)
06:44:51  * txdvquit (*.net *.split)
06:44:51  * ljacksonquit (*.net *.split)
06:44:51  * arlolraquit (*.net *.split)
06:44:51  * kohaiquit (*.net *.split)
06:45:30  * chiltsquit (*.net *.split)
06:45:30  * ryahquit (*.net *.split)
06:45:30  * mmaleckiquit (*.net *.split)
06:45:30  * creationixquit (*.net *.split)
06:45:30  * DrPizzaquit (*.net *.split)
06:45:30  * isaacsquit (*.net *.split)
06:45:30  * einarosquit (*.net *.split)
06:45:30  * indutnyquit (*.net *.split)
06:50:14  * sh1mmerjoined
06:50:15  * mikealjoined
06:50:15  * slaskisjoined
06:50:15  * isaacsjoined
06:50:15  * CIA-115joined
06:50:15  * Raynosjoined
06:50:15  * benviejoined
06:50:15  * txdvjoined
06:50:15  * rmustaccjoined
06:50:15  * 16SAAH4T6joined
06:50:15  * einarosjoined
06:50:15  * igorzijoined
06:50:15  * ircretaryjoined
06:50:15  * raggijoined
06:50:15  * dannycoatesjoined
06:50:15  * pquernajoined
06:50:15  * kohaijoined
06:50:15  * mmaleckijoined
06:50:15  * creationixjoined
06:50:15  * ljacksonjoined
06:50:15  * arlolrajoined
06:50:15  * indutnyjoined
06:50:15  * chiltsjoined
06:50:15  * DrPizzajoined
06:50:15  * ryahjoined
07:12:14  * paddybyersjoined
07:14:58  * slaskisquit (Quit: slaskis)
07:55:10  * slaskisjoined
08:40:41  * mikealquit (Quit: Leaving.)
08:42:09  * mikealjoined
08:44:56  * isaacsquit (Quit: isaacs)
09:25:25  * kuebkjoined
09:34:37  * dshaw_joined
10:58:58  * ErikCorry2joined
11:17:44  * piscisaureus_joined
11:24:55  <piscisaureus_>Hey guys, anybody there?
11:27:07  <mmalecki>hi! I am
11:27:48  <piscisaureus_>mmalecki: ah
11:27:57  <piscisaureus_>mmalecki: seen this -> http://groups.google.com/group/nodejs-dev/browse_thread/thread/9f8f74f702862dac ?
11:28:11  <piscisaureus_>obviously this patch is not good as pointed out by Slava
11:28:25  <piscisaureus_>but I wonder if number hash collisions are even exploitable at all?
11:28:30  <piscisaureus_>how would you trigger them>
11:28:50  <mmalecki>piscisaureus_: I know someone posted a generator here, but it's gone now :(
11:29:04  <mmalecki>piscisaureus_: sec, I've seen some benchmarks on that.
11:29:09  <piscisaureus_>yes but it was for string hashes right?
11:29:19  <piscisaureus_>mmalecki: I have a generator for string collisions too
11:29:42  <mmalecki>piscisaureus_: there was a benchmark for both types
11:30:07  <mmalecki>piscisaureus_: like, how many tries/seconds you need to generate them
11:31:33  <piscisaureus_>mmalecki: did you fork or checkout the generator?
11:31:54  <mmalecki>piscisaureus_: no :(
11:32:00  <piscisaureus_>hmm, too bad
11:34:07  <mmalecki>piscisaureus_: I can't seem to find this benchmark. not sure if it had any code tho. you can try asking TheJH, I think he was the first guy to write any exploit for node.js
11:34:24  <mmalecki>piscisaureus_: maybe he'll be able to come up with something for numbers
11:34:33  <piscisaureus_>I got something from einaros
11:34:40  <piscisaureus_>which is also for strings only
11:35:04  <piscisaureus_>But I will just send an email to peter to ask for it :-)
11:35:06  <mmalecki>https://gist.github.com/1559765
11:35:17  <mmalecki>he didn't delete a public gist :)
11:35:47  <piscisaureus_>ah
11:36:00  <piscisaureus_>that's not a very elegant solution
11:36:13  <mmalecki>piscisaureus_: looks like it's similar to the one TheJH came up with
11:36:27  <piscisaureus_>mmalecki: https://gist.github.com/4a8d873c040b5659edbc
11:36:40  <piscisaureus_>more sophisticated :-)
11:36:54  <mmalecki>piscisaureus_: again, TheJH also did that
11:37:03  <mmalecki>one of these is faster - not sure if \0 or AA
11:37:05  <mmalecki>*AAA
11:37:29  <piscisaureus_>anyway
11:37:51  <mmalecki>piscisaureus_: ask author of this v8 patch for an exploit
11:38:02  <mmalecki>I mean, patch for numbers.
11:38:13  <piscisaureus_>hmm, I don't have so much trust in his coding skills
11:38:17  <piscisaureus_>but I can try :-)
11:38:33  <mmalecki>haha yeah, why not
11:40:18  <mmalecki>piscisaureus_: hey, can git under windows handle submodules? I get many errors with missing library
11:40:31  <piscisaureus_>mmalecki: yeah they work fine
11:40:49  <piscisaureus_>mmalecki: only long paths (>260 chars) and symlinks have problems
11:40:55  <mmalecki>damn, something's work with my setup
11:41:09  <mmalecki>(I'm at school right now and I want to set something up for boring lessons)
11:42:35  <mmalecki>piscisaureus_: but thanks :). anyway, I have to run now. good luck with the exploit/patch!
11:51:02  <ErikCorry2>I guess you can trigger it with a URL of the form foo.com/?1=0&2=0&3=0&4=0&5=0
11:51:12  <ErikCorry2>Though obviously with different keys.
11:51:24  <indutny>piscisaureus_: heya
11:51:25  <indutny>ErikCorry2: hi
11:51:27  <indutny>mmalecki: hello
11:51:32  <ErikCorry2>Does the latest node contain any limit on the number of key-value pairs in the URL?
11:52:05  <indutny>ErikCorry2: node doesn't handle this, that's user-level side
11:52:33  <indutny>ErikCorry2: piscisaureus_ actually sending POST with {'1': 0, '2': 0, .... } will work too
11:52:49  <ErikCorry2>Is that user side too?
11:52:56  <indutny>ErikCorry2: handling that? yes
11:53:16  <piscisaureus_>ErikCorry2: no but we should have it anyway
11:53:26  <indutny>piscisaureus_: I don't think so
11:53:37  <indutny>piscisaureus_: let users choose how much they want to receive
11:53:44  <piscisaureus_>indutny: the limit could be confiigurable
11:54:05  <indutny>piscisaureus_: node isn't even parsing that
11:54:12  <indutny>piscisaureus_: oh, you mean url limit?
11:54:16  <piscisaureus_>indutny: we have querystring parsing
11:54:18  <ErikCorry2>So if the limit is 1000 then this is basically a non-issue
11:54:24  <piscisaureus_>indutny: and http headers parsing
11:54:26  <ErikCorry2>I don't think that many would need to up the limit
11:54:41  <indutny>ErikCorry2: why can't we change hashing for numbers too?
11:54:57  <ErikCorry2>We can do that, but I'm a fan of defense in depth.
11:55:05  <piscisaureus_>I am with Erik on this
11:55:24  <indutny>ErikCorry2: agreed, but that's another side of problem
11:55:27  <piscisaureus_>People should not rely on v8 features for security
11:55:35  <indutny>and fixing half of it is like not fixing it at all
11:55:44  <indutny>piscisaureus_: you think so?
11:55:52  <piscisaureus_>indutny: besides it is still possible to blow up a node server
11:56:19  <indutny>piscisaureus_: so if some JSON object is crashing v8 - node should disallow receiving it?
11:56:39  <ErikCorry2>We make changes in V8 to improve security _under that assumption that the attacker already has found a buffer overflow in the C++ code of V8 or the embedder_'
11:56:39  <indutny>that sounds ridiculous
11:56:57  <ErikCorry2>Wait, there's nothing crashing anything.
11:57:04  <ErikCorry2>It's just CPU time.
11:57:07  <indutny>yep, I underestand
11:57:13  <indutny>understand*
11:57:17  <piscisaureus_>indutny: we should not try to parse a JSON object that's larger than a particular size
11:57:18  <indutny>that was example
11:57:47  <piscisaureus_>ErikCorry2 indutny: people can actually crash a node server by just sending a shitload of http headers
11:58:02  <piscisaureus_>ErikCorry2 indutny: because at some point the memory will fill up
11:58:10  <ErikCorry2>You gonna edit that out of the logs? :-)
11:58:18  <indutny>piscisaureus_: hahaha
11:58:40  <piscisaureus_>that's why we still need to limit request sizes
11:58:41  <indutny>piscisaureus_: I'm not against limiting
11:58:48  <indutny>I'm against fixing problem by limiting
11:59:15  <indutny>when problem is not in exceeding size
11:59:22  <ErikCorry2>We haven't quite worked out a plan for fixing the number collisions
11:59:31  <indutny>I can help you
11:59:34  <indutny>take my time :D
11:59:39  <ErikCorry2>It is performance critical in some apps (mainly Emscripten based)
11:59:53  <ErikCorry2>And the easy solutions don't work.
12:00:15  <ErikCorry2>You probably have to have some randomness in there, and some hashing of the integer.
12:01:04  <indutny>ErikCorry2: why approach chosed for strings won't work in case of numbers?
12:01:10  <ErikCorry2>The current version just uses the integer as its own hash value and mixes it up a bit. Not enough to foil an attacker. Slava and I actually discussed this one, and came to the wrong conclusion that it wasn't exploitable :-(
12:01:39  <piscisaureus_>ErikCorry2: My assumtion was also that it wasn't exploitable
12:02:00  <ErikCorry2>In the string case we changed the hashing algorithm. In the number case there is no hashing algorithm, so we have to introduce one, and it's performance critical, so it's annoying.
12:02:31  <indutny>ErikCorry2: ah, got it then
12:02:54  <indutny>ErikCorry2: so you're just `mod` them, right?
12:03:05  <indutny>ErikCorry2: num % hole_size
12:03:15  <ErikCorry2>Not quite that simple, but almost.
12:04:05  <indutny>may be using not list-like structure for hash-map...
12:04:53  <ErikCorry2>I don't think you can describe it as list-like. The backing is an array
12:05:51  <indutny>yep, so as I understand accessing number-keyed hashmaps will invoke stub
12:06:16  <ErikCorry2>Yes
12:06:29  <indutny>and in that stub we may check bucket size and search it with preferable way
12:06:37  <indutny>oh
12:06:56  <indutny>heap-like structure /cc rmustacc
12:06:57  <indutny>:)
12:07:05  <indutny>or binary-search tree
12:07:22  <indutny>and just linear array for small buckets
12:07:37  <piscisaureus_>ErikCorry2: how is it possible to exploit number hashes?
12:07:38  <ErikCorry2>There's no bucket chain.
12:07:55  * indutnyfailed
12:07:56  <piscisaureus_>ErikCorry2: I mean it is only used for integers right?
12:08:14  <ErikCorry2>Any
12:08:21  <indutny>piscisaureus_: object keys are always strings, even if they accessed by [num]
12:08:36  <ErikCorry2> string that has the form of an integer is treated as an integer internally.
12:08:46  <indutny>that's what I just said ^
12:08:48  <indutny>:D
12:09:09  <piscisaureus_>yeah ok so the maximum allowable number is 2^32
12:09:23  <piscisaureus_>And you have to find collisions in a 30-bit hash space
12:09:29  <ErikCorry2>This is also why keys like "1234" are not in insertion order.
12:09:30  <piscisaureus_>so there are not so many hashes then?
12:09:45  <piscisaureus_>that collide/
12:10:24  <indutny>piscisaureus_: lets block them all
12:10:25  <indutny>:D
12:10:28  <ErikCorry2>Well let's say there are 10k entries in the hash, then the backing array will be around 32k elements.
12:10:40  <ErikCorry2>So there are 15 bits of the hash that are used to address.
12:11:09  <piscisaureus_>oh like that
12:12:58  <ErikCorry2>When we get a collision we don't make a chain of buckets, we just pick a new bucket.
12:13:09  <ErikCorry2>At the moment I think we do that by just ++ing the bucket.
12:13:44  <indutny>ErikCorry2: so you're just adding item to existing bucket
12:13:49  <indutny>ErikCorry2: or not?
12:14:04  <piscisaureus_>hmm
12:14:04  <indutny>ErikCorry2: btw, is ComputeIntegerHash responsible for number-keys computation?
12:14:05  <ErikCorry2>No, we just put it in the next bucket.
12:14:17  <piscisaureus_>ErikCorry2: but what if the next bucket is already filled?
12:14:23  <piscisaureus_>ErikCorry2: everything gets shifted?
12:14:25  <indutny>piscisaureus_: select next
12:14:31  <ErikCorry2>Keep going till you find one that is free.
12:14:33  <ErikCorry2>That's the attack..
12:14:45  <piscisaureus_>ErikCorry2: but then how can you efficiently look up a key?
12:14:57  <ErikCorry2>Same procedure.
12:15:00  <indutny>piscisaureus_: in ideal case you won't traverse array match
12:15:02  <ErikCorry2>Normally there are not many clashes.
12:15:32  <piscisaureus_>ErikCorry2: so if you can't find a particular key you scan the next buckets until you find it or until you reach a hole?
12:15:40  <indutny>piscisaureus_: yes
12:15:46  <indutny>ErikCorry2: sorry, answering for you
12:15:56  <ErikCorry2>np
12:17:05  <indutny>ErikCorry2: are you using hashs longer than 15 bits?
12:17:34  <indutny>ErikCorry2: that depends on keys amount?
12:18:26  <ErikCorry2>The hash is 30-32 bits long, but we only use the low bits depending on the size of the backing array.
12:18:40  <indutny>ErikCorry2: ok, got it
12:19:10  <indutny>ErikCorry2: can we eventually split that key-space into two separate?
12:19:26  <indutny>ErikCorry2: ah, looks like it's impossible w/o rehashing
12:19:41  <ErikCorry2>You mean the numerica nd the string key spaces?
12:19:51  <indutny>ErikCorry2: you're already using separate AFAIK
12:20:06  <ErikCorry2>Yes.
12:20:20  <ErikCorry2>The 'Elements' array is the backing for the numeric keyed properties.
12:20:20  <indutny>ErikCorry2: that was just my stupid idea, rolling different variants in my head
12:20:22  <piscisaureus_>I am going for company lunch
12:20:27  <ErikCorry2>The 'Properties' array is the backing for the others.
12:20:30  <piscisaureus_>bbiab
12:20:38  <indutny>ErikCorry2: ok, let me think
12:20:38  <ErikCorry2>Each of them can be fast mode or dictionary mode.
12:20:49  <indutny>ErikCorry2: what is fast mode?
12:20:53  <indutny>ErikCorry2: just array of [k,v]?
12:21:17  <ErikCorry2>For the elements the fast mode is just an array from 0-n where the key is implicit in the position.
12:21:45  <ErikCorry2>For the properties the keys are in the map, and only the values are in the array, in the order determined in the map
12:21:52  <ErikCorry2>(In the descriptor array of the map,actually)
12:22:25  <ErikCorry2>All these issues only arise when we are in dictionary mode.
12:23:02  <indutny>ErikCorry2: thanks for bootstrapping :)
12:23:43  <ErikCorry2>np
12:28:02  <indutny>ErikCorry2: sorry probably I missed that in previous messages, but why randomized seed won't help us in case of numbers? or it will?
12:28:25  <ErikCorry2>Yeah, that is probably what we will do.
12:28:26  <indutny>ErikCorry2: ah, sorry
12:28:38  <indutny>ErikCorry2: really missed your message
12:28:39  <ErikCorry2>The randomized seed slowed down the string hashing.
12:28:54  <ErikCorry2>We lost 1.5ms on SunSpider. That's a surprisingly big deal.
12:29:02  <indutny>there're always price for complexity
12:29:11  <ErikCorry2>And the number version will probably hurt us on some Emscripten stuff.
12:29:33  <indutny>has spidermonkey fixed that issue yet?
12:29:46  <ErikCorry2>Don't know.
12:29:54  <indutny>they should miss some ms too :)
12:29:55  <ErikCorry2>But they don't have node so it's not a big deal for the.
12:30:11  <indutny>ErikCorry2: but they do have couchdb and others
12:30:18  <indutny>ErikCorry2: many engines are using it
12:30:58  <indutny>so is ComputeIntegerHash right thing to look on?
12:31:03  <ErikCorry2>Yes.
12:31:31  <ErikCorry2>I guess you could call it a real hash algo.
12:31:41  <ErikCorry2>It doesn't iterate like the string version does.
12:31:57  <indutny>ErikCorry2: I see
12:32:15  <ErikCorry2>It's replicated in assembler in each of the 4 arches.
12:32:57  <indutny>ErikCorry2: and one in utils.h is for C++ side, right?
12:33:05  <ErikCorry2>Yeah.
12:33:19  <indutny>ok, sounds clear... can I use same seed as for strings?
12:33:27  <ErikCorry2>Yes.
12:34:41  <indutny>ErikCorry2: so I think (h = (h + seed) << 10) should work there too
12:35:44  <ErikCorry2>http://www.concentric.net/~Ttwang/tech/inthash.htm
12:35:51  <ErikCorry2>That's where the hash function comes from
12:36:39  <indutny>ErikCorry2: yep, but there're no word on seeding
12:38:20  <ErikCorry2>He claims that there is good bit mixing.
12:38:40  <ErikCorry2>Which indicates to me that putting the seed in at the beginning should be fine.
12:38:51  <ErikCorry2>You can just xor with the seed, I think.
12:39:18  <ErikCorry2>The << 10 from the string algo is just the first step of the iterative algo, it's not part of the seeding.
12:40:22  <indutny>ErikCorry2: ah, ok
12:40:53  <indutny>ErikCorry2: what about ComputeLongHash?
12:41:01  <indutny>ErikCorry2: should I modify it?
12:41:57  <ErikCorry2>Not sure where it is used.
12:42:28  <ErikCorry2>It seems to be mainly for hashing adresses, but we don't do that much in V8, because everything can move.
12:43:12  <indutny>ErikCorry2: ok
12:43:18  <indutny>relocation, etc
12:44:11  <indutny>ErikCorry2: is arguments with default value good style for v8, haven't used them in any patches yet
12:44:46  <ErikCorry2>They are frowned upon.
12:45:25  <ErikCorry2>http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Default_Arguments
12:45:57  <ErikCorry2>There are a few places in V8, where we have them, but it's only where it is very obvious what the default value would be.
12:47:02  <ErikCorry2>ComputeLongHash is used where an FP or large number is used as a key in a Harmony map.
12:47:17  <indutny>ErikCorry2: so I need to seed it too?
12:47:51  <ErikCorry2>You might as well, but a 32 bit seed should be enough.
12:48:35  <ErikCorry2>I wonder if test-hashing.cc tests the integer hashes?
12:48:37  <ErikCorry2>It should.
12:50:19  <piscisaureus_>ErikCorry2: how much can you regain on sunspider by not putting the hash seed in the roots
12:50:32  <piscisaureus_>but just inlining it
12:50:35  <indutny>piscisaureus_: but where to put it then?
12:50:43  <indutny>piscisaureus_: oooh
12:51:00  <indutny>piscisaureus_: have it as property of both fullgen and hydrogen?
12:51:23  <piscisaureus_>indutny: instead of generating code like add eax, [seed_address]
12:51:31  <ErikCorry2>piscisaureus_: Not much. Most of the perf loss is in C++ I think.
12:51:33  <piscisaureus_>indutny: ... generate ADD eax, seed
12:51:34  <indutny>piscisaureus_: yes, memory access is slow
12:51:38  <ErikCorry2>I haven't done the experiment though.
12:51:54  <piscisaureus_>indutny: well `ADD eax, seed` also requires memory access
12:52:06  <indutny>piscisaureus_: how?
12:52:18  <piscisaureus_>indutny: well how does the processor get the seed?
12:52:22  <piscisaureus_>by reading memory :-)
12:52:22  <indutny>piscisaureus_: only at compilation time
12:52:28  <piscisaureus_>hehe
12:52:28  <piscisaureus_>no
12:52:32  <ErikCorry2>On ARM there is no way to put it in the code, you have to load large constants somehow, so the root array is no loss.
12:52:45  <indutny>piscisaureus_: that will come from cpu's cache I suppose ;)
12:53:01  <ErikCorry2>On IA32 we only load it from roots in code that is part of the snapshot. All code that is generated later uses an embedded constant.
12:53:13  <piscisaureus_>oh yeah that's true
12:56:27  <ErikCorry2>In theory on an OOO CPU like any x64 CPU the root array load gets hoisted out of the critical path and is free. This may or may not work in practice.
12:57:16  <indutny>ErikCorry2: ooh, that patch will require adding seed to every HastTable, because Shape class needs to be extended to support
12:57:24  <indutny>ErikCorry2: Hash(uint32_t key, uint32_t seed)
12:57:42  <indutny>ErikCorry2: otherwise FindEntry won't work
12:57:47  <indutny>ErikCorry2: is that a right path ^?
12:57:54  <ErikCorry2>it.s not different from the string case.
12:58:02  <ErikCorry2>That didn't need a seed on the hash table.
12:58:15  <ErikCorry2>It just does table->GetHeap()->string_hash_seed()
12:58:32  <indutny>ErikCorry2: ah, I see now
12:58:34  <indutny>ErikCorry2: thanks
12:59:03  <ErikCorry2>Which as I said is too slow, but lets get it correct first, fix performance laster.
12:59:05  <ErikCorry2>later.
12:59:43  <indutny>ErikCorry2: ok, brb
12:59:50  <indutny>going to lunch
13:04:21  <piscisaureus_>ErikCorry2: I don't really get why you need to add the seed to every hash table
13:04:37  <piscisaureus_>ErikCorry2: having a perisolate seed is fine right?
13:04:45  <ErikCorry2>You don't.
13:05:09  <piscisaureus_>ah good
13:05:13  * bnoordhuisjoined
13:07:45  <indutny>back
13:08:30  <indutny>ErikCorry2: Shape::Hash is a static function that doesn't know anything about hashmap itself
13:08:44  <indutny>ErikCorry2: StringHash is using String::Hash method for that
13:08:48  <piscisaureus_>indutny: true that
13:09:37  <ErikCorry2>You just need any heap object to do GetHeap() on.
13:09:48  <indutny>ErikCorry2: righto, going to find one :D
13:10:02  <piscisaureus_>indutny: Isolate::Current() works
13:10:07  <ErikCorry2>Slow
13:10:19  <indutny>ErikCorry2: nice :D
13:10:24  <piscisaureus_>ErikCorry2: because it uses TLS?
13:10:29  <ErikCorry2>Yes
13:12:01  <piscisaureus_>creationix: hey, when are you coming to Amsterdam?
13:12:26  <indutny>ErikCorry2: so as I can see there're no objects shared with Shape
13:12:42  <indutny>ErikCorry2: and none that can be easily shared w/o changing every hashmap implementation
13:12:53  <indutny>ErikCorry2: should I coerce uint32_t to Number
13:12:54  <indutny>?
13:13:04  <piscisaureus_>indutny: no that won't work
13:13:19  <indutny>piscisaureus_: that's how it works with string hashmaps
13:13:30  <indutny>piscisaureus_: not literally
13:13:44  <indutny>piscisaureus_: but it's receiving String object as key
13:13:51  <indutny>piscisaureus_: and using it's class method Hash
13:14:31  <ErikCorry2>Can't Shape take the seed as an argument along with the int32_t?
13:14:33  <indutny>ErikCorry2: lets add seed argument to Shape::Hash
13:14:38  <ErikCorry2>Yes.
13:14:39  <indutny>ErikCorry2: and make it zero by default
13:14:49  <indutny>ErikCorry2: :)
13:14:59  <ErikCorry2>You can't just coerce an int32_t to a Number, that doesn't make it into a heap object.
13:15:08  <indutny>ErikCorry2: ah, righto
13:15:16  <ErikCorry2>It has to be a real heap object with a real address, since the address is used to find the heap.
13:15:17  <indutny>ErikCorry2: I'll still need to get current isolate for that stuff
13:15:32  <ErikCorry2>You can't use Isolate::Current, sorry.
13:15:54  <indutny>ErikCorry2: I understand!
13:15:59  <ErikCorry2>:-)
13:16:01  <indutny>:D
13:16:43  <piscisaureus_>indutny: I think you could also just change the signature for NumberHashTableShape::Hash
13:16:50  * piscisaureus_part
13:16:55  * piscisaureus_joined
13:16:59  <indutny>piscisaureus_: that won't work
13:17:08  <indutny>piscisaureus_: or.. wait
13:17:40  <indutny>ah, I don't need too
13:18:08  <indutny>ErikCorry2: look, I'll add method to hash key with a seed to NUmberHashTableShape
13:18:41  <piscisaureus_>yeah, that seems better
13:18:44  <piscisaureus_>actually
13:18:54  <indutny>ErikCorry2: and use it in NumberDictionary::Set
13:18:56  <piscisaureus_>because the number that you're hashing could be an SMI
13:19:02  <indutny>ErikCorry2: otherwise I'll need to do alot of changes
13:19:27  <indutny>ErikCorry2: is that sounds good?
13:19:41  <indutny>ErikCorry2: at least, I hope, clear?
13:31:04  <indutny>looks like I'm close ( I hope )
13:33:04  <indutny>piscisaureus_: can you help me?
13:33:13  <indutny>psrc/objects.h:3003: warning: inline function 'static uint32_t v8::internal::NumberDictionaryShape::MixinSeed(uint32_t, uint32_t)' used but never defined
13:33:28  <indutny>piscisaureus_: but I'm certainly using it in objects.cc
13:33:36  <indutny>piscisaureus_: uint32_t hashed_key = NumberDictionaryShape::MixinSeed(
13:33:48  <piscisaureus_>indutny: it doesn't say it's not used
13:33:53  <piscisaureus_>it says it's not defined :-)
13:34:01  <indutny>piscisaureus_: aaaah,
13:34:10  <indutny>piscisaureus_: forgot class prefix
13:34:10  <piscisaureus_>indutny: probably you have to look in objects-inl.h
13:34:12  <indutny>stupid
13:34:23  <indutny>piscisaureus_: thanks
13:34:36  <bnoordhuis>indutny: https://github.com/joyent/node/pull/2450 <- is that PR ready for merging? if so, can you squash the commits?
13:34:38  <indutny>piscisaureus_: was developing node-spdy all day :)
13:34:41  <indutny>bnoordhuis: heya
13:34:45  <bnoordhuis>indutny: hoya
13:34:47  <indutny>bnoordhuis: I answered on that PR
13:34:51  <piscisaureus_>indutny: why do you need to add that method btw?
13:34:59  <indutny>bnoordhuis: I think it's ready, but why should I squash it?
13:35:17  <indutny>bnoordhuis: commits are like separate PRs here
13:35:28  <bnoordhuis>indutny: i mean squash as in 'squash into logical commits'
13:35:29  <indutny>piscisaureus_: you'll see soon
13:35:41  <indutny>bnoordhuis: they already are, I hope
13:36:01  <bnoordhuis>indutny: they are? i thought a number of them were bug fixes for the original commits?
13:36:26  <bnoordhuis>oh, maybe you're right
13:36:50  <bnoordhuis>okay, carry on, nothing to see here
13:37:03  <indutny>bnoordhuis: ?
13:37:06  <piscisaureus_>bnoordhuis: are you coming to amsterdam this week?
13:37:15  <piscisaureus_>bnoordhuis: Tim is going to be here as well
13:37:22  <bnoordhuis>piscisaureus_: yes, i'll be there on friday
13:37:31  <bnoordhuis>indutny: nm, i'll merge it, thanks
13:37:44  <piscisaureus_>bnoordhuis: btw, special for you: https://github.com/DanielRapp/twss.js
13:37:52  <bnoordhuis>yeah, i've seen that one :)
13:46:13  <indutny>ErikCorry2: yt?
13:46:20  <indutny>ErikCorry2: what's your @chromium.org email?
13:46:44  <indutny>piscisaureus_: may be you can help? ^
13:46:50  <piscisaureus_>indutny: depends
13:46:56  <piscisaureus_>oh
13:47:18  <indutny>[email protected]
13:47:20  <indutny>looks like so
13:47:33  <piscisaureus_>yes that's it
13:47:39  <piscisaureus_>but that's not @chromium.org :-)
13:48:03  <indutny>piscisaureus_: yeah, but I found it on codereview.chromium.org
13:48:07  <indutny>piscisaureus_: should be correct
13:48:12  <piscisaureus_>it is
13:49:11  <indutny>piscisaureus_: ErikCorry2 http://codereview.chromium.org/9148006
13:50:25  <indutny>aaaah
13:50:30  <indutny>that's not full patch
13:50:32  <indutny>fck
13:59:41  <piscisaureus_>indutny: git commit -am "foo" && git cl upload?
14:01:32  <indutny>piscisaureus_: nope, that's not the problem
14:01:40  <indutny>piscisaureus_: my approach is incorrect
14:01:44  <indutny>piscisaureus_: at least, it seems to be
14:01:44  <indutny>:D
14:01:52  <indutny>brb
14:01:56  <piscisaureus_>indutny: why?
14:04:04  <ErikCorry2>Do you want me to review now or hold off?
14:06:24  * AndreasMadsenjoined
14:11:32  <indutny>ErikCorry2: hold
14:11:54  <indutny>ErikCorry2: looks like saving old Dictionary interface is not possible
14:13:07  <indutny>bnoordhuis: thanks for reviewing, I'll finish v8 patch and will come back to that PR
14:13:28  <bnoordhuis>indutny: cool
14:15:13  <bnoordhuis>indutny: otherwise lgtm
14:15:28  <indutny>bnoordhuis: thanks!
14:15:30  <bnoordhuis>you don't have to specify `struct foo` in c++ but that's a minor style issue
14:17:23  <indutny>bnoordhuis: oh, really?
14:17:26  <indutny>bnoordhuis: cool! :)
14:17:33  <indutny>bnoordhuis: no more long reinterprets
14:18:15  <bnoordhuis>indutny: i mean that you can type `foo x;` instead of `struct foo x;`, all the typecasting rules still apply
14:19:12  <indutny>bnoordhuis: I understand
14:28:33  <indutny>ErikCorry2: I'm going to add uint32_t seed to every HashTable method, where Key is used
14:28:36  <indutny>ErikCorry2: is that ok?
14:33:26  <indutny>ErikCorry2: or use two field struct as Key for NumberDictionary?
14:35:54  <mmalecki>indutny: hi
14:36:08  <mmalecki>indutny: just came back home, sup?
14:37:30  <indutny>mmalecki: hi
14:37:34  <indutny>mmalecki: can't remember, sorry
14:38:20  <mmalecki>indutny: np :)
14:40:04  * mmaleckigoes to write some core code to beat indutny :D
14:40:20  <piscisaureus_>oh noes
14:40:35  <piscisaureus_>mmalecki: can't you just make v8 faster instead :-)
14:41:03  <mmalecki>piscisaureus_: oh, yeah, sure, brb ;)
14:42:41  <mmalecki>piscisaureus_: actually, it'd be pretty cool. what's the bottleneck?
14:42:53  <piscisaureus_>indutny: haha, I don't know
14:42:57  <piscisaureus_>er, mmalecki
14:43:12  <piscisaureus_>mmalecki: there are many bottlenecks
14:43:17  <piscisaureus_>mmalecki: make try catch faster :-)
14:43:28  <indutny>piscisaureus_: what?
14:43:29  <indutny>:)
14:43:38  <piscisaureus_>indutny: sorry I was talking to mmalecki
14:43:44  <piscisaureus_>indutny: about your thing
14:43:56  <piscisaureus_>indutny: I guess you can just add a seed argument to Shape::Hash
14:44:07  <piscisaureus_>and pass 0 when you don't need it
14:44:19  <mmalecki>piscisaureus_: ok. but I bet I can't do that, I'm not that good in C++
14:44:32  <piscisaureus_>indutny: otherwise you could have Hash and HashWithSeed or something
14:44:37  <mmalecki>I can only write super fast memcpy functions :D
14:45:14  <mmalecki>https://github.com/mmalecki/cOS/blob/master/src/libc/string.c#L23-69
14:45:42  <CIA-115>libuv: Ben Noordhuis v0.6 * r803f5a0 / src/unix/internal.h : linux: fix build on older distros - http://git.io/DfIX4Q
14:46:38  <piscisaureus_>mmalecki: I are you sure that it is actually faster than gcc's builtin memcpy?
14:47:06  * travis-cijoined
14:47:06  <travis-ci>[travis-ci] joyent/libuv#22 (v0.6 - 803f5a0 : Ben Noordhuis): The build is still failing.
14:47:06  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/38fc6ad...803f5a0
14:47:06  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/497536
14:47:06  * travis-cipart
14:47:20  <CIA-115>node: Ben Noordhuis v0.6 * rcc5cea3 / deps/uv/src/unix/internal.h : uv: upgrade to 803f5a0 - http://git.io/Kk6-yg
14:47:44  <mmalecki>piscisaureus_: not sure, I have benchmarks somewhere. I guess gcc implements it in a similar way, but this one was actually checking for SSE2 on runtime
14:48:10  <mmalecki>piscisaureus_: it was meant to be part of my os, so it was soooo important to me
14:48:21  <piscisaureus_>mmalecki: also, I don't think you should be building an OS when you're not good at c.
14:48:23  <mmalecki>now I would probably just avoid having to use memcpy at all :)
14:48:32  <piscisaureus_>Unless this is your attempt to get good at c :-)
14:48:34  <mmalecki>piscisaureus_: I'm not good at C++. I love C.
14:48:46  <piscisaureus_>mmalecki: oh well
14:48:52  <piscisaureus_>mmalecki: c++ is not that different
14:48:54  <mmalecki>piscisaureus_: and I ditched writing this OS, I started when I was 15 or so
14:49:42  <mmalecki>piscisaureus_: well, I don't like C++ at all. it encourages doing things you shouldn't do
14:49:51  <piscisaureus_>mmalecki: like what?
14:50:06  <piscisaureus_>I am also not fond of c++ btw
14:50:27  <piscisaureus_>but sometimes I like it a lot
14:50:53  <piscisaureus_>mmalecki: and think about how you would do v8's HandleScope without C++
14:50:55  <mmalecki>piscisaureus_: overly abstracting your models, using weird language constructs like friendly properties, using private/protected when you shouldn't do it
14:51:06  <mmalecki>piscisaureus_: well, it'd be hard :)
14:51:20  <piscisaureus_>mmalecki: it would be impossible
14:51:45  <piscisaureus_>mmalecki: people would have to add stuff to their handlescope manually
14:53:29  <mmalecki>piscisaureus_: well, I'm not saying that people shouldn't use C++. if they feel like or when it makes job easier, go ahead
14:53:46  <mmalecki>let's see this implementation
14:54:46  <mmalecki>if I could, I'd just move all SVN repos to git :/
14:54:59  * travis-cijoined
14:54:59  <travis-ci>[travis-ci] joyent/node#207 (v0.6 - cc5cea3 : Ben Noordhuis): The build was broken.
14:54:59  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/22d7fe1...cc5cea3
14:54:59  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/497542
14:54:59  * travis-cipart
14:55:09  <bnoordhuis>piscisaureus_: c++ *is* different, it's that *we* don't really write c++, we write c-with-classes
14:55:29  <bnoordhuis>for better or worse...
14:55:59  <mmalecki>but yeah, anyway, now I know that writing OS when you're 15 is not a good idea. wasted great amount of time on writing it
14:56:26  <mmalecki>there are some good things tho. like grub integration which doesn't suck and stuff
15:01:19  <mmalecki>bnoordhuis: hey, you refactored errnoException function? can't see it in the commit
15:01:25  <mmalecki>*commits
15:02:14  <bnoordhuis>mmalecki: https://github.com/bnoordhuis/node/commit/b174dcf
15:02:17  <indutny>bnoordhuis: how to override protected methods in child class?
15:02:33  <bnoordhuis>indutny: mark them virtual in the base class
15:02:39  <indutny>bnoordhuis: I can't
15:02:50  <bnoordhuis>then you can't override them :)
15:03:12  <mmalecki>bnoordhuis: lgtm, why didn't you push it?
15:03:24  <mmalecki>and that's why I don't like C++ ^
15:03:35  <bnoordhuis>mmalecki: ryah wants it merged in master. also, it'd break a PR from AndreasMadsen
15:03:59  <AndreasMadsen>hi
15:04:06  <mmalecki>bnoordhuis: ok
15:07:54  <indutny>bnoordhuis: thanks :)
15:08:26  <AndreasMadsen>bnoordhuis: I think you should update the _errnoException to match:
15:08:26  <AndreasMadsen>https://github.com/AndreasMadsen/node-1/commit/6fe27f6b32f4648d6fe09caca5338663f481ab22
15:09:06  <AndreasMadsen>It's behavure should be equal to the one in c++ land
15:09:38  <bnoordhuis>AndreasMadsen: e.path is a funny name for a property that contains a generic error message
15:10:06  <AndreasMadsen>bnoordhuis: It has the same name in c++
15:11:18  <AndreasMadsen>bnoordhuis: What do you want to call it?
15:12:37  <bnoordhuis>AndreasMadsen: maybe nothing, i'm not quite convinced yet that those two error messages add anything
15:14:04  <AndreasMadsen>bnoordhuis: I can tell you that I don't get anything from the errorno property, in most cases it is just letters to me.
15:14:33  <mmalecki>AndreasMadsen: ++, having more info on error is always useful
15:14:34  <kohai>AndreasMadsen has 2 beers
15:15:13  <AndreasMadsen>Perhaps we should make an internal module translating errorno to text
15:15:29  <mmalecki>path is just a bit weird to me, but whatever
15:16:01  <AndreasMadsen>mmalecki: Path is only used if it is used as an argument
15:16:19  <AndreasMadsen>Path is only used if it is set as an argument
15:17:18  <mmalecki>AndreasMadsen: yeah, I know. isn't it redundant tho?
15:18:30  <AndreasMadsen>mmalecki: I don't think any error information is redundant, but we can discuess if it should be a part of the e.message
15:20:15  <mmalecki>AndreasMadsen: hm, second, what is path supposed to store anyway?
15:20:29  <mmalecki>AndreasMadsen: is it file path?
15:20:36  <AndreasMadsen>mmalecki: I really do not know :/
15:20:57  <mmalecki>hm, I see
15:21:08  <mmalecki>yeah, we can discuss it a bit later, busy now
15:21:39  <indutny>:e
15:21:42  <indutny>ooops
15:21:47  <indutny>that was definitely not vim
15:22:30  <AndreasMadsen>bnoordhuis: Without the msg argument you will just get "EBADF, write" when writing to forked child where the channel is dead.
15:23:22  <bnoordhuis>anyone able to reproduce this? https://github.com/joyent/libuv/issues/287
15:24:47  <mmalecki>bnoordhuis: oh? I think I was, once
15:24:49  <AndreasMadsen>While we discuss I believe that setting the errno in the global scope from c++ land is wrong. Why not just return an error object or at least the errno string it self.
15:25:41  <mmalecki>bnoordhuis: I derped at on check in forever and well, it tried spawning way too many processes. I have no debug output tho :(
15:25:56  <AndreasMadsen>mmalecki: ^ I think you hit that problem when frezzing the global object.
15:26:01  <bnoordhuis>AndreasMadsen: i agree but it's too late to change that now
15:26:13  <AndreasMadsen>bnoordhuis: In master?
15:26:31  <bnoordhuis>AndreasMadsen: yes, maybe. but it's probably not quite trivial
15:26:43  <mmalecki>actually, let me try reproducing that
15:27:53  * ljacksonquit (Ping timeout: 240 seconds)
15:28:07  <AndreasMadsen>bnoordhuis: hm okay :/ but don't remove the msg argument from errnoException
15:28:52  <bnoordhuis>AndreasMadsen: well, okay. but i insist that .path is a funny name :)
15:28:58  * ljacksonjoined
15:29:32  <AndreasMadsen>bnoordhuis: What is it used to, then I will rename it (or remove it)
15:31:45  <AndreasMadsen>bnoordhuis: Okay I won't rename it in #2463, I will cause inconsistance https://github.com/joyent/node/blob/master/src/node.cc#L765
15:52:20  * kuebkpart
16:05:36  <indutny>ErikCorry2: http://codereview.chromium.org/9148006
16:05:37  * pieternjoined
16:08:46  * perezdjoined
16:13:04  <piscisaureus_>bnoordhuis: do we have a way to tell the size of an open file
16:13:07  <piscisaureus_>or the file position
16:13:28  <piscisaureus_>bnoordhuis: I have someone here that wants to fseek to the end of the file and then ftell()
16:13:35  <piscisaureus_>or something equivalent
16:13:57  <bnoordhuis>piscisaureus_: fs.fstat()?
16:14:08  <piscisaureus_>bnoordhuis: is that always up to date?
16:14:21  <bnoordhuis>piscisaureus_: it's complicated
16:14:32  <bnoordhuis>will there be concurrent writers?
16:14:47  <piscisaureus_>could be I will ask
16:15:24  <piscisaureus_>yes
16:16:14  <piscisaureus_>it's basically implementing tail() in node
16:16:37  <piscisaureus_>the thing is that stat() seems to lag
16:17:29  <bnoordhuis>piscisaureus_: right
16:17:43  <bnoordhuis>fs.fstat() will work
16:18:05  <bnoordhuis>but define 'lag'
16:18:43  <piscisaureus_>seconds
16:20:24  <bnoordhuis>you're probably doing something wrong in that case
16:20:55  <bnoordhuis>it's possible that the writers need to fsync() their changes
16:21:19  <piscisaureus_>oh yeah that could be
16:21:24  <piscisaureus_>I will tell
16:27:59  * slaskisquit (Quit: slaskis)
16:39:48  * isaacsjoined
16:41:03  <rmustacc>The results of updating the length in stat should occur once you're done with the vfs layer.
16:41:12  <rmustacc>Regardless of the file being synced out to disk.
17:04:45  <piscisaureus_>ErikCorry2: hey, yt?
17:05:21  <piscisaureus_>ErikCorry2: how do you prevent "nonstandard" CPU features from being included in the snapshot?
17:05:25  <piscisaureus_>e.g. sse4 features
17:24:21  * TooTallNatejoined
17:24:48  <indutny>bnoordhuis: Channel<T> is neat!
17:24:49  <indutny>woot
17:27:38  * dapjoined
17:28:20  * sh1mmerquit (Quit: sh1mmer)
17:30:38  * AvianFlujoined
17:42:21  * dap1joined
17:44:47  * dapquit (Ping timeout: 252 seconds)
17:49:54  * slaskisjoined
18:01:50  <indutny>bnoordhuis: yt?
18:02:28  <indutny>bnoordhuis: updated PR
18:02:40  <indutny>bnoordhuis: lib/_debugger works but is unfinished right now
18:02:53  <indutny>bnoordhuis: so probably you should let it as it is
18:02:57  <ryah>i want to release 0.7.0 today
18:03:03  <ryah>objections?
18:03:06  <indutny>hi
18:03:08  <piscisaureus_>*bam*
18:03:17  <piscisaureus_>ryah: is it anywhere near stable?
18:03:23  <ryah>piscisaureus_: *shrug*
18:03:28  <ryah>it's usable
18:03:35  <ryah>more stable than 0.5.0
18:03:45  <indutny>+1 ^
18:03:55  <indutny>it is almost working
18:04:02  <mmalecki>win! we'll get it on travis asap! :)
18:04:31  <indutny>ryah: will release prevent merging isolate debugger/
18:04:57  <indutny>?
18:05:05  <ryah>indutny: no i want to get that in first
18:05:11  <ryah>actually i thought it was already in
18:05:50  <indutny>ryah: it's in, but js _debugger is racey
18:06:06  <indutny>ryah: no crashes, js problem
18:06:11  <indutny>ryah: at least, seems to be
18:07:24  <indutny>ryah: can you or bnoordhuis verify that I ported it to Channel<T> correctly
18:07:31  <ErikCorry2>piscisaureus_: By default the code in the snapshot is not allowed to do anything funky.
18:07:36  <indutny>https://github.com/joyent/node/pull/2450
18:08:02  <ErikCorry2>If you want to compile a version that is optimized for a specific CPU there are some macros for that, at least on ARM, where the differences are bigger.
18:08:43  <piscisaureus_>ErikCorry2: ok, thanks
18:08:54  <ErikCorry2>There are some stubs that exist in different versions, where the minor key depends on whether they use SSE2 code. That means they get remade after boot if the snapshot is no-sse2 and the CPU at runtime is SSE2.
18:09:00  <piscisaureus_>ErikCorry2: I was just wondering, never actually had any issues with it
18:09:13  <ErikCorry2>On Mac you can always assume SSE2 because no version of MacOSX runs on a CPU without SSE2
18:09:33  <ErikCorry2>The ARM people are always running into issues with it.
18:09:55  <ErikCorry2>Crankshaft is SSE2-only, but there is no crankshafted code in the snapshot so that issue does not arise.
18:10:12  * mikealquit (Quit: Leaving.)
18:10:37  <piscisaureus_>ErikCorry2: maybe you should create the snapshot on first run and put it in some temp folder
18:10:45  <piscisaureus_>ErikCorry2: istead of embedding it in the executable
18:12:49  <indutny>piscisaureus_: executable may be signed
18:13:01  <piscisaureus_>indutny: yeah so what?
18:13:03  <indutny>piscisaureus_: that'll prevent someone from corrupting it
18:13:10  <ErikCorry2>piscisaureus_: Yes, that would be an option for Node.
18:13:36  <ErikCorry2>For Chromium it would be a nightmare, because V8 runs in the sandbox, which prevents you from writing any files.
18:13:45  <ErikCorry2>So it's major work to make something like that work.
18:14:09  <ErikCorry2>And if you take a system disk and attach it to a less capable computer you have to make sure that you have a fallback.
18:14:18  <piscisaureus_>hmm yeah
18:14:30  <piscisaureus_>ErikCorry2: well the fallback is always "dont use the snapshot"
18:14:43  <ErikCorry2>We have considered having two snapshots and choosing the correct one, but until now we have been able to fix the performance issues in other ways.
18:15:33  <ErikCorry2>We have been on the verge of dropping support for non-SSE2 several times. Eventually it is inevitable. It becomes harder and harder to test and the new generations of OSs don't run on non-SSE2 machines anyway.
18:16:09  <ErikCorry2>piscisaureus_: You can't fall back to not using the snapshot, because a VM that expects a snapshot doesn't have the code needed to boot up without it.
18:16:11  <ryah>indutny: please link me to your patch that you want landed
18:16:23  <ErikCorry2>That can be fixed too, but exe size is a parameter too, so...
18:16:36  <indutny>ryah: https://github.com/joyent/node/pull/2450
18:17:27  * paddybyersquit (Quit: paddybyers)
18:17:49  <indutny>ErikCorry2: just to remind you http://codereview.chromium.org/9148006
18:18:05  * dshaw_quit (Quit: Leaving.)
18:18:13  <ErikCorry2>indutny: Thanks.
18:21:49  <bnoordhuis>indutny: i'll review it
18:23:22  <indutny>bnoordhuis: thanks
18:23:55  <bnoordhuis>indutny: you get bonus points for that IsolateDebuggerMessage class :)
18:24:35  <indutny>bnoordhuis: hahaha
18:25:16  * brsonjoined
18:26:09  * sh1mmerjoined
18:33:14  * CoverSlidejoined
18:33:56  * mikealjoined
18:39:30  * slaskisquit (Quit: slaskis)
18:40:06  * sh1mmer_joined
18:42:15  * dshaw_joined
18:42:45  * sh1mmer_quit (Remote host closed the connection)
18:42:59  * sh1mmer_joined
18:43:02  * `3rdEdenjoined
18:43:11  <bnoordhuis>indutny: reviewed
18:43:27  * sh1mmerquit (Ping timeout: 240 seconds)
18:43:27  * sh1mmer_changed nick to sh1mmer
18:43:38  * benviequit (Read error: Operation timed out)
18:44:05  <indutny>bnoordhuis: cool!
18:45:59  <indutny>bnoordhuis: fixed C++ issues
18:46:04  <indutny>bnoordhuis: looking at js right now
18:56:41  <indutny>bnoordhuis: ok, lets land C++ part
18:57:02  <indutny>bnoordhuis: js part seems to be tricky enough, not sure if I'll fix it today
18:57:16  <indutny>bnoordhuis: it somehow was broken after porting to Channel
18:57:18  <bnoordhuis>indutny: what's the issue?
18:57:55  <indutny>bnoordhuis: break event is not received immediately
18:58:09  <indutny>bnoordhuis: when requesting step next
18:58:20  <indutny>bnoordhuis: but when requesting it twice - two break events emits
18:58:43  <bnoordhuis>okay
18:58:49  <indutny>bnoordhuis: let met tr rebasing it on master
18:58:59  <indutny>bnoordhuis: have you updated v8?
18:59:18  <indutny>bnoordhuis: same code was working few days ago
18:59:46  <bnoordhuis>indutny: not i
18:59:58  <indutny>bnoordhuis: ok
19:00:01  <indutny>bnoordhuis: I'll squash it anyway
19:03:11  <ryah>is there some way to merge with different strategies on different subdirs?
19:04:15  * mikealquit (Quit: Leaving.)
19:04:43  <indutny>bnoordhuis: squashed and rebased
19:05:18  <indutny>ryah: that's requires higher chi than I've
19:05:29  * mikealjoined
19:05:44  <indutny>ryah: still merging everything with default strategy, hope to use custom one day
19:06:04  <indutny>bnoordhuis: magically, lib/_debugger works now
19:06:04  <indutny>:D
19:06:20  <bnoordhuis>indutny: oh, good (i think)
19:06:21  <ryah>i really want -Xours for deps/
19:06:36  <indutny>or not
19:06:38  <indutny>one sec
19:06:40  <ryah>but i want a normal recursive for everything else
19:07:14  <indutny>bnoordhuis: nope it don't, that was just occasion
19:07:17  <mmalecki>ryah: you could write a script for that...
19:07:56  <indutny>bnoordhuis: prob better merge js side next time
19:08:04  <indutny>bnoordhuis: or merge it now
19:08:17  <indutny>bnoordhuis: and I fix it as soon as I can
19:08:26  <ryah>mmalecki: yeah?
19:08:29  <mmalecki>ryah: it's easy to plug into git - you just have to create 'git-command' script somewhere in your $PATH and you'll be able to call it like `git command`
19:08:47  <ryah>but how would the script work?
19:08:50  <mmalecki>ryah: actually, I can put together a simple script for you
19:08:57  <ryah>even better :)
19:09:00  <indutny>that's how git-cl works
19:09:20  <ryah>can i not do this with normal git commands?
19:09:29  <indutny>ryah: overriding?
19:09:40  <mmalecki>hm... .gitconfig maybe?
19:09:47  <mmalecki>you can do aliases there!
19:09:50  <mmalecki>that could work
19:09:54  <ryah>hm, i'll just do it manaully - dont worry about it
19:10:10  <indutny>bnoordhuis: what do you think?
19:11:16  <bnoordhuis>indutny: let me test it. if it's not too broken, i'll merge it
19:12:03  <indutny>bnoordhuis: ok :)
19:14:52  <mmalecki>hrm, git doesn't allow overriding with aliases, sucks
19:15:14  <ryah>dont land anything in master righ tnow
19:15:15  <ryah>please
19:15:20  <ryah>just about done with a hard merge
19:21:18  <CIA-115>node: Ryunosuke SATO master * r22d7fe1 / (2 files in 2 dirs):
19:21:18  <CIA-115>node: events: fix checking max listeners with `1`
19:21:18  <CIA-115>node: Fixes #2490. - http://git.io/K-KSXA
19:21:18  <CIA-115>node: Ben Noordhuis master * rcc5cea3 / deps/uv/src/unix/internal.h : uv: upgrade to 803f5a0 - http://git.io/Kk6-yg
19:21:18  <CIA-115>node: Ryan Dahl master * r8b28d59 / (229 files in 23 dirs):
19:21:19  <CIA-115>node: Merge remote branch 'origin/v0.6'
19:21:19  <CIA-115>node: Conflicts:
19:21:19  <CIA-115>node: Makefile
19:21:20  <CIA-115>node: configure
19:21:20  <CIA-115>node: src/node_version.h - http://git.io/GHsVwQ
19:21:37  <ryah>done
19:21:55  <mmalecki>ryah: ++
19:21:55  <kohai>ryah has 1 beer
19:22:27  <mmalecki>ryah: ah, I see what you mean by different strategies...
19:22:55  <mmalecki>it'd be really hard, maybe some clever use of subtree merge would help?
19:23:35  <CIA-115>libuv: Ryan Dahl master * r4ad33e9 / (6 files in 5 dirs):
19:23:36  <CIA-115>libuv: Revert "Add uv_pipe_pair for communication between threads"
19:23:36  <CIA-115>libuv: Not needed. We took a different approach for isolates.
19:23:36  <CIA-115>libuv: This reverts commit 5cc6090fdf738c7ae6677627f9f151c9bc16b43f. - http://git.io/dsFiyw
19:24:44  <indutny>bnoordhuis: ok , I got it
19:25:10  <indutny>bnoordhuis: something is broken with Channel
19:25:13  * travis-cijoined
19:25:13  <travis-ci>[travis-ci] joyent/libuv#23 (master - 4ad33e9 : Ryan Dahl): The build is still failing.
19:25:13  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/5cc6090...4ad33e9
19:25:13  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/498676
19:25:13  * travis-cipart
19:25:36  <indutny>bnoordhuis: it's not invoking callback when Send was called two times
19:25:42  <indutny>bnoordhuis: I mean immediately two times
19:26:43  * mikealquit (Quit: Leaving.)
19:27:00  * mikealjoined
19:27:06  <indutny>bnoordhuis: not sure how that may happen
19:27:07  * mikealquit (Client Quit)
19:27:12  <mmalecki>can we fix libuv build somehow? I know there's a test which fails on Linux.
19:28:09  <ryah>mmalecki: there are multiple tests that fail on every platform
19:28:22  <mmalecki>ryah: can they be fixed?
19:28:37  <ryah>yes
19:28:59  <mmalecki>ryah: also, if I may ask, when are you releasing 0.7? I want to deploy it to our workers right away.
19:30:31  <ryah>today, i think
19:30:49  <AndreasMadsen>ryah: could you land https://github.com/joyent/node/pull/2461
19:30:55  <mmalecki>ryah: do you know hour, perchance?
19:31:05  <indutny>bnoordhuis: yt?
19:31:42  <ryah>mmalecki: ~5hours
19:32:00  <mmalecki>ryah: oh, looks fine! it's like 1 AM for me
19:32:21  <indutny>ryah: it's like 7am for me
19:33:01  * travis-cijoined
19:33:01  <travis-ci>[travis-ci] joyent/node#208 (master - 8b28d59 : Ryan Dahl): The build is still failing.
19:33:01  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/08a91ac...8b28d59
19:33:01  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/498663
19:33:01  * travis-cipart
19:33:08  <mmalecki>it'd be easier if we didn't have any timezones :/
19:33:09  <bnoordhuis>indutny: yes
19:33:18  <indutny>bnoordhuis: so problem is
19:33:25  <indutny>bnoordhuis: that uv_async_send is called twice
19:33:30  <indutny>bnoordhuis: and callback only once
19:33:33  <indutny>bnoordhuis: :)
19:33:50  <indutny>bnoordhuis: second call is delayed
19:34:00  <bnoordhuis>indutny: you mean called twice on the same tick?
19:34:06  <indutny>bnoordhuis: yes
19:34:17  <indutny>bnoordhuis: is that expected?
19:34:31  <bnoordhuis>indutny: not quite but it's not unreasonable either, i'll fix it tonight
19:34:48  <indutny>bnoordhuis: oh cool!
19:34:49  <CIA-115>libuv: Ryan Dahl master * r51ea46d / (13 files in 6 dirs): Merge remote branch 'origin/v0.6' - http://git.io/gogZQw
19:34:55  <indutny>bnoordhuis: btw, that can be fixed on Channel
19:35:10  <bnoordhuis>indutny: yes
19:35:18  <indutny>bnoordhuis: you can just flush all queue on Callback
19:35:30  <indutny>bnoordhuis: if that's correct - I can do it in minutes
19:36:06  <bnoordhuis>indutny: sure
19:36:26  * travis-cijoined
19:36:27  <travis-ci>[travis-ci] joyent/libuv#24 (master - 51ea46d : Ryan Dahl): The build is still failing.
19:36:27  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/4ad33e9...51ea46d
19:36:27  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/498707
19:36:27  * travis-cipart
19:37:05  <mmalecki>can we remove sys.js in this release, btw?
19:37:14  <mmalecki>or at least, in 0.7.x?
19:37:42  <indutny>lets throw on it
19:37:45  <ryah>sure
19:37:47  <indutny>and remove it in 0.9.0
19:38:02  <indutny>throwing is like removing but more informative
19:38:09  <indutny>bnoordhuis: pushed fix
19:38:14  <ryah>indutny: agreed
19:38:14  <indutny>bnoordhuis: debugger works fine now
19:38:16  <mmalecki>indutny: it's been deprecated since 0.5, and gone from docs in 0.4 or 0.3
19:38:47  <indutny>mmalecki: so we probably should have done that in 0.6.0
19:38:53  <indutny>mmalecki: I mean throwing
19:39:03  <indutny>and as we forgot that
19:39:08  <ryah>mmalecki: let's move slow
19:39:33  <mmalecki>but what's wrong with removing it? it gives you the same result
19:39:46  <mmalecki>well, except being able to catch it, but that's ghetto
19:39:55  <indutny>mmalecki: not same
19:40:09  <mmalecki>indutny: you mean, being more informative?
19:40:09  <indutny>mmalecki: throw new Error('sys was removed!')
19:40:18  <indutny>mmalecki: not just
19:40:28  <indutny>Cannot find module 'sys'
19:40:36  <indutny>while that's almost the same...
19:40:38  <indutny>hm
19:40:41  <indutny>maybe you're right
19:40:48  <mmalecki>:)
19:41:09  <indutny>why I'm always arguing with you? :)
19:41:17  <indutny>and then accepting your ideas
19:41:20  <indutny>haha
19:41:45  <mmalecki>indutny: not really, I sometimes accept your ideas :)
19:41:45  <indutny>ryah: may be really just remove it? it'll give very informative exception to all who will require('sys')
19:41:52  <indutny>mmalecki: that's why!
19:41:53  <indutny>:D
19:42:43  <indutny>bnoordhuis: ping
19:42:53  <indutny>bnoordhuis: I'm going to sleep soon
19:43:13  <AndreasMadsen>ryah: Could you land https://github.com/joyent/node/pull/2461
19:43:38  <mmalecki>indutny: :)
19:43:48  * mmaleckigoes to grep all nodejitsu repos
19:44:14  <indutny>mmalecki: for what?
19:44:30  <AndreasMadsen>bnoordhuis: Did you take decision on https://github.com/joyent/node/pull/2463
19:44:36  <mmalecki>indutny: require('sys'), I've seen some of these around
19:44:48  <mmalecki>at least, warnings
19:46:25  * isaacsquit (Quit: isaacs)
19:46:41  <AndreasMadsen>Also I have yet to get some final feedback on https://github.com/joyent/node/pull/2470
19:47:21  <AndreasMadsen>^ from anyone
19:49:09  <AndreasMadsen>status: libuv is now the void itself
19:49:31  * perezdquit (Ping timeout: 255 seconds)
19:49:37  <piscisaureus_>ryah just left I think
19:49:45  <piscisaureus_>yes libuv is like the void
19:49:49  <piscisaureus_>:-/
19:49:54  * perezdjoined
19:50:10  * indutnytopic: void
19:50:16  <piscisaureus_>bnoordhuis yt?
19:50:17  * indutnytopic: welcome to void
19:50:29  <bnoordhuis>indutny: sleep tight
19:50:31  <bnoordhuis>piscisaureus_: yes
19:50:34  <indutny>bnoordhuis: hahaha :)
19:50:46  <indutny>bnoordhuis: well I wanted to ask if that patch looks good to you first
19:50:49  <piscisaureus_>bnoordhuis: can you look at AndreasMadsen's stuff?
19:50:50  <AndreasMadsen>piscisaureus_: I just wan't to get down in number of pull request, I can't even count the number of patches on child_process I have.
19:51:09  <indutny>oh, everyone wants to take a look at their patch
19:51:11  <mmalecki>there's a song, welcome to the void
19:51:21  * indutnytopic: welcome to the void
19:51:26  <bnoordhuis>piscisaureus_: eventually
19:51:36  <mmalecki>here. http://www.youtube.com/watch?v=y7Q0K1NkZXk
19:51:41  <mmalecki>pretty nice, actually :)
19:55:44  <AndreasMadsen>indutny: It was ryan there asked for another cluster upgrade about 6 hours after one was landed.
19:56:01  <bnoordhuis>linux / v0.6 / `make test` -> does simple/test-process-kill-null crash intermittently for you guys too?
19:57:35  * 16SAAH4T6changed nick to vodotikigod
20:06:15  <CIA-115>node: Ben Noordhuis v0.6 * rd5d043f / src/handle_wrap.cc : handle_wrap: guard against uninitialized handle or double close - http://git.io/73FsCg
20:06:17  <CIA-115>node: Ben Noordhuis v0.6 * rb07acb3 / src/process_wrap.cc :
20:06:17  <CIA-115>node: child_process: fix segfault after failed spawn
20:06:17  <CIA-115>node: The process handle is uninitialized when uv_spawn() fails so don't export the
20:06:17  <CIA-115>node: handle to JS land when that happens. Attempts to close the uninitialized handle
20:06:18  <CIA-115>node: resulted in segmentation faults and memory corruption.
20:06:18  <CIA-115>node: Fixes #2481. - http://git.io/5kr1bw
20:11:05  <piscisaureus_>Actually let's do the status update here
20:11:12  <piscisaureus_>ryah bnoordhuis igorzi: ^
20:11:27  <piscisaureus_>I moved last week. Today I am working on domains again.
20:11:44  * bnoordhuisis afk for 30 mins
20:11:47  <piscisaureus_>And I am keeping an eye on Indutny / ErikCorry2
20:11:57  <igorzi>i'm looking at stat (it's pretty slow on windows)
20:12:03  <piscisaureus_>ok, cool
20:12:35  <igorzi>piscisaureus_: btw, not async stat (on threadpool), just CRT implementation of stat in general is slow
20:12:43  <piscisaureus_>igorzi: you confirmend that stat is the bottleneck for serving static files?
20:12:48  <piscisaureus_>oh ok
20:13:08  <indutny>I'm looking at xmas tree
20:13:29  <indutny>and around
20:13:32  <indutny>sometimes
20:13:44  <indutny>time to sleep, ttyl guys!
20:13:48  <indutny>have a nice evening!
20:14:19  <igorzi>piscisaureus_: but that's kind of orthogonal.. still having stat on every http request is not very optimal (but that's not node core issue)
20:14:38  * travis-cijoined
20:14:39  <travis-ci>[travis-ci] joyent/node#209 (v0.6 - b07acb3 : Ben Noordhuis): The build was fixed.
20:14:39  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/cc5cea3...b07acb3
20:14:39  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/498820
20:14:39  * travis-cipart
20:14:44  <piscisaureus_>igorzi: I agree, but still I want stat to be not pathetically slow :-)
20:15:04  <igorzi>piscisaureus_: yep :)
20:15:33  <piscisaureus_>igorzi: actually crt stat is not looking that stupid to me
20:16:13  <piscisaureus_>igorzi: but maybe you can make it faster by opening the file and doing fstat
20:16:27  <igorzi>piscisaureus_: right, it doesn't look stupid.. i'm profiling it
20:23:37  <indutny>DNS-blocking explained in a simple picture vmp.name/ttvk.jpg
20:26:54  <mmalecki>I'm learning sys deprecation the hard way - my global node has no sys
20:43:28  <ryah>why is CRT stat so slow?
20:43:45  * piscisaureus_quit (Read error: Operation timed out)
20:44:09  <igorzi>ryah: don't know yet.. it's just using Win32 APIs
20:44:24  <igorzi>ryah: I'm profiling.. i'll know more soon
20:45:01  <ryah>what's the win32 stat api?
20:46:40  <igorzi>ryah: the crt is using FindFirstFileEx
20:49:02  <ryah>igorzi: thanks
20:49:10  <ryah>(im trying to learn windows)
20:50:59  <ryah>AndreasMadsen: you there?
20:51:07  <AndreasMadsen>ryah: hi
20:51:11  <igorzi>ryah: btw, is isolates ready to be windows'ized yet?
20:51:43  <ryah>igorzi: let's wait a little longer - it shouldn't be too hard to port - i think bnoordhuis has done all the thread stuff
20:51:48  <ryah>probably just little tweaks
20:52:00  <ryah>let's get indutny's debugger stuff landed first
20:52:15  <ryah>igorzi: if you want to try to compile - go for it
20:52:22  <ryah>it might work out of the box
20:52:42  <igorzi>ryah: cool.. i'll give it a try
20:52:45  <ryah>AndreasMadsen: what's with https://github.com/joyent/node/pull/2461
20:52:55  <ryah>igorzi: try test/simple/test-isolates.js
20:53:43  <igorzi>ryah: i don't think we can do multiple event loops on windows yet
20:53:48  <ryah>AndreasMadsen: i dont get the purpose of this
20:53:55  <ryah>igorzi: oh right. yeah du
20:53:58  <ryah>*duh
20:54:04  <AndreasMadsen>ryah: The testcase is good now, but perhaps not in future ...
20:54:17  <ryah>AndreasMadsen: im not landing #2454
20:54:26  <AndreasMadsen>ryah: The testcase test if there is a stderr and stdout property
20:54:38  <igorzi>ryah: yep, uv_loop_new and uv_loop_delete are stubs.. so we'll need to get that going first
20:54:40  <AndreasMadsen>ryah: But now if it work
20:54:46  * brsonquit (Ping timeout: 240 seconds)
20:56:06  <AndreasMadsen>ryah: Then it will be your problem in the future, I really do not care. But I would like final review on the cluster improvements
20:56:36  <ryah>igorzi: well since we're not going with the uv_pipe_pair route - if you can get test/test-thread.c working i think you will be mostly there
20:56:55  * brsonjoined
20:57:09  <igorzi>ryah: k
20:57:23  <ryah>igorzi: i take back what i said earlier - it's probably appropriate to do this now :)
20:58:14  <igorzi>ryah: k :)
20:58:28  <AndreasMadsen>ryah: sorry, I know you won't land #2454 I just made me realise the testcase wan't very good.
20:58:58  <AndreasMadsen>ryah: Thought you meant #2461 (testcase improvement)
21:00:15  <CIA-115>node: Ryan Dahl master * rb28e700 / lib/sys.js :
21:00:16  <CIA-115>node: require('sys') now throws
21:00:16  <CIA-115>node: To be removed in v0.9 - http://git.io/gfD5IQ
21:01:56  <mmalecki>ryah: sorry, I don't understand the difference. it's going to throw anyway, people had time to adjust their code
21:02:17  <ryah>AndreasMadsen: style - " } else { " never " else {"
21:02:33  <ryah>mmalecki: throws with a message
21:02:51  <AndreasMadsen>ryah: Sorry I need to write it down in a (before commit note)
21:03:18  <ryah>AndreasMadsen: i will fix it
21:03:23  <mmalecki>ryah: well, it'd be useful for people who missed 0.5 and 0.6 :)
21:03:30  <AndreasMadsen>ryah: thanks :)
21:04:35  <ryah>mmalecki: yep
21:04:48  <CIA-115>node: Andreas Madsen master * r787f62d / test/simple/test-child-process-silent.js : Improve test-child-process-silent - http://git.io/K5Tdxg
21:04:58  <AndreasMadsen>ryah: ^ thanks
21:05:36  <mmalecki>ryah: uhm, yeah. it sounds useless if you ask me. but meh.
21:06:20  <ryah>mmalecki: we have many thousands of users - we must be very careful about being friendly
21:07:16  <ryah>i wish github would hire a designer
21:07:22  <ryah>christ
21:07:53  <AndreasMadsen>ryah: did you look at #2470
21:08:00  <AndreasMadsen>cluster patch
21:08:06  <mmalecki>ryah: they do, @kneath or so.
21:08:29  <mmalecki>ryah: how's throwing more user friendly than removing it? it's going to crash your app anyway
21:08:51  <mmalecki>which reminds me, I have to publish cradle
21:11:10  <ryah>mmalecki: it tells you what to use
21:11:11  <ryah>Error: The "sys" module is now called "util".
21:12:32  * travis-cijoined
21:12:32  <travis-ci>[travis-ci] joyent/node#210 (master - b28e700 : Ryan Dahl): The build is still failing.
21:12:32  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/8b28d59...b28e700
21:12:32  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/498934
21:12:32  * travis-cipart
21:12:42  <mmalecki>ryah: it's been telling you to use util since more than 10 releases, including 7 stable ones
21:13:01  <mmalecki>but I guess it's irrelevant anyway
21:13:13  <ryah>mmalecki: we have many users still on 0.2
21:13:24  <mmalecki>ryah: ahahahahaha
21:13:34  <mmalecki>ryah: wait. you're kidding, are you?
21:13:47  <ryah>if it works you dont upgrade
21:13:49  <mmalecki>(please, be kidding)
21:14:29  <mmalecki>ryah: our stack worked. I spent month upgrading it to 0.6. and guess what, it still works! but it's newer, which makes it cooler!
21:15:29  <ryah>:)
21:16:19  * paddybyersjoined
21:17:16  * travis-cijoined
21:17:16  <travis-ci>[travis-ci] joyent/node#211 (master - 787f62d : Andreas Madsen): The build is still failing.
21:17:16  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/b28e700...787f62d
21:17:16  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/498946
21:17:16  * travis-cipart
21:23:42  * piscisaureus_joined
21:32:49  * AndreasMadsenquit (Remote host closed the connection)
21:32:52  <mmalecki>hey, is it possible that 0.7 introduces some performance regression?
21:33:28  <ryah>possible
21:33:36  <ryah>mmalecki: why? did you measure som?
21:33:59  <mmalecki>ryah: yes. cradle test take 23 s on 0.7 and 4 s on 0.6.6
21:34:22  * isaacsjoined
21:34:26  <ryah>hmm...
21:34:30  <ryah>that's not good
21:34:40  <ryah>mmalecki: is that the release build?
21:35:04  <mmalecki>ryah: git clean -xdf && ./configure && make && make build
21:35:09  <mmalecki>ryah: what's the default?
21:35:39  <mmalecki>ryah: or, how can I check? symbols?
21:35:58  <ryah>mmalecki: out/Release/node ?
21:36:20  <mmalecki>ryah: yeah
21:37:23  <ryah>hmmm
21:37:31  <ryah>mmalecki: let's figure out what the difference is...
21:38:11  <mmalecki>ryah: ok. can you verify that the difference is there? I don't want to take your time because of some random derp
21:39:00  <ryah>mmalecki: trying to now
21:39:11  <mmalecki>ryah: it's on os x, btw. and you need couch running to run cradle tests
21:39:43  <ryah>[email protected]:~/projects/node% ~/attic/v0.6.6/bin/node benchmark/startup.js
21:39:43  <ryah>Started node 100 times in 4721 ms. 47.21 ms / start.
21:39:43  <ryah>[email protected]:~/projects/node% ./node benchmark/startup.js
21:39:44  <ryah>Started node 100 times in 5346 ms. 53.46 ms / start.
21:40:23  <mmalecki>that's because of snapshots, I guess? it shouldn't affect these tests tho
21:40:28  <ryah>no
21:40:32  <ryah>both have snapshots
21:40:39  <mmalecki>oh ok
21:43:07  <ryah>http://arlolra.no.de/ looking at
21:45:23  <mmalecki>master looks to be faster by all means
21:56:06  <mmalecki>ryah: can you try running cradle tests?
21:56:48  <mmalecki>or, can anyone here try running cradle tests on 0.6 and 0.7?
21:58:17  <ryah>mmalecki: how do i do that?
21:58:35  <mmalecki>ryah: do you have couchdb installed?
21:58:39  <ryah>no
21:58:54  <ryah>nevermind - i dont want to go down that road :)
21:59:00  <mmalecki>haha
21:59:15  <mmalecki>sec, I'll try that on some linux box
22:21:32  * isaacsquit (Read error: Connection reset by peer)
22:21:39  * isaacsjoined
22:25:55  <ryah>appending an member to the end of a class sin't going to change the ABI is it?
22:27:32  <pquerna>in C, no.
22:27:51  <pquerna>in C++, as long as its not allocated on the stack
22:27:55  <pquerna>(i think, but its messy)
22:28:34  <rmustacc>You're increasing the size of the structure that you're passing around, so you'll have to be careful with how you interact with it.
22:29:34  <mmalecki>ryah: "PL masturbator"?
22:29:43  <mmalecki>programming language?
22:31:47  <ryah>yes
22:32:21  <ryah>pquerna: Oo
22:32:48  <ryah>i need to sit down and learn how c++ actually lays out vtables and shit at some point
22:33:14  <pquerna>if its on the stack right, and someone elses object code uses it, it already layed it out how big it is
22:33:19  <ryah>why would allocating it on the stack change how it's layed out in memory?
22:33:24  <ryah>*laid
22:33:28  <pquerna>if its a pointer to an object on the heap that you allocate it at run time
22:33:49  <ryah>layed or laid?
22:33:51  <rmustacc>You can still have just as much trouble, if someone thinks its the old size, you'll just corrupt your heap instead.
22:34:07  <rmustacc>i.e. I give you a piece of memory of the old size, you work on it assuming its the new size.
22:34:18  <pquerna>rmustacc: how so? if they are just calling new Foo()...
22:34:58  <pquerna>if library has class A(); program B links it. if its a pointer to a heap, when it calls new, A, when it was compiled, knows how big it is
22:34:59  <rmustacc>pquerna: The issue isn't if you're calling new. If the original folks create memory and pass it onto the new one.
22:35:20  <pquerna>when its on the stack in program B, it needs to know when compiling B what the size is
22:35:47  <ryah>i dont think it matters - i think the ABI will be the same
22:35:58  <ryah>the offsets of the other members will not change
22:36:15  <ryah>i think
22:36:29  <ryah>it'll just be slightly longer
22:36:42  <ryah>the old code (which doesn't access the new member) wont notice
22:36:49  <pquerna>yes, thats why it works for heap allocated things, because the new, longer size isn't noticed by old code
22:37:05  <ryah>oh - hm
22:37:16  <ryah>i see what you mean
22:37:38  <ryah>the same would be for C too then
22:37:38  <pquerna>its one reason people use Impl class pointers and such
22:37:56  <pquerna>so the interface class is just the sizeof( pointer)
22:38:02  <pquerna>and then the impl class can change size underneath
23:02:24  <paddybyers>ryah: what you've said is true only when all of the existing members of the class, and the new member, are POD
23:02:35  <paddybyers>http://www.parashift.com/c++-faq-lite/intrinsic-types.html#faq-26.7
23:03:04  <ryah>which i just realized this isn-t there are virtual methods
23:03:21  <paddybyers>then you're screwed, all bets are off
23:03:45  <ryah>(c++)++
23:03:53  <ryah>(sarcastic)
23:04:01  <pquerna>use C, PODs only. :-/
23:05:57  <ryah>if only we could have a modern C
23:09:34  <pquerna>claaaay
23:11:14  <ryah>i decided i dislike the function overloading
23:11:23  <bnoordhuis>in general or ?
23:11:46  <ryah>bnoordhuis: talking to me?
23:12:11  <bnoordhuis>yes
23:13:33  <ryah>yeah - i dont like overloading in general
23:13:47  <ryah>makes the symbol table too hard to read
23:13:59  <bnoordhuis>ah
23:14:04  <bnoordhuis>good thing there is C
23:14:07  <ryah>yes
23:14:14  <ryah>yet again, we're back to c
23:15:17  <ryah>tbh, if i were making an app i'd probably use c++ though
23:15:31  <bnoordhuis>because?
23:16:04  <ryah>*shrug* it's cute
23:16:21  <bnoordhuis>so is python
23:16:27  <ryah>templates are nice sometimes
23:16:27  <pquerna>the belief in a limited subset of C++ is flawed I think. you always end up with symbol mangling and complications. and contributors are always unsure whats 'limited'. even if its documented, its yet another bikeshed.
23:16:39  <pquerna>see, and now you are letting in templates
23:16:43  <ryah>true..
23:17:03  <pquerna>just use C, then the only question is C89 or c99
23:17:08  <pquerna>and the only valid answer is c89
23:17:08  <ryah>tbh, i can't stand anything in posix or windows
23:17:21  <ryah>and i refuse to use it anymore
23:17:47  <bnoordhuis>pquerna: c11!
23:17:58  <rmustacc>The problem you hit there is that you really want to use C library functions from say SUS that are protected with a minimum XOPEN_SOURCE version.
23:18:03  <rmustacc>But SUS requires c99 at a certain point.
23:18:08  <ryah>oh god
23:18:17  <pquerna>:)
23:18:27  <ryah>rmustacc: just the mention of XOPEN_SOURCE made some of my hair fall out
23:18:34  <mmalecki>this day ryah refused to use C.
23:19:02  <pquerna>but this is why we have libuv, or apr, or nspr, they are supposed to hide that world.
23:19:05  <pquerna>give us a happy place
23:19:15  <pquerna>and they do, mostly.
23:19:27  <pquerna>ps, using libuv in lua/luvit is so nice :)
23:19:59  <mmalecki>pquerna: ++. I still prefer JS, but Lua has it's charm
23:20:00  <kohai>pquerna has 1 beer
23:20:27  <ryah>yeah - i think it's not enough
23:21:17  <ryah>computers are important enough to warrent a non-hacky solution
23:21:29  <ryah>*warrant
23:22:38  <bnoordhuis>where would our job security be if computers were easy?
23:23:44  <piscisaureus_>ryah: adding a member is a bad idea
23:24:04  <piscisaureus_>(if you want binary compatibility)
23:24:27  <piscisaureus_>ryah: who knows, the user may be allocating memory for your struct, and now it no longer fits
23:24:28  * sh1mmer_joined
23:24:35  <ryah>piscisaureus_: k
23:24:50  * sh1mmer_quit (Remote host closed the connection)
23:24:58  * sh1mmer_joined
23:25:10  <ryah>this should be okay though - wrt binary interface https://gist.github.com/1585600
23:25:12  <ryah>?
23:25:23  <ryah>making a static member public?
23:26:04  <ryah>bnoordhuis: can you reproduce #2473 easily?
23:26:15  <piscisaureus_>ryah: sure, as long as you are not creating a virtual member function
23:26:18  <ryah>https://github.com/joyent/node/issues/2473
23:26:26  <bnoordhuis>ryah: not easily, maybe once every three or four runs
23:26:30  <bnoordhuis>and only in release builds :/
23:26:38  <ryah>bnoordhuis: can you test that patch?
23:26:50  <ryah>bnoordhuis: it's supposed to be a fix for #2473
23:27:03  <bnoordhuis>ryah: i'll give it a whirl
23:27:06  <ryah>bnoordhuis: thanks
23:28:10  <piscisaureus_>ryah bnoordhuis: what's the status on the Voxer situation btw?
23:28:17  * sh1mmerquit (Ping timeout: 252 seconds)
23:28:17  * sh1mmer_changed nick to sh1mmer
23:28:36  <ryah>piscisaureus_: we fixed the major crash
23:28:46  <ryah>piscisaureus_: #2473 is the blocker now
23:28:56  <ryah>which happens much less frequently
23:29:01  <bnoordhuis>curl -s https://gist.github.com/raw/1585600/797329318566761d09cd064fcae6ac8d18448a2d/slab.diff | git apply
23:29:02  <bnoordhuis>error: No changes
23:29:56  <ryah>bnoordhuis: sorry - try this https://gist.github.com/1585631
23:30:27  <bnoordhuis>ryah: same
23:30:40  <bnoordhuis>i'll hand-patch it
23:30:51  <bnoordhuis>like it's 1999 again
23:30:59  <ryah>hm
23:31:25  <ryah>i wonder what happened...
23:32:30  <bnoordhuis>i'm at b07acb3 in case you're wondering
23:32:50  <bnoordhuis>also tried to apply it on master, same
23:34:44  <ryah>i rebased to b07acb38 - https://gist.github.com/1585672
23:34:55  <bnoordhuis>already hand-patched it :)
23:35:56  <piscisaureus_>there's always tortoisegit-apply to the rescue - https://gist.github.com/a035bcc98eeaff854b54
23:35:58  <piscisaureus_>:-p
23:36:54  <ryah>did indutny's stuff get landed?
23:37:44  <bnoordhuis>no
23:38:12  <bnoordhuis>there was still one bug but that's something i can fix
23:39:37  <bnoordhuis>ryah: four runs of `make test` with no crashes so far
23:39:43  <bnoordhuis>the absence of a crash of course...
23:40:33  <ryah>right
23:40:43  <ryah>does it not happen when you run the program directly?
23:41:48  <bnoordhuis>no
23:41:54  * piscisaureus__joined
23:42:04  <ryah>ok - im going to git it to dannycoates for testing
23:42:21  <bnoordhuis>cool
23:42:43  * piscisaureus_quit (Ping timeout: 240 seconds)
23:43:05  <bnoordhuis>7 runs and still no crashes, promising
23:43:49  <ryah>AFK
23:47:39  <dannycoates>ryah: testing the patch now