Editorial: Vychází nový ChannelWorld aneb Služby, software a security

29. 3. 2021
Doba čtení: 2 minuty

Sdílet

Autor: ChannelWorld
První číslo třináctého ročníku ChannelWorldu se zaměřilo především na otázky spojené s kybernetickou bezpečností a pokračující transformací nepřímých prodejních kanálů vlivem (nejen) pandemie.

Vážení čtenáři,obálka ChW 520

máme za sebou rok s koronavirem a velmi chmurnou zimu. Není snadné v této situaci hledat pozitiva, snad jen to, že poslední vlna nákazy začala konečně ustupovat a také začíná jaro, které nám snad přinese úlevu a trochu nové energie. Zasloužili bychom si to úplně všichni, od zdravotníků až po nás, kteří poslušně sedíme doma.

V oblasti IT nebude ani letos nouze o práci. Firmy, které v loňském roce nasadily nové technologie, aby si zajistily základní kontinuitu práce, je používají už rok, což je dostatečně dlouhá doba na to, aby si na ně zvykly a přijaly je za své. Nyní přichází ideální chvíle na konsolidaci a posun uvažování od „aby to nějak fungovalo“ k „aby to fungovalo správně“. V otázce zabezpečení to platí dvojnásobně.

Problematice security jsme v tomto čísle věnovali Kulatý stůl a probrali jsme ji z pohledu vendorů, distributorů i partnerů. Závěry této diskuze jsou zajímavé a mnoho z nich je obecně platných pro celé odvětví IT, zejména co se týče potřeby adoptovat nové obchodní modely. Za poslední měsíce se nám zde ostatně vyrojilo mnoho příkladů, že řada globálních trendů definitivně dorazila i k nám.

Těmto příkladům se věnujeme v textech uvnitř čísla, ale jeden zde přesto zmíním, neboť jej považuji za nejviditelnější projev posunu ve smýšlení lokálních hráčů – eD system na své konferenci eD Expo uspořádal panelovou debatu o digitální transformaci spojenou s apelem na vzájemnou spolupráci partnerů. Pokud toto není dostatečný signál, že je načase tato témata začít brát skutečně vážně, tak nevím.

Milí čtenáři, příjemné jaro a novou krev do žil vám přeje

Matěj Čuchna, šéfredaktor


Jak získat ChannelWorld?

Zaujalo vás nové číslo? Navštivte naši on-line trafiku a po vybrání titulu ChannelWorld si pohodlně zakupte libovolné číslo přímo od svého stolu. Časopis je také k dispozici v elektronické verzi zde.


Nejste ještě registrování na webu ChannelWorldu? Registrace vám umožní přístup k obsahu a službám pro resellery, mezi které patří pravidelný informační newsletter Channel News, nebo přístup do vyhledávače distributorů.

CIF25

Podělte se s námi také o vaše náměty a tipy. Zajímá nás, co byste si chtěli přečíst a jaký máte na ChannelWorld názor. Pište na c[email protected].

Zdroj: ChannelWorld

Čtěte dále

Firmy připravují týmy na digitální kolegy, rekvalifikací kvůli AI projde každý čtvrtý
Firmy připravují týmy na digitální kolegy, rekvalifikací kvůli AI projde každý čtvrtý
Za vysoké účty za elektřinu nemohou datacentra, ale kancelářské počítače
Za vysoké účty za elektřinu nemohou datacentra, ale kancelářské počítače
Od června musejí být weby tisíců firem dostupné pro zdravotně znevýhodněné
Od června musejí být weby tisíců firem dostupné pro zdravotně znevýhodněné
MSP roste dvouciferně, firmy mají zájem o služby kybernetické bezpečnosti
MSP roste dvouciferně, firmy mají zájem o služby kybernetické bezpečnosti
Peter Majdak a Veronika Závodná posilují obchodní tým TP-Linku
Peter Majdak a Veronika Závodná posilují obchodní tým TP-Linku
Netgear kupuje bezpečnostní společnost Exium
Netgear kupuje bezpečnostní společnost Exium
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »