Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View cstorey's full-sized avatar

Ceri Storey cstorey

View GitHub Profile
(require '[clojure.core.async :refer [alt! <!! chan go-loop]])
(defn events [quit-ch {perpage :perpage offset :offset orderby :orderby}]
(let [out-port (chan)
(go-loop [offset offset]
(let [res (client/get
(str "https://api.meetup.com/2/events?page=" perpage
"&offset=" offset
"&orderby=" orderby
"&status=upcoming,past&"
@cstorey
cstorey / tyche.js
Created March 1, 2014 23:35
Pseudorandom number generator in Javascript. Algorithm from "Fast and Small Nonlinear Pseudorandom Number Generators for Computer Simulation" by Samuel Neves and Filipe Araujo.
function Tyche(seed, idx) {
this.a = seed & 0xffffffff;
this.b = (seed / ((2<<16)*(2<<16))) & 0xffffffff;
this.c = 2654435769;
this.d = (1367130551 ^ idx) >>> 0;
for (var i = 20; i > 0; --i) {
this._mix();
}
}
@cstorey
cstorey / index.html
Created February 24, 2014 22:50
A trivial clojurescript paint program using Reagent and core.async. Greatly inspired by the RxJS paint example.
<html>
<head>
<script src="out/goog/base.js" type="text/javascript"></script>
<script src="hello_world.js" type="text/javascript"></script>
<script type="text/javascript">goog.require("hello_world.core");</script>
</head>
<body>
</body>
<script type="text/javascript">hello_world.core.run()</script>
</html>
@cstorey
cstorey / cat.cljs
Last active December 24, 2015 05:29
A buffering version of cat(1) in ClojureScript with core.async
(ns cljs-cat.core
(:require [cljs.core.async :refer [chan sliding-buffer put! close! <! >!]]
[clojure.string :as string]
[cljs.nodejs :refer [require]])
(:require-macros [cljs.core.async.macros :as m :refer [go alts!]])
)
(defn log [& args]
(let [now (js/Date.)
time-str (format "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ"
@cstorey
cstorey / dbcleaner.rb
Last active December 20, 2015 11:49
A trivial Sequel database cleaner.
require 'sequel'
require 'tsort'
class TableCleaner
def initialize db, excluded_tables
@db = db
@excluded_tables = excluded_tables
end
def clean
@cstorey
cstorey / resrv.c
Created June 28, 2013 20:27
Random reservoir sampler in C. Lacks a good deal of proper error checking.
#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int size = atoi(argv[1]);
char **resrv = calloc(size, sizeof(char*));
int i = 0; size_t nread;
char *line = NULL;
@cstorey
cstorey / logger_proxy.rb
Last active December 17, 2015 12:19
Lock free Proxy class for the ruby stdlib Logger that can be used from within a signal handler. Not 100% ready for production use, as it cannot currently recover from failures of the logger thread. Lock free queue implementation based on http://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue
require_relative 'mpsc'
class LoggerProxy
def initialize target
@target = target
@queue = MpscQueue.new
end
def start!
@reader, @writer = IO.pipe
In [17]: pytz.UTC.localize(datetime.utcnow()).isoformat()
Out[17]: '2013-05-16T17:06:19.394052+00:00'
In [18]: (datetime.utcnow()).isoformat()
Out[18]: '2013-05-16T17:06:24.842408'
In [19]:
@cstorey
cstorey / cors-lobster.rb
Last active December 16, 2015 17:59
Trivial CORS enabled lobster
1 require 'rack/cors'
2 require 'sinatra'
3
4 get '/' do
5 "Hello world"
6 end
7
8 use Rack::Cors do
9 allow do
10 origins 'localhost:3000', '127.0.0.1:3000',
@cstorey
cstorey / dump.rb
Last active December 16, 2015 04:49
require 'hamster/hash'
original = Hamster.hash :foo => 42
dumped = Marshal.dump(original)
undumped = Marshal.load(dumped)
STDERR.puts undumped[:foo]
STDOUT.puts dumped