NVDA shortcuts I keep forgetting

Testing your web projects with a screen reader is quite important and informative, but can also be quite annoying while jumping back and forth between developing and testing. Here are some shortcuts I keep forgetting to make NVDA a bit less annoying during development:

Ctrl Stops current reading
Ins + S Switches between off-, sound-, and speech-mode (while stuff keeps being listed in log and braille view
Ins + Q Quite NVDA

How to increase heap size for node

Experienced getting fatal build errors on our build server during ESLint linting of our React project:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed – JavaScript heap out of memory

<--- Last few GCs --->

[10012:0000000001DA2080] 184320 ms: Mark-sweep 2035.1 (2051.8) -> 2034.3 (2051.8) MB, 2297.9 / 0.0 ms (average mu = 0.114, current mu = 0.001) allocation failure scavenge might not succeed
[10012:0000000001DA2080] 185393 ms: Mark-sweep 2035.3 (2051.8) -> 2033.6 (2051.8) MB, 1068.8 / 0.0 ms (average mu = 0.077, current mu = 0.003) allocation failure scavenge might not succeed

The MB values looked very suspicious in that they were on either side of 2048 MB (2 GB), so suspected our project had run into some sort of limit. And seems there is indeed a max limit of ~2 GB by default on the heap size.

To increase the node heap size limit, set the --max-old-space-size to something more than 2048, e.g. like this on Windows:

setx NODE_OPTIONS "--max-old-space-size=4096" /m

To verify that it actually works (or check what it is by default), this command seems to do it:

node -e "console.log(require('v8').getHeapStatistics().total_available_size / 1024 / 1024)"

Note that the output for some reason always seem to be a bit more than what’s set as the limit. Not sure what that’s about, but anyways… 🤷‍♂️

Natural sort in Javascript

Sorting strings naturally/numerically in Javascript is very simple. You just need to remember the existence of the Intl.Collator… which I keep forgetting…

You simply create one and use its compare function:

const collator = new Intl.Collator(undefined, {
    usage: 'sort',
    numeric: true
})

const simple = ['a1', 'a12', 'a2']
simple.sort(collator.compare)
// => ['a1', 'a2', 'a12']

const objects = [{"id": "a1"}, {"id": "a12"}, {"id": "a2"}]
const by = (key) => (a, b) => collator.compare(a[key], b[key])
objects.sort(by('id'))
// => [{id: 'a1'}, {id: 'a2'}, {id: 'a12'}]

With a hint of Social Ineptitude