00:06:15  * mikealjoined
00:11:11  * Aria_joined
00:14:28  * dshaw_quit (Quit: Leaving.)
00:14:39  * Ariaquit (Ping timeout: 245 seconds)
00:25:21  * mikealquit (Quit: Leaving.)
00:36:12  * dshaw_joined
00:38:29  <CIA-99>node: Ben Noordhuis master * r407ecc6 / doc/api/stdio.markdown : docs: console.dir() prints to stdout, not stderr - http://git.io/G7H4QQ
00:52:51  * travis-cijoined
00:52:51  <travis-ci>[travis-ci] joyent/node#576 (master - 407ecc6 : Ben Noordhuis): The build is still failing.
00:52:51  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/9b672bc...407ecc6
00:52:51  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/843271
00:52:51  * travis-cipart
01:10:09  * dshaw_quit (Quit: Leaving.)
01:25:19  * mikealjoined
01:25:50  <CIA-99>libuv: okuoku master * rdb413f3 / src/win/winapi.h : win: Fix MinGW32 build - http://git.io/VCfBvQ
01:28:44  * abraxasjoined
01:28:50  <CIA-99>node: Ben Noordhuis master * r79cbe1f / (5 files): deps: upgrade http_parser to 8bec3ea - http://git.io/AG6nDw
01:28:50  <CIA-99>node: Ben Noordhuis master * r4472f7b / src/node_http_parser.cc : http: use HTTP_METHOD_MAP macro - http://git.io/x_0c5Q
01:28:51  <CIA-99>node: Nao Iizuka master * rf8ce384 / (doc/api/assert.markdown lib/assert.js): docs: correct the description of assert.ok() - http://git.io/_3IBKQ
01:43:16  * travis-cijoined
01:43:16  <travis-ci>[travis-ci] joyent/node#577 (master - f8ce384 : Nao Iizuka): The build is still failing.
01:43:16  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/407ecc6...f8ce384
01:43:16  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/843522
01:43:16  * travis-cipart
01:45:06  * mikealquit (Quit: Leaving.)
01:56:25  * TooTallNatejoined
01:56:34  * TooTallNatequit (Client Quit)
01:58:18  * dshaw_joined
02:06:55  * mmaleckiquit (Quit: leaving)
02:08:13  * brsonquit (Ping timeout: 252 seconds)
02:21:43  * dshaw_quit (Quit: Leaving.)
02:59:13  * benviequit
03:19:07  * benviejoined
03:23:46  * isaacsjoined
03:28:27  * Aria_changed nick to Aria
03:38:03  * mikealjoined
04:11:07  * ljacksonquit (Read error: Operation timed out)
04:11:46  * ljacksonjoined
04:19:47  * isaacsquit (Remote host closed the connection)
04:21:35  * mikealquit (Quit: Leaving.)
04:29:51  * mikealjoined
04:45:03  * Ariaquit (Remote host closed the connection)
04:48:50  <mjr_>mikeal / indutny: I'm really excited about having SPDY in node core. I could see us switching our external protocol completely over to SPDY once it's proven to work well enough.
04:50:29  <mikeal>i want to get it in to the client first
04:50:59  <mikeal>because that might require lower level refactoring
04:51:21  <mikeal>indutny already proved you can write a server without modification to core
04:51:34  <mikeal>but
04:52:20  <mikeal>the http working group at the IETF is integrated SPDY features in to HTTP2
04:57:05  <mjr_>I'm suspicious about whether any standards body can advance anything useful at this point.
04:57:10  <mjr_>But hey, they might.
05:01:16  <mikeal>they are currently standardizing it as is
05:01:19  <mikeal>which upsets me
05:01:53  <mikeal>there needs to be a way use it behind an SSL terminator
05:02:50  <mikeal>er, TLS terminator
05:20:31  * mikealquit (Quit: Leaving.)
05:24:49  * mikealjoined
05:29:31  * dshaw_joined
05:53:59  * mikealquit (Quit: Leaving.)
06:27:02  * mikealjoined
06:39:11  * mikealquit (Quit: Leaving.)
06:55:18  * mikealjoined
07:25:10  * mmaleckijoined
07:29:46  * mmaleckiquit (Ping timeout: 244 seconds)
07:31:44  * mmaleckijoined
07:32:09  * mmaleckichanged nick to mmalecki[away]
07:58:35  * stephankquit (Quit: *Poof!*)
08:04:41  * paddybyersjoined
08:13:12  * paddybyersquit (Quit: paddybyers)
08:14:21  * dshaw_quit (Ping timeout: 264 seconds)
08:24:46  * mikealquit (Quit: Leaving.)
08:35:23  * mikealjoined
08:38:56  * dshaw_joined
09:46:53  * paddybyersjoined
09:47:57  * paddybyersquit (Client Quit)
10:03:04  <indutny>mikeal: it should be possible to do that
10:03:20  <indutny>mikeal: protocol doesn't prohibits that
10:03:46  <indutny>mikeal: and actually you can try using my implementation (with some modification) to get SPDY working over cleartext connection
10:27:44  * dshaw_quit (Quit: Leaving.)
10:31:08  * abraxasquit
11:11:21  * mmaleckijoined
11:13:39  * mmaleckiquit (Client Quit)
11:44:37  * wankdankerquit (Remote host closed the connection)
12:30:08  * rendarjoined
13:07:32  * mmalecki[away]changed nick to mmalecki
13:25:30  * theColejoined
14:05:43  <CIA-99>node: Yoshihiro Kikuchi master * rc450ac3 / doc/api/buffer.markdown : docs: fix using legacy api in the buffer doc - http://git.io/zm1YYQ
14:16:58  * theColequit (Read error: Connection reset by peer)
14:17:19  * theColejoined
14:21:00  * travis-cijoined
14:21:00  <travis-ci>[travis-ci] joyent/node#578 (master - c450ac3 : Yoshihiro Kikuchi): The build is still failing.
14:21:00  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/f8ce384...c450ac3
14:21:00  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/846410
14:21:00  * travis-cipart
14:24:54  * piscisaureus_joined
14:27:48  * theColequit (Read error: Connection reset by peer)
14:28:05  * theColejoined
14:36:10  * theColequit (Quit: theCole)
14:57:27  * bnoordhuisjoined
15:06:10  * mmaleckiquit (Quit: leaving)
15:06:19  * mmaleckijoined
15:10:42  * isaacsjoined
15:12:35  * AndreasMadsenjoined
15:16:06  <bnoordhuis>piscisaureus_: ping
15:17:34  <isaacs>piscisaureus_: "He just did a patch that makes v8 support surrogate pairs"
15:17:35  <isaacs>!!!!
15:17:42  <isaacs>awesome!
15:27:23  <piscisaureus_>bnoordhuis: isaacs: hey
15:27:33  <bnoordhuis>piscisaureus_: ho. nm, i already solved it
15:27:57  <piscisaureus_>isaacs: I am talking to him now. Apparently they are also open to speeding it up using my new iteration technique
15:28:05  <isaacs>nice
15:28:28  <isaacs>faster is better, always. but the promise of making this behave correctly will make a *lot* of subtle problems disappear.
15:28:50  <piscisaureus_>isaacs: because they don't want to add the new api that I proposed. So we won't have the ability to do our own, fast encoders / decoders for other character encodings
15:28:51  <isaacs>this is really great. thank you very much for pressing on it
15:29:04  <piscisaureus_>isaacs: but I feel that utf8 is the most important anyway
15:29:05  <isaacs>piscisaureus_: there are no other character encodings ;P
15:29:08  <piscisaureus_>so I am fine with that
15:29:18  <isaacs>the fact that node only ever sends utf8 is a feature.
15:29:44  <piscisaureus_>well, the fact that it always assumes utf8 is not very nice sometimes
15:29:54  <isaacs>i've been on the web since the dark ages. so far that i've seen, choosing the encoding is only a path to pain.
15:30:08  <isaacs>it *would* be nice to be able to *read* alternate encodings.
15:30:16  <isaacs>but if you really need to do that, there's bnoordhuis's iconv binding
15:30:48  <piscisaureus_>isaacs: https://github.com/joyent/node/issues/2229, https://github.com/joyent/node/issues/2190, https://github.com/joyent/node/issues/1842
15:31:36  <piscisaureus_>isaacs: there are many more issues reporting similar problems
15:32:01  <isaacs>piscisaureus_: yeah, but again, that's all just from reading in different encodings.
15:32:02  <piscisaureus_>isaacs: but - if we ever fix this - I don't think speed will be much of a concern. So we can just do two-step (slow) encode/decode.
15:32:06  <isaacs>piscisaureus_: and usually on windows.
15:32:56  <isaacs>afaik, most unixes are utf8 by default nowadays.
15:32:57  <piscisaureus_>isaacs: as a package manager expert, what is the recommended package manager for windows?
15:33:04  <isaacs>piscisaureus_: haha
15:33:05  <piscisaureus_>er, for python
15:33:09  <piscisaureus_>sorry
15:33:10  <isaacs>oh, for python
15:33:15  <isaacs>i don't recommend using package managers for python
15:33:17  <isaacs>they're all really bad.
15:33:28  <piscisaureus_>so how do I get readline in here quickly?
15:33:30  <isaacs>(and i'm actually of the opinion that rubygems is pretty good)
15:33:48  <piscisaureus_>so, pypi or easyinstall?
15:33:52  <piscisaureus_>or pypm?
15:34:01  <piscisaureus_>which is the least bad?
15:34:06  <isaacs>piscisaureus_: easy_install is *just* an installer, not a package manager
15:34:12  <piscisaureus_>installer is all I need
15:34:16  <isaacs>it doesn't handle deps, or versions, or uninstalling
15:34:38  <isaacs>also, when it fails, it leaves a lot of litter behind
15:35:12  <piscisaureus_>I don't care.
15:35:26  <piscisaureus_>how do I install a package quickly?
15:35:32  <piscisaureus_>with 1% brain usage?
15:35:45  <isaacs>that's weird... none of the pages actually say how to install it
15:35:51  <piscisaureus_>pip?
15:35:55  * isaacsmakes a note for the new npm site...
15:36:42  <isaacs>sudo easy_install readline <-- seems to be working
15:37:03  <piscisaureus_>omfg the python situation is so fucked up
15:37:13  <piscisaureus_>Download the last pip version from here: http://pypi.python.org/pypi/pip#downloads
15:37:13  <piscisaureus_> Uncompress it
15:37:13  <piscisaureus_> Download the last easy installer for Windows: (download the .exe at the bottom of http://pypi.python.org/pypi/setuptools ). Install it.
15:37:13  <piscisaureus_> go to the uncompressed pip directory and: python setup.py install
15:37:13  <piscisaureus_> Add your python c:\Python2x\Scripts to the path
15:37:27  * perezdjoined
15:38:05  <isaacs>piscisaureus_: yep.
15:38:27  <isaacs>piscisaureus_: that right there is why node attracts so many former pythoners
15:38:32  <isaacs>*recovering pythoner
15:38:33  <isaacs>s
15:39:02  <piscisaureus_>sigh
15:39:11  <piscisaureus_>there is a one-line installer that does not seem to work :-(
15:39:49  <piscisaureus_>Installation Instructions
15:39:49  <piscisaureus_>Windows
15:39:49  <piscisaureus_>32-bit version of Python
15:39:49  <piscisaureus_> Install setuptools using the provided .exe installer.
15:39:57  <piscisaureus_>which fucking provided exe installer?
15:40:02  <piscisaureus_>no download link, no mention?
15:41:47  <piscisaureus_>I really like that npm creates .cmd shims btw.
15:41:49  <piscisaureus_>isaacs++
15:41:51  <kohai>isaacs has 10 beers
15:42:11  <isaacs>piscisaureus_: thanks.
15:42:13  <piscisaureus_>One cannot fully appreciate it until they are not there
15:42:17  <isaacs>piscisaureus_: yep.
15:42:29  <isaacs>piscisaureus_: there's this ideology in python apparently that everything must be either a .py or a .exe
15:42:37  <AndreasMadsen>Oh remembering last month where I has to reinstall windows, then figure out for first time how to install python, then buy a compiler tool for windows, just to discover that sockets over IPC aren't supported on windows yet. What a month.
15:43:02  <isaacs>piscisaureus_: and setup.py is apparently almost *never* #!/usr/bin/env python or 0755
15:43:41  <piscisaureus_>I am already hugely pissed off by python and its inability to get readline in place
15:45:34  <piscisaureus_>error: Setup script exited with error: this module is not meant to work on Windows
15:47:50  <piscisaureus_>building '_rlsetup' extension
15:47:50  <piscisaureus_>error: Unable to find vcvarsall.bat
15:48:00  <piscisaureus_>node-gyp works better :-)
15:48:36  <piscisaureus_>which makes TooTallNate deserve a beer
15:48:37  <piscisaureus_>TooTallNate++
15:48:38  <kohai>TooTallNate has 6 beers
15:52:40  <piscisaureus_>al it only supports up to v8
15:52:44  <piscisaureus_>er, vc9
16:07:11  <piscisaureus_>ok, got pip
16:07:45  <piscisaureus_>C:\Users\Bert Belder>pip install scons
16:07:45  <piscisaureus_><... snip ...>
16:07:46  <piscisaureus_>rror: option --single-version-externally-managed not recognized
16:07:56  * piscisaureus_kills kitten
16:08:20  <bnoordhuis>packaging is awesome in python, isn't it?
16:08:33  <bnoordhuis>pip, setup_tools, egg, it goes on
16:08:43  <piscisaureus_>well
16:08:59  <piscisaureus_>I don't care which one I use
16:09:16  <piscisaureus_>but it would be really nice if one of them, just one, could actually install a package
16:09:19  <piscisaureus_>scons, in this case
16:09:31  <piscisaureus_>which does not have any compiled parts
16:09:44  <piscisaureus_>and used to work just fine with my python version
16:09:48  <bnoordhuis>you're asking too much, bertje
16:09:54  <bnoordhuis>next you'll want a pony with that
16:10:01  <piscisaureus_>easy_install
16:10:21  <piscisaureus_>also, very nice that you can only install pip if you have easy_install first
16:10:27  <piscisaureus_>which obviously does not work
16:20:01  <tjfontaine>I think the problem here is clear: Windows
16:20:02  * philipsquit (Excess Flood)
16:20:41  <piscisaureus_>how can you say that?
16:21:02  <piscisaureus_>npm works fine
16:21:17  <tjfontaine>because I use sane systems else where and have no problems either using distro provided packaging, or easy_install/pip
16:22:08  * philipsjoined
16:22:20  <piscisaureus_>tjfontaine: I am very moody now, this is a bad time for trolling me.
16:22:29  <tjfontaine>heh
16:22:38  <isaacs>tjfontaine: python is the ultimate whiny defensive platfor.
16:22:41  <isaacs>*platform.
16:22:44  <isaacs>the problem is NEVER python.
16:22:48  <isaacs>it's always everyone AROUND python.
16:23:00  * dapjoined
16:23:16  <isaacs>always pointing the fingers. "That's not pythonic. That's not pretty enough. That's not canonical. Print must be a function."
16:23:47  <isaacs>any time you value anything more than you value winning, you start losing.
16:23:55  <tjfontaine>I don't feel like that's what I was doing, but I can see how you might consider I was
16:24:13  <isaacs>tjfontaine: i'm not complaining about you, i'm complaining about python.
16:24:19  <tjfontaine>nod
16:24:40  * orlandovftwjoined
16:26:02  * sh1mmerjoined
16:27:49  <piscisaureus_>tjfontaine: I *know* that windows has problems and WTFs. I spend a lot of time dealing with it. But there is no excuse for not being able to copy some files.
16:28:09  <piscisaureus_>I mean, you have drives and backslashes, and that's pretty much all you need to deal with
16:33:16  * dshaw_joined
16:43:29  <isaacs>piscisaureus_: to be fair, those DO cause a lot of hassles.
16:44:05  <piscisaureus_>yeah
16:44:09  <piscisaureus_>I think file locking sucks
16:44:14  <piscisaureus_>from a programmer's perspecive
16:45:02  <isaacs>yep.
16:45:09  <isaacs>oh, so, that reminds me.
16:45:12  <isaacs>this dir renaming stat thing..
16:45:22  <isaacs>what's the best way to work around that? assume that i cna't just unpack into place.
16:45:58  <isaacs>if that's the only reasonable fix, then i'll bite the bullet and make the changes necessary to do it
16:46:26  <piscisaureus_>isaacs: I don't know yet. I think that making an attempt to open package.json for writing would avoid the issue
16:46:44  <piscisaureus_>isaacs: the downside - the file will be created if it really isn't there ;-)
16:46:48  <isaacs>you mean, rather than stat() or read() it?
16:46:57  <piscisaureus_>isaacs: well - you already try to read() it
16:47:02  <isaacs>oh, right
16:47:12  <isaacs>but if i open it for writing... i mean... that's not what i
16:47:16  <isaacs>'m actually trying to do
16:47:20  <isaacs>i'm trying to get its contents.
16:47:44  <piscisaureus_>isaacs: yeah - so if you open it for r+ then the problem would probably go away
16:47:58  <piscisaureus_>with the downside that the file would be created if it's really not there
16:48:14  <piscisaureus_>but it looks like the file should always be there in the first place
16:48:15  <isaacs>right
16:48:26  <isaacs>wel... if it's NOT there, then i need to fail.
16:48:40  <isaacs>how long of a lag is there?
16:48:46  <isaacs>that the stat() is cached for
16:48:52  <isaacs>like, 100ms, 10 hours?
16:48:57  <piscisaureus_>no, like 5 seconds
16:49:01  <isaacs>ugh.
16:49:05  <isaacs>yeah, that's WAY too long
16:49:09  * TooTallNatejoined
16:49:11  <piscisaureus_>it's configurable, don't know the default
16:49:11  <isaacs>> 1000ms = "forever"
16:49:31  <isaacs>"it's configurable" = "it's almost always the default"
16:50:29  <isaacs>so... i guess i'll just unpack in place. just requires touching node-tar a little bit to add --strip-components behavior
16:51:01  <isaacs>right now it unpacks tarballs into .../__foo.npm then moves .../__foo.npm/<folder> to .../foo
16:51:19  <isaacs>and then immediately reads .../foo/package.js
16:51:21  <isaacs>*json
16:51:50  <piscisaureus_>the r+ workaround doesn't seem too bad to me
16:55:04  * dvv1joined
17:01:44  <TooTallNate>piscisaureus_: this one is interesting. do you think this is safe? https://github.com/joyent/node/pull/2907
17:03:02  <piscisaureus_>TooTallNate: I don't know. Does it break anything?
17:03:46  <TooTallNate>piscisaureus_: seemed fine in my testing. you could make the same change in vcbuild.bat and see if it breaks anything as well
17:03:49  * dvv1part
17:03:51  <TooTallNate>(if you wanted to test yourself)
17:04:06  <TooTallNate>piscisaureus_: also, random, what's the best way to read from the windows registry in node?
17:04:47  <piscisaureus_>TooTallNate: there is no way to do it. Probably shell out to some command line tool :-)
17:05:09  <TooTallNate>ehhh, a custom native module could do it, right?
17:05:31  <piscisaureus_>TooTallNate: yeah, sure. I think someone should write a native addon for it
17:05:39  <TooTallNate>agree'd
17:05:49  <piscisaureus_>TooTallNate: but I think you have a bootstrapping problem if you want to use it from node-gyp :-)
17:05:58  <TooTallNate>piscisaureus_: no not for that :p
17:06:12  <TooTallNate>piscisaureus_: i was looking to getting node-time working on windows
17:06:23  <TooTallNate>so it needs access to the system timezones
17:06:27  <benvie>child_process.exec('reg' + stuff
17:06:35  <benvie>and reg /? for the commands
17:07:03  <TooTallNate>isaacs: leads me to another thought... have you ever thought about conditional dependencies in npm?
17:07:11  <TooTallNate>i've kinda grown to like them in gyp
17:07:18  <benvie>beyond that it'll be windows api stuff so ffi or c++
17:07:39  <TooTallNate>would be useful for say windows, or an older node version (to add a zlib dep or something)
17:08:01  <isaacs>TooTallNate: yeah, we've talked about it. it seems to usually introduce more complexity and features, and is kind of noisy.
17:08:17  <isaacs>TooTallNate: if we can get by without it, i'd prefer that.
17:08:18  <benvie>I have a kind of crappy module that does some regedit stuff using the reg program
17:08:29  <isaacs>TooTallNate: so i'm kind of dragging my heels as long as i can get away with it
17:08:36  <TooTallNate>isaacs: lol
17:08:41  <TooTallNate>isaacs: seems like a necessary evil to me
17:08:59  <tjfontaine>conditionals++
17:09:00  <kohai>conditionals has 1 beer
17:09:05  <TooTallNate>isaacs: it is a small edge case though i suppose
17:09:07  <isaacs>TooTallNate: i disagree about the necessity of that evil.
17:09:22  <isaacs>TooTallNate: optionalDependencies solve most of those problems, i've found
17:09:30  <benvie>https://github.com/Benvie/node-Windows does it using child_process route, meant to redo that using the win api but haven't gotten around to it
17:09:37  <TooTallNate>isaacs: good point, could probably work
17:09:38  <tjfontaine>ifWin32: include-nasty-win32-dep
17:09:43  <TooTallNate>benvie: hahah, nice
17:11:35  <tjfontaine>then I could include this module https://github.com/daguej/node-winnetinfo and not feel so dirty for !win32 platforms
17:12:05  * dshaw_quit (Quit: Leaving.)
17:14:38  <TooTallNate>bnoordhuis: don't forget about this one! https://github.com/joyent/node/pull/2896
17:15:55  <TooTallNate>isaacs: optionalDependencies would work fine, as long as package.json has a way to specify a module is windows-only
17:16:02  <TooTallNate>and have it abort installation on any other platform
17:16:16  <TooTallNate>and vice-versa of course
17:18:42  * orlandovftwquit (Ping timeout: 246 seconds)
17:21:44  * igorzijoined
17:24:11  <igorzi>piscisaureus_ isaacs: i think the workaround would need to be 'a', not 'r+'
17:27:10  <igorzi>isaacs: is it difficult to unpack in-place?
17:28:06  <isaacs>igorzi: i'ts not super difficult.
17:28:11  <isaacs>igorzi: i'm just kind of lazy, that's all :)
17:28:24  * paddybyersjoined
17:28:28  <isaacs>TooTallNate: i've got a pull req in npm to add platform dependence.
17:28:39  <isaacs>TooTallNate: wanna review it and give your feedback?
17:28:45  <TooTallNate>link?
17:28:51  <TooTallNate>sounds cool thouhg
17:28:53  <TooTallNate>though
17:28:55  <isaacs>bnoordhuis, piscisaureus_: review? https://github.com/isaacs/node/commit/a10cfba766e2d219b311f12d7854ff448d0d3490
17:29:20  <igorzi>isaacs: it seems that the easiest workaround is to stat until the file is there, but that might add 5 sec latency
17:29:54  <isaacs>TooTallNate: https://github.com/isaacs/npm/pull/2254
17:29:59  <isaacs>igorzi: yeah, 5 seconds is way too long
17:30:21  <isaacs>igorzi: i'm going to try to fix node-tar to add --strip-components, and if that turns out ot be too hard, we'll just do it the slow awful way.
17:30:39  <igorzi>isaacs: are dependencies downloaded/unpacked in parallel or serially?
17:30:48  <isaacs>igorzi: in parallel
17:31:02  <isaacs>igorzi: really, it's asking the fs to do a lot more work to not unpack in place.
17:31:15  <isaacs>igorzi: it's just that node-tar doens't have the capability yet to strip off a folder name when unpacking.
17:31:18  <igorzi>so it'll be 5 sec latency for the entire "npm install"? not per each dependency?
17:31:19  <isaacs>igorzi: i should just go add that.
17:31:32  <isaacs>igorzi: sure.
17:31:39  <isaacs>so it won't be *completely* terrible.
17:31:42  <isaacs>just a *little* terrible :0
17:31:58  <igorzi>isaacs: yeah
17:32:25  <igorzi>isaacs: so, is the plan going to be to unpack in-place? will that drop in 0.6.13?
17:33:05  <isaacs>igorzi: yeah, if it's not too hard
17:35:23  <igorzi>isaacs: ok.. it it gets too hard.. i think 5 sec latency for the entire "npm install" is not so terrible. for larger packages this probably is even less significant because it might take several seconds to download/unpack
17:35:35  <isaacs>sure
17:40:25  * perezd_joined
17:43:44  * perezdquit (Ping timeout: 246 seconds)
17:43:44  * perezd_changed nick to perezd
17:47:11  * AvianFluquit (Quit: Leaving)
18:01:11  * dshaw_joined
18:01:57  * stephankjoined
18:08:46  * brsonjoined
18:24:27  * indutnychanged nick to indutny_sleeping
18:25:23  * orlandovftwjoined
18:32:50  <isaacs>bnoordhuis: why does console.dir point to stdout? that seems kind of wonky.
18:34:16  <benvie>dir could use an upgrade. Something like turning showHidden on
18:34:48  <mmalecki>util.inspect could use an upgrade
18:36:29  <isaacs>benvie, mmalecki: it's our way of getting everyone to `npm install eyes` instead
18:37:18  <mjr_>eyes is good
18:37:38  <TooTallNate>util.inspect needs an upgrade to accept an options object
18:37:41  <mmalecki>isaacs: haha :)
18:37:44  <mmalecki>TooTallNate: ++, this
18:37:46  <kohai>TooTallNate has 7 beers
18:37:48  <TooTallNate>same with the custom .inspect() function
18:38:08  <mmalecki>actually, who maintains eyes these days?
18:38:42  <isaacs>TooTallNate: yeah, that'd be ok.
18:39:05  <isaacs>the custom inspect method is used on a few internal node objects.
18:39:07  <mmalecki>ah, indexzero.
18:39:12  <isaacs>i for one really like not dumping the whole Buffer to stderr
18:39:40  <mjr_>ugh, inspect on buffers
18:39:44  <TooTallNate>isaacs: ya custom inspect is nice. there's a problem with it currently in that you don't know if showColors was specified though
18:39:56  <TooTallNate>that's one thing i wanna fix
18:40:01  <mjr_>When you didn't know they were buffers, and now you have an ascii hex bomb.
18:40:33  <TooTallNate>mjr_: it only dumps like the first 100 bytes though
18:40:50  <mjr_>Oh, I'm glad that's fixed.
18:41:35  <mjr_>Speaking of inspect, is there an obvious way to get the readline style behavior from a repl socket?
18:41:53  <mjr_>Because SmartOS won't easily give me socat plus readline.
18:41:53  <creationix>rlwrap nc 1337
18:42:02  <creationix>hmm smartos
18:42:16  <mjr_>creationix: that doesn't give you tab completion though, which is actually awesome.
18:42:21  <creationix>true
18:43:07  <mjr_>smartos won't easily give me rewrap either, sadly.
18:43:31  <creationix>maybe a small node client that set's raw mode on the terminal and forwards it all to a remote socket?
18:43:53  <creationix>is raw tty just a duplex socket?
18:44:26  <TooTallNate>there's a mode for telnet to be in raw mode as well
18:44:39  <TooTallNate>there's no awesome telnet server/client for node yet though :\
18:44:50  <mjr_>So I guess the short answer sounds like, "no".
18:45:17  <TooTallNate>mjr_: is this just a 'net' server?
18:45:20  <creationix>well, making a raw tcp client is easy
18:45:21  <mjr_>sure
18:45:33  <creationix>but I'm curious to know if that works on the repl module
18:45:45  <mjr_>We do this in all of our processes:
18:45:45  <TooTallNate>ya, i'd go with tim's idea, a small client which puts stdio in raw mode before connecting
18:45:46  <mjr_>node.net.createServer(function repl_onrequest(socket) {
18:45:46  <mjr_> node.repl.start(RV.name + "> ", socket).context.RV = RV;
18:45:47  <mjr_>}).listen("/tmp/router-repl-" + RV.name);
18:46:03  <mjr_>And it's one of the best things ever about running node in production.
18:46:21  <creationix>right, but node.repl.start sees that `socket` is not a tty
18:46:26  <TooTallNate>mjr_: what kinds of things can you see in those repls?
18:46:27  <creationix>and probably doesn't expect raw data
18:46:53  <mjr_>TooTallNate: Anything you expose it to the "RV" object, plus everything in the module context from require.
18:46:57  <creationix>do you get colored output?
18:47:06  <mjr_>No, I want colored output also.
18:47:07  <mmalecki>mjr_: neat idea, actually
18:47:08  <mjr_>And a pony
18:47:18  <mjr_>This was my talk at nodeconf, BTW.
18:47:24  <mmalecki>ponies?
18:47:25  <creationix>ok, so I think with an option to force repl to treat the socket as tty
18:47:28  <creationix>it might work
18:47:36  <TooTallNate>creationix: it doesn't look like the repl discriminates against ttys
18:47:41  <TooTallNate>it's just an options object
18:48:17  <TooTallNate>err, not an options object, just a bunch of random config variables
18:48:42  <mjr_>Is there some way I could tempt somebody to build this?
18:48:50  <TooTallNate>mjr_: for colors, try require('repl').disableColors = false
18:48:52  <mjr_>Because I haven't the time, and the world needs this.
18:48:56  <TooTallNate>but that should be the default so... :\
18:49:44  <creationix>btw, are there any examples on how to use uv_queue_work
18:50:12  <TooTallNate>creationix: look at zlib module i think
18:50:15  <creationix>mjr_, we're talking 10 lines of code if it works
18:50:25  <TooTallNate>creationix: or the crypto module
18:50:43  <mjr_>creationix: and lots of very fun debugging.
18:51:02  <mjr_>Which all sounds like a very fun project that somebody like you would take on.
18:51:10  <creationix>lol
18:51:14  <mjr_>Also, I have a fence that needs whitewashing.
18:51:21  * creationixis 400% overloaded
18:51:33  <TooTallNate>mjr_: for starters you need to set socket.isTTY = true for the repl socket
18:51:36  <TooTallNate>on the server
18:51:41  <mjr_>You won't get any slack about abandoning it though. :)
18:51:42  <TooTallNate>that should get you colors
18:51:53  <creationix>TooTallNate, good idea
18:52:22  <TooTallNate>the other half of the equation is a simple 'net' client connecting to the repl socket
18:52:47  <TooTallNate>which calls require('tty').setRawMode(true) before connecting
18:53:35  <mjr_>can't you use nc for that?
18:53:41  <mjr_>or socat or something?
18:53:52  * AvianFlujoined
18:54:05  <TooTallNate>mjr_: probably, might be a flag
18:55:44  <creationix>I remember trying this once to make my own ssh by using the tls and tty module s
18:55:48  * mralephjoined
18:56:06  <creationix>I got stuck on creating the tty session, but the raw mode on client tty seemed to work fine
18:56:31  <mjr_>TooTallNate: I think it might not be that simple: https://gist.github.com/2023958
18:56:46  <TooTallNate>mjr_: ya, haha, i just ran into the same thing
18:56:48  <TooTallNate>i wanna patch that
18:56:54  <TooTallNate>its a bug essentially
18:56:59  <TooTallNate>this should work
18:57:31  <TooTallNate>damn
18:57:32  * paddybyersquit (Quit: paddybyers)
18:57:34  <TooTallNate>:D
18:58:18  <TooTallNate>looks like readline.js needs an abstraction
18:58:37  <TooTallNate>it assumes if isTTY is set that it's stdout
18:58:51  <TooTallNate>and does tty calls and stream.getWindowSize()
18:58:56  <creationix>that's the kind of stuff I was afraid of
18:59:02  <TooTallNate>damn
18:59:08  <isaacs>mjr_: yeah, you can't set raw mode on a non-tty, so this might be tricky
18:59:13  <TooTallNate>wasn't someone working on a readline overhaul?
18:59:33  <TooTallNate>it might address this
19:00:30  <isaacs>TooTallNate: i dunno
19:00:44  <isaacs>mjr_: can you post an issue about this? it'd be nice if there was some way to make this work really well.
19:00:49  <mjr_>sure
19:01:05  <isaacs>mjr_: i mean, part of the issue is that it's sort of in raw mode already, right?
19:01:16  <isaacs>mjr_: does backspace delete, or write stupid [[[~!3 bs?
19:01:22  <mjr_>I'm willing to donate liquor or money or tweets to whoever can get this fixed.
19:01:35  <isaacs>mjr_: did you see, by the way? v8 is making utf8 not sucky
19:01:53  <mjr_>Yeah, that's part of the problem. You could fix this I suppose by having a node client open the tty and decode that bs.
19:02:01  <TooTallNate>this is as far as i got :( :p https://gist.github.com/d9f15b31b60b09b84e54
19:02:01  <mjr_>If nc doesn't do that.
19:03:16  <mjr_>isaacs: I didn't see any recent progress on the v8 / utf8 front. Link?
19:03:43  * mikealquit (Quit: Leaving.)
19:04:11  <mjr_>TooTallNate: yeah, that's exactly the program I have which made the exception I gist-ed earlier.
19:04:13  <isaacs>mjr_: https://twitter.com/izs/status/179224642429521922
19:05:43  <TooTallNate>isaacs: this can probably be closed https://github.com/joyent/node/issues/634
19:09:14  * theColejoined
19:09:41  <piscisaureus_>igorzi: I am not convinced of Elad's patch.
19:10:33  <igorzi>piscisaureus_: which one? https://github.com/joyent/libuv/pull/343 ?
19:11:08  <piscisaureus_>yeah
19:13:04  * `3rdEdenjoined
19:14:24  <piscisaureus_>igorzi: or rather, I am not convinced by his analysis
19:14:46  <igorzi>piscisaureus_: you're thinking that those handles stay open for a reason?
19:15:12  <piscisaureus_>igorzi: well, yeah, if handles are inherited they stay open - that's a fact
19:15:34  <piscisaureus_>igorzi: sometimes that is by accident, and sometimes it has a reason
19:15:42  <mjr_>isaacs: I opened this: https://github.com/joyent/node/issues/2917
19:15:50  <piscisaureus_>igorzi: just assuming that it is always by accident does not seem right
19:16:37  <igorzi>piscisaureus_: it sounds that if the child process doesn't create any more children - then those handles do get closed
19:17:03  <igorzi>piscisaureus_: it's not clear from his analysis if the grandchild process is still alive
19:18:22  <piscisaureus_>igorzi: a pipe end is closed when all handles are closed, e.g. all child processes have to exit
19:18:33  * mikealjoined
19:19:26  <piscisaureus_>igorzi: we need to either make sure that child processes don't accidentally inherit any handles (unfortunately windows is about as broken as unix in that area - very much).
19:19:55  <piscisaureus_>igorzi: we could also decide to just fire 'exit' when the child process exits - and not wait for stdio to close. I don't know why we don't do that in the first place
19:20:24  <piscisaureus_>igorzi: in case of spawning a detached process, we would have to make sure that node makes it stdio handles non-inheritable
19:20:31  <piscisaureus_>which is fairly easy
19:20:38  <benvie>I need to package up the formatting stuff I made into a module
19:20:43  <benvie>because it's really awesome stuff standalone
19:20:44  <igorzi>piscisaureus_: yes, i was just about to say that.. if we know the child process exited - we should just fire 'exit'
19:20:53  <benvie>way better than eyes or whatever
19:20:57  <piscisaureus_>I don't know why we decided to do it differently
19:21:07  <piscisaureus_>bnoordhuis: ryah: you recall?
19:26:46  <igorzi>piscisaureus_: i agree that force-closing pipes is probably not the right fix here
19:29:41  * theColequit (Read error: Connection reset by peer)
19:30:01  * theColejoined
19:31:05  <igorzi>piscisaureus_: btw, is elad's explanation about how this works on unix correct?
19:31:12  <piscisaureus_>no
19:32:17  <igorzi>piscisaureus_: so unix has the same problem?
19:32:33  <piscisaureus_>igorzi: yes
19:32:50  <piscisaureus_>igorzi: on unix people would set stdio to /dev/null
19:33:15  <piscisaureus_>otherwise the detached child would be killed by SIGPIPE when it tried to access stdio
19:34:52  <piscisaureus_>igorzi: I posted a comment
19:35:01  <piscisaureus_>igorzi: for background -> http://blogs.msdn.com/b/oldnewthing/archive/2011/12/16/10248328.aspx
19:35:05  <igorzi>piscisaureus_: but, does it keep the stdio pipe alive? if node spawns A and A spawns B. if A dies, does B still keep stdio pipe alive?
19:35:12  <piscisaureus_>yes
19:35:56  <piscisaureus_>igorzi: unless A is careful to make sure B does not inherit the stdio pipe
19:38:31  <mikeal>so
19:38:44  <mikeal>i'm trying to start a conversation with the stud guys about supporting SPDY
19:39:35  <mikeal>hopefully there aren't any crazy fiddly bits that aren't well documented that require SSL
19:39:42  <mikeal>other than the initial NPN
19:39:58  <igorzi>piscisaureus_: maybe 'exit' is only fired after all stdio is closed to avoid races? (maybe it's possible for process to exit before all stdio is drained?)
19:40:06  * theColequit (Read error: Connection reset by peer)
19:40:10  <mikeal>if you can't do this shit behind a TLS terminator i'm going to join the fucking HTTPbis and yell until the RFC is modified
19:40:38  * theColejoined
19:41:28  <mjr_>mikeal: surely you/stud could invent some kind of non-TLS framing format
19:41:55  <mikeal>NPN is just for negotiation
19:41:58  <mjr_>Much like they invented their "prepend the IP address" scheme.
19:42:08  <mikeal>so yeah, that's my proposal
19:42:13  <mikeal>—spdy option
19:42:39  <mikeal>would attempt to NPN for SPDY
19:43:02  <mikeal>every socket to the TCP proxy the first byte is whether or not SPDY is being used
19:43:37  <mikeal>still don't understand why they can't just do header negotiation the way web sockets does
19:44:43  <piscisaureus_>igorzi: yes - that could happen
19:45:42  <mikeal>but
19:45:52  <mikeal>this means i need to modify indutny_sleeping's server
19:45:59  <TooTallNate>mikeal: i guess you'd wanna talk to indutny_sleeping about that
19:46:09  <mikeal>to not use SSL and just assume every connection is SPDY
19:46:24  <piscisaureus_>igorzi: that does not have to be a problem though - people can just use cp.stdout and .stderr after the child exited
19:47:33  <piscisaureus_>igorzi: but it seems to me that it is the responsibility of any process that spawns detached children to make sure its detached child does not inherit stdio. That process is node in Elad's case, so we should fix it in node.
19:48:01  <igorzi>piscisaureus_: agreed
19:48:52  * paddybyersjoined
19:49:00  <igorzi>piscisaureus_: it does seem like a bug in node though that for non-node child processes a parent can't get an 'exit' event eventhough the child exited
19:49:33  <piscisaureus_>igorzi: well it depends on what semantics you expect :-)
19:50:42  <piscisaureus_>igorzi: conceptually, we now treat a child process as a "group of processes" that only really ends when all the children in the group have died.
19:50:45  <CIA-99>node: isaacs master * ra10cfba / (lib/module.js test/simple/test-module-loading.js): module: remove 'exited', replace 'children' array - http://git.io/8R2-6Q
19:50:45  <CIA-99>node: Łukasz Walukiewicz master * r677c2c1 / (lib/url.js test/simple/test-url.js): Ignore an empty port component when parsing URLs. - http://git.io/ElEYZg
19:51:19  <igorzi>piscisaureus_: yeah, but is that a feature or a bug? :)
19:51:26  <piscisaureus_>good question
19:51:39  <piscisaureus_>I think we did not wait for stdio to close in node 0.4
19:51:47  <piscisaureus_>did anyone complain about that
19:51:55  <piscisaureus_>it's something I'd like ryah to answer
19:52:05  <igorzi>piscisaureus_: in either case there should be a way to know if the actual child process exited
19:52:27  <piscisaureus_>igorzi: well, maybe we should fire 2 events
19:52:36  <igorzi>piscisaureus_: yeah
19:52:58  <piscisaureus_>igorzi: you can always poll the child process with child.kill(0) but that's kind of backwards
19:53:03  <piscisaureus_>plus it requires polling :-)
19:53:47  <igorzi>piscisaureus_: 'exit' + 'exit-with-stdio-closed' :)
19:54:02  <piscisaureus_>igorzi: hmm, it seems that in 0.4 waiting for stdio also happened
19:55:19  <piscisaureus_>igorzi: we should recognize that what we do now is the most convenient and useful in 95% of the cases
19:55:28  <piscisaureus_>igorzi: I would be fine with adding another event though
19:55:56  <piscisaureus_>finding the right name is always the hardest part
19:56:00  <igorzi>piscisaureus_: true, but clearly there's someone who needs the actual process exit event, so it seems that there should be one
19:56:55  <igorzi>piscisaureus_: 2 events sounds like a fine idea.. do you think 'exit' should continue to mean what it meant before?
19:57:28  <piscisaureus_>igorzi: well, technically, I think "exit" fits the early case better\]
19:57:50  <piscisaureus_>igorzi: the question is if we want to break the api
19:58:11  <igorzi>piscisaureus_: yeah, but that might break some existing apps that work with the existing impl
19:58:36  <AndreasMadsen>why not just close the channels once ._internal.onexit is executed.
19:58:55  <piscisaureus_>AndreasMadsen: 1. the channels may not be drained
19:59:35  <igorzi>AndreasMadsen: that's actually what Elad's patch does, but in libuv and only for windows
19:59:52  <piscisaureus_>AndreasMadsen: 2. the channels may stay open for a longer period of time, because the child process that exited spawned another child process which inherited the child's stdio, that did not yet exit
20:00:00  <piscisaureus_>that must be very confusing
20:00:54  <AndreasMadsen>But you can still wan't for the channel to close in _internal.onexit, right? -> https://github.com/AndreasMadsen/node-1/blob/child2/lib/child_process.js#L141L188
20:01:10  <AndreasMadsen>close/drain
20:02:08  <piscisaureus_>AndreasMadsen: I do not understand
20:02:47  <AvianFlu>when I got my detached patch working in node, I put a special case in `maybeExit()` that emitted 'detached' instead of 'exit', and didn't wait for the other close events
20:03:08  <AvianFlu>something like that would likely be a very easy fix, semantics aside
20:03:17  <piscisaureus_>yeah that's what we were discussing
20:03:33  <AndreasMadsen>piscisaureus_: I think I'm confusing myself.
20:03:48  <piscisaureus_>AvianFlu: although - I don't really like the name of 'detached' and the fact that detached processes emit 'detached' instead of 'exit'
20:04:05  <AvianFlu>I'm definitely willing to negotiate where event names are concerned :D
20:04:11  <piscisaureus_>yeah
20:04:12  <piscisaureus_>good
20:04:13  <AvianFlu>getting it working was much more important to me
20:04:33  <AvianFlu>it was about 5 lines of js changes in total, too
20:04:55  <igorzi>piscisaureus_ AvianFlu: how about 'exit' and 'stdioEnd' ?
20:05:12  <piscisaureus_>stdioEnd nah
20:05:17  <piscisaureus_>maybe just "end"
20:05:17  <piscisaureus_>?
20:05:30  <AvianFlu>this would be the child emitting end?
20:05:37  * travis-cijoined
20:05:37  <travis-ci>[travis-ci] joyent/node#579 (master - 677c2c1 : Łukasz Walukiewicz): The build is still failing.
20:05:37  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/c450ac3...677c2c1
20:05:37  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/848965
20:05:37  * travis-cipart
20:05:48  <AvianFlu>that actually makes sense to me
20:06:20  <AvianFlu>cause it's the end of whatever output you were waiting for
20:06:32  <igorzi>ok, yeah that makes sense
20:09:44  * indexzerojoined
20:09:52  * indexzeroquit (Client Quit)
20:10:37  <TooTallNate>mjr_: https://github.com/joyent/node/issues/2917#issuecomment-4460540
20:10:39  <TooTallNate>lol
20:11:28  <AvianFlu>TooTallNate, ++
20:11:30  <kohai>TooTallNate has 8 beers
20:11:33  <AvianFlu>that right there is some epic hax
20:11:35  <piscisaureus_>igorzi: https://gist.github.com/2024391 <-- would probably fix Elad's issue
20:11:41  <TooTallNate>AvianFlu: :D
20:11:43  <mjr_>TooTallNate: woah, does that work?
20:11:45  <TooTallNate>ya
20:11:51  <mjr_>ha, awesome
20:12:00  <TooTallNate>full-featured tcp repl :p
20:12:05  <mjr_>badass
20:13:53  <piscisaureus_>TooTallNate: what do you need to setRawMode command for? Seems unnecessary to me.
20:13:56  <igorzi>piscisaureus_: btw, do we know for a fact that elad is spawning node processes? (is it in his pr?)
20:14:10  <TooTallNate>piscisaureus_: on the client?
20:14:11  <piscisaureus_>igorzi: it's not in his PR.
20:14:31  <piscisaureus_>TooTallNate: oh wait - right
20:14:35  <piscisaureus_>TooTallNate: sorry, my bad
20:14:40  <TooTallNate>:p
20:15:46  <igorzi>piscisaureus_: hmm.. i don't see anything that says specifically if he's spawning node or not
20:16:40  * mralephquit (Quit: Leaving.)
20:17:09  <piscisaureus_>TooTallNate: I think we could move cursorTo, clearLine, moveCursor, emitKey to readline, or to a separate module.
20:18:04  <TooTallNate>piscisaureus_: i think they're fine in tty, just we need to adjust tty.ReadStream and tty.WriteStream to accept a net.Socket instance
20:18:06  <piscisaureus_>TooTallNate: these are remnants of a historic situation where windows had completely different bindings for them.
20:18:47  <piscisaureus_>TooTallNate: basically it is now a "vt100" module and not a tty module :-)
20:19:29  <piscisaureus_>I am not sure whether the keypress event and cursorTo etc are part of the public api - I think not.
20:19:48  <piscisaureus_>igorzi: so, he is in the room next to you right?
20:20:03  <igorzi>piscisaureus_ : nah, he's in israel :)
20:20:16  <piscisaureus_>oh he really is :-)
20:20:30  <igorzi>he usually is, but sometimes he comes to redmond
20:20:38  <piscisaureus_>now it all makes sense
20:20:53  <piscisaureus_>considering that "ben" is dutch for (I am)
20:21:21  <igorzi>piscisaureus_: so, 'exit' and 'end' ?
20:21:48  <piscisaureus_>igorzi: that would be best. But it implies a breaking change - so consult isaacs or node-core-committers
20:22:02  <piscisaureus_>I would suggest the latter
20:22:11  <igorzi>piscisaureus_: k
20:24:16  <isaacs>piscisaureus_: it's a breaking change for elad to come to redmond?
20:24:17  <isaacs>i'm lost.
20:24:36  <piscisaureus_>[21:20] <igorzi> piscisaureus_: so, 'exit' and 'end' ?
20:24:36  <piscisaureus_>[21:21] <piscisaureus_> igorzi: that would be best. But it implies a breaking change - so consult isaacs or node-core-committers
20:24:37  <isaacs>oh, child.on('exit') and child.on('end')
20:24:39  <isaacs>got it
20:24:45  <isaacs>end = exit + stdio closed?
20:24:50  <piscisaureus_>isaacs: yes
20:25:08  <isaacs>so, stdio can only stay opened if a grandchild shares them, yes?
20:25:26  <piscisaureus_>isaacs: yes, or if the immediate child fucks up
20:25:42  <isaacs>fucks up? how?
20:29:02  <piscisaureus_>isaacs: well if it does not set cloexec
20:29:08  <piscisaureus_>oh wait
20:29:21  <piscisaureus_>on unix this is not so much of problem
20:30:19  <igorzi>isaacs: the only controversial part is whether the current 'exit' event continues to have the same meaning or whether it starts meaning something else in v0.8
20:32:16  <isaacs>Hm. so, in 0.6, it doesn't emit exit until stdio closes, yes?
20:32:46  <igorzi>isaacs: correct
20:33:07  <isaacs>it might be good to have 'exit' mean 'the process exited' and a 'close' event that means exit + stdio closed
20:33:19  <isaacs>sort of like how streams have 'end' and sometiems also 'close'
20:33:51  <isaacs>it'll be the same thing in the vast majority of cases anyway.
20:33:57  <igorzi>isaacs: true
20:34:33  <igorzi>isaacs: so you want 'exit' + 'close' instead of 'exit' + 'end' ?
20:34:44  <piscisaureus_>I'm down with that
20:37:03  <piscisaureus_>I have to go for a while
20:37:33  <igorzi>piscisaureus_: ttyl
20:38:12  <isaacs>yeah, exit + close.
20:38:14  <isaacs>let's do it
20:38:25  <isaacs>igorzi: you writing the patch for this?
20:38:38  <igorzi>isaacs: yep, i'll do it
20:38:41  <isaacs>kewl, thanks
20:39:03  <isaacs>piscisaureus_, bnoordhuis, igorzi: anything you want in 0.7.6, land in master now.
20:39:08  <isaacs>i'm going to branch tonight
20:39:17  <TooTallNate>yyaaayyy
20:39:22  <TooTallNate>it's been a while :p
20:39:26  <isaacs>i'm going to try to finish that npm windows thingie first.
20:39:38  <isaacs>maybe also the node-gyp stuff
20:39:55  <igorzi>isaacs: the windows thingie -> that 5 sec workaround?
20:40:05  <isaacs>igorzi: no, --strip-components and unpack in place.
20:40:15  <isaacs>it's not actually that hard.
20:40:33  <igorzi>isaacs: right, unpack in place is the workaround for the 5 sec. issue
20:40:39  <isaacs>right :()
20:40:40  <isaacs>:)
20:40:56  <isaacs>i thought you meant the "try again until it works, for 5 seconds" workaround
20:40:57  <igorzi>isaacs: :) that would land in v0.6 as well, right?
20:41:07  <isaacs>igorzi: it's just an npm fix, so yes.
20:41:15  <isaacs>0.6.13 will basically just be dependency updating.
20:41:32  <igorzi>isaacs: nice..
20:41:46  * piscisaureus_quit (Ping timeout: 260 seconds)
20:41:57  <isaacs>igorzi: and these:
20:41:59  <isaacs>* 3733a85 Bert Belder (HEAD, ry/v0.6, ry-push/v0.6, v0.6) Windows: include syscall in fs errors (5 days ago)
20:41:59  <isaacs>* daaccc7 Bert Belder uv: upgrade to 1ac71a31 (5 days ago)
20:42:07  <igorzi>isaacs: can you pls let me know when you have the unpack in place working, so that i can verify that it resolves this windows issue
20:42:16  <isaacs>yes, i will
20:53:47  <mjr_>TooTallNate: I tried your fix, and it works remarkably well.
20:54:14  <TooTallNate>mjr_: :D i've crashed it a few times but ya, pretty cool
20:54:25  <mjr_>oh yeah, what are the risks?
20:54:37  <TooTallNate>just incomplete impl
20:54:47  <TooTallNate>moveLeft isn't set and some stuff
20:54:55  <TooTallNate>(try moving the cursor to the left)
20:55:11  <mjr_>oh, wow
20:55:19  <mjr_>and because we are in raw mode, you can't exit
20:55:24  <mjr_>heh
20:55:50  <mjr_>TypeError: Object #<Socket> has no method 'moveCursor'
20:56:21  * piscisaureus_joined
20:56:35  <TooTallNate>mjr_: i have some fixes that address that
20:56:38  <TooTallNate>i'll update the comment
20:56:57  <TooTallNate>but actually knowing when .exit is fired is impossible :(
20:57:03  <mjr_>being able to do tab completion is such a gigantic win.
20:59:01  <TooTallNate>mjr_: i updated the comment, look at the client.js
21:00:18  <mjr_>nice
21:00:55  <TooTallNate>mjr_: actually, change process.on('exit') to sock.on('end')
21:03:03  <TooTallNate>here's the "clean" fixes i think we need to make to make this work right:
21:03:03  <TooTallNate>https://github.com/joyent/node/issues/2917#issuecomment-4461382
21:10:07  <TooTallNate>^ if you guys think these would be good changes I can do them
21:18:12  <mjr_>Personally I think those things are awesome, but I'm not isaacs.
21:22:07  <bnoordhuis>https://github.com/isaacs/node/commit/a10cfba766e2d219b311f12d7854ff448d0d3490 <- the commit log mentions what but not why
21:22:26  <bnoordhuis>isaacs: ^
21:22:44  <bnoordhuis>i can't tell from the diff why that change is good/necessary
21:23:31  <isaacs>bnoordhuis: removing exited is just cleanup. it's a vestigial flag that is never set to anything other than false.
21:24:04  <isaacs>bnoordhuis: the module.children array was originally designed to contain a list of the child modules pulled in by the current one.
21:24:21  <isaacs>it's handy for some meta cases, and for building alternative module loading schemes.
21:24:30  <isaacs>somewhere along the road, it disappeared in a refactor.
21:25:09  <piscisaureus_>TooTallNate: mjr_: I am okay with most of the readline/tty refactors but I don't like the idea of having tty streams accept an existing socket object
21:25:10  <isaacs>bnoordhuis: if you feel this should be removed, i'd be easy to convince. we shoudl remove it from the docs as well, in that case.
21:26:05  <mjr_>piscisaureus_: yeah, that part is a little odd.
21:26:41  * AndreasMadsenquit (Remote host closed the connection)
21:27:56  <piscisaureus_>TooTallNate: mjr_: rather, I think you should factor out the vt100 and ansi stuff into a separate module or maybe a mixin
21:31:16  <bnoordhuis>isaacs: okay. but you should have mentioned that in the commit log :)
21:32:22  <isaacs>bnoordhuis: ok. thanks for the note :)
21:32:30  <isaacs>bnoordhuis: i actually pushed it by half-accident.
21:32:54  <isaacs>meant to just pull in Lukasz's url parsing thing, but i was being lazy and not branching
21:33:33  <bnoordhuis>happens to the best, yours truly included
21:36:20  * theColepart
21:36:37  <piscisaureus_>mjr_: also, I don't know if you saw it, but Erik Corry chopped up v8 to make it support non-bmp characters when converting to/from utf8
21:37:01  <mjr_>Yeah, isaacs pointed me to his tweet referencing that change.
21:37:07  <mjr_>Is that in a V8 release yet?
21:37:16  <piscisaureus_>mjr_: we're not completely done yet - my prototype showed that a major speed improvement is also possible so that's still in the works
21:37:26  <mjr_>good news all around
21:37:34  <piscisaureus_>but it seems you have to go drink scotch with him
21:37:42  <mjr_>done
21:38:27  <isaacs>bnoordhuis: my rule of thumb for lib/module.js is that if a change is in the docs already, and 4 people ask for it, independent of one another, then we can make the requested change.
21:40:45  <bnoordhuis>mikeal: why would a spdy client require changes to the core?
21:52:29  * pieternjoined
21:52:38  * isaacsquit (Remote host closed the connection)
21:52:50  * rendarquit
21:52:53  * isaacsjoined
21:56:41  <piscisaureus_>bnoordhuis: on unix, child processes exit when the parent process exits? What is the mechanism? SIGPIPE, or SIGHUP, or what?
21:57:01  <bnoordhuis>piscisaureus_: they don't necessarily
21:57:28  <piscisaureus_>bnoordhuis: ah, okay. So it is really the same situation as windows
21:57:41  <bnoordhuis>is it?
21:57:46  * bnoordhuisdoesn't know how it works on windows
21:58:00  <dap>piscisaureus_: I believe when the session leader dies, the system sends a SIGHUP, but that's not necessarily going to happen whenever any parent dies.
21:58:08  <piscisaureus_>bnoordhuis: I wonder why on windows it seems to happen much more often that a node test leaves a stray child process behind.
21:58:55  <dap>yeah, according to linux exit(3): "If the process is a session leader and its controlling terminal is the controlling terminal of the session, then each process in the foreground process group of this controlling terminal is sent a SIGHUP signal..."
21:58:59  <isaacs>piscisaureus_: this happens to me with test-debugger-utf8 about 2/3 of the time
21:59:06  <isaacs>piscisaureus_: (on osx)
21:59:51  <dap>you can find out if this is what's happening on osx by dtracing proc:::signal-send.
22:00:22  <piscisaureus_>I wonder if we could make node create controlling terminals for the sake of killing child processes on a crash
22:00:31  <piscisaureus_>like, as a spawn() options
22:00:33  <piscisaureus_>*option
22:00:40  <isaacs>piscisaureus_: "controlling terminals"?
22:00:52  <bnoordhuis>piscisaureus_: you mean call setsid() first?
22:01:11  <piscisaureus_>yeah. or would that be bad?
22:01:24  <piscisaureus_>never mind actually, sounds painful and low-prio
22:11:04  <TooTallNate>piscisaureus_: i kinda like the idea of a mixin...
22:11:44  * paddybyersquit (Quit: paddybyers)
22:11:56  <TooTallNate>piscisaureus_: and i agree, we shouldn't allow tty to accepting existing sockets
22:12:01  <TooTallNate>in essense *lie*
22:12:33  <piscisaureus_>yeah
22:12:38  <igorzi>piscisaureus_: pls review --> https://github.com/igorzi/libuv/commit/861b286f48c23a75ef34cf64709009685ac7da1a
22:12:54  <piscisaureus_>TooTallNate: or something like vt100parser
22:13:43  <piscisaureus_>TooTallNate: (new Vt100Parser(process.stdin)).on('keypress, function() { ...
22:14:10  <TooTallNate>piscisaureus_: ok, and Vt100Writer?
22:14:29  <TooTallNate>piscisaureus_: (new Vt100Writer(process.stdout)).moveLeft()
22:14:34  <isaacs>TooTallNate: so, `node-gyp configure` runs `node-gyp install` automatically if necessary, yes?
22:14:41  <TooTallNate>isaacs: yes
22:14:45  <isaacs>kew
22:15:22  <TooTallNate>isaacs: configure can also accept a --target=v0.7.0 flag (or whatever) to compile for a specific version other than the current one
22:15:31  <TooTallNate>but i think that won't be needed in most cases
22:15:37  <piscisaureus_>TooTallNate: I am not sure whether vt100writer is an appropriate name for that... could be ansiwriter or something.
22:16:04  <TooTallNate>lol, we should just use my ansi.js :p
22:16:20  <TooTallNate>basically already what we need for the writer :D
22:16:21  <piscisaureus_>TooTallNate: but I have a more severe concern. It looks clean as such. But this is trolling for infinite bikeshedding
22:16:31  <piscisaureus_>yes, there we go
22:16:43  <piscisaureus_>ansi.js is really nice but I don't like to have it in core
22:16:53  <TooTallNate>i know, i was kidding
22:17:03  <piscisaureus_>I also know, but you see my concern
22:17:14  <piscisaureus_>we want all the stuff in there that's needed for readline
22:17:18  <piscisaureus_>and nothing more :-)
22:17:41  <piscisaureus_>but it looks clean, so go ahead
22:17:44  <TooTallNate>so then maybe we just move these functions to readline
22:17:47  <TooTallNate>and leave it at that
22:17:56  <piscisaureus_>TooTallNate: yeah, that would be cool.
22:18:02  <piscisaureus_>benvie will kill you
22:18:15  <piscisaureus_>so maybe put them in module.exports but not document it
22:18:32  <TooTallNate>sure
22:18:42  <piscisaureus_>TooTallNate: sounds like a plan
22:19:24  <piscisaureus_>TooTallNate: GetWindowSize needs to remain in tty.js btw
22:19:42  <piscisaureus_>TooTallNate: ideally SetRawMode would also be a member function of tty.ReadStream
22:19:43  <TooTallNate>piscisaureus_: ya, getWindowSize() and setRawMode() are the other interesting ones
22:19:50  <TooTallNate>i agree
22:20:15  <TooTallNate>readline should check typeof stream.setRawMode == 'function'
22:20:20  <TooTallNate>and call it only when available
22:20:33  <piscisaureus_>TooTallNate: and I think we should re-emit SIGWICH on tty.WriteStream objects as a 'resize' event
22:20:52  <piscisaureus_>TooTallNate: on windows we can also support resize events (currently we don't) but they don't arrive as signals.
22:21:12  <TooTallNate>piscisaureus_: what do you think about process.stdout.rows, process.stdout.columns
22:21:23  <TooTallNate>and making them update on resize
22:21:25  <piscisaureus_>TooTallNate: use a getter?
22:21:30  <piscisaureus_>ah
22:21:31  <TooTallNate>we could still emit a 'resize' event
22:21:35  <TooTallNate>no, no getters
22:21:49  <piscisaureus_>TooTallNate: so you would populate them when node starts up?
22:21:54  <TooTallNate>cause calling getWindowSize() all over the place seems redundant
22:21:57  <TooTallNate>piscisaureus_: sure
22:22:01  <piscisaureus_>yeah, agreed
22:22:03  <TooTallNate>piscisaureus_: or a lazy getter
22:22:08  <piscisaureus_>and so how would you resize the window?
22:22:19  <TooTallNate>well i don't think we even have that functionality now
22:22:23  <TooTallNate>... but good question
22:22:24  <piscisaureus_>oh heh
22:22:33  <piscisaureus_>well, I guess that's fine then.
22:22:33  <TooTallNate>suggestions?
22:22:36  <piscisaureus_>must be removed at some point
22:22:42  <piscisaureus_>don't do anything about it just yet
22:22:55  <piscisaureus_>I don't think node should be so bold to resize the users terminal in the first place
22:23:03  <TooTallNate>it just throws "implement me" curently :p
22:23:09  <piscisaureus_>ghe lol
22:23:30  <TooTallNate>also, exports.getWindowSize() needs to go, since we have it on WriteStream
22:23:36  <piscisaureus_>yeah
22:23:39  <TooTallNate>since it just hard-coded returns 80
22:23:40  <TooTallNate>haha
22:23:43  <piscisaureus_>lol
22:23:54  <piscisaureus_>I don't want to touch 0.6 for this
22:24:03  <piscisaureus_>but yeah this should definitely be cleaned up for 0.8
22:24:09  <TooTallNate>piscisaureus_: i don't think anyone wants to touch 0.6 anymore :D
22:24:11  <piscisaureus_>so if you want to take it, you're welcome
22:24:30  <TooTallNate>piscisaureus_: i'd be down for 'resize' on windows too, even though i can never resize that damn window horizontally :D
22:24:44  <piscisaureus_>TooTallNate: also remove isatty and make setRawMode a member function, not a "global"
22:25:06  <TooTallNate>piscisaureus_: also would be nice to query current "raw mode" status
22:25:29  <TooTallNate>we could probably just use a simple variable for that
22:25:38  <TooTallNate>unless there's a way to start node in raw mode
22:25:38  <bnoordhuis>isaacs: https://github.com/bnoordhuis/node/commit/531eba1 <- review?
22:27:44  <TooTallNate>bnoordhuis: i fixed my pull on that too %^
22:27:47  <igorzi>piscisaureus_: hey, can you review this pls? https://github.com/igorzi/libuv/commit/861b286f48c23a75ef34cf64709009685ac7da1a
22:29:39  <piscisaureus_>igorzi: ok
22:29:39  <isaacs>bnoordhuis: lgtm
22:30:10  <bnoordhuis>isaacs: thanks
22:30:25  <CIA-99>node: Nathan Rajlich master * r9701f1c / src/node.cc : process: expose the zlib version in use in process.versions - http://git.io/K5jN7w
22:30:28  <CIA-99>node: Ben Noordhuis master * r531eba1 / src/node_zlib.cc :
22:30:28  <CIA-99>node: zlib: fix include of zlib.h
22:30:28  <CIA-99>node: Including <zlib.h> may lead to false positives when the user specifies a bad
22:30:28  <CIA-99>node: path in `./configure --shared-zlib --shared-zlib-includes=/path/to/zlib`. If
22:30:28  <CIA-99>node: a zlib.h exists somewhere on the system include path (common on UNIX systems),
22:30:28  <CIA-99>node: the compiler will include that instead, possibly leading to header mismatch
22:30:28  <CIA-99>node: errors that are hard to debug. - http://git.io/8N3kIQ
22:30:30  <bnoordhuis>TooTallNate: ^
22:30:56  <TooTallNate>bnoordhuis: thanks :)
22:32:14  <TooTallNate>piscisaureus_: igorzi: so i think we should merge this you guys: https://github.com/joyent/node/pull/2907
22:32:25  <TooTallNate>^ cause it seems otherwise people with msvs 2008 and 2010 installed get problems
22:33:47  <piscisaureus_>igorzi: ^-- what do you think
22:34:03  <piscisaureus_>igorzi: also, UV_IPC_UV_STREAM really means "tcp listening socket" now, right?
22:34:09  <piscisaureus_>should we not rename that flag?
22:36:06  <isaacs>TooTallNate: do you think npm should just bundle node-gyp?
22:36:14  <isaacs>TooTallNate: it seems silly to make the user do another step
22:37:02  <igorzi>piscisaureus_: yeah, good point.. i'll rename
22:37:30  <TooTallNate>isaacs: i guess i don't really have a preferrence, but if we're gonna try to mostly do precompileds someday then it may not be needed
22:37:37  <isaacs>yeah
22:38:13  <TooTallNate>maybe for a for now ya and once we're ready we could make it optional
22:38:41  <igorzi>TooTallNate: what does $(Configuration) resolve to (when vs2008+2010 are installed)?
22:39:15  <TooTallNate>igorzi: apparently an empty string, but i haven't reproduced, see https://github.com/TooTallNate/node-gyp/issues/35
22:40:02  <TooTallNate>the change works for me on machines with only 2010 express installed, but we could just as easily say his setup isn't supported
22:41:09  <piscisaureus_>igorzi: what happens now if the user tries to share an unconnected socket?
22:41:20  <igorzi>TooTallNate: nah, 2008+2010 on the same machine is pretty common. lgtm if it fixes the issue
22:41:23  <isaacs>TooTallNate: How does node-gyp respond if the user doens't have python installed on their system?
22:42:36  <igorzi>piscisaureus_: hmm, you mean a socket that was just uv_tcp_init'ed?
22:42:56  <TooTallNate>isaacs: right now i think it bails with the default "python not found" message, but i've been meaning to add a "which python" command in there to check for it first
22:43:25  <isaacs>TooTallNate: that'd be good
22:43:57  <TooTallNate>isaacs: i'm also gonna add a python version check since gyp doesn't support python 3
22:43:58  <piscisaureus_>igorzi: yup.
22:44:45  <igorzi>piscisaureus_: hmm, i guess we're at the mercy of WSADuplicateSocketW.. you think we should explicitly check?
22:44:59  * travis-cijoined
22:44:59  <travis-ci>[travis-ci] joyent/node#580 (master - 9701f1c : Nathan Rajlich): The build is still failing.
22:44:59  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/677c2c1...9701f1c
22:44:59  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/850505
22:44:59  * travis-cipart
22:46:23  * paddybyersjoined
22:52:52  <piscisaureus_>igorzi: well, I am pretty confident that WSADuplicateSocketW will just work fine. The question is how libuv will behave.
22:53:16  <piscisaureus_>igorzi: so I think we should explicitly check or at least be sure that it won't corrupt your heap
22:53:36  * mikealquit (Quit: Leaving.)
22:53:58  <igorzi>piscisaureus_: yeah, i also didn't make uv_tcp_connect work with emluate_iocp (assuming that code-path was not possible).. so i need to fix that as well
22:54:07  <piscisaureus_>igorzi: I think it's fine btw to not support that case. If one process connects the socket, the other side won't be aware.
22:54:15  <piscisaureus_>so libuv's internal state will be messed up
22:55:11  <piscisaureus_>igorzi: also, since we shutdown() on uv_close it may behave funky
22:55:26  <piscisaureus_>igorzi: if one end closes the handle, it will become unwritable to to the other side.
22:55:38  <igorzi>piscisaureus_: hmm, crap.. good point
22:56:08  <piscisaureus_>igorzi: I don't know if we have a better solution for that. I tried to find one but I was never able to find it
22:56:09  <igorzi>piscisaureus_: we really should only call shutdown() if the kernel refcount is about to become 0, right?
22:56:17  <piscisaureus_>igorzi: yeah.
22:56:27  <piscisaureus_>igorzi: or find another trick to trigger linger behavior
22:56:44  <piscisaureus_>igorzi: because it is really just a hack to make windows behave like unices
22:57:11  <piscisaureus_>igorzi: the windows source code would really help here :-p
22:57:38  <piscisaureus_>I don't have AFD sources
22:58:13  * paddybyersquit (Quit: paddybyers)
23:03:07  <piscisaureus_>isaacs: what is the bash equivalent of %*, e.g. forward all command line arguments from a shell script
23:03:39  <piscisaureus_>isaacs: so I want to create a shim that calls python foo.py <<command line arguments>>
23:03:55  <isaacs>piscisaureus_: "$@"
23:04:06  <isaacs>piscisaureus_: or $*, but "$@" is almost alwyas what you want
23:04:06  <piscisaureus_>right
23:04:11  <piscisaureus_>thanks
23:04:14  <isaacs>np
23:04:24  <piscisaureus_>it was the missing link in porting git-cl to windows :-)
23:04:55  <piscisaureus_>isaacs: oh not really. What is the equivalent of %~dp0?
23:05:03  <piscisaureus_>e.g. the directory that the shell script is in?
23:05:22  <isaacs>piscisaureus_: "`dirname "$0"`"
23:05:30  <isaacs>piscisaureus_: $0 is the shell script
23:05:43  <isaacs>but if you want to resolve symlinks and such, it can be a bit more complicated.
23:11:45  <piscisaureus_>works \o/ - thanks isaacs
23:15:29  <piscisaureus_>igorzi: we could try the suggestion from the third comment on this page -> http://msdn.microsoft.com/en-us/library/windows/desktop/ms738547%28v=vs.85%29.aspx
23:15:37  <piscisaureus_>hmm
23:15:44  <piscisaureus_>that would also disconnect the socket :-/
23:16:22  <igorzi>piscisaureus_: this didn't work when we tried it? http://msdn.microsoft.com/en-us/library/windows/desktop/ms739165(v=vs.85).aspx
23:16:41  <piscisaureus_>igorzi: that seems to be ignored when shutdown isn't called
23:16:48  <piscisaureus_>igorzi: yes, I tried that
23:16:54  <piscisaureus_>igorzi: linger is enabled by default
23:28:42  <piscisaureus_>igorzi: we could retrieve the object handle count with NtQueryObject
23:29:06  <piscisaureus_>igorzi: although that probably would not fly with non-ifs handles
23:30:00  <igorzi>piscisaureus_: we can disallow sending connections, which are non-ifs handles
23:30:25  <piscisaureus_>yeah
23:30:51  <piscisaureus_>or just not call shutdown() if the socket has been shared
23:30:59  <piscisaureus_>or come up with something really slow :-)
23:31:55  <igorzi>piscisaureus_: if we just rely on knowing if the socket was shared.. we wouldn't know if the other end closed the handle
23:32:08  <piscisaureus_>yes
23:32:31  <piscisaureus_>igorzi: so if we don't call shutdown in that case windows might drop the send buffer and send RST
23:32:41  * `3rdEdenquit (Quit: Linkinus - http://linkinus.com)
23:32:51  <piscisaureus_>I know there must be some back door for this :-)
23:32:56  <piscisaureus_>let me look some more
23:33:41  <igorzi>piscisaureus_: i'm kind of baffled about linger not working as advertised
23:33:47  <igorzi>piscisaureus_: i'll try to get some more info about that
23:34:01  <piscisaureus_>igorzi: I know I was too.
23:34:25  * mikealjoined
23:34:37  <piscisaureus_>igorzi: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4468997 <- same issue
23:35:13  <piscisaureus_>igorzi: sorry, probably not the same issue
23:42:11  * AvianFluquit (Quit: Leaving)
23:47:45  <isaacs>igorzi: holy shit this code is grimy.
23:47:53  <isaacs>igorzi: i'm feeling resentful that you pointed me in this direction ;P
23:48:07  * isaacsno one to blame but himself...
23:48:15  <isaacs>the change to tar was like a 5-line thing.
23:48:46  <isaacs>the change to npm/lib/utils/tar.js is a huge cleanup, though
23:49:54  <mmalecki>isaacs: oh, it means no more wicked __package.npm errors?
23:50:12  * mikealquit (Quit: Leaving.)
23:53:47  <isaacs>mmalecki: yeah
23:53:52  <isaacs>mmalecki: you'll have different errors instead :)
23:54:15  <mmalecki>isaacs: ++, still :)
23:54:18  <kohai>isaacs has 11 beers