aboutsummaryrefslogtreecommitdiff
path: root/v2/src/content/en/slide/local-first.ps
diff options
context:
space:
mode:
Diffstat (limited to 'v2/src/content/en/slide/local-first.ps')
-rw-r--r--v2/src/content/en/slide/local-first.ps522
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