diff options
| author | EuAndreh <eu@euandre.org> | 2026-09-03 09:19:35 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2026-09-03 09:19:35 -0300 |
| commit | 7c016c48b6356147c567a9222de45dd50dd8a405 (patch) | |
| tree | 9ca75538543556d9afd58910906f775be634b337 /src/content/en | |
| parent | src/static.conf ($discussions_url_prefix): Fix typo in address (diff) | |
| download | euandre.org-7c016c48b6356147c567a9222de45dd50dd8a405.tar.gz euandre.org-7c016c48b6356147c567a9222de45dd50dd8a405.tar.xz | |
Diffstat (limited to '')
| -rw-r--r-- | src/content/en/about.adoc | 28 | ||||
| -rw-r--r-- | src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc | 5 | ||||
| -rw-r--r-- | src/content/en/blog/2020/11/14/local-first-review.adoc | 2 | ||||
| -rw-r--r-- | src/content/en/index.adoc | 4 | ||||
| -rw-r--r-- | src/content/en/music.adoc | 33 | ||||
| -rw-r--r-- | src/content/en/pastebin/2021/06/22/curl-wget.adoc | 2 | ||||
| -rw-r--r-- | src/content/en/screencast/2021/02/07/autoqemu.adoc | 1 | ||||
| -rw-r--r-- | src/content/en/slide/2020/10/19/feature-flags.adoc | 234 | ||||
| -rw-r--r-- | src/content/en/slide/2020/10/19/feature-flags.eslaides | 230 | ||||
| -rw-r--r-- | src/content/en/slide/2020/11/14/local-first-hype.adoc | 208 | ||||
| -rw-r--r-- | src/content/en/slide/2020/11/14/local-first-hype.eslaides | 204 | ||||
| -rw-r--r-- | src/content/en/slide/categories.adoc | 2 | ||||
| -rw-r--r-- | src/content/en/slide/index.adoc | 4 |
13 files changed, 520 insertions, 437 deletions
diff --git a/src/content/en/about.adoc b/src/content/en/about.adoc index 14d5e22..5e8b699 100644 --- a/src/content/en/about.adoc +++ b/src/content/en/about.adoc @@ -2,10 +2,36 @@ :mailto: mailto:~euandreh/public-inbox@lists.sr.ht :archive: https://lists.sr.ht/~euandreh/public-inbox +:cargo2nix: ../en/blog/2020/10/05/cargo2nix.html +:swift2nix: ../en/blog/2020/10/05/swift2nix.html +:database: ../en/blog/2020/08/31/database-i-wish-i-had.html +:fallible: ../en/blog/2021/02/17/fallible.html +:flags: ../en/blog/2020/10/19/feature-flags.html +:interviewing: ../en/blog/2020/10/20/wrong-interviewing.html +:stateless: ../en/blog/2019/06/02/nixos-stateless-workstation.html +:bugtracker: ../en/blog/2020/11/07/diy-bugs.html -Hi, I'm EuAndreh. I write software and, occasionally, music. You can find my +Hi, I'm EuAndreh -- André Miranda Moreira. I write software and, occasionally, music. You can find my contact information in the footer of this page, or mail my {mailto}[public inbox] ({archive}[archive]). This is my personal website where I write articles, publish software and more related work. + +I write about robust software: the kind that still works after the network +drops, after the vendor leaves, and after you stop paying attention. + +That shows up in a few places. I care about reproducible systems, so I run a +link:{stateless}[stateless NixOS workstation] and have written bridges like +link:{cargo2nix}[cargo2nix] and link:{swift2nix}[swift2nix] to make Rust and +Swift first-class citizens inside Nix builds. I care about durable data, which +is why I keep returning to local-first software, persistent data structures, +and link:{database}[the database I wish existed]: embedded, immutable, and +syncable. And I care about tools that don't need a company behind them, so I +reach for Git, email and plain text before I reach for a service -- +far enough that link:{bugtracker}[my bug tracker is a directory]. + +I also think about how teams ship -- fault injection +(link:{fallible}[fallible]), link:{flags}[feature flags], and +link:{interviewing}[how we interview engineers] -- because robustness is a +team habit before it is a technology. diff --git a/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc b/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc index 76bd8e6..7c1e837 100644 --- a/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc +++ b/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc @@ -115,7 +115,8 @@ https://lernajs.io/[Lerna]footnote:lerna-package-lock[ was harder than I expected. ]: -```bash +[source,sh] +---- cd /tmp/ git clone https://github.com/lerna/lerna.git cd lerna/ @@ -127,7 +128,7 @@ npm ci merkle-tree node_modules/ # outputs 11e218c4ac32fac8a9607a8da644fe870a25c99821167d21b607af45699afafa npm ci # test if it also works with an existing node_modules/ folder merkle-tree node_modules/ # outputs 11e218c4ac32fac8a9607a8da644fe870a25c99821167d21b607af45699afafa -``` +---- Good job `npm ci` :) diff --git a/src/content/en/blog/2020/11/14/local-first-review.adoc b/src/content/en/blog/2020/11/14/local-first-review.adoc index 2036069..4effc43 100644 --- a/src/content/en/blog/2020/11/14/local-first-review.adoc +++ b/src/content/en/blog/2020/11/14/local-first-review.adoc @@ -1,4 +1,4 @@ -= Local-First Software: article review += Local-First Software: You Own Your Data, in spite of the Cloud - article review :categories: presentation article-review :empty: diff --git a/src/content/en/index.adoc b/src/content/en/index.adoc index 275f7c4..2510fef 100644 --- a/src/content/en/index.adoc +++ b/src/content/en/index.adoc @@ -1 +1,3 @@ -= index += Home + +The newest of each collection is below. diff --git a/src/content/en/music.adoc b/src/content/en/music.adoc new file mode 100644 index 0000000..6828baa --- /dev/null +++ b/src/content/en/music.adoc @@ -0,0 +1,33 @@ += Music +:dengoso: ../music/dengoso +:marcha: ../music/marcha-dos-marinheiros +:choro: ../music/choro-da-saudade + +Scores I have engraved, with a synthesised rendering of each. The +LilyPond sources are in the repository; the PDFs are built from them. + +== Scores + +João Pernambuco, link:{dengoso}.pdf[Dengoso] + +++++ +<audio controls> + <source src="../music/dengoso.ogg" type="audio/ogg" /> +</audio> +++++ + +Canhoto, link:{marcha}.pdf[Marcha dos Marinheiros] + +++++ +<audio controls> + <source src="../music/marcha-dos-marinheiros.ogg" type="audio/ogg" /> +</audio> +++++ + +Agustín Barrios, link:{choro}.pdf[Choro da Saudade] + +++++ +<audio controls> + <source src="../music/choro-da-saudade.ogg" type="audio/ogg" /> +</audio> +++++ diff --git a/src/content/en/pastebin/2021/06/22/curl-wget.adoc b/src/content/en/pastebin/2021/06/22/curl-wget.adoc index 97f55c7..02a9744 100644 --- a/src/content/en/pastebin/2021/06/22/curl-wget.adoc +++ b/src/content/en/pastebin/2021/06/22/curl-wget.adoc @@ -1,4 +1,4 @@ -= "cloc: curl and wget" += cloc: curl and wget `curl`: diff --git a/src/content/en/screencast/2021/02/07/autoqemu.adoc b/src/content/en/screencast/2021/02/07/autoqemu.adoc index b20b092..15bac9a 100644 --- a/src/content/en/screencast/2021/02/07/autoqemu.adoc +++ b/src/content/en/screencast/2021/02/07/autoqemu.adoc @@ -10,7 +10,6 @@ :script: https://www.man7.org/linux/man-pages/man1/script.1.html :klaatu: https://gnuworldorder.info/ -video: true After reading begriffs "{begriffs-tips}[Tips for stable and portable software]", the "Begriffs Buildfarm?" section caught my attention, as this is something I diff --git a/src/content/en/slide/2020/10/19/feature-flags.adoc b/src/content/en/slide/2020/10/19/feature-flags.adoc index 553cf4c..360c00f 100644 --- a/src/content/en/slide/2020/10/19/feature-flags.adoc +++ b/src/content/en/slide/2020/10/19/feature-flags.adoc @@ -1,230 +1,8 @@ ---- -# Rollout, feature flag, experiment, operational toggle += Rollout, feature flag, experiment, operational toggle +:categories: presentation +:deck: feature-flags.pdf -@Different use cases for backend, frontend and mobile +Different use cases for backend, frontend and mobile, and why the +four things people call "feature flags" are not the same thing. ---- -. -. -. -# "Feature flags" tend to come up when talking about continuous deployment - ---- -. -. -. -. -@CI: continuous integration -. -@CD: continuous delivery -. -@CD: continuous deployment - ---- -## Types -. -. -. -1. rollout -2. feature flag -3. experiment -4. operational toggle - -% {favicon.svg} ---- -## Rollout - -# For *rolling out* a new version of software - -Short-lived using percentages - -% FIXME: links -- a new deployment of kubernetes -- new APK released to the Play Store - ---- -## Feature flag - -# For turning a feature *on* or *off* - -Medium-lived using allow list, A/B test, percentage, app version, etc. - -- :new-chargeback-flow -- :new-debit-card-activation-screen - ---- -## Experiment - -# For analysing behaviour - -Medium-lived using allow list and A/B test - -- :debit-withdrawal-test - ---- -## Operational toggle - -# For disabling features in #crash-like situations - -Long-lived using percentage - -- :bank-barcode-payment -- :savings-bank-barcode-query-provider - ---- -. -. -@We know know about the types -# But they have different relevance for backend, frontend and mobile - ---- -## backend -. -. -1. rollout: k8s blue/green, canary and ~common-rollout~ common-xp -2. feature flag: ~common-rollout~ common-xp and datasets -3. experiment: common-xp -4. operational toggle: ~common-rollout~ common-xp - ---- -## frontend -. -. -1. rollout: CDN and page refreshes -2. feature flag: percentages and maybe IPs (no :customer/id on the website) -3. experiment: via dynamic backend control -4. operational toggle: via dynamic backend control - ---- -## backend -. -. -1. rollout: app stores -2. feature flag: via dynamic backend control -3. experiment: via dynamic backend control -4. operational toggle: via dynamic backend control - ---- -. -. -@Key differentiator is -# how much *control* we have over the environment - ---- -## backend -# full control -% FIXME: emoji -% 🎉 - ---- -## frontend -# partial control -We choose when to make a new version available - ---- -## mobile -# very limited control -- app stores can restrict updates (worse for iOS) -- customers still have to download new versions - ---- -# Costs -- more complex code -- compatibility with old app versions -- nesting is exponential - ---- -# Benefits -- dynamicity - ---- -## weighting costs × benefits -# The less control we have, the more we value dynamicity - ---- -## weighting costs × benefits -. -. -. -- backend: sometimes worth the cost -- frontend: almost always worth the cost -- mobile: *always* worth the cost - ---- -. -. -. -# Best practices - ---- -# dynamic content > feature flag -Always true for mobile, almost always for frontend - ---- -# Use :include-list for named groups -Always true for backend, frontend and mobile - - {:rules - #{{:types :include-list - :content {:filename "debit-team-members.txt"}}}} - ---- -# Always use :app-version -Only for mobile - - {:rules - #{{:types :app-version - :content {:min-version #{{:platform :android - :code 1000000} - {:platform :ios - :code 2000000}}}}}} - ---- -# Extend ~common-rollout~ common-xp if required - -That's how :include-list, :app-version, etc. were born - ---- -# Beware of many nested feature flags -True for backend, frontend and mobile - ---- -# Don't delete app-facing feature flags -True for mobile - ---- -. -. -. -# Include a feature flag on the whiteboarding phase - ---- -. -. -. -# Include deleting/retiring the feature flag at the end - ---- -# Avoid renaming a feature flag -Use :app-version with :min-version instead - ---- -. -. -. -# And most importantly... - ---- -# *Always* rely on a feature flag on the app -Never do a hotfix, avoid expedited releases at all costs - ---- -## References -. -% FIXME: links -1. "Feature Toggles (aka Feature Flags)", by Pete Hodgson -2. "Continuous integration vs. delivery vs. deployment", by Sten Pittet -3. Accelerate, by N. Forsgren, J. Humble and G. Kim -4. these slides: euandre.org/slide/ -5. prose version of this presentation -6. view source +link:{deck}[Read the deck (PDF)]. diff --git a/src/content/en/slide/2020/10/19/feature-flags.eslaides b/src/content/en/slide/2020/10/19/feature-flags.eslaides new file mode 100644 index 0000000..553cf4c --- /dev/null +++ b/src/content/en/slide/2020/10/19/feature-flags.eslaides @@ -0,0 +1,230 @@ +--- +# Rollout, feature flag, experiment, operational toggle + +@Different use cases for backend, frontend and mobile + +--- +. +. +. +# "Feature flags" tend to come up when talking about continuous deployment + +--- +. +. +. +. +@CI: continuous integration +. +@CD: continuous delivery +. +@CD: continuous deployment + +--- +## Types +. +. +. +1. rollout +2. feature flag +3. experiment +4. operational toggle + +% {favicon.svg} +--- +## Rollout + +# For *rolling out* a new version of software + +Short-lived using percentages + +% FIXME: links +- a new deployment of kubernetes +- new APK released to the Play Store + +--- +## Feature flag + +# For turning a feature *on* or *off* + +Medium-lived using allow list, A/B test, percentage, app version, etc. + +- :new-chargeback-flow +- :new-debit-card-activation-screen + +--- +## Experiment + +# For analysing behaviour + +Medium-lived using allow list and A/B test + +- :debit-withdrawal-test + +--- +## Operational toggle + +# For disabling features in #crash-like situations + +Long-lived using percentage + +- :bank-barcode-payment +- :savings-bank-barcode-query-provider + +--- +. +. +@We know know about the types +# But they have different relevance for backend, frontend and mobile + +--- +## backend +. +. +1. rollout: k8s blue/green, canary and ~common-rollout~ common-xp +2. feature flag: ~common-rollout~ common-xp and datasets +3. experiment: common-xp +4. operational toggle: ~common-rollout~ common-xp + +--- +## frontend +. +. +1. rollout: CDN and page refreshes +2. feature flag: percentages and maybe IPs (no :customer/id on the website) +3. experiment: via dynamic backend control +4. operational toggle: via dynamic backend control + +--- +## backend +. +. +1. rollout: app stores +2. feature flag: via dynamic backend control +3. experiment: via dynamic backend control +4. operational toggle: via dynamic backend control + +--- +. +. +@Key differentiator is +# how much *control* we have over the environment + +--- +## backend +# full control +% FIXME: emoji +% 🎉 + +--- +## frontend +# partial control +We choose when to make a new version available + +--- +## mobile +# very limited control +- app stores can restrict updates (worse for iOS) +- customers still have to download new versions + +--- +# Costs +- more complex code +- compatibility with old app versions +- nesting is exponential + +--- +# Benefits +- dynamicity + +--- +## weighting costs × benefits +# The less control we have, the more we value dynamicity + +--- +## weighting costs × benefits +. +. +. +- backend: sometimes worth the cost +- frontend: almost always worth the cost +- mobile: *always* worth the cost + +--- +. +. +. +# Best practices + +--- +# dynamic content > feature flag +Always true for mobile, almost always for frontend + +--- +# Use :include-list for named groups +Always true for backend, frontend and mobile + + {:rules + #{{:types :include-list + :content {:filename "debit-team-members.txt"}}}} + +--- +# Always use :app-version +Only for mobile + + {:rules + #{{:types :app-version + :content {:min-version #{{:platform :android + :code 1000000} + {:platform :ios + :code 2000000}}}}}} + +--- +# Extend ~common-rollout~ common-xp if required + +That's how :include-list, :app-version, etc. were born + +--- +# Beware of many nested feature flags +True for backend, frontend and mobile + +--- +# Don't delete app-facing feature flags +True for mobile + +--- +. +. +. +# Include a feature flag on the whiteboarding phase + +--- +. +. +. +# Include deleting/retiring the feature flag at the end + +--- +# Avoid renaming a feature flag +Use :app-version with :min-version instead + +--- +. +. +. +# And most importantly... + +--- +# *Always* rely on a feature flag on the app +Never do a hotfix, avoid expedited releases at all costs + +--- +## References +. +% FIXME: links +1. "Feature Toggles (aka Feature Flags)", by Pete Hodgson +2. "Continuous integration vs. delivery vs. deployment", by Sten Pittet +3. Accelerate, by N. Forsgren, J. Humble and G. Kim +4. these slides: euandre.org/slide/ +5. prose version of this presentation +6. view source diff --git a/src/content/en/slide/2020/11/14/local-first-hype.adoc b/src/content/en/slide/2020/11/14/local-first-hype.adoc index fd83115..6083dca 100644 --- a/src/content/en/slide/2020/11/14/local-first-hype.adoc +++ b/src/content/en/slide/2020/11/14/local-first-hype.adoc @@ -1,204 +1,8 @@ -# On "local-first" += On "local-first": beyond the CRDT silver bullet +:categories: presentation +:deck: local-first-hype.pdf -@Beyond the CRDT silver bullet +What local-first software asks of a system, and why conflict-free +replicated data types answer only part of it. ---- -## Part 1 -# Exposition - ---- -## Target -... -- documents -- files -- personal data repositories -.. -Not: banking services, e-commerce, social networking, ride-sharing, etc. - ---- -... -# 7 ideals for local-first software - ---- -... -# 1 - no spinners: your work at your fingertips - ---- -... -# 2 - your work is not trapped on one device - ---- -... -# 3 - the network is optional - ---- -... -# 4 - seamless collaboration with your colleagues - ---- -... -# 5 - the long now - ---- -... -# 6 - security and privacy by default - ---- -... -# 7 - you retain ultimate ownership and control - ---- -## Towards a better future -.... -@ CRDTs (Conflict-free Replicated Data Types) as a Foundational Technology - ---- -## Use case -. - # in node A and node B - s = "Hello, World" - - # in node A - s = "Hello, Alice" - - # in node B - s = "Hello, Bob" - -How to reconcile those? -- Hello, ABloibce -- Hello, AliceBob -- Hello, BobAlice -- Hello, Alice -\... - ---- -# Existing CRDTs differ -- performance -- storage -- compression -- metadata overhead - ---- -... -# Hint towards the "automerge" CRDT - ---- -...... -@@show comparison table, page 9 - ---- -## Part 2 -# Critique - ---- -## Software license -... -@@"In our opinion, maintaining control and ownership of data does not mean that the software must necessarily be open source." - ---- -## Example 1 - intentional restriction -. - #!/bin/sh - TODAY="$(date +%s)" - LICENSE_EXPIRATION="$(date -d 2020-10-27 +%s)" - if [ "$TODAY" -ge "$LICENSE_EXPIRATION" ]; then - echo 'License expired!' - exit 1 - fi - echo $((2 + 2)) -. - # today - $ ./useful-adder.sh - 4 - - # tomorrow - $ ./useful-adder.sh - License expired! ---- -## Example 2 - unintentional restriction -. - # today - $ useful-program - # ... useful output ... - - # tomorrow, with more data - $ useful-program - ERROR: Panic! Stack overflow! - ---- -.. -# local-first *requires* free software - -Otherwise "The Long Now" (ideal nº5) is lost - ---- -## Denial of existing solutions -.. -@@"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." -. -Solution: either GitHub+CRDTs or git send-email - ---- -## Plain-text formats -. -@@"Git is highly optimized for code and similar line-based text file" -. -It even pulls software to the plain text directtion, e.g.: -- delivery-templates -- common-core.protocols.config -. -Why not exploit that more? - ---- -## Ditching of web applications -.. -@@"The architecture of web apps remains fundamentally server-centric -. -% FIXME: links -Disagree. Contrast PouchDB with Android Instant Apps - ---- -## Costs are underrated -. -- storage -- backups -- maintenance -. -Example: blog vs vlog - ---- -## Real-time collaboration a bit overrated -. -It is only possible on the presence of reliable, medium-quality network connection -.. -@@"X also works when inside an elevator, subway or plane!" - ---- -## On CRDTs and developer experience -. -@@"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? -. -@YES. -. -% FIXME: link -See "A Note on Distributed Computing" - ---- -## Conclusion -. -Why this is a "paper I love": it took offline-first and ran with it. -. -But a pinch of CRDT won't make the world local-first. -. -The tricky part is the end of the sentence: "in spite of the Cloud". - ---- -## References -. -% FIXME: links -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 -2. The Morning Paper article -3. "A Note on Distributed Compiting", by J. Waldo, G. Wyant, A. Wollrath and S. Kendall -4. these slides: euandre.org/slide/ -5. prose version of this presentation -6. view source +link:{deck}[Read the deck (PDF)]. diff --git a/src/content/en/slide/2020/11/14/local-first-hype.eslaides b/src/content/en/slide/2020/11/14/local-first-hype.eslaides new file mode 100644 index 0000000..fd83115 --- /dev/null +++ b/src/content/en/slide/2020/11/14/local-first-hype.eslaides @@ -0,0 +1,204 @@ +# On "local-first" + +@Beyond the CRDT silver bullet + +--- +## Part 1 +# Exposition + +--- +## Target +... +- documents +- files +- personal data repositories +.. +Not: banking services, e-commerce, social networking, ride-sharing, etc. + +--- +... +# 7 ideals for local-first software + +--- +... +# 1 - no spinners: your work at your fingertips + +--- +... +# 2 - your work is not trapped on one device + +--- +... +# 3 - the network is optional + +--- +... +# 4 - seamless collaboration with your colleagues + +--- +... +# 5 - the long now + +--- +... +# 6 - security and privacy by default + +--- +... +# 7 - you retain ultimate ownership and control + +--- +## Towards a better future +.... +@ CRDTs (Conflict-free Replicated Data Types) as a Foundational Technology + +--- +## Use case +. + # in node A and node B + s = "Hello, World" + + # in node A + s = "Hello, Alice" + + # in node B + s = "Hello, Bob" + +How to reconcile those? +- Hello, ABloibce +- Hello, AliceBob +- Hello, BobAlice +- Hello, Alice +\... + +--- +# Existing CRDTs differ +- performance +- storage +- compression +- metadata overhead + +--- +... +# Hint towards the "automerge" CRDT + +--- +...... +@@show comparison table, page 9 + +--- +## Part 2 +# Critique + +--- +## Software license +... +@@"In our opinion, maintaining control and ownership of data does not mean that the software must necessarily be open source." + +--- +## Example 1 - intentional restriction +. + #!/bin/sh + TODAY="$(date +%s)" + LICENSE_EXPIRATION="$(date -d 2020-10-27 +%s)" + if [ "$TODAY" -ge "$LICENSE_EXPIRATION" ]; then + echo 'License expired!' + exit 1 + fi + echo $((2 + 2)) +. + # today + $ ./useful-adder.sh + 4 + + # tomorrow + $ ./useful-adder.sh + License expired! +--- +## Example 2 - unintentional restriction +. + # today + $ useful-program + # ... useful output ... + + # tomorrow, with more data + $ useful-program + ERROR: Panic! Stack overflow! + +--- +.. +# local-first *requires* free software + +Otherwise "The Long Now" (ideal nº5) is lost + +--- +## Denial of existing solutions +.. +@@"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." +. +Solution: either GitHub+CRDTs or git send-email + +--- +## Plain-text formats +. +@@"Git is highly optimized for code and similar line-based text file" +. +It even pulls software to the plain text directtion, e.g.: +- delivery-templates +- common-core.protocols.config +. +Why not exploit that more? + +--- +## Ditching of web applications +.. +@@"The architecture of web apps remains fundamentally server-centric +. +% FIXME: links +Disagree. Contrast PouchDB with Android Instant Apps + +--- +## Costs are underrated +. +- storage +- backups +- maintenance +. +Example: blog vs vlog + +--- +## Real-time collaboration a bit overrated +. +It is only possible on the presence of reliable, medium-quality network connection +.. +@@"X also works when inside an elevator, subway or plane!" + +--- +## On CRDTs and developer experience +. +@@"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? +. +@YES. +. +% FIXME: link +See "A Note on Distributed Computing" + +--- +## Conclusion +. +Why this is a "paper I love": it took offline-first and ran with it. +. +But a pinch of CRDT won't make the world local-first. +. +The tricky part is the end of the sentence: "in spite of the Cloud". + +--- +## References +. +% FIXME: links +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 +2. The Morning Paper article +3. "A Note on Distributed Compiting", by J. Waldo, G. Wyant, A. Wollrath and S. Kendall +4. these slides: euandre.org/slide/ +5. prose version of this presentation +6. view source diff --git a/src/content/en/slide/categories.adoc b/src/content/en/slide/categories.adoc new file mode 100644 index 0000000..feb64ff --- /dev/null +++ b/src/content/en/slide/categories.adoc @@ -0,0 +1,2 @@ += Articles by category +:type: categories diff --git a/src/content/en/slide/index.adoc b/src/content/en/slide/index.adoc new file mode 100644 index 0000000..4e5b53d --- /dev/null +++ b/src/content/en/slide/index.adoc @@ -0,0 +1,4 @@ += Slides + +Slide decks, rendered to PDF: no browser needed to read them, and no +JavaScript presentation framework to carry along. |
