













<!DOCTYPE html>
<!--[if lt IE 7]>  <html lang="en" class="lt-ie9 lt-ie8 lt-ie7" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<!--[if IE 7]> <html lang="en" class="lt-ie10 lt-ie9 lt-ie8" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<!--[if IE 8]> <html lang="en" class="lt-ie10 lt-ie9" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="lt-ie10" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<!--[if gt IE 9]><!--> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#"> <!--<![endif]-->
	
	











<head>
	
	
	
	<!-- metas -->
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />		
	<title>Podcasts | InfoWorld</title>
	
	
			
			
			    <meta name="viewport" content="width=device-width, initial-scale=1.0">
         	
	
	
	
	<script>
	function getQueryVariable(variable) {
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		for (var i=0;i<vars.length;i++) {
			var pair = vars[i].split("=");
			if(pair[0] == variable){return pair[1];}
		}
		return(false);
	}
	</script>
	
	<script>
	// Include CSS file for insider modal - used in insider_reg_api.js
	function addCSS(filename){
		 var headerTag = document.querySelector("header#banner");
		 var styleTag = document.createElement('link');
		 styleTag.href = filename;
		 styleTag.className = "oc-modal";
		 styleTag.type = 'text/css';
		 styleTag.rel = 'stylesheet';
		 headerTag.parentNode.insertBefore(styleTag, headerTag);
	}
	function addScript(filename){
		let headTag = document.querySelector("header#banner");
		let scriptTag = document.createElement('script');
		scriptTag.src = filename;
		scriptTag.className = 'oc-modal';
		scriptTag.type = 'text/javascript';
		headTag.parentNode.insertBefore(scriptTag, headTag);
	}
	</script>
		
	<!-- ad-related js -->
	<script src="/www/js/jquery/jquery-1.10.2.min.js"></script>
	
	<script type="text/javascript" src="/www/js/jquery/jquery_cookie.js"></script>
	
	<script>
	var amazonAPSEnabled = false;
	var aaxEnabled = false;
	</script>
	
	
	
	
	
	
	
	<script type="text/javascript" src="/www/js/apollo-locales.js?v=20240612122409"></script>
	
	
	













	<script src="//d2zv5rkii46miq.cloudfront.net/0/latest/cmp_shim.js"></script>


<script>
//is from EU?
var isEU = null;

var dataLayer = window.dataLayer = window.dataLayer || [];
</script>





<style type="text/css">
#sp_privacy_manager_container {
	z-index: 10000000 !important;
}
</style>



<script type="text/javascript">
//GDPR Stub file
	!function () { var e = function () { var e, t = "__tcfapiLocator", a = [], n = window; for (; n;) { try { if (n.frames[t]) { e = n; break; } } catch (e) { } if (n === window.top) break; n = n.parent } e || (!function e() { var a = n.document, r = !!n.frames[t]; if (!r) if (a.body) { var i = a.createElement("iframe"); i.style.cssText = "display:none", i.name = t, a.body.appendChild(i) } else setTimeout(e, 5); return !r }(), n.__tcfapi = function () { for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++)n[r] = arguments[r]; if (!n.length) return a; if ("setGdprApplies" === n[0]) n.length > 3 && 2 === parseInt(n[1], 10) && "boolean" == typeof n[3] && (e = n[3], "function" == typeof n[2] && n[2]("set", !0)); else if ("ping" === n[0]) { var i = { gdprApplies: e, cmpLoaded: !1, cmpStatus: "stub" }; "function" == typeof n[2] && n[2](i) } else a.push(n) }, n.addEventListener("message", (function (e) { var t = "string" == typeof e.data, a = {}; try { a = t ? JSON.parse(e.data) : e.data } catch (e) { } var n = a.__tcfapiCall; n && window.__tcfapi(n.command, n.version, (function (a, r) { var i = { __tcfapiReturn: { returnValue: a, success: r, callId: n.callId } }; t && (i = JSON.stringify(i)), e.source.postMessage(i, "*") }), n.parameter) }), !1)) }; "undefined" != typeof module ? module.exports = e : e() }();
</script>

<script type="text/javascript">
//CCPA Stub file
      (function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();
</script>




<script  type="text/javascript">
window._sp_ = {
      config: {
    	  accountId: 146,
          baseEndpoint: "https://cmpv2.infoworld.com",
          propertyHref: "https://www.infoworld.com",
          joinHref: true,
          targetingParams: {
            type: "GDPR"
         }
      }
}
window._sp_ccpa = {
   config: {
         mmsDomain: "https://cmp.infoworld.com",
         ccpaOrigin: "https://ccpa-service.sp-prod.net",
         accountId: 146,
         getDnsMsgMms: true,
         alwaysDisplayDns: false,
         targetingParams: {
         	type: "CCPA"
         }
   }
}
</script>

<script src="https://cmpv2.infoworld.com/wrapperMessagingWithoutDetection.js"></script>
<script src="https://ccpa.sp-prod.net/ccpa.js"></script>


 
<script>
	var debug = false;
</script>
 
 


<script>
if (typeof Promise === 'undefined') {
	//yuk but IE 11 etc only
	document.write('<script src="https://www.promisejs.org/polyfills/promise-7.0.4.min.js"></scr' + 'ipt>');
}

try {
	(function () {
		var idgus = window.idgus || {}; //if it's already set use that instead
		/*
		the cmp is code is usually first on the page so run this here to
		never let anything redefine window.idgus
		*/
		Object.defineProperty(window, 'idgus', {
			enumerable: false,
			configurable: false,
			get: function () {
				return idgus;
			},
			set: function () {
				//do nothing
			}
		});
	})();
} catch (ex) {};

window.idgus = window.idgus || {};
window.idgus.cmp = (function () {

	const PRIVACY_MANAGER_IDENT = 165662;

	//standard purps
	const STORE_ACCESS_ON_DEVICE = '5ea7dfd36ede87504f7dedc5',
		SELECT_PERSONSALISED_CONTENT_ID = '5ea7dfd36ede87504f7df18d',
		SELECT_PERSONSALISED_ADS_ID = '5ea7dfd36ede87504f7df04e',
		SELECT_BASIC_ADS_ID = '5ea7dfd36ede87504f7deeaf',
		CREATE_PERSONALISED_ADS_PROFILE_ID = '5ea7dfd36ede87504f7def8d',
		CREATE_PERSONALISED_CONTENT_PROFILE_ID = '5ea7dfd36ede87504f7df117',
		MEASURE_ADS_PERFORMANCE_ID = '5ea7dfd36ede87504f7df1f7',
		MEASURE_CONTENT_PERFORMANCE_ID = '5ea7dfd36ede87504f7df2f3',
		APPLY_MARKET_RESEARCH_ID = '5ea7dfd36ede87504f7df378',
		DEVELOP_AND_IMPROVE_PRODUCTS_ID = '5ea7dfd36ede87504f7df425';
	//custom pur and vend
	const SOCIAL_MEDIA_CONSENTS_PURPOSE_ID = '5f1019609c10086dcb659fba',
		GOOGLE_AD_MANAGER_VENDOR_ID = '5e74df5ff443bb795772df9c',
		GOOGLE_ANALYTICS_VENDOR_ID = '5e542b3a4cd8884eb41b5a72',
		TWITTER_VENDOR_ID = '5e71760b69966540e4554f01',
		FACEBOOK_VENDOR_ID = '5e716fc09a0b5040d575080f',
		LINKEDIN_VENDOR_ID = '5e777e669cb08971eb078d71',
		BLUECONIC_VENDOR_ID = '5eb32dea09c3f947e75e6f02';
	//const lang = (siteLang in LANG) ? LANG[siteLang] : LANG['en'];
	
	var bindReshowCmp = function () {
		var url = document.location.pathname;
		if (url.indexOf("/about/member-preferences") > -1) {
			if (debug) console.log('*****GDPR reshowLink executing ', url);
			$(document).ready(function() {
				$(".cmpSettings").show();
				$(".reshowLink").on("click", function(e) {
					e.preventDefault();
					window._sp_.loadPrivacyManagerModal(PRIVACY_MANAGER_IDENT);
				});
			});
		}
	}
	
	//sitepoint.com/jquery-document-ready-plain-javascript/ - wanted to avoid jquery
	if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {
		bindReshowCmp();
	}
	else {
		document.addEventListener("DOMContentLoaded", bindReshowCmp);
	}
	
	let consentedCustomVendors = []; //todo - not needed anymore
	let consentedPurposes = [];
	let vendorGrants = {};
	var checkIfInEU = new Promise(function (resolve, reject) {
		__tcfapi('addEventListener', 2, function (tcData, success) {
			if (debug) { console.log('GDPR addEventListener() tcData: ', tcData); }
			if (debug) { console.log('GDPR addEventListener() gdprApplies:', tcData.gdprApplies, 'eventStatus', tcData.eventStatus, 'success', success); }	
						
			isEU = tcData.gdprApplies;
			if (typeof isEU === 'undefined') {
				isEU = true;
			}
			if (debug) { console.log("GDPR in cmp-tcfv2-sp tcData.gdprApplies: " + isEU); }
			//if(promiseResolved)return;//timeout reached	
			//promiseResolved = true;
			if (success && (tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete')) {
				let isEuVisitor = tcData.gdprApplies || false;
				if (isEuVisitor) {
					__tcfapi('getCustomVendorConsents', 2, (vendorConsents, success) => {
						consentedPurposes = vendorConsents.consentedPurposes || [];
						consentedCustomVendors = vendorConsents.consentedVendors || [];
						vendorGrants = vendorConsents.grants;
		
						if (debug) { console.log('GDPR addEventListener vendorConsents:', vendorConsents); }
						if (debug) { console.log('GDPR addEventListener consentedPurposes:', consentedPurposes, 'consentedCustomVendors', consentedCustomVendors, 'vendorGrants', vendorGrants); }
						
						resolve();
					});
				}
				else reject();
				// remove the ourself to not get called more than once
				//todo - needed?
				__tcfapi('removeEventListener', 2, function (success) {
					if (success) {
						console.log('addEventListener removeEventListener: ' + tcData.listenerId);
					}
				}, tcData.listenerId);
			}
		}); //addEventListener
	});
	
	//checkCCPAOptOut Promise
	var checkCCPAOptOut = new Promise(function(resolve, reject) {
		if (debug) { console.log("GDPR checkCCPAOptOut Promise"); }
	var promiseResolved = false;
	    setTimeout(function() {
	        if (debug) { console.log('GDPR checkCCPAOptOut timeout reached promiseResolved', promiseResolved); }
	        if (!promiseResolved) {
	            promiseResolved = true;
	            //assume opt out for safety
	            resolve();
	        }
	    }, 20000);
	    __uspapi('getUSPData', 1, function(uspData, success) {
	    if (promiseResolved)
	            return;
	        //timeout reached
	        promiseResolved = true;
	        if(success) {
	try {
	if (debug) { console.log('uspapi success: ', uspData); }
	var uspDataString = uspData.uspString;
	var uspDataArray = [];
	uspDataArray = uspDataString.split("");
	if (typeof uspDataArray[2] !== "undefined" && uspDataArray[2] !== "Y") {
	//user is still opted in
	reject('CCPA opted in');
	}
	else {
	//user opted out
	resolve();
	}
	}
	catch(e) {
	if (debug){ console.log('error with uspData retrieval: ', e); }
	//assume opt out for safety
	resolve();
	}
	
	} else {
	if (debug) { console.log('uspapi fail: ', uspData); }
	//assume opt out for safety
	resolve();
	}
	
	});
	});
	
	const checkConsent = function (ident) {
		if (debug) { console.log('GDPR', 'checkConsent() for ', ident); }
		let ok = false;
		if (ident in vendorGrants) {
			//has to have grant on vendor and on all associated puposes, advantage of this is we dont need to keep track of what purps a vendor is assoc with and check independetly
			const vendor = vendorGrants[ident];
			if (debug) { console.log('GDPR', 'checkConsent() is vendor true - grants ', vendor); }
			ok = vendor.vendorGrant; //has this vendor been granted at vendor level	
			if (debug) { console.log('GDPR', 'checkConsent() vendor has grant at vendor level', ok); }
			if (ok) { //if so check all purposes have been granted
				for (let purpIdent in vendor.purposeGrants) {
					ok = vendor.purposeGrants[purpIdent];
					if (debug) { console.log('GDPR', 'checkConsent() vendor has purpose ' + purpIdent + ' grant ', ok); }
					if (!ok) break;
				}
			}
			if (debug) { console.log('GDPR', 'checkConsent() vendor has ultimate grant', ok); }
			return ok;
		}
		
		//not vendor so check if purpose
		ok = consentedPurposes.some(obj => obj[__id] == ident); //not vendor just pupose
		if (debug) { console.log('GDPR', 'checkConsent() purpose has grant ', ok); }
		return ok;
	};
	
	
	return {
		isDebug: function () {
			return debug;
		},
		hold: new Promise(function (resolve, reject) { //hold till user has made or choice or doesnt need to 
			checkIfInEU.then(function () {
				if (debug) { console.log('GDPR', 'hold() ok resolved - return true'); }
				resolve(true);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'hold() not in eu - return true'); }
				resolve(true);
			});
		}),
		adsense: new Promise(function (resolve, reject) { //same as hold effectively
			checkIfInEU.then(function () {
				//const ok = checkConsent(GOOGLE_AD_MANAGER_VENDOR_ID);
				const ok = true;
				if (debug) { console.log('GDPR', 'adsense ok ', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'adsense not in eu'); }
				resolve(true);
			});
		}),
		blueconic: new Promise(function (resolve, reject) {
			checkIfInEU.then(function () {
				const ok = checkConsent(BLUECONIC_VENDOR_ID);
				if (debug) { console.log('GDPR', 'blueconic ok', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, check CCPA
				if (debug) { console.log('GDPR', 'blueconic not in eu'); }
				checkCCPAOptOut.then(function() {
					if (debug) { console.log('CCPA', 'user has opted out of Blueconic'); }
					resolve(false);
				}).catch(function(){
					if (debug) { console.log('CCPA', 'user has not opted out of Blueconic'); }
					resolve(true);
				});
				
			});
		}),
		gpt: new Promise(function (resolve, reject) { //same as hold effectively
			checkIfInEU.then(function () {
				//const ok = checkConsent(GOOGLE_AD_MANAGER_VENDOR_ID);
				const ok = true;
				if (debug) { console.log('GDPR', 'gpt ok', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'gpt not in eu'); }
				resolve(true);
			});
		}),
		gaTrack: new Promise(function (resolve, reject) {
			checkIfInEU.then(function () {
				const ok = checkConsent(GOOGLE_ANALYTICS_VENDOR_ID);
				if (debug) { console.log('GDPR', 'gaTrack ok ', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'gaTrack not in eu, arguments', arguments); }
				resolve(true);
			});
		}),
		adrian: new Promise(function (resolve, reject) {
			checkIfInEU.then(function () {
				const ok = checkConsent(STORE_ACCESS_ON_DEVICE);
				if (debug) { console.log('GDPR', 'adrian ok ', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'adrian not in eu'); }
				resolve(true);
			});
		}),
		twitter: new Promise(function (resolve, reject) {
			checkIfInEU.then(function () {
				const ok = checkConsent(TWITTER_VENDOR_ID);
				if (debug) { console.log('GDPR', 'twitter ok ', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'twitter not in eu'); }
				resolve(true);
			});
		}),
		linkedin: new Promise(function (resolve, reject) {
			checkIfInEU.then(function () {
				const ok = checkConsent(LINKEDIN_VENDOR_ID);
				if (debug) { console.log('GDPR', 'linkedin ok ', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'linkedin not in eu'); }
				resolve(true);
			});
		}),
		facebook: new Promise(function (resolve, reject) {
			checkIfInEU.then(function () {
				const ok = checkConsent(FACEBOOK_VENDOR_ID);
				if (debug) { console.log('GDPR', 'facebook ok ', ok); }
				resolve(ok);
			}).catch(function () { //not in eu, return ok
				if (debug) { console.log('GDPR', 'facebook not in eu'); }
				resolve(true);
			});
		}),
		consentKnown: new Promise (function (resolve, reject) {
			checkIfInEU.then(function() { 
				//EU visitors
				dataLayer.push({
					'event': 'consentKnown',
					'ccpaOptedOut': false
				});
				resolve(true);
			}).catch(function(){
				//check for CCPA
				checkCCPAOptOut.then(function() {
					//CCPA applies and user has opted out
					dataLayer.push({
						'event': 'consentKnown',
						'ccpaOptedOut': true
					});
					resolve(true);
				}).catch(function(){					
					dataLayer.push({
						'event': 'consentKnown',
						'ccpaOptedOut': false
					});
					resolve(true);
				})

			});
		})
	}; // end return
	

	
	
})();



</script>



	
	
	
		











<script>
// this javascript is for retrieving locale-specific ad units for DFP - see mapping in apollo-locales.js
// getting locale and editions for the site the reader is viewing
let brandAbbrev = "ifw";
let brandConfigBrandId = "2048";
//let myLocale = getLocale(); // getting locale on page load from URL, IP, geolocation - this will always be something. If 0, it's the global/default/core view.
let countryCode = "";
let getSlugFromId = getApolloLocaleIdMap();
let getIdFromSlug = getApolloLocaleSlugMap();

// if selectedLocale cookie exists, get locale
if (typeof getSelectedLocale() !== 'undefined'  && getSelectedLocale() === getLocale()) { // get locale from cookie if available otherwise, use another locale source (from geolocation, url slug, etc.)
 	countryCode = getSlugFromId[getSelectedLocale()];
} else {
	countryCode = getSlugFromId[getLocale()];
}

// if countryCode is empty string at this point, it means localeId = 0 which is global (default/core)...
if (countryCode == "") {
	countryCode = "us"; // country code for default global is currently US
}

//US social media accounts are the default if locale cannot be determined
var twitterUrl = "https://twitter.com/infoworld";
var linkedInUrl = "https://www.linkedin.com/company/164364";
var facebookUrl = "https://www.facebook.com/InfoWorld";
var youTubeUrl = "";
var twitterHandle = "infoworld";
//cookie policy page
var localeEdition = "United States Edition";

if (countryCode === 'asean') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "";
}
if (countryCode === 'middle-east') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "";
}
if (countryCode === 'uk') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "United Kingdom Edition";
}
if (countryCode === 'in') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	youTubeUrl = "";
	localeEdition = "";
}
if (countryCode === 'africa') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	youTubeUrl = "";
	localeEdition = "";
}
if (countryCode === 'au') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "";
}
if (countryCode === 'nz') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "";
}
if (countryCode === 'nl') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "";
}
if (countryCode === 'asia') {
	twitterUrl = "https://twitter.com/infoworld";
	linkedInUrl = "";
	facebookUrl = "https://www.facebook.com/InfoWorld";
	twitterHandle = "infoworld";
	localeEdition = "";
}
</script>

	
	
	<script src="/www/js/init_device.js"></script>
	
	

	

	
		
			
			

























	<script async src="//js-sec.indexww.com/ht/p/183980-247839449380635.js"></script>




		
	<script type="text/javascript" src="/www/js/ads/gpt_includes.js?v=20240612122409"></script>




<script type="text/javascript">
	if (adLayer==null || adLayer=='undefined') {
		var adLayer=[];
	}
	
		
		
			adLayer["itemType"]="other";
		
	
</script>
	
<script type="text/javascript">
	// Set up ad related variables
	try {
		IDG.GPT.unitName = "/8456/IDG.G_B2B_InfoWorld.com";
	}
	catch (exception) {
		console.log ("google_dfp can't use IDG.GPT "+ exception);
	}

	try {
		IDG.GPT.unitName = IDG.GPT.unitName + "/" + "podcasts_door";
	}
	catch (exception) {
		console.log ("google_dfp can't use IDG.GPT "+ exception);
	}
	// global variables
	var global_ShowSuper = true;
	var global_ShowHero = false;
	
	//XFP global targeting, more targeting thm_pre
	var url = window.location.href;
	if(url.indexOf("?")>1){
		url=url.split('?')[0];
	}
	

	try {
		IDG.GPT.addTarget("URL", encodeURIComponent(url));
	}
	catch (exception) {
		console.log ("google_dfp can't use IDG.GPT "+ exception);
	}
	
	
	
	
	
	
	try {
		if (null != IDG.GPT.getQsVal("env")) {		
			IDG.GPT.addTarget("env", IDG.GPT.getQsVal("env").replace(/\W/g, "") );
		}
	}
	catch (exception) {
		console.log ("google_dfp can't use IDG.GPT "+ exception);
	}	
	
	
	
		

	try {
		IDG.GPT.addTarget("page_type", '');
	}
	catch (exception) {
		console.log ("google_dfp can't use IDG.GPT "+ exception);
	}	

	
	
	
	
	
	
	
	
	
	
	//k/v for Inskin partner
	/* var fn_pageskin = screen.width >= 1330 ? "true" : "false";
	try {
		IDG.GPT.addTarget("inskin_yes", fn_pageskin);
        IDG.GPT.log("Inskin: added k/v pair inskin_yes : "+fn_pageskin);
	} catch (exception) {
		console.log("Inskin: google_dfp can't use IDG.GPT " + exception);
	} */
	
		window.massConfig = {
				inskin: {
					default: {
						plr_PublisherId: "131196"
					}
				}
		};
	
	
</script>



<script type="text/javascript">
	
	
	
	
		
		
		
		
		
		
		
		
	
	
	
			try {
					IDG.GPT.isNewHeader = true;
				}
				catch (exception) {
					console.log ("google_dfp can't use IDG.GPT "+ exception);
				}
	
	
	

</script>
  
<script src="/www.idge/js/thm_pre.js?v=20240612122409"></script>


	
	
		<script>
		// IDGMPM-16419 - moved out of adsel queue for IDGMPM-16933
		googletag.cmd.push(function() {
		  if (googletag.pubads().getTargeting('permutive').length == 0) {
			
			//IDGMPM-18418 - capture paermutive key-values
			window.headertag = window.headertag || {};
			window.headertag.cmd = window.headertag.cmd || [];
			window.headertag.cmd.push(function() {
				try {
					var segs = JSON.parse(localStorage._pdfps || '[]').slice(0,250);
					window.headertag.setUserKeyValueData({ segments: {"permutive": segs} });                
				} catch (e) {}
			});
			
		    var kvs = localStorage.getItem('_pdfps');
		    googletag.pubads().setTargeting('permutive', kvs ? JSON.parse(kvs) : []);
		    console.log('ad targeting permutive kvs: ', kvs);
		  }
		});
		</script>
	
	
	
		
				
			<script type="text/javascript" src="/www/js/ads/gpt_starter.js?1234"></script>
		

	<script>
		loadGPT();
	</script>

	

	

		
		
				
			<script type="text/javascript" src="/www/js/ads/gpt_launcher.js?v=20240612122409"></script>
		
		

	





		
		
	
	
	
		
				
		
		
		
	

	<link rel="canonical" href="https://www.infoworld.com/podcasts/" />
	
	

	
	<meta name="description" content="Tune in now, catch up on past episodes, or subscribe to get the latest podcast content. Hear from IT leaders and tech experts on the topics that matter to you." />
	
		
		
		
		
	
	
	
	
		
		
		
			
			
				
			
			
			
		
	
	
		
		
			<meta property="og:title" content="Podcasts">
		
	
	<meta property="og:description" content="Tune in now, catch up on past episodes, or subscribe to get the latest podcast content. Hear from IT leaders and tech experts on the topics that matter to you.">	
	
	
		
		
			<meta property="og:image" content="https://idge.staticworld.net/ifw/IFW_logo_social_300x300.png" />
			<meta itemprop="image" content="https://idge.staticworld.net/ifw/IFW_logo_social_300x300.png">
			<meta itemprop="thumbnailURl" content="https://idge.staticworld.net/ifw/IFW_logo_social_300x300.png" />
			<link rel="image_src" href="https://idge.staticworld.net/ifw/IFW_logo_social_300x300.png" />
			<meta name="twitter:image" content="https://idge.staticworld.net/ifw/IFW_logo_social_300x300.png" />
		
	
	
		
		
			<meta property="og:type" content="website" />
		 
		
	<meta property="og:site_name" content="InfoWorld" />
	<meta property="fb:app_id" content="196366870381968" />
	
		
		
			<meta property="og:url" content="https://www.infoworld.com/podcasts/">
		
	
	
	<!-- Use Twitter Summary Card with Large Image for articles and videos -->
	
		
		
			<meta name="twitter:card" content="summary">
		
	

	<meta name="twitter:site" content="@infoworld">
	<meta name="twitter:description" content="Tune in now, catch up on past episodes, or subscribe to get the latest podcast content. Hear from IT leaders and tech experts on the topics that matter to you.">

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	<meta name="rating" content="General">
	
	<meta name="robots" content="NOODP,NOYDIR" />
	
	
		<meta name="google-site-verification" content="RD0aa-ox1hse8Hjz2fU6KzOMnGyqLwYUv13rGucjtjA" />
	
	
	
		<meta name="msvalidate.01" content="04917178B598F0648B9BAD693FEC29A3" />
	
		
	<!-- pagination -->
	
	
	
	
	
	
	
	
	
	
	
					
		
		
			
			
		
	
	
	<!-- css -->
	
	
	
		
			
			
			
			
				
					
					
					
						<link rel="stylesheet" href="/www.idge/css/category.css?v=20240612122409" />	
						<link rel="stylesheet" href="/www/css/search.css?v=20240612122409" />
					
					
			
				
		
		
		
		<link rel="stylesheet" href="/www.idge/css/print.css" media="print" />
		
	
	
		
			
			
				
				
					<link rel="stylesheet" href="/www.idge.ifw/css/category.css?v=20240612122409" />
				
			
		
	
	
	<link rel="stylesheet" href="/www.idge/css/webfonts/ss-social.css" />
	<link rel="stylesheet" href="/www.idge/css/webfonts/ss-standard.css" />
	<!--[if lte IE 8]>  
		<link href="/www.idge/css/webfonts/ss-ie8.css" rel="stylesheet" />
	<![endif]--> 
	
	
	
	
	
	
		<script>
		var	suppressItemsForHoliday = "false";
	</script>

	
		
	
	
	
		<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous">
	
	
	
		<link rel="stylesheet" href="https://use.typekit.net/niy2apr.css" />
	
	
	<!--  fav and touch icons -->
	<link rel="shortcut icon" type="image/x-icon" href="https://idge.staticworld.net/ifw/favicon.ico"/>
	<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://idge.staticworld.net/ifw/IFW_logo_social_144x144.png" />
	<link rel="apple-touch-icon-precomposed" sizes="114x114" href="https://idge.staticworld.net/ifw/IFW_logo_social_114x114.png" />
	<link rel="apple-touch-icon-precomposed" sizes="72x72" href="https://idge.staticworld.net/ifw/IFW_logo_social_72x72.png" />
	<link rel="apple-touch-icon-precomposed" sizes="57x57" href="https://idge.staticworld.net/ifw/IFW_logo_social_57x57.png" />
	<link rel="apple-touch-icon" href="https://idge.staticworld.net/ifw/IFW_logo_social_300x300.png" />
	
	
	
	
	



	
	
	
















	

	
	<script src="/www/js/ads/ad.js"></script>
	
	<script>var oneRegPlacementID = "";</script>
	
		
	<script>
		const articlePaidAccess = [];
	</script>
	
	
	
		
		
		
	
	
	
	
	
	
	









		
		
		
		
		  
		

	
	
	
	
	

	
	 
	
	
	
	
	
	
	
	
	
	
		
		
		
	

	<script>
	var supMontMods = false;
	</script>
	
	
	
	
		
		
		
		
	
	
	
	
	
	
	
	
	
	
	
		
		
		
			
		
	
	
	
	
	
	
	
	

	
	
	
	
	
		 
		

		<script>	
		{	
			let categorySlug = '';
			
			const stripOutIllegal = s => s.replace(/[~'"=!+#;^()<>&[]]/g,'');
			
			window.ntvConfig = window.ntvConfig || {} ;
			window.ntvConfig.keyValues = window.ntvConfig.keyValues || {};
			const segs = localStorage.getItem('_pnativo');
			if (segs) {
				window.ntvConfig.keyValues.permutive = JSON.parse(segs).join(",");
			}
			
			const metaKeywordsTag = document.querySelector("meta[name='keywords']");
			if ( metaKeywordsTag && (metaKeywordsTag.hasAttribute('content')) ) {
				const kwds = metaKeywordsTag.content.split(',').filter(kw => kw.length <= 40);
				window.ntvConfig.keyValues.contextual = stripOutIllegal(kwds.join(','));
			}
			[categorySlug].forEach(function(val) {
				if (val.length !== 0) {
					window.ntvConfig.keyValues.channel = stripOutIllegal(val);
				}
			});
			if (typeof(window.ntvConfig.keyValues.channel) === "undefined") {
				window.ntvConfig.keyValues.channel = "";
			}
		}
		</script>
	
	
	
	
		<script type="text/javascript" src="//s.ntv.io/serve/load.js" async></script>
	

	
	
	
	<script type="text/javascript">
		var prodNames = '';
		var prodManufacturers = '';
		var prodCategories = '';
		var prodVendors = '';
	</script>
	
	
	
	
	
	<script>
	var insiderSignedIn = document.cookie.indexOf("nsdr") > -1; //check if Insider cookie exists
	var idg_uuid = $.cookie('idg_uuid') || '';
	
	var dlJobFunction = '';
	var dlJobPosition = '';
	var dlIndustry = '';
	
	if (insiderSignedIn) {
		var insiderToken = IDG.insiderReg.readCookie("nsdr");
		var tokens = IDG.insiderReg.readCookieProperty(insiderToken);
		if (!(tokens['jobPosition']===undefined)) {
			//dlJobPosition = tokens['jobPosition'];
			//OC-1647 change to indicate this data was remove
			dlJobPosition = "removed";
		}
		if (!(tokens['jobFunction']===undefined)) {
			dlJobFunction = tokens['jobFunction'];
		}
		if (!(tokens['industry']===undefined)) {
			dlIndustry = tokens['industry'];
		}
	}
	
	insiderSignedIn = insiderSignedIn.toString(); //per Infotrust this needs to be a string, not a boolean
	
	var sincePublished = '';
	sincePublished = sincePublished.split(" ")[0];
	
	//get edition from countryCode
	var edition = '';
	if (typeof countryCode !== 'undefined' && countryCode !== "") {//should be defined in locales-editions.jsp if brand has editions
		edition = countryCode.toLowerCase();
	}

	var catIdList = '';
	var goldenTaxList = '';
	var primaryCatList = '';
	

	// if huid parameter from email link query string is available and no reg cookie defined, assign huid to idg_uuid
	if (getQueryVariable("huid") !== false && idg_uuid === '') {
		idg_uuid = getQueryVariable("huid");
		$.cookie('idg_uuid', idg_uuid, {path:'/', domain: ".infoworld.com", expires: 90/*,secure:true*/});
	}
	
	dataLayer.push({
		'articleId': '',
		'articleDisplayId':'',
		'articleHasVideo':'',
		'articleLocale': '',
		'articleTitle': '',
		'articleType': '',
		'audience':'enterprise',
		'author':'',
		'blogName':'',
		'brandpost': 'false',
		'categoryIdAll': (catIdList.length > 0 ? catIdList.split(',') : []),
		'categoryIdList':catIdList,
		'categoryIdPrimary': '',
		'contentStrategy': '',
		'contentType':'blogs',
		'datePublished':'',
		'dateUpdated':'',
		'daysSincePublished':"",
		'daysSinceUpdated':'',
		'de_normalized_company_name':$.cookie('de_normalized_company_name'),
		'displayType':'blog index',
		'edition':edition,
		'environment':'production',
		'ga_enabled':'true',
		'gaTrackingId':'UA-6647659-1',
		'geolocEnabled':'true',
		'goldenTaxArray': (goldenTaxList.length > 0 ? goldenTaxList.split(',') : []),
		'goldenTaxonomyIdAll': ', ',
		'goldenTaxonomyIdPrimary': '',
		'goldenTaxonomyIdList': '',
		'industry': dlIndustry,
		'insiderSignedIn':insiderSignedIn,
		'ip_normalized_company_name':$.cookie('ip_normalized_company_name'),
		'isBlog':'false',
		'isInsiderContent':'false',
		'isICN': 'false',
		'jobFunction': dlJobFunction,
		'jobPosition': dlJobPosition,
		'oneRegPlacementID':oneRegPlacementID,
		'pageNumber':'',
		'platform':'Web',
		'podcastSponsored': 'false',
		'primaryCategory': '',
		'ancestorGoldenCategories': '',
		'primaryCatArray': (primaryCatList.length > 0 ? primaryCatList.split(',') : []),
		'primaryCategoryAll': ', ',
		'primaryCategoryList': '',
		'primaryAncestorCategoryList': '',
		'prodCategories':prodCategories.slice('|', -1),
		'prodManufacturers':prodManufacturers.slice('|', -1),
		'prodNames':prodNames.slice('|', -1),
		'prodVendors':prodVendors.slice('|', -1),
		'property': 'infoworld',
		'propertyCountry':'US',
		'purchaseIntent':'',
		'skimlinksId':'111346X1569476',
		'source':'infoworld',
		'sponsorName':'',
		'suppressMonetization': supMontMods.toString(),
		'tags': '',
		'userId':idg_uuid,
		'videoAutoplay':'false',
		'youtubeId':''
	});
	</script>

	
	
	










<script>
	var dataLayer = window.dataLayer = window.dataLayer || [];
	var adBlockStatus = 'false';
	
	//look for variable set in ad.js
	if (window.canRunAds === undefined) {
		adBlockStatus = 'true';
	} else {
		adBlockStatus = 'false';
	}
	
	dataLayer.push({
		'adBlockStatus': adBlockStatus
	});
</script>





	<!-- Google Tag Manager -->
	<noscript><iframe src="//www.googletagmanager.com/ns.html?GTM-WR6LD2P"
	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
	<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=
	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
	})(window,document,'script','dataLayer','GTM-WR6LD2P');</script>
	<!-- End Google Tag Manager -->

	
	
	
		<script>
			var numberFromDataLayer = function(property) {
			  if (window.dataLayer && dataLayer[0] && typeof dataLayer[0][property] == "number") {
			    return dataLayer[0][property];
			  }
			  return null;
			};
			
			var stringFromDataLayer = function(property) {
			  if (window.dataLayer && dataLayer[0] && typeof dataLayer[0][property] == "string") {
			    return dataLayer[0][property];
			  }
			  return "";
			};
		</script>
	

	

	
		










<script>
// IDGMPM-16419 - updated in IDGMPM-16933
	!function(n,e,o,r,i){if(!e){e=e||{},window.permutive=e,e.q=[],e.config=i||{},e.config.projectId=o,e.config.apiKey=r,e.config.environment=e.config.environment||"production";for(var t=["addon","identify","track","trigger","query","segment","segments","ready","on","once","user","consent"],c=0;c<t.length;c++){var f=t[c];e[f]=function(n){return function(){var o=Array.prototype.slice.call(arguments,0);e.q.push({functionName:n,arguments:o})}}(f)}}}(document,window.permutive,"f5b3be27-f789-4ef1-8867-37c67da5b361","84c7e805-5ce9-41f4-b988-3529488bab1c",{});
	  permutive.addon('web', {
	    page: {
	      type: stringFromDataLayer('displayType'),
	      language: 'en',
	      tags: stringFromDataLayer('tags').split(","),
	      audience: stringFromDataLayer('audience'),
	      description: 'Tune in now, catch up on past episodes, or subscribe to get the latest podcast content. Hear from IT leaders and tech experts on the topics that matter to you.',
	      
 		  
	      ads: {
	        adblocker: (adBlockStatus == "true"), //detected further up the page
	        enabled: true
	      }	     
	    }
	  });

	  dlJobPosition = dlJobPosition || null;
	  dlIndustry = dlIndustry || null;

	  if (dlJobPosition !== '' || dlIndustry !== '' || stringFromDataLayer('userId') !== '') {
		  window.permutive.track('User', {
			  companySize: null,
			  country: null,
			  id: (stringFromDataLayer('userId') !== "" ? stringFromDataLayer('userId') : null),
			  jobIndustry: (dlIndustry !== "" ? dlIndustry : null),
			  jobPosition: (dlJobPosition !== "" ? dlJobPosition : null),
			  loggedIn: (stringFromDataLayer('insiderSignedIn') == 'true')
		  });
	  }
	
	  //product js vars defined in document-head	  
	  if (prodNames !== '' || prodManufacturers !== '' || prodCategories !== '' || prodVendors !== '') {
		  window.permutive.track('Product', {
			  names: stringFromDataLayer('prodNames').split("|"),
			  categories: stringFromDataLayer('prodCategories').split("|"),
			  manufacturers: stringFromDataLayer('prodManufacturers').split("|"),
			  vendors: stringFromDataLayer('prodVendors').split("|")
		});

	  }
	  
	  // IDGMPM-19999
	  if (stringFromDataLayer('userId') !== '') {
		window.permutive.identify([
			{
				id: stringFromDataLayer('userId'),
				tag: "arena_id",
				priority: 0
			}
		]);
	  }
		 

</script>

<script>
	$.ajax({
		url: "https://cdn.permutive.com/f5b3be27-f789-4ef1-8867-37c67da5b361-web.js",
	  	dataType: "script",
	  	cache: true, // default is false
	  	async: true // default is true
	});
</script>
	
	
	
	
	
	
	
	

	

	
	
		
		
			
			
				











<style>
@media only screen and (max-width: 929px) {
	.brVideoContainer {
    	width: 100%;
  		height: auto;
  		display: inline-block;
        position: relative;
  		border: none;
  		overflow: hidden;
  		z-index: 10000;
	}
  	#bottomRightPlayer {
      	margin-bottom: 10px;
    }
    .margin-col .brVideoContainer,
  	.main-col .brVideoContainer {
      	margin-top: 20px;
  	}
}
@media only screen and (min-width: 930px) {
	.brVideoContainer {
  		bottom: 5px;
  		right: 5px;
  		width: 401px;
  		height: 225px;
      	position: fixed;
        border: none;
      	overflow: hidden;
  		z-index: 1400000;
	}
}

.brVideoContainer .outer-wrapper {
	margin: 0 auto;
    max-width: 600px;
  	top: 0px;
  	left: 0px;
  	width: 100%;
  	height: 100%;
  	border: none;
  	overflow: hidden;
  	position: relative;
}

#jw-standalone-close-button {
  position: absolute;
  top: 5%;
  right: 3%;
  display: inline;
  z-index: 999999;
  height: 20px;
  width: 20px;
}
</style>



<script src="https://cdn.jwplayer.com/libraries/8yHZorDV.js"></script>





<script>
let brandAbbreviation = "";

	
	
	
		brandAbbreviation = "ifw";
	
	


let isDEBUG = false;


let amznAps = false;


var videoPlayerBidding = false;





var beforeEndDate = false;




if ( edition === "us" || (edition === "in" && beforeEndDate === true) || ( edition === "uk" && (brandAbbreviation === "ctw" || brandAbbreviation === "nww" || brandAbbreviation === "ifw") ) ) {
	googletag.cmd.push(function() {

		  var customParams = {
		    "dlm": googletag.pubads().getTargeting('dlm'),
		    "fr": googletag.pubads().getTargeting('fr'),
		    "grm": googletag.pubads().getTargeting('grm'),
		    "vw":googletag.pubads().getTargeting('vw'),
		    "URL": IDG.GPT.targets["URL"],
		    "articleId": IDG.GPT.targets["articleId"],
		    "blogId": IDG.GPT.targets["blogId"],
		    "categoryIds": IDG.GPT.targets["categoryIds"],
		    "categorySlugs": IDG.GPT.targets["categorySlugs"],
		    "channel": IDG.GPT.targets["channel"],
		    "env": IDG.GPT.targets["env"],
		    "goldenIds": IDG.GPT.targets["goldenIds"],
		    "pagetype": adLayer["itemType"],
		    "permutive": googletag.pubads().getTargeting('permutive'),
		    "playertype": "bottomRightPlayer",
		    "pos": "bottom_right",
		    "positiondata": buildPositionData("bottom_right"),
		    "sponsored": IDG.GPT.targets["sponsored"],
		    "tagNames": IDG.GPT.targets["tagNames"],
		    "zone": IDG.GPT.targets["zone"],
		    "devsite": IDG.GPT.targets["devsite"]
		  };
		  
		  var midrollCustParams = customParams; // not adding amazon bidding parameters to midroll
		  
		  var prerollCustomParams = Object.keys(customParams).map((key) => {
			    return encodeURIComponent(key) + '=' + encodeURIComponent(customParams[key])
			}).join('&');
		  
		  var custAdTag = "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu="+IDG.GPT.unitName+"&ciu_szs=300x250,728x90&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&description_url=http%3A%2F%2Fwww.infoworld.com&url=[referrer_url]&correlator=[timestamp]";
		  
		  var bidParams = {};
		  
		  if (videoPlayerBidding === true) {
		  	  bidParams = {
    	      "settings": {
	    	        "consentManagement": {
	    	          "gdpr": {
	    	            "cmpApi": "iab",
	    	            "defaultGdprScope": false,
	    	            "timeout": 1000,
	    	            "rules": [
	    	              {
	    	                "enforcePurpose": true,
	    	                "enforceVendor": true,
	    	                "purpose": "storage"
	    	              },
	    	              {
	    	                "enforcePurpose": true,
	    	                "enforceVendor": true,
	    	                "purpose": "basicAds",
	    	                "vendorExceptions": [
	    	                  "MediaGrid"
	    	                ]
	    	              },
	    	              {
	    	                "enforcePurpose": true,
	    	                "enforceVendor": true,
	    	                "purpose": "measurement"
	    	              }
	    	            ]
	    	          },
	    	          "usp": {
	    	        	  "timeout": 100
	    	          }
	    	        },
	    	        "mediationLayerAdServer": "dfp",
	    	        "floorPriceCents": 1000,
	    	        "buckets": [
	    	          {
	    	            "min": 0.5,
	    	            "max": 50,
	    	            "increment": 0.5
	    	          }
	    	        ]
	    	      },
	    	      "bidOnBreaks": 3,
	    	      "bidders": [
	    	        {
	    	          "name": "MediaGrid",
	    	          "id": 101101,
	    	          "pubid": "cpVDGgDj"
	    	        }
	    	      ]
	    	    };
		  }
		  
		  let bidPromise = new Promise(function (resolve, reject) {
			if (amazonAPSEnabled === true) {
				
				// define a function to handle the video bid then request the video tag URL
				// NOTE: This function assumes there will only be one video bid and that no other parameters will need to
				// be added into the `scp` parameter. If either of these assumptions is not true for your integration, you
				// will need to modify the function to accommodate	  
				function handleVideoBids(bids, prerollCustomParams) {
					if (isDEBUG) { console.log('=======JW amazon handleVideoBids() START: bids:',bids, 'prerollCustomParams:',prerollCustomParams); }
				    var params = "";
				    bids.forEach(function(bid){
				        if (bids.length > 0) {
				            params += bid.helpers.encodedQsParams(); // Attach APS Video key-values to your VAST request to the ad server. Key-values can be accessed encoded or unencoded (bid.helpers.qsParams)
				        }
				    });
				    if (params.length) {
				    	prerollCustomParams = prerollCustomParams + decodeURIComponent(params);
				    }
				    if (isDEBUG) { console.log('=======JW amazon handleVideoBids() EXIT prerollCustomParams (should have bid at end):',prerollCustomParams,' and bid params: ',params);}
				    
				    return prerollCustomParams;
				}
				  
				// request the bids for the four googletag slots
				  apstag.fetchBids({
				    slots: [{
				      slotID: 'videoSlot', // NOTE: doesn't need to be the div ID
				      mediaType: 'video' 
				    }]
				  }, function(bids) {
					  	prerollCustomParams = handleVideoBids(bids, prerollCustomParams);
				    	resolve(prerollCustomParams);
				    	if (isDEBUG) { console.log("=======JW amazon: prerollCustomParams: " + prerollCustomParams); }
				  	});
				
			// end if amazonAPSEnabled	
			} else {
				resolve(customParams);
			}
				
		  }); // end bidPromise object
		  
		  bidPromise.then(function(result) {
			  if (isDEBUG) { console.log("======JW - Result of bidPromise: ", result); }
			  
			  if (amazonAPSEnabled === true) {
			    var getURLParameters = function(queryParams) {
				    var theResult = {};
			        var sURLVariables = queryParams.split('&');
			        
			        for (var i = 0; i < sURLVariables.length; i++) {       
			            var sParameterName = sURLVariables[i].split('=');      
			            theResult[sParameterName[0]] = sParameterName[1];
			        }
			        return theResult;
				};
				
				var queryParams = result;
				var finalCustomParams = getURLParameters(queryParams);
				if (isDEBUG) { console.log("========finalCustomParams: ", finalCustomParams); }
				
				customParams = finalCustomParams;
			  } else {
				  customParams = result;
			  }
			  
			  var customAdRoll = [
		  		   {
		              "tag": custAdTag,
		              "offset":"pre",
		              "custParams": customParams
		           },
		  	  ];	 

		  if (edition === 'us') {
		  	 if (true==true) {
			    
			    
				   
				   
					  for (var i=15;i<=150;i+=15){
				    	 customAdRoll.push({
				        	"tag": custAdTag,
				             "offset":i,
				             "custParams": midrollCustParams
				         });
					  }
				  
				
			  }
		  }
		  
		  
		  if (edition === "in" && beforeEndDate === true) {
			  if (true==true) {
				  customAdRoll.push({
			         "tag": custAdTag,
			         "offset": 30,
			         "custParams": midrollCustParams
			      });
			  }
		  }
		   
		   $(function() {
		   		var videoPlayerMarkup='<div class="brVideoContainer"><div class="outer-wrapper"><img onclick="jwplayer(\'bottomRightPlayer\').remove(); this.style.display = \'none\';" id="jw-standalone-close-button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA3XAAAN1wFCKJt4AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAABOklEQVQ4Ea2V3U7DMAxGV8QN3OyBB+oDdK/L75DKOV0cmdC0EizSp7iJfWwvbXaY5/mIJnUoA/s+7N6cfSKe+XgoD1/ML+gpANhdaN4zBr2iC5ruCuCT+RGdWHx2bRgGk/yCuuaePsX3hPmALq4tww1kFscbWqBuYldoYxujr8O5dpeh2eEHlIAMbmHVt62g77ikvbZZKmLqdLOTfSwsk49o96eJltuWItDTt3Kl7XCvtoldYyP5GnTEMQDv2MrhWq56HRZknKsDtlV9oBjam5XFexi8285kz9WNPP+95QaWXx+h7aF0X/61w8gwA/MBjDzH6a9DcchttrB6APHj4t/1yazlQ2fh/5+emQF5BXVhqbqtbq6XAyAv1zjN3S8A3wyNu5DlhTFZ3Rl59+3CNio1VsZZ4E3/Ar4BuSbVUBIuWisAAAAASUVORK5CYII=" /><div id="bottomRightPlayer"></div></div></div>';
			  	$('body').prepend(videoPlayerMarkup);
			  
			  
				  try {
		    	      window.idgus.cmp.gpt.then(function (consentOk) {
			    		//console.log("*****GDPR: floating video: is there consent? = " + consentOk);
				    	if (!consentOk) {
			  				jwplayer("bottomRightPlayer").setup({ 
							      "playlist": "https://cdn.jwplayer.com/v2/playlists/wj1ht0vS?search=__CONTEXTUAL__",
							      "autostart": true,
							      "mute": true,
							      "setTimeEvents": true,
							      "advertising": {}
							   });
				  		} else {
				  			//console.log("GDPR: floating video player - consented");
				  			jwplayer("bottomRightPlayer").setup({ 
						      "playlist": "https://cdn.jwplayer.com/v2/playlists/wj1ht0vS?search=__CONTEXTUAL__",
						      "autostart": true,
						      "mute": true,
						      "setTimeEvents": true,
						      "advertising": {
						    	  "client": "googima",
							      "loadVideoTimeout": 15000,
							      "creativeTimeout": 15000,
							      "requestTimeout": 15000,
							      "adscheduleid": "LxK3nuOJ",
						    	  "schedule": customAdRoll,
						    	 "bids": bidParams
						      }
						   }); // end setup
				  		} // end else
				  		
				  	}); // end consentok
				}
		    	catch (e) {
		    		console.log(e);
		    	}
			

			    // article
			   	if ($("#drr-container").length > 0) {
			   		// if there is a 4th paragraph, place video player after 4th paragraph else, after 1st paragraph
			   		if ($("article .bodee #drr-container p:nth-of-type(4)").length === 1) {
			  			$("article .bodee #drr-container p:nth-of-type(4)").after($(".brVideoContainer"));
			   		} else {
			   			$("article .bodee #drr-container p:nth-of-type(1)").after($(".brVideoContainer"));
			   		}
			   	}
			    // index pages - enterprise
			    if ($(".main-col").length > 0) {
			        $(".main-col > div:nth-of-type(6)").after($(".brVideoContainer"));
			    }
			    // index pages - consumer
			    if ($(".landing-listing").length > 0) {
			        $(".landing-listing > div:nth-of-type(6)").after($(".brVideoContainer"));
			        $("#tso").css("z-index","auto");
			    }
			    // search results
			    if ($("body#search .search-results").length > 0) {
			        $(".search-results > div.river-well:nth-of-type(6)").after($(".brVideoContainer"));
			    }
			    // custom search results
			    if ($(".gsc-result").length > 0) {
			        $(".gsc-expansionArea > div.gsc-result:nth-of-type(6)").after($(".brVideoContainer"));
			    }
		   }); // end function()
		   
		   $("#jw-standalone-close-button").click(function() {
				$(".brVideoContainer").remove();
			});
		   
		}); // end bidPromise
		   
	});
}	
</script>
			
		
		
	
	
	
	
</head>



	<body id="" class="podcast infoworld">
		
			
			
					
					
						
						
					






















	

		
			
			
				<!-- Begin welcome ad overlay - gpt-overlay position  -->
				
					<div id="superadunit" class="hidden">
						<div class="ad">
							<div class="ad-header">
								<div class="brand-logo"></div>
								<a href="javascript:unhide('superadunit');" id="superstitial-text">Close Ad</a>
							</div>
							<div id="gpt-overlay" class=" ad-container">
								<script type="text/javascript">
									
										IDG.GPT.addDisplayedAd("gpt-overlay", "true");
										IDG.GPT.displayGoogleTagSlot('gpt-overlay');
									
								</script>
							</div>
						</div>
					</div>
				
				
				<!--  End welcome ad overlay - gpt-overlay position -->
				
			
			
			
			
			
			
		
	
 	
 
 
				
			
		
		













	
		<link rel="stylesheet" href="/www/css/oc-header.css?v=20240612122409" />
		<link rel="stylesheet" href="/www.idge.ifw/css/oc-header.css?v=20240612122409" />
		











<header id="banner">
	
		<div class="ad">
			
				
			






















	

		
			
			
			
			
			
			
				<div id="oc_ad_1" class=" ad-container test">					
				</div>				
				<script type="text/javascript">
				
					IDG.GPT.addDisplayedAd("oc_ad_1", "true");
					$('#oc_ad_1').responsiveAd({screenSize:'971 1115', scriptTags: []});
                    IDG.GPT.log("Creating ad: oc_ad_1 - [971 1115]");
                    
				
				</script>
			
		
	
 	
 
  
		</div>
	
	
	
</header>
<script>
$(document).ready(function() {
	var params = {
			def : "blox4.dynamic",
			geo : getLocale(),
			definition : "nav.fixed",
			placement : "Nav Fixed"
			}
		$.get(
			"/napi/tile",
			params,
			function(data, status, xhr) {
				$('#custom_header').html(data);
			},
			"html");
});
	
//This is for sites without editions but using the new header and mega menu.
var hasEditions = "";
if ("true" !== "" && "true" !== null) {
	hasEditions = true;
}
</script>






<section id="oc-head" class="">
		<div class="oc-head-inner">
			<div class="oc-head-left">
				<a href="/" class="masthead"><span class="logo">infoworld</span></a>
				
				
					
					
					
					
					<div class="edition-picker">
						<div class="current-edition" data-edition-name="current"><a href="#/" style="color:#ffffff;text-decoration:none;"><span id="current-edition">UNITED STATES</span></a> <i class="fas fa-caret-down"></i></div>
						<ul id="edition-picker-nav">

							
							   
							   
							   
							   
								   
									   <li class="edition-picker-item locale-">
									   		<a data-edition-name="US" data-edition-localeid="0" href="/">United States </a>
									   </li>
								   
								   
								
							
							   
							   
							   
							   
								   
								   
									   <li class="edition-picker-item locale-uk">
									   		<a data-edition-name="uk" data-edition-localeid="2" href="/uk/">United Kingdom </a>
									   </li>
								   
								
							
							

						</ul>
					</div>
						
				
				
			</div>
			
			<div id="custom_header">
			</div>
			
			<div class="oc-head-right">
				
				
				
					<a href="#search" class="search-btn" aria-label="Open site search" role="button"><i class="fas fa-search"></i></a>
					<div class="search-expand">
						<a href="" aria-label="Close Menu" class="mega-close ss-delete"></a>
						
					    
					   		  
						    		










<div class="gcse-searchbox" >
    <script>
		(function() {
			var cx = '011881588825642368632:wfa05lybzqg';
			var gcse = document.createElement('script');
			gcse.type = 'text/javascript';
			gcse.async = true;
			gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
			var s = document.getElementsByTagName('script')[0];
			s.parentNode.insertBefore(gcse, s);
		})();
	</script>
	<gcse:searchbox-only resultsUrl="/search"></gcse:searchbox-only>
	<script>
		$(window).load(function(){
			const hdrSearchBox = document.querySelector(".gcse-searchbox input.gsc-input");
			hdrSearchBox.setAttribute("placeholder", "Start Searching");
		});
	</script>
</div>
							
							
						
						
					</div>
				
				
					<a href="" aria-label="Open Menu" class="mega-btn"></a>
					
				
			</div>
		</div>
</section>













<script>
$(document).ready(function() {	
	var paramsmegamenu1 = {
			def : "blox4.dynamic",
			geo : getLocale(),
			placement : "Nav Mega Column 1"
			}
		$.get(
			"/napi/tile",
			paramsmegamenu1,
			function(data, status, xhr) {
				$('#megacolumn1').html(data);
				if (hasEditions === true) {
					addSlugCode();
				}
			},
			"html");
	var paramsmegamenu2 = {
			def : "blox4.dynamic",
			geo : getLocale(),
			placement : "Nav Mega Column 2"
			}
		$.get(
			"/napi/tile",
			paramsmegamenu2,
			function(data, status, xhr) {
				$('#megacolumn2').html(data);
				if (hasEditions === true) {
					addSlugCode();
				}
			},
			"html");
	var paramsmegamenu3 = {
			def : "blox4.dynamic",
			geo : getLocale(),
			placement : "Nav Mega Column 3"
			}
		$.get(
			"/napi/tile",
			paramsmegamenu3,
			function(data, status, xhr) {
				$('#megacolumn3').html(data);
				if ( hasEditions === true) {
					addSlugCode();
				}
			},
			"html");
	var paramsmegamenu4 = {
			def : "blox4.dynamic",
			geo : getLocale(),
			placement : "Nav Mega Column 4"
			}
		$.get(
			"/napi/tile",
			paramsmegamenu4,
			function(data, status, xhr) {
				$('#megacolumn4').html(data);
				if (hasEditions === true) {
					addSlugCode();
				}
			},
			"html");
});
	
</script>
<nav class="megamenu">
		<div class="megamenu-inner">
			<div class="mega-mobile-nav">
				<a href="#search" class="search-btn" aria-label="Open site search" role="button"><i class="fas fa-search"></i></a>
				
				
			</div>
			<a href="" class="mega-close ss-delete" aria-label="Close" role="button"></a>
		
			<div class="mega-logo-content">
			<img class="mega-logo" alt="InfoWorld Logo" src="https://alt.idgesg.net/images/furniture/infoworld/infoworld-white-logo.svg" />
			
			<div class="mega-4col">
				<div class="mega-col">
					
					
						<div id="megacolumn1">
						</div>
				</div>
				<div class="mega-col">
						 <div id="megacolumn2">
						</div>
				</div>

									
				
					<div class="mega-col">
													
						<div id="megacolumn3">
						</div>						
					</div>					
									
				
				<div class="mega-col">
					<div class="mega-grp idg-network">
						<div class="mega-hed ss-directright right">More from the Foundry Network</div>
						
							<div id="megacolumn4">
						    </div>
					</div>
				</div>
			</div>
			</div>
			
			<div class="mega-footer">
				    	<ul class="mega-about">
				    		
		            		
							
							
							
								<li><a href="/about/about.html"  >About Us</a> <span class="bar">|</span>
							
								<li><a href="/about/contactus.html"  >Contact</a> <span class="bar">|</span>
							
								<li><a href="/about/contactus.html#reprints"  >Republication Permissions</a> <span class="bar">|</span>
							
								<li><a href="/about/privacy.html"  >Privacy Policy</a> <span class="bar">|</span>
							
								<li><a href="/about/cookie-policy.html"  >Cookie Policy</a> <span class="bar">|</span>
							
								<li><a href="https://foundryco.com/copyright-notice/" target="_blank" >Copyright Notice</a> <span class="bar">|</span>
							
								<li><a href="https://foundryco.com/terms-of-service-agreement/" target="_blank" >Terms of Service</a> <span class="bar">|</span>
							
								<li><a href="/about/member-preferences.html#cookie"  >European Privacy Settings</a> <span class="bar">|</span>
							
								<li><a href="/about/member-preferences.html"  >Member Preferences</a> <span class="bar">|</span>
							
								<li><a href="https://foundryco.com/our-brands/infoworld/" target="_blank" >Advertising</a> <span class="bar">|</span>
							
								<li><a href="https://foundryco.com/work-here/" target="_blank" >Foundry Careers</a> <span class="bar">|</span>
							
								<li><a href="/about/adchoices.html"  >Ad Choices</a> <span class="bar">|</span>
							
								<li><a href="/about/affiliates.html"  >E-commerce Links</a> <span class="bar">|</span>
							
								<li><a href="/about/ccpa.html"  >California: Do Not Sell My Personal Info</a> <span class="bar">|</span>
							
						
		            	</ul>
		            	<ul class="mega-social">
		            		<li>Follow Us</li>
						
							<li class="lkndn"><a class="social-media-li" href="https://www.linkedin.com/company/164364" rel="nofollow" target="_blank" aria-label="Follow on LinkedIn" role="button"><i class="ss-icon ss-social-circle brand ss-linkedin"></i></a></li>
						
						
							<li><a class="social-media-tw" href="https://twitter.com/infoworld" rel="nofollow" target="_blank" aria-label="Follow on Twitter" role="button"><i class="ss-icon ss-social-circle ss-twitter"></i></a></li>
						
						
							<li><a class="social-media-fb" href="https://www.facebook.com/InfoWorld" rel="nofollow" target="_blank" aria-label="Follow on Facebook" role="button"><i class="ss-icon ss-social-circle brand ss-facebook"></i></a></li>				
						
							
	            		</ul>
		            
			            <script>
			            	if (facebookUrl !== null && facebookUrl !== "") {
				            	document.querySelector(".social-media-fb").setAttribute("href", facebookUrl);
			            	}
			            	if (twitterUrl !== null && twitterUrl !== "") {
				            	document.querySelector(".social-media-tw").setAttribute("href", twitterUrl);
			            	}
			            	if (typeof linkedInUrl !== "undefined" && linkedInUrl !== null && linkedInUrl !== "") {
				            	document.querySelector(".social-media-li").setAttribute("href", linkedInUrl);
			            	}
			            </script>
					

		</div>
	</div>
	<div class="mega-submenu">
			<a href="" class="mega-mobile-nav ss-left" aria-label="Mobile nav" role="button"></a>
			<a href="" class="mega-close ss-delete" aria-label="Mobile nav close" role="button"></a>
			<div class="submenu-contents"></div>
	</div>
</nav>



	<style>
		#insider-popup.modal-box {
			display: none;
			position: absolute;
			z-index: 6100000;
			width: 100%;
			background: transparent;
			border-bottom: 0 none;
			border-radius: 0px;
			box-shadow: none;
			border: 0 none;
			top: 0;
			bottom: 0;
			left: 0;
			right: 0;
			margin: 0 auto;
		}
		@media only screen and ( min-width: 48em ) {
			#insider-popup.modal-box {
				width: 770px;
			}
		}
		@media only screen and ( min-width: 60.625em ) {
			#insider-popup.modal-box {
				width: 850px;
			}
		}
	</style>



	<div id="insider-popup" class="modal-box ">
	
		<div class="insider-modal-wrapper">
	  
			<div class="modal-header-title">
				<div class="modal-banner-insider"><span class="insider"></span></div>
		    	<div class="modal-close close">×</div>
		  	</div>
		  	
		  	<div class="modal-body">
		  		
		  			
						<script>
$(document).ready(function(){
	$('a[data-link]').click(function() {
		
		  //get this link's dataLink value
		  var dataLink = $(this).attr('data-link');

		  //select the div with the same value
		  var toKeep = 'div[data-link="'+dataLink+'"]';
	
		  //select data-link divs that are not the above div
		  $('div[data-link]').not(toKeep).hide();
		  
		  if($(this).hasClass('link-transition')){
			  $(toKeep).fadeIn(800);
		  } else {
			  $(toKeep).show();
		  }
	
		  //prevent location change
		  return false;
	});
	

});
</script>

					
					
				
		  	</div>
		  	
		  	<div class="modal-footer">
		    	<div class="modal-close close-btn">Close</div>
		  	</div>
		</div>
	  	
	</div>

	<script>
		$(document).ready(function(){

			var appendthis =  ("<div class='modal-overlay modal-close'></div>");
			if($thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet)){
				$('.modal-box').css({
					//top: ($(window).height() - $(".modal-box").outerHeight()) / 2,
					top: 10,
					left: 0
				});
			}
			
			
			if(!$thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet)){
				$('.modal-box').height($(document).height());
				$('.modal-box').css('top','0');
			}
			
			var userAg = navigator.userAgent;

			$('a[data-modal-id]').click(function(e) {
				e.preventDefault();
				$('body').append(appendthis);
				$('.modal-overlay').fadeTo(500, 0.9);
				$('.modal-overlay').height($(document).height());
				var modalBox = $(this).attr('data-modal-id');
				
				if ($(".modal-box").hasClass('triggered') || (userAg.indexOf("Firefox")!=-1)) {
					$('#'+modalBox).fadeIn($(this).data()); // triggered by something other than onclick of link such as scroll to point in window
				} else {
					// IDGMPM-16177
					//if(!$thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet)){
						$('#'+modalBox).toggle('slide', {direction: 'up'}, 800);
					//} else {
				   // 	$('#'+modalBox).toggle('slide', {direction: 'left'}, 600);
					//}
				}

				if(!$thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet)){
					$("html, body").animate({
			            scrollTop: 0
			        }, 700);
			        
			        
			        $('a.btn.continue-on').click(function() {
			        	$('html, body').animate({
			        		scrollTop: 0
			        	}, 500);
			        });
			        
			        return false;
			        
				}
				if (navigator.userAgent.match(/(iPad)/)) {
					$("html, body").animate({
			            scrollTop: 0
			        }, 500);
				}
			});
		  
		  
			$(".modal-close, .modal-overlay").click(function() {
				$('.select2-drop').css('display','none');
				$(".modal-overlay").fadeOut(500, function() {
					$(".modal-overlay").remove();
				});
				if ($(".modal-box").hasClass('triggered') || (userAg.indexOf("Firefox")!=-1)) {
					$(".modal-box").fadeOut(500);
				} else {
					// IDGMPM-16177
					//if(!$thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet)){
						$('.modal-box').toggle('slide', {direction: 'up'}, 800);
					//} else {
					//	$('.modal-box').toggle('slide', {direction: 'left'}, 600);
					//}
				}
				// remove the stylesheet added in header.jsp
				setTimeout(function(){
					$("link.oc-modal").remove();
					$("script.oc-modal").remove();
				}, 1000);
			});
		
		});
	</script>


<script>
var relatedTop;
</script>


	
		<script>
		$(document).ready(function() {
			$('.edition-picker').css("display",'inline-block');
		});
		</script>
	
	



<script>
var coreEdition = '';
var coreEditionAbbr = 'US';
var coreEditionDescription = 'United States';
//debugger;
$(document).ready(function() {
	//$('.edition-picker').css("display",'inline-block');
	//reader selects edition from picker
	$("li.edition-picker-item a").on('click', function() {
		//debugger;
		//console.log("====edition-picker onclick - localeId from slug = " +  getIdFromSlug[$(this).attr("data-edition-name")]);
		var localeSlug = $(this).attr("data-edition-name");
		var selectedLocaleId = $(this).attr("data-edition-localeid");
		var dataLayer = window.dataLayer = window.dataLayer || [];
		dataLayer.push({
			'event': 'editionChange',
			'eventCategory':'Edition Change',
			'eventAction':localeSlug,
			'eventLabel':''
		});
		setSelectedLocale(selectedLocaleId); // save selection in cookie
		
	});
	var getDescFromId = getApolloLocaleDescMap();
	var localeDesc = "";
	//debugger;
	// if selectedLocale cookie exists, get locale
	if (typeof  getSelectedLocale() !== 'undefined' && getSelectedLocale() === getLocale()) { // get locale from cookie if available otherwise, use another locale source (from geolocation, url slug, etc.)
	 	countryCode = getSlugFromId[getSelectedLocale()];
	 	localeDesc = getDescFromId[getSelectedLocale()];
	} else {
		countryCode = getSlugFromId[getLocale()];
		localeDesc = getDescFromId[getLocale()];
	}
	// if countryCode is empty string at this point, it means getLocale() has localeId as 0 which is global locale.
	if (!countryCode) {
		countryCode = coreEditionAbbr; // country code for default global depends on brand (US for cio.com)
		localeDesc = coreEditionDescription;
	}

	// set current edition in header
	$("#current-edition").html(localeDesc.toUpperCase());
});
</script>

<script>
	var ocHeadTop, menuWidth;//needs to be in global scope because it's used in multiple closures
	$(document).ready(function() {
		// this is how Modernizr detects touch
		var hasTouch = 'ontouchstart' in window;
		
		
		
		if (document.cookie.indexOf("nsdr") > -1 || window.location.href.indexOf("nsdr=true") > -1 ) {
			$(".insider-controls").addClass("signed-in");
			$(".insider-controls .far.fa-user").removeClass("far").addClass("fas");
		}
		$(".insider-controls-hover").mouseenter(function() {
			$('#insider-welcome').slideDown();
		});
		$(".insider-controls").mouseleave(function() {
			$('#insider-welcome').slideUp();
		});
							if ($thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet) && $thm.deviceHeight() < 768 ) {
									if($('html').hasClass('touch')) {
										$('#insider-popup.modal-box .modal-body').addClass('short');
									} else {
										$('#insider-popup.modal-box .modal-body').addClass('short-desk');
									}
							}
							
								ocHeadTop = $("#oc-head").offset().top;
								var scrollTop;
								$(window).scroll(function() {
									scrollTop = $(window).scrollTop();
									//console.log("scrollTop="+scrollTop);
									//console.log("ocHeadTop="+ocHeadTop);
									if (scrollTop > ocHeadTop) {
										$("#oc-head").addClass("stick");
										$("#skinAdTarget").addClass("stick");
										$("body#homepage #page-wrapper").addClass("stick-pad");
									}
									else {
										$('#oc-head').removeClass('stick');
										$("#skinAdTarget").removeClass("stick");
										$("body#homepage #page-wrapper").removeClass("stick-pad");
									}
								});
							
							
							
						if ($thm.deviceWidthAtLeast($thm.deviceBreakpoints.tablet)) {
							$("#oc-head .search-btn").click(function(e) {
								e.preventDefault();
								$(".search-expand").slideToggle();
							});
							$(document).click(function(evt) {
								if (!$(event.target).closest(".search-expand").length && !$(event.target).closest("#oc-head .search-btn").length) {
									if($('.search-expand').is(":visible")) {
										$(".search-expand").slideUp();
									}
								}
							});
							
						}//end tablet/desktop logic
						
						$(".mega-btn").click(function(e) {
							e.preventDefault();
							$("body,html,.homepage-hero").addClass("no-scroll");
							$(".megamenu").addClass("open");
							if ($thm.deviceWidthLessThan($thm.deviceBreakpoints.tablet)){
								menuWidth = $(".megamenu-inner").width();
								$(".mega-submenu").css({left:menuWidth+"px",position:"fixed"});
								//Allow to scroll when on mobile and when Insider form has been loaded.
								$("body,html,.homepage-hero").removeClass("no-scroll");
							}
						});
						$(".mega-close").click(function(e) {
							e.preventDefault();
							$("body,html,.homepage-hero").removeClass("no-scroll");
							$(".megamenu").removeClass("open");
							$(".megamenu-inner").css({left:"0"});
							$(".mega-submenu").css({position:"absolute"});
							$(".submenu-contents").empty();
							$(".search-expand").slideUp();
							
						});
						if ($thm.deviceWidthLessThan($thm.deviceBreakpoints.tablet)){
							$(document).on("click",".mega-hed.fa-caret-down",function(e) {
								e.preventDefault();
								var $list = $(this).siblings("ul");
								
								$(".mega-col ul.open").not($list).removeClass("open").slideUp();
								if ($list.hasClass("open")) {
									$list.removeClass("open").slideUp();
								}
								else {
									$list.addClass("open").slideDown();
								}
							});
							
							$(".megamenu-inner .idg-network .mega-hed").click(function(e) {
								e.preventDefault();
								var contentCopy = $(".idg-network").clone();
								$(".submenu-contents").append(contentCopy);
								$(".mega-submenu .idg-network .mega-hed").removeClass("ss-directright");
								menuWidth = $(".megamenu-inner").width();
								animateSlideLeft(menuWidth);
								
							});
							$(".megamenu-inner .latest-insider").click(function(e) {
								e.preventDefault();
								var contentCopy = $(".latest-insider").clone();
								$(".submenu-contents").append(contentCopy)
								$(".mega-submenu .latest-insider .mega-hed").removeClass("ss-directright");
								menuWidth = $(".megamenu-inner").width();
								animateSlideLeft(menuWidth);
							});
							$(".mega-submenu .ss-left").click(function(e) {
								e.preventDefault();
								menuWidth = $(".mega-submenu").width();
								animateSlideRight(menuWidth);								
							});
							$(".megamenu-inner .search-btn").click(function(e) {
								e.preventDefault();
								$(".submenu-contents").append($("#oc-head .search-expand"));
								$(".mega-submenu .search-expand").show();
								menuWidth = $(".megamenu-inner").width();
								animateSlideLeft(menuWidth);
							});
							$(".mega-insider-icons").click(function(e) {
								if (document.cookie.indexOf("nsdr") > -1 || window.location.href.indexOf("nsdr=true") > -1) {
										e.preventDefault();
										var contentCopy = $("#insider-selector .stories").clone();
										$(".submenu-contents").append(contentCopy).addClass("insider-controls signed-in");
										menuWidth = $(".megamenu-inner").width();
										animateSlideLeft(menuWidth);
								}				
							});
						}//end mobile-only
		// if browser does not support touch, ok to use mouse hover
		

			if (hasTouch === false) {
				$(".current-edition").mouseenter(function() {
					if ($('.edition-picker i').hasClass('fa-caret-down')) {
						$('.edition-picker i').removeClass('fa-caret-down');
						$('.edition-picker i').addClass('fa-caret-up');
					}
					$('#edition-picker-nav').slideDown(200);
				});
				$(".edition-picker").mouseleave(function() {
					if ($('.edition-picker i').hasClass('fa-caret-up')) {
						$('.edition-picker i').removeClass('fa-caret-up');
						$('.edition-picker i').addClass('fa-caret-down');
					}
					$('#edition-picker-nav').slideUp(200);
				});
			}
		// if browser supports touch or not
		$(".current-edition").click(function(e) {
			if ($('.edition-picker i').hasClass('fa-caret-down')) {
				$('.edition-picker i').removeClass('fa-caret-down');
				$('.edition-picker i').addClass('fa-caret-up');
			} else {
				$('.edition-picker i').removeClass('fa-caret-up');
				$('.edition-picker i').addClass('fa-caret-down');
				
			}
			$('#edition-picker-nav').slideToggle(200);
		});
		
						
	});//end document ready
	
						function animateSlideLeft(val) {
							$(".megamenu-inner, .mega-submenu").animate({
								left: "-="+val+"px"
							}, 500);
						};
						function animateSlideRight(val) {
							$(".megamenu-inner, .mega-submenu").animate({
								left: "+="+val+"px"
							}, 500, function() {
								if ($(".mega-submenu .search-expand").length > 0) {
									$("#oc-head .search-btn").after($(".mega-submenu .search-expand"));
								}
								$(".submenu-contents").empty();
							});
						};
						
						  	function calcAdHeight() {
						  		googletag.pubads().addEventListener('slotRenderEnded', function(event) {
									var slotId = event.slot.getSlotElementId();
									if (slotId == 'oc_ad_1') {
										if (event.isEmpty) {
											//calculate based on zero height
											$("#banner .ad").css("height",0);
											//console.log("ocHeadTop set to: "+ocHeadTop);
										}
										else {
											//calculate based on whatever the height is at the breakpoint
											if ($thm.deviceWidthLessThan($thm.deviceBreakpoints.tablet)){
												$("#banner .ad").css("height","195px");//195px is height of the responsive "top hat" ad at mobile
												ocHeadTop = ocHeadTop + 195;
												relatedTop = 195;
											}
											else {
												$("#banner .ad").css("height","255px");//height at tablet/desktop
												ocHeadTop = ocHeadTop + 255;
												relatedTop = 255;
											}
										}
									}
								});
						  	};
					  	
							try {
								IDG.GPT.googleCommandPush(calcAdHeight);
							}
							catch(e){
								console.log('error calculating ad height: ' + e);
							}
						
					</script>

	
	



		
		













<div  id="page-wrapper" class="page-wrapper">
	
	













<div id="skinAdTarget"></div>


			
		











	
	
	
	
	
	
	
	
	
	
	
	
	
	
	





	
	
 	


	
	<section role="main" >
	
		
		
		

		

		















<!-- Events Header -->

 
 
	
	
	
	
	

 
 
 
 
  
  
 
 












	
	
	
	
	
	
	
	
	
	
	
	
	
	
	


<!-- //end Events Header -->


	
	
	
	
	
	
		
	



	
		
	
		
		



		<section class="bodee">

			
				
				
					












<header>
	<div class="icon-wrap"><h1>Podcasts</h1></div>
	<h2>Tune in now, catch up on past episodes, or subscribe to get the latest podcast content. Hear from IT leaders and tech experts on the topics that matter to you.</h2>
</header>
<div id="all-blogs" class="main-col blogs-index">

	
	
	
	
	
	
	
	
	


	
	
	
	
	
	
	








































































</div><!-- end .main-col -->
<div class="right-rail">
	
	<div class="ad">
	
		
	






















	

		
			
			
			
			
			
			
				<div id="topimu" class=" ad-container test">					
				</div>				
				<script type="text/javascript">
				
					IDG.GPT.addDisplayedAd("topimu", "true");
					$('#topimu').responsiveAd({screenSize:'971 1115', scriptTags: []});
                    IDG.GPT.log("Creating ad: topimu - [971 1115]");
                    
				
				</script>
			
		
	
 	
 
  
	</div>
	
	
	
	
	
	
	
  			
	


























	
		<div class="lazyload_ad">
			<code type="text/javascript">
			<!--
				IDG.GPT.IMUCounter = IDG.GPT.IMUCounter + 1;
				var slotName = IDG.GPT.getIMUSlotName();
                
				document.write('<div class="ad-container" id="' + slotName + '">');
				IDG.GPT.defineGoogleTagSlot(slotName, IDG.GPT.slots["topimu"], false);
				document.write('</div>');
				$('#' + slotName).responsiveAd({screenSize:'971 1115', scriptTags: []});
				if (Object.keys(IDG.GPT.companions).length > 0 || IDG.GPT.disableInitialLoad) {
					IDG.GPT.refreshAd(slotName);
				}
			//-->
			</code>
		</div>
	
	
	



	
	
</div>




					










				
			
		
		</section><!-- /.bodee -->

		














 




	
	
	



	
		
			










<link rel="stylesheet" href="/www.idgcsmb/css/tso-links.css?v=20240612122409" />

	<div id="tso-wrapper"><div id="tso" style="display:none"></div></div>
	<script type="text/javascript">
	function renderTSO(ads, requireHttps) {
		$thm.debug("renderTSO:"+ads.length);
		if (ads && ads.length > 0) {
			var selectedAds = selectTSOAds(ads,10);
			if (null != selectedAds && selectedAds.length > 0) {
				var html = "<h3>Sponsored Links</h3>";
				html += "<ul>";
				for (var i=0; i<selectedAds.length;i++) {
					html += "<li>";
					html += "<a href='"+selectedAds[i].url+"'> "+selectedAds[i].title+"</a>";
					if (null != selectedAds[i].pixel && selectedAds[i].pixel.length > 0) {
						html += selectedAds[i].pixel;
					}
					html += "</li>";
				}
				html += "</ul>";
				$("#tso").html(html).show();
			}
		}
	}
	function selectTSOAds(ads,max) {
		if (ads.length <= max) {
			return ads;
		} else {
			var uniq = {};
			var found = 0;
			var selectedAds = [];
			while (found < max) {
				var ad = ads[Math.floor(Math.random()*ads.length)];
				if (uniq[ad.id] != null) {
					continue;
				} else {
					uniq[ad.id] = true;
					found++;
					selectedAds.push(ad);
				}
			}
			return selectedAds;
		}
		return null;
	}
	</script>
	

			
		
	
	




		

	</section><!-- /role=main -->

	
	
	

</div><!-- /#page-wrapper -->
		
		












	<link rel="stylesheet" href="/www.idge/css/foot.css?v=20240612122409" />
	<link rel="stylesheet" href="/www.idge.ifw/css/foot.css?v=20240612122409" />






<footer>

    <section class="brand" itemscope itemtype="http://schema.org/Organization">
   	
   		<link itemprop="url" href="http://www.infoworld.com"> 
        <a href="/"><span class="logo">InfoWorld</span></a>
		<span class="tagline"> </span>
        
        
	        <span class="follow">
				<label>Follow us</label>
	            	<ul>
	            		














	
	
		<li class="lnkdn"><a class="social-media-li-foot" href="https://www.linkedin.com/company/164364" itemprop="sameAs" rel="nofollow" target="_blank" onclick="brandFollowTrack('LinkedIn')" aria-label="Follow on LinkedIn" role="button"><i class="ss-icon ss-social-circle brand ss-linkedin"></i></a></li>
	
	
		<li><a class="social-media-tw-foot" href="https://twitter.com/infoworld" itemprop="sameAs" rel="nofollow" target="_blank" onclick="brandFollowTrack('Twitter')" aria-label="Follow on Twitter" role="button"><i class="ss-icon ss-social-circle ss-twitter"></i></a></li>
	
	
		<li><a class="social-media-fb-foot" href="https://www.facebook.com/InfoWorld" itemprop="sameAs" rel="nofollow" target="_blank" onclick="brandFollowTrack('Facebook')" aria-label="Follow on Facebook" role="button"><i class="ss-icon ss-social-circle brand ss-facebook"></i></a></li>				
	
	
		<script>
			if (typeof facebookUrl !== "undefined" && facebookUrl !== null && facebookUrl !== "") {
				document.querySelector(".social-media-fb-foot").setAttribute("href", facebookUrl);
			}
			if (typeof twitterUrl !== "undefined" && twitterUrl !== null && twitterUrl != "") {
				document.querySelector(".social-media-tw-foot").setAttribute("href", twitterUrl);
			}
			if (typeof linkedInUrl !== "undefined" && linkedInUrl !== null && linkedInUrl !== "") {
					document.querySelector(".social-media-li-foot").setAttribute("href", linkedInUrl);
			} 
		</script>
	


	            	</ul>
	        </span>
        
        
    </section>
    	
    <section class="topics">
        
			
		
    </section>
    
    
    <section class="about">
		<div class="wrapper"> 
        	<nav class="tertiary" id="ft3">
            	<ul>
            		

















	<li><a class="edition-link-url" href="/about/about.html"  >About Us</a>

	<li><a class="edition-link-url" href="/about/contactus.html"  >Contact</a>

	<li><a class="edition-link-url" href="/about/contactus.html#reprints"  >Republication Permissions</a>

	<li><a class="edition-link-url" href="/about/privacy.html"  >Privacy Policy</a>

	<li><a class="edition-link-url" href="/about/cookie-policy.html"  >Cookie Policy</a>

	<li><a class="edition-link-url" href="https://foundryco.com/copyright-notice/" target="_blank"  >Copyright Notice</a>

	<li><a class="edition-link-url" href="https://foundryco.com/terms-of-service-agreement/" target="_blank"  >Terms of Service</a>

	<li><a class="edition-link-url" href="/about/member-preferences.html#cookie"  >European Privacy Settings</a>

	<li><a class="edition-link-url" href="/about/member-preferences.html"  >Member Preferences</a>

	<li><a class="edition-link-url" href="https://foundryco.com/our-brands/infoworld/" target="_blank"  >Advertising</a>

	<li><a class="edition-link-url" href="https://foundryco.com/work-here/" target="_blank"  >Foundry Careers</a>

	<li><a class="edition-link-url" href="/about/adchoices.html"  >Ad Choices</a>

	<li><a class="edition-link-url" href="/about/affiliates.html"  >E-commerce Links</a>

	<li><a class="edition-link-url" href="/about/ccpa.html"  >California: Do Not Sell My Personal Info</a>





            	</ul>
        	</nav>
		</div>
	</section>
	
    <section class="copyright">
        <div class="wrapper">
			
        		<a href="https://foundryco.com/" target="_blank"><img src="https://alt.idgesg.net/images/furniture/foundry/foundry-logo-black.svg" alt="Foundry" width="107" height="26" /></a>
        	
        	
        
        	
        	
	        	
	        		<p><a href="/about/contactus.html#reprints">Copyright</a> &copy; 2024 IDG Communications, Inc.</p>
	        	
	        	
        	
			<div class="network">
				<div id="network-selector">
                <div class="label">Explore the Foundry Network <i class="ss-icon tick">descend</i></div>
                <ul>
                	
                		
                		
                	














	
		<li><a href="https://www.cio.com" target="_blank">CIO</a></li>
	
		<li><a href="https://www.computerworld.com" target="_blank">Computerworld</a></li>
	
		<li><a href="https://www.csoonline.com" target="_blank">CSO Online</a></li>
	
		<li><a href="https://www.infoworld.com" target="_blank">InfoWorld</a></li>
	
		<li><a href="https://www.networkworld.com" target="_blank">Network World</a></li>
	

                </ul>
				</div><!-- /#network-selector -->
			</div><!-- /.network -->
		</div><!-- /.wrapper -->
    </section>
</footer>


<script src="/www/js/jquery/jquery-ui.js"></script>
<script src="/www/js/jquery/jquery.dfp.min.js"></script>
<script src="/www.idge/js/mule/shortstack_nav.js"></script>




	
		
			
		






















	

		
			
			
			
			
			
			
				<div id="mobilewelcomead" class=" ad-container test">					
				</div>				
				<script type="text/javascript">
				
					IDG.GPT.addDisplayedAd("mobilewelcomead", "true");
					$('#mobilewelcomead').responsiveAd({screenSize:'971 1115', scriptTags: []});
                    IDG.GPT.log("Creating ad: mobilewelcomead - [971 1115]");
                    
				
				</script>
			
		
	
 	
 
 
	




<script src="/www/js/analytics/tracking.js"></script>






<script src="/www.idge/js/global.js?v=20240612122409"></script>
<script src="/www/js/webfonts/ss-social.js"></script>
<script src="/www/js/webfonts/ss-standard.js"></script>
<script src="/www/js/analytics/brandAnalytics.js"></script>
















	
		<script src="/www/js/locales-editions-slug.js?v=20240612122409"></script>
	





		
		
			
				
			






















	

		
			
			
			
			
			
			
				<div id="catfish" class=" ad-container test">					
				</div>				
				<script type="text/javascript">
				
					IDG.GPT.addDisplayedAd("catfish", "true");
					$('#catfish').responsiveAd({screenSize:'971 1115', scriptTags: []});
                    IDG.GPT.log("Creating ad: catfish - [971 1115]");
                    
				
				</script>
			
		
	
 	
 
 
		
		
			
		






















	

		
			
			
				<!--  Begin gpt-skin -->
				<div id="gpt-skin" class=" ad-container">					
				</div>
				<script type="text/javascript">
					IDG.GPT.addDisplayedAd("gpt-skin", "true");
					IDG.GPT.displayGoogleTagSlot('gpt-skin');
				</script>
				<!--  End gpt-skin -->	
			
			
			
			
			
		
	
 	
 
 
	


<!-- Include here when empty article and when not empty and article is slideshow as this script is included with DRR code in body-base.jsp. -->
<!-- Also do not include on search page with new right rail. OC-1778 -->
 
	<script type="text/javascript" src="/www/js/ads/jquery.lazyload-ad.js"></script>



<script type="text/javascript">
// -- Load Lazy Advertisement placement as deferred
$("div.lazyload_ad").lazyLoadAd({
        threshold    : 500,         // You can set threshold on how close to the edge ad should come before it is loaded. Default is 0 (when it is visible).
        forceLoad    : false,       // Ad is loaded even if not visible. Default is false.
        onLoad       : false,       // Callback function on call ad loading
        onComplete   : false,       // Callback function when load is loaded
        timeout      : 1500,        // Timeout ad load
        debug        : false,       // For debug use : draw colors border depends on load status
        xray         : false        // For debug use : display a complete page view with ad placements
}) ;
</script>







<script type='text/javascript' src="/www.idge/js/social_sticker.js"></script><script type='text/javascript' src="/www.idge/js/load_more.js"></script><script type='text/javascript'>

	IDGE.LoadMore.init("load-more-index", "#all-blogs .blog:not(.ntvClickOut)", {
		def: "listItemList",
		loadMore: true,
    	includeBlogs: true,
    	useDefaultCategory: true,
    	brandOwner: 2048,
    	isPodcast: true,
    	itemTemplate: "/www.idge/_shared/components/content-list/item/blog.jsp",
    	offset: 0,
    	pageSize: 20,
    	paginate: false,
    	comments: false,
    	queryKey: "allBlogsIndexCrawl_20",
    	wrapperElement: "ul",
    	cacheContent: true,
    	sortOrder: "blog_name asc",
    	authorsSinceMonths: 18,
    	localeId: 0
	});


	g_bRequireHttps = true;
	 	var localeId = getLocale();
		$.ajax('/ads/tso?localeId=' + localeId,{
			dataType: 'json',
			success: function(data){
				renderTSO(data.tsoLinks, g_bRequireHttps);
			},
			error: function(jqXHR,error,thrown){
				$thm.debug("TSO AJAX Status: "+error+": "+thrown,true);
			}
		});
	
</script>












<!-- Begin comScore Tag -->
<script>
var _comscore = _comscore || [];
_comscore.push(
{ c1: "2", c2: "6035308", c3: "" });
(function()
{
	var s = document.createElement("script"), el = document.getElementsByTagName("script")[0];
	s.async = true; s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js";
	el.parentNode.insertBefore(s, el);
})();
</script>
<noscript>
<img src="https://sb.scorecardresearch.com/p?c1=2&c2=6035308&cv=2.0&cj=1" />
</noscript>
<!-- End comScore Tag -->














<script type="text/javascript">
//consent.digitalelement.queue.push(function(){
	$thm.logPlEvent({"b":"ifw","e":"view","t":"article","id":""});
//});
</script>

		<div id="loginModal"></div>
		<div id="logoffModal"></div>


		
	<script type="text/javascript">
		var subscribersSiteId = "d73925e9-37f6-478a-9804-7901f9e3a2ae"; 
	</script>
	<script type="text/javascript" src="https://cdn.subscribers.com/assets/subscribers.js"></script>






		
		
		
		<script type="text/javascript">
			a=top;f=self;
			var acceptedDomains = ["lookbookhq.com"];
			var cleanedHost = a.location.hostname.split(".").slice(-2).join(".");
			if(a!=f && acceptedDomains.indexOf(cleanedHost) < 0) {
				a.location=f.location;
			}
		</script>			

		













	</body>
</html>