Skip to content

Instantly share code, notes, and snippets.

/**
* Co & contravariant definitions of Action and Func
*
* Generated with scala:
*
println(s" public delegate void Act();")
println(s" public delegate R Fn<out R>();")
(1 to 22).foreach { i =>
val r = 1 to i
@arturaz
arturaz / Functions.cs
Created December 19, 2013 08:18
Backporting .NET 4.5 functions to unity
/**
* Co & contravariant definitions of Action and Func
*
* Generated with scala:
*
(1 to 22).foreach { i =>
val r = 1 to i
val types = r.map(n => s"in P$n").mkString(", ")
val args = r.map(n => s"P$n p$n").mkString(", ")
@arturaz
arturaz / gist:8035632
Created December 19, 2013 07:30
Lightweigth reactive extensions implementation for Unity3D
### utils/rx/Observable.cs ###
?using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using utils.functional;
namespace utils.rx {
public interface IObservable<T> {
ISubscription subscribe(Action<T> onChange);
@arturaz
arturaz / gist:7485096
Created November 15, 2013 14:24
How do I turn this slick method into a subquery?
val myRank = (session: Session) => {
val mine = Ratings.filter(_.userId === user.id).map(mapper).
first()(session)
Ratings.filter { mapper(_) > mine }.map(_.length + 1)
}
packageConfiguration in packageBin in Compile <<= (
packageConfiguration in packageBin in Compile, baseDirectory
) map { (c, b) =>
val jar = b / "Plugins" / "Android" / "xclient.jar"
new Package.Configuration(c.sources, jar, c.options)
}
package com.tinylabproductions.quazibuild.server.messaging
import com.tinylabproductions.quazibuild.{messaging => m}
import com.tinylabproductions.quazibuild.messaging.Messages.S2C
import com.google.protobuf.GeneratedMessage
import com.tinylabproductions.quazibuild.messaging.LiveGame._
import com.tinylabproductions.quazibuild.server.model.{StoredResource, Resource}
import com.tinylabproductions.quazibuild.messaging.Base.User
import com.tinylabproductions.quazibuild.server.actor.live_game.model.Ship
import implicits._
@arturaz
arturaz / enumerator.cs
Created October 24, 2013 05:44
Custom iteration in C# and Scala
public IEnumerator<Tuple2<T, Direction>> GetEnumerator() {
if (top != null)
yield return new Tuple2<T, Direction>(top, Direction.Top);
if (right != null)
yield return new Tuple2<T, Direction>(right, Direction.Right);
if (down != null)
yield return new Tuple2<T, Direction>(down, Direction.Down);
if (left != null)
yield return new Tuple2<T, Direction>(left, Direction.Left);
}
@arturaz
arturaz / gist:7037599
Created October 18, 2013 07:08
Akka IO TCP connection handler using pipelines
package com.tinylabproductions.quazibuild.server.actor.connection
import akka.actor.{Props, ActorRef, Actor}
import akka.io.Tcp._
import java.net.InetSocketAddress
import akka.util.ByteString
import com.tinylabproductions.quazibuild.server.messaging._
import com.tinylabproductions.quazibuild.server.actor.Logging
import com.tinylabproductions.quazibuild.messaging.Messages.{S2C, C2S}
import akka.io._
object ChiShapeGenerator extends ChiShapeGenerator {
trait JavaConvertible[From, To] { def asJava(obj: From): To }
object JavaConvertible {
def apply[A, B](obj: A) = implicitly[JavaConvertible[A, B]].asJava(obj)
implicit object HoleParamsJC extends JavaConvertible[HoleParams, HP] {
def asJava(obj: HoleParams) = new HP(obj.holeEdgeLengthThreshold)
}
implicit object SmoothHoleParamsJC
def extractEither[
Key, TLeft, TRight, M[_] <: TraversableOnce[_]
]
(monad: M[(Key, Either[TLeft, TRight])])
(implicit cbf: CanBuildFrom[
M[(Key, Either[TLeft, TRight])],
(Key, TRight),
M[(Key, TRight)]
]): Either[TLeft, M[(Key, TRight)]] = {
val builder = cbf(monad)