Skip to content

Instantly share code, notes, and snippets.

darkf

  • Zero page
Block or report user

Report or block darkf

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@darkf
darkf / closureobjs.rkt
Last active Aug 29, 2015
Closures as Stateful Objects
View closureobjs.rkt
#lang racket
(define (obj state msg)
(match msg
['init (cons state (curry obj state))]
['get-x (cons state (curry obj state))]
[(list 'set-x x) (cons x (curry obj x))]
['ping (cons "pong" (curry obj state))]))
(define-syntax-rule (send! obj msg)
@darkf
darkf / Main.hs
Created Jul 7, 2014
Simple RISC-y VM in suboptimal Haskell
View Main.hs
module Main where
import Test.Hspec
import VM
($=) = shouldBe
main :: IO ()
main = hspec $ do
describe "runVM" $ do
@darkf
darkf / concurrent.hs
Created Sep 9, 2014
A Haskell Concurrency pattern for servers
View concurrent.hs
{-# LANGUAGE LambdaCase #-}
import Control.Concurrent
import Control.Concurrent.Chan
import Control.Monad
import Network.Socket
import System.IO
data MainMessage = Accept Socket SockAddr
| MsgReceived String
@darkf
darkf / dotdict.py
Created Oct 31, 2014
JS-style lookups for Python dicts
View dotdict.py
class dotdict(dict):
def __getattribute__(self, key):
if key in self:
return self[key]
return dict.__getattribute__(self, key)
d = dotdict(a=1, b=2)
print d.a, d.b
print d.c
@darkf
darkf / box_collide.js
Created Dec 26, 2014
AABB Box Collision Test
View box_collide.js
// So I don't lose it
function boxCollide(a, b) {
if ((a.y+a.h <= b.y) || (a.y >= b.y+b.h)) return false;
if ((a.x+a.w <= b.x) || (a.x >= b.x+b.w)) return false;
return true;
}
@darkf
darkf / alloc_task.cpp
Created Jun 5, 2015
Useless parallel stack allocator in C++
View alloc_task.cpp
#include <cstring>
#include <iostream>
#include <thread>
#include <future>
#include <queue>
std::mutex mqMutex;
std::queue<std::tuple<size_t, std::promise<void*>&>> mq;
void * alloc(size_t len) {
@darkf
darkf / cps.js
Created Oct 16, 2011
an attempt at javascript continuation passing style conversion from scheme
View cps.js
function cps_prim(f) {
return function() {
var r = arguments.reverse();
return r[0]( f.apply(this, arguments.slice(1).reverse()) );
}
}
function _sqrt() { return cps_prim(function(x) { return 6; }); }
function _mul(a, b) { return a*b; }
@darkf
darkf / fc.c
Created Dec 22, 2011
sum digits of factorial with double in C
View fc.c
/* sums the digits of the factorial 10 (since not much larger can be held by a double)
copyright (c) 2011 darkf
use for anything, CC-0 or public domain etc */
#include <stdio.h>
#include <string.h>
double f(int n){return !n?1:n*f(n-1);}
int g(char* b){int x=0,i;for(i=0;i<strlen(b);i++)x+=b[i]-'0';return x;}
main(){char b[256];double x=f(10);sprintf(b,"%.0f",x);printf("%d",g(b));}
View vm.c
/* blokvm -- a darkf implementation of blockeduser's terrible vm
copyright (c) 2012 darkf */
#include <stdio.h>
#include <stdlib.h>
/* 3 * 255^2 */
#define BITMAP_SIZE 195075
#define JMP fseek(fp, PC, SEEK_SET);
@darkf
darkf / mock.txt
Created Jan 13, 2012
Mockup of a game-oriented behavior modeling language
View mock.txt
# mockup of a game-oriented behavior modeling language, v6 (1/13/2012)
# copyright (c) 2012 darkf
# define player as an object that is both movable, drawable and a rigid body (via tags)
player <- Object()
player is Movable, RigidBody, Drawable # three tags
tiles <- Array2D(64, 64) # 2-dimensional array of size 64x64 for holding map tiles
# Array2D is by default tagged with Iterable, Indexable
tiles is Drawable # add a Drawable tag so we can treat it as a game object
You can’t perform that action at this time.