Skip to content

Instantly share code, notes, and snippets.

@lkuper
lkuper / icfp-speakers.md
Last active August 6, 2021 18:23
Keynote speakers at every ICFP

ICFP 1996

"Computing is Interaction", Robin Milner (Cambridge)

"The case for wireless overlay networks", Randy Katz (UC Berkeley)

ICFP 1997

Joe Armstrong (Ericsson)

Prompted by a discussion at the Recurse Center, here are all the courses I took in undergrad and grad school!

Undergrad transcript

Page: 1 of 1						GRINNELL COLLEGE
December 01 2006

Lindsey A Kuper				0180202		XXXX-XX-XXXX
lkuper.github.com [source] $ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :set -XScopedTypeVariables
Prelude> :set -XRankNTypes
Prelude> let x :: (forall a . (a -> a) -> a) = undefined
Prelude> :t x
x :: (a -> a) -> a
function hello(name) {
console.log("Hello from privileged code, " + name + "!");
}
Components.utils.exportFunction(hello, unsafeWindow, {defineAs: "hello"});
// Extension-side code
let AnObj = {
field: "hello",
thisIsATest: function() {
let str = this.field + " world!";
return str;
},
};
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
import Control.Concurrent (threadDelay)
import Control.LVish
import Control.LVish.DeepFrz
import Control.LVish.Internal (liftIO)
import Data.LVar.IVar
import Data.LVar.Counter
import Data.Word
Components.utils.import('resource://gre/modules/Services.jsm');
function myObserver()
{
this.register();
}
myObserver.prototype = {
observe: function(subject, topic, data) {
console.log("observed: " + subject);
repos $ mkdir tmp
repos $ cd tmp/
tmp $ cabal sandbox init
Writing a default package environment file to
/Users/lkuper/repos/tmp/cabal.sandbox.config
Creating a new sandbox at /Users/lkuper/repos/tmp/.cabal-sandbox
tmp $ cabal install ~/repos/lvars/haskell/lvish/
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: lvish-2.0 (user goal)
Components.utils.import('resource://gre/modules/Services.jsm');
// Code that listens for a custom DOM event. This is how we
// implement communication between unprivileged (web page) and
// privileged (extension) JS code.
function load(win) {
let document = win.document;
document.addEventListener("TestExtensionCustomEvent", function(e) {
win.alert("Hello from privileged code! Event received!");
}, false, true);
@lkuper
lkuper / peter-alvaro-halpern-pwl-notes.md
Last active August 29, 2015 14:05
Notes from Peter Alvaro's talk at PWL, August 21, 2014

"Consensus is impossible" is a gloss for "there's always an execution that doesn't terminate".

Once you've internalized that you can't distinguish slow nodes from dead nodes, how do you deal with that?

"When you're engaged in a battle of wits with a Sicilian and death is on the line, you certainly need to think about epistemic logic."

A correct distributed program achieves (nontrivial) distributed property X. So we need to ask:

  1. is X even attainable?
  2. what's the cheapest* protocol that gets me X? (* according to some cost metric)