Skip to content

Instantly share code, notes, and snippets.

@manuel
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.

Overview

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 (https://keybase.io/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
x
y)
(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)
  else
    method = send(cls, "lookup", msg)
  method(rcv, args)
}
;; Causes stack overflow:
(def p 'p)
(def (spawn-thread)
(push-prompt p
(loop
(sleep))))
(def (sleep)
@manuel
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
manuel / stuns
Created March 16, 2014 17:48 — forked from zziuni/stuns
# source : http://code.google.com/p/natvpn/source/browse/trunk/stun_server_list
# A list of available STUN server.
stun.l.google.com:19302
stun1.l.google.com:19302
stun2.l.google.com:19302
stun3.l.google.com:19302
stun4.l.google.com:19302
stun01.sipphone.com
stun.ekiga.net
<html>
<head>
<title>Wat Sleeping Demo</title>
<script type="text/javascript" src="../../wat.js"></script>
</head>
<body>
<h1><a href="https://github.com/manuel/wat-js">Wat</a></h1>
<script type="text/javascript">
var code =
["begin",
(*
(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
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)
success?