diff options
Diffstat (limited to 'static/rust-meetup-talk-20190726/talk.md')
-rw-r--r-- | static/rust-meetup-talk-20190726/talk.md | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/static/rust-meetup-talk-20190726/talk.md b/static/rust-meetup-talk-20190726/talk.md new file mode 100644 index 0000000..6f760fb --- /dev/null +++ b/static/rust-meetup-talk-20190726/talk.md @@ -0,0 +1,383 @@ +--- +author: Matthias Beyer +title: imag +date: July 26, 2019 +--- + +# imag + +Personal information management suite + + +# Idea + +* Collect Metadata + * calendar, contacts, todos... +* Connect Metadata +* Query Metadata + + +# Future... + +* Automatic suggestions + +> Hey Dave... + + +# Existing tools + +<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> + +<span class="fragment fade-in"> + yes, but... +</span> + + +# Existing tools + +<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> + + +# Workflow + +<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> + +# Workflow + +<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> + +# Workflow + +<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> + + +# Goals + +* plain text only +* scriptable +* composable + + +# Facts + +<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> + + +# Facts + +Implemented domains: + +* bookmark +* contact +* diary (log) +* habit +* notes +* timetrack +* wiki +* todo / mail (rewrite pending) + + +# Architecture + +1. "Core" + 1. "The Store" + 1. "The Runtime" +1. "Entry layer" +1. "Domain layer" +1. "UI Layer" + +<ul> +<div class="fragment fade-in" data-fragment-index="1"> + MVC anyone? +</div> +</ul> + + +# Core: The Store + +<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> + + +# Core: Entry + +1. Header +1. Content + +```toml +[imag] +version = "0.10.0" + +[somemore] +headers = 123 +``` + + +# Core: The Runtime + +<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> + + +# Entry layer + +<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> + + +# Domain layer + +* diary +* bookmark +* contact +* todo + + +# UI Layer + +* CLI +* (TUI) +* (GUI) +* (WUI) + + +# External libraries + +<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> + + +# Extracted libraries + +<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> + +# Concepts + +<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 + <ul> + <li class="fragment fade-in" data-fragment-index="9"> + Entries + </li> + </ul> +</li> +</ul> + + +# More Concepts + +<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> + + +# Other things + +<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> + +# Thanks + + +Thank you for your attention! + + |