CINXE.COM
About - O'Reilly Media
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>About - O'Reilly Media</title> <meta name="description" content="O'Reilly's mission is to change the world by sharing the knowledge of innovators. For over 45 years, we've inspired companies and individuals to do new things--and do things better--by providing them with the skills and understanding that's necessary for success." /> <meta name="date" content="2024-11-28" /> <meta name="search_date" content="2024-03-05" /> <meta name="search-title" content="About - O'Reilly Media" /> <meta name="pagename" content="About - O'Reilly Media" /> <meta name="site" content="O'Reilly" /> <meta name="twitter:title" content="About - O'Reilly Media" /> <meta name="twitter:description" content="O'Reilly's mission is to change the world by sharing the knowledge of innovators. For over 45 years, we've inspired companies and individuals to do new things--and do things better--by providing them with the skills and understanding that's necessary for success." /> <meta name="twitter:site" content="@OReillyMedia" /> <meta property="og:type" content="website" /> <meta property="og:title" content="About - O'Reilly Media" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:image" content="https://cdn.oreillystatic.com/oreilly/images/oreilly-social-200.png" /> <meta property="og:image" content="https://cdn.oreillystatic.com/oreilly/images/oreilly-social-200.png" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="language_name" content="English"> <meta name="native_language_name" content="English"> <meta name="format-detection" content="telephone=no"> <link rel="icon" type="image/png" href="//www.oreilly.com/favicon.ico"> <!--[if lte IE 9]> <script> 'article aside footer header main nav section time'.replace(/\w+/g,function(n){document.createElement(n)}) </script> <![endif]--> <link rel="stylesheet" type="text/css" href="https://cdn.oreillystatic.com/assets/css/2018_font_face.css" /> <link rel="stylesheet" type="text/css" href="https://cdn.oreillystatic.com/assets/css/odot-layout-20240226.css" /> <!--[if IE 9]> <style type="text/css"> #menu-toggle:checked ~ .mobile-nav { display:block; } .mobile-nav { display: none; } </style> <![endif]--> <!-- Initiate dataLayer for GA --> <script> loggedInObject = new Object(); var dataLayer = window.dataLayer || []; //Check for O'Reilly Unified logged-in status if (document.cookie.split(';').filter(function(item) { return item.indexOf('orm-jwt=') >= 0 }).length) { loggedInObject.unifiedLoggedIn = 'yes'; loggedInObject.loggedIn = 'yes'; dataLayer.push(loggedInObject); //Add 'loggedIn class to html tag const htmlTag = document.querySelector('html'); if (htmlTag !== null) { htmlTag.classList.add('loggedIn'); } } </script> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5P4V6Z');</script> <!-- End Google Tag Manager --> <!-- Start VWO Async SmartCode --> <link rel="preconnect" href="https://dev.visualwebsiteoptimizer.com" /> <script type='text/javascript' id='vwoCode'> window._vwo_code || (function() { var account_id=27087, version=2.1, settings_tolerance=2000, hide_element='body', hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important', /* DO NOT EDIT BELOW THIS LINE */ f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var i=this.getSettings(),n=d.createElement('script'),r=this;t=t||{};if(i){n.textContent=i;d.getElementsByTagName('head')[0].appendChild(n);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200){_vwo_code.addScript({text:o.responseText})}else{_vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}_vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var i=this.hide_element(),n=i?i+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=n;else t.appendChild(d.createTextNode(n));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var n=d.createElement('div');n.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;';n.setAttribute('id','_vis_opt_path_hides');n.classList.add('_vis_hide_layer');t.parentNode.insertBefore(n,t.nextSibling)}var o='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:o})}else{this.load(o+'&x=true')}}};w._vwo_code=code;code.init();})(); </script> <!-- End VWO Async SmartCode --> </head> <body> <!-- 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">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"> <section class="hero hero-general"> <div class="content"> <h1>About us</h1> <p>Inspiring the future for more than <span class="nowrap">45 years</span></p> </div> </section> <section class="textSection about-overview" id="overview"> <div class="content"> <p>O’Reilly’s mission is to change the world by sharing the knowledge of innovators. For over 45 years, we’ve inspired companies and individuals to do new things—and do things better—by providing them with the skills and understanding that are necessary <span class="nowrap">for success.</span></p> <p>At the heart of our business is a unique network of experts and innovators who share their knowledge through us. The O’Reilly learning platform offers exclusive live training, interactive learning, a certification experience, books, videos, and more, making it easier for our customers to develop the expertise they need to get ahead. And our books have been heralded for decades as the definitive place to learn about the technologies that are shaping the future. Everything we do is to help professionals from a variety of fields learn best practices and discover emerging trends that will shape the future of the <span class="nowrap">tech industry.</span></p> <p>Our customers are hungry to build the innovations that propel the world forward. And we help you do <span class="nowrap">just that.</span></p> <a href="https://www.oreilly.com/about/history.html" class="text-cta">Learn more about our history</a> </div> </section> <section class="textSection textReverse about-tim" id="tim-oreilly"> <div class="content"> <div class="about-tim-text"> <h2>Tim O’Reilly</h2> <p>Tim O’Reilly has a history of convening conversations that reshape the computer industry. If you’ve heard the term “open source software” or “Web 2.0,” he’s had a hand in framing each of those big ideas. He’s the founder, CEO, and chairman of O’Reilly.</p> <a href="https://www.oreilly.com/tim/" class="cta-button arrow-right">See Tim’s interviews & articles</a> </div> <img class="about-tim-pic" src="https://cdn.oreillystatic.com/oreilly/images/tim-oreilly-400x400.jpg"> </div> </section> <section class="textSection about-press-room" id="press"> <div class="content"> <h2>Press room</h2> <ul class="about-press-releases"><li class="about-press-release"> <img src="https://cdn.oreillystatic.com/oreilly/images/about-learning.png" alt="" /> <div class="pr-text"> <span class="pr-category">Learning</span> <a class="pr-title" href="https://www.oreilly.com/pub/pr/3464"><h3>UK employees seek AI education to advance careers amid salary and headcount freezes, new O’Reilly research finds</h3></a> <span class="pr-date">10/16/24</span> </div> </li><li class="about-press-release"> <img src="https://cdn.oreillystatic.com/oreilly/images/about-learning.png" alt="" /> <div class="pr-text"> <span class="pr-category">Learning</span> <a class="pr-title" href="https://www.oreilly.com/pub/pr/3463"><h3>O’Reilly Releases First Chapters of New Guide for Navigating AI-Enabled Software Development</h3></a> <span class="pr-date">10/8/24</span> </div> </li><li class="about-press-release"> <img src="https://cdn.oreillystatic.com/oreilly/images/about-learning.png" alt="" /> <div class="pr-text"> <span class="pr-category">Learning</span> <a class="pr-title" href="https://www.oreilly.com/pub/pr/3461"><h3>O’Reilly 2024 State of Security Survey Reveals Critical AI Skills Gap as Organizations Grapple with Evolving Cyber Threats</h3></a> <span class="pr-date">10/7/24</span> </div> </li></ul> <a href="https://www.oreilly.com/press/" class="text-cta">Read more O’Reilly news</a> </div> </section> <section class="sectionBreak textSection about-info" id="more-info"> <div class="content"> <div class="about-info-editorial"> <h2>Editorial independence</h2> <p>O’Reilly is committed to ensuring that everything produced under our name is congruent with our company values of openness, honesty, integrity, and neutrality. These values drive our approach to building information products. <span class="nowrap"><a href="https://www.oreilly.com/about/editorial_independence.html" >Learn about our approach</a>.</span></p> </div> <div class="about-info-resources"> <h2>Resources</h2> <p>For information about O’Reilly authors, partnerships, and more, <a href="https://www.oreilly.com/about/resources.html">see our list of resources</a>. </p> </div> </div> </section> </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="/J4WowN/Sng6Y/Kb9Sy/mQ/3GS5G8NzDwJpauua/QC9EKwE/NQ0CZU/B6AXI"></script><link rel="stylesheet" type="text/css" href="/J4WowN/Sng6Y/Kb9Sy/mQ/LVS5aS/PnklKwE/UV15SG/sRXXVX"> <script src="/J4WowN/Sng6Y/Kb9Sy/mQ/LVS5aS/PnklKwE/BRl2HU/YXCWco" async defer></script> <div id="sec-overlay" style="display:none;"> <div id="sec-container"> </div> </div></body> </html>