00:04:29  * duncanbeeversjoined
00:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 12]
00:34:50  <Raynos>isaacs: readable streams are just hard is all :(
00:34:54  <Raynos>writable streams are easy
00:42:55  * ryan_stevensjoined
01:10:11  * niftylettucejoined
01:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 22]
02:00:14  * ryan_stevensquit (Quit: Leaving.)
02:19:59  <rowbit>Hourly usage stats: [developer: 1, free: 4]
02:21:37  <Raynos>dominictarr: https://gist.github.com/3802935
02:31:19  * ryan_stevensjoined
02:52:27  * ryan_stevensquit (Quit: Leaving.)
03:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 14]
03:31:04  * AvianFluquit (Remote host closed the connection)
04:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 8]
05:09:40  * Raynosquit (Ping timeout: 246 seconds)
05:10:54  * Raynosjoined
05:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 23]
05:41:39  <Raynos>https://github.com/Raynos/mongo-stream#example
05:41:43  <Raynos>Now stream mongo!
05:54:08  * sorensenquit (Ping timeout: 268 seconds)
05:55:04  * chapelquit (Read error: Operation timed out)
05:57:30  * chapeljoined
05:57:56  * sorensenjoined
06:04:10  * shykeschanged nick to zz_shykes
06:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 19]
06:23:10  * sveisveiquit (Ping timeout: 246 seconds)
06:23:28  * sveisveijoined
07:01:48  <Raynos>https://github.com/Raynos/chain-stream#example
07:14:04  * zz_shykeschanged nick to shykes
07:19:04  * shykeschanged nick to zz_shykes
07:19:59  <rowbit>Hourly usage stats: [developer: 1, free: 8]
07:54:57  * shuaibjoined
07:56:43  * AvianFlujoined
08:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 14]
08:57:41  * shuaibquit (Ping timeout: 245 seconds)
09:00:29  * shuaibjoined
09:19:59  <rowbit>Hourly usage stats: [developer: 2, free: 31]
10:12:47  * jibayjoined
10:19:59  <rowbit>Hourly usage stats: [developer: 1, free: 28]
10:31:33  <substack>one thing I've noticed: mac usage is slightly lower among aspiring mad scientist eccentrics
10:31:42  <substack>YOU KNOW WHO YOU ARE
10:31:43  <LOUDBOT>NEVERMIND!
10:49:43  * st_lukejoined
11:01:19  * st_lukequit (Remote host closed the connection)
11:16:04  * st_lukejoined
11:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 22]
11:31:56  * st_lukequit (Remote host closed the connection)
11:50:50  * shuaibquit (Quit: Textual IRC Client: http://www.textualapp.com/)
12:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 35]
12:30:02  * st_lukejoined
12:31:13  * st_lukequit (Remote host closed the connection)
12:36:17  * st_lukejoined
13:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 26]
13:51:06  * antix_joined
14:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 20]
14:30:54  * paul_irish_changed nick to paul_irish
14:36:38  * st_lukequit (Remote host closed the connection)
14:45:48  * shuaibjoined
14:46:43  * st_lukejoined
15:19:59  <rowbit>Hourly usage stats: [developer: 1, free: 28]
15:33:02  * yorickquit (Remote host closed the connection)
15:39:29  <AvianFlu>HEY LOUDBOT I THINK I MET YOUR COUSIN LAST NIGHT
15:39:29  <LOUDBOT>YOU WILL EAT YOUR DOUGHNUT AND YOU WILL LIKE IT
15:39:42  <AvianFlu>THAT'S FUNNY SHE SAID THE SAME THING
15:39:42  <LOUDBOT>JUST REMEMBER
15:39:48  <AvianFlu>JUST REMEMBER WHAT
15:39:48  <LOUDBOT>CAPTAIN AUSTIN REPORTING FULL OF POOP
16:19:59  <rowbit>Hourly usage stats: [developer: 6, free: 28]
16:58:50  * st_lukequit (Remote host closed the connection)
17:10:06  * zz_shykeschanged nick to shykes
17:19:59  <rowbit>Daily usage stats: [developer: 23, free: 597]
17:20:00  <rowbit>Hourly usage stats: [developer: 1, free: 27]
17:26:19  * shykeschanged nick to zz_shykes
18:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 18]
18:27:15  <Raynos>isaacs: How would you implement concat(readable, readable, ...)
18:27:41  <isaacs>Raynos: what does concat do?
18:27:50  <isaacs>like, return a new stream that reads from the first, then the second, etc.
18:27:51  <isaacs>?
18:28:35  <isaacs>Raynos: make an array of sources, and whenever one ends, move on to the next. when the list is empty, emit 'end'
18:28:42  <isaacs>Raynos: read() reads from the current one
18:28:47  * isaacsgisting
18:28:54  <Raynos>yes
18:29:04  <Raynos>Interesting
18:29:20  <Raynos>isaacs: why in order until consumption instead of one chunk from each round robin
18:33:20  <isaacs>Raynos: https://gist.github.com/3804825
18:33:25  <isaacs>Raynos: untested
18:33:38  <isaacs>Raynos: you could round-robin pretty easily as well
18:34:02  <isaacs>Raynos: also, probably want to r proxy error events, etc.
18:34:37  <Raynos>thats what I was thinking
18:34:41  <Raynos>proxying error events
18:34:42  <isaacs>Raynos: and probably want to assert that every reader is an instanceof Readable
18:34:44  <Raynos>which reminds me
18:34:47  <isaacs>just for safety
18:34:49  <Raynos>proxy stream doesnt do that
18:37:47  <isaacs>Raynos: updated: https://gist.github.com/3804825
18:42:24  <Raynos>Interesting
18:42:27  <Raynos>I tried https://gist.github.com/3804860
18:42:56  <isaacs>Raynos: i think that's overly clever.
18:43:22  <isaacs>Raynos: better to just have a new readable backed by the others.
18:43:23  <isaacs>imo
18:49:50  <Raynos>that has two issues
18:50:01  <Raynos>you have to implement all the readable juggling yourself
18:50:10  <Raynos>when you can just use pipe on the other streams to handle readable for you
18:50:21  <Raynos>secondly you have a new stream and thus a new pipes list
18:50:35  <Raynos>so var a= readable(), b = concat(a, other) b.pipe a.pipe doesn't work
18:50:49  <Raynos>because they have different underlying lists of multiple destinations
18:52:26  <Raynos>isaacs: multi pipe is a real pain when you create new streams backed by others
18:53:24  <isaacs>Raynos: multi pipe is always a pita :)
18:54:03  <Raynos>proxy-stream handles multi pipe for me. That's why I build on it
18:54:43  <Raynos>isaacs: did you see https://gist.github.com/3791742 ?
18:55:19  <isaacs>Raynos: well, actually, this concat i just gisted will handle multi-pipe fine
18:55:34  <isaacs>oh, no, it won't, because it doesn't set the _readableState object, since it doesn't apply Radable
18:56:08  <Raynos>isaacs: if you pipe on one of the underlying streams and then pipe on the new stream returned by concat then those two writable streams go into different destination lists
18:57:04  <isaacs>Raynos: fixed
18:57:18  <isaacs>Raynos: yes, don't do that.
18:57:28  <isaacs>Raynos: when you concat a stream, it's got a new role.
18:57:38  <Raynos>isaacs: psh
18:57:48  <isaacs>Raynos: pipe() was *never* a purely observant operation
18:57:53  <isaacs>Raynos: that was never safe.
18:58:24  <isaacs>Raynos: even with old-style streams, you fuck up your backpressure if you do that
18:58:30  <isaacs>Raynos: for exactly the same reason
18:58:40  <Raynos>you do?
18:58:43  <isaacs>yes.
18:58:49  <Raynos>how do you screw up the back pressure?
18:58:57  <Raynos>oh I see
18:59:03  <isaacs>a.pipe(fastWriter); concat(a).pipe(slowWriter)
18:59:13  <Raynos>pause doesn't propagate backwards
18:59:29  <Raynos>well my implementation of safe pipe works :p
18:59:45  <isaacs>but anyway, old-style streams have this odd mix of active and passive roles.
19:00:01  <isaacs>we can either make them purely passive, but then you lose backpressure/etc.
19:00:06  <isaacs>which is a little bit important.
19:00:26  <isaacs>or we can make them purely active, but then you lose some edge case features that were not really safe in the first place.
19:00:45  <Raynos>its fine
19:00:48  <Raynos>im doing silly stuff
19:00:54  <Raynos>so its allowed to break in my usage
19:01:27  <isaacs>hahah
19:01:28  <isaacs>ok
19:05:01  <Raynos>isaacs: would appreciate feedback on https://gist.github.com/3791742
19:05:28  <isaacs>Raynos: i saw that. i think it's mostly correct.
19:05:41  <isaacs>Raynos: it's on my todo list to pull it in as the docs for Readable Streams
19:05:52  <isaacs>but i need to read it more carefully
19:06:04  <isaacs>Raynos: i just got some data events from yit, didn't actually read() it yet
19:06:17  <Raynos>yit?
19:07:12  <isaacs>s/y //g
19:07:29  <Raynos>oh
19:07:33  <Raynos>a bad streams joke!
19:10:01  <isaacs>yes!
19:10:18  <isaacs>i piped it to too many places, i think, so it got corrupted.
19:10:25  * isaacsrimshot!
19:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 26]
19:50:23  * rannmannquit (Quit: No one is so old as those who have outlived enthusiasm. - Henry David Thoreau)
19:53:23  * rannmannjoined
20:05:46  * mike-djoined
20:09:24  * mike-dquit (Client Quit)
20:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 13]
20:21:14  * jibayquit (Ping timeout: 240 seconds)
20:46:11  * shuaibquit (Quit: Textual IRC Client: http://www.textualapp.com/)
20:57:26  <isaacs>Raynos: added a writable class as well.
20:57:51  <isaacs>Raynos: works the same way, just implement async _write(chunk,cb) and it handles buffering, etc.
21:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 27]
21:22:18  <isaacs>Raynos: so, right now i'm struggling with a way to do Transform streams that will make Zlib trivial
21:23:26  <isaacs>Raynos: the underlying binding looks like: binding.write(flushMode, inputBuffer, in_offset, in_length, outputBuffer, out_offset, out_length, callback)
21:25:23  <isaacs>Raynos: the callback gets called with arguments to tell you how much of the input was consumed, and how much of the output was written.
21:29:41  <isaacs>Raynos: if it didn't consume the entire input, then you have to call it again, with the same buffer, and an updated in_offset value.
21:35:47  <Raynos>isaacs: I saw the writable calss
21:38:07  <Raynos>not sure what to say about zlib
22:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 64]
22:47:12  * chapelquit (Remote host closed the connection)
22:47:12  * sorensenquit (Remote host closed the connection)
22:58:33  * chapeljoined
23:19:59  <rowbit>Hourly usage stats: [developer: 0, free: 93]
23:52:02  * mike-djoined