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 
        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
        .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&nbsp;this video, we&nbsp;show how to&nbsp;design and execute distributed computations considering 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 Trainings and Courses
        p.pt-2.h5 Enhance your knowledge in 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: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: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: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 about 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: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: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