Rubriky
Užitečnosti

Štastné Vánoce 🎄

Stromeček 🎄 či dárek 🎁, jako symbol Vánoc. Srdíčko ❤ či hvězdička ⭐, ohýnek 🔥 či zatržítko ✓ ✔ ✅ … to všechno jsou některé ze stovek symbolů, které jsou součástí rozšířené znakové sady velká části fontů.

Tyto symboly jsou ale kouzelné! Jestli čtete tento článek na mobilu, či jej třeba sdílíte na Facebooku nebo Twitteru, možná si všimnete, že tyto znaky jsou automaticky nahrazeny obrázky. Původně se tak dělo jen u smajlíků, proto se jim také říká emotikony či emoji.

Ale tím jejich kouzlo nekončí, některé z těchto symbolů se totiž dostanou i do titulků či popisků (a dokonce i URL, jestli to váš publikační systém podporuje), které jsou pak součástí SERP – úryvků, které vyhledavač zobrazí ve výsledcích vyhledávání. A opět – zobrazíte-li si takový výsledek na mobilu, budou takové emoji nahrazené obrázky.

A v tom spočívá i další kouzlo těchto obrázků – jsou výrazné, ve zmeti okolních znaků zaujmou na první pohled, výsledek s takovým symbolem tak bude mít nejspíš vyšší míru prokliku (CTR). Jen do PPC je nejspíš neprotlačíte.

A ještě jedno jejich kouzlo vám prozradím – můžete je použít i ve jméně odesílatele či v předmětu e-mailu a opět se tak nejspíš magicky zvýší míra otevření (open-rate). Možnosti jsou ohromné, ať nabízíte autodíly 🚗, mobily 📱 či vybavení domu 🏠, nebo jen oznamujete časově omezenou akci 🔥 a dárek 🎁 ke každé objednávce.

Vybírejte z existujících symbolů např. na této stránce, a nezapomeňte – ani s kouzly se to nesmí přehánět.

Přeji magické svátky

Rubriky
Užitečnosti

WordPress – odkazujte na součet či průnik štítků

WordPress má tuším asi 2 roky jednu nepříliš známou a dokumentovanou, ale přesto občas velmi užitečnou fičuru – možnost odkazovat na výpis článků, které mají více vyjmenovaných štítků (resp. termínů libovolné taxonomie), či na výpis článků, které mají kterýkoliv z vyjmenovaných štítků.

Použití je přitom velmi intuitivní, pouhým přidáním požadovaných tagů do URL adresy, oddělenými buď čárkou nebo symbolem plus. Konkrétně tedy např. :

  • http://kapler.cz/tag/google-sheets+funkce/ – články, které jsou označeny tagem Google Sheets a zároveň tagem Funkce (tedy dotaz s AND operátorem), tedy všechny mé články o funkcích pro Google Sheets (ale ne např. o funkcích pro Excel)
  • http://kapler.cz/tag/google-sheets,excel/ – články, které mají kterýkoliv z tagů Google Sheets či Excel (tedy dotaz s OR operátorem), tedy všechny mé články o těchto tabulkových procesorech.

Z  dalších praktických příkladů – představte si, že máte web s texty písní na WordPressu, který používá vlastní taxonomii Zpěvák. S tímto trikem tak můžete snadno zobrazit všechny písničky, kde zpívá nějaké konkrétní duo (či vícero) zpěváků, nebo všechny písně, které zpívá kterýkoliv z nich.

Nebo si představte, že máte na WordPressu vytvořený eshop s taxonomiemi pro výrobce či parametry výrobků – bez složitých hacků tak můžete udělat pokročilé filtrování produktů.

P.S.: jestli jste autor takového webu a chcete pro tuto funkci váš web trochu vytunit, můžete upravit chování funkcí the_archive_title() a the_archive_description(), které zobrazují název resp. popis  štítku/kategorie – standardně totiž zobrazují název/popis jen prvního termínu (reportoval jsem to jako chybu, takže možná bude upraveno).

Rubriky
Užitečnosti

Jak používat (velmi rychlá) VBA makra v MS Office

Znám hodně lidí, typicky různí účetní, ekonomové atp., kteří používají makra v aplikacích MS Office, aniž jim rozumí. Prostě jim někdo ukázal funkci Zaznamenat makro a Spustit makro a oni ji používají. A to je skvělé.

Vážně. Dal bych nevím co, aby takovýhle makro rekordér obsahovala každá aplikace a považuji za zásadní nedostatek Google Apps, že ač obsahují mají svou obdobu maker – Apps Script, makro rekordér neobsahují.

Úvod pro laiky

Následuje úvod pro laiky, zkušení přeskočte až na tučný nadpis níže:

Poznámka: panel Developer/Vývojář, ve kterém se s Makry pracuje, musíte v novějších verzích Office extra zapnout – v aplikaci stistknete tlačítko Office (takové to kulaté vlevo nahoře), nebo Soubor (v nejnovějších Office), a tam „někde“ to bude – např. v anglickém Excel 2007 je to v Excel options (tlačítko dole) a zvolit Show Developer tab in the Ribbon, v českém Excel 2016 je to v Přizpůsobit pás karet a vpravo zaškrtnout Vývojář.

Rubriky
Užitečnosti

Překládejte snadno z/do cizích jazyků v prohlížeči

Jestli podobně jako já píšete či čtete v několika jazycích a občas hledáte správný překlad, tak nejspíš buď používáte nějaké složité a bůhvíco dělající rozšíření do prohlížeče, nebo jako já online Google Translator.

Jenže když těch jazyků používáte více, tak musíte neustále přepínat zdrojový a cílový jazyk, navíc standardně jsou vidět jen 3, takže to jsou další kliknutí – no prostě samé starosti. Přitom existuje snadné řešení – překlad přímo z adresního pole.

Rubriky
Užitečnosti

Automatické statistiky videí díky Google Sheets, Apps Script a YouTube Data API

Před pár dny jsem tu psal příspěvek o tom, jak si snadno udělat automaticky aktualizovaný přehled (nejen) vašich video kanálů s využitím Google Sheets, Apps Script a YouTube Data API. Mělo to jen jednu chybku – videím chyběly statistiky, tak to dnes napravíme.

Chybějící statistiky si vyžádaly nutnost přepsání celého skriptu, protože API YouTube.PlaylistItems neposkytuje statistická data, bylo potřeba použít další část YouTube Data API a to YouTube.Videos. Zároveň bylo potřeba skript optimalizovat, aby se nedotazoval na statistiky každého videa najednou a rovnou jsem skript také zpřehlednil.

Rubriky
Užitečnosti

Mějte přehled ve svých videích díky Google Scripts, Sheets a YouTube Data API

Možná víte, že jsem digital manažer výrobce značek Tefal, Krups, Rowenta pro ČR, SR a Maďarsko. A jedna z milých povinností, kterou mám na starosti, je i správa našich YouTube kanálů, kterých je celkem 5, plus jsou YouTube kanály našich spřátelených beauty blogerek atp.

Než jsem přišel, tak se to dělalo tak, že když někdo přidal YouTube video, tak pak vzal tu URL a napsal to do nějakého Excelu s nějakým názvem. Samozřejmě někdy zapomněl, nebyly tam popisky, náhledy atd.

Nesnáším, když se ztrácí čas prací, kterou lépe zastanou stroje a to je zrovna tento případ. Udělal jsem si proto jednoduchý Google (Sheets) Apps Script, který funguje takto:

  1. Vezme seznam všech listů v Google Tabulce a spustí nad nimi smyčku:
    • vezme název listu
    • zjistí, jestli existuje YouTube kanál, který se jmenuje jako název listu
    • když ano, smaže list a nahraje do něj seznam všech videí v daném YouTube kanálů – URL, URL obrázku, Titulek, Popis, Datum publikování
    • upraví formáty a např. funkcí IMAGE doplní aktuální obrázek videa
  2. A tenhle skript se spouští každou hodinu

Výsledkem tak je stále aktuální seznam všech videí na všech našich (resp. i cizích – libovolných zadaných) YouTube kanálech a když by někdo přidat nový kanál, tak prostě stačí přidat nový list, pojmenuje jej názvem kanálu a do hodiny se stáhne opět kompletní seznam (případně může stisknout tlačítko v menu a načte se hned). Je tam i záložka pro ruční zadávání videí, abychom měli přehled i o takových, která jsou na jiné službě nebo u někoho, u koho nepotřebujeme kompletní přehled.

Takže jak na to?

V první fázi je potřeba funkce, která stáhne seznam videí z YouTube přes standardní YouTube Service, která je součástí App Scriptu a využívá YouTube Data API.

Původně jsem se domníval, že to udělám jako funkci Tabulek, tedy že napíšu =youtube(„nazev-kanalu“) a ono to rovnou vyplní tabulku daty. Jenže jak jsem později zjistil, ve funkcích YouTube Service nefunguje, musel bych to řešit dotazováním na URL z Data API a to mi za to nestálo.

Funkce je to myslím primitivní, snad jedinou komplikací je to, že stahuji videa po 25. a stránkuji, abych se vyhnul problémům u obsáhlých kanálů. Z vrácené hodnoty (viz dokumentace k Playlistitems) vypreparuji kýžené detaily a ty ukládám do pole, které pak vracím jako výsledek funkce:

/**
* Return YouTube videos details for given channel
*
* @param {string} username YouTube channel name (username) - see channel URL
* @return Array representing key params of YouTube videos in given channel
*/
function getVideos(username) {
 var results = YouTube.Channels.list('contentDetails', {forUsername: username});
 var array = [];
 for(var i in results.items) {
 var item = results.items[i];
 // Get the playlist ID, which is nested in contentDetails, as described in the
 // Channel resource: https://developers.google.com/youtube/v3/docs/channels
 var playlistId = item.contentDetails.relatedPlaylists.uploads;
 
 var nextPageToken = '';
 
 // This loop retrieves a set of playlist items and checks the nextPageToken in the
 // response to determine whether the list contains additional items. It repeats that process
 // until it has retrieved all of the items in the list.
 while (nextPageToken != null) {
 var playlistResponse = YouTube.PlaylistItems.list('snippet', {
 playlistId: playlistId,
 maxResults: 25,
 pageToken: nextPageToken
 });
 
 for (var j = 0; j < playlistResponse.items.length; j++) {
 var playlistItem = playlistResponse.items[j];
 array.push([
 playlistItem.snippet.resourceId.videoId,
 playlistItem.snippet.thumbnails['default']['url'],
 playlistItem.snippet.title,
 playlistItem.snippet.description,
 playlistItem.snippet.publishedAt,
 
 ]);
 }
 nextPageToken = playlistResponse.nextPageToken;
 }
 }
 return array;
 }

Druhá funkce řeší to procházení všech listů v aktuální tabulce, zjištění názvů a vyplnění hodnot z YouTube:

function getSheetsVideos () {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  
  for (var n = 0; n < sheets.length ; n++ ) {    
    var sheet = ss.getSheets()[n];
    var sheetName = sheet.getName();
    var videos = (getVideos (sheetName)); 
    if (videos.length == 0) continue;
    sheet.clear();
    sheet.appendRow(['URL','Thumbnail','Title','Description', 'Published at']) ;
    var values = [];
    for (var video in videos) {
      values.push(["https://www.youtube"+".com/watch?v="+videos[video][0],'=image("'+videos[video][1]+'")',videos[video][2],videos[video][3], new Date(videos[video][4])]);
    }
    sheet.getRange(2, 1, videos.length , 5).setValues(values)    
    sheet.getDataRange().setVerticalAlignment("middle");
    sheet.setColumnWidth(1, 320);
    sheet.setColumnWidth(2, 120);
    sheet.setColumnWidth(3, 300);
    sheet.setColumnWidth(4, 400);    
    sheet.setColumnWidth(5, 100); 
    sheet.getRange("C:D").setWrap(true);
    sheet.getRange("1:1").setFontWeight("bold");
    sheet.getRange("C:C").setFontWeight("bold");
    for(var i=2; i<=videos.length+1; i++){
      sheet.setRowHeight(i, 90);
    };
  }
}

No a to je vlastně všechno, ještě jsem přidal funkci, která při otevření sešitu vytvoří položku v menu pro aktualizaci všech videí, kdybych to potřeboval rychleji než do hodiny:

function onOpen() {
 var ui = SpreadsheetApp.getUi();
 // Or DocumentApp or FormApp.
 ui.createMenu('Aktualizace')
 .addItem('Aktualizace všech videí', 'getSheetsVideos')
 .addToUi();
}

No a pak samozřejmě nastavit automatické stahování (Zdroje / Spouštěče aktuálního projektu). Před prvním spuštěním bylo také třeba zapnout podporu YouTube Data API (Zdroje / Pokročilé služby Google) a tuším to chtělo i nějakou autorizaci. Výsledek vidíte na obrázku

Podnět pro vás: co takhle tam přidat statistiky shlédnutí videí? Kdo se do toho vrhnete? Napovím – Google Apps Script YouTube Analytics Service.

Rubriky
Užitečnosti

CSS: Nastavte nějaký rozměr jen moderním prohlížečům díky calc()

Občas se mi při kódování CSS stává, že staré prohlížeče (zejména tedy IE 8 a starší) něco zobrazují jinak – něco je nějak širší, vyšší, jinde atd. Způsobů jak to řešit je mnoho, většinou se použije nějaký jiný způsob, místo paddingu se použije margin, prvky se jinak přeskupí atd.  Ale někdy to prostě nejde či by řešení bylo složité.

Třeba teď jsem potřeboval nějakým flexbox prvkům nastavit width: 100%, aby zabraly celou šířku svého flexbox „sloupce“. No ale protože staré prohlížeče nemají flexbox, tak se u nich použije inline-block a tomu kdybych nastavil stejných 100 %, tak zabere celou šířku rodičovského prvku.

Vyřešil jsem to tak, že jsem prvku nastavil width:calc(100%). Tomu staré prohlížeče taky neporozumí, takže prostě ten width nenastaví.

Mimochodem calc je skvělá metoda a dostupná prakticky všude, která má spoustu zajímavých a praktických využití, doporučuji kodérům nastudovat.

Rubriky
Užitečnosti

Otevírejte např. mailto odkazy v Gmailu a webcal v Kalendáři

Pakliže používáte nějakou webovou aplikaci, např. Gmail, pro práci s maily, jistě jste někdy narazili na problém, že jste chtěli někde kliknout na mailto: odkaz a ono se nic nestalo.

Dříve se to řešilo různými prográmy či pluginy do prohlížeče, ale už nějakou dobu umí minimálně Chrome, Mozila a Opera automaticky zaregistrovat libovolnou stránku k libovolnému URI schématu (i vlastnímu).

Chrome vám to v případě Gmailu i tuším jednou vyloženě nabídne, ale když to přehlédnete, tak už na to nemusíte narazit. Přitom je to velmi jednoduché – stačí si všimnout nenápadné ikonky vpravo v URL liště, která se tam objeví vždy, když mají stránky nějaký takový link handler k dispozici. Stačí pak kliknout, zvolit Povolit a potvrdit a služba je s příslušným handlerem spárovaná.

Podobně to umí i v Kalendáři se standardními webcal odkazy. We Windows 10 na vás možná vyskočí hláška, že je třeba to změnit v System / Default Apps / Choose default program by protocol (přiřadíte tam Chrome).

Jestli chcete prověřit současné přiřazení, či jej chcete smazat, navštivte stránku chrome://settings/handlers. (jak je to v jiných prohlížečích si vygůglete sami).

Zajímá-li vás, jak se může nějaká stránka přihlásit k nějakému takovému handleru, protože byste to chtěli třeba nějak užitečně využít ve vaší webové aplikaci, pak vězte, že je to strašně jednoduché – stačí jeden řádek a funkce registerProtocolHandler.

Např. kdyby Seznam chtěl zaregistrovat, aby jste po zadání kliknutí na odkaz s URI hledej:nějaká+fráze skočili na jeho vyhledavač, stačilo by, aby kamkoliv přidal následující skript

<script type="text/javascript">
 navigator.registerProtocolHandler("hledej",
 "http://search.seznam.cz/?q=%s",
 "Hledej na Seznamu");
</script>

Ten zajistí, že se v URI objeví ta podivná ikonka, takže pak už vás jen bude muset přesvědčit, abyste na ní klikli a je to.

Z praktičtějšího soudku – řekněme, že vyvíjíte nějakou nějakou aplikaci pro správu úkolů, která poběží někde na různých doménách různých klientů, a chcete přitom, aby si mohli snadno zadávat úkoly a posílat je libovolným programem. Takže vytvoříte třeba schéma pro task:Název+úkolu&date=21.09.2015&from=email@example.com a uživatel, který dostane takový odkaz a klikne na něj, dostane task rovnou do své aplikace na svém serveru (jednotlivé parametry si odchytíte v té aplikci).

Protože je tahle funkcionalita ve zmíněných prohlížečích už 4 roky a je takhle primitivní pro nasazení, je trochu s podivem, že není k dispozici ani např. u největšího českého mailového poskytovatele – Seznamu. Tak snad jim můj post otevře oči.

Rubriky
Užitečnosti

Jak zjistit zapamatované heslo v prohlížeči

Nevím jak vy, ale já si ukládám hesla v prohlížeči, páč mám různě unikátní, ale dost často pak potřebuji to zapomenuté heslo zjistit, třeba proto, že jej potřebuji napsat i do mobilní aplikace dané služby či v jiném profilu prohlížeče.

Takže když pak na mě vyskočí přihlašovací okno, kde je heslo vyplněné, ale za hvězdičkami, tak musím použít drobný fígl, abych jej zjistil – prostě změním typ příslušného password políčka něco jiného. Tedy kliknu pravým na políčko s heslem, zvolím Inspect element (Prozkoumat prvek) a v editaci elementu kliknu na type=“password“ a to „password“ (třeba) smažu a potvrdím. Heslo se pak hned objeví.

P.S.: vím, že na to existuje tuna rozšíření, ale instalovat kvůli takové prkotině nějaké rozšíření, které má pak z principu přístup k obsahu všeho co prohlížíte, považuji za nerozum.
Update: Jak mě upozornil správně kámoš, Chrome má speciální stránku, kde lze heslo také najít, ale buď si ji musíte uložit/zapamatovat, nebo se k ní proklikat přes asi 5 tlačítek a pak do ní ještě vyplnit ten web, kde jste. Tohle mé řešení je na dvě vteřiny.

Rubriky
Užitečnosti

MS Windows 10 to Go – počítač na USB

Takhle vypadá můj počítač s Windows 10. Ne to černé vzadu, ale ten USB flash disk, který mám na klíčích v noži od Victorinox.

Na tom flashdisku jsou plnohodnotné Windows 10, s mými nastaveními, s mými aplikacemi, s mým přihlášením a se svými soubory synchronizovanými s ostatními počítači v cloudu. Mohu jej připojit ke kterémukoliv počítači na kterém může být cokoliv (či nic), nabootovat z něj a mám hned „svůj“ počítač.

Tahle vymožnost se jmenuje Windows to Go, Windows jí nabízí standardně ve své Enterprise edici, ale nic vám nebrání ji vytvořit i třeba z vaší Home edice. Stačí vám ISO libovolné Windows 10 instalace (které si můžete stáhnout pomocí tohoto nástroje přímo z Microsoftu).

A když nemáte Enterprise edici (kde toho dosáhnete snadno tím, že dáte vyhledat Windows To Go Creator Wizard, kliknete a pokračujete podle pokynů), tak pak budete potřebovat ještě aplikaci, která z vašeho USB klíče vytvoří bootovací a nahraje na něj správným způsobem data z toho ISO souboru. Doporučuji jeden z těchto dvou:

  • Rufus – v češtině, rychlý a přehledný. Poté co v něm zvolíte „Vytvořit bootovatelný disk“ a vyberete příslušný Obraz ISO z vedlejšího výběrového seznamu, se pod tím objeví volba Windows to Go. Kliknete na Start a hotovo. Bohužel, mě to hlásilo nějakou nekompatibilní flešku (oficiálně totiž MS podporuje jen asi 10 USB disků) a po chvíli i chybu, po které to přestalo pracovat.
  • WinToUSB (stačí verze zdarma) – v angličtině, pomalý a ošklivý. V ISO file vyberete ISO s vaším Windows, Next, zvolíte disk a potvrdíte oddíly, kam se nahraje, Next a hotovo.

Pro ty kdo zdají Linux, je to něco jako Live Linux, až na to, že to funguje 🙂 – tedy fungují bez modlení a hackování všechny periferie a aplikace. Samozřejmě je to taky pomalé až hrůza (použijte nejlépe nějaký rychlý USB disk s minimálně 16 GB a počítač s hodně paměti, obojí optimálně na USB 3.0), ale berte to jako nouzovku. A samozřejmě tam, kde je v BIOSu zakázáno bootovat z flash disků vám to nepomůže.

P.S. standardně po startu nevidíte pevné disky toho hostujícího počítače (bezpečnost). Lze je zpřístupnit: Win+x / Správa disků / kliknout pravým na váš hardisk v dolním seznamu (nejspíše to bude Disk 0, bude u něj červená šipka dolů) / Online.

P.S.: pakliže vám stačí Google Chrome prohlížeč, Chrome aplikace, data na Google disku a nutný internet, tak vám možná postačí přihlášení s vlastním profilem v Chrome na hostujícím počítači. Nebo si uděláte podobné USB třeba s Chromixium (kde je pro tu „systémovou“ část Linux). A nebo tedy můžete použít libovolný Live Linux pro USB, třeba LinuxLiveUSB.