Skip to content

Instantly share code, notes, and snippets.

@nafg
nafg / gen-instructions.sbt
Last active April 1, 2020 15:19
Auto-generate your library's install instructions in README
val generateInstallInstructions = taskKey[Unit]("Generate install instructions in README.md")
generateInstallInstructions := {
val info = Def.task((projectID.value, description.value, (publish / skip).value)).all(ScopeFilter(inAnyProject)).value
val lines =
for ((moduleId, descr, noPublish) <- info.sortBy(_._1.name) if !noPublish) yield {
"// " + descr + "\n" +
s"""libraryDependencies += "${moduleId.organization}" %%% "${moduleId.name}" % "${moduleId.revision}""""
}
@nafg
nafg / paramCodec.scala
Last active March 10, 2020 10:55
Deriving circe with Magnolia but only as a fallback
import scala.language.experimental.macros
import scala.reflect.ClassTag
import io.circe.{Decoder, Encoder, Json}
import magnolia._
class ParamEncoder[T](val underlying: Encoder[T]) extends AnyVal
trait ParamEncoderLowPriority {
type Typeclass[T] = ParamEncoder[T]
@nafg
nafg / groupme.sc
Last active December 2, 2019 23:02
import scala.util.{Failure, Success}
import $ivy.`io.circe::circe-core:0.12.3`
import $ivy.`io.circe::circe-generic:0.12.3`
import $ivy.`io.circe::circe-parser:0.12.3`
import io.circe.{Decoder, Encoder}
import io.circe.generic.auto._
import io.circe.syntax._
import io.circe.parser
import requests.BaseSession
@nafg
nafg / some.scala
Last active September 9, 2019 14:21 — forked from suni-masuno/some.scala
class SomeClass {
private def get(url: String): Future[Option[String]] =
for {
serviceResponse <- sendGetRequest(url)
} yield maybeBody(url, serviceResponse)
private def maybeBody(url: String, response: HttpResponse[String]): String =
if (response.is2xx) Some(response.body)
else None
@nafg
nafg / 2048.scala
Last active May 18, 2019 10:47
2048 in scala
object Main extends App {
case class Coord(row: Int, col: Int)
case class Line(coords: Seq[Coord])
sealed abstract class Dir(val sign: Int, val horizontal: Boolean) {
def first(sign: Int) = (0 until 4).maxBy(_ * sign)
def last(sign: Int) = (0 until 4).minBy(_ * sign)
def lines =
for(i <- first(sign) to last(sign) by -sign)
yield Line(
@nafg
nafg / apt-get
Last active January 24, 2019 05:41
Waiting apt-get based on answer by Radu Rădeanu at https://askubuntu.com/a/375031/124119
#!/bin/bash
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do
echo "Waiting for other software managers to finish..."
sleep 10
done
/usr/bin/apt-get "$@"
@nafg
nafg / docker-compose.selenium.yml
Created January 17, 2019 22:01
Run postgres, selenium with headless chrome, app, and selenium tests, in 4 panes using tmux
version: "3.2"
services:
selenium:
image: selenium/standalone-chrome
ports:
- "4444:4444"
@nafg
nafg / edit_md.fish
Last active July 5, 2018 23:49
Script to edit google compute engine instance metadata entry as a file
#!/usr/bin/fish
set instance $argv[1]
set key $argv[2]
set tmpdir (mktemp -d)
set file $tmpdir/(string replace _ . $key)
gcloud compute instances describe $instance --format="value(metadata.$key)" > $file
@nafg
nafg / LoadYaml.scala
Last active January 4, 2018 19:42
LoadYaml.scala
import java.io.{FileReader, Reader}
import scala.concurrent.Await
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import slick.jdbc.PostgresProfile.api._
import slick.jdbc.PostgresProfile.columnTypes
import slick.jdbc.meta.MPrimaryKey