#+TITLE: The Spritely Institute's Rapid Tech Tour
#+AUTHOR: Morgan Lemmer-Webber & Christine Lemmer-Webber
#+DATE: 2022-01-18 Tue
#+REVEAL_INIT_OPTIONS: width:1200, height:800, controlsLayout: 'edges'
# #+OPTIONS: reveal_center:t reveal_progress:t reveal_history:nil reveal_control:t
# #+OPTIONS: reveal_mathjax:t reveal_rolling_links:t reveal_keyboard:t reveal_overview:t num:nil
# #+OPTIONS: reveal_width:1200 reveal_height:800
#+OPTIONS: toc:nil num:nil reveal_title_slide:nil
#+REVEAL_MARGIN: 0.075
#+REVEAL_MIN_SCALE: 0.5
#+REVEAL_MAX_SCALE: 2.5
#+REVEAL_TRANS: cube
#+REVEAL_THEME: night
#+REVEAL_HLEVEL: 2
#+REVEAL_HEAD_PREAMBLE:
#+REVEAL_ROOT: ./static/reveal.js
* Rapid-fire tech tour!
#+REVEAL_HTML:
https://spritely.institute
** Christine's background
** Randy's background
* Spritely's higher-level goals
#+REVEAL_HTML:
#+BEGIN_NOTES
The Spritely Institute's goals are to enable the creation of
peer-to-peer, gatekeeper-free community-run networks and social spaces
for everyone.
Building such a dream on top of existing systems is too difficult. We
need tech where decentralized, secure tech is the default!
#+END_NOTES
* Goblins: distributed, cooperative, transactional programming
#+REVEAL_HTML:
#+BEGIN_NOTES
So for that, meet Spritely Goblins: a distributed object programming
environment with intuitive security, automatic local transactions, and
an easy to use and efficient asynchronous
programming. https://spritely.institute/goblins
#+END_NOTES
* Distributed security you can understand
- If you don't have it, you can't use it
- It's just argument passing!
*
#+REVEAL_HTML:
*
#+REVEAL_HTML:
#+BEGIN_NOTES
This is possible because Goblins has something which is called a-erm,
excuse the programming lingo here--a "transactional heap"
But as you can see in this illustration (modified from Mark Miller's
dissertation, thanks Mark) it looks like there's two ways of
communicating...
#+END_NOTES
* Transactionality
#+BEGIN_SRC scheme
(define (^mint _bcom)
(define-values (decr-seal decr-unseal _decr-sealed?)
(make-sealer-triplet 'mint))
(define (^purse _bcom initial-balance)
(define-cell balance
initial-balance)
(define (<=-balance? amount)
(<= amount (#,($) balance)))
(define/contract (decr amount)
(-> (and/c integer? (>=/c 0) <=-balance?)
any/c)
(#,($) balance (- (#,($) balance) amount)))
(define/contract (deposit-method amount src)
(-> (and/c integer? (>=/c 0)) any/c any/c)
((decr-unseal (#,($) src 'get-decr)) amount)
(#,($) balance (+ (#,($) balance) amount)))
(methods
[(get-balance) (#,($) balance)]
[(sprout) (spawn ^purse 0)]
[deposit deposit-method]
[(get-decr) (decr-seal decr)]))
(define/contract (fiat-make-purse initial-balance)
(-> (and/c integer? (>=/c 0)) any/c)
(spawn ^purse initial-balance))
(methods [new-purse fiat-make-purse]))
#+END_SRC
*
#+REVEAL_HTML:
#+BEGIN_NOTES
But... is it fun to program in? Can you use it to write real
programs?
You sure can! For example, here's a space shooter that runs in a
developer's terminal called Terminal Phase, written on top of
Goblins...
#+END_NOTES
*
#+REVEAL_HTML:
#+BEGIN_NOTES
Okay, video games are fun and cute, but here's something even cooler.
Remember how we said Goblins supports easy local transactions? Well,
what happens if you have unlimited ability to roll back transaction
history?
You get time travel! That's right... time travel!
#+END_NOTES
* goblin-chat demo
#+REVEAL_HTML:
#+BEGIN_NOTES
Seeing is believing. Here are two clients talking to each other
securely over the network. Fully peer to peer, end-to-end encrypted,
authenticated messages.
And both the user and chatroom code were ONLY 150 LINES OF CODE and
didn't even mention the network *once*!
#+END_NOTES
* Thirsty for more?
#+REVEAL_HTML:
*
#+REVEAL_HTML:
#+REVEAL_HTML:
#+REVEAL_HTML:
* Let's make a better future together!
#+REVEAL_HTML: