extend _components/base.pug

block pagetitle
    title Apache Ignite Resources – Videos, Examples, Book
    meta(name="description", content="Explore our collection of videos, webinar recordings, examples, and other Ignite resources. Download the Apache Ignite book.")
    link(rel="canonical", href="https://ignite.apache.org/resources.html")

    meta(property="og:title", content="Apache Ignite Resources – Videos, Examples, Book")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/resources.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="Explore our collection of videos, webinar recordings, examples, and other Ignite resources. Download the Apache Ignite book.")

block css
    link(rel="stylesheet", href="../css/communnity.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/resources.css?ver=" + config.version)

block main
    - global.pageHref = "resources.html"
    - config.hdrClassName = "hdr__grey hdr__white"
    include ./_components/header.pug


    //Миксин для блока с видео
    mixin resvideo(url, title, textclass="", thumbname="/img/resourses/video.png", sub="Webinar <br>recording", )
        article.comvideo
            .comvideo__box
                a.comvideo__screen(href=url, data-youtube)
                    span(class="comvideo__txt comvideo__txt--medium" + textclass) !{title}
                    span(class="comvideo__sub " + blacktitile) !{sub}
                    img(src=thumbname, alt="")
            .comvideo__descr.pt-2
                block


    section.reshero
        .container
            img.reshero__img(src="/img/resourses/hero.svg", alt="")
            h1.reshero__h1.h1 Apache Ignite <br>Resources
            .reshero__descr.h5.pt-3.
                Elevate your Ignite experience with the help of&nbsp;community-curated technical resources, code samples, how-to videos, training courses and&nbsp;other materials
    // /.reshero



    section.restechnical.container#technical
        p.capstext TECHNICAL RESOURCES
        .restechnical__grid 
            article.restechnical__item
                .restechnical__title.flexi.pb-5
                    img(src="/img/resourses/res2-book.svg", alt="")
                    h2.h4 Apache Ignite Documentation
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 Start with the technical documentation to discover:
                    .restechnical__text.pt-2
                        ul.dashlist 
                            li Apache Ignite’s key capabilities
                            li How to use certain features
                            li How to approach cluster optimizations
                            li Best troubleshooting techniques
                    .restechnical__action 
                        a.button(href="https://ignite.apache.org/docs/latest/index", target="_blank") Discover The Entire Documentation
            // /.restechnical__item-1

            article.restechnical__item
                .restechnical__title.flexi.pb-5
                    img(src="/img/resourses/res2-book2.svg", alt="")
                    h2.h4 Ignite Wiki
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 A collection of low-level design documents and instructions:
                    .restechnical__text.pt-2
                        ul.dashlist 
                            li Architectural internals of Ignite components
                            li Ignite Enhancement Proposals: next big things for Ignite
                            li Coding and release guidelines
                    .restechnical__action 
                        a.button(href="https://cwiki.apache.org/confluence/display/IGNITE/", target="_blank") Check Out Wiki
            // /.restechnical__item-2

            article.restechnical__item#git
                .restechnical__title.flexi.pb-5
                    img(src="/img/icon-github.svg", alt="")
                    h2.h4 Git Repositories
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 Ignite Source Code
                    .restechnical__text.pt-2
                        p.pb-2 Download Apache Ignite and install in your environment.
                        p Select one of the following links:
                    .restechnical__action.flexi
                        a.button(href="https://github.com/apache/ignite", target="_blank") Ignite 2.X
                        a.button(href="https://github.com/apache/ignite-3", target="_blank") Ignite 3.X
            // /.restechnical__item-1

            article.restechnical__item
                .restechnical__title.restechnical__title--empty.flexi.pb-5
                    span.h4 &nbsp;
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 Ignite Extensions
                    .restechnical__text.pt-2
                        p A group of integrations between Apache Ignite and various Java frameworks such as Kafka, Flink, and others.
                    .restechnical__action 
                        a.button(href="https://github.com/apache/ignite-extensions", target="_blank") Ignite Extensions
            // /.restechnical__item-2

            .restechnical__box.cardsimple
                .restechnical__subtitle.h5 Ignite Teamcity Bot
                .restechnical__text.pt-2
                    p.pb-2 A tool intended to monitor Apache Ignite Teamcity where Apache Ignite is tested
                .restechnical__action.flexi
                    a.button(href="https://github.com/apache/ignite-teamcity-bot", target="_blank") Teamcity Bot
            // /.restechnical__item-3

            .restechnical__box.cardsimple
                .restechnical__subtitle.h5 Ignite Website
                .restechnical__text.pt-2
                    p.pb-2 The repository hosts the source code <br>of the Apache Ignite website
                .restechnical__action.flexi
                    a.button(href="https://github.com/apache/ignite-website", target="_blank")  Ignite Website
            // /.restechnical__item-4
                
    // /.restechnical



    
    section.resvideos#learning
        .container 
            p.capstext LEARNING RESOURCES
            h2.h4.resicontitle.flexi
                img(src="/img/resourses/block-video.svg", alt="")
                span Essential Videos And Webinar Recordings
            p.h5.pt-1x Explore our collection of videos featuring widespread use-cases.
            .resvideos__grid.pt-5
                +resvideo('https://www.youtube.com/watch?v=UeQKuAQaMNU', "In-Memory Computing Essentials")
                    p In&nbsp;this video, we&nbsp;introduce the fundamental capabilities of&nbsp;in-memory computing platforms, such as&nbsp;high-speed performance and scalability.
                +resvideo('https://www.youtube.com/watch?v=hrnrsIkCnI0', "Distributed Computing <br>With Apache Ignite")
                    p In this video, we demonstrate how to design and execute distributed computations, and consider all the pros and cons.
                +resvideo('https://www.youtube.com/watch?v=TCsl-W0tsEE', "Consistency And Transactions <Br>Of Apache Ignite")
                    p In&nbsp;this webinar, we&nbsp;provide a&nbsp;deep understanding of&nbsp;Apache Ignite&rsquo;s support for ACID transactions and data consistency.

                +resvideo('https://www.youtube.com/watch?v=eYV-tNLzIts', "Apache Ignite <br>SQL Essentials")
                    p Learn how to&nbsp;apply a&nbsp;classic SQL database experience while enabling in-memory speeds at&nbsp;petabyte scale for a&nbsp;variety of&nbsp;workloads.
                +resvideo('https://www.youtube.com/watch?v=38YgdAOs038', "Deploying Apache Ignite In&nbsp;Kubernetes")
                    p In&nbsp;this webinar, speakers provide steps on&nbsp;how to&nbsp;deploy Ignite in&nbsp;Kubernetes.
                +resvideo('https://www.youtube.com/watch?v=eGlmZoBSS8g', "Machine Learning<br>With Apache Ignite")
                    p Watch this webinar to&nbsp;learn how to&nbsp;leverage the Apache Ignite machine learning framework to&nbsp;implement a&nbsp;continuous machine learning platform.
            .resvideos__youtube.h5.
                Explore <a href="https://www.youtube.com/channel/UChYD3lCEnzHlWioUb2sNgSg" target="_blank">the full collection of Apache Ignite videos</a> and recordings on YouTube.
    // /.resvideos



    section.rescourses.container#training
        h2.h4.resicontitle.flexi
            img(src="/img/resourses/icon-training.svg", alt="")
            span Training and Courses
        p.pt-2.h5 Enhance your knowledge of building high-performance and <br>data-intensive applications with the Apache Ignite capabilities.
        .rescourses__wrap.pt-5
            article.rescourse.cardsimple
                p.fz20.rescourse__title.pb-2.maxline3.
                    Apache Ignite Essentials: Key Design Principles For Building Data-Intensive Applications
                img.rescourse__pic(src="/img/resourses/training2.svg", alt="")
                p.rescourse__descr.pb-3.pt-2 Learn about data partitioning, affinity co-location, and co-located processing
                a.rescourse__button.button(href="https://www.gridgain.com/products/services/training/apache-ignite-essentials", target="_blank") Training Schedule
            article.rescourse.cardsimple
                p.fz20.rescourse__title.pb-2.maxline3.
                    Apache Ignite and Kubernetes: Deployment and Orchestration Strategies
                img.rescourse__pic(src="/img/resourses/kubernetes.svg", alt="")
                p.rescourse__descr.pb-3.pt-2 Learn how to deploy and orchestrate Apache Ignite in a Kubernetes environment
                a.rescourse__button.button(href="https://www.gridgain.com/products/services/training/apache-ignite-and-kubernetes-deployment-and-orchestration-strategies", target="_blank") Training Schedule
            article.rescourse.cardsimple
                p.fz20.rescourse__title.pb-2.maxline3 Apache Ignite For Spring Boot And&nbsp;Spring Data Development
                img.rescourse__pic(src="/img/resourses/training3.svg", alt="")
                p.rescourse__descr.pb-3.pt-2 Explore the best practices and nuances of&nbsp;using Spring Boot and Spring Data with Apache Ignite
                a.rescourse__button.button(href="https://www.gridgain.com/products/services/training/apache-ignite-spring-boot-and-spring-data-development", target="_blank") Training Schedule
        .resourses__bottom.pt-5
            a.button.button--shadow(href="https://www.gridgain.com/services/training", target="_blank") Explore Other Free Training Courses
    // /.rescourses



    section.resbook.container#book
        h2.h4.resicontitle.flexi
            img(src="/img/resourses/block-book.svg", alt="")
            span Apache Ignite Book
        p.pt-2.h5 This book is useful for developers and architects who want to expand <br>their knowledge of in-memory computing and distributed databases.
        .resbook__wrap.pt-5.flexi 
            .resbook__picwrap
                img(src="/img/resourses/book-cover.jpg", alt="")
            .resbook__content
                .resbook__caps.capstext.pb-5 The book is recommended by <br>the Apache Ignite Community
                blockquote.resbook__quote.h5.
                    This is&nbsp;one of&nbsp;the very few good books on&nbsp;Apache Ignite. It&nbsp;covers <br>the whole spectrum of&nbsp;Ignite. From use-cases and architecture to&nbsp;maintenance and code examples that get your hands dirty. If&nbsp;you want one book to&nbsp;get it&nbsp;all, this is&nbsp;it!
                .cmtyhistory__avaavtor.pt-3.flexi
                    .cmtyhistory__avaright.cmtyhistory__avaright--noimg 
                        .cmtyhistory__avaname Edward Kuenen
                        .cmtyhistory__avaproff Software developer
                a.button.resbook__button(href="https://github.com/srecon/the-apache-ignite-book", target="_blank") Visit Book GitHub
    // /.resbook



    section.rescontacts.container#mail
        h2.h4.resicontitle.flexi
            img(src="/img/resourses/block-email.svg", alt="")
            span Mailing Lists, Forums And Discussion Archives
        .rescontacts__wrap
            article.faqblock.flexi
                h3.faqblock__title.faqblock__title--simple.h5
                    span For general questions about Ignite
                .faqblock__right
                    p.faqblock__rightitle By e-mail
                    p For general questions about Ignite <a href="mailto:user@ignite.apache.org">user@ignite.apache.org</a>
                    .faqblock__buttons.flexi.pb-5.pt-2
                        .faqblock__button.flexi(data-poplink="gen-sub")
                            img(src="/img/icon-email+.svg", alt="").faqblock__eicon
                            span Subscribe
                            .pushup(data-pop="gen-sub")
                                p By sending a 
                                    a(href="mailto:user-subscribe@ignite.apache.org") default e-mail
                                p By sending Hello to this e-mail <b>user-subscribe@ignite.apache.org</b> 
                        .faqblock__button.flexi(data-poplink="gen-unsub")
                            img(src="/img/icon-email-.svg", alt="").faqblock__eicon
                            span Unsubscribe
                            .pushup(data-pop="gen-unsub")
                                p By sending a 
                                    a(href="mailto:user-unsubscribe@ignite.apache.org?subject=Unsubscribe&body=Stop") default e-mail
                                p By sending Stop to this e-mail <b>user-unsubscribe@ignite.apache.org</b>
                        a.faqblock__button.flexi(href="https://lists.apache.org/list.html?user@ignite.apache.org" target="_blank") 
                            img(src="/img/icon-folder.svg", alt="")
                            span Archives
                    p.faqblock__rightitle On StackOverflow
                    p Or&nbsp;ask a&nbsp;question on&nbsp;StackOverflow tagging the question with &laquo;ignite&raquo; or&nbsp;&laquo;apacheignite&raquo;
                    .faqblock__buttons.flexi.pt-2
                        a.faqblock__button.flexi(href="http://stackoverflow.com/questions/tagged/ignite" target="_blank") 
                            img(src="/img/icon-stackoverflow.svg", alt="").faqblock__stackicon
                            span Ask question on StackOverflow
            // /.faqblock

            article.faqblock.flexi
                h3.faqblock__title.faqblock__title--simple.h5
                    span For contribution-related discussions
                .faqblock__right
                    p.faqblock__rightitle By e-mail
                    p <a href="mailto:dev@ignite.apache.org">dev@ignite.apache.org</a>
                    .faqblock__buttons.flexi.pb-4.pt-2
                        .faqblock__button.flexi(data-poplink="cont-sub")
                            img(src="/img/icon-email+.svg", alt="").faqblock__eicon
                            span Subscribe
                            .pushup(data-pop="cont-sub")
                                p By sending a 
                                    a(href="mailto:dev-subscribe@ignite.apache.org?subject=Subscribe&body=Hello") default e-mail
                                p By sending Hello to this e-mail <b>dev-subscribe@ignite.apache.org</b> 
                        .faqblock__button.flexi(data-poplink="cont-unsub")
                            img(src="/img/icon-email-.svg", alt="").faqblock__eicon
                            span Unsubscribe
                            .pushup(data-pop="cont-unsub")
                                p By sending a 
                                    a(href="mailto:dev-unsubscribe@ignite.apache.org?subject=Unsubscribe&body=Stop") default e-mail
                                p By sending Stop to this e-mail <b>dev-unsubscribe@ignite.apache.org</b>
                        a.faqblock__button.flexi(href="https://lists.apache.org/list.html?dev@ignite.apache.org" target="_blank") 
                            img(src="/img/icon-folder.svg", alt="")
                            span Archives
            // /.faqblock

            article.faqblock.flexi
                h3.faqblock__title.faqblock__title--simple.h5
                    span Report bugs, possible <br>improvements and ctr.
                .faqblock__right
                    p.faqblock__rightitle By e-mail
                    p <a href="mailto:issues@ignite.apache.org">issues@ignite.apache.org</a>
                    .faqblock__buttons.flexi.pb-5.pt-2
                        .faqblock__button.flexi(data-poplink="bug-sub")
                            img(src="/img/icon-email+.svg", alt="").faqblock__eicon
                            span Subscribe
                            .pushup(data-pop="bug-sub")
                                p By sending a 
                                    a(href="mailto:notifications-subscribe@ignite.apache.org?subject=Subscribe&body=Hello") default e-mail
                                p By sending Hello to this e-mail <b>notifications-subscribe@ignite.apache.org</b> 
                        .faqblock__button.flexi(data-poplink="bug-unsub")
                            img(src="/img/icon-email-.svg", alt="").faqblock__eicon
                            span Unsubscribe
                            .pushup(data-pop="bug-unsub")
                                p By sending a 
                                    a(href="mailto:notifications-unsubscribe@ignite.apache.org?subject=Unsubscribe&body=Stop") default e-mail
                                p By sending Stop to this e-mail <b>notifications-unsubscribe@ignite.apache.org</b>
                        a.faqblock__button.flexi(href="https://lists.apache.org/list.html?issues@ignite.apache.org" target="_blank") 
                            img(src="/img/icon-folder.svg", alt="")
                            span Archives
            // /.faqblock