00:00:29  <mjr_>TooTallNate: looking forward to trying that out. The lack of readline on SmartOS is killing me.
00:02:03  <TooTallNate>mjr_: ya sure thing, i've been testing with this https://gist.github.com/2209310
00:02:06  <TooTallNate>works great
00:02:26  <TooTallNate>to get it to work with telnet is another step, but the pieces are nicely in place for that now
00:02:53  * dylukesjoined
00:02:54  * bnoordhuisquit (Ping timeout: 260 seconds)
00:02:59  <benvie>oo
00:03:00  <mjr_>I don't mind having a repl client.
00:03:18  <benvie>I'm guessing it won't bridge the gap
00:03:19  <mjr_>As long as it has full readline, and tab completion is a bonus
00:04:36  <TooTallNate>mjr_: ya tab completion, colors, it's all there. feels identical to the regular `node` repl
00:05:13  <mjr_>so cool
00:07:03  <TooTallNate>benvie: ??
00:07:12  <benvie>did you see the thing I posted early this morning? Twisted python's poll
00:07:17  <benvie>one sec
00:07:21  <benvie>trying to find it
00:09:36  <benvie>http://twistedmatrix.com/documents/current/api/twisted.internet._pollingfile.html
00:09:37  <benvie>and
00:09:44  <benvie>http://twistedmatrix.com/documents/current/api/twisted.internet.iocpreactor.html
00:09:55  <benvie>twisted python has....extensive libraries
00:09:59  <benvie>I did not realize this
00:10:32  <benvie>basically the issue is, and maybe not correct but
00:11:08  <benvie>it seems like you just won't get callbacks from IOCP from pipes on stdin without either hitting a the size limit or on new line
00:11:14  <benvie>so you basically have to poll it
00:11:19  <benvie>which they've implemented
00:11:43  <piscisaureus_>benvie: that is *not* true, as I have explained to you before
00:12:39  * Ariajoined
00:30:09  * mikealquit (Quit: Leaving.)
00:33:49  * pfox___quit (Ping timeout: 246 seconds)
00:46:32  * sh1mmerquit (Quit: sh1mmer)
00:49:18  * mikealjoined
00:54:43  * orlandovftwquit (Ping timeout: 248 seconds)
00:56:37  * perezdquit (Quit: perezd)
01:08:39  * theCole_quit (Quit: theCole_)
01:21:17  * mikealquit (Quit: Leaving.)
01:27:07  * pieternquit (Quit: pietern)
01:31:22  * abraxasjoined
01:32:20  <benvie>arg
01:32:49  <benvie>your code works admirably nate
01:33:05  <benvie>assuming stdin emits data events sometime before I press enter =(
01:33:34  <benvie>going to need to break out some firepower for this
01:33:59  <benvie>but at least once I do come up with a way to tap in to the events, you're awesome stuff is ready to plug into
01:41:09  * orlandovftwjoined
01:45:02  * dylukesquit (Quit: Pipes are broken. Sending packets via Fedex.)
01:48:35  * dshaw_quit (Ping timeout: 248 seconds)
01:51:39  <TooTallNate>benvie: piscisaureus was saying that the "best" way to do it would be to hook into the keyboard events directly
01:51:51  <TooTallNate>and essentially write a "better" implementation then the one they give you
01:51:52  * Ariaquit (Remote host closed the connection)
01:52:00  <TooTallNate>but that sounds like a rather large undertaking
01:52:06  * travis-cijoined
01:52:06  <travis-ci>[travis-ci] joyent/node#645 (master - aad12d0 : Nathan Rajlich): The build is still failing.
01:52:06  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/ab518ae...aad12d0
01:52:06  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/953730
01:52:06  * travis-cipart
01:52:12  * Ariajoined
01:52:15  <TooTallNate>otherwize i suspect someone would have done it already
01:52:30  <TooTallNate>geez, those tests just finished?
01:53:46  <mjr_>TooTallNate: is that tty refactor going to go into 0.6?
01:53:54  <TooTallNate>mjr_: no
01:53:58  <mjr_>sad face
01:54:06  <TooTallNate>lots of API changes
01:54:12  <mjr_>Well, at least it'll be there when we can finally move to 0.7/8
01:56:47  * mikealjoined
01:57:01  * mikealquit (Client Quit)
01:58:53  <benvie>I'm digging into your stuff now
01:59:36  <benvie>going to set up a net server version and try various windows clients and see what's yp
01:59:39  <benvie>up
02:05:06  * mikealjoined
02:06:06  * brsonquit (Ping timeout: 249 seconds)
02:07:18  <TooTallNate>piscisaureus_: yt?
02:08:07  <TooTallNate>quick review guys: https://github.com/TooTallNate/node/commit/fix-terminal-autodetection
02:08:11  <TooTallNate>fixes a failing test
02:09:48  <TooTallNate>isaacs: ^
02:10:34  <piscisaureus_>TooTallNate: so the idea is to not set `terminal` unless node_no_readline=1 ?
02:10:41  <benvie>readline.emitKeypressEvents is so awesome
02:10:41  <piscisaureus_>TooTallNate: that lgtm
02:10:52  <piscisaureus_>benvie: that's a secret api!
02:11:11  <benvie>=D
02:11:14  <TooTallNate>piscisaureus_: right, cause when it's undefined, then readline has a sensible default for that
02:11:22  <TooTallNate>(i.e. checking "isTTY")
02:11:25  <TooTallNate>ok landing
02:11:38  <CIA-99>node: Nathan Rajlich master * r698e795 / (lib/_debugger.js src/node.js):
02:11:38  <CIA-99>node: repl: fix 'terminal' mode autodetection on global repls
02:11:38  <CIA-99>node: Fixes test/simple/test-force-repl.js - http://git.io/SwIEEQ
02:12:55  <TooTallNate>benvie: we almost didn't export it. what are you using it for?
02:13:37  <benvie>welllll
02:13:55  * orlandovftwquit (Ping timeout: 244 seconds)
02:14:51  <benvie>I don't use the built in readline or repl libs at all and have pretty extensive things built for both of those. I almost did the same for TTY one a few occasions
02:15:04  <benvie>but this lets me avoid that idea entirely
02:15:26  <benvie>I already integrated in, it's awesome cause it was plug and play
02:16:00  <TooTallNate>what's wrong with readline?
02:16:20  <benvie>well you fixed most of the things I originally started in on it for
02:16:32  <benvie>the various controls from tty
02:16:37  <TooTallNate>ahhh
02:16:44  <benvie>but I ended up rebuilding it
02:16:58  <benvie>all of the controls and stuff are keybindable
02:17:13  <benvie>and I redid a lot of the movement to work better with a static screen
02:17:15  <benvie>and paging
02:18:20  <benvie>and the cursor works differently and the prompt
02:18:27  <TooTallNate>i'm working on an irc client using readline
02:18:30  <TooTallNate>wanted to keep it simple
02:18:39  <TooTallNate>none of that fancy ncurses stuff
02:18:57  <benvie>what remains of my _ttyWrite function is around 10 lines
02:19:21  <benvie>it all goes through a whole separate command and keybind handler
02:19:32  <benvie>but it allows you to do stuff like
02:19:42  <benvie>"alt+ctrl+s" binds to X
02:20:05  <benvie>so most of that stuff is just a giant config file now
02:20:40  <TooTallNate>benvie: what's wrong with just listening for "keypress" and doing this.write('X')?
02:21:26  <benvie>well it does that but it also allows for setting up arbitrary keybinds easily
02:21:41  <benvie>I set it up so that everything is basically a plugin
02:22:06  <benvie>so if I want to add another handeful of things, I specify it like a mini-module which includes default keybindgs/commands
02:22:07  * dshaw_joined
02:22:24  <benvie>and then users can set up their own custom stuff if they want
02:23:25  <benvie>it's not the normal letters, it's everything else. command keys and combos
02:24:33  * mikealquit (Quit: Leaving.)
02:25:13  * orlandovftwjoined
02:25:25  * mikealjoined
02:27:05  * mikealquit (Client Quit)
02:28:17  * travis-cijoined
02:28:17  <travis-ci>[travis-ci] joyent/node#646 (master - 698e795 : Nathan Rajlich): The build is still failing.
02:28:17  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/aad12d0...698e795
02:28:17  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/954080
02:28:17  * travis-cipart
02:33:42  * mikealjoined
02:34:03  * philipsquit (Excess Flood)
02:35:14  * philipsjoined
02:38:54  * mikealquit (Quit: Leaving.)
02:39:20  <benvie>oh my god it's working
02:39:24  <benvie>with putty
02:39:49  <benvie>keybinds and all
02:40:43  * dshaw_quit (Quit: Leaving.)
02:41:55  * orlandovftwquit (Ping timeout: 248 seconds)
02:43:38  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
02:44:08  <benvie>wow and the custom clipboard stuff I ddi even works
02:44:16  * pieternjoined
02:46:48  <benvie>this victory will be sung for countless generations
02:51:11  <TooTallNate>lol
02:51:14  <TooTallNate>what now?
02:51:22  <TooTallNate>what does putty do?
02:51:52  <TooTallNate>benvie: but i'm glad you're enjoying the changes :)
02:56:46  <benvie>partially it's the stuff you did
02:56:57  <benvie>also I think something putty does to help with the output
02:57:20  <benvie>it has control for local echo and local line editing
02:57:24  <benvie>auto, force on, force off
02:57:47  <benvie>force off improved that situation but it was already improved
02:58:13  <benvie>it also has more contros over which rules to use in the options
02:58:42  <benvie>mintty supports those too but I didn't get around to figure out which thing you had to put in config
03:01:13  * TooTallNatequit (Quit: Linkinus - http://linkinus.com)
03:01:54  * sh1mmerjoined
03:02:48  * piscisaureus_joined
03:15:36  * txdvjoined
03:35:58  * dylukesjoined
03:38:41  * mikealjoined
03:43:04  * isaacsquit (Remote host closed the connection)
03:47:10  * dapquit (Quit: Leaving.)
03:55:19  * mikealquit (Quit: Leaving.)
04:00:53  * isaacsjoined
04:02:11  * dylukesquit (Quit: Computer has gone to sleep.)
04:06:57  * dshaw_joined
04:07:19  * Ariaquit (Remote host closed the connection)
04:09:37  * mikealjoined
04:22:36  * mikealquit (Quit: Leaving.)
04:26:38  * mikealjoined
04:30:27  * pieternquit (Quit: pietern)
04:34:00  * dshaw_quit (Quit: Leaving.)
04:36:32  * dshaw_joined
04:38:17  * pfox___joined
04:38:58  * mikealquit (Quit: Leaving.)
04:43:53  * dvvjoined
04:44:07  <dvv>Hi! Can't build current master:
04:44:08  <dvv>src/uv.h:1488:14: error: duplicate member ‘uv_eio_want_poll_notifier’
04:44:09  <dvv>src/uv.h:1489:14: error: duplicate member ‘uv_eio_done_poll_notifier’
04:44:09  <dvv>src/uv.h:1490:13: error: duplicate member ‘uv_eio_poller’
04:52:04  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
04:52:04  <benvie>did you ever know
04:52:09  <benvie>that you're my hero
05:00:34  * mikealjoined
05:01:14  * dshaw_quit (Quit: Leaving.)
05:22:48  * orlandovftwjoined
05:37:56  * dshaw_joined
05:44:53  * mikealquit (Quit: Leaving.)
05:49:32  * mikealjoined
05:53:29  * pfox___quit (Quit: leaving)
05:59:54  * paddybyersquit (Quit: paddybyers)
06:00:48  * paddybyersjoined
06:07:01  * abraxasquit (Remote host closed the connection)
06:07:32  * abraxasjoined
06:17:43  * paddybyersquit (Quit: paddybyers)
06:47:01  * stephankquit (Quit: *Poof!*)
06:49:00  * abraxas_joined
06:49:24  * mikealquit (Quit: Leaving.)
06:49:37  * abraxasquit (Read error: Connection reset by peer)
06:51:00  * mikealjoined
06:55:23  * mikealquit (Client Quit)
06:55:52  * mikealjoined
06:59:17  * rendarjoined
07:04:08  * mmalecki[away]changed nick to mmalecki
07:29:23  * dshaw_quit (Quit: Leaving.)
07:31:26  * isaacsquit (Remote host closed the connection)
07:56:48  * mmaleckichanged nick to mmalecki[away]
08:09:05  * paddybyersjoined
08:10:14  * skomskijoined
08:15:41  * paddybyersquit (Quit: paddybyers)
08:19:55  * skomskiquit (Quit: skomski)
09:17:07  * orlandovftwquit (Ping timeout: 248 seconds)
09:28:23  * paddybyersjoined
09:33:18  * dvv1joined
10:11:43  * dvvquit (Remote host closed the connection)
10:38:56  * paddybyersquit (Read error: Connection reset by peer)
10:39:54  * paddybyersjoined
10:45:39  * theColejoined
10:56:59  * abraxas_quit
11:03:37  * abraxasjoined
11:14:55  <indutny>heya
11:15:01  <indutny>any GYP experts online?
11:22:17  * skomskijoined
11:50:16  * bnoordhuisjoined
12:13:57  * paddybyersquit (Quit: paddybyers)
12:22:19  * paddybyersjoined
12:23:52  * paddybyersquit (Client Quit)
12:32:56  <bnoordhuis>dvv1: let me know if you want help with that compilation error
12:51:44  <bnoordhuis>https://github.com/joyent/node/issues/assigned/?page=15&state=open&utf8=%E2%9C%93 <- why is this 404'ing on me?
13:04:11  * k-s[AWAY]changed nick to k-s
13:20:22  * saghulquit (Remote host closed the connection)
13:26:18  * saghuljoined
13:26:46  * dylukesjoined
13:28:33  * piscisaureus_joined
13:37:11  * dylukesquit (Quit: Computer has gone to sleep.)
13:47:24  <piscisaureus_>bnoordhuis: do you know how to reference an issue in another repo on github
13:47:25  <piscisaureus_>?
13:47:32  <bnoordhuis>piscisaureus_: yes
13:47:35  <piscisaureus_>bnoordhuis: tell me
13:47:39  <bnoordhuis>user/repo#123
13:47:59  <piscisaureus_>right
13:48:00  <piscisaureus_>thanks
13:49:05  <bnoordhuis>piscisaureus_: also, http://www.nrc.nl/nieuws/2012/03/27/iris-van-herpens-jurken-van-plexiglas-botten-en-water/?utm_campaign=nieuwsbrief&utm_source=email
13:49:17  <bnoordhuis>my ex is in my newspaper's newsletter...
13:49:43  <bnoordhuis>and here i was, thinking i'm a famous open source programmer...
13:56:06  <creationix>bnoordhuis, don't worry, you're famous to us ;)
13:57:52  <bnoordhuis>thanks tim, i feel better now :)
13:57:57  <piscisaureus_>bnoordhuis: oh you're getting better. Last week you thought you were napoleon.
13:58:03  <bnoordhuis>haha
13:59:21  <piscisaureus_>bnoordhuis: about https://github.com/joyent/node/pull/1256
13:59:43  <bnoordhuis>piscisaureus_: yes?
13:59:53  <piscisaureus_>bnoordhuis: the fix would be I think to not concat up strings infinitely
14:00:23  <bnoordhuis>piscisaureus_: concat? are we doing that now?
14:00:31  <bnoordhuis>i thought that string concat patch never landed?
14:01:26  <piscisaureus_>ah, wait
14:01:30  <piscisaureus_>:-)
14:01:49  <piscisaureus_>Looking at the wrong code path
14:01:56  <piscisaureus_>In my experimental branch
14:02:14  <bnoordhuis>no more drinking on the job for you, bertje
14:02:20  <piscisaureus_>bnoordhuis: no, wait
14:02:23  <piscisaureus_>bnoordhuis: https://github.com/Jimbly/node/commit/14ca85f3642e3cbcdfca9ceb50efd807fe4f02f2#L0R349
14:02:28  <piscisaureus_>bnoordhuis: looks like it's there anyway
14:03:21  <piscisaureus_>bnoordhuis: although, I can't imagine how this could be correct
14:03:25  <piscisaureus_>bnoordhuis:
14:03:25  <piscisaureus_>- this._writeQueueCallbacks[last] = function() {
14:03:25  <piscisaureus_>- this._writeQueueCallbacks[last]();
14:03:57  <bnoordhuis>that's not in master
14:04:30  <bnoordhuis>not in v0.6 either
14:04:59  <piscisaureus_>bnoordhuis: I can reproduce the issue though, with 0.6.14
14:05:05  <piscisaureus_>meh
14:05:17  <piscisaureus_>It looks like I'll have to do some actual investigation
14:05:18  <piscisaureus_>bleh
14:15:23  <CIA-99>libuv: Vladimir Dronnikov master * r2b3ba91 / config-unix.mk : build: make `make clean` really clean - http://git.io/i09Drw
14:17:18  * travis-cijoined
14:17:18  <travis-ci>[travis-ci] joyent/libuv#148 (master - 2b3ba91 : Vladimir Dronnikov): The build is still failing.
14:17:18  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/e729a82...2b3ba91
14:17:18  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/957197
14:17:18  * travis-cipart
14:21:26  * dvv1part
14:42:17  * isaacsjoined
14:45:07  * k-schanged nick to k-s[AWAY]
14:48:51  <piscisaureus_>bnoordhuis: I am serious
14:49:14  <piscisaureus_>bnoordhuis: obviously it is quite easy to overload fd.write("hi") to write(fd, "hi")
14:49:44  <bnoordhuis>piscisaureus_: why would you want to do that?
14:50:03  <piscisaureus_>bnoordhuis: well, because it allows us to do various things
14:50:20  <piscisaureus_>bnoordhuis: like, offload all work related to a single fd to the same thread pool thread
14:50:24  <piscisaureus_>and serialize all accesses
14:50:43  <piscisaureus_>The current low-level fs api is a minefield
14:50:56  <piscisaureus_>And it is callback pyramid farm
14:51:11  <bnoordhuis>piscisaureus_: offload all work related to a single fd -> we can do that now already
14:51:15  <piscisaureus_>sure
14:51:42  <bnoordhuis>and callback spaghetti.... people should flatten their callbacks
14:51:44  <piscisaureus_>since all the fd ops have fs as the first argument there is really not much difference
14:52:02  <bnoordhuis>that's true
14:52:14  <bnoordhuis>but that's also the reason why i don't see the added value :)
14:52:48  <piscisaureus_>bnoordhuis: but having an OOP api communicates clearly that write(f, "a"); close(f); are not independent operations
14:52:53  <piscisaureus_>but state tracking could happen
14:52:57  * pfox___joined
14:53:27  <pfox___>quick query: is uv_read_stop() an immediate action.. so, can i uv_close() a stream in the same callback, after calling uv_read_stop() ?
14:53:35  <bnoordhuis>piscisaureus_: still not convinced of the added value :)
14:54:15  <bnoordhuis>pfox___: it is on linux
14:54:17  <bnoordhuis>err, unix
14:54:24  <piscisaureus_>bnoordhuis: so if you see people pitching node-fibers etc they are giving fs examples most of the time
14:54:37  <bnoordhuis>pfox___: i think it's the same on windows (it should)
14:54:46  <piscisaureus_>bnoordhuis: because the fs api is notoriously bad at serialization and queing where it actually makes a lot of sense
14:54:48  <creationix>one of my first node patches was fs.readfile
14:54:53  <creationix>(before it wrapped readStream)
14:54:59  <pfox___>bottom line.. it's safe to close a steam in the same callback after doing uv_read_stop() ..
14:55:03  <creationix>before that you had to write 15 lines of code to read a file
14:55:10  <piscisaureus_>yeah
14:55:16  <piscisaureus_>but it still sucks monkey balls
14:55:32  <piscisaureus_>if you mess up you can still have your data written to the wrong file for example
14:55:33  <bnoordhuis>the monkey doesn't seem to mind
14:55:54  <creationix>you can always add higher-levels of abstraction
14:55:56  <piscisaureus_>or put the file in the wrong directory if you mess with chdir
14:55:58  <creationix>but don't take away any power
14:56:00  <bnoordhuis>what tim said
14:56:07  <creationix>sometimes I want to read from a certain fd at a certain offset
14:56:09  <piscisaureus_>no, I don't want to take away low power of course
14:56:10  <bnoordhuis>i don't see this as a problem that needs to be solved in the core
14:56:13  <piscisaureus_>that will never happen
14:56:20  <creationix>so the html5 fs api is interesting
14:56:26  <bnoordhuis>pfox___: your bottom line is correct
14:56:28  <creationix>there are file objects, directory objects
14:56:44  <creationix>it's not path based at all
14:56:47  <piscisaureus_>We should have a directory stream in node, srsly
14:56:51  <creationix>though there is an api for converting paths to objects
14:57:05  <creationix>it treats the fs more like a dom
14:57:20  <creationix>directory stream is a primitive we don't have too
14:57:25  <isaacs>Good morning.
14:57:28  <creationix>try doing readdir on a dir with a million files
14:57:44  <creationix>isaacs, morning
14:57:52  <piscisaureus_>creationix: I think we all agree on that (at least me and Ben do)
14:58:15  <piscisaureus_>creationix: although - in general I would not recommend putting a million files in a directory
14:58:33  <creationix>I think readdir was the only primitive I was missing when I implemented sftp
14:58:37  <piscisaureus_>creationix: (on smartmachines the limit is 100K, as cloud9 found out the hard way)
14:58:43  <creationix>I had to fake it as a stream with one chunk and all the files
14:58:50  <bnoordhuis>question: we're doing persistent.Clear() followed by persistent.Dispose() everywhere
14:58:55  <bnoordhuis>is that actually correct?
14:58:59  <creationix>still, 100K files is a big js array
14:59:04  <creationix>the gc won't like that
14:59:04  <piscisaureus_>yes
14:59:10  <bnoordhuis>Persistent<T>::Dispose() does this -> if (this->IsEmpty()) return;
14:59:18  <piscisaureus_>creationix: the gc doesn't really care I think
14:59:27  <creationix>it does once they get large
14:59:36  <creationix>I discovered this with nstore
14:59:42  <bnoordhuis>Clear() sets val_==0 and IsEmpty() checks if val_==0
14:59:44  <isaacs>bnoordhuis, piscisaureus_: an OOP "file as object" API would be nice, but i don't know that we need to majorly overhaul fs for that
14:59:45  <piscisaureus_>creationix: I think having 100k items in an array or having 100 object with 1000 entries matters
14:59:49  <creationix>of course, I was trying to break a million properties in an object
14:59:57  <piscisaureus_>isaacs: it is long-term
15:00:07  <creationix>piscisaureus_, yes, it's best to balance the numbers
15:00:22  <piscisaureus_>isaacs: I was just mentioning it in our internal chat and then bnoordhuis started a melee
15:00:22  <isaacs>piscisaureus_: you should write a flow control library, and then we can merge it in and piss everyone off ;P
15:00:24  <bnoordhuis>isaacs: as in, the next turn of the great wheel
15:00:42  <tjfontaine>oh great wheel in the sky
15:00:44  <isaacs>ryan and i had talked about a promise api a bunch of times.
15:01:06  <piscisaureus_>hmm
15:01:14  <creationix>promise is ok as long as it's effecient
15:01:24  <creationix>and easier to use than callbacks
15:01:29  <creationix>but that's hard to get both
15:01:33  <isaacs>the idea would be something like: fs.open("path").write("foo").close()
15:01:35  <isaacs>or whatever
15:01:42  <piscisaureus_>I don't think you can do a promise api in JS that is nice enough
15:02:08  <creationix>isaacs, is that promise or just chained commands that get queued internally?
15:02:15  <creationix>I guess it's the idea of promises
15:02:19  <piscisaureus_>isaacs: I think we can just serialize fs.* operations (like we already do with sockets) as a first step
15:02:29  <isaacs>piscisaureus_: the thing is not to think too much about the "promise"-ness of it, and instead just write a bunch of examples of the type of API you'd want for various tasks, and then make that work.
15:02:31  <isaacs>that's what jquery did
15:02:39  <piscisaureus_>yeah
15:02:53  <piscisaureus_>did nobody write nquery yet?
15:03:01  <isaacs>i don't know.
15:03:10  <piscisaureus_>yes
15:03:10  <piscisaureus_>http://tblobaum.github.com/nodeQuery/
15:03:11  <isaacs>there've been a few things, but they focused on the wrong parts of jquery
15:03:33  <piscisaureus_>oh wait that's not what we are talking about
15:03:45  <isaacs>nquery is jquery over dnode
15:03:46  <creationix>browsers now have "file" I/O in html5
15:03:51  <creationix>it's an interesting API they chose
15:04:06  <creationix>async callbacks with objects
15:05:00  <isaacs>the thing is, you don't often just open a file, write one thing, then close it
15:05:16  <isaacs>that example above would be better done as fs.writeFile("path", "foo") anyhow
15:05:43  <creationix>yep, that's why I added fs.writeFile way back in the day, it's the 80% case made easy
15:05:48  <piscisaureus_>It would be nice if we could have a JS language feature to support this
15:06:01  <piscisaureus_>like, native promises or something
15:06:09  <isaacs>piscisaureus_: bring it up on es-discuss
15:06:17  <creationix>how would language support help
15:06:26  <isaacs>piscisaureus_: then in a few years, you'll have something completely different that you don't want
15:06:30  <isaacs>:)
15:06:48  <isaacs>yes, that would be nice, though
15:06:50  <creationix>or just make your own language /cc indutny ;)
15:07:26  <isaacs>or that, yes ):
15:07:27  <isaacs>:)
15:08:20  <creationix>though candor is anything but OOP (I did find a way to get OOPish features into it)
15:08:45  <piscisaureus_>I am kind of getting disappointed in candor
15:09:01  <piscisaureus_>Not because the language sucks -
15:09:16  <piscisaureus_>but I really thought that he was implementing js-light
15:09:24  <isaacs>my only beef with candor is that it's taking indutny from us.
15:09:25  <indutny>creationix: hehe
15:09:31  <indutny>isaacs: sorry
15:09:32  <piscisaureus_>like, most well-written js would run in it with only slight modifications
15:09:54  <indutny>piscisaureus_: what's the purpose of that?
15:10:03  <piscisaureus_>well, js is kinda retarded
15:10:12  <creationix>piscisaureus_, not hardly, it's pretty bare
15:10:25  <piscisaureus_>and v8 could be faster if javascript was a little more sensible
15:10:28  <indutny>piscisaureus_: I think most of ES can be easily transcompiled to candor
15:10:53  <indutny>piscisaureus_: yeah, there're many pitfalls in language
15:11:08  <indutny>piscisaureus_: but, I'm starting to think that IC works out those problems
15:11:12  <indutny>piscisaureus_: well enough
15:11:13  <creationix>piscisaureus_, well, if coffeescript taught me anything, it's protyping langauges features in a real language is an effective way to get to the es-discuss people
15:11:17  <creationix>(some of them atleast)
15:11:18  <piscisaureus_>Like, don't have this stupid arguments object, don't have block-scoped catch (or use block scoping throughout)
15:11:46  <indutny>piscisaureus_: arguments don't hurt anything
15:11:50  <indutny>piscisaureus_: if you don't use them
15:12:05  <indutny>piscisaureus_: it doesn't affect argument passing model
15:12:24  <indutny>isaacs: there're many things taking me out from node
15:12:26  <piscisaureus_>indutny: well, it does affect the code js has to generate when you update a named argument variable
15:12:29  <isaacs>indutny: you have a js-like arguments object? that's a mistake.
15:12:30  <indutny>isaacs: I hope I'll return to active development soon
15:12:39  <indutny>isaacs: I've vararg
15:12:42  <isaacs>indutny: you're welcome whenever. do your thing, man, it's cool.
15:12:56  <indutny>piscisaureus_: ??
15:12:58  <piscisaureus_>indutny: also arguments.caller.callee prevents tail call optimizations
15:13:14  <indutny>piscisaureus_: I thought that was a problems with this and scoping
15:13:24  <isaacs>the arguments.callee business was a huge mistane
15:13:25  <isaacs>*mistake
15:13:26  * hij1nxquit (Quit: hij1nx)
15:13:28  <bnoordhuis>isaacs: funny, i was thinking today that we have a number of committers that aren't actually active
15:13:28  <indutny>yeah
15:13:40  <bnoordhuis>and what to do with them
15:13:40  <indutny>bnoordhuis: I know what you're going to propose :D
15:13:41  <isaacs>bnoordhuis: yeah. it happens.
15:14:01  <bnoordhuis>indutny: don't worry just yet :)
15:14:09  <indutny>bnoordhuis: ok, I'll keep calm for some time
15:14:15  <indutny>at least until your next message :)
15:14:32  <bnoordhuis>but i've worked on projects where the majority of the committers had been inactive for 2+ years
15:14:33  * ircretaryquit (Remote host closed the connection)
15:14:39  * ircretaryjoined
15:14:49  <indutny>bnoordhuis: MS Windows?
15:14:54  <bnoordhuis>hohoho
15:15:12  <piscisaureus_>indutny: (function (a) { arguments[0] = 5; console.log(a) })(3) <-- that, for example
15:15:27  <indutny>piscisaureus_: yeah, that's not good
15:15:46  <indutny>but if you'll remove arguments from code, it'll be compiled as language doesn't have this feature at all
15:15:56  <indutny>s/as/like
15:16:03  <creationix>indutny, you know I was once considered part of the node core team, then I didn't commit to node for a full release cycle
15:16:14  <creationix>(not that I did that much volume in the first place)
15:16:19  <indutny>creationix: hehe
15:16:33  <piscisaureus_>bnoordhuis: what are you going to propose
15:16:37  <indutny>I don't really care, I just do what I feel urge to do
15:16:43  <indutny>and I'll contribute, eventually
15:16:57  <bnoordhuis>piscisaureus_: to remove someone's commit bit after they've been inactive for a certain amount of time
15:17:02  <bnoordhuis>like six months or so
15:17:25  <indutny>bnoordhuis: what does "inactive" means?
15:17:35  <indutny>bnoordhuis: completely inactive, or just not active enough
15:17:40  <indutny>:)
15:17:49  <bnoordhuis>indutny: no commits, no participation in the bug tracker, mailing list, etc.
15:18:03  <indutny>bnoordhuis: k
15:18:34  <bnoordhuis>nice tale from the trenches
15:18:43  <bnoordhuis>i work on ioquake3
15:18:59  <bnoordhuis>there's this guy who hasn't been active since 2006 but still has his commit bit
15:19:01  * mmalecki[away]changed nick to mmalecki
15:19:16  <bnoordhuis>new people want to become committers but are turned away because "we have enough committers"
15:19:17  <indutny>bnoordhuis: is that a problem?
15:19:19  * paddybyersjoined
15:19:22  <indutny>ah
15:19:38  <piscisaureus_>isaacs: btw I think you can drop the libuv commit bits for HenryRaws
15:19:40  <indutny>you're right
15:20:25  <piscisaureus_>http://rubyonrails.org/core/alumni
15:20:40  <isaacs>we're not going to turn away committers because we have enough committers, unless there are so many active committers that it's a problem.
15:21:02  <isaacs>the thing is, though, you don't really HAVE to be a node-core committer to be a big deal in node-land.
15:21:08  <isaacs>look at SubStack or tj or mikeal
15:21:17  <isaacs>or, creationix, for that matter
15:21:19  <piscisaureus_>yeah, that's true
15:21:27  <isaacs>though he's left us for other *uv's :)
15:21:31  <indutny>hahahaha
15:21:39  <indutny>I left you for other language
15:21:41  <indutny>:D
15:21:51  <piscisaureus_>so did ryah
15:21:56  <indutny>piscisaureus_: really?
15:21:59  <isaacs>but like, if pquerna or felixge or ryah want to come back, they'll be welcome.
15:22:01  <creationix>I'm still here
15:22:11  <creationix>c9 pays me to do node stuff :P
15:22:25  <indutny>isaacs: btw, can you remind me, where I've stopped with debugger race fixes?
15:22:25  <creationix>hopefully mikeal lets us present architect
15:22:28  <creationix>at nodeconf
15:22:36  <isaacs>creationix: oh, right, you're writing their node tutorial blog thing i saw
15:22:43  <indutny>isaacs: I can remember that there was an issue with my patch
15:22:57  <indutny>isaacs: but can't remember which exactly
15:23:34  <isaacs>indutny: it didn't work consistently. sometimes it skipped over the first user-created debugger, sometimes it didn't skip over the one you put into module.js, so you had to manually c past it
15:23:47  <indutny>I hope one day candor will get enough "community weight" and will develop w/o my active contribution
15:23:47  <isaacs>indutny: the 50ms delay seems to work fine, though
15:23:55  <indutny>isaacs: and seems to be hacky
15:24:05  <isaacs>indutny: yeah, the delay is indeed hacky
15:24:16  <indutny>isaacs: thanks for reminding ;)
15:24:20  <creationix>indutny, it may, but others won't do it the same as you
15:24:23  <isaacs>indutny: what we really need is not to hack around this, but instead to get an actual "This is how you do this" from v89
15:24:37  <creationix>indutny, luvit is used in production and I still feel the need to guide it
15:24:46  <indutny>isaacs: v89?
15:24:50  <isaacs>indutny: like, a specific message we can get from the v8debugger object
15:24:56  <indutny>creationix: guide and maintain are different things :)
15:24:57  <isaacs>v89 = v8 + fat finger
15:25:03  <indutny>isaacs: ahahah
15:25:14  <indutny>thought it was some app from '89
15:25:41  <indutny>isaacs: well, I've another idea
15:26:22  <indutny>isaacs: I'll came up here with results later
15:27:37  <isaacs>awesome
15:27:55  <indutny>btw, is chrome using builtin debug-agent?
15:30:41  <isaacs>indutny: no idea
15:35:30  <CIA-99>libuv: Aaron Bieber master * r40e6373 / src/unix/openbsd.c :
15:35:31  <CIA-99>libuv: unix: fix compiler warning
15:35:31  <CIA-99>libuv: Fix warning "for loop initial declaration used outside C99 mode" on openbsd. - http://git.io/yldrCQ
15:35:49  <bnoordhuis>phew
15:36:04  <bnoordhuis>all three openbsd users can sleep safely again
15:36:22  <tjfontaine>the bieber will save us
15:36:51  * perezdjoined
15:36:53  <indutny>hahaha
15:37:28  * travis-cijoined
15:37:28  <travis-ci>[travis-ci] joyent/libuv#149 (master - 40e6373 : Aaron Bieber): The build is still failing.
15:37:28  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/2b3ba91...40e6373
15:37:28  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/957906
15:37:28  * travis-cipart
15:38:11  * pieternjoined
15:39:22  * pieternquit (Client Quit)
15:39:34  <creationix>isaacs, npm won't let me `npm adduser` anymore. I get an update conflict every time
15:39:39  * pieternjoined
15:42:40  <indutny>couchdb
15:42:45  <indutny>more I use it - more I like it
15:43:00  <indutny>everyone should use this: https://github.com/indutny/bplus
15:43:00  <indutny>:D
15:45:07  <creationix>indutny, is that like a baby leveldb?
15:45:13  <isaacs>creationix: yeah, i know, it's a regression that i introduced in the security fix
15:45:15  <indutny>creationix: indeed
15:45:22  <indutny>lol :D
15:45:32  <isaacs>creationix: you can just copy your .npmrc file to the other computer
15:45:52  <creationix>isaacs, not possible
15:45:57  <creationix>I lost the original
15:46:01  <isaacs>creationix: or generate your auth by doing: echo -n $username:$password | base64
15:46:23  <isaacs>creationix: and then put: _auth = $the_result in your ~/.npmrc file
15:46:26  <creationix>ok
15:46:31  <isaacs>sucks, i know
15:51:41  * stephankjoined
16:01:09  * djegojoined
16:13:54  * dapjoined
16:20:40  * paddybyersquit (Quit: paddybyers)
16:22:06  * djegoquit (Quit: leaving)
16:30:00  <indutny>isaacs: is that issue stable failing to you?
16:30:12  * orlandovftwjoined
16:32:40  <indutny>isaacs: I've an idea of improbable fix: https://github.com/indutny/node/commit/e93d2c2b2aab2f557b7250b01d1b0ba7df2cac44
16:34:18  * AndreasMadsenjoined
16:34:27  <indutny>oh wait, I forgot to revert your 50 ms commit
16:35:22  <indutny>works fine with reverted commit
16:35:28  <indutny>though I wasn't able to reproduce it
16:35:42  <indutny>is there anyone else who can reproduce that problem?
16:35:51  * dylukesjoined
16:37:32  * theColequit (Quit: theCole)
16:42:18  * k-s[AWAY]changed nick to k-s
16:46:16  * mikealquit (Quit: Leaving.)
16:50:13  <piscisaureus_>igorzi: yt?
16:51:58  * mikealjoined
16:56:39  * mikealquit (Client Quit)
17:02:05  * mikealjoined
17:08:48  <igorzi>piscisaureus_: whatsup?
17:09:09  <piscisaureus_>igorzi: https://github.com/joyent/node/issues/2837
17:09:50  <piscisaureus_>igorzi: it's weird. for these people the ReadDirectoryChangesW request returns ERROR_OPERATION_ABORTED
17:10:02  <piscisaureus_>when the watcher is closed
17:10:15  <piscisaureus_>there's also a windows7 guy that says it happens for him
17:10:50  <piscisaureus_>igorzi: but for me it always reports STATUS_NOTIFY_CLEANUP which translates to ERROR_SUCCESS (since it is an informational status code)
17:10:58  <piscisaureus_>no matter how hard I try, I never get the error
17:11:07  <piscisaureus_>igorzi: how could that happen?
17:11:50  <igorzi>piscisaureus_: hmm, strange
17:15:43  <igorzi>piscisaureus_: i wonder if that could be caused if there are any events in the ReadDirectoryChangesW buffer still
17:15:59  <piscisaureus_>igorzi: hmm, yeah, that could be
17:16:04  <piscisaureus_>I didn't really test for that
17:16:39  <igorzi>piscisaureus_: but we should handle ERROR_OPERATION_ABORTED, right?
17:16:57  <piscisaureus_>igorzi: well we should probably not make any callbacks at all after uv_close is called
17:17:17  <igorzi>piscisaureus_: yeah
17:17:18  <piscisaureus_>igorzi: there's a guard around one of the sites where the callback function is invoked but at the other spots it is not checked
17:17:52  <piscisaureus_>igorzi: so I'll just change that. But I was very surprised that people were seeing behaviour that I could not reproduce
17:19:32  <igorzi>piscisaureus_: yeah, that is strange (especially with the guy confirming that it also happens for him with win7)
17:20:14  <piscisaureus_>Maybe it's different on 32-bit windows ... ?
17:21:24  * TooTallNatejoined
17:23:41  * dvvjoined
17:23:46  <dvv>Hi!
17:25:34  <dvv>Doing two subsequent uv_write()s to a socket (63 octet in sum) slows things down by circa 40 times with respect to one write of the same size. Is it possible?
17:30:03  * AndreasMadsenquit (Remote host closed the connection)
17:35:05  * orlandovftwquit (Quit: leaving)
17:45:22  * hij1nxjoined
17:51:51  * paddybyersjoined
17:51:59  * AndreasMadsenjoined
17:54:14  * mikealquit (Quit: Leaving.)
18:02:37  <piscisaureus_>isaacs: did the msft meeting get canned?
18:02:43  <piscisaureus_>isaacs: or are we still having it today?
18:03:02  <isaacs>piscisaureus_: let's do one last one today
18:03:19  <isaacs>piscisaureus_: and then start doing the weekly standup
18:03:44  <piscisaureus_>k
18:04:18  * dylukesquit (Quit: Pipes are broken. Sending packets via Fedex.)
18:04:48  * dshaw_joined
18:05:27  * pieternquit (Remote host closed the connection)
18:05:40  * pieternjoined
18:05:42  * perezd_joined
18:06:09  * dapquit (Quit: Leaving.)
18:06:33  * perezdquit (Ping timeout: 265 seconds)
18:06:34  * perezd_changed nick to perezd
18:06:35  * pieternquit (Remote host closed the connection)
18:09:08  <indutny>isaacs: ping
18:09:19  * pieternjoined
18:11:34  * AvianFluquit (Quit: Leaving)
18:15:07  * AvianFlujoined
18:17:21  * dapjoined
18:18:24  * brsonjoined
18:21:09  * brsonquit (Client Quit)
18:21:21  * brsonjoined
18:21:34  * brsonquit (Client Quit)
18:26:16  * dap1joined
18:29:49  * dapquit (Ping timeout: 245 seconds)
18:31:30  <isaacs>indutny: hey
18:31:55  <indutny>isaacs: https://github.com/indutny/node/commit/e93d2c2b2aab2f557b7250b01d1b0ba7df2cac44
18:32:04  <indutny>isaacs: can you try that? (with reverting 50ms commit)
18:32:10  <isaacs>sure, one sec
18:33:03  <isaacs>running make test now
18:33:57  <isaacs>whoops, had a stray v0.6 node runnign
18:34:06  <isaacs>tests seem to pass ok
18:34:11  <indutny>woow
18:34:23  <indutny>that's what I was afraid of
18:34:25  <isaacs>gonna try the repeated abusive test...
18:34:27  <isaacs>one sec
18:35:07  <indutny>if it fixes our problem then we was misusing API all that time :D
18:35:21  <indutny>probably it was broken and we thought that was a feature :)
18:35:26  <isaacs>indutny: if you do ^D then it freezes.
18:35:36  <indutny>isaacs: ^D on what?
18:35:36  <isaacs>i think that might be a bug in the new repl stuff, though
18:35:38  <isaacs>TooTallNate: ^
18:35:44  <isaacs>indutny: on the debugger
18:35:49  * orlandovftwjoined
18:35:58  <isaacs>TooTallNate: run this: ./node debug test/fixtures/breakpoints.js
18:36:01  <isaacs>TooTallNate: then press ^D
18:36:04  <indutny>a repl bug
18:36:10  <isaacs>stdin closes, but the debugger doesn't quit.
18:36:11  <indutny>./node debug lib/fs.js
18:36:40  <TooTallNate>isaacs: ok that's a bug i think
18:36:44  <isaacs>yeah
18:36:46  <TooTallNate>^D should emit 'exit' on a repl
18:36:56  <TooTallNate>one sec, should be easy
18:36:59  <isaacs>right, so i think maybe the debugger isn't catching it, or it's not getting emitted
18:37:04  <isaacs>looks like a little thing, probably
18:37:11  * dylukesjoined
18:37:11  <indutny>so about debugger
18:37:16  <indutny>lets pull that if it works
18:37:18  <isaacs>indutny: otherwise, it seems like this patch works
18:37:24  <indutny>isaacs: cool
18:37:32  <isaacs>and it's the least hacky
18:37:42  <indutny>even more, it's not hacky at all :)
18:37:45  <isaacs>100 tests in a row passed with it
18:38:03  <indutny>cool
18:38:07  <indutny>going to push it
18:38:07  <isaacs>so i'm convinced
18:38:10  <isaacs>yes.
18:38:16  <isaacs>please change the message
18:38:25  <isaacs>it's not a possible fix. Have confidence! it IS a fix!
18:38:29  <indutny>haha
18:38:33  <indutny>that's a temporary message :)
18:38:58  <isaacs>for sure
18:39:02  <isaacs>lgtm, though
18:39:04  <isaacs>thanks!
18:40:32  <indutny>np
18:40:59  <indutny>isaacs: https://github.com/indutny/node/commit/5e8c2b0768f32051457cb6cb7e068722e4348fa4
18:41:06  <indutny>isaacs: please review message
18:41:26  <isaacs>indutny: lgtm!
18:41:35  <indutny>ok, pushing to master with a 50ms commit revert
18:41:47  <indutny>should we backport that to v0.6.x
18:41:47  <indutny>?
18:41:49  <CIA-99>node: Fedor Indutny master * r5e8c2b0 / src/node.cc :
18:41:49  <CIA-99>node: debugger: use v8 api to wait for a connection
18:41:49  <CIA-99>node: Use v8::Debug::EnableAgent(_, _, true) to wait for incoming
18:41:49  <CIA-99>node: debugger-client connection before emitting any break (or other) events.
18:41:49  <CIA-99>node: This commit should fix test/simple/test-debugger-repl faults. - http://git.io/hWikww
18:41:50  <CIA-99>node: Fedor Indutny master * r0022477 / src/node.js :
18:41:50  <CIA-99>node: Revert "debug: Wait 50ms before running the main module"
18:41:50  <CIA-99>node: This reverts commit c781f17742170f2e127f9ee6652c56b406c30586. - http://git.io/ZO4ClQ
18:41:53  <indutny>or is v0.6 freezed?
18:44:23  * theColejoined
18:45:02  <piscisaureus_>indutny: you can backport it if it fixes bugs and does not introduce contract changes
18:45:26  <indutny>piscisaureus_: no contract changes, but lets see how it'll behave in master first
18:46:37  * mikealjoined
18:49:25  <piscisaureus_>TooTallNate: yt?
18:49:36  <TooTallNate>piscisaureus_: sup?
18:49:48  <piscisaureus_>TooTallNate: did you see isaacs' message about the weekly call?
18:49:58  <TooTallNate>ya
18:50:44  <isaacs>indutny: yes, this is suitable for v0.6
18:54:18  <indutny>isaacs: ok, lets see what travis will say
18:54:52  <isaacs>:);
18:55:00  * dvvpart
18:55:05  <isaacs>travis has been pretty pleased with us lately
18:55:08  <isaacs>more so than before
18:55:49  * theColequit (Quit: theCole)
18:57:34  <TooTallNate>isaacs: indutny: piscisaureus_: https://github.com/TooTallNate/node/commit/repl-end-emits-exit
18:58:06  * travis-cijoined
18:58:06  <travis-ci>[travis-ci] joyent/node#647 (master - 0022477 : Fedor Indutny): The build is still failing.
18:58:06  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/698e795...0022477
18:58:06  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/959175
18:58:06  * travis-cipart
18:58:23  <indutny>travis-ci: [05:10|% 100|+ 381|- 2]: DoneKilled
18:58:25  <indutny>hehehe
18:58:27  <indutny>eio-race
18:58:32  <indutny>and some cluster test
18:58:55  <isaacs>TooTallNate: looks good. only issue: can you shave 3 chars off the first line of the commit message?
18:59:00  <isaacs>if not, that's fine, too
18:59:21  <isaacs>code looks good, and test ++
18:59:34  <TooTallNate>yup, commit message redone
19:00:18  <piscisaureus_>huh
19:00:27  <piscisaureus_>TooTallNate: why would you want to emit end on stdin?
19:00:44  <TooTallNate>piscisaureus_: when not in "raw" mode, that's what ^D normally does
19:01:05  <piscisaureus_>TooTallNate: well, I'd think ^D would actually close the thing right?
19:01:14  <TooTallNate>piscisaureus_: it might be better to emit something on the readline itself though
19:01:22  <TooTallNate>piscisaureus_: there used to be a "close" event
19:01:39  <TooTallNate>or we could just to "end" on the readline
19:01:49  <TooTallNate>piscisaureus_: i agree though, this is wrong
19:02:01  <TooTallNate>anyone piping process.stdin would get an unwanted surprise there
19:02:14  <TooTallNate>isaacs: preference on an event name?
19:03:00  <TooTallNate>rli.on('^D', ...) :D
19:03:29  <isaacs>ew
19:03:35  <TooTallNate>was kidding
19:03:36  <isaacs>what's wrong with emitting 'end' there?
19:03:54  <TooTallNate>isaacs: readline shouldn't emit events on it's streams, but rather on itself
19:04:01  <isaacs>hm. yeah, i guess that's true.
19:04:12  <TooTallNate>isaacs: if someone was piping stdin separate from the readline, then it would stop there
19:04:19  <TooTallNate>which is probably undesireable
19:04:25  <isaacs>so just do this in there instead of emitting?
19:04:26  <isaacs>+ self.rli.output.write('\n');
19:04:27  <isaacs> 173
19:04:27  <isaacs>+ self.emit('exit');
19:04:29  <isaacs> 174
19:04:58  <piscisaureus_>TooTallNate: if the user uses a socket for the repl it has to clean it up somehow.
19:04:58  <TooTallNate>isaacs: repl emits 'exit'; that's fine. but we need an event name for the readline instance
19:05:00  <isaacs>maybe add a readline.end() method
19:05:36  <TooTallNate>isaacs: piscisaureus_: we're just trying to think of an event name that rli should emit when ^D is pressed
19:05:40  <isaacs>so, instead of this.input.emit('end') just do this.emit('end')
19:05:41  <piscisaureus_>aah
19:05:45  <piscisaureus_>end would make sense there
19:05:48  <TooTallNate>when ^C is pressed, 'SIGINT' gets emitted
19:06:05  <TooTallNate>isaacs: ya that would be fine
19:06:12  <TooTallNate>as long as everyone is fine with "end"
19:06:17  <piscisaureus_>I am fine I guess
19:06:25  <TooTallNate>ok one sec
19:06:29  <isaacs>TooTallNate: then the repl.js, you need to listen to input.on('end') as well as rli.on('end')?
19:06:29  <TooTallNate>we'll have to document it too
19:06:52  <piscisaureus_>Ir the rli has to emit end when the input does that
19:06:58  <piscisaureus_>s/Ir/Or
19:07:00  <TooTallNate>isaacs: well... maybe... i think if it's not in 'terminal' mode then ^D would emit end on process.stdin
19:07:16  <piscisaureus_>TooTallNate: well
19:07:51  <TooTallNate>hmmm, tough call
19:07:58  <piscisaureus_>TooTallNate: ^D closes the pipe, which makes libuv read 0 bytes, which in turn is emitted as end
19:08:20  <TooTallNate>^ that's when *not* in raw mode though, right?
19:08:33  <piscisaureus_>TooTallNate: emitting "end" on stdin is a variation on cargo cult programming I'd say
19:08:54  * TooTallNategoogles "cargo cult programming"
19:09:09  <piscisaureus_>TooTallNate: yes, in raw mode ^C and ^D are just passon on as keypresses
19:09:22  <TooTallNate>so here's the discrepancy:
19:09:23  <piscisaureus_>TooTallNate: http://en.wikipedia.org/wiki/Cargo_cult
19:09:47  <piscisaureus_>also http://en.wikipedia.org/wiki/Cargo_cult_programming
19:09:47  <TooTallNate>when not in "terminal" mode, readline emits "SIGINT" (and potentially "end" as we are talking about)
19:10:02  <TooTallNate>err, ^ i mean when *in" terminal mode
19:10:14  <TooTallNate>but when *not* in terminal mode, ^C would exit the process
19:10:19  <TooTallNate>^D would emit 'end' on stdin
19:12:16  <TooTallNate>so for "repl" to emit "exit" on: ".exit", 2 ^C's, or ^D
19:12:27  <TooTallNate>2 ^C's is only possible in 'terminal' mode
19:12:39  <TooTallNate>but .exit and ^D should be possible
19:12:45  <isaacs>yeah, don't emit anything on stdin.
19:12:56  <piscisaureus_>TooTallNate: actually, I think ^D does not actually close stdin
19:12:57  <TooTallNate>isaacs: ya i agree
19:12:57  <isaacs>just emit on the rli itself, and exit the repl based on that
19:13:28  <piscisaureus_>TooTallNate: It'll just flush the readline buffer into the application
19:13:45  <piscisaureus_>so if you do it when the readline is empty, the application will see 0 bytes
19:13:50  <piscisaureus_>and interpret that as ed
19:13:52  <piscisaureus_>*end
19:14:09  <TooTallNate>piscisaureus_: are you talking about when in 'terminal' mode or not?
19:14:13  <piscisaureus_>But I think after that you can just carry on reading
19:14:18  <piscisaureus_>when in readline mode
19:14:23  <piscisaureus_>so, not terminal mode
19:15:39  <TooTallNate>piscisaureus_: im getting 'end' on ^D
19:15:48  <TooTallNate>in regular (readline) mode
19:16:43  * mikealquit (Quit: Leaving.)
19:17:35  <piscisaureus_>TooTallNate: I know, because that's how libuv interprets that
19:17:43  <piscisaureus_>you know what, never mind\
19:17:50  <piscisaureus_>just emit something on readline
19:19:39  <piscisaureus_>TooTallNate: so here are the solution space boundaries:
19:19:39  <piscisaureus_>(1) don't emit anything on the input stream.
19:19:39  <piscisaureus_>(2) don't close the input if it's stdin (cuz that is not allowed).
19:19:39  <piscisaureus_>(3) Make sure that if the user connects a *socket* to the repl, there is a proper way to clean up the socket after readline stops.
19:20:09  <piscisaureus_>For the rest I don't care much
19:20:20  <TooTallNate>piscisaureus_: ya those are fine constraints
19:20:24  <TooTallNate>and i agree 100%
19:22:32  * dylukesquit (Quit: Pipes are broken. Sending packets via Fedex.)
19:25:31  * dylukesjoined
19:25:44  <TooTallNate>piscisaureus_: how do you feel about having the readline instance re-emit 'end' on itself when a real one happend on the input stream?
19:25:59  <TooTallNate>piscisaureus_: that way a user of readline doesn't need to listen for 'end' in 2 places
19:28:20  <piscisaureus_>TooTallNate: +1
19:33:05  * dvvjoined
19:33:37  <dvv>Hi! Should I uv_close() expired one-time timers?
19:33:44  <piscisaureus_>dvv: yes
19:34:08  <dvv>and pass on_close != NULL to uv_close()?
19:34:08  <TooTallNate>piscisaureus_: isaacs: ok i think it's good this time: https://github.com/TooTallNate/node/commit/repl-end-emits-exit
19:34:32  <piscisaureus_>dvv: if they are malloced() you probably will want to free the memory in the close callback
19:34:43  <dvv>right. thanks
19:35:06  <piscisaureus_>dvv: if the uv_timer_t is static then you can probably just leave them alone
19:35:26  <dvv>NULL as callback means "close in sync manner"?
19:35:34  <piscisaureus_>dvv: no that means make no close callback
19:35:41  <dvv>i see
19:35:42  <piscisaureus_>dvv: there is no sync close
19:35:54  <piscisaureus_>although for timers we could probably do that
19:36:07  <piscisaureus_>but we wanted to keep the api consistent
19:36:15  <isaacs>TooTallNate: looks good
19:36:19  <dvv>right
19:36:51  * dap1quit (Quit: Leaving.)
19:37:20  * dapjoined
19:37:31  <TooTallNate>isaacs: actually, gonna add some docs first
19:39:38  * elijah-mbpchanged nick to eli-away
19:42:49  * djegojoined
19:43:40  <TooTallNate>isaacs: piscisaureus_: ok added some docs https://github.com/TooTallNate/node/commit/repl-end-emits-exit
19:43:46  <TooTallNate>gonna land unless there's any last comments
19:43:46  <CIA-99>libuv: Bert Belder reviewme * r144c646 / (test/test-fs-event.c test/test-list.h): Add fs_event_close_with_pending_event test - http://git.io/wlgHUw
19:44:01  <piscisaureus_>igorzi: can you review that? --^
19:44:07  <piscisaureus_>igorzi: will have a patch later today
19:44:18  <piscisaureus_>TooTallNate: will look at it but I have to run (literally) now
19:44:18  * orlandovftwquit (Ping timeout: 244 seconds)
19:44:42  <TooTallNate>piscisaureus_: ok no worries. i'll have isaacs ok it
19:45:33  * travis-cijoined
19:45:33  <travis-ci>[travis-ci] joyent/libuv#150 (reviewme - 144c646 : Bert Belder): The build is still failing.
19:45:33  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/91fa014...144c646
19:45:33  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/959718
19:45:33  * travis-cipart
19:46:01  <igorzi>piscisaureus_: lgtm.. so that reproduces it?
19:49:18  * piscisaureus_quit (Ping timeout: 245 seconds)
19:50:03  * dshaw_quit (Quit: Leaving.)
19:50:06  * igorziquit (Ping timeout: 245 seconds)
19:51:14  * dshaw_joined
19:51:22  * AndreasMadsenquit (Remote host closed the connection)
19:52:10  * orlandovftwjoined
19:55:22  * dshaw_1joined
19:55:29  * paddybyersquit (Quit: paddybyers)
19:55:40  * dshaw_quit (Ping timeout: 244 seconds)
19:57:20  * sh1mmerquit (Quit: sh1mmer)
19:58:39  * igorzijoined
19:58:50  * dylukesquit (Quit: Pipes are broken. Sending packets via Fedex.)
20:05:07  * piscisaureus_joined
20:06:30  <piscisaureus_>igorzi: well, that at least triggers *a* bug
20:06:43  <piscisaureus_>igorzi: because a fs event is reported after close
20:06:48  <piscisaureus_>so now I will fix it
20:07:22  * hij1nxquit (Quit: hij1nx)
20:24:47  <igorzi>https://github.com/igorzi/libuv/commit/917ebd264ab284f6522e6bf684fef5f28174448b
20:24:51  <igorzi>piscisaureus_: ^
20:25:14  * dvvpart
20:25:16  <igorzi>bbiab
20:25:19  <piscisaureus_>igorzi: k, I will take a look
20:25:41  <mjr_>bnoordhuis: I got another one of those TLS related lockups we talked about before, this time on SmartOS.
20:28:03  <ryah>thread local storage or transport layer security?
20:29:43  <tjfontaine>the former I think
20:32:59  * mikealjoined
20:34:51  * brsonjoined
20:37:04  <piscisaureus_>TooTallNate: your patch lgtm
20:45:28  * travis-cijoined
20:45:28  <travis-ci>[travis-ci] Skomski/node#1 (cleanup-nodeos - 8b8b999 : Karl Skomski): The build failed.
20:45:28  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/83aae35^...8b8b999
20:45:28  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960057
20:45:28  * travis-cipart
20:46:01  * dshaw_joined
20:46:48  * dshaw_1quit (Ping timeout: 245 seconds)
20:51:06  * travis-cijoined
20:51:06  <travis-ci>[travis-ci] Skomski/node#2 (cleanup-nodeos - c5f3730 : Karl Skomski): The build is still failing.
20:51:06  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/8b8b999...c5f3730
20:51:06  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960116
20:51:06  * travis-cipart
20:55:27  <TooTallNate>piscisaureus_: thanks
20:55:30  <CIA-99>node: Nathan Rajlich master * rf41901c / (5 files in 3 dirs):
20:55:30  <CIA-99>node: repl: make ^D emit an 'end' event on the readline instance
20:55:30  <CIA-99>node: Also emit 'exit' on the repl when 'end' is emitted on the readline.
20:55:30  <CIA-99>node: Fixes `node debug test/fixtures/breakpoints.js` when ^D is pressed. - http://git.io/FU68VA
20:56:15  <bnoordhuis>mjr_: the write loop?
20:57:39  <mjr_>bnoordhuis: yep
20:57:44  <mjr_>But this time, I got a core
20:57:49  <bnoordhuis>woo!
20:57:58  <mjr_>oh, and this! http://ranney.com/stuck.svg
20:58:33  <bnoordhuis>intriguing
20:58:47  <mjr_>Not sure if that helps with anything, but it looks awesome.
21:01:43  <bnoordhuis>mjr_: can you upload the binary and the core file somewhere? i can probably look at it tomorrow
21:01:53  <CIA-99>libuv: Bert Belder v0.6 * r7e8fe3e / test/test-fs-event.c : test-fs-event.c: style - http://git.io/VvtHMw
21:01:56  <CIA-99>libuv: Bert Belder reviewme * r732cf91 / (test/test-fs-event.c test/test-list.h): Test: verify that no callbacks are made after closing an fs event watcher - http://git.io/mI3Dnw
21:01:57  <CIA-99>libuv: Bert Belder reviewme * r89303f3 / test/test-fs-event.c : Fs event tests: don't fail if a previously failed test left stray files - http://git.io/dnl1cA
21:01:59  <CIA-99>libuv: Bert Belder reviewme * r1795427 / src/win/fs-event.c : Windows: never call fs event callbacks after closing the watcher - http://git.io/d2P-yw
21:02:00  <CIA-99>libuv: Bert Belder reviewme * raff0783 / (test/test-fs-event.c test/test-list.h): Test: verify that uv_close from an fs event callback works properly - http://git.io/R0pXRA
21:02:54  <piscisaureus_>igorzi: can you review ^ ?
21:03:03  <piscisaureus_>igorzi: this should fix the fs event issues
21:03:53  * travis-cijoined
21:03:53  <travis-ci>[travis-ci] Skomski/node#5 (master - 1cba068 : Karl Skomski): The build failed.
21:03:53  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/0022477...1cba068
21:03:53  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960322
21:03:53  * travis-cipart
21:04:08  * travis-cijoined
21:04:08  <travis-ci>[travis-ci] Skomski/node#3 (cleanup-nodeos - 044d9b3 : Karl Skomski): The build is still failing.
21:04:08  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/c5f3730...044d9b3
21:04:08  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960226
21:04:08  * travis-cipart
21:06:08  <piscisaureus_>mmalecki: can you not make travis a little smarter?
21:06:23  <piscisaureus_>mmalecki: so that it does not post messages for forks?
21:06:55  <TooTallNate>piscisaureus_: i think it only does that when that someone enables it on their account
21:06:57  * dylukesjoined
21:07:05  <TooTallNate>so i think skomski enabled it explicitly
21:07:08  <AvianFlu>yeah, somebody activates the travis hook on their fork for that to happen
21:07:30  <piscisaureus_>mmalecki: or some setting in .travis.yml so that you can specify for which repos it is enabled
21:07:58  <piscisaureus_>mmalecki: right now, to disable travis people basically have to float a patch
21:08:34  <TooTallNate>piscisaureus_: it's off by default though; notifications from your libuv fork don't get shown here
21:09:05  <TooTallNate>but i agree, some solution would be nice :)
21:10:30  <tjfontaine>I'd mostly be content with just not using the current irc notification mechanism and opt for something CIA like that can lurk
21:10:35  * travis-cijoined
21:10:35  <travis-ci>[travis-ci] joyent/libuv#151 (v0.6 - 7e8fe3e : Bert Belder): The build is still failing.
21:10:35  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/8409a67...7e8fe3e
21:10:35  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/960376
21:10:35  * travis-cipart
21:10:47  <piscisaureus_>maybe travis should identify as travis-###
21:10:50  * travis-cijoined
21:10:50  <travis-ci>[travis-ci] Skomski/node#4 (master - 0022477 : Fedor Indutny): The build failed.
21:10:50  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/4515987...0022477
21:10:50  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960298
21:10:50  * travis-cipart
21:11:10  <piscisaureus_>so we can just ban the travis bot for users that we don't want
21:11:30  <tjfontaine>heh, well using the notification api would probably easier
21:12:25  <TooTallNate>is CIA different than the regular github IRC hook?
21:12:34  * travis-cijoined
21:12:34  <travis-ci>[travis-ci] joyent/libuv#152 (reviewme - 1795427 : Bert Belder): The build is still failing.
21:12:34  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/144c646...1795427
21:12:34  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/960379
21:12:34  * travis-cipart
21:13:03  <tjfontaine>TooTallNate: yes, the github (and travis) style just spawn a new connection, join a channel, spew, and quit
21:13:21  <tjfontaine>TooTallNate: where as the cia or hubot stuff you can have persistent connections with
21:13:21  <piscisaureus_>mmalecki: it is not wrong that people enable travis on their fork. Actually, +1
21:13:32  * travis-cijoined
21:13:32  <travis-ci>[travis-ci] joyent/node#648 (master - f41901c : Nathan Rajlich): The build is still failing.
21:13:32  <travis-ci>[travis-ci] Change view : https://github.com/joyent/node/compare/0022477...f41901c
21:13:32  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/node/builds/960319
21:13:32  * travis-cipart
21:13:35  <piscisaureus_>mmalecki: it's just that I don't want to see all the noise
21:14:02  <piscisaureus_>mmalecki: it would also be nice if it could just spit out 1 line instead of 3. Maybe shorten the urls?
21:14:08  <TooTallNate>tjfontaine: so is CIA part of hubot?
21:14:12  <tjfontaine>TooTallNate: no
21:14:19  <TooTallNate>where's the source?
21:14:24  <piscisaureus_>it predates hubot by a decade or so :-)
21:14:31  <TooTallNate>hahah
21:14:32  <tjfontaine>TooTallNate: for the github cia hook?
21:14:43  <TooTallNate>i guess
21:14:49  <TooTallNate>if that's different that the regular one
21:15:16  <TooTallNate>i'm just wondering where this bot came from is all :p
21:15:31  * travis-cijoined
21:15:31  <travis-ci>[travis-ci] Skomski/node#7 (master - 1cba068 : Karl Skomski): The build is still failing.
21:15:31  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/698e795...1cba068
21:15:31  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960445
21:15:31  * travis-cipart
21:15:40  <tjfontaine>well as piscisaureus_ mentions, its an ancient mechanism developed back when most of us used cvs
21:16:07  <TooTallNate>sure
21:16:08  <tjfontaine>TooTallNate: http://cia.vc/ it has had a storied past
21:16:18  * rendarquit
21:16:25  <TooTallNate>bingo
21:16:43  <TooTallNate>ok, i was just wondering where it came from is all; since it's not the regular github IRC hook
21:16:49  <TooTallNate>i like CIA better
21:16:59  <TooTallNate>irc colors and persistent user is nice
21:17:05  <tjfontaine>no, I have taken issue with github about their irc hook, and have in fact banned its use on oftc
21:17:30  <dylukes>So, from an API point of view, which do you guys think is superior:
21:17:44  <dylukes>Callback based API's, or Polling based API's?
21:18:02  <TooTallNate>polling is amost never superior
21:18:48  <dylukes>The one key thing I can think of though is,
21:19:01  <dylukes>callback based API's in a language like C force the user to use a specific event scheduling system.
21:19:28  <pfox___>i think, in libuv, that's kind of the point.
21:19:34  * travis-cijoined
21:19:35  <travis-ci>[travis-ci] Skomski/node#6 (master - 1cba068 : Karl Skomski): The build is still failing.
21:19:35  <travis-ci>[travis-ci] Change view : https://github.com/Skomski/node/compare/698e795...1cba068
21:19:35  <travis-ci>[travis-ci] Build details : http://travis-ci.org/Skomski/node/builds/960442
21:19:35  * travis-cipart
21:19:37  <dylukes>Well, this is my personal musings/code.
21:19:49  <dylukes>For instance, IOCP is a polling interface... but it works quite nicely.
21:20:33  <dylukes>So in a sense, it makes more sense to write a polling based API and expect the users to integrate this into an event system themselves.
21:21:52  <dylukes>Thoughts?
21:22:08  * sh1mmerjoined
21:22:21  * chiltsquit (Remote host closed the connection)
21:29:42  * djegoquit (Quit: leaving)
21:30:02  * chiltsjoined
21:30:24  <piscisaureus_>dylukes: well, I'd say in general polling based APIs are more flexible but callback based APIs are more convenient
21:30:45  <piscisaureus_>but in the end it is possible to map one to another so it's not much of a difference
21:30:49  <dylukes>Right but,
21:30:54  <bnoordhuis>tjfontaine: i'm going to review your monster patch later this week :)
21:30:57  <dylukes>it's easier to map a callback API to a poll API than the reverse.
21:31:05  <dylukes>You just set a value in the callback which is being polled.
21:31:16  <tjfontaine>bnoordhuis: take your time :P
21:31:27  <dylukes>Whereas in the reverse, you have to continuously poll a value until it's changed, and then fire a callback.
21:31:31  <tjfontaine>bnoordhuis: I'm of course not expecting a miracle, and I'm sure there's plenty of work that is going to need done
21:31:49  <piscisaureus_>dylukes: I lost you there
21:31:54  <dylukes>Say you have... IOCP.
21:32:17  <dylukes>You want to set it up so a function gets called when a read is complete.
21:32:42  <dylukes>You have to continuously poll the value w/ GetQueuedCompletionStatus() until you get that it's done,
21:33:01  <dylukes>and then call the callback via the event system.
21:33:15  <dylukes>On the other hand, say you have some API which calls a callback when reading is done.
21:33:23  <dylukes>In that callback you set some "isDone" flag to 1.
21:33:41  <dylukes>See what I mean?
21:34:38  <piscisaureus_>dylukes: well, you don't have to poll continuously. GetQueuedCompletionStatus blocks until it has something to report
21:34:53  <dylukes>Er, right. Wrong function.
21:35:04  <piscisaureus_>dylukes: and if it reports something else than what you're waiting for, you probably want to handle that too
21:35:04  <dylukes>I forget which one just gives you a status if there is one and always returns immediately.
21:35:09  <dylukes>Sure.
21:35:16  <piscisaureus_>HasOverlappedIoCompleted?
21:35:25  <dylukes>Right.
21:35:30  <piscisaureus_>yeah
21:35:34  <piscisaureus_>you should not spin on that
21:35:47  <piscisaureus_>if you want to do that with windows, just use GetOverlappedResult with bWait=TRUE
21:35:55  <dylukes>Well my point is that if you want to do a callback based on a polled value,
21:36:03  <dylukes>you pretty much always end up having to either
21:36:04  <dylukes>1) block
21:36:05  <dylukes>2) spin
21:36:24  <piscisaureus_>Yes.
21:36:36  <piscisaureus_>So?
21:36:36  <dylukes>Whereas if you want to set a value to be polled based on a callback,
21:36:40  <dylukes>you just set the value in the callback.
21:36:49  <piscisaureus_>The situation ends up being just the same
21:36:58  <piscisaureus_>You block or you spin
21:37:10  <dylukes>I mean... really any program either blocks or spins :P. or exits.
21:37:41  * perezd_joined
21:38:12  <piscisaureus_>Yeah. Well that sounds pretty crappy to me. Polling is a bad idea in 99% of the cases anyway
21:39:35  <igorzi>piscisaureus_: lgtm
21:39:39  <piscisaureus_>Unless you have work to do if the poll doesn't report anything
21:40:00  <CIA-99>libuv: Bert Belder v0.6 * raff0783 / (test/test-fs-event.c test/test-list.h): Test: verify that uv_close from an fs event callback works properly - http://git.io/R0pXRA
21:40:01  <CIA-99>libuv: Bert Belder v0.6 * r1795427 / src/win/fs-event.c : Windows: never call fs event callbacks after closing the watcher - http://git.io/d2P-yw
21:40:02  <CIA-99>libuv: Bert Belder v0.6 * r89303f3 / test/test-fs-event.c : Fs event tests: don't fail if a previously failed test left stray files - http://git.io/dnl1cA
21:40:03  <CIA-99>libuv: Bert Belder v0.6 * r732cf91 / (test/test-fs-event.c test/test-list.h): Test: verify that no callbacks are made after closing an fs event watcher - http://git.io/mI3Dnw
21:40:10  <dylukes>right, but writing a cross platform API when you don't want to tie in a dependency on say, libev/libuv...
21:40:17  <dylukes>kind of forces you to use some sort of polling.
21:40:35  <dylukes>(or a hybrid, with polling guaranteed on all platforms, and callbacks on most or specific ones)
21:40:36  * perezdquit (Ping timeout: 272 seconds)
21:40:36  * perezd_changed nick to perezd
21:40:56  <piscisaureus_>dylukes: well, libuv can do without polling, so why can't you?
21:41:46  * travis-cijoined
21:41:47  <travis-ci>[travis-ci] joyent/libuv#153 (v0.6 - 1795427 : Bert Belder): The build is still failing.
21:41:47  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/7e8fe3e...1795427
21:41:47  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/960879
21:41:47  * travis-cipart
21:42:11  <dylukes>piscisaureus_: Because I'm not integrating a whole event loop :P.
21:42:26  <dylukes>ah well, I'll work it out.
21:42:52  <dylukes>kqueue is a great way for BSD's.
21:42:54  <piscisaureus_>bnoordhuis: so you did some changes to inotify.c in v0.6. Can this be merged into master?
21:43:01  <dylukes>To avoid spinning, I mean.
21:43:28  <bnoordhuis>piscisaureus_: yes
21:43:35  * paddybyersjoined
21:47:06  <CIA-99>libuv: Bert Belder master * r6e0ca3a / (src/win/fs-event.c test/test-fs-event.c test/test-list.h):
21:47:06  <CIA-99>libuv: Merge branch 'v0.6'
21:47:06  <CIA-99>libuv: Conflicts:
21:47:06  <CIA-99>libuv: src/unix/linux/inotify.c (+5 more commits...) - http://git.io/2dQ0Fg
21:49:03  * travis-cijoined
21:49:03  <travis-ci>[travis-ci] joyent/libuv#154 (master - 6e0ca3a : Bert Belder): The build is still failing.
21:49:03  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/40e6373...6e0ca3a
21:49:03  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/960940
21:49:03  * travis-cipart
21:52:55  * hij1nxjoined
21:56:41  <piscisaureus_>igorzi: oh man, that patch is massive
21:58:12  <dylukes>Hrm. piscisaureus_, if I want to update my patch to stay relevant, should I just rebase it on master?
21:59:11  <igorzi>piscisaureus_: yeah
22:02:27  <piscisaureus_>dylukes: yeah, but you can also wait a little bit/
22:02:37  <piscisaureus_>dylukes: otherwise we'll keep you busy
22:02:52  <piscisaureus_>dylukes: if you really feel like it now, you can do it.
22:03:05  <dylukes>Just wondering for future reference ;P.
22:03:23  <bnoordhuis>piscisaureus_: there are a couple of duplicate commits in master
22:03:38  <bnoordhuis>163d8de and aff94a0 for example
22:04:06  <bnoordhuis>not a big issue though
22:04:38  <piscisaureus_>bnoordhuis: yeah, sometimes I landed patches on two branches
22:05:02  <dylukes>easy to squash later.
22:05:03  <piscisaureus_>bnoordhuis: but i just merged 0.6 into master so it shouldn't hurt
22:05:26  <dylukes>oh lord. You guys will keep me busy indeed ^^.
22:05:36  <dylukes>If I were to continuously rebase that is.
22:12:56  <tjfontaine>dylukes: it's generally only necessary to rebase for your own sanity checking if you think something might affect your changes, or if someone needs you to rebase so a merge will go cleanly
22:13:34  <dylukes>Well, the thing is my changes likely affect a lot of other peoples.
22:13:45  <dylukes>Since I changed the API for at least half a dozen udp/tcp functions.
22:13:58  <dylukes>And I modified a dozen and a half to two dozen unit tests.
22:13:59  * mikealquit (Quit: Leaving.)
22:14:04  <dylukes>(to reflect the API changes)
22:14:12  <tjfontaine>dylukes: the basic idea will be there for what you're doing though, that's generally enough to review unless they want to run tests against master, which at that point they'll likely ask you to rebase
22:14:25  <dylukes>mm.
22:15:45  <TooTallNate>isaacs: ping
22:17:31  <isaacs>hi
22:17:51  <TooTallNate>isaacs: how does npm do it's proxy server settings?
22:18:00  <isaacs>TooTallNate: it uses request
22:18:08  <isaacs>TooTallNate: at this point, npm doesn't do anything special with proxies ever
22:18:13  <isaacs>it just says, "Hey, request, use this proxy!"
22:18:19  <TooTallNate>isaacs: sure, i mean how/where is it configured?
22:18:29  <piscisaureus_>igorzi: why do you add stuff to run-tests.c?
22:18:55  <piscisaureus_>igorzi: is it not reasonably possible to put this in a test file?
22:19:37  <TooTallNate>isaacs: why i'm asking is: when npm invokes node-gyp, it should pass on it's "proxy" setting when set
22:19:49  <isaacs>oh, ok
22:20:00  <isaacs>TooTallNate: you can get the proxy setting from process.env.npm_config_proxy i bet
22:20:12  <isaacs>TooTallNate: since node-gyp is being invoked in the npm lifecycle script
22:20:19  <TooTallNate>isaacs: ok i'll play with that
22:20:39  <TooTallNate>i figured you were already doing something awesome like that :)
22:20:58  * mikealjoined
22:21:24  <isaacs>:)
22:23:01  <igorzi>piscisaureus_: yeah, i'll move it
22:27:19  <TooTallNate>isaacs: cool, that was easy. node-gyp v0.3.8 (just published) uses npm proxy setting when set :)
22:28:15  <isaacs>sweet
22:30:54  * k-schanged nick to k-s[AWAY]
22:32:45  <piscisaureus_>igorzi: I finished the review and added comments. I is starting to be difficult to hold the entire picture in my head, but I think it'll work :-)
22:34:27  <igorzi>piscisaureus_: thx
22:37:19  <piscisaureus_>igorzi: so my greatest concern are in setting the socket to blocking, and changing the linger option. We have to be absolutely sure that this does not effect the socket in the other process.
22:37:36  <igorzi>piscisaureus_: yeah, i'll verify
22:38:00  <igorzi>piscisaureus_: if that's the case though.. then we're kind of screwed
22:38:08  <piscisaureus_>yep ;-(
22:41:58  <piscisaureus_>igorzi: I think SO_LINGER is not shared but FIONIO is
22:42:09  <piscisaureus_>er, FIONBIO *might be*
22:51:32  * dylukesquit (Quit: Computer has gone to sleep.)
22:55:23  <piscisaureus_>igorzi: actually, I have a better idea of some sorts
22:56:03  <piscisaureus_>igorzi: because this comment from socket.c also concerns me
22:56:08  <piscisaureus_>. // If linger is set on the socket and is connected, then perform a
22:56:08  <piscisaureus_>. // graceful disconnect with the specified timeout. Note that if
22:56:08  <piscisaureus_>. // this socket handle has been exported to a child process, then the
22:56:08  <piscisaureus_>. // child won't be able to access the socket after this. There is no
22:56:08  <piscisaureus_>. // reasonable way around this limitation since there is no way to
22:56:09  <piscisaureus_>. // obtain the handle count on a socket to determine whether other
22:56:09  <piscisaureus_>. // processes have it open.
22:57:01  <igorzi>piscisaureus_: what's the better idea?>
22:57:35  <piscisaureus_>igorzi:
22:57:41  <piscisaureus_>1. set SO_SNDBUF to 0
22:57:46  <piscisaureus_>2. write 0 bytes
22:57:50  <piscisaureus_>3. wait for it to complete
22:57:58  <piscisaureus_>4. restore SO_SNDBUF
22:58:02  <piscisaureus_>5. close
22:58:15  <piscisaureus_>I am not sure if #1 is allowed while the socket is operating
22:58:41  <piscisaureus_>igorzi: http://support.microsoft.com/kb/181611 suggests that if you set SO_SNDBUF to 0 your writes won't complete until they are ACKed.
23:00:50  <igorzi>piscisaureus_: what about the pending read? i think the connection would still get aborted if there's a pending read
23:02:04  <piscisaureus_>igorzi: does it really get aborted?
23:02:16  <igorzi>piscisaureus_: yes.. that's the issue
23:02:31  <piscisaureus_>igorzi: yeah well... the problem is that the write queue is not drained before the socket is closed
23:02:36  <igorzi>piscisaureus_: the writes actually get put on the wire
23:02:39  <igorzi>piscisaureus_: yes it is
23:03:07  <piscisaureus_>igorzi: but if another process holds the socket open the write shouldn't be discarded right?
23:04:03  <piscisaureus_>igorzi: do you know where this abort happens? is it in the kernel driver?
23:04:07  <igorzi>piscisaureus_: i don't think it matters.. if you do closesocket and if there's a pending read on the socket in your process the connection gets aborted
23:04:32  <igorzi>piscisaureus_: no, i don't know exactly where it happens
23:04:34  <piscisaureus_>igorzi: so... the closesocket trick with linger shouldn't work either?
23:06:28  <piscisaureus_>igorzi: so the linger implementation of the "default" lsp is just this:
23:07:19  <piscisaureus_>while (not_timed_out && have_pending_writes()) Sleep(T); closesocket()
23:10:20  * mikealquit (Quit: Leaving.)
23:10:24  <igorzi>piscisaureus_: hmm.. you're right.. linger should also cause the socket to be aborted
23:10:28  <igorzi>piscisaureus_: but it doesn't
23:10:34  <igorzi>piscisaureus_: let me find out more
23:11:02  <igorzi>piscisaureus_: sorry, meant "but it does"
23:12:32  <piscisaureus_>igorzi: I can see in WSPClosesocket that it sends and IOCTL_AFD_PARTIAL_DISCONNECT message
23:12:42  <piscisaureus_>(which is kernelspeak for shutdown(SD_SEND))
23:12:50  * skomskiquit (Quit: Leaving.)
23:13:03  <piscisaureus_>oh wait no worse
23:13:11  <piscisaureus_>it sets the AFD_ABORTIVE_DISCONNECT flag
23:13:19  <piscisaureus_>so it is... bad
23:14:07  <piscisaureus_>Now I am really confused
23:15:59  * paddybyersquit (Quit: paddybyers)
23:21:50  <TooTallNate>piscisaureus_: bnoordhuis: isaacs: review? https://github.com/TooTallNate/node/commit/repl-writer-option
23:22:13  <TooTallNate>piscisaureus_: ^ that's required for the next patch: adding the "useColors" option
23:23:30  <bnoordhuis>TooTallNate: lgtm. does it work?
23:23:43  <TooTallNate>bnoordhuis: is that a hint for a test?
23:24:08  <bnoordhuis>TooTallNate: a test would be good
23:24:58  <TooTallNate>bnoordhuis: i can do that
23:25:15  <bnoordhuis>i know you can, nathan, i have faith in you
23:25:25  * dshaw_1joined
23:25:30  <TooTallNate>:p
23:27:38  * dshaw_quit (Ping timeout: 240 seconds)
23:30:58  <isaacs>yeah, seems uncontroversial to me as well
23:31:04  <isaacs>as long as it doesn't break anything else
23:31:09  <piscisaureus_>igorzi: hey, so. I found another issue with your code. You should not check for UV_HANDLE_READING but instead check if a read req is pending.
23:31:12  <isaacs>(would be surprised if it did.)
23:31:40  <piscisaureus_>igorzi: because if the user calls uv_close from the read callback the reading flag will be set but there is no actual read pending at that point
23:31:46  <igorzi>piscisaureus_: please put a comment about this into the commit
23:34:14  * mikealjoined
23:34:28  <piscisaureus_>igorzi: also, I think that CancelIo should work for LSPs if they are IFS, because then the io is managed by the io manager. (And the handle is not an arbitrary number provided by a user-mode wrapper).
23:34:32  <piscisaureus_>will put a comment in
23:35:13  <piscisaureus_>igorzi: so let's declare defeat
23:35:33  * perezd_joined
23:36:00  <piscisaureus_>igorzi: I mean, we are kind of stumbling in the dark here. Who knows what the exact behaviour of *some random non-ifs lsp* is. We have no source code, no non-ifs driver and no way to test it.
23:36:23  <piscisaureus_>igorzi: Making assumptions based on the AFD implementation is probably not going to work here.
23:37:56  <piscisaureus_>igorzi: so maybe we should just fprintf(stderr, "Congratulations. You are treading territory where no man has gone before. You are truly a very bald man. Go get your price at 1 Microsoft Drive, Redmond WA, a creampie with a long history."
23:38:04  <piscisaureus_>and do nothing
23:38:11  <bnoordhuis>bald man, creampie?
23:38:19  <bnoordhuis>i don't want to know
23:38:25  * perezdquit (Ping timeout: 276 seconds)
23:38:33  <piscisaureus_>hmm
23:38:56  <piscisaureus_>Judging by the google images search result creampie is not the proper translation of "slagroomtaart"
23:39:18  <piscisaureus_>ah cream cake
23:39:21  <igorzi>piscisaureus_: we have a way to know if there's non-ifs lsp, no?
23:39:33  <piscisaureus_>igorzi: I think the code is already in there
23:39:49  <igorzi>piscisaureus_: yeah.. we can just disable this feature altogether if we detect one
23:39:54  <piscisaureus_>igorzi: to enable/disable SetFileHandleFuabarMode
23:40:04  <igorzi>piscisaureus_: (passing connections over ipc)
23:40:07  <piscisaureus_>yeah
23:40:24  <piscisaureus_>igorzi: I think we can even just keep it enabled.
23:40:38  <piscisaureus_>because I expect that people will actually do this from a read callback
23:40:39  * perezdjoined
23:41:17  <piscisaureus_>I mean, you read http headers, then lay off the socket to a child process to send the response.
23:41:26  <piscisaureus_>Which is the only valid use case anyway
23:41:38  * perezd_quit (Ping timeout: 240 seconds)
23:41:45  <igorzi>piscisaureus_: yeah true.. if people are implementing some type of a load-balancer.. they'll need to read some data out of the socket first
23:43:26  <piscisaureus_>igorzi: exactly. And they will probably close() from a read callback :-)
23:43:34  <piscisaureus_>unless they fiddle with nextTick
23:43:55  <igorzi>yep
23:44:02  <piscisaureus_>and forget to call pause()
23:44:03  * isaacsquit (Remote host closed the connection)
23:44:27  * dylukesjoined
23:52:27  * dshaw_joined
23:54:41  * dshaw_1quit (Ping timeout: 246 seconds)
23:57:30  * k-s[AWAY]changed nick to k-s