<!--
{% 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">

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

         <div class="container">

             <div class="row">

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

                     <h2 class="section-heading">News</h2>

                     <!--Meetup Frankfurt-->
                     <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>

             </div>

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


     </div>

    <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>
