Skip to content

Instantly share code, notes, and snippets.

View bartschuller's full-sized avatar

Bart Schuller bartschuller

View GitHub Profile
@bartschuller
bartschuller / build.sbt
Last active May 17, 2018 19:28
Using Scala's Dynamic trait and reflection to implement delegation. If we swap reflection for macros it will be fast and typesafe again. I guess this could then replace the AutoProxy compiler plugin.
name := "delegation"
scalaVersion := "2.10.0"
libraryDependencies <+= (scalaVersion)("org.scala-lang" % "scala-reflect" % _)
@bartschuller
bartschuller / FutMain.scala
Created March 2, 2018 09:42
Don't use "if" inside for comprehensions involving Futures thinking they work like sequences
import scala.concurrent.{ Await, Future }
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
object FutMain {
def main(args: Array[String]): Unit = {
val part1 = (1 to 3).map(successful)
val part2 = Seq(iffed(4))
val part3 = (5 to 7).map(successful)
val total = Future.sequence(part1 ++ part2 ++ part3)
@(elements: helper.FieldElements)
@**************************************************
* Generate input according twitter bootstrap rules *
**************************************************@
<div class="control-group @if(elements.hasErrors) {error}">
<label class="control-label" for="@elements.id">@elements.label</label>
<div class="controls">
@elements.input
<span class="help-inline">@elements.errors(elements.lang).mkString(", ")</span>
@bartschuller
bartschuller / ax.scala
Created May 5, 2012 21:09
Scala 2.10 Anti-XML literals with interpolation demo
// some data to interpolate
val attributes = Attributes("a"->"data wins", "b" -> "data loses")
val attributeValue = "one"
val nodes = Group(Elem("hi", Attributes()), Text(" there"))
// Scala 2.10's pluggable string interpolation
// Here xml"" means: create an Anti-XML element
val xml = xml"""<foo a="overridden" $attributes b="literal wins">blie <b attr=$attributeValue/> bla $nodes</foo>"""
@(helloForm: Form[(String,Int,Option[String])])
@import helper._
@main(title = "The 'helloworld' application") {
<h1>Configure your 'Hello world':</h1>
@form(action = routes.Application.sayHello, args = 'id -> "helloform") {
@bartschuller
bartschuller / dyn.scala
Created August 7, 2011 14:09
Example of Scala's Dynamic trait as implemented in Scala 2.9.0 with scalac -Xexperimental
// Compile this with scala 2.9.x and an extra option:
// scalac -Xexperimental dyn.scala
/**
* Example to show off the Dynamic trait.
*
* Create an instance, call methods on it (the methods return this
* so you can chain calls), then call result.
**/
class ListBuilder extends Dynamic {
@bartschuller
bartschuller / gist:1078610
Created July 12, 2011 18:23
Resolving imports in lesscss files for dependency tracking
import io.Source
import java.io.File
object Stuff {
val Import = """.*@import\s*"(.*?)".*""".r
def allLessFiles(initial: File): Set[File] =
Set(initial) ++ Source.fromFile(initial).getLines().flatMap[File](_ match {
case Import(file) => allLessFiles(new File(initial.getParentFile, file))
case _ => Set.empty
val a = List(1,2,3,4)
val b = List("A","B","C","D")
val c = Map() ++ a.zip(b)
@bartschuller
bartschuller / scala transcript.txt
Created January 17, 2011 22:42
My new Scala Mechanize library is taking shape
scala> val agent = new org.smop.mechanize.Mechanize
agent: org.smop.mechanize.Mechanize = org.smop.mechanize.Mechanize@612e3937
scala> agent.get("http://www.smop.org/")
res0: org.apache.http.HttpResponse = org.apache.http.message.BasicHttpResponse@3ab5b692
scala> agent.isSuccess
res1: Boolean = true
scala> agent.isHtml
@bartschuller
bartschuller / proto.js
Created January 12, 2011 12:41
Figuring out prototypes
var A, B, a, b, print, sys;
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
};
sys = require('sys');