Skip to content

Instantly share code, notes, and snippets.

@girvo
girvo / BackgroundTask.h
Created March 2, 2016 06:38 — forked from liamzebedee/BackgroundTask.h
Attempts at implementing background tasks in React Native iOS
//
// BackgroundTask.h
// tomtrack
//
// Created by Liam Edwards-Playne on 13/02/2016.
//
#import "RCTBridgeModule.h"
@interface BackgroundTask : NSObject <RCTBridgeModule>
@girvo
girvo / either.nim
Created June 9, 2016 07:32
An Either monad(ish) implementation for Nim v0.14
## A right-biased Either[L, R] implementation in Nim
import optional_t
type
EitherType* {.pure.} = enum
Left, Right
Either*[L, R] = object
kind: EitherType
right: Option[R]
@girvo
girvo / decoder-inference.js
Last active March 26, 2018 13:48
Flow type inference using the "decoders" library
// @flow
import { guard, object, string, number } from 'decoders'
import type { Decoder } from 'decoders'
// This is the type-level "function" that pulls the generic out of the decoder
type ExtractDecoderType = <T>(d: Decoder<T>) => T
// Now we define our run-time decoder, without defining the type first...
const person = object({
name: string,
@girvo
girvo / utils.re
Created January 17, 2018 08:29
A small utility module I use with my ReasonML projects
module Result = {
type result('a, 'b) =
| Ok('a)
| Error('b);
let isOk = (result_) =>
switch result_ {
| Ok(_) => true
| Error(_) => false
};
let isError = (result_) =>
@girvo
girvo / Parser.fs
Created December 10, 2016 00:31 — forked from xavierzwirtz/Parser.fs
module Emly.Parser
open Emly.UntypedAST
open FParsec
open FParsec.CharParsers
open Emly.ParserUtils
open Emly.ParserUtils.IndentationParserWithoutBacktracking
let keywords =
Set.ofList ["let"; "fun"; "rec"; "impure"; "in"; "of"; "if"; "then"; "else"; "match"; "with"; "type"; "foreign"; "mutable"]
/**
* Tiny module to generate an Express middleware that maps the request path to
* a specified folder, allowing for "semi-static" routes without needing to
* define them ahead of time.
*
* Configuration can be passed to the `semiStatic` function when registering the
* middleware. The format is described below, with the "context" property being
* passed to the template's render call, and `context.req` being the request
* object itself.
*
@girvo
girvo / redux-inject.js
Created March 8, 2016 02:45 — forked from AdamMaras/redux-inject.js
Redux dependency injection middleware
export default function createInjectMiddleware(map) {
return store => next => action => {
if (typeof action !== "object"
|| typeof action.payload !== "function"
|| action.meta == null
|| action.meta.inject == null) {
return next(action);
}
const defaultInjections = {
@girvo
girvo / sdl2_opengl.c
Created January 6, 2016 03:33 — forked from exavolt/sdl2_opengl.c
Very basic SDL2 OpenGL application
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
@girvo
girvo / gist:3144864
Created July 19, 2012 15:51
The Withdrawal
The Withdrawal
No junkie ever goes through withdrawal willingly. Oh no, we’ll do anything we can to stave off the sickness, but it’s not something that most will understand. For a Normal person, robbing your parents and cheating your friends and burning all the bridges around you for just a “high” makes no sense... But what they can’t understand is what we’re avoiding.
William S. Burroughs described it as a “thirst”, and I quite honestly can’t find a more apt description. It’s a thirst at the most basic level; your very cells and soul cry out to be quenched. It starts innocently enough: sniffles, like the beginning of a cold. That’s just the beginning. It takes a day or so for a junkie to start to feel the thirst, the hunger. But once it’s a hold of you, the agony and terror and fear that consumes your every waking thought (and most of your unwaking thoughts too) will bring even the strongest person into a place they could never imagine.
The first time I experienced it, I was 18. My best friend had a girlf