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

<!-- Hero -->
<section class="full-stripe full-stripe--video">
  <!-- content -->
  <div class="ml-container ml-container--horizontally-center ml-container--halfway">
    <div class="col col-12 content-group">
      <h1>{{ site.data.project.name }}</h1>
      <p>A machine learning platform optimal for big data</p>
    </div>
    <div class="col col-12 content-group button-group">
      <a class="button button-primary" href="download.html">Download SystemDS</a>
    </div>
  </div>
  <!-- video background  -->
  <video autoplay loop src="assets/media/hero.mp4" id="video-background"></video>
</section>


<!-- Announcements Banner -->
<section class="full-stripe full-stripe--alternate">
  <div class="ml-container ml-container--narrow">
    <div class="col-4" id="award">
    </div>
    <div class="col-8">
      <h3>Name change from SystemML to SystemDS</h3>
      <p>To reflect the change of focus to the end-to-end data science lifecycle
    </div>
  </div>
</section>

<!-- About -->
<section class="full-stripe">
  <div class="ml-container ml-container--vertically-top ml-container--reverse-order">
    <div class="col col-6 content-group">
      <img src="/assets/img/diagramAnim-v4.gif" alt="What is Apache SystemDS?">
    </div>
    <div class="col col-6 content-group content-group--more-padding">
      <!-- bdi tag prevents reverse punctuation when rtl direction property is applied -->
      <h2><bdi>What is SystemDS?</bdi></h2>
      <p>Apache SystemDS provides an optimal workplace for machine learning using big data.
        It can be run on top of Apache Spark or standalone, where it automatically scales your data, line by line,
        determining whether your code should be run on the driver or an Apache Spark cluster.
        SystemDS include additional deep learning with GPU capabilities such as importing and
        running neural network architectures and pre-trained models for training.</p>
      <p><a href="#systemml-video" class="modal-trigger jq-modal-trigger"><span
            class="icon play-button"></span><span>Learn more about SystemDS</span></a></p>
    </div>
  </div>
</section>

<!-- BGet Started -->
<section class="full-stripe full-stripe--alternate">
  <div class="ml-container ml-container--vertically-centered">
    <div class="col col-6 content-group content-group--more-padding">
      <img src="/assets/img/robotTutorialSm.png" alt="What is Apache SystemDS?">
    </div>
    <div class="col col-6 content-group content-group--more-padding button-group">
      <h2>Install SystemDS</h2>
      <p>New to Apache SystemDS? Try our quick install guide that will walk you through setting up your environment and
        getting you up and going with SystemDS.</p>
      <a class="button button-primary" href="/systemds/site/install">Install SystemDS</a>
      <!-- <a class="button button-secondary" href="get-started.html#sample-notebook">Notebooks</a> -->
      <!-- <a class="button button-secondary" href="documentation.html" target="_blank">Docs</a> -->
    </div>
  </div>

</section>

<!-- Awards -->
<!-- <section class="full-stripe full-stripe--alternate-2">
  <div class="ml-container ml-container--narrow">
    <div class="col col-4 content-group content-group--center-content vldb2016"></div>
    <div class="col col-8 content-group content-group--center-align content-group--center-content">
      <h3>VLDB 2016 Best Paper</h3>
      <p>Read Compressed Linear Algebra for Large-Scale Machine Learning.<a
          href="http://www.vldb.org/pvldb/vol9/p960-elgohary.pdf" target="_blank"> Download Paper</a></p>
    </div>
  </div>
</section> -->

<!-- Contact Us -->
<section class="full-stripe">
  <div class="ml-container ml-container--horizontally-center">
    <div class="col col-12 content-group ">
      <h2>Contribute</h2>
      <p>Contribute to Apache SystemDS<sup>TM</sup> by subscribing to our developer mailing list for updates and news.
        Check out <a href="community.html#mailing-list">All Mailing Lists</a>.
      </p>
    </div>
    <div class="col col-12 content-group button-group">
      <a href="mailto:{{ site.data.project.dev_list_subscribe }}?subject=send this email to subscribe"
        class="button button-primary">Subscribe</a>
      <a href="{{ site.data.project.dev_list_archive }}" target="_blank" class="button button-secondary">View
        Archive</a>
      <a href="/roadmap" target="_blank" class="button button-secondary">Roadmap</a>
    </div>
  </div>
</section>

<!-- Social Media Icons -->
<section class="full-stripe full-stripe--alternate">
  <div class="ml-container">
    <div class="col col-12 content-group content-group--center-content content-group--center-align">
      <h2>Follow Us</h2>
    </div>
    <div class="col col-12">
      <ul class="link-list bullet-pointless">
        <li><a class="icon icon-youtube" href="https://www.youtube.com/channel/UCQwUHIc5SjqNIppUH6xbxXQ"
            target="_blank"></a></li>
        <li><a class="icon icon-github" href="{{ site.data.project.source_repository_mirror }}" target="_blank"></a>
        </li>
        <!-- <li><a class="icon icon-twitter" href="https://twitter.com/ApacheSystemML" target="_blank"></a></li> -->
        <!-- <li><a class="icon icon-medium" href="https://medium.com/@apachesystemml" target="_blank"></a></li> -->
      </ul>
    </div>
  </div>
</section>

<div id="systemml-video" class="modal-overlay">
  <a href="#" class="icon icon-close jq-close"></a>
  <div class="video-wrapper">
    <iframe src="https://www.youtube.com/embed/r-kFYkYoD_4" frameborder="0" allowfullscreen></iframe>
  </div>
</div>