00:00:00
| * ircretary | quit (Remote host closed the connection) |
00:00:08
| * ircretary | joined |
00:04:50
| * evbogue | quit |
00:09:34
| * mikeal | joined |
00:09:48
| * mikeal | quit (Client Quit) |
00:12:19
| * nk109 | quit (Quit: Computer has gone to sleep.) |
00:13:34
| * AvianFlu | quit (Remote host closed the connection) |
00:21:41
| * mikeal | joined |
00:33:46
| <st_luke> | http://teespring.com/ceo-of-a-website |
00:47:51
| * thl0 | joined |
00:52:05
| * mikeal | quit (Quit: Leaving.) |
01:01:38
| * spion | quit (Ping timeout: 246 seconds) |
01:14:47
| * kenperkins | quit (Read error: Connection reset by peer) |
01:15:33
| * kenperkins | joined |
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
| * shama | quit (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
| * blakmatrix1 | joined |
01:41:30
| * robertjd_ | quit |
01:50:35
| * crank | quit (Ping timeout: 255 seconds) |
01:53:20
| * ins0mnia | quit (Ping timeout: 272 seconds) |
01:55:39
| * crank | joined |
01:57:37
| <substack> | defunctzombie: https://github.com/shtylman/node-browser-resolve/pull/14 |
01:58:35
| * dominictarr | joined |
01:58:59
| * dguttman | quit (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_luke | quit (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
| * defunctzombie | personally 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
| * thl0 | quit (Remote host closed the connection) |
02:19:11
| <defunctzombie> | substack: v0.1.0 |
02:22:24
| * tilgovi | quit (Remote host closed the connection) |
02:24:43
| * AvianFlu | joined |
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 [email protected] |
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
| * dguttman | joined |
02:43:56
| * dguttman | quit (Client Quit) |
02:44:39
| * dguttman | joined |
02:45:59
| * dguttman | quit (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
| * mbalho | just 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> | > [email protected] 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:24
| <LOUDBOT> | GROWTH HORMONES DO NOT WORK THAT WAY |
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
| * marcello3d | joined |
02:58:25
| * fallsemo | quit (Quit: Leaving.) |
03:03:29
| * defunctzombie | quit (Ping timeout: 255 seconds) |
03:04:32
| * defunctzombie | joined |
03:15:17
| * Corren | joined |
03:15:41
| * mikeal | joined |
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
| * kenperkins | quit (Ping timeout: 252 seconds) |
03:17:21
| * Corren | changed nick to kenperkins |
03:17:22
| <defunctzombie> | I like engine.io for some reason |
03:17:23
| * dominictarr | quit (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
| * shuaib | quit (Quit: Computer has gone to sleep.) |
04:15:30
| * timoxley | quit (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
| * jcrugzz | quit (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_luke | joined |
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
| * mmckegg | part |
04:53:03
| * Domenic_ | quit (Ping timeout: 252 seconds) |
04:57:55
| * marcello3d | quit (Remote host closed the connection) |
04:59:47
| <mbalho> | substack: nice! |
05:29:19
| * mikeal | quit (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
| * mikeal | joined |
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
| * wolfeidau | quit (Remote host closed the connection) |
06:11:32
| * kenperkins | quit (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
| * defunctzombie | changed nick to defunctzombie_zz |
06:48:05
| * st_luke | quit (Remote host closed the connection) |
07:39:55
| * dominictarr | joined |
07:42:07
| <juliangruber> | dominictarr: I hacked on that level-store index thing |
07:42:31
| <dominictarr> | aha I saw |
07:45:16
| * dominictarr | quit (Quit: dominictarr) |
08:02:28
| * calvinfo_ | quit (Quit: Leaving) |
08:08:00
| * sorensen | quit (Ping timeout: 264 seconds) |
08:08:26
| * sorensen | joined |
08:10:14
| * calvinfo | joined |
08:12:20
| * calvinfo | quit (Client Quit) |
08:18:59
| * calvinfo | joined |
08:19:24
| * calvinfo_ | joined |
08:19:24
| * calvinfo_ | quit (Client Quit) |
08:21:31
| * calvinfo | quit (Client Quit) |
08:27:25
| * calvinfo | joined |
08:42:18
| * thatguydan | joined |
09:53:15
| * jez0990 | joined |
10:15:57
| * shuaib | joined |
10:37:44
| * ehd | quit (Ping timeout: 246 seconds) |
10:39:50
| * sveisvei | quit (Ping timeout: 246 seconds) |
10:40:11
| * gozala | quit (Ping timeout: 246 seconds) |
10:40:32
| * owenb | quit (Ping timeout: 246 seconds) |
10:48:17
| * thl0 | joined |
10:52:35
| <substack> | https://github.com/substack/exterminate#example |
11:04:07
| * wolfeidau | joined |
11:14:24
| * spion | joined |
11:23:44
| * mint_xian | quit (Ping timeout: 260 seconds) |
11:23:45
| * isaacs | quit (Ping timeout: 255 seconds) |
11:23:45
| * jden|zz_ | quit (Ping timeout: 260 seconds) |
11:23:46
| * rannmann | quit (Ping timeout: 260 seconds) |
11:23:46
| * chilts | quit (Ping timeout: 255 seconds) |
11:23:47
| * hij1nx | quit (Ping timeout: 255 seconds) |
11:23:47
| * LOUDBOT | quit (Ping timeout: 255 seconds) |
11:23:47
| * rook2paw1 | quit (Ping timeout: 255 seconds) |
11:23:47
| * py1hon | quit (Ping timeout: 255 seconds) |
11:23:47
| * jesusabdullah | quit (Ping timeout: 255 seconds) |
11:23:48
| * rannmann | joined |
11:23:48
| * rannmann | quit (Changing host) |
11:23:48
| * rannmann | joined |
11:23:50
| * isaacs_ | joined |
11:23:51
| * py1hon_ | joined |
11:23:51
| * jesusabdullah | joined |
11:23:51
| * rook2pawn | joined |
11:23:53
| * hij1nx | joined |
11:24:01
| * isaacs_ | changed nick to Guest93631 |
11:24:21
| * mintxian | joined |
11:24:21
| * mintxian | changed nick to mint_xian |
11:24:21
| * chilts | joined |
11:24:33
| * jden|zz | joined |
11:28:32
| * cubert | quit (*.net *.split) |
11:28:32
| * mbalho | quit (*.net *.split) |
11:28:32
| * rowbit | quit (*.net *.split) |
11:31:37
| * cubert | joined |
11:31:37
| * mbalho | joined |
11:31:37
| * rowbit | joined |
11:36:12
| <juliangruber> | substack: is your vim running correctly in exterminate? |
11:38:39
| * calvinfo | quit (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
| * ralphthe1inja | quit (Quit: leaving) |
11:55:00
| * shuaib | quit (Ping timeout: 256 seconds) |
11:57:32
| * shuaib | joined |
12:09:56
| * ins0mnia | joined |
12:16:31
| * thl0 | quit (Remote host closed the connection) |
12:37:58
| * ehd | joined |
12:38:47
| * gozala | joined |
12:39:16
| * owenb | joined |
12:39:23
| * sveisvei | joined |
12:52:05
| * evbogue | joined |
13:05:35
| * dominictarr | joined |
13:06:36
| * gwenbell | joined |
13:11:10
| * fallsemo | joined |
13:13:17
| * AvianFlu | quit (Remote host closed the connection) |
13:14:18
| * AvianFlu | joined |
13:30:03
| * evbogue | quit |
13:30:07
| * marcello3d | joined |
13:32:12
| <dominictarr> | rvagg: hey, are you in dublin yet? |
13:32:16
| * timoxley | joined |
13:33:57
| * jibay | joined |
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
| * gwenbell | quit (Quit: Computer has gone to sleep.) |
13:41:49
| * timoxley | quit (Quit: Computer has gone to sleep.) |
13:49:55
| * Domenic_ | joined |
13:53:26
| * thl0 | joined |
13:55:11
| * timoxley | joined |
14:11:15
| * timoxley | quit (Quit: Computer has gone to sleep.) |
14:12:07
| * kenperkins | joined |
14:12:36
| * kenperkins | quit (Max SendQ exceeded) |
14:19:34
| * kenperkins | joined |
14:31:35
| * mikeal | quit (Quit: Leaving.) |
14:32:12
| * crank | quit (Ping timeout: 252 seconds) |
14:32:33
| * Domenic_ | quit (Remote host closed the connection) |
14:37:27
| * crank | joined |
14:41:09
| * mikolalysenko | joined |
14:42:47
| * Domenic_ | joined |
14:47:09
| * dguttman | joined |
14:47:53
| * timoxley | joined |
14:54:40
| * defunctzombie_zz | changed nick to defunctzombie |
15:04:05
| * mikolalysenko | quit (Read error: Connection reset by peer) |
15:04:24
| * shuaib | quit (Ping timeout: 264 seconds) |
15:07:38
| * shuaib | joined |
15:12:15
| * shuaib | quit (Ping timeout: 260 seconds) |
15:14:13
| * shuaib | joined |
15:16:13
| * mikeal | joined |
15:20:25
| * mikeal | quit (Client Quit) |
15:39:48
| * evbogue | joined |
15:47:35
| * mikeal | joined |
15:48:27
| * evbogue | quit |
15:49:55
| * mikeal | quit (Client Quit) |
15:53:02
| * tmcw | joined |
15:54:52
| * thatguydan | quit (Quit: thatguydan) |
16:04:37
| * jcrugzz | joined |
16:06:20
| * thl0 | quit (Remote host closed the connection) |
16:11:38
| * tilgovi | joined |
16:14:58
| * evbogue | joined |
16:23:07
| * mikolalysenko | joined |
16:23:15
| * Guest93631 | changed nick to isaacs |
16:27:11
| * mikeal | joined |
16:33:40
| * tanepiper | quit (Ping timeout: 246 seconds) |
16:36:44
| * thl0 | joined |
16:36:45
| * tanepiper | joined |
16:36:59
| * thl0 | quit (Read error: Connection reset by peer) |
16:37:20
| * thl0 | joined |
16:45:25
| * thl0 | quit (Ping timeout: 248 seconds) |
16:47:31
| * calvinfo | joined |
16:53:54
| * fallsemo | quit (Quit: Leaving.) |
17:00:56
| * gwenbell | joined |
17:04:30
| * fallsemo | joined |
17:07:00
| * thl0 | joined |
17:09:57
| * CryptoQuick | joined |
17:10:07
| * tilgovi | quit (Remote host closed the connection) |
17:18:35
| * shuaib | quit (Ping timeout: 240 seconds) |
17:20:11
| * shuaib | joined |
17:23:03
| * gozala | quit (Ping timeout: 245 seconds) |
17:25:10
| * pikpik | quit (Ping timeout: 258 seconds) |
17:25:24
| * owenb | quit (Ping timeout: 264 seconds) |
17:26:15
| <dominictarr> | rvagg: you there? |
17:33:29
| * dominictarr | quit (Quit: dominictarr) |
17:34:38
| * jcrugzz | quit (Ping timeout: 256 seconds) |
17:36:47
| * dominictarr | joined |
17:36:49
| * gwenbell | quit (Quit: Computer has gone to sleep.) |
17:37:24
| * sveisvei | quit (Ping timeout: 264 seconds) |
17:38:15
| * jcrugzz | joined |
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
| * mikolalysenko | quit (Ping timeout: 240 seconds) |
17:49:56
| * pikpik | joined |
17:50:38
| * sveisvei | joined |
17:51:57
| * owenb | joined |
17:52:21
| * Domenic_ | changed nick to Domenic_away |
17:56:14
| * dominictarr | quit (Quit: dominictarr) |
17:57:07
| * Domenic_away | quit (Remote host closed the connection) |
17:57:33
| * gozala_ | joined |
17:58:29
| * shuaib | quit (Ping timeout: 248 seconds) |
18:00:14
| * shuaib | joined |
18:01:15
| * mikolalysenko | joined |
18:13:05
| * sveisvei | quit (Ping timeout: 240 seconds) |
18:13:51
| * Raynos | quit (Ping timeout: 258 seconds) |
18:14:51
| * evbogue | quit |
18:16:07
| * Domenic_away | joined |
18:16:13
| * Domenic_away | changed nick to Domenic_ |
18:16:18
| * pikpik | quit (Ping timeout: 256 seconds) |
18:16:52
| * gozala_ | quit (Ping timeout: 256 seconds) |
18:17:35
| * owenb | quit (Ping timeout: 240 seconds) |
18:17:55
| * mikolalysenko | quit (Ping timeout: 264 seconds) |
18:20:22
| * notalexgordon_ | quit (Ping timeout: 258 seconds) |
18:20:50
| * shuaib | quit (Ping timeout: 256 seconds) |
18:21:43
| * shuaib | joined |
18:22:17
| * ryanseddon | quit (Ping timeout: 258 seconds) |
18:23:03
| * niftylettuce | quit (Ping timeout: 258 seconds) |
18:39:29
| * shuaib | quit (Ping timeout: 255 seconds) |
18:40:37
| * mikolalysenko | joined |
18:40:43
| * shuaib | joined |
18:43:15
| * dguttman | quit (Quit: dguttman) |
18:43:40
| * shama | joined |
18:44:13
| * Benvie | joined |
18:46:04
| * dguttman | joined |
18:51:05
| * dguttman | quit (Ping timeout: 240 seconds) |
18:51:14
| * spion | quit (Ping timeout: 246 seconds) |
18:52:06
| * Domenic_ | quit (Remote host closed the connection) |
18:55:11
| * dguttman | joined |
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
| * dguttman | quit (Read error: Connection reset by peer) |
19:05:20
| * fallsemo | quit (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
| * fallsemo | joined |
19:06:10
| <chrisdickinson> | but yes, better integer types |
19:07:13
| <chrisdickinson> | i suppose a parser api would be ideal |
19:07:13
| * fallsemo | quit (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
| * fallsemo | joined |
19:08:22
| * AvianFlu | quit (Remote host closed the connection) |
19:09:10
| <Domenic_> | macros? |
19:09:57
| * AvianFlu | joined |
19:10:05
| * owenb | joined |
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
| * dguttman | joined |
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
| * fallsemo | quit (Read error: No route to host) |
19:31:40
| * fallsemo | joined |
19:31:47
| * fallsemo | quit (Read error: No route to host) |
19:32:45
| * fallsemo | joined |
19:32:51
| * fallsemo | quit (Read error: No route to host) |
19:34:04
| * dguttman | quit (Read error: Connection reset by peer) |
19:34:22
| * fallsemo | joined |
19:35:13
| * AvianFlu | quit (Remote host closed the connection) |
19:38:24
| * yorick | joined |
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
| * fallsemo | quit (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
| * fallsemo | joined |
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
| * fallsemo | quit (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
| * dguttman | joined |
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
| * ins0mnia | quit (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
| * dguttman | quit (Ping timeout: 248 seconds) |
19:49:20
| <Benvie> | using npm, it would actually automatically version the symbols. Since if you import "[email protected]" in one module and "[email protected]" they could never accidentally overlap like a string name would |
19:49:27
| * fallsemo | joined |
19:50:56
| * shuaib | quit (Ping timeout: 256 seconds) |
19:53:43
| * shuaib | joined |
19:53:48
| * ins0mnia | joined |
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
| * dguttman | joined |
19:59:14
| * fallsemo | quit (Quit: Leaving.) |
20:04:33
| * shuaib | quit (Remote host closed the connection) |
20:05:12
| * shuaib | joined |
20:05:21
| * fallsemo | joined |
20:11:22
| * Raynos | joined |
20:12:31
| * shuaib | quit (Ping timeout: 264 seconds) |
20:13:19
| * pikpik | joined |
20:13:38
| * sveisvei | joined |
20:13:42
| * gozala_ | joined |
20:14:44
| * shuaib | joined |
20:17:06
| * dguttman | quit (Read error: Connection reset by peer) |
20:18:19
| * notalexgordon_ | joined |
20:19:56
| * dguttman | joined |
20:20:15
| * ryanseddon | joined |
20:22:54
| * spion | joined |
20:25:07
| * niftylettuce | joined |
20:25:46
| * dguttman_ | joined |
20:27:31
| * dguttman | quit (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
| * AvianFlu | joined |
20:31:19
| * LOUDBOT | joined |
20:32:15
| * gozala_ | changed nick to gozala |
20:32:19
| * gozala | quit (Client Quit) |
20:32:53
| * shuaib | quit (Ping timeout: 255 seconds) |
20:34:07
| * Benvie | quit (Quit: Leaving) |
20:35:13
| * shuaib | joined |
20:36:03
| * st_luke | joined |
20:53:14
| <Domenic_> | st_luke: hahahahahahahahhaa |
20:53:23
| <Domenic_> | https://github.com/isaacs/npm/issues/3296#issuecomment-15613627 |
20:59:28
| * fallsemo | quit (Quit: Leaving.) |
21:00:48
| * mikolalysenko | quit (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
| * jcrugzz | quit (Ping timeout: 256 seconds) |
21:03:48
| * jcrugzz_ | changed nick to jcrugzz |
21:13:43
| * shuaib | quit (Ping timeout: 264 seconds) |
21:27:51
| <st_luke> | 🐢.com is available |
21:27:53
| <st_luke> | emoji turtle |
21:29:35
| * ins0mnia | quit (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
| * ITpro | joined |
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
| * ITpro | quit (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:47
| <Raynos> | "YES FINALLY MONADS IN THE DOM" |
21:53:48
| <LOUDBOT> | DIGGING UP SCROLLBACK THROUGH THE JOIN NOTICES WAS A PAIN |
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
| * ins0mnia | joined |
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
| * timoxley | quit (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:21:53
| <Raynos> | FUNCTIONAL IS THE FUTURE |
22:21:54
| <LOUDBOT> | YOU GOT MANA MAN ILL SUCK YOUR DICK |
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_luke | quit (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
| * thl0 | quit (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
| * shama | quit (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:29
| <Raynos> | I SHOULD BE USING APPLICATIVE FUNCTORS INSTEAD |
22:48:30
| <LOUDBOT> | BECAUSE THEY DON'T OWE THE WORLD SHIT MAN |
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
| * defunctzombie | changed nick to defunctzombie_zz |
22:50:47
| * timoxley | joined |
23:00:40
| * thatguydan | joined |
23:00:55
| <substack> | LOUDBOT: search endofunctors |
23:00:56
| <LOUDBOT> | substack: <SubStack:##turtles> MONADS ARE JUST MONOIDS IN THE CATEGORY OF 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
| * marcello3d | quit (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
| * tmcw | quit (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
| * CryptoQuick | quit (Ping timeout: 240 seconds) |
23:21:35
| * CryptoQuick_ | changed nick to CryptoQuick |
23:26:41
| * spion | quit (Ping timeout: 246 seconds) |
23:27:41
| * spion | joined |
23:31:18
| * mikeal | quit (Quit: Leaving.) |
23:38:31
| * thl0 | joined |
23:38:50
| <isaacs> | substack: does exterminate work on os x? |
23:38:54
| <isaacs> | substack: er, should it? |
23:39:36
| * jxson | joined |
23:43:08
| <isaacs> | substack: it starts Google Chrome.app, but i don't see a thing... |
23:43:15
| * thl0 | quit (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
| * thl0 | joined |
23:46:34
| * thl0 | quit (Remote host closed the connection) |
23:59:44
| * blakmatrix1 | quit (Quit: Leaving.) |