Skip to content

Instantly share code, notes, and snippets.

@magro
magro / 4_complexity.png
Last active December 27, 2015 03:59
Assets for: play! framework presentation notes blog post
4_complexity.png
@magro
magro / kryo-compat-report_2.22_to_2.23-20131201.010510-27.html
Last active December 29, 2015 08:09
Compatibility report created by Java API Compliance Checker (http://ispras.linuxbase.org/index.php/Java_API_Compliance_Checker) via `$ japi-compliance-checker ../libs/kryo-2.22.jar ../libs/kryo-2.23-20131125.093430-23.jar`
<!-- kind:binary;verdict:incompatible;affected:30.5;added:18;removed:131;type_problems_high:60;type_problems_medium:0;type_problems_low:0;method_problems_high:0;method_problems_medium:0;method_problems_low:0;tool_version:1.3.5 -->
<!-- kind:source;verdict:incompatible;affected:30.5;added:18;removed:131;type_problems_high:60;type_problems_medium:0;type_problems_low:0;method_problems_high:0;method_problems_medium:0;method_problems_low:0;tool_version:1.3.5 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="kryo, compatibility" />
<meta name="description" content="Compatibility report for the kryo library between 2.22 and 2.23-20131201.010510-27 versions" />
<title>
kryo: 2.22 to 2.23-20131201.010510-27 compatibility report
@magro
magro / ValueObjectFix.java
Last active August 29, 2015 13:55
Test for deserialization issue with kryo and class extending HashMap
package de.javakaffee.web.msm.serializer.kryo;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.testng.annotations.Test;
def multipartParser[A](partHandler: Map[String, String] => Iteratee[Array[Byte], A]):
BodyParser[Seq[A]] = parse.using { request =>
val maybeBoundary = for {
mt <- request.mediaType
(_, value) <- mt.parameters.find(_._1.equalsIgnoreCase("boundary"))
boundary <- value
} yield ("\r\n--" + boundary).getBytes("utf-8")
maybeBoundary.map { boundary =>
@magro
magro / WSProcessLargeResponseExample.scala
Created May 11, 2014 21:15
Play WS client: process large response
import play.api.libs.iteratee._
def fromStream(stream: OutputStream): Iteratee[Array[Byte], Unit] = Cont {
case e@Input.EOF =>
stream.close()
Done((), e)
case Input.El(data) =>
stream.write(data)
fromStream(stream)
case Input.Empty =>
@magro
magro / WSMultipartHandler.scala
Last active August 29, 2015 14:01
Helper to incrementally consume a multipart response (stream-like) using Play's WS client (Play 2.3.0-RC1)
package wsmultipart
import play.api.libs.ws.WSResponseHeaders
import play.api.libs.iteratee._
import play.api.libs.iteratee.Parsing.MatchInfo
import play.api.http.{MediaType, HeaderNames}
import scala.concurrent.ExecutionContext.Implicits.global
object WSMultipartHandler {
@magro
magro / WSMultipartHandlerSpec.scala
Last active August 29, 2015 14:01
Scalatest Plus Play Spec to test the WSMultipartHandler
package wsmultipart
import org.scalatestplus.play.{PlaySpec, OneServerPerSuite}
import org.scalatest.EitherValues
import play.api.mvc.Action
import play.api.mvc.Results._
import play.api.libs.iteratee.{Done, Input, Cont, Iteratee, Enumerator}
import play.api.test.Helpers._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.collection.mutable
object CassandraTracing {
def traceSegment(res: Future[ResultSet]): Future[ResultSet] = {
TraceRecorder.withTraceContextAndSystem { (ctx, system) =>
// Because we don't know the actual table that was queried for now we
// use a general name for the segment, it's renamed once we have the result
val segment = ctx.startSegment("db", "cassandra-client", "datastax")
res.onComplete {
case Success(rs) =>
// Get the table name from the result so that we can give the segment
@magro
magro / SolrsBenchmark.scala
Last active August 29, 2015 14:26
A benchmark for solrs, allows to compare it with solrj. Can be copied in the solrs project to `src/test/scala/io/ino/solrs/Benchmark.scala`, build.sbt additionally needs `connectInput in (Test,run) := true`. Can be run from within sbt via `test:runMain io.ino.solrs.Benchmark 4 solrj` (or alternatively "solrs").
package io.ino.solrs
import java.util.Arrays._
import java.util.concurrent.atomic.{AtomicBoolean, AtomicInteger}
import java.util.concurrent.{Executors, TimeUnit}
import io.ino.solrs.SolrUtils._
import org.apache.curator.test.TestingServer
import org.apache.solr.client.solrj.SolrQuery
import org.apache.solr.client.solrj.impl.CloudSolrClient
@magro
magro / Proxy.scala
Created September 30, 2015 10:07
Scala proxy for lazy values
import java.util.concurrent.atomic.AtomicReference
import scala.reflect.ClassTag
import java.lang.reflect.{Proxy => JProxy, Method, InvocationHandler}
/**
* Creates a proxy for a lazy value, in a project moving to dependency injection this
* was meant to replace legacy stuff where at app start time dependencies were loaded
* too early.
*