%! % vi: et ts=2 sts=2 sw=2 << /PageSize [1280 720] >> setpagedevice /lineheight 20 def /lineheight_ratio 1.2 def /tab 72 def /selectfont2 { dup lineheight_ratio mul /lineheight exch def selectfont } bind def /h0 { /LiberationSerif-Bold 60 selectfont2 } bind def /h1 { /LiberationSerif-Bold 45 selectfont2 } bind def /h2 { /LiberationSerif-Bold 34 selectfont2 } bind def /h3 { /LiberationSerif-Bold 28 selectfont2 } bind def /body0 { /LiberationSerif 27 selectfont2 } bind def /bold0 { /LiberationSerif-Bold 27 selectfont2 } bind def /body { /LiberationSerif 32 selectfont2 } bind def /body1 { /LiberationSerif 48 selectfont2 } bind def /bold { /LiberationSerif-Bold 32 selectfont2 } bind def /italic { /LiberationSerif-Italic 27 selectfont2 } bind def /code { /LiberationMono 27 selectfont2 } bind def /ref { /LiberationMono 13 selectfont2 } bind def /centershow { dup stringwidth pop /w exch def w neg 2 div 0 rmoveto show } bind def /hmoveto { /h exch def h currentpoint exch pop moveto } bind def /vmoveto { /v exch def currentpoint pop v moveto } bind def /cr { tab hmoveto } bind def /lf { 0 lineheight neg rmoveto } bind def /lf0 { 0 lineheight 0.5 mul neg rmoveto } bind def /lf2 { 0 lineheight 1.5 mul neg rmoveto } bind def /scl { show cr lf } bind def /cscl { centershow cr lf } bind def /indent { /tab exch def tab hmoveto } bind def /indent_here { currentpoint pop indent } bind def /imoveto { moveto indent_here } bind def /top_center { 640 660 imoveto } bind def % width height scale file DrawImage /DrawImage { /the_file exch def /z exch def /h exch def /w exch def gsave 0 lineheight 0.75 mul rmoveto currentpoint translate z z scale w h scale 0 -1 translate w h 8 [w 0 0 h neg 0 h] the_file false 3 colorimage grestore 0 h z mul lineheight 0.75 mul sub neg rmoveto } bind def /DrawRgb { (r) file DrawImage } bind def /DrawJpeg { (r) file /DCTDecode filter DrawImage } bind def /DrawEps { /filename exch def /z exch def save currentpoint translate z z scale /showpage { } def filename run restore } bind def /split { /str exch def /num_words 0 def { str search { % post match pre 2 -1 roll % post pre match 3 -1 roll % pre match post /num_words num_words 2 add def } { /num_words num_words 1 add def exit } ifelse } loop num_words packedarray } bind def /newline ( ) def /show_lines { /str exch def str newline split { dup newline ne { scl } if } forall } bind def 640 558 imoveto h0 (Secure Scuttlebutt) cscl h1 (Peer-to-peer Collaboration and Community Infrastructure) cscl lf2 h2 gsave -440 0 rmoveto 184 184 0.80 (lp2020.rgb) DrawRgb grestore gsave 300 -110 rmoveto 0.85 (hermies-rainbow.eps) DrawEps grestore (March 15, 2020) cscl (LibrePlanet) cscl (Boston, MA) cscl lf2 h2 (Charles E. Lehner) cscl code %(cel@celehner.com) cscl (@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519) cscl showpage top_center h1 (Me) cscl body 200 500 imoveto 256 256 1 (cel.jpg) DrawJpeg 638 480 imoveto (@cel) h2 scl body lf (Developer) scl (git-ssb, patchfoo, sbotc) scl lf (Using SSB since 2014) scl lf showpage top_center h1 (SSB) cscl body1 420 500 imoveto (· p2p, f2f, e2e) scl (· gossip protocol) scl (· social network) scl (· application platform) scl 50 120 imoveto 0.6 (gossip.eps) DrawEps -20 30 rmoveto ref lf2 (%xRPUKpUVLyyMJw/obpJXGyl8D3N3VJKE4d6BObXFGDk=.sha256) show 860 120 imoveto 0.6 (ebt.eps) DrawEps -20 30 rmoveto ref lf2 (%ipyEyC3oODPTf2X/GyCzU7vgPB/Ut5uay4MtT5w3X9U=.sha256) show showpage % Technical Intro top_center h1 (Cypherlinks) cscl body 72 550 imoveto h1 (Message) scl code (%Oys+Dg6P0h8LvykiMTQW5L43iwuJpuvOIiVW5RZs9Cw=.sha256) scl lf lf h1 (Blob) scl code (&C93joUl4xSFH3cVJM6ZZQdAr+WXIiDLIyUQDZ//y4qw=.sha256) scl lf lf h1 (Feed) scl body code (@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519) scl lf lf showpage top_center h1 (Message) cscl 36 indent gsave 2.0 dup scale ref ( { "key": "%8XKAub/+keTbOXU+eS1/r2+wDMfk0369fLJ57Re9Ku0=.sha256", "value": { "previous": "%0tpLhWn8nC1iA+thcZnVYt5Nm6OtUvkFXMuHdB9roS4=.sha256", "author": "@C3iYh/12sO1uvKq1KcZXLFxSySzxOkHxXN8rtNB5MGA=.ed25519", "sequence": 1359, "timestamp": 1506213306259, "hash": "sha256", "content": { "type": "post", "text": "hello world" }, "signature": "Nz4WOuOMpXU2xXUgW+cGTLCiU1BCYiHQFWvyUnppq+YmwV1TZM 5+FM12SAclA2BFgRdHyG6Y9lDCXHJdMFiMAw==.sig.ed25519" } }) show_lines grestore showpage % Peers and pubs % Network structure top_center h1 (Pubs) cscl 100 530 imoveto 960 640 0.60 (robot-bartender.jpg) DrawJpeg ref lf2 (%7Puw6nBVX0uaL/Q7C6jv4sJiv2xcVv465JoyQseLPcs=.sha256) show 760 520 imoveto 512 512 0.60 (pub-cel.jpg) DrawJpeg -20 0 rmoveto ref lf2 (%AsywVupvKB2HcnGX7OMsuo7G32uq+sEM0+qGzJ3YZ9w=.sha256) show showpage top_center h1 (Herm[i]es) cscl 480 300 imoveto 0.3 (hermies.eps) DrawEps 0 30 rmoveto ref lf2 (%6Ykl7b5uYr429NTJEvtPYQijCvyA5nK/EZh55mj5574=.sha256) show 239 210 imoveto 250 200 0.9 (hermies-gift.rgb) DrawRgb -30 0 rmoveto ref lf2 (%muLMFIRjAuMiOs7gKGQrisWF9QEX7PjHJR7HrwmNbac=.sha256) show 739 230 imoveto 900 663 0.30 (hermies-drawing.jpg) DrawJpeg ref lf2 (%PeCILG55OGNA/6V6dnWoIX6v8KdRHVqyPBgYT9neU6g=.sha256) show 70 500 imoveto 389 400 0.60 (bwcrab.rgb) DrawRgb ref lf2 (%lmP6wJqkUFbeke8b0FJ8DCcFln7rWJaaoms/gN3FzAA=.sha256) show showpage top_center h1 (Patchwork) cscl 115 610 imoveto h2 (Public Feed) scl 900 962 0.58 (patchwork-feed.jpg) DrawJpeg ref lf2 (%n/hAHVDJevZ92Nteu0CKlx9YKDDxqejPsPB/jw49llc=.sha256) show 720 610 imoveto h2 (Profile) scl 900 1005 0.555 (patchwork-joey-profile.jpg) DrawJpeg ref lf2 (%xZ8vcTR67JCFtYOYsnSgsWIKfAnJarg8aMMY5ELjTrA=.sha256) show showpage top_center h1 (Patchwork) cscl 115 610 imoveto h2 (Tags) scl 937 1080 0.5 (patchwork-tags.jpg) DrawJpeg ref lf2 (%+1kBGWr4TMZkKvXCn7VboGkv6G23c32Kun2xl9m3Qjk=.sha256) show cr lf2 (%0rpoHSyVRIkY9lSXkjF+B68x+d8RNyVJy/ErvAF82T8=.sha256) show 720 610 imoveto h2 (Thread) scl 803 1035 0.52 (patchwork-thread.jpg) DrawJpeg ref lf2 (%wcR3H38WfELYOFRno/PpKBqgo90Gk273ya+mRM4kDxQ=.sha256) show cr lf2 (%lCX+OgVrPgs44b6meFz3kE54r4CW19y0oiU6rrV6GQU=.sha256) show showpage top_center h1 (Patchwork - Gatherings) cscl 295 600 imoveto 1028 876 0.68 (patchwork-gathering.jpg) DrawJpeg ref lf2 (%EQXXQhhDdVNDvj5R9klck6/V8kYz65NiaQld4RBd/uY=.sha256) show showpage false { top_center h1 (Moderation) cscl % blocking, following, private blocking showpage } if top_center h1 (Patchbay) cscl 330 590 imoveto h2 (Thread) scl 1028 795 0.6 (patchbay-thread.jpg) DrawJpeg ref lf2 (%RP5p5qBqjsW/5Rl68xGIcn58X3MiyinsqsbLTHWbnM4=.sha256) show showpage top_center h1 (Patchbay apps) cscl % chess, books, image search, query, scry 20 610 imoveto h2 (Polls) scl 1028 795 0.69 (patchbay-scry.jpg) DrawJpeg ref lf2 (%FMqOZqJIdj3VD59nMw+acmZFvQ/OSXaWr+cfdIH6F9s=.sha256) show 770 610 imoveto h2 (Books) scl gsave 0.57 dup scale currentpoint translate 0 20 imoveto 820 1009 1 (books.jpg) DrawJpeg ref 348 711 rmoveto indent_here (%Aze1pn6qC6VMMTSdSXwVr94qjRhtf3usLlmN7u1Y30U=.sha256) scl 0 -285 rmoveto (%ZdU8zCk6sQm4Z8oMg3tmcNZxzV/+N+RbE/+zRZGn4Nw=.sha256) scl 0 -268 rmoveto (%Ct+wss64+fcTRMSRsPZU+/efgWsvmQ+QqXVaWKHtkaU=.sha256) scl 0 -270 rmoveto (%H50O+eJxQLmyDEdBJTAx08hRnyYIZBpxGcXeGNRQh4k=.sha256) scl grestore showpage top_center h1 (Patchbay apps 2) cscl 130 625 imoveto h2 (Chess) scl 1280 720 0.8 (patchbay-chess.jpg) DrawJpeg ref lf2 (%jyn3lc2F6ICLxFbYbvrfsdKp1fDQWyiZDdiz5gYdtI8=.sha256) show showpage top_center h1 (Patchfox) cscl 30 590 imoveto 1705 1080 0.5 (patchfox.jpg) DrawJpeg ref lf2 (%iAuYhV5rAs+t/+gyWVilPOTSnmnEl9SJdj6bZlSnRRA=.sha256) show 920 590 imoveto 327 403 0.9 (patchfox-menu.jpg) DrawJpeg body gsave 0.7 0.7 scale ref lf2 (%vNnZtiCafFum3VGH2cOhbvaeMCXJnVl9HrQhH7WkPto=.sha256) show grestore showpage top_center h1 (patchfoo) cscl 215 590 imoveto 1024 600 0.80 (patchfoo.rgb) DrawRgb ref lf2 (%O3uj3mNvhbwTNb7Mo/30FNo46pYKakNvc3G0Y0DYif8=.sha256) show showpage top_center h1 (Oasis) cscl 220 590 imoveto 977 641 0.9 (oasis.jpg) DrawJpeg ref lf2 (%u+Mnq1AFB2w7BV3F27jfi2EcZiyPc7YCnK1mEf+9Z9U=.sha256) show showpage top_center h1 (Manyverse) cscl currentgray 0.3 setgray 73 48 334 587 rectfill 873 48 334 587 rectfill setgray body 78 600 imoveto 720 1280 0.45 (manyverse-connections.jpg) DrawJpeg ref lf2 gsave 0.9 dup scale -20 0 rmoveto (%P7B6o2keZ3UNVWqohSzTzGWzkt7Xum0cehoe6GpkZXQ=.sha256) show grestore body 488 610 imoveto 500 1000 0.6 (manyverse-ios.jpg) DrawJpeg gsave 0.9 dup scale -35 0 rmoveto ref lf2 (%yNkrJtnHyR4LcgzYvJ3nYdvQ1U3i2SlVxzbs7vOH5WU=.sha256) show grestore body 878 600 imoveto 720 1280 0.45 (manyverse-thread.jpg) DrawJpeg showpage top_center h1 (Planetary) cscl currentgray 0.3 setgray 48 78 296 524 rectfill setgray 50 560 imoveto 750 1334 0.39 (planetary-menu.jpg) DrawJpeg ref lf2 (%I/I5GcW48qtCYCdF8tViB2kT3DXzvGBISh8mAdaDRFY=.sha256) show 465 630 imoveto 724 1280 0.48 (planetary-post.jpg) DrawJpeg 880 630 imoveto 724 1280 0.48 (planetary-channels.jpg) DrawJpeg 640 25 imoveto ref (%SD3WszbEsswbRHhj6cCffcKD2ZhwF6iJ/OCKwQmLGOY=.sha256) show showpage top_center h1 (git-ssb) cscl 200 590 imoveto 1280 800 0.70 (git-ssb-web.jpg) DrawJpeg ref lf2 (%dY2VrwvI5vO9Dqf1UR3Ev4zZdXJU0/XwRFwt92Y29v4=.sha256) show showpage false { top_center h1 (More apps) cscl % go, ssb-npm, ssb-viewer, scuttleshell, ticktack, tale:net, scat, ngx-ssb-client, oasis, yap, patchless, mvd showpage } if top_center h1 (Other implementations) cscl body gsave 1.5 dup scale 200 300 imoveto (Full: Node.js, Go, Rust) scl lf (Partial: C, Python, Java, Swift, Erlang) scl lf (Crypto: C (libsodium)) scl grestore showpage false { top_center h1 (Funding) cscl % dfinity grant / ssbc grants showpage } if top_center h1 (Funding) cscl % Handshake grant / council / budget 130 0 imoveto currentgray 0.8 setgray currentpoint 20 add 488 610 rectstroke setgray 0.80 (hc-budget.eps) DrawEps body lf %(Handshake Council Budget, 2019-04-03) show cr %ref lf2 (%zmv8Fvm3a7qnAVBs2O7se5JlJXqsrqjBZwB88/Bv8DQ=.sha256) show % Planetary showpage %top_center h1 (Open Collectives) cscl % %showpage top_center h1 (Scuttlecamp) cscl 230 590 imoveto 1080 722 0.75 (scuttlecamp1.jpg) DrawJpeg ref lf2 (%hLhNMksptjCxNi+B77DHrYEu26jDTrqgGsfb1+NvuWA=.sha256) show showpage top_center h1 (Diversity and Inclusion) cscl 55 16 imoveto gsave 0.78 dup scale 1 (inspo.eps) DrawEps currentgray 0.8 setgray 0 792 rlineto 612 0 rlineto 0 -792 rlineto currentpoint stroke moveto -612 0 rlineto [4] 0 setdash stroke grestore 580 110 imoveto gsave 0.78 dup scale 1 (inclusion.eps) DrawEps currentgray 0.8 setgray currentpoint 15 add 840 575 rectstroke grestore showpage top_center h1 (Principles stack) cscl 200 550 imoveto 1309 637 0.70 (principles.rgb) DrawRgb body ref lf2 (%NwS0OAEqJDfbioRdwmY/IQwCdMBm6RmzhZJR682DATA=.sha256) show showpage false { top_center h1 (Culture) cscl % technical influences: immutability, sharing showpage } if 10 660 imoveto 1600 656 0.5 (accessories.jpg) DrawJpeg 0 10 rmoveto ref lf2 (%0h9biRh7teJlwtWD6gFkzSBv8fZlXj9Qr3HrbHPkgwU=.sha256) show top_center 0 20 rmoveto h1 (Solarpunk) cscl 780 600 imoveto 1200 684 0.40 (urban-garden.jpg) DrawJpeg ref lf2 (%uKy6Lo0gTFRIt/pMXowWHU7ZbioE04kQgJ/K3I4WTPc=.sha256) show 20 300 imoveto 800 600 0.45 (mushroom-foraging.jpg) DrawJpeg ref lf2 (%mUnUnlqp8gftsmw8oTuc7CezL/BwkoxPn6ucx3y5kSI=.sha256) show 440 280 imoveto 1200 742 0.30 (solarpunk-flag.jpg) DrawJpeg ref lf2 (%oKr5NKriL3WEoEGO+fnXnkJoFwg4JPV6Hmvun86Swx8=.sha256) show 860 300 imoveto 600 450 0.60 (solar-shack.jpg) DrawJpeg ref lf2 (%SaFh1Tea8Mqh02NRFQxoKKjWhnFAzb8JaJm0ss52Nj4=.sha256) show showpage top_center h1 (Boats) cscl body % Cleo % Alchemist 60 600 imoveto 900 501 0.60 (boat.jpg) DrawJpeg ref lf2 (%on6hMTGlQZ5zW+UqawDcdNmYHdReFS8GuEXvmozL64M=.sha256) show 660 600 imoveto 900 671 0.50 (boat-alchemist.jpg) DrawJpeg body lf (Alchemist) show cr ref lf2 (%FdmACu6aDF4SbbVuh8B1xDSusVoUCrri1YU+KkttrAk=.sha256) show showpage top_center h1 (Crab meet) cscl 780 640 imoveto 810 1080 0.58 (basel.jpg) DrawJpeg ref lf2 (%LhJZpvqMaaORd7E1S3azBPtJBSJRSFdoeXQfVSixJmA=.sha256) show 60 350 imoveto 900 675 0.45 (boat-crabmeet.jpg) DrawJpeg ref lf2 (%CsF9pDgrxzeU5oDZRQ+GmtKBVk85wDiLPcq0keLA42I=.sha256) show 60 670 imoveto 900 540 0.45 (dweb1.jpg) DrawJpeg ref lf2 (%sV6uNHQeYiMh+GHjMCQCCFP9pigTRTq6WXpFsNKsEQw=.sha256) show 530 600 imoveto 600 800 0.30 (crabmeet-naarm.jpg) DrawJpeg gsave 0.5 dup scale ref lf2 (%TaKmeNL5ympWXpsyudJ1QqrXLg3ycD2GN7LIN/9QR7E=.sha256) show grestore 505 300 imoveto 600 800 0.40 (mozfest.jpg) DrawJpeg 0 60 rmoveto gsave 0.6 dup scale ref lf2 (%6zsNFEriZ3ckKi7WpaoM71esgRj+mZmUVbYH3OVVbpg=.sha256) show grestore showpage top_center h1 (#showmeyourcoffee) cscl 72 580 imoveto 1280 960 0.42 (coffee.jpg) DrawJpeg ref lf2 (%7411jvQ9GqJyL2So3C5M10d61WGSSDsdyoex+0aUQ+8=.sha256) show 672 580 imoveto 675 900 0.45 (coffee-library.jpg) DrawJpeg ref lf2 (%3dkhZpXrnlKfE/sJb/A+NYBiKhUZCGnvcgbYpVWzE6k=.sha256) show showpage 400 660 imoveto h1 (Network graphs) cscl 100 600 imoveto 900 900 0.67 (gephi-modularity.jpg) DrawJpeg ref lf2 (%utUlBefFYqHWcFQaz4r5bZUil9YtYyTik1j6d7ymVyE=.sha256) show 760 690 imoveto 750 727 0.46 (gephi-sun.jpg) DrawJpeg ref lf2 (%Qy84JD3wGrXSC3/nfar9DAzWPP4aku6CIcOSr6/CC/E=.sha256) show 760 310 imoveto 750 563 0.50 (gephi-mix50.jpg) DrawJpeg ref lf2 (%ZCODq83xRs+sbU8YXxZ1MPlFP1u9i2wyIYAu6GCTqNo=.sha256) show showpage top_center h1 (Network activity graph) cscl 60 510 imoveto 1280 370 0.90 (daily-activity.jpg) DrawJpeg body lf (2015-08-05 - 2020-03-05) show cr ref lf2 (https://ssb.celehner.com/activity/) show showpage 90 16 imoveto 0.86 (ccr19.eps) DrawEps 62 24 rmoveto ref lf2 (%aclRXl3q1cnoOyfVuDRaTAKPESv4J6QLDE4B5M2vDaM=.sha256) show 670 16 imoveto 0.86 (icn19.eps) DrawEps 62 24 rmoveto ref lf2 (%ky3+/h0MFsevtRpCBYHAq7l7N7JF2FgI21Sw0BSt9Gc=.sha256) show top_center h1 (Published research) cscl showpage false { top_center h1 (Protocol) cscl % https://ssbc.github.io/scuttlebutt-protocol-guide/ showpage } if false { top_center h1 (Future) cscl % private groups showpage } if false { top_center h1 (Links and further resources) cscl % http://scuttlebutt.nz % http://scuttlebot.io % https://ssbc.github.io/scuttlebot/ % https://modules.scuttlebutt.nz/ showpage } if top_center 0 -300 rmoveto h1 (https://scuttlebutt.nz/) cscl showpage false { top_center h1 (Bonus material) cscl showpage } if