Skip to content

Instantly share code, notes, and snippets.

View Slakah's full-sized avatar

James Collier Slakah

View GitHub Profile
@Slakah
Slakah / debatch-events.sh
Last active February 4, 2019 17:27
Debatch events using jq, complicated by the fact that .payload can be a string encoded json array.
exec jq '[. | del(.payload), if .payload | type == "string" then .payload | fromjson | .[] else .payload[] end]
| .[0] + .[1]' $@
@Slakah
Slakah / kinesis-consumer.sc
Last active January 14, 2019 15:14
Scala kinesis cosumer
#!/usr/bin/env amm
import $ivy.{
`software.amazon.awssdk:apache-client:2.2.0`,
`software.amazon.awssdk:netty-nio-client:2.2.0`,
`software.amazon.awssdk:sts:2.2.0`,
`software.amazon.awssdk:kinesis:2.2.0`,
`org.slf4j:slf4j-nop:1.7.25`,
`io.monix::monix:3.0.0-RC2`,
`org.typelevel::cats-core:1.5.0`,
`org.typelevel::cats-effect:1.1.0`
@Slakah
Slakah / ammonite-with-aws-sdk-v2.sc
Created January 8, 2019 16:40
Get ammonite working with AWS SDK V2
import $ivy.`software.amazon.awssdk:apache-client:2.2.0`
import $ivy.`software.amazon.awssdk:sts:2.2.0`
import $ivy.`software.amazon.awssdk:dynamodb:2.2.0`
val client = software.amazon.awssdk.services.dynamodb.DynamoDbClient.create()
@Slakah
Slakah / uritemplate4s-bench.txt
Last active October 22, 2018 08:41
fastparse1 vs fastparse2 uritemplate4s benchmark
# fastparse1
> bench/jmh:run -i 1 -r 1s -wi 1 -w 1s
[info] Benchmark Mode Cnt Score Error Units
[info] HandyUriTemplatesBench.expandTemplate thrpt 5 273134.812 ± 14481.192 ops/s
[info] HandyUriTemplatesBench.parseFail thrpt 5 282972.904 ± 11961.796 ops/s
[info] HandyUriTemplatesBench.parseSuccess thrpt 5 308294.189 ± 82112.451 ops/s
[info] Uritemplate4sBench.expandTemplate thrpt 5 75346.587 ± 13802.235 ops/s
[info] Uritemplate4sBench.parseFail thrpt 5 262814.309 ± 56332.194 ops/s
[info] Uritemplate4sBench.parseSuccess thrpt 5 136334.699 ± 6510.463 ops/s
# fastparse2
@Slakah
Slakah / HttpCaching.scala
Created August 27, 2018 12:42
http4s caching middleware
package com.gubbns
import cats.data.{Kleisli, OptionT}
import cats.effect._
import cats.implicits._
import com.github.blemale.scaffeine.{Cache, Scaffeine}
import org.http4s._
import org.http4s.headers._
import org.http4s.server.Middleware
@Slakah
Slakah / cats-in-ammonite.sc
Created July 16, 2018 13:56
How to use cats in ammonite
import $ivy.{
`org.typelevel::cats-effect:1.0.0-RC2`,
`org.typelevel::cats-core:1.1.0`
}
val scalacOptions = List("-Ypartial-unification")
interp.preConfigureCompiler(_.processArguments(scalacOptions, true))
// reload compiler
@
@Slakah
Slakah / tag-release.sc
Created July 11, 2018 14:41
Bump a git tag using by specifying major, minor, patch. This will also output the commits since the last tag.
#!/usr/bin/env amm
import ammonite.ops._, ImplicitWd._
case class Version(major: Int, minor: Int, patch: Int, label: String) {
def tag = s"v$major.$minor.$patch$label"
}
def parseVersion(s: String) = {
val VersionPattern = "^v(\\d+).(\\d+).(\\d+)(-.+)?$".r
val VersionPattern(major, minor, patch, labelNullable) = s
@Slakah
Slakah / aws-assume-role-env.sh
Last active July 31, 2018 14:26
Assume a AWS STS role using the AWS credentials environment variables
#!/bin/bash
set -ue
readonly roleArn="$1"
readonly durationSeconds="3600" # 1 hours
readonly roleSessionName="$USER-local"
# Use default profile to log in
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
@Slakah
Slakah / arbitrary-play-json.scala
Created June 20, 2018 13:39
Scalacheck arbitrary generators for play-json (https://github.com/playframework/play-json)
import org.scalacheck._
import play.api.libs.json._
val genJsArray: Gen[JsArray] =
for {
n <- Gen.chooseNum(0, 10)
arr <- Gen.containerOfN[IndexedSeq, JsValue](n, genJsValue).map(JsArray)
} yield arr
val genJsObject: Gen[JsObject] =
@Slakah
Slakah / encrypt-decrypt-usage.sh
Last active January 4, 2020 20:40
Encrypt plaintext using an kms encrypted data key, and the inverse decrypt is also supported.
# This guide outlines how to:
# 1. Generate a AWS KMS data key (https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys).
# 2. Encrypt a secret using the generated data key.
# 3. Decrypt the encrypted secret.
# generate a kms data key
aws kms generate-data-key-without-plaintext \
--key-id <key-id> \
--key-spec AES_256 \