%! % 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 /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 false { top_center h1 (Intro SSB) cscl showpage } if % 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 false { % Peers and pubs top_center h1 (Network structure) cscl % showpage } if 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 false { top_center h1 (Other implementations) cscl % go, rust, python, c showpage } if 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-02-26) show cr %ref lf2 (%oFONYF7ezBRiKUUkYvtZklGBlT5Se1WxQkQKLLpksok=.sha256) 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