CINXE.COM
O'Reilly Media - Technology and Business Training
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>O'Reilly Media - Technology and Business Training</title> <meta name="description" content="Gain technology and business knowledge and hone your skills with learning resources created and curated by O'Reilly's experts: live online training, video, books, our platform has content from 200+ of the world's best publishers." /> <meta name="date" content="2025-03-21" /> <meta name="search_date" content="2021-06-24" /> <meta name="search-title" content="O'Reilly Media - Technology and Business Training" /> <meta name="pagename" content="O'Reilly Media - Technology and Business Training" /> <meta name="site" content="O'Reilly" /> <meta name="twitter:title" content="O'Reilly Media - Technology and Business Training" /> <meta name="twitter:description" content="Gain technology and business knowledge and hone your skills with learning resources created and curated by O'Reilly's experts: live online training, video, books, our platform has content from 200+ of the world's best publishers." /> <meta name="twitter:site" content="@OReillyMedia" /> <meta property="og:type" content="website" /> <meta property="og:title" content="O'Reilly Media - Technology and Business Training" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:image" content="https://cdn.oreillystatic.com/oreilly/images/oreilly-social-200.png" /> <meta property="og:image" content="https://cdn.oreillystatic.com/oreilly/images/oreilly-social-200.png" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="language_name" content="English"> <meta name="native_language_name" content="English"> <meta name="format-detection" content="telephone=no"> <link rel="icon" type="image/png" href="//www.oreilly.com/favicon.ico"> <!--[if lte IE 9]> <script> 'article aside footer header main nav section time'.replace(/\w+/g,function(n){document.createElement(n)}) </script> <![endif]--> <link rel="stylesheet" type="text/css" href="https://cdn.oreillystatic.com/assets/css/2018_font_face.css" /> <link rel="stylesheet" type="text/css" href="https://cdn.oreillystatic.com/assets/css/odot-layout-20240226.css" /> <!--[if IE 9]> <style type="text/css"> #menu-toggle:checked ~ .mobile-nav { display:block; } .mobile-nav { display: none; } </style> <![endif]--> <!-- Initiate dataLayer for GA --> <script> loggedInObject = new Object(); var dataLayer = window.dataLayer || []; //Check for O'Reilly Unified logged-in status if (document.cookie.split(';').filter(function(item) { return item.indexOf('orm-jwt=') >= 0 }).length) { loggedInObject.unifiedLoggedIn = 'yes'; loggedInObject.loggedIn = 'yes'; dataLayer.push(loggedInObject); //Add 'loggedIn class to html tag const htmlTag = document.querySelector('html'); if (htmlTag !== null) { htmlTag.classList.add('loggedIn'); } } </script> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5P4V6Z');</script> <!-- End Google Tag Manager --> <!-- Start VWO Async SmartCode --> <link rel="preconnect" href="https://dev.visualwebsiteoptimizer.com" /> <script type='text/javascript' id='vwoCode'> window._vwo_code || (function() { var account_id=27087, version=2.1, settings_tolerance=2000, hide_element='body', hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important', /* DO NOT EDIT BELOW THIS LINE */ f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var i=this.getSettings(),n=d.createElement('script'),r=this;t=t||{};if(i){n.textContent=i;d.getElementsByTagName('head')[0].appendChild(n);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200){_vwo_code.addScript({text:o.responseText})}else{_vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}_vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var i=this.hide_element(),n=i?i+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=n;else t.appendChild(d.createTextNode(n));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var n=d.createElement('div');n.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;';n.setAttribute('id','_vis_opt_path_hides');n.classList.add('_vis_hide_layer');t.parentNode.insertBefore(n,t.nextSibling)}var o='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:o})}else{this.load(o+'&x=true')}}};w._vwo_code=code;code.init();})(); </script> <!-- End VWO Async SmartCode --> </head> <body class="homepage control"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5P4V6Z" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="skipToMain" id="skipToMain"><a href="#maincontent"><span class="skipToMain-text">Skip to main content</span></a></div> <header role="banner"> <div class="content"> <nav role="navigation" aria-label="site sections"> <a href="https://www.oreilly.com" class="logo" title="home page" aria-current="page"><img src="https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red.svg" onerror="this.src='https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red_@2x.png'; this.onerror=null;" alt="O'Reilly home"></a> <button id="mobileNavButton" class="mobileNavButton mobileNavButton--collapse mobileNavButton--3dx" type="button" aria-expanded="false" aria-controls="menuList"> <span class="mobileNavButton-box"> <span class="mobileNavButton-inner"></span> </span> </button> <ul id="menuList" class="menuList mobileHidden "> <li class="menuList-itemsP1"> <ul> <li class="menuList-item menuList-signIn"><a id="nav-signIn" href="https://www.oreilly.com/member/login/">Sign In</a></li> <li class="menuList-item menuList-tryNow"><a id="nav-tryNow" class="menuList-cta" href="https://www.oreilly.com/online-learning/try-now.html">Try Now</a></li> <li class="menuList-item menuList-platform"><a id="nav-platform" class="menuList-cta" href="https://www.oreilly.com/member/login/">O’Reilly Platform</a></li> </ul> </li> <li class="menuList-itemsP2"> <ul> <li class="menuList-item menuList-itemWithSub"><a href="https://www.oreilly.com/online-learning/teams.html">Teams</a> <ul class="menuList-subList"> <li class="menuList-subItem menuList-extra"><a href="https://www.oreilly.com/online-learning/teams.html">For business</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/government.html">For government</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/academic.html">For higher ed</a></li> </ul> </li> <li class="menuList-item"><a href="https://www.oreilly.com/online-learning/individuals.html">Individuals</a></li> <li class="menuList-item menuList-itemWithSub"><a href="https://www.oreilly.com/online-learning/features.html">Features</a> <ul class="menuList-subList"> <li class="menuList-subItem menuList-extra"><a href="https://www.oreilly.com/online-learning/features.html">All features</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/courses.html">Courses</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/feature-certification.html">Certifications</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/intro-interactive-learning.html">Interactive learning</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/live-events.html">Live events</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/feature-answers.html">Answers</a></li> <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/insights-dashboard.html">Insights reporting</a></li> </ul> </li> <li class="menuList-item"><a href="https://www.oreilly.com/online-learning/pricing.html">Plans</a></li> <li class="menuList-item"><a href="https://www.oreilly.com/radar/">Blog</a></li> <li class="menuList-item" id="nav-forMarketers"><a href="https://www.oreilly.com/content-marketing-solutions.html">Content sponsorship</a></li> <li class="menuList-item menuList-item-search" id="nav-search"> <form id="js-searchForm" class="searchForm" action="https://www.oreilly.com/search/"><input id="search" type="search" name="query" placeholder="Explore our content" autocomplete="off" required=""><button id="js-searchCloseButton" class="navSearchCloseButton">Close</button></form> <button id="js-searchButton" class="navSearchButton">Search</button> </li> </ul> </li> </ul> </nav> </div> </header> <main role="main" id="maincontent"> <style> .menuList-item.menuList-item-search.hidden { display: none; } body.homepage .footer-subfooter .transparencyStatement { display: inline !important; } body.control .home { opacity: 0; } </style> <style> body footer.footer { background: rgb(255, 255, 255); } .home { opacity: 1 !important; transition: opacity 400ms 1s; } /* .home general */ .home { display: block; background-color: rgb(18, 25, 38); background: rgb(18, 25, 38) url(https://cdn.oreillystatic.com/oreilly/images/hero-events-bg-20240611.svg) center -300px no-repeat; background-size: auto 600px; } .home .content { width: 100%; max-width: 1288px; } .home .sectionText { margin: 0 auto; max-width: 1050px; text-align: center; } .home h2 { margin-bottom: 16px; font-size: 2rem; line-height: 1.2em; font-family: 'gilroy', Arial, sans-serif; color: rgb(255, 255, 255); } .home p { margin-bottom: 20px; font-size: 1rem; line-height: 1.5em; font-weight: 400; color: rgb(255, 255, 255); text-wrap: pretty; -moz-text-wrap: pretty; } .home .textCTA, .home .textCTA-light, .home .textCTA-dark, .home .textCTA-blue { position: relative; display: flex; flex-direction: row; align-items: center; gap: 4px; width: max-content; padding: 12px 12px 12px 20px; border-radius: 8px; font-size: 1rem; line-height: 1.5em; font-weight: 600; color: rgb(255, 255, 255); background-color: rgb(0,113,235); text-decoration: none; transition: background-color 400ms; } .home .textCTA:hover, .home .textCTA:focus, .home .textCTA-light:hover, .home .textCTA-light:focus, .home .textCTA-dark:hover, .home .textCTA-dark:focus, .home .textCTA-blue:hover, .home .textCTA-blue:focus { text-decoration: none; background-color: rgb(0, 87, 187); } .home .textCTA:after, .home .textCTA-light:after, .home .textCTA-dark:after, .home .textCTA-blue:after { content: ""; display: block; padding-right: 4px; width: 20px; height: 20px; background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_white.svg) left center no-repeat; background-size: contain; opacity: 1; transition: background-position-x 400ms; } .home .textCTA:hover:after, .home .textCTA:focus:after, .home .textCTA-light:hover:after, .home .textCTA-light:focus:after, .home .textCTA-dark:hover:after, .home .textCTA-dark:focus:after, .home .textCTA-blue:hover:after, .home .textCTA-blue:focus:after { background-position-x: 4px; } .home .btnCTA, .home .btnCTA-blue { display: flex; flex-direction: row; align-items: center; gap: 4px; width: max-content; padding: 12px 12px 12px 20px; border-radius: 8px; background-color: rgb(0,113,235); font-size: 1rem; line-height: 1.5em; font-weight: 600; color: rgb(255, 255, 255); text-decoration: none; transition: background-color 400ms; } .home .btnCTA:hover, .home .btnCTA:focus, .home .btnCTA-blue:hover, .home .btnCTA-blue:focus { text-decoration: none; background-color: rgb(0, 87, 187); } .home .btnCTA:after, .home .btnCTA-blue:after { content: ""; display: block; padding-right: 4px; width: 20px; height: 20px; background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_white.svg) left center no-repeat; background-size: contain; opacity: 1; transition: background-position-x 400ms; } .home .btnCTA:hover:after, .home .btnCTA:focus:after, .home .btnCTA-blue:hover:after, .home .btnCTA-blue:focus:after { background-position-x: 4px; } .home .sectionIcon { display: block; margin: 0 auto 24px; width: 48px; height: 48px; padding: 11px; border-radius: 50%; background: rgb(255, 255, 255); border: 1px solid rgb(147, 196, 252); opacity: 1; animation: iconScroll forwards linear; animation-timeline: view(); animation-range: entry 0% cover 15%; } .home .sectionIcon svg { display: block; } .home .sectionLabel { display: block; margin: 0 auto 24px; width: max-content; padding: 4px 12px; border-radius: 100px; background: rgb(255, 255, 255); opacity: 1; animation: iconScroll forwards linear; animation-timeline: view(); animation-range: entry 0% cover 15%; } .home .sectionLabel p { margin: 0; font-size: .875rem; line-height: 1.25em; font-weight: 600; color: rgb(37, 99, 234); } @media (min-width: 50em) { /* 1040px */ .home { background-position: center -600px; background-size: auto 1200px; } } @media (min-width: 65em) { /* 1040px */ .home h2 { font-size: 2.5rem; line-height: 1.2em; } .home p { font-size: 1.25rem; line-height: 1.5em; } } @media (min-width: 100em) { /* 1600px */ .home { background-position: center -920px; background-size: auto 1840px; } } /* END .home general */ /* .home-aiCombo */ .home-aiCombo { position: relative; z-index: 2; } .home-aiCombo .content { display: flex; flex-direction: column-reverse; gap: 60px; padding: 40px 20px 40px; } .home-aiCombo .sectionText { display: block; margin: 0 auto; padding: 0 32px; } .home-aiCombo .sectionText h2 { font-size: 2rem; line-height: 1.2em; } .home-aiCombo .sectionText p { margin-bottom: 32px; } .home-aiCombo .sectionText a.textCTA-blue { margin: 0 auto; font-size: 1rem; line-height: 1.5em; } .home-aiCombo .sectionIcon { margin: 0 auto 24px; } .home-aiCombo .btnGroup { display: flex; flex-direction: row; flex-wrap: wrap; gap: 24px; align-items: center; justify-content: center; margin: 0 auto; } .home-aiCombo .sectionText a.textLink { display: inline-block; color: #fff; text-decoration: underline; } @media (min-width: 50em) { .home-aiCombo .content { padding: 92px 20px 92px; display: flex; flex-direction: row-reverse; gap: 60px; align-items: stretch; } .home-aiCombo .sectionText { display: flex; flex-direction: column; margin: 0; width: calc(50% - 30px); text-align: center; } .home-aiCombo .sectionText *:last-child { margin-bottom: 0; } .home-aiCombo .sectionFigure { margin: 0; width: calc(50% - 40px); } } @media (min-width: 65em) { .home-aiCombo .sectionText h2 { font-size: 2.5rem; line-height: 1.2em; } .home-aiCombo .btnGroup { margin: auto auto 0; } .home-aiCombo .sectionText a.textCTA-blue { margin: 0 auto 0; } } /* END .home-aiCombo */ /* .home-aiAcademy */ .home-aiAcademy { position: relative; z-index: 1; } .home-aiAcademy .content { padding: 40px 20px 40px; display: flex; flex-direction: column; gap: 64px; } .home-aiAcademy .sectionText { margin: 0 auto; max-width: 818px; } .home-aiAcademy p { margin-bottom: 32px; } .home-aiAcademy .btnGroup { display: flex; flex-direction: row; flex-wrap: wrap; gap: 24px; align-items: center; justify-content: center; margin: 0 auto; } .home-aiAcademy h2 .light { display: block; font-weight: 300; } @media (min-width: 50em) { .home-aiAcademy .content { padding: 92px 20px; } } @media (min-width: 65em) { .home-aiAcademy .btnGroup { margin: auto auto 0; } } /* END .home-aiAcademy */ /* .home-testimonial */ .home-testimonial { position: relative; z-index: 1; } .home-testimonial .content { padding: 40px 20px; } .home-testimonial .sectionText p { margin-bottom: 32px; } .home-testimonial .home-testimonial-figure { display: block; margin: 0 auto 40px; width: 80%; text-decoration: none; } .home-testimonial .home-testimonial-video { position: relative; margin: 20px auto 20px; width: 100%; padding-bottom: 56.25%; border-radius: 8px; box-shadow: 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24, 40, 0.03); } .home-testimonial .home-testimonial-video iframe { display: block; max-width: 100%; } .home-testimonial .home-testimonial-video .kWidgetIframeContainer { position: absolute; width: 100%; height: 100%; border-radius: 7px; overflow: hidden; } .home-testimonial-thumbnails { display: flex; flex-direction: row; gap: 2px; justify-content: center; margin-top: 19px; } .home-testimonial-thumbnails-item { display: block; padding: 0; margin: 0; width: 20px; height: 20px; padding: 5px; border-radius: 50%; background-color: transparent; border: none; outline: none; overflow: hidden; cursor: pointer; } .home-testimonial-thumbnails-item:after { content: ""; display: block; width: 10px; height: 10px; border-radius: 50%; background-color: rgba(255, 255, 255, .25); transition: backgound-color 400ms; } .home-testimonial-thumbnails-item:hover:after, .home-testimonial-thumbnails-item:focus:after { background-color: rgba(255, 255, 255, .5); } .home-testimonial-thumbnails-item.active:after { background-color: rgb(8, 144, 176); cursor: default; } .home-testimonial-thumbnails-item img { display: none; } .home-testimonial .textCTA-blue { margin: 0 auto; } @media (min-width: 50em) { .home-testimonial .content { padding: 92px 20px; display: flex; flex-direction: row; align-items: center; gap: 80px; } .home .home-testimonial .sectionIcon { margin: 0 0 24px; } .home-testimonial .sectionText { margin: 0; width: calc(50% - 40px); padding: 0 32px; text-align: left; } .home-testimonial .sectionText a:last-child { margin-bottom: 0; } .home-testimonial .home-testimonial-figure { margin: 0 0 -39px; width: calc(50% - 40px); padding: 0 32px; } .home-testimonial .home-testimonial-video { margin: 0 auto; } .home-testimonial .textCTA-blue { margin: 0; } } /* END .home-testimonial */ /* .home-logos */ .home-logos { position: relative; z-index: 1; } .home-logos .content { padding: 40px 20px 40px; } .home-logos .sectionFigure { display: grid; grid-template-columns: repeat(2, 1fr); grid-template-rows: repeat(4, auto); gap: 36px; align-items: center; margin: 0 auto; padding: 0; width: 100%; max-width: 360px; text-decoration: none; img { display: block; margin: 0; width: 100%; padding: 0; object-fit: contain; &.height_xs { padding: 0; } &.height_s { padding: 10px; } &.height_m { padding: 20px; } &.height_l { padding: 30px; } } } @media (min-width: 40em) { .home-logos .content { padding: 40px 52px 40px; } } @media (min-width: 50em) { .home-logos .content { padding: 92px 52px; display: flex; flex-direction: column; align-items: center; gap: 20px; } .home-logos .sectionText { margin: 0; width: 100%; padding: 0; } .home-logos .sectionFigure { grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(2, auto); margin: 0 auto; width: 100%; max-width: 100%; padding: 0; } } @media (min-width: 65em) { /* 1040px */ .home-logos .sectionFigure { grid-template-columns: repeat(8, 1fr); grid-template-rows: repeat(1, auto); margin: 0 auto; width: 100%; padding: 0; } .teamsSection-industry.home-logos .sectionFigure { grid-template-columns: repeat(7, 1fr); } } /* END .home-logos */ /* .home-experts */ .home-experts { position: relative; z-index: 1; } .home-experts .content { padding: 40px 20px 40px; display: flex; flex-direction: column; gap: 64px; } .home-experts .sectionText { margin: 0 auto; max-width: 818px; } .home-experts p { margin-bottom: 0; } .home-experts .sectionFigure { width: 100%; margin: 0 auto; width: 80%; } .home-experts .sectionFigure .button-left, .home-experts .sectionFigure .button-right { display: none; } .home-experts-panels { display: grid; grid-template-columns: repeat(2, 1fr); grid-template-rows: repeat(3, 1fr); gap: 24px; height: auto; } .home-experts-panels a { display: flex; flex-direction: column; height: auto; width: 100%; background-repeat: no-repeat; background-position: center top; background-size: contain; border-radius: 8px; transition: width .5s; border: 1px solid #fff; background-color: #fff; text-decoration: none; cursor: pointer; opacity: .9; transition: transform 400ms ease-out, opacity 400ms ease-out; } .home-experts-panels a:before { content: ""; display: block; width: 100%; height: 0; padding-bottom: 100%; } .home-experts-panels a:hover, .home-experts-panels a:focus { text-decoration: none; opacity: 1; transform: scale(108%); } .home-experts-panels a .text { display: flex; flex-direction: column; gap: 4px; padding: 16px; font-size: 1rem; line-height: 1.5em; } .home-experts-panels a .name { display: block; font-weight: bold; } .home-experts-panels a .affiliation { font-size: .75rem; line-height: 1.5em; } @media (min-width: 40em) { .home-experts-panels { grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(2, 1fr); } } @media (min-width: 50em) { .home-experts .content { padding: 92px 20px; } } @media (min-width: 62em) { .home-experts .sectionFigure { width: 100%; padding: 0 32px; } .home-experts-panels { display: grid; grid-template-columns: repeat(6, 1fr); grid-template-rows: auto; gap: 16px; width: 100%; } } /* END .home-experts */ /* .home-cta */ .home-cta { position: relative; z-index: 1; margin-top: 40px; background: linear-gradient(242deg, rgb(142, 34, 167) 0.01%, rgb(37, 99, 234) 97.15%); } .home-cta .content { padding: 40px 20px 40px; text-align: center; } .home-cta .sectionText { display: flex; flex-direction: column; gap: 24px; padding: 0 32px; } .home-cta h2 { margin: 0 auto; max-width: 818px; } .home-cta .home-cta-btnGroup { display: flex; flex-direction: row; flex-wrap: wrap; gap: 24px; align-items: center; justify-content: center; } .home .home-cta .textCTA-blue { color: rgb(43, 45, 48); background-color: rgba(255, 255, 255, 1); } .home .home-cta .textCTA-blue:hover { color: rgb(43, 45, 48); background-color: rgba(255, 255, 255, .9); } .home .home-cta .textCTA-blue:after { background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_black.svg) left center no-repeat; background-size: contain; } .home .home-cta .textCTA-blue:hover:after, .home .home-cta .textCTA-blue:focus:after { background-position-x: 4px; } .home .home-cta .btnCTA, .home .home-cta .textCTA { margin: 0 0 20px; } @media (min-width: 50em) { .home-cta .content { margin-top: 92px; } } @media (min-width: 80em) { .home-cta .content { padding: 50px 20px; text-align: center; } .home-cta .sectionText { display: flex; flex-direction: row; align-items: center; justify-content: space-between; gap: 24px; max-width: 100%; } .home-cta h2 { margin: 0; width: auto; font-size: 1.875rem; line-height: 1.2em; text-align: left; } .home-cta .home-cta-btnGroup { display: flex; flex-direction: row; gap: 12px; align-items: flex-end; width: max-content; } } /* END .home-cta */ a.deiScholarship { position: relative; z-index: 1; display: block; width: 100%; text-decoration: none; text-align: center; background: #984075 url(https://cdn.oreillystatic.com/oreilly/images/dei_scholarship_banner_bg_2025.jpg) left center no-repeat; color: #fff; background-size: cover; &.hidden { display: none; } .content { display: flex; flex-direction: row; flex-wrap: wrap; gap: 4px; justify-content: center; max-width: 1224px; margin: 0 auto; padding: 12px 20px; font-size: 16px; font-weight: 300; } .deiScholarship-cta { position: relative; display: flex; flex-direction: row; gap: 6px; align-items: center; font-weight: 600; &:after { content: ""; display: block; width: 20px; height: 20px; background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_full_right_arrow_white.svg) center center no-repeat; background-size: contain; } } } .home { contain: paint; } .home .ravenBlobs { position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 100%; max-width: 1280px; height: 100%; z-index: 0; div { opacity: 1; } /* .blob1 { position: absolute; left: calc(-675px / 1.75); top: -100px; width: 675px; height: 656px; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_1.jpg) 0 0 no-repeat; background-size: contain; @media (min-width:50em) { & { left: calc(-1200px / 1.75); top: -100px; width: 1200px; height: 1200px; } } @media (min-width:80em) { & { left: calc(-1351px / 1.75); top: -100px; width: 1351px; height: 1312px; } } }*/ .blob2 { position: absolute; right: calc(-537px / 1.75); top: 700px; width: 537px; height: 544px; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_2.jpg) 0 0 no-repeat; background-size: contain; @media (min-width:50em) { & { right: calc(-1074px / 1.75); top: 700px; width: 1074px; height: 1088px; } } @media (min-width:80em) { & { right: calc(-1074px / 1.75); top: 1100px; width: 1074px; height: 1088px; } } } .blob3 { position: absolute; left: calc(-647px / 1.75); top: 1500px; width: 647px; height: 692px; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_3.jpg) 0 0 no-repeat; background-size: contain; @media (min-width:50em) { & { left: calc(-1295px / 1.75); top: 1500px; width: 1295px; height: 1385px; } } @media (min-width:80em) { & { left: calc(-1295px / 1.75); top: 1700px; width: 1295px; height: 1385px; } } } .blob4 { position: absolute; right: calc(-613px / 1.75); top: 2500px; width: 613px; height: 621px; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_4.jpg) 0 0 no-repeat; background-size: contain; @media (min-width:50em) { & { right: calc(-1226px / 1.75); top: 2500px; width: 1226px; height: 1242px; } } @media (min-width:80em) { & { right: calc(-1226px / 1.75); top: 2200px; width: 1226px; height: 1242px; } } } .blob5 { position: absolute; left: calc(-572px / 1.75); top: 3300px; width: 572px; height: 597px; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_5.jpg) 0 0 no-repeat; background-size: contain; @media (min-width:50em) { & { left: calc(-1144px / 1.75); top: 3300px; width: 1144px; height: 1195px; } } @media (min-width:80em) { & { left: calc(-1144px / 1.75); top: 3100px; width: 1144px; height: 1195px; } } } .blob6 { position: absolute; right: calc(-836px / 1.75); top: 4100px; width: 836px; height: 766px; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_6.jpg) 0 0 no-repeat; background-size: contain; @media (min-width:50em) { & { right: calc(-1672px / 1.75); top: 4100px; width: 1672px; height: 1533px; } } @media (min-width:80em) { & { right: calc(-1672px / 1.75); top: 3500px; width: 1672px; height: 1533px; } } } } /* Define the butterfly animation */ @keyframes animateButterfly { 0% { background-image: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_animation.gif); } 4.5% { background-image: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_animation.gif); } 5% { background-image: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_still.gif); } } /* Define the icon scroll animation */ @keyframes iconScroll { 0% { transform: scale(75%) translateY(20px); opacity: 0; } 25% { transform: scale(75%) translateY(20px); opacity: 0; } 100% { transform: scale(100%) translateY(0); opacity: 1; } } </style> <span class="home" id="home"> <a id="deiScholarship" class="deiScholarship hidden" href="https://www.oreilly.com/diversity/scholarship-program.html"> <span class="content"> Your future in tech starts here. <span class="deiScholarship-cta">Apply for a DEI scholarship</span> </span> </a> <script> (function() { //Show DEI scholarship greeting from March 10 to April 15, 2025. var today = new Date(); deiScholarsipStartDate = new Date('2025-03-10T08:00:00.000-07:00'); deiScholarsipEndDate = new Date('2025-04-16T00:00:00.000-07:00'); //if during date range, //show the DEI scholarship if (today > deiScholarsipStartDate && today < deiScholarsipEndDate) { const deiScholarship = document.getElementById('deiScholarship'); if (deiScholarship) { deiScholarship.classList.remove('hidden'); } } })(); </script> <!-- Module: hero with features --> <style> /* .featuresModual */ .featuresModual { position: relative; z-index: 1; overflow: hidden; .content { position: relative; padding: 40px 20px 0; text-align: center; & > * { position: relative; z-index: 2; } } } .featuresModual-intro { display: flex; flex-direction: column; gap: 40px; @media (min-width: 50em) { /* 800px */ flex-direction: row; align-items: center; } figure { margin: 0 auto; width: 80%; max-width: 400px; height: auto; @media (min-width: 50em) { /* 800px */ width: 33%; align-items: center; } &:before { content: ""; display: block; height: 0; width: 100%; padding-bottom: 69.42%; background-image: url(https://cdn.oreillystatic.com/oreilly/images/hero-odot-animal-20221104.png); background-position: right top; background-size: cover; @media (min-width: 50em) { /* 800px */ padding-bottom: 82%; } } } .description { h1 { margin: 0 auto 16px; max-width: 818px; text-align: center; font-family: 'gilroy', Arial, sans-serif; font-size: 2.25rem; line-height: 1.2em; color: rgb(255, 255, 255); .light { display: block; font-weight: 300; } @media (min-width: 40em) { /* 640px */ & { font-size: 3rem; line-height: 1.2em; } } @media (min-width: 50em) { /* 800px */ & { text-align: left; max-width: 1072px; } } @media (min-width: 58em) { /* 928px */ & { font-size: 3rem; line-height: 1.2em; } } @media (min-width: 65em) { /* 1040px */ & { font-size: 3.75rem; line-height: 1.2em; } } } p { text-align: center; margin: 0 auto 32px; max-width: 818px; color: rgb(255, 255, 255); @media (min-width: 50em) { /* 800px */ & { text-align: left; } } } .featuresModual-cta { display: flex; flex-direction: row; flex-wrap: wrap; gap: 24px; align-items: center; justify-content: center; margin: 0 auto; @media (min-width: 50em) { /* 800px */ & { margin: 0; width: max-content; } } .textCTA { margin: 0; color: rgb(43, 45, 48); background-color: rgba(255, 255, 255, 1); &:after { background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_black.svg) left center no-repeat; background-size: contain; } &:hover, &:focus { color: rgb(43, 45, 48); background-color: rgba(255, 255, 255, .9); &:after { background-position-x: 4px; } } } .btnCTA { margin: 0; } } } } .featuresModual .preheadCta { display: block; margin: 0 auto 20px; padding: 6px 12px 6px; background-color: rgba(255, 255, 255, 1); color: rgb(18, 25, 38); width: 100%; max-width: max-content; border-radius: 100px; font-size: .875rem; line-height: 1.2em; font-weight: 600; opacity: 1; text-decoration: none; border: 1px solid rgb(18, 25, 38); transition: box-shadow .2s; text-wrap: balance; transition: background-color 400ms; } .featuresModual .preheadCta:hover, .featuresModual .preheadCta:focus { opacity: 1; text-decoration: none; background-color: rgba(255, 255, 255, .9); } .featuresModual .preheadCta:after { content: ""; display: inline-block; margin: -8px -2px -6px 0; width: 20px; height: 20px; vertical-align: middle; background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_black.svg) left center no-repeat; background-size: contain; transition: background-position-x 400ms; } .featuresModual .preheadCta:hover:after, .featuresModual .preheadCta:focus:after { background-position-x: 4px; } @media (min-width: 40em) { /* 640px */ .featuresModual .content { padding: 40px 20px 40px; text-align: center; } } @media (min-width: 50em) { /* 800px */ .featuresModual { background-size: auto auto; } .featuresModual .content { padding: 56px 52px 40px; text-align: center; } .featuresModual p { font-size: 1.25rem; line-height: 1.5em; letter-spacing: -.4px; } } @media (min-width: 76.5em) { /* 1224px */ .featuresModual .content:after { right: 20px; } } .featuresModual-controls { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 0; margin-top: 48px; border: 1px solid rgba(255, 255, 255, .25); background-color: rgba(0, 0, 0, .25); backdrop-filter: blur(10px); border-radius: 8px; overflow: hidden; button { display: flex; flex-direction: column; padding: 24px; width: 166px; width: calc(100% / 2); background-color: rgba(255, 255, 255, 0); border: none; border-radius: 0; cursor: pointer; font-family: 'guardian-text-oreilly', Helvetica, sans-serif; font-variant-ligatures: none; font-size: .875rem; line-height: 1.3em; transition: background-color 400ms; @media (min-width: 35em) { /* 560px */ width: calc(100% / 3); } @media (min-width: 56em) { /* 896px */ width: calc(100% / 6); } @media (min-width: 76.5em) { /* 1224px */ width: calc(100% / 9); } &:hover, &:focus { background-color: rgba(255, 255, 255, .05); } &.active { background-color: rgba(255, 255, 255, .1); } svg { display: block; width: 32px; height: 32px; margin: 0 auto 8px; } .buttonLabel { display: block; width: 100%; margin-bottom: auto; color: #fff; } } } .featuresModual-slides { overflow: hidden; margin-top: 8px; width: 100%; height: 0; border: 1px solid rgba(255, 255, 255, .25); border-radius: 8px; opacity: 0; transition: height 400ms ease, opacity 400ms ease; &.active { height: auto; height: calc-size(auto); opacity: 1; } .group { display: flex; flex-direction: row; align-items: center; position: relative; width: 900%; /* background-color: rgba(0, 0, 0, .25);*/ } .item { display: flex; flex-direction: column-reverse; width: 25%; height: auto; padding: 20px; opacity: 0; transition: opacity 400ms ease; gap: 40px; &.active { opacity: 1; } @media (min-width: 50em) { /* 800px */ & { flex-direction: row; align-items: center; gap: 80px; padding: 40px; } } .item-description { text-align: center; @media (min-width: 50em) { /* 800px */ & { width: calc(50% - 40px); text-align: left; } } strong { font-weight: 400; color: #91d7fe; } } .item-figure { width: 100%; &.lightFrame { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 20px; border-radius: 8px; background-color: rgb(255, 255, 255); background-image: linear-gradient(0deg, rgba(0, 113 ,235, .1), rgba(255, 255, 255, 1)); img { max-width: 300px; } } &.laptopFrame { position: relative; &:before { content: ""; display: block; position: relative; z-index: 0; padding-bottom: 54.63%; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/laptop-flat-course-animation-20230302.png) 0 0 no-repeat; background-size: contain; } img { display: block; position: absolute; z-index: 2; top: 7.215%; left: 14%; width: 72%; height: 82.9%; } video { display: block; position: absolute; z-index: 2; top: 7.215%; left: 14%; width: 72%; height: 82.9%; } } @media (min-width: 50em) { /* 800px */ & { width: calc(50% - 40px); } } img { display: block; width: 100%; } } } } /* END .featuresModual */ </style> <section class="featuresModual"> <div class="content"> <div class="featuresModual-intro"> <figure></figure> <div class="description"> <h1>Give your teams the skills they need</h1> <p>Our learning platform and AI Academy help teams learn the tools and technologies that drive business outcomes. We can help yours too. <strong>Click on a feature below to explore.</strong></p> <div class="featuresModual-cta"> <a id="requestDemo1-cta-c" href="https://www.oreilly.com/online-learning/teams.html" class="btnCTA"><span class="inner">Request a demo</span></a> <a id="tryFree1-cta-c" href="https://learning.oreilly.com/start-trial/" class="textCTA secondary"><span class="inner">Try it free</span></a> </div> </div> </div> <div class="featuresModual-controls"> <button data-label="trusted content"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M13.7837 6.88753L19.4523 5.11608V8.65895L13.7837 6.88753Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M9.87892 4.17131L6.57223 6.00695V7.56532H7.28081V8.98593H5.62746V10.7231H6.53038L4.91888 20.1713H14.839L13.2275 10.7231H14.1304V8.98593H12.477V7.56532H13.1856V6.00695L9.87892 4.17131ZM11.5742 10.7231H8.18372L7.94138 12.1438H11.8165L11.5742 10.7231ZM12.6762 17.1844L12.8893 18.4341H6.86852L7.08167 17.1844H12.6762ZM12.3799 15.4472L12.1127 13.881H7.6451L7.37796 15.4472H12.3799Z" fill="white"/></svg> <span class="buttonLabel">Trusted content</span> </button> <button data-label="live online events"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M7.63534 12.4984C7.15853 12.9544 6.5367 13.2446 5.8527 13.2446C5.16862 13.2446 4.54674 12.9751 4.07001 12.4984C3.07502 12.8923 2.34952 13.8665 2.34952 15.0273V15.9808C2.34952 16.1466 2.47388 16.271 2.63974 16.271H7.65604V15.6699C7.65604 14.7164 8.02918 13.8458 8.65106 13.1824C8.38155 12.8922 8.02918 12.6435 7.63534 12.4984Z" fill="white"/><path d="M3.80055 10.4463C3.80055 11.6693 4.73335 12.685 5.87339 12.685C7.01347 12.685 7.94628 11.69 7.94628 10.4463C7.94628 10.3219 7.94628 10.2183 7.92555 10.0939C8.25718 9.11972 8.09142 7.35777 7.46955 7.62723C6.93065 7.85523 3.90424 7.10903 4.09082 8.37344C3.38601 8.39417 3.75916 9.78302 3.82129 10.094C3.80058 10.1976 3.80055 10.322 3.80055 10.4463ZM4.42241 10.5085C4.50535 10.5085 4.56747 10.4463 4.54678 10.3841C4.50535 10.0525 4.44311 9.22335 4.73335 9.28548C5.10649 9.38915 5.50025 9.49278 5.85269 9.49278C6.20506 9.49278 6.5989 9.38915 6.97208 9.28548C7.26228 9.20258 7.20004 10.0524 7.15865 10.3841C7.15857 10.4463 7.22077 10.5085 7.30371 10.5085L7.42808 10.4878C7.40734 11.4206 6.72327 12.1668 5.87343 12.1668C5.02355 12.1668 4.33947 11.4206 4.31878 10.4878L4.42241 10.5085Z" fill="white"/><path d="M20.6736 12.685C20.4041 12.7057 20.1554 12.7057 19.9067 12.7057H19.8652C19.4506 13.0373 18.9738 13.2239 18.5178 13.2239C18.0618 13.2239 17.585 13.0373 17.1705 12.7057H17.129C16.8803 12.7057 16.6315 12.685 16.3621 12.685C16.1134 12.83 15.9061 12.9959 15.7195 13.1825C16.3414 13.8458 16.7145 14.7371 16.7145 15.6699V16.2711H21.7309C21.8967 16.2711 22.0211 16.1467 22.0211 15.9808V15.0273C22.0417 14.0116 21.5027 13.141 20.6736 12.685Z" fill="white"/><path d="M16.0511 12.0838C16.4657 12.1253 16.9217 12.1668 17.3778 12.146C17.7301 12.4777 18.1447 12.6643 18.5179 12.6643C18.891 12.6643 19.3056 12.4777 19.6579 12.146C20.1347 12.1668 20.5907 12.1253 21.0053 12.0838C21.2748 12.0424 21.3992 11.7107 21.1919 11.5242C20.9223 11.2962 20.7151 10.9023 20.7151 10.2598C20.7151 7.68944 19.1604 7.35777 18.5178 7.66871C17.8752 7.35777 16.3413 7.66871 16.3413 10.2598C16.3413 10.9023 16.1341 11.2962 15.8646 11.5242C15.6573 11.69 15.7817 12.0424 16.0511 12.0838ZM17.129 10.0732C17.7509 10.0318 18.6423 9.72082 19.1397 9.11968C19.2848 9.45132 19.575 9.74152 19.9274 9.88658C19.9482 10.0317 19.9481 10.1975 19.9481 10.3634C19.9481 11.3584 19.0983 12.1668 18.5386 12.1668C17.979 12.1668 17.129 11.3583 17.129 10.3634C17.1291 10.2598 17.129 10.1768 17.129 10.0732Z" fill="white"/><path d="M14.2063 12.8094C13.6674 13.3276 12.9626 13.6385 12.1956 13.6385C11.4287 13.6385 10.7239 13.3276 10.1849 12.8094C9.02417 13.2446 8.21576 14.364 8.21576 15.6699V16.7478C8.21576 16.9343 8.36082 17.0794 8.54739 17.0794H15.8438C16.0304 17.0794 16.1755 16.9343 16.1755 16.7478V15.6699C16.1755 14.364 15.3463 13.2447 14.2063 12.8094Z" fill="white"/><path d="M9.8533 10.4878C9.8533 11.8765 10.9104 13.0166 12.1956 13.0166C13.4808 13.0166 14.5379 11.8766 14.5379 10.4878C14.5379 10.3634 14.5379 10.2183 14.5173 10.0939C14.8904 8.99524 14.7038 6.98459 13.999 7.29552C13.3772 7.56503 9.97767 6.69438 10.1642 8.1454C9.3558 8.16609 9.7911 9.74144 9.87404 10.0939C9.87404 10.2182 9.8533 10.3426 9.8533 10.4878ZM10.5788 10.5499C10.6617 10.5499 10.7446 10.4877 10.7239 10.4048C10.6824 10.0317 10.5995 9.07817 10.9311 9.16111C11.3457 9.26474 11.8017 9.38911 12.1956 9.38911C12.5894 9.38911 13.0454 9.26474 13.46 9.16111C13.7916 9.07817 13.7087 10.0109 13.6673 10.4048C13.6466 10.4878 13.7295 10.5707 13.8124 10.5499L13.9574 10.5292C13.9367 11.5863 13.149 12.4155 12.1955 12.4155C11.242 12.4155 10.475 11.5656 10.4336 10.5292L10.5788 10.5499Z" fill="white"/></svg> <span class="buttonLabel">Live online events</span> </button> <button data-label="courses"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18.6489 10.3609V15.6416H5.72194V6.8697H9.67951L8.43477 5.50007H5.72194C4.95701 5.50007 4.33691 6.1202 4.33691 6.88513V15.657C4.33691 16.4219 4.95701 17.042 5.72194 17.042H18.6489C19.4139 17.042 20.034 16.4219 20.034 15.657V10.3609H18.6489Z" fill="white"/><path d="M8.95367 18.7693V20.1544H10.8004V20.1713H13.5705V20.1544H15.4172V18.7693H8.95367Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M19.721 9.30266L13.6732 9.28647L13.6732 9.28746L13.6415 9.2874C13.4682 9.28692 13.2312 9.18432 13.1123 9.05837L8.98177 4.68178C8.71579 4.39989 8.814 4.17065 9.20267 4.1713L15.2227 4.18135C15.396 4.1816 15.6329 4.28414 15.752 4.41035L19.8847 8.79379C20.1372 9.06163 20.0616 9.28183 19.721 9.30266ZM13.5429 10.3307V10.3313L17.3292 10.3415L16.4093 12.4674L12.2744 12.4574C12.1016 12.4569 11.865 12.3544 11.7466 12.229L8.9044 9.21978L9.8269 7.08803L12.6671 10.102C12.7857 10.2278 13.0224 10.3301 13.1948 10.3303L13.5429 10.3307Z" fill="white"/></svg> <span class="buttonLabel">Courses</span> </button> <button data-label="interactive learning"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.13668 4.17133C4.30248 4.17133 3.62622 4.84759 3.62622 5.68181V15.2481C3.62622 16.0824 4.30249 16.7586 5.13668 16.7586H19.2345C20.0687 16.7586 20.7449 16.0824 20.7449 15.2481V5.68181C20.7449 4.84759 20.0687 4.17133 19.2345 4.17133H5.13668ZM19.2345 5.68181H5.13667V15.2481H19.2345V5.68181Z" fill="white"/><path d="M13.696 15.2481H10.6751V18.6424H8.66116V20.1528H10.6751V20.1713H13.696V20.1528H15.71V18.6424H13.696V15.2481Z" fill="white"/><path d="M13.4356 7.51776L12.2044 7.25605L10.8959 13.4122L12.1271 13.6739L13.4356 7.51776Z" fill="white"/><path d="M9.96299 8.97428L9.20775 8.21904L6.71561 10.7112L9.20775 13.2034L9.96299 12.4481L8.22606 10.7112L9.96299 8.97428Z" fill="white"/><path d="M14.4082 8.97428L15.1634 8.21904L17.6556 10.7112L15.1634 13.2034L14.4082 12.4481L16.1451 10.7112L14.4082 8.97428Z" fill="white"/></svg> <span class="buttonLabel">Interactive learning</span> </button> <button data-label="certification prep"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M18.009 4.17131H6.3621C5.28979 4.17131 4.42095 5.04073 4.42095 6.11246V8.64046H7.00984V18.0537H11.068V16.642H8.42171V8.64203H16.8915V6.4066C16.8915 5.95175 17.2602 5.58305 17.7151 5.58305C18.1699 5.58305 18.5386 5.95175 18.5386 6.4066V18.0537H19.9502V6.11265C19.9502 5.04089 19.0808 4.17131 18.009 4.17131ZM16.7681 17.6223C17.2722 17.1908 17.5917 16.5498 17.5917 15.8342C17.5917 14.5347 16.5382 13.4812 15.2387 13.4812C13.9393 13.4812 12.8858 14.5347 12.8858 15.8342C12.8858 16.5498 13.2052 17.1908 13.7093 17.6223V20.1713L15.2387 19.5397L16.7681 20.1713V17.6223ZM15.9446 15.8342C15.9446 16.224 15.6286 16.5401 15.2387 16.5401C14.8489 16.5401 14.5329 16.224 14.5329 15.8342C14.5329 15.4443 14.8489 15.1283 15.2387 15.1283C15.6286 15.1283 15.9446 15.4443 15.9446 15.8342ZM9.83125 10.525H16.89V11.9367H9.83125V10.525ZM12.1842 13.5838H9.83125V14.9956H12.1842V13.5838Z" fill="white"/></svg> <span class="buttonLabel">Certification prep</span> </button> <button data-label="oreilly answers"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M20.0909 11.1184C20.0909 11.1393 20.0907 11.1601 20.0906 11.181C20.0566 15.0039 17.2566 18.3438 13.0893 20.1713C13.0895 20.0398 13.0897 19.9082 13.0897 19.7765C13.0897 19.1891 13.0871 18.6039 13.082 18.0213C12.7878 18.0504 12.4887 18.0654 12.1856 18.0654C7.81964 18.0654 4.28032 14.9551 4.28032 11.1184C4.28032 7.28161 7.81964 4.17131 12.1856 4.17131C16.5493 4.17131 20.0873 7.27847 20.0908 11.1125L20.0909 11.1184ZM13.024 10.1349H11.3472V11.8117H13.024V10.1349ZM14.7009 10.1349H16.3778V11.8117H14.7009V10.1349ZM9.67029 10.1349H7.9934V11.8117H9.67029V10.1349Z" fill="white"/></svg> <span class="buttonLabel">O’Reilly Answers</span> </button> <button data-label="ai academy"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M11.6 6.4H11.9475C14.3853 6.4 15.6042 6.4 16.0669 6.83783C16.4669 7.2163 16.6441 7.77382 16.5362 8.31377C16.4112 8.93842 15.4161 9.64228 13.4258 11.05L10.1742 13.35C8.18392 14.7577 7.18879 15.4616 7.06387 16.0862C6.95589 16.6262 7.13314 17.1837 7.53309 17.5622C7.99579 18 9.21469 18 11.6525 18H12.4M8.8 6.4C8.8 7.72548 7.72548 8.8 6.4 8.8C5.07452 8.8 4 7.72548 4 6.4C4 5.07452 5.07452 4 6.4 4C7.72548 4 8.8 5.07452 8.8 6.4ZM20 17.6C20 18.9255 18.9255 20 17.6 20C16.2745 20 15.2 18.9255 15.2 17.6C15.2 16.2745 16.2745 15.2 17.6 15.2C18.9255 15.2 20 16.2745 20 17.6Z" stroke="white" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg> <span class="buttonLabel">AI Academy</span> </button> <button data-label="assignments"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.1856 4.17131C13.275 4.17131 14.1582 5.05448 14.1582 6.14391H17.4459C18.4143 6.14391 19.1993 6.92894 19.1993 7.89735V18.4179C19.1993 19.3863 18.4143 20.1713 17.4459 20.1713H6.92529C5.95691 20.1713 5.17188 19.3863 5.17188 18.4179V7.89735C5.17188 6.92894 5.95691 6.14391 6.92529 6.14391H10.213C10.213 5.05448 11.0961 4.17131 12.1856 4.17131ZM8.34997 15.4129V16.9471H16.0212V15.4129H8.34997ZM8.34997 12.378H14.487V13.9122H8.34997V12.378ZM16.0212 9.34302H8.34997V10.8773H16.0212V9.34302ZM12.1856 6.89185C12.5987 6.89185 12.9335 6.557 12.9335 6.14391C12.9335 5.73082 12.5987 5.39597 12.1856 5.39597C11.7725 5.39597 11.4376 5.73082 11.4376 6.14391C11.4376 6.557 11.7725 6.89185 12.1856 6.89185Z" fill="white"/></svg> <span class="buttonLabel">Assignments</span> </button> <button data-label="insights dashboard"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M15.715 6.99483C16.2348 6.99483 16.6562 6.57345 16.6562 6.05364C16.6562 5.53386 16.2348 5.11247 15.715 5.11247C15.1952 5.11247 14.7738 5.53386 14.7738 6.05364C14.7738 6.57345 15.1952 6.99483 15.715 6.99483Z" fill="white"/><path d="M15.715 9.58191C15.715 10.1017 15.2936 10.5231 14.7738 10.5231C14.254 10.5231 13.8326 10.1017 13.8326 9.58191C13.8326 9.0621 14.254 8.64072 14.7738 8.64072C15.2936 8.64072 15.715 9.0621 15.715 9.58191Z" fill="white"/><path d="M11.2444 12.4066C11.7642 12.4066 12.1856 11.9852 12.1856 11.4654C12.1856 10.9456 11.7642 10.5242 11.2444 10.5242C10.7246 10.5242 10.3032 10.9456 10.3032 11.4654C10.3032 11.9852 10.7246 12.4066 11.2444 12.4066Z" fill="white"/><path d="M8.65618 14.9948C9.17596 14.9948 9.59733 14.5735 9.59733 14.0536C9.59733 13.5339 9.17596 13.1125 8.65618 13.1125C8.13637 13.1125 7.715 13.5339 7.715 14.0536C7.715 14.5735 8.13637 14.9948 8.65618 14.9948Z" fill="white"/><path d="M12.1856 15.936C12.1856 16.4558 11.7642 16.8772 11.2444 16.8772C10.7246 16.8772 10.3032 16.4558 10.3032 15.936C10.3032 15.4162 10.7246 14.9948 11.2444 14.9948C11.7642 14.9948 12.1856 15.4162 12.1856 15.936Z" fill="white"/><path d="M13.8326 14.9948C14.3524 14.9948 14.7738 14.5735 14.7738 14.0536C14.7738 13.5339 14.3524 13.1125 13.8326 13.1125C13.3129 13.1125 12.8915 13.5339 12.8915 14.0536C12.8915 14.5735 13.3129 14.9948 13.8326 14.9948Z" fill="white"/><path d="M18.3032 12.4066C18.3032 12.9264 17.8818 13.3478 17.362 13.3478C16.8423 13.3478 16.4209 12.9264 16.4209 12.4066C16.4209 11.8868 16.8423 11.4654 17.362 11.4654C17.8818 11.4654 18.3032 11.8868 18.3032 12.4066Z" fill="white"/><path d="M19.2444 9.81835C19.7642 9.81835 20.1856 9.39697 20.1856 8.8772C20.1856 8.35739 19.7642 7.93601 19.2444 7.93601C18.7246 7.93601 18.3032 8.35739 18.3032 8.8772C18.3032 9.39697 18.7246 9.81835 19.2444 9.81835Z" fill="white"/><path d="M5.98036 4.17131H4.18557V18.7596C4.18557 19.5392 4.81764 20.1713 5.59732 20.1713H20.1856V18.5241H5.98036V4.17131Z" fill="white"/></svg> <span class="buttonLabel">Insights Dashboard</span> </button> </div> <div class="featuresModual-slides" id="slides"> <div class="group"> <div class="item"><!-- Trusted content --> <div class="item-description"> <h2>Trusted content you can count on</h2> <p>More than 60K titles from O’Reilly and nearly 200 publishing partners including Harvard Business Review, Pearson, and more. <strong>Plus over 30K hours of video, early release books, expert-created playlists, and more.</strong></p> </div> <div class="item-figure"> <img src="https://cdn.oreillystatic.com/oreilly/images/trusted-content-kubernetes-patterns-1200x652.png" alt=""> </div> </div> <div class="item"><!-- Live events and courses --> <div class="item-description"> <h2>Live events and training courses</h2> <p><strong>Your teams can take live training courses and attend virtual tech events</strong> with some of today’s most renowned experts, and ask questions along the way.</p> </div> <div class="item-figure laptopFrame"> <img src="https://cdn.oreillystatic.com/oreilly/images/martin-fowler-800x504.jpg" alt=""> </div> </div> <div class="item"><!-- On-demand courses --> <div class="item-description"> <h2>On-demand courses</h2> <p><strong>Your teams get self-paced learning in all the tech and business topics they need</strong>, including cloud computing, software architecture, infrastructure and ops, programming languages, AI and ML, security, critical thinking, and more.</p> </div> <div class="item-figure laptopFrame"> <img src="https://cdn.oreillystatic.com/oreilly/images/on-demand-courses-800x504.png" alt=""> </div> </div> <div class="item"><!-- Labs --> <div class="item-description"> <h2>Labs and sandboxes</h2> <p><strong>Get your teams up to speed faster</strong> with interactive labs and sandboxes. Our expert-guided and unstructured live coding environments let them safely practice with the most in-demand technologies and cloud platforms right in their browser—no setup needed.</p> </div> <div class="item-figure laptopFrame"> <img src="https://cdn.oreillystatic.com/oreilly/images/labs-interactive-800x504.png" alt=""> </div> </div> <div class="item"><!-- Certification --> <div class="item-description"> <h2>Certification prep</h2> <p>Your teams get <strong>direct paths to the official prep materials plus practice tests</strong> for the most sought-after technical certifications in the industry.</p> </div> <div class="item-figure lightFrame"> <img src="https://cdn.oreillystatic.com/oreilly/images/cert-vendor-logos.png" alt=""> </div> </div> <div class="item"><!-- Answers --> <div class="item-description"> <h2>Generative AI responses from unrivaled content</h2> <p>Powered by AI, <strong>O’Reilly Answers</strong> instantly delivers trusted information sourced from thousands of top-tier titles, courses, and videos on our platform.</p> </div> <div class="item-figure laptopFrame"> <video webkit-playsinline playsinline autoplay muted loop> <source src="https://cdn.oreillystatic.com/oreilly/videos/answers-lp-animation.mp4" type="video/mp4"> </video> </div> </div> <div class="item"><!-- AI Academy --> <div class="item-description"> <h2>Help your entire org put GenAI to work</h2> <p>Every employee today needs to learn how to prompt GenAI, use it to enhance critical thinking and productivity, and more. <strong>With the AI Academy they can.</strong> For less. <em>Available to team and enterprise customers only.</em></p> </div> <div class="item-figure laptopFrame"> <video webkit-playsinline playsinline autoplay muted loop> <source src="https://cdn.oreillystatic.com/oreilly/videos/ai_academy_tracks_animation_20240907.webm" type="video/webm"> </video> </div> </div> <div class="item"><!-- Assignments --> <div class="item-description"> <h2>Assignments and curriculum curation</h2> <p>You can <strong>save, organize, and assign content</strong> from books and chapters, courses, labs, live online events, and more—and track each learner’s progress. Or create playlists of key content to build a curriculum to share with your teams or organization. <em>Available to team and enterprise customers only.</em></p> </div> <div class="item-figure laptopFrame"> <img src="https://cdn.oreillystatic.com/oreilly/images/assignments-800x504.png" alt=""> </div> </div> <div class="item"><!-- Insights dashboard --> <div class="item-description"> <h2>Insights Dashboard</h2> <p>Understand more than just what your team members are viewing—<strong>know <em>how</em> they’re learning</strong>. Then compare their usage to competitors in your industry. <em>Available to team and enterprise customers only.</em></p> </div> <div class="item-figure laptopFrame"> <img src="https://cdn.oreillystatic.com/oreilly/images/insights-dashboard-800x504.png" alt=""> </div> </div> </div> </div> </div> </section> <script> (function() { const feaureTabs = document.querySelectorAll('.featuresModual-controls button'); const featuresWrapper = document.querySelector('.featuresModual-slides'); const featuresSlider = document.querySelector('.featuresModual-slides .group'); const featuresSliderItems = document.querySelectorAll('.featuresModual-slides .group .item'); feaureTabs.forEach((tab, index) => { tab.addEventListener('click', () => { featuresWrapper.classList.add('active'); if (tab.classList.contains('active')) { tab.blur(); featuresWrapper.classList.remove('active'); // Remove active class from all feaureTabs feaureTabs.forEach(t => t.classList.remove('active')); // Remove active class from all featuresSliderItems featuresSliderItems.forEach(t => t.classList.remove('active')); } else { // Remove active class from all feaureTabs feaureTabs.forEach(t => t.classList.remove('active')); // Remove active class from all featuresSliderItems featuresSliderItems.forEach(t => t.classList.remove('active')); // Add active class to the clicked tab tab.classList.add('active'); // Move the content-wrapper to the correct position after a short delay const offset = -index * (100 / feaureTabs.length); // Move by percentage based on tab index // Wait to swap content until fade out completes setTimeout(() => { featuresSlider.style.transform = `translateX(${offset}%)`; // Add active class to the selected featuresSliderItem featuresSliderItems[index].classList.add('active'); }, "400"); //Track tab click if (tab.dataset.label) { const eventLabel = 'feature menu|' + tab.dataset.label; dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':eventLabel, 'eventVal':0, 'nonInteraction': 0, }); } } }); }); })(); </script> <section class="home-aiCombo"> <div class="content"> <div class="sectionText"> <h2>Get in on the AI-generated conversation</h2> <p>We’ve turned five O’Reilly titles into AI-generated podcasts, designed to make learning even more engaging. <a id="blogLink" href="https://www.oreilly.com/radar/summarizing-books-as-podcasts/" class="textLink">Here’s how we did it</a>.</p> <!-- include here --> <div class="player"> <div class="player-text"> <img class="cover" src="" alt=""> <div class="text"> <div class="label"></div> <div class="title"></div> </div> </div> <div class="player-controls"> <audio class="player-audio"><source src="https://cdn.oreillystatic.com/oreilly/audio/Facilitating_Software_Architecture_AI_Podcast_NotebookLM.wav" type="audio/wav"></audio> <!-- Play/Pause Button --> <button class="btn play-pause"> <span class="play visible"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00624 2.8023C8.0182 2.81028 8.03019 2.81827 8.04222 2.82629L18.591 9.85878C18.8962 10.0622 19.1792 10.2509 19.3965 10.4261C19.6234 10.6091 19.8908 10.8628 20.0447 11.2339C20.2481 11.7244 20.2481 12.2756 20.0447 12.7661C19.8908 13.1372 19.6234 13.3909 19.3965 13.5738C19.1792 13.7491 18.8962 13.9377 18.591 14.1412L8.00628 21.1977C7.63319 21.4464 7.29771 21.6701 7.01305 21.8244C6.72818 21.9788 6.33717 22.1552 5.8808 22.1279C5.29704 22.0931 4.75779 21.8045 4.40498 21.3381C4.12916 20.9735 4.05905 20.5503 4.02948 20.2276C3.99994 19.9052 3.99997 19.502 4 19.0536L4 4.98962C4 4.97516 4 4.96075 4 4.94638C3.99997 4.49798 3.99994 4.09479 4.02948 3.77236C4.05905 3.44971 4.12916 3.02651 4.40498 2.6619C4.75779 2.19552 5.29704 1.90692 5.8808 1.87207C6.33717 1.84482 6.72818 2.02123 7.01305 2.17561C7.2977 2.32988 7.63317 2.55355 8.00624 2.8023Z" fill="white"/></svg><span class="screenreader">Play</span></span> <span class="pause hidden"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.25 4.5C8.25 3.11929 7.13071 2 5.75 2C4.36929 2 3.25 3.11929 3.25 4.5V19.5C3.25 20.8807 4.36929 22 5.75 22C7.13071 22 8.25 20.8807 8.25 19.5V4.5ZM20.75 4.5C20.75 3.11929 19.6307 2 18.25 2C16.8693 2 15.75 3.11929 15.75 4.5V19.5C15.75 20.8807 16.8693 22 18.25 22C19.6307 22 20.75 20.8807 20.75 19.5V4.5Z" fill="white"/></svg><span class="screenreader">Pause</span></span> </button> <!-- Current Time / Total Duration --> <span class="time-current">0:00</span> <span class="separator">/</span> <span class="time-total">0:00</span> <div class="player-bars"> <!-- Seek Bar --> <input class="seek-bar" type="range" value="0" step="0.1"> <!-- Volume Button --> <div class="volume-group"> <!-- Volume Control --> <input class="volume-bar" type="range" min="0" max="1" step="0.1" value="1"> <button class="btn mute"> <span class="on visible"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.1639 4.18816C19.6123 3.86564 20.2372 3.96763 20.5597 4.41596C22.0953 6.55066 23 9.17113 23 11.9999C23 14.8287 22.0953 17.4492 20.5597 19.5839C20.2372 20.0322 19.6123 20.1342 19.1639 19.8117C18.7156 19.4892 18.6136 18.8643 18.9361 18.416C20.2352 16.6102 21 14.3959 21 11.9999C21 9.60401 20.2352 7.38968 18.9361 5.5839C18.6136 5.13557 18.7156 4.51067 19.1639 4.18816Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M15.1732 7.17975C15.6262 6.86379 16.2495 6.97486 16.5655 7.42783C17.4696 8.72404 18 10.3015 18 11.9999C18 13.6983 17.4696 15.2758 16.5655 16.572C16.2495 17.025 15.6262 17.1361 15.1732 16.8201C14.7202 16.5042 14.6092 15.8808 14.9251 15.4278C15.6027 14.4564 16 13.276 16 11.9999C16 10.7238 15.6027 9.54349 14.9251 8.57203C14.6092 8.11905 14.7202 7.49571 15.1732 7.17975Z" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.3823 2.71166C10.861 2.67399 11.3288 2.86775 11.6406 3.23287C11.9199 3.55981 11.9642 3.95307 11.9811 4.14396C12.0001 4.35793 12 4.62369 12 4.89407C12 4.90647 12 4.91888 12 4.9313L12 19.1058C12 19.3762 12.0001 19.6419 11.9811 19.8559C11.9642 20.0468 11.9199 20.4401 11.6406 20.767C11.3288 21.1321 10.861 21.3259 10.3823 21.2882C9.95368 21.2545 9.64424 21.0078 9.4973 20.8847C9.33259 20.7468 9.14469 20.5589 8.95353 20.3677L5.76153 17.1757C5.6689 17.083 5.6225 17.037 5.58738 17.0049L5.58472 17.0025L5.58114 17.0023C5.53365 17.0002 5.46826 16.9999 5.33726 16.9999L3.56812 16.9999C3.31574 17 3.06994 17 2.86178 16.983C2.63318 16.9643 2.36345 16.9202 2.09202 16.7819C1.7157 16.5902 1.40974 16.2842 1.21799 15.9079C1.07969 15.6365 1.03563 15.3668 1.01695 15.1382C0.999943 14.93 0.999973 14.6842 1 14.4318L1.00001 9.59993C1.00001 9.58929 1 9.57866 1 9.56804C0.999973 9.31565 0.999943 9.06986 1.01695 8.8617C1.03563 8.63311 1.07969 8.36338 1.21799 8.09195C1.40974 7.71563 1.7157 7.40967 2.09202 7.21792C2.36345 7.07962 2.63318 7.03555 2.86178 7.01688C3.06993 6.99987 3.31572 6.9999 3.56811 6.99993C3.57873 6.99993 3.58936 6.99993 3.60001 6.99993H5.33726C5.46826 6.99993 5.53365 6.99969 5.58114 6.99752L5.58472 6.99735L5.58738 6.99494C5.6225 6.96289 5.6689 6.91683 5.76153 6.8242L8.92721 3.65851C8.936 3.64973 8.94477 3.64095 8.95354 3.63218C9.1447 3.44096 9.33259 3.25301 9.4973 3.11512C9.64424 2.9921 9.95368 2.7454 10.3823 2.71166Z" fill="white" /></svg><span class="screenreader">Audio on</span></span> <span class="off hidden"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.6406 3.23287C11.3288 2.86775 10.861 2.67399 10.3823 2.71166C9.95368 2.7454 9.64424 2.9921 9.4973 3.11512C9.33259 3.25301 9.1447 3.44096 8.95354 3.63218L5.76153 6.8242C5.6689 6.91683 5.6225 6.96289 5.58738 6.99494L5.58472 6.99735L5.58114 6.99752C5.53365 6.99969 5.46826 6.99993 5.33726 6.99993L3.56811 6.99993C3.31573 6.9999 3.06993 6.99987 2.86178 7.01688C2.63318 7.03555 2.36345 7.07962 2.09202 7.21792C1.7157 7.40967 1.40974 7.71563 1.21799 8.09195C1.07969 8.36338 1.03563 8.63311 1.01695 8.8617C0.999943 9.06986 0.999973 9.31564 1 9.56802L1 14.4318C0.999973 14.6842 0.999943 14.93 1.01695 15.1382C1.03563 15.3668 1.07969 15.6365 1.21799 15.9079C1.40974 16.2842 1.7157 16.5902 2.09202 16.7819C2.36345 16.9202 2.63318 16.9643 2.86178 16.983C3.06994 17 3.31574 17 3.56812 16.9999L5.33726 16.9999C5.46826 16.9999 5.53365 17.0002 5.58114 17.0023L5.58472 17.0025L5.58738 17.0049C5.6225 17.037 5.6689 17.083 5.76153 17.1757L8.95353 20.3677C9.14468 20.5589 9.3326 20.7469 9.4973 20.8847C9.64424 21.0078 9.95368 21.2545 10.3823 21.2882C10.861 21.3259 11.3288 21.1321 11.6406 20.767C11.9199 20.4401 11.9642 20.0468 11.9811 19.8559C12.0001 19.6419 12 19.3762 12 19.1058V4.89407C12 4.62369 12.0001 4.35793 11.9811 4.14396C11.9642 3.95307 11.9199 3.55981 11.6406 3.23287Z" fill="white"/><path d="M22.7071 8.29289C23.0976 8.68342 23.0976 9.31658 22.7071 9.70711L20.4142 12L22.7071 14.2929C23.0976 14.6834 23.0976 15.3166 22.7071 15.7071C22.3166 16.0976 21.6834 16.0976 21.2929 15.7071L19 13.4142L16.7071 15.7071C16.3166 16.0976 15.6834 16.0976 15.2929 15.7071C14.9024 15.3166 14.9024 14.6834 15.2929 14.2929L17.5858 12L15.2929 9.70711C14.9024 9.31658 14.9024 8.68342 15.2929 8.29289C15.6834 7.90237 16.3166 7.90237 16.7071 8.29289L19 10.5858L21.2929 8.29289C21.6834 7.90237 22.3166 7.90237 22.7071 8.29289Z" fill="white"/></svg><span class="screenreader">Audio muted</span></span> </button> </div> </div> <!-- Playback Speed Selector --> <span class="screenreader"><label class="label" for="speed">Speed:</label></span> <select class="speed" id="speed"> <option value="0.5">0.5x</option> <option value="1" selected>1x</option> <option value="1.5">1.5x</option> <option value="2">2x</option> </select> </div> <div class="player-list"> <button class="player-list-item" data-src-notebooklm="https://cdn.oreillystatic.com/oreilly/audio/Facilitating_Software_Architecture_AI_Podcast_NotebookLM.wav" data-src-oreilly="https://cdn.oreillystatic.com/oreilly/audio/Facilitating_Software_Architecture_AI_Podcast_OReilly.mp3" data-type-notebooklm="audio/wav" data-type-oreilly="audio/mpeg"> <img class="cover" src="https://learning.oreilly.com/covers/urn:orm:book:9781098151850/120w/" alt=""> <div class="text"> <div class="label">AI audio summary</div> <div class="title">Facilitating Software Architecture</div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00624 2.8023C8.0182 2.81028 8.03019 2.81827 8.04222 2.82629L18.591 9.85878C18.8962 10.0622 19.1792 10.2509 19.3965 10.4261C19.6234 10.6091 19.8908 10.8628 20.0447 11.2339C20.2481 11.7244 20.2481 12.2756 20.0447 12.7661C19.8908 13.1372 19.6234 13.3909 19.3965 13.5738C19.1792 13.7491 18.8962 13.9377 18.591 14.1412L8.00628 21.1977C7.63319 21.4464 7.29771 21.6701 7.01305 21.8244C6.72818 21.9788 6.33717 22.1552 5.8808 22.1279C5.29704 22.0931 4.75779 21.8045 4.40498 21.3381C4.12916 20.9735 4.05905 20.5503 4.02948 20.2276C3.99994 19.9052 3.99997 19.502 4 19.0536L4 4.98962C4 4.97516 4 4.96075 4 4.94638C3.99997 4.49798 3.99994 4.09479 4.02948 3.77236C4.05905 3.44971 4.12916 3.02651 4.40498 2.6619C4.75779 2.19552 5.29704 1.90692 5.8808 1.87207C6.33717 1.84482 6.72818 2.02123 7.01305 2.17561C7.2977 2.32988 7.63317 2.55355 8.00624 2.8023Z" fill="white"/></svg> </button> <button class="player-list-item" data-src-notebooklm="https://cdn.oreillystatic.com/oreilly/audio/Prompt_Engineering_for_LLMs_AI_Podcast_NotebookLM.wav" data-src-oreilly="https://cdn.oreillystatic.com/oreilly/audio/Prompt_Engineering_for_LLMs_AI_Podcast_OReilly.mp3" data-type-notebooklm="audio/wav" data-type-oreilly="audio/mpeg"> <img class="cover" src="https://learning.oreilly.com/covers/urn:orm:book:9781098156145/120w/" alt=""> <div class="text"> <div class="label">AI audio summary</div> <div class="title">Prompt Engineering for LLMs</div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00624 2.8023C8.0182 2.81028 8.03019 2.81827 8.04222 2.82629L18.591 9.85878C18.8962 10.0622 19.1792 10.2509 19.3965 10.4261C19.6234 10.6091 19.8908 10.8628 20.0447 11.2339C20.2481 11.7244 20.2481 12.2756 20.0447 12.7661C19.8908 13.1372 19.6234 13.3909 19.3965 13.5738C19.1792 13.7491 18.8962 13.9377 18.591 14.1412L8.00628 21.1977C7.63319 21.4464 7.29771 21.6701 7.01305 21.8244C6.72818 21.9788 6.33717 22.1552 5.8808 22.1279C5.29704 22.0931 4.75779 21.8045 4.40498 21.3381C4.12916 20.9735 4.05905 20.5503 4.02948 20.2276C3.99994 19.9052 3.99997 19.502 4 19.0536L4 4.98962C4 4.97516 4 4.96075 4 4.94638C3.99997 4.49798 3.99994 4.09479 4.02948 3.77236C4.05905 3.44971 4.12916 3.02651 4.40498 2.6619C4.75779 2.19552 5.29704 1.90692 5.8808 1.87207C6.33717 1.84482 6.72818 2.02123 7.01305 2.17561C7.2977 2.32988 7.63317 2.55355 8.00624 2.8023Z" fill="white"/></svg> </button> <button class="player-list-item" data-src-notebooklm="https://cdn.oreillystatic.com/oreilly/audio/Machine_Learning_Production_Systems_AI_Podcast_NotebookLM.wav" data-src-oreilly="https://cdn.oreillystatic.com/oreilly/audio/Machine_Learning_Production_Systems_AI_Podcast_OReilly.mp3" data-type-notebooklm="audio/wav" data-type-oreilly="audio/mpeg"> <img class="cover" src="https://learning.oreilly.com/covers/urn:orm:book:9781098156008/120w/" alt=""> <div class="text"> <div class="label">AI audio summary</div> <div class="title">Machine Learning Production Systems</div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00624 2.8023C8.0182 2.81028 8.03019 2.81827 8.04222 2.82629L18.591 9.85878C18.8962 10.0622 19.1792 10.2509 19.3965 10.4261C19.6234 10.6091 19.8908 10.8628 20.0447 11.2339C20.2481 11.7244 20.2481 12.2756 20.0447 12.7661C19.8908 13.1372 19.6234 13.3909 19.3965 13.5738C19.1792 13.7491 18.8962 13.9377 18.591 14.1412L8.00628 21.1977C7.63319 21.4464 7.29771 21.6701 7.01305 21.8244C6.72818 21.9788 6.33717 22.1552 5.8808 22.1279C5.29704 22.0931 4.75779 21.8045 4.40498 21.3381C4.12916 20.9735 4.05905 20.5503 4.02948 20.2276C3.99994 19.9052 3.99997 19.502 4 19.0536L4 4.98962C4 4.97516 4 4.96075 4 4.94638C3.99997 4.49798 3.99994 4.09479 4.02948 3.77236C4.05905 3.44971 4.12916 3.02651 4.40498 2.6619C4.75779 2.19552 5.29704 1.90692 5.8808 1.87207C6.33717 1.84482 6.72818 2.02123 7.01305 2.17561C7.2977 2.32988 7.63317 2.55355 8.00624 2.8023Z" fill="white"/></svg> </button> <button class="player-list-item" data-src-notebooklm="https://cdn.oreillystatic.com/oreilly/audio/Cloud_Native_Go_AI_Podcast_NotebookLM.wav" data-src-oreilly="https://cdn.oreillystatic.com/oreilly/audio/Cloud_Native_Go_AI_Podcast_OReilly.mp3" data-type-notebooklm="audio/wav" data-type-oreilly="audio/mpeg"> <img class="cover" src="https://learning.oreilly.com/covers/urn:orm:book:9781098156411/120w/" alt=""> <div class="text"> <div class="label">AI audio summary</div> <div class="title">Cloud Native Go, 2nd Edition</div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00624 2.8023C8.0182 2.81028 8.03019 2.81827 8.04222 2.82629L18.591 9.85878C18.8962 10.0622 19.1792 10.2509 19.3965 10.4261C19.6234 10.6091 19.8908 10.8628 20.0447 11.2339C20.2481 11.7244 20.2481 12.2756 20.0447 12.7661C19.8908 13.1372 19.6234 13.3909 19.3965 13.5738C19.1792 13.7491 18.8962 13.9377 18.591 14.1412L8.00628 21.1977C7.63319 21.4464 7.29771 21.6701 7.01305 21.8244C6.72818 21.9788 6.33717 22.1552 5.8808 22.1279C5.29704 22.0931 4.75779 21.8045 4.40498 21.3381C4.12916 20.9735 4.05905 20.5503 4.02948 20.2276C3.99994 19.9052 3.99997 19.502 4 19.0536L4 4.98962C4 4.97516 4 4.96075 4 4.94638C3.99997 4.49798 3.99994 4.09479 4.02948 3.77236C4.05905 3.44971 4.12916 3.02651 4.40498 2.6619C4.75779 2.19552 5.29704 1.90692 5.8808 1.87207C6.33717 1.84482 6.72818 2.02123 7.01305 2.17561C7.2977 2.32988 7.63317 2.55355 8.00624 2.8023Z" fill="white"/></svg> </button> <button class="player-list-item" data-src-notebooklm="https://cdn.oreillystatic.com/oreilly/audio/The_Developers_Playbook_for_Large_Language_Model_Security_AI_Podcast_NotebookLM.wav" data-src-oreilly="https://cdn.oreillystatic.com/oreilly/audio/The_Developers_Playbook_for_Large_Language_Model_Security_AI_Podcast_OReilly.mp3" data-type-notebooklm="audio/wav" data-type-oreilly="audio/mpeg"> <img class="cover" src="https://learning.oreilly.com/covers/urn:orm:book:9781098162191/120w/" alt=""> <div class="text"> <div class="label">AI audio summary</div> <div class="title">The Developer's Playbook for Large Language Model Security</div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00624 2.8023C8.0182 2.81028 8.03019 2.81827 8.04222 2.82629L18.591 9.85878C18.8962 10.0622 19.1792 10.2509 19.3965 10.4261C19.6234 10.6091 19.8908 10.8628 20.0447 11.2339C20.2481 11.7244 20.2481 12.2756 20.0447 12.7661C19.8908 13.1372 19.6234 13.3909 19.3965 13.5738C19.1792 13.7491 18.8962 13.9377 18.591 14.1412L8.00628 21.1977C7.63319 21.4464 7.29771 21.6701 7.01305 21.8244C6.72818 21.9788 6.33717 22.1552 5.8808 22.1279C5.29704 22.0931 4.75779 21.8045 4.40498 21.3381C4.12916 20.9735 4.05905 20.5503 4.02948 20.2276C3.99994 19.9052 3.99997 19.502 4 19.0536L4 4.98962C4 4.97516 4 4.96075 4 4.94638C3.99997 4.49798 3.99994 4.09479 4.02948 3.77236C4.05905 3.44971 4.12916 3.02651 4.40498 2.6619C4.75779 2.19552 5.29704 1.90692 5.8808 1.87207C6.33717 1.84482 6.72818 2.02123 7.01305 2.17561C7.2977 2.32988 7.63317 2.55355 8.00624 2.8023Z" fill="white"/></svg> </button> </div> </div> <style> .player { position: relative; display: flex; flex-direction: column; align-items: center; gap: 8px; margin: 0 auto; width: 100%; max-width: 600px; padding: 20px; border: 1px solid rgba(255, 255, 255, .25); border-radius: 8px; opacity: 0; font-family: 'guardian-text-oreilly', Helvetica, sans-serif; font-variant-ligatures: none; text-wrap: pretty; transition: opacity 400ms; &.fadeIn { opacity: 1; } .screenreader { border: 0; padding: 0; margin: 0; position: absolute !important; height: 1px; width: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; } .player-text { display: flex; flex-direction: row; gap: 20px; align-items: center; width: 100%; font-size: 1rem; line-height: 1.5em; color: rgb(255, 255, 255); text-decoration: none; border: none; .cover { display: block; width: 40px; box-shadow: 0 2px 8px rgba(0,0,0,.2); @media (min-width: 65em) { & { width: 60px; } } } .text { text-align: left; } .label { font-size: .875rem; line-height: 1.5em; color: rgba(255, 255, 255, .75); } .title { font-size: 1rem; line-height: 1.5em; color: rgb(255, 255, 255); @media (min-width: 65em) { & { font-size: 1.25rem; line-height: 1.5em; } } } } .player-list { position: absolute; z-index: 100; top: calc(100% + 1px); left: 0; width: 100%; height: 0; opacity: 0; overflow: hidden; background-color: rgba(18, 25, 38, .8); backdrop-filter: blur(20px); display: flex; flex-direction: column; gap: 1px; border: 1px solid rgba(255, 255, 255, .25); border-radius: 8px; transition: opacity 400ms; .player.hover &, .player:focus-within & { height: auto; opacity: 1; } .player-list-item { display: flex; flex-direction: row; gap: 20px; align-items: center; width: 100%; padding: 20px; font-family: 'guardian-text-oreilly', Helvetica, sans-serif; font-variant-ligatures: none; text-wrap: pretty; font-size: 1rem; color: rgb(255, 255, 255, .95); text-decoration: none; border: none; background-color: rgba(255, 255, 255, .1); transition: background-color 400ms, border-color 400ms; cursor: pointer; &.selected { display: none; cursor: default; background-color: rgba(255, 255, 255, 0.05); text-decoration: none; svg { opacity: 0; } } .cover { display: block; width: 40px; box-shadow: 0 2px 8px rgba(0,0,0,.2); @media (min-width: 65em) { & { width: 60px; } } } .text { text-align: left; max-width: calc(100% - 40px - 40px - 16px); @media (min-width: 65em) { & { max-width: calc(100% - 40px - 60px - 16px); } } } .label { font-size: .875rem; line-height: 1.5em; color: rgba(255, 255, 255, .75); } .title { font-size: 1rem; line-height: 1.5em; color: rgb(255, 255, 255); @media (min-width: 65em) { & { font-size: 1.25rem; line-height: 1.5em; } } } svg { display: block; margin-left: auto; width: 16px; height: 16px; padding: 0; opacity: .5; transition: opacity 400ms; } &:hover:not(.selected), &:focus:not(.selected) { background-color: rgba(255, 255, 255, 0.05); text-decoration: none; svg { opacity: .8; } } } } .player-controls { display: flex; flex-direction: row; align-items: center; gap: 8px; width: 100%; .time-current, .time-total, .separator { font-size: .875rem; line-height: 1em; color: rgb(255, 255, 255); white-space: nowrap; } .btn, .speed { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: none; color: rgb(255, 255, 255); border: none; font-family: 'guardian-text-oreilly', Helvetica, sans-serif; font-variant-ligatures: none; text-wrap: pretty; font-size: .875rem; line-height: 1; cursor: pointer; outline: inherit; padding: 0; } .btn span.hidden { display: none; } .btn svg { display: block; width: 32px; height: 32px; padding: 8px; border-radius: 50%; background-color: rgba(255 ,255 ,255, 0); transition: background-color 200ms; .btn:hover &, .btn:focus & { background-color: rgba(255 ,255 ,255, .1); } } .volume-group { display: flex; flex-direction: row; align-items: center; gap: 0; .btn:hover svg, .btn:focus svg { background-color: transparent; } .volume-bar { position: absolute; visibility: hidden; overflow: hidden; width: 0; transform: scaleX(0); transform-origin: center right; transition: transform 200ms, width 200ms; } &:hover, &:focus { background-color: rgba(255 ,255 ,255, .1); border-radius: 20px; padding-left: 8px; .volume-bar { position: relative; visibility: visible; overflow: visible; width: 80px; transform: scaleX(100%); } } } .label { font-size: .875rem; line-height: 1em; color: rgb(255, 255, 255); } .speed { padding: 0; margin-left: auto; font-size: .875rem; line-height: 1em; color: rgb(255, 255, 255); } .player-bars { display: flex; flex-direction: row; align-items: center; gap: 8px; width: 100%; } input[type="range"] { display: none; -webkit-appearance: none; appearance: none; width: 100%; background: rgba(255 ,255 ,255, .5); height: 4px; border-radius: 2px; outline: none; cursor: pointer; margin: 0 5px; @media (min-width: 28.75em) { /* 460px */ display: block; } } /* webkit styles */ input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; background: rgba(255 ,255 ,255, .8); width: 10px; height: 10px; border: none; border-radius: 50%; background: #fff; cursor: pointer; transition: opacity 200ms; } /* moz styles */ input[type="range"]::-moz-range-thumb { appearance: none; background: rgba(255 ,255 ,255, .8); width: 10px; height: 10px; border: none; border-radius: 50%; background: #fff; cursor: pointer; transition: opacity 200ms; } } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const initializeAudioPlayer = (player) => { const playerText = player.querySelector('.player-text'); const playerTextCover = playerText.querySelector('.cover'); const playerTextLabel = playerText.querySelector('.label'); const playerTextTitle = playerText.querySelector('.title'); const audio = player.querySelector('.player-audio'); const playPauseButton = player.querySelector('.play-pause'); const seekBar = player.querySelector('.seek-bar'); const currentTimeDisplay = player.querySelector('.time-current'); const durationDisplay = player.querySelector('.time-total'); const muteButton = player.querySelector('.mute'); const volumeBar = player.querySelector('.volume-bar'); const playbackSpeedSelect = player.querySelector('.speed'); const audioSource = audio.querySelector('source'); const playlist = player.querySelector('.player-list'); const listItems = Array.from(playlist.querySelectorAll('.player-list-item')); let playbackSpeed = 1; let eventLabel = ""; // Add the class on hover player.addEventListener('mouseenter', () => { player.classList.add('hover'); }); // Remove the class when the mouse leaves player.addEventListener('mouseleave', () => { player.classList.remove('hover'); }); // Shuffle playlist order function const shufflePlaylist = (items) => { for (let i = items.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [items[i], items[j]] = [items[j], items[i]]; } return items; }; const shuffledItems = shufflePlaylist(listItems); playlist.innerHTML = ''; shuffledItems.forEach((item) => playlist.appendChild(item)); // Append shuffled items // Format time helper function const formatTime = (time) => { const minutes = Math.floor(time / 60); const seconds = Math.floor(time % 60).toString().padStart(2, '0'); return `${minutes}:${seconds}`; }; // Play or pause the current track function const playPause = () => { const playIcon = playPauseButton.querySelector('.play'); const pauseIcon = playPauseButton.querySelector('.pause'); if (audio.paused) { audio.play(); pauseIcon.classList.add('visible'); pauseIcon.classList.remove('hidden'); playIcon.classList.remove('visible'); playIcon.classList.add('hidden'); } else { audio.pause(); playIcon.classList.add('visible'); playIcon.classList.remove('hidden'); pauseIcon.classList.remove('visible'); pauseIcon.classList.add('hidden'); } // Update event label text for GA eventLabel = 'start ' + audioSource.dataset.ai + ' : ' + playerTextTitle.innerHTML.toLowerCase(); playPauseButton.blur(); }; // Play or Pause the current track const muteUnmute = () => { const onIcon = muteButton.querySelector('.on'); const offIcon = muteButton.querySelector('.off'); audio.muted = !audio.muted; if (audio.muted) { offIcon.classList.add('visible'); offIcon.classList.remove('hidden'); onIcon.classList.remove('visible'); onIcon.classList.add('hidden'); } else { onIcon.classList.add('visible'); onIcon.classList.remove('hidden'); offIcon.classList.remove('visible'); offIcon.classList.add('hidden'); } muteButton.blur(); }; // Play/pause functionality playPauseButton.addEventListener('click', () => { playPause(); }); // Update seek bar and current time as audio plays audio.addEventListener('timeupdate', () => { seekBar.value = audio.currentTime; currentTimeDisplay.textContent = formatTime(audio.currentTime); }); // Set seek bar max value when audio metadata is loaded if (audio.duration) { seekBar.max = audio.duration; durationDisplay.textContent = formatTime(audio.duration); } audio.addEventListener('loadedmetadata', () => { seekBar.max = audio.duration; durationDisplay.textContent = formatTime(audio.duration); }); // Seek audio when seek bar value changes seekBar.addEventListener('input', () => { audio.currentTime = seekBar.value; }); // Mute/unmute functionality muteButton.addEventListener('click', () => { muteUnmute(); }); // Volume control functionality volumeBar.addEventListener('input', () => { audio.volume = volumeBar.value; }); // Change playback speed functionality playbackSpeedSelect.addEventListener('change', () => { playbackSpeed = parseFloat(playbackSpeedSelect.value); audio.playbackRate = playbackSpeed; }); shuffledItems.forEach((button) => { const r = Math.random(); if (r >= 0.5) { button.dataset.src = button.dataset.srcNotebooklm; button.dataset.type = button.dataset.typeNotebooklm; button.dataset.ai = 'notebooklm'; } else { button.dataset.src = button.dataset.srcOreilly; button.dataset.type = button.dataset.typeOreilly; button.dataset.ai = 'oreilly'; } button.addEventListener('click', () => { if (!button.classList.contains('selected')) { // Update source attributes using dataset const { src: newSrc, type: newType, ai: newAI } = button.dataset; audioSource.src = newSrc; audioSource.type = newType; audioSource.dataset.ai = newAI; // Load the new source into the audio player audio.load(); // Set the playback speed to the current selection audio.playbackRate = playbackSpeed; playerTextCover.src = button.querySelector('.cover')?.getAttribute('src'); playerTextLabel.innerHTML = button.querySelector('.label')?.innerHTML; playerTextTitle.innerHTML = button.querySelector('.title')?.innerHTML; // Highlight the selected button player.querySelector('.player-list-item.selected')?.classList.remove('selected'); button.classList.add('selected'); playPause(); } }); }); const firstItem = shuffledItems[0]; if (firstItem) { const { src: defaultSrc, type: defaultType, ai: defaultAI } = firstItem.dataset; audioSource.src = defaultSrc; audioSource.type = defaultType; audioSource.dataset.ai = defaultAI; audio.load(); audio.playbackRate = playbackSpeed; playerTextCover.src = firstItem.querySelector('.cover')?.getAttribute('src'); playerTextLabel.innerHTML = firstItem.querySelector('.label')?.innerHTML; playerTextTitle.innerHTML = firstItem.querySelector('.title')?.innerHTML; firstItem.classList.add('selected'); } audio.addEventListener('play', () => { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'ai podcast', 'eventLbl':eventLabel, 'eventVal':0, 'nonInteraction': 0, }); }); /* dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'ai podcast', 'eventLbl':'thumbs up: [file title]', 'eventVal':0, 'nonInteraction': 0, }); dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'ai podcast', 'eventLbl':'thumbs down [file title]', 'eventVal':0, 'nonInteraction': 0, }); */ // Show the player after initialized player.classList.add('fadeIn'); }; // Initialize all audio players on the page const players = document.querySelectorAll('.player'); players.forEach((player) => initializeAudioPlayer(player)); }); </script> </div> <div class="sectionText"> <h2>O’Reilly AI-powered Answers just got even smarter</h2> <p>O’Reilly Answers instantly generates information teams can trust, sourced from thousands of titles on our learning platform.</p> <a id="answers-cta" href="https://www.oreilly.com/online-learning/feature-answers.html" class="textCTA-blue"><span class="inner">Discover Answers</span></a> </div> </div> </section> <section class="teamsSection teamsSection-org home-logos"> <div class="content"> <div class="sectionText"> <h2>More than 5,000 organizations count on O’Reilly</h2> </div> <figure class="sectionFigure"> <img class="height_s" src="https://cdn.oreillystatic.com/oreilly/logos/logo_airbnb_reverse.svg" alt="logo: AirBnB"> <img class="height_s" src="https://cdn.oreillystatic.com/oreilly/logos/logo_blue_origin_reverse.svg" alt="logo: Blue Origin"> <img class="height_xs" src="https://cdn.oreillystatic.com/oreilly/images/logo_electronic_arts.svg" alt="logo: Electronic Arts"> <img class="height_m" src="https://cdn.oreillystatic.com/oreilly/images/logo_ibm_reverse.svg" alt="logo: IBM"> <img class="height_l" src="https://cdn.oreillystatic.com/oreilly/images/logo_home_depot.svg" alt="logo: Home Depot"> <img class="height_s" src="https://cdn.oreillystatic.com/oreilly/images/logo_nasdaq_reverse.svg" alt="logo: Nasdaq"> <img class="height_s" src="https://cdn.oreillystatic.com/oreilly/images/logo_rakuten_reverse.svg" alt="logo: Rakuten"> <img class="height_s" src="https://cdn.oreillystatic.com/oreilly/logos/logo_tcs_reverse.svg" alt="logo: TCS"> </figure> </div> </section> <section class="home-experts"> <div class="content"> <div class="sectionText"> <figure class="sectionLabel"> <p>O’Reilly Experts</p> </figure> <h2>We share the knowledge of innovators. You put it to work.</h2> <p>Tech teams love tapping into the minds of innovators through our expert-led courses, renowned text-based content, and bite-size online Superstream tech conferences. In fact, in a recent survey, one-third of tech practitioners rated O’Reilly content a five out of five (excellent)—better than Pluralsight, LinkedIn Learning, Udacity, or Skillsoft.</p> </div> <div class="sectionFigure"> <button class="button-left" id="home-experts-slider-button-left" type="button"></button> <div class="home-experts-slider"> <div class="home-experts-panels" id="home-experts-panels"> <a href="https://learning.oreilly.com/search/?query=author%3A%22Arianne%20Dee%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=suggestion&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/images/live-online-training/39040-720x720.jpg)"> <div class="text"> <span class="name">Arianne Dee</span> <span class="affiliation">Software developer</span> </div> </a> <a href="https://learning.oreilly.com/search/?query=author%3A%22Sari%20Greene%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/home_sari_greene_720x720.jpg)"> <div class="text"> <span class="name">Sari Greene</span> <span class="affiliation">Cybersecurity practitioner</span> </div> </a> <a href="https://learning.oreilly.com/search/?query=author%3A%22Bruno%20Gon%C3%A7alves%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/images/live-online-training/39420-720x720.jpg)"> <div class="text"> <span class="name">Bruno Gonçalves</span> <span class="affiliation">Senior data scientist</span> </div> </a> <a href="https://learning.oreilly.com/search/?query=author%3A%22Neal%20Ford%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/home_neal_ford_720x720.jpg)"> <div class="text"> <span class="name">Neal Ford</span> <span class="affiliation">Software architect</span> </div> </a> <a href="https://learning.oreilly.com/search/?query=author%3A%22Kelsey%20Hightower%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/kelsey_hightower_color_400x400.jpg)"> <div class="text"> <span class="name">Kelsey Hightower</span> <span class="affiliation">Software engineer</span> </div> </a> <a href="https://learning.oreilly.com/search/?query=author%3A%22Ken%20Kousen%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/ken-kousen-400x400.jpg)"> <div class="text"> <span class="name">Ken Kousen</span> <span class="affiliation">Java Champion</span> </div> </a> </div> </div> <button class="button-right" id="home-experts-slider-button-right" type="button"></button> </div> </div> </section> <section class="home-testimonial"> <div class="content"> <div class="home-testimonial-figure"> <div id="js-testimonialVideo1" class="home-testimonial-video"> <div id="kaltura_player_1689279523"></div> </div> <div id="js-testimonialVideo2" class="home-testimonial-video hidden"> <div id="kaltura_player_1674688758"></div> </div> <div id="js-testimonialVideo3" class="home-testimonial-video hidden"> <div id="kaltura_player_1666285022"></div> </div> <div id="js-testimonialVideo4" class="home-testimonial-video hidden"> <div id="kaltura_player_1660838772"></div> </div> <div class="home-testimonial-thumbnails"> <button id="js-testimonialThumbnail1" class="home-testimonial-thumbnails-item active"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20230201.jpg" alt="Testimonial video thumbnail 1"></button> <button id="js-testimonialThumbnail2" class="home-testimonial-thumbnails-item"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb3-711x400-20230201.jpg" alt="Testimonial video thumbnail 2"></button> <button id="js-testimonialThumbnail3" class="home-testimonial-thumbnails-item"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20221020.jpg" alt="Testimonial video thumbnail 3"></button> <button id="js-testimonialThumbnail4" class="home-testimonial-thumbnails-item"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb2-400x225-20221019.jpg" alt="Testimonial video thumbnail 4"></button> </div> </div> <div class="sectionText"> <figure class="sectionIcon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M21 8H3M16 2V5M8 2V5M7.8 22H16.2C17.8802 22 18.7202 22 19.362 21.673C19.9265 21.3854 20.3854 20.9265 20.673 20.362C21 19.7202 21 18.8802 21 17.2V8.8C21 7.11984 21 6.27976 20.673 5.63803C20.3854 5.07354 19.9265 4.6146 19.362 4.32698C18.7202 4 17.8802 4 16.2 4H7.8C6.11984 4 5.27976 4 4.63803 4.32698C4.07354 4.6146 3.6146 5.07354 3.32698 5.63803C3 6.27976 3 7.11984 3 8.8V17.2C3 18.8802 3 19.7202 3.32698 20.362C3.6146 20.9265 4.07354 21.3854 4.63803 21.673C5.27976 22 6.11984 22 7.8 22ZM11.9973 12.3306C11.1975 11.4216 9.8639 11.1771 8.86188 12.0094C7.85986 12.8418 7.71879 14.2335 8.50568 15.2179C9.077 15.9327 10.6593 17.3397 11.4833 18.0569C11.662 18.2124 11.7513 18.2902 11.856 18.321C11.9466 18.3477 12.0479 18.3477 12.1386 18.321C12.2432 18.2902 12.3325 18.2124 12.5112 18.0569C13.3353 17.3397 14.9175 15.9327 15.4888 15.2179C16.2757 14.2335 16.1519 12.8331 15.1326 12.0094C14.1134 11.1858 12.797 11.4216 11.9973 12.3306Z" stroke="#2563EA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></figure> <div id="js-testimonialText1"> <h2>Hear why Jose is on O’Reilly every day</h2> <p>Jose, a principal software engineer, trusts our learning platform to filter what his teams need to know to stay ahead.</p> </div> <div id="js-testimonialText2" class="hidden"> <h2>See why Addison loves our learning platform</h2> <p>Addison always appreciated O’Reilly books, but the learning platform helped take her skills to the next level.</p> </div> <div id="js-testimonialText3" class="hidden"> <h2>Amir trusts O’Reilly to find the answers he needs. See why.</h2> <p>For over eight years Amir has counted on our learning platform whether he needs proven methods to learn new technologies or the latest management tips.</p> </div> <div id="js-testimonialText4" class="hidden"> <h2>Mark’s been an O’Reilly member for 13 years. See why.</h2> <p>Mark credits the O’Reilly learning platform with helping him to stay ahead at every turn throughout his tech career.</p> </div> <a id="testimonial-cta" href="https://www.oreilly.com/online-learning/testimonials.html" class="textCTA-blue"><span class="inner">See more testimonials</span></a> </div> <script src="https://cdnapisec.kaltura.com/p/1681692/sp/168169200/embedIframeJs/uiconf_id/47268383/partner_id/1681692"></script> <script> kWidget.embed({ "targetId": "kaltura_player_1689279523", "wid": "_1681692", "uiconf_id": 47268383, "flashvars": { 'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20230201.jpg', 'autoMute': false, 'autoPlay': false, 'controlBarContainer.plugin': false, }, "cache_st": 1689279523, "entry_id": "1_7le83llz" }); kWidget.embed({ "targetId": "kaltura_player_1674688758", "wid": "_1681692", "uiconf_id": 47268383, "flashvars": { 'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb3-711x400-20230201.jpg', 'autoMute': false, 'autoPlay': false, 'controlBarContainer.plugin': false, }, "cache_st": 1674688758, "entry_id": "1_td7km9vj" }); kWidget.embed({ "targetId": "kaltura_player_1666285022", "wid": "_1681692", "uiconf_id": 47268383, "flashvars": { 'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20221020.jpg', 'autoMute': false, 'autoPlay': false, 'controlBarContainer.plugin': false, }, "cache_st": 1666285022, "entry_id": "1_nrvzd3wa" }); kWidget.embed({ "targetId": "kaltura_player_1660838772", "wid": "_1681692", "uiconf_id": 47268383, "flashvars": { 'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb2-400x225-20221019.jpg', 'autoMute': false, 'autoPlay': false, 'controlBarContainer.plugin': false, }, "cache_st": 1603408139, "entry_id": "1_4jl34ett" }); </script> </div> </section> <section class="home-cta"> <div class="content"> <div class="sectionText"> <h2>See how O’Reilly can help your tech teams stay ahead</h2> <div class="home-cta-btnGroup"> <a id="requestDemo2-cta" href="https://www.oreilly.com/online-learning/enterprise.html" class="btnCTA-blue"><span class="inner">Request a demo</span></a> <a id="tryFree2-cta" href="https://learning.oreilly.com/start-trial/" class="textCTA-blue"><span class="inner">Try it free</span></a> </div> </div> </div> </section> <div class="ravenBlobs"> <div class="blob1"></div> <div class="blob2"></div> <div class="blob3"></div> <div class="blob4"></div> <div class="blob5"></div> <div class="blob6"></div> </div> </span> <script> kWidget.addReadyCallback(function( playerId ){ var kdp = document.getElementById( playerId ); kdp.sendNotification("changeVolume", 1); kdp.kBind("firstPlay", function() { //GA /* dataLayer.push({ 'event': 'eventTracker', 'eventCat': 'marketing', 'eventAct': 'video play', 'eventLbl': 'start', 'eventVal': 0, 'nonInteraction': 0 }); */ }); kdp.kBind("playerPlayEnd", function() { //GA /* dataLayer.push({ 'event': 'eventTracker', 'eventCat': 'marketing', 'eventAct': 'video play', 'eventLbl': 'complete', 'eventVal': 0, 'nonInteraction': 0 }); */ }); }); (function() { //Add thumbnail button controls const thumbnail1 = document.getElementById('js-testimonialThumbnail1'); const thumbnail2 = document.getElementById('js-testimonialThumbnail2'); const thumbnail3 = document.getElementById('js-testimonialThumbnail3'); const thumbnail4 = document.getElementById('js-testimonialThumbnail4'); const video1 = document.getElementById('js-testimonialVideo1'); const video2 = document.getElementById('js-testimonialVideo2'); const video3 = document.getElementById('js-testimonialVideo3'); const video4 = document.getElementById('js-testimonialVideo4'); const text1 = document.getElementById('js-testimonialText1'); const text2 = document.getElementById('js-testimonialText2'); const text3 = document.getElementById('js-testimonialText3'); const text4 = document.getElementById('js-testimonialText4'); thumbnail1.addEventListener('click', function(e) { e.preventDefault(); thumbnail1.classList.add('active'); video1.classList.remove('hidden'); text1.classList.remove('hidden'); // document.getElementById('kaltura_player_1689279523').sendNotification('doPlay'); thumbnail2.classList.remove('active'); text2.classList.add('hidden'); video2.classList.add('hidden'); document.getElementById('kaltura_player_1674688758').sendNotification('doPause'); thumbnail3.classList.remove('active'); text3.classList.add('hidden'); video3.classList.add('hidden'); document.getElementById('kaltura_player_1666285022').sendNotification('doPause'); thumbnail4.classList.remove('active'); text4.classList.add('hidden'); video4.classList.add('hidden'); document.getElementById('kaltura_player_1660838772').sendNotification('doPause'); }); thumbnail2.addEventListener('click', function(e) { e.preventDefault(); thumbnail2.classList.add('active'); video2.classList.remove('hidden'); text2.classList.remove('hidden'); // document.getElementById('kaltura_player_1674688758').sendNotification('doPlay'); thumbnail1.classList.remove('active'); text1.classList.add('hidden'); video1.classList.add('hidden'); document.getElementById('kaltura_player_1689279523').sendNotification('doPause'); thumbnail3.classList.remove('active'); text3.classList.add('hidden'); video3.classList.add('hidden'); document.getElementById('kaltura_player_1666285022').sendNotification('doPause'); thumbnail4.classList.remove('active'); text4.classList.add('hidden'); video4.classList.add('hidden'); document.getElementById('kaltura_player_1660838772').sendNotification('doPause'); }); thumbnail3.addEventListener('click', function(e) { e.preventDefault(); thumbnail3.classList.add('active'); video3.classList.remove('hidden'); text3.classList.remove('hidden'); // document.getElementById('kaltura_player_1666285022').sendNotification('doPlay'); thumbnail1.classList.remove('active'); text1.classList.add('hidden'); video1.classList.add('hidden'); document.getElementById('kaltura_player_1689279523').sendNotification('doPause'); thumbnail2.classList.remove('active'); text2.classList.add('hidden'); video2.classList.add('hidden'); document.getElementById('kaltura_player_1674688758').sendNotification('doPause'); thumbnail4.classList.remove('active'); text4.classList.add('hidden'); video4.classList.add('hidden'); document.getElementById('kaltura_player_1660838772').sendNotification('doPause'); }); thumbnail4.addEventListener('click', function(e) { e.preventDefault(); thumbnail4.classList.add('active'); video4.classList.remove('hidden'); text4.classList.remove('hidden'); // document.getElementById('kaltura_player_1660838772').sendNotification('doPlay'); thumbnail1.classList.remove('active'); text1.classList.add('hidden'); video1.classList.add('hidden'); document.getElementById('kaltura_player_1689279523').sendNotification('doPause'); thumbnail2.classList.remove('active'); text2.classList.add('hidden'); video2.classList.add('hidden'); document.getElementById('kaltura_player_1674688758').sendNotification('doPause'); thumbnail3.classList.remove('active'); text3.classList.add('hidden'); video3.classList.add('hidden'); document.getElementById('kaltura_player_1666285022').sendNotification('doPause'); }); })(); //Bento expert carousel controls (function() { let carouselInner = document.getElementById('home-experts-panels'); let slideDistance = 196; //carousel image width + gap let currentX = 0; let timeoutID; let sliding = false; function moveCarousel() { let transform = `translateX(${currentX}px)`; carouselInner.style.transform = transform; } document.getElementById('home-experts-slider-button-left').addEventListener('click', function (e) { if (sliding === false) { currentX = currentX - slideDistance; sliding = true; carouselInner.classList.add("stopMove"); carouselInner.prepend(carouselInner.lastElementChild); moveCarousel(); timeoutID = setTimeout(() => { carouselInner.classList.remove("stopMove"); currentX = 0; moveCarousel(); }, 1); setTimeout(() => { sliding = false; }, 400); } }); document.getElementById('home-experts-slider-button-right').addEventListener('click', function (e) { if (sliding === false) { carouselInner.classList.remove("stopMove"); currentX = currentX - slideDistance; sliding = true; moveCarousel(); timeoutID = setTimeout(() => { carouselInner.classList.add("stopMove"); carouselInner.appendChild(carouselInner.children[0]); currentX = 0; moveCarousel(); sliding = false; }, 400); } }); })(); </script> <script src="https://cdn.oreillystatic.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> document.addEventListener("DOMContentLoaded", function(event) { //GA event for "Request a demo" CTA $('#requestDemo1-cta-a, #requestDemo1-cta-b, #requestDemo1-cta-c').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'request a demo', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "Try it free" CTA $('#tryFree1-cta-a, #tryFree1-cta-b, #tryFree1-cta-c').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'try it free', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "Request a demo" end of page CTA $('#requestDemo2-cta').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'request a demo|end of page', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "Try it free" end of page CTA $('#tryFree2-cta').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'try it free|end of page', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "Testimonials" CTA $('#testimonial-cta').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'see more testimonials', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "Answers" CTA $('#answers-cta').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'answers: discover answers', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "how we did it" CTA $('#blogLink').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'how we did it', 'eventVal':0, 'nonInteraction': 0, }); }); //GA event for "how we did it" CTA $('#deiScholarship').on('click', function(e) { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'click', 'eventLbl':'apply for a dei scholarship', 'eventVal':0, 'nonInteraction': 0, }); }); }); </script> <script> (function() { //Adelphic pixel on page load var adelphicPixel = new Image(1,1); adelphicPixel.src="https://ad.ipredictive.com/d/track/cvt/pixel?acct_id=58840&cache_buster=" + Math.floor(Date.now()/1000); })(); </script> </main> <footer id="footer" class="footer"> <div class="content"> <div class="footer-main" aria-label="company info"> <div class="footer-mainLeft"> <div class="footer-mainLeftOne"> <div class="footer-approach"> <h2 class="footer-header"><a href="/about/">About O’Reilly</a></h2> <ul class="footer-links"> <li><a href="/work-with-us.html">Teach/write/train</a></li> <li><a href="/careers/">Careers</a></li> <li><a href="/press/">O’Reilly news</a></li> <li><a href="/press/media-coverage.html">Media coverage</a></li> <li><a href="/partner/signup.csp">Community partners</a></li> <li><a href="/affiliates/">Affiliate program</a></li> <li><a href="/online-learning/rfp.html">Submit an RFP</a></li> <li><a href="/diversity/">Diversity</a></li> <li><a href="/content-marketing-solutions.html" id="footerSponsorshipLink">O’Reilly for marketers</a></li> </ul> </div> </div> <div class="footer-mainLeftTwo"> <div class="footer-contact"> <h2 class="footer-header"><a href="/online-learning/support/">Support</a></h2> <ul class="footer-links"> <li><a href="/about/contact.html">Contact us</a></li> <li><a href="/emails/newsletters/">Newsletters</a></li> <li><a href="/privacy.html">Privacy policy</a></li> <li><a href="/about/oreilly-approach-to-generative-ai.html">AI policy</a></li> </ul> <a href="https://www.linkedin.com/company/oreilly-media" target="_blank"><svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32.25 32.25"><defs><style>.cls-1{fill:#d30000;fill-rule:evenodd;}</style></defs><title>linkedin-logo</title><path class="cls-1" d="M17.43,13.53v0l0,0ZM16.12,0A16.13,16.13,0,1,0,32.25,16.12,16.12,16.12,0,0,0,16.12,0ZM11.77,22.92H8.12v-11h3.65ZM9.94,10.44h0a1.89,1.89,0,0,1-2-1.89A1.91,1.91,0,0,1,10,6.65a1.9,1.9,0,1,1,0,3.79Zm15,12.48H21.28V17.05c0-1.48-.53-2.49-1.85-2.49a2,2,0,0,0-1.88,1.34,2.63,2.63,0,0,0-.12.89v6.13H13.79s.05-10,0-11h3.64V13.5a3.63,3.63,0,0,1,3.29-1.82c2.4,0,4.21,1.57,4.21,4.95Z"/></svg></a> <a href="https://www.youtube.com/user/OreillyMedia" target="_blank"><svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32.25 32.25"><defs><style>.cls-1{fill:#d30000;fill-rule:evenodd;}</style></defs><title>youtube-logo</title><path class="cls-1" d="M18.35,18.68a.89.89,0,0,0-.86.63V16.94h-1v7.59h1v-.59a.92.92,0,0,0,.89.74c.52,0,.86-.36,1-1.07a8.56,8.56,0,0,0,.14-1.9,10.47,10.47,0,0,0-.12-1.93C19.21,19.05,18.87,18.68,18.35,18.68Zm.09,4.14c-.05.52-.2.77-.45.77s-.43-.21-.49-.63a7.22,7.22,0,0,1,0-1c0-.72,0-1.14,0-1.26.07-.58.23-.88.51-.88s.4.27.46.79c0,.09,0,.47,0,1.13S18.46,22.71,18.44,22.82ZM8.61,18.19H9.86v6.34H11V18.19H12.2V16.94H8.61Zm7.71-6.12c.27,0,.43-.22.49-.66,0-.09,0-.45,0-1.07V9.78c0-.58,0-.93,0-1-.07-.43-.23-.65-.48-.65s-.41.19-.48.57a8.79,8.79,0,0,0,0,1v.53c0,.71,0,1.09,0,1.16C15.88,11.82,16.05,12.07,16.32,12.07Zm-1.74,10.4a2.92,2.92,0,0,1-.06.71c-.07.25-.2.37-.4.37s-.32-.11-.38-.34a2.63,2.63,0,0,1-.05-.66V18.83h-1v4.48c0,.91.33,1.37,1,1.37A1,1,0,0,0,14.6,24v.57h1v-5.7h-1Zm7.1-3.79a1.35,1.35,0,0,0-1.22.59,2.48,2.48,0,0,0-.3,1.07c0,.23,0,.61,0,1.16s0,1.13,0,1.37a2.93,2.93,0,0,0,.35,1.27,1.25,1.25,0,0,0,1.14.54,1.36,1.36,0,0,0,1.13-.45,2.29,2.29,0,0,0,.37-1.43s0-.07,0-.11v-.12h-1c0,.75-.17,1.12-.51,1.12s-.38-.18-.45-.56a4.68,4.68,0,0,1-.06-.9c0-.18,0-.31,0-.37h2v-.43a4.86,4.86,0,0,0-.3-2.11A1.28,1.28,0,0,0,21.68,18.68ZM22.15,21h-1c0-.05,0-.11,0-.16v-.08a1.64,1.64,0,0,1,.11-.8.39.39,0,0,1,.38-.23.42.42,0,0,1,.43.33,2.32,2.32,0,0,1,.07.7Zm-6-21A16.13,16.13,0,1,0,32.25,16.12,16.12,16.12,0,0,0,16.12,0Zm2.51,7.2h1V11a2.52,2.52,0,0,0,.06.66c.06.23.18.34.38.34s.34-.12.41-.37a3.76,3.76,0,0,0,.05-.71V7.2h1v5.74h-1v-.57a1,1,0,0,1-.93.72c-.66,0-1-.46-1-1.38ZM15,8a1.29,1.29,0,0,1,1.33-.92A1.3,1.3,0,0,1,17.65,8a6.77,6.77,0,0,1,.23,2.1,6.77,6.77,0,0,1-.23,2.1,1.3,1.3,0,0,1-1.32.92A1.29,1.29,0,0,1,15,12.17a6.77,6.77,0,0,1-.23-2.1A6.86,6.86,0,0,1,15,8ZM11.45,5.3l.89,2.87.88-2.87H14.4L12.88,9.7v3.24h-1.1V9.7L10.24,5.3ZM24.93,23.91a3,3,0,0,1-3,3h-12a3,3,0,0,1-3-3V18.05a3,3,0,0,1,3-3h12a3,3,0,0,1,3,3Z"/></svg></a> </div> <div class="footer-international"> <h2 class="footer-header">International</h2> <ul class="footer-links"> <li><a href="https://www.oreilly.com/anz/">Australia & New Zealand</a></li> <li><a href="https://oreilly.hk/">Hong Kong & Taiwan</a></li> <li><a href="https://oreillylearning.in/">India</a></li> <li><a href="https://oreilly.id/">Indonesia</a></li> <li><a href="https://www.oreilly.co.jp/index.shtml">Japan</a></li> </ul> </div> </div> </div> <div class="footer-download" id="download-info"> <h2 class="footer-header">Download the O’Reilly App</h2> <p>Take O’Reilly with you and learn anywhere, anytime on your phone <span class="nowrap">and tablet.</span></p> <div class="footer-downloadLinks"> <a href="https://itunes.apple.com/us/app/safari-to-go/id881697395"><img src="https://cdn.oreillystatic.com/oreilly/images/app-store-logo.png" alt="Apple app store" /></a> <a href="https://play.google.com/store/apps/details?id=com.safariflow.queue"><img src="https://cdn.oreillystatic.com/oreilly/images/google-play-logo.png" alt="Google play store" /></a> </div> </div> <div class="footer-download" id="tv-info"> <h2 class="footer-header">Watch on your big screen</h2> <p>View all O’Reilly videos, Superstream events, and Meet the Expert sessions on your <span class="nowrap">home TV.</span></p> <div class="footer-downloadLinks"> <a href="https://channelstore.roku.com/details/c9d25fa651f0ad84e484b0dfd4b20172:856a240ad268961983e91ae52c1e1e5c/oreilly"><img src="https://cdn.oreillystatic.com/oreilly/images/roku-tv-logo.png" alt="Roku Players and TVs" /></a> <a href="https://www.amazon.com/OReilly-Media-Inc/dp/B087YYHL5C/ref=sr_1_2?dchild=1&keywords=oreilly&qid=1604964116&s=mobile-apps&sr=1-2"><img src="https://cdn.oreillystatic.com/oreilly/images/amazon-appstore-logo.png" alt="Amazon appstore" /></a> </div> </div> <div class="footer-donotsell" id="donotsell-info"> <h2 class="footer-header"><a href="https://www.oreilly.com/privacy.html?donotsell=show">Do not sell or share my personal information</a></h2> </div> </div> <div class="footer-subfooter"> <a href="https://www.oreilly.com" title="home page" aria-current="page"> <img class="footer-subfooterLogo" id="footer-subfooterLogo" src="https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red.svg" onerror="this.src='https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red_@2x.png'; this.onerror=null;" alt="O'Reilly home"> </a> <p>© 2025, O’Reilly Media, Inc. All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.</p> <p><a href="/terms/">Terms of service</a> • <a href="/privacy.html">Privacy policy</a> • <a href="/about/editorial_independence.html">Editorial independence</a><span class="transparencyStatement" style="display:none;"> • <a href="/modern-slavery-act-transparency-statement.html">Modern Slavery Act Statement</a></span></p> </div> </div> </footer> <script src="https://cdn.oreillystatic.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script> $(function() { //Toggle isActive and mobileHidden classes for mobileNavButton $('nav #mobileNavButton').on('click', function() { var expanded = $(this).attr('aria-expanded') === 'true' || false; $(this).attr('aria-expanded', !expanded); $(this).toggleClass("isActive"); $(this).next().toggleClass("mobileHidden"); }); //Toggle isFocused class for keyboard navigation of submenus $('nav #menuList .menuList-subItem a').each(function(navItem) { $(this).on('focus', function() { $(this).parent().parent().toggleClass('isFocused'); }); $(this).on('blur', function() { $(this).parent().parent().toggleClass('isFocused'); }); }); //Toggle mobileHidden class accordian elements $('.mobileAccordian').each(function() { var $btn = $(this).find('button'); var $target = $(this).next(); $btn.on('click', function() { var expanded = $btn.attr('aria-expanded') === 'true' || false; $btn.attr('aria-expanded', !expanded); $target.toggleClass("mobileHidden"); }); }); //Search platform form action function searchSubmit(e) { e.preventDefault(); sParameter = searchForm.search.value; sParameter = encodeURIComponent(sParameter.trim()); sURL = searchForm.action + '?query=' + sParameter; window.location = sURL; //GA event for search dataLayer.push({ 'event': 'eventTracker', 'eventCat':'site search', 'eventAct':'search box', 'eventLbl':'explore our content', 'eventVal':0, 'nonInteraction': 0, }); } const searchForm = document.getElementById('js-searchForm'); searchForm.addEventListener('submit', searchSubmit); //Search button action function showNavSearch(e) { $('.menuList-item-search').addClass('overlay'); $('.menuList-item-search input#search').focus(); } const searchButton = document.getElementById('js-searchButton'); searchButton.addEventListener('click', showNavSearch); //Close search button action function hideNavSearch(e) { $('.menuList-item-search').removeClass('overlay'); } const searchCloseButton = document.getElementById('js-searchCloseButton'); searchCloseButton.addEventListener('click', hideNavSearch); //"Try Now" nav button tracking $('#nav-tryNow').on('click', function() { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'nav', 'eventLbl':'try now', 'eventVal':0, 'nonInteraction': 0, }); }); //"Sign in" nav button tracking $('#nav-signIn').on('click', function() { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'nav', 'eventLbl':'sign in', 'eventVal':0, 'nonInteraction': 0, }); }); //"O'Reilly Platform" nav button tracking $('#nav-platform').on('click', function() { dataLayer.push({ 'event': 'eventTracker', 'eventCat':'marketing', 'eventAct':'nav', 'eventLbl':'oreilly platform', 'eventVal':0, 'nonInteraction': 0, }); }); }); (function(document, history, location) { var HISTORY_SUPPORT = !!(history && history.pushState); FIXED_HEADER_HEIGHT = document.querySelector('body > header').offsetHeight; FIXED_HEADER_HEIGHT += 20; var anchorScrolls = { ANCHOR_REGEX: /^#[^ ]+$/, OFFSET_HEIGHT_PX: FIXED_HEADER_HEIGHT, /** * Establish events, and fix initial scroll position if a hash is provided. */ init: function() { this.scrollToCurrent(); window.addEventListener('hashchange', this.scrollToCurrent.bind(this)); document.body.addEventListener('click', this.delegateAnchors.bind(this)); }, /** * Return the offset amount to deduct from the normal scroll position. * Modify as appropriate to allow for dynamic calculations */ getFixedOffset: function() { return this.OFFSET_HEIGHT_PX; }, /** * If the provided href is an anchor which resolves to an element on the * page, scroll to it. * @param {String} href * @return {Boolean} - Was the href an anchor. */ scrollIfAnchor: function(href, pushToHistory) { var match, rect, anchorOffset; if(!this.ANCHOR_REGEX.test(href)) { return false; } match = document.getElementById(href.slice(1)); if(match) { rect = match.getBoundingClientRect(); anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset(); // Wait 1ms and scroll. It wasn't consistently scrolling immediately. setTimeout(function(){ window.scroll(window.pageXOffset, anchorOffset); }, 1); // Add the state to history as-per normal anchor links if(HISTORY_SUPPORT && pushToHistory) { history.pushState({}, document.title, location.pathname + href); } } return !!match; }, /** * Attempt to scroll to the current location's hash. */ scrollToCurrent: function() { this.scrollIfAnchor(window.location.hash); }, /** * If the click event's target was an anchor, fix the scroll position. */ delegateAnchors: function(e) { var elem = e.target; if( elem.nodeName === 'A' && this.scrollIfAnchor(elem.getAttribute('href'), true) ) { e.preventDefault(); } } }; window.addEventListener( 'DOMContentLoaded', anchorScrolls.init.bind(anchorScrolls) ); })(window.document, window.history, window.location); </script><script type="text/javascript" nonce="cffaafb9f33b1bea66037c80856a6ecf" src="/B1gBXdaS_C-43kauoA/Erw1DNGGStmrXE5p/C0QIeWs8Bw/Hh/djIyojBV0B"></script><link rel="stylesheet" type="text/css" nonce="cffaafb9f33b1bea66037c80856a6ecf" href="/B1gBXdaS_C-43kauoA/2fw1uY/dEZheGs8Bw/Nx/lKLhwXUSJZ"><script nonce="cffaafb9f33b1bea66037c80856a6ecf" src="/B1gBXdaS_C-43kauoA/2fw1uY/dEZheGs8Bw/Kh/B4JhNALk8p" async defer></script><div id="sec-overlay" style="display:none;"><div id="sec-container"></div></div></body> </html>