Skip to content

Instantly share code, notes, and snippets.

View inanna-malick's full-sized avatar

Inanna Malick inanna-malick

View GitHub Profile
@inanna-malick
inanna-malick / f2048
Last active August 29, 2015 13:57
functional 2048
//todo: use vector, scala 2:10 generic extractors. Currently using 2.9, so List has better pattern matching support
type Row = List[Option[Int]]
def shiftR(r: Row): Row = r.foldRight(Nil: Row){
case (None, acc) => acc
case (Some(x), Some(a)::as) if a == x => Some(a + x)::as
case (Some(x), acc) => Some(x)::acc
}.padTo(4, None)
@inanna-malick
inanna-malick / Scala Trie
Last active August 29, 2015 13:57
Scala Trie
case class Trie(v: Option[String], m: Map[Char, Trie])
def addInner(t: Trie, s: List[Char], p: String): Trie = s match {
case c::cs => Trie(t.v, t.m.updated(c, addInner(t.m.getOrElse(c, Trie(Some(p + c), Map.empty)), cs, p + c) ))
case Nil => t
}
def add(t: Trie, s: String): Trie = addInner(t, s.toList, "")
def findInner(t: Trie, s: List[Char]): Option[String] = s match {
@inanna-malick
inanna-malick / throttle.scala
Created December 3, 2014 15:06
Throttle a flow using Akka Stream's new FlowGraph DSL
val rate = 200 millis
def throttled[T]: Flow[T, T] = {
val tickSource = TickSource(rate, rate, () => () )
val zip = Zip[T, Unit]
val in = UndefinedSource[T]
val out = UndefinedSink[T]
PartialFlowGraph{ implicit builder =>
import FlowGraphImplicits._
in ~> zip.left ~> Flow[(T,Unit)].map{ case (t, _) => t } ~> out

How to install latest GHC 7.8.4 + cabal 1.22 on intel edison w/ ubi linux

ghc

ubilinux prerequisites

# for untar later
apt-get install bzip2
# probably all needed

apt-get install freeglut3 freeglut3-dev -y

@inanna-malick
inanna-malick / flyweight.scala
Created April 1, 2015 18:44
Flyweight in Scala
/*
run as a script using `scala flyweight.scala`
expected output:
Serving CoffeeFlavour(Espresso) to table 121
Serving CoffeeFlavour(Cappuccino) to table 121
Serving CoffeeFlavour(Frappe) to table 552
Serving CoffeeFlavour(Espresso) to table 96
Serving CoffeeFlavour(Cappuccino) to table 3
Serving CoffeeFlavour(Espresso) to table 3
Serving CoffeeFlavour(Frappe) to table 3
def fibonacci(number: Int): Int = {
assert(number >= 0)
@annotation.tailrec def inner(prev: Int, curr: Int, n: Int): Int =
if (n < number) inner(curr, prev + curr, n + 1)
else curr
if (number == 0) 0
else if (number == 1) 1
else inner(0, 1, 1)
@inanna-malick
inanna-malick / fish-prompt.fish
Last active November 24, 2015 20:35 — forked from gak/fish-prompt.sh
My custom fish prompt code explained at http://geraldkaszuba.com/tweaking-fish-shell/
# https://gist.github.com/oliversalzburg/a57a8b82dd8ec245f985
function _common_section
printf $c1
printf $argv[1]
printf $c0
printf ":"
printf $c2
printf $argv[2]
printf $argv[3]
@inanna-malick
inanna-malick / pusher.scala
Last active August 11, 2016 00:27 — forked from gre/pusher.scala
Using Pusher API with Play framework in scala for publishing events
//send messages via Pusher API in play 2.4
import play.api.libs.json.{ Writes, Json }
import play.api.libs.ws.{ WSResponse, WSClient }
import play.api.libs.ws.ning.NingWSClient
import java.security.MessageDigest
import java.math.BigInteger
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
import scala.concurrent.{ ExecutionContext, Future }
@inanna-malick
inanna-malick / function_vs_partial_function.scala
Last active February 4, 2016 04:14
{n => n + 1} and {case n => n +1} are almost but not quite the same thing
scala> val f: Function[Int, Int] = { n => n + 1 }
f: Function[Int,Int] = <function1>
scala> val f: Function[Int, Int] = { case n => n + 1 }
f: Function[Int,Int] = <function1>
scala> val pf: PartialFunction[Int, Int] = { n => n + 1 }
<console>:10: error: type mismatch;
found : Int => Int
required: PartialFunction[Int,Int]
@inanna-malick
inanna-malick / vimrc
Created January 23, 2017 20:29
dotfiles
" install plugins. (requires running :PlugInstall)
" Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged)
call plug#begin('~/.vim/plugged')
" Make sure you use single quotes
Plug 'altercation/vim-colors-solarized'
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/nerdcommenter'
Plug 'scrooloose/syntastic'