Skip to content

Instantly share code, notes, and snippets.

@mattbierner
mattbierner / index.js
Last active August 29, 2015 14:21
Blot're Weather Client Example
var Blotre = require('blotre');
var rp = require('request-promise');
var fs = require('fs');
var cron = require('cron');
var weatherSpectrum = new (require('colour-me-life'))();
weatherSpectrum.setSpectrum('blue', 'green', 'red');
weatherSpectrum.setNumberRange(0.0, 1.0);
var ZIP = "92328";
@mattbierner
mattbierner / gist:d6d989bf26a7e54e7135
Last active November 15, 2017 09:34
C++ Template Meta Programming Linear Feedback Shift Register
#include <iostream>
#include <utility>
/**
Ordered collection of bits.
*/
template <bool... values>
using bitset = std::integer_sequence<bool, values...>;
/**
@mattbierner
mattbierner / life_comonadic.cpp
Created November 3, 2014 00:25
c++ Compile Time Comonaic Life
/**
* Conway's game of life implemented in C++ templates at compile time using Comonads.
*
* Logic based on: http://blog.emillon.org/posts/2012-10-18-comonadic-life.html
*/
#include <iostream>
/// Identity functor
template <typename X>
struct id {
@mattbierner
mattbierner / list.cpp
Created October 28, 2014 02:55
C++ Compile Time Lazy List
/// Identity functor
template <typename X>
struct id {
using type = X;
};
/// Create a meta functor that returns `X` when invoked with any argument.
template <typename X>
struct constant {
template <typename>
@mattbierner
mattbierner / gist:090a80d25259b6472827
Last active March 5, 2021 13:55
Compile Time Brainfuck C++ Metaprogramming Evaluator
#include <utility>
using iochar = char;
using memval = unsigned char;
/* BF Memory Cell */
template <memval val = 0>
struct Cell {
enum { value = val };
@mattbierner
mattbierner / gist:a3fc9b33f890134efa12
Created July 24, 2014 16:42
Index sequnece example
// Example only shows expansion logic, not perfect forwarding
template<class F, class T, size_t... I>
auto unpack(F f, T t, std::index_sequence<I...>) {
return f(std::get<I>(t)...);
}
template<class F, class T>
auto tuple_eval(F f, T arg) {
return unpack(f, args, std::make_index_sequence<std::tuple_size<T>::value>());
}
@mattbierner
mattbierner / example.kep
Last active August 29, 2015 13:57
Akh DCont example
with
import 'akh::base' {liftM2},
import 'akh::dcont' {runDCont of shift reset}
in {
var list = liftM2 @ \x y -> [x, y];
runDCont(
reset \ p ->
liftM2((+),
shift @ p \k ->
var words = function(count, wl) {
var out = [];
for (var i = 0; i < count; ++i) {
var len = Math.ceil(Math.random() * wl);
var w = '';
while (len--)
w += String.fromCharCode('a'.charCodeAt(0) + Math.floor(Math.random() * 26))
out.push(w);
}
return out;
@mattbierner
mattbierner / pre-commit
Last active January 3, 2016 22:29
khepri git hook
#!/bin/sh
KHEPRI="khepri"
OPTIONS=""
SRC=lib
DEST=dist
DEST_NODE=dist_node
function _compile {
@mattbierner
mattbierner / div_and_reg_parser.kep
Last active December 30, 2015 22:49
Example division and regular expression parser
var idToken = letter;
var divToken = character('/');
var regularExpressionToken = binds(
enumeration(
between(character('/'), character('/'),
eager <| many(letter)),
optional('', letter)),
\body, flag ->
always('/' + body +'/' + flag + ')'));