extend _components/base.pug

block pagetitle
    | Resources  

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="/public/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="/public/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="/public/img/resourses/res2-book.svg", alt="")
                    span.h4 Apache Ignite Documentation
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 Start with the technical documentation to find out:
                    .restechnical__text.pt-2
                        ul.dashlist 
                            li What are the key Apache Ignite 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="/public/img/resourses/res2-book2.svg", alt="")
                    span.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
                .restechnical__title.flexi.pb-5
                    img(src="/public/img/icon-github.svg", alt="")
                    span.h4 Git Repositories
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 Ignite Source Code
                    .restechnical__text.pt-2
                        p.pb-3 Download Apache Ignite and install in your environment.
                        p Select one of the following links:
                    .restechnical__action.flexi
                        a.button(href="https://gitbox.apache.org/repos/asf?p=ignite.git", target="_blank") Ignite Git
                        a.button(href="https://github.com/apache/ignite", target="_blank") GitHub Mirror
            // /.restechnical__item-3

            article.restechnical__item
                .restechnical__title.restechnical__title--empty.flexi.pb-5
                    span.h4 &nbsp;
                .restechnical__box.cardsimple
                    .restechnical__subtitle.h5 Code samples and examples
                    .restechnical__text.pt-2
                        p Get access to examples that illustrate various Ignite functionality.
                    .restechnical__action 
                        a.button(href="https://github.com/apache/ignite/tree/master/examples", target="_blank") Examples Git
            // /.restechnical__item-4
    // /.restechnical



    
    section.resvideos
        .container 
            p.capstext LEARNING RESOURCES
            h2.h4.resicontitle.flexi
                img(src="/public/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
        h2.h4.resicontitle.flexi
            img(src="/public/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
                h3.fz20.rescourse__title.pb-2.maxline3 Apache Ignite Management <br>And Monitoring Guide
                img.rescourse__pic(src="/public/img/resourses/training1.svg", alt="")
                p.rescourse__descr.pb-3.pt-2 Learn how to monitor nd 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
                h3.fz20.rescourse__title.pb-2.maxline3.
                    Apache Ignite Essentials: Key Design Principles For Building Data-Intensive Applications
                img.rescourse__pic(src="/public/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
                h3.fz20.rescourse__title.pb-2.maxline3 Apache Ignite For Spring Boot And&nbsp;Spring Data Development
                img.rescourse__pic(src="/public/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
    // /.rescourses



    section.resbook.container
        h2.h4.resicontitle.flexi
            img(src="/public/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 in in-memory computing and distributed databases.
        .resbook__wrap.pt-5.flexi 
            .resbook__picwrap
                img(src="/public/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 web-site
    // /.resbook



    section.rescontacts.container
        h2.h4.resicontitle.flexi
            img(src="/public/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
                    h4 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
                        a.faqblock__button.flexi(href="mailto:user-subscribe@ignite.apache.org?subject=Subscribe&body=Please%20subscribe%20me.") 
                            img(src="/public/img/icon-email+.svg", alt="").faqblock__eicon
                            span Subscribe
                        a.faqblock__button.flexi(href="mailto:user-unsubscribe@ignite.apache.org?subject=Unsubscribe&body=Please%20unsubscribe%20me.") 
                            img(src="/public/img/icon-email-.svg", alt="").faqblock__eicon
                            span Unsubscribe
                        a.faqblock__button.flexi(href="https://lists.apache.org/list.html?user@ignite.apache.org" target="_blank") 
                            img(src="/public/img/icon-folder.svg", alt="")
                            span Archives
                    h4 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="/public/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
                    h4 By e-mail
                    p <a href="mailto:dev@ignite.apache.org">dev@ignite.apache.org</a>
                    .faqblock__buttons.flexi.pb-4.pt-2
                        a.faqblock__button.flexi(href="mailto:dev-subscribe@ignite.apache.org?subject=Subscribe&body=Please%20subscribe%20me.") 
                            img(src="/public/img/icon-email+.svg", alt="").faqblock__eicon
                            span Subscribe
                        a.faqblock__button.flexi(href="mailto:dev-unsubscribe@ignite.apache.org?subject=Unsubscribe&body=Please%20unsubscribe%20me.") 
                            img(src="/public/img/icon-email-.svg", alt="").faqblock__eicon
                            span Unsubscribe
                        a.faqblock__button.flexi(href="https://lists.apache.org/list.html?dev@ignite.apache.org" target="_blank") 
                            img(src="/public/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
                    h4 By e-mail
                    p <a href="mailto:issues@ignite.apache.org">issues@ignite.apache.org</a>
                    .faqblock__buttons.flexi.pb-5.pt-2
                        a.faqblock__button.flexi(href="mailto:issues-subscribe@ignite.apache.org?subject=Subscribe&body=Please%20subscribe%20me.") 
                            img(src="/public/img/icon-email+.svg", alt="").faqblock__eicon
                            span Subscribe
                        a.faqblock__button.flexi(href="mailto:issues-unsubscribe@ignite.apache.org?subject=Unsubscribe&body=Please%20unsubscribe%20me.") 
                            img(src="/public/img/icon-email-.svg", alt="").faqblock__eicon
                            span Unsubscribe
                        a.faqblock__button.flexi(href="https://lists.apache.org/list.html?issues@ignite.apache.org" target="_blank") 
                            img(src="/public/img/icon-folder.svg", alt="")
                            span Archives
            // /.faqblock