Skip to content

Instantly share code, notes, and snippets.

@grav
grav / render.js
Created June 25, 2017 18:47
Save a dynamically rendered page with Chrome Headless browser
// Needs a running Chrome Headless, eg:
// /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --headless --remote-debugging-port=9222 https://chromium.org
// Run with node, eg `node render.js output.html`
const CDP = require('chrome-remote-interface');
const fs = require('fs')
CDP((client) => {
// Extract used DevTools domains.
const {Page, Runtime} = client;
@grav
grav / medley.md
Last active December 4, 2020 04:20
Getting Interlisp-D running with Medley on Debian 3.1

Install VirtualBox (eg on Mac: brew cask install virtualbox)

Download Debian 3.1 from here: https://virtualboxes.org/images/debian/

Create a new VM in VirtualBox and select the vdi file from the above archive as a disk. Check the VM settings:

  • Make sure the disk is mounted as an IDE device, SATA errors out on boot (in the Storage tab)
  • Also, make sure the pointing device is set to PS/2 Mouse (in the General tab)
#?(:clj
(defn cljs-env?
"Take the &env from a macro, and tell whether we are expanding into cljs."
[env]
(boolean (:ns env)))
(defmacro if-cljs
"Return then if we are generating cljs code and else for Clojure code.
https://groups.google.com/d/msg/clojurescript/iBY5HaQda4A/w1lAQi9_AwsJ"
[then else]
(ns xhr-client
(:refer-clojure :exclude [get])
(:require [httpurr.protocols]
[clojure.string :as str]
[httpurr.protocols :as p]
[httpurr.client :as c]))
(defn normalize-headers
[headers]
(reduce-kv (fn [acc k v]
@grav
grav / ordered-keys-from-edn-map.clj
Last active September 8, 2018 10:21
Retrieve order of keys in an edn-map
;; Retrieve order of keys in an edn-map
(defn ordered-keys-from-edn-map [edn]
(assert (map? (read-string edn)))
(let [list-of-symbols (-> edn
(clojure.string/replace-first "{" "[")
(clojure.string/replace #"}(\s+)$" "]")
read-string)]
(->> list-of-symbols
(partition 2)
function sleep(s){
return new Promise(function(resolve,reject) {
setTimeout(_ => {
resolve();
}, 1000 * s);
});
}
async function start(){
while(true){
@grav
grav / runloop.cljs
Last active December 16, 2018 14:07
(defn sleep [s]
(js/Promise. (fn [res rej]
(js/setTimeout res (* 1000 s)))))
(defn start []
(println "while start")
(-> (sleep 2)
(.then start)))
(start)
//Parameter is the type of parameter passed in the selector
public class ClosureSelector<Parameter> {
public let selector : Selector
private let closure : ( Parameter ) -> ()
init(withClosure closure : @escaping ( Parameter ) -> ()){
self.selector = #selector(ClosureSelector.target)
self.closure = closure
}
@grav
grav / socket_repl.clj
Created April 28, 2019 11:28
Lumo plumbing
;; to use in cursive:
;; 1. create a project.clj, deps.edn or pom.xml with tubular dependency and open in Cursive
;; 2. create new run-config
;; 3. select clojure.main as repl type
;; 4. specify socket_repl.clj (this file) in `Parameters`
;; 5. run lumo with socket repl:
;; lumo --socket-repl 5555 --classpath src-dir1:src-dir2 --dependencies some/dep:0.1.0-SNAPSHOT,other-dep:1.0.1
;; 6. run run-config from cursive
#!/bin/bash
shopt -s nullglob
for g in /sys/kernel/iommu_groups/*; do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;