Skip to content

Instantly share code, notes, and snippets.

View fffej's full-sized avatar

Jeff Foster fffej

View GitHub Profile
@fffej
fffej / expressions.java
Created July 12, 2012 10:25
Expressions
public interface Expression {
int evaluate();
}
public class Constant implements Expression {
private final int value;
Constant(int value) { this.value = value; }
public int evaluate() { return value; }
@fffej
fffej / terribleTest.java
Created July 12, 2012 10:00
Top level.
@Test
public void test() {
Environment env = new Environment();
env.register(assign($("a"), plus($("b"), $("c"))));
env.register(assign($("c"), multiply($(2), $("d"))));
env.register(assign($("b"), $(3)));
env.register(assign($("d"), $(2)));
Assert.assertThat(env.valueOf($("a")), equalTo(7));
@fffej
fffej / SensibleNotCensorShip.html
Created June 29, 2012 06:44
Sensible Not CensorShip
The responsibility for controlling a child's access to the Internet should lie with the parents, not with a central Government authority.
@fffej
fffej / fp.dot
Created May 2, 2012 13:51 — forked from fogus/fp.dot
early influence graph of fp languages
digraph G {
KRC -> Miranda;
ML -> Miranda;
KRC -> SASL;
SASL -> Miranda;
Miranda -> Haskell;
Hope -> Haskell;
ML -> Caml;
Caml -> FSharp;
Clean -> Haskell;
@fffej
fffej / Root.hs
Created June 2, 2011 20:25
Controller code.
{-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-}
module Handler.Root where
import FortuneSearch
import Search
import Data.Text (Text)
import qualified Data.Text as T
import Yesod.Json
@fffej
fffej / Search.hs
Created June 2, 2011 20:14
Search "engine" for simple keyword search.
module Search (
getKeyValues
, parseQuery
, query
) where
import FortuneIndexer (getTerm)
import qualified Data.Text as T
import Database.Redis.Redis
@fffej
fffej / FortuneIndexer.hs
Created June 2, 2011 06:40
Index some fortune cookies
{-# LANGUAGE OverloadedStrings #-}
module FortuneIndexer (
getTerm
) where
import Control.Monad (forM_)
import Data.List.Split (splitOn)
import Data.Char (isLetter, isSpace)
import Data.Text.Encoding as E
@fffej
fffej / FortuneParser.hs
Created June 1, 2011 21:50
Some code to parse the fortune files
import qualified Data.Text.IO as T
import Data.List.Split (splitOn)
splitOnPercent :: T.Text -> [T.Text]
splitOnPercent = T.splitOn "%"
splitOnBlankLines :: T.Text -> [T.Text]
splitOnBlankLines t = (init . map T.concat) (splitOn [" "] (T.lines t))
fortunes :: [(FilePath,T.Text -> [T.Text])]
@fffej
fffej / gist:998182
Created May 29, 2011 22:26
Simple expression parser
import qualified Data.Text as T
import Text.ParserCombinators.Parsec
import Text.ParserCombinators.Parsec.Combinator
import Text.ParserCombinators.Parsec.Char
import Text.ParserCombinators.Parsec.Expr
import Text.ParserCombinators.Parsec.Token
import Text.ParserCombinators.Parsec.Language
import Text.ParserCombinators.Parsec.Error
data Query = Contains T.Text
compareLists :: [String] -> [String] -> Int -> [(String,String)]
compareLists x y dist = nearest
where
-- Hashes
hashX = map (computeHash . FV) x
hashY = map (computeHash . FV) y
-- Lookups
nameX = zip hashX x
nameY = zip hashY y
nearest = [(fromJust $ lookup hx nameX