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