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 Management <br>And Monitoring Guide
                img.rescourse__pic(src="/img/resourses/training1.svg", alt="")
                p.rescourse__descr.pb-3.pt-2 Learn how to monitor and manage Apache Ignite clusters in production
                a.rescourse__button.button(href="https://www.gridgain.com/docs/tutorials/management-monitoring/overview", target="_blank") Training Schedule
            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 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/docs/tutorials/spring/spring-ignite-tutorial", 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
        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://www.shamimbhuiyan.com/ignitebook", target="_blank") Visit The Book Website
    // /.resbook



    section.rescontacts.container
        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