Skip to content

Instantly share code, notes, and snippets.


Johannes Rudolph jrudolph

View GitHub Profile
View test.json
"nodes": [
{"id": "n1", "group": 1},
{"id": "n2", "group": 1},
{"id": "n3", "group": 1},
{"id": "n4", "group": 1},
{"id": "n5", "group": 1},
{"id": "n6", "group": 1},
{"id": "n7", "group": 1}
jrudolph / BetterTestOnly.scala
Last active Oct 23, 2019
sbt camel case and dot expanding testOnly see for a demo
View BetterTestOnly.scala
// copy into project
import sbt._
import Keys._
import Def._
import sbt.Def
import sbt.Defaults.allTestGroupsTask
import sbt.Defaults.loadForParser
import sbt.Project.inConfig
import sbt.internal.util.complete.DefaultParsers
jrudolph / SimpleQuicClientMain.scala
Last active Feb 20, 2020
"Simple" "Http/3" "client"
View SimpleQuicClientMain.scala
import java.math.BigInteger
jrudolph / JmhCompletion.scala
Created Apr 30, 2019
A smart sbt parser for the most used jmh parameters (copy to project dir and use jmh:runny)
View JmhCompletion.scala
package akka.sbt.jmh.completion
import java.util.Collections
import pl.project13.scala.sbt.SbtJmh.JmhKeys.Jmh
import sbt._
import Keys._
import org.openjdk.jmh.runner.BenchmarkList
import org.openjdk.jmh.runner.BenchmarkListEntry
jrudolph /
Created Oct 11, 2018
Biometrisches Passfoto erstellen zum selbst Ausdrucken
# use to crop a foto to the right dimensions
# then use this script to lay it out on a 1600x2312 jpg to print as 9x13
montage mein-passfoto.jpg mein-passfoto.jpg mein-passfoto.jpg mein-passfoto.jpg -geometry 622x898+89+129 out.jpg
jrudolph / THX.scala
Created Sep 8, 2018
8-bit THX Deep Note sound generation with Scala
View THX.scala
import java.util.concurrent.ThreadLocalRandom
import javax.sound.sampled._
// Program to generate THX Deep Note sound according to the sheet music
// published to celebrate its 35th birthday
object THX extends App {
val sampleRate = 44100f
val af = new AudioFormat(
jrudolph /
Created Dec 18, 2017
Should I use GraphStage or GraphDSL?

In general, performance differences are usually negligible as long as they don't turn up during benchmarking (you probably know what people say about premature optimization...).

So, it's mostly a matter of style. Writing a GraphStage is the lowest level you can implement something in akka-stream. It's very explicit and somewhat predictable what happens but the amount of code to write can be quite cumbersome and with a growing number of ports, managing the state space and all the possible interactions can be quite a challenge.

Wiring up predefined combinators using the GraphDSL is therefore often recommended. In the best case it's just "plug and play". On the other hand, it also introduces new degrees of freedom and non-determinism as elements flow

jrudolph / CleanupImports.scala
Last active Jan 17, 2018
Cleanup Imports for sbt 1.0
View CleanupImports.scala
* Copyright (C) 2009-2017 Lightbend Inc. <>
import sbt._
import Keys._
package sbt {
object Access {
def compilerReporter = sbt.Keys.compilerReporter
jrudolph / analysis.txt
Last active Apr 6, 2021
Scala 2.13 Release Train
View analysis.txt
TargetVersion: Scala 2.13 LastVersion: Scala 2.12
jrudolph / StackDumpAnalyzer.scala
Created Sep 27, 2017
Ongoing effort to parse stack dumps generated e.g. by jstack or the JVM directly
View StackDumpAnalyzer.scala
object StackDumpAnalyzer extends App {
val ThreadLine = """"([^"]+)" #(\d+) prio=(\d+) os_prio=(\d+) tid=0x([0-9a-f]+) nid=0x([0-9a-f]+) (.*)""".r
val file = "ThreadDump.txt"
case class ThreadState(name: String, id: Int, prio: Int, osPrio: Int, tid: Long, nid: Int, state: String)