Mint Julio

  • 1 jigger St. Germaine elderflower liquor
  • 3 jiggers tequila repisado
  • 1/2 lemon
  • 1 tsp honey
  • Fizzy water
  • 3 mint leaves

Crush the mint in shaker with muddler. Add liquor, lemon, honey. Stir to dissolve the honey before adding ice. Ice. Shake. Pour over a couple cubes, top with fizzy water. Garnish with a sprig of mint.

Love isn’t gonna save us

Do you know what love is? It’s a hot bath. What happens to things when you leave them in a bath for too long? Huh? They get soft; fall apart. […] It’s a war, baby: this life. The things we endure. You said you saw the future and it’s an apocalypse. Who survives that? The lovers? Or the fighters? They sell us this lie that love is gonna save us. […] Love isn’t gonna save us… it’s what we have to save. Pain makes us strong enough to do it. All our scars, our anger, our despair: it’s armor. Baby, god loves the sinners best ’cause our fire burns bright bright bright. Burn with me.

—Sydney Barret, Legion S2/E4

Cinco de Drinko Rumchata

image

  • 1 part spiced rum (Captain Morgan)
  • 1 part white rum (Bacardi)
  • 1 part amaretto (Disaronno)
  • 4 parts rice milk
  • 2 dashes of ground cinnamon

Mix it all up in a shaker with a few ice cubes. Pour. Enjoy.

Goes great with Mexican food but also delightful as a Xmas cocktail.

Colored Console Output

const out = {

  end: '\x1b[0m',

  // Modifiers.
  blink: '\x1b[5m',
  bright: '\x1b[1m',
  dim: '\x1b[2m',
  hidden: '\x1b[8m',
  reverse: '\x1b[7m',
  underscore: '\x1b[4m',

  // Foreground Colors.
  black: '\x1b[30m',
  blue: '\x1b[34m',
  cyan: '\x1b[36m',
  green: '\x1b[32m',
  magenta: '\x1b[35m',
  red: '\x1b[31m',
  yellow: '\x1b[33m',
  white: '\x1b[37m',

  // Background Colors.
  bgBlack: '\x1b[40m',
  bgBlue: '\x1b[44m',
  bgCyan: '\x1b[46m',
  bgGreen: '\x1b[42m',
  bgMagenta: '\x1b[45m',
  bgRed: '\x1b[41m',
  bgYellow: '\x1b[43m',
  bgWhite: '\x1b[47m',
};

Usage:

console.log(out.red, 'Something went wrong:', err, out.end);

Validate the Crickets’ Nest

I have a problem getting values from deeply nested objects: if one of the properties along the namespace is incorrect|modified|removed, Javascript throws. To avoid this, you can end up with obnoxious validation:

// Trying to get this.data.homeScene.user.name
const isValid = (
  typeof this.data === 'object' &&
  typeof this.data.homeScene === 'object' &&
  typeof this.data.homeScene.user === 'object' &&
  typeof this.data.homeScene.user.name === 'string'
);
if (isValid) {
  const { name } = this.data.homeScene.user;
  ...
}

What if I made a reusable helper to validate the namespace and return the value?

export default function getNamespace(startObj, path) {
  const isValidArgs = (
    typeof startObj === 'object' &&
    typeof path === 'string'
  );
  if (!isValidArgs) return undefined;

  const finalValue = path
    .split('.')
    .reduce((obj, p) => ((typeof obj === 'object') 
      ? obj[p]
      : undefined
    ), startObj);{

  return finalValue;
}

Now the obnoxious validation looks like this:

// Trying to get this.data.homeScene.user.name
const name = getNamespace(this, 'data.homeScene.user.name');
if (name) { ... }

Dude! Sweet!