summaryrefslogtreecommitdiffstats
path: root/static/rust-meetup-talk-20190726/talk.md
diff options
context:
space:
mode:
Diffstat (limited to 'static/rust-meetup-talk-20190726/talk.md')
-rw-r--r--static/rust-meetup-talk-20190726/talk.md383
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!
+
+