Skip to content

Instantly share code, notes, and snippets.

Avatar

Nikolai Zujev jaymecd

View GitHub Profile
@jaymecd
jaymecd / bash_cli_skeleton.sh
Last active Oct 23, 2020
Bash CLI skeleton + debug reader
View bash_cli_skeleton.sh
#!/usr/bin/env bash
#/ Sample command to perform update and query it's status
#/
#/ Usage: <SCRIPT_NAME> [-h|--help] <command>
#/
#/ Available commands are:
#/ one - perform some update, idempotent
#/ two - query status of update
#/
@jaymecd
jaymecd / main.go
Created Aug 18, 2020 — forked from pteich/main.go
Example for using go's sync.errgroup together with signal detection signal.Notify to stop all running goroutines
View main.go
package main
import (
"context"
"errors"
"fmt"
"os"
"os/signal"
"syscall"
"time"
View s3.batch.operations.manifest.split.sh
#!/usr/bin/env bash
#
# Split single S3 Inventory manifest into sequential subsets.
#
# Usage:
# $ env INVENTORY_BUCKET=my-inventory INVENTORY_PATH=sample-name ./s3.batch.operations.manifest.split.sh
#
set -euo pipefail
@jaymecd
jaymecd / a_json_data_pivot_with_jq.md
Created Jun 2, 2020
This JQ one-liner to pivot JSON data
View a_json_data_pivot_with_jq.md

Pivot JSON data

This one-liner pivots data from group>users or user>groups:

$ cat incoming.json \
  | jq 'map(. as $in | .users[] | . as $u | {user:$u, group:$in.group}) | group_by(.user) | map({user:.[0].user, groups: map(.group)})'

[
  {
@jaymecd
jaymecd / Makefile
Last active Mar 18, 2020
Default Makefile with envvar guard
View Makefile
MAKEFLAGS += --warn-undefined-variables
SHELL := bash -o pipefail -c
.DEFAULT_GOAL := help
.PHONY: help all deps build
guardEnvVar = $(if $(value $(1)),,$(error env $(1) not defined))
# Note: help extracts title from ## comment just above the target, builds target/title grid and prints it pretty.
## Show help
@jaymecd
jaymecd / build_stig_windows_with_packer.md
Last active Oct 17, 2019
Packer with WinRM over HTTPS
View build_stig_windows_with_packer.md

Way to build Windows STIG/CIS hardened AMI on AWS.

Problem is that WinRM Basic authentication is blocked by GroupPolicy.

Therefore it's required to setup WinRM over HTTPS.

@jaymecd
jaymecd / invoke_via_winrm_https.ps1
Created Oct 16, 2019
Powershell: invoke command via winrm (NTLM over HTTPS)
View invoke_via_winrm_https.ps1
# TEST WinRM connect
$targetHost = 'localhost'
$username = 'Administrator'
$password = 'PASSWORD'
$secret = ConvertTo-SecureString -String $password -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secret
$option = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
@jaymecd
jaymecd / time.ps1
Last active May 21, 2019
measure command time
View time.ps1
function time([scriptblock]$scriptblock) {
$sw = [Diagnostics.Stopwatch]::StartNew()
. $scriptblock
$sw.Stop()
Write-Output ""
Write-Output " >> Execution time: $($sw.Elapsed)"
}
time { Install-Module -Name PSWindowsUpdate }
@jaymecd
jaymecd / python_decorator_guide.md
Created May 15, 2019 — forked from Zearin/python_decorator_guide.md
The best explanation of Python decorators I’ve ever seen. (An archived answer from StackOverflow.)
View python_decorator_guide.md

NOTE: This is a question I found on StackOverflow which I’ve archived here, because the answer is so effing phenomenal.


Q: How can I make a chain of function decorators in Python?


If you are not into long explanations, see [Paolo Bergantino’s answer][2].

@jaymecd
jaymecd / substr.js
Last active May 12, 2019
ES6 training
View substr.js
const substr = (str, start = 0, length = str.length) => {
if (start === 0 && length === str.length) {
return str;
}
if (start > str.length || length <= 0) {
return '';
}
const startIndex = (start < 0) ? Math.max(0, str.length - Math.abs(start)) : start;
You can’t perform that action at this time.