Skip to content

Instantly share code, notes, and snippets.

@skatenerd
skatenerd / spaceship.html
Last active October 20, 2016 17:50
spaceships
<html>
<head>
<script type="text/javascript" src="https://rawgit.com/bjwbell/canvas-geolib/master/geometry.js"></script>
<script type="text/javascript" src="utilities.js"></script>
<script type="text/javascript">
var healthyShip = function() {return document.getElementById('ship');}
var explosion = function() {return document.getElementById('explosion');}
var astronaut = function() {return document.getElementById('astronaut');}
var getShipImage = function() {
@skatenerd
skatenerd / mockwriter.py
Created October 5, 2016 19:50
mock filewriter
class MockWriter(object):
def write_file(self, path, contents):
print "ooh look at me, i'm a file writer"
print "i perform slow operations and sometimes i fail for no good reason"
print "you only use me when you don't have a Real Database to talk to"
print "I'm so cool! not!"
return 0
@skatenerd
skatenerd / foo.hs
Created August 23, 2016 14:38
pipeline vs composition
-- pipelining
let x = 1
doubled = x * 2
squared = doubled * doubled
decremented = squared - 1
in decremented
-- composition
let x = 1
@skatenerd
skatenerd / thanks_colin.clj
Created July 6, 2016 13:46
some code @trptcolin wrote to help me understand macros
(def x (atom 1))
(defmacro foo []
(let [times @x
prints (map (fn [_] `(println "hello world")) (range times))]
`(do ~@prints)))
(defn foo-caller [] (foo))
@skatenerd
skatenerd / refinements.rb
Last active April 13, 2016 16:56
what's gonna happen?
class Foo
def yes
puts "BORING"
end
end
class Bar
def self.go(x)
puts x.yes
end
@skatenerd
skatenerd / connection_close.hs
Last active November 24, 2015 19:54
Unexpected Connection Close
module Main where
import qualified Data.Text as T
import qualified Network.WebSockets as WS
import qualified Control.Concurrent as C
import qualified Control.Monad as M
main :: IO ()
main = do
@skatenerd
skatenerd / basic_sockets.hs
Last active November 16, 2015 18:35
basic server, sends echo messages back to clients. works in Chrome and FF, but not Chromium
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Text (Text)
import qualified Data.Text.IO as T
import qualified Network.WebSockets as WS
@skatenerd
skatenerd / transduce.clj
Created November 13, 2015 18:03
interactively understanding transducers
user=> (def increment-a-list (map inc))
#'user/increment-a-list
;I have partially-applied "map". It didn't blow up with an arity error. Success!
;Let's use it
user=> (increment-a-list [1,2,3])
#object[clojure.core$map$fn__4549$fn__4550 0x7ebed7f2 "clojure.core$map$fn__4549$fn__4550@7ebed7f2"]
;not helpful. it looks like I called a function. What did I call?
@skatenerd
skatenerd / lazy.clj
Last active November 12, 2015 23:37
lazy
user=> (def zing (map (fn [x] (if (= x 100) (/ 1 0) x)) (range 1000)))
#'user/zing
user=> (first zing)
0
user=> (nth zing 5)
5
user=> (nth zing 999)
ArithmeticException Divide by zero clojure.lang.Numbers.divide (Numbers.java:156)
@skatenerd
skatenerd / eta.hs
Created November 7, 2015 21:55
eta reduce
-- inspired by
-- http://stackoverflow.com/a/23660388/1096146
--nestedMap f elements = map (\inner -> map f inner) elements
--nestedMap f elements = map (map f) elements
--nestedMap f = map (map f)
--nestedMap f = (map . map) f
--nestedMap = (map . map)
nestedMap = map . map