CINXE.COM
CoRecursive: Coding Stories
<!DOCTYPE html> <html> <head> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'> <meta content='width=device-width, initial-scale=1.0' name='viewport'> <meta content='noindex' name='robots'> <title>CoRecursive: Coding Stories</title> <meta name="description" content="The stories and people behind the code. Hear stories of software development from interesting people."> <meta property="og:title" content="CoRecursive: Coding Stories"> <meta property="og:description" content="The stories and people behind the code. Hear stories of software development from interesting people."> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@ChartableDotCom"> <meta name="twitter:title" content="CoRecursive: Coding Stories"> <meta name="twitter:description" content="The stories and people behind the code. Hear stories of software development from interesting people."> <link rel="shortcut icon" type="image/x-icon" href="/assets/chartable-favicon-147fa2a780e77ea3bc97719e343e8d733b2e8487f7c8a78b3d496aae5555dd05.png" /> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="tAZY8OH5Za9RUYJCdvG5VOy4SLLpQ6UhWa79vyqgFNfyfF2Tlttj6pE776sh/d6Z8F8nP0WWR8YguMYHJN9jFA==" /> <link rel="stylesheet" media="all" href="/assets/application-e6e1be4b0c45d8370f449baa0ce082ab5ebb54dca77b6f98a462fff73a0e4037.css" /> <link href='https://fonts.gstatic.com' rel='preconnect'> <script src="/assets/application-e14f81bc94951128bb2d2dc4f233fd48cdc83e337ef2a6de694aeb11401a7c70.js"></script> <link href='//cdnjs.cloudflare.com/ajax/libs/tachyons/4.11.1/tachyons.min.css' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Cabin:500|Open+Sans&display=swap' rel='stylesheet'><link href='https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap' rel='stylesheet'><script src='https://unpkg.com/axios@1.0.0/dist/axios.min.js'></script> </head> <body style='background: #FFFFFF'> <div class='w-100 flex justify-center' style='background: #FFFFFF'> <div class='content-container inline-flex w7' style='gap: 2rem;'> <div> <img class="br4 cover-art" src="https://static.libsyn.com/p/assets/d/7/a/5/d7a5a500931246e3/Coding_Stories.png" /> </div> <div class='w-100' style='flex: 1'> <div class='fw-700 lh-title title ph4' style='color: #333333; font-family: Inter, sans-serif;'>CoRecursive: Coding Stories</div> <div class='content flex'> <div class='pt4 links'> <div class='f6 fw-700 o-80 lh-title mb3 tl-ns ph4 ttu tracked link-header' style='color: #333333; font-family: Inter'>Listen now on</div> <div class='flex flex-wrap player-list'> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=itunes'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/itunes-73427b4e2f5057e639ad354810c97669b18463e9fef23d6a96e6b0760d853069.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Apple Podcasts </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=spotify'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/spotify-ec5bca5b8fbca78b5b0acb04314c079a40240c9b57370518f83ac1e56302c933.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Spotify </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=google_podcasts'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/google_podcasts-73950d24121a87af14f1dafd8e89dd61ba0ded991e0b9d4807a9a135b70b0548.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Google Podcasts </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=overcast'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/overcast-a72bc55e75006c4efbd9bc3562f3891a896c93373c671e8f2f72f0a76215837e.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Overcast </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=castbox'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/castbox-92db9a5111905ddce5a40cc77185ec56f2acb50b623cb0e8dd91131c725c908f.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Castbox </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=pocket_casts'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/pocket_casts-a6bbed9f96f0781fec812463802e5a727d13a73dd216d3452dfeb97f0709ca0b.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Pocket Casts </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=radio_public'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/radio_public-d9fd5d9abdea96007143dece5fd1153c9a445d2995a06025e238d4a1558c520b.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> RadioPublic </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=breaker'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/breaker-79c73c4e126f43f554361a74ebf12fd6889f6ef98681fea3cba9164f354e66a2.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Breaker </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=rss'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <img class="relative grow-large" src="/assets/rss-5d61fa90548266c6296cb95aa758ef418ccf45deb59d2610a7d52cb4b4835c4f.svg" /> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> RSS feed </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> <a class='no-underline player-list-item flex flex-row items-center' href='https://link.chtbl.com/corecursive?id=corecursive&platform=custom'> <div class='relative flex items-center justify-center' style='height: 60px; width: 60px; padding: 4px;'> <div class='br4 absolute bg-white top-0 right-0 left-0 bottom-0' style='opacity: 0.15;'></div> <div class='div br3 b--mid-gray bg-white bw1 relative grow-large ba flex items-center justify-center h-100 w-100'> <img style="height: 40px; width: 40px" alt="Homepage" src="/assets/custom-e7657cb18bfaf9a605f0960811f048f1abd8fbf574c0f424afcf516393fc864b.svg" /> </div> </div> <div class='hidden-player-content flex-row items-center justify-between ml3' style='flex: 1; font-family: Inter'> <div class='dark-gray o-80 fw-600'> Podcast Homepage </div> <div class='ph3 pv2 br2 ba fw-700' style='border-color: #282828'> <div class='mid-gray o-80'>Play</div> </div> </div> </a> </div> </div> <div class='mt4 ph4'> <div class='lh-copy mb4 w-100' style='color: #333333; font-weight: 400; font-family: Inter, sans-serif;'> <span class='description'> The stories and people behind the code. Hear stories of software development from interesting people. </span> <span class='link pointer dn no-underline text-button o-70' style='color: #333333'>Show more</span> </div> </div> </div> </div> </div> </div> <div class='f7 tc w-100 o-70 mt5 out-links pb5' style='color: #333333'> <div class='pb4'> Powered by <a class="link underline" style="color: inherit" href="https://chartable.com/smartlinks?utm_source=smartlink">Chartable SmartLinks</a> · <a class="link" style="color: inherit" href="https://chartable.com/privacy?utm_source=smartlink">Privacy & Terms</a> </div> </div> <noscript> <a href="">Click here if you are not automatically redirected</a> </noscript> </body> <script> var mobilePlayerIsShowing = false; let loadingIndicator = document.createElement("div"); loadingIndicator.classList = "lds-ellipsis"; for (let i = 0; i < 4; i++) { loadingIndicator.appendChild(document.createElement("div")); } let playDarkImagePath = "/assets/play-dark-56667b8f98046775503abb0472cd646104248c49d9dd4d8ab6389d63b8faadca.svg"; let playLightImagePath = "/assets/play-light-44e957ca417b16db805a9b7a569bf6a9baf0864fda92660c48999eadb06a21b7.svg"; let pauseDarkImagePath = "/assets/pause-dark-2b02da7a704af33108488e4b734d012a19b77f0bf542639284667225e353e59c.svg"; let pauseLightImagePath = "/assets/pause-light-5f6c22366e0556614d5ba30a0531b92b569fd9b8bd83146c384ff77c81c55855.svg"; let lightMode = true; if (!lightMode) { loadingIndicator.classList += " dark-mode"; } // MARKER - Description Text toggle let descriptionTextLimit = 150; let description = document.querySelector('.description'); let descriptionText = description.innerText; let button = document.querySelector('.text-button'); var textIsHidden = true; function hideDescription() { let truncatedText = descriptionText.substr(0, descriptionTextLimit) + '...'; description.innerText = truncatedText; } function toggleText() { if (textIsHidden) { button.innerHTML = 'Show Less'; description.innerText = descriptionText; } else { button.innerHTML = 'Show More'; hideDescription(); } textIsHidden = !textIsHidden; } if (descriptionText.length > descriptionTextLimit) { button.style.display = "inline"; button.addEventListener('click', toggleText); hideDescription(); } let player = document.getElementById('player'); let聽source = document.getElementById('source'); // MARKER - Audio controls var playPauseButton = document.querySelector('.play-pause-button'); var playPauseButton2 = document.querySelector('.play-pause-button-2'); var playPauseButton3 = document.querySelector('.play-pause-button-3'); var isPlaying = false; function togglePlayPause() { if (!currentEpisode) { return; } if (isPlaying) { player.pause(); playPauseButton.src = lightMode ? playDarkImagePath : playLightImagePath; playPauseButton2.src = playDarkImagePath; playPauseButton3.src = playDarkImagePath; } else { player.play(); playPauseButton.src = lightMode ? pauseDarkImagePath : pauseLightImagePath; playPauseButton2.src = pauseDarkImagePath; playPauseButton3.src = pauseDarkImagePath; } isPlaying = !isPlaying; renderEpisodeFeed(); } // MARKER - Audio time management let totalDuration = document.querySelector('.total-duration'); let currentTime = document.querySelector('.current-time'); let totalDuration2 = document.querySelector('.total-duration-2'); let currentTime2 = document.querySelector('.current-time-2'); let percentComplete = document.querySelector('.percent-complete'); let percentComplete2 = document.querySelector('.percent-complete-2'); let progressBar = document.querySelector('.progress-bar'); let progressBar2 = document.querySelector('.progress-bar-2'); let skipBack = document.querySelector('.skip-back'); let skipBack2 = document.querySelector('.skip-back-2'); let skipForward = document.querySelector('.skip-forward'); let skipForward2 = document.querySelector('.skip-forward-2'); let skipForward3 = document.querySelector('.skip-forward-3'); function secondsToHHMMSS(s) { var h = Math.floor(s / 3600); var m = Math.floor(s % 3600 / 60); var s = Math.floor(s % 3600 % 60); var hours = h > 0 ? `${h}:` : ""; var minutes = h > 0 && m > 9 ? `0${m}` : `${m}`; var seconds = s > 9 ? `${s}` : `0${s}`; return `${hours}${minutes}:${seconds}`; } function percentAudioComplete(curr) { return (curr / player.duration) * 100; } function onTimeUpdate(e) { curr = player.currentTime; currentTime.innerHTML = secondsToHHMMSS(curr); currentTime2.innerHTML = secondsToHHMMSS(curr); percentComplete.style.width = `${percentAudioComplete(curr)}%`; percentComplete2.style.width = `${percentAudioComplete(curr)}%`; } function seek(e) { var percent = e.offsetX / this.offsetWidth; var time = percent * player.duration; currentTime.innerHTML = secondsToHHMMSS(time); currentTime2.innerHTML = secondsToHHMMSS(time); percentComplete.style.width = `${percent * 100}%`; percentComplete2.style.width = `${percent * 100}%`; player.currentTime = time; } function handleSkipBack() { player.currentTime -= 15; } function handleSkipForward() { player.currentTime += 30; } // MARKER - Bottom player let mobilePlayer = document.querySelector('.mobile-player'); let minimizedContent = document.querySelector('.minimized-content'); let maximizedContent = document.querySelector('.maximized-content'); let maximizeButton = document.querySelector('.maximize-button'); let minimizeButton = document.querySelector('.minimize-button'); function showMobilePlayer() { mobilePlayerIsShowing = true; mobilePlayer.classList.add("maximized"); minimizedContent.classList.add("maximized"); maximizedContent.style.display = "block"; document.querySelector('body').style.overflow = "hidden"; renderEpisodeFeed(); loadingIndicator.classList.remove("dark-mode"); } function hideMobilePlayer() { mobilePlayerIsShowing = false; mobilePlayer.classList.remove("maximized"); minimizedContent.classList.remove("maximized"); maximizedContent.style.display = "none"; document.querySelector('body').style.overflow = "auto"; if (!lightMode) { loadingIndicator.classList += " dark-mode"; } } // Setting Episode var currentEpisode = null; if (JSON.stringify({"cid":"b8d6d1de-22c1-4de8-8e21-5f7a5ed83748","id":196953437,"title":"Story: ReiserFS","description":"Have you ever known someone who's technical brilliance was overshadowed by personal failings? This is the story of Hans Reiser, a software developer driven to create a superior Linux filesystem, but whose difficult personality got in the way.\n 聽 Then came the disappearance of his wife, Nina, in 2006. The investigation pointed to Reiser, ending with a murder conviction that shocked the tech world.\n 聽 Reiser's story is a reminder of how technical skills and personal integrity need to go hand in hand. From prison, he reflects on his mistakes, realizing the need for empathy and collaboration. His legacy, once about innovation, now serves as a cautionary tale.\n Episode Page Support The Show Subscribe To The Podcast Join The Newsletter 聽","url":"https://chtbl.com/track/7D91G/traffic.libsyn.com/secure/corecursive/ReiserFS.mp3?dest-id=628353","published_at":"2024-11-04T11:00:00.000Z"}) !== JSON.stringify({})) { currentEpisode = {"cid":"b8d6d1de-22c1-4de8-8e21-5f7a5ed83748","id":196953437,"title":"Story: ReiserFS","description":"Have you ever known someone who's technical brilliance was overshadowed by personal failings? This is the story of Hans Reiser, a software developer driven to create a superior Linux filesystem, but whose difficult personality got in the way.\n 聽 Then came the disappearance of his wife, Nina, in 2006. The investigation pointed to Reiser, ending with a murder conviction that shocked the tech world.\n 聽 Reiser's story is a reminder of how technical skills and personal integrity need to go hand in hand. From prison, he reflects on his mistakes, realizing the need for empathy and collaboration. His legacy, once about innovation, now serves as a cautionary tale.\n Episode Page Support The Show Subscribe To The Podcast Join The Newsletter 聽","url":"https://chtbl.com/track/7D91G/traffic.libsyn.com/secure/corecursive/ReiserFS.mp3?dest-id=628353","published_at":"2024-11-04T11:00:00.000Z"}; } let currentEpisodeTitleLabel = document.querySelector('.current-episode-title'); let currentEpisodeTitleLabel2 = document.querySelector('.current-episode-title-2'); let currentEpisodeTitleLabel3 = document.querySelector('.current-episode-title-3'); let currentEpisodeDescriptionLabel = document.querySelector('.current-episode-description'); let descriptionContainer = document.querySelector('.description-container'); function setEpisode(newEpisode) { if (newEpisode) { currentEpisodeTitleLabel.innerText = newEpisode.title; currentEpisodeTitleLabel2.innerText = newEpisode.title; currentEpisodeTitleLabel3.innerText = newEpisode.title; if (newEpisode.description) { descriptionContainer.style.display = "block"; currentEpisodeDescriptionLabel.innerText = newEpisode.description; } else { descriptionContainer.style.display = "none"; } player.src = encodeURI(newEpisode.url); currentEpisode = newEpisode; } } // MARK - Episode feed var loadMoreButton = document.createElement("div"); loadMoreButton.classList = `br2 pa2 f5 ba tc pointer dim mw4 mt4 center ${lightMode ? 'b--dark-gray' : 'bg--white'}`; loadMoreButton.addEventListener('click', getEpisodes); var mobileLoadMoreButton = document.createElement("div"); mobileLoadMoreButton.classList = "br2 pa2 f5 ba tc pointer dim mw4 mt4 center b--dark-gray" mobileLoadMoreButton.addEventListener('click', getEpisodes); var episodeFeedContainer = document.querySelector('.episode-feed-container.web'); var mobileEpisodeFeedContainer = document.querySelector('.episode-feed-container.mobile'); var page = 1; var episodes = []; var requestInProgress = false; function handleEpisodeFeedShowMoreClick(i) { episodes[i].expanded = !episodes[i].expanded; renderEpisodeFeed(); } function handleEpisodeFeedPlayClick(i) { if (!!currentEpisode && currentEpisode.url === episodes[i].url) { togglePlayPause(); } else { currentTime.innerHTML = secondsToHHMMSS(0); currentTime2.innerHTML = secondsToHHMMSS(0); percentComplete.style.width = `${percentAudioComplete(0)}%`; percentComplete2.style.width = `${percentAudioComplete(0)}%`; setEpisode(episodes[i]); if (!isPlaying) { togglePlayPause(); } else { player.play(); renderEpisodeFeed(); } } } function generateEpisodeDiv(episode, index, isMobile) { if (!episode.url || !episode.title) { return null; } var episodeDiv = document.createElement("div"); episodeDiv.classList = "flex flex-row pv4 bb b--light-gray items-start"; let pauseImage = isMobile || lightMode ? pauseDarkImagePath : pauseLightImagePath; let playImage = isMobile || lightMode ? playDarkImagePath : playLightImagePath; var imageTag = document.createElement("img"); imageTag.src = !!currentEpisode && episode.url === currentEpisode.url && isPlaying ? pauseImage : playImage; imageTag.style.width = "1.5rem"; imageTag.classList = "mr3 pointer dim"; imageTag.addEventListener('click', function() { handleEpisodeFeedPlayClick(index); }); var titleDiv = document.createElement("div"); titleDiv.classList = "f5 b mb1 tl"; titleDiv.innerText = episode.title; var textContainerDiv = document.createElement("div"); var descriptionDiv = document.createElement("div"); var showMoreSpan = document.createElement("div"); if (episode.description) { descriptionDiv.classList = "f5 lh-copy tl"; descriptionDiv.innerText = !episode.expanded && episode.description.length > descriptionTextLimit ? episode.description.substr(0, descriptionTextLimit) + '...' : episode.description; showMoreSpan.classList = `${episode.description.length > descriptionTextLimit ? '' : 'dn'} tl no-underline text-button o-70 pointer mt1`; showMoreSpan.innerHTML = `Show ${episode.expanded ? 'less' : 'more'}`; showMoreSpan.addEventListener("click", function() { handleEpisodeFeedShowMoreClick(index); }); } textContainerDiv.appendChild(titleDiv); textContainerDiv.appendChild(descriptionDiv); textContainerDiv.appendChild(showMoreSpan); episodeDiv.appendChild(imageTag); episodeDiv.appendChild(textContainerDiv); return episodeDiv; } function getEpisodes() { if (requestInProgress) { return; } requestInProgress = true; loadMoreButton.innerHTML = ""; loadMoreButton.appendChild(loadingIndicator); mobileLoadMoreButton.innerHTML = loadMoreButton.innerHTML; let host = "https://chartable.com"; axios(`${host}/api/episodes/feed?podcast_id=corecursive-w-adam-bell&page=${page}&token=ab5d92470d76c4d03776`) .then(res => { res.data.forEach(episode => { episode.expanded = false; episodes.push(episode); }); loadMoreButton.innerHTML = "Load more"; mobileLoadMoreButton.innerHTML = loadMoreButton.innerHTML page += 1; renderEpisodeFeed(); }) .catch(err => { loadMoreButton.innerHTML = "Retry" mobileLoadMoreButton.innerHTML = loadMoreButton.innerHTML }) .finally(() => requestInProgress = false); } function renderEpisodeFeed() { episodeFeedContainer.innerHTML = ''; mobileEpisodeFeedContainer.innerHTML = ''; for (let i = 0; i < episodes.length; i++) { let episodeDiv = generateEpisodeDiv(episodes[i], i, false); if (episodeDiv) { episodeFeedContainer.appendChild(episodeDiv); } if (mobilePlayerIsShowing && episodeDiv) { mobileEpisodeFeedContainer.appendChild(generateEpisodeDiv(episodes[i], i, true)); } } loadMoreButton.innerHTML = "Load more"; mobileLoadMoreButton.innerHTML = loadMoreButton.innerHTML; episodeFeedContainer.appendChild(loadMoreButton); mobileEpisodeFeedContainer.appendChild(mobileLoadMoreButton) } if (false) { minimizeButton.addEventListener("click", hideMobilePlayer); maximizeButton.addEventListener("click", showMobilePlayer); player.addEventListener('timeupdate', onTimeUpdate); progressBar.addEventListener("click", seek); progressBar2.addEventListener("click", seek); skipBack.addEventListener("click", handleSkipBack); skipBack2.addEventListener("click", handleSkipBack); skipForward.addEventListener("click", handleSkipForward); skipForward2.addEventListener("click", handleSkipForward); skipForward3.addEventListener("click", handleSkipForward); playPauseButton.addEventListener('click', togglePlayPause); playPauseButton2.addEventListener('click', togglePlayPause); playPauseButton3.addEventListener('click', togglePlayPause); player.onloadedmetadata = function() { let time = player.duration; totalDuration.innerHTML = secondsToHHMMSS(time); totalDuration2.innerHTML = secondsToHHMMSS(time); } if (currentEpisode) { setEpisode(currentEpisode); } episodeFeedContainer.classList += lightMode ? " dark-gray" : " white"; renderEpisodeFeed(); } getEpisodes(); </script> </html>