Skip to content

Instantly share code, notes, and snippets.

View jroper's full-sized avatar

James Roper jroper

View GitHub Profile
@jroper
jroper / ScalaFlectSpec.scala
Created April 22, 2012 15:24
ScalaFlect - The new strongly typed reflection library I'm writing for using in query DSLs
package au.id.jazzy.scalaflect
import org.specs2.mutable.Specification
object ScalaFlectSpec extends Specification {
"ScalaFlect" should {
"be able to look up simple case class properties" in {
val exampleCaseClass = new ScalaFlect(classOf[ExampleCaseClass])
val member = exampleCaseClass.reflect(_.property)
member.toString mustEqual "property"
@jroper
jroper / Html5PushStatePlaceManager.java
Created May 7, 2012 12:32
GWTP HTML5 pushState place manager implementation
package com.gwtplatform.mvp.client.proxy;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.user.client.Window;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
@Singleton
public class Html5PushStatePlaceManager extends PlaceManagerImpl {
@jroper
jroper / Schrödinger.scala
Created June 4, 2012 15:59
Scala would be more fun if it had one of these...
final case class Schrödinger[+A, +B](a: A, b: B) extends Either[A, B] {
private var isleft = true
private var isright = true
lazy val actual : Either[A, B] = {
if (new Random().nextBoolean()) {
isright = false
Left(a)
} else {
isleft = false
Right(b)
@jroper
jroper / CometAppender.java
Created June 15, 2012 12:19
Play 2.0 Comet log tailing
package util.logging;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.UnsynchronizedAppenderBase;
import play.libs.F;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
@jroper
jroper / gist:3034154
Created July 2, 2012 16:38
Play sessions
running(fakeApplication(), new Runnable() {
@Override
public void run() {
FakeRequest req = fakeRequest();
for (int i = 0; i < 5; i++) {
req = req.withSession("key" + i, "value" + i);
}
for (int i = 0; i < 5; i++) {
if (!req.getWrappedRequest().session().get("key" + i).isDefined()) {
// Whether we reach this point or not depends on HashMap ordering
@jroper
jroper / playlighthouselinker.js
Created September 21, 2012 06:47
Play Lighthouse Linker Greasemonkey Script
// ==UserScript==
// @name Play 2 Lighthouse Linker
// @description Links Play 2 Lighthouse ticket references to lighthouse
// @namespace http://playframework.org
// @version 1.0
// @author James Roper <james@jazzy.id.au>
// @include https://github.com/playframework/Play20/*
// @require http://code.jquery.com/jquery-1.8.2.min.js
// @run-at document-end
// ==/UserScript==
@jroper
jroper / child.threaddump
Created October 6, 2012 04:26
Thread dumps of hung play builds
2012-10-06 14:18:46
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.10-b01-428 mixed mode):
"DestroyJavaVM" prio=5 tid=7f8444003000 nid=0x10472b000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"com.google.common.base.internal.Finalizer" daemon prio=5 tid=7f844bdd7000 nid=0x10e4ab000 in Object.wait() [10e4aa000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f40c3a90> (a java.lang.ref.ReferenceQueue$Lock)
@jroper
jroper / EbeanShutdownHack.java
Created November 8, 2012 01:28
Ebean shutdown hack, for shutting down an individual ebeanserver before the Ebean shutdown hook runs
package com.avaje.ebeaninternal.server.lib;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Exists to work around this issue:
*
@jroper
jroper / TestController.scala
Created November 15, 2012 06:56
Compile errors with Json reads/writes
package controllers
import play.api.mvc.{Cookie, Action, Controller}
import play.api.libs.json._
import org.apache.commons.codec.binary.Base64
import play.api.libs.json.JsString
import play.api.data.validation.ValidationError
/**
* Used for testing stuff.
@jroper
jroper / Ec2Client.scala
Created February 26, 2013 19:44
Barebones Ec2 client that uses the Play Framework WS API for provisioning instances. Handles authentication signing etc. If you want to use it, you probably want to read the docs: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RunInstances.html and update it to do what you need it to do.
package utils
import scala.xml.Elem
import scala.concurrent.Future
import java.util.{TimeZone, Date}
import java.text.SimpleDateFormat
import java.net.URLEncoder
import javax.crypto.spec.SecretKeySpec
import javax.crypto.Mac
import org.apache.commons.codec.binary.Base64