Skip to content

Instantly share code, notes, and snippets.

Avatar
🎧
Working from home

Michael Richardson rainabba

🎧
Working from home
View GitHub Profile
@rainabba
rainabba / README.md
Created Dec 13, 2021
How to IIFE the switch statement and more
View README.md

First, credit to the answer at https://stackoverflow.com/a/55944296/901899

Second, if you aren't comfortable with an IIFE (immediately executed function), you will want to check out https://www.tektutorialshub.com/javascript/immediately-invoked-function-expressions-iife/.

Now, because switch() {} is a "statement" in JavaScript and not a function, it can't be IIFE executed with the following

let failure = ( switch(x) { default: return true; } )(x);

You will get: "Uncaught SyntaxError: Unexpected token 'switch'"

@rainabba
rainabba / index.js
Last active Nov 23, 2021
Understanding execution order in Express handlers
View index.js
/*
To demonstrate the importance of understanding async execution order in the context of Express route handlers
Try in your browser at https://runkit.com/rainabba/understanding-execution-order-in-express-handlers
**/
const express = require('express'),
app = express(),
PORT = 3000,
@rainabba
rainabba / index.js
Created Oct 12, 2021
Clarifying javascript execution order
View index.js
console.time('full execution');
console.time('code block');
function showExecutionOrder(parm) {
console.time('outside promise');
new Promise((resolve, reject) => {
console.time('inside promise');
resolve(parm);
console.timeEnd('inside promise');
}).then((data) => {
// Lookup mdn and invoke the account sync as required
@rainabba
rainabba / input_template.yaml
Created Mar 24, 2021
Where did 'IntelDataApi' come from and why is my deploy failing because of it?
View input_template.yaml
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::Serverless-2016-10-31'
# ... much omitted because it's unrelated
Globals:
Api:
OpenApiVersion: 3.0.1
Auth:
DefaultAuthorizer: NONE # AWS_IAM changed because we can't override on lambdas at this time. See https://github.com/aws/serverless-application-model/issues/984
@rainabba
rainabba / template-using-sam.yaml
Created Mar 10, 2021
Binding AWS Lambda, API Gateway, Route 53 (DNS) and SSL; with and without SAM
View template-using-sam.yaml
Parameters:
StageName:
Type: String
Description: Major version changes should get new values (v1, v2, etc..)
Default: v1
Conditions:
CreateZone:
!Equals [!Ref ZoneId, 'none']
CreateCert:
@rainabba
rainabba / README.md
Last active Oct 23, 2020
Quickly and easily map/include field from an array of objects
View README.md

My use case was an array of objects coming from a document-store so they're extremely variable and we only want a sub-set of the returned fields. There are plenty of ways to go about this and I hope snippet will serve that purpose, but for me this was more about realizing the power of () to do a bit more with the Lambda passed to map(). I regularly pull up ANY chrome page, hit Ctrl+Shift+J and develop small snippets right in the console, which is what led to 1 of 2 discoveries today.

How I would have gone about this in the past

let result = { Items: [{ a: 1, b: 2, x: 3 }] },
 newList = result.map( o => { return { a: o.a, b: o.b }; );

My new solution

@rainabba
rainabba / cp-error.sh
Created Sep 16, 2020
cp - 'are the same file'
View cp-error.sh
## Below is a script/log (anonymized) of an instance where I'm getting "are the same file" errors from `cp`
## Clearly they are not "the same file", but have identical contents and the 2nd is from a `git clone` command
#!/bin/bash
# me@myhost:/mnt/c/prj/someorg/some-project$ ls -lah;
ls -lah;
# total 0
# drwxr-xr-x 1 someuser root 512 Sep 15 10:26 .
# drwxr-xr-x 1 someuser root 512 Jun 3 06:48 ..
# drwxr-xr-x 1 someuser root 512 Apr 16 10:46 .vscode
@rainabba
rainabba / pdfToImageTest.js
Created Feb 8, 2019
Testing common solutions to PDF -> image conversion
View pdfToImageTest.js
// SPOILER: Only 1 of these tests passes at this point and it bypasses
// all the fluff and complication so it's the one I will end up using
const { expect } = require('code'),
Lab = require('lab'),
lab = exports.lab = Lab.script(),
fs = require("fs"),
path = require("path"),
mkdirp = require('mkdirp'),
rimraf = require('rimraf'),
@rainabba
rainabba / config-docker.sh
Last active Jul 24, 2020
Install docker-ce, docker-compose and docker-sync in Ubuntu for WSL
View config-docker.sh
#!/bin/bash
#
#This script assumes very little other than a fresh Ubuntu install (using the Windows store) on Win10 1709 or newer with WSL installed already
#In Powershell, run the following to install WSL and Ubuntu
#
#Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
#Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ~/Ubuntu.zip -UseBasicParsing
#Expand-Archive ~/Ubuntu.zip ~/Ubuntu
#~/Ubuntu/ubuntu.exe
#
@rainabba
rainabba / Promise-all.js
Created Jun 30, 2017
Promise.all() demonstration with iterations for refactoring
View Promise-all.js
// Wait for ALL promises to return OR any to crash and then return the array of values to the caller of .all()
// // //Itteration 1
// // function runParallelPromisesSum() {
// // //Our function returns its own promise with our value that needed both the promises to return first
// // return new Promise( ( resolveAll, rejectAll ) => {
// // let promise1 = new Promise( ( resolvePromise1, rejectPromise1 ) => {
// // console.log("resolving 1");
// // resolvePromise1( 1 );