Add tech introductions.
authorRichard W.M. Jones <rjones@redhat.com>
Tue, 11 Jun 2019 16:59:04 +0000 (17:59 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 11 Jun 2019 20:40:47 +0000 (21:40 +0100)
33 files changed:
2019-tech-introductions/.gitignore [new file with mode: 0644]
2019-tech-introductions/1000-introduction.html [new file with mode: 0644]
2019-tech-introductions/2000-nbdkit-universal-connector.html [new file with mode: 0644]
2019-tech-introductions/2100-nbdkit-universal-connector-2.html [new file with mode: 0644]
2019-tech-introductions/2200-nbdkit-connect-directly.html [new file with mode: 0644]
2019-tech-introductions/2300-custom-plugins-are-easy-to-write.term [new file with mode: 0755]
2019-tech-introductions/2400-nbdkit-layers.html [new file with mode: 0644]
2019-tech-introductions/4000-libnbd-why.html [new file with mode: 0644]
2019-tech-introductions/4010-libnbd-why-2.html [new file with mode: 0644]
2019-tech-introductions/4100-nbd-not-easy-or-efficient.html [new file with mode: 0644]
2019-tech-introductions/4110-nbd-not-easy-or-efficient-2.html [new file with mode: 0644]
2019-tech-introductions/4120-nbd-not-easy-or-efficient-3.html [new file with mode: 0644]
2019-tech-introductions/4200-libnbd.html [new file with mode: 0644]
2019-tech-introductions/4300-libnbd-example.html [new file with mode: 0644]
2019-tech-introductions/4400-nbdsh-example.term [new file with mode: 0755]
2019-tech-introductions/6000-v2v-warm-migrations.html [new file with mode: 0644]
2019-tech-introductions/6100-snapshots.html [new file with mode: 0644]
2019-tech-introductions/6200-changed-blocks.html [new file with mode: 0644]
2019-tech-introductions/6300-todo.html [new file with mode: 0644]
2019-tech-introductions/8000-kvm-to-kvm-introduction.html [new file with mode: 0644]
2019-tech-introductions/8100-reuse-the-tools.html [new file with mode: 0644]
2019-tech-introductions/bashrc [new file with mode: 0644]
2019-tech-introductions/code.js [new file with mode: 0644]
2019-tech-introductions/custom.sh [new file with mode: 0755]
2019-tech-introductions/functions [new file with mode: 0644]
2019-tech-introductions/restore [new file with mode: 0755]
2019-tech-introductions/run [new file with mode: 0755]
2019-tech-introductions/style.css [new file with mode: 0644]
2019-tech-introductions/universal-connector-1.svg [new file with mode: 0644]
2019-tech-introductions/universal-connector-2.svg [new file with mode: 0644]
2019-tech-introductions/universal-connector-3.svg [new file with mode: 0644]
2019-tech-introductions/warm-migrations-2.svg [new file with mode: 0644]
2019-tech-introductions/warm-migrations.svg [new file with mode: 0644]

diff --git a/2019-tech-introductions/.gitignore b/2019-tech-introductions/.gitignore
new file mode 100644 (file)
index 0000000..ceb0adb
--- /dev/null
@@ -0,0 +1,2 @@
+bindings
+history
diff --git a/2019-tech-introductions/1000-introduction.html b/2019-tech-introductions/1000-introduction.html
new file mode 100644 (file)
index 0000000..692a6e5
--- /dev/null
@@ -0,0 +1,19 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<div id="titlepage">
+  <p class="title">
+    Introduction to nbdkit, libnbd, IMS, KVM&nbsp;to&nbsp;KVM&nbsp;migrations
+  </p>
+
+  <p class="author">
+    Richard W.M. Jones <br>
+    rjones @ redhat.com
+  </p>
+
+  <p class="abstract">
+    
+  </p>
+</div>
+
diff --git a/2019-tech-introductions/2000-nbdkit-universal-connector.html b/2019-tech-introductions/2000-nbdkit-universal-connector.html
new file mode 100644 (file)
index 0000000..fee7f77
--- /dev/null
@@ -0,0 +1,8 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>The “universal connector”</h1>
+
+<img src="universal-connector-1.svg"
+     width="80%">
diff --git a/2019-tech-introductions/2100-nbdkit-universal-connector-2.html b/2019-tech-introductions/2100-nbdkit-universal-connector-2.html
new file mode 100644 (file)
index 0000000..b5b1955
--- /dev/null
@@ -0,0 +1,8 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>The “universal connector”</h1>
+
+<img src="universal-connector-2.svg"
+     width="80%">
diff --git a/2019-tech-introductions/2200-nbdkit-connect-directly.html b/2019-tech-introductions/2200-nbdkit-connect-directly.html
new file mode 100644 (file)
index 0000000..122369d
--- /dev/null
@@ -0,0 +1,8 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Why not connect directly?</h1>
+
+<img src="universal-connector-3.svg"
+     width="80%">
diff --git a/2019-tech-introductions/2300-custom-plugins-are-easy-to-write.term b/2019-tech-introductions/2300-custom-plugins-are-easy-to-write.term
new file mode 100755 (executable)
index 0000000..361110c
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+source functions
+
+# Title.
+export title="Custom plugins are easy to write"
+
+# History.
+remember 'cat custom.sh'
+remember 'nbdkit sh custom.sh'
+remember "qemu-io -r -f raw nbd://localhost -c 'r -v 0 512'"
+
+./restore
+terminal
diff --git a/2019-tech-introductions/2400-nbdkit-layers.html b/2019-tech-introductions/2400-nbdkit-layers.html
new file mode 100644 (file)
index 0000000..ad8c1ae
--- /dev/null
@@ -0,0 +1,15 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Filters</h1>
+
+<script>
+filters("1")
+
+document.getElementById("filter1-rate").classList.add("highlighted")
+
+plugins()
+
+document.getElementById("plugin-ssh").classList.add("highlighted")
+</script>
diff --git a/2019-tech-introductions/4000-libnbd-why.html b/2019-tech-introductions/4000-libnbd-why.html
new file mode 100644 (file)
index 0000000..2ade029
--- /dev/null
@@ -0,0 +1,13 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>libnbd &mdash; Something was missing</h1>
+
+<ul>
+<li>
+NBD servers, but no client library.
+<li>
+qemu (<code>qemu-img</code>, <code>qemu-io</code>) was
+the only client
+</ul>
diff --git a/2019-tech-introductions/4010-libnbd-why-2.html b/2019-tech-introductions/4010-libnbd-why-2.html
new file mode 100644 (file)
index 0000000..a517e2b
--- /dev/null
@@ -0,0 +1,16 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>libnbd &mdash; We need a client library</h1>
+
+<ul>
+<li> <b>fio</b>
+&mdash; Filesystem I/O tester
+<li> <b>curl</b>
+&mdash; Popular download library
+<li> <b>nbdkit-nbd-plugin</b>
+&mdash; nbdkit’s server to client bridge
+<li> <b>qemu</b>(!)
+<li> <b>virt-v2v warm migration</b>
+</ul>
diff --git a/2019-tech-introductions/4100-nbd-not-easy-or-efficient.html b/2019-tech-introductions/4100-nbd-not-easy-or-efficient.html
new file mode 100644 (file)
index 0000000..6281855
--- /dev/null
@@ -0,0 +1,9 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>NBD is easy to implement</h1>
+
+<p>
+... but it's <b>hard to get good performance</b>
+</p>
diff --git a/2019-tech-introductions/4110-nbd-not-easy-or-efficient-2.html b/2019-tech-introductions/4110-nbd-not-easy-or-efficient-2.html
new file mode 100644 (file)
index 0000000..73a96e8
--- /dev/null
@@ -0,0 +1,23 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>NBD is easy to implement</h1>
+
+<pre>
+$ time nbdkit memory 100M \
+    --run 'examples/threaded-reads-and-writes localhost 10809'
+</pre>
+
+<p>
+In <b>three weeks</b>:
+</p>
+
+<ol>
+<li>
+50% faster?
+<li>
+twice as fast?
+<li>
+15 times faster?
+</ol>
diff --git a/2019-tech-introductions/4120-nbd-not-easy-or-efficient-3.html b/2019-tech-introductions/4120-nbd-not-easy-or-efficient-3.html
new file mode 100644 (file)
index 0000000..79c88bd
--- /dev/null
@@ -0,0 +1,35 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>NBD is easy to implement</h1>
+
+<p>
+It's <b>hard to get good performance</b>
+</p>
+
+<pre>
+$ time nbdkit memory 100M \
+    --run 'examples/threaded-reads-and-writes localhost 10809'
+</pre>
+
+<table width="80%">
+<tr>
+<td>
+May 21st 2019
+</td>
+<td> <b>587</b> seconds </td>
+</tr>
+
+<tr>
+<td>
+Jun 11th 2019
+</td>
+<td> <b>38</b> seconds </td>
+</tr>
+
+<tr>
+<td> Ratio </td>
+<td> <b>15</b> times faster </td>
+</tr>
+</table>
diff --git a/2019-tech-introductions/4200-libnbd.html b/2019-tech-introductions/4200-libnbd.html
new file mode 100644 (file)
index 0000000..a2c2a41
--- /dev/null
@@ -0,0 +1,14 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>libnbd is ...</h1>
+
+<ul>
+<li>
+C library
+<li>
+bindings in several languages
+<li>
+Python shell (<code>nbdsh</code>)
+</ul>
diff --git a/2019-tech-introductions/4300-libnbd-example.html b/2019-tech-introductions/4300-libnbd-example.html
new file mode 100644 (file)
index 0000000..d3d8db0
--- /dev/null
@@ -0,0 +1,23 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>libnbd is easy to use</h1>
+
+<pre>
+struct nbd_handle *nbd;
+
+nbd = <b>nbd_create</b> ();
+
+<b>nbd_connect_unix</b> (nbd, "/tmp/socket");
+
+<b>nbd_pread</b> (nbd, buf, sizeof buf, 0, 0);
+
+<b>nbd_close</b> (nbd);
+</pre>
+
+<p>
+... also a low level,
+high performance,
+asynchronous (AIO) API
+</p>
diff --git a/2019-tech-introductions/4400-nbdsh-example.term b/2019-tech-introductions/4400-nbdsh-example.term
new file mode 100755 (executable)
index 0000000..8be607b
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+source functions
+
+# Title.
+export title="nbdsh example"
+
+# History.
+remember 'nbdkit memory 1M'
+remember "nbdsh --connect nbd://localhost -c 'print(h.get_size())'"
+
+./restore
+terminal
diff --git a/2019-tech-introductions/6000-v2v-warm-migrations.html b/2019-tech-introductions/6000-v2v-warm-migrations.html
new file mode 100644 (file)
index 0000000..006bf03
--- /dev/null
@@ -0,0 +1,6 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>virt-v2v warm migrations</h1>
+
diff --git a/2019-tech-introductions/6100-snapshots.html b/2019-tech-introductions/6100-snapshots.html
new file mode 100644 (file)
index 0000000..e6e6146
--- /dev/null
@@ -0,0 +1,7 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>virt-v2v warm migrations</h1>
+
+<img src="warm-migrations.svg" width="80%">
diff --git a/2019-tech-introductions/6200-changed-blocks.html b/2019-tech-introductions/6200-changed-blocks.html
new file mode 100644 (file)
index 0000000..2ccc452
--- /dev/null
@@ -0,0 +1,7 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>virt-v2v warm migrations</h1>
+
+<img src="warm-migrations-2.svg" width="80%">
diff --git a/2019-tech-introductions/6300-todo.html b/2019-tech-introductions/6300-todo.html
new file mode 100644 (file)
index 0000000..a7b8325
--- /dev/null
@@ -0,0 +1,45 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>virt-v2v warm migrations &mdash; to do</h1>
+
+<table width="90%">
+<tr>
+<th width="20%" align="left">nbdkit</th>
+<td>
+VDDK <b>extents</b>, <b>CBT</b>,
+and some other minor features
+</td>
+</tr>
+
+<tr>
+<th width="20%" align="left">libnbd</th>
+<td>
+<b>lots of work</b>
+</td>
+</tr>
+
+<tr>
+<th width="20%" align="left">libguestfs</th>
+<td>
+<b>extra tool</b> to handle snapshotting and
+copying
+</td>
+</tr>
+
+<tr>
+<th width="20%" align="left">virt-v2v</th>
+<td>
+unmodified!
+</td>
+</tr>
+
+<tr>
+<th width="20%" align="left">user interface</th>
+<td>
+lots of work
+</td>
+</tr>
+
+</table>
diff --git a/2019-tech-introductions/8000-kvm-to-kvm-introduction.html b/2019-tech-introductions/8000-kvm-to-kvm-introduction.html
new file mode 100644 (file)
index 0000000..2f03c0a
--- /dev/null
@@ -0,0 +1,11 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>KVM to KVM migrations</h1>
+
+<table width="50%">
+<tr> <td> OSP 10 </td>    <td> &rarr; </td> <td> OSP 16 </td> </tr>
+<tr> <td> RHV </td>       <td> &rarr; </td> <td> CNV (KubeVirt) </td> </tr>
+<tr> <td> OSP </td>       <td> &rarr; </td> <td> CNV </td> </tr>
+</table>
diff --git a/2019-tech-introductions/8100-reuse-the-tools.html b/2019-tech-introductions/8100-reuse-the-tools.html
new file mode 100644 (file)
index 0000000..2da3cbe
--- /dev/null
@@ -0,0 +1,12 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Not virt-v2v, but reuse the tools</h1>
+
+<ul>
+<li> <b>nbdkit</b>
+<li> <b>qemu-img convert</b>
+<li> virt-v2v <b>metadata model</b>
+<li> libnbd, bindings or nbdsh, maybe
+</ul>
diff --git a/2019-tech-introductions/bashrc b/2019-tech-introductions/bashrc
new file mode 100644 (file)
index 0000000..f526961
--- /dev/null
@@ -0,0 +1,19 @@
+# -*- shell-script -*-
+
+# Colour ls.
+if [ -f /etc/profile.d/colorls.sh ]; then . /etc/profile.d/colorls.sh; fi
+
+# Fancy prompt colours (see
+# https://wiki.archlinux.org/index.php/Color_Bash_Prompt)
+promptcol='\e[0;32m'      ;# colour for the prompt
+commandcol='\e[1;31m'     ;# colour for the typed command
+outputcol='\e[0m'         ;# colour for command output
+
+export PS1="\n\[$promptcol\]\$ \[$commandcol\]"
+
+trap 'echo -ne "$outputcol"' DEBUG
+
+# Load key bindings (if any).
+bind -f $talkdir/bindings
+
+echo $title
diff --git a/2019-tech-introductions/code.js b/2019-tech-introductions/code.js
new file mode 100644 (file)
index 0000000..d167d3a
--- /dev/null
@@ -0,0 +1,67 @@
+function plugins ()
+{
+    document.write ("\
+<div class=\"plugins\"> \
+<p id=\"caption\">plugins available in nbdkit 1.12</p> \
+<ul> \
+<li id=\"plugin-curl\"> curl \
+<li id=\"plugin-data\"> data \
+<li id=\"plugin-ext2\"> ext2 \
+<li id=\"plugin-file\"> file \
+<li id=\"plugin-floppy\"> floppy \
+<li id=\"plugin-full\"> full \
+<li id=\"plugin-guestfs\"> guestfs \
+<li id=\"plugin-gzip\"> gzip \
+<li id=\"plugin-iso\"> iso \
+<li id=\"plugin-libvirt\"> libvirt \
+<li id=\"plugin-linuxdisk\"> linuxdisk \
+<li id=\"plugin-lua\"> lua \
+<li id=\"plugin-memory\"> memory \
+<li id=\"plugin-nbd\"> nbd \
+<li id=\"plugin-null\"> null \
+<li id=\"plugin-ocaml\"> ocaml \
+<li id=\"plugin-partitioning\"> partitioning \
+<li id=\"plugin-pattern\"> pattern \
+<li id=\"plugin-perl\"> perl \
+<li id=\"plugin-python\"> python \
+<li id=\"plugin-random\"> random \
+<li id=\"plugin-ruby\"> ruby \
+<li id=\"plugin-rust\"> rust \
+<li id=\"plugin-sh\"> sh \
+<li id=\"plugin-split\"> split \
+<li id=\"plugin-ssh\"> ssh \
+<li id=\"plugin-streaming\"> streaming \
+<li id=\"plugin-tar\"> tar \
+<li id=\"plugin-tcl\"> tcl \
+<li id=\"plugin-vddk\"> vddk \
+<li id=\"plugin-zero\"> zero \
+</ul> \
+</div> \
+");
+}
+
+function filters (layer)
+{
+    document.write ("\
+<div class=\"filters\"> \
+<p class=\"filtercaption\">filters available in nbdkit 1.12</p> \
+<ul> \
+<li id=\"filter" + layer + "-blocksize\"> blocksize \
+<li id=\"filter" + layer + "-cache\"> cache \
+<li id=\"filter" + layer + "-cow\"> cow \
+<li id=\"filter" + layer + "-delay\"> delay \
+<li id=\"filter" + layer + "-error\"> error \
+<li id=\"filter" + layer + "-fua\"> fua \
+<li id=\"filter" + layer + "-log\"> log \
+<li id=\"filter" + layer + "-noextents\"> noextents \
+<li id=\"filter" + layer + "-nozero\"> nozero \
+<li id=\"filter" + layer + "-offset\"> offset \
+<li id=\"filter" + layer + "-partition\"> partition \
+<li id=\"filter" + layer + "-rate\"> rate \
+<li id=\"filter" + layer + "-readahead\"> readahead \
+<li id=\"filter" + layer + "-truncate\"> truncate \
+<li id=\"filter" + layer + "-xz\"> xz \
+</ul> \
+</div> \
+");
+}
diff --git a/2019-tech-introductions/custom.sh b/2019-tech-introductions/custom.sh
new file mode 100755 (executable)
index 0000000..48bdcb4
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash -
+
+case "$1" in
+    get_size)
+        echo 1M ;;
+    pread)
+        for i in `seq 1 $(( $3/16 ))`; do
+            echo -ne 'HELLO BEIJING __'
+        done
+        ;;
+    *)
+        exit 2;;
+esac
diff --git a/2019-tech-introductions/functions b/2019-tech-introductions/functions
new file mode 100644 (file)
index 0000000..d5347e7
--- /dev/null
@@ -0,0 +1,43 @@
+# -*- shell-script -*-
+# This creates some standard functions.  See also $talkdir/bashrc
+# which runs in the same bash context as the terminal.
+
+# Place any local environment variables and settings in "local".
+if [ -f local ]; then source local; fi
+
+# Environment variables.
+export HISTFILE=$talkdir/history
+export PATH=$talkdir:$PATH
+export EDITOR="emacs -nw"
+
+# Ditch libvirt for stability :-(
+export LIBGUESTFS_BACKEND=direct
+
+# remember <command> <args ...>
+#
+# This function does two things: (1) It adds the command and arguments
+# to the shell history, so that commands can be recalled using up
+# arrow or reverse search.  (2) It makes a function key recall the
+# command.  The first command is assigned to F2, the second to F3 and
+# so forth.
+
+rm -f $HISTFILE
+touch $HISTFILE
+rm -f $talkdir/bindings
+touch bindings
+
+fnum=2
+keys=(- OP OQ OR OS '[15~' '[17~' '[18~' '[19~' '[20~' '[21~')
+
+remember ()
+{
+    echo "$@" >> $HISTFILE
+    echo \"\\e${keys[$fnum]}\":\"\\C-k \\C-u"$@"\" >> $talkdir/bindings
+    ((fnum++))
+}
+
+terminal ()
+{
+    chmod -w $HISTFILE
+    /bin/bash --rcfile $talkdir/bashrc "$@"
+}
diff --git a/2019-tech-introductions/restore b/2019-tech-introductions/restore
new file mode 100755 (executable)
index 0000000..3976ea5
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash -
+
+killall nbdkit               >&/dev/null
+
+exit 0
diff --git a/2019-tech-introductions/run b/2019-tech-introductions/run
new file mode 100755 (executable)
index 0000000..39d43f6
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash -
+# Run the talk.
+
+set -e
+
+# Avoid GNOME keyring stupidity
+export GNOME_KEYRING_CONTROL=
+export GNOME_KEYRING_PID=
+
+# No proxy.
+unset http_proxy
+unset https_proxy
+unset ftp_proxy
+
+# Remove any old nbdkit processes etc.
+./restore
+
+# Run techtalk.
+techtalk-pse
+#~/d/techtalk-pse/techtalk-pse
+
+./restore
diff --git a/2019-tech-introductions/style.css b/2019-tech-introductions/style.css
new file mode 100644 (file)
index 0000000..35588a8
--- /dev/null
@@ -0,0 +1,243 @@
+/* Red Hat red is rgb(204,0,0). */
+
+body {
+    background: url(redhat.png) no-repeat;
+    background-position: 98% 0;
+    /* font-size: 28pt; */ /* For max */
+    font-size: 20pt; /* For 1024x768 */
+    /* font-family: liberation, helvetica; */
+    font-family: helvetica;
+
+    /* Can be used to scale the whole document. */
+    /*transform: translate(-10%,-10%) scale(0.75,0.75);*/
+}
+
+body td, body th { /* why?? */
+    font-size: 24pt;
+    padding-bottom: 8px;
+}
+
+h1 {
+    color: rgb(204,0,0);
+    /*font-size: 48px;*/
+    font-size: 40px;
+    top: 8;
+    left: 0;
+    border-bottom: 2px solid rgb(204,0,0);
+}
+
+h2 {
+    color: rgb(204,0,0);
+    font-size: 32px;
+    font-style: italic;
+    border-bottom: 2px solid rgb(204,0,0);
+}
+
+b {
+    color: rgb(204,0,0);
+}
+
+/* Title page. */
+div#titlepage {
+    margin-top: 100px;
+    width: 80%;
+    margin-left: 10%;
+}
+
+div#titlepage p.title {
+    color: rgb(204,0,0);
+    font-weight: bold;
+    font-size: 48px;
+    text-align: left;
+}
+
+div#titlepage p.author {
+    font-size: 36px;
+    text-align: left;
+}
+
+div#titlepage p.abstract {
+    font-size: 28px;
+    text-align: left;
+}
+
+/* Code */
+pre.code {
+    margin-left: 1em;
+    background: #eee;
+}
+
+code {
+    color: rgb(204,0,0);
+}
+
+/* Bullet points */
+li {
+    padding-bottom: 16px;
+}
+
+/* Plugins box. */
+div.plugins {
+    background: #f8f8ff;
+    border: 1px solid rgb(204,0,0);
+    border-radius: 15px;
+    margin-left: auto;
+    margin-right: auto;
+    width: 800px;
+    height: 400px;
+    /* Position relative is needed so that items may be
+       positioned inside. */
+    position: relative;
+}
+
+div.plugins p#caption {
+    position: absolute;
+    bottom: -5px; right: 5px;
+    color: rgb(204,0,0);
+    text-align: right;
+    font-size: 16px;
+    font-weight: bold;
+}
+
+div.plugins ul {
+    position: absolute;
+    top: 10%;
+    width: 700px;
+    height: 380px;
+    column-count: 4;
+    list-style-type: none;
+    margin: 0;
+}
+
+div.plugins ul li {
+    padding: 0px;
+    margin: 5px;
+}
+
+div.plugins ul li.highlighted {
+    border: 1px solid rgb(204,0,0);
+    background: #fff;
+    padding-left: 10px;
+    color: rgb(204,0,0);
+    border-radius: 20px;
+    font-weight: bold;
+}
+
+/* Filters box. */
+div.filters {
+    background: #f8fff8;
+    border: 1px solid rgb(204,0,0);
+    border-radius: 15px;
+    margin-left: auto;
+    margin-right: auto;
+    width: 800px;
+    height: 200px;
+    /* Position relative is needed so that items may be
+       positioned inside. */
+    position: relative;
+}
+
+div.filters p.filtercaption {
+    position: absolute;
+    bottom: -5px; right: 5px;
+    color: rgb(204,0,0);
+    text-align: right;
+    font-size: 16px;
+    font-weight: bold;
+}
+
+div.filters ul {
+    position: absolute;
+    top: 10%;
+    width: 700px;
+    height: 180px;
+    column-count: 4;
+    list-style-type: none;
+    margin: 0;
+}
+
+div.filters ul li {
+    padding: 0px;
+    margin: 5px;
+}
+
+div.filters ul li.highlighted {
+    border: 1px solid rgb(204,0,0);
+    background: #fff;
+    padding-left: 10px;
+    color: rgb(204,0,0);
+    border-radius: 20px;
+    font-weight: bold;
+}
+
+/* For images which must be centered on the page. */
+div.allcenter {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 50vw;
+}
+
+div.all-center img {
+}
+
+/* Outlined text. */
+.outline {
+    text-shadow: 2px 2px 0 rgb(204,0,0),
+                 -2px 2px 0 rgb(204,0,0),
+                 2px -2px 0 rgb(204,0,0),
+                 -2px -2px 0 rgb(204,0,0),
+                 0px 2px 0 rgb(204,0,0),
+                 0px -2px 0 rgb(204,0,0),
+                 -2px 0px 0 rgb(204,0,0),
+                 2px 0px 0 rgb(204,0,0),
+                 4px 4px 0 rgb(204,0,0),
+                 -4px 4px 0 rgb(204,0,0),
+                 4px -4px 0 rgb(204,0,0),
+                 -4px -4px 0 rgb(204,0,0),
+
+                 0px 4px 0 rgb(204,0,0),
+                 0px -4px 0 rgb(204,0,0),
+                 -4px 0px 0 rgb(204,0,0),
+                 4px 0px 0 rgb(204,0,0),
+                 2px 4px 0 rgb(204,0,0),
+                 -2px 4px 0 rgb(204,0,0),
+                 2px -4px 0 rgb(204,0,0),
+                 -2px -4px 0 rgb(204,0,0),
+                 4px 2px 0 rgb(204,0,0),
+                 -4px 2px 0 rgb(204,0,0),
+                 4px -2px 0 rgb(204,0,0),
+                 -4px -2px 0 rgb(204,0,0),
+
+                 4px 4px 0 rgb(255,128,128),
+                 -4px 4px 0 rgb(255,128,128),
+                 4px -4px 0 rgb(255,128,128),
+                 -4px -4px 0 rgb(255,128,128),
+                 0px 4px 0 rgb(255,128,128),
+                 0px -4px 0 rgb(255,128,128),
+                 -4px 0px 0 rgb(255,128,128),
+                 4px 0px 0 rgb(255,128,128),
+                 8px 8px 0 rgb(255,128,128),
+                 -8px 8px 0 rgb(255,128,128),
+                 8px -8px 0 rgb(255,128,128),
+                 -8px -8px 0 rgb(255,128,128),
+
+                 0px 8px 0 rgb(255,128,128),
+                 0px -8px 0 rgb(255,128,128),
+                 -8px 0px 0 rgb(255,128,128),
+                 8px 0px 0 rgb(255,128,128),
+                 4px 8px 0 rgb(255,128,128),
+                 -4px 8px 0 rgb(255,128,128),
+                 4px -8px 0 rgb(255,128,128),
+                 -4px -8px 0 rgb(255,128,128),
+                 8px 4px 0 rgb(255,128,128),
+                 -8px 4px 0 rgb(255,128,128),
+                 8px -4px 0 rgb(255,128,128),
+                 -8px -4px 0 rgb(255,128,128);
+}
+
+/* Warning symbol. */
+span.warning {
+    background-color: yellow;
+    font-weight: bold;
+}
diff --git a/2019-tech-introductions/universal-connector-1.svg b/2019-tech-introductions/universal-connector-1.svg
new file mode 100644 (file)
index 0000000..fac6a67
--- /dev/null
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="130.70972mm"
+   height="50.31411mm"
+   viewBox="0 0 130.70972 50.31411"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="universal-connector-1.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1139"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1137"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect1135"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path854"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect849"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="253.0562"
+     inkscape:cy="67.767775"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.2544057,2.1708934)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect815"
+       width="23.434523"
+       height="15.497025"
+       x="17.386906"
+       y="14.840774" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="21.355656"
+       y="22.589285"
+       id="text819"><tspan
+         sodipodi:role="line"
+         id="tspan817"
+         x="21.355656"
+         y="22.589285"
+         style="stroke-width:0.26458332">qemu</tspan></text>
+    <rect
+       y="14.840774"
+       x="60.249447"
+       height="15.497025"
+       width="23.434523"
+       id="rect821"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text825"
+       y="22.589285"
+       x="64.218193"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="22.589285"
+         x="64.218193"
+         id="tspan823"
+         sodipodi:role="line">?</tspan></text>
+    <g
+       id="g845"
+       transform="translate(-0.52916667,-6.879167)">
+      <rect
+         y="14.840774"
+         x="104.17031"
+         height="30.04911"
+         width="24.190483"
+         id="rect827"
+         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         id="text831"
+         y="22.589285"
+         x="108.13906"
+         style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="stroke-width:0.26458332"
+           y="22.589285"
+           x="108.13906"
+           id="tspan829"
+           sodipodi:role="line">http</tspan><tspan
+           id="tspan833"
+           style="stroke-width:0.26458332"
+           y="27.880951"
+           x="108.13906"
+           sodipodi:role="line">imageio</tspan><tspan
+           id="tspan835"
+           style="stroke-width:0.26458332"
+           y="33.172619"
+           x="108.13906"
+           sodipodi:role="line">ssh</tspan><tspan
+           id="tspan837"
+           style="stroke-width:0.26458332"
+           y="38.464283"
+           x="108.13906"
+           sodipodi:role="line">vddk</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988"
+       id="path847"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect849"
+       inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" />
+    <path
+       inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988"
+       inkscape:path-effect="#path-effect1135"
+       inkscape:connector-curvature="0"
+       id="path1133"
+       d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988"
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1139)"
+       transform="translate(42.862521)" />
+  </g>
+</svg>
diff --git a/2019-tech-introductions/universal-connector-2.svg b/2019-tech-introductions/universal-connector-2.svg
new file mode 100644 (file)
index 0000000..27b2c35
--- /dev/null
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="130.70972mm"
+   height="77.417534mm"
+   viewBox="0 0 130.70972 77.417534"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="universal-connector-2.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1139"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1137"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect1135"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path854"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect849"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="253.0562"
+     inkscape:cy="170.20591"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.2544057,2.1708934)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect815"
+       width="23.434523"
+       height="15.497025"
+       x="17.386906"
+       y="14.840774" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="21.355656"
+       y="22.589285"
+       id="text819"><tspan
+         sodipodi:role="line"
+         id="tspan817"
+         x="21.355656"
+         y="22.589285"
+         style="stroke-width:0.26458332">qemu</tspan></text>
+    <rect
+       y="14.840774"
+       x="60.249447"
+       height="15.497025"
+       width="23.434523"
+       id="rect821"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text825"
+       y="22.589285"
+       x="64.218193"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="22.589285"
+         x="64.218193"
+         id="tspan823"
+         sodipodi:role="line">nbdkit</tspan></text>
+    <g
+       id="g845"
+       transform="translate(-0.52916667,-6.879167)">
+      <rect
+         y="14.840774"
+         x="104.17031"
+         height="30.04911"
+         width="24.190483"
+         id="rect827"
+         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         id="text831"
+         y="22.589285"
+         x="108.13906"
+         style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="stroke-width:0.26458332"
+           y="22.589285"
+           x="108.13906"
+           id="tspan829"
+           sodipodi:role="line">http</tspan><tspan
+           id="tspan833"
+           style="stroke-width:0.26458332"
+           y="27.880951"
+           x="108.13906"
+           sodipodi:role="line">imageio</tspan><tspan
+           id="tspan835"
+           style="stroke-width:0.26458332"
+           y="33.172619"
+           x="108.13906"
+           sodipodi:role="line">ssh</tspan><tspan
+           id="tspan837"
+           style="stroke-width:0.26458332"
+           y="38.464283"
+           x="108.13906"
+           sodipodi:role="line">vddk</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988"
+       id="path847"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect849"
+       inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" />
+    <path
+       inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988"
+       inkscape:path-effect="#path-effect1135"
+       inkscape:connector-curvature="0"
+       id="path1133"
+       d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988"
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1139)"
+       transform="translate(42.862521)" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="29.139225"
+       y="28.450657"
+       id="text1672"><tspan
+         sodipodi:role="line"
+         id="tspan1670"
+         x="29.139225"
+         y="28.450657"
+         style="font-size:2.11666656px;stroke-width:0.26458332">nbd client</tspan></text>
+    <image
+       y="31.795746"
+       x="55.446369"
+       id="image1752"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf
+IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7
+Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAEsASwDASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii
+gAooooAKKKr3d0LWMEIZJHOEQdz/AEFAFiis4DV5Pm8yCLP8Hllsfjmjy9X/AOfm3/78n/4qgDRo
+rO8vV/8An5t/+/J/+KoKauoyJ7dsfw+URn8c0AaNFVLO9a4Z4povJnj+8mcgj1B9KtUALRVW7vPs
++1I4zLM/3UBx+JPYVAH1dudlsue3PFAGjRWdnV/7tt+tGdX/ALtt+tAGjRWa0urx/MYbeQD+FSQT
++NWrS7S7iLqpRlOHRuqmgCxRSU2SRYY2kc4VRkmgB9FZwudRuPngt44o+3mklj+A6UZ1f0tvyNAG
+jRWdu1f0tvyNGdX9Lb8jQBo0VQgvplnW3vYRE7/cdTlW9vY1foAKKa7rGhdyFVRkk9qoC7v7n5rW
+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
+"
+       preserveAspectRatio="none"
+       height="33.450893"
+       width="33.450893" />
+  </g>
+</svg>
diff --git a/2019-tech-introductions/universal-connector-3.svg b/2019-tech-introductions/universal-connector-3.svg
new file mode 100644 (file)
index 0000000..8151f45
--- /dev/null
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="130.70972mm"
+   height="77.417534mm"
+   viewBox="0 0 130.70972 77.417534"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="universal-connector-3.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1939"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1937"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1929"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1139"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1137"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect1135"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path854"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect849"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="300.42213"
+     inkscape:cy="170.20591"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.2544057,2.1708934)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect815"
+       width="23.434523"
+       height="15.497025"
+       x="17.386906"
+       y="14.840774" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="21.355656"
+       y="22.589285"
+       id="text819"><tspan
+         sodipodi:role="line"
+         id="tspan817"
+         x="21.355656"
+         y="22.589285"
+         style="stroke-width:0.26458332">qemu</tspan></text>
+    <rect
+       y="14.840774"
+       x="60.249447"
+       height="15.497025"
+       width="23.434523"
+       id="rect821"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text825"
+       y="22.589285"
+       x="64.218193"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="22.589285"
+         x="64.218193"
+         id="tspan823"
+         sodipodi:role="line">nbdkit</tspan></text>
+    <g
+       id="g845"
+       transform="translate(-0.52916667,-6.879167)">
+      <rect
+         y="14.840774"
+         x="104.17031"
+         height="30.04911"
+         width="24.190483"
+         id="rect827"
+         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         id="text831"
+         y="22.589285"
+         x="108.13906"
+         style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="stroke-width:0.26458332"
+           y="22.589285"
+           x="108.13906"
+           id="tspan829"
+           sodipodi:role="line">http</tspan><tspan
+           id="tspan833"
+           style="stroke-width:0.26458332"
+           y="27.880951"
+           x="108.13906"
+           sodipodi:role="line">imageio</tspan><tspan
+           id="tspan835"
+           style="stroke-width:0.26458332"
+           y="33.172619"
+           x="108.13906"
+           sodipodi:role="line">ssh</tspan><tspan
+           id="tspan837"
+           style="stroke-width:0.26458332"
+           y="38.464283"
+           x="108.13906"
+           sodipodi:role="line">vddk</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988"
+       id="path847"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect849"
+       inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" />
+    <path
+       inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988"
+       inkscape:path-effect="#path-effect1135"
+       inkscape:connector-curvature="0"
+       id="path1133"
+       d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988"
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1139)"
+       transform="translate(42.862521)" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="29.139225"
+       y="28.450657"
+       id="text1672"><tspan
+         sodipodi:role="line"
+         id="tspan1670"
+         x="29.139225"
+         y="28.450657"
+         style="font-size:2.11666656px;stroke-width:0.26458332">nbd client</tspan></text>
+    <image
+       y="31.795746"
+       x="55.446369"
+       id="image1752"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf
+IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7
+Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAEsASwDASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii
+gAooooAKKKr3d0LWMEIZJHOEQdz/AEFAFiis4DV5Pm8yCLP8Hllsfjmjy9X/AOfm3/78n/4qgDRo
+rO8vV/8An5t/+/J/+KoKauoyJ7dsfw+URn8c0AaNFVLO9a4Z4povJnj+8mcgj1B9KtUALRVW7vPs
++1I4zLM/3UBx+JPYVAH1dudlsue3PFAGjRWdnV/7tt+tGdX/ALtt+tAGjRWa0urx/MYbeQD+FSQT
++NWrS7S7iLqpRlOHRuqmgCxRSU2SRYY2kc4VRkmgB9FZwudRuPngt44o+3mklj+A6UZ1f0tvyNAG
+jRWdu1f0tvyNGdX9Lb8jQBo0VQgvplnW3vYRE7/cdTlW9vY1foAKKa7rGhdyFVRkk9qoC7v7n5rW
+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
+"
+       preserveAspectRatio="none"
+       height="33.450893"
+       width="33.450893" />
+    <image
+       y="9.9701509"
+       x="117.92583"
+       id="image1855"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA1xJREFU
+WIXtlk9IHGcYh5/5ZrRLdmd3NqmyBlZNMDEBYQOxULDdKl5MPGhPUkqqJTkUqbWWQk9p01sPbVha
+CZQ2bNpDaQP1T1OhoQna4FLGEt0iaYKGpBJvWdlo6vpnZ/ftwWgv2Y1pFr34g7nMzDfPMy/v+83A
+TnZS+HQDw0BoO+ChsooyOR09LcDEdggMnxs+J7bY0tjdKMBHWwlvD7eExRZbvr7/lQT6SsSoNAR4
+ZSvgPtNvJvvv9osttrxwrVZKBvfInrN+Ae4CvlwLVYEEzrS902btrdxL38yP3F6cJqtnUFUanpPu
+SiBSIM5jEzoQOiC22HI1fVUCv5WK91ePWL94ZfeQJc9f2i1FNYaQYyqMAghEeiI9AHxx53PmZQGl
+KwQQTZCMIFruxc8q0N7c3lx/tP4o4wvj/Dw3hDLUI6hARpH6dAln0okAf/5fSK4u9pl+M3kleUVs
+saX6r2pRY5oYv+tSHCsS17XnxOgwBIjme/iTmjBaVlE2AvQ/5tqZUx+eskzLZDAxyOzKLJquyBhZ
+MnqW9GUH54ITB9584ivmiM/0m0lbbAm3hIW1LXY9G4037AxLza0aCUwGxBf3SfF4sWhfaus7Yc7x
+W0++CrQef+O4lZUsrb2teIPeCP91cqTzbCeLmUUu3r+IQuHRPXh0D67bLuR9eQB0APPPIvBu89vN
+zDvzrLpXafu2DZflGgC6G0401JfXlXMzdZOp1BQe3YOpm+xK7SL1XuoBD6lnk02n5zhfcfjlw580
+djaykFnAwcEsNXGVuKyZ2ExTV18XTpHDxD8TpEmjUGQfZpk6McXqndW3gMubgUPuMezY/9J+5pw5
+vLoXj+5BR6fu9TpKK0pZdi+TWEkgCKZuoqMT/yDO0q2lDuCbzcLzVSA+PTrd5A/6A7W1tShNoTSF
+hoZVbrGYXSQjGTRNQ2mKWE+Me5fuXQA+fhp4PoEV4PvJocmm4L5g4OCRg2sSKDRNw9AMFGtSN364
+wdhnYwPAa08LzyewIRH7KdYU3BcMVB+p3oCuH9e/u85A10AcaH10f0EFNiRGB0cPJWYShxpebdio
+wuzkLOdPnv87vZx+kU2MWyESPdZ+TEacEen9o1fcljvJNvz3RcMtYakKVeX8vG5FWrYTvpOdFDz/
+AqucSLeWBLo9AAAAAElFTkSuQmCC
+"
+       preserveAspectRatio="none"
+       height="5.5373507"
+       width="5.5373507" />
+    <image
+       y="15.507502"
+       x="123.46318"
+       id="image1920"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA3hJREFU
+WIXtl19oW2UYxn9N21iXxqQzdhNsm7F1UFeXXQmi0NjhHIW5DrToVdIrQRCZgwmiF3P2QtCtvVK8
+yRH8hxfqlDFF1OxmILohuDtl7VzLZpKu+deTNDnf93pxkrTFJCeVSb3oC4fznfO+vM9zvvc5D+fA
+JoaI4NpMAsAWgS0Cm0+go8W6ASBcWceB63eotqWI9AUC8sqxcTl59CkZCASWgEij2gf8fjkxGpYT
+4RHp9/ub1SIitDmAjwz398UvnjoFxQJtN2+RSS9x5NPPuJpIRIEP1oJPHDhgTB87ipRWILVIJpvl
+0LmvmTfNIHV2QkQcRxB+fnQUyefo/P4HXOk0AeDC3kHGzGXjt/wyFRKRidB+4+yRMbS5TNvlK0g2
+h0c0T/t9TJvmODBTD8BRhPe43bh+/wNXOl2752tv53woxLDHYwCxZx4aNs6MHUabJvLzL1iZDGVl
+UVYKpXXT/k4Efv3k0iWkWADsLdNao7RmWxt8se9BXg7tj545fAhtmujLVyrgirJSWErxUy4Pthjr
+hpMGAGLPBYPR9/r7UBUCWgQlGq0F3e5C7x1EX5tF5fO1vBbNqzcW+HIpPQ0cr9e4FRHWSDzb2xud
+2bN7HYDS9llXzyKoSv61+QXOpTMGMNmo6UYIAMQmAoHoO7uC9tOL1AXWonl94SZfOYD/GwIAP740
+0B9+cXuPPY7a06+u302meD+1GAced2q20e+ByND2nvDko4+gd+7AqoisepSVwtKKCZ+XQbc7TBMD
+WhutEogM9fiNj58YpVtZlJLJitI1ZV1VvKasFF3AzP072OPuNFoh0coIIkN+n/HRwTBeoDA7h1Uo
+/EMDa69FhKxSHP8rybWyFWW9Y9aiJSse8vniH4YfwwuY1//EKhbXAZ/P5njSs61GQmRVEzmleSGR
+IqF0kAZW7DSCcGR3kG5lkZ+do2QW7Jlre8tP30owlUjNTSVSWFqjdDVn57tEOHh3F8B4IwBHDXiB
+4uJtSoVCDdhSijcTSS7klw1g17fLpvFW6nYlZzul0hqr8mo2C0cr/vzGPGplZVXxWjGVSPGNDV59
+zye/MwvG20uZGnCVxNVSGZpYcSsRG/F2y/TOXjl9370SusstQKxR7cPuTnnD1y0nvR7Z19EhwNlG
+jTdiRBEgWFnHgYt3olYcxvOfx9af0RaB/wWBvwE6SlaiRvidkgAAAABJRU5ErkJggg==
+"
+       preserveAspectRatio="none"
+       height="7.5217257"
+       width="7.5217257" />
+    <image
+       width="7.5217257"
+       height="7.5217257"
+       preserveAspectRatio="none"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA3hJREFU
+WIXtl19oW2UYxn9N21iXxqQzdhNsm7F1UFeXXQmi0NjhHIW5DrToVdIrQRCZgwmiF3P2QtCtvVK8
+yRH8hxfqlDFF1OxmILohuDtl7VzLZpKu+deTNDnf93pxkrTFJCeVSb3oC4fznfO+vM9zvvc5D+fA
+JoaI4NpMAsAWgS0Cm0+go8W6ASBcWceB63eotqWI9AUC8sqxcTl59CkZCASWgEij2gf8fjkxGpYT
+4RHp9/ub1SIitDmAjwz398UvnjoFxQJtN2+RSS9x5NPPuJpIRIEP1oJPHDhgTB87ipRWILVIJpvl
+0LmvmTfNIHV2QkQcRxB+fnQUyefo/P4HXOk0AeDC3kHGzGXjt/wyFRKRidB+4+yRMbS5TNvlK0g2
+h0c0T/t9TJvmODBTD8BRhPe43bh+/wNXOl2752tv53woxLDHYwCxZx4aNs6MHUabJvLzL1iZDGVl
+UVYKpXXT/k4Efv3k0iWkWADsLdNao7RmWxt8se9BXg7tj545fAhtmujLVyrgirJSWErxUy4Pthjr
+hpMGAGLPBYPR9/r7UBUCWgQlGq0F3e5C7x1EX5tF5fO1vBbNqzcW+HIpPQ0cr9e4FRHWSDzb2xud
+2bN7HYDS9llXzyKoSv61+QXOpTMGMNmo6UYIAMQmAoHoO7uC9tOL1AXWonl94SZfOYD/GwIAP740
+0B9+cXuPPY7a06+u302meD+1GAced2q20e+ByND2nvDko4+gd+7AqoisepSVwtKKCZ+XQbc7TBMD
+WhutEogM9fiNj58YpVtZlJLJitI1ZV1VvKasFF3AzP072OPuNFoh0coIIkN+n/HRwTBeoDA7h1Uo
+/EMDa69FhKxSHP8rybWyFWW9Y9aiJSse8vniH4YfwwuY1//EKhbXAZ/P5njSs61GQmRVEzmleSGR
+IqF0kAZW7DSCcGR3kG5lkZ+do2QW7Jlre8tP30owlUjNTSVSWFqjdDVn57tEOHh3F8B4IwBHDXiB
+4uJtSoVCDdhSijcTSS7klw1g17fLpvFW6nYlZzul0hqr8mo2C0cr/vzGPGplZVXxWjGVSPGNDV59
+zye/MwvG20uZGnCVxNVSGZpYcSsRG/F2y/TOXjl9370SusstQKxR7cPuTnnD1y0nvR7Z19EhwNlG
+jTdiRBEgWFnHgYt3olYcxvOfx9af0RaB/wWBvwE6SlaiRvidkgAAAABJRU5ErkJggg==
+"
+       id="image1923"
+       x="115.33669"
+       y="21.082651" />
+    <image
+       y="27.224764"
+       x="117.98253"
+       id="image1925"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA3hJREFU
+WIXtl19oW2UYxn9N21iXxqQzdhNsm7F1UFeXXQmi0NjhHIW5DrToVdIrQRCZgwmiF3P2QtCtvVK8
+yRH8hxfqlDFF1OxmILohuDtl7VzLZpKu+deTNDnf93pxkrTFJCeVSb3oC4fznfO+vM9zvvc5D+fA
+JoaI4NpMAsAWgS0Cm0+go8W6ASBcWceB63eotqWI9AUC8sqxcTl59CkZCASWgEij2gf8fjkxGpYT
+4RHp9/ub1SIitDmAjwz398UvnjoFxQJtN2+RSS9x5NPPuJpIRIEP1oJPHDhgTB87ipRWILVIJpvl
+0LmvmTfNIHV2QkQcRxB+fnQUyefo/P4HXOk0AeDC3kHGzGXjt/wyFRKRidB+4+yRMbS5TNvlK0g2
+h0c0T/t9TJvmODBTD8BRhPe43bh+/wNXOl2752tv53woxLDHYwCxZx4aNs6MHUabJvLzL1iZDGVl
+UVYKpXXT/k4Efv3k0iWkWADsLdNao7RmWxt8se9BXg7tj545fAhtmujLVyrgirJSWErxUy4Pthjr
+hpMGAGLPBYPR9/r7UBUCWgQlGq0F3e5C7x1EX5tF5fO1vBbNqzcW+HIpPQ0cr9e4FRHWSDzb2xud
+2bN7HYDS9llXzyKoSv61+QXOpTMGMNmo6UYIAMQmAoHoO7uC9tOL1AXWonl94SZfOYD/GwIAP740
+0B9+cXuPPY7a06+u302meD+1GAced2q20e+ByND2nvDko4+gd+7AqoisepSVwtKKCZ+XQbc7TBMD
+WhutEogM9fiNj58YpVtZlJLJitI1ZV1VvKasFF3AzP072OPuNFoh0coIIkN+n/HRwTBeoDA7h1Uo
+/EMDa69FhKxSHP8rybWyFWW9Y9aiJSse8vniH4YfwwuY1//EKhbXAZ/P5njSs61GQmRVEzmleSGR
+IqF0kAZW7DSCcGR3kG5lkZ+do2QW7Jlre8tP30owlUjNTSVSWFqjdDVn57tEOHh3F8B4IwBHDXiB
+4uJtSoVCDdhSijcTSS7klw1g17fLpvFW6nYlZzul0hqr8mo2C0cr/vzGPGplZVXxWjGVSPGNDV59
+zye/MwvG20uZGnCVxNVSGZpYcSsRG/F2y/TOXjl9370SusstQKxR7cPuTnnD1y0nvR7Z19EhwNlG
+jTdiRBEgWFnHgYt3olYcxvOfx9af0RaB/wWBvwE6SlaiRvidkgAAAABJRU5ErkJggg==
+"
+       preserveAspectRatio="none"
+       height="7.5217257"
+       width="7.5217257" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1939)"
+       d="M 40.705298,17.132804 C 52.328382,13.352939 63.95115,9.5731777 74.86501,8.8960113 85.77887,8.2188449 95.984505,10.644258 106.18967,13.06956"
+       id="path1927"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect1929"
+       inkscape:original-d="M 40.705298,17.132804 C 52.32833,13.352778 63.951097,9.5730158 75.573602,5.7935186 85.778944,8.2185351 95.984579,10.643948 106.18967,13.06956" />
+    <text
+       id="text1973"
+       y="17.867313"
+       x="28.610058"
+       style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="font-size:2.11666656px;stroke-width:0.26458332"
+         y="17.867313"
+         x="28.610058"
+         id="tspan1971"
+         sodipodi:role="line">http client</tspan></text>
+  </g>
+</svg>
diff --git a/2019-tech-introductions/warm-migrations-2.svg b/2019-tech-introductions/warm-migrations-2.svg
new file mode 100644 (file)
index 0000000..b88ea99
--- /dev/null
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="129.42459mm"
+   height="40.338345mm"
+   viewBox="0 0 129.42459 40.338345"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="warm-migrations-2.svg">
+  <defs
+     id="defs2">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1597"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1593"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1589"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1553"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1939"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1937"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1929"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect1135"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect849"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="248.14691"
+     inkscape:cy="41.572609"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.2544057,-0.87406835)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect815"
+       width="23.434523"
+       height="15.497025"
+       x="17.386906"
+       y="14.840774" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1939)"
+       d="m 40.705298,17.132804 c 10.615145,-3.055398 21.229976,-6.110705 31.545505,-6.126383 10.315529,-0.01568 20.331896,3.00813 30.348097,6.031889"
+       id="path1927"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect1929"
+       inkscape:original-d="M 40.705298,17.132804 C 51.320393,14.077232 61.935224,11.021925 72.549792,7.9668817 82.566427,10.990427 92.582794,14.014235 102.5989,17.03831"
+       sodipodi:nodetypes="ccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="20.804852"
+       y="23.652889"
+       id="text1529"><tspan
+         sodipodi:role="line"
+         id="tspan1527"
+         x="20.804852"
+         y="23.652889"
+         style="stroke-width:0.26458332">VMware</tspan></text>
+    <rect
+       y="14.840774"
+       x="103.11198"
+       height="15.497025"
+       width="23.434523"
+       id="rect1531"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text1535"
+       y="23.652889"
+       x="110.23409"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="23.652889"
+         x="110.23409"
+         id="tspan1533"
+         sodipodi:role="line">KVM</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="105.33923"
+       y="28.850063"
+       id="text1539"><tspan
+         sodipodi:role="line"
+         id="tspan1537"
+         x="105.33923"
+         y="28.850063"
+         style="font-size:2.11666656px;stroke-width:0.26458332">RHV, OSP, etc.</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1541"
+       width="5.6696429"
+       height="7.1815472"
+       x="47.319881"
+       y="19.117176" />
+    <rect
+       y="15.998873"
+       x="57.052769"
+       height="7.1815472"
+       width="5.6696429"
+       id="rect1543"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1545"
+       width="5.6696429"
+       height="7.1815472"
+       x="67.636101"
+       y="15.24292" />
+    <rect
+       y="15.904378"
+       x="77.652473"
+       height="7.1815472"
+       width="5.6696429"
+       id="rect1547"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1549"
+       width="5.6696429"
+       height="7.1815472"
+       x="86.912888"
+       y="17.983248" />
+    <path
+       style="fill:none;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.611548,31.212413 c 6.079436,-2.362475 12.158554,-4.724826 17.859613,-4.992471 5.701059,-0.267644 11.024224,1.559241 16.347233,3.386072"
+       id="path1551"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect1553"
+       inkscape:original-d="m 52.611548,31.212413 c 6.079381,-2.362615 12.158499,-4.724967 18.237352,-7.087053 5.323429,1.82662 10.646594,3.653505 15.969494,5.480654"
+       sodipodi:nodetypes="ccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       id="text1557"
+       transform="rotate(9.4952474,66.336364,58.396456)"><textPath
+         xlink:href="#path1551"
+         id="textPath1559"><tspan
+   style="stroke:none;stroke-width:0.26458332"
+   id="tspan1555">snapshots</tspan></textPath></text>
+    <text
+       transform="rotate(1.4041511)"
+       id="text1585"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"
+       x="54.315987"
+       y="32.761391">changed blocks</text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 54.406936,29.49515 c 4.441533,-1.228509 8.882752,-2.456931 12.504893,-2.992353 3.622141,-0.535421 6.42566,-0.37792 8.315488,-0.236177 1.889827,0.141743 2.866353,0.267746 3.795416,0.456716 0.929062,0.188969 1.811212,0.441012 2.692981,0.692946"
+       id="path1595"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect1597"
+       inkscape:original-d="m 54.406936,29.49515 c 4.441484,-1.228687 8.882703,-2.457109 13.32366,-3.685267 2.80339,0.157214 5.606909,0.314715 8.409969,0.47247 0.976617,0.125716 1.953143,0.251719 2.929316,0.377976 0.882004,0.251661 1.764154,0.503704 2.645833,0.755953" />
+  </g>
+</svg>
diff --git a/2019-tech-introductions/warm-migrations.svg b/2019-tech-introductions/warm-migrations.svg
new file mode 100644 (file)
index 0000000..99eee10
--- /dev/null
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="129.42459mm"
+   height="40.338345mm"
+   viewBox="0 0 129.42459 40.338345"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="warm-migrations.svg">
+  <defs
+     id="defs2">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1553"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1939"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1937"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect1929"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect1135"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect849"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="248.14691"
+     inkscape:cy="41.572609"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.2544057,-0.87406835)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect815"
+       width="23.434523"
+       height="15.497025"
+       x="17.386906"
+       y="14.840774" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1939)"
+       d="m 40.705298,17.132804 c 10.615145,-3.055398 21.229976,-6.110705 31.545505,-6.126383 10.315529,-0.01568 20.331896,3.00813 30.348097,6.031889"
+       id="path1927"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect1929"
+       inkscape:original-d="M 40.705298,17.132804 C 51.320393,14.077232 61.935224,11.021925 72.549792,7.9668817 82.566427,10.990427 92.582794,14.014235 102.5989,17.03831"
+       sodipodi:nodetypes="ccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="20.804852"
+       y="23.652889"
+       id="text1529"><tspan
+         sodipodi:role="line"
+         id="tspan1527"
+         x="20.804852"
+         y="23.652889"
+         style="stroke-width:0.26458332">VMware</tspan></text>
+    <rect
+       y="14.840774"
+       x="103.11198"
+       height="15.497025"
+       width="23.434523"
+       id="rect1531"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text1535"
+       y="23.652889"
+       x="110.23409"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="23.652889"
+         x="110.23409"
+         id="tspan1533"
+         sodipodi:role="line">KVM</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="105.33923"
+       y="28.850063"
+       id="text1539"><tspan
+         sodipodi:role="line"
+         id="tspan1537"
+         x="105.33923"
+         y="28.850063"
+         style="font-size:2.11666656px;stroke-width:0.26458332">RHV, OSP, etc.</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1541"
+       width="5.6696429"
+       height="7.1815472"
+       x="47.319881"
+       y="19.117176" />
+    <rect
+       y="15.998873"
+       x="57.052769"
+       height="7.1815472"
+       width="5.6696429"
+       id="rect1543"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1545"
+       width="5.6696429"
+       height="7.1815472"
+       x="67.636101"
+       y="15.24292" />
+    <rect
+       y="15.904378"
+       x="77.652473"
+       height="7.1815472"
+       width="5.6696429"
+       id="rect1547"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1549"
+       width="5.6696429"
+       height="7.1815472"
+       x="86.912888"
+       y="17.983248" />
+    <path
+       style="fill:none;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.611548,31.212413 c 6.079436,-2.362475 12.158554,-4.724826 17.859613,-4.992471 5.701059,-0.267644 11.024224,1.559241 16.347233,3.386072"
+       id="path1551"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect1553"
+       inkscape:original-d="m 52.611548,31.212413 c 6.079381,-2.362615 12.158499,-4.724967 18.237352,-7.087053 5.323429,1.82662 10.646594,3.653505 15.969494,5.480654"
+       sodipodi:nodetypes="ccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       id="text1557"
+       transform="rotate(9.4952474,66.336364,58.396456)"><textPath
+         xlink:href="#path1551"
+         id="textPath1559"><tspan
+   style="stroke:none;stroke-width:0.26458332"
+   id="tspan1555">snapshots</tspan></textPath></text>
+  </g>
+</svg>