Weeknotes for 2nd December 2019 – 8th December 2019
In an effort to keep my blogging momentum up, here’s my third consecutive #weeknotes post. As in past weeks, I’ll be rounding up any of the interesting things I’ve been searching for on the internet.
🔎 advent of code
For the past few years, every December, Eric Wastl has run a series of coding challenges called Advent of Code. These work like an Advent Calendar, with a new challenge becoming available each day. They can be solved using any tools or programming languages you want, so I have chosen NodeJS & regular JS to keep the tooling to a minimum. I started off strongly, but I’ve not had enough time to dedicate to it yet and I’ve started running behind. To keep an eye on my progess, you can follow my GitHub repo, here.
🔎 mdn reduce && 🔎 mdn biggest number
One of the Advent of Code challenges had us searching for the smallest number in a list of results. My favorite aspect of programming in JavaScript over many other languages is it’s ability to work with lists and arrays, gained from its functional programming roots. This lets us process arrays using concepts like map
and reduce
giving us the following snippet for retrieving the smallest item from a list.
console.log([1, 2, 3, 4, 5].reduce(
(prev, curr) => Math.min(prev, curr),
Number.MAX_VALUE)
);
I used Number.MAX_VALUE
as the initalValue
in the reduce call as that’s the largest number JavaScript can hold; any other given value must be smaller than it, making it an ideal starting point for finding minimums in a list. Number.POSITIVE_INFINITY
is also available, and could even be a better choice due to the Number.isFinite()
method to make sure we’ve actually found a smaller number.
🔎 mdn spread operator array copy
When I was prototyping an answer for another challenge, I found myself needing to create a copy of an array, not just a reference to it, and the spread operator is great for that. It creates a new array with all of the original array members contained within.
const testArray1 = [1, 2, 3, 4, 5];
const testArray2 = testArray1;
testArray2.push('Everywhere');
const testArray3 = [...testArray1];
testArray3.push('Just Here');
console.log(testArray1); // [ 1, 2, 3, 4, 5, 'Everywhere' ]
console.log(testArray2); // [ 1, 2, 3, 4, 5, 'Everywhere' ]
console.log(testArray3); // [ 1, 2, 3, 4, 5, 'Everywhere', 'Just Here' ]
🔎 git change old commit messages
Working as a full-stack developer often means fixing bugs or adding features that cross both the front-end and back-end sytems. At work, we follow Chris Beams’ seven rules for git commit messages, which means ending our messages with references to the issues that the piece of work was for. Jumping between different repos for front and back-ends can result in the front-end commits being tagged with the back-end issues and vice-versa. To fix this, and re-write a series of commit messages, you can take advantage of git’s interactive rebase mode, and rewrite the last, say, 3 messages by using the following command.
$ git rebase -i HEAD~3
You will then be presented with a summary listing those commits.
pick 55f9d3e Advent of Code 2018, Day 1, Stars 1 & 2
pick d577864 Advent of Code 2019, Day 2, Star 1
pick 62de55e Advent of Code 2019, Day 2, Star 2
Changing each of those pick
s (which would just use the commit as-is) to reword
s tells git to accept the code changes, but re-write the commit messages, allowing you to fix your incorrect issue references.
reword 55f9d3e Advent of Code 2018, Day 1, Stars 1 & 2
reword d577864 Advent of Code 2019, Day 2, Star 1
reword 62de55e Advent of Code 2019, Day 2, Star 2
2019-12-08