nodejs/code-and-learn

Code And Learn at NodeFest 2017

hiroppy opened this issue · 32 comments

Hi!

We will hold NodeFest which is the largest Node.js conference in Japan.
I’m one of the organizers this year.
The team members are @yosuke-furukawa, @watilde, myself and some other great nodeschool staff.

We would like to open code-and-learn-jp on NodeFest and support the contribution to nodejs/core.

Please feel free to suggest any contribution areas for the participants! @nodejs/collaborators
We will receive some PRs on 26th November.(http://nodefest.jp/2017/schedule.html)

/cc @yosuke-furukawa @watilde @nodejs/nodejs-ja

Thanks.

Mentors

cc @Trott @addaleax

Also, I will be there. Happy to help out with whatever needed.

Of course I will be there 👍

Possible case in tests: nodejs/node#16243 (comment) + next comment: check else if by if replacements when a previous if contains return. Also check else eliminations on similar condition.

@vsemozhetbyt Thank you for your information!

Note: Here is the last time we had - #58

This is awesome. Keep in mind that we're also running a small code-and-learn at NodeConf EU at the beginning of November so some of the tasks may adjust after that. We should likely coordinate a bit in advance to make sure we don't end up duplicating any effort! :-) (I totally wish I was able to get to Tokyo this year)

One possible set of tasks that I can suggest for new contributors who are bit more confident in their Node.js skills, would be converting tests to use the new ../common/countdown utility module.

For instance, if you take a look at: https://github.com/nodejs/node/blob/master/test/parallel/test-http2-client-destroy.js, you'll see that there is a remaining counter (https://github.com/nodejs/node/blob/master/test/parallel/test-http2-client-destroy.js#L19). The test then counts down remaining before closing the server. There are quite a large number of tests in our suite that perform similar actions in ways that are rather inconsistent. The ../common/countdown utility was designed to bring some consistency there.

The way the Countdown utility works is straightforward:

const common = require('../common');
const Countdown = require('../common/countdown');

// ...

const countdown = new Countdown(n, common.mustCall(() => {
  // do something here
}));

// Decrement the counter, the callback is called synchronously when
// countdown.dec is called n times.
countdown.dec();

I know that there are quite a few of the http2 tests that can benefit from this, along with a bunch of other http and https tests.

These tasks would be for folks who are a bit more comfortable with their Node.js skills.

Another potential suggestion is replacing assert.throws(fn, common.expectsError(err)); with common.expectsError(fn, err); It's another thing I would like to ideally introduce an eslint rule for (already have it written) but there are currently a ton of instances where we use the former.

I think that's pretty similar in difficulty to the change that was done at Node.js Interactive this year.

A simple thing is removing the redundant + from +conf.n in the benchmarks. If the values are integers in the bench(main, conf) object they will be integers in the main(conf) object too.

example: https://github.com/nodejs/node/blob/master/benchmark/assert/deepequal-object.js#L30L31

@jasnell @apapirovski @AndreasMadsen Thanks.🙌 I try to summarize that information in Gist.
You should come to Nodefest2017!!

@abouthiroppy For my suggestion above, I created a gist with an eslint rule that will let you find all instances of assert.throws(fn, common.expectsError(err));.

@MylesBorins Thanks!! yep, but I don't know the values session of node interactive. Would you give me this information?

@apapirovski wow, thank you so much 🙇 I'll use it!

I'm on the fence about attending (concerned about the cost mostly).

Also, I will be there. Happy to help out with whatever needed.

Sorry for my late reply.

@seishun I think that Node.js Foundation will help with the cost.
@fhinkel Thanks!

Trott commented

@seishun I think that Node.js Foundation will help with the cost.

I don't think the foundation typically sends Collaborators to an event simply because it's a Node.js event. It's usually a Collaborator Summit. There have been some exceptions though, like sending particular people to a TC-39 meeting one time.

That said, there's absolutely nothing stopping any Collaborator from requesting funds from the TSC for something by opening an issue in the TSC repository.

Have we prepared a list of changes for participants to implement?

How many people are we expecting?

I guess 30 - 50 people.

Have we prepared a list of changes for participants to implement?
Not yet !! I will create the list asap...

a list of changes for participants 

TODO file line note status
Fix typo doc/api/util.md 695 occuring
Add link of ECMAScript 2015 doc/api/buffer.md 2740
Add link to dns.resolve() doc/api/dns.md 632
Use common.hasIntl instead of typeof Intl test/parallel/test-intl-v8BreakIterator.js 6
replace Function with Arrow Function doc/api/util.md 442, 552, 567, 568
test-writeint.js
test-querystring.js
test-assert.js
test-http.js 109, 118, 127, 128
test-http-pause.js
doc/api/vm.md 477
test-timers.js
test-whatwg-url-searchparams-getall.js
test-writeuint.js
test-child-process-send-cb.js
test-zerolengthbufferbug.js
test-domain-top-level-error-handler-clears-stack.js
use === and ' test-whatwg-url-setters.js 43
add ; test-whatwg-url-setters.js 35, 81
make use of const or let test-whatwg-url-setters.js 41 - 49
many files.... find ./ -type f -print | xargs grep var
fix comments test-assert.js 617, 5292
make use of Number.isNaN test-process-emit.js 22
test-readdouble.js
test-readfloat.js
test-writedouble.js
test-writefloat.js

please modify freely!

We can try replacing all the google.com or this.hostname.is.invalid etc. references in test/parallel with configurable variables defined in internet.addresses

Also there are a few tasks that could be more advanced: find the tests in test/parallel that are making actual dns calls, use mocked lookup functions or put those in test/internet. Searching for DNS error codes like EAI_AGAIN or ENOTFOUND in test/parallel would yield a bunch of tests that try to work around this even though they are not supposed to work around that.

I've added some to #72 (comment).

TODO file line note status
Replace e->ToObject(env->isolate()) with e->ToObject(env->context()).ToLocalChecked() src/node.cc line 592
Replace e->ToObject(env->isolate()) with e->ToObject(env->context()).ToLocalChecked() src/node.cc line 754
Replace er->ToObject(env->isolate()) with er->ToObject(env->context()).ToLocalChecked() src/node.cc line 1485
Replace args[0]->ToObject(env->isolate()) with args[0]->ToObject(env->context()).ToLocalChecked() src/node.cc line 2304
Replace args[1]->ToString(env->isolate()) with args[1]->ToString(env->context()).ToLocalChecked() src/node.cc line 2322
Replace module->Get(exports_string)->ToObject(env->isolate()) with module->Get(exports_string)->ToObject(env->context()).ToLocalChecked() src/node.cc line 2367
Replace process_object->Get(exit_code)->ToInteger(env->isolate()) with process_object->Get(exit_code)->ToInteger(env->context()).ToLocalChecked() src/node.cc line 4340
Replace args[1]->ToString(env->isolate()) with args[1]->ToString(env->context()).ToLocalChecked() src/node_buffer.cc line 609
Replace args[0]->ToString(env->isolate()) with args[0]->ToString(env->context()).ToLocalChecked() src/node_buffer.cc line 680
Replace args[0]->ToString(env->isolate()) with args[0]->ToString(env->context()).ToLocalChecked() src/node_contextify.cc line 624
Replace args[1]->ToObject(env->isolate()) with args[1]->ToObject(env->context()).ToLocalChecked() src/node_file.cc line 1222
Replace e->ToObject(env->isolate()) with e->ToObject(env->context()).ToLocalChecked() src/node_http_parser.cc line 469
Replace args[1]->ToObject(env->isolate()) with args[1]->ToObject(env->context()).ToLocalChecked() src/node_zlib.cc line 181
Replace args[4]->ToObject(env->isolate()) with args[4]->ToObject(env->context()).ToLocalChecked() src/node_zlib.cc line 190
Replace args[0]->ToObject(env->isolate()) with args[0]->ToObject(env->context()).ToLocalChecked() src/process_wrap.cc line 146
Replace chunk->ToString(env->isolate()) with chunk->ToString(env->context()).ToLocalChecked() src/stream_base.cc line 130
Replace chunk->ToString(env->isolate()) with chunk->ToString(env->context()).ToLocalChecked() src/stream_base.cc line 182

This is generated with a script but should be a safe list

Sorry, accidentally pressed the wrong button

All of the following files have string concatenation that can be replaced with template strings

Refactor instances of concatenated strings to use template strings as long as the result is less than 80 characters (our max line length). Not all instances of concatenated strings need to be replaced, specifically look out for strings that are using concatenation for variables. If you are unsure please feel free to raise your hand an ask for assistance. Alternatively a collaborator will be able to verify your work when you submit your pull request.

  'test/abort/test-zlib-invalid-internals-usage.js'
  'test/async-hooks/init-hooks.js'
  'tools/doc/json.js'
  'benchmark/zlib/creation.js'
  'doc/api/stream.md'
TODO file line note status
replaced with template strings
test/async-hooks/init-hooks.js
test/abort/test-zlib-invalid-internals-usage.js 15
tools/doc/json.js 15
doc/api/stream.md 767

can i just say, you guys are doing fantastic stuff here.

kt3k commented

It was very fun! thank you!

@yosuke-furukawa @joyeecheung @MylesBorins Thank you for your help! I was really happy :)