---
active_crumb: Resources
layout: interior
---

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

<h1 class="page-title">
    <span><i class="fas fa-fw fa-book-open"></i> {{ page.active_crumb }}</span>
</h1>

<div id="resources" class="three-cols-container">
    <div class="col-md-2 first-column">
        {% include left-side-menu.html %}
    </div>
    <div class="col-md-8 second-column">
        <nav>
            <div class="nav nav-tabs" role="tablist">
                <a class="nav-item nav-link active" data-toggle="tab" href="#all-news" role="tab">News</a>
                <a class="nav-item nav-link" data-toggle="tab" href="#events" role="tab"><i class="fas fw fa-calendar-alt"></i> Events</a>
                <a class="nav-item nav-link" data-toggle="tab" href="#en-blogs" role="tab">English Blog</a>
                <a class="nav-item nav-link" data-toggle="tab" href="#ru-blogs" role="tab">Русский Блог </a>
                <a class="nav-item nav-link" data-toggle="tab" href="#videos" role="tab"><i class="fab fw fa-youtube"></i> Videos</a>
            </div>
        </nav>
        <div class="tab-content">
            <div class="tab-pane fade show active" id="all-news" role="tabpanel">
                <br/>
                {% for news in site.data.news %}
                <div class="blog-block">
                    <div class="blog-title">
                        <a href="{{ news.url }}" target={{ news.href_target }}>{{ news.title }}</a>
                        {% if news.href_target != "_self" %}
                            <br/>
                            <a class="direct-link" href="{{ news.url }}" target={{ news.href_target }}>{{ news.url }}</a>
                        {% endif %}
                    </div>
                    <div class="blog-excerpt">
                        <a target={{ news.href_target }} href="{{ news.url }}">{{ news.excerpt}}</a>
                    </div>
                    <div class="blog-footer">
                        {% if news.avatar_url %}<img class="avatar-img" src="{{ news.avatar_url | relative_url}}" alt="">{% endif %}
                        {% if news.author %}<div class="blog-author">{{ news.author }}</div>{% endif %}
                        {% if news.linkedin_id %}<a target="linkedin" href="https://www.linkedin.com/in/{{ news.linkedin_id}}/"><i class="fab fa-fw fa-linkedin"></i></a>{% endif %}
                        {% if news.medium_id %}<a target="medium" href="https://medium.com/@{{ news.medium_id}}"><i class="fab fa-fw fa-medium"></i></a>{% endif %}
                        {% if news.twitter_id %}<a target="twitter" href="https://twitter.com/{{ news.twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                        <span class="text-nowrap">{{news.publish_date}}</span>
                    </div>
                </div>
                {% endfor %}
            </div>
            <div class="tab-pane fade show" id="events" role="tabpanel">
                <br/>
                {% for event in site.data.events %}
                <div class="event-block">
                    <div class="event-logo">
                        <img class="event-logo" src="{{ event.event_logo_url | relative_url}}" alt="">
                    </div>
                    <div class="event-name">
                        <a href="{{ event.event_url }}" target=_new>{{ event.event_name }}</a>
                        {% if event.event_twitter_id %}<a target="twitter" href="https://twitter.com/{{ event.event_twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                    </div>
                    <div class="event-loc">
                        Location: {{ event.event_loc }}
                    </div>
                    <div class="event-date">
                        Dates: {{ event.event_date }}
                    </div>
                    <div class="event-link">
                        URL: <a href="{{ event.event_url }}" target=_new>{{ event.event_url }}</a>
                    </div>
                    <div><b>Talk:</b></div>
                    <div class="event-talk-name">
                        <div>{{ event.talk_name }}</div>
                    </div>
                    <div><b>Speakers:</b></div>
                    <div class="even-speakers-block">
                        <div class="event-talk-speaker">
                            <div>
                                {% if event.speaker_1_avatar_url %}<img class="event-avatar-img" src="{{ event.speaker_1_avatar_url | relative_url}}" alt="">{% endif %}
                            </div>
                            <div>
                                <div class="talk-speaker-name">
                                    {{ event.speaker_1_name }}
                                    {% if event.speaker_1_twitter_id %}<a target="twitter" href="https://twitter.com/{{ event.speaker_1_twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                                </div>
                                <div class="talk-speaker-title">{{ event.speaker_1_title }}</div>
                            </div>
                        </div>
                        <div class="event-talk-speaker">
                            <div>
                                {% if event.speaker_2_avatar_url %}<img class="event-avatar-img" src="{{ event.speaker_2_avatar_url | relative_url}}" alt="">{% endif %}
                            </div>
                            <div>
                                <div class="talk-speaker-name">
                                    {{ event.speaker_2_name }}
                                    {% if event.speaker_2_twitter_id %}<a target="twitter" href="https://twitter.com/{{ event.speaker_2_twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                                </div>
                                <div class="talk-speaker-title">{{ event.speaker_2_title }}</div>
                            </div>
                        </div>
                    </div>
                </div>
                {% endfor %}
            </div>
            <div class="tab-pane fade show" id="en-blogs" role="tabpanel">
                <br/>
                {% for news in site.data.blogs %}
                    {% unless news.ru %}
                        <div class="blog-block">
                            <div class="blog-title">
                                <a href="{{ news.url }}" target={{ news.href_target }}>{{ news.title }}</a>
                                {% if news.href_target != "_self" %}
                                    <br/>
                                    <a href="{{ news.url }}" target={{ news.href_target }}>{{ news.url }}</a>
                                {% endif %}
                            </div>
                            <div class="blog-excerpt">
                                <a target={{ news.href_target }} href="{{ news.url }}">{{ news.excerpt}}</a>
                            </div>
                            <div class="blog-footer">
                                {% if news.avatar_url %}<img class="avatar-img" src="{{ news.avatar_url | relative_url}}" alt="">{% endif %}
                                {% if news.author %}<div class="blog-author">{{ news.author }}</div>{% endif %}
                                {% if news.linkedin_id %}<a target="linkedin" href="https://www.linkedin.com/in/{{ news.linkedin_id}}/"><i class="fab fa-fw fa-linkedin"></i></a>{% endif %}
                                {% if news.medium_id %}<a target="medium" href="https://medium.com/@{{ news.medium_id}}"><i class="fab fa-fw fa-medium"></i></a>{% endif %}
                                {% if news.twitter_id %}<a target="twitter" href="https://twitter.com/{{ news.twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                                <span class="text-nowrap">{{news.publish_date}}</span>
                            </div>
                        </div>
                    {% endunless %}
                {% endfor %}
            </div>
            <div class="tab-pane fade show" id="ru-blogs" role="tabpanel">
                <br/>
                {% for news in site.data.blogs %}
                    {% if news.ru %}
                        <div class="blog-block">
                            <div class="blog-title">
                                <a href="{{ news.url }}" target={{ news.href_target }}>
                                    {{ news.title }}
                                </a>
                                {% if news.href_target != "_self" %}
                                    <br/>
                                    <a class="direct-link" href="{{ news.url }}" target={{ news.href_target }}>{{ news.url }}</a>
                                {% endif %}
                            </div>
                            <div class="blog-excerpt">
                                <a target={{ news.href_target }} href="{{ news.url }}">{{ news.excerpt}}</a>
                            </div>
                            <div class="blog-footer">
                                {% if news.avatar_url %}<img class="avatar-img" src="{{ news.avatar_url | relative_url}}" alt="">{% endif %}
                                {% if news.author %}<div class="blog-author">{{ news.author }}</div>{% endif %}
                                {% if news.linkedin_id %}<a target="linkedin" href="https://www.linkedin.com/in/{{ news.linkedin_id}}/"><i class="fab fa-fw fa-linkedin"></i></a>{% endif %}
                                {% if news.medium_id %}<a target="medium" href="https://medium.com/@{{ news.medium_id}}"><i class="fab fa-fw fa-medium"></i></a>{% endif %}
                                {% if news.twitter_id %}<a target="twitter" href="https://twitter.com/{{ news.twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                                <span class="text-nowrap">{{news.publish_date}}</span>
                            </div>
                        </div>
                    {% endif %}
                {% endfor %}
            </div>
            <div class="tab-pane fade show" id="videos" role="tabpanel">
                <br/>
                <div class="bq success">
                    <p>
                        Share & subscribe to NLPCraft <a target="youtube" href="https://www.youtube.com/channel/UCzEImY6BfDqCBMDDrdwNo2w">YouTube Channel</a> 👌
                    </p>
                </div>
                {% for vid in site.data.videos %}
                <div class="video-block">
                    <div class="video-title">
                        {{ vid.title }}
                    </div>
                    <div class="video-iframe">
                        <iframe
                                width="514"
                                height="289"
                                src="{{ vid.embed_url }}"
                                title="{{ vid.title}}"
                                frameborder="0"
                                allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
                                allowfullscreen>
                        </iframe>
                        <div>
                            <p>
                                <b>Description:</b>
                            </p>
                            <p class="video-description">
                                {{ vid.description }}
                            </p>
                        </div>
                    </div>
                    <div class="video-footer">
                        {{ vid.publish_date }} <span class="sep">•</span> {{ vid.duration }}min
                    </div>
                </div>
                {% endfor %}
            </div>
        </div>
    </div>
    <div class="col-md-2 third-column">
        <ul class="side-nav">
            {% include quick-links.html %}
        </ul>
    </div>
</div>
