Nová mobilní aplikace Office pro iOS a Android je určena k tomu, aby pomohla uživatelům dokončovat „mikroúlohy“ za pochodu, a kombinuje v sobě Word, Excel a PowerPoint.
Microsoft Office Lens – což je řešení pořizující a upravující snímky věcí, jako jsou účtenky či různé dokumenty – je pro iOS i Android k dispozici už od roku 2015, jenže vždycky šlo o samostatnou aplikaci.
Ta nyní byla integrována do aplikace Office, kde může být vyvolána pro „naskenování“ papíru volnou rukou a následný převod výsledku ve formátu wordovských či excelovských dokumentů nebo jako PDF.
Poznámka: Lens je stále k dispozici ve formě samostatné aplikace, podobně jako Word, Excel a PowerPoint.
Samostatné aplikace nikam nemizí
Aplikace Word, Excel a PowerPoint na iOS a Android nikam nezmizí, alespoň ne okamžitě.
„Budeme i nadále podporovat a investovat do stávajících mobilních aplikací Word, Excel a PowerPoint,“ slíbil Bill Doll, senior manažer produktového marketingu, v listopadovém příspěvku pro firemní blog. Doll ovšem nikde neslíbil, že podpora, o které hovořil, bude trvalá. Místo toho naznačil pro Office na mobilech „darwinovskou“ budoucnost.
"Věříme, že každý by se měl rozhodnout, která zkušenost mu na jeho telefonu vyhovuje nejlépe," dodal.
Předplatné Office 365 odemyká funkce navíc
Teprve na konci tiskové zprávy z 19. února se společnost Microsoft zmínila o Office 365 a jejich roli v nové aplikaci Office. „Předplatné sady Office 365 nebo Microsoft 365 také odemkne různé prémiové funkce, které jsou konzistentní s funkcemi v současných aplikacích Word, Excel a PowerPoint,“ řekl Microsoft.
Odkaz v této větě vede uživatele zde, kde jsou tyto „prémiové“ funkce uvedeny pro uživatele iOS a Android s jedním z kvalifikujících předplatných.
';
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';
}
}
O2 rozšiřuje nabídku svého bezpečnostního centra (O2 SEC) - služby, které dosud mohly využívat největší korporace a státní správa, jsou nově dostupné i pro střední a velké firmy. O2 Security Centrum přináší platformu pro bezpečnostní dohled, správu a analýzu logů, pokročilé SIEM technologie a podporu při splnění požadavků nové legislativy NIS2 – to vše jako službu.
3. 6.
Ředitelé internetu se sejdou v Praze
Organizace ICANN, klíčová organizace, která má na starosti správu a koordinaci různých aspektů internetové infrastruktury, bude mít zasedání v Praze, a to konkrétně 9. až 12. června proběhne v Praze ICANN83 Policy Forum.
ICANN83 v pražském Kongresovém centru spojí účastníky z vlád, občanské společnosti, soukromého sektoru a technické komunity, aby společně pracovali na důležitých politických otázkách týkajících se systému doménových jmen (DNS) a jedinečných identifikačních systémů internetu.
2. 6.
Spojení na dráze
Na začátku června došlo k oficiálnímu spojení společností ČD - Telematika a ČD - Informační Systémy (ČD-IS). „Nová“ ČD - Telematika má přibližně 900 zaměstnanců a stává se jedním z největších poskytovatelů ICT služeb v oblasti dopravy a státní správy v České republice.
Fúze přináší sjednocení klíčových kompetencí obou firem, zjednodušení procesů, posílení inovačního potenciálu a zákazníkům širší portfolio služeb.
19. 5.
Pozvánka: Spravujte kontejnery efektivně a bezpečně
Řešení pro správu kontejnerů napříč datovými centry a cloudy spolu s nejnovějšími trendy a technologiemi v oblasti kontejnerizace budou v centru pozornosti konference Kontajnery v praxi, která se uskuteční 27. května 2025 v prezenční formě v bratislavském hotelu Lindner.
Konference nabídne i praktické pohledy na využití, správu, škálování a zabezpečení kontejnerů. Slovenští a čeští odborníci zde představí i konkrétní příklady z praxe a zaměří se na témata jako migrace, automatizace nebo zálohovaní a obnova dat. Více informací a registrace zde.
6. 5.
Miliony pro DecisionRules
Český startup DecisionRules, který vyvíjí cloudovou
platformu pro automatizaci rozhodovacích procesů bez nutnosti programování, uzavřel investiční kolo ve výši 1,6 milionu eur. Kolo vedl fond Lighthouse Ventures za účasti Czech
Founders VC, BD Partners, Chilli Ventures a andělských investorů Oryho Weihse a Michaela
Rostocka-Poplara.
Investice bude použita na rozšíření působnosti v USA a Velké Británii, kde již firma zaznamenala silný
zájem, a dále na rozvoj produktu, včetně nových funkcí postavených na umělé inteligenci. Cílem je
zpřístupnit automatizaci rozhodování širšímu spektru firem, včetně malých a středních podniků a týmů
bez technického zázemí.