00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:09  * ircretaryjoined
00:04:01  * calvinfojoined
00:05:26  * st_luke_quit (Remote host closed the connection)
00:14:56  * st_luke_joined
00:15:20  <jesusabdullah>ugh
00:15:33  * ralphtheninjaquit (Ping timeout: 248 seconds)
00:21:47  * thlorenzquit (Remote host closed the connection)
00:22:21  * thlorenzjoined
00:22:24  * Maciek416joined
00:24:04  <rowbit>Hourly usage stats: [developer: 10, free: 7]
00:26:28  * thlorenzquit (Ping timeout: 246 seconds)
00:27:06  * timoxley_joined
00:29:37  * contrahaxquit
00:29:53  * timoxleyquit (Ping timeout: 252 seconds)
00:32:38  * mikolalysenkoquit (Ping timeout: 240 seconds)
00:35:12  * timoxley_quit (Remote host closed the connection)
00:38:41  * AvianFlujoined
00:46:25  * fronxquit (Remote host closed the connection)
00:48:38  * jcrugzzquit (Ping timeout: 240 seconds)
00:49:02  * fronxjoined
00:51:12  * mikolalysenkojoined
00:51:31  * calvinfoquit (Quit: Leaving.)
01:04:14  * ferossquit (Remote host closed the connection)
01:05:53  <grncdr>hm, this is awkward
01:07:56  <grncdr>covert browserifies code and feeds it to node, which causes bops.is to fail, because it's looking for Uint8Array instances
01:08:14  <grncdr>which is what it should be doing in the browser...
01:08:45  * indexzeroquit (Ping timeout: 252 seconds)
01:09:09  <substack>is bops doing something magical?
01:09:34  * contrahaxjoined
01:10:03  <grncdr>not really, it's using the browser field to use typedarrays
01:11:20  <grncdr>sorry it's like 3 modules interacting to cause my problem, so I think I'm going to gist the explanation
01:11:36  <grncdr>because I don't really know if it's a *bug* in any of them
01:11:57  * contrahaxquit (Remote host closed the connection)
01:16:52  * tearmannjoined
01:20:09  * st_luke_quit (Remote host closed the connection)
01:23:49  * st_lukequit (Ping timeout: 272 seconds)
01:24:04  <rowbit>Hourly usage stats: [developer: 3, free: 13]
01:31:09  <rowbit>substack, pkrumins: testling server winIE9 + chrome + firefox + opera + safari + all nightly (rackspace) is down!
01:34:09  <johnkpaul>Is it purposeful that the browserify transform field in package.json can't .../../ out of the current directory?
01:34:37  <johnkpaul>or am I just doing something wrong
01:36:30  * contrahaxjoined
01:37:02  * st_lukejoined
01:39:27  * contrahaxquit (Client Quit)
01:40:00  <defunctzombie>johnkpaul: yes, I believe that is on purpose
01:40:13  * thlorenzjoined
01:40:37  <johnkpaul>defunctzombie: ah ok, thanks
01:40:47  <johnkpaul>wish there was a way to pass transforms to zuul
01:41:22  <johnkpaul>it's funny how sometimes the tests are so much more complicated to figure out how to do than the actual project itself
01:42:27  <defunctzombie>haha
01:42:43  <defunctzombie>johnkpaul: you should be able to just use transforms via the package.json field
01:42:46  <defunctzombie>thlorenz: ^
01:42:55  <thlorenz>defunctzombie: \/
01:42:55  <defunctzombie>johnkpaul: thlorenz is the man to ask about transforms and zuul
01:43:01  <defunctzombie>he knows more than me about that stuff
01:43:08  <johnkpaul>defunctzombie: yeah, you can, except you can't ../../ out so I can't have multiple test directories with their own package.json
01:43:23  <johnkpaul>without hardcoding the path to /my/transform/directory/index.js
01:43:50  <defunctzombie>johnkpaul: maybe if you can provide an example
01:44:09  <thlorenz>defunctzombie: johnkpaul didn't see the precursor of this conversation, plz fill me in if you want me to chime in
01:44:13  * contrahaxjoined
01:44:25  <johnkpaul>sure, will push an example to github as soon as airplane wifi allows
01:45:38  <thlorenz>defunctzombie: still thinking about global-transform field -- maybe that would help johnkpaul as well?
01:46:07  <thlorenz>I mean just give me a chance to transform ANY file that browserify resolves
01:46:28  <thlorenz>local transforms could run first
01:48:52  <johnkpaul>thlorenz: I want to be able to run zuul-mp against multiple test subdirectories
01:48:59  <johnkpaul>and have it always use the transofrm defined in the root/index.js
01:49:16  <johnkpaul>and it works correctly if I hardcode the full path
01:49:35  <thlorenz>johnkpaul: yeah I know, cause then the transform becomes local
01:49:54  <thlorenz>however if you resolve as a package it uses it's transforms instead of yours
01:50:18  <johnkpaul>I want it to use it's transforms
01:50:26  <johnkpaul>I just want it to understand ../-ing out of the directory
01:50:28  <johnkpaul>https://github.com/johnkpaul/promethify/blob/wip-output-dir/test/outputDirTests/package.json#L12
01:50:29  <thlorenz>but also yours
01:50:33  <defunctzombie>johnkpaul: isn't your transform defined in the package.json?
01:50:40  <johnkpaul>no, I don't care if it adds them together
01:51:01  <johnkpaul>defunctzombie: I'm trying to have a different package.json for subdirectories to test different sitautions
01:51:21  <thlorenz>johnkpaul: so what you showed is not working?
01:51:25  <johnkpaul>no
01:51:29  <grncdr>substack: chrisdickinson: ogd: https://gist.github.com/grncdr/8107660
01:51:36  <johnkpaul>but if I change that to /Users/jpaul/workspace/promethfiy/index.js it works fine
01:52:03  <thlorenz>weird, well since this is a for testing just do: ln -s ../../index.js index.js
01:52:04  <grncdr>it's a bit long-winded, but the gist of it is that browserified code doesn't work in node very well...
01:52:06  <johnkpaul>the comamnd I'm running is in the main package.json,
01:52:06  <johnkpaul>zuul-mp --local 3100 --reporter list -- test/outputDirTests/test.js
01:52:07  <defunctzombie>johnkpaul: thlorenz it probably doesn't work because of some path stuff
01:52:20  <defunctzombie>johnkpaul: cool, that was my next question :)
01:52:21  <thlorenz>and then just refer to it as ./index.js in the package.json
01:52:26  <grncdr>* browserify bops that is
01:52:59  <johnkpaul>thlorenz: oh I see, you mean symlink in my package.json npm test script?
01:53:01  <thlorenz>johnkpaul: anyways the idea I had is to have a root level transform that gets called for ALL files even if they are in child packages
01:53:08  <defunctzombie>thlorenz: johnkpaul: how is the transform field normally specified?
01:53:16  <defunctzombie>is it always pointing to some js file?
01:53:22  <defunctzombie>typically from project root?
01:53:38  <johnkpaul>defunctzombie: it can be either that or a npm module name that's installed into node_modules
01:53:43  <johnkpaul>and then it picks the main
01:53:46  <thlorenz>johnkpaul: no, just create a symlink to the index.js that has your transform in each test dir
01:53:55  <thlorenz>so it's as if you copied it there
01:54:28  <thlorenz>johnkpaul: similar to what I do with the Makefile here: https://github.com/thlorenz/libuv-dox/tree/master/examples/simple
01:55:07  <thlorenz>substack: can we plz have global-transforms? I'll implement them if you say yes :)
01:55:41  <johnkpaul>thlorenz: ah that's a great idea and it works, thanks!
01:55:41  <johnkpaul>I think I can commit symlinks to git
01:55:55  <thlorenz>of course you can
01:56:00  <thlorenz>np
01:56:31  <thlorenz>but that is not a solution for all kind of other scenarios (i.e. not tests), which is why we need global transforms
01:57:45  <johnkpaul>so a global transform would be a way to continue walking up the directory tree for package.json's with more transform fields?
01:59:29  <defunctzombie>not sure global would fix this
01:59:34  <defunctzombie>I think this is a path issue honestly
02:01:26  * contrahaxquit (Quit: Sleeping)
02:01:56  <grncdr>genuine question: why is objectMode for streams even a thing?
02:02:11  <defunctzombie>I dunno man
02:02:17  <defunctzombie>people went all crazy with streams
02:02:20  <grncdr>like, buffers are objects, why do we need a special mode?
02:02:31  <thlorenz>johnkpaul: defunctzombie a global transform would be in the root dir of your packags.json
02:02:32  <substack>thlorenz: I think that will cause a lot of problems
02:02:32  <defunctzombie>there was *some* reason
02:02:38  * mikolalysenkoquit (Ping timeout: 240 seconds)
02:02:44  <thlorenz>which is the first that browserify finds
02:02:58  <grncdr>I'm sure there was, I just wish I knew what it was. It would help me to be less annoyed right now
02:03:17  <thlorenz>substack: which problems? I just wanna get a chance to transform files of dependencies
02:03:44  <thlorenz>I'd never transform all files, but for things like https://github.com/thlorenz/browserify-swap it'd be really useful
02:03:48  <substack>thlorenz: it's tricky if npm dedupes a dependency into the wrong directory
02:03:57  <defunctzombie>grncdr: ask isaacs I am sure he knows
02:04:07  <substack>thlorenz: so for example if a and b both depend on through
02:04:13  <substack>and a runs a transform on through
02:04:16  <defunctzombie>substack: thlorenz: dedupe is a plague upon this world hahaha
02:04:40  <thlorenz>substack: well there could be only one package with global transforms
02:05:14  <thlorenz>and the local transform defined for through (which is none) would run first and then the global one has a chance to decide if it matches and if it should be transformed
02:05:16  <substack>thlorenz: what about something not baked into browserify that just parses the AST of a bundle?
02:05:30  <substack>I can write that right now.
02:05:37  <substack>would that solve the issue at hand?
02:05:57  <thlorenz>substack: yeah, that'd be possible too, but it's more hacky -- I like the power and simplicity of transforms so much ;)
02:06:13  <substack>the API can be the same
02:06:44  <thlorenz>substack: agreed, I guess I see your point about dedupe -- does that run after transforms?
02:07:02  <substack>I mean `npm dedupe`
02:07:14  <substack>or just doing `npm install` will factor out shared dependencies
02:07:16  <thlorenz>substack: well that wouldn't be really a problem
02:07:23  <thlorenz>that's fine
02:07:47  <thlorenz>since if I wanna globally transform something it'd most likely be for all dependencies
02:08:08  <substack>ok that's much easier actually
02:08:14  <substack>for using a tool
02:08:30  <thlorenz>substack: i.e. here https://github.com/thlorenz/browserify-swap#packagejson I wanna replace hyperwatch with something else since the real one is huge
02:08:48  <thlorenz>it doesn't matter where it ended up at, but as long as my regex matches I wanna replace it
02:09:05  <substack>thlorenz: you can already do that with -r
02:09:27  <thlorenz>substack: but not configure per environment
02:09:38  <substack>browserify -r ./swap/some-hyperwatch-swap.js:hyperwatch
02:09:54  <thlorenz>substack: but that's only local to the root package right?
02:10:08  <substack>unsure
02:10:09  <thlorenz>but what if I wanna swap it out for a dependency further down?
02:10:10  <substack>testing
02:10:52  <thlorenz>also I'd like to have a configuration for each environment like in the example and since I wanna use tools like beefy and zuul it'd have to be inside package.json
02:11:01  <thlorenz>i.e I can't do this via cli
02:11:18  * timoxleyjoined
02:11:19  * fronxquit (Remote host closed the connection)
02:12:33  <substack>thlorenz: -r overrides local requires
02:12:44  <substack>preparing an example
02:12:46  <thlorenz>yeah, I need global :)
02:12:55  <substack>it's a global replacement
02:12:55  <thlorenz>and configurable
02:13:28  <thlorenz>I'll make an issue to make things clearer
02:13:49  * AvianFluquit (Remote host closed the connection)
02:13:57  <thlorenz>however the disadvantage with the AST way is that then none of the requires (of the code I inject) get resolved whereas with a transform they are
02:15:39  * contrahaxjoined
02:16:31  * timoxleyquit (Read error: No buffer space available)
02:16:33  <substack>thlorenz: https://gist.github.com/substack/8107907
02:16:39  * timoxleyjoined
02:17:59  <thlorenz>substack: yeah that's local - that works ... working on issue give me a sec
02:18:08  <substack>thlorenz: the local?
02:18:35  <thlorenz>substack: no, trying to explain why global transforms would make sense
02:18:38  <substack>the zzz module was in node_modules/b/node_modules/zzz
02:21:39  <rowbit>substack, pkrumins: Encoders down: (free7)
02:23:50  * st_lukequit (Remote host closed the connection)
02:24:04  <rowbit>Hourly usage stats: [free: 10]
02:24:05  <johnkpaul>I wish that I could bg a command in an npm script
02:24:19  <johnkpaul>and I'm saying that because every other time I've said "I wish" something in this channel, someone has told me of a really good way to do it
02:29:09  * mikolalysenkojoined
02:30:28  <thlorenz>substack: https://github.com/substack/node-browserify/issues/566
02:31:08  <thlorenz>substack: it'd have to be the other way around in your zzz example
02:31:15  <thlorenz>i.e. swap out zzz for ./swap.js
02:31:43  <thlorenz>but your transform never runs (or top level browser field isn't evaluated) for the nested zzz
02:32:27  <thlorenz>johnkpaul: npm runs `sh` i.e. very simple shell, not bash, so some features aren't available there
02:33:21  * mikolalysenkoquit (Ping timeout: 240 seconds)
02:34:14  <johnkpaul>thlorenz: ah ok, oh well
02:34:44  <thlorenz>johnkpaul: defunctzombie, plz add opinions if you have them to the issue I just posted
02:36:55  <defunctzombie>thlorenz: does does that facebook library to transform es6 to es5 work? they have a browserify transform right?
02:37:30  <substack>defunctzombie: that's from square
02:37:42  <defunctzombie>ok.. how does the square one do it?
02:37:47  <defunctzombie>:)
02:38:22  <substack>thlorenz: that example *does* swap zzz out for ./swap.js
02:38:40  <substack>swap.js gets run, not the node_modules/b/node_modules/zzz/index.js file
02:39:46  <thlorenz>substack: ok, I guess that'd work, but that just solves the swap problem but not for the more generic case of transforms
02:40:00  <thlorenz>also it's not configurable int the package.json
02:40:31  <substack>thlorenz: what about the "browser" field?
02:40:40  <substack>testing something
02:40:41  <thlorenz>i.e. it'll ALWAYS be swapped out (again using tools like zuul and beefy) you don't get the chance to specify flags on command line
02:40:56  <substack>well yes
02:41:03  <thlorenz>yeah, browser field would solve the swap case iff it was configurable
02:41:11  <substack>so you do `-r ...` when you want that to happen
02:41:20  <substack>I don't like tools like zuul and beefy for that reason
02:41:25  <substack>for my own stuff
02:41:53  <substack>because this is a case where you can not complicate the tool with extra features
02:41:56  <grncdr>hm, I keep writing things that should be modules in github issues, because I don't want to actually use them
02:42:25  <grncdr>you'd think the people I'm responding to would start publishing these things they want...
02:42:49  * calvinfojoined
02:42:52  <thlorenz>substack: I see your point, this may be a special case, but seriously just transforms in general that get the chance to run on EVERY file sounds really powerful
02:43:20  <substack>perhaps but you can just do that outside of browserify itself
02:43:27  <substack>browserify main.js | somethingelse
02:44:43  <thlorenz>as I said if it's not a transform any requires that I inject in 'somethingelse' aren't resolved
02:45:15  <thlorenz>that's what I think is so awesome about them
02:45:39  <thlorenz>browserify rescans the transformed content and figures out if more needs to be done
02:46:16  <thlorenz>substack: so basically I wrote: https://github.com/thlorenz/viralify to get the behavior I wanted
02:46:37  <thlorenz>but it's horribly hacky and unperformant on larger projects
02:46:58  <defunctzombie>so is a transform just something that takes a file and does ast changes?
02:47:02  <defunctzombie>or source changes?
02:47:03  <thlorenz>global transforms would be a much better solution IMO
02:47:12  <thlorenz>source changes
02:47:18  * fronxjoined
02:47:20  <defunctzombie>I am a transform noobie
02:47:59  <thlorenz>defunctzombie: you are missing out big time :) -- so much nifty stuff is possible with them
02:48:02  <defunctzombie>heh
02:48:10  <defunctzombie>all I use it for this this: https://github.com/defunctzombie/browserify-file/blob/master/index.js
02:48:14  <defunctzombie>so I can require html file haha
02:48:26  <defunctzombie>so you get a file in the transform
02:48:29  <defunctzombie>and you can do whatever?
02:48:42  <defunctzombie>I think being able to do that on every single file seems reasonable
02:48:46  <thlorenz>yeah or an hbs file and you get a precompiled template (i.e. a function )
02:48:50  <defunctzombie>browserify itself is kinda one giant transform
02:49:17  <defunctzombie>so still no one told me how the square stuff does it
02:49:21  <defunctzombie>if it even does this
02:49:26  <thlorenz>I mean the way it works now makes lots of sense, transforms specified for just that package only run on files of that package
02:49:39  <thlorenz>but in some cases I want
02:49:41  <thlorenz>FULL CONTROL
02:49:44  * iamstefpart
02:49:56  <thlorenz>LOUDBOT: totally agreed
02:50:00  <defunctzombie>thlorenz: https://github.com/thlorenz/es6ify
02:50:10  <defunctzombie>thlorenz: doesn't that have to run on every file?
02:50:19  <thlorenz>only in your project
02:50:29  <defunctzombie>ah
02:50:36  <thlorenz>so if you include es6 in your package you have to add that to the transform field
02:50:56  <thlorenz>but in my case you didn't know that I'd need to transform some of the files in your package ;)
02:51:50  * fronxquit (Ping timeout: 240 seconds)
02:51:59  <thlorenz>maybe I just make viralify better :(
02:52:11  <defunctzombie>thlorenz: you can do this with a higher level tool right?
02:52:12  <thlorenz>possibly configurable to isolate what it viralifies
02:52:19  <defunctzombie>thlorenz: one that asks browserify for the streams?
02:52:23  <defunctzombie>and intercept stuff there?
02:52:33  <thlorenz>defunctzombie: if I had a hold of browserify
02:52:35  <thlorenz>but I don't
02:52:37  <defunctzombie>but you just want something to run on every file
02:52:49  <defunctzombie>hm
02:53:07  <thlorenz>I'm just trying to make it a transform so you can easily plug it via a field in your package.json along with a small config
02:53:37  <substack>thlorenz: there is already a "file" event
02:53:40  <defunctzombie>I dunno
02:53:52  <defunctzombie>I kinda feel like that dev/prod stuff you showed doesn't belong in package.json
02:54:00  <thlorenz>substack: I know, but my transform doesn't get the browserify instance
02:54:10  <substack>thlorenz: I have an idea for that.
02:54:19  <thlorenz>substack: ah cool :)
02:54:23  <substack>I need this feature for something else
02:54:34  <substack>rematerializing bundles from files back into instances
02:54:52  <thlorenz>wow - yeah that would be awesome!
02:55:18  <thlorenz>then I can take it apart do my dirty work and stitch it back together?
02:55:43  <thlorenz>still not sure how my requires would be resolved that way, unless there was some hook
02:56:44  <thlorenz>defunctzombie: my transform needs to find that config somewhere and everything else browserify related is already in it
02:57:03  <thlorenz>making it an external config with a package.json field pointing to it wouldn't be hard to do though
02:57:25  <defunctzombie>rematerializing bundles haha
02:57:29  <defunctzombie>sounds scary
02:57:58  <thlorenz>defunctzombie: browserify shim (https://github.com/thlorenz/browserify-shim#c-config-inside-configshimjs-without-aliases) allows this (option c)
02:58:48  <substack>defunctzombie: less scary than a package.json config for a global transform :p
02:59:10  <defunctzombie>haha
02:59:21  * mikolalysenkojoined
03:00:59  * indexzerojoined
03:02:07  <thlorenz>substack: defunctzombie funny :( -- well I'll just mull over how to make this work better with the viralify approach then, but am very much looking forward to rematerialize lots of bundles
03:02:53  * mikolalysenkoquit (Read error: Operation timed out)
03:24:04  <rowbit>Hourly usage stats: [free: 20]
03:33:23  * mikolalysenkojoined
03:34:28  * st_lukejoined
03:37:55  * yorickquit (Remote host closed the connection)
03:38:44  * st_lukequit (Ping timeout: 252 seconds)
03:43:22  * fronxjoined
03:47:59  * fronxquit (Ping timeout: 260 seconds)
03:50:00  * fronxjoined
03:53:27  * st_lukejoined
03:54:55  * fronxquit (Ping timeout: 272 seconds)
03:55:03  * AvianFlujoined
03:55:51  * st_lukequit (Remote host closed the connection)
03:57:53  * timoxleyquit (Remote host closed the connection)
04:06:14  * dominictarrjoined
04:21:29  * calvinfoquit (Read error: Connection reset by peer)
04:22:10  * calvinfojoined
04:24:04  <rowbit>Hourly usage stats: [free: 30]
04:27:37  <substack>thlorenz: ok I have the first part working
04:27:48  <substack>just writing the tests and readme now
04:30:12  <dominictarr>ha! FF regex bug with more than 99998 groups! http://homakov.blogspot.com/2013/12/regexp-groups-overflow-in-ff.html
04:48:48  * fronxjoined
04:49:42  <substack>thlorenz: https://github.com/substack/browser-unpack
04:50:12  <thlorenz>substack: that's awesome!
04:51:35  <substack>thlorenz: now the next part is creating a browserify instance from a module-deps stream
04:53:09  * fronxquit (Ping timeout: 252 seconds)
04:53:37  <thlorenz>substack: ah interesting, is that so I could rerun any other step before piping it back into browser-pack (like browser-resolve)?
04:56:01  <substack>it makes things written against the browserify API work with bundles
04:56:04  <defunctzombie>substack: I am curious what this is for?
04:56:17  <substack>defunctzombie: so thlorenz can implement global transforms
04:56:34  <defunctzombie>?
04:56:51  <thlorenz>not claiming I see the full picture either, but I like the way that sounds :)
04:56:54  <defunctzombie>but can't you just do that by supporting it in browserify?
04:57:09  <defunctzombie>it is cool that you can go backwards from the bundle
04:57:20  <defunctzombie>but seems that is much more roundabout than just forwards haha
04:57:31  <substack>defunctzombie: I would rather not complicate browserify with too many features
04:57:32  <thlorenz>so I guess I'd take it all apart, run the content through my transform and then rerun part of the bundle chain and finally into browserpack?
04:57:53  * contrahaxquit (Quit: Sleeping)
04:58:00  <defunctzombie>substack: I agree, tho I kinda feel the transforms stuff opens up the gates for people heh
04:58:09  <substack>and it would be pretty hard to implement global transforms in browserify directly actually
04:58:31  * timoxleyjoined
04:58:38  <defunctzombie>would it?
04:58:53  <substack>I would need to implement it in module-deps
04:59:08  <thlorenz>substack: yeah, I looked already in there
04:59:12  <defunctzombie>ah
04:59:30  <thlorenz>all you'd need to do actually is opts.globalTransform when doing the makeTransform thing
04:59:49  <thlorenz>I mean you'd need to concat those to the end of opts.transform
05:00:44  <substack>but the danger of transforms is that they will be applied to modules far upstream nested in node_modules/ somewhere that will break them
05:01:07  <jesusabdullah>so I'm trying to learn c
05:01:13  <thlorenz>substack: well, but isn't that your responsibility?
05:01:21  <jesusabdullah>the problem is I can't think of anything I want to do that is actually a good fit for c
05:01:31  <thlorenz>I mean only global transforms in your root package will run
05:01:37  <substack>thlorenz: I just really see global transforms being severely abused
05:01:37  <thlorenz>so no one else can break you
05:01:57  <substack>because they run on every single file whether you wrote that file or not
05:02:01  <substack>it's like #define in C
05:02:11  * dominictarrquit (Ping timeout: 260 seconds)
05:02:18  <thlorenz>but having to viralify thing wouldn't be any better
05:02:19  <substack>jesusabdullah: didn't you already do C in that engineering class?
05:02:36  <thlorenz>substack: just give me the power and I'll be responsible ;)
05:02:55  <substack>thlorenz: I need to understand the use-case better
05:03:14  * contrahaxjoined
05:03:15  <thlorenz>jesusabdullah: I'm playing with libuv as a good way to get deeper into C https://github.com/thlorenz/libuv-dox
05:03:25  * timoxleyquit (Ping timeout: 252 seconds)
05:03:46  <thlorenz>substack: lots of different use cases, anytime I need to modify files of packages I depend on
05:04:07  <thlorenz>substack: browserify-swap is one
05:04:22  <substack>thlorenz: it seems like we should have a different tool for that
05:04:31  <substack>global transforms apply to *every single file*
05:04:49  <substack>if you only want to modify individual files, perhaps we could have an abstraction that operates on individual files
05:05:00  <thlorenz>yeah, and only few people should probably use them and think very hard about what they are doing
05:05:08  <substack>or we could just update the logic that handles the "browser" field so that you can dig deep into your dependencies
05:05:17  <thlorenz>that would work as well
05:05:26  <thlorenz>(the individual files thing)
05:05:54  <thlorenz>I prefer transforming content over the browser field thing since that covers more cases, i.e. redirection as well as transformation
05:06:25  * calvinfoquit (Quit: Leaving.)
05:07:10  <thlorenz>substack: how about I can specify just one global transform and I have to give you package names for which it will apply (and or a regex)
05:07:24  <thlorenz>then it won't run on all files anymore
05:08:37  <substack>that sounds more sensible
05:08:46  <substack>but that's not a "global transform"
05:09:31  <thlorenz>terminology is not important, what I need is some transform that I can define in my root package, but it somehow is called with files from dependencies
05:10:05  <thlorenz>if you feel better if I narrow down what dependencies those are via a regex, then that would be ok
05:10:43  <substack>why do you need a regex?
05:10:51  <substack>I'm thinking an array of files
05:11:12  <thlorenz>but I wouldn't know exactly where those files are (npm dedupe)
05:11:47  <thlorenz>so a regex would be like: ".*node_modules/xtend/index.js"
05:12:09  <thlorenz>then it would find it where ever it ended up
05:12:29  <thlorenz>substack: but if this all feels so unclean, maybe we should wait to see if others need that feature too, maybe I'm just weird
05:12:47  <thlorenz>in the meantime I'll improve viralify to do what I need
05:15:51  * AvianFluquit (Remote host closed the connection)
05:16:16  <defunctzombie>this all sounds kinda weird :/
05:16:27  <defunctzombie>but I think top level project needs are different than per module needs
05:17:31  <thlorenz>defunctzombie: agreed, a simple global transform running on ALL files would need no config, but if it's power needs to be limited, then that needs configuration
05:18:00  <thlorenz>I'd still stick with a transform even just to increase re-usability
05:18:52  <substack>thlorenz: I don't think a regex is what you want there
05:19:06  <substack>just some lookup machinery to do the right thing
05:19:33  <thlorenz>ok, but not sure how you'd archieve that with just filenames
05:19:39  <thlorenz>most are called index.js
05:19:55  <thlorenz>unless you are talking full paths which break with npm dedupe
05:19:58  <substack>but they live in directories
05:20:10  <thlorenz>ok so you say xtend/index.js
05:20:26  <thlorenz>?
05:21:07  <substack>so suppose you have a module A that has a dependency B that has a file you want to transform
05:21:21  <substack>(not swap out, I think we should just fix the "browser" field to support that use-case)
05:21:47  <substack>so to transform A/node_modules/B is problematic because B might live in node_modules/B
05:22:23  <substack>and to apply a transform on B might require inserting another version of B and mounting it in node_modules/A/node_modules/B, even if that directory doesn't exist
05:22:53  <thlorenz>yeah so you'd say node_module/B and you could just split on the last two parts of any full path to match it right?
05:22:55  <substack>but in actuality this code would operate on IDs, not file paths
05:23:32  <thlorenz>ah good point, I guess when you are resolving these things you still know what parent they originally belonged to
05:24:04  <rowbit>Hourly usage stats: [free: 25]
05:24:21  <substack>I don't think passing in a path string is necessarily the best way to encode that
05:24:35  <thlorenz>so what if I could say something like "run transform X on A -> B"
05:24:50  <substack>what if you could bundle.transform(tr, files) on an array of `files`?
05:24:55  <substack>or rather, opts.files
05:24:59  <thlorenz>meaning whenever one of B's files is resolved but to satisffy A
05:25:43  <substack>yes running transform X on A -> b is the right way of specifying that
05:26:12  <substack>and then the transform machinery would need to know that it should create a phantom copy of B in A's node_modules directory
05:26:17  <substack>except on an ID
05:26:18  <thlorenz>ok, so that's almost like injecting that transform into B
05:26:33  <substack>but it doesn't run into the problems of B being used other places
05:26:57  <thlorenz>yes, so a MUCH better version of viralify built into browserify
05:27:14  <thlorenz>that sounds perfect
05:27:30  <substack>and not completely insane like global transforms would end up being
05:27:50  <substack>I think people who want global transforms mostly just want targetted transforms
05:27:52  <thlorenz>yeash, so I'd specify that in my root package.json somewhere and browserify will consider this?
05:27:54  * timoxleyjoined
05:28:01  <thlorenz>I think that is correct
05:28:16  <substack>I'm not sure about package.json, this will probably land in the API first
05:28:44  <substack>it's much harder to add resolution logic to package.json
05:28:47  <thlorenz>well, that is a good start and a chance to play around with this
05:28:51  <substack>yes
05:29:59  <thlorenz>thanks substack lmk if you need help with this
05:30:15  <thlorenz>I'll be back on tomorrow sometime
05:30:26  * timoxleyquit (Remote host closed the connection)
05:37:09  * tmcwquit (Remote host closed the connection)
05:37:35  * thlorenzquit (Remote host closed the connection)
05:37:36  * tmcwjoined
05:38:09  * thlorenzjoined
05:41:55  * tmcwquit (Ping timeout: 252 seconds)
05:42:26  * thlorenzquit (Ping timeout: 240 seconds)
05:42:33  <isaacs>any brave souls wanna try out something fun?
05:42:38  <isaacs>Put this in your /etc/hosts file:
05:42:39  <isaacs> registry.npmjs.org
05:43:00  <isaacs>then, go about your business. hopefully, nothing happens, except that npm gets WAY faster
05:44:54  <isaacs>mmalecki, rvagg, dominictarr: it'd be great to get some tests from far away lands, like eu and au and such
05:45:23  <rvagg>
05:45:50  <justinabrahms>chrisdickinson: ^^
05:46:04  <isaacs>if stuff blows up a lot or doen't work, please lmk
05:46:37  * contrahaxquit (Quit: Sleeping)
05:47:41  * tmcwjoined
05:49:48  * substacktried it
05:50:10  <substack>isaacs: also https://github.com/isaacs/npm/pull/4368
05:50:36  <substack>was meaning to implement the test suggestions but it was kind of involved to get those changes all the way into the npm mock registry module
05:51:01  * contrahaxjoined
05:51:13  <substack>but we've already been using this fix in production on testling and it's been doing well
05:51:55  <isaacs>substack: yeah, that's a good patch.
05:52:05  * contrahaxquit (Client Quit)
05:52:05  * tmcwquit (Ping timeout: 248 seconds)
05:52:09  <isaacs>substack: we ARE trying to be very diligent moving forward to only make changes with tests, though
05:52:14  <defunctzombie>isaacs: what changes?
05:52:24  <isaacs>def 05:50 < substack> isaacs: also https://github.com/isaacs/npm/pull/4368
05:52:26  <substack>isaacs: it's pretty much the same fix as my other patch but applied to another code path
05:52:27  <isaacs>defunctzombie: 05:50 < substack> isaacs: also https://github.com/isaacs/npm/pull/4368
05:52:33  <isaacs>substack: yeah...
05:53:02  <defunctzombie>isaacs: sorry.. meant what changes if I use that /etc/hosts file?
05:53:25  <defunctzombie>isaacs: like is it faster just cause no one is using that server
05:53:30  <isaacs>defunctzombie: it goes through fastly, and many reqs are handled by Manta instead of direct to couch
05:53:30  <defunctzombie>isaacs: or is it some other thing?
05:53:37  <defunctzombie>isaacs: ah, I see
05:53:40  <isaacs>defunctzombie: geodistributed caches etc
05:53:43  <substack>oh wow!
05:53:44  <defunctzombie>imma try it
05:53:47  <substack>that is super rad
05:53:57  <substack>isaacs: you seemed to have gotten that working rather quickly
05:54:27  * tmcwjoined
05:54:54  <defunctzombie>isaacs: what is the flag to not use cache with npm install?
05:55:27  <isaacs>actually, the folks in AU won't get much benefit now that i look at it..
05:55:30  <defunctzombie>screw it I just did clean
05:55:44  <isaacs>that IP address is for the fastly servers in LA
05:55:58  <isaacs>i think they use smart DNS
05:56:07  <defunctzombie>isaacs: could DNS round robin it
05:56:18  <defunctzombie>ah
05:56:25  <isaacs>rvagg: chrisdickinson: et al: dig +short a.sni.fastly.net
05:56:30  <isaacs>that'll give you the proper IP address to use
05:56:59  <isaacs>substack: if the holdup is just getting a pr landed in npm-registry-mock, feel free to send a pull req that floats it.
05:57:16  <isaacs>substack: tell domenic and st_luke i said it was ok :)
05:57:18  * st_lukejoined
05:58:02  <substack>nah I just haven't dug into npm-registry-mock yet
05:58:08  <isaacs>kewl, yeah, it's not terrible.
05:58:18  <isaacs>but it is a thing
05:58:22  <rvagg>but you know his attitude towards mocks
05:58:35  <isaacs>true, but in this case, it saves a LOT of network overhead during tests.
05:58:35  <defunctzombie>isaacs: 1m11s vs 52s
05:58:47  * tmcwquit (Ping timeout: 240 seconds)
05:58:47  <defunctzombie>isaacs: clean cache both times
05:58:53  <isaacs>defunctzombie: ok?
05:58:56  <isaacs>defunctzombie: is that... good?
05:58:58  <isaacs>or no?
05:59:07  <defunctzombie>isaacs: meh
05:59:12  <isaacs>of course, caches aren't *great* if you're the only one using them :)
05:59:16  <isaacs>defunctzombie: where are you?
05:59:19  <isaacs>location-wise
05:59:20  <defunctzombie>atlanta
05:59:23  <defunctzombie>east coast
05:59:28  <isaacs>defunctzombie: oh, ok, so us-east is probably the best anyway
05:59:34  <defunctzombie>probably
05:59:36  <isaacs>defunctzombie: and that's where the registry lives natively
05:59:49  <defunctzombie>I played around with install stuff today
05:59:57  <defunctzombie>the biggest speed boost comes from more parallelization
06:00:03  <rvagg>looks like san jose for us
06:00:08  <defunctzombie>versus any single network thing
06:00:14  <defunctzombie>and obviously just caching the files locally
06:01:17  <defunctzombie>I believe the current implementation downloads parallel
06:01:23  <defunctzombie>but installs in order at each level
06:02:13  <rvagg>registry.npmjs.org (proper) is in dalas? that's my guess by the routes getting there
06:02:22  <rvagg>so west-coast should be an improvement for us anyway
06:02:50  <isaacs>rvagg: i thought it was us-east, which is, i dunno? east of here?
06:02:57  <rvagg>yeah, ping time is ~50ms quicker
06:03:02  <isaacs>so that's nice
06:03:06  <rvagg>yeah
06:03:20  <isaacs>rvagg: i dunno if they have a POP in au or southeast asia
06:03:49  <rvagg>when amazon didn't have an edge location over here they would flip between singapore and la for us
06:04:04  <rvagg>we have a fatter pipe to la, but singapore is closer
06:05:15  <rvagg>isaacs: http://www.fastly.com/blog/fastly-cdn-expands
06:05:17  <rvagg>says there's one in syd
06:05:32  <rvagg>2 in NZ, 1 in singapore .. hm
06:05:56  * defunctzombiechanged nick to defunctzombie_zz
06:08:10  * tmcwjoined
06:08:47  <isaacs>neat
06:08:55  <isaacs>can someone try publishing something?
06:09:00  <isaacs>it works for me, but i have admin powers
06:09:08  <isaacs>and it works for testuser, but i don't trust testuser
06:09:55  * tmcwquit (Read error: Connection reset by peer)
06:09:58  * tmcw_joined
06:10:04  <st_luke>Thanks for coming.
06:10:19  <isaacs>st_luke: Ok
06:10:25  <st_luke>Sounds good.
06:10:45  <st_luke>isaacs: you should have left it the adolf hitler of equal rights
06:10:46  <st_luke>I lol'd irl at that one
06:10:56  <isaacs>st_luke: lol
06:13:39  <isaacs>hmm... so, fastly *does* fall down a bit if you unpublish something.
06:13:50  <isaacs>and by fall down, i mean, the stuff is still there, even after unpublishing
06:13:54  <isaacs>feature? bug?
06:14:07  * tmcw_quit (Ping timeout: 240 seconds)
06:14:18  <rvagg>isaacs: http://npm.im/special-package-to-test-fastly-distributed-npm-will-it-work
06:14:30  <rvagg>isaacs: published way too fast to feel like it worked... but it seems to have
06:16:26  <isaacs>rvagg: are you using the newest release of npm?
06:16:36  <isaacs>rvagg: publishes are 1/3 as many PUTs now
06:16:52  <isaacs>rvagg: and also, if you try to publish something gigantic, node crashes
06:16:56  <isaacs>bug? feature? not sure.
06:17:33  <rvagg>ah yeah, the atomic publish thing, still, felt very quick for a publish
06:17:42  <rvagg>perhaps it's cause there's almost nothing in this pkg
06:18:59  <rvagg>isaacs: <collypops> a --force install of browserify went from 3m9s down to 45s <--- aussie
06:20:29  <isaacs>yah, he told me :)
06:20:40  <isaacs>nice stuff :)
06:23:48  <isaacs>yeah, it's definitely possible to publish/unpublish/publish and confuse it a lot.
06:24:04  <rowbit>Hourly usage stats: [free: 44]
06:24:12  <isaacs>i guess, i mean, "Don't do that" is probably a sufficient answer.
06:30:18  * tmcwjoined
06:30:41  * Maciek416quit (Remote host closed the connection)
06:34:43  * tmcwquit (Ping timeout: 252 seconds)
06:41:13  * timoxleyjoined
06:44:31  * wolfeidauquit (Remote host closed the connection)
06:44:31  * xokochanged nick to oky
06:45:23  * contrahaxjoined
06:45:47  * timoxleyquit (Ping timeout: 260 seconds)
06:53:26  * tmcwjoined
06:57:27  * trevnorrisquit (Ping timeout: 252 seconds)
06:58:07  * tmcwquit (Ping timeout: 246 seconds)
07:02:05  * shamaquit
07:04:55  * trevnorrisjoined
07:12:43  * timoxleyjoined
07:23:39  * fotoveritequit (Quit: fotoverite)
07:24:04  <rowbit>Hourly usage stats: [developer: 2, free: 25]
07:31:28  * fotoveritejoined
07:31:29  * fotoveritequit (Client Quit)
07:39:34  * contrahaxquit (Quit: Sleeping)
07:41:02  * contrahaxjoined
07:42:55  * wolfeidaujoined
07:47:30  * mikolalysenkoquit (Ping timeout: 240 seconds)
07:53:25  * tmcwjoined
07:58:23  * tmcwquit (Ping timeout: 272 seconds)
08:11:01  * st_lukequit (Remote host closed the connection)
08:16:47  * mikolalysenkojoined
08:20:52  * st_lukejoined
08:24:04  <rowbit>Hourly usage stats: [developer: 1, free: 24]
08:24:43  * contrahaxquit
08:40:18  * contrahaxjoined
08:40:18  * st_lukequit (Remote host closed the connection)
08:41:51  * timoxleyquit (Ping timeout: 240 seconds)
08:42:19  * mikolalysenkoquit (Ping timeout: 252 seconds)
08:53:26  * tmcwjoined
08:57:49  * tmcwquit (Ping timeout: 246 seconds)
09:05:43  * indexzeroquit (Quit: indexzero)
09:15:29  * mafintoshjoined
09:20:23  * calvinfojoined
09:23:17  * st_lukejoined
09:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 31]
09:26:44  * mafintoshquit (Quit: Leaving...)
09:46:44  * st_lukequit (Remote host closed the connection)
09:48:57  * mikolalysenkojoined
09:50:46  <grncdr>isaacs: idk what's going on but publishing is not working for me
09:51:15  <grncdr>or rather, it worked, but I can't retrieve the package now.
09:51:45  <grncdr>and if I try to publish again I get the warning about overwriting an existing package
09:52:07  <grncdr>http://npm.im/any-db-adapter-spec should be @ 2.0.0
09:53:25  * tmcwjoined
09:54:17  * mikolalysenkoquit (Ping timeout: 272 seconds)
09:58:01  * tmcwquit (Ping timeout: 246 seconds)
10:01:17  * mafintoshjoined
10:07:43  <grncdr>further info: switching to the fastly IP didn't make a difference, I also can't unpublish 2.0.0
10:08:36  * wolfeidauquit (Remote host closed the connection)
10:15:10  <rowbit>substack, pkrumins: Encoders down: (dev)
10:20:22  * fotoveritejoined
10:22:04  * fotoveritequit (Client Quit)
10:22:15  * calvinfoquit (Quit: Leaving.)
10:22:42  * mafintoshquit (Read error: No route to host)
10:23:27  * fotoveritejoined
10:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 35]
10:30:05  * mafintoshjoined
10:33:53  * fotoveritequit (Quit: fotoverite)
10:38:28  * fronxjoined
10:39:09  * mafintoshquit (Quit: Leaving...)
10:39:18  * ralphtheninjajoined
10:51:59  * wolfeidaujoined
10:53:25  * tmcwjoined
10:58:15  * tmcwquit (Ping timeout: 272 seconds)
10:58:22  * contrahaxquit
11:03:29  * contrahaxjoined
11:18:09  * dominictarrjoined
11:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 34]
11:35:27  <substack>isaacs: https://gist.github.com/substack/8112065
11:42:08  <substack>and now I can't publish to either repo :(
11:42:16  <substack>npm ERR! Error: conflict Document update conflict.: gutter
11:53:01  * calvinfojoined
11:53:29  * tmcwjoined
11:53:43  * ralphtheninjaquit (Ping timeout: 252 seconds)
11:56:16  * tilgovi_quit (Remote host closed the connection)
11:57:26  * calvinfoquit (Ping timeout: 240 seconds)
11:57:50  * tmcwquit (Ping timeout: 240 seconds)
12:00:36  * mafintoshjoined
12:02:21  * mafintoshquit (Client Quit)
12:07:03  * jcrugzzjoined
12:19:13  * ralphtheninjajoined
12:20:31  * mafintoshjoined
12:21:21  * calvinfojoined
12:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 44]
12:25:27  * calvinfoquit (Ping timeout: 240 seconds)
12:26:03  * tmcwjoined
12:27:52  * tmcw_joined
12:27:53  * tmcwquit (Read error: Connection reset by peer)
12:32:05  * tmcw_quit (Ping timeout: 248 seconds)
12:33:54  * yorickjoined
12:39:04  <dominictarr>oh, man... typedArrays let you do binary, but not control the endianness!
12:39:11  <dominictarr>who designs this shit?
12:44:17  * mafintoshquit (Quit: Leaving...)
12:45:02  * timoxleyjoined
12:49:51  * tmcwjoined
12:55:02  * tmcwquit (Remote host closed the connection)
12:55:38  * tmcwjoined
12:58:37  * mafintoshjoined
12:59:49  * tmcwquit (Ping timeout: 248 seconds)
12:59:56  * mafintoshquit (Client Quit)
13:09:09  * fronxquit (Remote host closed the connection)
13:11:00  * ralphtheninjaquit (Ping timeout: 240 seconds)
13:15:05  <spion>why would you control the endianness
13:15:44  <spion>:| uh right. multiple systems communicating.
13:21:46  * calvinfojoined
13:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 45]
13:26:07  * calvinfoquit (Ping timeout: 252 seconds)
13:45:53  * timoxleyquit (Remote host closed the connection)
13:49:38  * ralphtheninjajoined
13:51:41  <Domenic_>pretty sure you can control the endianness using DataView
13:57:05  * contraha_joined
13:57:14  * jcrugzzquit (Ping timeout: 264 seconds)
13:57:28  * grncdr_joined
13:58:50  * pkrumins_joined
14:04:56  * AvianFlujoined
14:06:02  * contrahaxquit (*.net *.split)
14:06:03  * ELLIOTTCABLE__quit (*.net *.split)
14:06:03  * Raynosquit (*.net *.split)
14:06:03  * dubroy__quit (*.net *.split)
14:06:04  * grncdrquit (*.net *.split)
14:06:04  * pkruminsquit (*.net *.split)
14:06:04  * jaz303quit (*.net *.split)
14:06:04  * nlacassequit (*.net *.split)
14:06:11  * grncdr_changed nick to grncdr
14:09:13  * flobyjoined
14:09:26  * timoxleyjoined
14:10:53  * ELLIOTTCABLE__joined
14:10:53  * Raynosjoined
14:10:53  * jaz303joined
14:10:53  * dubroy__joined
14:10:53  * nlacassejoined
14:10:56  * Raynosquit (Changing host)
14:10:56  * Raynosjoined
14:10:56  * ELLIOTTCABLE__quit (Changing host)
14:10:56  * ELLIOTTCABLE__joined
14:15:28  * fotoveritejoined
14:18:07  * timoxleyquit (Ping timeout: 272 seconds)
14:22:35  * calvinfojoined
14:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 13]
14:24:50  * tmcwjoined
14:26:59  * calvinfoquit (Ping timeout: 252 seconds)
14:28:34  * AvianFluquit (Remote host closed the connection)
14:31:11  * tmcwquit
14:49:47  * mafintoshjoined
14:50:40  * mafintoshquit (Client Quit)
15:00:33  * ralphtheninjaquit (Ping timeout: 272 seconds)
15:09:41  * pkrumins_changed nick to pkrumins
15:16:56  * fronxjoined
15:23:20  * calvinfojoined
15:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 17]
15:27:51  * calvinfoquit (Ping timeout: 252 seconds)
15:29:15  * tmcwjoined
15:33:32  * defunctzombie_zzchanged nick to defunctzombie
15:34:05  * thlorenzjoined
15:34:46  * ralphtheninjajoined
15:35:02  * tmcwquit (Ping timeout: 240 seconds)
15:35:39  * tmcwjoined
15:43:55  * jez0990quit (Quit: No Ping reply in 180 seconds.)
15:44:09  * jez0990joined
15:47:49  * thlorenzquit (Ping timeout: 248 seconds)
15:50:57  * trodriguesquit (Ping timeout: 246 seconds)
15:53:05  * jez0990quit (Quit: No Ping reply in 180 seconds.)
15:53:16  * trodriguesjoined
15:53:25  * jez0990joined
15:54:34  * tmcwquit (Remote host closed the connection)
15:54:59  * AvianFlujoined
15:57:31  * mikolalysenkojoined
15:57:50  * trodriguesquit (Ping timeout: 240 seconds)
15:58:22  * trodriguesjoined
16:06:19  * jez0990quit (Quit: No Ping reply in 180 seconds.)
16:10:11  <rowbit>substack, pkrumins: These encoders are STILL down:
16:16:14  * thlorenzjoined
16:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 21]
16:24:04  * calvinfojoined
16:28:18  * Maciek416joined
16:29:02  * calvinfoquit (Ping timeout: 264 seconds)
16:37:49  <isaacs>grncdr, substack: should be fixed in 60s or so
16:37:54  <isaacs>Yes, unpublish is a problem.
16:39:01  <isaacs>substack: I don't see the gutter publish at all... so that's weird..
16:39:56  <isaacs>aha, yeah, it's in the couch, but not getting to fastly.
16:39:59  <isaacs>weird?
16:43:24  * fronxquit (Remote host closed the connection)
16:47:41  * fronxjoined
16:51:58  * fronxquit (Remote host closed the connection)
16:55:51  * fronxjoined
16:57:54  * fronxquit (Remote host closed the connection)
17:00:48  * fronxjoined
17:02:14  * st_lukejoined
17:02:24  * st_lukequit (Remote host closed the connection)
17:02:58  * st_lukejoined
17:03:57  * flobypart
17:11:35  * st_lukequit (Ping timeout: 260 seconds)
17:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 33]
17:24:50  * calvinfojoined
17:29:38  * calvinfoquit (Ping timeout: 264 seconds)
17:30:36  * fronxquit (Remote host closed the connection)
17:32:58  * fronxjoined
17:43:38  <isaacs>grncdr, substack: if you could provide any details of what you did to end up in that state with publish/unpublish, that'd be really helpful
17:44:05  <isaacs>i'm gonna try to figure out a way around that today, but reproducing it would be a good first step, so i'm not working on theoretical bugs only.
17:46:48  <Domenic_>isaacs: you've seen the issue tracker i assume?
17:49:02  * shamajoined
17:51:30  * kriskowalquit (Quit: kriskowal)
18:00:40  <grncdr>isaacs: I literally just did `npm version 2.0.0 && npm publish`
18:00:59  <grncdr>without setting up the fastly dns entry first
18:02:02  <grncdr>it appeared to work, and I didn't have a problem until I tried to install the package in another dir
18:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 13]
18:25:37  * calvinfojoined
18:29:59  * calvinfoquit (Ping timeout: 260 seconds)
18:30:39  <grncdr>hm, I'm trying to reproduce this with new packages and I'm not able to so far...
18:33:13  <grncdr>isaacs: has something materially changed since last night?
18:42:51  * jcrugzzjoined
18:47:09  * ednapiranhajoined
18:52:30  <substack>isaacs: I just did `npm publish` and then noticed that it didn't update either registry
18:52:46  <substack>then the next time I tried to publish I got conflict messages
18:53:01  <substack>oh wait, it's at the correct version now!
18:53:18  <substack>on both registries
18:53:21  <substack>and I didn't do anything
18:55:03  * thlorenzquit (Remote host closed the connection)
18:56:28  <substack>isaacs: also! gutter was a really old terrible thing that was written for node 0.4 event emitter streams that I just upgraded to streams2
18:56:47  <substack>so now it's not completely broken like before
19:06:05  <grncdr>hm, any-db-adapter-spec is still messed up :(
19:07:48  <grncdr>it's possible that isaacs fixed gutter manually for you?
19:12:22  <substack>possible
19:18:43  <substack>ogd: concat-stream is giving me lots of problems in the browser since browserify v3
19:19:10  <isaacs>Domenic_: yeah, so, looks like people found all the bugs last night :0
19:19:19  <isaacs>Domenic_: i've flipped DNS back to pointing direct to iriscouch
19:19:43  <Domenic_>isaacs: ah, ok, that explains why everyone is suddenly reporting problems fixing themselves...
19:19:55  <isaacs>Domenic_: yep :)
19:20:05  <isaacs>the joys of server-side changes :)
19:20:21  <isaacs>Domenic_: my hope is to be 100% on CDN by 1/1
19:20:25  <isaacs>Domenic_: but we'll see
19:20:34  <Domenic_>that'd be pretty awesome
19:20:35  <isaacs>i only actually have today, thursday, and friday to work on it
19:20:51  <isaacs>but last night was the first "works for me, seems like it SHOULD be fine..." milestone
19:21:07  <isaacs>grncdr: what version of npm are you using?
19:21:26  <isaacs>substack: ^
19:21:33  <substack>1.3.21
19:21:39  <isaacs>ok, kewl
19:22:19  <isaacs>so, it looks like all the problems are mostly of the form: "I did a PUT or DELETE, and then a subsequent GET returned the cached copy"
19:22:35  <Domenic_>as in, local cache?
19:22:40  <isaacs>so, maybe it could be fixed by having some VCL that sees PUT/DELETE methods, and purges the cache
19:22:46  <isaacs>Domenic_: no, the fastly cache
19:22:49  <Domenic_>ah
19:23:02  * dominictarrquit (Ping timeout: 264 seconds)
19:23:20  <Domenic_>cache invalidation (╯°□°)╯︵ ┻━┻
19:23:46  <isaacs>yeah.
19:24:02  <isaacs>it SHOULD be doing ETag validation, but it also has a TTL, and i guess it's probably set too low or something
19:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 59]
19:24:46  <grncdr>isaacs: 1.3.11
19:24:59  <isaacs>grncdr: ok
19:25:07  <Domenic_>dude that's like 0.0.1 in npm years
19:25:13  <isaacs>grncdr: subrub had the same effect, and he's on the latest, so it's not that, i don't think
19:25:25  <isaacs>bottom line: PUTs and DELETEs should invalidate the cache right away, and don't.
19:25:40  <isaacs>there are 2 ways i can think to approach this, and probably should do both:
19:26:12  <isaacs>1. write some VCL that watches for PUT and DELETE, and invalidates the cache locally on the fastly server
19:26:17  <Domenic_>i am a bit surprised the cache involved doesn't handle this for you... seems like it should be an automatic feature of any reasonably-intelligent HTTP cache.
19:26:19  <substack>Raynos: I kind of want to do some experiments with react's diffing algorithm so I might rip it out of react and put it on npm separately
19:26:42  * calvinfojoined
19:26:48  <isaacs>2. write a _changes follower than pings fastly and invalidates the relevant urls for any doc change
19:27:13  <isaacs>2 is easy, because it's just a node daemon that hits a web service, and i fart those out all day long.
19:27:23  <isaacs>but 1 involves learning even more about farnish.
19:27:25  <isaacs>*varnish
19:27:28  <isaacs>and ugh
19:27:44  <isaacs>Domenic_: well, it IS rather tricky
19:27:54  <isaacs>Domenic_: after all, fastly's cache is a huge network of servers.
19:27:59  <isaacs>Domenic_: it's not like it's one machine
19:28:01  <Domenic_>haha google brought me to this intimidating page https://www.varnish-software.com/static/book/Cache_invalidation.html
19:28:07  <Domenic_>isaacs: ok, fair.
19:28:21  <isaacs>Domenic_: so, even if you dropped it from the cache in lax, it might still be in the cache in ams
19:28:39  <isaacs>Domenic_: but, at least, that'd solve the problem of PUT/GET/PUT failing
19:29:05  <Domenic_>i guess i just assumed that any reasonably-intelligent CDN (e.g. Amazon's?) has already taken care of these problems long ago...
19:29:16  <isaacs>Domenic_: oh, also, it's not JUST varnish. it's also some Fastly-specific magic, though they are (thankfully) a reasonably thin layer over varnish
19:29:48  <grncdr>so… my package now installs… did somebody do something to make that happen? or was it just magic / TTL / something els?
19:29:50  <isaacs>Domenic_: so, the problem is that the server in one place won't know what's in-cache in a server in another place.
19:30:02  <isaacs>grncdr: yes, i changed the DNS to undo the fastly thingie
19:30:15  <Domenic_>isaacs: I mean, I see that it's a complicated problem in the abstract; but it also seems like a common one that CDNs should have solved long ago.
19:30:30  <grncdr>isaacs: ah
19:31:01  <isaacs>Domenic_: the problem isn't just that it's complicated, it's that any specific solution will probably be the WRONG behavior for someone.
19:31:13  <grncdr>so, regarding invalidation, a user is unlikely to be bouncing *between* different edge servers between requests, so I'd lean toward invalidating locally first
19:31:37  <isaacs>Domenic_: so, i can see the wisdom of saying "We're not going to even try to solve this, but here are the tools to do what you want"
19:31:49  <isaacs>grncdr: yeah, tht's what i'm gonna pursue
19:31:53  * calvinfoquit (Ping timeout: 272 seconds)
19:32:05  <isaacs>Domenic_: for a lot of applications, you may be comfortable saying that a write takes a few seconds to "take"
19:32:20  <isaacs>Domenic_: hell, S3 is quite ludicrously "eventually consistent"
19:32:30  <isaacs>where "eventual" might mean days, or ms, or anythign in between
19:32:39  <Domenic_>hmm did not know
19:33:01  <isaacs>what's worse is that it'll give you a 201 Created response, and then GETs will 404 for hours sometimes, and other times, will work immediately.
19:33:17  <Domenic_>oh right for creating buckets, i remember that
19:33:27  <isaacs>that's actually one thing that is kinda nice about manta. PUTs are slower, but they either work right away, or they fail.
19:34:18  <isaacs>and if they fail, they give you a 503 response, and clean up after themselves if they were only able to write to a few servers before timing out.
19:35:41  * fronxquit (Remote host closed the connection)
19:36:20  <Raynos>substack: good luck! would love to see that
19:36:37  <Raynos>substack: i talked to the react guys about ripping it out and they were like "well, react is already pretty small, not much to rip out"
19:37:59  <substack>Raynos: their conception of "small" is pretty gigantic https://github.com/facebook/react/tree/master/src/core
19:38:16  <Raynos>they basically said you cant rip out the diff engine because youll need everything else
19:38:19  <substack>"small" is <300 lines
19:38:30  <substack>Raynos: I bet they have a lot of other silly ideas about what's possible
19:38:45  <Raynos>substack: elm's diff engine is smaller and saner. I started proting it here https://github.com/Raynos/graphics
19:39:29  <substack>I don't want an frp grab bag though
19:39:33  <substack>just a diff algorithm
19:39:49  <substack>generate a patch, apply a patch
19:39:55  <substack>that's what a diff algorithm should do
19:41:05  <Raynos>Thats not what it does.
19:41:42  <Raynos>it generates patches and then knows how to apply bulk patches
19:41:59  <Raynos>and its patch generation is compable of having user level hints and requires on a virtual DOM tree to generate a patch
19:42:38  <substack>this is what a patch/diff algorithm's API should look like: https://github.com/mikolalysenko/patcher.js
19:42:46  <substack>why should dom diffs be special?
19:47:02  <Raynos>substack: react does global dom diffs
19:47:15  <Raynos>i.e. it takes a list of diffs and squashes and reorders them
19:47:26  <Raynos>to avoid reflows and to avoid writing / reading from the dom when not needed
19:47:31  <substack>I don't see why that can't be split out into a separate thing?
19:47:53  <Raynos>i think it could
19:48:02  <Raynos>but react is useless without the global optimizations
19:48:38  <Raynos>also you can just compute a diff on tree structures
19:48:45  <Raynos>you need to compute a diff on tree structures with diffing hints
19:49:08  <Raynos>react has a serious of diffing hints that allow it to short circuit subtrees by saying "these two subtrees are the same. dont exhaustively walk both of them"
19:50:01  <Raynos>also for example, if you cycle an <ul> by placing the top <li> to the bottom
19:50:09  <Raynos>reacts diff algorithms understands that as a single move operation
19:50:19  <Raynos>not as N <li> diff operations
19:51:11  <Raynos>substack: so basically a diff / patch thing isnt that important. its the diffing hints that are important and its the batch patch thats important
19:56:44  * calvinfojoined
19:57:04  * fotoveritequit (Ping timeout: 240 seconds)
19:59:31  <Raynos>substack: so the problem is that all the stuff that makes react fast is buried in their monolothic soup
20:08:45  * ednapiranhaquit (Quit: Leaving...)
20:14:14  <grncdr>Raynos: how would you redesign that?
20:14:45  <grncdr>like, I think maybe a diffing algo that allows the objects being diffed to collaborate could be a good start?
20:16:04  * calvinfo1joined
20:16:21  <grncdr>e.g. if (tyepof oldThing.diffAgainst == 'function' && oldThing.constructor == newThing.constructor) return oldThing.diffAgainst(newThing, this)
20:16:33  <grncdr>maybe without the constructor checks as well...
20:17:08  * okychanged nick to xko
20:18:45  * calvinfoquit (Ping timeout: 248 seconds)
20:18:55  * mikolalysenkoquit (Ping timeout: 246 seconds)
20:18:57  * calvinfo1quit (Client Quit)
20:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 21]
20:30:19  * mikolalysenkojoined
20:32:12  * fronxjoined
20:38:38  * fronxquit (Ping timeout: 264 seconds)
20:40:04  <jjjohnny_>https://github.com/NHQ/jsynth-sync
20:41:45  <jjjohnny_>https://github.com/NHQ/jsynth-sync/blob/master/example.js
20:53:31  <grncdr>neat
21:00:12  * Maciek416_joined
21:06:44  * Maciek416_quit (Remote host closed the connection)
21:09:58  <defunctzombie>oh man... I just discovered some good things that should help me with my cordova stuff
21:13:04  * xkoquit (Quit: leaving)
21:13:13  * okyjoined
21:19:31  * calvinfojoined
21:23:40  * calvinfoquit (Ping timeout: 246 seconds)
21:24:04  <rowbit>Hourly usage stats: [developer: 1, free: 8]
21:24:37  * ralphtheninjaquit (Ping timeout: 252 seconds)
21:25:47  * mafintoshjoined
21:31:30  * thlorenzjoined
21:36:30  * tilgovi_joined
21:36:39  * thlorenzquit (Ping timeout: 272 seconds)
21:44:26  <owen1>defunctzombie: please share
21:44:50  <defunctzombie>owen1: so I wanted to use stylus and browserify patterns for my app
21:45:04  <defunctzombie>it turns out cordova has hooks which can run arbitrary scripts
21:45:14  * jcrugzzquit (Ping timeout: 264 seconds)
21:45:16  <defunctzombie>so I just made a script which builds in the before_prepare stuff
21:45:30  <defunctzombie>the icing on the cake was patching ripple-emulator
21:45:40  <defunctzombie>to trigger the prepare step on refresh
21:45:45  <defunctzombie>which was easy
21:45:56  <defunctzombie>so now I can use ripple emulator during dev
21:46:04  <defunctzombie>and during build it will all work the same
21:46:35  <owen1>let me google for 'ripple emulator'. i am not sure what is the issue u are solving (: cordova app is just a website.
21:48:01  <owen1>ok. it's an emulator? so instead of using apple's emulator or the built-in android emulator u use ripple?
21:48:27  <Raynos>grncdr: not sure tbh
21:48:57  <defunctzombie>owen1: yep
21:49:05  <defunctzombie>owen1: takes too long to launch the real emulators
21:49:32  <defunctzombie>owen1: the ripple one is nice cause you can just open it in chrome locally
21:49:39  <defunctzombie>much easier to develop in
21:50:31  <owen1>nice
21:51:10  <owen1>what about browserify? all working with cordova, right?
21:51:58  <owen1>defunctzombie: and can't wait for blog post of using ripple for dev (:
21:52:20  <defunctzombie>owen1: yep, I just made hook scripts to build the assets I need
21:52:48  <defunctzombie>heh
22:04:01  * DTrejojoined
22:08:34  <DTrejo>Raynos: was it you who was talking about timezones the other day?
22:09:23  <DTrejo>I am currently implementing a datepicker + timepicker + timezone picker, and looking for a list of timezoneIds/names: e.g. America/Los_Angeles
22:10:12  <rowbit>substack, pkrumins: These encoders are STILL down:
22:10:12  <DTrejo>oh maybe it was jesusabdullah who was talking about this
22:10:16  <substack>DTrejo: ls /usr/share/zoneinfo
22:10:28  <DTrejo>thanks man :)
22:14:25  <Raynos>DTrejo: so i stole a list
22:14:54  <DTrejo>I'm think that I'll force my admins to convert to PST, to just get to feature out the door for now
22:15:25  <DTrejo>Raynos: where is that repo of yours?
22:15:55  <Raynos>Dtrejo: https://github.com/moment/moment-timezone/blob/develop/moment-timezone.json
22:16:02  <DTrejo>ah
22:18:11  <DTrejo>nice looking: http://momentjs.com/timezone/
22:19:38  <Raynos>i dont recommend using moment
22:19:41  <Raynos>but their json file is cool
22:20:17  * calvinfojoined
22:20:35  <DTrejo>mm
22:20:44  <DTrejo>I dont think I'll use it
22:20:46  <DTrejo>Thanks for the link
22:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 23]
22:24:33  <jjjohnny_>Raynos: what u doin 2nite?
22:24:38  * calvinfoquit (Ping timeout: 240 seconds)
22:33:20  * fronxjoined
22:38:05  * fronxquit (Ping timeout: 272 seconds)
22:47:35  <Raynos>jjjohnny_: no plans yet
22:55:13  * thlorenzjoined
22:56:48  * calvinfojoined
22:57:19  * fronxjoined
23:01:25  * calvinfoquit (Ping timeout: 248 seconds)
23:17:38  * mafintoshquit (Quit: Leaving...)
23:19:19  <substack>isaacs: I did `npm publish` for [email protected] but `npm view coverify version` still shows 0.3.3
23:19:36  <substack>unsure how long I need to wait for the changes to propagate
23:22:21  <substack>naming, cache consistency, and off by one errors
23:22:30  <substack>the 2 big open problems in computer science
23:23:20  <substack>hey now it worked!
23:23:29  <substack>so ~5 minutes?
23:24:03  <rowbit>Daily usage stats: [developer: 4, free: 589]
23:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 14]
23:29:16  * st_lukejoined
23:34:33  <isaacs>substack: are you still pointing at the fastly?
23:34:41  <isaacs>substack: the special url in /etc/hosts?
23:35:32  <isaacs>substack: i've been trying to figure out how to make it purge whenever it gets a PUT or DELETE request
23:35:47  <isaacs>substack: but yeah, at the moment, it can be anywhere from 10 to 600 seconds
23:36:17  <isaacs>substack: i'd argue that "cache consistency" is a subclass of "shared state concurrency" but yeah
23:36:51  <isaacs>Anyway, yeah, it's really frustrating.
23:37:10  <isaacs>i wanna figure out a way to tell fastly, "Look, if you get a PUT or a DELETE, all bets are off and your cache is garbage"
23:37:55  <isaacs>on the plus side, their support has been CRAZY helpful and attentive. on the downside, christmas is a thing.
23:38:02  <isaacs>realy, holidays are a terrible idea.
23:38:09  <isaacs>everyone should take time off throughout the year, not all at once.
23:38:18  <isaacs>it's a pretty bad design
23:40:31  <st_luke>isaacs: thats why I hate holidays
23:40:36  <st_luke>especially the end of year ones
23:40:38  <isaacs>yeah
23:40:43  <st_luke>everything kind of shuts down between thanksgiving and new year
23:40:52  <st_luke>except for retail
23:41:36  <st_luke>its kinda crappy if you're not a christmas person
23:42:34  <substack>isaacs: yep I had it pointed at it
23:42:41  <substack>at the fast IP
23:43:07  <isaacs>substack: kewl
23:43:15  <isaacs>the fast-for-everhting-except-cache-purging IP :)
23:43:21  <substack>pretty much
23:43:29  <isaacs>substack, st_luke: you all in oakland? wanna food?
23:43:35  * substackjust got food
23:43:51  * AvianFluquit (Remote host closed the connection)
23:43:51  <st_luke>isaacs: i can do food
23:43:53  * isaacsis blocked and bored
23:44:04  * isaacsand in need of a bike ride somwehre in teh sunshine
23:44:12  * substackis up in the dimond right now
23:44:27  <isaacs>st_luke: why are you not in #nerdtracker?
23:44:53  <st_luke>isaacs: i didnt want to crash the party i guess
23:45:05  <st_luke>im like a vampire, I dont go to things unless invited
23:45:22  <isaacs>st_luke: i'm inviting you. but i'm not a channel op, so i can't actually /invite
23:46:32  <st_luke>i can do food in like 20 minutes, need to take a shower because I'm all sweaty
23:54:05  <isaacs>st_luke: yes, do that
23:57:36  * calvinfojoined
23:58:13  * fronxquit (Remote host closed the connection)