













<!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>Blogs | Computerworld</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=20240320124651"></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.computerworld.com",
          propertyHref: "https://www.computerworld.com",
          joinHref: true,
          targetingParams: {
            type: "GDPR"
         }
      }
}
window._sp_ccpa = {
   config: {
         mmsDomain: "https://cmp.computerworld.com",
         ccpaOrigin: "https://ccpa-service.sp-prod.net",
         accountId: 146,
         getDnsMsgMms: true,
         alwaysDisplayDns: false,
         targetingParams: {
         	type: "CCPA"
         }
   }
}
</script>

<script src="https://cmpv2.computerworld.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 = "ctw";
let brandConfigBrandId = "128";
//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/computerworld";
var linkedInUrl = "https://www.linkedin.com/company/computerworld";
var facebookUrl = "https://www.facebook.com/Computerworld";
var youTubeUrl = "";
var twitterHandle = "computerworld";
//cookie policy page
var localeEdition = "United States Edition";

if (countryCode === 'asean') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "ASEAN Edition";
}
if (countryCode === 'middle-east') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	localeEdition = "";
}
if (countryCode === 'uk') {
	twitterUrl = "https://twitter.com/computerworlduk";
	linkedInUrl = "https://www.linkedin.com/company/computerworld-uk/";
	facebookUrl = "https://www.facebook.com/ComputerworldUK";
	twitterHandle = "computerworlduk";
	localeEdition = "United Kingdom Edition";
}
if (countryCode === 'in') {
	twitterUrl = "https://twitter.com/CompworldIndia";
	linkedInUrl = "";
	facebookUrl = "https://www.facebook.com/pages/Computerworld-India/339721282758505";
	twitterHandle = "CompworldIndia";
	youTubeUrl = "https://www.youtube.com/channel/UCujjPXDdDCCckDeWAGQLCgQ";
	localeEdition = "India Edition";
}
if (countryCode === 'africa') {
	twitterUrl = "";
	linkedInUrl = "";
	facebookUrl = "";
	twitterHandle = "";
	youTubeUrl = "";
	localeEdition = "";
}
if (countryCode === 'au') {
	twitterUrl = "https://twitter.com/computerworldau";
	linkedInUrl = "https://www.linkedin.com/company/computerworld";
	facebookUrl = "https://www.facebook.com/computerworld.australia";
	twitterHandle = "computerworldau";
	localeEdition = "Australia Edition";
}
if (countryCode === 'nz') {
	twitterUrl = "https://twitter.com/computerworldnz";
	linkedInUrl = "https://www.linkedin.com/company/computerworld";
	facebookUrl = "https://www.facebook.com/ComputerworldNZ";
	twitterHandle = "computerworldnz";
	localeEdition = "New Zealand Edition";
}
if (countryCode === 'nl') {
	twitterUrl = "https://twitter.com/NLComputerworld";
	linkedInUrl = "https://www.linkedin.com/company/idg-benelux/";
	facebookUrl = "";
	twitterHandle = "NLComputerworld";
	localeEdition = "Netherlands Edition";
}
if (countryCode === 'asia') {
	twitterUrl = "https://twitter.com/computerworld";
	linkedInUrl = "";
	facebookUrl = "https://www.facebook.com/Computerworld";
	twitterHandle = "computerworld";
	localeEdition = "";
}
</script>

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

	

	
		
			
			

























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




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



	












<script>

function refreshCountdown(slotName) {
	IDG.GPT.log(slotName + " refresh countdown: " + IDG.GPT.refreshCountdown[slotName].timeRemaining);
	IDG.GPT.refreshCountdown[slotName].timeRemaining--;
	
	if (IDG.GPT.refreshCountdown[slotName].timeRemaining == 0) {
		IDG.GPT.log(slotName + ' - time to refresh ad!');
		
		//perform ad refresh
		IDG.GPT.refreshAd(slotName);	
		IDG.GPT.refreshCountdown[slotName].counting = false;
	}
	else if (IDG.GPT.refreshCountdown[slotName].counting === true) {
			setTimeout(function(){refreshCountdown(slotName)}, 1000);
	} 
}

var refreshInterval = 30;

var testRefreshInterval = IDG.GPT.getUrlParameter("interval");
if (typeof testRefreshInterval !== "undefined" && typeof parseInt(testRefreshInterval) === "number") {
	refreshInterval = parseInt(testRefreshInterval);
}

IDG.GPT.log("Ad refreshing ON - every " + refreshInterval + " seconds");

IDG.GPT.viewable = {};
IDG.GPT.visibility = {};
IDG.GPT.refreshCountdown = {};

IDG.GPT.impressionViewable = function (){
	googletag.pubads().addEventListener('impressionViewable', function (event) {
		var currentSlot = event.slot.getSlotElementId();
		if (currentSlot !== 'inread' && currentSlot !== 'gpt-skin' && currentSlot !== 'gpt-superstitial' && currentSlot !== 'gpt-overlay' ) {
			IDG.GPT.viewable[currentSlot] = true;
			IDG.GPT.log("The ad in " + currentSlot + " counts as a viewable impression.");
			IDG.GPT.refreshCountdown[currentSlot] = IDG.GPT.refreshCountdown[currentSlot] || {};
			IDG.GPT.refreshCountdown[currentSlot].timeRemaining = IDG.GPT.refreshCountdown[currentSlot].timeRemaining || 0;
			IDG.GPT.refreshCountdown[currentSlot].counting = (IDG.GPT.refreshCountdown[currentSlot].counting === true);
			//if slot visibility > 50, start countdown timer
			if (IDG.GPT.visibility[currentSlot] >= 50 && IDG.GPT.refreshCountdown[currentSlot].counting === false) {
				IDG.GPT.refreshCountdown[currentSlot].timeRemaining = refreshInterval;
				IDG.GPT.refreshCountdown[currentSlot].counting = true;
				IDG.GPT.log('Impression viewable - starting countdown for ' + currentSlot);
				refreshCountdown(currentSlot);			
			}
		}
	});
};



IDG.GPT.visibilityChanged = function() {
	googletag.pubads().addEventListener('slotVisibilityChanged', function (event) {
		var currentSlot = event.slot.getSlotElementId();
		var currentVisibility = event.inViewPercentage;
		
		if (currentSlot !== 'inread' && currentSlot !== 'gpt-skin' && currentSlot !== 'gpt-superstitial' && currentSlot !== 'gpt-overlay' ) {
			if (typeof IDG.GPT.visibility[currentSlot] !== "undefined") {
				//if this slot has a viewable impression...
				if (typeof IDG.GPT.viewable[currentSlot] === "boolean" && IDG.GPT.viewable[currentSlot] == true) {
					//if stored value < 50 and current value >=50, start countdown timer
					if (IDG.GPT.visibility[currentSlot] < 50 && currentVisibility >= 50 && IDG.GPT.refreshCountdown[currentSlot].counting === false) {
						IDG.GPT.refreshCountdown[currentSlot].timeRemaining = refreshInterval;
						IDG.GPT.refreshCountdown[currentSlot].counting = true;
						refreshCountdown(currentSlot);					
						IDG.GPT.log('Came into view - restarting countdown for ' + currentSlot);
					}
					//else if stored value >= 50 and current value < 50, stop countdown timer (if exists)
					else if (IDG.GPT.visibility[currentSlot] >= 50 && currentVisibility < 50) {
						IDG.GPT.log('Went out of view - stopping countdown for ' + currentSlot);
						IDG.GPT.refreshCountdown[currentSlot].counting = false;
					}
				}
				//update visibility
				IDG.GPT.visibility[currentSlot] = currentVisibility;
			}
			else {
				//set initial visibility
				IDG.GPT.visibility[currentSlot] = currentVisibility;
			}
			
			IDG.GPT.log(currentSlot + " visibility: " + currentVisibility);
		}
	});
};

IDG.GPT.googleCommandPush(IDG.GPT.impressionViewable);
IDG.GPT.googleCommandPush(IDG.GPT.visibilityChanged);



</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_Computerworld.com";
	}
	catch (exception) {
		console.log ("google_dfp can't use IDG.GPT "+ exception);
	}

	try {
		IDG.GPT.unitName = IDG.GPT.unitName + "/" + "blogs_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: "131195"
					}
				}
		};
	
	
</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=20240320124651"></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=20240320124651"></script>
		
		

	





		
		
	
	
	
		
				
		
		
		
	

	<link rel="canonical" href="https://www.computerworld.com/blogs/blog/68/feed" />
	
	

	
	<meta name="description" content="Computerworld blogs cover a wide range of technology topics, including smartphones, tablets, software, security, operating systems, mobile, storage, servers and data centers, and technology companies such as Microsoft, Google and Apple." />
	
		
		
		
		
	
	
	
	
		
		
		
			
			
				
			
			
			
		
	
	
		
		
			<meta property="og:title" content="Blogs">
		
	
	<meta property="og:description" content="Computerworld blogs cover a wide range of technology topics, including smartphones, tablets, software, security, operating systems, mobile, storage, servers and data centers, and technology companies such as Microsoft, Google and Apple.">	
	
	
		
		
			<meta property="og:image" content="https://idge.staticworld.net/ctw/computerworld-logo300x300.png" />
			<meta itemprop="image" content="https://idge.staticworld.net/ctw/computerworld-logo300x300.png">
			<meta itemprop="thumbnailURl" content="https://idge.staticworld.net/ctw/computerworld-logo300x300.png" />
			<link rel="image_src" href="https://idge.staticworld.net/ctw/computerworld-logo300x300.png" />
			<meta name="twitter:image" content="https://idge.staticworld.net/ctw/computerworld-logo300x300.png" />
		
	
	
		
		
			<meta property="og:type" content="website" />
		 
		
	<meta property="og:site_name" content="Computerworld" />
	<meta property="fb:app_id" content="123026274413041" />
	
		
		
			<meta property="og:url" content="https://www.computerworld.com/blogs/blog/68/feed">
		
	
	
	<!-- Use Twitter Summary Card with Large Image for articles and videos -->
	
		
		
			<meta name="twitter:card" content="summary">
		
	

	<meta name="twitter:site" content="@computerworld">
	<meta name="twitter:description" content="Computerworld blogs cover a wide range of technology topics, including smartphones, tablets, software, security, operating systems, mobile, storage, servers and data centers, and technology companies such as Microsoft, Google and Apple.">

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		<meta property="fb:pages" content="103687894679" />
	
	
	<meta name="rating" content="General">
	
	<meta name="robots" content="NOODP,NOYDIR" />
	
	
		<meta name="google-site-verification" content="_JEYLpDBDU_w1eI6P77BYlB1lvpukoxFcYDS_-Aznko" />
	
	
	
		<meta name="msvalidate.01" content="04917178B598F0648B9BAD693FEC29A3" />
	
		
	<!-- pagination -->
	
	
	
	
	
	
	
	
	
	
	
					
		
		
			
			
		
	
	
	<!-- css -->
	
	
	
		
			
			
			
			
				
					
					
					
						<link rel="stylesheet" href="/www.idge/css/category.css?v=20240320124651" />	
						<link rel="stylesheet" href="/www/css/search.css?v=20240320124651" />
					
					
			
				
		
		
		
		<link rel="stylesheet" href="/www.idge/css/print.css" media="print" />
		
	
	
		
			
			
				
				
					<link rel="stylesheet" href="/www.idge.ctw/css/category.css?v=20240320124651" />
				
			
		
	
	
	<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/aza0kwi.css" />
	
	
	<!--  fav and touch icons -->
	<link rel="shortcut icon" type="image/x-icon" href="https://idge.staticworld.net/ctw/favicon.ico"/>
	<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://idge.staticworld.net/ctw/computerworld-logo144x144.png" />
	<link rel="apple-touch-icon-precomposed" sizes="114x114" href="https://idge.staticworld.net/ctw/computerworld-logo114x114.png" />
	<link rel="apple-touch-icon-precomposed" sizes="72x72" href="https://idge.staticworld.net/ctw/computerworld-logo72x72.png" />
	<link rel="apple-touch-icon-precomposed" sizes="57x57" href="https://idge.staticworld.net/ctw/computerworld-logo57x57.png" />
	<link rel="apple-touch-icon" href="https://idge.staticworld.net/ctw/computerworld-logo300x300.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: ".computerworld.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-300704-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': 'computerworld',
		'propertyCountry':'US',
		'purchaseIntent':'',
		'skimlinksId':'111346X1569473',
		'source':'computerworld',
		'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: 'Computerworld blogs cover a wide range of technology topics, including smartphones, tablets, software, security, operating systems, mobile, storage, servers and data centers, and technology companies such as Microsoft, Google and Apple.',
	      
 		  
	      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 = "ctw";
	
	
	
	


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.computerworld.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/xAPwXviG?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/xAPwXviG?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="blog computerworld">
		
			
			
					
					
						
						
					






















	

		
			
			
				<!-- 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=20240320124651" />
		<link rel="stylesheet" href="/www.idge.ctw/css/oc-header.css?v=20240320124651" />
		











<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">computerworld</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-au">
									   		<a data-edition-name="au" data-edition-localeid="3" href="/au/">Australia </a>
									   </li>
								   
								
							
							   
							   
							   
							   
								   
								   
									   <li class="edition-picker-item locale-in">
									   		<a data-edition-name="in" data-edition-localeid="5" href="/in/">India </a>
									   </li>
								   
								
							
							   
							   
							   
							   
								   
								   
									   <li class="edition-picker-item locale-nl">
									   		<a data-edition-name="nl" data-edition-localeid="9" href="/nl/">Netherlands </a>
									   </li>
								   
								
							
							   
							   
							   
							   
								   
								   
									   <li class="edition-picker-item locale-nz">
									   		<a data-edition-name="nz" data-edition-localeid="4" href="/nz/">New Zealand </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:cnkmmv0dvim';
			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="Computerworld Logo" src="https://alt.idgesg.net/images/furniture/computerworld/computerworld-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/computerworld/" 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/computerworld" 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/computerworld" 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/Computerworld" 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>Blogs</h1></div>
	<h2>Computerworld blogs cover a wide range of technology topics, including smartphones, tablets, software, security, operating systems, mobile, storage, servers and data centers, and technology companies such as Microsoft, Google and Apple.</h2>
</header>
<div id="all-blogs" class="main-col blogs-index">

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	




































































	<ul>
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100672641 " src="https://images.techhive.com/images/article/2016/07/comcastlogo-100672641-small.jpg?auto=webp&quality=85,70" alt="comcastlogo" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Comcast</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/do-you-know-where-your-network-is-headed/">Do You Know Where Your Network is Headed?</a></h3><a class="rss-link rss" href="/blog/do-you-know-where-your-network-is-headed/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Whether you are trusting a managed service provider or going it on your own, the network of tomorrow is going to include the cloud. Are you ready? What do you need to do to get ready? Find out.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3108018/the-future-of-networking-is-in-the-cloud-are-you-ready.html">The Future of Networking is in the Cloud. Are You Ready?</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="small.idgeImage  imgId100686350 " src="https://images.techhive.com/images/article/2016/10/vmware_airwatch_vert_gray_trans_bg_cmyk-100686350-small.idge.jpg?auto=webp&quality=85,70" alt="vmware airwatch vert gray trans bg cmyk" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by VMware AirWatch</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/enterprise-mobility-transformation/">Enterprise Mobility Transformation </a></h3><a class="rss-link rss" href="/blog/enterprise-mobility-transformation/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Advanced mobility strategies can transform your businesses. This blog provides insight into how the mobility ecosystem is evolving and how organizations can push the boundaries of enterprise mobility.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3139288/iot-will-have-a-big-impact-on-enterprise-mobility.html">IoT Will Have a Big Impact on Enterprise Mobility</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100915940 " src="https://images.idgesg.net/images/article/2022/01/acronis-logo-100915940-small.jpg?auto=webp&quality=85,70" alt="acronis logo" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Acronis</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/a-modern-approach-to-data-protection/">A Modern Approach to Data Protection </a></h3><a class="rss-link rss" href="/blog/a-modern-approach-to-data-protection/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Today’s complex cyberattack landscape requires a streamlined data protection and backup strategy that keeps small and midsized business flowing.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3660032/questions-that-every-business-should-ask-managed-services-providers.html">Questions that every business should ask managed services providers</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="originalImage  imgId100944370 " src="https://images.idgesg.net/images/article/2023/08/logo-withsecure-148x148-100944370-orig.jpg?auto=webp&quality=85,70" alt="logo withsecure 148x148" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by With Secure</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/how-to-turn-a-necessity-into-a-business-advantage/">How to turn a necessity into a business advantage</a></h3><a class="rss-link rss" href="/blog/how-to-turn-a-necessity-into-a-business-advantage/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>“Outcome-based security” aligns all your security measures with your business targets. Read the information below to find out what this means, and the benefits it offers your organization.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3704388/how-to-turn-a-necessity-into-a-business-advantage.html">How to turn a necessity into a business advantage</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100934070 " src="https://images.idgesg.net/images/article/2022/11/-vertical-version-of-huawei-corporate-logo_2018-100934070-small.jpg?auto=webp&quality=85,70" alt="vertical version of huawei corporate logo 2018" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Huawei</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/data-storage-power-preparing-for-an-intelligent-digital-future/">Data Storage Power: Preparing for an Intelligent Digital Future</a></h3><a class="rss-link rss" href="/blog/data-storage-power-preparing-for-an-intelligent-digital-future/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>As data continue to grow at an unprecedented pace, so does the demand for storage capacity. Read to learn why data storage power is a crucial element of a modern digital infrastructure.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3678358/data-storage-power-preparing-for-an-intelligent-digital-future.html">Data Storage Power: Preparing for an Intelligent Digital Future</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100827995 " src="https://images.idgesg.net/images/article/2020/01/hw_logo-150x150-100827995-small.jpg?auto=webp&quality=85,70" alt="hw logo 150x150" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Huawei</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/fully-connected-intelligent-world/">Building a Fully Connected Intelligent World</a></h3><a class="rss-link rss" href="/blog/fully-connected-intelligent-world/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Huawei's end-to-end portfolio of products, solutions and services are intelligent, competitive and secure.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3325751/icbc-asia-leverages-cutting-edge-technology-to-drive-cross-border-financial-upgrades-and-developmen.html">ICBC (Asia) Leverages Cutting-edge Technology to Drive Cross-border Financial Upgrades and Development</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100896488 " src="https://images.idgesg.net/images/article/2021/07/hw_logo-150x150-002-100896488-small.jpg?auto=webp&quality=85,70" alt="hw logo 150x150 002" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Huawei</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/banking-giant-bdo-and-huawei-collaborate-to-provide-inclusive-financial-services-for-filipinos/">Banking Giant BDO and Huawei Collaborate to Provide Inclusive Financial Services for Filipinos</a></h3><a class="rss-link rss" href="/blog/banking-giant-bdo-and-huawei-collaborate-to-provide-inclusive-financial-services-for-filipinos/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>More than 50 million citizens — over half the population — do not use any form of online banking.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3626370/banking-giant-bdo-and-huawei-collaborate-to-provide-inclusive-financial-services-for-filipinos.html">Banking Giant BDO and Huawei Collaborate to Provide Inclusive Financial Services for Filipinos</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100934070 " src="https://images.idgesg.net/images/article/2022/11/-vertical-version-of-huawei-corporate-logo_2018-100934070-small.jpg?auto=webp&quality=85,70" alt="vertical version of huawei corporate logo 2018" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Huawei</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/accelerating-transformation-across-industries/">Accelerating Transformation Across Industries</a></h3><a class="rss-link rss" href="/blog/accelerating-transformation-across-industries/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3714281/a-new-chapter-of-industrial-digitalisation-and-intelligent-transformation.html">A New Chapter of Industrial Digitalisation and Intelligent Transformation</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100778934 " src="https://images.idgesg.net/images/article/2018/11/hp-logo-100778934-small.jpg?auto=webp&quality=85,70" alt="hp logo" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by HP, Inc.</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/expect-the-unexpected-and-be-protected/">Expect the Unexpected and Be Protected</a></h3><a class="rss-link rss" href="/blog/expect-the-unexpected-and-be-protected/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Keep your devices running smoothly and address repair issues quickly with efficient service that helps boost employee productivity and frees up time for you to focus on other IT priorities</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3638855/these-experts-show-you-how-to-take-a-cloud-based-approach-to-endpoint-management.html">These Experts Show You How to Take a Cloud-based Approach to Endpoint Management</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100878291 " src="https://images.idgesg.net/images/article/2021/02/150x-150-amd-100878291-small.jpg?auto=webp&quality=85,70" alt="150x 150 amd" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by AMD</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/getting-the-best-from-hci/">Getting the Best from HCI</a></h3><a class="rss-link rss" href="/blog/getting-the-best-from-hci/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Read our articles on Hyperconverged Infrastructure (HCI) and see how the right hardware helps you boost performance, ROI, and much more.</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3612988/how-the-right-cpu-helps-your-hci-reach-top-gear.html">How the Right CPU Helps Your HCI Reach Top Gear</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100900994 " src="https://images.idgesg.net/images/article/2021/08/amd_e_blk_rgb-100900994-small.jpg?auto=webp&quality=85,70" alt="amd e blk rgb" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by AMD</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/elevating-business-computing/">Elevating Business Computing</a></h3><a class="rss-link rss" href="/blog/elevating-business-computing/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Speed is key for today’s businesses. AMD Ryzen PRO 5000 Series Processors respond to the rapidly changing demands of a modern, distributed workforce with features and strategies that boost speed.</p>
			
			
		</div>
	</div>
	
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100564055 " src="https://images.techhive.com/images/article/2015/01/intel_1_150-100564055-small.jpg?auto=webp&quality=85,70" alt="intel 1 150" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Intel</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/business-solutions-from-intel/">Business Solutions from Intel</a></h3><a class="rss-link rss" href="/blog/business-solutions-from-intel/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/2933098/building-an-efficient-and-secure-workplace.html">Building an Efficient and Secure Workplace</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog ">

	<div class="blog-intro">
		
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Kyndryl</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/charting-a-course-for-digital-business-success/">Charting a Course for Digital Business Success</a></h3><a class="rss-link rss" href="/blog/charting-a-course-for-digital-business-success/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Today’s enterprise IT leaders face a litany of challenges. It’s clear that companies who can harness hybrid multicloud, data analytics, and AI/ML have a clear advantage. </p>
			
			
		</div>
	</div>
	
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar sponsored">
					<img  class="smallImage  imgId100894646 " src="https://images.idgesg.net/images/article/2021/07/kyndryl_logo_for_bp-100894646-small.jpg?auto=webp&quality=85,70" alt="Kyndryl logo" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
				
					
					
						<div class="blog-branding-text"><span class="brandpost">BrandPost</span> Sponsored by Kyndryl</div>
					
				
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/building-a-secure-and-compliant-cloud-strategy-with-managed-private-cloud-iaas/">Building a Secure and Compliant Cloud Strategy with Managed Private Cloud IaaS</a></h3><a class="rss-link rss" href="/blog/building-a-secure-and-compliant-cloud-strategy-with-managed-private-cloud-iaas/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Hybrid multi-cloud is the reality. But large enterprises in the finance, healthcare, and public sector have security, compliance, and legacy infrastructure constraints that go well beyond the scope of</p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3624017/managing-your-way-to-hybrid-cloud-security.html">Managing Your Way to Hybrid Cloud Security</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar ">
					<img  class="small.idgeImage  imgId100734484 " src="https://images.idgesg.net/images/article/2017/09/jack-gold-400x400-100734484-small.idge.jpg?auto=webp&quality=85,70" alt="jack gold 400x400" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/golds-take-on-tech/">Gold's Take on Tech</a></h3><a class="rss-link rss" href="/blog/golds-take-on-tech/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3575597/foldable-smartphones-are-important-even-if-you-never-get-one.html">Foldable smartphones are important, even if you never get one</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar ">
					<img  class="smallImage  imgId100798100 " src="https://images.idgesg.net/images/article/2019/06/susan_hanley-3-square-100798100-small.jpg?auto=webp&quality=85,70" alt="susan hanley 3 square" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/essential-sharepoint/">Essential SharePoint</a></h3><a class="rss-link rss" href="/blog/essential-sharepoint/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3612244/what-you-need-to-know-about-linking-to-files-and-pages-in-sharepoint.html">What you need to know about linking to files and pages in SharePoint</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















<li class="blog with-image">

	<div class="blog-intro">
		
			
				<div class="blog-data">
					<div class="blog-avatar ">
					<img  class="smallImage  imgId100886424 " src="https://images.idgesg.net/images/article/2021/04/paul-gillin_wh_bgnd-100886424-small.jpg?auto=webp&quality=85,70" alt="paul gillin wh bgnd" itemprop="image" />
					</div>
				</div>
			
			
		
		<div class="byline-section">
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/digitize-this/">Digitize This</a></h3><a class="rss-link rss" href="/blog/digitize-this/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Weekly insights and advice on how to use smart tech strategies to tackle modern business challenges </p>
			
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3671390/how-generation-z-workers-are-different-from-everybody-else.html">How Generation Z workers are different from everyone else</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















	

<li class="blog with-image">

	<div class="blog-intro">
		
			
			
				<div class="blog-data">
					<div class="blog-avatar ">
					<img  class="bylineImage  imgId100246224 " src="https://images.techhive.com/images/article/2014/02/steventwiggy-100246224-byline.jpg?auto=webp&quality=85,70" width="116" width="116" alt="Steven J. Vaughan-Nichols" itemprop="image" />
					</div>
				</div>
			
		
		<div class="byline-section">
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/business-critical/">Business Critical</a></h3><a class="rss-link rss" href="/blog/business-critical/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Weekly insights and advice on using technology to achieve small business success</p>
			
			
			
			<div class="byline vcard author" itemscope itemtype="http://schema.org/Person" itemprop="author">
				<div class="byline-wrapper">
					By <span itemprop="name"><a rel="author" itemprop="url" href="/author/Steven-J.-Vaughan_Nichols/"><span itemprop="name">Steven J. Vaughan-Nichols</span></a></span>
					
						
							
						










 






	
	

	<div class="meta">
		
			<!-- Remove Follow button: IDGMPM-16803 -->
			<!--
				<a href="#follow" class="follow_btn">Follow</a>
			 -->
			<ul >
				
				<!-- Always display RSS feed on hover: IDGMPM-6374 -->
				<li><a href="/author/Steven-J.-Vaughan_Nichols/index.rss"><i class="ss-icon ss-social ss-rss"></i></a></li>
				
				
				<li><a href="https://twitter.com/@sjvn" rel="nofollow" onclick="followTrack()" target="_blank"><i class="ss-icon ss-social ss-twitter"></i></a></li>
				
				
				
				
				
				
			</ul>
		
	</div>


					
				</div>
			</div>
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3708213/youre-never-too-old-to-start-a-business.html">You're never too old to start a business</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















	

<li class="blog with-image">

	<div class="blog-intro">
		
			
			
				<div class="blog-data">
					<div class="blog-avatar ">
					<img  class="bylineImage  imgId100412881 " src="https://images.techhive.com/images/article/2014/09/johnny-evan-150-100412881-byline.png?auto=webp&quality=85,70" width="116" width="116" alt="Jonny Evans" itemprop="image" />
					</div>
				</div>
			
		
		<div class="byline-section">
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/apple-holic/">Apple Holic</a></h3><a class="rss-link rss" href="/blog/apple-holic/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Appleholic, (noun), æp·əl-hɑl·ɪk: An imaginative person who thinks about what Apple is doing, why and where it is going. Delivering popular Apple-related news, advice and entertainment since 1999. </p>
			
			
			
			<div class="byline vcard author" itemscope itemtype="http://schema.org/Person" itemprop="author">
				<div class="byline-wrapper">
					By <span itemprop="name"><a rel="author" itemprop="url" href="/author/Jonny-Evans/"><span itemprop="name">Jonny Evans</span></a></span>
					
						
							
						










 






	
	

	<div class="meta">
		
			<!-- Remove Follow button: IDGMPM-16803 -->
			<!--
				<a href="#follow" class="follow_btn">Follow</a>
			 -->
			<ul >
				
				<!-- Always display RSS feed on hover: IDGMPM-6374 -->
				<li><a href="/author/Jonny-Evans/index.rss"><i class="ss-icon ss-social ss-rss"></i></a></li>
				
				
				<li><a href="https://twitter.com/jonnyevans_cw" rel="nofollow" onclick="followTrack()" target="_blank"><i class="ss-icon ss-social ss-twitter"></i></a></li>
				
				
				
				
				
				<li><a href="https://www.linkedin.com/in/jonnyevans/" rel="nofollow" onclick="followTrack()" target="_blank"><i class="ss-icon ss-social ss-linkedin"></i></a></li>
				
				
			</ul>
		
	</div>


					
				</div>
			</div>
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3714931/apple-will-continue-to-enhance-its-dma-compliance.html">Apple will continue to enhance its DMA compliance</a></div>
		</div>
	
</li>
				
				
			
		
			
			
				
					
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
						
							
						
						
						
							
						
						
						
					






















	

<li class="blog with-image">

	<div class="blog-intro">
		
			
			
				<div class="blog-data">
					<div class="blog-avatar ">
					<img  class="bylineImage  imgId100759675 " src="https://images.idgesg.net/images/article/2018/05/jr-cw-150-2018-100759675-byline.png?auto=webp&quality=85,70" width="116" width="116" alt="JR Raphael" itemprop="image" />
					</div>
				</div>
			
		
		<div class="byline-section">
			
			
			<div class="icon-wrap"><h3><a class="test edition-link-url" href="/blog/android-intelligence/">Android Intelligence</a></h3><a class="rss-link rss" href="/blog/android-intelligence/index.rss"><i class="ss-icon ss-rss"></i></a></div>
			
				<p>Not your average Android news — a diverse mix of advice, insight, and analysis with veteran Android journalist JR Raphael.</p>
			
			
			
			<div class="byline vcard author" itemscope itemtype="http://schema.org/Person" itemprop="author">
				<div class="byline-wrapper">
					By <span itemprop="name"><a rel="author" itemprop="url" href="/author/JR-Raphael/"><span itemprop="name">JR Raphael</span></a></span>
					
						
							
						










 






	
	

	<div class="meta">
		
			<!-- Remove Follow button: IDGMPM-16803 -->
			<!--
				<a href="#follow" class="follow_btn">Follow</a>
			 -->
			<ul >
				
				<!-- Always display RSS feed on hover: IDGMPM-6374 -->
				<li><a href="/author/JR-Raphael/index.rss"><i class="ss-icon ss-social ss-rss"></i></a></li>
				
				
				
				
				
				
				
			</ul>
		
	</div>


					
				</div>
			</div>
			
		</div>
	</div>
	
	
		<div class="latest-post">
			<div class="hed">Latest post</div>
			<div class="title"><a  href="/article/3319439/google-maps-android-tricks.html">16 handy hidden tricks for Google Maps on Android</a></div>
		</div>
	
</li>
				
				
			
		
	</ul>



	

	<a href="?start=20" id="load-more-index" class="load-btn">Load More</a>




</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=20240320124651" />

	<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=20240320124651" />
	<link rel="stylesheet" href="/www.idge.ctw/css/foot.css?v=20240320124651" />






<footer>

    <section class="brand" itemscope itemtype="http://schema.org/Organization">
   	
   		<link itemprop="url" href="http://www.computerworld.com"> 
        <a href="/"><span class="logo">Computerworld</span></a>
		<span class="tagline"> The Voice of Business Technology</span>
        
        
	        <span class="follow">
				<label>Follow us</label>
	            	<ul>
	            		














	
	
		<li class="lnkdn"><a class="social-media-li-foot" href="https://www.linkedin.com/company/computerworld" 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/computerworld" 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/Computerworld" 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="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/computerworld/" 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-white.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=20240320124651"></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=20240320124651"></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,
    	localeId: 0,
    	brandOwner: 128,
    	isPodcast: false,
    	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
	});


	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":"ctw","e":"view","t":"article","id":""});
//});
</script>

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


		
	<script type="text/javascript">
		var subscribersSiteId = "f17ca7f3-0dbf-481a-ae3f-1042772a9095"; 
	</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>