00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:09  * ircretaryjoined
00:00:15  <st_luke>ogd_: would your thing need to change the npm api or are you looking to have it magically happen on the back end?
00:00:29  <st_luke>PS http://fastly.npmjs.org/
00:00:34  <defunctzombie>substack: http://collabedit.com/dserv
00:00:41  * fallsemoquit (Quit: Leaving.)
00:01:02  <defunctzombie>substack: list of what I think is already on npm
00:03:11  * ednapiranhaquit (Quit: Leaving...)
00:08:57  * mikolalysenkoquit (Ping timeout: 272 seconds)
00:09:00  * dguttmanjoined
00:11:12  * maksimlinjoined
00:13:53  * dguttmanquit (Read error: No route to host)
00:17:49  * st_lukequit (Remote host closed the connection)
00:21:00  * ferossquit (Quit: feross)
00:22:28  <Domenic_>ircretary: tell st_luke he needs to stop popping off irc. also, thanks for landing all the patches i was planning to land.
00:22:28  <ircretary>Domenic_: I'll be sure to tell st_luke
00:23:13  * mikolalysenkojoined
00:24:04  <rowbit>Hourly usage stats: [developer: 4, free: 15]
00:24:06  <defunctzombie>wow
00:24:16  <defunctzombie>that's some fancy shit right there Domenic_
00:24:32  <Domenic_>defunctzombie: I see isaacs do it all the time
00:24:39  <Domenic_>it's his bot actually
00:25:25  <defunctzombie>yea
00:25:34  <defunctzombie>we should be able to make it join any channel hahaha
00:26:13  <defunctzombie>ircretary: tell st_luke he needs to use an irc bouncer, I have one if he wants
00:26:13  <ircretary>defunctzombie: I'll be sure to tell st_luke
00:29:49  * thlorenz_joined
00:32:55  <josephg>Domenic_: did you end up implementing that sync algorithm we were talking about?
00:39:53  <Domenic_>josephg: I don't ... remember?
00:40:27  * ralphtheninjaquit (Ping timeout: 260 seconds)
00:42:28  * thlorenz_quit (Ping timeout: 264 seconds)
00:46:14  <josephg>Domenic_ == domenic tarr?
00:46:37  <Domenic_>josephg: nope, dominictarr = dominic tarr; Domenic_ = Domenic Denicola
00:46:39  <josephg>... we chatted a few weeks ago in the lever office about usning bloom filters?
00:46:53  <josephg>ah,  cool
00:50:11  * dguttmanjoined
00:54:44  * ferossjoined
01:00:50  * creationixpart ("Leaving")
01:00:56  * creationixjoined
01:05:00  * jergason_joined
01:10:12  * indexzeroquit (Quit: indexzero)
01:10:13  * ferossquit (Quit: feross)
01:11:38  * jergason_quit (Remote host closed the connection)
01:22:22  * fallsemojoined
01:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 26]
01:32:41  * timoxleyquit (Remote host closed the connection)
01:39:28  * thlorenzjoined
01:45:02  <robertkowalski>Domenic_: corrected my answer in 3673
01:46:29  * ferossjoined
01:48:35  * Maciek416quit (Remote host closed the connection)
01:49:03  * Maciek416joined
01:50:14  * tilgovijoined
01:51:33  <Domenic_>robertkowalski: ya i added an extra line. add a comment to https://github.com/isaacs/npm/pull/4172 so we can merge it :)
01:53:26  * Maciek416quit (Ping timeout: 240 seconds)
01:53:33  * thlorenzquit (Ping timeout: 272 seconds)
02:01:15  * Maciek416joined
02:05:54  * dguttmanquit (Quit: dguttman)
02:15:31  * thlorenzjoined
02:18:23  * fronxquit (Remote host closed the connection)
02:21:31  * yorickquit (Remote host closed the connection)
02:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 13]
02:25:42  * thlorenz_joined
02:25:46  * ferossquit (Quit: feross)
02:39:14  * thlorenz_quit (Ping timeout: 264 seconds)
02:40:30  * timoxleyjoined
02:41:02  * ferossjoined
02:42:26  * calvinfo1joined
02:43:12  * calvinfoquit (Read error: Connection reset by peer)
02:48:53  * fronxjoined
02:51:58  * ferossquit (Quit: feross)
02:53:30  * fronxquit (Ping timeout: 252 seconds)
02:53:34  * ferossjoined
03:00:38  * ircretaryquit (Remote host closed the connection)
03:03:53  * jcrugzzquit (Ping timeout: 265 seconds)
03:05:20  * timoxleyquit (Ping timeout: 265 seconds)
03:06:58  * fronxjoined
03:07:05  * timoxleyjoined
03:11:38  * fronxquit (Ping timeout: 264 seconds)
03:12:38  * thlorenz_joined
03:15:51  * thlorenzquit (Ping timeout: 260 seconds)
03:17:02  * thlorenz_quit (Ping timeout: 240 seconds)
03:17:17  * ircretaryjoined
03:19:01  * fallsemoquit (Ping timeout: 246 seconds)
03:21:35  * fallsemojoined
03:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 16]
03:35:34  * thlorenzjoined
03:36:36  * indexzerojoined
03:41:11  * jcrugzzjoined
03:42:38  * mikolalysenkoquit (Ping timeout: 245 seconds)
03:46:26  * fallsemoquit (Ping timeout: 264 seconds)
03:48:39  * kevinswiberjoined
03:49:04  * thlorenzquit (Ping timeout: 264 seconds)
03:49:52  * fallsemojoined
03:57:35  * fallsemoquit (Ping timeout: 272 seconds)
04:00:09  * indexzeroquit (Quit: indexzero)
04:00:24  * fallsemojoined
04:15:35  * defunctzombiechanged nick to defunctzombie_zz
04:19:17  * kevinswiberquit (Remote host closed the connection)
04:21:36  * mikolalysenkojoined
04:23:54  * kevinswiberjoined
04:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 15]
04:31:17  * LOUDBOTquit (Ping timeout: 246 seconds)
04:37:18  * LOUDBOTjoined
04:38:14  * thlorenzjoined
04:46:30  * dominictarr__joined
04:50:38  * kevinswiberquit (Remote host closed the connection)
04:52:09  * thlorenzquit (Ping timeout: 272 seconds)
05:04:51  * fallsemoquit (Quit: Leaving.)
05:06:47  * fallsemojoined
05:07:14  * fronxjoined
05:11:02  * anoemiquit (Quit: anoemi)
05:11:50  * fronxquit (Ping timeout: 240 seconds)
05:18:50  * jcrugzzquit (Ping timeout: 264 seconds)
05:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 28]
05:26:28  * crankquit (Ping timeout: 265 seconds)
05:29:24  * ferossquit (Quit: feross)
05:30:39  * ferossjoined
05:31:01  * crankjoined
05:42:00  * calvinfo1quit (Quit: Leaving.)
05:43:32  * fallsemoquit (Quit: Leaving.)
05:45:54  * Maciek416quit (Remote host closed the connection)
05:48:09  * thlorenzjoined
05:52:24  * jxsonjoined
06:01:31  * thlorenzquit (Ping timeout: 260 seconds)
06:02:32  <jesusabdullah>sweet, email from yahoo
06:02:35  <jesusabdullah>\o/
06:02:46  <jesusabdullah>their requirements are arbitrarily high but whatevs
06:07:35  * fronxjoined
06:08:30  * wolfeidauquit (Remote host closed the connection)
06:12:28  * fronxquit (Ping timeout: 264 seconds)
06:12:28  * calvinfojoined
06:18:10  <jesusabdullah>job sounds sick
06:19:06  <substack>coughing?
06:19:34  <jesusabdullah>haha no the kind that skater dudes say
06:19:55  <jesusabdullah>also substack don't forget I'll be in your neck of the woods tomorrow we have to choose a place to meet up
06:20:14  <jesusabdullah>know any reasonable bars in the oakland area? barring that, foods? Hell, that coffee shop near jack london?
06:20:24  * jxsonquit (Remote host closed the connection)
06:21:02  * jxsonjoined
06:21:09  <substack>bars wha
06:21:17  <substack>well there is beer revolution
06:21:28  <substack>in jacky london
06:21:34  <jesusabdullah>I mean just somewhere cool to meet up and shoot the shit
06:21:47  <jesusabdullah>and something to eat and/or drink, y'know
06:21:50  <substack>there are cafes everywhere
06:21:56  <substack>and there's sudoroom
06:21:58  <jesusabdullah>yeah but do they have beer
06:22:03  <jesusabdullah>actually I *was* thinking about sudo room
06:22:06  <jesusabdullah>that's downtown?
06:22:09  <substack>yep
06:22:14  <substack>22nd and broadway
06:22:15  <jesusabdullah>open evenings?
06:22:22  <substack>just about always open
06:22:25  <jesusabdullah>word let's do that
06:22:37  <jesusabdullah>I'll let you know when I'm done with interview stuffs
06:22:47  <jesusabdullah>don't forget to drag ALL my o-town friends there
06:22:53  <jesusabdullah>XD
06:23:03  <jesusabdullah>I haven't seen anyone in a WHOLE YEAR
06:23:35  <substack>should get luk and ogd_ and isaacs to tag along too
06:23:49  <substack>all the oakland crew
06:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 20]
06:24:11  <substack>(sorry mikeal emeryville doesn't count)
06:25:04  <jesusabdullah>substack: yes
06:25:12  <jesusabdullah>mikeal can come too even if he is in emeryville
06:25:21  <substack>just this once, alright
06:25:34  <jesusabdullah>JUST THIS ONCE
06:26:11  <jesusabdullah>:D
06:26:21  <jesusabdullah>wait isn't nexxy in oakland too?
06:26:27  <substack>alameda
06:26:32  <jesusabdullah>close enough
06:26:35  <jesusabdullah>^__^
06:26:52  <jesusabdullah>omg Elliott must be HUUGE
06:26:52  <substack>nexxy: come hang tomorrow in oake towne!
06:26:56  <jesusabdullah>wait eliot
06:27:00  <substack>bring the younguns
06:27:07  <jesusabdullah>oh no, 2 o' dems
06:27:11  <jesusabdullah>I always forget
06:27:26  <jesusabdullah>luckily I'm in Cable's irc room so I always have a reference
06:27:28  <substack>hack partay
06:27:30  <jesusabdullah>EITHER WAY
06:29:59  <chapel>I wish oakland wasn't so far away
06:31:06  <jesusabdullah>do it anyway chapel
06:31:12  <jesusabdullah>we've never met face2face
06:31:30  <chapel>I've not met substack or most of the people on here
06:31:42  <chapel>I have met isaacs briefly though
06:34:00  <chapel>jesusabdullah: are you only in town tomorrow?
06:34:15  <jesusabdullah>chapel: yeah, though I'll probably be back a few times in the coming weeks
06:35:03  <chapel>wish I could come, but trying to avoid driving too much, the drivers seat in my van broke, and I've rigged it stay up, but it needs to be replaced
06:35:26  * calvinfoquit (Quit: Leaving.)
06:35:43  <jesusabdullah>hahaha ouch
06:36:31  <substack>mascimum transit
06:36:33  * mikolalysenkoquit (Ping timeout: 272 seconds)
06:40:50  * indexzerojoined
06:41:57  * jxsonquit
06:47:59  * jcrugzzjoined
06:50:45  <jesusabdullah>a'ight I think it's time for bed
06:50:53  <jesusabdullah>see you tomorrow subb rubb :D :D
06:52:24  * wolfeidaujoined
06:58:03  * thlorenzjoined
07:03:21  * wolfeidauquit (Remote host closed the connection)
07:04:46  * wolfeidaujoined
07:07:44  * fronxjoined
07:09:53  * calvinfojoined
07:11:38  * shamaquit
07:12:07  * thlorenzquit (Ping timeout: 272 seconds)
07:12:45  * fronxquit (Ping timeout: 272 seconds)
07:16:31  * calvinfoquit (Quit: Leaving.)
07:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 16]
07:25:26  * dominictarr__quit (Ping timeout: 264 seconds)
07:32:22  * wolfeidauquit (Remote host closed the connection)
07:34:22  * wolfeidaujoined
07:36:52  * dominictarr__joined
07:42:03  * mikolalysenkojoined
07:42:15  <ELLIOTTCABLE>Y'all're in SF?
07:42:35  <ELLIOTTCABLE>jesusabdullah: Elliott is two L's and two T's, for both of us. (=
07:45:57  <taterbase>dominictarr__: does npmd publish actually publish? Or just sticks it locally
07:47:16  * mikolalysenkoquit (Ping timeout: 264 seconds)
07:47:53  <dominictarr__>taterbase, do npmd publish, then npmd queue sync
07:47:54  * calvinfojoined
07:48:04  <taterbase>Ooooh neato
07:48:05  <dominictarr__>https://twitter.com/dominictarr/status/407777833587462144
07:48:16  <dominictarr__>taterbase, you can thank substack for that feature
07:48:25  <taterbase>thank you substack
07:48:45  <jden>dominictarr__: urls are supercool
07:48:49  <dominictarr__>I've been thinking it could check if you are online and then push because it's annoying to type another command
07:49:14  <dominictarr__>jden, this is different to just a url to that module
07:49:20  <taterbase>I was under the impression that is what would occur but then I saw it didn't
07:49:37  <dominictarr__>npm(d) needs to beaware of some things for that.
07:49:50  <dominictarr__>taterbase, hmm, that is correct.
07:50:33  <substack>dominictarr__: problem is that "online" isn't boolean
07:50:35  <jden>well, URIs then. there can be a level of indirection for distribution, etc
07:51:03  <substack>dominictarr__: I think it would be best to push to the queue and just repeatedly try to sync in the background
07:51:31  <substack>when I'm on a shitty network my publishes often go half-way through and end up broken on npm
07:51:39  <substack>then I have to go in and clean them up manually
07:54:13  <dominictarr__>substack, I'm gonna write npmd-publish soon, which will use a single push
07:54:35  <dominictarr__>jden, for example. if it's a private registry, we probably want auth
07:55:08  <dominictarr__>and we want a different auth to the main registry, so npm needs to be aware that it is on a specific registry.
07:56:25  <dominictarr__>also, npm doesn't just download the url but it queries it for the metadata, and then resolves which tarball to download...
07:56:49  <dominictarr__>maybe it could be npm://private.com#~1.0.0
07:57:44  <substack>how will publishing to private repos work?
07:58:27  <jden>dominictarr__: auth should be handled via a 401 auth challenge. if the client has saved credentials, then all's good. else, prompt user to log in
07:58:59  <jden>ranges could be stored in hash fragments for parsing, but it would have to be translated to something else over the wire
07:59:18  <jden>a range could be a query
07:59:39  <jden>npm://private.org/module?~1
08:00:18  <jden>substack: restful npm would put a tarball to its url
08:02:50  <dominictarr__>npm doesn't send a range when resolving
08:03:09  <dominictarr__>it downloads the bundle, and then decides what tarball to download
08:03:47  <dominictarr__>so, this url would become a request like
08:04:05  <dominictarr__>GET https://private.com/private-module
08:04:08  <dominictarr__>and then
08:04:19  <dominictarr__>GET https://private.com/private-module-1.0.0.tgz
08:04:33  <dominictarr__>or something like that
08:04:53  <dominictarr__>via the couch db api
08:05:04  <dominictarr__>and then, also, npmd doesn't do the first one
08:05:17  <dominictarr__>because it uses https://private.com/_changes
08:05:23  <dominictarr__>to get all the changes...
08:07:35  * fronxjoined
08:07:47  <jden>right, makes sense
08:07:54  * thlorenzjoined
08:09:31  <nexxy>jesusabdullah, substack I'm in Alameda (so, close)
08:10:55  <jden>rfc3986 section 3.5 makes fragments sound like exactly the right place to put a semver range
08:11:29  <jden>"...even though such a retrieval is only performed if the URI is dereferenced
08:11:31  <jden>"
08:12:11  * fronxquit (Ping timeout: 260 seconds)
08:12:35  * fronxjoined
08:14:29  * fronxquit (Remote host closed the connection)
08:14:47  <taterbase>npmd --sync pegs my cpu even once it's reached 100%, is that expected or is it still doing some work to finish up and then will idle nicely
08:15:47  * anvakajoined
08:17:22  * tilgoviquit (Remote host closed the connection)
08:17:52  <dominictarr__>taterbase, yeah, it's building indexes
08:18:01  <taterbase>ah
08:21:50  * thlorenzquit (Ping timeout: 264 seconds)
08:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 45]
08:25:18  * fronxjoined
08:33:13  <nexxy>substack, I'm getting "Error: write EPIPE" when I try to `still-alive`
08:35:08  * calvinfoquit (Quit: Leaving.)
08:36:18  <substack>nexxy: do you have the sox command?
08:37:24  <nexxy>ohh
08:37:30  <nexxy>not on this computer
08:39:25  * maksimlinquit (Quit: ChatZilla [Firefox 25.0.1/20131115110311])
08:43:35  <jcrugzz>substack: that was some epic javascript music
08:49:59  * dominictarr__quit (Ping timeout: 260 seconds)
08:50:52  <ehd>i installed sox just for this :D
08:51:53  * ferossquit (Read error: Connection reset by peer)
08:58:00  * ferossjoined
09:06:26  * chiltsquit (Ping timeout: 245 seconds)
09:14:01  * wolfeidauquit (Remote host closed the connection)
09:17:49  * indexzeroquit (Quit: indexzero)
09:17:56  * thlorenzjoined
09:20:21  * grewebjoined
09:21:37  * djcoinjoined
09:23:45  <greweb>substack: nice song :)
09:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 17]
09:31:31  * thlorenzquit (Ping timeout: 260 seconds)
09:43:27  * grewebquit (Remote host closed the connection)
09:50:13  * jcrugzzchanged nick to jcrugzz|afk
09:59:19  * grewebjoined
10:16:29  * fronxquit (Remote host closed the connection)
10:17:57  * ferossquit (Quit: feross)
10:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 33]
10:25:23  * ferossjoined
10:27:49  * thlorenzjoined
10:30:05  * ferossquit (Client Quit)
10:31:26  * ferossjoined
10:41:36  * thlorenzquit (Ping timeout: 265 seconds)
11:11:46  * wolfeidaujoined
11:19:46  * fronxjoined
11:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 31]
11:35:02  * ferossquit (Quit: feross)
11:37:41  * thlorenzjoined
11:43:13  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
11:43:13  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
11:51:14  * thlorenzquit (Ping timeout: 264 seconds)
12:03:42  * jez0990part ("http://quassel-irc.org - Chat comfortably. Anywhere.")
12:03:47  * jez0990joined
12:05:22  * jez0990part ("http://quassel-irc.org - Chat comfortably. Anywhere.")
12:05:23  * jez0990joined
12:23:03  * techwraithquit (Ping timeout: 264 seconds)
12:23:32  * dominictarr__joined
12:24:03  <rowbit>Hourly usage stats: [developer: 6, free: 44]
12:24:21  * crankquit (Ping timeout: 272 seconds)
12:30:33  * crankjoined
12:33:05  * techwraithjoined
12:35:08  * crankquit (Ping timeout: 245 seconds)
12:36:15  * crankjoined
12:41:07  * crankquit (Ping timeout: 246 seconds)
12:43:22  * yorickjoined
12:47:36  * thlorenzjoined
12:48:00  * crankjoined
12:57:25  * dominictarr__quit (Ping timeout: 265 seconds)
13:01:37  * thlorenzquit (Ping timeout: 272 seconds)
13:10:37  * fronxquit (Remote host closed the connection)
13:11:54  * dominictarr_joined
13:15:01  * fronxjoined
13:19:41  * insertcoffeejoined
13:21:21  <insertcoffee>http://techcrunch.com/2013/12/02/googles-compute-engine-hits-general-availability-drops-instance-prices-10-adds-new-16-core-instance-types-and-docker-support/
13:22:53  <dominictarr_>insertcoffee, hey!
13:23:00  <dominictarr_>don't see you in #stackvm much!
13:23:50  <insertcoffee>I lurk
13:24:01  <insertcoffee>..hidden in the shadows
13:24:03  <rowbit>Hourly usage stats: [developer: 4, free: 46]
13:24:09  <insertcoffee>ready to pounce at any moment
13:24:34  <dominictarr_>perfect
13:24:38  <insertcoffee>...like ceiling cat but less voyeuristic
13:24:45  <insertcoffee>how's the travels?
13:24:51  <insertcoffee>I leave London in 2 weeks!
13:25:50  <insertcoffee>did you end up hitting that �2k free google compute cloud voucher I sent you?
13:28:07  <dominictarr_>mmalecki, why are you writing python?
13:28:22  <mmalecki>dominictarr_: hatop
13:28:27  <dominictarr_>insertcoffee, I didn't need it for anything
13:28:48  <mmalecki>dominictarr_: npmjs.eu runs behind haproxy and hatop doesn't reconnect to the stats socket if you reload the service
13:29:09  <mmalecki>dominictarr_: and like, I still didn't figure out how the fuck this is supposed to work
13:29:46  <dominictarr_>insertcoffee, ha, no I've just thought of something
13:29:53  <insertcoffee>dominictarr_, free is free is free
13:30:10  <mmalecki>dominictarr_: where are you now?
13:30:44  * thlorenzjoined
13:30:45  <dominictarr_>mmalecki, Blade Runner
13:30:50  <dominictarr_>er, I mean, hong kong
13:32:27  <dominictarr_>insertcoffee, there is a selection process for this thing?
13:32:49  <dominictarr_>they are asking me what I'm using it for...
13:33:41  <mmalecki>dominictarr_: LOL. hope you're having fun :)
13:33:41  <insertcoffee>yea, I just stuck my github url and said some shit about how 'we currently use AWS for everything at work'
13:34:08  <insertcoffee>it took a few days to get approved, some sort of IRL API, I havn't used mine yet.
13:34:56  <dominictarr_>I heard litecoin mining was currently profitable on EC2
13:37:32  <insertcoffee>meh, I'm still waiting for my gold to stop tanking
13:38:36  <insertcoffee>dominictarr_, you heard of forkbombing? I was reading the wikipedia of it last night, the bash one is awesome ;)
13:39:20  <insertcoffee>its like an epic smiley :(){ :|:& };:
13:40:34  <dominictarr_>that is when you just DDOS the computer by creating too many processes/threads
13:44:16  * thlorenzquit (Ping timeout: 264 seconds)
13:46:26  * defunctzombie_zzchanged nick to defunctzombie
13:46:48  <insertcoffee>yep, thats the one
13:47:53  <insertcoffee>the interesting bit from the wiki is strategies to disarm a runaway forkbomb
13:48:16  <insertcoffee>...mostly using resource suffocation
13:52:10  * fronxquit (Remote host closed the connection)
13:54:39  * fronxjoined
13:58:26  * fallsemojoined
13:58:56  * timoxleyquit (Remote host closed the connection)
13:59:33  * jibay_quit (Ping timeout: 252 seconds)
14:00:29  <mmalecki>dominictarr_: I was thinking of getting a 3.7 GHz, 32 GB RAM dedicated server to do litecoin mining
14:00:36  <mmalecki>(8 threads)
14:02:11  * jibay_joined
14:03:19  <dominictarr_>isaacs, ping
14:03:29  <dominictarr_>mmalecki, that is what i read you should use
14:04:07  <mmalecki>dominictarr_: yeah, I still gotta do some calculation tho. the beast costs 49 euro a month.
14:06:57  * fronxquit (Remote host closed the connection)
14:09:07  * fronxjoined
14:10:38  <insertcoffee>mmalecki, interesting... will that be profitable? using this free �2k voucher from Google is def the way to go ;)
14:10:59  * Maciek416joined
14:14:08  <mmalecki>insertcoffee: I need to run some calculations on that still
14:14:18  <mmalecki>there was a calculator somewhere...
14:14:42  <insertcoffee>3.7 GHz, 32 GB RAM dedicated for 49 euro/m doesn't sounds too bad
14:15:09  <insertcoffee>surely you want to be using GPU instead of CPU?
14:15:43  * ralphtheninjajoined
14:16:54  <mmalecki>yeah, but can you easily get VMs with good GPUs?
14:17:03  <insertcoffee>AWS does it now
14:17:08  <mmalecki>OH
14:17:09  * fallsemoquit (Quit: Leaving.)
14:17:40  <mmalecki>heh, automated litecoin mining farm.
14:17:45  <insertcoffee>interesting point though, in the past currencies have been pegged to commodities and other currencies (eg gold/USD)
14:17:55  <mmalecki>I think I know what my next wage is going into
14:17:59  <insertcoffee>will bitcoin be pegged to the cost of cloud GPU?
14:18:48  <Maciek416>seems doubtful
14:19:13  * kevino80joined
14:19:49  <Maciek416>the price of bitcoin needs to expand to satisfy speculation and hopefully eventually the value of bitcoin trade
14:20:19  * fronxquit (Remote host closed the connection)
14:20:25  <insertcoffee>its hard to keep up. I did the math on it a while ago and it was no where near cost-effective to mine on the AWS GPU instances. now the price has gone up it must be getting closer to being break-even
14:20:39  <insertcoffee>*bitcoin price
14:21:15  <insertcoffee>just buy some gold, its at the lowest it's been since 2010
14:22:18  <insertcoffee>the US govt hasn't kicked off a new war for a while, we're overdue for bullish military induced turn
14:24:03  <rowbit>Hourly usage stats: [developer: 1, free: 31]
14:29:12  * ralphtheninjaquit (Quit: leaving)
14:32:41  * fallsemojoined
14:33:01  * thlorenzjoined
14:39:52  * kevinswiberjoined
14:41:03  * tmcw_joined
14:46:40  <defunctzombie>dominictarr_: I feel pretty strongly about dependency versioning hahaha
14:47:43  <defunctzombie>dominictarr_: get all worked up when all sorts of schemes for "semver" come up. I don't have blind belief in semver
15:01:14  * grewebquit (Remote host closed the connection)
15:02:08  * dguttmanjoined
15:02:23  * grewebjoined
15:07:34  * kevinswiberquit (Remote host closed the connection)
15:10:03  * fronxjoined
15:14:58  * fronxquit (Remote host closed the connection)
15:24:03  <rowbit>Hourly usage stats: [developer: 1, free: 37]
15:29:00  <dominictarr_>defunctzombie, I agree with you in principle. distributed systems get much easier when you use hashes
15:29:10  <dominictarr_>but I want to build something that you can use
15:29:29  <dominictarr_>I do plan to be able to refer to a module version by a hash
15:29:37  <dominictarr_>but there is a little work to do before then
15:29:58  <defunctzombie>I don't think you have to refer to module version by hash, having it all be human digestable is nice
15:30:03  * kevino80quit (Remote host closed the connection)
15:30:03  <dominictarr_>then, that will become the fundamental way to refer to a version, and semver will be another layer
15:30:04  <defunctzombie>I just dont value supporting ranges
15:30:19  <defunctzombie>cause I build stuff for the way I want to use it
15:30:34  <dominictarr_>right, there is just no way in a distributed system to validate that a version range is unique, etc
15:30:43  <defunctzombie>usually based both on convenience and how I have seen failed things in the past
15:30:43  <dominictarr_>but you don't have to do that with hashes.
15:30:58  <defunctzombie>the hashes was mostly for content you download
15:31:06  <defunctzombie>I think the git clone example is most apt
15:31:18  <defunctzombie>that is basically how I feel about dependencies now
15:32:55  <defunctzombie>npm is the way it is and changing some of that will be hard, but anything new I look at would only be interesting to me if it helps polish off some of these problems i've encountered
15:33:29  <defunctzombie>and most install and update problems i've encountered have to do with versions not being locked down for dependencies
15:33:44  <defunctzombie>and dedupe trying to be too smart for no reason
15:33:49  * thlorenz_joined
15:35:37  * dominictarr_quit (Ping timeout: 272 seconds)
15:36:34  * dominictarr_joined
15:38:03  * thlorenz_quit (Ping timeout: 245 seconds)
15:46:12  * kevino80joined
15:46:17  * AvianFlujoined
15:46:34  * Maciek416quit (Read error: No route to host)
15:46:53  * Maciek416joined
15:47:45  * Maciek416quit (Client Quit)
15:47:57  * Maciek416joined
15:50:54  * mikolalysenkojoined
15:53:58  * grewebquit (Remote host closed the connection)
15:54:20  * grewebjoined
15:57:24  <dominictarr_>defunctzombie, right. so, what do you think about keeping a deps.json so that you can use to recreate the entire dependency tree exactly.
15:58:00  <dominictarr_>I think that could provide the best of both worlds. you could have locked down deps, but also easy to maintain ranges.
15:58:19  <substack>isn't that what shinkwrap does?
15:59:09  <dominictarr_>yes, but it doesn't do it very well, because it doesn't use hashes
15:59:33  <dominictarr_>so it can't verify that you have the exact same versions
15:59:58  <dominictarr_>oh, by the way. npmd uses the same structure as shrinkwrap throughout
16:00:05  <defunctzombie>dominictarr_: so in my mental world, the deps.json only needs to worry about your deps
16:00:10  <dominictarr_>npm shrinkwrap | npmd-install
16:00:12  <dominictarr_>will work
16:00:17  <defunctzombie>because the deps of those deps also has a deps.json
16:00:35  <defunctzombie>personally, I view installing a dep no different than cloning the code
16:00:45  <defunctzombie>I either want to get the exact version or the latest
16:01:02  <defunctzombie>there is no middle ground with .. oh maybe this range of versions or such
16:01:22  <dominictarr_>right, the problem with this, is that you'd have to update dependent modules whenever a dependency updates
16:01:34  <defunctzombie>everyone keeps saying "problem" when they say that
16:01:53  <defunctzombie>this is how dependencies work, if you want a new version you update
16:01:56  <defunctzombie>and tests get run
16:02:04  <dominictarr_>because it's a bunch of boring work to go and edit a bunch of files
16:02:08  <defunctzombie>and new version is published that hopefully has been run against the new code
16:02:13  <defunctzombie>so make a tool
16:02:28  <defunctzombie>the point is, that with a dep update, you get a commit message as such
16:02:33  <defunctzombie>and a trail of what happened
16:02:33  * tmcw_quit (Remote host closed the connection)
16:02:45  <defunctzombie>saying it is boring work is the same as saying use less modules actually
16:03:00  <defunctzombie>because the easiest thing is to just have all the code in one repo :)
16:03:13  <dominictarr_>no, that isn't easier
16:03:34  <defunctzombie>the nice thing about modules versus committing all the code is you don't have the noise when you update a module version
16:03:41  <defunctzombie>you just get a nice clean commit
16:03:49  <dominictarr_>so whether you are right or wrong is irrelavant, because you are proposing something that is incompatible with npm
16:03:51  <defunctzombie>but semantically I want that to be identically to as if I did have the code i nthe repo
16:03:57  <defunctzombie>dominictarr_: I agree
16:03:57  <dominictarr_>and that is a much bigger problem
16:04:05  <defunctzombie>just stating my thinking
16:04:12  <dominictarr_>right! okay
16:04:36  <dominictarr_>yeah, so in a perfect system, i'd be inclined to go with this too probably
16:04:43  <defunctzombie>I have no problem with breaking how npm does it (in some future) because I think the benefit is worth it
16:04:45  <defunctzombie>others don't
16:05:02  <defunctzombie>but that is fine.. there will be different approaches
16:05:11  <dominictarr_>yeah, but npm is valuable because people use it
16:05:14  <defunctzombie>eventually I might write an npm 1.0 -> "strict npm" migrate tool
16:05:17  <defunctzombie>cause that is easy to do
16:05:34  <defunctzombie>dominictarr_: it becomes less valuable to me if using it breaks things for me
16:05:50  <dominictarr_>yes, agreed.
16:06:00  <defunctzombie>dominictarr_: it is a cool discovery and easy install tool, but that doesn't mean I can't just as easily make a package cloner to a strict registry
16:06:04  <defunctzombie>or some such
16:06:15  <dominictarr_>but a reliable deps/shrinkwrap is an acceptable compromise
16:06:36  <defunctzombie>maybe
16:06:49  <defunctzombie>the pain points i have with npm currently are not exposed enough that I use those features
16:06:50  <dominictarr_>or, if you distributed the shrinkwraps
16:07:04  <defunctzombie>mostly because I don't do clean install all the time but just diff install
16:07:14  <defunctzombie>which means I don't get exposed to floating deps *as much*
16:07:16  <dominictarr_>then when you install foo, you'd get all of foo's deps, exactly as they where when foo was written.
16:07:22  <defunctzombie>dominictarr_: yes
16:07:32  <defunctzombie>dominictarr_: but the thing is.. you don't have to manually make the shrinkwrap file
16:07:36  <defunctzombie>in the modules
16:07:40  <defunctzombie>it can be done at publish time
16:07:44  <defunctzombie>but the "system"
16:07:46  <dominictarr_>however, I think never changing code is probably not as good as verifying that the new code is working
16:07:55  * mikolalysenkoquit (Ping timeout: 272 seconds)
16:08:13  <dominictarr_>like, when a new dep is out, rerunning the test in the ci system
16:08:19  <defunctzombie>I disagree. I believe with the current state of things, a commit message with the version bump is much more valuable
16:08:36  <defunctzombie>that can happen too
16:08:55  <defunctzombie>but again we digress into land we don't control :)
16:09:07  <dominictarr_>so i'm thinking that npmd install would output a .deps.json
16:09:19  <defunctzombie>I think that is reasonalbe
16:09:30  <defunctzombie>and in a good world, if each module had one
16:09:35  <defunctzombie>then you only need it for your top level
16:09:43  <dominictarr_>with the expectation being that you'd check that in, so that someone else wanting to use/work on your module could see if they have any differences
16:09:48  <defunctzombie>because the content hash would have to hash the deps.json for the dep as well
16:10:00  <dominictarr_>and ahem, anal retentives, could only use exactly that
16:10:51  <dominictarr_>yes, but for now, we need the whole tree so because some/most deps wont have one
16:11:11  <defunctzombie>depends how you have npmd working or whatnot
16:11:30  <dominictarr_>also, so that you can choose to install different deps for a module, you arn't forced to use what the author of the original module had
16:11:34  <defunctzombie>in my mental model, a registry clone would create a deps.json for the modules but this is all fantasy for now
16:11:41  <defunctzombie>no
16:11:41  <dominictarr_>because, they are probably too busy to update it.
16:11:48  <defunctzombie>fork and update
16:11:53  <defunctzombie>all modules must have a repo field
16:12:02  <defunctzombie>none of this hidden source bs for public modules
16:12:22  * ednapiranhajoined
16:12:49  * tmcw_joined
16:13:19  <dominictarr_>but say I want to generate trees programatically, like test all the different versions a dependency can have
16:13:42  <dominictarr_>creating a bunch of commits in git is more machinery
16:14:40  <dominictarr_>you need to be able to change the deps independently of the code
16:15:48  <defunctzombie>you can
16:15:55  <defunctzombie>just doesn't make it a release
16:16:16  <defunctzombie>there is a difference between a released module and experimentation during development
16:16:35  <dominictarr_>so, it's a separate branch?
16:16:39  <defunctzombie>and why test all the different versions when it can only have one?
16:16:46  <defunctzombie>I don't follow
16:16:57  <dominictarr_>so say I have a module with 10 deps
16:17:03  <dominictarr_>and then they each have 10 deps
16:17:15  <defunctzombie>k
16:17:19  <defunctzombie>so far I follow
16:17:36  <dominictarr_>and most of these modules are all written by different peolpe
16:17:50  <dominictarr_>and may A -> B
16:18:03  <dominictarr_>and B is updated to B', but A hasn't done anything yet
16:18:26  <dominictarr_>maybe they are on holiday, maybe they quit their job or went insane, who knows.
16:18:40  <dominictarr_>so, I'm working on C which uses A
16:18:53  <dominictarr_>C -> A -> B
16:18:56  <defunctzombie>k
16:18:59  <defunctzombie>so far so good
16:19:02  <dominictarr_>but does it work with B' ?
16:19:13  <defunctzombie>several things come to mind
16:19:18  <defunctzombie>1. do you care?
16:19:22  <dominictarr_>that is what I want to know, and I don't want to wait for A's author to come back
16:19:25  <defunctzombie>you are using A not B
16:19:35  <defunctzombie>how A does it job could be a black box to you
16:19:40  <dominictarr_>yes, but maybe B' is faster
16:19:45  * fronxjoined
16:19:45  <defunctzombie>ok.. fair
16:19:48  <defunctzombie>so then you clone A
16:19:53  <defunctzombie>and update the dep and run tests
16:20:05  <dominictarr_>now do that 100 times
16:20:08  <defunctzombie>and that becomes the A' you use
16:20:29  <defunctzombie>dominictarr_: it would be correct to do it 100 comes tho
16:20:34  <defunctzombie>or write a script to do it
16:20:43  <defunctzombie>but by doing it and running the tests you know
16:20:49  <defunctzombie>you don't have to commit to do this btw
16:20:53  <dominictarr_>yeah, so my point is that you need a fast way to do that.
16:20:56  <defunctzombie>you can do it locally first
16:21:20  <defunctzombie>nothing stops you from installing outside the scope of the required dep manually to test stuff
16:21:25  <defunctzombie>I npm link stuff all the time
16:21:28  <defunctzombie>during development
16:21:35  <dominictarr_>yeah, me too
16:21:52  <defunctzombie>that is orthogonal to the deps you "release" with
16:21:57  <defunctzombie>and when I say release, in your case
16:22:03  <defunctzombie>because the author of A is gone
16:22:08  <defunctzombie>you HAVE to fork it
16:22:24  <defunctzombie>so now you have a record of what you are doing to A
16:22:27  <defunctzombie>and why you are updating it
16:22:31  <dominictarr_>right, because the dep tree is bundled with the code
16:22:46  <defunctzombie>if you don't care about history, then sure.. this whole conversation is moot
16:22:48  <defunctzombie>:)
16:23:02  <defunctzombie>but a dep change is a dep change and should be recorded :/
16:23:14  <defunctzombie>for a release
16:23:42  <defunctzombie>and when you bump C to use a new version of A and publish C, you are efffectively releasing a new version of A to do this
16:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 37]
16:24:17  <dominictarr_>right, because down the road... when you have a problem you want to know who decided to update the dep and why
16:25:32  <defunctzombie>yep
16:25:44  <dominictarr_>so, at least... you need a way to refer to the deps of a dependency subtree, so that you can refer to that exact version of that subtree
16:25:48  <defunctzombie>this is all about history when you have a problem
16:26:00  <defunctzombie>if everything always worked we wouldn't need version control
16:26:13  <dominictarr_>so, for example, if there is a problem with one module, you can easily see all the places it's used.
16:26:34  <defunctzombie>sure, that is just tooling like npm ls
16:26:56  <defunctzombie>and the thing is that a "problem" with a module is vague too
16:27:03  <defunctzombie>lets say modules A and B use module D
16:27:08  <defunctzombie>D may have a problem
16:27:18  <defunctzombie>but the use of D by A is different than by B
16:27:25  <defunctzombie>and B may not even be exposed to the problem
16:27:25  <dominictarr_>yeah
16:27:52  <defunctzombie>(This is the argument i make when people tout out the whole "security" argument for auto updating)
16:28:12  <defunctzombie>along with the whole likely to introduce a security hole as you are to fix it
16:28:14  <dominictarr_>right, but that would take a human looking to establish that
16:28:18  <defunctzombie>yep
16:28:34  <defunctzombie>people seem to think semver replaces people or something
16:28:49  <defunctzombie>hard to reason with those folks cause they think they are super developers who make no mistakes
16:28:57  <dominictarr_>autoupdating is basically opening a backdoor to the vendor, so they can run any code on your system
16:29:08  <defunctzombie>I on the other hand know everyone is a shit developer and act accordingly :)
16:29:31  <dominictarr_>just a monkey with a fancy typewriter
16:29:58  <defunctzombie>yep
16:30:49  * grewebquit (Remote host closed the connection)
16:31:12  * mikolalysenkojoined
16:34:22  * kevinswiberjoined
16:35:49  * mikolalysenkoquit (Ping timeout: 248 seconds)
16:36:03  * fronxquit (Remote host closed the connection)
16:43:11  * mikolalysenkojoined
16:44:37  * thlorenz_joined
16:48:14  * tilgovijoined
16:48:14  * kevinswiberquit (Remote host closed the connection)
16:49:08  * tmcw_quit (Remote host closed the connection)
16:49:43  * jcrugzz|afkquit (Ping timeout: 272 seconds)
16:49:45  * tmcw_joined
16:49:47  * thlorenz_quit (Ping timeout: 246 seconds)
16:49:56  * tmcw_quit (Read error: Connection reset by peer)
16:50:25  * tmcw_joined
16:52:50  * kevinswiberjoined
16:53:53  * calvinfojoined
16:56:41  * jcrugzz|afkjoined
16:56:41  * jcrugzz|afkchanged nick to jcrugzz
17:00:39  * dominictarr_quit (Read error: Connection reset by peer)
17:03:58  <guybrush>i dont understand why that is a backdoor
17:04:04  * shamajoined
17:04:53  <guybrush>where is the diff between autoupdate and any websockets for example?
17:15:13  * calvinfoquit (Quit: Leaving.)
17:15:17  * jcrugzzquit (Ping timeout: 248 seconds)
17:22:31  * mbrevoortjoined
17:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 29]
17:25:59  * dguttmanquit (Quit: dguttman)
17:31:46  <jesusabdullah>isaacs: I love youuuuu
17:32:04  <jesusabdullah>isaacs: I'm sorry I can't resist trolling assholes :( I really am. I have no self control.
17:32:33  <substack>defunctzombie: do you know an event emitter module we can use?
17:32:38  <substack>I want exactly the same api as node core
17:33:14  * cpupquit (Ping timeout: 264 seconds)
17:33:44  <mikolalysenko>hypothetical question: if you had a modular symbolic algebra package for javascript/npm what would you do with it?
17:34:01  <mikolalysenko>main thing I can think of is program analysis/verification
17:34:12  <jesusabdullah>substack: http://wzrd.in/bundle/events :v :v
17:34:25  <jesusabdullah>substack: also apparently standalone core bundles are busted :(
17:34:40  <jesusabdullah>substack: in wzrd.in I mean
17:35:08  <substack>jesusabdullah: I need it in npm module form
17:35:46  <substack>mikolalysenko: not sure but that would be super rad
17:35:52  <jesusabdullah>substack: o. why for?
17:37:53  <substack>cool gozala has written one https://npmjs.org/package/events
17:38:05  <substack>jesusabdullah: for replacing browser-builtins with tiny packages
17:38:12  <jesusabdullah>uhuh
17:40:49  <substack>because it's super frustrating to wait on browser-builtins to update whenever we just want a single thing upgraded in browserify
17:44:07  * calvinfojoined
17:46:23  <jesusabdullah>isaacs: you saw https://github.com/isaacs/github/issues/38#issuecomment-29723947 ? Might be a reasonable stop-gap
17:49:26  <substack>gozala: why does your events module have a bunch of weird require('raw.github.com/Gozala/extendables/v0.2.0/extendables') calls in it?
17:52:45  * dubroy__quit (Ping timeout: 252 seconds)
17:54:49  * dubroy__joined
17:56:52  <techwraith>jesusabdullah: Yeah, that sounds like a bad idea, the bot isn't open source, who knows what it'll do.
17:57:17  <defunctzombie>substack: did you see: http://collabedit.com/dserv
17:57:54  <defunctzombie>substack: gozala: can you add me as author to that module and I will update it to latest node.js compatible api?
17:58:08  <substack>ok events-browserify, thanks!
17:58:53  * dguttmanjoined
17:59:18  * thlorenzquit (Remote host closed the connection)
17:59:53  * thlorenzjoined
18:00:06  <brianloveswords>techwraith, jesusabdullah: huh, I wonder why they'd go and make it closed source.
18:00:21  <techwraith>brianloveswords: Yeah, me too
18:00:29  <brianloveswords>techwraith: seems easy enough to clone, though.
18:00:36  <techwraith>Yeah, definitely
18:02:01  <substack>defunctzombie: I wonder if we can get assert taken out of native-buffer-browserify
18:02:08  <substack>it just inflates the size of the bundle without doing much
18:02:12  <substack>since assert requires util
18:02:16  <substack>which is huge
18:02:24  <defunctzombie>what does buffer use assert for?
18:02:46  * thlorenzquit (Read error: Connection reset by peer)
18:02:58  <gozala>defunctzombie: sure I can even give the ownership
18:03:13  * thlorenzjoined
18:03:16  <substack>defunctzombie: something dumb
18:03:38  <substack> assert.ok(offset !== undefined && offset !== null, 'missing offset')
18:03:38  <substack> assert.ok(offset < buf.length, 'Trying to read beyond buffer length')
18:03:43  <substack>those should just be exceptions
18:04:18  <mikolalysenko>substack: regarding assert, could maybe util be split into smaller modules like util/log, util/inherit etc.
18:04:38  <mikolalysenko>and then the main util package could just glob all that stuff together, but internally stuff could just use the right smaller util component
18:05:09  * dguttmanquit (Quit: dguttman)
18:06:13  <defunctzombie>mikolalysenko: yes, util could be
18:06:18  <defunctzombie>mikolalysenko: in fact util should not even exist
18:06:36  <defunctzombie>util modules are the worst type of modules
18:06:45  <defunctzombie>because people start to dump everything in there with no thinking
18:06:59  <defunctzombie>substack: yea, could just be exceptions
18:07:16  <techwraith>defunctzombie: It's helpful to have around if you *do* end up wanting everything. Also, it's easier to start with a grab bag and work back to individual requires.
18:07:20  <defunctzombie>substack: ideally, we would have a super tiny assert module (like the c assert) that only takes a boolean and message
18:07:43  <techwraith>(sometimes)
18:07:52  <substack>mikolalysenko: I completely agree that is a good thing for us to do
18:08:15  <substack>defunctzombie: ok I submitted an issue about the assert thing https://github.com/feross/native-buffer-browserify/issues/2
18:08:20  <defunctzombie>substack: cool
18:08:31  <substack>but it's not blocking me getting the new changes in to browserify, it will just be nice later
18:08:37  <defunctzombie>techwraith: modules are easy to install and use
18:08:38  <defunctzombie>substack: yep
18:08:55  <mikolalysenko>defunctzombie: yeah, I totally agree util is a mess, but it is part of node core so you are kind of stuck with it as is
18:09:03  <defunctzombie>techwraith: resist the urge cause going back later to undo it will just seem like a waste of time if you don't do it upfront
18:09:07  <defunctzombie>mikolalysenko: we are stuck with nothing
18:09:19  <defunctzombie>mikolalysenko: I can fully choose to split it into modules and use those :)
18:09:20  <substack>defunctzombie: I'm really down with exposing each function individually as a separate file in util
18:09:27  <techwraith>defunctzombie: I must be more patient than most people then :P
18:09:32  * thlorenzquit (Remote host closed the connection)
18:09:35  <defunctzombie>mikolalysenko: never assume you are stuck with anything otherwise no progress is made
18:09:42  <defunctzombie>techwraith: probably :)
18:09:43  <substack>that way if I find a package that does require('util') and only uses a single function from it, it's easy to swap it out with require('util/blah')
18:10:24  <substack>even better if all of util/index.js is just doing exports.blah = require('blah')
18:10:25  * djcoinquit (Quit: WeeChat 0.4.1)
18:10:40  <techwraith>substack: exactly my thought
18:11:06  <defunctzombie>yep
18:14:07  * mikolalysenkoquit (Ping timeout: 260 seconds)
18:19:34  <substack>defunctzombie: is there a stream module yet?
18:19:41  <substack>a stream module that isn't readable-stream, which is gigantic
18:21:52  * AvianFluquit (Remote host closed the connection)
18:23:38  <substack>lame, this module doesn't have a repo set up correctly https://npmjs.org/package/url
18:23:44  <substack>it seems good enough though
18:24:03  <rowbit>Hourly usage stats: [developer: 6, free: 34]
18:24:06  <substack>and https://github.com/coolaj86/node isn't configured to create issues
18:24:18  <substack>not using this module for those reasons
18:27:10  <substack>sent an email anyways
18:27:55  * dguttmanjoined
18:29:23  * AvianFlujoined
18:39:36  <defunctzombie>substack: send him an email
18:39:42  <defunctzombie>substack: he is open to giving you publish access
18:39:50  <defunctzombie>substack: same with assert and util modules
18:40:13  <defunctzombie>substack: the old repos are dead, you jsut have to make new ones
18:40:20  <defunctzombie>substack: if you want I can do that, let me know
18:40:28  <defunctzombie>substack: there is no stream module that I am aware of
18:42:16  <defunctzombie>substack: I am updating the collab edit thing with who owns any core modules if they are on npm
18:43:12  <defunctzombie>substack: I think for many of them, we can convince the module author that our usecase is good :)
18:44:54  * mikolalysenkojoined
18:50:17  * jcrugzzjoined
18:55:58  * insertcoffeequit (Ping timeout: 246 seconds)
18:56:38  * thlorenzjoined
18:57:52  * thlorenzquit (Remote host closed the connection)
18:59:08  <substack>defunctzombie: oh score https://npmjs.org/package/https
18:59:10  <substack>available
18:59:58  * fuzjoined
19:09:26  * jiangplusquit (Ping timeout: 246 seconds)
19:09:40  * jiangplusjoined
19:20:36  * mikolalysenkoquit (Ping timeout: 246 seconds)
19:22:56  * thlorenzjoined
19:24:04  <rowbit>Hourly usage stats: [developer: 14, free: 23]
19:24:16  * mikolalysenkojoined
19:32:29  * chiltsjoined
19:34:15  * fuzquit (Ping timeout: 246 seconds)
19:39:54  <defunctzombie>substack: nice!
19:40:09  <substack>well anyways I just published https-browserify
19:40:11  <substack>whatevs
19:41:55  <defunctzombie>heh
19:43:01  <defunctzombie>substack: we could drop support for sys probably
19:43:24  <defunctzombie>I don't see people who are up to date and able to use latest browserify having sys issues
19:43:50  <substack>it's so easy to support it though
19:44:09  <substack>exports.sys = require.resolve('util/util.js')
19:45:47  * fronxjoined
19:46:01  <defunctzombie>sure, just have to make a module for it that will be so useless hahaha
19:50:31  <defunctzombie>http://usnews.nbcnews.com/_news/2013/12/02/21724382-two-thousand-mice-dropped-on-guam-by-parachute-to-kill-snakes?lite
19:51:51  * fronxquit (Ping timeout: 245 seconds)
19:53:18  * DTrejojoined
19:53:38  * fronxjoined
19:57:50  * kenperkinsjoined
20:00:57  <ogd_>seeking feedback on this module for hooking up different types of auth to servers https://github.com/maxogden/auth-socket/issues/1
20:01:00  <creationix>async-listener is so much fun
20:01:03  <creationix>this changes everything
20:01:13  <creationix>I wonder how far I should abuse/explore it
20:01:47  <creationix>I currently have a web framework where you can send responses by throwing uncaught exceptions with strings or objects as the value
20:02:10  <creationix>and Error instances thrown send 500 pages and call all roll-back functions to abort and pending transactions
20:02:25  <creationix>about 150 lines of code
20:02:26  <substack>gozala: https://github.com/Gozala/querystring/pull/5
20:03:47  <chrisdickinson>creationix: if you throw a stream, do you stream the response? :)
20:11:02  <creationix>chrisdickinson, that's a great idea
20:11:17  <creationix>and we could make a Response type that contains headers and status code for even more control
20:11:41  <creationix>oh, and the current request is a global variable readable by all code and libraries
20:11:51  <creationix>it doesn't get confused even with multiple concurrent requests
20:12:01  <chrisdickinson>like flask :)
20:12:06  <creationix>it swaps out the global with the right value on every event
20:12:23  <defunctzombie>creationix: I don't get it
20:12:44  <creationix>I'm telling you async-listener enables all kinds of cool magic that could change everything
20:13:20  <creationix>it's landed in 0.11.x and there is a polyfill for 0.10
20:13:20  <defunctzombie>creationix: I don't get what async-listener even does
20:13:32  <defunctzombie>creationix: I read the readme and it makes no sense
20:13:33  <creationix>it gives you event hooks into the core of the event loop
20:13:51  <defunctzombie>ok...
20:14:03  <creationix>basically it makes implementing things like long-stack-traces, domain-style error handline, graphvis outputs of all events or funky web frameworks
20:14:17  <creationix>...it makes implementing them easy
20:14:20  <defunctzombie>ah
20:14:32  <defunctzombie>ok.. cause I already have long stack traces with superstack module
20:14:35  <creationix>trevnorris has been working super hard to make it fast
20:14:42  <defunctzombie>but that was hacky, I guess the new way is cleaner
20:14:45  <creationix>yeah, and you already have domains since node 0.8.x
20:14:50  <defunctzombie>not domains
20:14:58  <defunctzombie>creationix: https://github.com/defunctzombie/node-superstack
20:15:15  <defunctzombie>it basically intercepts, but the new stuff sounds better if you get good error stacks
20:15:18  <defunctzombie>without having to hack around it
20:15:43  <creationix>well, you get event hooks. Reading the stacks is still hacky
20:15:52  <defunctzombie>substack: we already have "path" module on npm
20:15:54  <creationix>what you don't have to do with the new API is wrap all event sources
20:16:00  <defunctzombie>substack: can just use that
20:16:05  * kenperkinsquit (Quit: Computer has gone to sleep.)
20:16:07  <defunctzombie>creationix: nice
20:16:13  <substack>defunctzombie: it's crappy
20:16:19  <defunctzombie>substack: yes, we can jsut update it
20:16:21  <substack>didn't have all the methods that node currently has
20:16:27  <substack>defunctzombie: this was faster
20:16:29  <defunctzombie>much better than 20 modules
20:16:39  <defunctzombie>is there a fire?
20:16:40  <creationix>chrisdickinson, how do I detect is a value is a stream?
20:16:45  <defunctzombie>I will email coolaj
20:16:46  <substack>I'm not going to sit around and wait for other people
20:16:49  <creationix>vs an object the user wants sent as JSON
20:16:50  <substack>I want to get something out today
20:16:55  <defunctzombie>why?
20:16:57  <chrisdickinson>creationix: presence of `.pipe`?
20:17:04  <substack>too many modules on npm is not my problem
20:17:06  <creationix>yeah, that's probably good enough
20:17:10  <defunctzombie>you can get it all ready with repos
20:17:23  <defunctzombie>substack: not a problem but it is nice if we just have that one with many eyeballs :)
20:17:31  <defunctzombie>since they will do the exact same thing
20:17:45  <creationix>chrisdickinson, actually, I think I'll package this to show people how cool async-listener is
20:17:51  <chrisdickinson>+1
20:18:01  <substack>defunctzombie: then I'll update this module to do require('path/') when it's been updated
20:18:04  <creationix>I'll put the request at global.request
20:18:11  <creationix>and throw to respond
20:18:24  <substack>defunctzombie: so part of the problem is that the way coolaj does repos, it CAN'T have eyeballs
20:18:33  <substack>he disables issues or doesn't have a github page at all of these things
20:18:38  <creationix>if you throw twice, it will turn into an error
20:18:38  <defunctzombie>substack: I fix all that
20:18:53  <defunctzombie>substack: those modules are old, I take over and make it all better :)
20:18:56  <substack>not holding my breath
20:19:03  <defunctzombie>substack: assert and util
20:19:05  <substack>you can take them over then I'll switch things over to use those
20:19:10  <defunctzombie>substack: I did just a few days ago :)
20:19:18  <substack>but right now I just want to fix broken shit and cut browser-builtins out of the loop
20:19:20  <defunctzombie>till then it was old and outdated with no repo
20:19:45  * kenperkinsjoined
20:20:43  <substack>ReferenceError: ArrayBuffer is not defined
20:21:07  <substack>native-buffer-browserify doesn't run in node :/
20:21:25  <defunctzombie>substack: nope
20:21:33  <defunctzombie>substack: it will probably need to use the browser field
20:21:53  <defunctzombie>substack: wait.. ArrayBuffer is a thing tho
20:21:58  <substack>makes it hard to test
20:22:01  <defunctzombie>I played with it the other day
20:22:10  <defunctzombie>substack: does it? I just test with zuul in browser stuff
20:22:16  <defunctzombie>or use testling :)
20:22:53  <chrisdickinson>creationix: throw twice?
20:22:57  <chrisdickinson>sounds... unpossible.
20:24:04  <rowbit>Hourly usage stats: [developer: 14, free: 25]
20:24:26  <creationix>chrisdickinson, no, because I swallow the throws
20:24:36  <creationix>what if you had a setInterval that throws in the body
20:24:41  <creationix>the first would send a http response
20:24:48  <creationix>the second can't because the response is sent already
20:25:04  <chrisdickinson>ah
20:25:16  <chrisdickinson>that makes sense
20:25:46  * kevinswiberquit (Remote host closed the connection)
20:30:48  <creationix>ok, maybe throw is a bad idea, but makine request and response is pretty solid
20:31:01  <creationix>*makine req and res *global* is solid
20:31:39  <creationix>and on process exit, I can export a graphvis graph of all the events that happened with timings, names and dependencies
20:31:46  * kenperkinsquit (Quit: Computer has gone to sleep.)
20:34:18  * kenperkinsjoined
20:39:21  * jcrugzzquit (Ping timeout: 246 seconds)
20:39:24  * Maciek416quit (Quit: Leaving...)
20:39:33  * Maciek416joined
20:40:12  * Maciek416quit (Remote host closed the connection)
20:41:04  * Maciek416joined
20:43:13  <gozala>substack: defunct zombie can you guys figure that out among yourselfs ?
20:44:25  <gozala>defunctzombie: has being maintaining for some time
20:44:40  * fronxquit (Remote host closed the connection)
20:45:52  <defunctzombie>gozala: maintaining what?
20:46:39  <gozala>defunctzombie: sorry I confused you with someone else
20:46:48  * Maciek416_joined
20:49:12  <gozala>substack: are there some modules that just do array.map and Object.keys
20:49:20  <gozala>that we can import instead of inlining them ?
20:50:27  * Maciek416quit (Ping timeout: 260 seconds)
20:52:37  <defunctzombie>https://npmjs.org/package/object-keys
20:52:47  <defunctzombie>the thing is.. it depends on which shim you want to use
20:52:55  <defunctzombie>the full featured one.. or the little hacked one
20:56:29  <gozala>I posted links to lodash modules for each of these functions
20:57:18  <gozala>defunctzombie: although I’m not sure if it’s worth adding more dependencies to a very simple module
20:58:08  <gozala>defunctzombie: so do you wanna take ownership of events module ?
20:58:55  <defunctzombie>gozala: if you want I can, I have events-browserify but it would be nice to just do `events` and have it work for everyone!
21:00:14  <gozala>defunctzombie: cool I’m going to add you as collaborator then
21:00:28  <gozala> and you can feel free to go and do that ;)
21:01:09  * Maciek416joined
21:01:12  <defunctzombie>gozala: sounds good
21:01:44  <gozala>defunctzombie: do you know how I can do the same for npm ?
21:01:56  <gozala>I mean how can I give you publishing rights
21:04:31  * DTrejois loving the conversation going on here. THIS IS OPEN SOURCE!
21:05:24  <gozala>Raynos: I think once you’ve told me how to grant publish right to npm no ?
21:08:20  * dguttmanquit (Quit: dguttman)
21:08:55  <Raynos>gozala: `npm owner add <project> <name>`
21:09:04  <Raynos>I think check `npm docs owner` for order
21:09:08  <gozala>Raynos: I just found it thanks
21:09:09  <Raynos>I mean `npm owner -h`
21:09:56  <gozala>defunctzombie: you should be all set in regards to events you can push to repo and publish to npm
21:16:15  * fronxjoined
21:21:15  * fronxquit (Ping timeout: 260 seconds)
21:24:03  <rowbit>Hourly usage stats: [developer: 3, free: 22]
21:25:32  <Raynos>events on npm. nice :0
21:34:04  * yorickquit (Read error: Connection reset by peer)
21:35:28  * jcrugzzjoined
21:35:45  * mikolalysenkoquit (Ping timeout: 246 seconds)
21:37:15  * yorickjoined
21:41:50  * timoxleyjoined
21:46:13  * kenperkinsquit (Quit: Computer has gone to sleep.)
21:46:20  * fronxjoined
21:46:46  <creationix>chrisdickinson, substack https://gist.github.com/creationix/7778005
21:49:03  * mikolalysenkojoined
21:50:45  * fronxquit (Ping timeout: 246 seconds)
21:53:27  <creationix>chrisdickinson, ok, I added a streaming example just for you
21:53:35  <chrisdickinson>awesome :)
21:54:55  <chrisdickinson>that could actually make building a more traditional web framework in node feel *very* comfortable, I think.
21:55:07  * dguttmanjoined
21:57:02  <creationix>chrisdickinson, that was the idea
21:57:12  <creationix>and I like the idea that you can have multiple event listeners
21:57:32  <creationix>so I could make another that implements domains (this is actually what node 0.12.x will do)
21:57:38  <creationix>I could make one to add long-stack-traces
21:57:53  <creationix>one to record all events in a process and emit a graphviz graph of process exit
21:57:54  <creationix>etc
21:58:26  <creationix>chrisdickinson, and since I expose response, using thow is totally optional
21:58:38  <chrisdickinson>i'm not sure how i feel about using throw as the mechanism ultimately
21:58:55  <chrisdickinson>but the ability to contextually globalize a grab bag object, the request, and the response is awesome
21:59:05  <chrisdickinson>and the ability to actually layer middleware sanely across multiple stacks
22:05:05  <Raynos>creationix: why throw instead of return ?
22:06:14  * ednapiranhaquit (Quit: Leaving...)
22:08:27  * AvianFlu_joined
22:10:43  <creationix>because I can't catch a return
22:10:44  <creationix>but I can catch uncaught exceptions
22:11:24  * AvianFluquit (Ping timeout: 246 seconds)
22:12:59  <Raynos>but why do you have to catch it ? because you want to `throw` a response from any depth ?
22:13:16  <Raynos>taking this idea further
22:14:18  <creationix>Raynos, this isn't just a single tick, this works for all events, no matter how deeply down the event tree
22:14:24  <creationix>and in any file or third-party module
22:14:33  <creationix>you don't have to pass anything to them
22:14:52  <creationix>I could instead of abusing throw just tell people to use the methods on the global response object
22:16:03  <Raynos>you need throw to halt the function execution
22:16:10  <Raynos>to avoid a send headers twice thing
22:18:18  <creationix>well someone could just do setInterval(function () { throw "Ha!"; }, 300)
22:18:24  <creationix>that would try to send headers multiple times
22:19:59  <creationix>throw only stops the current stack, not future events
22:20:00  <defunctzombie>substack: I have access to url, path, events modules/repos now
22:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 42]
22:30:12  * kevino80quit (Remote host closed the connection)
22:39:41  <mikolalysenko>other than google closure compiler, is there anything out there that can do dead code elimination in javascript?
22:40:13  <defunctzombie>gozala: can I get rid of this extendables stuff in events?
22:40:28  <defunctzombie>gozala: or replace it with a real module doing the same thing?
22:40:32  <gozala>defunctzombie: yeah whatever
22:40:42  <defunctzombie>k... what was the purpose?
22:40:46  <substack>mikolalysenko: I started working on that
22:40:47  <defunctzombie>is that the same as util.inherits?
22:40:57  <substack>githttps://github.com/substack/undead
22:41:01  <substack>whoops https://github.com/substack/undead
22:41:11  <gozala>defunctzombie: It was backbone like Class.extend
22:41:29  <defunctzombie>gotcha
22:41:33  <gozala>defunctzombie: so EventEmitter.extend would work to
22:41:48  <gozala>defunctzombie: anyhow I don’t really use that module
22:41:53  <gozala>anymore
22:41:55  <defunctzombie>gozala: also, you say this is event emitter for all engines... is there something other than node you care about?
22:41:58  <defunctzombie>gozala: ah gotcha
22:42:05  <gozala>so doing plain node stuff sounds most reasonable
22:42:09  <defunctzombie>kk
22:42:14  <defunctzombie>then I will do that accordingly
22:42:26  <gozala>defunctzombie: yeah we used to use it in add-on sdk
22:42:45  <gozala>and I used it in browsers before browserify was there
22:43:48  * AvianFlu_changed nick to AvianFlu
22:46:34  * fronxjoined
22:47:47  * kevinswiberjoined
22:48:44  <mikolalysenko>I can't wait until dec 13 is over, then I can work on fun stuff again
22:49:54  <mikolalysenko>also, check out this paper: http://www-plan.cs.colorado.edu/diwan/7135/p1684-brandis.pdf cc substack chrisdickinson
22:52:30  * fronxquit (Ping timeout: 240 seconds)
22:58:52  * tilgoviquit (Remote host closed the connection)
23:00:18  <defunctzombie>substack: so amazing.. some core modules use undocumented utils like isFunction
23:01:20  * fronxjoined
23:03:44  * thlorenzquit (Remote host closed the connection)
23:04:19  * thlorenzjoined
23:04:45  <chrisdickinson>oo
23:06:12  <chrisdickinson>mikolalysenko: question re SSA and object properties: given `obj.x = 3; obj.x = 4`, how does that affect the SSA? is it now `obj^1`, `obj^2`? or is the whole text `obj.x^1`, `obj.x^2`
23:06:18  * anvakaquit (Remote host closed the connection)
23:08:55  * thlorenzquit (Ping timeout: 252 seconds)
23:11:26  * jcrugzzquit (Ping timeout: 245 seconds)
23:14:21  * maksimlinjoined
23:17:50  * kevino80joined
23:18:29  * fronxquit (Remote host closed the connection)
23:19:18  <defunctzombie>gozala: substack: https://github.com/Gozala/events/commit/d6521f5f1220082b4d28921c27c93448c0cd8d40
23:19:33  <defunctzombie>still have to do the browser testing part, but tests run and pass in node.js now
23:19:39  <defunctzombie>gozala: can you enable travis on the repo?
23:20:48  <substack>defunctzombie: can we not use require('util/') for that?
23:21:00  <defunctzombie>substack: nope.. unfortunately we cannot
23:21:07  <defunctzombie>substack: because of some awesome shit in the util file
23:21:15  <defunctzombie>substack: so the functions util.isFunction, etc
23:21:23  <defunctzombie>are NOT available if you just require('util');
23:21:25  <gozala>defunctzombie: done
23:21:27  <defunctzombie>I don't know why
23:21:34  <defunctzombie>gozala: thanks!
23:21:42  <substack>defunctzombie: not sure what you're talking about
23:21:52  <substack>requesting that we replace util.isFunction with typeof x === 'function'
23:21:59  <defunctzombie>substack: clone the repo, remove the '/' and run npm test
23:22:01  <substack>so we can remove the require('util/')
23:22:08  <defunctzombie>substack: that we can do
23:22:10  <substack>no, so we can remove it altogether
23:22:23  <mikolalysenko>chrisdickinson: I think there are multiple ways you could do it
23:22:26  <defunctzombie>substack: yep, I am onboard with that
23:22:33  <mikolalysenko>one is that you could destructure the object into a collection of properties
23:22:39  <defunctzombie>substack: there are some other ones in there tho
23:22:40  <mikolalysenko>so you'd have obj.x1 and obj.x2 etc
23:22:49  <mikolalysenko>the other is that you could leave the object as a black box
23:22:50  <defunctzombie>substack: if you want to take a look
23:23:11  <mikolalysenko>my preference would probably be a mix of the two: destructure locally then at the end construct the object and pass it out of the function
23:23:30  <mikolalysenko>though this requires that you can do some sort of escape analysis, so it might be a bit more difficult
23:23:31  <substack>?
23:23:41  <substack>just rip out the require('util/') and inline an isFunction(x)
23:24:03  <rowbit>Daily usage stats: [developer: 53, free: 661]
23:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 16]
23:24:16  <defunctzombie>substack: sorry, was not clear.. there are a few others
23:24:25  <defunctzombie>substack: I just haven't listed them all
23:24:33  <defunctzombie>but yea, can see if that would be doable for the others
23:24:41  <defunctzombie>one sec
23:25:37  <mikolalysenko>chrisdickinson: probably though the former version is the easier one to do though
23:27:54  * fallsemoquit (Quit: Leaving.)
23:29:59  <substack>defunctzombie: not going to ship browserify with broken support for <= ie8
23:30:19  <defunctzombie>substack: I know
23:31:37  <defunctzombie>substack: https://github.com/Gozala/events/commit/67e60aaf71491a318a5247b74183f270832d52cf
23:31:48  <defunctzombie>substack: still have to run the browser tests, but at least that satan is gone
23:32:43  * tmcw_quit (Remote host closed the connection)
23:33:23  <defunctzombie>substack: still need to revive path and url repos and update modules
23:34:45  <mikolalysenko>chrisdickinson: my current thinking is that at least to get started you might be able to treat access to objects and their properties as something like a black box, since the property syntax means that even accessing or writing to a variable could amount to triggering a function call unless you have some deeper type analysis to back it up
23:35:00  * thlorenzjoined
23:35:24  <chrisdickinson>hmm
23:35:28  <mikolalysenko>so what you could do is replace obj.x = 3; with a psuedo function: setProp(obj, "x", 1);
23:35:30  <chrisdickinson>that's unfortunate ):
23:35:40  <mikolalysenko>well, eventually it could be made better
23:35:58  <defunctzombie>substack: how far back do you want to support? ie 6?
23:36:07  <mikolalysenko>so what you'd do is once you have the first iteration of an ssa form for the program you could then go back and do type inference in a second pass and add in better destructuring
23:36:47  * tmcw_joined
23:37:13  <chrisdickinson>does setProp split the object var?
23:37:33  <chrisdickinson>obj^2 = setProp(obj^1, "x", 1)
23:37:44  <mikolalysenko>yeah, I think that would be a good way to do it
23:38:13  <mikolalysenko>of course I need to think a bit about how this works with references
23:38:28  <mikolalysenko>since if you update an object then it any other method which has a reference to that object also gets updated...
23:38:47  <substack>defunctzombie: there isn't much of a difference between ie6 and ie8
23:39:00  <defunctzombie>substack: yea.. seems the only thing that failed in events is console.trace
23:39:12  <defunctzombie>substack: so I am thinking of just removing that shit
23:39:20  <mikolalysenko>actually, I don't think you should split object now that I think about it
23:39:25  <defunctzombie>https://github.com/Gozala/events/blob/master/events.js#L148
23:39:49  <mikolalysenko>because what happens if you call a subroutine, and it accesses a reference to obj
23:40:07  <mikolalysenko>then you need to track the fact that you mutated the property of obj in all subroutines that get called
23:40:41  <defunctzombie>substack: and the use of console needs to be conditional
23:40:44  <mikolalysenko>maybe for just getting things up and running it could be ok to kind of punt on object property access and mutation
23:40:51  <defunctzombie>substack: cause in old IE there is no console... what do you do about that?
23:42:49  <mikolalysenko>chrisdickinson: this paper has some ideas for how to deal with some of these issues (though it is written for java) http://www.cs.ucsb.edu/~ckrintz/papers/C16.pdf.gz
23:43:28  <chrisdickinson>mikolalysenko: what if every function was assumed to mutate obj?
23:43:51  <techwraith>defunctzombie: https://npmjs.org/package/console-browserify would work
23:44:09  <defunctzombie>techwraith: yea, but we don't want to require anything in events module
23:44:19  <substack>techwraith: that would be a huge number of bytes to ship
23:44:22  <techwraith>Ah, I see
23:44:59  <techwraith>then just do console = console || {...all the console methods as empty funcs}
23:45:28  <mikolalysenko>chrisdickinson: that is a possible option. the simplest thing to do with objects is to just punt
23:46:07  <mikolalysenko>so everything becomes a setprop(obj, propertyname, value)/getprop(obj, propertyname, value)
23:46:48  <mikolalysenko>once you have that you could do a second more sophisticated analysis to track the lifetime and references to each object, along with type info so that you could do some destructuring
23:46:49  * chrisdickinsonnods
23:47:06  <mikolalysenko>of course if you do obj2 = obj1 then the variable should split
23:47:20  <mikolalysenko>but obj.x = 3; would just become a subprocedure call
23:47:51  <mikolalysenko>(since that is what it actually could do anyway if x was created using Object.defineProperty)
23:47:56  * AvianFluquit (Remote host closed the connection)
23:47:57  * timoxleyquit (Remote host closed the connection)
23:48:21  * tmcw_quit (Remote host closed the connection)
23:48:43  * thlorenzquit (Ping timeout: 260 seconds)
23:49:28  <chrisdickinson>hmm
23:50:55  <mikolalysenko>so if you had say, obj.x.y.something = 3; it would become temp1=getprop(obj, "x"); temp2=getprop(temp1,"y"); setprop(temp2,"something", 3)
23:50:56  <chrisdickinson>so, the downside to treating all function calls with object parameters as "mutative" is that you lose the `variable` -> `value` equivalence, yes?
23:51:08  <mikolalysenko>yeah :(
23:51:14  <mikolalysenko>but objects aren't value types unfortunately
23:51:17  <mikolalysenko>until proven otherwise
23:51:18  * chrisdickinsonnods
23:52:16  <mikolalysenko>what you could do is maybe add a second pass that does escape analysis to prove when an object reference can effectively be treated as a value type
23:54:09  <mikolalysenko>basically you can think of an object as a value, whose value is a reference to an object
23:54:39  <mikolalysenko>(that second comment was unrelated to the previous item btw)
23:55:20  <mikolalysenko>it doesn't give you much leverage for analyzing objects compared to ordinary value type variables, but at least it lets you get started with stuff