<!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="2021-08-19" />
	<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-20210319.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);
}
</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 -->
<script type='text/javascript'>
window._vwo_code = window._vwo_code || (function(){
var account_id=27087,
settings_tolerance=2000,
library_tolerance=2500,
use_existing_jquery=false,
is_spa=1,
hide_element='body',

/* DO NOT EDIT BELOW THIS LINE */
f=false,d=document,code={use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){
window.settings_timer=setTimeout(function () {_vwo_code.finish() },settings_tolerance);var a=d.createElement('style'),b=hide_element?hide_element+'{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}':'',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+(+is_spa)+'&r='+Math.random());return settings_timer; }};window._vwo_settings_timer = code.init(); return code; }());
</script>
<!-- End VWO Async SmartCode -->

</head>
<body class="homepage">


<!-- 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 href="https://learning.oreilly.com/accounts/login-check/">Sign In</a></li>
              <li class="menuList-item menuList-tryNow"><a class="menuList-cta" href="https://www.oreilly.com/online-learning/try-now.html">Try Now</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"><a href="https://www.oreilly.com/online-learning/business.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"><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>
                </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>
.menuList-item.menuList-item-search.hidden {
  display: none;
}
body.homepage .footer-subfooter .transparencyStatement {
  display: inline !important;
}


/* helpingThrough */
.helpingThrough {
  padding: 40px 0 40px;
}
.helpingThrough .content:after {
  content: "";
  display: table;
  height: 0;
  clear: both;
}
.helpingThrough-detail {
  margin: 0 0 40px;
}
.helpingThrough-detail:last-of-type {
  margin: 0;
}
.helpingThrough-detail figure {
  display: block;
  width: 25%;
  max-width: 340px;
  overflow: hidden;
  margin: 0 0 8px;
  box-shadow: 0 0 8px rgba(0,0,0,.1);
}
.helpingThrough-detail figure.round {
  border-radius: 100%;
}
.helpingThrough-detail figure img {
  display: block;
  width: 100%;
}
.helpingThrough-detail-info h3 {
  margin-bottom: 12px;
  font-family: 'gilroy', Arial, sans-serif;
  font-size: 32px;
  font-size: 2rem;
  line-height: 1.2em;
  font-weight: 600;
}
.helpingThrough-detail-info p {
  margin-bottom: 20px;
  max-width: 880px;
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5em;
}
@media (min-width: 32em) { /* 512px */
  .helpingThrough-detail {
    display: flex;
    align-items: top;
    justify-content: space-between;
    margin: 0 0 80px;
    font-size: 0;
  }
  .helpingThrough-detail:nth-of-type(even) {
    flex-direction: row-reverse;
  }
  .helpingThrough-detail figure {
    display: block;
    height: 100%;
    width: 25%
    margin-right: 40px;
  }
  .helpingThrough-detail:nth-of-type(even) figure {
    margin-left: 40px;
    margin-right: 0;
  }
  .helpingThrough-detail-info {
    display: inline-block;
    width: calc(75% - 40px);
  }
}
@media (min-width: 40em) { /* 640px */
  .helpingThrough {
    padding: 54px 0 54px;
  }
  .helpingThrough-detail-info p {
    font-size: 22px;
    font-size: 1.375rem;
    line-height: 1.5em;
    margin-bottom: 24px;
  }
  .helpingThrough-detail-info p:last-of-type {
    margin-bottom: 40px;
  }
}
@media (min-width: 50em) { /* 800px */
  .helpingThrough-detail {
    align-items: center;
    margin: 0 0 80px;
  }
  .helpingThrough-detail figure {
    width: 33%;
    margin-right: 80px;
  }
  .helpingThrough-detail:nth-of-type(even) figure {
    margin-left: 80px;
    margin-right: 0;
  }
}
@media (min-width: 53em) { /* 848px */
  .helpingThrough {
    padding: 74px 0 74px;
  }
  .helpingThrough-detail-info h3 {
    margin-bottom: 20px;
    font-size: 44px;
    font-size: 2.5rem;
    line-height: 1.2em;
  }
  .helpingThrough-detail-info p:last-of-type {
    margin-bottom: 20px;
  }
}
/* end helpingThrough */


/* .beStrong */
.beStrong {
  padding: 54px 0;
  background: #000;
  color: #fff;
}
.beStrong img {
  width: 132px;
}
.beStrong p {
  max-width: 100% !important;
  font-size: 24px;
  font-size: 1.5rem;
  line-height: 1.5em;
  font-family: 'guardian-text-oreilly', Arial, sans-serif;
  font-weight: 400;
  color: #fff;
}
.beStrong p span.hashtags {
  color: #ccc;
}
.beStrong p:last-child {
  margin-top: 54px;
}
@media (min-width: 30em) {
  .beStrong {
    padding: 74px 0;
  }
}
@media (min-width: 37.5em) {
  .beStrong img {
    width: auto;
  }
}
@media (min-width: 40em) {
  .beStrong  p {
    font-family: 'gilroy', Arial, sans-serif;
    font-size: 28px !important;
    font-size: 1.75rem !important;
    line-height: 1.4em;
    font-weight: 300;
  }
}
@media (min-width: 71em) {
  .beStrong p {
    font-size: 32px !important;
    font-size: 2rem !important;
    line-height: 1.4em;
  }
}
/* end .beStrong */


/* .plot3 */
.plot3 {}
.plot3 .sectionText {
  margin: 0 auto;
  max-width: 1050px;
  text-align: center;
}
.plot3 h2 {
  font-size: 32px;
  font-size: 2rem;
  line-height: 1.2em;
  font-family: 'gilroy', Arial, sans-serif;
  margin-bottom: 20px;
}
.plot3 p {
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5em;
  font-weight: 400;
  margin-bottom: 20px;
}
.plot3 .textCTA-light,
.plot3 .textCTA-dark,
.plot3 .textCTA-blue {
  position: relative;
  display: block;
  width: max-content;
  padding-right: 20px;
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.3em;
  font-weight: 600;
  color: #222;
  text-decoration: none;
}
.plot3 .textCTA-blue {
  color: #0345ff;
}
.plot3 .textCTA-light {
  color: #fff;
}
.plot3 .textCTA-light:hover,
.plot3 .textCTA-light:focus,
.plot3 .textCTA-dark:hover,
.plot3 .textCTA-dark:focus,
.plot3 .textCTA-blue:hover,
.plot3 .textCTA-blue:focus {
  text-decoration: underline;
}
.plot3 .textCTA-light .inner,
.plot3 .textCTA-dark .inner,
.plot3 .textCTA-blue .inner {
  position: relative;
}
.plot3 .textCTA-light .inner:after,
.plot3 .textCTA-dark .inner:after,
.plot3 .textCTA-blue .inner:after {
  content: "";
  position: absolute;
  bottom: 0;
  right: -16px;
  width: 8px;
  height: 100%;
  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_right_arrow_black.svg) right center no-repeat;
  background-size: contain;
  opacity: 1;
}
.plot3 .textCTA-blue .inner:after {
  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_right_arrow_blue.svg) right center no-repeat;
}
.plot3 .textCTA-light .inner:after {
  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg) right center no-repeat;
}
.plot3 .btnCTA-blue {
  display: block;
  width: max-content;
  margin-bottom: 20px;
  padding: 10px 20px;
  border-radius: 2px;
  background-color: #0345ff;
  color: #fff;
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.2em;
  font-weight: 600;
  text-decoration: none;
}
.plot3 .btnCTA-blue:hover,
.plot3 .btnCTA-blue:focus {
  text-decoration: none;
  box-shadow: 0 1px 4px rgb(0,0,0,.3);
}
.plot3 .btnCTA-blue:after {
  content: "";
  display: inline-block;
  margin: -8px -2px -6px 6px;
  width: 9px;
  height: 22px;
  vertical-align: middle;
  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_right_arrow_white.svg) center center no-repeat;
  background-size: contain;
}
@media (min-width: 40em) { /* 640px */
  .plot3 p {
    font-size: 20px;
    font-size: 1.25rem;
    line-height: 1.5em;
  }
  .plot3 .textCTA-light,
  .plot3 .textCTA-dark,
  .plot3 .textCTA-blue {
    font-size: 20px;
    font-size: 1.25rem;
    line-height: 1.3em;
  }
  .plot3 .textCTA-light .inner:after,
  .plot3 .textCTA-dark .inner:after,
  .plot3 .textCTA-blue .inner:after {
    right: -20px;
    width: 10px;
  }
}
@media (min-width: 58em) { /* 928px */
  .plot3 p {
    font-size: 24px;
    font-size: 1.5rem;
    line-height: 1.4em;
    font-family: 'gilroy', Arial, sans-serif;
    font-weight: 300;
  }
  .plot3 .textCTA-light,
  .plot3 .textCTA-dark,
  .plot3 .textCTA-blue {
    font-size: 24px;
    font-size: 1.5rem;
    line-height: 1.4em;
    font-family: 'gilroy', Arial, sans-serif;
  }
  .plot3 .btnCTA-blue {
    font-size: 20px;
    font-size: 1.25rem;
    line-height: 1.2em;
    font-family: 'gilroy', Arial, sans-serif;
  }
  .plot3 .btnCTA-blue:after {
    width: 13px;
  }
}
@media (min-width: 65em) { /* 1040px */
  .plot3 h2 {
    font-size: 36px;
    font-size: 2.25rem;
    line-height: 1.2em;
  }
  .plot3 p {
    font-size: 28px;
    font-size: 1.75rem;
    line-height: 1.3em;
  }
  .plot3 .textCTA-light,
  .plot3 .textCTA-dark,
  .plot3 .textCTA-blue {
    font-size: 28px;
    font-size: 1.75rem;
    line-height: 1.3em;
  }
  .plot3 .btnCTA-blue {
    font-size: 24px;
    font-size: 1.5rem;
    line-height: 1.2em;
  }
}


.plot3-hero {
  position: relative;
  overflow: hidden;
  background-color: transparent;
}
.plot3-hero .content {
  padding: 40px 20px;
  text-align: center;
}
.plot3-hero h1 {
  margin: 0 0 20px;
  max-width: 100%;
  font-size: 36px;
  font-size: 2.25rem;
  line-height: 1.2em;
  font-family: 'gilroy', Arial, sans-serif;
}
.plot3-hero h1 .highlight {
  color: #0345ff;
}
@supports (-webkit-background-clip: text) or (-moz-background-clip: text) {
  .plot3-hero h1 .highlight {
    background: #0345ff linear-gradient(135deg, rgb(3,69,255) 0%, rgb(142,34,167) 100%);
    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;
  }
}
.plot3-hero p {
  margin: 0;
  max-width: 100%;
}
.plot3-hero-cta {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
}
.plot3-hero-cta > .btnCTA-blue {
  margin: 0 32px 20px 0;
}
.plot3-hero-cta > .textCTA-blue:last-child {
  margin: 0 0 20px 0;
}
.plot3-hero-device {
  display: flex;
  flex-direction: row;
  align-items: center;
  width: 80%;
  max-width: 600px;
  margin: 40px auto;
}
.plot3-hero-device-container {
  position: relative;
  width: 100%;
  padding-bottom: 76.451%;
}
.plot3-hero-device-frame {
  position: absolute;
  height: 100%;
  width: 100%;
  padding: 5%;
  border-radius: 4.64% / 6.04%;
  background-color: #e6e6e6;
  background-image: linear-gradient(135deg, #e6e6e6 0%, #d6d6d6 100%);
  box-shadow: inset -2px -2px 0 rgba(0,0,0,.05), inset 1px 1px 0 rgba(255,255,255,.5), 0 16px 24px rgba(0,0,0,.2), 0 6px 3px rgba(0,0,0,.5);
}
.plot3-hero-device-images {
  position: relative;
  height: 100%;
  width: 100%;
  background: #e6e6e6;
  overflow: hidden;
}
.plot3-hero-device-images:before {
  content: "";
  display: block;
  position: absolute;
  z-index: 6;
  height: 100%;
  width: 100%;
  box-shadow: inset 1px 0 1px rgba(0,0,0,.07), inset -1px 0 2px rgba(0,0,0,.07), inset 0 1px 2px rgba(0,0,0,.07), inset 0 -1px 2px rgba(0,0,0,.07), inset 0 0 20px rgba(255,255,255,.2);
}
.plot3-hero-device-images img {
  display: block;
  position: absolute;
  z-index: 0;
  top: 0;
  right: 0;
  height: 100%;
  width: 100%;
  animation-name: pan-images;
  animation-duration: 20s;
  animation-timing-function: ease-in;
  animation-iteration-count: infinite;
}
.plot3-hero-device-images img:nth-of-type(1) {
  z-index: 4;
  animation-delay: 5s;
}
.plot3-hero-device-images img:nth-of-type(2) {
  z-index: 3;
  animation-delay: 10s;
}
.plot3-hero-device-images img:nth-of-type(3) {
  z-index: 2;
  animation-delay: 15s;
}
.plot3-hero-device-images img:nth-of-type(4) {
  z-index: 1;
  animation-delay: 20s;
}
@media (min-width: 40em) { /* 640px */
  .plot3-hero h1 {
    margin: 0 0 20px;
    font-size: 48px;
    font-size: 3rem;
    line-height: 1.1em;
  }
  .plot3-hero p {
    margin: 0 0 20px;
  }
  .plot3-hero-cta > .textCTA-dark {
    margin-right: 40px;
  }
  .plot3-hero-cta > .textCTA-dark:last-child {
    margin-right: 0;
  }
}
@media (min-width: 50em) { /* 800px */
  .plot3-hero .content {
    position: static;
    padding: 60px 20px;
    text-align: left;
  }
  .plot3-hero-device {
    position: absolute;
    left: calc(50% + 40px);
    top: 11.5%;
    height: 77%;
    width: calc(50% - 40px + 200px);
    max-width: 800px;
    margin: 0;
  }
  .plot3-hero h1 {
    margin: 0 0 40px;
    max-width: calc(50% - 40px);
  }
  .plot3-hero p {
    max-width: calc(50% - 40px);
  }
  .plot3-hero-cta {
    max-width: calc(50% - 15px);
    justify-content: flex-start;
  }
}
@media (min-width: 58em) { /* 928px */
  .plot3-hero .content {
    position: static;
    padding: 80px 20px;
  }
  .plot3-hero h1 {
    font-size: 44px;
    font-size: 2.75rem;
    line-height: 1em;
  }
}
@media (min-width: 65em) { /* 1040px */
  .plot3-hero .content {
    padding: 80px 20px;
  }
  .plot3-hero h1 {
    margin: 0 0 40px;
    font-size: 54px;
    font-size: 3.375rem;
    line-height: 1em;
  }
  .plot3-hero p {
    margin: 0 0 30px;
  }
  .plot3-hero-device {
    width: calc(50% - 40px + 400px);
    max-width: 700px;
  }
}
@media (min-width: 76em) { /* 1216px */
  .plot3-hero .content {
    padding: 12% 20px;
  }
  .plot3-hero-device {
    width: calc(50% - 40px + 200px);
    max-width: 800px;
  }
}
@media (min-width: 84em) { /* 1344px */
  .plot3-hero .content {
    padding: 160px 20px;
  }
}
@keyframes pan-images {
  0% {right: 0; z-index: 5;} /* 5s */
  2% {right: -100%; top: 0; opacity: .8; z-index: 5;} /* 7.5s */
  15% {right: -100%; top: 100%; z-index: 0; opacity: .8;}
  20% {right: 0; top: 0; z-index: 0; opacity: 1;}
  50% {right: 100%; top: 0; opacity: .8; z-index: 0;}
  52% {right: 0%; top: 0; opacity: 1;}
}



.plot3-experts {
  background: linear-gradient(80deg, #16dfda 0%, #0345ff 60%, #0345ff 80%, #8e22a7 100%);
}
.plot3-experts .content {
  padding: 40px 20px 44px;
}
.plot3-experts h2,
.plot3-experts p {
  color: #fff;
}
.plot3-experts .sectionFigure {
  position: relative;
  width: 100%;
  padding-bottom: 200px;
  margin: 0 auto;
}
.plot3-experts-panels {
  position: absolute;
  top: 0;
  left: 0;
  margin: 0;
  display: flex;
  flex-direction: row;
  height: 100%;
  width: 100%;
  cursor: pointer;
}
.plot3-experts-panels a {
  position: relative;
  display: flex;
  height: 100%;
  width: 20%;
  overflow: hidden;
  margin-right: 1px;
  background-repeat: no-repeat;
  background-position: center top;
  background-size: cover;
  border-radius: 4px;
  filter: drop-shadow(0 0 4px rgba(0,0,0,.1));
  transition: width .5s;
  text-decoration: none;
}
.plot3-experts-panels a:before {
  display: block;
  position: absolute;
  z-index: 2;
  height: 100%;
  width: 100%;
  content: "";
  background-color: #444;
  mix-blend-mode: color;
  transition: opacity .5s;
}
.plot3-experts-panels a:hover:before,
.plot3-experts-panels a:focus:before {
  opacity: 0;
}
.plot3-experts-panels a:last-child {
    margin-right: 0;
}
.plot3-experts-panels a:hover,
.plot3-experts-panels a:focus {
  width: 50%;
  text-decoration: none;
  outline: none;
}
.plot3-experts-panels a .text {
  display: none;
}
.plot3-experts-panels a:hover .text,
.plot3-experts-panels a:focus .text {
  display: block;
  width: 100%;
  padding: 12px;
  margin-top: auto;
  background-color: rgba(0,0,0,.7);
  color: #fff;
  font-weight: 400;
  font-size: .875rem;
  line-height: 1.2em;
  animation-name: experts-panels-showText;
  animation-duration: 1s;
}
.plot3-experts-panels a .name {
  display: block;
  font-weight: bold;
}
@media (min-width: 40em) { /* 640px */
  .plot3-experts .sectionFigure {
    width: 100%;
    max-width: 600px;
    padding-bottom: 200px;
  }
}
@media (min-width: 50em) { /* 800px */
  .plot3-experts .content {
    padding: 50px 20px;
  }
  .plot3-experts-panels a:hover .text,
  .plot3-experts-panels a:focus .text {
    font-family: 'gilroy', Arial, sans-serif;
    font-weight: 300;
    font-size: 1rem;
    line-height: 1.2em;
  }
}
@media (min-width: 65em) { /* 1040px */
  .plot3-experts .content {
    display: flex;
    flex-direction: row-reverse;
    justify-content: space-between;
    align-items: center;
  }
  .plot3-experts .sectionText {
    margin: 0;
    width: calc(50% - 40px);
    text-align: left;
  }
  .plot3-experts .sectionText *:last-child {
    margin-bottom: 0;
  }
  .plot3-experts .sectionFigure {
    margin: 0;
    width: calc(50% - 40px);
    padding-bottom: calc((50% - 40px) / 2);
  }
}
@keyframes experts-panels-showText {
  0% {opacity: 0;}
  50% {opacity: 0;}
  100% {opacity: 1}
}



.plot3-interactive {
  position: relative;
}
.plot3-interactive:after {
  content: "";
  display: block;
  position: absolute;
  width: 100%;
  height: 120px;
  bottom: 0;
  background: transparent linear-gradient(135deg, #0345ff 20%, #16dfda 80%);
  z-index: 0;
}
.plot3-interactive .content {
  position: relative;
  z-index: 1;
  padding: 40px 20px 40px;
}
.plot3-interactive .sectionText {
  margin-bottom: 40px;
}
.plot3-interactive-video {
  position: relative;
  margin: 40px auto 20px;
  width: 100%;
  padding-bottom: 56.25%;
  border-radius: 8px;
  border: 1px solid transparent;
  box-shadow: 0 0 20px rgba(0,0,0,.2);
}
.plot3-interactive-video .kWidgetIframeContainer {
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 7px;
  overflow: hidden;
}
.plot3-interactive-video:before {
  content: "";
  position: absolute;
  z-index: -1;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: -1px;
  border-radius: inherit;
  background: transparent linear-gradient(135deg, #0345ff 20%, #16dfda 80%);
}
.plot3-interactive .textCTA-light {
  margin: 20px auto 0;
}
@media (min-width: 41em) { /* 640px */
  .plot3-interactive:after {
    height: 180px;
  }
  .plot3-interactive-video {
    width: 600px;
    padding-bottom: 336.5px;
  }
}
@media (min-width: 50em) { /* 800px */
  .plot3-interactive .content {
    padding: 80px 20px 40px;
  }
}


.plot3-answers {
  position: relative;
}
.plot3-answers:after {
  content: "";
  display: block;
  position: absolute;
  width: 100%;
  height: 120px;
  bottom: 0;
  background: transparent linear-gradient(135deg, #d3002d 0%, #ee0000 30%, #f18901 100%);
  z-index: 0;
}
.plot3-answers .content {
  position: relative;
  z-index: 1;
  padding: 40px 20px;
}
.plot3-answers .sectionText {
  margin-bottom: 40px;
}
.plot3-answers-video {
  position: relative;
  margin: 40px auto 20px;
  border-radius: 8px;
  border: 1px solid transparent;
  width: 100%;
  max-width: 700px;
  box-shadow: 0 0 20px rgba(0,0,0,.2);
}
.plot3-answers-video video {
  display: block;
  width: 100%;
  max-width: 700px;
  border-radius: 7px;
}
.plot3-answers-video:before {
  content: "";
  position: absolute;
  z-index: -1;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: -1px;
  border-radius: inherit;
  background: transparent linear-gradient(135deg, #d3002d 0%, #ee0000 30%, #f18901 100%);
}
.plot3-answers .textCTA-light {
  margin: 20px auto 0;
}
@media (min-width: 41em) { /* 640px */
  .plot3-answers:after {
    height: 180px;
  }
}
@media (min-width: 50em) { /* 800px */
  .plot3-answers .content {
    padding: 80px 20px 40px;
  }
}



.plot3-live {
  position: relative;
}
.plot3-live:after {
  content: "";
  position: absolute;
  z-index: 0;
  bottom: 0;
  left: 0;
  display: block;
  height: 5.5rem;
  width: 100%;
  background-image: linear-gradient(90deg, #16dfda 30%, #0345ff 200%);
}
.plot3-live .content {
  position: relative;
  z-index: 1;
  padding: 40px 20px 0;
}
.plot3-live .sectionFigure {
  position: relative;
  margin: 40px 0;
  width: 100%;
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  justify-content: center;
}
.plot3-live .sectionFigure img {
  display: block;
  margin: 0;
  width: 50%;
  border-radius: 50%;
  box-shadow: 0 0 20px rgba(0,0,0,.2);
}
.plot3-live .sectionFigure p {
  display: block;
  margin-bottom: 20px;
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5em;
  text-align: left;
}
.plot3-live .textCTA-dark {
  margin: 0 auto;
  line-height: 5.5rem;
}
@media (min-width: 50em) { /* 800px */
  .plot3-live:after {
    background-image: linear-gradient(90deg, #16dfda 30%, #0345ff 70%);
  }
  .plot3-live .content {
    padding: 80px 20px 0 20px;
  }
  .plot3-live .sectionText {
    margin: 0;
    width: calc(50% - 40px);
    text-align: left;
  }
  .plot3-live .sectionText *:last-child {
    margin-bottom: 0;
  }
  .plot3-live .sectionFigure {
    display: block;
    position: absolute;
    right: 20px;
    bottom: -60px;
    margin: 0;
    width: calc(50% - 40px);
    max-width: 100%;
  }
  .plot3-live .sectionFigure img {
    width: 100%;
    margin: 0;
  }
  .plot3-live .sectionFigure p {
    position: absolute;
    bottom: 20px;
    right: 80%;
    margin-bottom: 0;
    font-size: 20px;
    font-size: 1.25rem;
    line-height: 1.3em;
    white-space: nowrap;
  }
  .plot3-live .textCTA-dark {
    margin: 0;
  }
}
@media (min-width: 78em) { /* 1248px */
  .plot3-live .content {
    padding: 120px 20px 0 20px;
  }
}


.plot3-certification {
  border-bottom: 6px solid;
  border-image-slice: 1;
  border-image-source: linear-gradient(90deg, #16dfda 30%, #0345ff 70%);
  background-image: linear-gradient(0deg, rgba(23,210,204,.2) 0%, rgba(23,210,204,0) 100%);
}
.plot3-certification .content {
  padding: 40px 20px 44px;
}
.plot3-certification .sectionFigure {
  margin: 0 auto;
  mix-blend-mode: darken;
  width: 80%;
  max-width: 600px;
}
.plot3-certification .sectionFigure img {
  display: block;
  max-width: 100%;
}
.plot3-certification .textCTA-dark {
  margin: 0 auto 40px;
}
@media (min-width: 50em) { /* 800px */
  .plot3-certification .content {
    padding: 140px 20px 80px 20px;
    display: flex;
    flex-direction: row-reverse;
    justify-content: space-between;
    align-items: center;
  }
  .plot3-certification .sectionText {
    margin: 0;
    width: calc(50% - 40px);
    text-align: left;
  }
  .plot3-certification .sectionText *:last-child {
    margin-bottom: 0;
  }
  .plot3-certification .sectionFigure {
    margin: 0;
    width: calc(50% - 40px);
  }
  .plot3-certification .textCTA-dark {
    margin: 0;
  }
}


.plot3-cta .content {
  padding: 40px 20px 44px;
}
.plot3-cta h2 {
  margin-bottom: 20px;
}
.plot3-cta-btnGroup {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  margin: 0 auto;
}
.plot3-cta .sectionText h2 {
  margin: 0 0 20px;
}
.plot3-cta-btnGroup .btnCTA-blue {
  margin: 0 32px 0 0;
}
.plot3-cta-btnGroup .textCta-blue {
  margin: 0;
}
@media (min-width: 50em) { /* 800px */
  .plot3-cta .content {
    padding: 80px 20px;
  }
  .plot3-cta .sectionText h2 {
    margin: 0 0 40px;
  }
}


.plot3-diversity {
  background: linear-gradient(-70deg, #16dfda 0%, #0345ff 100%);
}
.plot3-diversity .content {
  padding: 40px 20px 44px;
}
.plot3-diversity h2,
.plot3-diversity p {
  color: #fff;
}
.plot3-diversity .sectionFigure {
  margin: 0 auto;
  width: 80%;
  max-width: 440px;
}
.plot3-diversity .sectionFigure img {
  display: block;
  max-width: 100%;
}
.plot3-diversity .textCTA-light {
  margin: 0 auto 40px;
}
@media (min-width: 50em) { /* 800px */
  .plot3-diversity {
    background: linear-gradient(-70deg, #16dfda 0%, #0345ff 60%, #0345ff 80%, #8e22a7 100%);
  }
  .plot3-diversity .content {
    padding: 80px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }
  .plot3-diversity .sectionText {
    margin: 0;
    width: calc(50% - 40px);
    text-align: left;
  }
  .plot3-diversity .sectionText *:last-child {
    margin-bottom: 0;
  }
  .plot3-diversity .sectionFigure {
    margin: 0;
    width: calc(50% - 40px);
  }
  .plot3-diversity .textCTA-light {
    margin: 0;
  }
}
/* end .plot3 */

</style>



<span class="plot3" id="plot3">

    <section class="plot3-hero">
      <div class="content">

        <h1>The <span class="highlight">learning platform</span> your tech teams need to <span class="nowrap">stay ahead</span></h1>
        <p>More than 60% of all Fortune 100 companies trust O&rsquo;Reilly to help their teams learn the technologies of today&mdash;and be ready for what&rsquo;s next. We can help <span class="nowrap">yours too.</span></p>

        <div class="plot3-hero-device">
          <div class="plot3-hero-device-container">
            <figure class="plot3-hero-device-frame">
              <div class="plot3-hero-device-images" id="plot3-hero-device-images">
                <img src="https://cdn.oreillystatic.com/oreilly/images/device-image1-800x600-20210224.jpg" alt="">
                <img src="https://cdn.oreillystatic.com/oreilly/images/device-image2-800x600-20210224.jpg" alt="">
                <img src="https://cdn.oreillystatic.com/oreilly/images/device-image3-800x600-20210224.jpg" alt="">
                <img src="https://cdn.oreillystatic.com/oreilly/images/device-image4-800x600-20210224.jpg" alt="">
              </div>
            </figure>
          </div>
        </div>

        <div class="plot3-hero-cta">
          <a href="https://www.oreilly.com/online-learning/enterprise.html" class="btnCTA-blue"><span class="inner">Request a demo for your teams</span></a>
          <a href="https://learning.oreilly.com/p/register/" class="textCTA-blue secondary"><span class="inner">Try it free</span></a>
        </div>

      </div>
    </section>


    <section class="plot3-experts">
      <div class="content">
        <div class="sectionText">
          <h2>Sharing the knowledge of innovators for <span class="nowrap">over 40 years</span></h2>

          <p>From books to leading tech conferences to a groundbreaking online learning platform, we&rsquo;ve focused on creating the best technical learning content for more than four decades. Your teams can benefit from that experience.</p>
        </div>

        <div class="sectionFigure">
          <div class="plot3-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">University of British Columbia</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&ccedil;alves</span>
                <span class="affiliation">Senior Data Scientist</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">Google Cloud Platform</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/images/live-online-training/38263-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%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/images/live-online-training/38528-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%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>

      </div>
    </section>


    <section class="plot3-interactive">
      <div class="content">
        <div class="sectionText">
          <h2>Learning by doing is the best way to grasp new technologies</h2>

          <p>With interactive learning, teams get hands-on experience with tech like Kubernetes, Python, Docker, Java, and more&mdash;in safe live dev environments. So they&rsquo;re more comfortable putting it to work in real-world situations.</p>
        </div>

        <div class="plot3-interactive-video">
          <script src="https://cdnapisec.kaltura.com/p/1681692/sp/168169200/embedIframeJs/uiconf_id/47268383/partner_id/1681692"></script>
          <div id="kaltura_player_1614619846" style="width: 100%; height: 100%;"></div>
          <script>
          kWidget.embed({
            "targetId": "kaltura_player_1614619846",
            "wid": "_1681692",
            "uiconf_id": 47268383,
            "flashvars": {},
            "cache_st": 1614619846,
            "entry_id": "1_l4kl79pc"
          });
          </script>
        </div>

        <a href="https://www.oreilly.com/online-learning/intro-interactive-learning.html" class="textCTA-light"><span class="inner">See how it works</span></a>
      </div>
    </section>


    <section class="plot3-answers sectionBreak">
      <div class="content">
        <div class="sectionText">
          <h2>Teams don&rsquo;t get stuck when they have Answers they  <span class="nowrap">can trust</span></h2>

          <p>Anyone can use a search engine. But can they trust what they find? With Answers, your teams can ask any tech question and instantly get the best answers from O&rsquo;Reilly&rsquo;s renowned content. So they find trusted solutions they can put to work immediately.</p>
        </div>

        <div class="plot3-answers-video">
          <video src="https://cdn.oreillystatic.com/oreilly/videos/answers_animation_small_v1.mp4" type="video/mp4" muted autoplay playsinline loop></video>
        </div>

        <a href="https://www.oreilly.com/online-learning/feature-answers.html" class="textCTA-light"><span class="inner">Start learning smarter</span></a>
      </div>
    </section>


    <section class="plot3-live">
      <div class="content">
        <div class="sectionText">
          <h2>Live training courses keep your organization ahead of <span class="nowrap">what&rsquo;s next</span></h2>

          <p>Your teams have access to nearly 1,000 live online courses and events every year, led by top experts in AI, software architecture, cloud, data, programming, and more. And they can ask questions along <span class="nowrap">the way.</span></p>

          <div class="sectionFigure">
            <img src="https://cdn.oreillystatic.com/oreilly/images/home_plot3_lot_600x600.jpg" alt="">
            <p>Kai Holnes, ThoughtWorks</p>
          </div>

          <a href="https://www.oreilly.com/online-learning/live-online-sessions.html" class="textCTA-dark"><span class="inner">Learn from experts</span></a>
        </div>
      </div>
    </section>


    <section class="plot3-certification">
      <div class="content">
        <div class="sectionText">
          <h2>Certified teams are teams you can <span class="nowrap">count on</span></h2>

          <p>A certification means you can trust they&rsquo;ve mastered the skills your organization needs. We help your people prep for their exams with direct paths to the official materials and interactive <span class="nowrap">practice tests.</span></p>

          <a href="https://www.oreilly.com/online-learning/feature-certification.html" class="textCTA-dark"><span class="inner">Help prove their proficiency</span></a>
        </div>

        <div class="sectionFigure">
          <img src="https://cdn.oreillystatic.com/oreilly/images/cert-vendor-logos.png" alt="">
        </div>
      </div>
    </section>


    <section class="plot3-cta">
      <div class="content">
        <div class="sectionText">
          <h2>See how O&rsquo;Reilly can help your tech teams <span class="nowrap">stay ahead</span></h2>

          <div class="plot3-cta-btnGroup">
            <a href="https://www.oreilly.com/online-learning/enterprise.html" class="btnCTA-blue"><span class="inner">Request a  demo</span></a>
            <a href="https://learning.oreilly.com/p/register/" class="textCTA-blue"><span class="inner">Try it free</span></a>
          </div>
        </div>
      </div>
    </section>


    <section class="plot3-diversity">
      <div class="content">
        <div class="sectionText">
          <h2>Supporting diversity in tech delivers true innovation</h2>

          <p>We&rsquo;re working to increase opportunities in technology for people from underrepresented groups by actively recruiting diverse speakers, authors, interactive developers, instructors, and more. Because we&rsquo;ll all benefit <span class="nowrap">from it.</span></p>

          <a href="https://www.oreilly.com/diversity/" class="textCTA-light"><span class="inner">Join us</span></a>
        </div>

        <div class="sectionFigure">
          <img src="https://cdn.oreillystatic.com/oreilly/images/diversity_jobs_2021.png" alt="DiversityJobs Top Employer 2021">
        </div>
      </div>
    </section>
</span>


<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 "Let's talk CTA"
  $('#letsTalk').on('click', function(e) {
    dataLayer.push({
      'event': 'eventTracker',
      'eventCat':'marketing',
      'eventAct':'click',
      'eventLbl':'lets talk',
      'eventVal':0, 
      'nonInteraction': 0,
    });
  });

  //GA event for "Learn more CTA"
  $('#onlineLearning-cta').on('click', function(e) {
    dataLayer.push({
      'event': 'eventTracker',
      'eventCat':'marketing',
      'eventAct':'click',
      'eventLbl':'learn more',
      'eventVal':0, 
      'nonInteraction': 0,
    });
  });

  //GA event for business hero "Get Ahead CTA"
  $('#getAhead-cta').on('click', function(e) {
    dataLayer.push({
      'event': 'eventTracker',
      'eventCat':'marketing',
      'eventAct':'click',
      'eventLbl':'get ahead',
      'eventVal':0, 
      'nonInteraction': 0,
    });
  });

  //GA event for "Building the future > Request a demo" CTA
  $('#buildingRequestDemo-cta').on('click', function(e) {
    dataLayer.push({
      'event': 'eventTracker',
      'eventCat':'marketing',
      'eventAct':'click',
      'eventLbl':'request a demo',
      'eventVal':0, 
      'nonInteraction': 0,
    });
  });

});
</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&rsquo;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="/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&rsquo;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>
              </ul>
            
              <a href="https://twitter.com/oreillymedia" target="_blank"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 400 400" style="enable-background:new 0 0 400 400;" xml:space="preserve"><style type="text/css">.st0{fill:#ee0000;}.st1{fill:#FFFFFF;}</style><g id="Red"><circle class="st0" cx="200" cy="200" r="200"/></g><g id="Logo__x2014__FIXED"><path class="st1" d="M163.4,305.5c88.7,0,137.2-73.5,137.2-137.2c0-2.1,0-4.2-0.1-6.2c9.4-6.8,17.6-15.3,24.1-25 c-8.6,3.8-17.9,6.4-27.7,7.6c10-6,17.6-15.4,21.2-26.7c-9.3,5.5-19.6,9.5-30.6,11.7c-8.8-9.4-21.3-15.2-35.2-15.2 c-26.6,0-48.2,21.6-48.2,48.2c0,3.8,0.4,7.5,1.3,11c-40.1-2-75.6-21.2-99.4-50.4c-4.1,7.1-6.5,15.4-6.5,24.2 c0,16.7,8.5,31.5,21.5,40.1c-7.9-0.2-15.3-2.4-21.8-6c0,0.2,0,0.4,0,0.6c0,23.4,16.6,42.8,38.7,47.3c-4,1.1-8.3,1.7-12.7,1.7 c-3.1,0-6.1-0.3-9.1-0.9c6.1,19.2,23.9,33.1,45,33.5c-16.5,12.9-37.3,20.6-59.9,20.6c-3.9,0-7.7-0.2-11.5-0.7 C110.8,297.5,136.2,305.5,163.4,305.5"/></g></svg></a>
              <a href="https://www.facebook.com/OReilly/" 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:#E00;fill-rule:evenodd;}</style></defs><title>facebook-logo</title><path class="cls-1" d="M16.13,0A16.13,16.13,0,1,0,32.25,16.12,16.13,16.13,0,0,0,16.13,0Zm5.12,9.54H19.57a1.52,1.52,0,0,0-1.51,1.51v1.14h3.19v3.42H18.06V26.12H13.57V15.61H10.69V12.19h2.88v-2a4,4,0,0,1,4-4h3.65Z"/></svg></a>
              <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:#E00;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:#E00;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>
        </div>

        <div class="footer-download" id="download-info">
          <h2 class="footer-header">Download the O&rsquo;Reilly App</h2>

          <p>Take O&rsquo;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&rsquo;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 Payers 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 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>&copy; 2021, O&rsquo;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> &bull; <a href="/privacy.html">Privacy policy</a> &bull; <a href="/about/editorial_independence.html">Editorial independence</a><span class="transparencyStatement" style="display:none;"> &bull; <a href="/2020-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.3.1/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);
  });

  (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();
          window.scrollTo(window.pageXOffset, anchorOffset);

          // 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></body>


</html>



