00:12:31  * xaqquit (Remote host closed the connection)
00:35:35  * Dr_Kquit (Quit: Leaving.)
00:58:52  <rowbit>Hourly usage stats: []
01:20:14  * mikealjoined
01:31:51  * tilgovijoined
01:48:56  <rowbit>SubStack, pkrumins: Encoders down:
01:58:51  <rowbit>Hourly usage stats: []
02:09:27  * AvianFluquit (Quit: Leaving)
02:13:16  <maxogden>tanepiper: hahaha whoa
02:18:20  * AvianFlujoined
02:35:15  <Nexxy>tanepiper, there is a PORTLAND FUCKING OREGON t-shirt
02:35:41  <Nexxy>http://www.flickr.com/photos/willwm/3255854937/lightbox/
02:36:58  * xaqjoined
02:48:45  * ryan_stevensquit (Quit: Leaving.)
02:51:51  <Raynos>SubStack: http://hackforchange12.hackathon.io/teams/create
02:58:51  <rowbit>Hourly usage stats: []
03:11:20  * ryan_stevensjoined
03:17:23  * tilgoviquit (Remote host closed the connection)
03:20:55  * ryan_stevensquit (Quit: Leaving.)
03:23:20  * xaqquit (Remote host closed the connection)
03:24:33  * xaqjoined
03:35:54  * xaqquit (Ping timeout: 246 seconds)
03:36:55  <rowbit>SubStack, pkrumins: Encoders down:
03:39:04  * xaqjoined
03:51:16  * ryan_stevensjoined
03:58:51  <rowbit>Hourly usage stats: []
04:00:45  * xaqquit (Remote host closed the connection)
04:07:27  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
04:12:35  * AvianFluquit (Quit: Leaving)
04:28:41  <Raynos>jesusabdullah: installed two of your modules today. o/
04:29:55  <rowbit>SubStack, pkrumins: Encoders down:
04:33:22  <jesusabdullah>Word
04:35:00  <rowbit>SubStack, pkrumins: Encoders down:
04:36:37  * zz_shykeschanged nick to shykes
04:37:08  <Raynos>jesusabdullah: https://gist.github.com/868407d2bd926e6d61f3
04:37:23  <Raynos>removed a one line function
04:37:25  <Raynos>totally worth it
04:40:51  <jesusabdullah>hah
04:40:53  <jesusabdullah>word
04:42:52  * ryan_stevensquit (Quit: Leaving.)
04:50:56  <rowbit>SubStack, pkrumins: Encoders down:,
04:58:51  <rowbit>Hourly usage stats: []
05:58:51  <rowbit>Hourly usage stats: []
06:30:30  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie8 (Queue length: 1 on 1 servers. Total servers: 3)
06:40:55  <rowbit>SubStack, pkrumins: Encoders down:
06:58:52  <rowbit>Hourly usage stats: []
07:11:27  * dominictarrjoined
07:12:28  <rowbit>SubStack, pkrumins: Encoders down:
07:16:34  <dominictarr>mikeal, hey you there?
07:17:45  <mikeal>yes
07:21:53  <dominictarr>mikeal, cool, I want to talk to you about the stream refactor for 0.9
07:25:54  <mikeal>cant talk about that now
07:25:55  <mikeal>too tired
07:26:03  <mikeal>also, need to talk with isaac more about it
07:26:13  <mikeal>he has crazy ideas
07:26:25  <dominictarr>I wrote up a gist of my thoughts,
07:26:42  <dominictarr>https://gist.github.com/3117184
07:30:11  <dominictarr>my ideas are mostly about tightening up what we've currently got.
07:58:51  <rowbit>Hourly usage stats: []
08:00:31  <rowbit>SubStack, pkrumins: Encoders down:
08:08:57  <rowbit>SubStack, pkrumins: Encoders down:
08:58:51  <rowbit>Hourly usage stats: []
09:10:26  <rowbit>SubStack, pkrumins: Encoders down:
09:12:58  <rowbit>SubStack, pkrumins: Encoders down:
09:19:41  * tm604quit (Quit: Leaving.)
09:20:20  * tm604joined
09:26:02  * shykeschanged nick to zz_shykes
09:28:29  <rowbit>SubStack, pkrumins: Encoders down:,
09:30:26  <rowbit>SubStack, pkrumins: Encoders down:
09:32:56  <rowbit>SubStack, pkrumins: Encoders down:
09:52:10  * dominictarrquit (Remote host closed the connection)
09:58:51  <rowbit>Hourly usage stats: []
09:59:56  <rowbit>SubStack, pkrumins: Encoders down:
10:03:26  <rowbit>SubStack, pkrumins: Encoders down:
10:04:55  <rowbit>SubStack, pkrumins: Encoders down:
10:09:26  <rowbit>SubStack, pkrumins: Encoders down:
10:13:56  <rowbit>SubStack, pkrumins: Encoders down:
10:17:26  <rowbit>SubStack, pkrumins: Encoders down:
10:24:57  <rowbit>SubStack, pkrumins: Encoders down:,,,,,,,,,,,,,,,
10:34:56  <rowbit>SubStack, pkrumins: Encoders down:
10:57:09  * saijanai_quit (Ping timeout: 245 seconds)
10:58:51  <rowbit>Hourly usage stats: []
11:01:43  * saijanai_joined
11:01:55  <rowbit>SubStack, pkrumins: Encoders down:
11:03:26  <rowbit>SubStack, pkrumins: Encoders down:
11:05:56  <rowbit>SubStack, pkrumins: Encoders down:
11:07:26  <rowbit>SubStack, pkrumins: Encoders down:
11:08:26  <rowbit>SubStack, pkrumins: Encoders down:
11:11:56  <rowbit>SubStack, pkrumins: Encoders down:
11:29:26  <rowbit>SubStack, pkrumins: Encoders down:
11:30:25  <rowbit>SubStack, pkrumins: Encoders down:
11:32:26  <rowbit>SubStack, pkrumins: Encoders down:
11:58:51  <rowbit>Hourly usage stats: []
12:00:34  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
12:00:34  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
12:49:59  <rowbit>SubStack, pkrumins: Encoders down:
12:51:00  * wiwilliajoined
12:57:40  * AvianFlujoined
12:58:26  <rowbit>SubStack, pkrumins: Encoders down:
12:58:51  <rowbit>Hourly usage stats: []
13:19:18  * SubStacktopic: http://browserling.com | http://testling.com | We put a browser in your browser!
13:23:25  <rowbit>SubStack, pkrumins: Encoders down:
13:25:18  * dominictarrjoined
13:58:51  <rowbit>Hourly usage stats: []
14:02:26  <rowbit>SubStack, pkrumins: Encoders down:
14:03:11  * xaqjoined
14:03:26  <rowbit>SubStack, pkrumins: Encoders down:
14:10:29  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:15:30  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:20:59  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:26:00  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:31:26  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:31:26  * wiwilliaquit
14:36:27  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:41:56  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
14:46:57  <rowbit>SubStack, pkrumins: Encoders down:
14:48:01  * yhuangjoined
14:48:32  <yhuang>Hey guys, i can't run my tests. It just hangs again
14:58:51  <rowbit>Hourly usage stats: []
15:27:30  * mikealquit (Quit: Leaving.)
15:58:51  <rowbit>Hourly usage stats: []
16:04:13  * mikealjoined
16:12:14  <pkrumins>yhuang: can you try now? i just restarted testling
16:12:35  <pkrumins>we'll have these issues solved soon
16:14:11  <yhuang>do you know which browsers currently work? I tried Chrome 17 and it didn't work
16:17:02  <pkrumins>chrome 17 should work again
16:20:15  * ryan_stevensjoined
16:20:31  <pkrumins>looks like it hung again
16:21:42  * ryan_stevensquit (Client Quit)
16:45:25  * mikealquit (Quit: Leaving.)
16:46:10  * mikealjoined
16:49:49  * ryan_stevensjoined
16:53:07  * sorensenquit (Ping timeout: 255 seconds)
16:54:43  * sorensenjoined
16:58:51  <rowbit>Hourly usage stats: []
17:03:05  * tblobaum_joined
17:09:28  * _ritchjoined
17:14:26  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie9 (Queue length: 1 on 1 servers. Total servers: 5)
17:54:22  <dominictarr>so maxogden, boat building then?
17:58:51  <rowbit>Hourly usage stats: []
18:32:26  <rowbit>SubStack, pkrumins: Encoders down:
18:37:23  <Raynos>jesusabdullah: https://github.com/jesusabdullah/node-zippy/pull/1
18:39:50  * wiwilliajoined
18:58:51  <rowbit>Hourly usage stats: []
19:14:36  * wiwilliaquit
19:16:53  * _ritchpart
19:18:15  * tilgovijoined
19:27:52  * yhuangquit (Remote host closed the connection)
19:46:21  * tilgoviquit (Remote host closed the connection)
19:57:45  * rannmannquit (Ping timeout: 240 seconds)
19:58:51  <rowbit>Hourly usage stats: []
19:58:51  <rowbit>Daily usage stats: []
19:58:56  * wiwilliajoined
19:59:01  * rannmannjoined
19:59:01  * rannmannquit (Changing host)
19:59:01  * rannmannjoined
20:01:22  * mikealquit (Quit: Leaving.)
20:58:51  <rowbit>Hourly usage stats: []
21:06:22  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
21:06:22  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
21:13:44  * mikealjoined
21:14:25  <rowbit>SubStack, pkrumins: Developers waiting in the queue for ie8 (Queue length: 1 on 1 servers. Total servers: 3)
21:44:25  <rowbit>SubStack, pkrumins: Encoders down:
21:46:55  <rowbit>SubStack, pkrumins: Encoders down:
21:58:51  <rowbit>Hourly usage stats: []
22:30:08  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
22:30:09  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
22:35:52  <SubStack>woot!
22:36:47  * wiwilliaquit (Ping timeout: 250 seconds)
22:58:51  <rowbit>Hourly usage stats: []
23:32:14  <dominictarr>mikeal, hey whats up?
23:32:20  <mikeal>hey
23:32:42  <dominictarr>so, tired today?
23:32:55  <mikeal>haha
23:32:58  <mikeal>i'm not going to bed
23:33:22  <dominictarr>according to my calculations, it's about 4pm, where you are.
23:33:31  <mikeal>yup
23:33:33  <mikeal>:)
23:34:03  <dominictarr>cool, I want to talk to you about possible future Stream refactors.
23:34:19  <mikeal>yes
23:34:30  <mikeal>1.) pause() will buffer
23:35:26  <mikeal>2.) stream.Stream will be a passthrough stream with a write() method
23:35:56  <dominictarr>my main concern is that the stream always gets to a consistent terminal state.
23:36:26  <mikeal>we talked about that a long while back
23:36:43  <mikeal>readable stream MUST emit either "end" or "error"
23:36:49  <dominictarr>so, 'error' should trigger destroy(), the same way that close dose.
23:36:55  <dominictarr>yeah, something like that.
23:37:05  <dominictarr>'close' also works.
23:37:12  <mikeal>we need to unify destroy() destroySoon() and close()
23:37:21  <mikeal>it's fuckin retarded as is
23:38:20  <dominictarr>I'm basically working from the point of view of U-L streams,
23:38:38  <dominictarr>and what I've found to work successfully with what I've been donig.
23:39:04  <dominictarr>I just use destroy()
23:39:23  <dominictarr>close(), destroySoon()
23:39:42  <dominictarr>all have the same meaning as destroy(), more or less.
23:40:36  <dominictarr>but, I think we do need something to indicate that the stream has terminated prematurely.
23:40:55  <mikeal>what does "premature" mean?
23:41:23  <dominictarr>well, "end()" means that the source intended the end of the stream.
23:41:49  <dominictarr>`destroy()` means it was in someway unexpected.
23:41:57  <dominictarr>something went wrong.
23:42:07  <mikeal>so, let's talk seperately about the method and the event
23:43:11  <dominictarr>I like the way that events on one side are propagated to methods on the other.
23:43:23  <dominictarr>I think that is quite a good principle.
23:43:36  <mikeal>it doesn't always apply tho
23:43:40  <mikeal>like, destroy()
23:43:44  <mikeal>it's a method no readable or writable
23:43:58  <dominictarr>well, destroy() --> "close"
23:44:06  <mikeal>maybe
23:44:19  <dominictarr>that is how i've interpereted it, after studying the source.
23:44:26  <dominictarr>thoughout core.
23:44:46  <mikeal>the close event is poorly designed
23:44:55  <mikeal>and documented
23:45:11  <mikeal>readable emits either "error" or "end"
23:45:16  <mikeal>that is insured
23:46:10  <dominictarr>well, it doesn't really matter to the other streams in the pipeline whether a particular stream has disposed of it's resources
23:46:15  <isaacs>close() -> release and clean up the underlying resource
23:46:28  <isaacs>"close" event -> the underlying resource has been cleaned up and released
23:46:44  <mikeal>that's what "end" means
23:46:45  <isaacs>ie, you called fs.close(fd) or socket.close() or whatever
23:46:53  <isaacs>mikeal: no, "end" means "no more bytes will be emitted"
23:47:00  <mikeal>end()
23:47:04  <dominictarr>what the other streams need to know, is this stream over, for sure.
23:47:09  <isaacs>.end() means "i will not be writing any more bytes"
23:47:24  <isaacs>end() method -> writable stream. "end" event -> readable stream.
23:47:25  <mikeal>right
23:47:35  <mikeal>right
23:47:37  <isaacs>but virtually *no* streams in real life are passthroughs
23:47:40  <dominictarr>because like,
23:47:44  <isaacs>except like a very small handful of exceptions.
23:47:44  <dominictarr>for a duplex stream
23:47:45  <mikeal>all userland ones are
23:47:51  <isaacs>no, almost no userland ones are.
23:47:56  <isaacs>all of them do *something* with the bytes.
23:47:58  <dominictarr>end(), and emit ('end'+
23:48:03  <mikeal>oh, i see what you mean
23:48:04  <mikeal>yes
23:48:06  <dominictarr>may occur in either order
23:48:18  <isaacs>most of them do something async with the bytes.
23:48:27  <isaacs>or gather up bytes into different chunks, etc.
23:48:47  <isaacs>almost none have any kind of 1:1 correllation between stream.write(foo) and stream.emit('data', foo)
23:48:52  <dominictarr>I'm writing heaps of streams that actually communicate via js objects,
23:48:58  <mikeal>i think that, semantics around "close" or "destroy" should not be considered for higher level streams, we should scope their behavior more specifically to file descriptors
23:49:06  <isaacs>yes
23:49:14  <dominictarr>and then piping them to a stream that parses/stringifies
23:49:30  <isaacs>close/destroy are optional things that we add when necessary and relevant.
23:49:35  <isaacs>they're essential to tcp
23:49:50  <mikeal>for streams that don't directly represent a file descriptor all we need is "end" and "error" as signals for ending.
23:49:56  <isaacs>yep[
23:49:58  <dominictarr>utlimately, Stream is an abstraction of IO
23:50:05  <mikeal>now, abort() i think we do need to define
23:50:12  <dominictarr>so TCP is kinda the default.
23:50:13  <isaacs>abort() is destroy()
23:50:17  <mikeal>is it?
23:50:19  <isaacs>yes.
23:50:28  <dominictarr>ubp is too low level
23:50:29  <isaacs>"Whatever you were doing, shut the fuck up and get the fuck out the way."
23:50:32  <dominictarr>not useful.
23:50:48  <isaacs>.destroy() is kill -9
23:51:01  <dominictarr>everything else is a reliable stream.
23:51:06  <isaacs>.close() is kill -HUP
23:51:21  <mikeal>here's the problem i seem to run in to
23:51:24  <dominictarr>aka, Transmission Control Protocol.
23:51:46  <mikeal>you want to cleanly kill a readable stream and supress any errors that might involve
23:52:14  <mikeal>1.) how do you propogate a message up the readable pipes to close it out cleanly
23:52:34  <mikeal>2.) how do you supress errors, because closing a socket in the middle of HTTP will generate an error
23:52:48  <isaacs>that's a nice problem.
23:52:55  <isaacs>here's another one:
23:53:11  <mikeal>someone should take notes :)
23:53:13  <dominictarr>aha, propagate a message by calling a method on the other stream
23:53:22  <isaacs>i need to read 10 bytes from this stream, and then depending on what those 10 bytes are, pipe it to either writableA, or writableB
23:53:26  <isaacs>this is a huge pita
23:53:26  <dominictarr>so that that stream may decide what to do.
23:53:32  <isaacs>because you'll get a 'data' event with 15 bytes
23:53:37  <isaacs>and have to re-emit the other 5
23:53:42  <dominictarr>that's what write() does...
23:54:11  <mikeal>isaacs: so, once pause() buffers
23:54:25  <isaacs>but mikeal even if pause() buffers, it's too late.
23:54:29  <isaacs>those 5 bytes have escaped.
23:54:32  <mikeal>you can pause() it and write() the leftover bytes
23:54:43  <mikeal>yeah, write to yourself again
23:54:53  <isaacs>or i can just writableA.write(5Bytes) ; readable.pipe(writableA)
23:54:54  <mikeal>in the same tick you pause in
23:55:01  <dominictarr>isaacs, I like your suggestion for a read() method.
23:55:17  <mikeal>i'm really confused as to how this read() method will work
23:55:20  <isaacs>mikeal: or we can move away from 'data' events, and instead of a 'readable' event and a .read() method
23:55:25  <mikeal>are we just polling these constantly?
23:55:36  <isaacs>mikeal: no, we're not polling at all.
23:55:50  <isaacs>mikeal: we'd just expose the underlying 'Hey, this FD is readable!' event we get from epoll or kqueue or whatever
23:55:51  <mikeal>ok
23:55:54  <dominictarr>I was thinging we could have a isBuffered(true)
23:56:06  <isaacs>then you do readable.read(10) to consume the first 10 bytes.
23:56:11  <dominictarr>method, which created the read() method
23:56:19  <isaacs>then readable.pipe(writableA)
23:56:28  <dominictarr>so you go createReadStream().isBuffered(true)
23:56:35  <isaacs>.pipe() would call .read() until it returns null, then sit and wait for the next readable event
23:56:42  <isaacs>so you never actually have to pause() a thing
23:56:43  <isaacs>you just stop reading it
23:56:52  <dominictarr>that creates the read method, which pipe checks for,
23:56:53  <isaacs>and that lets the TCP buffer fill up
23:57:33  <isaacs>the other nice thing about this for userland is that you only have to create the .read() method for your readable userland streams
23:57:36  <dominictarr>I'd like to make read() optional though, so that it is still possible to pipe to multiple destinations.
23:57:42  <isaacs>and emit the "readable" events
23:58:21  <isaacs>dominictarr: if we move to read method streams, then it's not optional, but we'll just shim to the old style.
23:58:26  <isaacs>old style = what we have now
23:58:28  <mikeal>you still need a "paused" state so that a stream is in a state that it *can* read but it's intentionally not
23:58:51  <rowbit>Hourly usage stats: []
23:59:03  <isaacs>mikeal: you don't really, though. because if you just .read() on it, it'll give you those bytes, and thats all
23:59:13  <mikeal>this will be slower if each stream has to have a proxied read method
23:59:23  <isaacs>the way to test for readableness is to call stream.read() and see if it gives you bytes or null
23:59:29  <mikeal>we'd have to create a reference on pipe()
23:59:30  <dominictarr>the tricky thing, that I've only just realized recently is that the writable and the readable sides both have their own PASUE state.
23:59:54  <mikeal>also, we're breaking, forever, the idea of multipe readable streams to one writable