diff options
Diffstat (limited to 'v2/src/content/en/slide/local-first.ps')
-rw-r--r-- | v2/src/content/en/slide/local-first.ps | 522 |
1 files changed, 522 insertions, 0 deletions
diff --git a/v2/src/content/en/slide/local-first.ps b/v2/src/content/en/slide/local-first.ps new file mode 100644 index 0000000..44c5858 --- /dev/null +++ b/v2/src/content/en/slide/local-first.ps @@ -0,0 +1,522 @@ +%!PS-Adobe-3.0 +%%DocumentMedia: SLIDE 842 595 0 () () +%%EndComments +%%BeginDefaults +%%PageMedia: SLIDE +%%EndDefaults +<< /PageSize [842 595] /ImagingBBox null >> setpagedevice + +/reencode { + exch + findfont + dup length dict + begin + { + 1 index /FID ne + { def } + { pop pop } + ifelse + } forall + /Encoding ISOLatin1Encoding def + currentdict + end + definefont pop +} def +/Courier /Courier reencode +/Helvetica /Helvetica reencode +/Times /Times reencode +/Times-Italic /Times-Italic reencode + + +/headerheight 77 def + +/frontfontsz 60 def +/authorfontsz 40 def +/titlefontsz 40 def +/mainfontsz 30 def +/codefontsz 18 def +/tinyfontsz 18 def + +/titlefont /Helvetica findfont titlefontsz scalefont def +/mainfont /Courier findfont mainfontsz scalefont def +/codefont /Courier findfont codefontsz scalefont def +/tinyfont /Times findfont tinyfontsz scalefont def +/frontfont /Helvetica findfont frontfontsz scalefont def +/authorfont /Times-Italic findfont authorfontsz scalefont def +/authorfonttwo /Times findfont authorfontsz scalefont def + + +/pagewidth 842 def +/pageheight 595 def +/leftmargin 30 def +/topmargin 595 def + +/pad 10 def + +/titlefonth titlefontsz pad add def +/mainfonth mainfontsz pad add def +/codefonth codefontsz pad add def +/tinyfonth tinyfontsz pad add def +/frontfonth frontfontsz pad add def +/authorfonth authorfontsz pad add def + +/headermargin + pageheight headerheight titlefonth sub 2 div titlefontsz add sub +def +/rightmargin pagewidth leftmargin sub def +/tbtop topmargin def +/ypos topmargin def + +/xcur { currentpoint pop } def +/ycur { currentpoint exch pop } def + +/wordbreak ( ) def +/linewrap { + /proc exch def + /linelength exch def + /textstring exch def + /breakwidth wordbreak stringwidth pop def + /curwidth 0 def + /lastwordbreak 0 def + /startchar 0 def + /restoftext textstring def + { + restoftext wordbreak search + { + /nextword exch def pop + /restoftext exch def + /wordwidth nextword stringwidth pop def + curwidth wordwidth add linelength gt + { + textstring startchar + lastwordbreak startchar sub + getinterval proc + /startchar lastwordbreak def + /curwidth wordwidth breakwidth add def + } + { + /curwidth curwidth wordwidth add + breakwidth add def + } ifelse + /lastwordbreak lastwordbreak + nextword length add 1 add def + } + { + pop exit + } ifelse + } loop + /lastchar textstring length def + textstring startchar lastchar startchar sub + getinterval proc +} def + +/line { + 0 0 0 setrgbcolor + 0.5 setlinewidth + leftmargin ypos moveto + rightmargin ypos lineto + stroke +} def + +/center { + dup + /str exch def + /sw str stringwidth pop def + /xpos pagewidth sw sub 2 div xcur sub def + xpos 0 rmoveto +} def + +/objcenter { + pagewidth exch sub 2 div 0 translate +} def + +/s { + /tbtop topmargin def + /ypos topmargin def + 1 1 1 setrgbcolor + 0 setlinewidth + newpath + 0 pageheight moveto + pagewidth pageheight lineto + pagewidth 0 lineto + 0 0 lineto + closepath + fill + stroke +} def + +/l { + /h exch def + /ypos ypos h sub def + leftmargin ypos moveto +} def + +/title { + frontfonth l + frontfont setfont + 0.5 0.5 0.9 setrgbcolor + { pagewidth leftmargin 2 mul sub } + { frontfonth l center show } + linewrap + frontfonth 2 div l + frontfonth l +} def + +/author { + authorfont setfont + 0 0 0 setrgbcolor + { pagewidth leftmargin 2 mul sub } + { authorfonth l center show } + linewrap +} def + +/authortwo { + authorfonttwo setfont + 0 0 0 setrgbcolor + { pagewidth leftmargin 2 mul sub } + { authorfonth l center show } + linewrap +} def + +/header { + /ypos pageheight headerheight sub def + 0 0 0 setrgbcolor + 0 setlinewidth + newpath + 0 pageheight moveto + pagewidth pageheight lineto + pagewidth ypos lineto + 0 ypos lineto + closepath + fill + stroke + leftmargin headermargin moveto + titlefont setfont + 0.5 0.5 0.9 setrgbcolor + center show + leftmargin ypos moveto +} def + +/n { + mainfont setfont + 0 0 0 setrgbcolor + { pagewidth leftmargin 2 mul sub } + { mainfonth l show } + linewrap +} def + +/cn { + codefont setfont + 0 0 0 setrgbcolor + { pagewidth leftmargin 2 mul sub } + { codefonth l show } + linewrap +} def + +/tn { + tinyfont setfont + 0 0 0 setrgbcolor + { pagewidth leftmargin 2 mul sub } + { tinyfonth l show } + linewrap +} def + +/is { + /level1 save def + /showpage {} def +} def + +/ie { + level1 restore +} def + +/bs { + /tbtop ypos def +} def + +/be { + /tm tbtop pad sub def + /bm ypos pad sub def + newpath + leftmargin 10 sub tm moveto + rightmargin tm lineto + rightmargin bm lineto + leftmargin 10 sub bm lineto + closepath + 0 0 0 setrgbcolor + 0.5 setlinewidth + stroke +} def +( On "local-first") title +(Beyond the CRDT silver bullet) authortwo +showpage +%%Page: 1 1 +s +( Part 1) header +( Exposition) title +showpage +%%Page: 2 2 +s +( Target) header +() n +() n +() n +(- documents) n +(- files) n +(- personal data repositories) n +() n +() n +(Not: banking services, e-commerce, social networking, ride-sharing, etc.) n +showpage +%%Page: 3 3 +s +() n +() n +() n +( 7 ideals for local-first software) title +showpage +%%Page: 4 4 +s +() n +() n +() n +( 1 - no spinners: your work at your fingertips) title +showpage +%%Page: 5 5 +s +() n +() n +() n +( 2 - your work is not trapped on one device) title +showpage +%%Page: 6 6 +s +() n +() n +() n +( 3 - the network is optional) title +showpage +%%Page: 7 7 +s +() n +() n +() n +( 4 - seamless collaboration with your colleagues) title +showpage +%%Page: 8 8 +s +() n +() n +() n +( 5 - the long now) title +showpage +%%Page: 9 9 +s +() n +() n +() n +( 6 - security and privacy by default ) title +showpage +%%Page: 10 10 +s +() n +() n +() n +( 7 - you retain ultimate ownership and control) title +showpage +%%Page: 11 11 +s +( Towards a better future) header +() n +() n +() n +() n +( CRDTs \(Conflict-free Replicated Data Types\) as a Foundational Technology) authortwo +showpage +%%Page: 12 12 +s +( Use case) header +() n +bs +(# in node A and node B) cn +(s = "Hello, World") cn +() cn +(# in node A) cn +(s = "Hello, Alice") cn +() cn +(# in node B) cn +(s = "Hello, Bob") cn +be +(How to reconcile those?) n +(- Hello, ABloibce) n +(- Hello, AliceBob) n +(- Hello, BobAlice) n +(- Hello, Alice) n +(...) n +showpage +%%Page: 13 13 +s +( Existing CRDTs differ) title +(- performance) n +(- storage) n +(- compression) n +(- metadata overhead) n +showpage +%%Page: 14 14 +s +() n +() n +() n +( Hint towards the "automerge" CRDT) title +showpage +%%Page: 15 15 +s +() n +() n +() n +() n +() n +() n +(show comparison table, page 9) author +showpage +%%Page: 16 16 +s +( Part 2) header +( Critique) title +showpage +%%Page: 17 17 +s +( Software license) header +() n +() n +() n +("In our opinion, maintaining control and ownership of data does not mean that the software must necessarily be open source.") author +showpage +%%Page: 18 18 +s +( Example 1 - intentional restriction) header +() n +bs +(#!/bin/sh) cn +(TODAY="$\(date +%s\)") cn +(LICENSE_EXPIRATION="$\(date -d 2020-10-27 +%s\)") cn +(if [ "$TODAY" -ge "$LICENSE_EXPIRATION" ]; then) cn +( echo 'License expired!') cn +( exit 1) cn +(fi) cn +(echo $\(\(2 + 2\)\)) cn +be +() n +bs +(# today) cn +($ ./useful-adder.sh) cn +(4) cn +(# tomorrow) cn +($ ./useful-adder.sh) cn +(License expired!) cn +be +showpage +%%Page: 19 19 +s +( Example 2 - unintentional restriction) header +() n +bs +(# today) cn +($ useful-program) cn +(# ... useful output ...) cn +() cn +(# tomorrow, with more data) cn +($ useful-program) cn +(ERROR: Panic! Stack overflow!) cn +be +showpage +%%Page: 20 20 +s +() n +() n +( local-first *requires* free software ) title +(Otherwise "The Long Now" \(ideal nš5\) is lost) n +showpage +%%Page: 21 21 +s +( Denial of existing solutions) header +() n +() n +("In principle it is possible to collaborate without a repository service, e.g. by sending patch files by email, but the majority of Git users rely on GitHub." ) author +() n +(Solution: either GitHub+CRDTs or git send-email ) n +showpage +%%Page: 22 22 +s +( Plain-text formats) header +() n +("Git is highly optimized for code and similar line-based text file") author +() n +(It even pulls software to the plain text directtion, e.g.:) n +(- delivery-templates) n +(- common-core.protocols.config) n +() n +(Why not exploit that more?) n +showpage +%%Page: 23 23 +s +( Ditching of web applications) header +() n +() n +("The architecture of web apps remains fundamentally server-centric) author +() n +(Disagree. Contrast PouchDB with Android Instant Apps) n +showpage +%%Page: 24 24 +s +( Costs are underrated) header +() n +(- storage) n +(- backups) n +(- maintenance) n +() n +(Example: blog vs vlog) n +showpage +%%Page: 25 25 +s +( Real-time collaboration a bit overrated) header +() n +(It is only possible on the presence of reliable, medium-quality network connection) n +() n +() n +("X also works when inside an elevator, subway or plane!") author +showpage +%%Page: 26 26 +s +( On CRDTs and developer experience) header +() n +("For an app developer, how does the use of a CRDT-based data layer compare to existing storage layers like a SQL database, a filesystem, or CoreData? Is a distributed system harder to write software for?) author +() n +(YES.) authortwo +() n +(See "A Note on Distributed Computing") n +showpage +%%Page: 27 27 +s +( Conclusion) header +() n +(Why this is a "paper I love": it took offline-first and ran with it.) n +() n +(But a pinch of CRDT won't make the world local-first. ) n +() n +(The tricky part is the end of the sentence: "in spite of the Cloud".) n +showpage +%%Page: 28 28 +s +( References) header +() n +(1. "Local-First Software: You Own Your Data, in spite of the Cloud", by M. Kleppmann, A. Wiggins, P. Van Hardenberg and M. F. McGranaghan) n +(2. The Morning Paper article) n +(3. "A Note on Distributed Compiting", by J. Waldo, G. Wyant, A. Wollrath and S. Kendall) n +(4. these slides: euandre.org/slide/) n +(5. prose version of this presentation) n +(6. view source) n + +showpage + +%%EOF |