00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:11:33  * ins0mniaquit (Ping timeout: 264 seconds)
00:14:50  * mk30joined
00:19:16  * yorickquit (Read error: Connection reset by peer)
00:26:12  * jcrugzzjoined
00:28:23  <jesusabdullah>substack: <3
00:28:39  * st_lukejoined
00:38:48  * st_luke_joined
00:41:50  * st_lukequit (Ping timeout: 240 seconds)
00:45:19  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
00:51:54  * vitorpachecojoined
01:00:19  * defunctzombie_zzchanged nick to defunctzombie
01:13:57  * kirbysayshiquit (Quit: kirbysayshi)
01:14:00  * stagasjoined
01:15:14  * ricardobeatjoined
01:15:23  <jesusabdullah>rvagg: what is this axe ad of which you speak?
01:17:49  <jesusabdullah>torrent y u no seed 2 peers
01:18:09  <rvagg>jesusabdullah: https://www.google.com/search?q=axe+"if+you+%3D%3D+understand.this"&safe=off&source=lnms&tbm=isch
01:19:03  <jesusabdullah>lol where are they showing this?
01:20:01  <jesusabdullah>also clearly it should be if (you.understand(this)) { you.get(new Girlfriend()); }
01:20:04  <jesusabdullah>duh!
01:20:59  <st_luke_>substack: what store is that bread from?
01:21:38  <st_luke_>rvagg jesusabdullah: when I started using that axe I got so much girlfriend and programming job, highly recommended
01:22:49  <jesusabdullah>st_luke.job instanceof ProgrammingJob && st_luke.girlfriends.length > 9000
01:23:18  <jesusabdullah>st_luke.use(axe);
01:26:45  * soldairquit (Ping timeout: 250 seconds)
01:28:45  <mbalho>lol https://github.com/paceaux/axe-ad-copy/commit/8d667c8d36ec7304fa026526ccc0c803f9335837
01:28:59  <mbalho>https://github.com/joshbroton/axe-ad-copy/commit/f0a22a13096e74ef3f2f3e2da427c395811bc6fd
01:29:28  * kumavisquit (Quit: kumavis)
01:31:24  * stagasquit (Ping timeout: 256 seconds)
01:37:37  <st_luke_>I walked by the chinese restaurant in berlin by hitler's bunker and didnt even realize it
01:37:38  <st_luke_>wtf
01:45:47  * thlorenzjoined
01:57:25  * Raynosjoined
02:02:35  * st_lukejoined
02:02:41  * st_lukequit (Remote host closed the connection)
02:03:35  * mk30quit (Ping timeout: 250 seconds)
02:05:46  <isaacs>ircretary: tell Kessler pong
02:05:46  <ircretary>isaacs: I'll be sure to tell kessler
02:06:01  <isaacs>finding an apartment sucks a lot.
02:07:33  <mbalho>isaacs: y u move
02:08:06  <isaacs>mbalho: my landlord is selling my apartment
02:08:12  <mbalho>WHA
02:08:13  <isaacs>mbalho: so we can either buy it, or gtfo
02:08:15  <isaacs>yeah
02:08:18  <isaacs>sucks a LOT
02:08:28  <isaacs>and we dont' wanna buy it
02:08:33  * AvianFluquit (Remote host closed the connection)
02:08:35  <ricardobeat>is there a decently stable ES6 -> ES5 transpiler?
02:09:02  * AvianFlujoined
02:09:53  * ralphtheninjaquit (Ping timeout: 240 seconds)
02:10:17  <jlord>jesusabdullah: for reals!
02:11:14  * mk30joined
02:11:53  <jlord>isaacs: dang! how long do you have?
02:16:24  <jesusabdullah>isaacs: tell me about it
02:16:46  <isaacs>jlord: we hvae august
02:16:51  <isaacs>jlord: and then we gotta be gone
02:21:27  <mbalho>isaacs: jlord is moving also, dunno when or where yet, we should start a commune
02:22:25  <isaacs>jlord: why you moving?
02:23:14  <mbalho>isaacs: lease is up and apartment is small
02:33:07  <substack>st_luke_: la frine
02:33:11  <substack>*farine
02:37:09  <jlord>isaacs: yeah, my lease is now month to month and it would be cool to have a bigger place we can both be in all of the time
02:37:50  <jlord>isaacs: we went to look at a place today and the landlady turned told us "i don't want couples, and i can choose that because it's owner occupied. i could say no blacks if i wanted."
02:38:12  <isaacs>jlord: turns out she can't say that, in fact.
02:38:22  <isaacs>jlord: ohh, owner OCCUPIED
02:38:28  <isaacs>like, you'd be roommates with the owner??
02:38:44  <jlord>isaacs: i guess in a way, legally. we are looking for mother in law places
02:38:53  <isaacs>yeah, you don't want to be any part of that noise
02:38:56  <jlord>like converted garages and stuff in back yards
02:39:03  <isaacs>why would you want mother-in-law places??
02:39:19  <isaacs>just price?
02:39:34  <jlord>isaacs: cause we think they'd be the right size, bigger than mys tudio, but not so big for us to take care of cause we're gone a lot
02:39:43  <jlord>and it would feel more homey and less apartmenty
02:40:03  <isaacs>i guess.
02:40:07  <jlord>right now i stare at the bldg next to mine and don't have a fire escape or anything
02:40:10  <isaacs>i feel like apartments ARE homey
02:40:23  <isaacs>but yeah, your view is pretty bleah
02:40:27  <jlord>nahh, we want light and a scrap of land
02:40:37  <isaacs>scraps of land are overrated.
02:40:41  <jlord>haha
02:40:49  <isaacs>i'll take a nice dishwasher and not having the landlord all up in my grill.
02:41:10  <isaacs>actually any roommates is probably not a good idea for us.
02:41:52  <isaacs>we both enjoy sovreignty. it took a lot for either of us to decide to live together at all, and that's why we have a 2br 2ba
02:41:56  <jlord>isaacs: oh and they usually have washer/dryers! woo woo!
02:42:12  <isaacs>i went and looked at The Uptown today
02:42:28  <jlord>look how fun this one is isaacs: http://sfbay.craigslist.org/eby/apa/3974090268.html
02:42:29  <isaacs>which is like, crazy hella nice, but it's also just a few blocks from where substack got mugged
02:42:46  <jlord>but we decided it was too small for us, didn't go look at it, also found out our friend was really seriously trying to get it
02:42:56  <isaacs>jlord: that is pretty fun
02:43:12  <jlord>we are prepared to go to the hills if we have to!
02:43:16  <jlord>the hills!
02:43:27  <isaacs>jlord: hills!? /o\
02:43:34  <isaacs>that's sooo far! we'll never see you again!
02:43:41  <jlord>well, the bottom of them
02:43:58  <isaacs>jlord: (i think mbalho might be a mountain person. he has a beard, you know. he might take you into the wilderness or something.)
02:44:00  <jlord>or like by berkeley campus
02:44:28  <jlord>isaacs: yeah, he's pretty into the hills part
02:44:48  <jlord>isaacs: we've got a scrapper for "cabin/cottage"
02:44:55  <isaacs>neat
02:45:22  <isaacs>ive got a scraper for 2br/2ba in adams point, cleveland heights, or grand-lake, care of padmapper
02:45:42  <isaacs>jlord: btw, if you'er not using padmapper, omg. srsly. padmapper.
02:45:49  <jlord>OOh I forgot about padmapper!
02:52:12  * calvinfojoined
02:52:38  <st_luke_>isaacs: I dont like a lot of hip hop from the south, is that racist?
02:54:02  <isaacs>st_luke_: the point of that article is that, if you feel the need to go out of your way to say that you don't like hiphop, while discussing trevon's murder, you're probably racist.
02:54:14  <isaacs>st_luke_: or any time it's not the issue being discsused, really
02:54:37  <jesusabdullah>WEST COAST
02:54:37  <LOUDBOT>OMG SOMEONE STOLE MARAK'S HAIR
02:55:18  <jesusabdullah>hahaha
02:56:17  <jesusabdullah>rock beach yeah fella I rock ya
02:58:01  <st_luke_>isaacs: what if someone says they really hate hip hop, but it's ok, because they have black friends
02:58:36  <isaacs>st_luke_: i think pointing out that you have $minority friends is definitely racist.
03:00:30  <st_luke_>isaacs: what if you have a coworker who is $race, and you pretend you do not know their race, but when they mention it sometime you say "oh I didn't know you were $race"
03:01:52  <jesusabdullah>I suspect that many people aren't racist so much as naive
03:02:32  <st_luke_>jesusabdullah: their naiveté doesn't make them not racist, actually
03:03:27  <jesusabdullah>I mean, sure, someone can be both, but is it not possible to say something that sounds racist but isn't actually backed by an inherent position on racial supremacy/stereotypes?
03:03:30  <jesusabdullah>Maybe I'm wrong.
03:04:07  <jesusabdullah>I tend to classify faux-pas differently from outright hatred, really, is all
03:04:10  <st_luke_>jesusabdullah: ignorance doesn't mean someone isn't racist though, there doesn't have to be an intent there for someone to be racist
03:04:50  <jesusabdullah>isn't racism defined by held beliefs, though?
03:05:00  <jesusabdullah>what if someone actually doesn't know?
03:05:07  <jesusabdullah>or understand?
03:05:42  <mbalho>isaacs: i have a custom scraper that tells me about all cabins and cottages in the east bay
03:06:08  <st_luke_>jesusabdullah: they are still racist then
03:06:30  <jesusabdullah>I don't know if I believe that.
03:09:13  <st_luke_>jesusabdullah: racism doesn't have to have anything to do with conscious actions, it's not like you have to think "I am going to do a racism in a few minutes"
03:10:39  <jesusabdullah>no but you do have to actually hold a racist belief.
03:11:24  <st_luke_>not consciously
03:12:16  <jesusabdullah>sure, but that's less "I don't understand this aspect of $minority culture" and more "Part of me is still scared of passers-by when they aren't white"
03:13:10  <jesusabdullah>I do think pointing out that you have $minority friends can betray an inherent thought pattern involving putting people into race categories
03:14:04  <jesusabdullah>and that's a precondition for racism for sure
03:14:30  <jesusabdullah>but I think it would be hard to actually be "color-blind" so to speak
03:14:42  <jesusabdullah>even the best people categorize
03:15:16  <st_luke_>if you are a racist I will attack you with the north
03:15:29  <jesusabdullah>Me? Racist? I do my best not to be.
03:15:52  <jesusabdullah>Honestly, the cultures/races with which I struggle with this the most are Alaskan native cultures. I will admit this.
03:16:25  <st_luke_>do you make a lot of igloo jokes
03:16:33  <jesusabdullah>Noooo oh geez
03:16:34  <st_luke_>I also struggle with igloo jokes
03:16:48  * mikolalysenkoquit (Ping timeout: 256 seconds)
03:16:56  <jesusabdullah>it's more like beliefs that natives are lazy, expect government handouts, can't hold their liquor, things like that
03:17:12  <jesusabdullah>I don't believe those things, but those are the blatantly racist beliefs that some white Alaskans hold
03:19:57  * thlorenzquit (Remote host closed the connection)
03:25:15  <timoxley>jesusabdullah: hm very similar to the attitude toward the australian native population as well
03:27:36  <st_luke_>no igloos there though right?
03:28:51  * tilgovijoined
03:32:11  <substack>st_luke_: there is a year-round igloo at chena hot springs
03:32:19  <jesusabdullah>timoxley: yeah
03:32:21  <substack>but it's actually inside a giant steel barn
03:32:40  <substack>and it's an ice bar/hotel
03:32:44  <jesusabdullah>st_luke_: generally no, igloos are a form of emergency housing like snow caves
03:34:28  <jesusabdullah>timoxley: from what I've seen, those are very common racist attitudes
03:34:31  <jesusabdullah>timoxley: in general
03:39:21  * mk30quit (Ping timeout: 250 seconds)
03:42:06  * jcrugzz_joined
03:42:53  * mikolalysenkojoined
03:43:07  * jcrugzzquit (Ping timeout: 264 seconds)
03:46:07  <st_luke_>I'm all of those things, am I a native?
03:47:24  * mikolalysenkoquit (Ping timeout: 255 seconds)
03:56:59  * timoxleyquit (Remote host closed the connection)
03:58:44  * jcrugzz_changed nick to jcrugzz
04:06:08  * harrow`quit (Ping timeout: 241 seconds)
04:07:30  * harrowjoined
04:12:50  * mikolalysenkojoined
04:13:26  * harrowquit (Ping timeout: 240 seconds)
04:21:27  * mikolalysenkoquit (Ping timeout: 260 seconds)
04:27:22  * calvinfoquit (Quit: Leaving.)
04:35:39  * harrowjoined
04:40:59  <hij1nx>isaacs: i may be using minimap incorrectly or unclear on some globbing rule... https://github.com/hij1nx/hashd/blob/master/index.js#L45-L50 -- Current assumption: `node_modules/` is a dir and `node_modules` could be a file, so remove the `/` and check the stat object.
04:41:27  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
04:41:28  <isaacs>hij1nx: sorry, been drinking, can't debug any more tonight.
04:41:37  <isaacs>hij1nx: feel free to email or post an issue if you can't figure it out.
04:41:51  <hij1nx>isaacs: haha, cheers! :D
04:41:52  <isaacs>hij1nx: and maybe try `mark: true` in the glob options? then `/` definitely will either be there or not.
04:56:02  * dguttmanquit (Quit: dguttman)
05:01:10  * mikolalysenkojoined
05:32:04  * calvinfojoined
05:37:40  <jesusabdullah>no st_luke_ you are an igloo
05:52:39  * mirkokieferjoined
05:57:24  * djcoinjoined
05:58:00  * tilgoviquit (Ping timeout: 276 seconds)
06:02:37  * tilgovijoined
06:02:42  * shamaquit (Read error: Connection reset by peer)
06:05:43  * vitorpachecoquit (Quit: Saindo)
06:20:42  * mirkokieferquit (Quit: mirkokiefer)
06:26:13  * defunctzombiechanged nick to defunctzombie_zz
06:26:28  * tilgoviquit (Remote host closed the connection)
06:36:51  * defunctzombie_zzchanged nick to defunctzombie
06:49:16  * ricardobeatjoined
06:54:36  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
07:03:39  * keslajoined
07:08:47  * calvinfoquit (Quit: Leaving.)
07:09:35  * maksimlinquit (Remote host closed the connection)
07:16:06  * mikolalysenkoquit (Ping timeout: 256 seconds)
07:30:20  * mirkokieferjoined
07:38:10  * meschquit (Quit: Connection closed for inactivity)
07:39:02  * calvinfojoined
07:41:17  * defunctzombiechanged nick to defunctzombie_zz
07:47:06  * calvinfoquit (Ping timeout: 256 seconds)
07:49:14  * st_luke_quit (Remote host closed the connection)
08:22:15  * mikolalysenkojoined
08:26:48  * mikolalysenkoquit (Ping timeout: 245 seconds)
08:32:42  * tilgovijoined
08:58:42  * jcrugzzquit (Ping timeout: 264 seconds)
09:18:39  * johnkpaulquit (Ping timeout: 240 seconds)
09:18:39  * johnkpauljoined
09:36:27  * spionjoined
09:38:45  * calvinfojoined
10:03:02  * keslaquit (Ping timeout: 240 seconds)
10:11:13  * damonoehlmanjoined
10:14:21  * ralphtheninjajoined
10:19:19  * stagasjoined
10:23:58  * ins0mniajoined
10:38:18  * frankblizzardjoined
10:40:16  * AvianFluquit (Remote host closed the connection)
10:45:05  * AvianFlujoined
10:45:10  * johnkpaulquit (Ping timeout: 240 seconds)
10:45:11  * johnkpauljoined
11:07:03  * calvinfoquit (Quit: Leaving.)
11:25:34  * tilgoviquit (Remote host closed the connection)
11:26:41  * mirkokieferquit (Quit: mirkokiefer)
11:31:07  * dominictarrjoined
11:40:49  * ryanseddonquit (Quit: Connection closed for inactivity)
12:09:00  * mirkokieferjoined
12:09:24  * dominictarrquit (Quit: dominictarr)
12:14:28  * thlorenzjoined
12:18:28  * stagasquit (Ping timeout: 245 seconds)
12:20:13  * mcollinajoined
12:20:45  * mcollinaquit (Remote host closed the connection)
12:21:17  * mcollinajoined
12:25:33  * mcollinaquit (Ping timeout: 245 seconds)
12:28:59  * Raltquit (Ping timeout: 246 seconds)
12:29:17  * dominictarrjoined
12:30:01  * Raltjoined
12:31:16  * dominictarrquit (Client Quit)
12:45:35  * damonoehlmanquit (Quit: WeeChat 0.4.1)
13:02:59  * dominictarrjoined
13:04:08  * dominictarrquit (Client Quit)
13:06:29  * blobaumjoined
13:10:22  * thlorenzquit (Remote host closed the connection)
13:16:50  * ednapiranhajoined
13:22:47  * st_lukejoined
13:23:23  * mcollinajoined
13:27:36  * yorickjoined
13:45:32  * gb_joined
13:45:39  <gb_>nick gwenbell
13:45:44  * gb_quit (Client Quit)
13:45:48  * jibayjoined
13:47:07  * timoxleyjoined
13:48:28  * thlorenzjoined
13:50:03  * kevino80joined
13:51:06  * AvianFluquit (Remote host closed the connection)
13:55:25  * gwenbelljoined
13:58:41  <rvagg>substack, mbalho: I'm doing a "learn node" workshop at campjs on the weekend and am basing it on stream-adventure: https://github.com/rvagg/learnyounode/
13:59:27  <rvagg>still a work in progress, only 3 exercises so far, I'm thinking the actual framework needs to be pulled out and made slightly more flexible, simply because this is NODE and we MODULARISE
14:08:00  * timoxleyquit (Remote host closed the connection)
14:14:15  * blingcoderjoined
14:16:33  * mikolalysenkojoined
14:27:47  * st_lukequit (Remote host closed the connection)
14:37:26  * tmcwjoined
14:38:15  * cianomaidinjoined
14:38:58  * AvianFlujoined
14:41:17  * mcollinaquit (Remote host closed the connection)
14:41:52  * mcollinajoined
14:41:55  * mcollinaquit (Read error: Connection reset by peer)
14:44:45  * soldairjoined
14:46:48  * st_lukejoined
14:48:38  * timoxleyjoined
14:51:02  * st_lukequit (Ping timeout: 240 seconds)
14:51:25  * st_lukejoined
14:51:49  * stagasjoined
14:53:51  * dguttmanjoined
14:54:32  * cianomaidinquit (Ping timeout: 256 seconds)
14:55:16  * cianomaidinjoined
14:55:19  * whit537joined
14:55:26  * st_lukequit (Ping timeout: 240 seconds)
14:56:53  * cianomaidinquit (Client Quit)
15:04:01  * st_lukejoined
15:04:21  * st_lukequit (Read error: Connection reset by peer)
15:21:46  * frankblizzardquit (Remote host closed the connection)
15:23:57  * st_lukejoined
15:26:46  * st_luke_joined
15:27:38  * st_luke_quit (Read error: Connection reset by peer)
15:28:14  * st_lukequit (Ping timeout: 240 seconds)
15:29:56  * st_lukejoined
15:30:45  * shamajoined
15:32:32  * ednapiranhaquit (Remote host closed the connection)
15:33:45  * ednapiranhajoined
15:34:12  * st_luke_joined
15:34:14  * st_lukequit (Ping timeout: 240 seconds)
15:38:16  * st_lukejoined
15:38:38  * st_luke_quit (Ping timeout: 240 seconds)
15:39:17  * st_luke_joined
15:40:06  * mirkokiefer_joined
15:42:14  * st_lukequit (Ping timeout: 240 seconds)
15:42:29  * cianomaidinjoined
15:42:31  * mirkokieferquit (Ping timeout: 264 seconds)
15:42:31  * mirkokiefer_changed nick to mirkokiefer
15:42:59  <Domenic_>substack: pkrumins: how's the making-testing-more-resilient work going?
15:43:26  * st_luke_quit (Ping timeout: 240 seconds)
15:45:15  * st_lukejoined
15:50:04  * st_lukequit (Ping timeout: 256 seconds)
15:53:08  * calvinfojoined
15:59:23  * dominictarrjoined
16:01:31  * jcrugzzjoined
16:05:10  * dominictarrquit (Quit: dominictarr)
16:05:46  * gwenbellquit (Ping timeout: 256 seconds)
16:11:50  * dominictarrjoined
16:16:40  * ednapiranhaquit (Remote host closed the connection)
16:18:07  * gwenbelljoined
16:20:20  * ednapiranhajoined
16:22:56  <thlorenz>substack: Domenic_ where can I find docs about the browserify (in package.json) field that allows me to swap out files, i.e. { 'mongojs': './empty.js' } ?
16:25:41  <Domenic_>thlorenz: it's browser-resolve I think
16:27:01  <thlorenz>Domenic_: thanks, this :https://gist.github.com/shtylman/4339901 is what I was looking for
16:27:10  * mcollinajoined
16:28:21  * gwenbellquit (Ping timeout: 248 seconds)
16:30:45  * mikolalysenkoquit (Ping timeout: 264 seconds)
16:31:06  * mikolalysenkojoined
16:34:58  * ricardobeatjoined
16:36:15  * mirkokieferquit (Quit: mirkokiefer)
16:41:58  * ednapiranhaquit (Remote host closed the connection)
16:42:38  * ednapiranhajoined
16:43:19  * mcollinaquit (Remote host closed the connection)
16:43:50  * mcollinajoined
16:48:06  * mcollinaquit (Ping timeout: 248 seconds)
16:48:45  * mikolalysenkoquit (Ping timeout: 264 seconds)
16:49:34  * calvinfoquit (Ping timeout: 256 seconds)
16:54:07  * dominictarrquit (Quit: dominictarr)
17:01:04  * dguttmanquit (Quit: dguttman)
17:03:12  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
17:03:50  * calvinfojoined
17:04:23  * mikealjoined
17:04:54  * calvinfoquit (Client Quit)
17:05:58  * mikolalysenkojoined
17:06:37  * defunctzombie_zzchanged nick to defunctzombie
17:10:09  * cianomaidinquit (Quit: cianomaidin)
17:26:28  * spionquit (Ping timeout: 246 seconds)
17:30:19  * mcollinajoined
17:30:43  <Raynos>thlorenz: I dont use sinon or its fakeServer
17:35:28  * gwenbelljoined
17:39:31  * mcollinaquit (Ping timeout: 264 seconds)
17:43:15  * kumavisjoined
17:43:40  * keslajoined
17:45:09  * gwenbellquit (Ping timeout: 264 seconds)
17:45:10  * AvianFluquit (Remote host closed the connection)
17:48:55  * dguttmanjoined
17:54:20  <jesusabdullah>wow grunt is really big :(
17:55:56  <kumavis>how. big. is it.
17:57:23  <mikeal>it has a plugin system
17:57:24  <mikeal>that big
17:57:59  <mikolalysenko>does it have a dsl implementation of scheme?
17:58:13  <mikolalysenko>because that is the point when a project has become too big
17:58:31  * blingcoderpart
17:58:36  * blingcoderjoined
17:59:31  * blingcoderquit (Remote host closed the connection)
18:02:57  * mcollinajoined
18:05:07  * st_lukejoined
18:07:10  * AvianFlujoined
18:07:52  * mcollinaquit (Remote host closed the connection)
18:08:27  * mcollinajoined
18:09:09  * blingcoderjoined
18:11:55  * dominictarrjoined
18:12:52  * mcollinaquit (Ping timeout: 256 seconds)
18:21:05  <Domenic_>it's almost as big as browserify or request
18:25:07  * mikolalysenkoquit (Ping timeout: 264 seconds)
18:25:12  * mirkokieferjoined
18:26:49  * calvinfojoined
18:27:59  * keslaquit (Ping timeout: 260 seconds)
18:28:34  * tilgovijoined
18:29:59  * calvinfoquit (Read error: Connection reset by peer)
18:30:17  * calvinfojoined
18:30:47  * defunctzombiequit (Ping timeout: 264 seconds)
18:31:42  <thlorenz>Raynos: planning to have integration tests as well, but for plain unit tests that don't require specific server, sinon fakeServer is nice
18:32:01  <Raynos>thlorenz: I just write testable functions :D
18:32:07  * ednapiranhaquit (Remote host closed the connection)
18:32:36  <Raynos>thlorenz: seriously though write testable functions that take external deps as arguments
18:32:44  <Raynos>then call them with fake interfaces for testing purposes
18:32:51  <thlorenz>Raynos: makes sense - we write Backbone views here and I can't deviate too far
18:33:07  <Raynos>thlorenz: why are you doing xhr in a view ?
18:33:19  <Domenic_>yeah that is a bit wonky
18:33:19  <thlorenz>I'm not I'm doing model.fetch
18:33:26  <thlorenz>to initialize it
18:33:59  <thlorenz>Domenic_: Raynos would you pass the initialized model or wrap Backbone fetch?
18:34:10  <Raynos>ugh backbone fetch ;_;
18:34:12  <Domenic_>thlorenz: well, model.fetch seems ok.
18:34:16  <Raynos>sec
18:34:28  <Domenic_>thlorenz: I guess I would stub out model.fetch in my tests instead of stubbing out the underlying XHR.
18:34:36  <thlorenz>that's what I'm doing, and that causes xhr request which I have to simulate in my tests
18:34:46  <thlorenz>Domenic_: that makes sense
18:35:21  <thlorenz>it's not how people here have been doing things
18:35:28  * calvinfo1joined
18:35:55  * kumavisquit (Quit: kumavis)
18:35:57  <thlorenz>Domenic_: what I like about the fakeServer thing is that I can see from the tests what route my real app has to provide and what data format to send
18:36:30  * calvinfoquit (Ping timeout: 256 seconds)
18:36:31  * defunctzombie_zzjoined
18:36:33  <Domenic_>thlorenz: i guess it's integration vs. unit tests. fakeServer is integration, mocking out only the piece that you actually use (viz. model.fetch) is unit.
18:36:55  * defunctzombie_zzchanged nick to defunctzombie
18:37:00  * mirkokieferquit (Quit: mirkokiefer)
18:37:13  * defunctzombiequit (Changing host)
18:37:14  * defunctzombiejoined
18:37:30  <thlorenz>Domenic_: agreed there are different level of integration though - i.e. hitting a real server is all the way integration I guess - this is a middle kinda thing
18:37:52  <Raynos>thlorenz: https://gist.github.com/Raynos/6158279
18:38:16  <Domenic_>thlorenz: sure, i was talking about integration vs. unit within JavaScript. I much prefer unit within JS, integration should span outside JS to include the whole system.
18:38:56  * mcollinajoined
18:38:57  <Raynos>i dont know how to translate that to backbone
18:38:57  <thlorenz>ok, will keep that in mind and may write another test that overrides backbone fetch
18:39:13  <Raynos>thlorenzx: my best guess is you should be able to manually instantiate a backbone view and manually pass in a backbone model
18:39:22  <thlorenz>Raynos: it does, just override some of its methods and restore after the test
18:39:22  <Raynos>which means you can create a mock backbone model with a dummy fetch
18:39:36  <Raynos>i dont like "restore after test" :/
18:40:00  <Raynos>"run each test serially so that you can punch global state before and restore global state afterwards" sounds really fragile
18:40:01  <thlorenz>that makes sense and should already be possible
18:40:06  <Domenic_>Agreed restore after test is not as cool, but it is necessary in scenarios which use setter injection instead of constructor.
18:40:27  <Domenic_>I think Backbone uses a mix, not sure which would apply here.
18:40:45  <thlorenz>thanks for the tips guys, will add pure unit tests when I'm done with the simplify step
18:40:53  <Domenic_>but yeah i can't think of any scenario in which i'd use sinon.fakeServer except if I was testing a library that used XHR directly, which I would never do.
18:41:28  <Raynos>Oh I see
18:41:45  <Raynos>Domenic_: cant you just create a new view each time and apply setter injection then?
18:41:49  * nicholasfquit (Read error: Connection reset by peer)
18:42:07  <Raynos>Domenic_: fakeServer would be cool for testing an ajax library :p
18:42:20  * nicholasfjoined
18:42:24  <Domenic_>Raynos: hmm yeah I think you're right
18:42:45  <Domenic_>Raynos: I think thlorenz has some thing where he doesn't like re-creating things every test, speed concerns or something, pssh :P
18:43:01  * ricardobeatjoined
18:43:17  * mcollinaquit (Ping timeout: 248 seconds)
18:44:02  <thlorenz>Domenic_: :) ---
18:44:54  <thlorenz>the problem with mocking a lot I ran into is that you end up writing more of code to duplicate the real world and if it goes out of sync your tests still pass for the wrong reasons
18:45:17  <thlorenz>so I'm going back and forth on the level of granularity that my tests should have Domenic_
18:46:42  * gwenbelljoined
18:47:53  * stagas_joined
18:48:37  * stagasquit (Ping timeout: 248 seconds)
18:48:44  * stagas_changed nick to stagas
18:49:05  <Domenic_>thlorenz: yeah i know what you mean. having integration tests is essential. but then you also need something to ensure you don't have to write too much mock code.
18:52:58  * mikealquit (Quit: Leaving.)
18:53:37  <thlorenz>Domenic_: yes, I guess I'll experiment with this a bit - writing tests for all levels of mocking vs. integration
18:54:13  * mikealjoined
19:02:27  * ednapiranhajoined
19:02:40  * ednapiranhaquit (Read error: Connection reset by peer)
19:03:04  * ednapiranhajoined
19:06:30  <Raynos>thlorenz: I dislike mocking
19:06:47  <Raynos>I write integration tests but mock out my 'api client' which is a wrapper around XHR
19:07:11  <thlorenz>Raynos: this is a mock : https://gist.github.com/Raynos/6158279#file-test-js-L6
19:07:19  <Raynos>thlorenz: correct
19:07:23  <thlorenz>so do you mean you rather pass it in?
19:07:31  <Raynos>yes
19:07:32  <thlorenz>instead of overriding with sinon?
19:07:34  <thlorenz>ah, ok
19:07:36  * tilgoviquit (Remote host closed the connection)
19:07:38  <Raynos>I pass in fake shit
19:07:45  <Raynos>i dont use magic libraries to do things for me :p
19:07:50  <thlorenz>I can see the advantages
19:07:53  <Raynos>I used sinon once
19:07:59  <Raynos>it got annoying
19:08:25  <Domenic_>i use sinon.spy() but rarely anything else
19:08:33  <Domenic_>well ok i lie
19:08:36  <Domenic_>i use sinon.stub() as a convenience
19:08:37  <thlorenz>Raynos: it depends on the use case - in C# we used DI all the time and passed in mocks
19:08:51  <Domenic_>sinon.stub().withArgs("a", "b").returns("c") is pretty nice.
19:08:58  <Raynos>thlorenz: here's a real example ( https://github.com/Raynos/process-dashboard/blob/master/test/browser/client.js )
19:09:07  <thlorenz>Domenic_: yeah, it's faster than handwriting all this stuff
19:09:10  <Raynos>Domenic_: last time i used sinon it made my testsx harder to read
19:09:20  <Domenic_>Raynos: you definitely have to subset it a bit
19:09:31  <thlorenz>the same reason you'd use a mocking lib in C# instead of reimplementing the interface by hand
19:09:36  <Raynos>I also tend to want to put assert statements
19:09:41  <Domenic_>sinon.mock is to be avoided like a plague. and as discussed i would rather use sinon.fakeServer only for XHR libraries. etc.
19:09:41  <Raynos>in teh body of my spys or stubs
19:09:55  <Raynos>thlorenz: no you use a mocking library in C# because of types
19:09:58  <Domenic_>Raynos: I sympathize but I dislike doing that, I'd rather keep all my asserts at the bottom.
19:10:22  <Raynos>thlorenz: in javascript without types mocking is as trivial as creating an object literal with just the two methods that thing happens to use
19:10:48  <Domenic_>it's not the mocking that's tricky. it's the verification afterward that helpers are nice for.
19:10:53  <thlorenz>Raynos: I use sinon so I don't have to handcode fn : function (arg, cb) { if (arg == ..) cb(x) ...
19:11:11  <thlorenz>instead I can use sinon.callbackWith ...
19:11:11  <Domenic_>also .withArgs() is kinda cool. your stubs won't return or callback with anything if they don't get the right args.
19:11:16  * ednapiranhaquit (Ping timeout: 240 seconds)
19:11:20  <thlorenz>Domenic_: +1
19:11:43  <thlorenz>Raynos: it's all just convenience to avoid boilerplate in your tests
19:11:53  * soldairquit (Ping timeout: 250 seconds)
19:12:17  <Domenic_>it's also an organizational thing. asserting facts about spies at the bottom of your tests is IMO much nicer than asserting things inside the spy itself, before the code that actually tests it.
19:12:40  <thlorenz>Raynos: I like this sample you sent though, very clean
19:13:10  <thlorenz>Domenic_: yeah I never liked the record/replay thing
19:14:33  * calvinfo1quit (Quit: Leaving.)
19:15:46  * mikealquit (Quit: Leaving.)
19:19:54  * calvinfojoined
19:21:18  * dominictarrquit (Quit: dominictarr)
19:26:37  * mikolalysenkojoined
19:32:13  <substack>Domenic_: the more resilient testling version will be based on http://github.com/substack/testling-server
19:38:39  * kumavisjoined
19:39:26  * mcollinajoined
19:42:43  * mirkokieferjoined
19:44:27  * mcollinaquit (Ping timeout: 268 seconds)
19:50:44  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
19:52:31  * mirkokieferquit (Quit: mirkokiefer)
19:53:43  * ricardobeatjoined
19:54:01  * mikealjoined
19:55:34  <Raynos>Domenic_: I use assert.equal inside callbacks. The manual approach is more readable
19:56:10  <Domenic_>Raynos: I find that much less readable because it conflates the concern of calling back with fake errors/data with the concern of making assertions about arguments and state.
19:56:22  <Raynos>Agreed
19:56:27  <Raynos>i avoid assertions inside mocks
19:59:25  <Raynos>thlorenz: How do you cope coming into a large project and having to use backbone + all existing tech + AMD ?
19:59:39  <Raynos>that kind of thing scares me.
19:59:45  <thlorenz>not using amd
20:00:02  <Raynos>thlorenz: because you won the browserify sell already ?
20:00:06  <thlorenz>yep
20:00:18  <thlorenz>at least for the project I'm on
20:00:36  <thlorenz>backbone is not that bad and I'm gonna be working serverside mostly
20:00:49  <Raynos>i have the same concerns server side
20:01:01  <Raynos>having to use express + backbone + mongoose + existing tech scares me too :D
20:01:33  <thlorenz>well server side I got data to be served with restify, but people know express and that is what they wanna use
20:01:55  <thlorenz>for pages, so I'll live with that - gotta accomodate
20:02:48  <thlorenz>Raynos: I'll do whatever I want in the morning and evening, but on the job its all about compromise
20:02:57  <Raynos>I guess so
20:03:10  <Raynos>its just im in an annoying position of very little compromise and lots of control atm
20:03:14  <Raynos>so spoiled I guess.
20:03:43  <thlorenz>that's cool :)
20:03:47  * mikeal1joined
20:03:50  * mikealquit (Read error: Connection reset by peer)
20:04:15  <thlorenz>I don't mind the compromises too much as long as I learn stuff in a field that interests me (node, WebUI -- not Java)
20:06:47  * tmcwquit (Remote host closed the connection)
20:07:38  * ednapiranhajoined
20:09:04  * tmcwjoined
20:09:32  <Raynos>that makes sense
20:13:34  * tilgovi_joined
20:15:05  <st_luke>is there some sort of "how promises work for mentally fucking retarded people" guide
20:15:08  <st_luke>I dont fucking get it
20:15:50  * ednapiranhaquit (Ping timeout: 240 seconds)
20:16:09  <st_luke>this is fucking rails bullshit
20:16:18  <st_luke>fuck you dhh
20:16:25  <Raynos>?
20:16:48  <st_luke>promises
20:20:50  <st_luke>its yehudas fault
20:21:31  <Raynos>This is true
20:22:23  <Raynos>st_luke: https://gist.github.com/Raynos/a4166506444e1e3d92b6
20:24:52  <st_luke>the promises example has more indentation than the callback example
20:25:46  <st_luke>its also pivotal labs' fault
20:26:26  <Domenic_>st_luke: my sliiiiides http://www.slideshare.net/domenicdenicola/presentations
20:27:01  <Domenic_>st_luke: http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript or http://www.slideshare.net/domenicdenicola/promises-promises are probably what you want. the first is more basic, somewhat not for JS devs.
20:27:19  <st_luke>dominic_ do all of these slide decks start with you doing the weird grin thing
20:27:49  <Domenic_>st_luke: yes
20:29:10  * mikeal1quit (Quit: Leaving.)
20:30:52  <st_luke>a good reason to use promises is so if your proprietary code gets stolen you dont have to worry about anybody using it
20:31:58  <st_luke>.describe .context .beforeach .aftereach .then .expects
20:32:11  <st_luke>its true, the point of promises isnt callback aggregation
20:32:47  <AvianFlu>st_luke: I've been confused by the same thing
20:33:02  <AvianFlu>"hey! don't like nesting your functions? nest our specially named functions instead!"
20:33:14  <AvianFlu>but promises were clearly not invented for me :)
20:33:56  <st_luke>who were they invented for? they're supposed to be useful for software developers dealing with asynchronous operations
20:33:57  <Domenic_>The example here may make it clearer. https://github.com/kriskowal/q/blob/master/README.md
20:33:59  <st_luke>that sounds like people like us
20:35:02  <st_luke>ive been writing node for a while and promises make me feel like a goddamn mental retard. im not saying I have not been a mental retard all along, but damn
20:35:26  <AvianFlu>I just don't have trouble with callbacks
20:35:28  <Domenic_>they have a nice feature that lets you avoid nesting since you can (a) return a promise from inside a promise callback, thus avoiding an extra level of indent for the next async op. (b) you don't have to pass errors up to the next guy manually, they all flow to the end.
20:35:34  <AvianFlu>that may indicate deep mental problems, but it doesn't hurt me lol
20:35:37  <Domenic_>sure, and i mean, i don't have trouble with gotos.
20:35:56  <Domenic_>but functions are a pretty nice jump in abstraction IMO.
20:36:14  <AvianFlu>hahaha touche on the gotos
20:36:26  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
20:37:35  <st_luke>if excessive callback indentation is called the pyramid of doom then they should call excessive promises indentation the pyramid of gloom
20:37:45  <st_luke>because thats what I feel right now writing promises
20:37:46  <st_luke>gloom
20:39:27  * mikealjoined
20:39:57  * mcollinajoined
20:40:33  * blobaumquit (Remote host closed the connection)
20:44:14  * mcollinaquit (Ping timeout: 240 seconds)
20:44:48  <defunctzombie>st_luke: :)
20:45:09  * jolissjoined
20:45:36  <Domenic_>defunctzombie: thlorenz: i think i'm going to make zuul usable programatically so i can integrate it into a grunt pipeline. because damn there's nothing out there as good as it is. i don't wanna check in any BS .html files.
20:46:27  <thlorenz>Domenic_: awesome, was thinking about that - separate cli from lib
20:46:42  <defunctzombie>Domenic_: grunt is stupid :p
20:46:50  <Domenic_>i will of course not include any grunt stuff in the PR
20:46:51  <thlorenz>actually stealing lots of zuul ideas to write my appup thing
20:46:59  <defunctzombie>Domenic_: but by all means make it a lib, I am not against that
20:47:01  <Domenic_>the grunt stuff should, as always, be just a three-line wrapper.
20:47:16  <thlorenz>defunctzombie: making it a lib is super useful not just for grunt
20:47:17  <defunctzombie>but I don't want to see any grunt shit in zuul
20:47:25  <defunctzombie>thlorenz: I agree, thus not against it
20:47:39  <thlorenz>:)
20:47:51  * kumavisquit (Quit: kumavis)
20:51:53  * ricardobeatjoined
20:52:12  <defunctzombie>you guys should use less grunt and more awesome :p
20:53:39  <Domenic_>the biggest arguments in favor of grunt for me are that once you have a pipeline set up, adding watch and concurrency functionality to it is really easy.
20:53:54  <Domenic_>there is also a weak argument that it's nice to have some declarative config instead of some shell scripts
20:53:57  <Domenic_>and of course cross-platform stuff
20:55:58  <defunctzombie>I dunno what you are watching
20:56:34  <Domenic_>css stuff, jshint, etc.
20:56:44  <Domenic_>browserify maybe
20:57:01  <Domenic_>your server can then just wait on a mutex for all watch jobs to finish before returning control
20:57:08  <Domenic_>s/returning control/fulfilling requests
20:57:57  <defunctzombie>Domenic_: I just have my middleware do it all
20:58:03  <defunctzombie>way cleaner and easier
20:58:09  * soldairjoined
20:58:12  <defunctzombie>js, css, etc
20:58:13  <ricardobeat>Domenic_: has the never-fulfilled/rejected promise issue been solved yet?
20:58:15  <Domenic_>jshint?
20:58:24  <Domenic_>ricardobeat: what do you mean?
20:58:29  <defunctzombie>Domenic_: that is easier to just put in a makefile or npm script
20:58:35  <defunctzombie>Domenic_: that has nothing to do with anything else
20:58:37  <Domenic_>defunctzombie: watch
20:58:42  <defunctzombie>Domenic_: watch what?
20:58:43  <Domenic_>run jshint as you code
20:58:50  <defunctzombie>Domenic_: make your editor do it
20:58:53  <ricardobeat>Domenic_: promises that are never fulfilled or reject, and just leave the app hanging.
20:59:05  <defunctzombie>anyone using sourcemapurl with browserify?
20:59:16  <Domenic_>ricardobeat: not really sure what the problem is. is that any different from callback-using functions that never call their callback?
20:59:18  <ricardobeat>Domenic_: implementation error of course, but damn hard to debug
21:01:53  * djcoinquit (Quit: WeeChat 0.4.0)
21:03:02  <Domenic_>defunctzombie: what is your preferred column wrapping
21:03:12  <defunctzombie>Domenic_: 80
21:03:16  <defunctzombie>or close to it
21:03:29  <defunctzombie>for html, more is ok
21:03:48  <defunctzombie>I am pretty lax about that, just nothing crazy
21:03:56  <ricardobeat>Domenic_: the 'unhandled rejections spec'
21:04:09  <Domenic_>ricardobeat: ah that's a pretty different problem
21:04:32  <Domenic_>ricardobeat: https://github.com/promises-aplus/unhandled-rejections-spec/issues/1
21:05:07  * spionjoined
21:06:33  <ricardobeat>Domenic_: I guess that's a no
21:06:45  <Domenic_>ricardobeat: different libraries have different solutions
21:08:47  <ricardobeat>Domenic_: that's the main issue with promises for me right now
21:09:09  <ricardobeat>Domenic_: someone forgets an error handler and suddenly parts of the app just hang siltently
21:09:22  <Domenic_>ricardobeat: understandable i guess. not that big a deal compared to callbacks though, which have the same problem.
21:11:29  <spion>hmm, how do you usually use promises? do you use .then often or do you use various helpers to create new promises based on the old promises?
21:12:12  * ednapiranhajoined
21:12:28  <Domenic_>spion: `then` is a helper for creating new promises based on old promises :)
21:12:41  <Domenic_>promises discussion might be best off in #promises so as not to bore these lovely folks
21:12:53  <spion>oh, there is a channel for that :)
21:13:01  <spion>thanks
21:14:53  * ricardobeatquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
21:15:14  <st_luke>Domenic_: which one of your presentations is as close to 'promises for retards' as could possibly be?
21:15:35  <Domenic_>st_luke: the callbacks, promises, and coroutines one
21:16:25  * ednapiranhaquit (Ping timeout: 246 seconds)
21:16:57  <st_luke>im not trying to bandwagon promise hate, i honestly am super confused by them
21:18:26  * timoxleyquit (Remote host closed the connection)
21:19:22  <jlord>what are bars people like in oakland and would like to drink for free at?
21:27:07  * timoxleyjoined
21:29:15  <mikolalysenko>st_luke: they aren't that confusing. you just have a .then and .error method. this idea is that (f(cb){cb()})(g(){}) becomes f.then(g)
21:29:29  <mikolalysenko>this flattens out the callstack, it is just a conventional/syntactic thing
21:29:59  <mikolalysenko>or maybe flatten isn't the right word, but basically it removes the nesting from callbacks
21:30:22  <jesusabdullah>interesting
21:30:36  <jesusabdullah>jlord: your house
21:30:38  <mikolalysenko>the .error method basically simplifies your exception handling
21:30:46  <jesusabdullah>jlord: seriously, I don't remember any good bars in East Bay
21:30:59  <jesusabdullah>jlord: I also hated all the bars I went to in SF except maybe Bottom of the Hill
21:31:39  <jesusabdullah>apropos of promises https://www.youtube.com/watch?v=vWNJlc-IylY
21:31:51  <st_luke>hij1nx: lolz
21:34:57  * joliss_joined
21:36:32  <mikolalysenko>I think that when/if generators become part of javascript promises will just disappear
21:36:38  * jolissquit (Ping timeout: 240 seconds)
21:36:38  * joliss_changed nick to joliss
21:40:27  * mcollinajoined
21:40:46  <Raynos>miko: you need to yield on something
21:41:33  <Raynos>generators only solve the trivial case
21:41:41  <Raynos>they solve the need for linear flow control
21:41:45  <Raynos>not complex flow control
21:41:57  <mikolalysenko>well, I think that is not quite the right picture
21:42:12  <mikolalysenko>basically the way I look at generators is that they let you apply structured programming principles to concurrent problems
21:42:24  <mikolalysenko>like loops, subroutines, etc.
21:42:32  <mikolalysenko>so you don't have to represent states by labels and gotos
21:42:49  <mikolalysenko>if a problem is complicated, it is complicated
21:43:00  <mikolalysenko>but it is easier if you can decompose it using subroutines and loops
21:43:22  <Raynos>miko: but generators do not allow you to express parallelism
21:43:28  <Raynos>you still need callbacks for parallelism
21:43:31  <mikolalysenko>no, I said concurrency not parallelism
21:43:45  <mikolalysenko>but you don't get parallelism in js anyway, you just get concurrency
21:43:48  <Raynos>im saying complex flow control IS parallelism
21:44:06  <mikolalysenko>no, parallelism is specifically when you have two things executing at the same time
21:44:08  <Raynos>miko: you can only yield one thing
21:44:25  <mikolalysenko>that isn't a big deal, just pass an object or something to yield multiple things
21:44:34  <Raynos>Ok sure
21:44:37  <mikolalysenko>like yield event
21:44:38  <Raynos>but then you have to construct an object
21:44:49  <mikolalysenko>yield { foo: "I am an object" }
21:44:51  <mikolalysenko>doesn't seem so bad
21:44:57  <mikolalysenko>and you can abstract it away with a subroutine
21:45:13  <Raynos>miko: a good example would be to try and implement something non trivial with generators like ( https://github.com/dominictarr/npmd-install )
21:45:19  * mcollinaquit (Ping timeout: 268 seconds)
21:45:56  <Raynos>I also don't think you can use a generator to represent streams
21:45:58  <mikolalysenko>well, the first problem with that package is I don't even know what it is doing
21:46:10  <mikolalysenko>I think you could pretty easily
21:46:13  <Raynos>miko: it just implements the npm install algorithm
21:46:20  <mikolalysenko>ah, I see
21:46:22  <Raynos>miko: I've tried implementing a stream its hard
21:46:52  <mikolalysenko>I'd basically implement error/write/read using yield
21:47:10  <Raynos>miko: https://gist.github.com/Raynos/6159892
21:47:35  <mikolalysenko>that won't work for a yield obviously
21:47:45  <mikolalysenko>and it isn't how you do things in a generator
21:47:49  <Raynos>you can implement streams as things that have write / read methods that return thunks / promises you can yield on, sure.
21:47:59  <Raynos>you can easily consume a stream in a generator
21:48:07  <mikolalysenko>and you can write too
21:48:16  <mikolalysenko>I'd actually make a wrapper over the stream for generators
21:48:20  <Raynos>how would you combine two streams using generators
21:48:24  <mikolalysenko>because the first problem is that streams are really complicated
21:48:32  <mikolalysenko>but supposing that you make a generator-capable stream
21:48:40  <Raynos>miko: https://github.com/creationix/js-git/blob/master/specs/simple-stream.md
21:48:41  <mikolalysenko>then you can just call read/write at the appropriate times
21:49:00  <Raynos>thats a good simpler stream if your interested.
21:49:22  <spion>with jmar777's suspend, this should work - var data = stream.on('data', resume.raw())
21:49:26  <Raynos>miko: take the basic problem of merging two streams. You want to read from them concurrently and not have two sequential for loops consuming them
21:49:39  <Raynos>spion: what does .raw() do ?
21:49:48  <spion>its a non-throwing resumer function
21:49:56  <spion>it doesn't treat the first argument as an error
21:50:27  <mikolalysenko>well, in a good stream implementation you'd have something like a select/alt operator
21:50:36  <mikolalysenko>and then you just select over whichever stream is ready to go and use that
21:50:46  <mikolalysenko>you could pretty easily implement that with generators I think
21:51:13  <spion>I'll try and make a quick example
21:52:03  <Raynos>miko: I don't understand
21:52:06  * nicholasfquit (Remote host closed the connection)
21:52:14  <mikolalysenko>like you know unix select?
21:52:15  <mikolalysenko>or epoll
21:52:21  <mikolalysenko>you just do that across the streams
21:52:29  <Raynos>I'm not familiar with those
21:52:49  <Raynos>the problem is that yield read() blocks your generator and you can't do two concurrent while (read()) loops
21:52:53  <mikolalysenko>yeah
21:52:58  <mikolalysenko>that is why you use a select
21:53:12  <Raynos>is that like
21:53:12  <mikolalysenko>the idea is you pass it a list of blocking io events and then it returns the first one that completes
21:53:16  <Raynos>yield select(one, two)
21:53:44  <Raynos>what does it do with the one that doesnt complete?
21:53:50  <mikolalysenko>well, it would be more like: select([event1, function(res) { ...}, ... ])
21:53:59  <mikolalysenko>you'd wait on a terminate event
21:54:12  <mikolalysenko>this is actually how node is implemented internally I believe, since it is built on epoll
21:54:31  <Raynos>callbacks feel simpler then select
21:54:33  <mikolalysenko>or maybe kqueue.... I don't remember which is the latest best practice actually
21:54:41  <Raynos>but again I would love to see some generators thought experiments
21:55:55  * joliss_joined
21:57:30  * jolissquit (Ping timeout: 245 seconds)
21:57:30  * joliss_changed nick to joliss
21:57:46  <mikolalysenko>Raynos: go has a simple implementation of this concept in its goroutines
21:57:55  <Raynos>i did see that
21:57:56  <mikolalysenko>look up how go's select statement works
21:58:16  <Raynos>I find both goroutines & core.async confusing
21:58:31  <Raynos>just manually doing callbacks feels simpler for complex stuff
21:59:56  <mikolalysenko>well, whatever you do it will amount to basically reimplementing select() or some equivalent functionality
22:00:27  * thlorenzquit (Remote host closed the connection)
22:01:03  <mikolalysenko>but generators are all that you would need to make a version of select that works in a single threaded system
22:01:26  * blingcoderquit (Remote host closed the connection)
22:02:22  * thlorenzjoined
22:03:45  * dominictarrjoined
22:04:10  * kevino80quit (Remote host closed the connection)
22:04:43  * kumavisjoined
22:05:59  <spion>Raynos, https://gist.github.com/spion/6160009
22:07:33  <spion>but yeah, you can't do two concurrent read loops that way.
22:08:12  <mikolalysenko>if you had a select statement you could though
22:09:13  <spion>yeah and that would probably be better off if it uses the new 'readable' event :)
22:09:25  <mikolalysenko>but the basic problem is that the stream interface is pretty complicated. even using just callbacks it would be pretty hard
22:09:37  <mikolalysenko>since you would have to keep registering/removing events etc.
22:15:02  * brianloveswordsquit (Excess Flood)
22:15:11  * brianloveswordsjoined
22:16:28  <Domenic_>defunctzombie: thlorenz: https://github.com/shtylman/zuul/pull/11
22:18:15  * mk30joined
22:18:44  * tmcwquit (Remote host closed the connection)
22:23:01  * AvianFluquit (Remote host closed the connection)
22:28:06  * kumavisquit (Quit: kumavis)
22:41:02  * mcollinajoined
22:41:26  * AvianFlujoined
22:43:47  * maksimlinjoined
22:43:55  * dominictarrquit (Quit: dominictarr)
22:45:45  * mcollinaquit (Ping timeout: 268 seconds)
22:47:17  <spion>https://gist.github.com/spion/6160009 - updated with a naive implementation of select
22:47:34  <spion>couldn't test with http.get - seems to be broken in 0.11.4
22:48:59  * AvianFlu_joined
22:49:17  * tmcwjoined
22:50:00  * AvianFlu_quit (Remote host closed the connection)
22:52:38  * AvianFluquit (Ping timeout: 240 seconds)
22:54:23  * cianomaidinjoined
22:55:18  * ednapiranhajoined
22:58:20  * tmcwquit (Ping timeout: 245 seconds)
23:01:55  <jesusabdullah>so CNN's showing half of N. Africa colored yellow
23:02:23  <jesusabdullah>Thanks, State Department, for reminding me that Sudan is not a safe place to go on vacation. I APPRECIATE IT
23:05:26  * st_lukequit (Remote host closed the connection)
23:06:41  * mcollinajoined
23:12:38  * st_lukejoined
23:13:50  * mikolalysenkoquit (Ping timeout: 240 seconds)
23:19:41  * yorickquit (Remote host closed the connection)
23:21:36  <spion>okay, a generator example that reads streams in parallel using select-like api which is tested and actually works (nvm use 0.11.3) - https://gist.github.com/spion/6160009
23:21:48  * cianomaidinquit (Quit: cianomaidin)
23:22:53  <spion>that was fun
23:25:20  * tmcwjoined
23:30:46  * tmcwquit (Ping timeout: 256 seconds)
23:33:34  * kumavisjoined
23:39:53  <defunctzombie>Domenic_: will take a look
23:46:12  * kumavisquit (Quit: kumavis)
23:47:13  * kumavisjoined
23:47:56  * thlorenzquit (Remote host closed the connection)
23:49:19  * gwenbellquit (Ping timeout: 256 seconds)
23:53:22  * nicholas_joined
23:54:42  * mikolalysenkojoined
23:54:46  * defunctzombiechanged nick to defunctzombie_zz
23:55:28  * mcollinaquit (Remote host closed the connection)
23:57:01  * tmcwjoined