00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:04:50  * evboguequit
00:09:34  * mikealjoined
00:09:48  * mikealquit (Client Quit)
00:12:19  * nk109quit (Quit: Computer has gone to sleep.)
00:13:34  * AvianFluquit (Remote host closed the connection)
00:21:41  * mikealjoined
00:33:46  <st_luke>http://teespring.com/ceo-of-a-website
00:47:51  * thl0joined
00:52:05  * mikealquit (Quit: Leaving.)
01:01:38  * spionquit (Ping timeout: 246 seconds)
01:14:47  * kenperkinsquit (Read error: Connection reset by peer)
01:15:33  * kenperkinsjoined
01:16:05  <hij1nx>st_luke: ++
01:16:38  <thl0>substack: have you tried hoogle? http://www.haskell.org/hoogle/?hoogle=%5BT%5D+-%3E+T+-%3E+%28%5BT%5D%2C+%5BT%5D%29
01:16:46  <thl0>substack: maybe this generic split is it?
01:17:00  * shamaquit (Remote host closed the connection)
01:17:12  <thl0>substack: or something simlar to it
01:17:14  <substack>yes I used to write lots of haskell
01:17:37  <thl0>substack: me too until I tried to build a website with yesod and ended back up in nodejs
01:17:38  <thl0>;)
01:20:34  <thl0>sorry just realized that dominictarr asked the question
01:33:02  * blakmatrix1joined
01:41:30  * robertjd_quit
01:50:35  * crankquit (Ping timeout: 255 seconds)
01:53:20  * ins0mniaquit (Ping timeout: 272 seconds)
01:55:39  * crankjoined
01:57:37  <substack>defunctzombie: https://github.com/shtylman/node-browser-resolve/pull/14
01:58:35  * dominictarrjoined
01:58:59  * dguttmanquit (Quit: dguttman)
02:00:42  <defunctzombie>substack: the changes look good however I have a comment
02:00:52  <defunctzombie>I think code like if (typeof window === 'undefined')
02:00:58  <defunctzombie>require('Canvas')
02:01:01  <defunctzombie>should not exist
02:01:13  <defunctzombie>user should be doing var Canvas = require('canvas');
02:01:14  <defunctzombie>always
02:01:26  <defunctzombie>and the canvas module need to have a browser field to return the builtin canvas
02:01:47  <defunctzombie>this is generally why I don't see a gain for the 'false' field
02:02:01  <defunctzombie>because it helps go against what the point of that field is in the first place
02:02:09  <defunctzombie>which is to stop writing pragmas in the code
02:02:52  * st_lukequit (Remote host closed the connection)
02:02:55  <defunctzombie>therefore, I would favor not supporting it and not documenting it .. but instead documenting the more correct way which is to have the canvas module behave correctly when being packaged
02:03:22  <defunctzombie>also, user can do this very easily themselves with browser: { "canvas": "./empty.js }
02:03:35  <substack>that's kind of crappy to have shims everywhere though
02:03:36  <defunctzombie>again avoiding the need for the canvas module author to use false (which I think would not be correct)
02:04:01  <defunctzombie>substack: maybe canvas is a bad example for this, because I think canvas needs to return the builtin when bundled
02:04:23  <defunctzombie>substack: https://github.com/einaros/ws/blob/master/package.json#L32
02:04:27  <defunctzombie>very similar to ws module
02:04:36  <defunctzombie>https://github.com/einaros/ws/blob/master/lib/browser.js
02:04:48  <substack>sometimes you just want a "don't resolve this require()" option
02:05:20  <substack>it'd just be an empty.js map in the browser field _anyway_
02:06:06  <defunctzombie>k.. so here is my suggestion, change the examples to be more along the lines of (don't resolve a module) (maybe like tar) or something you know you don't need
02:06:09  <defunctzombie>and focus on that
02:06:17  <defunctzombie>versus this notion of pragmas
02:06:27  <defunctzombie>cause for the canvas case I would not recommend this approach
02:06:44  <defunctzombie>I would recommend making the canvas module act as a good browserify citizen
02:07:07  <substack>canvas is a tj module
02:07:19  <defunctzombie>he will accept pull for browser field
02:07:24  <defunctzombie>I did it for his debug module
02:07:28  <substack>oh ok
02:08:00  <defunctzombie>but otherwise, yea, I am ok with the patch at the app level but don't want any typeof window examples :)
02:08:10  <defunctzombie>don't want to encourage bad habits when we have better habits
02:08:14  <substack>so the issue is just with the example?
02:08:18  <substack>but not the underlying feature
02:08:28  <defunctzombie>but the case of mocking out a deeply nested module that you know you don't need like tar maybe or whatnot
02:08:34  <defunctzombie>using false at the top level package.json
02:08:38  <defunctzombie>I think that is reasonable
02:08:46  <substack>ok I'll update the example to use tar
02:08:58  * defunctzombiepersonally would just have my own empty file to be explicit but whatever works :)
02:09:06  <defunctzombie>I am not against the false feature
02:09:11  <defunctzombie>I am against the provided use case :)
02:09:25  <defunctzombie>which I believe to be counter to the browser field
02:13:31  <defunctzombie>I know it sounds pedantic but I think it is clearer in the long run
02:14:09  <substack>updated https://github.com/shtylman/node-browser-resolve/pull/14
02:14:38  <substack>https://github.com/substack/node-browser-resolve/tree/false#skip
02:15:25  <defunctzombie>substack: oh yes
02:15:30  <defunctzombie>substack: I think this example is much better
02:15:36  <defunctzombie>because it shows how you have code re-use
02:15:45  <defunctzombie>but know that a codepath is not meant to be used
02:15:54  <defunctzombie>there are still better ways imho, but this I can go with
02:15:56  <defunctzombie>cool
02:16:14  <substack>it's just another way that is appropriate for some situations
02:16:43  <defunctzombie>yep
02:16:47  <substack>this lets me address the "I want to ignore a require" use-case upstream in browserify in a nice way
02:17:15  <substack>even though I have an early flight, I so need some coffee right now
02:17:25  <substack>to finish these browserify v2 examples
02:18:17  <defunctzombie>substack: this will be a minor version bump btw
02:18:17  * thl0quit (Remote host closed the connection)
02:19:11  <defunctzombie>substack: v0.1.0
02:22:24  * tilgoviquit (Remote host closed the connection)
02:24:43  * AvianFlujoined
02:24:57  <defunctzombie>substack: only contributor rules are (follow style and use pull requests) :)
02:30:56  * Raynos_quit (Quit: Page closed)
02:32:41  <defunctzombie>substack: are you using bouncy?
02:32:50  <substack>yes
02:34:47  <defunctzombie>how has it been holding up?
02:34:57  <substack>the latest version works very well
02:35:14  <substack>2.x was pretty terrible but 3.x is very solid
02:35:42  <substack>substack.net, testling.com, and browserling.com are all sitting behind bouncy@3.1.0
02:35:45  <defunctzombie>I am thinking of putting it in from of a few of my services with a spaceport layer
02:35:54  <defunctzombie>so I can just bring up www backends and have it discover them
02:35:58  <defunctzombie>for the bounce pool
02:36:08  <defunctzombie>and remove offline ones automatically
02:36:12  <substack>that's what http://github.com/substack/ploy does
02:36:28  <substack>without the discovery part
02:36:44  <defunctzombie>yea, I want the discovery part and less the git push part right now
02:37:02  <substack>a perfectly valid niche
02:37:48  <substack>defunctzombie: can you update the browser field gist with the `false` behavior too?
02:38:07  <defunctzombie>substack: yea
02:41:45  <substack>everything is upgraded
02:42:41  <defunctzombie>substack: https://gist.github.com/shtylman/4339901#ignore-a-module
02:43:30  * dguttmanjoined
02:43:56  * dguttmanquit (Client Quit)
02:44:39  * dguttmanjoined
02:45:59  * dguttmanquit (Client Quit)
02:47:47  <substack>oh I see you've "added" me to browser-resolve
02:47:51  <substack>not ever going to use that
02:49:00  <defunctzombie>:)
02:50:01  <mbalho>lol
02:51:29  <defunctzombie>one can never be too sure
02:54:24  <mbalho>i am morally opposed to npm install browserify having a native compile step because of faye-websockets and rybytes or whatever
02:54:27  * mbalhojust sayin
02:54:33  <mbalho>rbytes*
02:55:25  <defunctzombie>?
02:55:31  <defunctzombie>does it have a compile step now
02:55:36  <defunctzombie>for what
02:55:57  <mbalho>defunctzombie: node-uuid i thin
02:55:58  <mbalho>k
02:56:05  <defunctzombie>that should not be the case
02:56:10  <mbalho>oh its shoe
02:56:10  <defunctzombie>that doesn't compile anything
02:56:15  <mbalho>> rbytes@0.0.2 install /Users/maxogden/src/js/voxel-select/node_modules/beefy/node_modules/live-reload/node_modules/reconnect/node_modules/shoe/node_modules/sockjs/node_modules/rbytes
02:56:21  <mbalho>nvm its beefy
02:56:22  <substack>mbalho: go fix sockjs then
02:56:24  <mbalho>STUPID BEEFY
02:56:36  <mbalho>i am not trying to fix anything, just complaining
02:56:41  <defunctzombie>+1 mbalho
02:56:43  <substack>it has rbytes as an optional dependency
02:56:45  <substack>which is dumb
02:56:47  * marcello3djoined
02:58:25  * fallsemoquit (Quit: Leaving.)
03:03:29  * defunctzombiequit (Ping timeout: 255 seconds)
03:04:32  * defunctzombiejoined
03:15:17  * Correnjoined
03:15:41  * mikealjoined
03:16:05  <chrisdickinson>mbalho: this is why i want to make live reload not use sock
03:16:11  <mbalho>ya
03:16:12  <chrisdickinson>on beefy
03:17:11  <defunctzombie>chrisdickinson: engine
03:17:21  * kenperkinsquit (Ping timeout: 252 seconds)
03:17:21  * Correnchanged nick to kenperkins
03:17:22  <defunctzombie>I like engine.io for some reason
03:17:23  * dominictarrquit (Quit: dominictarr)
03:17:31  <defunctzombie>seems simple enough to understand.. maybe that isn't true
03:35:00  <defunctzombie>substack: https://github.com/shtylman/node-browser-resolve/pull/12
03:37:01  <substack>defunctzombie: should probably let that pull req go through
03:37:33  <substack>although hmmm not sure
03:37:55  <substack>being explicit is good
03:48:51  <defunctzombie>https://code.google.com/p/ngxv8/
03:49:40  <defunctzombie>that is crazy..but not maintained it seems
03:49:42  <defunctzombie>thank god
03:59:56  <substack>this is a sweet module https://github.com/ypocat/npmlv
04:00:05  <substack>was just about to write something like this if I couldn't find anything
04:01:04  <defunctzombie>nice
04:01:11  <defunctzombie>the -n and -a modes should be removed haha
04:02:35  * shuaibquit (Quit: Computer has gone to sleep.)
04:15:30  * timoxleyquit (Quit: Computer has gone to sleep.)
04:20:03  <substack>defunctzombie: https://github.com/substack/npmlv/tree/tilde#usage
04:20:09  <substack>-t for tilde
04:20:24  * jcrugzzquit (Ping timeout: 245 seconds)
04:20:33  <defunctzombie>substack: cool, I like the default pinned usage ;)
04:20:37  <defunctzombie>substack: you should also remove the others
04:20:47  <defunctzombie>substack: and say that it is better practice to use ~ or pin directly
04:21:01  <defunctzombie>we shouldn't encourage libs that will break in the future
04:21:03  <substack>it's not my module
04:21:09  <substack>I just want -t
04:21:10  <defunctzombie>substack: yea, I would just suggest it
04:21:16  <substack>post an issue
04:21:19  <defunctzombie>kk
04:28:13  * st_lukejoined
04:29:35  <st_luke>has anyone tried image resizing without bindings to a native lib?
04:41:42  <substack>mbalho: https://github.com/substack/stream-handbook#concat-stream
04:45:26  <chrisdickinson>substack: i have to ask based on a readme image; are you a terry pratchett fan?
04:46:05  <mint_xian>chrisdickinson: Everyone is a Prachett fan. Some people just don't know it yet.
04:46:25  <chrisdickinson>mint_xian: :D
04:47:58  <substack>chrisdickinson: haven't read any of his stuff
04:48:10  <substack>I read fiction with extreme infrequence.
04:48:33  * mmckeggpart
04:53:03  * Domenic_quit (Ping timeout: 252 seconds)
04:57:55  * marcello3dquit (Remote host closed the connection)
04:59:47  <mbalho>substack: nice!
05:29:19  * mikealquit (Quit: Leaving.)
05:39:59  <jesusabdullah>I read part of a Pratchett book once
05:40:01  <jesusabdullah>it was okay
05:40:10  <jesusabdullah>not my deal but I understand why some people would love it
05:46:13  <chrisdickinson>on a lighter note: node's builtin zlib is giving me infinite headaches.
05:47:27  <mbalho>blame isaacs
05:47:30  <jesusabdullah>is that lighter?
05:47:37  <jesusabdullah>oh yeah, blame isaac for everything
05:47:51  <jesusabdullah>I blame isaac for my own libraries!
05:48:02  <jesusabdullah>also my severe lack of fresh paper
05:48:11  <chrisdickinson>haha
05:48:22  * mikealjoined
05:48:25  <chrisdickinson>it's really not node's fault, it's a weird use case
05:48:48  <chrisdickinson>it's just one of those situations where, well, i wish zlib was a billion different packages
05:48:56  <chrisdickinson>but it's just the one builtin one
05:49:13  <jesusabdullah>your weird use case? isaac's fault
05:49:15  <jesusabdullah>lol
05:50:14  <chrisdickinson>i mean, i have to parse a file that has object headers that are varint encoded (this is okay and cool)
05:50:35  <chrisdickinson>but the first byte is as follows: "CTTTSSSS"
05:50:43  <chrisdickinson>where C is "continue to next byte"
05:50:52  <chrisdickinson>T is "type of subsequent object"
05:51:02  <chrisdickinson>and S is "expanded size"
05:51:30  <chrisdickinson>so afaict there's no way to be like "okay cool, I'll just walk N bytes ahead and read the next thing"
05:51:52  <chrisdickinson>since you need to give all of the rest of the bytes you have on this turn (and maybe more) to zlib
05:52:10  <chrisdickinson>until the inflated version matches the expanded size
05:52:36  <chrisdickinson>but oh no, deflated streams are occasionally followed by a 4 byte adler checksum, which node's zlib will output data before
05:52:49  <chrisdickinson>so you need to blorp out those 4 bytes and hop ahead
05:53:14  <chrisdickinson>but sometimes that's three bytes because zlib will accept more bytes? or some other reason?
05:54:19  <chrisdickinson>the only implementation i've seen that works of this parsing is A) synchronous and B) uses the "raw-deflate.js" that's been floating around the internet, unlicensed, since 1998
06:08:47  * wolfeidauquit (Remote host closed the connection)
06:11:32  * kenperkinsquit (Quit: Computer has gone to sleep.)
06:28:50  <jesusabdullah>chrisdickinson: read raw-deflate, take notes, re-implement based on notes
06:29:15  <jesusabdullah>chrisdickinson: use child processes so you can have your sync algorithms and callback them too
06:29:43  <chrisdickinson>well, a native inflate wouldn't really need to be sync
06:30:42  * defunctzombiechanged nick to defunctzombie_zz
06:48:05  * st_lukequit (Remote host closed the connection)
07:39:55  * dominictarrjoined
07:42:07  <juliangruber>dominictarr: I hacked on that level-store index thing
07:42:31  <dominictarr>aha I saw
07:45:16  * dominictarrquit (Quit: dominictarr)
08:02:28  * calvinfo_quit (Quit: Leaving)
08:08:00  * sorensenquit (Ping timeout: 264 seconds)
08:08:26  * sorensenjoined
08:10:14  * calvinfojoined
08:12:20  * calvinfoquit (Client Quit)
08:18:59  * calvinfojoined
08:19:24  * calvinfo_joined
08:19:24  * calvinfo_quit (Client Quit)
08:21:31  * calvinfoquit (Client Quit)
08:27:25  * calvinfojoined
08:42:18  * thatguydanjoined
09:53:15  * jez0990joined
10:15:57  * shuaibjoined
10:37:44  * ehdquit (Ping timeout: 246 seconds)
10:39:50  * sveisveiquit (Ping timeout: 246 seconds)
10:40:11  * gozalaquit (Ping timeout: 246 seconds)
10:40:32  * owenbquit (Ping timeout: 246 seconds)
10:48:17  * thl0joined
10:52:35  <substack>https://github.com/substack/exterminate#example
11:04:07  * wolfeidaujoined
11:14:24  * spionjoined
11:23:44  * mint_xianquit (Ping timeout: 260 seconds)
11:23:45  * isaacsquit (Ping timeout: 255 seconds)
11:23:45  * jden|zz_quit (Ping timeout: 260 seconds)
11:23:46  * rannmannquit (Ping timeout: 260 seconds)
11:23:46  * chiltsquit (Ping timeout: 255 seconds)
11:23:47  * hij1nxquit (Ping timeout: 255 seconds)
11:23:47  * LOUDBOTquit (Ping timeout: 255 seconds)
11:23:47  * rook2paw1quit (Ping timeout: 255 seconds)
11:23:47  * py1honquit (Ping timeout: 255 seconds)
11:23:47  * jesusabdullahquit (Ping timeout: 255 seconds)
11:23:48  * rannmannjoined
11:23:48  * rannmannquit (Changing host)
11:23:48  * rannmannjoined
11:23:50  * isaacs_joined
11:23:51  * py1hon_joined
11:23:51  * jesusabdullahjoined
11:23:51  * rook2pawnjoined
11:23:53  * hij1nxjoined
11:24:01  * isaacs_changed nick to Guest93631
11:24:21  * mintxianjoined
11:24:21  * mintxianchanged nick to mint_xian
11:24:21  * chiltsjoined
11:24:33  * jden|zzjoined
11:28:32  * cubertquit (*.net *.split)
11:28:32  * mbalhoquit (*.net *.split)
11:28:32  * rowbitquit (*.net *.split)
11:31:37  * cubertjoined
11:31:37  * mbalhojoined
11:31:37  * rowbitjoined
11:36:12  <juliangruber>substack: is your vim running correctly in exterminate?
11:38:39  * calvinfoquit (Ping timeout: 258 seconds)
11:39:14  <tanepiper>hmm I'm still trying to run it on OSX :(
11:39:18  <tanepiper>net.js:50
11:39:18  <tanepiper> throw new TypeError('Unsupported fd type: ' + type);
11:39:18  <tanepiper> ^
11:39:20  <tanepiper>TypeError: Unsupported fd type: TTY
11:39:35  <tanepiper>then when i try run it again:
11:39:36  <tanepiper>[3670:1799:0328/113856:ERROR:process_singleton_mac.cc(106)] Unable to obtain profile lock.
11:44:25  * ralphthe1injaquit (Quit: leaving)
11:55:00  * shuaibquit (Ping timeout: 256 seconds)
11:57:32  * shuaibjoined
12:09:56  * ins0mniajoined
12:16:31  * thl0quit (Remote host closed the connection)
12:37:58  * ehdjoined
12:38:47  * gozalajoined
12:39:16  * owenbjoined
12:39:23  * sveisveijoined
12:52:05  * evboguejoined
13:05:35  * dominictarrjoined
13:06:36  * gwenbelljoined
13:11:10  * fallsemojoined
13:13:17  * AvianFluquit (Remote host closed the connection)
13:14:18  * AvianFlujoined
13:30:03  * evboguequit
13:30:07  * marcello3djoined
13:32:12  <dominictarr>rvagg: hey, are you in dublin yet?
13:32:16  * timoxleyjoined
13:33:57  * jibayjoined
13:35:02  <dominictarr>hij1nx: you in dublin?
13:35:32  <FireFly>substack: in https://github.com/substack/shux/blob/master/index.js#L81 , don't you want cwd: opts.cwd || '/' instead?
13:41:41  * gwenbellquit (Quit: Computer has gone to sleep.)
13:41:49  * timoxleyquit (Quit: Computer has gone to sleep.)
13:49:55  * Domenic_joined
13:53:26  * thl0joined
13:55:11  * timoxleyjoined
14:11:15  * timoxleyquit (Quit: Computer has gone to sleep.)
14:12:07  * kenperkinsjoined
14:12:36  * kenperkinsquit (Max SendQ exceeded)
14:19:34  * kenperkinsjoined
14:31:35  * mikealquit (Quit: Leaving.)
14:32:12  * crankquit (Ping timeout: 252 seconds)
14:32:33  * Domenic_quit (Remote host closed the connection)
14:37:27  * crankjoined
14:41:09  * mikolalysenkojoined
14:42:47  * Domenic_joined
14:47:09  * dguttmanjoined
14:47:53  * timoxleyjoined
14:54:40  * defunctzombie_zzchanged nick to defunctzombie
15:04:05  * mikolalysenkoquit (Read error: Connection reset by peer)
15:04:24  * shuaibquit (Ping timeout: 264 seconds)
15:07:38  * shuaibjoined
15:12:15  * shuaibquit (Ping timeout: 260 seconds)
15:14:13  * shuaibjoined
15:16:13  * mikealjoined
15:20:25  * mikealquit (Client Quit)
15:39:48  * evboguejoined
15:47:35  * mikealjoined
15:48:27  * evboguequit
15:49:55  * mikealquit (Client Quit)
15:53:02  * tmcwjoined
15:54:52  * thatguydanquit (Quit: thatguydan)
16:04:37  * jcrugzzjoined
16:06:20  * thl0quit (Remote host closed the connection)
16:11:38  * tilgovijoined
16:14:58  * evboguejoined
16:23:07  * mikolalysenkojoined
16:23:15  * Guest93631changed nick to isaacs
16:27:11  * mikealjoined
16:33:40  * tanepiperquit (Ping timeout: 246 seconds)
16:36:44  * thl0joined
16:36:45  * tanepiperjoined
16:36:59  * thl0quit (Read error: Connection reset by peer)
16:37:20  * thl0joined
16:45:25  * thl0quit (Ping timeout: 248 seconds)
16:47:31  * calvinfojoined
16:53:54  * fallsemoquit (Quit: Leaving.)
17:00:56  * gwenbelljoined
17:04:30  * fallsemojoined
17:07:00  * thl0joined
17:09:57  * CryptoQuickjoined
17:10:07  * tilgoviquit (Remote host closed the connection)
17:18:35  * shuaibquit (Ping timeout: 240 seconds)
17:20:11  * shuaibjoined
17:23:03  * gozalaquit (Ping timeout: 245 seconds)
17:25:10  * pikpikquit (Ping timeout: 258 seconds)
17:25:24  * owenbquit (Ping timeout: 264 seconds)
17:26:15  <dominictarr>rvagg: you there?
17:33:29  * dominictarrquit (Quit: dominictarr)
17:34:38  * jcrugzzquit (Ping timeout: 256 seconds)
17:36:47  * dominictarrjoined
17:36:49  * gwenbellquit (Quit: Computer has gone to sleep.)
17:37:24  * sveisveiquit (Ping timeout: 264 seconds)
17:38:15  * jcrugzzjoined
17:42:50  <defunctzombie>isaacs: https://npmjs.org/package/mootools-slick-parser
17:42:51  <defunctzombie>??
17:43:15  <isaacs>defunctzombie: means that something was unpublished, and the cache wasn't cleare.
17:43:18  <isaacs>d
17:43:23  <defunctzombie>sigh
17:43:35  <defunctzombie>I am depending on an older version of some module
17:43:41  <defunctzombie>that has that as a dep
17:43:43  <isaacs>defunctzombie: known issue that i have a pull req to fix, but haven't landed.
17:43:45  <isaacs>yeah, i don't know.
17:43:48  <isaacs>talk to the author
17:43:49  <defunctzombie>fuck
17:43:53  <defunctzombie>ok, thanks :)
17:45:05  * mikolalysenkoquit (Ping timeout: 240 seconds)
17:49:56  * pikpikjoined
17:50:38  * sveisveijoined
17:51:57  * owenbjoined
17:52:21  * Domenic_changed nick to Domenic_away
17:56:14  * dominictarrquit (Quit: dominictarr)
17:57:07  * Domenic_awayquit (Remote host closed the connection)
17:57:33  * gozala_joined
17:58:29  * shuaibquit (Ping timeout: 248 seconds)
18:00:14  * shuaibjoined
18:01:15  * mikolalysenkojoined
18:13:05  * sveisveiquit (Ping timeout: 240 seconds)
18:13:51  * Raynosquit (Ping timeout: 258 seconds)
18:14:51  * evboguequit
18:16:07  * Domenic_awayjoined
18:16:13  * Domenic_awaychanged nick to Domenic_
18:16:18  * pikpikquit (Ping timeout: 256 seconds)
18:16:52  * gozala_quit (Ping timeout: 256 seconds)
18:17:35  * owenbquit (Ping timeout: 240 seconds)
18:17:55  * mikolalysenkoquit (Ping timeout: 264 seconds)
18:20:22  * notalexgordon_quit (Ping timeout: 258 seconds)
18:20:50  * shuaibquit (Ping timeout: 256 seconds)
18:21:43  * shuaibjoined
18:22:17  * ryanseddonquit (Ping timeout: 258 seconds)
18:23:03  * niftylettucequit (Ping timeout: 258 seconds)
18:39:29  * shuaibquit (Ping timeout: 255 seconds)
18:40:37  * mikolalysenkojoined
18:40:43  * shuaibjoined
18:43:15  * dguttmanquit (Quit: dguttman)
18:43:40  * shamajoined
18:44:13  * Benviejoined
18:46:04  * dguttmanjoined
18:51:05  * dguttmanquit (Ping timeout: 240 seconds)
18:51:14  * spionquit (Ping timeout: 246 seconds)
18:52:06  * Domenic_quit (Remote host closed the connection)
18:55:11  * dguttmanjoined
18:55:57  * Domenic_joined
19:03:49  <Domenic_>what do people want in ES7? I know better integer types is a high priority. Curious what other things people feel are missing. isaacs?
19:04:57  * dguttmanquit (Read error: Connection reset by peer)
19:05:20  * fallsemoquit (Read error: No route to host)
19:06:00  <chrisdickinson>kind of hard to say, i'm having a hard time keeping all of the changes from es6 in my head :)
19:06:07  * fallsemojoined
19:06:10  <chrisdickinson>but yes, better integer types
19:07:13  <chrisdickinson>i suppose a parser api would be ideal
19:07:13  * fallsemoquit (Read error: Connection reset by peer)
19:07:26  <chrisdickinson>with the ability to register new tokens
19:07:28  <chrisdickinson>etc.
19:07:46  * fallsemojoined
19:08:22  * AvianFluquit (Remote host closed the connection)
19:09:10  <Domenic_>macros?
19:09:57  * AvianFlujoined
19:10:05  * owenbjoined
19:11:02  <Benvie>Domenic_, based on recent es-discuss discussion, WeakRefs
19:11:30  <Domenic_>Benvie: yeah, TC39's got that definitely. Just curious if there are things the community wants that they are missing.
19:11:37  <Benvie>ah
19:11:44  <Domenic_>I think access to the AST Parser fits in that category
19:11:50  <jesusabdullah>idk dude, I'm pretty disillusioned re: tc39
19:11:56  <jesusabdullah>they don't take feedbax well
19:12:17  <Domenic_>jesusabdullah: really? my experience has been the opposite.
19:12:30  <Benvie>same, but it seems there's a divide in peoples' opinions
19:12:41  <Benvie>some people do very well interacting with tc39...and some do very poorly
19:12:48  <Domenic_>sure they don't take feedback well from people who say "fuck standards bodies" or "es6 is the new es4," because that causes them to flip the bozo bit on you.
19:12:56  <Benvie>lol
19:12:59  <Domenic_>but if you actually engage it seems to work out.
19:13:10  <Benvie>that's been my experience
19:13:27  <Benvie>and it's important to remember that everybody is compromising, including the people on tc39
19:13:38  <Benvie>so the expectation needs to be metered in terms of what is possible to get in
19:14:23  <Benvie>I would like to see syntactic support for @names, but tc39 already has people who want that too happen as well
19:14:55  <Benvie>I do not think that a standardized parser/ast will make it. That already exists as a strawman
19:15:29  * dguttmanjoined
19:15:31  <Benvie>http://wiki.ecmascript.org/doku.php?id=strawman:ast for reasons why
19:15:56  <jesusabdullah>idk dude
19:16:04  <jesusabdullah>these chicks don't even know the name of my band, so...
19:31:02  * fallsemoquit (Read error: No route to host)
19:31:40  * fallsemojoined
19:31:47  * fallsemoquit (Read error: No route to host)
19:32:45  * fallsemojoined
19:32:51  * fallsemoquit (Read error: No route to host)
19:34:04  * dguttmanquit (Read error: Connection reset by peer)
19:34:22  * fallsemojoined
19:35:13  * AvianFluquit (Remote host closed the connection)
19:38:24  * yorickjoined
19:39:15  <Domenic_>Benvie: I'm a little surprised private names even made it at all. There was real momentum for a while toward killing them in favor of just weak maps...
19:39:53  <Benvie>well you need to understand, there's two separate things
19:39:57  <Benvie>unique symbols and private symbols
19:40:02  * fallsemoquit (Read error: No route to host)
19:40:09  <Benvie>unique names were never in danger
19:40:21  <Domenic_>sure. but is syntax for unique names really a win?
19:40:35  <Benvie>I do
19:40:47  <Benvie>because having to use bracket notation makes the code a lot less clear
19:41:11  <Benvie>it makes it look like you're always using a dynamic variable to get at the property, when in most cases it's actually a static value
19:41:16  <Domenic_>i guess i would think that unique symbols would not be used very often.
19:41:22  <Benvie>absolutely not
19:41:32  <Benvie>they are used a lot
19:41:36  * fallsemojoined
19:41:42  <Domenic_>use cases are basically branding and expando-ing on top of existing objects you don't control
19:41:48  <Benvie>any time you have "x._privateProp" you'd replace that with a unique symbol
19:41:52  * fallsemoquit (Read error: No route to host)
19:41:53  <Benvie>very rarely do you need a private symbol
19:41:56  <Domenic_>even branding actually isn't any better with unique than with string-keyed
19:42:03  <Benvie>unique symbols are only slightly more visible than private ones
19:42:08  <Domenic_>hmm
19:42:13  <Domenic_>i don't think people would do that replacement
19:42:18  <Benvie>why not?
19:42:24  <Domenic_>if you don't get the privacy closures give you, just stick to _'s.
19:42:35  <Benvie>the whole point of unique symbols is to replace _
19:42:49  <Benvie>because they make it so you don't have accidental namespace collisions
19:43:03  <Benvie>like for example, EventEmitters using _listeners
19:43:10  <Domenic_>i guess
19:43:29  <Benvie>it's mostly private, but still reflectable if you really care to
19:43:42  <Benvie>since they're visible with getOwnPropertyKeys or whatever it's to be called
19:44:02  * dguttmanjoined
19:44:11  <Domenic_>i think that lack of collisions is a very slight win over _'s.
19:44:23  <Domenic_>given that real-world collision hazards are minor.
19:44:35  <Domenic_>expandos on objects you don't control is the only solid use case i can think of
19:45:05  <Benvie>this becomes more important in an es6 world where classes and inheritance are more convenient and you need to have separation between different levels of inherited semi-private property and methods
19:45:54  <Benvie>it's also useful for universal tokens, like @@iterator
19:46:12  <Benvie>say the community comes up with their own semi-formal universal tokens like that
19:46:15  * ins0mniaquit (Ping timeout: 252 seconds)
19:46:22  <Domenic_>heh
19:46:25  <Domenic_>like "then"
19:46:28  <Benvie>exactly
19:46:45  <Benvie>and promises are a good example, because you can see issues with name collisions with them already
19:46:50  <Benvie>amongst the different versions and whatnot
19:47:30  <Benvie>so you could have a package that literally only exports a single unique symbol
19:47:51  <Benvie>and then everyone who wants to advertise a compatible api uses that module
19:48:08  <Benvie>to name their method or property (or a collection of them)
19:48:22  * dguttmanquit (Ping timeout: 248 seconds)
19:49:20  <Benvie>using npm, it would actually automatically version the symbols. Since if you import "promise-symbols@0.0.1" in one module and "promise-symbols@0.0.2" they could never accidentally overlap like a string name would
19:49:27  * fallsemojoined
19:50:56  * shuaibquit (Ping timeout: 256 seconds)
19:53:43  * shuaibjoined
19:53:48  * ins0mniajoined
19:55:57  <defunctzombie>substack: I think I want to re-write the smart multi patch using the new file event
19:56:06  <defunctzombie>substack: methinks that might be cleaner actually
19:56:16  <defunctzombie>to capture what the bundle includes
19:56:22  * dguttmanjoined
19:59:14  * fallsemoquit (Quit: Leaving.)
20:04:33  * shuaibquit (Remote host closed the connection)
20:05:12  * shuaibjoined
20:05:21  * fallsemojoined
20:11:22  * Raynosjoined
20:12:31  * shuaibquit (Ping timeout: 264 seconds)
20:13:19  * pikpikjoined
20:13:38  * sveisveijoined
20:13:42  * gozala_joined
20:14:44  * shuaibjoined
20:17:06  * dguttmanquit (Read error: Connection reset by peer)
20:18:19  * notalexgordon_joined
20:19:56  * dguttmanjoined
20:20:15  * ryanseddonjoined
20:22:54  * spionjoined
20:25:07  * niftylettucejoined
20:25:46  * dguttman_joined
20:27:31  * dguttmanquit (Ping timeout: 264 seconds)
20:27:31  * dguttman_changed nick to dguttman
20:30:00  * gozala_quit
20:30:15  * gozala_joined
20:31:08  * AvianFlujoined
20:31:19  * LOUDBOTjoined
20:32:15  * gozala_changed nick to gozala
20:32:19  * gozalaquit (Client Quit)
20:32:53  * shuaibquit (Ping timeout: 255 seconds)
20:34:07  * Benviequit (Quit: Leaving)
20:35:13  * shuaibjoined
20:36:03  * st_lukejoined
20:53:14  <Domenic_>st_luke: hahahahahahahahhaa
20:53:23  <Domenic_>https://github.com/isaacs/npm/issues/3296#issuecomment-15613627
20:59:28  * fallsemoquit (Quit: Leaving.)
21:00:48  * mikolalysenkoquit (Ping timeout: 264 seconds)
21:01:22  <st_luke>Domenic_: i had a feeling it was gonna be something kinda crazy
21:01:44  <st_luke>whenever someone leaves out a critical bit of info it's a silent alarm that it's probably the info you need
21:02:11  * jcrugzz_joined
21:02:28  <st_luke>Domenic_: https://github.com/isaacs/npm/issues/2257
21:02:50  <Domenic_>st_luke: yeah i loved that
21:02:54  * jcrugzzquit (Ping timeout: 256 seconds)
21:03:48  * jcrugzz_changed nick to jcrugzz
21:13:43  * shuaibquit (Ping timeout: 264 seconds)
21:27:51  <st_luke>🐢.com is available
21:27:53  <st_luke>emoji turtle
21:29:35  * ins0mniaquit (Ping timeout: 255 seconds)
21:31:14  <Domenic_>yeah but it'll come out as some sad punycode
21:31:26  <Domenic_>xn--qo8h
21:31:52  <yorick>it doesn't even render for me
21:33:46  * ITprojoined
21:36:10  <st_luke>Domenic_: yeah but in 10 years when everyone supports it, it'll be worth it
21:40:19  <Domenic_>st_luke: i don't think it's a support issue, it's a security issue. I.e. phishing using ASCII-like Unicode chars.
21:42:46  <defunctzombie>st_luke: get it!
21:46:28  <Raynos>dominictarr: http://dom.spec.whatwg.org/#futures
21:46:34  <Raynos>Or anyone really
21:46:39  <Raynos>how does one go about telling a standards body
21:46:44  <Raynos>that a promise is a bad abstraction
21:47:03  * ITproquit (Ping timeout: 260 seconds)
21:48:56  <defunctzombie>Raynos: by not using it
21:49:21  <Raynos>defunctzombie: but right now there's a good oppurtunity to kill it and remove it or replace it with a better abstraction
21:49:29  <Domenic_>Raynos: you still don't understand the difference between one-and-done versus streams of events?!?
21:49:59  <Raynos>Domenic_: I think there are two asynchronous abstractions. a time series of values and a value over time
21:50:09  <Raynos>I believe a promise is a shitty in between version of those abstractions
21:50:13  <Domenic_>Raynos: what about the asynchronous function call.
21:50:22  <Raynos>i.e. you can trivially build a promise out of either of those
21:50:25  <Raynos>fuck asynchronous function calls
21:50:29  <Domenic_>O____o
21:50:52  <Domenic_>well you're definitely in the minority there.
21:51:01  <Raynos>i use them all of the place
21:51:02  <Domenic_>so good luck?
21:51:07  <Domenic_>ok...
21:51:18  <Raynos>we already have asynchronous function calls
21:51:21  <Raynos>that abstraction is solved
21:51:25  <Domenic_>that is not true
21:51:30  <Domenic_>gah typical node hubris
21:51:34  <Domenic_>"we solved it one way, that way is best!"
21:51:41  <Domenic_>"it is impossible to improve on Node's version!"
21:51:42  <Raynos>no
21:51:45  <Raynos>thats not what I said
21:51:58  <Domenic_>asynchronous function calls <-> promises
21:51:58  <defunctzombie>Raynos: Domenic_ both of you guys are wrong btw
21:52:10  <defunctzombie>you both are putting into the syntax layer what should not be a programmer program
21:52:12  <defunctzombie>*problem
21:52:13  <Raynos>Domenic_: I want neither cb's or promises
21:52:13  <st_luke>i feel left out can i be wrong
21:52:23  <defunctzombie>I should be able to write fs.read('foo');
21:52:34  <Domenic_>defunctzombie: yes indeed! promises give you that!
21:52:35  <defunctzombie>and have that code be run with whatever IO model
21:52:39  <defunctzombie>Domenic_: no, they don't
21:52:40  <Domenic_>when combined with generators
21:52:46  <defunctzombie>Domenic_: they give you some syntax bullshit
21:52:48  <Domenic_>yield fs.read('foo')
21:52:49  <defunctzombie>that I don't want
21:52:52  <defunctzombie>no
21:52:55  <defunctzombie>wrong
21:52:57  <Domenic_>right
21:52:58  <defunctzombie>fs.read('foo');
21:53:00  <defunctzombie>that is it
21:53:04  <Domenic_>blocking!?
21:53:05  <defunctzombie>no fucking yield nothing
21:53:14  <defunctzombie>wtf are you talking about?
21:53:22  <Raynos>defunctzombie: what does fs.read("foo") return?
21:53:32  <defunctzombie>whatever the read returns
21:53:33  <defunctzombie>the contents
21:53:35  <defunctzombie>it doesn't matter
21:53:35  <Raynos>I KNOW
21:53:41  <Raynos>I should reply to the futures thread
21:53:42  <Raynos>and be like
21:53:46  <defunctzombie>the point is the environment can hoist the IO
21:53:51  <Domenic_>defunctzombie: ok. so the I/O blocks until it can return?
21:53:53  <Raynos>that will kill the conversation immediately
21:53:55  <defunctzombie>the developer does not give a shit about this crap
21:54:03  <defunctzombie>I just want to read a fucking file
21:54:06  <defunctzombie>and have that work
21:54:15  <defunctzombie>the underlying runtime needs to make that fast
21:54:17  <defunctzombie>and awesome
21:54:21  <Domenic_>defunctzombie: you are avoiding the question
21:54:23  <defunctzombie>?
21:54:40  <defunctzombie>what question?
21:54:48  <Domenic_>does var x = fs.read('file'); console.log(x); block until fs.read does its synchronous I/O?
21:55:14  <defunctzombie>ya'll are avoiding the reality that all your syntax shit is a stopgap solution cause you don't have a better runtime underneath
21:55:22  <defunctzombie>Domenic_: what does it mean to "block"
21:55:32  <Domenic_>defunctzombie: no code can execute
21:55:37  <Domenic_>you know what it means
21:55:40  <defunctzombie>Domenic_: code will execute
21:55:43  <defunctzombie>no, I don't know what you mean
21:55:52  <Domenic_>why is fs.read different from fs.readFileSync
21:55:59  <defunctzombie>sigh
21:56:04  <defunctzombie>ok... stop thinking about node
21:56:07  <defunctzombie>or anything you know
21:56:13  <Raynos>defunctzombie: the question is about concurrency
21:56:13  <Domenic_>can i think about operating systems
21:56:21  <defunctzombie>no
21:56:22  <Raynos>if I write a program
21:56:31  <defunctzombie>Domenic_: you are a developer
21:56:33  <Raynos>is that program running a block of code concurrently
21:56:47  <defunctzombie>you have to read a file, do something else read another file and then done
21:56:55  <defunctzombie>you are gonna code up just like that
21:56:57  <st_luke>yall
21:56:57  <defunctzombie>no fucking callbacks
21:56:59  <defunctzombie>nothing
21:57:06  <Domenic_>sigh
21:57:11  <defunctzombie>and the runtime will make it use your "non blocking" magic
21:57:23  <defunctzombie>or whatever you think the latest hotness in concurrency is
21:57:42  <defunctzombie>the point is that you can separate intent from this notion of "blocking" you have in your mind
21:57:55  <defunctzombie>other code will execute
21:58:03  <defunctzombie>in your program or whatever
21:58:06  <Domenic_>so this magically causes out-of-order execution: function f() { var x = fs.read('file'); console.log('x', x); } f(); console.log('y');
21:58:12  <Domenic_>this will log y, then x
21:58:25  <defunctzombie>no
21:58:27  <defunctzombie>it won't
21:58:29  <Domenic_>ok
21:58:42  <Domenic_>so it will spin the CPU until fs.read returns
21:58:51  <defunctzombie>because your notions around blocking revolve around all code execution
21:59:01  <Domenic_>you are specifically saying i can't do anything until fs.read returns is what i hear
21:59:07  <defunctzombie>when they should revolve around IO hoisted tasks
21:59:08  <defunctzombie>no
21:59:33  <Domenic_>explain
21:59:39  <defunctzombie>in your two line example nothing happens until fs read is done
21:59:45  <Domenic_>ok so the cpu does spin
21:59:46  <Domenic_>got it
21:59:49  <defunctzombie>sigh
22:00:18  <Domenic_>remember spinning = executing noop, not 100% CPU usage
22:00:25  <defunctzombie>sure
22:00:31  <defunctzombie>Domenic_: look at lua co-routines
22:00:39  <defunctzombie>I will try to write up in better words what I mean
22:00:42  <defunctzombie>with some pseudocode
22:00:53  <defunctzombie>but basically, it is entirely possible to write code that doesn't look like shit
22:01:08  <defunctzombie>but still benefits from these notions of "async io" everyone seems to love
22:01:10  <st_luke>does lua do ruby style blocks
22:01:19  <st_luke>end end end end end end end end end end end end
22:01:26  <st_luke>or ennnnnnnnnnnnnnnnnnnnnnnd
22:01:28  <FireFly>Not really
22:01:30  <Domenic_>from this page they seem to just be generators http://lua-users.org/wiki/CoroutinesTutorial
22:01:56  <Domenic_>maybe they are deep coros instead of shallow coros like generators
22:02:21  <Raynos>defunctzombie: do you expect anything about concurrency or order?
22:02:25  <defunctzombie>Domenic_: you can build interesting abstractions on top of it for IO bound routines is my thinking
22:02:49  <defunctzombie>Domenic_: I have had some ideas about it but haven't put anything substantial into writing
22:02:56  <Raynos>defunctzombie: agreed. It's called IO monads
22:03:11  <defunctzombie>Domenic_: basically, you have IO concerns
22:03:18  <Domenic_>my understanding is that this just leads you down the road of promises
22:03:25  <defunctzombie>Domenic_: it doesn't
22:03:31  <defunctzombie>promises are syntax
22:03:35  <Domenic_>uh they aren't
22:03:36  <defunctzombie>and you have to buy into them
22:03:38  <Domenic_>they're libraries
22:03:43  <defunctzombie>same shit
22:03:49  <Domenic_>the syntax is using coros to make it look like sync code
22:03:50  <defunctzombie>these approaches you don't buy into at every level
22:03:57  <defunctzombie>with promises everything needs to use it
22:04:01  <defunctzombie>and that is stupid
22:04:03  <Domenic_>only the i/o operations use promises
22:04:28  <defunctzombie>this avoids promises callbacks whatever to make your code look the way you mean it without nonsense
22:04:31  <st_luke>is there a good coworking space in berlin?
22:04:45  <st_luke>does anyone know
22:04:49  <st_luke>with a dedicated desk
22:04:50  <Raynos>Domenic_: One of the problems with promises is that people start defining promise operations on promises of arrays
22:04:56  <Raynos>instead of list operations on streams
22:05:04  <Raynos>promises are fine if they are not abused to do everything
22:05:12  <Raynos>which is why I think they are the wrong abstraction
22:05:13  <Domenic_>Raynos: that is the correct abstraction for parallel, but yes, obviously for streams you need streams
22:05:17  <Domenic_>i am trying to get streams into the DOM too
22:05:19  <defunctzombie>Domenic_: promises require total buy in.. you are not gonna get that because no one can agree on what shit to use or interoperate it is too high level
22:05:23  <defunctzombie>Domenic_: functions are functions
22:05:26  <defunctzombie>that is why callbacks work
22:05:30  <Raynos>Its not the correct abstraction for parallel at all
22:05:31  <defunctzombie>it doesn't get any lower
22:05:50  <Domenic_>defunctzombie: we'll see. that'll be decided by the web dev community over the next few years.
22:06:12  <Domenic_>Raynos: why not. Q.all([getUser(), getCompany()]).spread((user, company) => { ... })
22:06:15  <defunctzombie>Domenic_: sounds like horseshit to me ;)
22:06:18  <Domenic_>you would have a stream of two elements?
22:06:26  <defunctzombie>Domenic_: I will write a gist on the io things I am talking about so it is clearer
22:06:26  <Raynos>wut
22:06:34  <Domenic_>defunctzombie: looking forward to it
22:06:37  <defunctzombie>Domenic_: irc isn't great at explaining what I am talking about
22:06:42  <Domenic_>Raynos: I want to perform two HTTP requests in parallel.
22:06:59  <Domenic_>That is what I mean when I say "arrays of promises is the correct abstraction for parallel"
22:07:04  <Raynos>what is spread?
22:07:14  <substack>http://substack.net/images/screenshots/exterminate_comic_sans.png
22:07:31  <Domenic_>Ah. In ES6 syntax: Q.all([a, b]).then(([a, b]) => { ... })
22:07:44  <Domenic_>vs. ES6: Q.all([a, b]).spread((a, b) => { ... })
22:07:49  <Domenic_>it's just sugar
22:08:39  <Raynos>Domenic_: https://gist.github.com/Raynos/d275669b81dce98b8eda
22:08:57  <Raynos>in fact I actually think that's harmful
22:09:07  <Domenic_>Raynos: where's your error handling
22:09:16  <Raynos>Domenic_: out of scope
22:09:22  <Domenic_>lol
22:09:28  <Domenic_>so you lost error handling when moving to async
22:09:29  <Raynos>im not going to force upon you
22:09:29  <Domenic_>gj
22:09:33  <Raynos>a particular error handling flow
22:09:39  <Raynos>there is no loss of error handling
22:09:39  * ins0mniajoined
22:09:46  <Raynos>its just a 100% out of fucking scope and upto you
22:09:58  <Raynos>for all you care
22:10:05  <Raynos>user & company can either be a value or an error
22:10:06  <Domenic_>getUser() needs to be able to return an error
22:10:07  <Raynos>you handle it
22:10:11  <Domenic_>wow so switch statements
22:10:12  <Raynos>it returns a value
22:10:12  <Domenic_>cool
22:10:13  <Raynos>any value
22:10:15  <Domenic_>and no bubbling
22:11:00  <Raynos>for my use-cases I havn't done much error handling
22:11:35  <Domenic_>let's get more positive. what should streams in the DOM look like
22:11:56  <Domenic_>Just binary data, or are object streams important too?
22:12:00  <Raynos>Domenic_: pull or push?
22:12:11  <Domenic_>Raynos: I'm asking you :). I still haven't absorbed the impact.
22:12:13  <Raynos>I like mine & dominictarr's idea about pull streams ( https://github.com/Raynos/recurse-stream/issues/3 )
22:12:21  <Domenic_>All I know is I loved Max's slides and want to get that working
22:12:30  <Domenic_>e.g. connecting XHRs to <video> tags by piping streams together.
22:12:46  <Domenic_>but e.g. the web worker example seems to rely on object streams not binary streams.
22:13:14  <Domenic_>Raynos: this is dense, hmm. What is the external API?
22:13:44  <Raynos>Domenic_: https://github.com/dominictarr/pull-stream
22:14:30  <Domenic_>Raynos: interesting. Need more examples.
22:14:39  <Raynos>yeah we need to build more stuff out
22:14:48  <Domenic_>this is object streams?
22:14:49  <Raynos>but its simply functions & cbs and higher order functions on top of callbacks
22:14:58  <Raynos>this is chunked object streams
22:15:07  <Domenic_>what does that mean
22:15:52  <Raynos>i.e. this pull stream
22:15:54  <Domenic_>why is there an extra wrapper in pull.Source, why not just pass function (end, cb).
22:15:55  <Raynos>you pull one chunk at a time
22:16:11  <Raynos>Domenic_: What do you mean?
22:16:23  <Raynos>because its a stream factory
22:16:37  <Raynos>and function (end, cb) { is a single stream }
22:16:57  <Domenic_>so you pass the pull.Source constructor a factory?
22:17:01  <Domenic_>what are the arguments to that factory?
22:17:04  <Raynos>its a function that returns a readable
22:17:15  <Raynos>well his pull.Source is bullshit abstraction
22:17:21  <Raynos>anyway this needs way more thought
22:17:25  <Domenic_>i think if you just named these functions it'd be cool :)
22:17:28  <Raynos>sec
22:17:41  <Domenic_>but tbh the creation API is much less interesting than the consumption API
22:17:45  <Domenic_>(same for promises)
22:17:52  <Domenic_>I see there's .pipe
22:17:54  <Raynos>Domenic_: https://gist.github.com/Raynos/e771cbd9d6b188972c74
22:18:03  <Raynos>the consumption api is dead trivial
22:18:11  <Raynos>https://gist.github.com/Raynos/e771cbd9d6b188972c74#file-0_recurse-js-L26
22:18:32  <Raynos>you just pipe shit all the days
22:18:41  <Domenic_>ok
22:18:53  <Raynos>it has https://gist.github.com/Raynos/e771cbd9d6b188972c74#file-duplex-js-L6 error propagation baked in
22:19:08  <Raynos>My value over time abstractions dont have error handling baked in
22:19:22  <Raynos>anyway I need to fix it up
22:19:25  <Raynos>ugh promises ;_;
22:19:27  <Domenic_>so the fundamental concepts I see are: source streams (pipe from); transform streams (pipe to and from); sink streams (pipe to). Souce and transform streams have .pipe. That's it?
22:19:44  <Domenic_>ugh instanceof
22:19:45  <Raynos>Domenic_: well not quite
22:19:48  <Raynos>https://gist.github.com/Raynos/e771cbd9d6b188972c74#file-0_recurse-js-L4
22:19:55  <Raynos>you have a source (Readable) and a destination (Reader)
22:20:06  <Raynos>a transform is just a higher order Readable -> Readable
22:20:16  <Domenic_>it shoudl be possible to use any valid javascript value as a value in the stream (including an instanceof Error)
22:20:17  <Raynos>like it should be!
22:20:32  <Raynos>Domenic_: yes
22:20:38  <Raynos>I'm going to change the API to make it easier
22:20:43  <Domenic_>i think the functional stuff is a bit hard to grok, but probably elegant.
22:20:51  * timoxleyquit (Quit: Computer has gone to sleep.)
22:21:00  <Raynos>it is hard to grok
22:21:02  <Domenic_>but how do transforms work
22:21:09  <Domenic_>if the only public API of readable is .pipe.
22:21:16  <Raynos>nah
22:21:18  <Raynos>readable is a function
22:21:26  <Raynos>pipeable(readable) returns a function with a .pipe method
22:21:32  <Raynos>.pipe is just chaining sugar
22:21:38  <Raynos>its straight up LISP style function calls
22:21:43  <Domenic_>eeek
22:21:48  <Domenic_>i'm scared of all the functional :P
22:22:09  <Raynos>but you raised a good point
22:22:14  <substack>Raynos: false. http://substack.net/images/screenshots/exterminate_comic_sans.png is the future
22:22:15  <Raynos>I need to think about error handling in signals ;_;
22:22:39  <Domenic_>but all the functional can be wrapped since it's just construction-time I guess.
22:22:51  <FireFly>*everyone* needs some comic sans in their terminal
22:22:56  <FireFly>clearly
22:23:09  * st_lukequit (Remote host closed the connection)
22:24:23  <Raynos>Domenic_: the problem I have with promises is that they are too limiting :(
22:24:41  <Raynos>but I need to think harder about it
22:24:43  <Domenic_>Raynos: the right tool for the right job!
22:24:50  <Domenic_>They are definitely not a complete solution
22:24:52  <Domenic_>You need streams
22:24:54  <Raynos>but its a massive complex abstraction
22:24:54  <Domenic_>in some form
22:24:58  <Domenic_>it really isn't
22:24:59  <Raynos>with complex reasons
22:25:04  <Raynos>see pull-streams are trivial
22:25:06  <Raynos>\they are just functions
22:25:07  <Raynos>thats it
22:25:09  <Raynos>no new abstraction
22:25:11  <Raynos>no fucking nothing
22:25:14  <Raynos>just functions & callbacks
22:25:15  <Domenic_>see, that's not actually simpler
22:25:28  <Raynos>less abstractions counts is a massive win
22:25:30  <Domenic_>the number of primitives involved is not directly proportional to the complexity
22:25:37  <Raynos>I really need to think of a file system api as a Signal
22:25:48  <Raynos>Domenic_: Scheme is simple and beautiful :3
22:26:22  <Domenic_>Raynos: yes, but... well, I don't know what the but is. But we both know there is one :P
22:26:45  <Domenic_>promises are just the same abstraction as function calls, but async.
22:26:56  <Domenic_>they can return a value, or throw an exception.
22:27:05  <Domenic_>that's the only important part
22:27:16  <Domenic_>the rest of it is just details.
22:28:07  * thl0quit (Remote host closed the connection)
22:28:38  <Domenic_>Raynos: I'm still curious about lazy promises
22:28:52  <Raynos>Domenic_: a lazy promise is an IO moand
22:28:53  <Raynos>monad*
22:28:58  <Domenic_>welp
22:29:02  <Raynos>:D
22:29:03  <Domenic_>knew I should have learned Haskell.
22:29:06  <Raynos>Sorry
22:29:09  <Raynos>that was a bad joke
22:29:13  <Domenic_>probably true?
22:29:17  <Raynos>yeah it is true
22:29:57  <Raynos>I dont actually think lazy promises are that good
22:30:03  <Raynos>I just think having a static promise graph is good
22:30:07  <Raynos>i.e. don't create dynamic inputs
22:30:11  <Domenic_>they might solve the unhandled rejection problem
22:30:17  <Raynos>dont create dynamic promises
22:30:32  <Raynos>force all promises to either A) be statically defined at startup
22:30:35  <Raynos>like `require`
22:30:41  <Raynos>or B) be a transformation of a static promise
22:30:50  <FireFly>Raynos: hm, those pull-streams are nice food for thought..
22:30:51  <Raynos>that also solves the unhandled rejection problem
22:31:58  <Domenic_>Raynos: that's like saying "don't do dynamic function calls."
22:32:04  <Raynos>Domenic_: no it's not
22:32:21  <Raynos>Domenic_: http://raynos.graphics-server.jit.su/full/todo.js
22:32:26  <Raynos>todomvc with only static inputs
22:32:33  <Raynos>no dynamically created inputs (promises whatever)
22:32:40  <Raynos>actually thats a lie
22:32:44  <Raynos>I touch localStorage
22:32:44  <Raynos>fuck
22:32:49  <Raynos>ok I'm full of shit :D
22:33:21  <Domenic_>i guess in a language without if statements that would work?
22:33:25  <Domenic_>like lisp
22:33:26  <Raynos>no
22:33:33  <Raynos>i plan to do this in JS
22:33:41  <Raynos>A static signal graph
22:33:44  <Domenic_>well by limiting yourself to a subset of js that is mostly function calls
22:33:54  <Raynos>there's no reason I cant use ifs :P
22:34:11  <Domenic_>that would dynamically determine your code path
22:34:17  <Domenic_>which breaks the rules? if i am understanding them?
22:34:32  <Raynos>No
22:34:38  <Raynos>I didnt explain the rules properly
22:35:09  <Raynos>the rules are you application is a graph that connects inputs ( creation of promises that represent IO) to outputs ( sinks where shit goes to have side effects )
22:35:20  <Raynos>you a have finite set of input functions that create inputs & outputs
22:35:24  <Raynos>everything else in between
22:35:38  <Raynos>is a dynamic graph that connects the list of inputs to the list of outputs
22:35:53  <Raynos>the shape of the graph itself can change at run time. it's just that the list of inputs & outputs is static & finite
22:36:07  <Raynos>Which is effectively arrowized FRP :D
22:36:10  <Domenic_>so like, the list of inputs could be "the functions in fs"?
22:36:39  <Raynos>Domenic_: with some limitations
22:36:51  <Raynos>it can be a list of inputs like the functions in fs that return promises
22:36:57  <Domenic_>right
22:37:03  <Raynos>with the understanding that a promise that contains a promise is a not a thing your allowed to do
22:37:08  <Domenic_>yes!
22:37:18  <Domenic_>that is actually something that upsets me about DOM Future
22:37:21  <Domenic_>is that you can do that
22:37:21  <Raynos>im sure Q has promises of promises
22:37:25  <Domenic_>Nope
22:37:28  <Domenic_>We explicitly disallow
22:37:31  <Raynos>I dont believe it
22:37:38  <Raynos>how do you do lstree with promises ?
22:37:48  <Domenic_>I don't know what lstree is :-S
22:37:58  <Raynos>recursive directory listing
22:38:07  <Raynos>a function that takes a path and returns a list of all files in it recursively
22:38:26  <Domenic_>the top promise is never fulfilled until all the children are
22:38:35  <Raynos>Domenic_: You need to get the DOM to ban Future's of Futures
22:38:40  <Raynos>that has to die, right fucking now.
22:38:54  <Raynos>i.e. the resolved value of a promise
22:38:58  <Raynos>is not allowed to be another promise
22:39:08  <Domenic_>Raynos: I think if you wrote to www-dom that might actually have the right impact. A nice well-reasoned email from an outsider who seems to know his shit would be great.
22:39:13  <Raynos>promise.then(function (otherPromise) { return otherPromise.then(...) })
22:39:26  <Raynos>I did email the thread :P
22:39:31  <Domenic_>yeah i saw :P
22:39:35  <Raynos>I asked them whether its lazy :D
22:39:48  <Raynos>I was about to say "this sounds like an IO monad"
22:39:54  <Raynos>but then I thought that would be trolling
22:40:30  <Domenic_>but yes `var p = q.then(() => r)`: `p` is not settled until `r` is.
22:40:32  <Raynos>Domenic_: you should hangout in SF and talk to mr Elm
22:40:58  <Raynos>Domenic_: what's the simplist promise thing
22:41:02  <Domenic_>Raynos: I'm visiting for HTML5DevConf this weekend!
22:41:07  <Raynos>nice
22:41:11  <Domenic_>er, next week rather
22:41:15  <Raynos>if you need a place to crash let me know
22:41:23  <Domenic_>should be cool, company's paying for hotel :)
22:41:24  <Domenic_>but thanks
22:41:33  <Raynos>so
22:41:41  <Raynos>promise.then(function (value) { ... }) is the syntax right?
22:41:48  <Domenic_>yeah
22:41:50  <substack>Domenic_: visit oakland!
22:41:57  <Raynos>Domenic_: can value be a promise itself ?
22:42:01  <Domenic_>first callback is fulfillment handler, second callback is rejection
22:42:11  <Domenic_>Raynos: no, it should be impossible to construct a promise whose value is a promise
22:42:12  * shamaquit (Remote host closed the connection)
22:42:24  <substack>there's js hack nights at sudoroom every monday
22:42:25  <Domenic_>the return rule prohibits it if you're given an already-well-behaved promise
22:42:45  <Raynos>can you return a promise in then
22:42:46  <Domenic_>And if the library doesn't allow you to create promises-for-promises, then you're golden
22:42:49  <Raynos>or can you only return values ?
22:43:08  <Domenic_>you can, but that coelesces into the returned promise's fulfillment/rejection
22:43:20  <Raynos>i dont know whether I like returning promises instead of values
22:43:37  <Domenic_>it's a nice shortcut that also conveniently prevents you from ever getting a promise-for-promise
22:44:07  <Raynos>but it allows you to do an async operation inside then
22:44:20  <Domenic_>yeah which is super-useful
22:44:31  <Raynos>but then your dynamically creating new asynchronous inputs
22:44:33  <Raynos>at run-time
22:44:37  <Domenic_>ah, i see.
22:44:50  <Domenic_>but you're using existing library functions?
22:45:04  <Domenic_>like .then(() => promisedFs.readFile(...))
22:45:09  <Domenic_>gtg soon :-/
22:45:12  <Raynos>Nope
22:45:21  <Raynos>ugh
22:45:25  <Raynos>I need to think about this more
22:45:30  <Domenic_>:)
22:45:30  <Raynos>Fuck ;_;
22:45:33  <Domenic_>to be continued!
22:45:36  <Raynos>I talked to some haskell guys last night
22:45:44  <defunctzombie>Domenic_: Raynos: https://gist.github.com/shtylman/5267456
22:45:46  <Raynos>I feel my vocab is permanently corrupted
22:46:04  <substack>Raynos: those haskell kids are TROUBLEMAKERS
22:46:21  * Domenic_quit (Remote host closed the connection)
22:46:25  <substack>they will get you to start worrying about unimportant things
22:47:36  <Raynos>defunctzombie: two problems
22:47:44  <Raynos>you create an IO "container"
22:47:57  <Raynos>now how do you share messages or state between two IO "container"s ?
22:48:21  <Raynos>substack: LIKE WHY IS MY CALLBACK NOT A REAL IO MONAD
22:48:22  <defunctzombie>Raynos: io containers are not threads
22:48:31  <defunctzombie>you share the same vars or anything
22:48:42  <Raynos>defunctzombie: what are the semantics for reading a variable ?
22:49:03  <defunctzombie>anyhow, I gotta run. can chat about it later
22:49:50  <defunctzombie>it is all doable :)
22:50:28  * defunctzombiechanged nick to defunctzombie_zz
22:50:47  * timoxleyjoined
23:00:40  * thatguydanjoined
23:00:55  <substack>LOUDBOT: search endofunctors
23:01:10  <substack>Raynos: if you do enough haskell you will start sounding like that
23:01:25  <Raynos>:D
23:01:47  <substack>category theory is not very useful
23:01:51  <Raynos>agreed
23:01:58  * marcello3dquit (Remote host closed the connection)
23:02:03  <substack>it's useful if you need to write mathematical proofs but not very useful if you want to write computer programs
23:02:11  <Raynos>when I say "IO monad" I mean lazy sideeffect
23:02:18  <Raynos>but thats a stupid thing
23:02:23  <Raynos>i should just say lazy side effect
23:02:27  <substack>yes!
23:02:35  <substack>then people will know what you mean
23:02:39  <substack>and you can communicate
23:02:39  <Raynos>:D
23:02:57  * tmcwquit (Remote host closed the connection)
23:03:14  <substack>another problem is that "IO monad" doesn't actually mean anything particularly
23:03:45  <substack>only in context-dependent circumstances does a phrase like that to begin to make sense
23:21:02  * CryptoQuick_joined
23:21:34  * CryptoQuickquit (Ping timeout: 240 seconds)
23:21:35  * CryptoQuick_changed nick to CryptoQuick
23:26:41  * spionquit (Ping timeout: 246 seconds)
23:27:41  * spionjoined
23:31:18  * mikealquit (Quit: Leaving.)
23:38:31  * thl0joined
23:38:50  <isaacs>substack: does exterminate work on os x?
23:38:54  <isaacs>substack: er, should it?
23:39:36  * jxsonjoined
23:43:08  <isaacs>substack: it starts Google Chrome.app, but i don't see a thing...
23:43:15  * thl0quit (Ping timeout: 260 seconds)
23:43:28  <isaacs>$ exterminate out/doc/index.html
23:43:28  <isaacs>net.js:50
23:43:28  <isaacs> throw new TypeError('Unsupported fd type: ' + type);
23:43:28  <isaacs> ^
23:43:28  <isaacs>TypeError: Unsupported fd type: TTY
23:45:48  * thl0joined
23:46:34  * thl0quit (Remote host closed the connection)
23:59:44  * blakmatrix1quit (Quit: Leaving.)