CINXE.COM
Online Learning Answers - O'Reilly Media
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Online Learning Answers - O'Reilly Media</title> <meta name="description" content="Don't get stuck. Get Answers." /> <meta name="date" content="2024-11-24" /> <meta name="search_date" content="2020-10-19" /> <meta name="search-title" content="Online Learning Answers - O'Reilly Media" /> <meta name="pagename" content="Online Learning Answers - O'Reilly Media" /> <meta name="site" content="O'Reilly" /> <meta name="twitter:title" content="Online Learning Answers - O'Reilly Media" /> <meta name="twitter:description" content="Don't get stuck. Get Answers." /> <meta name="twitter:site" content="@OReillyMedia" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Online Learning Answers - O'Reilly Media" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://cdn.oreillystatic.com/oreilly/images/social_oreilly_answers_1200x1200.png" /> <meta property="og:image" content="https://cdn.oreillystatic.com/oreilly/images/social_oreilly_answers_1200x1200.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"> <meta name="robots" content="noindex"> <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> <!-- 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"><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" aria-current="page">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/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> /* .hero-teamsAdvantage */ .hero.hero-answers { background-color: #eee; } .hero.hero-answers:before { content: ""; display: block; position: absolute; z-index: 0; height: 100%; width: 100%; background-color: #d3002d; background-image: url(https://cdn.oreillystatic.com/oreilly/images/odot-answers-800x600.jpg); background-position: right top; background-repeat: no-repeat; background-size: cover; } .hero.hero-answers > .content .hero-cta { margin-bottom: 20px; } @media (min-width: 30em) { .hero.hero-answers > .content h1 { max-width: 60%; } .hero.hero-answers > .content p { max-width: 60%; } } @media (min-width: 40em) { .hero.hero-answers > .content h1 { margin-top: 22px !important; } .hero.hero-answers > .content p { margin-bottom: 20px; } .hero.hero-answers > .content .hero-cta { margin-bottom: 34px; } } @media (min-width: 50em) { .hero.hero-answers:before { background-image: url(https://cdn.oreillystatic.com/oreilly/images/odot-answers-1364x420.jpg); right: 0; } .hero.hero-answers > .content h1 { margin-top: 22px !important; } .hero.hero-answers > .content .hero-cta { margin-bottom: 34px; } } @media (min-width: 65em) { .hero.hero-answers:before { background-size: cover; background-position: right top; } .hero.hero-answers > .content h1 { margin-top: 22px !important; font-size: 48px !important; font-size: 3rem !important; } .hero.hero-answers > .content p { max-width: 40%; margin-bottom: 20px; font-size: 28px !important; font-size: 1.75rem !important; line-height: 1.3em; } } @media (min-width: 68em) { .hero.hero-answers:before { background-image: url(https://cdn.oreillystatic.com/oreilly/images/odot-answers-1364x420.jpg); } } @media (min-width: 71em) { .hero.hero-answers > .content p { font-size: 32px !important; font-size: 2rem !important; line-height: 1.3em; } .hero.hero-answers > .content .hero-cta { margin-bottom: 34px; } } @media (min-width: 85em) { .hero.hero-answers > .content h1 { font-size: 22px !important; font-size: 4rem !important; line-height: 1.08em !important; max-width: 50%; } .hero.hero-answers > .content p { font-size: 32px !important; font-size: 2rem !important; line-height: 1.3em; max-width: 50%; } } @media (min-width: 100em) { .hero.hero-answers:before { width: 1600px; left: 50%; margin-left: -800px; background-size: 1600px; background-position: center top; } } /* end .hero-teamsAdvantage */ /* .hero-general */ .hero.hero-general { background-color: #eee; } .hero.hero-general > .content h1 { max-width: 100%; } .hero.hero-general > .content h1:last-child { margin-bottom: 14px; } .hero.hero-general > .content p { max-width: 100%; } .hero.hero-general > .content p:last-child { margin-bottom: 14px; } @media (min-width: 30em) { .hero.hero-general > .content h1 { max-width: 80%; } .hero.hero-general > .content p { max-width: 80%; } } @media (min-width: 40em) { .hero.hero-general > .content h1 { margin-top: 22px !important; max-width: 75%; } .hero.hero-general > .content p { margin-bottom: 20px; max-width: 75%; } } @media (min-width: 50em) { .hero.hero-general > .content h1 { margin-top: 22px !important; } } @media (min-width: 65em) { .hero.hero-general > .content h1 { margin-top: 22px !important; font-size: 48px !important; font-size: 3rem !important; } .hero.hero-general > .content p { max-width: 40%; margin-bottom: 20px; font-size: 32px !important; font-size: 2rem !important; line-height: 1.2em; } } @media (min-width: 71em) { .hero.hero-general > .content p { font-size: 40px !important; font-size: 2.5rem !important; line-height: 1.2em; } } @media (min-width: 85em) { .hero.hero-general > .content h1 { font-size: 22px !important; font-size: 4rem !important; line-height: 1.08em !important; max-width: 50%; } .hero.hero-general > .content p { font-size: 40px !important; font-size: 2.5rem !important; line-height: 1.2em; max-width: 50%; } } /* end .hero-general */ /* .shortDescription */ .shortDescription { padding: 34px 0 14px; } .shortDescription h2 .highlight { color: rgb(0,113,235); } @supports (-webkit-background-clip: text) or (-moz-background-clip: text) { .shortDescription h2 .highlight { background: rgb(0,113,235) linear-gradient(135deg, rgb(0,113,235) 30%, rgb(20,212,216) 150%); background-size: 100%; -webkit-background-clip: text; -moz-background-clip: text; -webkit-text-fill-color: transparent; -moz-text-fill-color: transparent; box-decoration-break: clone; -webkit-box-decoration-break: clone; } } .shortDescription.introContent .shortDescription-col.multiCTA h3 { margin: 0 0 8px; max-width: 880px; font-size: 24px; font-size: 1.5rem; line-height: 1.4em; font-family: 'gilroy', Arial, sans-serif; font-weight: 600; letter-spacing: 0; } .shortDescription.introContent .shortDescription-col.multiCTA h4 { margin-bottom: 8px; max-width: 880px; font-size: 20px; font-size: 1.25rem; line-height: 1.5em; font-weight: 400; } .shortDescription-col.multiCTA .multiCTA-group:not(:last-of-type) { margin-bottom: 30px; padding-bottom: 20px; border-bottom: 1px solid #ddd; } @media (min-width: 40em) { /* 640px */ .shortDescription { padding: 54px 0 34px; } .shortDescription.introContent .shortDescription-col.multiCTA h3 { margin: 0 0 12px; font-size: 28px; font-size: 1.75rem; line-height: 1.3em; } .shortDescription.introContent .shortDescription-col.multiCTA h4 { font-size: 22px; font-size: 1.375rem; line-height: 1.5em; margin-bottom: 12px; } } @media (min-width: 53em) { /* 848px */ .shortDescription { padding: 54px 0 34px; } .shortDescription-columns { display: flex; flex-wrap: wrap; flex-direction: row; justify-content: space-between; align-items: top; } .shortDescription-col:nth-of-type(even), .shortDescription-col:nth-of-type(odd) { float: none; width: 50%; padding: 0; width: calc(50% - 40px); } } .colorSection { background: linear-gradient(229deg, #d30000 40.68%, #ff9c1a 146%); color: #ffffff; } .featuresSection-columns-text { width: 100%; margin-bottom:20px; } .featuresSection-columns-figure { width: 100%; margin-bottom:26px; } .featuresSection-columns-figure img { display: block; width: 100%; max-width: 800px; box-shadow: 0 5px 20px rgba(0,0,0,.1); } .featuresSection-columns-figure.noShadow img { box-shadow: none; } .featuresSection-columns-figure.filterShadow img { filter: drop-shadow(0 5px 20px rgba(0,0,0,.1)); box-shadow: none; } .featuresSection h2 { margin-bottom: 20px; font-size: 24px; font-size: 1.5rem; line-height: 1.2em; font-family: 'gilroy', Arial, sans-serif; font-weight: 600; letter-spacing: 0; } .featuresSection h2.hasSubContent { margin-bottom: 0; } .featuresSection p, .featuresSection li { font-size: 16px; font-size: 1rem; line-height: 1.5em; } .featuresSection p.featuresSection-note { font-style: italic; margin-bottom: 20px; } @media (min-width: 40em) { .featuresSection-columns { display: flex; justify-content: space-between; margin-bottom: 20px; } .features .featuresSection:nth-of-type(odd) .featuresSection-columns { flex-direction: row-reverse; } .featuresSection-columns-text { flex-flow: column nowrap; width: 45%; width: calc(50% - 20px); margin-bottom: 0; } .featuresSection-columns-figure { flex-flow: column nowrap; width: 45%; width: calc(50% - 20px); margin: 6px 0; } .featuresSection h2 { font-size: 32px; font-size: 2rem; line-height: 1.3em; } .featuresSection p, .featuresSection li { font-size: 20px; font-size: 1.125rem; line-height: 1.5em; } } @media (min-width: 60em) { .featuresSection-columns-text { width: 45%; width: calc(50% - 40px); } .featuresSection-columns-figure { width: 45%; width: calc(50% - 40px); } } /* .formFigure */ .formFigure { margin-bottom: 20px; padding: 20px 20px 36px 20px; background-color: #fff; box-shadow: 0 5px 20px rgba(0,0,0,.1); } .formBackground { position: relative; padding: 10px 34px 10px 0; border-bottom: 1px solid #222; background: transparent url(https://cdn.oreillystatic.com/oreilly/images/search-icon-gray.svg) right center no-repeat; background-size: 24px 24px; } .formBackground:after { content: "Examples of what you can ask"; display: block; position: absolute; bottom: calc(-1em - 6px); right: 0; font-size: .875rem; line-height: 1em; color: #515151; } .formBackground-field { display: inline-block; position: relative; color: #444; } .formBackground-field-c { display: inline; font-size: 20px; font-size: 1.25rem; line-height: 1em; animation-name: animateCharacter; animation-duration: 200ms; } @keyframes animateCharacter { 0% { opacity: 0; } 100% { opacity: 1; } } .formBackground-field:after { content: ""; display: block; position: absolute; width: 1px; height: 100%; background-color: #666; right: -5px; top: -2px; opacity: 1; } .formBackground-field.animateCursor:after { animation-name: blink; animation-duration: 1000ms; animation-iteration-count: infinite; } @keyframes blink { 0% { opacity: 1; } 35% { opacity: 0; } 65% { opacity: 0; } 100% { opacity: 1; } } @media (min-width: 40em) { .formFigure { padding: 40px 40px 56px 40px; } } /* end .formFigure */ </style> <section class="hero hero-answers"> <div class="content"> <h1>Don’t get stuck. <span class="nowrap">Get Answers.</span></h1> <p>Count on O’Reilly Answers for fast and reliable information</p> </div> </section> <section class="shortDescription introContent"> <div class="content"> <div class="shortDescription-columns"> <div class="shortDescription-col"> <p>Need an immediate solution or a detailed explanation? Turn to O’Reilly Answers. Powered by AI, it instantly delivers trusted information sourced from thousands of top-tier titles on our platform. Simply ask and the information you can count on is at your fingertips.</p> </div> <div class="shortDescription-col multiCTA"> <div class="multiCTA-group"> <h3 style="margin:0 0 8px; font-size: 2.5rem; line-height: 1.2em;">Start learning smarter</h3> <h4>Trust O’Reilly to get you the answers you need. Fast.</h4> <a href="https://www.oreilly.com/online-learning/try-now.html" class="shortDescription-cta" id="shortDescription-cta-freeTrial">Try it now</a> </div> </div> </div> </div> </section> <div class="features"> <section class="featuresSection shortDescription sectionBreak"><!--colorSection--> <div class="content"> <div class="featuresSection-columns"> <div class="featuresSection-columns-text"> <h2>Answers found here</h2> <p>O’Reilly books have been the go-to resource for technologists for over 40 years. Answers leverages those decades of expert insight and generative AI to serve up fast solutions to your tech questions instantly.</p> </div> <figure class="featuresSection-columns-figure"><img src="https://cdn.oreillystatic.com/oreilly/images/answers_search_1200x825_20241106.jpg" alt="" /></figure> </div> </div> </section> <section class="featuresSection shortDescription sectionBreak"> <div class="content"> <div class="featuresSection-columns"> <div class="featuresSection-columns-text"> <h2>Find solutions in the flow of work</h2> <p>Over half of all O’Reilly usage is nonlinear learning—finding fast solutions to challenging technical questions and quickly applying them. Answers was built with this mission in mind. So you can get what you need and get back to it.</p> </div> <figure class="featuresSection-columns-figure filterShadow"><img src="https://cdn.oreillystatic.com/oreilly/images/answers_search_results_1200x750_20241106.jpg" alt="" /></figure> </div> </div> </section> <section class="featuresSection shortDescription sectionBreak"> <div class="content"> <div class="featuresSection-columns"> <div class="featuresSection-columns-text"> <h2>Generative AI responses from unrivaled content</h2> <p>Whether you’re reading a book, taking a course, or watching a video, you’ll probably have a few questions. That’s where Answers steps in. With AI-generated responses rooted in our expansive expert content, Answers is there to deepen your understanding and ensure you achieve better learning outcomes with every interaction.</p> </div> <figure class="featuresSection-columns-figure"><img src="https://cdn.oreillystatic.com/oreilly/images/feature-answers2-search.gif" alt="" /></figure> </div> </div> </section> <section class="featuresSection shortDescription sectionBreak"> <div class="content"> <div class="featuresSection-columns"> <div class="featuresSection-columns-text"> <h2>Easily integrates with Slack and Teams</h2> <p>Now team members don’t even have to get off their Slack or Microsoft Teams apps to find the answers they need—and share them. They can just start their question in any channel or team discussion and answers populate instantly right within the conversation.</p> </div> <figure class="featuresSection-columns-figure noShadow"><img src="https://cdn.oreillystatic.com/oreilly/images/feature_answers_slack_teams_mobile.png" alt="" /></figure> </div> </div> </section> </div> </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/c8a2d0096693eb9455f6ac165003ee06/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>© 2024, 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" src="/bdxdF5/wgY/XHI/Eb9JVw/aYLOwNS2r4zN/WRZ9AQ/HAN/pekpRbB4"></script><link rel="stylesheet" type="text/css" href="/bdxdF5/wgY/XHI/Eb9JVw/GG/clJdAQ/JHU/DIC4SMDVX"> <script src="/bdxdF5/wgY/XHI/Eb9JVw/GG/clJdAQ/WDg/cLU9Qdy4p" async defer></script> <div id="sec-overlay" style="display:none;"> <div id="sec-container"> </div> </div></body> </html>