<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">

  <title>Eclipse Ditto: Eclipse IoT WG status update</title>

  <meta name="description" content="Eclipse Ditto: Eclipse IoT WG status update">
  <meta name="author" content="Thomas Jäckle">
  <meta name="date" content="2020-07-28">
  <meta http-equiv="content-language" content="en">

  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

  <link rel="icon" type="image/png" href="../../images/favicon-16x16.png" sizes="16x16">
  <link rel="icon" type="image/png" href="../../images/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="../../images/favicon-96x96.png" sizes="96x96">

  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=News+Cycle">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
        integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">


  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/reveal.min.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/theme/simple.min.css"
        id="theme">

  <!-- Theme used for syntax highlighting of code -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/css/zenburn.min.css">

  <style>
    @font-face {
      font-family: "News Cycle";
    }

    #header-left {
      position: absolute;
      top: 0%;
      left: 0%;
      opacity: 1 !important;
    }

    #header-right {
      position: absolute;
      top: 0%;
      right: 0%;
      opacity: 1 !important;
    }

    .reveal section img {
      background: none;
      border: none;
      box-shadow: none;
    }

    .dim-background .slide-background {
      opacity: 0.3 !important;
      /*background: none !important;  for printing ! */
      /* print with: file:///C:/...../index.html?print-pdf */
    }

    .chapter-background .slide-background {
      opacity: 0.7 !important;
      /*background: none !important;*/ /* for printing ! */
    }

    .print-pdf .reveal .slide-background {
      opacity: 0.7 !important;
    }

    .dim-background .slide-background.past {
      display: none !important;
    }

    .dim-background .slide-background.future {
      display: none !important;
    }

    .chapter-background .slide-background.past {
      display: none !important;
    }

    .chapter-background .slide-background.future {
      display: none !important;
    }

    /*.new-chapter h3 { color: #586e75; }*/
    .introlink a:link {
      font-weight: bold;
      color: #000000
    }

    /* unvisited links */
    .introlink a:visited {
      font-weight: bold;
      color: #000000
    }

    /* visited links   */
    .introlink a:hover {
      font-weight: bold;
      color: #000000
    }

    /* user hovers     */
    .introlink a:active {
      font-weight: bold;
      color: #000000
    }

    ul {
      list-style: none !important;
    }

    ul li {
      padding-left: 1.3em;
    }

    ul li:before {
      list-style: none;
      content: "→";
      display: inline-block;
      margin-left: -1.3em; /* same as padding-left set on li */
      width: 1.3em; /* same as padding-left set on li */
    }

    .footer {
      font-size: 12px !Important;
      font-family: "News Cycle", Impact, sans-serif;
      color: #687175;
      position: absolute;
      bottom: 15px;
      left: 15px;
      margin-bottom: 10px
    }

    .footer a {
      color: #003b6a;
      text-decoration: none;
    }

    /* active links    */
  </style>

  <!-- Printing and PDF exports -->
  <script>
    var link = document.createElement('link');
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href =
      window.location.search.match(/print-pdf/gi)
      ? 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/print/pdf.min.css'
      : 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/print/paper.min.css';
    document.getElementsByTagName('head')[0].appendChild(link);
  </script>

  <!--[if lt IE 9]>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/js/html5shiv.js"></script>
  <![endif]-->
</head>

<body>

<div class="reveal">

    <!-- 2. Create hidden header/footer <div> -->
    <div id="hidden" style="display:none;">
        <div id="header">
            <div id="header-left"><img src="../../images/ditto.svg" style="width: 80px; padding-top: 10px; padding-left: 10px" alt="Ditto logo"></div>
            <div id="header-right"><img src="../../images/iot_logo.svg" style="width: 120px; padding-top: 10px; padding-right: 10px" alt="Eclipse IoT logo"></div>
        </div>
    </div>

    <!-- Any section element inside of this container is displayed as a slide -->
    <div class="slides">
        <!-- Section: Intro -->
        <section>
            <section id="title" class="new-chapter" data-background="../bg-images/background-twin-small.jpg" data-state="chapter-background">
                <!-- background source: https://unsplash.com/collections/425779/iot -->
              <h1 style="line-height: 1em">
                <img src="../../images/iot_logo.svg" style="width: 15%;vertical-align: top; padding-right: 20px" alt="Eclipse IoT">
                <img src="../../images/ditto.svg" style="width: 15%;vertical-align: middle" alt="Eclipse Ditto">
              </h1>
              <h1 style="font-size: 2em; padding-top: 1em">Eclipse Ditto</h1>
              <h1 style="font-size: 1.5em;">Eclipse IoT WG status update</h1>
              <h2 style="font-size: 0.8em">28.07.2020</h2>
            </section>
        </section>

        <!-- Section: Digital Twins -->
        <section style="clear: both;">
            <section id="twin" class="new-chapter" data-background="../bg-images/background-twin-small.jpg"
                     data-state="chapter-background">
                <!-- background source: https://unsplash.com/search/twin?photo=SmAiLn-nnJg -->
                <h1>Digital Twins</h1>
                <br/>
                <ul>
                    <li class="fragment">digital representation of real physical devices</li>
                    <li class="fragment" style="margin-top: 1em;">act as broker for communicating with assets</li>
                    <li class="fragment" style="margin-top: 1em;">applicable for both industrial and consumer-centric IoT scenarios</li>
                </ul>
            </section>
        </section>

      <section id="status-1" style="clear: both;">
        <h2>Ditto in context</h2>
        <div style="text-align: left; float: left; width: 65%">
          <img src="../images/ditto-in-action-2020.png" style="width: 90%;padding-top:0.5em" alt="Ditto in action"/>
        </div>
        <div style="text-align: left; float: right; width: 35%">
          <p style="padding-top:3.5em">Ditto as <br/>Digital Twin<br/> "middleware"</p>
        </div>
      </section>

      <section id="status-2" style="clear: both;">
        <h2>Stats</h2>
        <br/>
        <table style="font-size: 0.9em;">
          <tr>
            <td></td>
            <th>2018 (oct)</th>
            <th>2019 (oct)</th>
            <th>2020 (jul)</th>
          </tr>
          <tr>
            <td>Github stars</td>
            <td>65</td>
            <td>117</td>
            <td>178</td>
          </tr>
          <tr>
            <td>Docker image pulls</td>
            <td><a href="https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=eclipse%2Fditto-&starCount=0">~ 1.200</a></td>
            <td><a href="https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=eclipse%2Fditto-&starCount=0">~ 3.200</a></td>
            <td><a href="https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=eclipse%2Fditto-&starCount=0">~ 10.000</a></td>
          </tr>
          <tr>
            <td>Active committers</td>
            <td>8</td>
            <td>9</td>
            <td>8</td>
          </tr>
          <tr>
            <td>Adopters</td>
            <td>1</td>
            <td>3</td>
            <td>6</td>
          </tr>
          <tr>
            <td>Contributors</td>
            <td>-</td>
            <td>~ 3</td>
            <td>~ 8 (3 ext)</td>
          </tr>
        </table>
        <h4 class="fragment" style="margin-top: 1em;">+ bigger contributions by our community</h4>
      </section>

      <section id="status-3" style="clear: both;">
        <h2>Achievements</h2>
        <br/>
        <ul>
          <li class="fragment" style="font-size: 0.9em; margin-top: 0.5em;"><a href="https://projects.eclipse.org/projects/iot.ditto/releases/1.0.0">1.0.0 (12/2019)</a>:
            Graduation release; Ditto Java + JS client; invoking HTTP web hooks; performance improvements
          </li>
          <li class="fragment" style="font-size: 0.9em; margin-top: 0.5em;"><a href="https://projects.eclipse.org/projects/iot.ditto/releases/1.1.0">1.1.0 (04/2020)</a>:
            MQTT 5; message enrichment; Java 11 runtime; policies+search in Ditto Protocol
          </li>
          <li class="fragment" style="font-size: 0.9em; margin-top: 0.5em;">
            Eclipse IoT Packages:
            <ul>
              <li>added Helm chart with support of community</li>
              <li>setup auto connection of Ditto to Hono in c2e package</li>
            </ul>
          </li>
        </ul>
        <h4 style="text-align: left; margin-top: 1em;" class="fragment">LoRaWAN Virtual Conference:
          <a href="https://www.eclipse.org/ditto/slides/2020_04_16-ttn-virtual-conference/">workshop</a> +
          <a href="https://youtu.be/D33JrN2RWiI">YouTube recording</a>
        </h4>
      </section>

        <!-- Section: Roadmap -->
      <section id="status-4" style="clear: both;">
        <h2>Roadmap</h2>
        <ul>
          <li style="font-size: 0.9em; margin-top: 0.5em;"><a href="https://projects.eclipse.org/projects/iot.ditto/releases/1.2.0">1.2.0 (08/2020)</a>:
            <ul>
              <li class="fragment">QoS 1 (at least once) processing of async. consumed messages</li>
              <li class="fragment">"_metadata" for digital twins</li>
              <li class="fragment">.. several smaller things</li>
            </ul>
          </li>
          <li class="fragment" style="font-size: 0.9em; margin-top: 0.5em;">outlook:
            <ul>
              <li>conditional modification of twins</li>
              <li>partial updates (PATCH) of twins</li>
              <li>reported/desired epic</li>
              <li>Ditto Golang client</li>
            </ul>
          </li>
        </ul>
      </section>
    </div>

</div>

<div class="footer">
    Copyright ©2020
    <a href="https://www.bosch.io" target="_blank">Bosch.IO GmbH</a> All rights reserved. |
    <a href="https://www.eclipse.org/ditto/intro-overview.html" target="_blank">Documentation</a> |
    <a href="https://github.com/eclipse/ditto" target="_blank">GitHub</a> |
    <a href="https://ditto.eclipse.org" target="_blank">Sandbox</a>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/js/head.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/js/reveal.min.js"></script>

<script>
  function getParameterByName(name, url) {
    if (!url) {
      url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
      results = regex.exec(url);
    if (!results) {
      return null;
    }
    if (!results[2]) {
      return '';
    }
    return decodeURIComponent(results[2].replace(/\+/g, " "));
  }

  // More info https://github.com/hakimel/reveal.js#configuration
  Reveal.initialize({
                      controls: true,
                      progress: true,
                      history: true,
                      center: true,
                      fragments: getParameterByName('fragments') === '', // only use "fragments" feature if queryParam 'fragments' is present
                      slideNumber: 'h.v',

                      transition: 'convex', // none/fade/cube/slide/convex/concave/zoom

                      // More info https://github.com/hakimel/reveal.js#dependencies
                      dependencies: [
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/js/classList.js',
                          condition: function () {
                            return !document.body.classList;
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/markdown/marked.js',
                          condition: function () {
                            return !!document.querySelector('[data-markdown]');
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/markdown/markdown.min.js',
                          condition: function () {
                            return !!document.querySelector('[data-markdown]');
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/highlight/highlight.min.js',
                          async: true,
                          callback: function () {
                            hljs.initHighlightingOnLoad();
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/zoom-js/zoom.min.js',
                          async: true
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/notes/notes.min.js',
                          async: true
                        }
                      ],
                      keyboard: { // for hama remote presenter:
                        38: 'next',
                        40: 'prev'
                      }
                    });

</script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
  // 3. On Reveal.js ready event, copy header/footer <div> into each `.slide-background` <div>
  var header = $('#header').html();
  if (window.location.search.match(/print-pdf/gi)) {
    Reveal.addEventListener('ready', function (event) {
      $('.slide-background').append(header);
    });
  }
  else {
    $('div.reveal').append(header);
  }
</script>

</body>
</html>
