Level up with expert-led live courses
Reserve your seat for interactive workshops to gain hands-on experience—and ask questions along the way.
Give your teams the O’Reilly learning platform and equip them with the resources that drive business outcomes. Click on a feature below to explore.
Reserve your seat for interactive workshops to gain hands-on experience—and ask questions along the way.
O’Reilly Answers instantly generates information teams can trust, sourced from thousands of titles on our learning platform.
${postType}${postCategory ? ` | ${postCategory}` : ''}
${postTitle}
${audioControls}Unable to load blog feed.
'; }); } document.addEventListener('DOMContentLoaded', loadBlogFeed); // initialize blog feed audio player const initializeAudioPlayer = (audioPlayer) => { const inputs = audioPlayer.querySelectorAll("input, select, button"); inputs.forEach((input) => { input.addEventListener("click", (event) => { event.preventDefault(); event.stopPropagation(); }); }); const audio = audioPlayer.querySelector(".player-audio"); const playPauseButton = audioPlayer.querySelector(".play-pause"); const seekBar = audioPlayer.querySelector(".seek-bar"); const currentTimeDisplay = audioPlayer.querySelector(".time-current"); const durationDisplay = audioPlayer.querySelector(".time-total"); const formatTime = (time) => { const minutes = Math.floor(time / 60); const seconds = Math.floor(time % 60) .toString() .padStart(2, "0"); return `${minutes}:${seconds}`; }; const playPause = () => { const playIcon = playPauseButton.querySelector(".play"); const pauseIcon = playPauseButton.querySelector(".pause"); if (audio.paused) { document .querySelectorAll(".audioPlayer-controls") .forEach((playerElement) => { const otherAudio = playerElement.querySelector(".player-audio"); if (otherAudio !== audio) { playerElement.classList.remove("playing"); otherAudio.pause(); const otherPlayIcon = playerElement.querySelector(".play-pause .play"); const otherPauseIcon = playerElement.querySelector(".play-pause .pause"); otherPlayIcon.classList.add("visible"); otherPlayIcon.classList.remove("hidden"); otherPauseIcon.classList.remove("visible"); otherPauseIcon.classList.add("hidden"); } }); audioPlayer.classList.add("playing"); audio.play(); pauseIcon.classList.add("visible"); pauseIcon.classList.remove("hidden"); playIcon.classList.remove("visible"); playIcon.classList.add("hidden"); let { gaEventName, gaCategory, gaEvent, gaLabel } = playPauseButton.dataset; gaLabel = gaLabel.toLowerCase(); const eventData = { event: gaEventName || "eventTracker", eventCat: gaCategory || "marketing", eventAct: gaEvent || "radar module", eventLbl: gaLabel || "play", eventVal: 0, nonInteraction: 0, }; if (typeof dataLayer !== "undefined" && Array.isArray(dataLayer)) { dataLayer.push(eventData); } else { console.warn( "dataLayer is not defined. Event not tracked:", eventData ); } } else { audio.pause(); playIcon.classList.add("visible"); playIcon.classList.remove("hidden"); pauseIcon.classList.remove("visible"); pauseIcon.classList.add("hidden"); } playPauseButton.blur(); }; playPauseButton.addEventListener("click", (event) => { event.preventDefault(); event.stopPropagation(); playPause(); }); audio.addEventListener("timeupdate", () => { seekBar.value = audio.currentTime; currentTimeDisplay.textContent = formatTime(audio.currentTime); }); if (audio.duration) { seekBar.max = audio.duration; durationDisplay.textContent = formatTime(audio.duration); } audio.addEventListener("loadedmetadata", () => { seekBar.max = audio.duration; durationDisplay.textContent = formatTime(audio.duration); }); seekBar.addEventListener("input", () => { audio.currentTime = seekBar.value; }); audioPlayer.classList.add("fadeIn"); }; const initializeAllAudioPlayers = () => { const audioPlayers = document.querySelectorAll( ".audioPlayer-controls:not(.initialized)" ); audioPlayers.forEach((audioPlayer) => { initializeAudioPlayer(audioPlayer); audioPlayer.classList.add("initialized"); }); }; // Google Analytics event tracking document.addEventListener('click', (event) => { const radarFeedItem = event.target.closest('#blog-feed-section .feed-item'); if (radarFeedItem) { const itemType = radarFeedItem.dataset.itemType ? radarFeedItem.dataset.itemType.toLowerCase() : ''; const itemTitle = radarFeedItem.dataset.itemTitle ? radarFeedItem.dataset.itemTitle.toLowerCase() : ''; eventLabel = itemType + '|' + itemTitle; console.log(eventLabel); const eventData = { 'event': 'eventTracker', 'eventCat': 'marketing', 'eventAct': 'radar module', 'eventLbl': eventLabel, 'eventVal': 0, 'nonInteraction': 0 }; dataLayer.push(eventData); }; const radarMorePosts = event.target.closest('#moreRadarPosts'); if (radarMorePosts) { const eventData = { 'event': 'eventTracker', 'eventCat': 'marketing', 'eventAct': 'radar module', 'eventLbl': 'more posts', 'eventVal': 0, 'nonInteraction': 0 }; dataLayer.push(eventData); }; });O’Reilly Experts
Tech teams love tapping into the minds of innovators through our expert-led courses, renowned text-based content, and bite-size online Superstream tech conferences. In fact, in a recent survey, one-third of tech practitioners rated O’Reilly content a five out of five (excellent)—better than Pluralsight, LinkedIn Learning, Udacity, or Skillsoft.
Learn who best put the O’Reilly learning platform to work for their organization and what the judges were looking for in winning submissions.
See the resultsJose, a principal software engineer, trusts our learning platform to filter what his teams need to know to stay ahead.
Addison always appreciated O’Reilly books, but the learning platform helped take her skills to the next level.
For over eight years Amir has counted on our learning platform whether he needs proven methods to learn new technologies or the latest management tips.
Mark credits the O’Reilly learning platform with helping him to stay ahead at every turn throughout his tech career.