Skip to content

Instantly share code, notes, and snippets.

@chr15m
chr15m / keybase.md
Created April 15, 2015 06:23
keybase proof

Keybase proof

I hereby claim:

  • I am chr15m on github.
  • I am chr15m (https://keybase.io/chr15m) on keybase.
  • I have a public key whose fingerprint is 30AE 7153 C922 21F3 3BEE B492 09D8 C88A 5F65 515A

To claim this, I am signing this object:

I would expect this:
(defn x []
(try
(some-call)
(catch [e Exception] 1)
(else 2)))
To compile to this:
@chr15m
chr15m / README.md
Last active August 29, 2015 14:26
Hy REPL in Django
  • Make sure you've installed hy or put it in requirements.txt
  • Put hy.py in management/commands/hy.py
  ./manage.py hy
  hy 0.11.0 using CPython(default) 2.7.6 on Linux
  => (import [yourapp [settings]])
  => settings.DEBUG
  True
@chr15m
chr15m / expression-printer.hy
Last active June 28, 2016 12:24
Hy macro to print expression before evaluating it
(import [hy.models.expression [HyExpression]])
(defn print-expression [expr]
(+ "(" (.join " " (list-comp (if (= (type x) HyExpression) (print-expression x) (str x)) [x expr])) ")"))
(defmacro print-eval [expr]
(quasiquote (do
(print (unquote (print-expression expr)))
(unquote expr))))
@chr15m
chr15m / watch-make.sh
Created December 5, 2016 09:14
Shell script using make to watch a project and re-build on demand.
#!/bin/sh
while true;
do
if ! make -q "$@";
then
echo "#-> Starting build: `date`"
make "$@";
echo "#-> Build complete."
fi
@chr15m
chr15m / set_timeout.cljs
Last active March 24, 2017 16:09
ClojureScript setTimeout that fires reliably in a background tab.
; uses a web worker background thread
(let [metronome-worker-js "self.onmessage=function(e){setTimeout(function(){postMessage(e.data);},e.data.interval);};console.log('Metronome worker loaded.');"
worker-blob (js/Blob. (clj->js [metronome-worker-js]) {:type "application/javascript"})
worker (js/Worker. (.createObjectURL js/URL worker-blob))
call-id (atom 0)]
(defn make-worker-listener [id callback]
(fn [e]
(when (= e.data.id id)
(callback)
@chr15m
chr15m / pr
Created August 14, 2017 01:40
Open a GitHub pull-request page from the command line
#!/usr/bin/env python
import webbrowser
import subprocess
def git(*args):
return subprocess.check_output(["git"] + list(args))
remote, branch = git("rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}").split("/")
repo = git("config", "--get", "remote." + remote + ".url").split(":").pop().replace(".git", "").strip("\n")
#!/usr/bin/env python
# two hex encoded strings coming in on stdin
# will get xored and output as a hex encoded string
import fileinput
lines = [l for l in fileinput.input()]
print hex(int(lines[0], 16) ^ int(lines[1], 16)).replace("0x", "").rstrip("L")
@chr15m
chr15m / browser-tab-communication-via-localstorage.html
Created June 8, 2018 12:43
Demo of communicating between tabs via the localStorage storage event
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<style>
body {
font-family: Arial, Sans-serif;
max-width: 600px;
margin: 1em auto;
@chr15m
chr15m / websockets.js
Created July 6, 2018 02:02
Minimal Javascript websocket client/server
// server
ws = require('ws');
wss = new ws.Server({ port: 8033 });
wss.on('connection', function(s) {
console.log("got connection", s);
s.on('message', function incoming(message) {
console.log("received", message);
});
});