00:04:10  * mmaleckijoined
00:45:39  * TooTallNatequit (Quit: Computer has gone to sleep.)
01:17:57  * brsonquit (Ping timeout: 240 seconds)
01:18:03  * brsonjoined
01:23:27  * brsonquit (Ping timeout: 240 seconds)
01:23:35  * brsonjoined
01:28:01  * brsonquit (Ping timeout: 246 seconds)
01:28:51  * abraxasjoined
02:07:02  * brsonjoined
02:08:57  * sh1mmerquit (Quit: sh1mmer)
02:33:48  * AvianFlujoined
02:47:58  * luxigojoined
02:52:13  * luxigoquit (Ping timeout: 245 seconds)
02:53:14  * bnoordhuisquit (Ping timeout: 244 seconds)
02:53:42  * luxigojoined
03:02:46  * mmaleckiquit (Quit: leaving)
03:05:16  * c4milojoined
03:05:16  <indutny>hey people
03:07:47  <AvianFlu>sup indutny !
03:07:53  <indutny>howdy, man?
03:08:20  <AvianFlu>just got back to sf a little while ago
03:10:34  <indutny>oh, cool
03:10:42  <indutny>I'm at NYC now
03:10:51  <indutny>just came back from the restaraunt
03:11:14  <AvianFlu>nice
03:11:18  <AvianFlu>how are you liking the US?
03:11:48  <indutny>well, people are very friendly over here
03:12:02  <indutny>and personally I enjoyed PDX much more than NYC :)
03:12:23  <AvianFlu>NYC moves very fast
03:12:26  <AvianFlu>it can be very intense
03:12:34  <indutny>well, Moscow is fast too
03:12:40  <AvianFlu>and people can be kind of rude in NY too
03:12:42  <indutny>so that's not really a case
03:12:45  <AvianFlu>I like it, I'm from there :D
03:12:47  <AvianFlu>but it can be a lot
03:12:57  <indutny>hehe :)
03:13:04  <indutny>well, actually Moscow is much more crowded than NYC
03:13:26  <indutny>for example, trains in subways (in Moscow) are going every 1.5 minutes and are almost full of people
03:13:48  <indutny>on every station in center
03:13:55  <AvianFlu>that's a lot of volume
03:13:55  <indutny>which is about 15 stations (probably more)
03:14:00  <indutny>yeah
03:14:22  <indutny>well, the thing is that Moscow is much greener than NYC
03:14:29  <indutny>it's easier to breathe there
03:15:27  <indutny>here's is a density of people in moscow (according to wikipedia) 27,334.5 /sq mi
03:15:38  <indutny>nyc: 412/sq mi
03:16:35  <AvianFlu>yeah, nyc is pretty spread out, past manhattan
03:16:42  <indutny>indeed
03:16:45  <AvianFlu>that's insane, 27,000 per sq mi!
03:16:50  <indutny>yeah
03:16:59  <indutny>and all those people are living out of moscow
03:17:09  <AvianFlu>funny that it's greener in the more crowded place
03:17:10  <indutny>like in 1-2 hours of train
03:17:16  <indutny>yeah
03:18:12  * Ariajoined
03:22:00  * mjr_joined
03:31:43  * c4miloquit (Remote host closed the connection)
03:40:27  * luxigoquit (Ping timeout: 240 seconds)
03:45:50  <indutny>ok
03:45:52  <indutny>going to sleep
03:45:53  <indutny>ttyl
04:01:33  <ik>DAYCHANGE!
04:03:03  * sh1mmerjoined
04:24:58  <CIA-108>node: Fedor Indutny master * rd923269 / deps/openssl/openssl.gyp : tls: make tls a little bit faster - http://git.io/qI8aPg
04:27:10  * AvianFlu_joined
04:27:52  * AvianFluquit (Disconnected by services)
04:27:57  * AvianFlu_changed nick to AvianFlu
04:28:12  * Ariaquit (Remote host closed the connection)
05:27:41  * paddybyersjoined
06:18:53  * paddybyersquit (Quit: paddybyers)
06:32:48  * loladirojoined
06:33:29  * paddybyersjoined
06:34:24  * AvianFluquit (Ping timeout: 244 seconds)
06:49:07  * `3rdEdenjoined
06:52:17  * rendarjoined
06:57:47  * perezdquit (Quit: perezd)
06:58:46  * loladiroquit (Ping timeout: 246 seconds)
07:00:17  * brsonquit (Ping timeout: 252 seconds)
07:03:44  * brsonjoined
07:04:06  * stephankquit (Quit: *Poof!*)
07:12:38  * loladirojoined
07:24:51  * loladiroquit (Quit: loladiro)
07:36:55  * `3rdEdenquit (Ping timeout: 246 seconds)
07:37:05  * loladirojoined
07:42:45  * AvianFlujoined
07:43:24  * AvianFluquit (Client Quit)
07:43:47  * AvianFlujoined
07:45:27  * `3rdEdenjoined
07:53:40  * hzjoined
08:09:05  * paddybyers_joined
08:09:13  * loladiroquit (Ping timeout: 255 seconds)
08:11:12  * paddybyersquit (Ping timeout: 245 seconds)
08:11:12  * paddybyers_changed nick to paddybyers
08:29:29  * brsonquit (Remote host closed the connection)
08:35:43  * loladirojoined
08:58:17  * loladiroquit (Ping timeout: 265 seconds)
09:20:00  * paddybyersquit (Quit: paddybyers)
10:04:09  * hzquit
10:14:11  * loladirojoined
10:21:27  * bnoordhuisjoined
10:26:36  * abraxasquit (Remote host closed the connection)
10:35:55  * luxigojoined
10:39:50  * theColejoined
10:40:17  * luxigoquit (Ping timeout: 252 seconds)
10:46:55  * luxigojoined
11:06:27  * piscisaureus_joined
11:10:22  * loladiroquit (Ping timeout: 250 seconds)
11:21:32  * hzjoined
11:30:26  * paddybyersjoined
11:38:25  * paddybyersquit (Ping timeout: 246 seconds)
11:50:19  * piscisaureus_quit (Ping timeout: 246 seconds)
12:07:09  * piscisaureus_joined
12:07:17  <piscisaureus_>hello
12:07:21  * piscisaureus_changed nick to piscisaureus
12:26:03  * loladirojoined
12:28:10  <bnoordhuis>piscisaureus: sup bertje
12:33:40  <piscisaureus>sup bnoordhuis
12:37:09  <bnoordhuis>piscisaureus: https://github.com/bnoordhuis/node/commit/152fe9c <- quick 2.5% boost
12:37:59  * loladiroquit (Ping timeout: 248 seconds)
12:47:05  <piscisaureus>good
12:52:55  <piscisaureus>https://github.com/joyent/node/issues/3631 <- can't confirm. ab is too slow on windows
12:55:00  * loladirojoined
13:04:32  <piscisaureus>hmm, I think I will have to add accept backoff to windows too
13:17:07  <bnoordhuis>piscisaureus: btw, back in +31 again?
13:19:56  <piscisaureus>bnoordhuis: yup
13:20:01  <piscisaureus>arrived this morning
13:20:03  <bnoordhuis>cool
13:20:07  <bnoordhuis>how's the jet lag?
13:20:38  <piscisaureus>umm, well I didn't technically have a jetlag
13:20:45  <piscisaureus>since there was no tz difference
13:20:56  <piscisaureus>however, sleeping on the plane: -1
13:21:01  <bnoordhuis>ah, right
13:21:05  <bnoordhuis>yeah, awful
13:21:05  <piscisaureus>babies: -5
13:21:12  <piscisaureus>especially when I went there
13:21:14  <bnoordhuis>fly first class, problem solved
13:21:30  <piscisaureus>had no sleep, departed at 10am because I wanted to sleep on the plane
13:22:06  <piscisaureus>3 crying babies within 2 seats reach and a adhd toddler next to me
13:22:12  <piscisaureus>srsly, shoot me
13:22:24  <bnoordhuis>hah, hell
13:26:27  <piscisaureus>bnoordhuis: https://github.com/joyent/node/issues/3319 <- who is to blame there?
13:27:17  <bnoordhuis>piscisaureus: don't know, i've never seen that myself
13:29:39  <piscisaureus>tcp zerowindows means that the reader is too slow right?
13:30:11  <bnoordhuis>well.. it means the window got scaled down to nothing for some reason
13:31:42  <bnoordhuis>piscisaureus: come to think of it, that other guy complains about it happening on linux
13:31:55  <bnoordhuis>but i have never ever seen that, i always thought it was a windows issue
13:31:58  <piscisaureus>yep, that's why I removed the windows label
13:35:34  <bnoordhuis>piscisaureus: i just checked the kernel source, i guess zero windows are (at least theoretically) possible
13:35:50  <bnoordhuis>but yes, it means data comes in faster than the receiver can process it
13:37:18  <piscisaureus>zero window is not strictly an error, but failure to receive data is :-)
13:37:48  <bnoordhuis>i don't think there's much we can about that save growing the receive buffer
13:38:26  <piscisaureus>I meant: the guy reporting the windows problem says his node does not seem to do anything
13:38:34  <piscisaureus>so it may be unrelated to the linux issue
13:38:49  <piscisaureus>maybe just the SWS backoff bug in windows
13:39:17  <bnoordhuis>ah right. so a windows issue after all :)
13:39:58  <piscisaureus>this happens also when running the tcp pump bench
13:40:01  <piscisaureus>in libuv
13:40:11  <bnoordhuis>oh? interesting
13:40:32  <piscisaureus>although the kb article says that it should only happen when sending more than 64k at once
13:40:37  <piscisaureus>I am not sure tcp pump does that
13:41:04  * c4milojoined
13:57:29  <bnoordhuis>piscisaureus: are you at the office tomorrow?
13:57:34  <piscisaureus>yep
13:57:41  <bnoordhuis>cool, i'll probably be there too
13:57:50  <piscisaureus>kewl
13:58:07  <bnoordhuis>but make sure you're stocked up on real beer >:(
13:58:11  <bnoordhuis>not that heineken piss
13:58:24  <piscisaureus>talk to the interns :-)
13:58:31  <bnoordhuis>haha, detmar?
13:58:42  <piscisaureus>try it :-)
14:15:17  <piscisaureus>https://github.com/bergie/dnode-php#performance <-- A new all time low in benchmarking
14:15:44  <tjfontaine>heh
14:16:22  <piscisaureus>Yeah, let's use time to benchmark something that takes a tiny fraction of a second and includes startup time
14:16:27  * piscisaureuscries
14:16:31  * piscisaureusapplies for a real job
14:20:39  <bnoordhuis>piscisaureus: you should open an issue
14:21:17  <piscisaureus>shrug
14:21:22  <piscisaureus>Idiots be idiots
14:23:51  <indutny>hey people
14:24:10  <bnoordhuis>sup fedor
14:27:19  <indutny>em...
14:27:22  <indutny>just hanging around, you know
14:27:25  <indutny>nothing, actually
14:27:31  <indutny>going to search for a food
14:27:39  <indutny>and then search for a libuv/nodejs stuff to work on
14:27:50  <indutny>probably there're still a place for some other TLS optimizations
14:27:55  <indutny>need to figure that out
14:31:55  * chobi_echanged nick to chobi_e_
14:39:48  <indutny>bnoordhuis: isaacs piscisaureus : are we doing a call today?
14:39:54  <indutny>or are everyone still wasted today? :)
14:40:01  <piscisaureus>haha
14:40:06  <piscisaureus>You should ask isaacs
14:40:11  <piscisaureus>I am okay with it
14:40:16  <piscisaureus>but for me it's not 9am :-)
14:40:24  <indutny>hahaha
14:40:27  <indutny>yeah
14:40:33  <indutny>for me it should be 12pm
14:40:37  <indutny>I suppose
14:41:23  <creationix>piscisaureus: https://github.com/bergie/dnode-php/commit/2f285e7cd153c068b30bcf756d53426eb92dca44
14:42:36  <creationix>I think he found node to be much faster in larger tests and that's why he says "in simple calls" php is faster
14:42:50  <piscisaureus>in lame benchmarks php wins
14:43:07  * luxigoquit (Ping timeout: 250 seconds)
14:43:27  <creationix>it's a rookie mistake. I think they are well meaning
14:51:08  * luxigojoined
15:06:54  * `3rdEdenquit (Quit: Linkinus - http://linkinus.com)
15:14:15  * AndreasMadsenjoined
15:14:37  * AndreasMadsenquit (Client Quit)
15:16:17  <piscisaureus>bnoordhuis: thou shalt not do implicit casts between doubles and ints
15:23:03  <isaacs>good morning
15:23:18  <isaacs>piscisaureus: did you head straight back to nederlandia?
15:23:55  <piscisaureus>isaacs: yes indeed
15:24:45  <isaacs>indutny: i think we could probably do a call. or we could just do an online check-in here, if you like.
15:25:48  <isaacs>not much to report, but it'd be nice to check in about what we're all planning on working on next. we're on the other side fo the big release, so blockers aren't as urgent.
15:26:03  <piscisaureus>Let's just do a quick call
15:26:14  <piscisaureus>I like that better than frantically typing in this irc box
15:26:18  <isaacs>kewl
15:26:25  <isaacs>ok, at 1600 UTC, then
15:44:14  <isaacs>indutny: i was thinking during your talk, it'd be cool to build a language specifically designed for C-style/JS-style language experimentation.
15:44:49  <isaacs>indutny: even get rid of while(){}, but add hygenic macros, which can contain labelled lines and goto
15:50:20  * luxigoquit (Ping timeout: 246 seconds)
15:50:26  * stephankjoined
15:51:25  * piscisaureusquit (Quit: ~ Trillian Astra - www.trillian.im ~)
15:51:42  * ericktjoined
15:53:03  * piscisaureus_joined
15:54:15  * piscisaureus_quit (Read error: Connection reset by peer)
15:54:47  * piscisaureus_joined
15:56:36  * luxigojoined
15:59:42  * AvianFluquit (Quit: leaving)
16:04:07  * bcantrilljoined
16:04:34  <piscisaureus_>bnoordhuis: call
16:04:42  * piscisaureus_changed nick to piscisaureus
16:04:58  <isaacs>indutny: ping
16:04:59  * hzquit (Read error: Connection reset by peer)
16:06:00  * hzjoined
16:06:06  * AvianFlujoined
16:06:12  <CIA-108>libuv: Bert Belder versioning * r8105bed / (5 files in 3 dirs): Prepare for proper versioning - http://git.io/ITPcfg
16:06:32  * AvianFluchanged nick to Guest39793
16:06:36  * Guest39793quit (Client Quit)
16:07:51  * AndreasMadsenjoined
16:08:38  * AvianFlu_joined
16:19:51  * travis-cijoined
16:19:51  <travis-ci>[travis-ci] joyent/libuv#486 (versioning - 8105bed : Bert Belder): The build failed.
16:19:51  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/commit/8105bed16529
16:19:51  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/1786941
16:19:51  * travis-cipart
16:20:32  <mjr_>indutny: thanks for working on TLS optimizations.
16:21:11  <isaacs>Most groggy jet-lagged hung-over status call ever.
16:21:19  <piscisaureus>heh
16:21:21  <piscisaureus>sorry
16:21:27  <isaacs>nono, i'm in a similar boat.
16:21:31  <isaacs>but minus the jet-lag of course.
16:22:29  <piscisaureus>The problem is not so much the jetlag
16:22:58  <piscisaureus>it's a 10 hr flight where I should have slept but couldn't
16:23:11  <piscisaureus>They should have a silence zone on airplanes
16:26:14  <AndreasMadsen>piscisaureus ++
16:26:14  <kohai>piscisaureus has 2 beers
16:28:38  * ericktquit (Quit: erickt)
16:31:29  * theColequit (Quit: theCole)
16:35:15  * ericktjoined
16:36:58  <isaacs>piscisaureus: yes, i agree. and the silence zon should be the part with the seats in it
16:37:07  <isaacs>noisy children go in the cargo hold.
16:37:18  <piscisaureus>hehe
16:37:20  <piscisaureus>yes
16:37:43  <isaacs>just pad the walls and put a bouncy floor in it, they'll be safe and have loads of fun.
16:37:49  <piscisaureus>drinking russians should too :-p
16:37:52  <isaacs>yes
16:38:06  <isaacs>anyone making noise gets tossed in the bouncy chamber.
16:49:53  <mjr_>You guys need to invest in noise canceling / blocking technology.
16:50:03  <mjr_>It's surprisingly affordable, compared to an airplane ticket.
17:01:17  * AvianFlu_changed nick to AvianFlu
17:01:41  * paddybyersjoined
17:02:17  <piscisaureus>we were just exploring other noise cancelling techniques
17:02:18  <piscisaureus>:-p
17:04:00  <piscisaureus>it's weird tho - I have -36 dB earplugs (and was wearing them) but babies somehow penetrate that
17:04:25  <tjfontaine>you hear what you want to hear :)
17:35:52  <isaacs>mjr_: yes, earplugs are nice, especially when you and your traveling partner both know a bit of ASL
17:35:56  * dapjoined
17:37:42  * TooTallNatejoined
17:37:47  <isaacs>bnoordhuis: do you have feelings about making lchmod a no-op on other unixes?
17:38:24  <isaacs>that would actually make some of my programs a bit simpler.
17:48:22  <indutny>isaacs: sorry, I was afk
17:48:28  <indutny>isaacs: yeah, it would be good
17:48:31  <indutny>mjr_: you're welcome
17:48:36  <indutny>still working on this stuff, you know
17:55:59  * AndreasMadsenquit (Remote host closed the connection)
18:01:17  <piscisaureus>bnoordhuis: isaacs: Do we really care about issue numbers in the changelog?
18:01:37  <isaacs>piscisaureus: meh.
18:02:02  <piscisaureus>bnoordhuis: isaacs: I feel that this is incredibly painful to track. In node issue numbers are sometimes mentioned, but quite randomly
18:02:02  <isaacs>piscisaureus: it's nice sometimes when there's an issue that you know people are waiting for a fix for
18:02:07  <isaacs>piscisaureus: yes.
18:02:11  <piscisaureus>ok
18:02:19  <piscisaureus>In that case I am not going to do it :-)
18:02:33  <isaacs>piscisaureus: and since the changelog head is also the commit message for the release, i sometimes end up closing the wrong thing with it
18:03:18  <isaacs>let's just make the descriptions descriptive enough that users know when their issue is resolved.
18:03:26  <piscisaureus>git log --cherry --pretty="format:%w(79,0,2)* %s (%cN)%n" <-- magic :-p
18:03:40  <indutny>log should be good too
18:03:40  <isaacs>and also try to mention in the closing message that the fix will be in X.Y.Z version of whatever.
18:03:41  <indutny>yeah
18:04:06  <isaacs>piscisaureus: oohh... i did not know about %w(,,)
18:04:12  <isaacs>piscisaureus: that's very handy :)
18:04:16  <piscisaureus>yep
18:04:36  <piscisaureus>I am going to do this changelog commit-style. E.g. format the thing, then fire up an editor for manual tweaks
18:04:43  <indutny>yeah
18:04:48  <isaacs>though, i find that it's nice to have the sha's in my git log helper, so that i can look at the actual commit and tweak the wording for more casual users.
18:04:53  <piscisaureus>yeah
18:05:11  <piscisaureus>I am going to dump the full log beneath, prefixed with #'s
18:05:13  <piscisaureus>commit style :-)
18:05:16  <isaacs>[alias] cl = log --graph --pretty=format:'%h%d %s (%an)'
18:05:19  <indutny>if you would like you should just change commits to "fixed something/improved speed"
18:05:29  * brsonjoined
18:05:51  <isaacs>a lot of time there are multiple commits that need to be squashed into a single CL entry, but need to be separate commits in the history for reasons
18:05:59  <piscisaureus>yeah, I will do that
18:06:35  <isaacs>what's log --cherry?
18:06:54  <piscisaureus>isaacs: skip merges and commits that are introduced on 2 branches
18:07:09  <isaacs>oic
18:07:18  <isaacs>thanks. the man page was overly detailed.
18:07:20  <piscisaureus>er, so the "double commits" would be shown only once
18:09:33  <piscisaureus>Yeah %cN was not good, gotta use %aN
18:09:45  * creationixpart
18:13:16  * EhevuTovjoined
18:25:11  * mjr_quit (Quit: mjr_)
18:51:46  <piscisaureus>My time has come
18:51:57  <piscisaureus>bnoordhuis: see you tomorrow; what time?
19:05:25  * piscisaureusquit (Quit: ~ Trillian Astra - www.trillian.im ~)
19:05:34  * luxigoquit (Remote host closed the connection)
19:07:01  * AndreasMadsenjoined
19:24:00  * EhevuTovquit (Quit: Leaving)
19:35:06  <bnoordhuis>back
19:35:18  <tjfontaine>good day good sir
19:35:25  <bnoordhuis>hello :)
19:35:40  <bnoordhuis>hey, there was actually a call?
19:35:52  <bnoordhuis>i kind of assumed everybody was too jetlagged
19:35:52  <TooTallNate>bnoordhuis: ya, just me and isaacs and bert
19:36:00  <TooTallNate>but we cut it short
19:46:34  <indutny>ok
19:46:36  <indutny>571 req/s
19:46:37  <indutny>vs
19:46:40  <indutny>400 req/s
19:46:41  <indutny>haha
19:47:16  <indutny>and vs 537 req/s
19:47:21  <indutny>with that openssl optimization
19:50:29  <indutny>bnoordhuis: yt?
19:50:37  <bnoordhuis>indutny: ih
19:51:03  <indutny>bnoordhuis: wanna review patch?
19:51:11  <bnoordhuis>what patch?
19:51:36  <indutny>bnoordhuis: this one https://github.com/indutny/node/commit/c5a49e1a983b2dd8f0c05af3d3484bee0267877d
19:51:54  <indutny>a reusable shared buffer for all tls server
19:51:57  <indutny>s/server/servers
19:52:15  <indutny>which is improving performance by 7%
19:52:17  <indutny>approximately
19:52:26  <indutny>btw, I'm still seeing a lot of malloc calls
19:52:29  <indutny>on profile
19:52:39  <indutny>while it has ben cut off by the factor of 2 after this patch
19:56:02  <bnoordhuis>indutny: what happens if you need x bytes and there are only y bytes left in the pool?
19:56:24  <indutny>bnoordhuis: well, it'll try reading as much as it can
19:56:27  <indutny>oh
19:56:42  <indutny>I see now
19:57:11  <indutny>interesting question, btw
19:57:55  <bnoordhuis>indutny: looks like it should work though, you'll just end up doing small SSL_read() reads
19:57:57  <indutny>we wasn't handling that in old code, btw
19:58:07  <indutny>bnoordhuis: well, small reads ain't always possible
19:58:27  <indutny>tls is using block ciphers, so if block is big - we need more memory to decipher it
19:58:44  <indutny>I suppose SSL_read should return some special error in that case
19:58:53  <indutny>or it may be just copying part of the block to the memory
19:59:01  <indutny>reading this now : http://www.openssl.org/docs/ssl/SSL_read.html
19:59:47  <indutny>ah, it'll just slice
19:59:52  <indutny>so we should not care about it
20:01:11  <bnoordhuis>github is kinda flaky today
20:01:20  <bnoordhuis>i commented on the commit but now the comment is gone
20:01:47  <indutny>well, I'm force pushing it
20:01:49  <indutny>but I seen it
20:01:58  <indutny>now there is an assertion
20:02:09  <indutny>bnoordhuis: https://github.com/indutny/node/commit/58c802b814ec3ef0843205affc65490f0c10f60a
20:02:22  <indutny>I'll run `make test` now
20:03:59  <indutny>oh, a typo
20:04:44  <indutny>hehe
20:04:52  <indutny>I'm going to push it if tests are passing
20:05:02  <bnoordhuis>yeah, lgtm
20:05:13  <indutny>ok
20:05:29  <bnoordhuis>oh wait
20:05:36  <indutny>btw, I think we're going to visit Amsterdam this year
20:05:46  <indutny>prepare!! :)
20:05:49  <indutny>bnoordhuis: sup?
20:05:54  <bnoordhuis>hah, looking forward to it
20:06:03  <bnoordhuis>indutny: commented
20:06:28  <indutny>bnoordhuis: well, this may be stored in this module as a local variable
20:06:35  <indutny>bnoordhuis: yeah, I think there're no reason
20:07:26  <indutny>bnoordhuis: no more objections?
20:07:34  <indutny>tests are passing
20:07:36  <bnoordhuis>indutny: none apart from that one
20:07:41  <indutny>I only see a few EMFILEs
20:07:48  <indutny>https://github.com/indutny/node/commit/58c802b814ec3ef0843205affc65490f0c10f60a
20:07:51  <indutny>the last version ^
20:07:58  <indutny>oh, no it isn't
20:08:08  <indutny>this one https://github.com/indutny/node/commit/f210530f46e8ddbd9e7cc0d0c37778888c27f526
20:08:29  * AndreasMadsenquit (Remote host closed the connection)
20:08:40  <CIA-108>node: Fedor Indutny master * rf210530 / lib/tls.js : tls: use slab allocator - http://git.io/XimfPQ
20:09:17  * piscisaureus_joined
20:09:21  <indutny>woot
20:13:38  <indutny>so, now I want to trace calls to malloc somehow
20:13:42  <bnoordhuis>node -e 'require("http").get("http://nodejs.org/").pipe(process.stdout)' <- why doesn't that actually print anything?
20:13:44  <indutny>callgrind isn't really helpful
20:13:51  <bnoordhuis>indutny: use massif
20:13:54  <indutny>massif ?
20:13:55  <indutny>ok
20:13:56  <indutny>will do
20:13:59  <indutny>time to eat now
20:13:59  <indutny>ttyl
20:14:05  <bnoordhuis>bon appetite
20:15:32  <TooTallNate>bnoordhuis: that is strange
20:16:08  <bnoordhuis>it is, isn't it?
20:16:15  <bnoordhuis>node -e 'var req = require("http").request("http://nodejs.org/"); req.pipe(process.stdout); req.end()' <- doesn't work either
20:17:51  <bnoordhuis>at least it's not a regression - it doesn't work with v0.6 either :)
20:18:06  <bnoordhuis>(that's with {method:"GET", ...})
20:18:11  <bnoordhuis>i'll open an issue
20:22:40  <piscisaureus_>bnoordhuis: that's because http.request doesn't take an url
20:22:51  <bnoordhuis>piscisaureus_: does too
20:22:54  <piscisaureus_>bnoordhuis: nor does get
20:22:57  <bnoordhuis>does too
20:23:08  <bnoordhuis>but it doesn't work with an options object either
20:23:38  <TooTallNate>node -e 'var req = require("http").request({ url: "http://nodejs.org", method: "get" }); req.pipe(process.stdout);'
20:23:40  <TooTallNate>nope
20:23:53  <bnoordhuis>TooTallNate: needs a req.end()
20:24:06  <bnoordhuis>but then it still doesn't work
20:24:35  <bnoordhuis>https://github.com/joyent/node/issues/3645
20:25:00  <piscisaureus_>bnoordhuis
20:25:04  <bnoordhuis>piscisaureus_: btw, when you trace it with strace -e read,epoll_wait you can see that it actually downloads
20:25:05  <piscisaureus_>require('http').get('http://nodejs.org', function(res) { res.pipe(process.stdout) })
20:25:16  <piscisaureus_>bnoordhuis: the request object is a writable stream
20:25:22  <piscisaureus_>the response object emits data events
20:25:25  <bnoordhuis>aww, damn
20:26:40  * perezdjoined
20:27:18  * perezdquit (Client Quit)
20:27:34  * perezdjoined
20:27:40  <bnoordhuis>why doesn't node complain though? req isn't or shouldn't be writable
20:27:50  * AndreasMadsenjoined
20:28:38  <piscisaureus_>bnoordhuis: s/writable/readable
20:28:47  <piscisaureus_>bnoordhuis: because there is no check :-)
20:28:53  <bnoordhuis>yeah, that's what i meant
20:28:57  <bnoordhuis>and indeed there is not
20:29:03  <bnoordhuis>maybe something for the streams refactor
20:29:06  <piscisaureus_>bnoordhuis: attaching event handlers is always possible
20:29:18  <piscisaureus_>bnoordhuis: the question is why a write only stream has a pipe method :-)
20:29:24  <TooTallNate>and there's only a Stream class, not a WritableStream or ReadableStream base class
20:29:49  <TooTallNate>but then that would cause problems for duplex streams :p
20:30:20  <bnoordhuis>streams have .readable and .writable properties though
20:30:44  <bnoordhuis>but perhaps it's not nice to throw when .readable isn't set yet when you call .pipe()
20:31:11  <bnoordhuis>i know the perfect solution!
20:31:22  <bnoordhuis>i'm going to open an issue, assign to isaacs and let him figure it out :)
20:33:42  <tjfontaine>heh
20:35:01  * EhevuTovjoined
20:45:56  * piscisaureus_quit (Ping timeout: 264 seconds)
20:49:56  * AndreasMadsenquit (Remote host closed the connection)
20:58:06  * paddybyersquit (Quit: paddybyers)
21:04:33  * AvianFluquit (Quit: leaving)
21:04:52  * AvianFlujoined
21:09:13  <CIA-108>node: Ben Noordhuis v0.8 * r0c47219 / (lib/timers.js test/simple/test-timers.js): timers: fix handling of large timeouts - http://git.io/SqBUWA
21:17:12  * AlbireoXquit (Read error: Connection reset by peer)
21:18:52  <isaacs>TooTallNate: it'd be trivial to have a ReadableStream base clas, and another for WritableStream, and then a DuplexStream that just plucks the proto methods from both
21:19:46  <TooTallNate>isaacs: ya, but that wouldn't truly inherit from the two base classes. i.e. if you add a function to the prototype of one
21:19:57  <isaacs>no, of course not
21:20:02  <isaacs>it'd just inherit from Stream
21:20:19  <TooTallNate>i don't think that's a terrible solution
21:20:27  <isaacs>really, having to check for (and set) .writable and .readable is a huge pain in teh ass.
21:20:34  <isaacs>i mess that up every single time
21:20:42  <TooTallNate>in fact, i proposed it a long time ago on the mailing list ;)
21:20:45  <TooTallNate>isaacs: agree'd
21:21:16  <isaacs>the presence of the "write" method should indicate that it's writable, and the presence of pause/resume/pipe should indicate that its readable
21:21:48  <isaacs>also, ryah just pointed me to this: http://api.dartlang.org/io/InputStream.html
21:21:55  <isaacs>it's kind of an interesting API.
21:22:06  <isaacs>emits 'data' before it actually does the read()
21:22:16  <isaacs>then, at that point, you call read() which gives you whatever's available
21:27:18  * AlbireoXjoined
21:32:05  * chobi_e_changed nick to chobi_e
21:39:39  * c4miloquit (Remote host closed the connection)
21:45:49  <indutny>bnoordhuis: oh, openssl does a lot of allocation
21:45:58  <indutny>and other is some node's js internals
21:46:10  <indutny>which are just jit code addresses in massif's stack
21:46:18  <indutny>but yeah, this information is still useful anyway
21:46:21  <indutny>bbiab
21:54:26  <bnoordhuis>https://github.com/joyent/node/issues/3418 <- Wrong handling CJK symbols on navigation
21:54:33  <bnoordhuis>anyone have ideas on how that could happen?
21:55:35  <TooTallNate>bnoordhuis: is there maybe like a "unicode mode" we have to have the tty enter somehow?
21:55:46  <TooTallNate>perhaps an ansi escape sequence
21:56:08  <TooTallNate>that would make the terminal "know" that the unicode symbol is 1 char not 2 or 3 or whatever
21:56:09  <bnoordhuis>i'm thinking along similar lines
21:56:20  <TooTallNate>someone check bash!
21:56:22  <bnoordhuis>but i don't know what ansi code that should be :)
21:57:53  <bnoordhuis>it's odd that when you type or paste the character, it works
21:59:24  <bnoordhuis>maybe it's a terminal bug
21:59:43  <bnoordhuis>TooTallNate: what happens if you run `cat`, paste 错, then hit backspace?
22:00:14  <TooTallNate>bnoordhuis: the char gets deleted, but the cursor is at position 1 instead of 0
22:00:22  <TooTallNate>and backspace again does nothing
22:00:22  <bnoordhuis>yeah, same here
22:00:33  <TooTallNate>very strange
22:00:33  <bnoordhuis>actually, in my terminal the characters gets half-deleted
22:00:46  <TooTallNate>even stranger :D
22:00:58  <bnoordhuis>yeah. :-) it's deleted from the buffer but it's still half visible
22:02:59  * chobi_echanged nick to chobi_e_
22:05:05  * hzquit
22:07:41  <TooTallNate>bnoordhuis: it seems like bash itself though does things right
22:08:51  <bnoordhuis>TooTallNate: it's odd, innit?
22:09:20  <bnoordhuis>TooTallNate: `rlwrap cat` does the right thing too
22:09:35  <bnoordhuis>guess i'll have to dig through the libreadline source
22:11:00  * chobi_e_changed nick to chobi_e
22:12:20  <TooTallNate>libreadline is a beast :(
22:17:17  <isaacs>careful reading libreadline
22:17:48  <isaacs>the gpl, it's infectious. all terminal parsing code you write might get infected.
22:18:20  <bnoordhuis>i'll read the source, describe my findings and you guys can write the patch :)
22:20:32  * chobi_echanged nick to chobi_e_
22:21:04  <bnoordhuis>another strange thing is that for example ć and â get rendered just fine
22:23:26  <indutny>haha
22:23:43  <indutny>isn't readline bsd?
22:33:58  <indutny>bnoordhuis: well, I've just added logging to Buffer::Replace
22:34:04  <indutny>and it seems that it isn't allocating a lot
22:35:04  <indutny>looks like v8 statistical analyzer is wrong here
22:42:54  <isaacs>indutny: i think you're thinking of editline
22:43:10  <isaacs>which was written specifically because readline is religious
22:44:12  <indutny>by other religious people
22:44:14  <indutny>:D
22:44:33  <indutny>isaacs: so, you want candor to be more like simplified javascript
22:44:40  <indutny>and be compatible with current javascript spec?
22:44:49  <indutny>like type coercion
22:44:53  <indutny>and function keyword
22:45:25  <isaacs>indutny: nono
22:45:45  <isaacs>indutny: i want a different language that can be used to write candor and other javascript-family languages to try out things
22:46:01  <isaacs>indutny: if, goto, and macros. no other flow control.
22:46:09  <indutny>oh
22:46:12  <isaacs>then we can experiment with new types of function syntaxes even
22:46:23  <isaacs>there are some other lowlevel things you sort of need, though
22:46:30  <isaacs>+-/*, numbers, strings, etc.
22:46:31  <indutny>like assembly, but with black-jack and bitches
22:46:45  <indutny>this is a great idea, actually
22:46:47  <isaacs>indutny: in fact, forget about the assembly!
22:46:54  <indutny>yeah
22:46:55  <isaacs>indutny: i don't know how feasible it is
22:47:05  <indutny>well, I think you can use JVM for this :)
22:47:18  <isaacs>indutny: i mean, candor and js ARE pretty different even at a low level
22:47:40  <isaacs>"asdf".length
22:47:41  <isaacs>etc.
22:48:21  <isaacs>but if you can define operators c++ style, you can define a . macro that can come after certain specific sorts of primitives
22:48:45  <isaacs>like how in scala you can define +!@#$ as an infix function that does whatever.
22:48:53  * paddybyersjoined
22:49:42  <indutny>yeah, I see now
22:49:54  <indutny>interesting idea, really
22:50:07  <isaacs>macro . { if (typeof(LEFT) === "string") ... }
22:50:10  <indutny>but I think what you're talking about is a low-level front-end to JVM
22:50:18  <isaacs>yeah, probably
22:50:28  <isaacs>i'll probably just keep using javascript forever honestly.
22:50:30  <indutny>because it's instructions are essentially providing the same stuff
22:50:34  <indutny>haha
22:51:13  <isaacs>but i was thinking during your talk, how you were saying that "while" is the only loop, because "for" is too complicated... isn't "while" pretty complicated?
22:51:20  <isaacs>i mean, it's an if AND a goto
22:51:24  <isaacs>that's two things!
22:52:11  <isaacs>and like, lisps sort of are intended to be a language for writing languages, but they always just end up writing more lisp.
22:52:23  <isaacs>clojure dsls always just look like clojure
22:53:05  * sh1mmerquit (Read error: Operation timed out)
22:54:09  * loladiroquit (Quit: loladiro)
22:55:05  <indutny>haha
22:55:29  <indutny>well, for is just a sugar for while
22:55:42  <indutny>and goto/label is so basic'ish
22:55:43  * sh1mmerjoined
22:56:07  <indutny>loops are actually more essential for a compiler design
22:56:51  <isaacs>indutny: while is just sugar for loop
22:57:01  <isaacs>loop { blah blah blah ... ; break; }
22:57:13  <indutny>hahaha
22:57:14  <indutny>indeed
22:57:35  <isaacs>indutny: but you can design it so that goto can only go to a labelled line within the macro.
22:57:35  <indutny>but if that was clear, compiler is operating with HIR(CFG - Control flow graph)
22:57:45  <isaacs>right
22:57:54  <isaacs>yeah, candor wants to actually be fast :)
22:57:55  <indutny>and this graph may contain loops
22:57:59  <indutny>yeeah
22:58:15  <isaacs>this javascripty macro playland language would be more about experimentation than speed.
22:58:20  <indutny>and loops have to be processed with some special algorithms to work properly
22:58:34  <indutny>well, if it's just an experiment - you can transcompile it to js
22:58:55  <isaacs>yeah, but at that point, why not just glue macros into js and make the monster all the way?
22:59:23  <indutny>hahahahaha
23:01:09  <indutny>oh, it's such a hell in NYC now
23:01:14  <indutny>I'm just going to melt
23:05:39  * piscisaureus_joined
23:11:23  <indutny>so, after all those patches
23:11:29  <indutny>node is quite good at TLS termination
23:11:40  <indutny>with cluster it works at 1035 req/sec on my MBP 15''
23:12:08  <indutny>and 756 req/sec without
23:12:17  <indutny>that's a way faster than nginx
23:12:20  <indutny>like 10x times :D
23:13:59  <indutny>bnoordhuis: and I think it's like a hard limit for it
23:14:37  <indutny>it's spending almost all other time in optimized (or without assembly version) openssl's code
23:15:03  <piscisaureus_>indutny: so why is it only 1.5x faster with cluster?
23:15:08  <piscisaureus_>indutny: should be like 8x right?
23:15:16  <piscisaureus_>:-p
23:15:17  <piscisaureus_>ok, 4x
23:15:20  <indutny>hm
23:15:26  <indutny>it shouldn't :)
23:15:31  <indutny>openssl is using multiple cores
23:15:44  <indutny>it's using one core only on handshake phase
23:16:10  <piscisaureus_>indutny: so openssl already offloads computation to other threads in node?
23:16:24  <indutny>yeah, I think so
23:16:36  <indutny>it's internals are using this somehow
23:16:40  <indutny>AFAIK
23:16:46  <indutny>better ask bnoordhuis about that ;)
23:16:55  <indutny>piscisaureus_: anyway it's expected because I've only two real cores
23:17:13  <indutny>but response time has been decreased too!
23:17:21  <indutny>from 130ms to 100ms
23:17:27  <indutny>I think this is very good improvement
23:17:52  <indutny>is there anyone who can test it in production?
23:17:58  <piscisaureus_>indutny: I think so too. I am just curious how low we can go :-)
23:18:00  <piscisaureus_>https://github.com/joyent/node/issues/868#issuecomment-1017139
23:18:14  <piscisaureus_>like, the theoretical upper limit
23:18:14  <indutny>3000 req/sec
23:18:18  <indutny>what can is she using?
23:18:30  <indutny>ah
23:18:32  <indutny>that's http
23:18:45  <indutny>or no?
23:18:58  <piscisaureus_>I dunno
23:19:01  <piscisaureus_>but I think so
23:19:06  <indutny>ah, she's somehow triggering ssl cache
23:19:09  <piscisaureus_>since he is serving a statuc file :-)
23:19:12  <indutny>odd, because 'ab' isn't doing it
23:19:37  <indutny>and also keep-alive :)
23:20:00  <indutny>how is it affecting benchmarking?
23:20:25  <indutny>I think node can do much more than 530 req/sec if ssl sessions will be reused
23:23:45  <indutny>piscisaureus_: was it 0.4 version?
23:23:51  <indutny>piscisaureus_: here https://github.com/joyent/node/issues/868#issuecomment-1017139
23:23:54  <piscisaureus_>indutny: you are the russian evil genious, I am just nudging you and trying to improve my understanding a little in the meantime :-)
23:24:04  <piscisaureus_>indutny: yeah, long time ago
23:24:08  <indutny>hahahaha
23:24:28  <indutny>piscisaureus_: that's actually pretty simple
23:24:32  <indutny>I just eat a dog on it
23:24:37  <indutny>like we're saying in Russia
23:24:45  <indutny>haha :D
23:24:51  <indutny>pquerna still knows much more than I am
23:25:32  * paddybyersquit (Quit: paddybyers)
23:26:05  <piscisaureus_>indutny: https://github.com/joyent/node/issues/2846#issuecomment-6627885 <-- so node x86 was much worse than x64. This must be the build fix you wrote at nodeconf
23:26:16  <indutny>yes, indeed
23:26:20  <piscisaureus_>the asm stuff
23:26:22  <piscisaureus_>yeah
23:26:25  <indutny>ah
23:26:26  <indutny>not
23:26:33  <indutny>this is not
23:26:50  <indutny>well, it's really not
23:27:01  <piscisaureus_>oh
23:27:02  <indutny>may be he was using shared version of openssl with inlined assembly?
23:27:11  <piscisaureus_>on windows?
23:27:13  <indutny>because I pushed the fix only two days ago
23:27:15  <piscisaureus_>seems unlikely
23:27:21  <indutny>piscisaureus_: yeah, for me too
23:27:27  <piscisaureus_>indutny: yeah so here's what I think
23:27:34  <indutny>piscisaureus_: but it's using different code for x86 and x64
23:27:40  <piscisaureus_>indutny: I knoiw
23:27:53  <indutny>kk, I'm listening, sorry
23:28:05  <piscisaureus_>indutny: but for heavy math x64 code is quite a bit more efficient than x32 code
23:28:17  <indutny>indeed, especially for cryptography
23:28:45  <piscisaureus_>ah well nvm. He should try the x86 version again and see if that is now fast too
23:29:20  <piscisaureus_>Are there nodejitsu guys staying in amsterdam?
23:29:33  <indutny>em... x86 version should be as slow as it was
23:29:46  <indutny>it may be affected only by the SlabBuffer fix that I pushed today
23:29:52  <piscisaureus_>ok
23:29:53  <piscisaureus_>right
23:29:59  <indutny>so it's like 7% improvement
23:30:15  <indutny>when inlined assembly is in use
23:30:19  <piscisaureus_>Actually, lemme try for a change, instead of trusting your numbers :-)
23:30:22  <indutny>should be much less without it
23:30:39  <indutny>piscisaureus_: yeah, you're the only windows guy I know over here
23:30:40  <indutny>btw
23:30:48  <indutny>I forgot to ask you on nodeconf
23:30:52  <indutny>piscisaureus_: why windows?
23:30:53  <indutny>:D
23:31:09  <indutny>that's really what I'm often thinking about
23:31:10  <piscisaureus_>Don't ask. It pays the bills.
23:31:33  <indutny>ah, job security
23:31:51  <indutny>ok, next question
23:32:15  <indutny>openssl is spending ~5 % of our runtime while clearing memory buffers
23:32:21  <indutny>this is good for security
23:32:26  <indutny>but don't really good for performance
23:32:30  <indutny>as they're doing it manually
23:32:36  <indutny>because literally:
23:32:57  <indutny> *) New function OPENSSL_cleanse(), which is used to cleanse a section of
23:32:57  <indutny> memory from it's contents. This is done with a counter that will
23:32:57  <indutny> place alternating values in each byte. This can be used to solve
23:32:57  <indutny> two issues: 1) the removal of calls to memset() by highly optimizing
23:32:57  <indutny> compilers, and 2) cleansing with other values than 0, since those can
23:32:58  <indutny> be read through on certain media, for example a swap space on disk.
23:32:58  <indutny> [Geoff Thorpe]
23:33:52  <piscisaureus_>hmm
23:34:29  <indutny>yeah
23:34:35  <indutny>that's what I said too
23:36:47  * dapquit (Quit: Leaving.)
23:36:59  <piscisaureus_>bnoordhuis broke the windows build in f78ce087ba195540c8293
23:37:32  <piscisaureus_>that means he has to buy all the drinks tomorrow.
23:41:05  <indutny>where is he, btw?
23:41:16  <piscisaureus_>I don't know
23:41:24  <piscisaureus_>At home I suppose
23:43:10  <indutny>oh, ain't you living together?
23:43:29  <piscisaureus_>hahahah
23:43:42  <piscisaureus_>did you think that?
23:44:29  <indutny>nope, just kidding :P
23:44:33  <indutny>s/kidding/trolling
23:44:36  <piscisaureus_>hmm
23:44:39  <indutny>learned a lot from you
23:44:43  <indutny>hahaha :D
23:44:51  <indutny>no offense, really
23:44:55  <piscisaureus_>this asm stuff is not working on windows
23:45:14  <piscisaureus_>indutny: please try and troll me.
23:45:20  <indutny>piscisaureus_: really?
23:45:31  <indutny>piscisaureus_: (about asm)
23:45:37  <piscisaureus_>indutny: well, it's complicated :-)
23:45:53  <piscisaureus_>indutny: there's a lot of asm in the openssl tree but I can't compile with it
23:45:59  <indutny>yeah
23:46:03  <piscisaureus_>indutny: but I will try to figure that out tomorrow
23:46:07  <piscisaureus_>apparently you need perl for that
23:46:08  <indutny>and it's really complicated
23:46:13  <piscisaureus_>I will probably try to gypify it
23:46:17  <indutny>piscisaureus_: I thought about the following pattern
23:46:40  <indutny>we can just precompile them and put into .S with ifdefs for each platform
23:47:04  <indutny>and then use those files in gyp and define some platform flag for them
23:47:24  <piscisaureus_>it has all these perl files
23:47:26  <piscisaureus_>why
23:47:57  <indutny>well, it's retarded, that's it
23:48:14  <indutny>but one the other side - you can just go and write a new one
23:48:16  <indutny>;)
23:50:39  <piscisaureus_>it has all these perl scripts that generate asm code
23:50:48  <indutny>obviously
23:51:06  <piscisaureus_>can we not do that with v8's builtin assembler :-p
23:51:06  <indutny>piscisaureus_: and they even wrote an asm generator in perl for them
23:51:24  <indutny>we can, but if openssl guys will change any file - we will be completely borked
23:51:42  <indutny>because we'll need to port their changes
23:52:02  <piscisaureus_>hmm
23:52:05  <piscisaureus_>I have to think about this
23:52:10  <piscisaureus_>let me try to sleep again
23:52:11  <piscisaureus_>:-)
23:54:21  <indutny>ook
23:54:25  <indutny>sleep tight, bertje
23:55:52  <piscisaureus_>ghe lol
23:58:01  <isaacs>indutny: i can test your ssl changes in production, yes. but voxer can probably test them much better.
23:58:07  <isaacs>that is, in a better production
23:58:14  * c4milojoined
23:58:36  <indutny>isaacs: yeah, I just asked mjr on twitter
23:58:43  <isaacs>oh, great!
23:58:48  <indutny>isaacs: but your testing would be great too
23:58:50  <indutny>MOAR TESTING
23:59:33  <indutny>first one patch should be working fine, if it builds
23:59:48  <indutny>but SlabBuffer patch contains a js code changes in very important parts of tls