Skip to content

Instantly share code, notes, and snippets.

manuel / tx.adoc
Last active February 19, 2024 17:47
Transactional RPC across heterogenous data stores and facades

An idea for how to do transactions across heterogenous data stores (e.g. key-value (KV) stores and Git repositories) in an RPC system. Probably not novel.


There are primitive data stores, like KV stores and Git repositories.

There are facades, processes, that enforce some invariant on top of another, underlying data store. Example: a facade that only allows storing numbers as values in a KV store.

Let’s use the term storage process to refer to both primitive stores and facades.

### Keybase proof
I hereby claim:
* I am manuel on github.
* I am msimoni ( on keybase.
* I have a public key ASC3_N8cmaCDXyRmFG6rWilVZcJlAYJC1-aVvAjfMsvL4Qo
To claim this, I am signing this object:
;; Define a simple structure
(defstruct point
(defun make-point (x y)
(make-instance 'point :x x :y y))
;; Normal Lisp style function
(defun add-points (p1 p2)
fun send(rcv, msg, args) {
  cls = rcv.isa
  if (cls.isa == STD_CLS)
    method = builtin_lookup(rcv, msg)
    method = send(cls, "lookup", msg)
  method(rcv, args)
;; Causes stack overflow:
(def p 'p)
(def (spawn-thread)
(push-prompt p
(def (sleep)
manuel / webrtc logs
Last active August 29, 2015 13:57
webrtc logs
PC 1: Chromium Version 31.0.1650.63 Built on Debian 7.2, running on Debian 7.3 (238485)
PC 2: Chrome Version 33.0.1750.149, Mac OS X
PC 1 (manuel28):
Creating local peer: manuel28 bbrtc.js:51
Creating RTCPeerConnection. bbrtc.js:33
Listening for ICE candidates. bbrtc.js:33
Listening for `negotiationneeded` bbrtc.js:33
Listening for data channel bbrtc.js:33
manuel / stuns
Created March 16, 2014 17:48 — forked from zziuni/stuns
# source :
# A list of available STUN server.
<title>Wat Sleeping Demo</title>
<script type="text/javascript" src="../../wat.js"></script>
<h1><a href="">Wat</a></h1>
<script type="text/javascript">
var code =
(define-class foo (make-foo))
(define-class bar (make-bar))
(define-generic (m obj))
(define-method (m (f foo)) 1)
(define-method (m (b bar)) 2)
(print (m (make-foo))) ; => 1
(print (m (make-bar))) ; => 2
(define-method (m (f foo)) 3)
(print (m (make-foo))) ; => 3
manuel / representing-monads.scm
Created August 28, 2012 00:08
Error monad from Filinski's "Representing Monads"
;; Error monad from Filinski's "Representing Monads"
(define *default-prompt* (make-prompt))
(define (reflect m) (shift *default-prompt* k (ext k m)))
(define (reify t) (push-prompt *default-prompt* (unit (t))))
(define-record-type Success
(make-success a)