#+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: