<!--
{% comment %}
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
{% endcomment %}
-->
 <section id="services">
    <div class="content-section-b">

        <div class="container">

            <div class="row">

                <div class="col-lg-12 col-sm-12">

                    <h2 class="section-heading">Talks at Conferences</h2>

                    <!--Talk Building IoT jfeinauer-->
                    <iframe src="//www.slideshare.net/slideshow/embed_code/key/3FU9D9KllR81ZY" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/JulianFeinauer/orientation-in-the-fog-differences-between-stream-processing-in-edge-and-cloud" title="Orientation in the fog: differences between stream processing in edge and cloud" target="_blank">Orientation in the fog: differences between stream processing in edge and cloud</a> </strong> from <strong><a href="https://www.slideshare.net/JulianFeinauer" target="_blank">JulianFeinauer</a></strong> </div>
                    <h4>Wednesday April 03, 2019 • 2:15pm - 3:00pm CESTT</h4>
                    <h4>Conference: <a href="https://www.buildingiot.de/">building iot 2019</a></h4>
                    <h4>Presenter: Julian Feinauer, pragmatic minds GmbH</h4>

                    <div class="lead">...</div>

                    <a href="http://events.linuxfoundation.org/events/apachecon-north-america"><img src="https://apachecon.com/images/apache/apachecon_na_500x500.png" style="width: 400px; height: auto;"></a>

                    <h3><a href="https://apachecon2017.sched.com/event/9zp4/video-analytics-at-the-edge-fun-with-apache-edgent-opencv-and-a-raspberry-pi-william-marshall-dale-labossiere-ibm?iframe=no&w=&sidebar=yes&bg=no">Video Analytics at the Edge: Fun with Apache Edgent, OpenCV and a Raspberry Pi</a></h3>
                    <h4>Tuesday May 16, 2017 • 2:30pm - 3:20pm EST</h4>
                    <h4>Venue: Michaelangelo</h4>
                    <h4>Presenters: William Marshall &amp; Dale LaBossiere, IBM</h4>

                    <div class="lead">Apache Edgent (incubating) is a streaming programming model and runtime designed to accelerate the development of analytics on small edge devices or gateways. Enabling streaming analytics on edge devices can reduce the load on data center and communication costs. Furthermore, edge analytics can reduce decision making latency and enable device autonomy. Edgent uses a functional API to compose processing pipelines with immediate per-tuple computation, and also provides a suite of connectors which greatly ease communication with a backend. This presentation introduces Apache Edgent and provides a video analytics use case to illustrate its programming model and capabilities.</div>

                    <h3><a href="https://apachecon2017.sched.com/event/9zoy/having-fun-with-raspberrys-and-apache-projects-jean-frederic-clere-red-hat?iframe=no&w=&sidebar=yes&bg=no">Having fun with Raspberry(s) and Apache Projects</a></h3>
                    <h4>Wednesday, May 17 • 12:15pm - 1:05pm EST</h4>
                    <h4>Venue: Sandringham</h4>
                    <h4>Presenter: Jean-Frederic Clere, Red Hat</h4>

                    <div class="lead">You can do a lot with a Raspberry and ASF projects. From a Tiny object connected to Internet to a small server application.
                        <ul>
                            <li>Raspberry as a IoT Sensor collecting data and sending it to ActiveMQ.</li>
                            <li>Raspberry as a Modbus supervisor controlling an Industruino (Insdustrial Arduino) and connected to ActiveMQ.</li>
                            <li>Using Apache edgent with same :D</li>
                        </ul>
                    </div>
                </div>

            </div>

        </div>
        <!-- /.container -->


    </div>

    <div class="content-section-b">

        <div class="container">

            <div class="row">

                <div class="col-lg-5 col-sm-6 col-sm-push-7">
                    <h2 ><a href="https://plus.google.com/events/c9i8t4j2mqq7g0d6ftad84c5bd8">Hangout: Apache Edgent on Raspberry Pi</a></h2>
                    <h4 >Thursday, May 12 10am-11am PDT</h3>

                    <div class="lead">In this <a href="https://plus.google.com/events/c9i8t4j2mqq7g0d6ftad84c5bd8">Google+ Hangout</a>, we showed you how you can use Edgent to work with real sensor data on a Raspberry Pi. We also demonstrated an application where we implemented a smart sprinkler system using Apache Edgent, Raspberry Pi, Watson IoT Platform and the Streaming Analytics service.</div>
                </div>
                <div class="col-lg-7 col-sm-pull-5 col-sm-6">
                    <div class="embed-responsive embed-responsive-16by9">
                        <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/videoseries?list=PLhZR82i0P9NqrksME13f2t8tDMIhxUtCH" allowfullscreen></iframe>
                    </div>
                </div>
            </div>

        </div>
        <!-- /.container -->


    </div>

    <div class="content-section-b">

        <div class="container">

            <div class="row">

                <div class="col-lg-5 col-sm-6 col-sm-push-7">
                    <h2 ><a href="https://plus.google.com/events/c4v0hjbefda5vcfceffllgncv2k">Hangout: Intro to Apache Edgent</a></h2>
                    <h4 >Wednesday, April 13 10am-12pm PDT</h3>

                    <div class="lead">In this <a href="https://plus.google.com/events/c4v0hjbefda5vcfceffllgncv2k">Google+ Hangout</a>, the committers presented a high-level overview of the Apache Edgent project and demonstrated how you can write, monitor and debug your Edgent application. They also showed you how you can get involved and contribute to the Edgent community. </div>
                </div>
                <div class="col-lg-7 col-sm-pull-5 col-sm-6">
                    <div class="embed-responsive embed-responsive-16by9">
                        <iframe class="embed-responsive-item" src="//www.youtube.com/embed/Xqns7yVNDnk" allowfullscreen></iframe>
                    </div>
                </div>
            </div>

        </div>
        <!-- /.container -->

    </div>

</section>
