Skip to content

Instantly share code, notes, and snippets.

View gavinwahl's full-sized avatar

Gavin Wahl gavinwahl

  • Fusionbox
  • Colorado
View GitHub Profile
@gavinwahl
gavinwahl / gist:ef4be04fadf0296f005f
Created April 1, 2015 21:44
Inheritance and composition are isomorphic
class Parent(object):
def __init__(self, x):
self.x = x
def frob(self):
self.x += 1
class Child1(Parent):
def __init__(self, x, y):
@gavinwahl
gavinwahl / example.sql
Last active August 29, 2015 14:19
Temporal foreign key
DROP TABLE IF EXISTS parent;
DROP TABLE IF EXISTS child;
CREATE TABLE parent(
identity_id integer,
valid_range int4range
);
CREATE TABLE child(
valid_range int4range,
{-# LANGUAGE GADTs, StandaloneDeriving, TypeOperators, ExistentialQuantification #-}
import Data.Type.Equality
data UTerm = UTrue
| UFalse
| UIf UTerm UTerm UTerm
| UZero
| USucc UTerm
| UIsZero UTerm
@gavinwahl
gavinwahl / signals.py
Last active August 29, 2015 14:22
RealtimeSignalProcessor for widgy that understands making commits need to reindex their owners.
from django.db import models
from haystack.signals import RealtimeSignalProcessor
from widgy.models.versioning import VersionCommit
class WidgyRealtimeSignalProcessor(RealtimeSignalProcessor):
def handle_commit(self, sender, instance, **kwargs):
for owner in instance.tracker.owners:
self.handle_save(sender=type(owner), instance=owner, **kwargs)
<form method="post">
{% csrf_token %}
{% if confirm %}
<div hidden>
{{ form.as_p }}
</div>
pls confirm
<input type=submit value="Confirm" name="confirm">
{% else %}
{{ form.as_p }}
tmpd = do
tmp <- var $ glob "/tmp/tmp/"
today <- function $ cmd "date" ["+%F"]
when_ (not_ $ dirExists tmp) $ mkdir tmp
cd tmp
i <- var $ lit "1"
dir <- var $ today
while_ (dirExists dir) $ do
set i $ readVar i + 1
set dir $ today <> lit "." <> readVar i
@gavinwahl
gavinwahl / renderpipeline.hs
Last active August 29, 2015 14:25
'Dynamically' typed pipelines of composed functions
{-# LANGUAGE GADTs, ExistentialQuantification, TypeOperators, StandaloneDeriving #-}
import Data.Type.Equality
import Text.Read
data Renderer a b where
-- Lifts a normal function to a Renderer. The String is just a label
-- to see what's going on.
Lift :: String -> (a -> b) -> Renderer a b
@gavinwahl
gavinwahl / typecheck.hs
Created July 20, 2015 22:37
GADT typechecking and existentials
{-# LANGUAGE GADTs, StandaloneDeriving, TypeOperators, ExistentialQuantification, EmptyCase #-}
import Data.Type.Equality
import Data.Void
data UTerm = UTrue
| UFalse
| UIf UTerm UTerm UTerm
| UZero
| USucc UTerm
@gavinwahl
gavinwahl / settings_compress_offline.py
Last active September 10, 2015 12:41
Settings for django-compressor offline compression with Widgy and Mezzanine. Under the Simplified BSD License (https://www.fusionbox.com/license/).
"""
Provides all the settings that are required to get COMPRESS_OFFLINE mode
working for django-compressor, just import everything from this file into your
settings and you will have turned on the offline compress mode.
If you wish to test it on your local setup, you can import it in your local
settings file.
# myproject/settings.py
from .settings_compress_offline import *
@gavinwahl
gavinwahl / pipes.hs
Last active August 29, 2015 14:25
Is this what pipes does?
{-# LANGUAGE EmptyCase #-}
import Data.Void
import Control.Applicative
import Control.Monad.Trans
import Control.Monad
import Control.Monad.Writer
import System.IO
import qualified Data.ByteString as B