Skip to content

Instantly share code, notes, and snippets.

View micmarsh's full-sized avatar

Michael Marsh micmarsh

View GitHub Profile
@micmarsh
micmarsh / seeded_random.clj
Created October 7, 2016 18:48
Utilities that I always end up implementing in an exploratory phase, before deciding that test.check is better
(defn rand-int'
([seed] (rand-int' seed Integer/MAX_VALUE))
([seed upper] (rand-int' seed 0 upper))
([seed upper min]
(-> (hash seed)
(Math/abs)
(mod (- upper min))
(+ min)
(dec))))
DROP TABLE test_notes;
DROP TABLE billing_discount_notes;
drop table billing_notes;
DROP TABLE billing_discounts;
CREATE TABLE billing_notes (
id SERIAL PRIMARY KEY,
note text,
created TIMESTAMP WITHOUT TIME ZONE,
updated TIMESTAMP WITHOUT TIME ZONE

Keybase proof

I hereby claim:

  • I am micmarsh on github.
  • I am micmarsh (https://keybase.io/micmarsh) on keybase.
  • I have a public key whose fingerprint is 960F 064A BB01 F97C 1A15 FCE6 3B81 08D4 B735 857C

To claim this, I am signing this object:

@micmarsh
micmarsh / organize.hs
Created December 15, 2014 00:35
Journal Mode Organizer
import System.Directory as D
import Data.List (sort, cycle)
import Data.Set (fromList, member, Set)
import Data.List.Split (chunksOf)
import Data.Time.Calendar as C
import Control.Monad (sequence_)
-- Date parsing related functions
slice :: Int -> Int -> [a] -> [a]
Verifying myself: My Bitcoin username is +micmarsh. https://onename.io/micmarsh
@micmarsh
micmarsh / Cleanup.hs
Last active August 29, 2015 14:03
Clean Up Your Downloads Folder
import System.Directory
import System.IO (hFlush, stdout)
import Control.Exception (try, SomeException)
-- "Downloads" folders tend to get unwieldy.
-- This will force a decision on every downloaded file, with
-- a strong bias towards deletion.
type RemoveResult = IO (Either SomeException ())
#!/bin/bash
# essentials
sudo apt-get install git curl emacs24 vim cowsay
# sublime
sudo add-apt-repository ppa:webupd8team/sublime-text-2
sudo apt-get update
sudo apt-get install sublime-text
@micmarsh
micmarsh / flip.clj
Last active May 12, 2022 17:16
Flip the arguments of a function, Clojure style
(defn flip [function]
(fn
([] (function))
([x] (function x))
([x y] (function y x))
([x y z] (function z y x))
([a b c d] (function d c b a))
([a b c d & rest]
(->> rest
(concat [a b c d])
@micmarsh
micmarsh / dopromise.coffee
Last active August 29, 2015 14:01
Haskell Do Notation for JavaScript Promises
COMPILED_COFFEE = ' < -'
PLAIN_JS = '<-'
thenify = (lines) ->
[line, rest...] = lines
if rest.length is 0
line
else if line.search(PLAIN_JS) > 0 or line.search(COMPILED_COFFEE) > 0
[value, promise] = line.split if line.search(PLAIN_JS) > 0 then PLAIN_JS else COMPILED_COFFEE
noSemiColon = promise.slice(0, -1)
@micmarsh
micmarsh / fixscoping.coffee
Last active August 29, 2015 13:59
Fix Scoping in CoffeeScript
# While coffee script offers a "class" keyword, methods still aren't that closely
# associated with class instances. Include fixScoping(this) at the beginning
# of all of your constructors to make that class' methods well behaved by javascript standards
fixScoping = (instance) ->
for property, value of instance
do (property, value) -> #b/c javascript
if typeof value is "function"
instance[property] = (args...) -> value.apply(instance, args)