View environment.log
Nicholas@Patriot MINGW64 ~
$ node -v
Nicholas@Patriot MINGW64 ~
$ npm -v

Tech Lead Book

  1. Introduction
  2. What is a Tech Lead?
  3. The Tech Lead Mindset
  4. Becoming a Tech Lead
  5. Working Cross-Functionally
  6. The Art of Delegation
  7. Technical Best Practices
  8. Effective Decision Making
View gist:edbb30b7f3a15ace61e3eb68013603ee
remote: error: GH006: Protected branch update failed for refs/heads/master.
remote: error: At least one approved review is required.
! [remote rejected] master -> master (protected branch hook declined)
error: failed to push some refs to ''

GitHub Pain Points

This is my feedback on using GitHub to manage a popular project (ESLint). Topics are presented in no particular order. In general, everything I say about issues also refers to pull requests.

For each problem I've suggested a solution. I realize that actually building out a solution is a complex process and my suggestions do not reach the level of detail sufficient for implementation purposes. It's just to give you an idea of the direction I'm thinking.

Problem: No good way to distinguish new issues from "accepted" issues

Users are opening new issues every day, and these issues automatically bubble to the top of the issues list by default. We do label issues that we're committed to doing as "accepted", but if there are enough new issues, you don't even see those until the second page of issues. Why is this a problem? In a word: distraction.

View npm-debug.log
0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files (x86)\\nodejs\\node.exe',
1 verbose cli 'C:\\Program Files (x86)\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli 'publish' ]
2 info using npm@2.14.9
3 info using node@v0.12.9
4 verbose publish [ '.' ]
5 silly cache add args [ '.', null ]
6 verbose cache add spec .
7 silly cache add parsed spec { raw: '.',
View arrayproxy.js
// target is the backing object
let target = { length: 0 },
proxy = new Proxy(target, {
set(trapTarget, key, value) {
let numericKey = Number(key),
keyIsInteger = Number.isInteger(numericKey);
// special case for length property - only need to worry if length is
// shorter than number of array items
View output.log
8721 passing (45s)
81 failing
1) CLIEngine executeOnFiles() should report zero messages when given a directory with a .js2 file:
AssertionError: expected 0 to equal 1
at Context.<anonymous> (C:\Users\Nicholas\projects\personal\eslint\tests\lib\cli-engine.js:309:20)
at callFn (C:\Users\Nicholas\projects\personal\eslint\node_modules\mocha\lib\runnable.js:286:21)
at (C:\Users\Nicholas\projects\personal\eslint\node_modules\mocha\lib\runnable.js:279:7)
at Runner.runTest (C:\Users\Nicholas\projects\personal\eslint\node_modules\mocha\lib\runner.js:421:10)
at C:\Users\Nicholas\projects\personal\eslint\node_modules\mocha\lib\runner.js:528:12


To create a new branch that is up-to-date with the remote master:

$ ws 123

Creates the branch issue123

# This was used to update all column numbers in ESLint tests when we
# changed to 1-based columns from 0-based
$ perl -pi.bak -e "s/(column: *)([0-9]+)/\$1.(\$2+1)/e;" tests/lib/rules/*.js
View gist:b00ce7cf9e5d99935853
* 1 ripe avocado (a bit soft)
* 3 tbsp pure cocoa powder (no sugar added)
* 3 tbsp coconut nectar
* 6 tbsp unsweetened coconut milk
1. Scoop out avocado into blender/food processor