---
layout: default
---

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

<div class="container-fluid">
    <div class="navbar-aligned">
        <ol class="breadcrumb">
            <li class="mr-1"><a href="/index.html">Home</a></li>
            <li class="mr-1"><a href="/resources.html">Resources</a></li>
            <li class="mr-1 active">{{ page.active_crumb }}</li>
        </ol>

        <h1 class="page-title">
            <span><i class="fas fa-fw fa-book-open"></i> Learn</span>
        </h1>

        <div class="three-cols-container">
            <div class="col-md-2 first-column">
                {% include left-side-menu.html %}
            </div>
            <div id="blog" class="col-md-8 second-column">
                <section id="intro">
                    <div class="blog-header">
                        <div class="blog-title">{{ page.blog_title }}</div>
                        <div class="blog-avatar"><img class="avatar-img" src="{{ page.author_avatar | relative_url}}" alt=""></div>
                        <div class="text-nowrap blog-author">{{ page.author_name}}</div>
                        {% if page.author_linkedin_id %}<a target="linkedin" href="https://www.linkedin.com/in/{{ page.author_linkedin_id}}/"><i class="fab fa-fw fa-linkedin"></i></a>{% endif %}
                        {% if page.author_medium_id %}<a target="medium" href="https://medium.com/@{{ page.author_medium_id}}"><i class="fab fa-fw fa-medium"></i></a>{% endif %}
                        {% if page.author_twitter_id %}<a target="twitter" href="https://twitter.com/{{ page.author_twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}

                        <div class="text-nowrap blog-date">{{ page.publish_date }}</div>
                    </div>
                </section>

                {{ content }}
            </div>
            <div class="col-md-2 third-column">
                <ul class="side-nav">
                    {% include quick-links.html %}
                </ul>
            </div>
        </div>
    </div>
</div>