Skip to content

Instantly share code, notes, and snippets.

View bmc's full-sized avatar

Brian Clapper bmc

  • Suburban Philadelphia, PA, US
View GitHub Profile
@bmc
bmc / SomeController.scala
Created January 30, 2013 19:08
Flash stuff, in Play.
object SomeController extends Controller {
def signup = Action(parse.urlFormEncoded) { implicit request =>
signupForm.bindFromRequest.fold(
{ form => // failure; repost
BadRequest(views.html.register.signup(form))
},
{ newUser => // success; create user and send confirmation
@bmc
bmc / transitional.scala
Last active December 11, 2015 23:48
Transitional code to enhance Play 2.1 library so that Scala Futures have the await() function that Play 2.0 Promises had (until I can refactor).
import scala.concurrent.Future
import scala.concurrent.duration._
import play.api.libs.concurrent.Execution.Implicits._
object WebServicesUtil {
import scala.language.{implicitConversions, postfixOps}
/** TRANSITIONAL: Simulate Play 2.0 await() for a Future, until code
* is refactored.
@bmc
bmc / concurrent.scala
Created February 14, 2013 15:37
Simulate Play 2.0 Future.await() in Play 2.1 (for backward compatibility)
package lib
import scala.concurrent.Future
import scala.concurrent.duration._
import play.api.libs.concurrent.Execution.Implicits._
object ConcurrentUtil {
import scala.language.{implicitConversions, postfixOps}
@bmc
bmc / async.scala
Created April 6, 2013 16:09
Example comparison of Future functions and async library
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent._
import scalaz._
import Scalaz._
import scala.async.Async.{async, await}
import lib.ScalazUtil
// Stubs, to get this to compile. Fill in with real stuff later.
case class User(username: String, password: String)
case class GitHubData(user: User)
@bmc
bmc / LocalHelpers.scala
Created May 3, 2013 15:30
Version of Play's @select helper that handles 'data args. Assumes the existence of a LocalHelpers module that contains a deCamelCase function (shown below)
package views
object LocalHelpers {
/** Default target for offsite anchors.
*/
val OffSiteAnchorTarget = "link"
/** Convert a symbol to a string, for use in HTML.
*/
@bmc
bmc / build-extract.sbt
Created April 28, 2014 21:58
Getting 2.10-style reflection to work in 2.11
libraryDependencies <<= (scalaVersion, libraryDependencies) { (sv, deps) =>
// If we're compiling on 2.11, we need to haul the reflection library
// in separately, since it's no longer bundled in 2.11.
if (sv.startsWith("2.11.")) {
deps :+ "org.scala-lang" % "scala-reflect" % "2.11.0"
}
else {
deps
}

Keybase proof

I hereby claim:

  • I am bmc on github.
  • I am bmc (https://keybase.io/bmc) on keybase.
  • I have a public key whose fingerprint is B57B 6B4B 451A F540 4D21 BEA4 1588 40B4 A8A7 FD98

To claim this, I am signing this object:

@bmc
bmc / promo.md
Created January 13, 2016 21:21
Draft promotional language for Typelevel page

Plan to hang around after the Typelevel Summit, because this year, Northeast Scala Symposium 2016 will be held at the same location on March 4th and 5th. RSVPs open January 16th. Join in the fun!

@bmc
bmc / BrainDeadHTTP.scala
Last active April 13, 2016 21:21
Brain Dead HTTP server in Scala
package grizzled.testutil
import java.io.{PrintWriter, OutputStreamWriter}
import java.net.InetAddress
import java.text.SimpleDateFormat
import java.util.Date
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.io.Source
@bmc
bmc / StaticFile.scala
Last active September 3, 2021 20:08
I needed code to serve static files from an Akka HTTP server. I wanted to use fs2 to read the static file. Michael Pilquist recommended using streamz to convert from an fs2 Task to an Akka Source. This is what I came up with. (It does actually work.)
object StaticFile {
// Various necessary imports. Notes:
//
// 1. fs2 is necessary. See https://github.com/functional-streams-for-scala/fs2
// 2. streamz is necessary. See https://github.com/krasserm/streamz
// 3. Apache Tika is used to infer MIME types from file names, because it's more reliable and
// fully-featured than using java.nio.file.Files.probeContentType().
//
// If using SBT, you'll want these library dependencies and resolvers: