Přeskočit na obsah
Naše paměť

Od chatu ke skriptu

Pro pokročilé: proč se práce s modelem vyplatí rozdělit na dávky, nechat si napsat skript místo odpovědi a hlavně průběžně měřit, jestli postup ještě funguje.

9 minut čtení

Proč chat po čase přestane stačit

Rozhovor s modelem je skvělý na jednu otázku. Přečtete si odpověď, posoudíte ji a jdete dál. Jakmile ale stejnou věc potřebujete udělat po sté, začne se okno chatu vzpírat. Odpověď se při dalším spuštění může lišit, zadání se v historii chatu hledá špatně a po týdnu jen stěží zopakujete postup, který posledně vyšel.

Pokročilá práce s modelem se od té běžné neliší tím, že by šlo o chytřejší otázky. Liší se tím, že přestanete sbírat odpovědi a začnete stavět postup, který jde spustit znovu a u kterého se dá změřit, jak dopadl.

Dávka místo jednoho velkého požadavku

Když máte před sebou tři sta zápisů, je svůdné podat je modelu najednou. Výsledek pak vypadá úctyhodně, ale těžko se v něm pozná, ve které části a po jaké změně přesnost klesla.

Dělejte to obráceně. Nejdřív vezměte malý vzorek, u kterého sami víte, co má vyjít. Na počtu tolik nezáleží jako na složení: vyberte zápisy z různých období, od různých písařů a v obou jazycích, které se v knize střídají. Vzorek deseti zápisů z jedné strany vám řekne jen to, jak si model poradí s tou stranou. Projděte výsledek řádek po řádku a spočítejte, kolikrát se model strefil. Teprve když to sedí, pusťte zbytek, a i pak po dávkách, mezi kterými se podíváte na výsledek.

Namátkové kontroly se nezbavujte ani potom. Dobrý vzorek na začátku není důkaz o zbytku knihy, je to jen důvod pokračovat.

A hlavně si pohlídejte, co vám vzorek vlastně říká. Měří, jak dobře postup pracuje, ne jestli je pravdivý jednotlivý údaj. Každý zápis, který chcete převzít do rodokmenu, si proto ještě porovnejte s pramenem. Úspěšná dávka není ověření předka.

Rozdělení na dávky má ještě jednu výhodu, kterou oceníte až při chybě. Platí ale jen tehdy, když každá dávka ukládá svůj výsledek zvlášť a původních dat se nedotýká. Za té podmínky vám chyba uprostřed práce sebere jednu dávku, ne celý den.

Nechte si napsat skript, ne odpověď

Tohle je největší rozdíl mezi začátečníkem a pokročilým. Začátečník se ptá: „Přepiš mi tyhle údaje do tabulky." Pokročilý se ptá: „Napiš mi program, který ty údaje do tabulky přepíše, a vysvětli, co dělá."

Rozdíl je v tom, co vám zůstane v ruce. Odpověď je jednorázová a při dalším běhu vyjde jinak. Program uděláte jednou, přečtete si ho, opravíte, co se vám nezdá, a pak ho pouštíte znovu. Navíc je vidět, podle čeho se rozhoduje. U odpovědi z modelu nevidíte nic.

Jedno upřesnění, na kterém hodně záleží. Program, který jen přerovnává, počítá a porovnává, dá při stejném vstupu a nezměněném nastavení stejný výsledek. Program, který se uvnitř ptá modelu, tuhle vlastnost nemá: pokaždé může odpovědět trochu jinak, i když ho nezměníte, a vidíte sice, jak je řízený, ale ne proč se model rozhodl zrovna takhle. Vyplatí se vědět, kterou z těch dvou věcí zrovna máte, protože jen u té první má smysl očekávat, že se výsledek nebude měnit.

Platí u toho ještě jedno pravidlo, které si hlídáme: program čtete vy, ne model. Nemusíte umět programovat, ale musíte rozumět tomu, co dělá. Nechte si ho vysvětlit řádek po řádku, ptejte se, co se stane, když narazí na něco nečekaného, a nespouštějte nic, čemu nerozumíte. Když nevíte, co program dělá, není to hotová práce, je to slib.

Zadání do souboru, ne do okna

Jakmile začnete psát delší zadání, přestaňte je vpisovat přímo do okna. Napište je do souboru a ten souboru předejte.

Má to tři důvody. Zadání si můžete přečíst před odesláním celé, což je u dlouhého textu v úzkém okně podstatně těžší. Zůstane vám zapsané, takže za měsíc víte, na co jste se ptali. A dá se opravit a pustit znovu, místo aby se psalo od začátku.

U nás k tomu přibyl ještě čtvrtý důvod, praktický: dlouhý český text s diakritikou vepsaný přímo do příkazu se nám opakovaně rozbil. Ze souboru to prochází spolehlivěji. Jen si pohlídejte, ať je soubor uložený v kódování UTF-8; při jiném kódování se háčky a čárky mohou rozsypat už při čtení a model pak dostane něco jiného, než jste napsali.

Běh na pozadí potřebuje strop

Dlouhé zpracování nechte běžet na pozadí a věnujte se mezitím něčemu jinému. Než to ale poprvé spustíte, dopište dvě věci: kam se ukládá průběžný výstup a kdy to má samo skončit.

Postup, který si sám neurčí strop, umí běžet do rána. Když k tomu sahá po síti, umí do rána zatěžovat i cizí server. Ten strop patří do samotného programu, ne do textu zadání pro model: nejvyšší počet opakování a nejdelší přípustná doba běhu se zapisují do kódu, který to řídí. Prosba v zadání není pojistka.

U cizího archivního serveru samotný časový strop nestačí. Program stihne i za minutu poslat víc požadavků, než kolik jich tam čekají za hodinu, zvlášť když se po neúspěchu sám opakuje. Omezte proto i rychlost a počet souběžných požadavků, dejte opakovaným pokusům rozestup a držte se pravidel provozovatele. O tom, kde přesně ta hranice leží, píšeme podrobněji v článku o stahování skenů.

Kanárek: jak poznáte, že to ještě měří

Tohle je past, na kterou jsme sami narazili. Postup, který hledá chyby, po několika opravách hlásí, že je čisto. Jenže „našel jsem nula chyb" a „nic jsem neprohledal" vypadá ve výpisu úplně stejně.

Řešení je jednoduché a neocenitelné: ke každému běhu přidejte jeden umělý záznam, u kterého víte, že chybu má. Když ho postup přestane nacházet, není hotovo, je rozbito. Ten záměrně vadný záznam se u nás jmenuje kanárek a bez něj už měření nespouštíme.

Dvě věci k němu patří neoddělitelně. Kanárek musí být umělý a oddělený, ať se nemůže dostat mezi skutečné výsledky; nikdy nekazte vlastní data, abyste měli co hledat. A jeden kanárek potvrzuje jen tu jednu cestu, kterou prochází: že se našel, neznamená, že postup najde i chybu jiného druhu.

Tomu se věnujeme podrobněji v samostatném článku o známé odpovědi.

Kontrola musí umět říct „neumím měřit"

Každá kontrola má tři možné výsledky, ne dva. Čisto, nález, a neumím měřit.

Ten třetí je ten důležitý. Když kontrole chybí podklad, nenastartuje se prostředí nebo je soubor nečitelný, nesmí to hlásit ani čisto, ani chybu. Kontrola, která nečitelný soubor tiše přeskočí a ohlásí čisto, je horší než žádná, protože vám dodá klidné svědomí bez měření.

Když kontrola naopak potíž prostředí ohlásí jako nález, dopadne to hůř, než se zdá: po několika falešných poplaších hrozí, že jí přestanete věřit, a to i ve chvíli, kdy najde něco skutečného.

U sebe tohle rozlišujeme i tam, kde se kontroly spouštějí automaticky. Každý program po doběhnutí ohlásí jedno číslo, podle kterého se pozná, jak dopadl. Naše kontroly hlásí nulu, když je čisto, jedničku, když něco našly, a dvojku, když měřit nešlo. Je to drobnost na půl řádku, a přitom nejjednodušší způsob, jak automaticky odlišit „prošlo to" od „vůbec se to nespustilo".

Sabotáž: zkouška samotného měřidla

Zelený výsledek sám o sobě nic nedokazuje. Může znamenat, že je všechno v pořádku, nebo že se kontrola vůbec nespustila.

Spolehlivý způsob, jak to rozlišit, je rozbít to schválně. Vyrobte si chybu, o které víte, a přesvědčte se, že ji kontrola najde. Zabere to dvě minuty a je to chvíle, kdy se o svém měřidle dozvíte pravdu.

Jedna věc je u toho podmínkou, ne doporučením: chybu zanášejte do umělého příkladu nebo do oddělené kopie, nikdy do svých skutečných dat. Vrácení chyby zpátky vypadá jako formalita, ale je to přesně ten krok, na který se zapomíná, a vadný údaj pak putuje dál do rodokmenu. Data, která nemáte jak obnovit, se ke zkouškám nepoužívají.

Pozor i na pořadí: sabotáž má cenu jen proti zelenému výsledku, který jste předtím opravdu viděli. Rozbíjet něco, co nikdy neprošlo, vám neřekne nic.

Ty tři poslední oddíly spolu souvisejí, ale každý řeší něco jiného, a vyplatí se je nezaměňovat. Kanárek hlídá, že hledání ještě probíhá. Třetí stav hlídá, že se nevydává nezměřeno za čisto. Sabotáž je jednorázová zkouška, jestli měřidlo vůbec funguje. Doplňují se a žádný z nich sám nestačí; kdo si na to udělá sadu umělých příkladů se známým výsledkem, pokryje kanárka i sabotáž najednou.

Osmdesátý zápis bude jiný

Tohle je past, kterou vám žádné měřidlo samo nepřipomene. Postup si vyzkoušíte na začátku knihy, funguje, pustíte zbytek. A někde uprostřed se změní písař, zápisy přejdou z češtiny do latiny, přibude kolonka, která dřív nebyla, nebo písař začne k záznamu připisovat poznámky na okraj.

Program v tu chvíli nemusí spadnout. Spadnutí by bylo milosrdné, protože byste si toho všimli. Místo toho může tiše vyplnit, co umí, a zbytek vynechat. Postup, který se uvnitř ptá modelu, umí chybějící obsah navíc věrohodně doplnit, a to je z obou možností horší.

Bránit se proti tomu dá dvěma způsoby a oba se vyplatí. Za prvé: ať postup vypíše, co nedokázal přečíst, místo aby to přeskočil. Prázdná kolonka v poznámce je informace, chybějící řádek není. Za druhé: dívejte se do výsledků i uprostřed práce, ne jen na jejím začátku a konci. Změna písaře se při porovnání s pramenem obvykle ukáže. Bez toho porovnání se nepozná vůbec.

Useknutý vstup se tváří jako úplný

Poslední past je ze všech nejtišší. Vezmete výpis, ukážete jeho začátek a měříte nad ním. Jenže ukázali jste si prvních pár řádků, ne celek, a měření teď platí pro ně.

Stalo se nám to při porovnávání dvou měření: jedno z nich bylo useknuté a rozdíl mezi nimi vypadal jako nález. Ve skutečnosti to byl rozdíl mezi celkem a jeho začátkem.

Pravidlo, které jsme si z toho odnesli: krátit se smí až za měřením, nikdy před ním. Totéž platí pro zmenšeniny skenů, omezený počet řádků v dotazu i pro náhled, který ukazuje jen část.

Kdy se to nevyplatí

Nic z toho nemá smysl u práce, kterou uděláte jednou. Postavit dávkové zpracování, napsat skript a přidat k němu měření zabere víc času než ručně přepsat dvacet zápisů.

Hranice, podle které se rozhodujeme, zní: budu to dělat znovu, je toho hodně a nese chyba následky? Čím víc těch tří platí, tím spíš skript. Když neplatí ani jedno, otevřete chat a mějte to za sebou.

Druhá hranice je citlivost. Čím osobnější údaje zpracováváte, tím spíš patří všechno na váš počítač a tím opatrněji se rozhoduje, co vůbec někam posíláte.

Co si z toho odnést

Pokročilá práce s modelem stojí na čtyřech věcech. Dělte práci na dávky a každou si prohlédněte, protože vzorek ze začátku knihy není důkaz o jejím zbytku. Nechte si napsat postup, ne odpověď. Zadání pište do souboru, ať se dá přečíst a zopakovat. A hlavně měřte tak, abyste poznali rozdíl mezi „je to v pořádku" a „nic se neměřilo".

Ta poslední věc je nejtěžší a bez ní vám zbylé tři tichou chybu neodhalí. Sama ale taky nestačí: pořád platí, že údaj do rodokmenu potvrzuje pramen, ne postup, kterým jste se k němu dostali.

Psali: Vašek Mareš · Ford Prefect · Marvin · Hlubina myšlení

Postupy v článku popisují, jak pracujeme my. Každý z nich vznikl z chyby, kterou jsme si sami způsobili.