00:00:00
| * ircretary | quit (Remote host closed the connection) |
00:00:08
| * ircretary | joined |
00:02:41
| <st_luke> | JS style functional programming |
00:04:47
| <substack> | you've really got to pick and choose fp topics though since there's a ton of garbage |
00:06:58
| * thl0_zz | joined |
00:07:01
| * thl0_zz | changed nick to thl0 |
00:08:25
| <mikolalysenko> | I tend to avoid a lot of programming language stuff |
00:08:40
| <mikolalysenko> | it is like algorithms and data structures, except it doesn't actually solve real problems |
00:08:56
| <mikolalysenko> | (and I know I will take a lot of flak for that fairl bigoted opinion) |
00:08:59
| <defunctzombie> | http://tryme.jit.su/shtylman/raphael/examples/simple.js |
00:09:51
| * defunctzombie | changed nick to defunctzombie_zz |
00:10:08
| <mikolalysenko> | I suppose I am being a bit too harsh though, since in moderation it does have its place |
00:11:59
| <mikolalysenko> | but I think that compared to things like new algorithms and techniques, PL and related tools are not that big a deal |
00:17:52
| <Raynos> | substack: I like type annotations |
00:17:59
| * mikeal | joined |
00:18:14
| <Raynos> | i dont like functors, categories & monads, too confusing |
00:18:26
| <Raynos> | i miss the ability to annotate my functions with their types for readablity |
00:21:05
| * mikeal1 | joined |
00:21:18
| * mikeal | quit (Read error: Connection reset by peer) |
00:22:48
| <Ralt> | Raynos: you can do it with comments... function f /* int */ (arg1 /* string */, arg2 /* User */) |
00:22:58
| <Ralt> | although it's ugly, I guess. |
00:22:59
| <Raynos> | yeah thats ugly |
00:23:52
| <Raynos> | i would prefer type gaurd syntax |
00:23:59
| <Raynos> | function f::int (arg1::string, arg2::User |
00:24:13
| <Raynos> | they dont have to mean anything |
00:24:16
| <Raynos> | just allow me to do it |
00:26:35
| <Ralt> | well, use typescript :P |
00:26:46
| <Raynos> | no u |
00:28:54
| * wolfeidau | quit (Remote host closed the connection) |
00:31:00
| * Benvie | joined |
00:35:54
| * mikolalysenko | quit (Ping timeout: 256 seconds) |
00:36:12
| <Raynos> | Benvie: how do I transpile ES6 to ES5 today? |
00:36:22
| <Raynos> | and how do I integrate it into browserify :D |
00:37:40
| <Benvie> | Raynos |
00:37:52
| <Benvie> | wow |
00:38:30
| * mikolalysenko | joined |
00:38:47
| <Benvie> | this conversation needs to happen at a meeting sometime |
00:38:52
| <Benvie> | holy shit |
00:39:31
| <Benvie> | meetup |
00:39:43
| <substack> | how do I `module.exports=` in es6 |
00:40:04
| <Raynos> | you do just that |
00:40:09
| <Raynos> | and ignore the entire es6 module system |
00:40:14
| <Benvie> | export function mything(){} |
00:40:23
| <Raynos> | because when I use an es6 to es5 transpiler |
00:40:30
| <Raynos> | im going to fucking whitelist useful es6 features one at a time |
00:40:50
| <Raynos> | Benvie: that exports a named token |
00:40:56
| <Benvie> | wow |
00:41:00
| <Raynos> | substack wants export=function mything() {} |
00:41:48
| <Benvie> | is there a place in SF everybody gets shitfaced togthether? Because I need to be there |
00:41:55
| <Benvie> | holy shit |
00:42:15
| <Raynos> | http://www.meetup.com/beerjs/ |
00:42:22
| <Raynos> | Benvie: there aren't that many events I go too |
00:42:33
| <Benvie> | no I mean right now |
00:42:34
| <substack> | I don't go into sf very often |
00:42:40
| <Raynos> | xd |
00:43:06
| <substack> | twice a month maybe |
00:43:09
| <Raynos> | Benvie: but seriously whats a good ES6 transpiler? |
00:43:14
| <Benvie> | oh |
00:43:42
| <Benvie> | uh traceur is the best...but nothing really good exists |
00:44:05
| <Benvie> | I have stated what needs to exist...but have not made it yet |
00:44:22
| <substack> | I really don't see how I can start using es6 |
00:44:38
| <Benvie> | without a good transpiler |
00:44:55
| <substack> | also the module system is useless to me |
00:45:05
| * stlsaint | joined |
00:45:12
| <substack> | I can't export a single function without forcing consumers to use the same name as the export |
00:45:27
| <Benvie> | import { func } from 'func' |
00:45:44
| <substack> | that only works when 'func' exports a function called func |
00:45:49
| <substack> | that is a really bad design decision |
00:45:56
| * mikolalysenko | quit (Ping timeout: 246 seconds) |
00:45:58
| <Raynos> | Benvie: what is the statement? |
00:45:59
| <substack> | it forces consumers to use the name that the module author chose |
00:46:06
| <Benvie> | well it should if func was made by substack |
00:46:12
| <Raynos> | substack: they are going to fix es6 modules |
00:46:16
| <Raynos> | we shouted hard enough |
00:46:20
| <substack> | Raynos: I'm really skeptical about that. |
00:46:26
| <substack> | all the bad things are still in there |
00:46:29
| <Benvie> | fix in what way? |
00:46:40
| <Raynos> | export token |
00:46:43
| <Benvie> | single export was in for about 37 seconds and now it's not |
00:46:48
| * mikolalysenko | joined |
00:46:49
| <Raynos> | let myname = import "dependency" |
00:46:57
| <substack> | Benvie: single export is the only thing that matters |
00:47:05
| <Raynos> | Benvie: exporting multiple tokens is stupid :D |
00:47:06
| <Benvie> | unless you have newer information than me |
00:47:10
| <Benvie> | pretty sure you do not |
00:47:21
| <substack> | Benvie: multi-export is useless |
00:47:22
| * wolfeidau | joined |
00:47:29
| <substack> | the point of modules is that they do a single thing |
00:47:36
| <Raynos> | https://github.com/rwldrn/tc39-notes/blob/master/es6/2013-03/mar-12.md#use-case-single-export-modules |
00:47:39
| <Benvie> | you should be in #jslang on mozlla'sa server btw |
00:47:57
| <substack> | if you don't have a module system already then you'll write code that you go around calling a "module" that does a kitchen-sink's worth of things |
00:48:00
| <Benvie> | no I was saying |
00:48:06
| <Benvie> | it will not be fixed |
00:48:06
| <substack> | but once you have a module system then you end up just doing a single thing at a time |
00:48:10
| <substack> | which is properly modular |
00:48:16
| <Benvie> | single export will not happen in es6 |
00:48:16
| <substack> | in node this happened |
00:48:19
| <Benvie> | just saying |
00:48:23
| <substack> | node started with exports.foo = ... |
00:48:27
| <substack> | like es6 is now |
00:48:40
| <substack> | but then everybody realized that was a stupid way to do it |
00:48:47
| <Raynos> | Benvie: then fuck es6 modules |
00:48:55
| <substack> | and now pretty much all the modules worth using just have a single module.exports = ... function |
00:49:02
| <Benvie> | the view is that destructutring is good enough. Not claiming...just the messenger |
00:49:23
| <substack> | destructuring is solving a problem that doesn't even exist if modules can only export a value |
00:49:28
| <Raynos> | substack: and even the complex ones can use module.exports = object |
00:49:42
| <substack> | yep! |
00:49:47
| <substack> | it's properly fundamental and basic |
00:49:55
| <Raynos> | anyway |
00:49:57
| <substack> | instead of the litany of special cases that the current es6 modules has |
00:49:58
| <Raynos> | fuck es6 modules |
00:50:01
| <Raynos> | i want to use other features |
00:50:02
| <Benvie> | I even started to implement exports =... |
00:50:04
| <Raynos> | like => |
00:50:05
| <Raynos> | and pals |
00:50:07
| <Benvie> | but then they took it out |
00:50:18
| <Benvie> | er export = |
00:50:28
| <substack> | Benvie: and I don't blame them. there are already too many special cases |
00:50:34
| <Benvie> | no idea the reasoning |
00:50:54
| <Benvie> | well the module system is...behind schedule |
00:50:59
| <substack> | they should just get rid of all the special cases and all the destructuring and just return a single value |
00:51:15
| <Benvie> | it's pushing back ES6 from this year to next year |
00:51:21
| <substack> | good |
00:51:24
| <Benvie> | so I guess that's why |
00:51:25
| <Raynos> | then drop the es6 module system |
00:51:26
| <substack> | es6 is *forever* |
00:51:28
| <Raynos> | drop it |
00:51:31
| <substack> | yes drop it |
00:51:34
| <Raynos> | scope creep |
00:51:38
| <substack> | it's not well-conceived |
00:51:43
| <Benvie> | can't happen, not entirely |
00:51:50
| <substack> | it's a hallmark of waterfall anyways to bucket all the features in a single monolithic release |
00:52:05
| <substack> | either drop es6 modules or stop doing waterfall |
00:52:11
| <Benvie> | but I did make a proposal for how it works on the import side |
00:52:36
| <Raynos> | substack: or both :D |
00:52:41
| <substack> | ideally! |
00:52:44
| <Benvie> | basically all the shit in ES6..."Symbol", "Proxy", etc. is supposed to be imported as modules |
00:52:48
| <Benvie> | system modules |
00:52:52
| <Benvie> | Iterator |
00:52:56
| <substack> | and this is why committees are a terrible way to write software |
00:53:05
| <substack> | es6 is the wrong way to iterate on a design |
00:53:14
| <Benvie> | instead of on the global object automatically |
00:53:47
| <Benvie> | says nothing about how to export values....just import them |
00:54:04
| <Benvie> | since the system can do whatever the fuck it wants |
00:54:37
| <substack> | I'm just going to keep writing reusable software and the hell with whatever es6 wants to dictate by fiat |
00:55:01
| <substack> | with no backing in real-world usage |
00:55:10
| <Benvie> | fortunately you can mostly just use what you find reasonable |
00:55:11
| <substack> | upon everybody forever because it's impossible to ever remove any feature |
00:55:21
| <Benvie> | when it's supported anyway |
00:55:31
| <substack> | Benvie: and I find node's module system perfectly adequate |
00:55:38
| <Benvie> | arrow functions just landed in firefox nightly, btw |
00:55:42
| <substack> | I see no reason to adopt yet another module system that has 0 code that I can use written for it |
00:55:48
| <Raynos> | Benvie: anyway how I transpile? |
00:56:24
| <substack> | especially not a module system that is strictly inferior to the one I'm presently using |
00:56:34
| <Benvie> | you need to convert all operators to functions and then implement the lambda between es6 and es3 as js code |
00:56:39
| <Benvie> | or es5 and e6 |
00:56:57
| <substack> | Raynos: use my fork of esprima |
00:57:07
| <substack> | to tinker with operators |
00:57:11
| <Raynos> | esprima parses es6? |
00:57:11
| <Benvie> | yeah and esprima |
00:57:16
| <Benvie> | yes |
00:57:21
| <Benvie> | a branch of it does |
00:57:31
| <Benvie> | it's how continuum works |
00:57:36
| <substack> | Raynos: https://github.com/thlorenz/traceurify |
00:57:36
| <Raynos> | anyway i dont want to write one :P |
00:57:38
| <Raynos> | i want to use one |
00:57:52
| <Benvie> | ok well I may make one |
00:57:59
| <substack> | the linkis broken now ;_; |
00:58:00
| <Benvie> | I will let you know sometime soon |
00:58:15
| <substack> | ok it's https://github.com/thlorenz/es6ify now |
00:58:20
| <Benvie> | learning mozilla stuff has drained the fuck out of me |
00:58:45
| <substack> | Raynos: looks like you can just do -t es6ify |
00:58:49
| <Benvie> | I do still want to make an es6 to es3 transpiler |
00:59:06
| <Raynos> | but is traceur any good? |
00:59:08
| <Benvie> | or es6 to es5 at least |
00:59:10
| <substack> | no idea |
00:59:11
| <substack> | ask thl0 |
00:59:24
| <Benvie> | yeah if you don't want proxies and shit |
00:59:27
| <Raynos> | does it generate non retarded code |
00:59:33
| <substack> | Benvie: anyways send my regards to es6 |
00:59:34
| <Benvie> | but otherwise it's pretty good |
00:59:37
| <thl0> | Raynos: traceur seems to be ok |
00:59:38
| <Raynos> | maybe i should just write my own |
00:59:47
| <Raynos> | i want one that translates to clean js |
00:59:54
| <Raynos> | => should translate into an anonymous function |
00:59:56
| <Benvie> | it uses the fuck out of try catch throw |
01:00:09
| <Benvie> | that's how it implements block scope |
01:00:11
| <Benvie> | sooooo |
01:00:11
| <thl0> | Raynos: certain features are hard to transpile otherwise |
01:00:20
| <Benvie> | kind of retarded code |
01:00:28
| <thl0> | Benvie: try catch is the only way to express these things in ES5 |
01:00:32
| <Raynos> | thl0: then i wont use those features |
01:00:34
| <thl0> | i.e. block scope |
01:00:38
| <Raynos> | well for let |
01:00:41
| <Raynos> | just transpile it into var |
01:00:45
| <Raynos> | and fuck block scoping |
01:00:50
| <Benvie> | without making functions for scope, I know |
01:00:54
| <Raynos> | it doesnt have to be correct :D |
01:00:59
| <substack> | thl0: maybe if enough es6 folks start using es6ify with browserify they will realize what junk es6 modules are compared to node-style |
01:01:00
| <thl0> | Raynos: that'd be confusing |
01:01:17
| <thl0> | substack: not supporting modules ;) |
01:01:18
| <substack> | so I like that this project exists |
01:01:20
| <thl0> | only commonjs |
01:01:21
| <substack> | hahaha |
01:01:23
| <Benvie> | the only other type of scope in ES5 is catch scope, no other option |
01:01:38
| <Raynos> | in that case |
01:01:42
| <Benvie> | well, unless you make a partial or full runtime |
01:01:43
| <thl0> | substack: even traceur can't know what they'll cook up |
01:01:44
| <Raynos> | dont support let |
01:01:47
| <substack> | yeah hopefully they just drop modules and stop doing waterfall |
01:01:59
| <thl0> | substack: there are two options |
01:01:59
| <Raynos> | substack: es6 is another es4 |
01:02:02
| <Benvie> | I think it can be done better but I do not currntly have time to proove it |
01:02:07
| <substack> | Raynos: I sure hope so. |
01:02:10
| <thl0> | 1: use commonJS only (recommended) |
01:02:28
| <thl0> | 2: use es6 modules only, transpile into one file yourself |
01:02:47
| <thl0> | requires won't work for 2nd, so makes no sense for es6ify to support it |
01:03:58
| <thl0> | Raynos: substack: Benvie: destructuring is nice though and default params |
01:04:17
| * wolfeidau | quit (Remote host closed the connection) |
01:04:22
| <substack> | thl0: not really disputing those |
01:04:25
| <substack> | just the module system |
01:04:30
| <substack> | such garbage |
01:04:30
| * yorick | quit (Remote host closed the connection) |
01:05:05
| <thl0> | substack: so es6ify is perfect then \o/ |
01:05:17
| <Benvie> | wow my glasses just broke |
01:05:28
| <Benvie> | I am fucked |
01:05:34
| <thl0> | substack: supports only es6 the good parts |
01:06:12
| <substack> | thl0: write a blog post |
01:06:16
| <substack> | "es6: the good parts" |
01:06:37
| <thl0> | substack: ;) should leave that to Domenic_ he is way more involved in it |
01:07:28
| <substack> | I'm pretty pleased with how transforms are working in browserify |
01:07:40
| <substack> | especially with how they tie into the source map pipeline |
01:07:48
| <thl0> | substack: agreed - very powerful yet simple |
01:08:05
| <Raynos> | thl0, Benvie: i want a really nice one to one transpiler of es6 |
01:08:07
| <thl0> | substack: kinda like unix tools ;) |
01:08:17
| <Raynos> | i.e. only support features that trivially transpiler cleanly |
01:08:36
| <Raynos> | let { foo: bar, baz: fuuz } = require("./thing") |
01:09:14
| <Raynos> | var thing__ = require("./thing"); \n var foo = thing__.bar; \n var baz = thing__.fuuz |
01:09:14
| <thl0> | Raynos: look at this bundle: http://thlorenz.github.com/es6ify/js/bundle.js |
01:09:24
| <Raynos> | thl0: I did, my eyes bled |
01:09:39
| <thl0> | Raynos: whatever doesn't use the traceur.runtime is probably easily transpiled |
01:09:41
| <Raynos> | $__0 |
01:09:54
| <thl0> | Raynos: all the other stuff probably not (i.e. generators) |
01:10:01
| <Benvie> | Raynos: I'll let you know. Use traceur for now |
01:10:12
| <Raynos> | id rather |
01:10:13
| <thl0> | Raynos: look at the bottom (top is the crazy runtime) |
01:10:14
| <Raynos> | use esprima |
01:10:16
| <Raynos> | and do it myself |
01:10:24
| <Benvie> | maybe |
01:10:28
| <thl0> | Raynos: good luck - talk to you in a year ;) |
01:10:34
| <Raynos> | for (var items = [], $__0 = 1; $__0 < arguments.length; $__0++) items[$__0 - 1] = arguments[$__0]; |
01:10:41
| <Raynos> | thl0: Ill just implement one feature at a time |
01:10:45
| <Raynos> | => should be an hours of work |
01:10:50
| <Benvie> | I need to go drink a lot to forget how I just broke the shit out of my glasses |
01:11:16
| <thl0> | Raynos: good idea - one feature == one module |
01:11:36
| <thl0> | Raynos: if people take on just one feature, it could be done |
01:11:45
| <Raynos> | ill do => :D |
01:12:11
| <Benvie> | implement Proxy in ES5 -> cancel all life plans |
01:12:32
| <thl0> | Benvie: not sure why you couldn't implement blockscope by wrapping in anonymous function |
01:12:58
| <Raynos> | Benvie: I wont implement it |
01:12:58
| <Benvie> | you can, except for arguments and performance |
01:13:06
| <Raynos> | thl0: fuck block scope |
01:13:10
| <Raynos> | just dont use let |
01:13:19
| <Benvie> | const is good |
01:13:22
| <thl0> | Raynos: just let let be? |
01:13:31
| <thl0> | Benvie: agreed |
01:13:42
| <Raynos> | only implement things that are trivial |
01:13:58
| <Benvie> | I use const in my runtime stuff every time a value never changes |
01:14:04
| <thl0> | Raynos: sounds like a plan -- GO! |
01:14:08
| <Benvie> | not just for CONSTANTS |
01:14:18
| <Raynos> | later tonight |
01:14:27
| <thl0> | Benvie: const is misleading it should be final or immutable |
01:14:48
| <Raynos> | thl0: its going to be bloody expensive |
01:14:50
| <Raynos> | to write a transform |
01:14:56
| <Raynos> | for each es6 feature |
01:15:02
| <Raynos> | each through stream will have to parse it |
01:15:06
| <Benvie> | ES5 only reserved const, of those three, so it is what it is |
01:15:10
| <Raynos> | substack: ^ |
01:15:15
| <thl0> | Raynos: I'll do a kickstarter for each and have the community pay |
01:15:16
| <Benvie> | also those two are way longer |
01:15:17
| <thl0> | ;) |
01:15:24
| <Raynos> | I want one es6 feature per transform through stream |
01:15:30
| <Raynos> | but i dont want each transform to parse it |
01:15:51
| <Benvie> | "have the community pay" is a great slogan for....anything |
01:16:22
| <thl0> | Raynos: back to es6ify (caching) for now - tomorrow I'll swap traceur with your implementation ? :P |
01:16:48
| * ralphtheninja | quit (Ping timeout: 252 seconds) |
01:16:50
| <Raynos> | no I want one transform per es6 feature :P |
01:17:16
| <Benvie> | yeah Raynos: YOUR TRANSPILER WHICH SHOULD EXIST IN THE NEXT FEW HOURS? |
01:17:19
| <thl0> | Raynos: okidoki - 'let's see if yours compiles faster than traceur |
01:17:20
| <Benvie> | correct? |
01:17:28
| <substack> | Raynos: implement the transforms to export a second function to take a raw ast |
01:17:50
| <substack> | Raynos: then implement an es6 group transform module that threads the ast through all the transforms |
01:17:58
| <Benvie> | I also have a transpiler |
01:18:00
| <thl0> | Raynos: talking about ast that's probably a good place to start i.e esprima6 |
01:18:02
| <Benvie> | I actually do |
01:18:16
| <Ralt> | hm |
01:18:21
| <Raynos> | hean |
01:18:29
| <Ralt> | I see you guys mentioning that try catch creates a new scope |
01:18:31
| <Raynos> | ill use esprima6 |
01:18:34
| <Ralt> | which is true --- in most browsers |
01:18:40
| <Ralt> | not in some browsers though. |
01:18:51
| <Benvie> | https://github.com/Benvie/js-astify/blob/master/transformers/es6.js |
01:19:32
| <thl0> | Raynos: you'd have to make esprima6 ;) |
01:19:43
| <Benvie> | kind of outdated...but... |
01:20:46
| <Raynos> | nah substack says |
01:20:52
| <Raynos> | taht esprima already parses es6 |
01:21:11
| <thl0> | Raynos: really? wasn't aware of that |
01:21:30
| <Benvie> | yes |
01:21:37
| <Benvie> | it has an es6 branch |
01:21:50
| <Raynos> | substack: does your fork of esprima include the es6 stuff? |
01:21:52
| <Benvie> | it's how continuum parses es6 |
01:21:54
| <thl0> | Raynos: well then it should be a simple all-nighter to get a transpiler going |
01:22:28
| <Raynos> | ... |
01:22:30
| <Raynos> | its like 1 hour |
01:22:34
| <Raynos> | to implement => |
01:22:36
| <Raynos> | thats all I want |
01:22:42
| <Raynos> | then ill rewrite all my modules with => xd |
01:22:43
| <Raynos> | Oh fuck |
01:22:45
| <Raynos> | source maps ;_; |
01:22:59
| <Raynos> | thl0: how i sourcemap? |
01:23:18
| <Benvie> | I gave you a link |
01:23:20
| <thl0> | Raynos: traceur uses the source-map module by mozilla |
01:23:22
| <Benvie> | go to it |
01:23:38
| <substack> | Raynos: no just a hack to let you define custom unary keywords |
01:23:42
| <thl0> | Raynos: it has a sourcemap generator - you can use that |
01:23:46
| <Benvie> | oh hah sourcemaps are fitzgen |
01:24:05
| <substack> | it still needs a thing to let n-ary keywords work |
01:24:11
| <substack> | and binary ops |
01:24:21
| <thl0> | Raynos: but to actually keep track of lines and columns - gnerated vs original is the generators (your) job |
01:24:24
| <Ralt> | Raynos: you know, if you want =>, you could use coffeescript... |
01:24:34
| <Benvie> | landing in firefox devtools like as we speak |
01:24:44
| <Ralt> | fitzgen? |
01:24:49
| <Raynos> | Ralt: Im going to hurt you |
01:24:52
| <substack> | Benvie: does sourceContentsURL work in firefox yet? |
01:24:59
| <Ralt> | Raynos: :P |
01:25:21
| <Benvie> | guy who made sourcemaps for firefox devtools. Spent like the last two years on it |
01:25:23
| <Benvie> | cooldude |
01:25:55
| <Benvie> | susbstack: pretty sure it does not yet. But he's working on it |
01:25:59
| <Ralt> | ff devtools are becoming usable? |
01:26:10
| <Benvie> | yeah, this quarter |
01:26:12
| <thl0> | Benvie: substack: think Firefox has them, but simply going to http://thlorenz.github.com/es6ify/ can test that (don't have it installed) |
01:26:14
| <Benvie> | they kind of are now |
01:26:20
| <Ralt> | compared to, say, firebug or chrome dev tools? |
01:26:27
| <Benvie> | but missing some stuff that's in the works |
01:26:30
| <Benvie> | yeah |
01:26:36
| <Ralt> | coo |
01:26:37
| <Ralt> | l |
01:26:41
| <Ralt> | it was time |
01:26:50
| <Benvie> | they will be better than the rest in the next 3-6 months |
01:26:57
| <Ralt> | awesome |
01:27:02
| <Ralt> | maybe I'll get back to ff then |
01:27:36
| <Benvie> | there's a 10 person team working on them now |
01:28:26
| <substack> | that actually makes me less optimistic about their outcome, not more :p |
01:29:13
| <substack> | 10 is above dunbar's number |
01:29:32
| <substack> | oh whoops, wrong number |
01:29:35
| <Benvie> | it's also swiching to use the addon sdk's module system...which replicates node's module system closely |
01:29:39
| <Benvie> | hopefully that helps? |
01:30:08
| * chrisdickinson | quit (Quit: ZNC - http://znc.sourceforge.net) |
01:32:33
| * chrisdickinson | joined |
01:32:39
| <Raynos> | _Domenic: how do I tell npm to ignore EPEER errors? |
01:35:28
| <thl0> | tempted to tweet another 'these recruiters' thing |
01:35:32
| <thl0> | -- Integrate UI into design using JS/jQuery and AJAX |
01:35:44
| <thl0> | :) |
01:38:14
| * defunctzombie_zz | changed nick to defunctzombie |
01:38:31
| * marcello3d | joined |
01:40:14
| <defunctzombie> | everyone working on modules needs to just look at lua and be done with it hahaha |
01:41:51
| * jcrugzz | joined |
01:47:30
| * st_luke | quit (Remote host closed the connection) |
01:48:07
| <Ralt> | seriously |
01:48:13
| <Ralt> | ff needs autoconf 2.13 to build |
01:48:24
| <Ralt> | I have 2.69 installed... |
01:49:09
| * sorensen_ | joined |
01:49:10
| * sorensen_ | quit (Client Quit) |
01:49:55
| <thl0> | defunctzombie: if there was a lua to js compiler, luaify would be next ;) |
01:50:05
| <defunctzombie> | thl0: hahaha |
01:50:13
| <defunctzombie> | thl0: I hate lua syntax |
01:50:17
| <defunctzombie> | I want to merge lua and javascript |
01:50:26
| <defunctzombie> | take all the shit away from js |
01:50:30
| <thl0> | defunctzombie: get the worst of both worlds? |
01:50:43
| <defunctzombie> | get the best :) |
01:51:12
| <thl0> | defunctzombie: so take modules from lua and syntax from js ? |
01:51:20
| <defunctzombie> | basically |
01:51:24
| <defunctzombie> | and cut some of the fat from js |
01:51:48
| <defunctzombie> | I just get annoyed with the 'local' and 'end' and some of the other syntax nonsense |
01:51:59
| <thl0> | defunctzombie: maybe you could write a new language that combines all these ideas |
01:52:04
| <defunctzombie> | but I am used to { } |
01:52:06
| <thl0> | defunctzombie: write a to js transpiler for it |
01:52:12
| <defunctzombie> | thl0: one day |
01:52:16
| <thl0> | defunctzombie: call it coffee script :P |
01:52:22
| <defunctzombie> | yes!! |
01:52:31
| <defunctzombie> | actually I think the name will be jscript |
01:52:35
| <defunctzombie> | just to confuse people |
01:52:49
| <thl0> | defunctzombie: you'd run into copyright issues with Microsoft |
01:52:54
| <defunctzombie> | damn |
01:52:58
| <defunctzombie> | I will call it dz |
01:53:17
| <thl0> | defunctzombie: not at all obvious how you came up with that ;) |
01:53:22
| <defunctzombie> | :) |
01:53:30
| <chrisdickinson> | dumb question: is there an easy way to list all of the listeners registered that are keeping node.js from exiting? |
01:57:24
| <substack> | chrisdickinson: process._getActiveHandles() |
01:57:58
| <thl0> | someone needs to leak this information ;) |
01:57:58
| <chrisdickinson> | thanks! |
01:59:31
| <thl0> | leaked! |
02:00:00
| <chrisdickinson> | weird. it didn't list anything. |
02:01:37
| <thl0> | chrisdickinson: shoot I leaked wrong info - that's gotta be confusing |
02:02:06
| <chrisdickinson> | well |
02:02:12
| <chrisdickinson> | it's not wrong info, necessarily |
02:02:32
| <chrisdickinson> | i'm just confused since something is keeping node open, but it's not got an active handle |
02:02:34
| <thl0> | chrisdickinson: actually I do hope (in this case) that you are wrong ;) |
02:02:55
| * thl0 | sighs in relief |
02:04:49
| <chrisdickinson> | oh this is bizarre |
02:05:35
| * Ikeyman | joined |
02:06:42
| <chrisdickinson> | something is continuing to read from fs |
02:06:51
| <chrisdickinson> | long after the fact |
02:09:10
| * chrisdickinson | is confused |
02:10:33
| * Ikeyman | part |
02:11:37
| <chrisdickinson> | so it looks like it's caught in a loop of reading 0 length |
02:15:25
| * ralphtheninja | joined |
02:30:17
| * mikeal1 | quit (Quit: Leaving.) |
02:39:58
| * mikeal | joined |
02:46:48
| * marcello3d | quit (Remote host closed the connection) |
02:47:19
| * mikolalysenko | quit (Ping timeout: 256 seconds) |
02:47:26
| * marcello3d | joined |
02:50:58
| <Domenic_> | Raynos: --force should work |
02:51:15
| <Raynos> | Domenic_: https://gist.github.com/Raynos/73c93fb887ae5e35c066 |
02:51:51
| <Domenic_> | woah there is a lot of stuff here |
02:51:54
| <Domenic_> | reading... |
02:51:55
| * marcello3d | quit (Ping timeout: 260 seconds) |
02:52:43
| <Domenic_> | thl0: I like traceurify. I would make the main export an es6 transform, but a sub-export be customizable. E.g. `.transform(traceurify)` vs. `.transform(traceurify.withOptions({ ... }))` |
02:53:52
| <thl0> | Domenic_: way ahead of you :) |
02:54:13
| <thl0> | Domenic_: https://github.com/thlorenz/es6ify/blob/master/index.js#L51-L53 |
02:54:27
| <thl0> | Domenic_: and es6ify it is, already published |
02:55:34
| <Domenic_> | simple export IS IN |
02:55:41
| <Domenic_> | (still reading, not scrolled down yet) |
02:55:59
| <chrisdickinson> | Domenic_: simple export as in "export an expression"? |
02:55:59
| <Domenic_> | Benvie is not up to date. |
02:56:01
| <substack> | oh sweet! |
02:56:04
| * mikolalysenko | joined |
02:56:06
| <substack> | Domenic_: what does it look like? |
02:56:29
| <thl0> | Domenic_: maybe withOptions is better than bry().transform(es6ify.transform(..)) |
02:56:38
| <Benvie> | apologies, Domenic_ is probably correct |
02:56:51
| <Benvie> | been a long, tiring two months for me |
02:56:52
| <Domenic_> | ES6 is not waterfall, it is incrementally implemented and prototyped in browsers. Taking snapshots that represent the progress made does not make something waterfall. |
02:57:14
| <substack> | Domenic_: the release cycle very definitely IS waterfall in that there is a monolithic release |
02:57:27
| * thl0 | changed nick to thl0_zz |
02:57:32
| <Benvie> | of the spec |
02:57:34
| <substack> | these features aren't trickling out piecemeal |
02:57:45
| <substack> | they are experimenting piecemeal which is great |
02:57:48
| <Benvie> | implementation is what Domenic_ referrs to |
02:58:14
| * thl0_zz | quit (Remote host closed the connection) |
03:02:26
| <Domenic_> | ok I read everything and scrolled down |
03:02:41
| <Domenic_> | substack: they tag their versions less frequently, that doesn't make it waterfall. |
03:03:15
| <substack> | Domenic_: the final outcome of the committee will be a spec |
03:03:18
| <substack> | not code |
03:03:19
| <substack> | a spec |
03:03:28
| <Domenic_> | yes, so that multiple browsers can implement it |
03:03:30
| <Domenic_> | that's not a bad thing |
03:04:00
| <substack> | so all the work cascades downward from the spec to browser vendors |
03:04:20
| * st_luke | joined |
03:04:20
| <Domenic_> | single export syntax is not nailed down yet... I probably shouldn't tell you guys what it is yet. If you want to know that kind of stuff be nice to TC39 members instead of badmouthing them. It's not my place to say what they're working on just because they share it with me. |
03:04:28
| <Domenic_> | substack: no |
03:04:51
| <Domenic_> | it goes strawman -> proposal -> browser implementation -> spec draft -> refinement -> final spec in tagged version |
03:05:27
| <Domenic_> | re: single export syntax not being nailed down, what I meant, is that they think they know what it is going to be, but aren't confident and so haven't announced it or written it down anywhere. |
03:06:09
| <hij1nx> | Domenic_: LOLOLOLOL. |
03:06:15
| <substack> | this is part of the problem I think |
03:06:23
| <substack> | that has caused so much of a disconnect |
03:06:37
| <substack> | how they need to feel "confident" in order to voice ideas |
03:06:43
| <substack> | very backwards and insular |
03:06:45
| <Domenic_> | they've seen what happens if they don't! |
03:06:50
| <Domenic_> | they get badmouthed from all sides |
03:06:56
| <Domenic_> | you guys are *not* helping them be more open |
03:07:01
| <substack> | they're misinterpreting criticism |
03:07:10
| <Domenic_> | your constant negativity and completely non-constructive behavior is not helping |
03:07:17
| <Domenic_> | "misinterpreting" things like "fuck standards bodies"? |
03:07:26
| <Domenic_> | or "ES6 is the new ES4"? |
03:07:31
| <Domenic_> | That is *not* constructive. |
03:07:33
| <st_luke> | thats me |
03:07:35
| <substack> | I just elaborated why standards bodies are a bad idea |
03:07:37
| <hij1nx> | Domenic_: true though |
03:08:02
| <hij1nx> | "Dominic, keep this a secret, but were planning to announce an idea" |
03:08:12
| <substack> | ^^^ |
03:08:14
| <Domenic_> | substack: standards bodies composed of implementers are not a bad idea. |
03:08:16
| <Domenic_> | what |
03:08:25
| <Domenic_> | they discuss with community members who don't badmouth them in public |
03:08:27
| <Domenic_> | is that bad? |
03:08:35
| <substack> | that's horrible |
03:08:42
| <Domenic_> | why |
03:08:52
| <st_luke> | it makes literally no difference to anyone if I criticize es6 on the internet. nobody in tc39 has any fucking idea who I am |
03:08:55
| <substack> | because if you only listen to people who you already agree with |
03:08:59
| <Domenic_> | I've shown that i'm willing to work constructively with them |
03:09:01
| <Domenic_> | that is *not* true |
03:09:11
| <Domenic_> | I disagreed strongly with several aspects of ES6 modules *and got them changed* |
03:09:16
| <Domenic_> | Because my criticism was constructive |
03:09:32
| <Domenic_> | And I worked *with* people like Yehuda and Dave, understanding that they want what's best, instead of saying fuck them and the standards bodies they rode in on. |
03:09:53
| <hij1nx> | Domenic_: Yahooda, that guy that raised all that money to make ruby.app? |
03:10:14
| <Domenic_> | sigh |
03:10:18
| <hij1nx> | Dave is awesome though |
03:10:31
| <hij1nx> | He writes great javascript books |
03:10:51
| <substack> | Domenic_: I hate that we even have a committee to decide for everyone by fiat |
03:10:54
| <hij1nx> | and he's a propeller head |
03:11:03
| <Domenic_> | substack: what would your preferred model be |
03:11:10
| <Domenic_> | because literally someone has to implement the features |
03:11:14
| <substack> | within that body there are certainly more and less terrible features in narrow scope |
03:11:25
| <Domenic_> | and those people get together and talk about things and agree on them |
03:11:29
| <Domenic_> | and then poof we call that a committee |
03:11:35
| <Domenic_> | oh wait I forget a step |
03:11:45
| <Domenic_> | they get input from community members who are also on the committee |
03:11:50
| <hij1nx> | committee or club? |
03:12:13
| <st_luke> | are there any women in tc39? |
03:12:24
| <hij1nx> | that's it TC39 is sexist. |
03:12:29
| <Domenic_> | hahah |
03:12:30
| <hij1nx> | #trolol |
03:12:43
| <hij1nx> | clubs are shitty |
03:12:55
| <substack> | Domenic_: first, eliminate how ecma seats are awarded |
03:13:00
| <Domenic_> | I bet with appropriate stirring of the pot you could really get an internet firestorm going over TC39 is sexist. |
03:13:17
| <hij1nx> | Domenic_: stupid. |
03:13:25
| <substack> | there is *some* community representation on tc39 but it is by no means the bulk of the membership |
03:13:34
| <Domenic_> | sure, the bulk is implementers, it's true |
03:14:46
| <substack> | and I really dislike how companies "send a delegate" to tc39 |
03:14:52
| <substack> | like some sort of corporate fiefdomism |
03:14:57
| <substack> | which is probably a hold-over from ecma |
03:14:59
| <st_luke> | if I'm going to stir up the internet about tc39 it's not going to be over them being sexist |
03:15:02
| <substack> | get rid of that please |
03:15:16
| <Domenic_> | substack: ??? |
03:15:22
| <Domenic_> | is it the terminology you dislike, or...? |
03:16:03
| <Domenic_> | someone within the company volunteers to spend their time involved in this stuff... would "volunteer" make you happier? |
03:16:12
| <substack> | it's how only bodies with sufficient klout can ever "send a delegate" |
03:16:38
| <Domenic_> | any nonprofit can |
03:16:42
| <substack> | bodies with diminishing relevance like the jquery foundation |
03:16:47
| <Domenic_> | and any for-profit that pays like $15k/year |
03:17:14
| <substack> | this doesn't reflect how open source happens anymore |
03:17:57
| <hij1nx> | Domenic_: http://d.pr/i/ORCH |
03:18:10
| <st_luke> | I don't think it's fair to criticize tc39 for not changing as fast as open source has |
03:18:41
| <substack> | st_luke: the very idea of tc39 and standards bodies is steeped in the old model |
03:18:43
| <st_luke> | but they should acknowledge it and possibly change the org structure to keep up |
03:18:51
| <Domenic_> | i'm also not sure open-source is the right model for designing a language. (Not sure though.) |
03:18:58
| <Domenic_> | It doesn't provide a lot of stability |
03:19:06
| <substack> | beautiful chaos! |
03:19:19
| <Domenic_> | I think the stuff we've been doing with the Promises/A+ spec on GitHub is interesting though, kind of a hybrid. |
03:19:21
| <st_luke> | substack: agreed, but they can't change overnight |
03:19:28
| <st_luke> | promises |
03:19:29
| * wolfeidau | joined |
03:19:37
| <Domenic_> | ^_^ |
03:19:44
| <hij1nx> | st_luke: i promise to never use promises for anything. ever. |
03:19:49
| <substack> | Domenic_: which is exactly why I find these things so burdensome |
03:20:05
| <substack> | I have only ever worked with open collaborative systems |
03:20:11
| <substack> | where nobody can force anybody to do anything |
03:20:37
| <st_luke> | most of the people on tc39 seem like well intentioned people |
03:20:42
| <st_luke> | except yahooda |
03:20:43
| <Domenic_> | substack: I can understand that mismatch. Although, I'm not sure where the "forcing" comes in. |
03:20:44
| <substack> | and if somebody disagrees they can just fork it |
03:20:52
| <hij1nx> | YAHOODA! |
03:20:57
| <Domenic_> | substack: do people fork the previous languages you've worked in? |
03:21:01
| <substack> | Domenic_: the "forcing" is that there is a canonical source of truth, "the spec" |
03:21:04
| <Domenic_> | st_luke: hij1nx: =( |
03:21:15
| <Domenic_> | substack: does Haskell not have a spec? |
03:21:21
| <substack> | ug I hate haskell |
03:21:28
| <hij1nx> | Domenic_: substack: candor has forks! |
03:21:34
| <substack> | hij1nx: awesome |
03:21:40
| <Domenic_> | candor lol |
03:22:09
| <hij1nx> | Domenic_: what? you dont approve of candor? |
03:22:27
| <Domenic_> | hij1nx: indeed. |
03:22:32
| <hij1nx> | Domenic_: candor is amazing. |
03:22:55
| <hij1nx> | Domenic_: what makes you disapprove? |
03:23:23
| <hij1nx> | Domenic_: the fact that somebody did it in their spare time? |
03:23:44
| * mikolalysenko | quit (Ping timeout: 255 seconds) |
03:24:16
| <Domenic_> | hij1nx: no, just its language features. |
03:24:21
| <st_luke> | does tc39 only meet every 2 months? |
03:24:28
| <Domenic_> | st_luke: every month I think. |
03:24:41
| <st_luke> | maybe this is wrong then http://www.ecma-international.org/memento/TC39-M.htm |
03:24:46
| <hij1nx> | Domenic_: oh yeah, it has less features than JS. |
03:24:52
| <Domenic_> | st_luke: no I think you're right actually, judging by https://github.com/rwldrn/tc39-notes/tree/master/es6 |
03:25:01
| <st_luke> | oh damn |
03:25:12
| <st_luke> | I was going to send them a cake but I'll forget about it if it's 2 months away |
03:25:32
| <st_luke> | a `module.exports = function () {}` cake |
03:25:37
| <hij1nx> | its silly unless it has Proxies! ;) |
03:25:39
| <Domenic_> | that'd be awesome |
03:25:51
| <st_luke> | maybe a cake will change their mind |
03:26:14
| <substack> | anyways I'm actually fine with tc39 doing whatever with the rest of the language since it doesn't matter |
03:26:22
| <substack> | modules are the only place where they can do real, permanent damage |
03:26:57
| <Domenic_> | substack: I am not even sure they can do damage there. I think Node is powerful enough to control the fate of modules. |
03:27:16
| <Domenic_> | Especially because Node is the only environment where people will write true ES6 code, until IE10 dies. |
03:27:26
| <substack> | they can certainly fuck a lot up in the short to mid term |
03:28:09
| <chrisdickinson> | hilariously, it's probably easier to write an es6 module for the browser through browserify + es6ify than it is to publish a working es6 module for node |
03:28:30
| <substack> | tooling hooray! |
03:28:50
| <hij1nx> | Domenic_: i think ES6 should focus on removing stuff. |
03:28:55
| <Domenic_> | chrisdickinson: hah, kind of. but v8 is stepping up the pace in implementation, and once they turn off the flag requirement... node will be in good shape. |
03:28:56
| <chrisdickinson> | (in the sense that if you have an es6 module on npm that someone wants to use, they have to remember to always run node with the --harmony flag.) |
03:29:02
| <hij1nx> | 0 new features, -10 things. |
03:29:08
| <substack> | Domenic_: part of why I have been so irritated with tc39 is that everything was going great with node modules and then they show up with some broken thing |
03:29:13
| <Domenic_> | hij1nx: then it will break backward compat and get its lunch eaten by dart. |
03:29:18
| <substack> | a broken thing that needs to be opposed |
03:29:26
| <hij1nx> | Domenic_: dart is pretty cool |
03:29:40
| <hij1nx> | Domenic_: if you like mom-jeans |
03:29:43
| <substack> | I only first heard about what ec6 was even about with their horrible module system |
03:29:45
| <Domenic_> | substack: yep. wish you had opposed it constructively, though. instead I have to do damage control trying to get your concerns taken seriously |
03:30:02
| <chrisdickinson> | i kind of like the idea of pegging node to es5 and introducing browserify-style transform directives in package.json to support es6 |
03:30:09
| <chrisdickinson> | well |
03:30:13
| <chrisdickinson> | i like the idea of pegging the syntax. |
03:30:30
| <chrisdickinson> | i'd like the other new es6 apis (maps, weakmaps, sets, et al) |
03:30:36
| <Domenic_> | hij1nx: I don't even know what that means O_o |
03:30:57
| * wolfeida_ | joined |
03:31:31
| <substack> | Domenic_: well if they just didn't do modules at all we'd be fine |
03:31:51
| <Domenic_> | substack: meh, getting something that works natively in the browser will be nice, I think. |
03:31:53
| <substack> | it's so much work to take their thing and make it not suck |
03:31:57
| <chrisdickinson> | can you call `new` on shorthand functions? |
03:32:11
| <Domenic_> | chrisdickinson: arrow functions? no. they are just functions, not constructors. |
03:32:12
| <chrisdickinson> | e.g., "new (x, y) -> x + y" ? |
03:32:25
| <hij1nx> | Domenic_: arrows are the worst part of ES6, imo. |
03:32:25
| <chrisdickinson> | so, that'll throw an error? |
03:32:34
| <Domenic_> | chrisdickinson: yes |
03:32:39
| <chrisdickinson> | eep. |
03:32:40
| <Domenic_> | hij1nx: O___o |
03:32:41
| <hij1nx> | Domenic_: they screw up profiling. |
03:32:44
| <substack> | WHAT |
03:32:54
| <Domenic_> | hij1nx: if you assign it to a variable they get a name |
03:32:55
| <chrisdickinson> | yeah, that's the other bit that worried me |
03:33:03
| <chrisdickinson> | introducing yet another "form" of functions |
03:33:03
| <Domenic_> | `let x = (a, b) => a + b` has name `x` |
03:33:05
| <substack> | why doesn't it just not give a fuck if you call an arrow function with new? |
03:33:30
| <hij1nx> | Domenic_: that defeats the whole purpose |
03:33:30
| <Domenic_> | because this way you can declare things that are functions instead of sometimes-functions, sometimes-constructors |
03:33:44
| <Domenic_> | hij1nx: then use longhand functions, it's not that hard. |
03:33:53
| <hij1nx> | Domenic_: you might as well just write function x() {} |
03:34:02
| <chrisdickinson> | Domenic_: what if you're not the one creating the function that you're calling `new` on? |
03:34:09
| * wolfeidau | quit (Ping timeout: 256 seconds) |
03:34:15
| <hij1nx> | Domenic_: my feeling is, if you cant find a compelling argument for it, it doesnt belong. |
03:34:34
| <substack> | arrow function should just be the same as f.bind(self) |
03:34:47
| <hij1nx> | Domenic_: saying, "hey! this cool popular coffee-script-ish thing would be neat" is really just silly. |
03:34:55
| <substack> | but anyways that doesn't even matter, just another thing I can easily ignore |
03:35:05
| <substack> | a shame but whatever |
03:35:28
| <Domenic_> | I think "making the intent of your code clear" is a compelling reason. `foo.map(x => x*x)` is much clearer to me than `foo.map(function (x) { return x * x; })`. Less noise to get lost in, more clearly expressing intent of the code. |
03:36:07
| <hij1nx> | Domenic_: by that line of reasoning, you should just rewrite the entire language. |
03:36:20
| <chrisdickinson> | didn't mean to open a can of worms |
03:36:22
| <hij1nx> | Domenic_: i think ES is fine the way it is. just take away a few things |
03:36:29
| <hij1nx> | Domenic_: and move on. |
03:36:40
| <chrisdickinson> | it just spooks me that neat things like shorthand functions have other, maybe unexpected, implications |
03:37:13
| <hij1nx> | chrisdickinson: like huge blind spots in flamegraphs |
03:37:14
| <substack> | yes if it were just shorthand that would be nice |
03:37:23
| <Domenic_> | hij1nx: I think if we do that the open web as a platform will get its lunch eaten by proprietary solutions like Silverlight, Dart, NaCl, etc. |
03:37:25
| <chrisdickinson> | there's a lot to keep in one's head with JS already, and it seems like with all the new features that'll get a lot worse |
03:37:44
| <substack> | ^^^^ |
03:37:55
| <hij1nx> | Domenic_: i dont think so, because those are proprietary |
03:37:56
| <substack> | chrisdickinson: it's like in ruby how there are 7 kinds of lambdas |
03:38:00
| <Domenic_> | if proprietary solutions offer a better developer experience, they will win. |
03:38:17
| <substack> | Domenic_: but that's good |
03:38:24
| <substack> | if something is better then it SHOULD win |
03:38:36
| <chrisdickinson> | substack: yep. this is part of the reason i am fond of python |
03:38:36
| <hij1nx> | Domenic_: substack and then someone will create a better open source thing |
03:38:52
| <hij1nx> | better gets upstaged by better. |
03:39:01
| <chrisdickinson> | it's a very "designed" language. |
03:39:11
| <Domenic_> | I would rather our existing open web evolve instead of having a dark period where proprietary takes over. |
03:39:24
| <Domenic_> | Even if eventually an open-source copy of that proprietary solution steps in. |
03:39:25
| <chrisdickinson> | ultimately, i like JS better; but it boils down to valuing different things than python / python's community / python's BDFL |
03:39:31
| <hij1nx> | Domenic_: it is evolving, e.g. nodejs |
03:39:41
| <hij1nx> | Domenic_: its not just about the language, its about the approach |
03:39:58
| <chrisdickinson> | Domenic_: what of the push for ASM.js and friends? wouldn't that be a decent end-run around proprietary solutions? |
03:40:01
| <substack> | Domenic_: open is a big part of being "better" |
03:40:09
| <substack> | it's baked in to the calculus |
03:40:22
| <Domenic_> | substack: that is not true for the vast majority of developers |
03:40:24
| <defunctzombie> | imho all this language debate is silly bikeshedding that happens because everyone keeps thinking that the browser needs to natively support the language they want to use |
03:40:26
| <chrisdickinson> | i mean, that gives proprietary solutions a compilation target, at least :| |
03:40:27
| <hij1nx> | Javascript's good parts are good. |
03:40:29
| <defunctzombie> | which is utter crap |
03:40:43
| <defunctzombie> | the browser just needs to have a minimal jit/vm subset to interface with it |
03:40:45
| <Domenic_> | chrisdickinson: yes, that will be helpful for bringing proprietary C-level stuff into the web, e.g. Shamwow (Flash -> JS) |
03:40:52
| <hij1nx> | defunctzombie: ++ |
03:40:56
| <defunctzombie> | and the rest is left as an exercise to the reader |
03:41:04
| <substack> | defunctzombie: they should just compile to javascript instead |
03:41:09
| <defunctzombie> | then everyone can go masterbate over whatever language features they want |
03:41:12
| <defunctzombie> | substack: asm.js |
03:41:19
| <defunctzombie> | substack: not even full JS |
03:41:46
| <hij1nx> | TC39 is just dry humping the internet |
03:41:52
| <defunctzombie> | lol |
03:42:10
| <chrisdickinson> | Domenic_: so, if we've got that end-run -- and it's already getting 2x native speeds -- what do we need to add or change about JS to beat dart/nacl/silverlight? |
03:42:32
| <Domenic_> | chrisdickinson: because we still need scripting languages, not just C-level languages. |
03:43:15
| <chrisdickinson> | right; but it wouldn't be impossibly difficult to compile python or ruby to JS; sans their standard libraries |
03:43:26
| <chrisdickinson> | or python-like or ruby-like things. |
03:43:54
| <defunctzombie> | Domenic_: you don't need scripting languages in the browser |
03:43:58
| <chrisdickinson> | and i'm not aware of anything in es6, syntax-wise, that makes that particularly easier (though i could've missed something!) |
03:44:12
| <Domenic_> | chrisdickinson: not really true. for one, you'd have to re-implement the garbage collector. |
03:44:18
| <defunctzombie> | Domenic_: you need better tools not languages |
03:44:38
| <chrisdickinson> | Domenic_: yes, i suppose, for exact semantics, you would. or their bytecode vms. |
03:45:22
| <chrisdickinson> | but a python-like language wouldn't be too hard to put together, i imagine. |
03:45:29
| <chrisdickinson> | with largely python-like semantics |
03:45:38
| <chrisdickinson> | (or maybe a restricted subset of python) |
03:45:39
| * shama | quit (Remote host closed the connection) |
03:45:47
| <Domenic_> | also, remember that we're computing against the ease of use of dart natively working in Google Chrome. |
03:45:54
| <Domenic_> | *competing |
03:46:11
| <substack> | st_luke: my continuous deployment thing is working, documenting and pushing in just a little bit |
03:46:16
| * defunctzombie | changed nick to defunctzombie_zz |
03:46:21
| <Domenic_> | saying "compile your shit using this open-source VM that mostly matches Python" is not as easy as "type this stuff into the console" |
03:46:37
| <substack> | it's bouncy + cicada for branch-based subdomain deploys |
03:46:50
| <st_luke> | substack: we ended up holding off on ours because a joyent library we were going to use has some bugs, don't really have time to figure that out currently |
03:47:10
| <chrisdickinson> | I feel like that's more on the web dev tools than anything else. |
03:47:52
| <Domenic_> | chrisdickinson: sure. but are open-source web dev tools really going to beat google? I think a consortium of browser implementers has a better chance. |
03:48:32
| <chrisdickinson> | of which google is one? |
03:48:48
| <chrisdickinson> | (and probably the one whose browser has the most or second most developer mindshare?) |
03:49:01
| <chrisdickinson> | (competing neck and neck with firefox) |
03:49:17
| <Domenic_> | yep. we're in a precarious position already. it's good that google is a big enough organization to be of two minds. |
03:49:33
| <Domenic_> | I was worried that the V8 team got gutted and moved to Dart, but it looks like they're picking up steam a little bit recently. |
03:49:56
| <chrisdickinson> | and what of mozilla's dartlike internal language, rust? |
03:50:05
| <Domenic_> | lol that is nothing like dart |
03:50:15
| <Domenic_> | it's like some combination of scheme and D, made for writing browsers in. |
03:50:27
| * mikolalysenko | joined |
03:51:15
| <substack> | how can I check this .git directory into git... |
03:51:34
| <Domenic_> | substack: .gitignore !.git? never tried it but... |
03:51:50
| <substack> | git add -f didn't add it |
03:52:29
| <substack> | doesn't work with .gitignore either |
03:52:56
| <substack> | maybe I can mv {.,}git; git mv {,.}git |
03:53:37
| <substack> | error: Invalid path 'example/test-repo/.git/COMMIT_EDITMSG' |
03:53:40
| <substack> | -_- |
03:53:40
| <purr> | substack: ಠ_ಠis an IRC client/IRC client framework. |
03:54:44
| * wolfeida_ | quit (Remote host closed the connection) |
03:54:47
| * jibay | quit (Remote host closed the connection) |
03:56:00
| <substack> | bah |
03:56:16
| <substack> | I just want this .git directory so I can cd there to run some tests |
04:03:41
| <guybrush> | substack add it with _git and then mv it to .git while testing :D not sure if that works though |
04:03:54
| <guybrush> | had some thoughts about the same problem recently |
04:04:48
| <guybrush> | oh you said the mv thing right before |
04:06:27
| * mikolalysenko | quit (Ping timeout: 276 seconds) |
04:10:46
| * ralphtheninja | quit (Quit: Lost terminal) |
04:12:34
| <hij1nx> | Domenic_: dart's VM is really compelling, the language features are awkward and silly, the tools feel like leg braces. Dart will suffer huge from that alone. |
04:12:52
| * st_luke | quit (Remote host closed the connection) |
04:13:40
| <hij1nx> | Domenic_: Dart wont reach critical mass for many obvious reasons, so why is everyone so nervous? |
04:15:13
| <chrisdickinson> | on a non-es6 note: got tree walking streams *and* ref walking streams done |
04:15:34
| <chrisdickinson> | just about ready to put it all together to make a git-fetch-pack module |
04:15:53
| <hij1nx> | chrisdickinson: link? |
04:16:21
| <hij1nx> | chrisdickinson: have you talked to creationx about his js-git project? |
04:16:22
| <chrisdickinson> | hij1nx: https://github.com/chrisdickinson/git-walk-refs |
04:16:29
| <chrisdickinson> | yes i have tweeted at him |
04:16:51
| <chrisdickinson> | if all goes as planned it'll be mostly done and in browserify and npm by the end of the month |
04:17:55
| <chrisdickinson> | and then he's got a lot of time and runway to make the experience great in browser |
04:18:13
| <chrisdickinson> | meanwhile browserify gets a big workout |
04:18:32
| <hij1nx> | chrisdickinson: this is awesome! nice work. |
04:18:40
| <chrisdickinson> | thanks! |
04:19:57
| <chrisdickinson> | walk-tree will be up soon |
04:20:00
| <chrisdickinson> | i just got it done |
04:20:22
| <chrisdickinson> | walk-refs is a prereq for being able to tell the git server what refs one has so that it can generate an appropriate packfile |
04:21:26
| <chrisdickinson> | walk-tree is required for cloning / checking out |
04:21:38
| <chrisdickinson> | also, it would be super easy to write a redis-backed git odb |
04:21:46
| <chrisdickinson> | or riak, or really any kv store |
04:21:50
| <chrisdickinson> | (scuttlebutt?) |
04:28:26
| * jdiez | quit (Quit: No Ping reply in 180 seconds.) |
04:28:32
| * jdiez_ | joined |
04:29:56
| <substack> | pow: https://github.com/substack/ploy |
04:30:04
| <substack> | stlsaint: ^^ |
04:30:33
| <substack> | wanted to publish that early so I could get the name |
04:31:07
| <substack> | need to give it auth before I'll use it on substack.net though |
04:31:18
| <substack> | npm has a really good incentive baked into it to publish early and often |
04:31:55
| * mikolalysenko | joined |
04:31:56
| <guybrush> | substack: after hosting some projects with my tools i somehow think the whole restarting-thing shouldnt be solved in the deployment-tool, thoughts? |
04:32:31
| <substack> | restarting?" |
04:32:41
| <guybrush> | like in your ploy here, in scripts.start there could be the apps own solution to restart the app when it goes down |
04:32:48
| <guybrush> | https://github.com/substack/ploy/blob/master/index.js#L44 |
04:33:11
| <substack> | if my process crashes I want it to not stay crashed |
04:33:39
| <substack> | I don't want to handle restarting myself in the app |
04:34:11
| <guybrush> | well i was just thinking about some ideas, wanted to hear your thoughts |
04:34:19
| <guybrush> | im running everything with mon now |
04:34:46
| <substack> | another thing is what should happen if ploy itself goes down |
04:34:53
| <guybrush> | right! |
04:35:01
| <guybrush> | thats what i tried to solve with my nexus-thing |
04:35:04
| <substack> | I'll have it write to a json file so it can restore its previous state |
04:35:06
| <substack> | simple |
04:35:25
| <chrisdickinson> | soon you'll be able to have a git server that git talks to directly |
04:35:29
| <guybrush> | right i im storing it in a dirty-db |
04:35:36
| <chrisdickinson> | well, "soon" |
04:35:45
| <chrisdickinson> | i'm not sure what the relative advantage would be |
04:35:54
| <chrisdickinson> | i guess you wouldn't have to ever store anything on the filesystem, which would be cool |
04:36:03
| <chrisdickinson> | store it all in some kv store |
04:36:07
| <guybrush> | substack: but how do you know if the processes are already up or not? |
04:36:13
| <guybrush> | i mean in case the ploy server goes down |
04:36:17
| <chrisdickinson> | and when you check it out you wouldn't have to touch the filesystem either |
04:36:21
| <guybrush> | with pids? |
04:36:24
| <chrisdickinson> | substack: ^^ does that sound worthwhile? |
04:37:28
| <guybrush> | chrisdickinson: so it would be possible to use indexeddb? |
04:37:33
| <chrisdickinson> | yep |
04:37:43
| <guybrush> | like pure awesomeness |
04:37:47
| <substack> | guybrush: if ploy crashes all its children will get killed |
04:37:52
| <chrisdickinson> | any kv store (or really any storage, but git is essentially just a fancy fs based kv store) |
04:37:56
| <guybrush> | substack: you could detach em |
04:37:56
| <substack> | they are not detached |
04:38:03
| <substack> | it's simpler not to detach them I think |
04:38:10
| <substack> | then I don't need to manage pidfiles |
04:38:29
| <guybrush> | the benefit would be that the apps would stay up when ploy goes down |
04:38:39
| <substack> | not too worried about that |
04:39:46
| <guybrush> | i like the name "ploy" :D |
04:46:01
| <Raynos> | https://github.com/alexeypetrushin/miconjs/issues/1 |
04:46:02
| <Raynos> | >:( |
04:46:25
| <Raynos> | substack, defunctzombie: https://npmjs.org/package/coveralls have you guys made tap / tape work with code coverage before? |
04:47:47
| * mikolalysenko | quit (Ping timeout: 260 seconds) |
05:05:46
| <chrisdickinson> | https://www.kernel.org/pub/software/scm/git/docs/v1.7.0.5/technical/pack-heuristics.txt is a really interesting read |
05:11:17
| * Benvie | quit (Ping timeout: 255 seconds) |
05:13:38
| * mikolalysenko | joined |
05:18:19
| * timoxley | joined |
05:26:22
| <rvagg> | https://pbs.twimg.com/media/BGGSc9zCIAAfvhs.png:large LevelDB+Windows+Node |
05:26:27
| <rvagg> | = phew... |
05:29:11
| * mikolalysenko | quit (Ping timeout: 256 seconds) |
05:34:32
| <Raynos> | rvagg: nice! |
05:35:46
| <rvagg> | no, unpleasant actually |
05:36:04
| <rvagg> | but nice that we're nearly at universal support |
05:37:20
| <Raynos> | I see you are a nightly man :D |
05:37:30
| <Raynos> | and use photoshop o_o |
05:40:24
| <rvagg> | nightly? |
05:40:37
| <Raynos> | thats firefox nightly? |
05:40:42
| <rvagg> | ahhh yes |
05:40:55
| <rvagg> | of course, that logo |
05:41:38
| <rvagg> | wanted to PROVE that it was windows so I included the start bar/button |
05:44:01
| <Raynos> | Domenic_: "A HTTP request can return a promise for a stream" |
05:46:05
| <substack> | whaaaa |
05:46:20
| * mikeal | quit (Quit: Leaving.) |
05:46:38
| <substack> | Raynos: that is very silly indeed! |
05:46:42
| <Raynos> | Agreed |
05:46:58
| * mikeal | joined |
05:47:13
| <substack> | mikeal: relevant to your interests http://github.com/substack/ploy |
05:51:49
| <mikeal> | very nice |
05:52:24
| <substack> | when I revisit fleet it's just going to be a distrubted multi-server version of ploy |
05:58:48
| * mikolalysenko | joined |
06:01:43
| <Raynos> | Domenic_: promise abuse is abuse :( |
06:12:31
| * mikolalysenko | quit (Ping timeout: 264 seconds) |
06:14:49
| * timoxley | quit (Quit: Computer has gone to sleep.) |
06:18:39
| <chrisdickinson> | woo, successfully grabbed packfile data :D |
06:20:05
| * defunctzombie_zz | changed nick to defunctzombie |
06:22:39
| <defunctzombie> | substack: I am interested in this deploy stuff you have been playing with (also, side note is you can just edit /etc/hosts for localhost subdomains) |
06:23:41
| <substack> | oh that's true |
06:23:54
| <substack> | with dnsmasq you get wildcards though, which is pretty nice |
06:24:05
| <defunctzombie> | substack: yea, but takes some work to setup |
06:24:09
| <substack> | true |
06:24:17
| <defunctzombie> | anyhow, just was a thought I had |
06:24:39
| <defunctzombie> | cause I use the etc/hosts file all the time for testing courseoff and various other things |
06:24:50
| <substack> | defunctzombie: updated |
06:24:54
| <defunctzombie> | coo |
06:25:26
| <substack> | still need these things https://github.com/substack/ploy#todo |
06:26:52
| <defunctzombie> | yea |
06:27:07
| <defunctzombie> | substack: you might be interested in daemon for the process start/stop stuff |
06:27:17
| <defunctzombie> | substack: not sure what you did for daemonization or whatnot |
06:27:43
| <defunctzombie> | I have another tool on top of daemon which does basic start/stop via signals right now |
06:27:49
| <defunctzombie> | but that isn't published anywhere |
06:27:54
| <substack> | I don't want it to daemonize |
06:28:05
| <substack> | I want the child procs to die when the parent ploy server dies |
06:28:08
| <substack> | much simpler |
06:28:17
| <defunctzombie> | I see |
06:28:34
| <defunctzombie> | then how do you restart parent? |
06:28:47
| <defunctzombie> | so what I do is have a starter which daemonizes itself |
06:28:48
| <substack> | kill it and have it come back |
06:28:53
| <defunctzombie> | and that thing starts the children |
06:28:57
| <defunctzombie> | so when the starter dies |
06:29:01
| <defunctzombie> | the children also die |
06:29:37
| <defunctzombie> | so in your case, it would be the ploy server that daemonizes itself haha |
06:29:44
| <substack> | what? |
06:29:47
| <substack> | nothing gets daemonized |
06:29:48
| <substack> | at all |
06:30:02
| <substack> | while true; do ploy -p[D[D[D[D[D[D[D 80 ./data; done |
06:30:05
| <substack> | fucking lag |
06:30:11
| <substack> | while true; do ploy -p 80 ./data; done |
06:30:15
| <substack> | you would do that |
06:30:31
| <defunctzombie> | well, I would never do that in production, but sure :) |
06:30:35
| <substack> | I do want ploy to spin up the processes that it was running previously when it comes back though |
06:31:07
| <defunctzombie> | substack: in production it is very important to know when things go down and have to be restarted |
06:31:12
| <defunctzombie> | generally a sign of potential problems |
06:32:53
| <substack> | "have to be restarted"? |
06:32:59
| <substack> | as if a person is doing that? |
06:34:12
| <defunctzombie> | substack: sometimes a person is |
06:34:18
| <defunctzombie> | regardless |
06:34:32
| <defunctzombie> | I need to know that something crashed |
06:35:11
| * jcrugzz | quit (Ping timeout: 252 seconds) |
06:35:26
| <defunctzombie> | these are just general ops things, not saying you need to implement them |
06:35:35
| <defunctzombie> | just things to keep in mind with various deployment strategies |
06:36:41
| * defunctzombie | changed nick to defunctzombie_zz |
06:38:45
| * mikolalysenko | joined |
06:43:16
| <substack> | defunctzombie_zz: I'm planning on having straggler handle that kind of stuff |
06:43:40
| <substack> | but ploy should just expose a generic stream interface for other tech to hook into |
06:55:18
| * mikolalysenko | quit (Ping timeout: 258 seconds) |
07:05:16
| * wolfeidau | joined |
07:21:51
| * mikolalysenko | joined |
07:31:27
| <chrisdickinson> | api for fetching remotes: https://gist.github.com/chrisdickinson/5230910 |
07:38:38
| * mikolalysenko | quit (Ping timeout: 256 seconds) |
07:39:10
| <substack> | chrisdickinson: with just CORS headers you could use this git client to do deploys with ploy! |
07:39:19
| <chrisdickinson> | :D |
07:39:49
| <chrisdickinson> | or websockets or a duplex stream of xhrs/event-streams |
07:39:57
| <chrisdickinson> | or, hilariously, over tab-streams |
08:06:51
| * mikolalysenko | joined |
08:21:05
| * Domenic_ | quit (Ping timeout: 256 seconds) |
08:21:08
| <guybrush> | chrisdickinson: woooah sick |
08:21:39
| <guybrush> | have to read/learn through all your git-stuff, pretty amazing |
08:23:00
| * mikolalysenko | quit (Ping timeout: 264 seconds) |
08:25:23
| <guybrush> | this makes me want to write a ui, full-featured dev-environment in the browser |
08:28:57
| <substack> | a full featured dev environment is just a terminal |
08:33:31
| <guybrush> | yes and vi is better than emacs :p |
08:34:44
| <guybrush> | btw i like jedit the most, somehow i am not so productive in vi at all though i really try to get better with it |
08:36:48
| <guybrush> | have to move arround with the cursor way too much, also rectangular select is kind of a pain in vi |
08:37:48
| <substack> | I remapped caps lock to escape |
08:37:53
| <substack> | makes hjkl navigation much nicer |
08:38:04
| <substack> | because it's easier to pop into command mode |
08:38:24
| <substack> | guybrush: for rectangular select just do ctrl+v |
08:39:10
| <substack> | but I mostly do line select with just V in command mode |
08:40:14
| <guybrush> | that ctrl+v isnt available in vi only in vim :p |
08:40:25
| <guybrush> | the caps remapping is cool idea |
08:41:07
| <substack> | just use vim then |
08:41:09
| <guybrush> | substack: do you use screen for multiple files or the vi-thing |
08:41:19
| <substack> | neither |
08:41:30
| <guybrush> | oh just multiple terminals? |
08:41:35
| <substack> | yes |
08:41:41
| <substack> | and a tiling wm |
08:42:45
| <guybrush> | because screen sucks or do you have a supercool wm you just love? |
08:43:19
| <substack> | xmonad |
08:44:02
| <guybrush> | i think its good to be familiar with tools that are available everywhere, otherwise i can just use jedit anyway |
08:46:01
| <guybrush> | oh right you are fluent in haskell so xmonad makes sense :p |
08:46:38
| <substack> | I just use the default config |
08:46:57
| <substack> | the only thing in my config is some keybindings |
08:49:02
| * mikolalysenko | joined |
08:52:09
| * ITpro | joined |
08:56:41
| * FireFly | joined |
09:06:42
| * mikolalysenko | quit (Ping timeout: 240 seconds) |
09:32:51
| * mikolalysenko | joined |
09:46:16
| * nicholasf | quit (Ping timeout: 245 seconds) |
09:50:26
| * mikolalysenko | quit (Ping timeout: 252 seconds) |
10:13:17
| * jdiez_ | changed nick to jdiez |
10:13:24
| * jdiez | quit (Changing host) |
10:13:24
| * jdiez | joined |
10:18:53
| * mikolalysenko | joined |
10:34:23
| * mikolalysenko | quit (Ping timeout: 255 seconds) |
11:03:13
| * mikolalysenko | joined |
11:05:23
| * juliangruber_ | joined |
11:05:30
| * juliangruber | quit (Quit: No Ping reply in 180 seconds.) |
11:14:46
| * zero_coder | joined |
11:14:54
| <zero_coder> | hello |
11:18:20
| * wolfeidau | quit (Remote host closed the connection) |
11:18:52
| * wolfeidau | joined |
11:20:12
| * mikolalysenko | quit (Ping timeout: 256 seconds) |
11:45:50
| * mikolalysenko | joined |
12:04:36
| * mikolalysenko | quit (Ping timeout: 248 seconds) |
12:10:08
| * yorick | joined |
12:16:43
| <substack> | pow https://github.com/substack/ploy#details |
12:17:10
| <substack> | now when you bring the ploy server back up it starts all the processes it was previously running |
12:19:18
| <Ralt> | substack: you convinced me to switch to xmoad. Thanks. |
12:19:39
| <substack> | ! |
12:20:00
| <Ralt> | and btw |
12:20:07
| <Ralt> | for me, caps lock is another ctrl |
12:20:16
| <Ralt> | so I remapped kj and jk to esc :P |
12:25:50
| <yorick> | Ralt: so, how do you type kj and jk? |
12:26:35
| <Ralt> | I never do. Do you? |
12:26:49
| <yorick> | I know a guy with a nick starting with kj |
12:26:55
| <Ralt> | in 2 years of vim, I never had the problem |
12:29:45
| <yorick> | swedish has some words with kj, fortunately I'm not swedish :P |
12:29:47
| * ins0mnia | joined |
12:29:48
| <yorick> | dutch has a diminutive with -je, so we have words like "beukje" and "dekje" |
12:30:35
| <yorick> | furthermore, there are about 694 dutch words that end on "ijke" :P |
12:32:19
| * mikolalysenko | joined |
12:32:37
| <yorick> | yeah, I might use those letter combinations :/ |
12:49:07
| * mikolalysenko | quit (Ping timeout: 256 seconds) |
13:03:14
| <FireFly> | Ralt: have you tried xcape? |
13:03:36
| <FireFly> | Using it your caps lock could do both Ctrl and Esc |
13:10:51
| * mikolalysenko | joined |
13:25:50
| * ITpro | quit (Ping timeout: 245 seconds) |
13:38:20
| * jibay | joined |
13:41:05
| <Ralt> | FireFly: ah, nice! |
13:44:18
| * shuaib | joined |
13:45:16
| <mikolalysenko> | other than underscore.js, is there a simple library that just takes a sorted list and removes duplicates? |
13:45:39
| <mikolalysenko> | I mean, I could write my own trivially but I am sure that this is solved |
13:49:04
| * dominictarr | joined |
13:50:50
| <mikolalysenko> | anyone got any suggestions? |
13:53:17
| * ITpro | joined |
13:57:38
| * ITpro | quit (Ping timeout: 246 seconds) |
13:57:54
| * mikolalysenko | quit (Quit: Lost terminal) |
14:03:35
| * stlsaint | quit (Ping timeout: 246 seconds) |
14:27:13
| * zero_coder | quit (Remote host closed the connection) |
14:46:42
| * timoxley | joined |
14:46:46
| * mikolalysenko | joined |
14:47:33
| <mikolalysenko> | there: https://github.com/mikolalysenko/uniq |
15:06:23
| * timoxley | quit (Quit: Computer has gone to sleep.) |
15:06:26
| <dominictarr> | Had a crazy idea last night |
15:06:37
| <dominictarr> | static type inference for js |
15:06:47
| <dominictarr> | like, why not? |
15:07:18
| <dominictarr> | you could do it incrementally |
15:07:19
| <mikolalysenko> | v8 already does it |
15:07:30
| <dominictarr> | so to detect how much state you are creating |
15:07:44
| <dominictarr> | mikolalysenko: yeah, I figured! |
15:08:05
| <mikolalysenko> | also asm.js is suppposedly completely statically typed |
15:08:11
| <mikolalysenko> | at least as long as you play by the rules |
15:08:22
| <dominictarr> | was thinking it would be cool if you had dynamic type based syntax highlighting |
15:08:56
| <dominictarr> | so, if you can tell if an argument is a function, it's blue, and strings are yellow, etc. |
15:09:24
| <mikolalysenko> | what I would like to see are optimizers/minifiers that do more aggressive inlining |
15:09:46
| <mikolalysenko> | afaik, most of them just don't do it |
15:09:59
| <dominictarr> | also, to statically detect if code is async or not |
15:10:47
| <dominictarr> | then you could do type checking for all of npm! |
15:11:04
| <dominictarr> | which might catch some bugs and api changes |
15:11:41
| * jcrugzz | joined |
15:13:18
| * shuaib | quit (Read error: Connection reset by peer) |
15:13:53
| * shuaib | joined |
15:24:25
| * jcrugzz | quit (Ping timeout: 260 seconds) |
15:27:36
| * mikolalysenko | quit (Ping timeout: 260 seconds) |
15:38:36
| * thl0_zz | joined |
15:41:35
| * CoverSlide | quit (Read error: Connection reset by peer) |
15:55:17
| * AvianFlu | joined |
15:57:41
| * mikolalysenko | joined |
16:03:19
| * defunctzombie_zz | changed nick to defunctzombie |
16:16:32
| * mikeal | quit (Quit: Leaving.) |
16:22:42
| * devaholic | quit (Ping timeout: 240 seconds) |
16:24:46
| * yorick | quit (Remote host closed the connection) |
16:28:52
| * devaholic | joined |
16:29:16
| <rowbit> | /!\ ATTENTION: (default-local) raaziek1000@... successfully signed up for developer browserling plan ($20). Cash money! /!\ |
16:29:16
| <rowbit> | /!\ ATTENTION: (default-local) paid account successfully upgraded /!\ |
16:31:36
| * shuaib | quit (Quit: Textual IRC Client: http://www.textualapp.com/) |
16:32:26
| * ins0mnia | quit (Ping timeout: 256 seconds) |
16:39:30
| * shama | joined |
16:46:45
| * mikeal | joined |
16:57:24
| * dominictarr | quit (Quit: dominictarr) |
17:01:40
| * dominictarr | joined |
17:12:43
| * ins0mnia | joined |
17:21:49
| <Ralt> | browserify doesn't like me |
17:21:56
| <Ralt> | it's a one-side love |
17:27:08
| * dominictarr | quit (Quit: dominictarr) |
17:28:17
| <mikolalysenko> | is there a simple binary search library in npm? |
17:28:23
| <mikolalysenko> | for the life of me I can't find one |
17:28:35
| <mikolalysenko> | I mean there are a few, but they are basically crap |
17:29:03
| * dominictarr | joined |
17:33:31
| * dominictarr | quit (Client Quit) |
17:35:37
| * stlsaint | joined |
17:40:34
| * jez0990 | quit (Ping timeout: 252 seconds) |
17:40:47
| * timoxley | joined |
17:41:00
| * jdiez | quit (Ping timeout: 256 seconds) |
17:42:39
| * timoxley | quit (Client Quit) |
17:43:00
| * mikeal | quit (Read error: Connection reset by peer) |
17:43:36
| * mikeal | joined |
17:45:29
| * mikolalysenko | quit (Ping timeout: 255 seconds) |
17:46:33
| * jdiez | joined |
17:46:33
| * jdiez | quit (Changing host) |
17:46:33
| * jdiez | joined |
17:47:41
| * thl0_zz | quit (Remote host closed the connection) |
17:52:27
| * AvianFlu | quit (Remote host closed the connection) |
17:54:41
| * timoxley | joined |
17:55:59
| <Ralt> | Raynos: where's your gist with the list of client-side libraries? |
17:56:48
| <Ralt> | found it |
18:00:26
| * mikeal | quit (Quit: Leaving.) |
18:02:41
| * jez0990 | joined |
18:07:51
| * shuaib | joined |
18:10:06
| * mikolalysenko | joined |
18:20:20
| * timoxley | quit (Quit: Computer has gone to sleep.) |
18:23:16
| <spion> | mikolalysenko, maybe bintrees? |
18:28:41
| * mikolalysenko | quit (Ping timeout: 255 seconds) |
18:36:36
| * mikeal | joined |
18:54:47
| <chrisdickinson> | aw, damnit; going to need to get zlib-browserify's createInflate working ): |
18:55:30
| * mikolalysenko | joined |
18:56:49
| * thl0_zz | joined |
18:59:29
| <chrisdickinson> | substack: has anyone written a "trim dead code" thing for browserify bundles? |
18:59:33
| <chrisdickinson> | because that would be very neat. |
18:59:59
| * thl0_zz | quit (Remote host closed the connection) |
19:07:04
| * mikolalysenko | quit (Ping timeout: 245 seconds) |
19:17:21
| <substack> | chrisdickinson: minifiers can do a little bit of that |
19:17:34
| <chrisdickinson> | yeah |
19:17:41
| <substack> | closure compiler has some really sophisticated dead code culling from what I read |
19:17:42
| <chrisdickinson> | part of me just wants dead code removal as a pipeable thing |
19:17:48
| <substack> | same |
19:17:57
| <chrisdickinson> | so you can do the dead code removal as a discrete step before minification |
19:32:26
| * mikolalysenko | joined |
19:38:00
| * jcrugzz | joined |
19:43:42
| <Ralt> | substack: did you ever think of a way to condtionally load modules? i.e. you maybe don't want to load every modules when only one is used in such or such page |
19:46:49
| <defunctzombie> | what module do I use for json parsing of newline stream content? |
19:46:57
| <defunctzombie> | I am already sending the stream trough 'split' |
19:47:11
| <defunctzombie> | so I already have what I want to json.parse |
19:47:40
| <chrisdickinson> | isaacs: question re node's zlib implementation: is there a way to get the compressed length back from inflate? |
19:47:47
| <chrisdickinson> | short of recompressing it. |
19:48:17
| <defunctzombie> | jsonstream is a no go https://github.com/creationix/jsonparse/issues/2 |
19:48:18
| <chrisdickinson> | basically i'm looking for `inflateUntil(expectedSize, function(err, info) { info.compressedSize; info.compressedData; }).write(buf)` |
19:48:24
| <defunctzombie> | that is a total show stopper.. wtf |
19:48:31
| <chrisdickinson> | defunctzombie: line-stream? |
19:48:47
| <chrisdickinson> | line stream piped to jsonstream? |
19:48:50
| <substack> | Ralt: https://github.com/epeli/lazy-browserify/blob/master/both.js |
19:49:00
| <defunctzombie> | chrisdickinson: jsonstream is blacklisted |
19:49:09
| <defunctzombie> | chrisdickinson: there is no way in hell I am using it and no one should be using it |
19:49:12
| <defunctzombie> | https://github.com/creationix/jsonparse/issues/2 |
19:49:15
| <chrisdickinson> | defunctzombie: http://github.com/chrisdickinson/json-parse-stream |
19:50:02
| <defunctzombie> | chrisdickinson: thanks but all of this stuff is too complex |
19:50:08
| <chrisdickinson> | ? |
19:50:11
| <defunctzombie> | chrisdickinson: I am just gonna use json.parse |
19:50:15
| <chrisdickinson> | 'kk |
19:50:29
| <defunctzombie> | chrisdickinson: it is silly to rely on so much code to do something which is alreayd done honestly |
19:50:34
| <defunctzombie> | so much can be broken |
19:50:38
| * chrisdickinson | shrugs |
19:50:45
| <chrisdickinson> | different use cases |
19:51:08
| <defunctzombie> | sure |
19:51:09
| <chrisdickinson> | streaming json parse is a lot nicer when you're dealing with things like large geojson features |
19:51:18
| <chrisdickinson> | but might be overkill for tiny json documents |
19:51:32
| <defunctzombie> | yes |
19:51:39
| <defunctzombie> | and my use case is newline delimited json messages |
19:51:55
| <defunctzombie> | it is 100% overkill and actually totally broken if you can't parse my numbers correctly |
19:53:46
| * timoxley | joined |
19:54:04
| <chrisdickinson> | nyergh, this zlib thing sucks ): |
19:54:06
| <mbalho> | streams: not always worth it |
19:54:30
| <substack> | now you can do this: https://github.com/epeli/lazy-browserify/blob/master/both.js |
19:54:40
| <substack> | mbalho: ^^^ relevant to your interests |
19:55:04
| <substack> | https://github.com/substack/browser-pack/pull/9#issuecomment-15361396 |
19:55:27
| <substack> | mbalho: if jsonparse had a bit more love it could be nice |
19:55:34
| <substack> | jsonparse isn't even streaming |
19:55:42
| <substack> | it's just easy to build streaming libs on top of it |
19:56:26
| <mbalho> | yea |
19:56:53
| <mbalho> | it suffers from caswellian neglect |
19:57:42
| <defunctzombie> | substack: https://github.com/substack/node-browserify/commit/e4017127557466092419d9e943c9d92ed7c1d2fa#commitcomment-2869508 |
19:58:04
| * mikolalysenko | quit (Ping timeout: 252 seconds) |
19:58:12
| <substack> | defunctzombie: send a pull req |
20:01:56
| <defunctzombie> | it is really sad that there is no simple json parser that fits the bill for a.pipe(split()).pipe(json) |
20:02:23
| <mbalho> | that is #2 most sad thing about browserifyville |
20:02:32
| <mbalho> | #1 is that there is no socket.io xhr polling replacement |
20:02:47
| <mbalho> | there is no "hey socket.io users go use X, Y, Z instead" |
20:02:51
| <defunctzombie> | mbalho: this is actually server side for me |
20:02:55
| <defunctzombie> | mbalho: engine.io |
20:02:59
| <defunctzombie> | mbalho: much better imho |
20:03:05
| <mbalho> | it shipped? |
20:03:08
| <defunctzombie> | ? |
20:03:12
| <defunctzombie> | mbalho: what do you mean |
20:03:19
| <defunctzombie> | it shipped a long time ago |
20:03:20
| <mbalho> | like it has passing tests and is usable |
20:03:26
| * timoxley | quit (Quit: Computer has gone to sleep.) |
20:03:27
| <defunctzombie> | yes |
20:03:28
| <mbalho> | docs, etc |
20:03:31
| <defunctzombie> | yes |
20:03:59
| <defunctzombie> | https://github.com/shtylman/engine.io-client |
20:04:11
| <defunctzombie> | and very minimal things required to work with browserify |
20:04:21
| <defunctzombie> | I am working to get upstream browserify compatible |
20:05:25
| <defunctzombie> | substack: for stream stuff, if I want to read newline stream data out of a stream, but write newline stringify into it.. wtf should hte .pipe look like? |
20:05:36
| <mbalho> | defunctzombie: i bet you could use websocket-stream with that? |
20:05:43
| <defunctzombie> | mbalho: with what? |
20:05:47
| <mbalho> | defunctzombie: the repo you just linked me |
20:05:51
| <mbalho> | defunctzombie: engine.io-client |
20:05:59
| <defunctzombie> | mbalho: I don't know what wbesocket-stream is |
20:06:05
| <mbalho> | defunctzombie: it wraps the websocket api in a stream |
20:06:14
| <mbalho> | defunctzombie: and it looks like engine.io-client implements the websocket api |
20:06:20
| <defunctzombie> | mbalho: ah, does it? maybe |
20:06:32
| <mbalho> | defunctzombie: looks very similar, onopen, onmessage, onclose |
20:06:35
| <defunctzombie> | mbalho: there is also https://github.com/Raynos/engine.io-stream |
20:06:46
| <defunctzombie> | mbalho: er https://github.com/Raynos/engine.io-stream/tree/wip-refactor |
20:06:55
| <substack> | defunctzombie: probably duplexer will help you write that |
20:06:56
| <substack> | and split |
20:06:58
| <mbalho> | defunctzombie: https://github.com/maxogden/websocket-stream/blob/master/index.js |
20:07:17
| <defunctzombie> | mbalho: try it :) maybe it will work |
20:07:21
| <substack> | mbalho: rollerskating invitation on the twitter I see |
20:07:26
| <mbalho> | WAT |
20:07:38
| <mbalho> | im at sweet bar, gonna hang out with the mapbox CEO in a little bit |
20:07:59
| <Ralt> | substack: looking, thanks |
20:08:36
| <substack> | right-o |
20:10:09
| <Ralt> | substack: so basically... the "lazy thing" is: build each bundle separately then use AMD? |
20:10:58
| <substack> | you don't need to use amd, head.js just fetches scripts asynchronously |
20:11:23
| * shuaib | quit (Quit: Textual IRC Client: http://www.textualapp.com/) |
20:12:36
| <defunctzombie> | substack: I have a single stream that is both readible and writable.. I need read to go through one set of things and write to do another.. duplexer seems to be for two different streams |
20:14:03
| <Raynos> | defunctzombie: you can merge that in if you wnat |
20:14:13
| <Raynos> | Ralt: :p |
20:15:48
| * ins0mnia | quit (Ping timeout: 264 seconds) |
20:16:34
| <Raynos> | mbalho: why doesn't sockjs work for you? |
20:16:40
| <jlord> | substack: it's a shame rollerskating didn't work out cause i have my own pair! |
20:17:21
| <mbalho> | Raynos: has too many deps, a native dependency, written in coffeescript |
20:17:34
| <mbalho> | Raynos: it could be way way way way simpler is all |
20:17:35
| <Raynos> | then we need streaming xhr |
20:17:50
| <substack> | jlord: sounds like it's still taking place |
20:19:24
| * ins0mnia | joined |
20:19:41
| <jlord> | substack: yeah, but i'm at sweetbar for the same hangout as mbalho |
20:19:55
| <substack> | same hangout? |
20:20:14
| <mbalho> | its a new hip term for gathering |
20:20:15
| * marcello3d | joined |
20:20:35
| <jlord> | substack: haha we're bothing meeting up with a guy we know from mapbox who is in town |
20:23:32
| <mbalho> | Raynos: its complicated cause xhr sucks at streaming, you need 2 libs, one that does long-polling reads + reconnects and another that does a write stream by making a new xhr on every .write (maybe with buffering) |
20:23:47
| <mbalho> | Raynos: then a third lib that ties both together into the stream api |
20:24:01
| <mbalho> | i think parts of this exist but i always forget |
20:24:53
| <defunctzombie> | holy jesus I figured out out |
20:25:18
| <defunctzombie> | mbalho: I would use engine.io-client or stream and then write the reconnect magic on that |
20:25:23
| <substack> | xhr-write-stream exists |
20:25:28
| <defunctzombie> | mbalho: since it will tell you when the underlying has ended |
20:25:49
| <defunctzombie> | mbalho: I haven't gotten around to doing that myself yet but will at some point |
20:29:55
| <substack> | I've only been <2km from my house the past week and a half |
20:30:03
| <mbalho> | #locovore |
20:30:15
| <substack> | need to properly fix that bike |
20:30:20
| <substack> | mbalho: pretty much! |
20:30:33
| <mbalho> | substack: you should get a new bike |
20:30:37
| <isaacs> | chrisdickinson: no, and even re-compressing won't do the same unless you are sure to set the same windowLength, compressionLevel, etc. |
20:30:43
| <chrisdickinson> | yeah |
20:30:46
| <chrisdickinson> | i worked around it |
20:30:54
| <chrisdickinson> | now to replicate it in browser |
20:31:00
| <isaacs> | chrisdickinson: if you're inflating, yuou can just watch the length before you inflate it |
20:31:17
| <chrisdickinson> | isaacs: the use case is for git packfiles |
20:31:50
| <chrisdickinson> | basically, you're sent a packfile which is a stream of objects with an object header that defines the inflated size and type of the object; but the next object is compressedLength away |
20:31:56
| <isaacs> | k |
20:32:05
| <chrisdickinson> | it's a totally weird use case |
20:32:10
| <isaacs> | yeah |
20:32:13
| <Raynos> | mbalho: substack wrote the write part with xhr-write-stream |
20:32:19
| <chrisdickinson> | basically, "inflate until you get to size; then tell me how big the compressed data was" |
20:32:21
| <Raynos> | someone needs to do the read part with stream / long polling / jsonp |
20:32:25
| <chrisdickinson> | but i got it to work with the zlib module |
20:32:34
| <chrisdickinson> | it kind of sucks, since it involves writing one byte at a time and flushing |
20:32:35
| <isaacs> | chrisdickinson: right, so you have to watch the input |
20:32:47
| <isaacs> | chrisdickinson: ew... |
20:32:52
| <Raynos> | mbalho: then we need a 4th lib that starts with xhr and switched to ws if it exists! |
20:32:57
| <isaacs> | chrisdickinson: flushing every byte is insanely expensive |
20:33:00
| <chrisdickinson> | (though if you have a better idea -- like, maybe flushing isn't necessary? -- i'm totally open to ideas :D) |
20:33:08
| <Raynos> | mbalho: the hard part is how i test dis on testling cc substack |
20:33:16
| <isaacs> | chrisdickinson: i don't know |
20:33:20
| <chrisdickinson> | 'kk |
20:33:26
| <chrisdickinson> | i'll try without the flush |
20:33:36
| <mbalho> | Raynos: for newer browser you can just do it over CORS |
20:33:41
| <chrisdickinson> | it might be unnecessary with a certain magic soup of zlib options |
20:33:51
| <chrisdickinson> | what's worse is the browser version |
20:33:57
| <chrisdickinson> | since zlib-browserify only has inflateSync |
20:33:57
| * marcello3d | quit (Read error: Connection reset by peer) |
20:34:05
| <Raynos> | mbalho: I'm happy to have a cors xhr streaming thing with IE9+ support :D |
20:34:08
| <Raynos> | fuck oldIE |
20:34:12
| <substack> | mbalho: looking at http://sfbay.craigslist.org/eby/bik/3688846745.html |
20:34:22
| <chrisdickinson> | you just have to accumulate bytes, and write them until you get a response that is the right size |
20:34:25
| <Raynos> | I wrote https://github.com/Raynos/xhr/blob/master/index.js for IE9 with a shit ton of IE9 cors bug fixes |
20:34:31
| <chrisdickinson> | and, you know, catch errors when it can't be decompressed |
20:34:38
| * chrisdickinson | weeps |
20:34:56
| <mbalho> | substack: that looks pretty sweet |
20:35:02
| <mbalho> | substack: road bikes are for hipsters anyway |
20:36:42
| <substack> | might be a bit small though? |
20:37:10
| * yorick | joined |
20:37:10
| * yorick | quit (Changing host) |
20:37:10
| * yorick | joined |
20:37:29
| <isaacs> | substack: how tall are you? |
20:37:52
| <substack> | 5 feet 10 inches |
20:37:55
| <substack> | in those silly units |
20:37:58
| <isaacs> | right |
20:38:12
| <defunctzombie> | hahaha |
20:38:14
| <isaacs> | i feel like people are in 3 basic categories: small, medium, and large. |
20:38:31
| <isaacs> | small is everyone about marisa's size or smaller. medium is there to my height. large is anything above my height. |
20:38:34
| <chrisdickinson> | hrm, yeah, looks like flushing every byte is going to be the way to go ): |
20:38:47
| <isaacs> | substack: you're definitely a "medium" |
20:39:10
| <isaacs> | chrisdickinson: is there some way that you can detect when it starts being a header of the next thing? |
20:39:18
| <isaacs> | chrisdickinson: other than the decompressed length? |
20:40:08
| <chrisdickinson> | not really, the first byte of a header is formatted CTTTNNNN, where C == continue to next byte, TTT defines the type, and NNNN is the first portion of the size |
20:40:39
| <chrisdickinson> | ah |
20:40:51
| <chrisdickinson> | i could hook onto TTT, and if it's any of the expected numbers, *then* flush |
20:40:57
| <chrisdickinson> | i bet. |
20:41:52
| <chrisdickinson> | git's packfiles are hilariously interesting beasts |
20:42:14
| <chrisdickinson> | they're both the transfer medium as well as an object database, and the heuristics that go into packing them is really odd |
20:42:41
| * stlsaint | quit (Ping timeout: 240 seconds) |
20:45:15
| * defunctzombie | changed nick to defunctzombie_zz |
20:49:23
| <chrisdickinson> | so i can get it to skip some number of bytes for flushing, but i'm not sure if it's worth it |
20:49:57
| <chrisdickinson> | isaacs: what kind of overhead is that `flush` incurring? is it tying up the CPU? eating up memory? or the event loop? |
20:50:08
| <chrisdickinson> | (sorry for all the questions.) |
20:55:24
| * Domenic_ | joined |
20:55:31
| * nicholasf | joined |
20:57:43
| <isaacs> | chrisdickinson: well, zlib is designed to work on more than one byte at a time |
20:57:53
| <isaacs> | chrisdickinson: this way, it collects up output until it reaches a certain size. |
20:58:00
| <isaacs> | if you have more input, you can do a better job compressing it |
20:58:07
| <chrisdickinson> | ah |
20:58:10
| <chrisdickinson> | well, this is decompression |
20:58:14
| <isaacs> | for example, if you write one byte, then flush, repeatedly, the compressed output will be *larger* than the input. |
20:58:24
| <isaacs> | right |
20:58:36
| <isaacs> | so, basically, you're not going to be decompressing as efficiently, either |
20:58:38
| <Raynos> | isaacs: whom is marisa |
20:58:46
| <isaacs> | Raynos: my special lady friend |
20:58:54
| <mbalho> | Lady++ version 5000 |
20:59:06
| <isaacs> | Raynos: also, it's "who" , not "whom" |
20:59:14
| <Raynos> | :( |
20:59:16
| <isaacs> | Raynos: whom is only when it's the direct object |
20:59:36
| <isaacs> | Raynos: and also, you can use "who" there, sine "whom" is archaic, but you'er from europe, so you get to speak in archaic weirdo lingo ;)_ |
20:59:59
| <isaacs> | so, "to whom are you speaking" vs "who are you" |
21:00:14
| <Raynos> | o_o; |
21:00:23
| <Raynos> | i like archaic |
21:00:38
| <isaacs> | but you wouldn't say "whom are you speaking to", because the rule about ending on prepositions is lower on the food chain than the rule about using whom, so if you're going to break one, you may as well just go ahead and break the other, too |
21:00:45
| <isaacs> | though both rules are outdated nowadays |
21:00:58
| <Raynos> | searching for all references to Date.now() and killing them |
21:01:00
| <Raynos> | kill them with fire |
21:01:49
| <chrisdickinson> | zlib will be the death of me )`: |
21:02:02
| <chrisdickinson> | at least things have gotten much better in the last two years |
21:02:04
| <hij1nx> | chrisdickinson: nice work on all the git modules! maybe you'll beat creationx to a working git in JS! |
21:02:25
| <chrisdickinson> | before, there was only an unlicensed japanese raw inflate/deflate implementation floating around the web :| |
21:02:31
| <chrisdickinson> | hij1nx: thanks! |
21:04:57
| <chrisdickinson> | once i can read packfiles (sans indexes) i can whip up an in-browser demo |
21:05:41
| <chrisdickinson> | then it's just… well, writing objects, updating refs, and pushing refs |
21:06:02
| <chrisdickinson> | also, serving git upload-pack |
21:06:12
| <chrisdickinson> | so, there's a lot left :) |
21:06:28
| * Benvie | joined |
21:19:28
| * defunctzombie_zz | changed nick to defunctzombie |
21:30:52
| <defunctzombie> | I feel like I must be missing something... is there no example of a newline json protocol with some simple streams piped together? |
21:30:59
| <defunctzombie> | I want to write objects and read objects |
21:31:14
| <defunctzombie> | to/from newline delimited small json messages |
21:31:44
| <defunctzombie> | maybe I am thinking about it wrong |
21:31:45
| <mbalho> | EventSource + SSE |
21:31:50
| <substack> | defunctzombie: https://github.com/dominictarr/stream-serializer |
21:31:54
| <mbalho> | is the 'protocol' for line delimited json |
21:32:24
| <defunctzombie> | substack: ahh.. so you do call it and give it the stream |
21:32:31
| <defunctzombie> | substack: that is the same approach I came to |
21:32:46
| <defunctzombie> | substack: but was thinking I could be smarter with .pipe or something, but it don't work like that |
21:33:18
| <defunctzombie> | that module needs some love |
21:33:21
| <defunctzombie> | it console logs errors |
21:33:23
| <defunctzombie> | haha |
21:38:39
| <defunctzombie> | what I want is something that puts that together with the read side too |
21:38:50
| <defunctzombie> | basically, I want JsonWire(socket); |
21:38:51
| <chrisdickinson> | output.pipe(lineStream()).pipe(through(JSON.parse))? |
21:39:00
| <chrisdickinson> | well |
21:39:09
| <defunctzombie> | is that gonna work? |
21:39:18
| <chrisdickinson> | output.pipe(lineStream()).pipe(through(function(d) { this.queue(JSON.parse(d)) })) |
21:39:19
| <substack> | no |
21:39:20
| <defunctzombie> | I need to be able to write to it and have it send newline json |
21:39:36
| <defunctzombie> | and read from it for whatever data it received |
21:39:46
| <chrisdickinson> | that'll do output, but not input |
21:39:57
| <defunctzombie> | chrisdickinson: doing one or the other is easy |
21:40:12
| <defunctzombie> | I want something that puts a json linefeed interface on top of a read/write stream |
21:40:28
| <chrisdickinson> | 1 sec |
21:40:35
| * defunctzombie | thinks that isn't something crazy |
21:42:18
| <defunctzombie> | https://gist.github.com/shtylman/5233671 |
21:42:27
| <defunctzombie> | ideally, that in.send would be an in.write |
21:42:36
| <defunctzombie> | so that this would become like any other stream |
21:43:26
| * marcello3d | joined |
21:43:41
| * nicholasf | quit (Remote host closed the connection) |
21:43:44
| <defunctzombie> | so far that is the only way I have been able to accomplish this |
21:47:00
| <chrisdickinson> | 2 secs |
21:47:53
| * thl0_zz | joined |
21:49:00
| <defunctzombie> | chrisdickinson: hahaha |
21:50:09
| * shama | quit (Read error: Connection reset by peer) |
21:50:30
| * shama | joined |
21:51:11
| <chrisdickinson> | okay done |
21:52:01
| * stlsaint | joined |
21:52:01
| * stlsaint | quit (Changing host) |
21:52:02
| * stlsaint | joined |
21:52:07
| <chrisdickinson> | defunctzombie: https://gist.github.com/chrisdickinson/5233706 |
21:52:17
| <chrisdickinson> | maybe not the most elegant |
21:52:47
| <chrisdickinson> | everything you write to the stream will be stringified and line delimited, then sent |
21:52:54
| <thl0_zz> | cloning typescript is soooo slow and from browsing code online it is hard to tell now to use it as a module to compile a single file |
21:53:00
| * thl0_zz | changed nick to thl0 |
21:53:05
| <chrisdickinson> | everything you receive will be line delimited, json parsed, and output as js objects |
21:53:10
| <thl0> | guess typefy is not happening ;0 |
21:53:54
| <chrisdickinson> | defunctzombie: does that do what you want? |
21:54:03
| <defunctzombie> | chrisdickinson: looking |
21:54:21
| <chrisdickinson> | it's basically objects in, objects out |
21:54:33
| <chrisdickinson> | but whatever goes in the middle -- tcp, http, etc etc |
21:55:23
| <defunctzombie> | right |
21:55:27
| <defunctzombie> | chrisdickinson: why use duplex? |
21:55:37
| <chrisdickinson> | makes life easy-ish |
21:56:09
| <chrisdickinson> | biggest problem is exposing the error events of sub streams on the outer stream |
21:56:13
| <chrisdickinson> | which is a little gross |
21:56:16
| <defunctzombie> | oh, I see |
21:56:20
| <defunctzombie> | duplex is the thing you retrn |
21:56:22
| <defunctzombie> | *return |
21:56:24
| <chrisdickinson> | yep |
21:56:46
| <defunctzombie> | why not return a through? |
21:56:52
| <defunctzombie> | cause then you can't write to it |
21:56:54
| <defunctzombie> | I suppose |
21:56:56
| <chrisdickinson> | well |
21:57:01
| <chrisdickinson> | it's sort of a mixed situation |
21:57:07
| <chrisdickinson> | you want the data from the other end of a series of pipes |
21:57:17
| <chrisdickinson> | i suppose you could |
21:57:20
| <defunctzombie> | yea |
21:57:21
| <chrisdickinson> | make a fake through |
21:57:28
| <defunctzombie> | that is what made this weird |
21:57:30
| <chrisdickinson> | fake-y |
21:57:33
| <defunctzombie> | I like this tho |
21:57:43
| <defunctzombie> | need to change out split() for lines() |
21:57:48
| <defunctzombie> | or maybe they do the same thing |
21:57:49
| <defunctzombie> | haha |
21:57:59
| <defunctzombie> | anyhow.. certainly more along the lines of what I needed |
21:58:02
| <defunctzombie> | thank you! |
21:58:11
| <defunctzombie> | this needs to be a module |
21:58:39
| <chrisdickinson> | here, i'll update and just use through |
21:58:47
| <chrisdickinson> | ah that's right |
21:59:01
| <chrisdickinson> | i use duplex because the write can be paused separately from the output |
21:59:07
| <chrisdickinson> | derp! |
21:59:09
| <chrisdickinson> | i forgot :) |
21:59:17
| <defunctzombie> | ? |
21:59:42
| <defunctzombie> | why would the write be paused separately? |
22:00:00
| <chrisdickinson> | like in tcp -- we might be blocked from writing more, but not receiving more data |
22:00:08
| <chrisdickinson> | the read and write are semi-independent |
22:00:23
| <defunctzombie> | jesus |
22:00:35
| <defunctzombie> | wouldn't that just backpressure tho? |
22:00:40
| * mikolalysenko | joined |
22:00:47
| <defunctzombie> | so if we can't write, whatever is writing to us should backpressure |
22:00:48
| <chrisdickinson> | tbh, i'm not completely sure at the moment :) |
22:00:53
| <chrisdickinson> | right |
22:00:59
| <defunctzombie> | how would it even look with through and no duplex? |
22:01:02
| * defunctzombie | is curious |
22:01:09
| <defunctzombie> | less deps make me happier |
22:01:48
| <chrisdickinson> | defunctzombie: https://gist.github.com/chrisdickinson/5233706#file-no-duplex-only-through-js |
22:02:36
| <defunctzombie> | chrisdickinson: nice |
22:02:41
| <chrisdickinson> | :D |
22:02:41
| * wolfeidau | quit (Remote host closed the connection) |
22:02:41
| <defunctzombie> | and the set encoding can go |
22:02:43
| <defunctzombie> | I think |
22:02:49
| <chrisdickinson> | line-stream is picky about that |
22:02:52
| <chrisdickinson> | it wants strings |
22:02:55
| <defunctzombie> | cause you can just do it at function call |
22:03:08
| <chrisdickinson> | well |
22:03:13
| <chrisdickinson> | might work actually: https://github.com/soldair/node-line-stream/blob/master/index.js |
22:03:16
| <defunctzombie> | or you can make the use do it |
22:03:34
| <defunctzombie> | I use split() anyhow |
22:03:36
| <defunctzombie> | I will try both haha |
22:04:23
| <defunctzombie> | chrisdickinson: do all the errors need to be handled like that? |
22:04:28
| <defunctzombie> | I was under the impression pipe would do it |
22:04:30
| <chrisdickinson> | you want them to be, yeah |
22:04:49
| <chrisdickinson> | well, you want to propagate them to the user so he/she can do something about it |
22:05:04
| <chrisdickinson> | otherwise they'd end up at that module internally and no one could ever listen for them |
22:05:07
| <chrisdickinson> | which would suck |
22:06:43
| * marcello3d | quit (Ping timeout: 256 seconds) |
22:06:43
| <defunctzombie> | right |
22:07:28
| <defunctzombie> | something not working |
22:08:11
| <defunctzombie> | that no through example seems broken |
22:09:46
| <chrisdickinson> | ah |
22:09:48
| <chrisdickinson> | damn ): |
22:10:02
| <chrisdickinson> | you might go with the duplex one |
22:10:15
| <defunctzombie> | wonder why it is broken |
22:10:19
| <defunctzombie> | seems to be double encoding or something |
22:13:06
| * defunctzombie | changed nick to defunctzombie_zz |
22:13:40
| * dominictarr | joined |
22:15:03
| <Raynos> | https://gist.github.com/chrisdickinson/5233706#file-no-duplex-only-through-js-L7 |
22:15:04
| <Raynos> | lol wut |
22:15:32
| * mikeal | quit (Quit: Leaving.) |
22:17:17
| <chrisdickinson> | hi Raynos |
22:17:51
| * wolfeidau | joined |
22:19:24
| <Raynos> | hi :D |
22:19:27
| <Raynos> | i am fixing your thing |
22:19:28
| <Raynos> | because its complex |
22:19:32
| <chrisdickinson> | what's wrong with it? |
22:19:36
| <chrisdickinson> | which one? |
22:19:48
| <dominictarr> | Raynos: yo |
22:20:12
| <Raynos> | dominictarr: I agree that writable as half duplex is good. writable(end, data) >>> writable(head, tail) |
22:20:14
| * mikolalysenko | quit (Ping timeout: 246 seconds) |
22:20:53
| <dominictarr> | huh, what do you mean by half-duplex? |
22:21:25
| <dominictarr> | oh, because you don't pass a callback? |
22:22:26
| <Raynos> | as in |
22:22:44
| <Raynos> | having a half duplex writable as function (readable) { /* writable logic */ do not return readable } |
22:22:54
| <Raynos> | so that it can pull more from readable whenever it wants |
22:25:57
| <dominictarr> | usually, they shouldn't pull until their previous call has returned. |
22:29:48
| <dominictarr> | so so tired, jet lag... |
22:30:09
| <Raynos> | chrisdickinson: never mind |
22:30:20
| <chrisdickinson> | aw, dang |
22:30:24
| <Raynos> | your implementation is decent. json is complex |
22:30:34
| <chrisdickinson> | for real horror: https://github.com/chrisdickinson/inflate-until |
22:30:44
| <dominictarr> | chrisdickinson: https://github.com/dominictarr/pull-stream#more-cool-stuff |
22:31:11
| <chrisdickinson> | interesting! |
22:33:17
| <Raynos> | dominictarr: I'm going to change my api https://github.com/Raynos/recurse-stream/issues/3#issuecomment-15371013 except for (writable, isClosed) |
22:33:44
| <Raynos> | dominictarr: we should also implement a new line deliminated json pull stream |
22:34:12
| <chrisdickinson> | :) |
22:43:16
| * dominictarr | quit (Quit: dominictarr) |
22:46:45
| * mikeal | joined |
22:48:49
| <Raynos> | chrisdickinson: why so much git madness? |
22:49:25
| <chrisdickinson> | Raynos: i had implemented a big swath of it two years ago, before browserify |
22:49:40
| <chrisdickinson> | so, when i heard about js-git i got interested in how it would look today |
22:50:11
| <chrisdickinson> | plus, if i get it mostly done early, creationix gets extra time to make everything super awesome |
22:51:36
| * mikeal | quit (Ping timeout: 276 seconds) |
22:51:56
| <chrisdickinson> | it turns out that browserify -- and modern node -- make it a lot easier |
22:56:12
| <Raynos> | :) |
22:59:38
| <chrisdickinson> | the hardest part is still zlib |
22:59:45
| <chrisdickinson> | it's a lot better than it was |
22:59:47
| <chrisdickinson> | but it's still hard ): |
23:00:43
| <Domenic_> | how do you do progress in streams2 |
23:00:50
| <Domenic_> | since listening to "data" kills the streams2-ness. |
23:02:21
| <Domenic_> | substack: for an S3 library I maintain, would you recommend doing http(s) requests with `agent: false`? Not sure if it's my job to make that choice for consumers, but on the other hand, many consumers are getting screwed by the default pooling behavior. |
23:05:45
| <substack> | absolutely do that |
23:05:59
| <substack> | it's reckless to use the default pooling behavior |
23:07:13
| <Domenic_> | ok sweet |
23:10:03
| * mikolalysenko | joined |
23:10:40
| <Raynos> | was there a japanese nodeconf before? |
23:10:53
| <Raynos> | Domenic_: What is progress? |
23:11:13
| <Raynos> | you can just pipe it |
23:11:17
| <substack> | Raynos: yes |
23:11:24
| <substack> | I'm wearing the tshirt |
23:11:42
| <Domenic_> | Raynos: it is displaying how far an upload or download has progressed, i.e. how many bytes compared to the Content-Length header. |
23:12:25
| <Raynos> | use pipe or on data |
23:12:27
| <Raynos> | whatever works |
23:12:30
| * duncanbeevers_ | quit (Ping timeout: 245 seconds) |
23:12:31
| * sveisvei | quit (Ping timeout: 245 seconds) |
23:13:03
| <Domenic_> | I would like to not kick consumers into old-mode |
23:13:32
| * mintxian | joined |
23:13:43
| <substack> | res.pipe(someplace); var total = 0; res.pipe(through(function (buf) { total += buf.length; process.stdout.write((total / res.headers['content-length']) + ' \r') })) |
23:13:54
| <substack> | assuming through can do streams2 |
23:13:56
| * devaholic | quit (Ping timeout: 248 seconds) |
23:13:57
| * pikpik | quit (Ping timeout: 248 seconds) |
23:14:11
| <Domenic_> | kk |
23:14:30
| * zu | joined |
23:15:00
| * Nexxy | quit (Ping timeout: 245 seconds) |
23:15:04
| * isaacs_ | joined |
23:15:06
| * Nexxy | joined |
23:15:06
| * Nexxy | quit (Changing host) |
23:15:06
| * Nexxy | joined |
23:16:02
| * Benvie_ | joined |
23:16:18
| * brianloveswords_ | joined |
23:16:59
| * jjjjohnnny | joined |
23:17:14
| <Raynos> | Domenic_: streams will be randomly kicked into old-mode. that ship is fucked |
23:18:18
| * mikeal | joined |
23:19:13
| * chilts_ | joined |
23:19:23
| * Altreus_ | joined |
23:19:48
| * Benvie | quit (Ping timeout: 264 seconds) |
23:20:28
| * spion | quit (Ping timeout: 246 seconds) |
23:20:33
| * zu_ | quit (*.net *.split) |
23:20:33
| * mint_xian | quit (*.net *.split) |
23:20:33
| * chilts | quit (*.net *.split) |
23:20:33
| * isaacs | quit (*.net *.split) |
23:20:33
| * brianloveswords | quit (*.net *.split) |
23:20:36
| * mintxian | changed nick to mint_xian |
23:20:41
| * jden|zz_ | joined |
23:20:57
| * crank_ | joined |
23:21:19
| * Guest44152 | joined |
23:21:32
| * notelliottcable | quit (Ping timeout: 264 seconds) |
23:21:41
| * mikolalysenko | quit (Ping timeout: 252 seconds) |
23:23:40
| * jden|zz | quit (Ping timeout: 245 seconds) |
23:23:46
| * hij1nx | quit (Ping timeout: 248 seconds) |
23:23:46
| * Guest38188 | quit (Ping timeout: 248 seconds) |
23:23:47
| * jjjjohnn1y | quit (Ping timeout: 248 seconds) |
23:23:47
| * mirkok | quit (Ping timeout: 248 seconds) |
23:23:47
| * Altreus | quit (Ping timeout: 248 seconds) |
23:23:47
| * crank | quit (Remote host closed the connection) |
23:24:14
| * hij1nx | joined |
23:24:27
| * _ddgbot | quit (Ping timeout: 260 seconds) |
23:24:36
| * devaholic | joined |
23:24:36
| * isaacs_ | changed nick to Guest88068 |
23:24:52
| * mirkok | joined |
23:25:07
| * pikpik | joined |
23:25:45
| * thatguydan | joined |
23:28:11
| <substack> | ploy is getting so sweet |
23:28:31
| <substack> | and it's still so tiny |
23:32:00
| * ins0mnia | quit (Ping timeout: 260 seconds) |
23:35:20
| * chrisdickinson | quit (Ping timeout: 264 seconds) |
23:37:07
| * chrisdickinson | joined |
23:39:42
| <substack> | woot, just hit 2k followers on github |
23:46:40
| <substack> | why are programmers so threatened by amateurism :/ |
23:47:20
| <substack> | https://twitter.com/joemccann/status/315968493512187904 |
23:48:10
| <Domenic_> | i think it's more that they like things neat and tidy |
23:48:45
| <substack> | "opinionated" tidy vertical stacks are not very flexible |
23:48:57
| <substack> | they are not useful for me when I go to solve problems that I have |
23:49:06
| <substack> | because I need to buy into the whole ideology just to use a tiny piece |
23:51:59
| <substack> | npm needs more modules, not less |
23:52:04
| <substack> | ESPECIALLY if they are garbage |
23:52:06
| * Guest88068 | quit (*.net *.split) |
23:52:17
| <substack> | can't get quality without garbage |
23:52:19
| * rvagg | quit (Ping timeout: 264 seconds) |
23:52:35
| <Domenic_> | O_o |
23:52:37
| * isaacs | joined |
23:52:40
| <Domenic_> | the latter does not imply the former |
23:52:53
| <substack> | any barriers that prohibit garbage will also invariably inhibit quality |
23:53:01
| * isaacs | changed nick to Guest62188 |
23:53:04
| * rvagg | joined |
23:55:15
| <substack> | and garbage provides cover for quality |
23:55:29
| <substack> | people get standoffish about publishing when everything is really clean and tidy |
23:55:54
| <substack> | and I want people to publish more so I can use their creations |
23:55:55
| <guybrush> | just look at github, how much repos are there exactly? and there is also only so much namespace, and of course lots of garbage :D |
23:57:45
| * jlord_ | joined |
23:57:48
| * Altreus_ | quit (*.net *.split) |
23:57:48
| * jjjjohnnny | quit (*.net *.split) |
23:57:52
| * pikpik | quit (*.net *.split) |
23:57:52
| * mirkok | quit (*.net *.split) |
23:57:52
| * chilts_ | quit (*.net *.split) |
23:57:53
| * mint_xian | quit (*.net *.split) |
23:57:53
| * FireFly | quit (*.net *.split) |
23:57:53
| * munro | quit (*.net *.split) |
23:58:38
| <guybrush> | also npm works with git anyway and custom registries and tarballs |
23:58:54
| <thl0> | http://i.imgur.com/hj1J1Nt.png |
23:59:28
| <thl0> | debugging classes with es6ify browserify transform |
23:59:53
| <thl0> | substack: like it? |