Skip to content

Instantly share code, notes, and snippets.

Erik Ferguson muraiki

  • Pittsburgh
Block or report user

Report or block muraiki

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
@muraiki
muraiki / core.clj
Created Oct 8, 2014
ajax-to-websocket
View core.clj
(ns ajax-to-websocket.core
(:require [org.httpkit.server :as server]
[org.httpkit.client :as client]
[clojure.data.json :as json]
[clojure.data :as data]
[clojure.core.async :refer [chan <! >! go timeout onto-chan]]))
(defn channel-closed
"called when websocket channel is closed"
[status]
@muraiki
muraiki / fib.pl6
Last active Aug 29, 2015
multi+cached+subset
View fib.pl6
subset NonNegativeInt of Int where * >= 0;
proto fib (|) is cached returns NonNegativeInt {*}
multi fib (0) { 0 }
multi fib (1) { 1 }
multi fib (NonNegativeInt $n) { fib($n - 1) + fib($n - 2) }
say fib(100)
View gist:492539f842085f980349
def groupBy[A](xs: List[A]): Map[A, Int] =
xs.foldLeft(Map[A, Int]()) { (m: Map[A, Int], x: A) => m + (x -> (m.get(x).getOrElse(0) + 1)) }
@muraiki
muraiki / gist:96d746eff5f564c32990
Created Mar 19, 2015
updating KO model from json
View gist:96d746eff5f564c32990
// map the keys in json to the properties on your model
var desiredKeys = {
"foo": "foo",
"bar": "bar"
};
Object.defineProperty(self, 'updateFromJson', {
enumerable: true,
value: function (data) {
Object.keys(data)
@muraiki
muraiki / gist:5cc72eaeb20a57da31bc
Created Mar 19, 2015
KO model with getters/setters and json update support
View gist:5cc72eaeb20a57da31bc
function FooModel () {
Object.defineProperties(this, {
_foo: {
value: ko.observable(x.name),
enumerable: true,
configurable: true
},
_bar: {
value: ko.observable(x.server_id || x.instance_id || x.instanceId),
enumerable: true,
@muraiki
muraiki / merge.pl
Last active Aug 29, 2015
merge two files
View merge.pl
use strict;
use warnings;
open (my $foo, '<', 'foo.txt') or die;
open (my $bar, '<', 'bar.txt') or die;
open (my $merged, '>', 'merged.txt') or die;
print $merged '#!/bin/sh', "\n";
while (not eof $foo and not eof $bar) {
@muraiki
muraiki / gist:077aef846a775028eec8
Created Jul 7, 2015
Intro to anonymous functions in Perl
View gist:077aef846a775028eec8
# Intro to anonymous functions in Perl
use strict;
use warnings;
use feature qw(say);
use utf8;
binmode STDOUT, ':utf8';
# You can declare a sub without giving it a name. Hence, "anonymous" function.
sub { say 'this sub will never be called' };
@muraiki
muraiki / watch_and_chown.p6
Last active Aug 29, 2015
Watch a file and chown it once it exists
View watch_and_chown.p6
my $PATH = '.';
my $USER = 'muraiki';
my $GROUP = 'staff';
IO::Notification.watch_path($PATH)\
.unique(:as(*.path), :expires(1))\
.map(*.path)\
.grep(* ~~ /\.sock/)\
.act(-> $socket {
say "Socket created: $socket"; # actually this happens for any I/O on the file, not just creation
@muraiki
muraiki / watch_source_files.p6
Last active Sep 4, 2015
Watch source files using Supplies
View watch_source_files.p6
# disclaimer: I'm a perl6 noob :)
my $out = Supply.new;
$out.act: -> $s { say $s }; # actor model semantics; only ever execute this in 1 thread
my $watcher = IO::Notification.watch-path($*CWD.abspath)\
.grep(*.event.isa(FileChangeEvent::FileChanged))\
.unique(:as(*.path), :expires(1))\ # unique paths over last second, to prevent double-triggering from metadata events
.map(*.path.IO)\ # convert event path strings to IO::Path objects
.grep(*.extension eq 'p6')\
@muraiki
muraiki / 28.apl
Created Jul 28, 2017
Generate series of 28 numbers in ascending order that total close to 1500 (APL)
View 28.apl
https://ngn.github.io/apl/web/index.html#code=s%u21902%D71+%u237314%0Ax%u2190%28s%2C-s%29+%284%D7%u237328%29%0A%u2395%20%u2190x%5B%u234Bx%5D%0A%u2395%20%u2190+/x
s2×1+14
x(s,-s)+(4×28)
x[x]
+/x
You can’t perform that action at this time.