00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:09  * ircretaryjoined
00:03:07  * defunctzombie_zzchanged nick to defunctzombie
00:05:03  <ralphtheninja>so sick of programming today
00:05:27  <ralphtheninja>sometimes I just hit the wall and it's not fun .. has to be fun .. otherwise fuck it
00:09:09  <rvagg>ralphtheninja: some hardware hacking perhaps?
00:09:34  <rvagg>I'm sitting here thinking about hacking my coffee machine to control the temperature better to get a better pour
00:15:03  * tmcwquit (Remote host closed the connection)
00:16:04  * defunctzombiechanged nick to defunctzombie_zz
00:18:12  * mikolalysenkojoined
00:19:19  <ralphtheninja>rvagg: that's a good idea, I should dust off my arduino
00:19:44  <ralphtheninja>but first coffee
00:19:46  <Raynos>defunctzombie: I HAVE TASTED THE FRUITS. I SHALL TURN TRYME INTO AN IDE
00:19:56  <Raynos>ehd: yes
00:20:04  <Raynos>rvagg: no. I'm not going
00:20:14  <Raynos>I think I signed up for some events that start in april
00:20:48  <Raynos>rvagg, dominictarr: what's this dublin thing. I may still go. I'm going to http://html5devconf.com/ april 1-2
00:21:05  <rvagg>Raynos: p2p, you have to be there
00:21:11  <Raynos>what day
00:21:23  <rvagg>28/29th I think
00:22:07  <Raynos>I'll need more details
00:22:20  <Raynos>I may go if it doesnt break my balls
00:22:23  <Raynos>but I think I have to be there
00:22:36  <rvagg>I think you do
00:22:36  <Raynos>GOD DAMN IT. WHY DO I BUILD FRP FRAMEWORKS & IDES INSTEAD OF P2P FRAMEWORKS
00:22:36  <LOUDBOT>BOREDOM STRIKES AND NONE WILL PERISH
00:22:47  * wiwilliaquit (Ping timeout: 276 seconds)
00:22:52  <rvagg>talk to dominictarr perhaps
00:23:04  <rvagg>it's his "big" birthday too I believe
00:24:00  <ralphtheninja>it's 29th and 30th
00:24:45  <Raynos>Ok
00:24:51  <Raynos>I'll go because I should
00:24:55  <Raynos>where ?
00:25:02  <Raynos>where do i fly to :D
00:25:05  <ralphtheninja>Dublin :)
00:25:14  <Raynos>couch surf or hotel?
00:25:31  <ralphtheninja>I think cian will sort out the hotel for ya
00:25:39  <ralphtheninja>just get that plane ticket
00:29:47  * guybrush_quit (Ping timeout: 248 seconds)
00:29:48  * shamaquit (*.net *.split)
00:29:48  * niftylettucequit (*.net *.split)
00:29:48  * cubertquit (*.net *.split)
00:29:48  * CoverSlidequit (*.net *.split)
00:29:48  * sbpquit (*.net *.split)
00:29:49  * paul_irishquit (*.net *.split)
00:29:49  * doolsquit (*.net *.split)
00:30:09  * esterellaquit (Quit: esterella)
00:30:47  * guybrushjoined
00:33:49  <ins0mnia>is there anything out there in the wild that maps JSON objects to DOM elements? sort of mapper?
00:33:55  * yorick_quit (Read error: Connection reset by peer)
00:34:23  <Raynos>when should I arrive
00:39:12  * shamajoined
00:39:13  * sbpjoined
00:39:13  * niftylettucejoined
00:39:13  * cubertjoined
00:39:13  * CoverSlidejoined
00:39:13  * paul_irishjoined
00:39:13  * doolsjoined
00:39:20  * ins0mniaquit (Excess Flood)
00:40:32  * esterellajoined
00:41:03  * marcello3dquit (Remote host closed the connection)
00:41:41  * ins0mniajoined
00:42:34  * kenperkinsquit (Ping timeout: 250 seconds)
00:54:38  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
00:54:39  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
00:58:26  <substack>yay
00:58:28  <substack>check it https://github.com/substack/node-falafel#custom-keyword
00:58:40  * ins0mniaquit (Ping timeout: 272 seconds)
00:59:16  * Domenic_joined
00:59:33  <substack>Domenic_: https://github.com/substack/node-falafel#custom-keyword
01:00:00  <substack>you'll see where I'm going with this momentarily
01:00:14  <ralphtheninja>Raynos: the 28th the latest I guess
01:02:07  <ralphtheninja>I'll let Cian know you're coming
01:03:49  * Domenic_quit (Ping timeout: 264 seconds)
01:04:19  * tilgovijoined
01:05:58  * thl0joined
01:06:50  * esterellaquit (Quit: esterella)
01:08:57  <Raynos>I havn't confirmed
01:09:13  <Raynos>so i should go 28th - 31st ?
01:10:12  * thl0quit (Ping timeout: 248 seconds)
01:10:33  <ralphtheninja>sounds good
01:10:51  <ralphtheninja>or you can tell cian yourself instead, when you have confirmed :)
01:11:06  <Raynos>whom is this Cian
01:11:13  <Raynos>https://github.com/cian ? :D
01:11:48  <ralphtheninja>https://twitter.com/Cianomaidin
01:20:57  <jesusabdullah>I should look into that
01:21:09  <jesusabdullah>I don't have a history of conference-going but I have stuff to talk about now
01:21:15  <substack>https://github.com/substack/mmmify
01:21:18  <jesusabdullah>ugh that's right need to apply to speak at nodepdx
01:22:00  <jesusabdullah>cute substack
01:23:08  <substack>ok now then back to actual work
01:26:28  <jesusabdullah>I feel that
01:26:36  <jesusabdullah>but not enough to take action
01:26:40  <jesusabdullah>>_<
01:31:12  * tilgoviquit (Remote host closed the connection)
01:32:08  <jesusabdullah>substack: you retweetin my retweet brah?
01:32:26  <substack>YES
01:32:31  <substack>gonna take twitter down
01:32:45  <substack>with cyclic tweets
01:34:22  <jesusabdullah>PERFECT
01:34:37  <jesusabdullah>if only I could fit another RT @substack in there
01:34:38  <jesusabdullah>hahaha
01:40:18  * thl0joined
01:42:43  * ryan_stevensjoined
01:46:06  * mikealquit (Quit: Leaving.)
01:52:31  <substack>thl0: make sure domenic sees https://github.com/substack/mmmify
01:52:58  <mikolalysenko>substack: nice, I hope it (or something like it) catches on
01:53:08  <thl0>substack: I will when I see him tomorrow - just had a look myself and like it
01:54:13  <substack>how do I spam this to the cesspool that is es-discuss
01:55:12  <mikolalysenko>I have no idea, but if you can somehow articulate why es6 modules are bad in a way that will make it to the front page of hacker news/reddit; then I bet people will pay attention
01:55:24  <substack>good plan
01:55:27  <mikolalysenko>maybe write something inflamatory like ES6 modules are cancer
01:55:27  <substack>I might get around to that
01:56:03  <substack>anyways I have work to do
01:56:51  <substack>I'm not being paid by the likes of mozilla or google to argue on mailing lists all day about horrible design-by-committee
01:58:06  <mikolalysenko>yeah, I have to admit I am not a huge fan of those discussions
01:58:21  <mikolalysenko>but I think if you get enough attention then they might reconsider
01:58:30  <substack>tc39 should just be disbanded
01:58:34  <substack>just stop iterating on the language
01:58:38  <mikolalysenko>maybe
01:58:44  <mikolalysenko>I like binary data types though...
01:58:53  <mikolalysenko>and the generators/coroutines are nice too
01:58:54  <substack>I'm not even against the idea of improving the language
01:59:06  <substack>it's just that tc39 is among the worst possible ways to do it
02:00:06  <mikolalysenko>I'm all for features that improve performance, but adding more syntax seems pointless
02:01:07  <mikolalysenko>for me anyway, I just want my code to run quickly and correctly on as many platforms as possible
02:01:50  <mikolalysenko>but yeah, the es6 modules are terrible
02:02:03  <mikolalysenko>a lot of the features are basically some crappy attempt to copy python
02:02:13  <substack>or functional programming hipster bullshit
02:02:24  <substack>"oh I know ML therefore my opionions are correct"
02:02:28  <substack>fuck those guys
02:02:40  <mikolalysenko>meh, I don't see any ml stuff in es6
02:02:44  <mikolalysenko>but I see a lot of python
02:02:49  <mikolalysenko>like the modules are exactly python's
02:02:54  <mikolalysenko>and so is the destructuring syntax
02:02:56  <substack>anybody running around using the word "declarative" to describe their creations falls into this category
02:02:58  <mikolalysenko>and the yield()...
02:03:43  * dguttmanquit (Quit: dguttman)
02:04:11  <mikolalysenko>functional is a weird word, kind of like object oriented or "design patterns"
02:04:30  <mikolalysenko>frankly, I am more ok with that than the crap that people churned out in the 80s/90s along those lines
02:06:16  <mikolalysenko>hang on, have to take my dog out
02:13:39  <Raynos>substack: whats wrong with "declarative" ?
02:16:27  * mikealjoined
02:22:44  <spion>some extra syntax would be nice - i'm kinda tired of writing function(x) { return ... }
02:25:10  <spion>arr.filter(function(x) { return x > 5 }).map(function(x) { return x * x; }).reduce(function(acc, x) { return acc + x }) vs... say...
02:25:26  * mikealquit (Ping timeout: 272 seconds)
02:25:48  <thl0>substack: what should I base my browserify changes on 'v2' or master?
02:25:49  <spion>arr.filter(x => x > 5).map(x => x*x).reduce((acc,x) => acc + x))
02:28:43  <thl0>substack: I guess master since its further ahead ;)
02:52:51  * mikealjoined
02:56:54  * spionpart ("Leaving")
02:57:09  * mikealquit (Ping timeout: 240 seconds)
03:06:45  <thl0>hey guys, guess what this is -- /Users/thlorenz/Desktop/Screen Shot 2013-03-07 at 10.05.11 PM.png
03:08:48  <thl0>ok I give up -- how do you inline images via Limechat?
03:09:03  <Raynos>you upload them
03:09:04  <Raynos>to imgur
03:09:29  <thl0>Raynos: thanks - I'll tweet and post a link -- faster ;)
03:10:44  * defunctzombie_zzchanged nick to defunctzombie
03:11:46  <thl0>https://twitter.com/thl0/status/309863772560961536
03:15:45  <defunctzombie>thl0: nice
03:15:50  <defunctzombie>substack: mmmify rofl
03:15:57  <defunctzombie>substack: show those bitches how it is done
03:16:01  <thl0>defunctzombie: thanks, getting there
03:16:18  <defunctzombie>substack: any advantage to export keyword over just return?
03:16:19  * nk109quit (Quit: Computer has gone to sleep.)
03:16:24  * marcello3djoined
03:16:39  * marcello3dquit (Remote host closed the connection)
03:16:39  <thl0>defunctzombie: just need to figure out how to properly give relative filepaths -- i.e. they need to be relative to wherever the bundle.js is served from
03:16:47  * marcello3djoined
03:16:48  <defunctzombie>substack: less keywords seems better, but you still want to be able to handle the cyclical case I think
03:17:04  <defunctzombie>thl0: probably needs to be educated from higher up or some such
03:17:43  <thl0>yep, so the user needs to let us know where he aims to put the bundle and/or the path it is served from (could be in memory after all)
03:18:45  <thl0>then the original files need to actually be served from a path relative to it (i.e. most likely the root)
03:19:30  <thl0>still playing around with it -- browser-pack is ready though -- will do the PR in conjunction with a PR on browserify
03:19:36  <thl0>once all is working
03:21:07  <defunctzombie>\o/
03:21:42  <thl0>defunctzombie: putting the bundle in a sub dir (i.e. ./build) leads to paths like js/build/.. in the browser
03:21:59  <thl0>so we should advice to just put it in the root of all js files
03:22:27  * ryan_stevens1joined
03:23:00  * ryan_stevensquit (Ping timeout: 248 seconds)
03:23:08  <Raynos>what if you dont put the bundle anywhere
03:23:12  <Raynos>and just serve it out of memory
03:23:34  <Raynos>oh wait
03:23:38  <Raynos>I see
03:23:56  <Raynos>at the HTTP uri Level I tend to server them from `/browserify/:bundleName`
03:27:10  <defunctzombie>I tend to serve from /js/path/file.js
03:27:18  <defunctzombie>anyhow, that must certainly be flexible
03:28:02  <thl0>so when chrome sees the sourcemaps, it will try to find the files relative to where the bundle came from
03:28:55  <thl0>so you can serve from memory, but these routes have to exist so it can get the files, i.e. we'd need to set all 'sourceFile' props relative to where the bundle will come from
03:29:13  <thl0>which looks stupid if it is in a subfolder
03:30:00  <thl0>defunctzombie: Raynos: breakpoints don't work a 100% though even in beta and canary, but I hope that will improve (its a browser issue the sourcemappings are correct)
03:30:14  <Raynos>who uses breakpoints
03:30:19  <Raynos>thats like for tool type people :D
03:30:44  <thl0>isn't that why you want source maps, so you can breakpoint?
03:36:10  * thl0quit (Remote host closed the connection)
03:38:31  * zero_coderjoined
03:43:01  <Raynos>thl0: so that I can click a link in a stacktrace
03:43:05  <Raynos>and it doesnt go somewhere stupid
03:44:26  * zero_coderquit (Read error: Connection reset by peer)
03:45:46  <defunctzombie>Raynos: I don't think you need sourcemaps for that
03:45:55  <Raynos>well
03:45:57  <Raynos>either sourcemaps
03:46:00  <Raynos>or @sourceUrl
03:46:02  <Raynos>will do for that
03:46:03  <defunctzombie>yea
03:46:09  <Raynos>but @sourceUrl requires eval
03:49:31  <defunctzombie>no
03:49:35  <defunctzombie>it requires Function
03:53:03  <Raynos>Function and eval
03:53:07  <Raynos>are the same thing
03:53:08  <Raynos>:3
03:58:55  <mikolalysenko>hi everyone, was wondering if I could get some early feedback on the api for this library I've been working on:
03:58:58  <mikolalysenko>https://github.com/mikolalysenko/cwise
04:06:08  * dguttmanjoined
04:13:03  * zero_coderjoined
04:14:21  * esterellajoined
04:23:39  * ryan_stevens1quit (Quit: Leaving.)
04:26:08  <defunctzombie>http://stackoverflow.com/questions/15262542/tiffopen-too-many-open-files
04:26:13  <defunctzombie>that is some C bullshit right there
04:29:04  <substack>isaacs: published that http rant module https://github.com/substack/hyperquest
04:29:25  <substack>hopefully the stuff in 0.10 fixes my objections
04:31:40  <substack>Raynos: "declarative" is used as cover to justify horrible, sprawling DSL-esque apis
04:31:41  <substack>the word is toxic now
04:41:47  <substack>http://www.reddit.com/r/javascript/comments/19w7eb/maximally_minimal_modules_for_the_es6_that_could/
04:42:19  <defunctzombie>+1
04:42:20  <Raynos>substack: http://raynos.graphics-server.jit.su/full/mario.js#L95
04:42:30  <Raynos>do you think that display function
04:42:37  <Raynos>is a horrible, sprawling DSL-esque api
04:43:17  * zero_coderquit (Remote host closed the connection)
04:48:37  <substack>I don't see a function display()
04:48:40  <substack>tell me what to look at
04:51:25  <mikolalysenko>substack: would you say this is declarative? https://github.com/mikolalysenko/cwise
04:51:49  <mikolalysenko>it is a work in progress, and if you have suggestions for how to make it simpler I am open to ideas
04:52:29  <mikolalysenko>basically I need this sort of thing to implement this: https://github.com/mikolalysenko/ndarray-ops
04:55:34  <substack>I would probably write that module as something more imperative-looking
04:55:44  <substack>I have personally grown to distrust chained apis
04:56:13  * marcello3dquit (Remote host closed the connection)
04:59:31  <mikolalysenko>substack: hmm, I could do it using a json object instead
04:59:45  <Raynos>substack: https://gist.github.com/Raynos/78aef8a57d216283151c
04:59:53  <mikolalysenko>like cwise({ args: [...], begin: ..., body: ..., })
05:00:52  <substack>mikolalysenko: or you could just not chain the calls together
05:01:02  <mikolalysenko>how so?
05:01:04  <substack>I think the deep huge nested object is just as bad
05:01:18  <substack>just b.foo(); b.bar(); b.baz()
05:01:26  <substack>instead of b.foo().bar().baz()
05:01:34  <mikolalysenko>that works too
05:01:39  <substack>it's much more obvious what the object is that is being operated on
05:01:40  <mikolalysenko>you can do:
05:01:41  <substack>much more readable
05:01:47  <mikolalysenko>var a = cwise("array")
05:02:03  <mikolalysenko>a.begin(function() ...)
05:02:18  <substack>chaining function calls is good when you're actually transforming the input in such a way that intermediate state is transferred
05:02:25  <mikolalysenko>true
05:02:27  <substack>but if you're just mutating the same object it loses its benefit
05:02:40  <substack>it's good for array.{map,filter,reduce} chains for instance
05:02:46  <mikolalysenko>yeah, it does seem a little silly here
05:02:47  <substack>because you get a new array ref every step of the way
05:02:59  <substack>so when you chain them together you're saving having to define intermediate state variables
05:02:59  <mikolalysenko>what I am using them for is to just fill in data
05:03:04  <defunctzombie>that is why I like the a.foo()..bar() style if syntax allows it
05:03:10  <mikolalysenko>I don't do anything with it until you call compile()
05:03:13  <defunctzombie>chaining should be builtin to language if anything
05:03:31  <mikolalysenko>which is why I am sort of now leaning toward just taking a big json object as input, and building it in one shot...
05:03:55  <substack>defunctzombie: it's not as obvious what the referent of each function call is though
05:04:14  <substack>mikolalysenko: well that is kind of annoying too
05:04:19  <substack>I dislike both of those approaches
05:04:30  <mikolalysenko>well, here is what the code does:
05:04:31  <mikolalysenko>https://github.com/mikolalysenko/cwise/blob/master/index.js
05:04:31  <substack>what's wrong with b.foo(); b.bar(); b.baz()?
05:04:39  <substack>if they are imperative operations they should look imperative
05:04:45  <mikolalysenko>that would work in this case, too same API
05:04:59  <mikolalysenko>err comma was in wrong spot there, but you know what I mean
05:05:07  * dominictarrjoined
05:05:23  <substack>Raynos: not really sure what your thing does but it seems fine
05:05:37  <Raynos>i'd describe
05:05:47  <Raynos>as declarative way to create a canvas scene
05:06:02  <substack>just don't describe it that way
05:06:12  <Raynos>the alternative is imperative hacking with the canvas rect and line apis
05:06:21  <substack>"declarative" is pretty much a content-free term at this point
05:06:31  <defunctzombie>substack: mikolalysenko: personally I hate single letter var names :P
05:06:40  <substack>single letter names are great
05:06:46  <defunctzombie>no, they are not
05:06:52  <Raynos>they are great
05:06:53  <mikolalysenko>for(i=0; i<10; ++i)
05:06:56  <Raynos>in single expression functions
05:06:57  <mikolalysenko>vs
05:07:01  <substack>some variables are merely transitive and don't have a good name at all
05:07:04  <mikolalysenko>for(eye=0; eye<10; ++eye)
05:07:09  <defunctzombie>substack: they have names
05:07:17  <substack>forcing a name where there is none is silly
05:07:18  <defunctzombie>substack: your code is actually harder to figure out as a result btw :)
05:07:29  <Raynos>ok
05:07:32  <defunctzombie>mikolalysenko: ive seen people use the ii convention
05:07:41  <Raynos>how do we solve the "WHAT DO I NAME MY FUNCTION / VARIABLE / MODULE" problem
05:07:42  <Raynos>forever
05:07:44  <defunctzombie>anyhow, for loops are a pretty special case
05:08:09  <defunctzombie>substack: variable mean things or store things and should be named as such
05:08:14  <defunctzombie>otherwise makes no fucking sense
05:08:26  <defunctzombie>substack: like the g, d vars in browserfify, very confusing
05:08:48  <Raynos>should I locally alias `make` to `npm run`
05:08:50  <Raynos>would that be bad?
05:09:06  <substack>defunctzombie: what are you doing reading code so much
05:09:14  <substack>the point of modules is that they are black boxes
05:09:25  <substack>somebody writes it once and then we can forget about it
05:09:26  <defunctzombie>substack: they must be maintained
05:09:27  <defunctzombie>and do break
05:09:36  <defunctzombie>and in development it matters
05:09:47  <defunctzombie>if you write shitty code from day one, you will regret it later
05:09:54  <defunctzombie>it doesn't take much effort to name something
05:09:59  <substack>browserify v2 is pretty good now
05:10:16  <substack>despite having MORE single-letter variables than v1
05:10:40  <mikolalysenko>my feeling is less code = better code
05:10:47  <mikolalysenko>so shorter variables = better variables
05:10:48  <substack>because that shit is so unimportant compared to higher-order organization
05:10:58  <defunctzombie>substack: it is still very annoying to think about
05:11:03  <substack>I generally dislike overly-long variable names
05:11:14  <defunctzombie>substack: I am just telling you from an outside perspective as someone who added code to it
05:11:18  <defunctzombie>substack: I agree
05:11:24  <defunctzombie>but there is a compromise
05:12:06  <defunctzombie>substack: in the future I want to be able to read the code, especially if I want to understand it or many use it for reference when refactoring or building something new
05:12:28  * shamaquit (Remote host closed the connection)
05:14:35  <mikolalysenko>I think of single letter variables as being something like pronouns
05:15:08  <mikolalysenko>they let you communicate more effectively, without constantly repeating yourself
05:16:05  <defunctzombie>only valid use case is for loop index
05:16:11  <defunctzombie>everything else is laziness
05:16:14  <defunctzombie>at the cost of clarity
05:16:55  * dominictarrquit (Quit: dominictarr)
05:17:03  <mikolalysenko>var t = a; a = b; b = t
05:18:14  <mikolalysenko>anyway, I got to go
05:20:59  <defunctzombie>mikolalysenko: yea, bad place for single letter var names
05:21:14  <defunctzombie>mikolalysenko: now I have no idea if t is a temp or if you fucked up
05:22:27  * dguttmanquit (Quit: dguttman)
05:22:29  * mikolalysenkoquit (Ping timeout: 245 seconds)
05:37:46  * ryan_stevensjoined
05:38:19  * defunctzombiechanged nick to defunctzombie_zz
05:50:17  * defunctzombie_zzchanged nick to defunctzombie
05:51:43  * esterellaquit (Quit: esterella)
05:58:48  * nk109joined
06:05:06  * esterellajoined
06:07:35  <defunctzombie>public service announcement: http://shtylman.com/post/cron-shell-power/
06:14:10  <guybrush>defunctzombie: i like setTimeout() :p
06:14:24  <guybrush>though we run some crons too
06:14:27  <defunctzombie>guybrush: me too, but sometimes I don't want to maintain uptime on services
06:14:32  <defunctzombie>I need shit to run and end
06:14:37  <defunctzombie>and not run for a day
06:14:39  <defunctzombie>or sometimes two
06:15:41  <guybrush>just run one process with setInterval or sth and read a json in interval :D
06:16:06  <defunctzombie>haha
06:16:12  <defunctzombie>sounds like I have more headache now
06:16:34  <defunctzombie>cron isn't great, but if you gotta have it, might as well make it suck less
06:16:39  <defunctzombie>and save yourself some pain
06:16:58  <guybrush>im switching more and more from bash to js
06:18:55  <guybrush>woooot you could run redis with expire hahaha
06:19:28  <defunctzombie>wow
06:19:48  <defunctzombie>guybrush: you could use the shell thing to run the commands using node as the "shell" I think
06:19:48  <defunctzombie>haha
06:20:03  <guybrush>endless possibilities
06:22:21  * defunctzombiechanged nick to defunctzombie_zz
06:48:54  * mikealjoined
07:01:09  <Raynos>defunctzombie: https://github.com/Raynos/tryme/commit/af073d4e1eab996325221970f7b0b2aa03cf0916
07:12:22  * esterellaquit (Quit: esterella)
07:18:30  <rvagg>juliangruber: you there?
07:18:41  <juliangruber>rvagg: morning
07:18:51  <rvagg>juliangruber: afternoon
07:19:51  <substack>oh yeah so if you are using http as a streaming transport DO NOT USE core http.request NOR SHOULD YOU USE the request module
07:20:15  <substack>not at least until node 0.10 or until request gets updated to have non-idiotic self-imposed limits
07:20:18  <substack>https://github.com/substack/hyperquest
07:20:24  <rvagg>juliangruber: I have @wolfeidau keen to look at your dtracing
07:20:32  <rvagg>do you have time?
07:20:33  <substack>mikeal: https://github.com/substack/hyperquest
07:20:52  <substack>particularly, https://github.com/substack/hyperquest#pooling-is-evil
07:20:54  <juliangruber>rvagg: sweet, yes!
07:22:31  <rvagg>just getting his attention to make sure he has time now
07:22:55  <rvagg>juliangruber: he's no super dtrace expert but he's a low-level nerd who knows a bit about dtrace
07:23:19  <rvagg>juliangruber: you're both in #node.js so why don't you take it there?
07:23:29  <juliangruber>yes
07:23:36  <juliangruber>thanks for doing this :)
07:24:56  <rvagg>juliangruber: np, I'm interested to understand it a bit more myself.. he may be afk for the moment
07:25:05  <juliangruber>ok
07:28:36  <substack>https://github.com/mikeal/request/issues/465
07:28:40  <substack>fuck everything about this bug
07:29:23  <substack>pooling needs to just go completely away
07:29:28  <substack>it should not be in core AT ALL
07:29:29  <substack>isaacs: ^^^
07:30:53  <juliangruber>rvagg: my current theory about the flame graphs is that since they look so nicely symmetric and only the stack is very deep, that it's just the amount of stuff going on that makes it slow
07:31:44  <rvagg>juliangruber: why is there so much stuff going on?
07:32:36  <juliangruber>we have leveldb inside levelup inside rpc inside serialisation inside muxdemux inside serialisation
07:39:23  <juliangruber>what is the fastest streaming serialization module for node? redis-protocol, msgpack-stream, JSONStream?
07:41:49  <rvagg>I don't know but I'd take a guess that msgpack might be pretty good
07:42:13  <rvagg>tho json is native if you don't have to do anything special to the data (like check for circulars)
07:44:27  <juliangruber>ok
07:44:28  <juliangruber>thanks
07:58:54  <substack>http://browserling.com:9088/mad-science
07:58:55  <substack>mars!
08:04:12  <jesusabdullah>bedtime!
08:04:15  <jesusabdullah>Peace homies
08:04:25  <substack>jesusabdullah: click my link first
08:04:34  <substack>http://substack.net/images/virtual_mars.svg
08:04:47  <substack>remember this thing from the dlab?
08:32:30  * cianomaidinjoined
09:05:04  * cianomaidinquit (Ping timeout: 272 seconds)
09:23:05  * cianomaidinjoined
09:32:33  * cianomaidinquit (Quit: cianomaidin)
09:42:04  * zero_coderjoined
09:43:05  * AvianFluquit (Remote host closed the connection)
09:47:31  <substack>https://github.com/substack/hyperquest#rant
09:49:32  * cianomaidinjoined
09:54:58  <substack>http://browserling.com:9088/mad-science 4 of them up now
09:55:27  * dominictarrjoined
09:55:47  <juliangruber>substack: sad that there's no video for the theatrical production!
09:55:53  <substack>yeah!
09:56:00  <substack>copyright reasons
09:56:04  <juliangruber>meeh
09:56:06  <substack>it was recorded though
09:56:31  <juliangruber>ok
09:57:02  <juliangruber>hyperquest is rad btw
09:58:16  <substack>well I don't like that hyperquest needs to exist >_<
09:58:34  <juliangruber>me neither
09:58:48  <juliangruber>that changes in 0.10 you said?
09:58:58  <substack>but if you are treating http as a stream it's completely infeasible to use node's default http pooling behavior
09:59:21  <substack>isaacs has made some progress in 0.10 on this front although I'm not entirely certain to what extent
09:59:39  <juliangruber>ok
09:59:52  * dominictarrquit (Client Quit)
10:00:38  <juliangruber>it would be cool to have a website that says what's going on in node core
10:00:41  <juliangruber>in a friendly way
10:01:29  <juliangruber>to get people involved in discussions
10:02:18  <juliangruber>in case that makes sense for node core. like, I didn't see many discussions about streams new except in this very room
10:04:01  <substack>it's a ton of overhead to put those resources together though
10:04:11  <substack>isaacs certainly doesn't have the time to put that kind of thing together
10:04:21  <substack>it's impressive that he's been keeping up with the blog posts
10:08:51  <juliangruber>do you mean for reporting or for saying "hey we're planning domains. this is what the spec looks like."
10:12:28  <Raynos>juliangruber: streams2 has been in the work for a while
10:12:42  <Raynos>isaacs talked about pretty much the entire API back in june '12
10:13:01  <juliangruber>where?
10:13:14  <Raynos>And a lot of the changes and patches have happened due to pull requests and bug reports
10:14:20  <juliangruber>hm...I'm talking about the kind of developers that don't want to watch joyent/node as that's too much noise but still want to have a good view of the important things going on
10:14:47  <Raynos>https://github.com/isaacs/readable-stream/tree/6ce010de950ef8e6470bdcdcaef168efc1d66963
10:14:54  <Raynos>he started working on it 8 months ago
10:16:02  <substack>so I've come to something of a realization
10:16:21  <substack>just put <style></style> tags in your html files
10:16:39  <substack>and just only refer to elements in the current html
10:17:12  <substack>then the pieces are self-contained
10:17:13  <substack>https://github.com/substack/substack.net/blob/master/static/pages/mad_science.html
10:17:31  <substack>and you don't need fancy tools to assemble your css
10:17:45  <substack>you can just use the stuff that builds your html
10:18:11  <substack>which in my case is just https://github.com/substack/substack.net/blob/master/server.js#L22-L30
10:18:13  <juliangruber>\o/
10:18:33  <substack>kind of really liking this approach
10:19:20  <juliangruber>so you don't use brfs anymore
10:19:39  <substack>sure I do
10:20:02  <juliangruber>well, in this project
10:20:27  <substack>this project will use brfs again when I get to the blogging part where I'll have dynamic content I need to render
10:21:02  <substack>each tool has its place
10:23:20  <juliangruber>kk
10:24:14  <juliangruber>what I still find challenging when using streams for "new" things, is naming. in the code you pasted you have an object called streams which IMO shouldn't exist
10:24:19  <juliangruber>it could be pageStreams
10:24:23  <juliangruber>or inserts
10:24:33  <juliangruber>(I mean it shouldn't exist with that name)
10:24:55  <juliangruber>but i don't like having "stream" which is kind of a type, in a variable name
10:25:08  <juliangruber>with event emitters you have events
10:25:13  <juliangruber>with streams you have...
10:25:14  <juliangruber>?
10:25:30  <substack>meh
10:25:42  <substack>I am not bothered by such things.
10:26:31  * ins0mniajoined
10:30:23  * nicholasfquit (Read error: Connection reset by peer)
10:30:56  * nicholasfjoined
10:31:35  <juliangruber>it's like a bad itch
10:39:58  * zero_coderquit (Quit: No Ping reply in 180 seconds.)
10:41:13  * zero_coderjoined
10:52:31  * ins0mniaquit (Ping timeout: 276 seconds)
11:15:35  <rvagg>sorry juliangruber wolfeidau has disappeared somewhere; I'll make sure he catches up with you some time cause I think he'd enjoy the challenge
11:15:55  <rvagg>he was after the script that created the graph in the first place, perhaps you could gist something
11:21:17  * cianomaidinquit (Quit: cianomaidin)
11:22:53  <juliangruber>rvagg: https://gist.github.com/juliangruber/5115813
11:22:58  <juliangruber>I'll send this to him on twitter
11:23:06  <rvagg>cool, thanks
11:35:14  * cianomaidinjoined
11:52:05  <juliangruber>substack: why can connection pooling result in fewer requests being made? I thought it would just limit the number of concurrent requests
12:06:40  * thl0joined
12:20:52  * ryan_stevensquit (Quit: Leaving.)
12:21:34  * zero_coderquit (Remote host closed the connection)
13:17:52  * marcello3djoined
13:22:20  * ITprojoined
13:27:16  * ITproquit
13:27:58  * ITprojoined
13:34:15  * cianomaidinquit (Quit: cianomaidin)
13:49:48  * jibayjoined
13:51:41  * stlsaintquit (Ping timeout: 245 seconds)
13:53:35  * thl0quit (Remote host closed the connection)
13:55:45  * cianomaidinjoined
14:00:13  * thl0joined
14:00:49  * thl0quit (Remote host closed the connection)
14:27:54  * thl0joined
14:52:16  <isaacs>substack: 0.10 reduces the impact of the 2 minute timeout
14:52:21  <isaacs>substack: and that's only on servers anyway
14:52:30  <isaacs>substack: 0.10 does nothing to alleviate the pooling logic
14:52:46  <isaacs>substack: just fwiw, you can set agent:false in request, and http.request
14:52:59  <isaacs>substack: or you can change the maxSockets on the http.globalAgent
14:53:19  <isaacs>http.globalAgent.maxSockets = Infinity
14:53:21  <isaacs>boom
14:53:29  <isaacs>now you'll reuse sockets, but also create them until forever.
14:53:34  <isaacs>substack: and get better performance
14:53:57  <isaacs>substack: and force -- yes, FORCE -- other programs to do the right thing
14:54:16  <isaacs>substack: could also create your own agent, and then set it's maxSockets to Infinity
15:00:58  <thl0>does a module exist that changes this path: 'foo/bar/sub/../x.js' into 'foo/bar/x.js' ?
15:01:32  <thl0>should be trivial to write, just don't want to reinvent the wheel
15:10:19  * zero_coderjoined
15:13:59  <marcello3d>path?
15:14:14  <marcello3d>http://nodejs.org/api/path.html#path_path_normalize_p
15:16:24  <thl0>marcello3d: thanks, I thought I tried that this morning and it didn't do what I needed - must not have been fully awake yet ;)
15:17:00  <thl0>marcello3d: just tried in the repl and it seems to do exactly what I want
15:18:11  <marcello3d>nice
15:25:01  * Domenic_joined
15:31:58  * ins0mniajoined
15:32:38  * Domenic_quit (Remote host closed the connection)
15:37:19  * mikealquit (Quit: Leaving.)
15:37:43  * mikealjoined
15:37:58  * mikealquit (Client Quit)
15:38:45  * Domenic_joined
15:45:18  * tmcwjoined
15:46:16  * zero_coderquit (Read error: Connection reset by peer)
15:48:34  * dguttmanjoined
16:00:47  * ryan_stevensjoined
16:01:22  * defunctzombie_zzchanged nick to defunctzombie
16:11:11  * mikealjoined
16:13:37  * cianomaidinquit (Quit: cianomaidin)
16:17:26  * mikolalysenkojoined
16:18:55  * cianomaidinjoined
16:26:08  <defunctzombie>http://teespring.com/keep-calm-and-node-on
16:26:11  <defunctzombie>this is brilliant
16:26:18  <defunctzombie>I am gonna order one haha
16:26:23  <defunctzombie>anyone else in NYC want one?
16:27:36  * kenperkinsjoined
16:31:04  <mikeal>substack: woke up to your pooling rants today :)
16:34:13  * mikolalysenkoquit (Ping timeout: 256 seconds)
16:34:35  <defunctzombie>is the pooling going away in 0.10?
16:35:08  <mikeal>its changing
16:37:06  <defunctzombie>to what?
16:37:17  <defunctzombie>will there be a wiki page with infos?
16:37:35  * esterellajoined
16:38:10  * ryan_stevensquit (Quit: Leaving.)
16:43:22  <mikeal>defunctzombie: there's an issue on github
16:43:43  <mikeal>so, this one **http requests have a default idle timeout of 2 minutes.** i've only just started to see people complain about
16:43:58  <mikeal>its always been there, and i'm pretty sure it's in net.js not http.js
16:45:23  * esterellaquit (Quit: esterella)
16:47:29  * cianomaidinquit (Quit: cianomaidin)
16:47:57  <defunctzombie>mikeal: why is it there?
16:48:25  <defunctzombie>why not just use socket defaults unless user specifically requests it?
16:48:42  <mikeal>i don't know :)
16:52:01  <defunctzombie>cool
16:59:43  * marcello3dquit (Remote host closed the connection)
17:03:19  * cianomaidinjoined
17:04:21  * mikolalysenkojoined
17:06:14  * Domenic_quit (Remote host closed the connection)
17:06:21  * stlsaintjoined
17:09:48  * mikolalysenkoquit (Ping timeout: 264 seconds)
17:09:54  <defunctzombie>I am not pretty convinced that modules out 100% outside of browser scope
17:10:08  <defunctzombie>*now
17:15:04  * mikealquit (Quit: Leaving.)
17:15:48  * Domenic_joined
17:17:19  * stlsaintquit (Ping timeout: 276 seconds)
17:23:00  <thl0>defunctzombie: but given you use browserify - how would you know what to include in the bundle if it is required conditionally?
17:30:41  <defunctzombie>thl0: I would just include it
17:30:48  <defunctzombie>thl0: or avoid conditional requires
17:31:02  <defunctzombie>the cost of including something (especially with mult bundles and caching) is a non problem
17:31:21  <defunctzombie>thl0: I also use the browser field when I have client/server differences
17:31:36  <defunctzombie>thl0: between those approaches, doesn't much matter
17:31:43  <thl0>defunctzombie: that's what @Domenic_ is trying to convince people of, that imports/requires should be on the root level, unconditional and statically analyzable
17:32:02  <defunctzombie>thl0: what would be actually better is final bundle static analysis to remove non callable code paths, but we can get there later
17:32:11  <defunctzombie>thl0: I 100% agree with that
17:32:33  <defunctzombie>thl0: I just think that people who don't understand why are not going to be convinced
17:32:43  <thl0>defunctzombie: cool, so could just import it unconditionally, but USE it conditionally
17:32:47  <defunctzombie>thl0: because they have something in their mind telling them they "need" that feature
17:32:55  <defunctzombie>thl0: yep, sure
17:33:16  <defunctzombie>thl0: and if you are so concerned about the "size" of the bundles, you have to re-evaluate a lot more things anyway
17:33:40  <thl0>defunctzombie: if they really need that feature, they need to serialize a function and load that via ajax ;)
17:33:48  <defunctzombie>thl0: I am against bundle size bloat for no reason, but most of these arguments are moot because we are talking about a 2K difference
17:33:53  <defunctzombie>thl0: yep
17:34:00  <defunctzombie>thl0: or use something like dnode
17:34:21  <defunctzombie>and not ship a bunch of useless code to the client
17:34:35  <defunctzombie>thl0: people overengineer and think their problems are special
17:34:46  <thl0>defunctzombie: not concerned, just not happy that people want to conditionally require things which would make it impossible to know what all needs to be in the bundle
17:34:52  <defunctzombie>I can tell them they are not because there is a good chance we have alreayd solved their problem
17:35:14  <defunctzombie>thl0: let those people suffer in their own world of pain
17:35:18  <thl0>defunctzombie: IMO just bundle everything you may need and then use it conditionally
17:35:22  <defunctzombie>thl0: one day when it bites them they will learn
17:35:28  <defunctzombie>thl0: and for things I care about I fork and fix
17:35:45  <thl0>defunctzombie: if people are concerned about size -- gzip
17:35:49  <defunctzombie>yes
17:45:44  * defunctzombiechanged nick to defunctzombie_zz
17:47:59  * cianomaidinquit (Quit: cianomaidin)
17:54:42  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
17:54:43  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
17:55:19  * esterellajoined
17:55:52  <pkrumins>\o/
17:57:19  * mikolalysenkojoined
17:57:23  * mikolalysenkoquit (Client Quit)
17:57:39  * mikolalysenkojoined
18:05:58  <substack>isaacs: so I DID set http.globalAgent.maxSockets to Infinity in my program running in production but was still getting bugs because request uses its OWN idiotic 5 connection pooling limit
18:06:07  <substack>and it WAS causing horribly opaque production bugs
18:06:17  <isaacs>substack: oh, jeez.
18:06:27  <substack>that's why sometimes the testling browsers would just not give any output
18:06:28  <isaacs>substack: oh, i think request does its own agent management
18:06:42  <isaacs>substack: but in hyperquest, you can do that
18:06:49  <substack>the only reason to do custom agent management is not to do any agent management at all
18:06:49  <isaacs>substack: i'm going to write request-lite anyway
18:07:02  <substack>isaacs: I already did that last night!
18:07:02  <isaacs>substack: like all things "lite", it will replace the fat with sugar
18:07:06  <substack>https://github.com/substack/hyperquest
18:07:08  <isaacs>substack: no, you didn't.
18:07:22  <isaacs>substack: you write "duplex http client that doesn't pool sockets ever cuz fuck you"
18:07:28  <substack>yes
18:07:33  <substack>because that is what should happen
18:07:39  <isaacs>substack: first, i'm going to write a general purpose net pooling module that isn't shitty
18:07:40  <substack>always
18:07:59  <isaacs>substack: while "no pooling of sockets ever" is an improvement over what we have, it's not ideal.
18:08:16  <substack>http libs should never ever ever ever use an agent with a connection pool size of <Infinity ever ever ever ever ever
18:08:17  <isaacs>substack: you need pooling to do keepalives, and to get optimum performance, since setting up the connection is much slower than sending data.
18:08:31  <substack>then another module can do that
18:08:45  <substack>for now I think disavowing yourself completely of all connection pooling is the best option
18:09:00  <substack>until core http gets its act together and doesn't HANG UNEXPECTEDLY when you hit the limit
18:10:05  <isaacs>substack: yes.
18:10:26  <isaacs>substack: our limits should be much much higher than the web browser's, and we should raise an error or something if a hang will happen.
18:10:33  <isaacs>it's not like we can't tel.
18:10:59  <isaacs>substack: also, we should have a limit after which, if a socket is still in use, we say, "Ok, I guess you're not giving that back..." and forget about it
18:13:24  <substack>well this sounds reasonable https://github.com/mikeal/request/issues/467
18:15:08  <isaacs>substack: yes we are reasonable fellows :)
18:16:10  <isaacs>substack: so, what about this.. what if the *limit* was infinity, but we keep *open* no more than 8 for keepalive
18:16:32  <substack>how would that work?
18:16:35  <isaacs>substack: and then give you a way to explicitly *ask* for a hard limit, if you want one (some people do)
18:16:47  <isaacs>substack: well, what i mean is, we never close all of thesockets, ever.
18:17:01  <isaacs>substack: the pool just calls sock.unref() if it's not in use, or sock.ref() when it is
18:17:09  <isaacs>substack: and we keep at least 8 around at all times
18:17:23  <substack>that's a bit weird
18:17:24  <isaacs>if we already have 8, and a req finishes, ok, we just destroy() it like we do now if there's nothing pending.
18:17:49  <isaacs>if there's a socket already connected and waiting, a new req uses that, rather than set up a new socket.
18:17:50  <substack>you should need to opt-in to all these magical pooling shenanigans
18:18:00  <isaacs>substack: this is normal http.
18:18:05  <isaacs>this is what reasonable http clients do.
18:18:12  <isaacs>node is not (yet) a reasonable http client.
18:18:28  <substack>meh I guess it's ok
18:18:36  <substack>certainly far better than what exists presently
18:18:47  <isaacs>web browsers actually do keep a hard-limit of 8 sockets per server.
18:18:55  <substack>the hard upper limit is the most objectionable part of the current system
18:18:56  <isaacs>but we're not browsers.
18:18:59  <isaacs>right
18:19:11  <isaacs>like i said, 5 is the local minimum utility
18:19:26  <isaacs>any number would be better.
18:19:30  <substack>because when you've got limits like that and you use http to communicate between processes, you will hit that limit so easily and everything will grind to a halt
18:19:35  * mikealjoined
18:20:17  <substack>so if you are using http to establish streams between procs it's pretty much unworkably bad
18:21:53  <substack>because the behavior of your program is dependant and what other code far away is doing!
18:21:59  <isaacs>yes
18:22:00  <substack>spooky bugs from a distance
18:22:05  <isaacs>shared state concurrency
18:22:08  <isaacs>that's what this is.
18:22:17  <isaacs>with locks!
18:22:28  <isaacs>so you can easily get into a deadlock state, if you have processes communicating with one another.
18:23:02  <isaacs>A needs to send a req to B which is waiting on a response from C which has 5 open connections to D and then will make a req to A etc.
18:23:11  <isaacs>so one thing hits that limit, and everything stops
18:26:59  * AvianFlujoined
18:35:28  * defunctzombie_zzchanged nick to defunctzombie
18:37:31  * marcello3djoined
18:37:36  <defunctzombie>substack: isaacs: stop trying to be smart about it at the core level
18:37:46  <defunctzombie>and just let me have some sockets
18:37:56  <defunctzombie>if you want to put libs or other magical things on it, do that higher up
18:43:58  * AvianFluquit
18:44:45  * AvianFlujoined
18:49:12  * mikealquit (Quit: Leaving.)
18:53:38  <Domenic_>isaacs: i appreciate a core that handles http for me, don't let that hater get ya down ;)
19:06:06  <substack>Domenic_: any thoughts about export semantics?
19:06:21  <substack>nobody has mentioned how exports work at all
19:06:35  <substack>probably because it's the obviously correct super-simple way to do it :D
19:07:50  <defunctzombie>substack: if you can make return work I think that is better
19:08:00  <defunctzombie>substack: but return has potential issues with cyclical deps
19:08:22  <substack>defunctzombie: but then you always need to put `export` at the bottom
19:08:29  <defunctzombie>substack: ?
19:08:35  * st_lukejoined
19:08:39  <substack>if export desugared to return
19:08:44  <defunctzombie>substack: http://lua-users.org/wiki/ModuleDefinition
19:08:49  <substack>oh you mean just use return natively
19:09:02  <substack>that wouldn't be so bad really
19:09:18  <substack>pretty simple
19:09:19  <Domenic_>substack: I'm happy with single export for the mmmify
19:09:21  <substack>defunctzombie: open an issue about it
19:09:35  <Domenic_>i actively dislike reusing return to mean something different
19:09:39  <defunctzombie>substack: the only case it doesn't handle elegantly iirc is a deps on b and b deps on a
19:09:44  <substack>Domenic_: the best part is, single-export removes a whole class of bike-sheddery with the current es6 modules
19:09:59  <Domenic_>yeah
19:09:59  <defunctzombie>Domenic_: stop resisting
19:10:08  <defunctzombie>Domenic_: return means return from scope :p
19:10:09  <Domenic_>single export is perfect for maximal minimalism
19:10:17  <defunctzombie>NO NEW KEYWORDS!!!
19:10:17  <LOUDBOT>BECAUSE YOU KNOW, HEAVY METALS DON'T SETTLE OR ANYTHING
19:10:22  <defunctzombie>haha
19:10:34  <defunctzombie>substack: what I am opening an issue on?
19:10:48  <substack>defunctzombie: how export could just be spelled `return`1
19:10:50  <Domenic_>i think multi-export is a good thing actually, with some use cases, but for maximal minimalism single-export as it currently is is great.
19:10:51  <substack>s/.$//
19:11:16  <substack>the other thing is that mmmify should treat multiple exports in a single file as an error
19:11:35  <defunctzombie>substack: on mmmify?
19:11:39  <substack>yes
19:11:42  <defunctzombie>ok
19:12:01  <substack>Domenic_: what should `if (false) export 4` do?
19:12:27  <substack>maybe export statements should only be allowed to be top-level?
19:12:31  <Domenic_>substack: hmm. well, that depends on if you care about statically verifying import key names against export key names
19:12:34  <Domenic_>i don't think you do
19:12:41  <Domenic_>the only reason import needs to be top level is file loading
19:12:48  <Domenic_>s/only/important
19:13:03  <substack>oh maybe multi-export can be a runtime error instead
19:13:05  <Domenic_>export top level only matters if you want static checking of exported keys vs. imported variables
19:13:18  <substack>so the 2nd time you call `export` it errors
19:13:21  <substack>at runtime
19:13:29  <Domenic_>multi-export could just be a way of overwriting your previous export
19:13:37  <Domenic_>but yeah maybe nicer if it errors
19:13:38  <substack>such that `if (false) export 3 else export 4` would work
19:13:47  <Domenic_>right exactly
19:14:20  <Domenic_>but `export 4; if (Math.random() > 0.5) { export 5; }` would not work
19:14:25  <Domenic_>half the time at least
19:14:35  <defunctzombie>substack: https://github.com/substack/mmmify/issues/3
19:14:45  <defunctzombie>Domenic_: that is bad thing to do
19:15:00  <Domenic_>defunctzombie: syntax should stop you from doing bad things IMO :)
19:15:00  <defunctzombie>Domenic_: it is very MACRO like and should be avoided in the code imho
19:15:05  <Domenic_>like non-top-level imports :)
19:15:07  <defunctzombie>agreed
19:15:43  <defunctzombie>I am 100% for exporting at top level and importing at top level
19:15:51  <Domenic_>why are you for exporting at the top level
19:16:28  <Domenic_>i was under the impression that the problems that solves are problems you guys don't really care about
19:17:09  <defunctzombie>Domenic_: I don't care about it but if you are gonna make some rules, I favor starting with simple rules
19:17:26  <defunctzombie>personally I don't see what any of it solves that we don't do with require today but whatevs
19:17:39  <Domenic_>defunctzombie: ok. but i don't think you even need that rule.
19:17:51  <Domenic_>there's a clear benefit to imports at top level, as it impacts code loading.
19:18:14  <Domenic_>the benefit for exports at top level is less clear.
19:18:28  <Domenic_>(It impacts static checking of export keys vs. import keys, in the multi-export case only.)
19:19:05  <defunctzombie>Domenic_: mostly for clarity and consistency
19:19:08  * thl0quit (Remote host closed the connection)
19:19:12  <defunctzombie>that is why I like return as export
19:19:17  <defunctzombie>you don't have to hunt for it
19:19:19  <defunctzombie>it will be at the end
19:19:53  <Domenic_>i mean i can see it
19:19:55  * thl0joined
19:20:05  <Domenic_>i'd be kind of for it actually
19:20:09  <Domenic_>just not sure it's maximally minimal
19:20:14  <Domenic_>anyway bbs, gotta lunch
19:21:32  * mikealjoined
19:23:28  * Domenic_quit (Remote host closed the connection)
19:30:06  * mikealquit (Ping timeout: 250 seconds)
19:33:47  * Domenic_joined
19:33:55  * AvianFluquit (Remote host closed the connection)
19:35:23  * AvianFlujoined
19:35:41  * Domenic_quit (Remote host closed the connection)
19:38:39  * Domenic_joined
19:46:34  * esterellaquit (Quit: esterella)
19:58:06  * mikealjoined
19:58:38  <st_luke>substack: if all your modules are functions you can mix 'use strict' with non 'use strict' modules
20:00:03  <substack>oh really?
20:00:21  <substack>is it function-scoped?
20:01:13  <substack>ok nevermind
20:04:10  <thl0>substack, st_luke: if you use browserify or similar bundler, all 'use strict' statements will be wrapped inside a function (just like in nodejs) and therefore there is no way to have a global 'use strict'
20:04:24  <thl0>only if you would add it to the top level of the bundle
20:04:35  <thl0>but that would be pointless
20:05:43  <defunctzombie>I hate "use strict"
20:05:48  <defunctzombie>:D
20:06:10  <Domenic_>we're talking about strict mode what what
20:06:41  <defunctzombie>haha
20:07:03  <substack>at least "use strict" is function-scoped where it can't hurt anything
20:07:33  <Domenic_>lol ok
20:07:52  <thl0>defunctzombie: I use 'use strict' together with vim Syntastic and it helps catching those stupid errors (spelling, etc.) without running the code
20:08:07  <thl0>defunctzombie: makes me code faster ;)
20:08:16  <defunctzombie>thl0: I think what it does it great, I think the string you have to have is stupid
20:08:26  <defunctzombie>it should be the environment enforcing it
20:08:32  <defunctzombie>and all envs should have that shit on
20:08:41  <thl0>defunctzombie: agreed - historical reasons - has to work in older browsers
20:08:45  <Domenic_>es6 modules are strict by default :P :P :P
20:09:26  <defunctzombie>thl0: older browsers can do whatever, newer browsers should just turn it ok
20:09:29  <thl0>defunctzombie: as far as I know in node you can now turn on global strict via a flag
20:09:34  <defunctzombie>you should'nt need the use strict string
20:09:42  <thl0>so you don't have to put that string
20:09:54  <defunctzombie>it is another thing where syntax was used instead of out of band information
20:10:19  <thl0>defunctzombie: only then syntastic doesn't check the file in strict mode without that string - but whatever it's one line and saves me so much time
20:11:11  <thl0>defunctzombie: if newer browsers just turned it on by default, older websites would crash (if they aren't strict compliant)
20:13:17  <st_luke>substack: sorry, was afk, but yessir, function scoped
20:13:19  <st_luke>still dumb tho
20:31:42  <substack>just had a crazy idea thinking about this article I read several months ago: https://michaelochurch.wordpress.com/2012/09/03/tech-companies-open-allocation-is-your-only-real-option/
20:32:06  <substack>startups could break down what they want done into line-items and give each feature/task/fix a dollar amount
20:32:29  <substack>then internal and external people can come in and do the task to receive the cash dollars
20:32:33  <substack>micro-contracts
20:32:43  * dominictarrjoined
20:33:01  * ITproquit
20:33:14  * mikolalysenkoquit (Quit: Lost terminal)
20:33:26  <Raynos>dominictarr: 28th march
20:33:33  <Raynos>when and where should I be in dublign
20:33:53  <defunctzombie>substack: I have something I have started to begin brainstorming that goes to that end somewhat
20:36:06  <dominictarr>Raynos: cian knows, have cc'd you on an email to him, asking.
20:38:51  <substack>breaking down projects into small bounties basically
20:39:45  <defunctzombie>substack: ;)
20:39:53  <Raynos>cool :)
20:40:29  * wiwilliajoined
20:44:23  * marcello3dquit (Remote host closed the connection)
21:03:02  * mikolalysenkojoined
21:12:27  * marcello3djoined
21:15:03  * paul_irishchanged nick to paul_irish_
21:29:55  * st_lukequit (Remote host closed the connection)
21:37:29  * yorickjoined
21:43:52  <ralphtheninja>substack: good idea
21:44:59  <CoverSlide>substack: isn't that kind of what google does with bug bounties?
21:45:01  <ralphtheninja>fits well with the open source 'model'
21:45:26  <ralphtheninja>I'd prefer to get paid in bitcoins though and not $ :)
21:46:25  <defunctzombie>ralphtheninja: ;)
21:59:32  * sorensen_joined
22:00:13  * st_lukejoined
22:00:23  * sorensen_quit (Client Quit)
22:11:12  * cianomaidinjoined
22:14:42  * mikealquit (Quit: Leaving.)
22:14:46  * cianomaidinquit (Client Quit)
22:26:38  * stlsaintjoined
22:27:16  <Raynos>https://github.com/Benvie/JavaScriptNext.tmLanguage
22:27:24  <Raynos>Does anyone else think that rainbow puke is the best color theme ever?
22:27:45  <dominictarr>Raynos: yes
22:28:01  <Raynos>I'm thinking of holding a weekly session of "add more colors to rainbow puke"
22:28:12  <Raynos>Where we make new colors for the GOOD OF HUMANITY
22:30:29  * nicholasfquit (Read error: Connection reset by peer)
22:30:57  * nicholasfjoined
22:33:46  * jibayquit (Remote host closed the connection)
22:34:29  <defunctzombie>export class size extends vector 2d
22:34:30  <defunctzombie>wtf
22:34:44  <defunctzombie>really these people need to take their java loving shit elsewhere
22:35:30  * AvianFluquit (Remote host closed the connection)
22:36:11  <pkrumins>export class size extends vector 2d final
22:38:35  * cianomaidinjoined
22:41:54  <defunctzombie>kill me now
22:42:58  * mikealjoined
22:50:01  * cianomaidinquit (Quit: cianomaidin)
22:51:55  <pkrumins>* defunctzombie was fragged by pkrumins
22:55:50  * st_lukequit (Ping timeout: 260 seconds)
22:57:17  <jez0990>substack: your crazy idea is the only logical conclusion
22:58:10  <jez0990>and how about a Kickstarter for opensource but instead of backing with $ you are volunteering to build modules
22:58:37  <jez0990>specific modules
23:05:24  <defunctzombie>begin rant!
23:05:30  <defunctzombie>when I do npm install foobar
23:05:35  <defunctzombie>I want to be presented with a list like so:
23:05:46  <defunctzombie>person1/foobar - 4 stars - does foo
23:05:51  <defunctzombie>person2/foobar - 0 stars
23:05:59  <defunctzombie>person3/foobar - 0 stars
23:06:23  <defunctzombie>I also want to be able to publish foobar so I can then install zombie/foobar
23:07:01  <defunctzombie>there is no reason that foobar name must be taken by the first person to get it, we can easily have people vote with stars on which one they think is better
23:07:15  <defunctzombie>sometimes you really do want to use a common name
23:07:19  <defunctzombie>versus some crazy name
23:11:46  <dominictarr>defunctzombie: if npm was peer to peer you would need it to work like this, because you couldn't have a central authority to decide who has what name.
23:12:22  <dominictarr>also, note, this is only a problem for quite generic modules that everyone takes a stab at
23:13:43  * Domenic_quit (Remote host closed the connection)
23:14:20  <defunctzombie>dominictarr: correct
23:14:33  <defunctzombie>dominictarr: I view it as a ui problem really
23:15:04  <defunctzombie>dominictarr: if the ui handled install of modules with multiple publishers
23:15:09  <defunctzombie>then it would be a non issue
23:15:17  <dominictarr>also, it's kinda important whether the different foobar modules have the same api
23:15:24  <defunctzombie>dominictarr: not really
23:15:38  <defunctzombie>dominictarr: only if you think that 'foobar' from person A must be foobar from person B
23:15:47  <defunctzombie>dominictarr: the best foobar will bubble up with more stars
23:15:48  * anvakajoined
23:16:00  <defunctzombie>but if I want to publish foobar for my one personal use and maybe others to try
23:16:03  <dominictarr>or a similar api, at reast, or attempt to solve the same problem
23:16:05  <defunctzombie>I should absolutely be able to do that
23:16:08  <defunctzombie>dominictarr: nope
23:16:14  <defunctzombie>dominictarr: not even in the slightest
23:16:30  <defunctzombie>dominictarr: if they happen to, cool, if not, then no problem
23:16:32  <dominictarr>easy: npm publish defunctzombie--foobar
23:16:35  <defunctzombie>as a consumer I pick what I want
23:16:48  <defunctzombie>npm publish --user defunctzombie
23:16:57  <defunctzombie>since the name can be gotten from the package.json anyway
23:17:05  * st_lukejoined
23:17:09  <defunctzombie>and if npm was always publishing under username
23:17:15  <defunctzombie>then you don't even need the --user part
23:17:17  <defunctzombie>npm publish
23:17:25  <defunctzombie>just publishes defunctzombie/foobar
23:17:38  <dominictarr>I don't see this big a change happing to npm unless there are other compelling reasons
23:17:55  <defunctzombie>dominictarr: sure, but I think it is a good direction to go in
23:18:13  <defunctzombie>right now using my own custom changes to modules or even reusing a name
23:18:16  <defunctzombie>is a giant PITA
23:18:22  <defunctzombie>and it should not be
23:18:28  <defunctzombie>if I want to publish a daemon module
23:18:34  <defunctzombie>that I made and does what I think is right
23:18:43  <defunctzombie>I should be able to do so and have others discover and star it
23:18:45  <dominictarr>sure, well, this seems reasonable
23:19:00  <defunctzombie>the most popular one will be first on the list of recommended when you do "npm install foobar"
23:19:12  <dominictarr>but the question is how do we get from A (here) to B (this idea) without breaking everything
23:19:29  <defunctzombie>dominictarr: not too hard actually (imho)
23:19:54  <defunctzombie>dominictarr: all you have to do is maintain backwards compat for current method of foobar: "some version"
23:20:14  <defunctzombie>and update npm to use the new stuff by default
23:20:35  <dominictarr>there is an issue on npm about namespaces
23:20:38  <defunctzombie>dominictarr: I think it is doable
23:20:48  <defunctzombie>dominictarr: ive read some of the issue, maybe I need to read it again
23:20:58  <defunctzombie>dominictarr: I think people are thinking about it wrong (some people maybe)
23:21:19  <defunctzombie>the issue isn't whether you have namespaces, it should be, how do we get to a point where eveyrthing is always under a namespace
23:21:41  <defunctzombie>and what should the CLI UI look like to make it easy to handle that
23:24:02  * wiwilliaquit (Ping timeout: 276 seconds)
23:24:52  <defunctzombie>dominictarr: I just used an obsevable with hyperscript and I think I wet myself
23:25:17  <dominictarr>ha!
23:25:27  <defunctzombie>used it with npm-css and made a small little price widget
23:25:33  <defunctzombie>so great
23:25:36  <dominictarr>sweet!
23:25:37  <defunctzombie>everything so self contained
23:26:49  <marcello3d>tap + tape doesn't seem to actually show the test name??
23:27:08  <marcello3d>it just seems to number them
23:28:59  <dominictarr>#TESTNAME
23:29:08  <dominictarr>^ like that as a comment
23:29:46  * nk109quit (Quit: laters...)
23:30:38  * thl0quit (Remote host closed the connection)
23:31:05  <mbalho>or name your test functions
23:31:36  <mbalho>oh wait thats not a feature yet i just thought that would be nice
23:35:11  <defunctzombie>I can't use tape until the output is nicer
23:35:22  <defunctzombie>it makes me want to claw my eyes out for some reason hahaha
23:39:15  <pkrumins>defunctzombie, we're adding testling supporter plans >_>
23:39:32  <pkrumins>$5/month, $10/month or $20/month <_<
23:39:37  <defunctzombie>pkrumins: nice!
23:39:57  <defunctzombie>certainly want to contribute to the awesome
23:40:05  <pkrumins>thanks man
23:41:53  * tilgovijoined
23:50:38  <rowbit>beep boop
23:53:57  * defunctzombiechanged nick to defunctzombie_zz