Skip to content

Instantly share code, notes, and snippets.

@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)
@arturaz
arturaz / ADTMatch.cs
Created September 22, 2013 10:04
Matching ADT with C# using https://gist.github.com/arturaz/6658547 helper.
private static LeaderboardName getLeaderboardName(
Kind kind, LeaderboardKind lbKind
) {
return new LeaderboardName(
kind.match().returning<string>
.when<Kind.Global>(_ => string.Format(
"lb_{0}", leaderboardKindToString(lbKind)
))
.when<Kind.World>(kw => string.Format(
"lb_w{0}_{1}", kw.world, leaderboardKindToString(lbKind)
@arturaz
arturaz / Match.cs
Created September 22, 2013 10:01
Simple ADT matcher in C#
using System;
namespace Utils.Match {
public interface IMatcher<in Base, Return> where Base : class {
IMatcher<Base, Return> when<T>(Func<T, Return> onMatch)
where T : class, Base;
Return get();
Return getOrElse(Func<Return> elseFunc);
}