20. 12. 2012

Miroslav Kučera: Vyhledávač připomíná obrovskou magii

Miroslav Kučera pracuje v Seznam.cz od roku 2004. Po roční přestávce v Mladé Frontě nastoupil v roce 2010 jako programátor vyhledávače. Zná tedy do detailu „vnitřnosti“ nástroje, který každý den využívají statisíce uživatelů. V odborné komunitě je Miroslav známý pod přezdívkou Wendigo a stojí za ním práce na několika webových počítačových hrách od Pexesa po X-Pired.

Miroslav Kučera aka WendigoJak jsi přišel k přezdívce Wendigo?

Je to podle indiánské příšery, která vystupovala jako vedlejší postava v Řbitově zviřátek od Stephena Kinga. Když jsem v roce 1995 potřeboval login na BBS, tak jsem to právě četl. A přišlo mi, že vyčnívám podobně jako Wendigo.

Vím o tobě, že hodně čteš. Věnuješ se literatuře i nějak teoreticky? Zajímáš se třeba o historii?

Systematicky se jí nevěnuju. O svých oblíbených autorech si čtu, třeba o Vančurovi. Čím jsem starší, tím víc se vracím ke klasické beletrii, kterou jsem ve škole nečetl, ačkoliv jsem měl. V patnácti nebo sedmnácti čte člověk spíše Pána prstenů nebo intelektuální čtivo, kterému ve skutečnosti vůbec nerozumí. Teď si mnohem více užívám právě klasiku.

Čtou programátoři fikci? Nevěnují se spíše literatuře faktů?

To úplně nesouvisí. Nechci generalizovat, ale programátoři čtou přinejmenším sci-fi a fantasy. Většinou ale nečtou klasickou beletrii. Čtení je dobrá relaxace od programování, protože je to úplně odlišná činnost a mozek funguje v jiném módu.

Vedle programování v Seznam.cz také vytváříš počítačové hry. Kdy a jak se tomu věnuješ?

Programování mě baví a na rozdíl od mnoha kolegů jsem schopen se mu věnovat i mimo pracovní dobu. Většinou nemám reálné problémy, které bych potřeboval řešit programováním. A tak pro zábavu vytvářím počítačové hry. Nebo spíš jejich prototypy. Ale pár jich je na internetu.

Jaké to jsou?

Kdysi dávno jsem publikoval X-pired, což je taková logicko-akční hra. Začala žít svým vlastním životem, jelikož se jedná o open-source. Lidi si X-Pired naportovali pro různé systémy – hrací konzole a podobně. Z poslední doby to jsou jednoduché webové hry v Java skriptu Puzzle a Pexeso. Nedávno jsem je upravoval i pro tablety, takže by měly jít ovládat dotyky.

Přejděme teď k Seznam.cz Vyhledávání, kde pracuješ jako programátor. V jakém jazyce se programuje?

Primárně v C++, některé součásti jsou v Javě, když využíváme Hadoop. Některé komponenty jsou napsány v Pythonu, zejména web.

Má C++ pro vyhledávání nějaké výhody?

Ten jazyk je nejbližší hardwaru, což se nám občas hodí. Navíc je C++ kompilovaný jazyk, což znamená, že je přeložený do strojového kódu. Nedochází tam k žádným interpretacím, takže je o malinko efektivnější.

Je něčím programování vyhledávače specifické?

Když programuju třeba hru nebo web, tak je to mnohem svobodnější práce, ve vyhledávání je každá věc provázaná se spoustou dalších. Je třeba stále pamatovat na to, že komponenty si mezi sebou musí rozumět. Každá změna v provázání komponent se navíc projednává s různými týmy lidí.

Vyhledávání je specifické tím, že do něj přichází počáteční signál přes velmi úzké hrdlo. Jsou to slova, která zadáš do vyhledávacího okénka. My se s nimi potom snažíme dělat obrovskou magii. U jiných softwarů přichází mnohem více impulzů od uživatele.

V čem spočívá ta magie?

Zadané slovo se dostane do metasearche, který se pokouší pochopit, co daný dotaz znamená. Například u čísel třeba zjišťuje, jestli to není telefonní číslo. Svým způsobem se snaží být chytřejší než uživatel, obohatit dotaz a zjistit, co vše by mohl znamenat. V ideálním případě by vzal v úvahu například všechny významy věty „Ženu holí stroj“, ale tak daleko zatím nejsme. Z metasearche získáme různé signály, které poté procházejí dalším procesem, který končí u výsledku vyhledávání. Celá tahle akce je navíc velmi omezená časem. Celý tento proces nesmí trvat déle než 2 vteřiny, ale ve skutečnosti by měl proběhnout mnohem, mnohem rychleji.

Byl někdy zadán dotaz, na nějž vyhledání relevantních odpovědí trvalo déle, než je tento limit?

V zásadě každý dotaz obsahující jen extrémně častá slova jako „copyright“ nebo spojky narazí na tento limit. Ten problém řešíme tak, že máme stránky setříděné dopředu podle jejich statistické kvality v Internetu. Když se tedy u složitých dotazů blížíme časovému limitu, tak vydáme výsledek, který nešel až do největší možné hloubky, jelikož víme, že tam nejsou pro uživatele natolik relevantní weby. Naším cílem ale je se za každých okolností dostat doopravdy co nejhlouběji v indexu. Kdybychom toto omezení zrušili, možná by se zlepšila relevance výsledků o několik procent, ale stroje bychom museli přihazovat do serveroven vidlemi.

V Seznam.cz jsi od února 2004. Vyhledávání bylo spuštěno 15. března 2005. Musel jsi tedy být jeden z jeho prvních programátorů. Je to tak?

Není. Já nebyl vždy programátor vyhledávání. Do Seznamu jsem přišel jako PHP programátor. Byl jsem součástí týmu, který měl dělat weby pro obchodníky – první, co jsem dělal, byl web pro Sauto.cz, následně Sreality.cz. Až když jsem se jednou prokecnul, že umím programovat i v C++, tak jsem začal dostávat práci i v tomto jazyku. Tehdy bylo asi 20 vývojářů pro celý Seznam.cz, takže vlastně všichni dělali všechno. Součástí vyhledávání jsem byl na čtvrt roku asi v roce 2006, kdy jsem ho chvíli programoval – ale byla to taková údržbářská práce. Tehdy bylo ve vyhledávání velmi klidné období, kdy se jen řešily známé bugy.

Dáš nějaký příklad?

První bug, který jsem řešil, bylo ořezávání hvězdiček u hotelů. Když zadáš například „hotel praha“, tak ti vyjede několik výsledků hotelů. Jenomže my, protože nechceme vydávat do výsledků balast, tak když se opakují znaky, zařízneme je po třech znacích. Jenomže tím vznikl problém u 4 a 5hvězdičkových hotelů. Hvězdička musela dostat výjimku, že se oříznou jen v případě, kdy jich je více než 5.

Lišilo se tehdy nějak programování vyhledávání od současnosti?

V porovnání s dnešním stavem bylo tehdy programování vyhledávače mnohem dobrodružnější. Databáze se měnila inkrementálně – to znamená, že robot zpracovával každou nově staženou stránku a „vlepil“ ji do existující databáze. Dnes máme uložené všechny stránky, které jsme stáhli a chceme indexovat, v Hadoop. Disponujeme tak obrovským množstvím postahovaných stránek, a když je chceme zaindexovat, tak je vezmeme jako celek a vyrobíme z toho komplexní databázi a v té poté vyhledáváme. Kdyby se nedej bože tehdy udělala chyba v indexaci, tak ji nešlo vrátit – chybu zkrátka nešlo odstranit. Navíc v letech 2005-2006 jsme neměli takové diskové kapacity, abychom mohli takto velkou databázi zálohovat. Špatné zaindexování tak mohlo nenávratně pokazit celou hledací databázi.

Stalo se to někdy?

Naštěstí se nám to nestalo. Nebo minimálně se nestalo nic, co by se v databázi masivně projevilo.

Ty jsi ze Seznam.cz na nějaký čas také odešel. Proč?

Došlo k tomu v roce 2009. Odešel jsem do Mladé fronty. Já tehdy programoval asi 2 roky v kuse Mapy.cz a už mi to nějak začalo lézt krkem. Potřeboval jsem nutně změnu. Navíc byl Seznam.cz jediná firma, kde jsem byl do té doby zaměstnaný, a říkal jsem si, že by bylo fajn vyzkoušet i něco jiného.

Příliš dlouho jsi ale v Mladé frontě nevydržel.

Práce tam byla dost turbulentní. Programoval jsem webové aplikace, vedl tým, a plánování projektů bylo velice napjaté. U webů se zadání často mění pod rukama, každý člověk z vedení má nějaký názor, který je třeba zapracovat. To je zásadní rozdíl oproti programování vyhledávání, jelikož tam do toho mluví převážně lidé, kteří tomu rozumí. Není to zkrátka taková dojmologie, ale racionální řešení problému, což u programování webů moc nefunguje.

Nakonec ses do Seznam.cz vrátil a působíš zde dodnes. Vzpomeneš si na své pocity první den po návratu?

Pamatuju si, že první týden jsem si připadal jako na dovolené. Nikdo do mě nehučel každých 10 minut, co je třeba upravit a podobně. Byla to velmi příjemná změna.