Skip to content

Instantly share code, notes, and snippets.

@MichaelBlume
MichaelBlume / gist:3921530
Created October 20, 2012 00:59
Transformations on JSON schemas. Also strictness.
def rec_schema_transform(transform):
def recur(schema):
if not isinstance(schema, dict):
return
transform(schema)
for k, v in schema.items():
if k in ("properties", "patternProperties", "dependencies"):
for _, subschema in v.items():
recur(subschema)
elif k in ("additionalProperties", "additionalItems") and v:
@MichaelBlume
MichaelBlume / escroll.hs
Created October 26, 2012 18:56
Cute script for drawing attention to errors in scrolling log output
#!/usr/bin/env runhaskell
import Data.List
import Control.Concurrent
import System.IO
takeBlock :: [String] -> (String, [String])
takeBlock (firstLine:moreLines) = (block, restLines) where
block = intercalate "\n" (firstLine:indLines)
(indLines, restLines) = span (isPrefixOf " ") moreLines
@MichaelBlume
MichaelBlume / check_writing.py
Created October 27, 2012 04:01
Beeminder writing check
#!/usr/bin/env python
import envoy
import requests
import time
r = envoy.run("find /Users/mike/Dropbox/writing | grep -v DS_Store | xargs wc -c")
count = r.std_out.split()[-2]
kb_written = int(count) // 1024
url = "https://www.beeminder.com/api/v1/users/mblume/goals/writing/datapoints.json"
(defn my-split-with [pred coll]
(let [p (promise)
passes ((fn step [c]
(lazy-seq
(if-let [[x & xs] (seq c)]
(if (pred x)
(cons x (step xs))
(do (deliver p c) nil))
(do (deliver p nil) nil))))
coll)]
@MichaelBlume
MichaelBlume / babel.hs
Last active December 18, 2015 21:29
prints the library of babel
import Control.Monad
chars :: [Char]
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.'\"-;:?!()"
incrementS :: [[Char]] -> [[Char]]
incrementS [] = [chars]
incrementS ([_] : r) = chars : (incrementS r)
incrementS ((c:cs) : r) = cs : r
@MichaelBlume
MichaelBlume / gist:6968441
Last active December 25, 2015 11:19
obj: reify for python
# Writing some unit tests in Python, I found myself homesick for Clojure's `reify`.
from functools import partial
class Blank(object): pass
def obj(*fs):
o = Blank()
for f in fs:
setattr(o, f.func_name, partial(f, o))
@MichaelBlume
MichaelBlume / Chat.hs
Last active January 3, 2016 06:59
Transforms gchat logs into tumblr chat posts
#!/usr/bin/env runhaskell
module Main (main) where
-- When you copy a conversation out of your google chat logs, it looks like
-- this
--
-- Alice
-- hi
-- how are you
-- Bob Smith
from itertools import takewhile, ifilter
def fibs():
fib0 = 1
fib1 = 1
while True:
yield fib0
newfib = fib0 + fib1
fib0 = fib1
fib1 = newfib
#!/bin/bash
echo -n "Updating system so it uses the new JDK..."
update-alternatives --quiet --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0/bin/java" 2
update-alternatives --quiet --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0/bin/javac" 2
update-alternatives --quiet --set java /usr/lib/jvm/jdk1.8.0/bin/java
update-alternatives --quiet --set javac /usr/lib/jvm/jdk1.8.0/bin/javac
echo "done."
exit 0
(ns schema->gen
"Functions for generating test data from schemas."
(:require [four.stateful :as four]
[re-rand :refer [re-rand]]
[schema.core :as sch]
[simple-check.generators :as gen]))
(defn ^:private re-randify-regex
"schema requires ^$ while re-rand forbids them"
[re]