diff options
Diffstat (limited to 'static/rust-meetup-talk-20190726/slides.html')
-rw-r--r-- | static/rust-meetup-talk-20190726/slides.html | 439 |
1 files changed, 439 insertions, 0 deletions
diff --git a/static/rust-meetup-talk-20190726/slides.html b/static/rust-meetup-talk-20190726/slides.html new file mode 100644 index 0000000..cb31b61 --- /dev/null +++ b/static/rust-meetup-talk-20190726/slides.html @@ -0,0 +1,439 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="generator" content="pandoc"> + <meta name="author" content="Matthias Beyer"> + <meta name="dcterms.date" content="2019-07-26"> + <title>imag</title> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> + <link rel="stylesheet" href="https://revealjs.com/css/reveal.css"> + <style> + code{white-space: pre-wrap;} + span.smallcaps{font-variant: small-caps;} + span.underline{text-decoration: underline;} + div.column{display: inline-block; vertical-align: top; width: 50%;} + </style> + <link rel="stylesheet" href="https://revealjs.com/css/theme/black.css" id="theme"> + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? 'https://revealjs.com/css/print/pdf.css' : 'https://revealjs.com/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + <!--[if lt IE 9]> + <script src="https://revealjs.com/lib/js/html5shiv.js"></script> + <![endif]--> +</head> +<body> + <div class="reveal"> + <div class="slides"> + +<section id="title-slide"> + <h1 class="title">imag</h1> + <p class="author">Matthias Beyer</p> + <p class="date">July 26, 2019</p> +</section> + +<section id="imag" class="slide level1"> +<h1>imag</h1> +<p>Personal information management suite</p> +</section> +<section id="idea" class="slide level1"> +<h1>Idea</h1> +<ul> +<li>Collect Metadata +<ul> +<li>calendar, contacts, todos…</li> +</ul></li> +<li>Connect Metadata</li> +<li>Query Metadata</li> +</ul> +</section> +<section id="future" class="slide level1"> +<h1>Future…</h1> +<ul> +<li>Automatic suggestions</li> +</ul> +<blockquote> +<p>Hey Dave…</p> +</blockquote> +</section> +<section id="existing-tools" class="slide level1"> +<h1>Existing tools</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +taskwarrior +</li> +<li class="fragment fade-in" data-fragment-index="2"> +khal +</li> +<li class="fragment fade-in" data-fragment-index="3"> +khard +</li> +<li class="fragment fade-in" data-fragment-index="4"> +abook +</li> +<li class="fragment fade-in" data-fragment-index="5"> +… +</li> +</ul> +<p><span class="fragment fade-in"> yes, but… </span></p> +</section> +<section id="existing-tools-1" class="slide level1"> +<h1>Existing tools</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +no interoperability +</li> +<li class="fragment fade-in" data-fragment-index="2"> +no composability +</li> +<li class="fragment fade-in" data-fragment-index="3"> +no scriptability +</li> +<li class="fragment fade-in" data-fragment-index="4"> +not always text-only +</li> +</ul> +</section> +<section id="workflow" class="slide level1"> +<h1>Workflow</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Email comes in +</li> +<li class="fragment fade-in" data-fragment-index="2"> +imag classifies it +</li> +<li class="fragment fade-in" data-fragment-index="3"> +it is from Lisa +</li> +<li class="fragment fade-in" data-fragment-index="4"> +it is in a thread of emails +</li> +</ul> +</section> +<section id="workflow-1" class="slide level1"> +<h1>Workflow</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +… which is connected to a calendar entry (tomorrow) +</li> +<li class="fragment fade-in" data-fragment-index="2"> +… which is connected to a recipe +</li> +<li class="fragment fade-in" data-fragment-index="3"> +… which is connected to a shopping list +</li> +<li class="fragment fade-in" data-fragment-index="4"> +… which is connected to opening times of a shop +</li> +</ul> +</section> +<section id="workflow-2" class="slide level1"> +<h1>Workflow</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +The shop closes at 8pm, it is 6pm +</li> +<li class="fragment fade-in" data-fragment-index="2"> +this seems to be important! +</li> +<li class="fragment fade-in" data-fragment-index="2"> +imag notifies you +</li> +</ul> +</section> +<section id="goals" class="slide level1"> +<h1>Goals</h1> +<ul> +<li>plain text only</li> +<li>scriptable</li> +<li>composable</li> +</ul> +</section> +<section id="facts" class="slide level1"> +<h1>Facts</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Rust +</li> +<li class="fragment fade-in" data-fragment-index="2"> +init commit: 2015-10-18 +</li> +<li class="fragment fade-in" data-fragment-index="3"> +41,827 LOC (2019-07-14, master) +<ul> +<li> +34,925 LOC Rust +</li> +<li> +3,025 LOC Markdown (documentation) +</li> +</ul> +</ul> +</section> +<section id="facts-1" class="slide level1"> +<h1>Facts</h1> +<p>Implemented domains:</p> +<ul> +<li>bookmark</li> +<li>contact</li> +<li>diary (log)</li> +<li>habit</li> +<li>notes</li> +<li>timetrack</li> +<li>wiki</li> +<li>todo / mail (rewrite pending)</li> +</ul> +</section> +<section id="architecture" class="slide level1"> +<h1>Architecture</h1> +<ol type="1"> +<li>“Core” +<ol type="1"> +<li>“The Store”</li> +<li>“The Runtime”</li> +</ol></li> +<li>“Entry layer”</li> +<li>“Domain layer”</li> +<li>“UI Layer”</li> +</ol> +<ul> +<div class="fragment fade-in" data-fragment-index="1"> +<pre><code>MVC anyone?</code></pre> +</div> +</ul> +</section> +<section id="core-the-store" class="slide level1"> +<h1>Core: The Store</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Filesystem abstraction +</li> +<li class="fragment fade-in" data-fragment-index="2"> +CRUD interface +</li> +<li class="fragment fade-in" data-fragment-index="3"> +defines “Entry” +</li> +<li class="fragment fade-in" data-fragment-index="4"> +Different backends (FS, inmemory for testing) +</li> +</ul> +</section> +<section id="core-entry" class="slide level1"> +<h1>Core: Entry</h1> +<ol type="1"> +<li>Header</li> +<li>Content</li> +</ol> +<pre class="toml"><code>[imag] +version = "0.10.0" + +[somemore] +headers = 123</code></pre> +</section> +<section id="core-the-runtime" class="slide level1"> +<h1>Core: The Runtime</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Configuration handling +</li> +<li class="fragment fade-in" data-fragment-index="2"> +CLI utilities (clap) +</li> +<li class="fragment fade-in" data-fragment-index="3"> +Logging setup +</li> +</ul> +</section> +<section id="entry-layer" class="slide level1"> +<h1>Entry layer</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Extensions for “Entry” +<ul> +<li class="fragment fade-in" data-fragment-index="2"> +“link” +</li> +<li class="fragment fade-in" data-fragment-index="3"> +“tag” +</li> +<li class="fragment fade-in" data-fragment-index="4"> +“category” +</li> +<li class="fragment fade-in" data-fragment-index="5"> +“edit” +</li> +<li class="fragment fade-in" data-fragment-index="6"> +“…” +</li> +</ul> +</li> +</ul> +</section> +<section id="domain-layer" class="slide level1"> +<h1>Domain layer</h1> +<ul> +<li>diary</li> +<li>bookmark</li> +<li>contact</li> +<li>todo</li> +</ul> +</section> +<section id="ui-layer" class="slide level1"> +<h1>UI Layer</h1> +<ul> +<li>CLI</li> +<li>(TUI)</li> +<li>(GUI)</li> +<li>(WUI)</li> +</ul> +</section> +<section id="external-libraries" class="slide level1"> +<h1>External libraries</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Policy: Use what’s useful +</li> +<li class="fragment fade-in" data-fragment-index="1"> +clap +</li> +<li class="fragment fade-in" data-fragment-index="1"> +toml +</li> +</ul> +</section> +<section id="extracted-libraries" class="slide level1"> +<h1>Extracted libraries</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="2"> +toml-query +<ul> +<li> +human-readable X-Path for toml +</li> +</ul> +</li> +<li class="fragment fade-in" data-fragment-index="3"> +filters +<ul> +<li> +composable (failable) predicates +</li> +</ul> +</li> +<li class="fragment fade-in" data-fragment-index="4"> +kairos +<ul> +<li> +human-readable date/time processing +</li> +</ul> +</li> +</ul> +</section> +<section id="concepts" class="slide level1"> +<h1>Concepts</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +StoreId +</li> +<li class="fragment fade-in" data-fragment-index="2"> +Entry +</li> +<li class="fragment fade-in" data-fragment-index="3"> +FileLockEntry +</li> +<li class="fragment fade-in" data-fragment-index="4"> +Store +</li> +<li class="fragment fade-in" data-fragment-index="5"> +Traits +<ul> +<li class="fragment fade-in" data-fragment-index="6"> +extending Store +</li> +<li class="fragment fade-in" data-fragment-index="7"> +extending Entry +</li> +</ul> +</li> +<li class="fragment fade-in" data-fragment-index="8"> +Iterators +</li> +</ul> +</section> +<section id="more-concepts" class="slide level1"> +<h1>More Concepts</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +IsA +</li> +<li class="fragment fade-in" data-fragment-index="2"> +(Header)Partial +</li> +</ul> +</section> +<section id="other-things" class="slide level1"> +<h1>Other things</h1> +<ul> +<li class="fragment fade-in" data-fragment-index="1"> +Minimal coding styleguide +</li> +<li class="fragment fade-in" data-fragment-index="2"> +LGPL-2.1 (only) +</li> +<li class="fragment fade-in" data-fragment-index="3"> +Documentation: pandoc +</li> +<li class="fragment fade-in" data-fragment-index="4"> +Website: hugo +</li> +<li class="fragment fade-in" data-fragment-index="5"> +Contributions +<ul> +<li> +Signed-off-by +</li> +<li> +anything I can pull/apply +</li> +</ul> +</li> +</ul> +</section> +<section id="thanks" class="slide level1"> +<h1>Thanks</h1> +<p>Thank you for your attention!</p> +</section> + </div> + </div> + + <script src="https://revealjs.com/lib/js/head.min.js"></script> + <script src="https://revealjs.com/js/reveal.js"></script> + + <script> + + // Full list of configuration options available at: + // https://github.com/hakimel/reveal.js#configuration + Reveal.initialize({ + // Push each slide change to the browser history + history: true, + + // Optional reveal.js plugins + dependencies: [ + { src: 'https://revealjs.com/lib/js/classList.js', condition: function() { return !document.body.classList; } }, + { src: 'https://revealjs.com/plugin/zoom-js/zoom.js', async: true }, + { src: 'https://revealjs.com/plugin/notes/notes.js', async: true } + ] + }); + </script> + </body> +</html> |