NOVÉ HLASY pro kurz ČJ i AJ, reálný britský i americký přízvuk, automatické vyplňování vět v češtině



**16.9.2019 - Verze pro Firefox a Chrome.**



Jde o výrazné vylepšení systému výuky. Věnujete se jen angličtině, nezatěžujete mozek formulací českých vět, význam vnímáte rovnou v angličtině. Funguje to jak s kurzem angličtiny, tak s kurzem češtiny. Velmi doporučuji zejména těm z vás, kdo již máte dokončený celý strom angličtiny. Program se nemusí instalovat, jen se rozbalí (dvojklik a vybranou složku přetáhnete kamkoliv na disk nebo na plochu). Spouští se poklikáním na soubor duolingo.exe, který najdete v této nové složce. Můžete si udělat zástupce na plochu.


**Nastavte si prosím u tohoto tématu nahoře "SLEDOVÁNÍ DISKUSE" (FOLLOWING DISCUSSION), abyste se dozvěděli o novinkách a aktualizacích a přečtěte si celý tento úvodní příspěvek. Máte-li jakýkoliv problém s programem, nebádejte, ale napište sem. Rád Vám poradím.**


**Protože se program neinstaluje, je možné, že vám systém bude řvát, že ochránil váš počítač a nebo kdesi cosi... To musíte proklikat (Klik na "Další informace" a potom "Přesto spustit" nebo tak něco). Také se může stát, že bude řvát nějaký anti-malware nebo antivir. Opravdu s úplně klidným svědomím můžete přidat pro tento program nebo pro celou jeho složku vyjímku – vyřadit z testování.**  Antiviry sice přidávají nové verze programu do bezpečných, ale často s dost velkým zpožděním.


**Verze v.4.07 pro Mozilla Firefox i Google Chrome je ke stažení zde:**


 **<https://uloz.to/file/DSNb3Wk8WeJ8/vyuka-anglictiny-duolingo-zip>** 


**(aktualizace 12.2.2020 - Důležitá aktualizace v důsledku změny na straně Duolinga)**


**Hlasy (viz. níže) stahujte zde, velmi doporučuji nainstalovat:**


**<https://uloz.to/!Sx0iB5np2l4i/vyuka-anglictiny-duolingo-hlasy-zip>**


Protože štěstí přeje připraveným :-) , máme už i verzi pro Chrome. Zde již program umožňuje vše, co Duolingo nabízí, včetně kontroly výslovnosti pomocí mikrofonu. Kvůli ochraně před roboty a automatickému blokování cizího obsahu zde ale poněkud hapruje fórum a nastavení předvoleb uživatelského účtu. To můžete ale dělat ve vedlejším okně ve Firefoxu. **Nechcete-li používat mikrofon, použijte Firefox verzi! Ve Firefoxu mějte vypnuté blokování obsahu. To platí obecně, i bez programu. Používáte-li Chrome verzi, neodhlašujte se a nastavení účtu a diskuzi zásadně otevírejte ve vedlejším okně ve Firefoxu!** V případě, že to omylem nedodržíte, napište, poradím vám, co s tím.


Obě verze vyžadují odpovídající internetový prohlížeč, nainstalovaný standardně ve výchozím umístění. **Před používáním aplikace se přihlaste na [www.duolingo.com](http://www.duolingo.com) klasicky přes prohlížeč, uložte si heslo a neodhlašujte se, nastavte si velikost a výchozí pozici okna, případně odkazy na liště oblíbených apod.** Před spuštěním aplikace zavřete všechna ostatní okna prohlížeče. Program neukládá změny v uživatelském profilu Firefoxu, ani hesla.


U Firefoxové verze použijte rozbalenou složku DuolingoFirefox32bit nebo DuolingoFirefox64bit podle verze Firefoxu. Nevíte-li, klidně zkuste, jedna z nich se vám ujme. Začněte od DuolingoFirefox64bit.


Ani bych vám to neměl říkat, ale spustíte-li program jako správce (pravým tlačítkem na soubor s programem / Spustit jako správce), nainstalované prémiové hlasy (např. z balíčku ukázkových hlasů, viz. níže) vám budou fungovat nastálo. Nikomu to ale neříkejte :-) Spouštění programu jako správce můžete nastavit natrvalo - Pravým tlačítkem na soubor s programem / Vlastnosti / nahoře záložka Kompatibilita / dole zaškrtnout "Spustit tento program jako správce". Samozřejmě, podmínkou je, že váš systémový uživatelský účet na tom stroji má administrátorská práva.


**Balíček ukázkových hlasů (3 female + 2 male + 1 kid) je ke stažení zde, velmi doporučuji nainstalovat:**


 **<https://uloz.to/!Sx0iB5np2l4i/vyuka-anglictiny-duolingo-hlasy-zip>** 


Narazíte-li na nějaký problém s programem, napište prosím v jaké verzi a v jaké situaci k problému došlo a jak se to přesně chová. Dále prosím uveďte váš operační systém, platformu (32/64 bit) a zhruba charakteristiku stroje, alespoň stáří.


Ještě odkaz na stažení Firefoxu: <https://www.mozilla.org/cs/>


A odkaz na stažení Chrome: <https://www.google.com/intl/cs_CZ/chrome/>


(Stáhnete Installer, spustíte, vše potvrdíte.)


**17.7.2019 - Popis původní verze s ozvučením, stažení a instalace hlasů:**



Vždy jsem si přál ozvučit anglické věty v kurzu češtiny, ale kvůli tomu, jaká by s tím byla práce, jsem to nerealizoval. Bylo mi jasné, že oficiálně jako volitelná funkce se to neprosadí, i když by to bylo na straně Duolinga programátorsky opravdu velmi snadné. Navíc by se dalo argumentovat, že možnost ozvučení L1 by byla velmi přínosná pro slabozraké nebo nevidomé uživatele. No nic, neprosadili jsme již i možná lepší nápady.


Nicméně, když už je na světě program pro automatické vyplnění odpovědi v češtině, začalo být reálné znovu uvažovat o tom, dostat tam ozvučení zvenku. Přičemž by program mohl přečíst i odpověď. Po tom jsem také vždy toužil, protože jsem si nebyl jistý výslovností odpovědi, kterou jsem napsal. Na mé návrhy ale nikdo nereagoval.


**A nová verze s kompletním ozvučením anglických vět v kurzu AJ->ČJ a nové volitelné hlasy do kurzu ČJ->AJ jsou na světě.**


Vlevo nahoře vybíráte z nainstalovaných hlasů (před instalací případného nového hlasu program zavřete), posuvníkem můžete nastavovat rychlost, je tam i Želva, která se zapíná a vypíná (nechtělo se mi malovat s želvou, tak je tam jen popsané tlačítko). Dále je tam nastavení, zda chcete Číst zadání. V kurzu ČJ->AJ je vhodné zapnout reproduktor v nastavení Duolinga (kvůli poslechovým cvičením) a v programu zvolit “Se zpožděním” nebo “Nečíst zadání” tak, aby se to nemísilo s mluvčím z Duolinga. Při přechodu mezi kurzy češtiny a angličtiny se to nastaví automaticky. A nebo můžete v obou kurzech nechat vypnutý reproduktor Duolinga, zvolit normálně “Číst zadání” a nastavit si třeba nějakého britského mluvčího, ženský nebo mužský hlas, co vám vyhovuje. Tlačítkem "ČJ Auto" se dá vypnout automatické vyplňování odpovědí v češtině.


Program využívá systémové hlasy, kompatibilní se SAPI . Windows 7 , 8 i 10 vždy nějaké ty hlasy mají jako součást instalace systému, do desítek si je můžete dokonce zdarma přidávat. Samozřejmě ale, úplně nejlepší je nainstalovat alespoň pár precizních hlasů SAPI 5 22kHz nebo lépe 44kHz , balíček ukázkových hlasů (3 female + 2 male + 1 kid , zkušební verze na 1 měsíc) je ke stažení zde:


 **<https://uloz.to/!Sx0iB5np2l4i/vyuka-anglictiny-duolingo-hlasy-zip>** 


Po měsíci si můžete dát zase jiné hlasy. Jsem ale přesvědčen, že mnozí si koupíte minimálně jeden až dva kvalitní hlasy natrvalo. Jsou fakt skvělé. Tom je opravdu pěkně znějící Američan, Brian je realistický britský hlas. Všechny tři ženské hlasy (Amy-UK, Emma-UK a Salli-US) jsou velice příjemné a srozumitelné, vhodné zejména na dlouhodobější poslech. Justin (kid) je roztomilý, ale ze začátku mu asi nebudete moc rozumět. Vydržíte-li ale pár lekcí, začne se to výrazně zlepšovat a vytrénujete tím uši, srozumitelnost angličtiny se vám zlepší obecně. Je to Američan, není ale tak kvalitní jako Tom nebo Brian. Možná třeba vhodný pro lidi, kteří potřebují pracovat v AJ s dětmi. A nebo ho můžete jen tak na chvíli zvolit pro zlepšení nálady, je s ním opravdu občas sranda, jak něco zadrmolí. Po přepnutí hlasu program přehraje poslední větu, takže je možné si ji poslechnout v americké angličtině, porovnat s britskou a nebo prostě s ostatními, jak to kdo “vysloví”.


Pozor, vždy ale kupujte jen hlasy, **podporující standard SAPI 5** (z těch kvalitních jsou to téměř všechny, ale existují i vyjímky, např. bohužel úžasné hlasy Acapela, využívající technologii neuronových sítí). Můžete vybírat třeba zde:


<https://harposoftware.com/en/2-main/s-1/index/category-all>
<https://www.cereproc.com/storesapi>


Ceny za velmi kvalitní a realistické hlasy jsou do 40 Euro, to jde, zvážíte-li, že dohromady s Duolingem vytvoříte skvělý nástroj, který vás opravdu naučí aktivně používat angličtinu. Navíc tyto servery nabízejí i balíčky několika hlasů za velmi výhodné ceny. V ceně bývají i upgrade, lze očekávat, že brzy díky využití technologií neuronových sítí budou skutečně k nerozeznání od lidí. Než ale koupíte balíček, opravdu si všechny vyzkoušejte (trial verze) a nebo alespoň poslechněte (demo na webu). Dále, tyto hlasy můžete využívat např. i na čtení knih nebo jakýchkoliv jiných textů (ke kterým není klasické audio), čímž se ještě více zdokonalíte, budete-li si to ze začátku číst spolu s ním (možnost nastavení rychlosti je super). Žádný software (např. SPEECH2GO – S2G) nekupujte, ani jako součást balíčku, není třeba. Budte-li chtít zakoupený hlas využívat i jinak, použijte např.: <http://balabolka.site> je fakt dobrý, umí i na pozadí zachytávat a číst schránku (CTRL + C).


**Při učení používejte klávesnici, tak je učení nejúčinnější.**


**1.7.2019 - Popis základní verze programu:**



Když jsem viděl, jak beznadějná je ta situace s umožněním uživatelského nastavení poměru překladů do / z cizího jazyka, pustil jsem se do toho. Bohužel, se scriptem v Chrome se občas stávalo, že duolingo přestalo odpovídat. Možná nemělo zrovna své dny, možná nějakým geniálním způsobem detekovalo můj script, přestože jsem si opravdu velmi vyhrál s časováním, až do té fáze, že byl podle mého názoru od reálného uživatele nerozeznatelný. Tak jsem to hodil do Céčka – a ono to maká úplně skvěle.


Totálně to předčilo moje očekávání, za týden jsem udělal obrovský pokrok v učení. Věnujete se jen AJ, nezatěžujete mozek formulací českých vět, význam vnímáte rovnou v AJ. Funguje to jak s kurzem angličtiny, tak s kurzem češtiny. Odbourání vypisování českých vět bylo skvělé, tak jsem nakonec zrušil i to protivné oklidávání českých vět v kurzu češtiny; nebylo to už příliš programově náročné – a to bylo nečekaně další velké zlepšení v učení.


Takže je to malinká aplikace (120kB) pro Windows, nemusí se instalovat, jen se rozbalí do nějakého adresáře. Aplikace si po spuštění sama otevře internetový prohlížeč a v něm Duolingo. Je tam vlastní program (Duolingo.exe), 3 pomocné soubory a soubor “Vety.csv” . Právě formát .csv přináší navíc tu velkou výhodu, že si ho můžete i prohlížet – např. v Excelu nebo LibreOffice (ke stažení zdarma), věty si řadit podle dovedností nebo času, kdy jste se je učili a třeba si je jen připomenout, nebo se vyzkoušet zakrytím anglické verze. Úmyslně je každá jazyková varianta ve svém sloupci, nezávisle na tom, z jakého směru překladu pochází.


Jak to tedy funguje? Když vám naskočí věta, kterou nechcete vypisovat, prostě zmáčknete ENTER a už jí nikdy nebudete muset vypisovat. Nebo jí můžete (jednou) vypsat ručně. Příště už se vždy vyplní sama a jen ji odenterujete. V kurzu angličtiny doporučuji mít zapnutý reproduktor, anglickou větu si tak vyslechnete, můžete si jí zkusit zopakovat. Anglickou větu vnímejte pozorně a uvědomujte si její význam. Kdyby vás náhodou napadl nějaký jiný český překlad, samozřejmě můžete automaticky předvyplněnou odpověď vymazat a napsat tam to, co vás napadlo, abyste zjistili, zda je to také správný význam zadané věty. Podobně s úlohami typu “Mark the correct meaning”. Doporučuji české varianty vůbec nečíst, jen na klávesnici šáhnout nahoru na nějaké číslo (1 – 3), je to jedno jaké, a odentrovat. Když se náhodou nestrefíte, příště už se vybere správná varianta sama. Vše funguje pouze ve směru překladu z AJ do ČJ a u úloh typu “Select the missing word” , kde vybíráte čeké slovo do české věty.


V souboru Vety.csv jsem nechal pár testovacích vět. Tento soubor můžete vymazat a postupně ho během učení plnit, program se tak bude vlastně učit spolu s vámi. A nebo ho nechte, vaše věty tam budou přibývat. A nebo můžete navíc použít tlačítko “HLEDAT VĚTY”, potom se vám budou doplňovat i věty, které jste ještě neprocvičovali. Osobně doporučuji tuto třetí variantu, zejména studentům, kteří již mají několik měsíců dokončený celý strom AJ i CJ kurzu. **Nezapínejte ho ale hned po spuštění programu, ale až když má zpracované vstupní soubory. Neuděláte chybu, když ho zapnete až po pár dnech.** Program si stav tohoto tlačítka pamatuje i při příštím spuštění, až do případné aktualizace.
**Nová verze programu (v.4.06) je ke stažení, jde o důležitou aktualizaci v důsledku změny na straně Duolinga. Znovu zprovozňuje automatické vyplňování českých vět. Obsahuje také drobná vylepšení, například optimalizované zpracování dat. Inicializace po spuštění programu bude tak o něco rychlejší.** 


**Stahujte zde:**


**<https://forum.duolingo.com/comment/34137897>**


Stačí stáhnout novou verzi programu, rozkliknout a zkopírovat jen soubor duolingo.exe do vašeho adresáře s programem. Všechno ostatní můžete nechat tak, jak je. Použijte ale soubor ze správného adresáře, podle toho, jestli používáte Chrome nebo Firefox variantu. Samozřejmě můžete použít i celou novou složku.
<h2> <a href="https://chrome.google.com/webstore/detail/speakit/pgeolalilifpodheeocdmbhehgnkkbak?utm\_source=chrome-ntp-icon">speakit!</a> </h2><p>věřím, že jsem nejlepší bezplatný software tts našel zdarma pomocí google chrome rozšíření s názvem "speakit". toto funguje pouze v prohlížeči chrome pro mě na ubuntu). s chromiem z nějakého důvodu nefunguje. mluvíme o dvou ženských hlasech, které znějí velmi realisticky ve srovnání se vším ostatním. tam jsou uvedeny alespoň další čtyři mužské a ženské hlasy s chrome rozšíření) pokud prohledáváte internetový obchod chrome internetový obchod pomocí výrazu „tts“).</p><p><strong> použití </strong>: pro použití na webu. zvýrazníte text, který chcete číst, a klikněte pravým tlačítkem myši na ikonu „speakit“ nebo klikněte na ikonu speakit v doku na horním panelu chrome).</p><hr><p>uživatelé firefoxu mají také dvě možnosti. v doplňcích firefoxu proveďte <a href="https://addons.mozilla.org/en-us/firefox/search/?platform=linux&amp;q=tts">vyhledávání tts</a> a měli byste najít „click speak“ a také „text to voice“. hlasy nejsou tak dobré jako hlasy, které jsou chrome speakit, ale jsou rozhodně použitelné).</p><p>rozšíření speakit využívá technologii ispeech a za cenu 20 $ ročně může web převádět text do zvukových souborů mp3. můžete zadávat text, adresy url, kanály rss, stejně jako dokumenty jako txt, doc a pdf a výstup do mp3. můžete vytvářet podcasty, vkládat zvuk atd. <a href="http://www.ispeech.org/free.text.to.speech.tts.software">zde je odkaz</a> a <a href="http://www.ispeech.org/view/681080/4429622">kázka jejich zvuk</a> (nevím, jak dlouho bude odkaz trvat).</p> Jbart - pokud rozumiš androidovi.pokud ne aplikace more locale2.nastaveni po instalaci na česky jazyk.bude ti to stačit.nebo servis kde za akci s more locale si nadrzo řeknou za ty dvě kliknutí pětikilo. <p>testoval jsem několik různých algoritmů, měření rychlosti a počtu kolizí.</p><p>použil jsem tři různé sady klíčů:</p><ul> <li> <a href="http://www.sitopreferito.it/html/all\_english\_words.html">seznam 216 553 anglických slov</a> <sup> <a href="https://web.archive.org/web/20061231134037/http://www.sitopreferito.it/html/all\_english\_words.html">???? archiv</a> </sup>(malými písmeny)</li> <li>čísla <code>"1"</code> to <code>"216553"</code> (přemýšlejte o kódech zip a <a href="https://web.archive.org/web/20190119000003/https://blogs.msdn.microsoft.com/ericlippert/2003/09/19/arrrrr-capn-eric-be-learnin-about-threadin-the-harrrrd-way/">jak špatný hash stáhl msn.com</a> <sup> <a href="https://archive.ph/m7h87">???? archiv</a> </sup>)</li> <li>216 553 „náhodných“ (tj. <a href="http://www.ietf.org/rfc/rfc4122.txt">id typu 4</a> ) guid</li> </ul><p>pro každý korpus byl zaznamenán počet srážek a průměrná doba strávená hashováním.</p><p>testoval jsem:</p><ul> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html">djb2</a> </li> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html">djb2a</a> (varianta používající <code>xor</code> spíše než <code>+</code>)</li> <li> <a href="http://en.wikipedia.org/wiki/fowler%e2%80%93noll%e2%80%93vo\_hash\_function">fnv-1</a> (32-bit)</li> <li> <a href="http://en.wikipedia.org/wiki/fowler%e2%80%93noll%e2%80%93vo\_hash\_function">fnv-1a</a> (32-bit)</li> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html"> sdbm </a> </li> <li>crc32</li> <li> <a href="http://en.wikipedia.org/wiki/murmurhash">murmur2</a> (32-bit)</li> <li> <a href="http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html">superfasthash</a> </li> </ul><h2>výsledek</h2><p>každý výsledek obsahuje průměrnou dobu hash a počet srážek</p><pre><code>hash lowercase random uuid numbers     murmur 145 ns 259 ns 92 ns 6 collis 5 collis 0 collis fnv-1a 152 ns 504 ns 86 ns 4 collis 4 collis 0 collis fnv-1 184 ns 730 ns 92 ns 1 collis 5 collis 0 collis▪ dbj2a 158 ns 443 ns 91 ns 5 collis 6 collis 0 collis▪▪▪ djb2 156 ns 437 ns 93 ns 7 collis 6 collis 0 collis▪▪▪ sdbm 148 ns 484 ns 90 ns 4 collis 6 collis 0 collis** superfasthash 164 ns 344 ns 118 ns 85 collis 4 collis 18742 collis crc32 250 ns 946 ns 130 ns 2 collis 0 collis 0 collis loselose 338 ns - - 215178 collis </code></pre><p><strong> poznámky </strong>:</p><ul> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html">loselose algoritmus</a> (kde hash = hash + character) je skutečně <strong> <em> hrozné </em> </strong>. všechno se srazí do stejných 1375 kbelíků</li> <li>superfasthash je rychlý a věci vypadají docela rozptýleny; podle mého dobrota srážky <em> číslo </em>. doufám, že <a href="http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html">ten, kdo to přenesl, má něco špatného; je to docela špatné</a> </li> <li>crc32 je <em> celkem dobrá </em>. pomalejší a 1k tabulka vyhledávání</li> </ul><h2>dochází ke kolizím?</h2><p>ano. začal jsem psát svůj testovací program, abych zjistil, zda ke kolizím hashů <em> skutečně </em> došlo - a nejde jen o teoretický konstrukt. stávají se skutečně:</p><p><strong> fnv-1 srážky </strong></p><ul> <li><code>creamwove</code> srazí s <code>quists</code></li> </ul><p><strong> srážky fnv-1a </strong></p><ul> <li><code>costarring</code> srazí s <code>liquid</code></li> <li><code>declinate</code> srazí s <code>macallums</code></li> <li><code>altarage</code> srazí s <code>zinke</code></li> <li><code>altarages</code> srazí s <code>zinkes</code></li> </ul><p><strong> kolize murmur2 </strong></p><ul> <li><code>cataract</code> srazí s <code>periti</code></li> <li><code>roquette</code> srazí s <code>skivie</code></li> <li><code>shawl</code> srazí s <code>stormbound</code></li> <li><code>dowlases</code> srazí s <code>tramontane</code></li> <li><code>cricketings</code> srazí s <code>twanger</code></li> <li><code>longans</code> srazí s <code>whigs</code></li> </ul><p><strong> srážky djb2 </strong></p><ul> <li><code>hetairas</code> srazí s <code>mentioner</code></li> <li><code>heliotropes</code> srazí s <code>neurospora</code></li> <li><code>depravement</code> srazí s <code>serafins</code></li> <li><code>stylist</code> srazí s <code>subgenera</code></li> <li><code>joyful</code> srazí s <code>synaphea</code></li> <li><code>redescribed</code> srazí s <code>urites</code></li> <li><code>dram</code> srazí s <code>vivency</code></li> </ul><p><strong> srážky djb2a </strong></p><ul> <li><code>haggadot</code> srazí s <code>loathsomenesses</code></li> <li><code>adorablenesses</code> srazí s <code>rentability</code></li> <li><code>playwright</code> srazí s <code>snush</code></li> <li><code>playwrighting</code> srazí s <code>snushing</code></li> <li><code>treponematoses</code> srazí s <code>waterbeds</code></li> </ul><p><strong> kolize crc32 </strong></p><ul> <li><code>codding</code> srazí s <code>gnu</code></li> <li><code>exhibiters</code> srazí s <code>schlager</code></li> </ul><p><strong> kolize superfasthash </strong></p><ul> <li><code>dahabiah</code> srazí s <code>drapability</code></li> <li><code>encharm</code> srazí s <code>enclave</code></li> <li><code>grahams</code> srazí s <code>gramary</code></li> <li>... odstřihněte 79 kolizí ...</li> <li><code>night</code> srazí s <code>vigil</code></li> <li><code>nights</code> srazí s <code>vigils</code></li> <li><code>finks</code> srazí s <code>vinic</code></li> </ul><h2>náhodnost</h2><p>dalším subjektivním měřítkem je, jak náhodně jsou hash rozděleny. mapování výsledných tabulek ukazuje, jak rovnoměrně jsou data distribuována. všechny hašovací funkce vykazují dobré rozdělení při lineárním mapování tabulky:</p><p><img src="https://i.stack.imgur.com/bmysu.png" alt="enter image description here"></p><p>nebo jako <a href="http://en.wikipedia.org/wiki/hilbert\_curve"><em> hilbertova mapa </em></a> ( <a href="http://xkcd.com/195/">xkcd je vždy relevantní</a> ):</p><p><img src="https://i.stack.imgur.com/n8r3k.png" alt="enter image description here"></p><p>s výjimkou hashovacích řetězců čísel (<code>"1"</code>, <code>"2"</code>, ..., <code>"216553"</code>) (například <a href="https://web.archive.org/web/20190119000003/https://blogs.msdn.microsoft.com/ericlippert/2003/09/19/arrrrr-capn-eric-be-learnin-about-threadin-the-harrrrd-way/">psč</a> ), kde se ve většině hashovacích algoritmů začínají objevovat vzorce:</p><p><strong> [~ # ~] sdbm [~ # ~] </strong>:</p><p><img src="https://i.stack.imgur.com/1juxp.jpg" alt="enter image description here"></p><p><strong> djb2a </strong>:</p><p><img src="https://i.stack.imgur.com/0wjpn.jpg" alt="enter image description here"></p><p><strong> fnv-1 </strong>:</p><p><img src="https://i.stack.imgur.com/0f4l3.jpg" alt="enter image description here"></p><p>všechny kromě <strong> fnv-1a </strong>, které mi stále vypadají celkem náhodně:</p><p><img src="https://i.stack.imgur.com/wevjm.jpg" alt="enter image description here"></p><p>zdá se, že <strong> murmur2 </strong> má ještě lepší náhodnost s <code>numbers</code> než <code>fnv-1a</code>:</p><p><img src="https://i.stack.imgur.com/jywbf.png" alt="enter image description here"></p><blockquote> <p><em> když se podívám na <code>fnv-1a</code> "number" map, i <strong> think </strong> vidím jemné vertikální vzory. s murmurem nevidím vůbec žádné vzory. co si myslíte? </em></p> </blockquote><hr><p>extra <strong> <code>*</code> </strong> v tabulce označuje, jak špatná je náhodnost. s <code>fnv-1a</code> je nejlepší a <strong> <code>djb2x</code> </strong> je nejhorší:</p><pre><code> murmur2: . fnv-1a: . fnv-1: ▪ djb2: ▪▪ djb2a: ▪▪ sdbm: ▪▪▪ superfasthash: . crc: ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ loselose: ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ▪ ▪▪▪▪▪▪▪▪▪▪▪▪▪ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ </code></pre><p>původně jsem napsal tento program, abych se rozhodl, jestli jsem dokonce musel <em> worry </em> o kolizích: ano.</p><p>a pak se ukázalo, že hashovací funkce byly dostatečně náhodné.</p><h2>algoritmus fnv-1a</h2><p>hash fnv1 přichází ve variantách, které vracejí 32, 64, 128, 256, 512 a 1024 bitů hashe.</p><p> <a href="http://en.wikipedia.org/wiki/fowler%e2%80%93noll%e2%80%93vo\_hash\_function">fnv-1a algoritmus</a> je:</p><pre><code>hash = fnv\_offset\_basis for each octetofdata to be hashed hash = hash xor octetofdata hash = hash * fnv\_prime return hash </code></pre><p>kde konstanty <code>fnv\_offset\_basis</code> a <code>fnv\_prime</code> záleží na požadované velikosti hash:</p><pre><code>hash size  32-bit prime: 2^24 + 2^8 + 0x93 = 16777619 offset: 2166136261 64-bit prime: 2^40 + 2^8 + 0xb3 = 1099511628211 offset: 14695981039346656037 128-bit prime: 2^88 + 2^8 + 0x3b = 309485009821345068724781371 offset: 144066263297769815596495629667062367629 256-bit prime: 2^168 + 2^8 + 0x63 = 374144419156711147060143317175368453031918731002211 offset: 100029257958052580907070968620625704837092796014241193945225284501741471925557 512-bit prime: 2^344 + 2^8 + 0x57 = 35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759 offset: 9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785 1024-bit prime: 2^680 + 2^8 + 0x8d = 5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573 offset: 1419779506494762106872207064140321832088062279544193396087847491461758272325229673230371772250864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915 </code></pre><p>podrobnosti viz <a href="http://www.isthe.com/chongo/tech/comp/fnv/index.html#fnv-param">hlavní stránka fnv</a> .</p><p>všechny mé výsledky jsou u 32bitové varianty.</p><h2>fnv-1 lepší než fnv-1a?</h2><p>ne. fnv-1a je všude lepší. při použití korpusu anglického slova došlo k dalším kolizím s fnv-1a:</p><pre><code>hash word collisions   fnv-1 1 fnv-1a 4 </code></pre><p>nyní porovnejte malá a velká písmena:</p><pre><code>hash lowercase word collisions uppercase word collisions    fnv-1 1 9 fnv-1a 4 11 </code></pre><p>v tomto případě fnv-1a není <em> "400%" </em> horší než fn-1, pouze o 20% horší.</p><p>myslím, že důležitější s sebou je, že existují dvě třídy algoritmů, pokud jde o kolize:</p><ul> <li><strong> vzácné srážky </strong>: fnv-1, fnv-1a, djb2, djb2a, sdbm</li> <li><strong> běžné srážky </strong>: superfasthash, loselose</li> </ul><p>a pak je tu, jak rovnoměrně jsou hashe:</p><ul> <li><strong> vynikající distribuce: </strong> murmur2, fnv-1a, superfasthas</li> <li><strong> vynikající distribuce: </strong> fnv-1</li> <li><strong> dobrá distribuce: </strong> sdbm, djb2, djb2a</li> <li><strong> hrozné rozdělení: </strong> loselose</li> </ul><hr><p><strong> aktualizace </strong></p><p>mumlání? <em> jistě, proč ne </em></p><hr><p><strong> aktualizace </strong></p><p>@whatshisname přemýšlel, jak by <strong> crc32 </strong> provedl přidaná čísla do tabulky.</p><p>crc32 je <em> celkem dobrá </em>. několik kolizí, ale pomalejší, a režie 1k tabulky vyhledávání.</p><p><em> vystřihněte všechny chybné informace o distribuci crc - můj špatný </em></p><hr><p>až do dneška jsem měl v úmyslu používat fnv-1a jako můj <em> de facto </em> hash-hashovací algoritmus tabulky. ale teď přecházím na murmur2:</p><ul> <li>rychleji</li> <li>lepší <em> randomnessification </em> všech tříd vstupů</li> </ul><p>a opravdu, <em> opravdu </em> doufám, že je něco špatného s <a href="http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html"><code>superfasthash</code> algoritmus, který jsem našel</a> ; je příliš špatné na to, aby byl tak populární, jak je.</p><p><strong> aktualizace: </strong> z <a href="http://code.google.com/p/smhasher/wiki/murmurhash3">domovská stránka murmurhash3 na googl</a> :</p><blockquote> <p>(1) - superfasthash má velmi špatné kolizní vlastnosti, které byly dokumentovány jinde.</p> </blockquote><p>takže to nejsem jen já.</p><p><strong> aktualizace: </strong> uvědomil jsem si, proč je <code>murmur</code> rychlejší než ostatní. murmurhash2 pracuje na čtyřech bytech najednou. většina algoritmů je <em> byte byte </em>:</p><pre><code>for each octet in key addtheoctettothehash </code></pre><p>to znamená, že jak se klíče prodlužují, murmur dostane svou šanci září.</p><hr><p><strong> aktualizace </strong></p><h2> <a href="http://blogs.msdn.com/b/oldnewthing/archive/2012/05/23/10309199.aspx">guid jsou navrženy tak, aby byly jedinečné, nikoli náhodné</a> </h2><p>včasný příspěvek od raymonda chena opakuje skutečnost, že guid <em> "random" </em> guid nejsou určeny pro jejich náhodnost. oni nebo jejich podmnožina jsou nevhodní jako hashovací klíč:</p><blockquote> <p>ani u verze 4 guid algoritmus není zaručeno, že bude nepředvídatelný, protože tento algoritmus nespecifikuje kvalitu generátoru náhodných čísel. <a href="http://en.wikipedia.org/wiki/globally\_unique\_identifier">článek wikipedia pro guid obsahuje primární výzkum, který navrhuje</a> , že budoucí a předchozí guid lze předpovídat na základě znalosti stavu generátoru náhodných čísel, protože generátor není kryptograficky silný.</p> </blockquote><p>náhodnost není totéž jako vyhýbání se kolizi; což je důvod, proč by bylo chybou pokusit se vymyslet svůj vlastní „hashovací“ algoritmus tím, že vezme nějakou podskupinu „náhodného“ průvodce:</p><pre><code>int hashkeyfromguid(guid type4uuid) { //a "4" is put somewhere in the guid. //i can't remember exactly where, but it doesn't matter for //the illustrative purposes of this pseudocode int guidversion = ((type4uuid.d3 &amp; 0x0f00) &gt;&gt; 8); assert(guidversion == 4); return (int)getfirstfourbytesofguid(type4uuid); } </code></pre><p><strong> poznámka </strong>: znovu jsem v uvozovkách uvedl <em> "náhodné guid" </em>, protože se jedná o "náhodnou" variantu guid. přesnější popis by byl <code>type 4 uuid</code>. ale nikdo neví, co je typu 4 nebo typu 1, 3 a 5. takže je to jednodušší nazvat je „náhodnými“ guid.</p><h1>všechna anglická slova zrcadla</h1><ul> <li> <a href="https://web.archive.org/web/20070221060514/http://www.sitopreferito.it/html/all\_english\_words.html">https://web.archive.org/web/20070221060514/http://www.sitopreferito.it/html/all\_english\_words.html</a> </li> <li> <a href="https://drive.google.com/file/d/0b3blwu7vb2u-dew1vkuxc3u4sg8/view?usp=sharing">https://drive.google.com/file/d/0b3blwu7vb2u-dew1vkuxc3u4sg8/view?usp=sharing</a> </li> </ul> Nauč se česky a pochop, že za hry se platí. [http://www.zive.cz/poradna/hra/sc-20-cq-5080...](http://www.zive.cz/poradna/hra/sc-20-cq-508058/default.aspx?consultanswers=1) Na úpravu obrazu a zvuku stačia anglické výrazy. Treba sa ich raz naučiť a už nikdy ťa nezaskočia ostatné programy. <p>v plánech provádění byste se neměli příliš spoléhat na procenta nákladů. jedná se o <em> vždy odhadované náklady</em>, a to i v plánech po provedení s „skutečnými“ čísly pro věci, jako je počet řádků. odhadované náklady jsou založeny na modelu, který funguje velmi dobře pro účel, pro který je určen: umožnění optimalizátoru zvolit mezi různými plány provádění kandidátů pro stejný dotaz. informace o nákladech jsou zajímavé a faktor, který je třeba zvážit, ale zřídka by měla být primární metrikou pro ladění dotazů. interpretace informací plánu provádění vyžaduje širší pohled na prezentovaná data.</p><p><strong> itemtran clustered index seek operator </strong></p><p><img src="https://i.stack.imgur.com/lvet6.jpg" alt="itemtran clustered index seek"></p><p>tento operátor jsou skutečně dvě operace v jednom. nejprve operace vyhledávání indexu najde všechny řádky, které odpovídají predikátu <code>product\_code\_v42 = 'm10bolt'</code>, pak každý řádek použije zbytkový predikát <code>bit\_field\_v41 &amp; 4 = 0</code>. dochází k implicitní konverzi <code>bit\_field\_v41</code> z jejího základního typu (<code>tinyint</code> nebo <code>smallint</code>) na <code>integer</code>.</p><p>k převodu dochází, protože <a href="https://msdn.microsoft.com/en-us/library/ms174965.aspx">bitový operátor and</a> (&amp;) vyžaduje, aby oba operandy byly stejného typu. implicitní typ konstantní hodnoty '4' je celé číslo a <a href="https://msdn.microsoft.com/en-us/library/ms190309.aspx">pravidla priority datového typ</a> znamená, že je převedena hodnota pole <code>bit\_field\_v41</code> s nižší prioritou.</p><p>problém (jako je) se snadno opraví zápisem predikátu jako <code>bit\_field\_v41 &amp; convert(tinyint, 4) = 0</code> - což znamená, že konstantní hodnota má nižší prioritu a je převedena (během konstantního skládání) spíše než hodnota sloupce. pokud je <code>bit\_field\_v41</code> <code>tinyint</code>, nedojde k žádné konverzi. podobně lze použít funkci <code>convert(smallint, 4)</code>, pokud <code>bit\_field\_v41</code> je <code>smallint</code>. to znamená, že v tomto případě <em> převod není problém s výkonem</em>, ale stále je dobrým zvykem porovnávat typy a vyhýbat se implicitním převodům tam, kde je to možné.</p><p>hlavní část odhadovaných nákladů na toto hledání je až do velikosti základní tabulky. zatímco seskupený klíč indexu je sám o sobě poměrně úzký, velikost každého řádku je velká. definice tabulky není uvedena, ale pouze sloupce použité v pohledu přidávají významnou šířku řádku. protože seskupený index zahrnuje všechny sloupce, vzdálenost mezi seskupenými klíči indexu je šířka <em> řádek</em>, nikoli šířka <em> indexové klíče</em>. použití přípon přípon verzí v některých sloupcích naznačuje, že skutečná tabulka obsahuje ještě více sloupců pro předchozí verze.</p><p>když se podíváme na sloupce vyhledávání, zbytkového predikátu a výstupu, výkon tohoto operátora lze zkontrolovat izolovaně vytvořením ekvivalentního dotazu (<code>1 &lt;&gt; 2</code> je trik, který zabraňuje auto-parametrizaci, rozpor je odstraněn optimalizátorem a nezobrazí se v plánu dotazů):</p><pre><code>select it.booking\_no\_v32, it.qtycheckedout, it.qtyreturned, it.trans\_qty, it.trans\_type\_v41 from dbo.tblitemtran as it where 1 &lt;&gt; 2 and it.product\_code\_v42 = 'm10bolt' and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0; </code></pre><p>výkon tohoto dotazu se studenou datovou mezipamětí je zajímavý, protože čtení (forward) by bylo ovlivněno fragmentací tabulky (seskupený index). klastrovací klíč pro tuto tabulku vyzývá k fragmentaci, takže by mohlo být důležité tento index pravidelně udržovat (reorganizovat nebo znovu sestavovat) a pomocí vhodného <code>fillfactor</code> umožnit místo pro nové řádky mezi okny údržby indexů.</p><p>provedl jsem test účinku fragmentace na čtení předem pomocí vzorových dat generovaných pomocí <a href="https://www.red-gate.com/products/sql-development/sql-data-generator/">sql data generator</a> . při použití stejného počtu řádků tabulky, jaké jsou uvedeny v plánu dotazů na otázku, vyústil vysoce fragmentovaný klastrovaný index do <code>select * from view</code> po 15 sekundách po <code>dbcc dropcleanbuffers</code>. stejný test za stejných podmínek s čerstvě obnoveným seskupeným indexem v tabulce itemtrans byl dokončen za 3 sekundy.</p><p>pokud jsou data tabulky obvykle zcela v mezipaměti, je problém fragmentace mnohem méně důležitý. ale i při nízké fragmentaci mohou široké řádky tabulky znamenat, že počet logických a fyzických čtení je mnohem vyšší, než by se dalo očekávat. můžete také experimentovat s přidáním a odebráním explicitního <code>convert</code>, abyste potvrdili mé očekávání, že implicitní problém s převodem zde není důležitý, s výjimkou porušení doporučených postupů.</p><p>více k tomuto bodu je odhadovaný počet řádků opouštějících operátora vyhledávání. odhad času optimalizace je 165 řádků, ale v době provedení bylo vyrobeno 4 226 kusů. k tomuto bodu se vracím později, ale hlavním důvodem nesrovnalosti je to, že selektivita zbytkového predikátu (zahrnující bitový-and) je pro optimalizátor velmi obtížná předvídat - ve skutečnosti se uchyluje k hádání.</p><p><strong> operátor filtru </strong></p><p><img src="https://i.stack.imgur.com/mayng.jpg" alt="filter operator"></p><p>zobrazuji zde predikát filtru většinou, abych ilustroval, jak jsou dva seznamy <code>not in</code> kombinovány, zjednodušeny a poté rozšířeny, a také poskytuji odkaz pro následující diskusi o hašovacích zápasech. testovací dotaz z požadavku lze rozšířit tak, aby zahrnoval jeho účinky a určoval vliv operátora filtru na výkon:</p><pre><code>select it.booking\_no\_v32, it.trans\_type\_v41, it.trans\_qty, it.qtyreturned, it.qtycheckedout from dbo.tblitemtran as it where it.product\_code\_v42 = 'm10bolt' and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and ( ( it.trans\_type\_v41 not in (2, 3, 6, 7, 18, 19, 20, 21, 12, 13, 22) and it.trans\_type\_v41 not in (6, 7) ) or ( it.trans\_type\_v41 not in (6, 7) ) or ( it.trans\_type\_v41 in (6, 7) and it.qtycheckedout = 0 ) or ( it.trans\_type\_v41 in (6, 7) and it.qtycheckedout &gt; 0 and it.trans\_qty - (it.qtycheckedout - it.qtyreturned) &gt; 0 ) ); </code></pre><p>operátor compute scalar v plánu definuje následující výraz (samotný výpočet je odložen, dokud není výsledek vyžadován pozdějším operátorem):</p><pre><code>[expr1016] = (trans\_qty - (qtycheckedout - qtyreturned)) </code></pre><p><strong> hash match operator </strong></p><p>provádění spojení na datových typech znaků není důvodem vysokých odhadovaných nákladů tohoto operátora. popis ssms zobrazuje pouze položku hash keys probe probe, ale důležité detaily jsou v okně ssms properties.</p><p>operátor hash match vytvoří hašovací tabulku s použitím hodnot ve sloupci <code>booking\_no\_v32</code> (build hash keys!) z tabulky itemtran a poté zkoumá shody pomocí sloupce <code>booking\_no</code> (hash keys probe) od tabulka rezervace. popisek ssms by také normálně zobrazoval zbytky sondy, ale text je příliš dlouhý na popis a je jednoduše vynechán.</p><p>rezidua sondy je podobná zbytku pozorovanému po hledání indexu dříve; zbytkový predikát je vyhodnocen na všech řádcích, které hash odpovídají, aby se určilo, zda by měl být řádek předán nadřazenému operátorovi. nalezení hash zápasů v dobře vyvážené hashovací tabulce je extrémně rychlé, ale použití komplexního zbytkového predikátu na každý řádek, který odpovídá, je při porovnání poměrně pomalé. popisek hash match v aplikaci plan explorer zobrazuje podrobnosti, včetně zbytkového výrazu probe:</p><p><img src="https://i.stack.imgur.com/c1nkp.jpg" alt="hash match operator"></p><p>zbytkový predikát je složitý a zahrnuje kontrolu stavu průběhu rezervace, když je sloupec k dispozici v tabulce rezervací. popisek také ukazuje stejný nesoulad mezi odhadovanými a skutečnými počty řádků viděnými dříve v hledání indexu. může se zdát podivné, že většina filtrování se provádí dvakrát, ale je to jen optimistický optimalizátor. neočekává, že části filtru, které lze posunout dolů ze zbytku sondy, odstraní všechny řádky (odhady počtu řádků jsou před a za filtrem stejné), ale optimalizátor ví, že by to mohlo být špatné. pravděpodobnost brzkého filtrování řádků (snížení nákladů na spojení hash) stojí za malou cenu extra filtru. celý filtr nelze posunout dolů, protože obsahuje test na sloupci z tabulky rezervací, ale většinou to může být. úplný test je stále vyžadován v testu zbytkové hodnoty hash pro správnost.</p><p>podceňování počtu řádků je problém pro operátora hash match, protože množství paměti rezervované pro hashovací tabulku je založeno na odhadovaném počtu řádků. pokud je paměť příliš malá pro velikost hashovací tabulky požadované v době běhu (kvůli většímu počtu řádků), hashova tabulka <strong> rekurzivně rozlévá </strong> na fyzickou <em> tempdb</em> úložiště, což často vede k velmi slabému výkonu. v nejhorším případě prováděcí motor zastaví rekurzivní rozlití hashovacích kbelíků a uchytí se k algoritmu <em> velmi pomalý</em> rozlití hash (rekurzivní nebo záchranná opatření) je nejpravděpodobnější příčinou problémů s výkonem nastíněných v otázce (nikoli sloupců spojení typu nebo implicitních konverzí). hlavní příčinou by byl server rezervující příliš málo paměti pro dotaz na základě nesprávného odhadu počtu řádků (kardinality).</p><p>je smutné, že před sql server 2012 není v plánu provádění naznačeno, že operace hašování překročila přidělení paměti (které nemůže být dynamicky růst po rezervování před spuštěním spuštění, i když má server velké množství volné paměti) a musela se přelít do tempdb. je možné monitorovat <a href="https://msdn.microsoft.com/en-us/library/ms190736.aspx">hash warning event class</a> pomocí profiler, ale může být obtížné korelovat varování s konkrétním dotazem.</p><p><strong> oprava problémů </strong></p><p>těmito třemi problémy jsou fragmentace, zbytková složka sondy v operátorovi hašovací shody a nesprávný odhad mohutnosti vyplývající z hádání při hledání indexu.</p><p><strong> doporučené řešení </strong></p><p>zkontrolujte fragmentaci a v případě potřeby ji opravte, naplánujte údržbu tak, aby index zůstal přijatelně organizovaný. obvyklý způsob, jak opravit odhad kardinality, je poskytnout statistiku. v takovém případě optimalizátor potřebuje statistiku kombinace (<code>product\_code\_v42</code>, <code>bitfield\_v41 &amp; 4 = 0</code>). nemůžeme vytvořit statistiky výrazu přímo, takže musíme nejprve vytvořit vypočítaný sloupec pro výraz bitového pole a poté vytvořit manuální statistiku více sloupců:</p><pre><code>alter table dbo.tblitemtran add bit3 as bit\_field\_v41 &amp; convert(tinyint, 4); create statistics [stats dbo.itemtran (product\_code\_v42, bit3)] on dbo.tblitemtran (product\_code\_v42, bit3); </code></pre><p>definice vypočteného sloupcového textu se musí přesně shodovat s textem v definici pohledu, aby se statistika mohla použít, takže by se mělo korigovat zobrazení, aby se vyloučila implicitní konverze, a současně by se mělo dbát na to, aby byla zajištěna shoda textu.</p><p>statistiky ve více sloupcích by měly vést k mnohem lepším odhadům, což výrazně snižuje pravděpodobnost, že operátor hashovací metody použije rekurzivní rozlití nebo algoritmus výpomoci. přidání vypočítaného sloupce (což je operace pouze s metadaty a nezabere žádné místo v tabulce, protože není označeno <code>persisted</code>) a statistika více sloupců je můj nejlepší odhad při prvním řešení.</p><p>při řešení problémů s výkonem dotazů je důležité měřit věci jako uplynulý čas, využití procesoru, logická čtení, fyzická čtení, typy čekání a doby trvání atd. atd. může být také užitečné spustit části dotazu samostatně pro ověření podezření na příčiny, jak je uvedeno výše.</p><p>v některých prostředích, kde není nejdůležitější pohled na data, může být užitečné spustit proces na pozadí, který zhmotňuje celý pohled do tabulky snímků každou tak často. tato tabulka je pouze normální základní tabulka a lze ji indexovat pro čtení dotazů, aniž byste se museli starat o dopad na výkon aktualizace.</p><p><strong> zobrazit indexování </strong></p><p>nenechte se v pokušení přímo indexovat původní pohled. výkon čtení bude úžasně rychlý (jediné hledání v pohledu indexu), ale (v tomto případě) budou všechny problémy s výkonem ve stávajících plánech dotazů přeneseny do dotazů, které upravují všechny sloupce tabulky, na které se v pohledu odkazuje. dotazy, které mění řádky základní tabulky, budou skutečně ovlivněny velmi špatně.</p><p><strong> pokročilé řešení s částečným indexovaným pohledem </strong></p><p>pro tento konkrétní dotaz existuje částečné řešení indexovaného pohledu, které opravuje odhady kardinality a odstraňuje zbytky filtru a sondy, ale je založeno na některých předpokladech o datech (většinou můj odhad na schématu) a vyžaduje odbornou implementaci, zejména pokud jde o vhodné indexy pro podporu plánů údržby indexovaných pohledů. sdílím níže uvedený kód pro zájem, nenavrhuji, abyste jej implementovali bez <em> velmi opatrní</em> analýzy a testování.</p><pre><code>-- indexed view to optimize the main view create view dbo.v1 with schemabinding as select it.id, it.product\_code\_v42, it.trans\_type\_v41, it.booking\_no\_v32, it.trans\_qty, it.qtyreturned, it.qtycheckedout, it.qtyreserved, it.bit\_field\_v41, it.prep\_on, it.from\_locn, it.trans\_to\_locn, it.pdate, it.firstdate, it.ptimeh, it.ptimem, it.retndate, it.bookdate, it.timebookedh, it.timebookedm, it.timebookeds, it.del\_time\_hour, it.del\_time\_min, it.return\_to\_locn, it.return\_time\_hour, it.return\_time\_min, it.assignto, it.assigntype, it.inrack from dbo.tblitemtran as it join dbo.tblbookings as tb on tb.booking\_no = it.booking\_no\_v32 where ( it.trans\_type\_v41 not in (2, 3, 7, 18, 19, 20, 21, 12, 13, 22) and it.trans\_type\_v41 not in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 ) or ( it.trans\_type\_v41 not in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and tb.bookingprogressstatus = 1 ) or ( it.trans\_type\_v41 in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and it.qtycheckedout = 0 ) or ( it.trans\_type\_v41 in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and it.qtycheckedout &gt; 0 and it.trans\_qty - (it.qtycheckedout - it.qtyreturned) &gt; 0 ); go create unique clustered index cuq on dbo.v1 (product\_code\_v42, id); go </code></pre><p>existující pohled se vyladil, aby používal indexované zobrazení výše:</p><pre><code>create view [dbo].[vwreallyslowview2] as select i.booking\_no\_v32 as bkno, i.trans\_type\_v41 as trantype, b.assigned\_to\_v61 as assignbk, b.order\_date as dateo, b.hourbooked as hbooked, b.minbooked as mbooked, b.secbooked as sbooked, i.prep\_on as pon, i.from\_locn as flocn, i.trans\_to\_locn as ttlocn, case i.prep\_on when 'y' then i.pdate else i.firstdate end as prdate, i.ptimeh as prtimeh, i.ptimem as prtimem, case when i.retndate &lt; i.firstdate then i.firstdate else i.retndate end as rdatev, i.bit\_field\_v41 as bitfield, i.firstdate as fdatev, i.bookdate as dbooked, i.timebookedh as tbookh, i.timebookedm as tbookm, i.timebookeds as tbooks, i.del\_time\_hour as dth, i.del\_time\_min as dtm, i.return\_to\_locn as rtlocn, i.return\_time\_hour as rth, i.return\_time\_min as rtm, case when i.trans\_type\_v41 in (6, 7) and i.trans\_qty &lt; i.qtycheckedout then 0 when i.trans\_type\_v41 in (6, 7) and i.trans\_qty &gt;= i.qtycheckedout then i.trans\_qty - i.qtycheckedout else i.trans\_qty end as trqty, case when i.trans\_type\_v41 in (6, 7) then 0 else i.qtycheckedout end as myqtycheckedout, case when i.trans\_type\_v41 in (6, 7) then 0 else i.qtyreturned end as retqty, i.id, b.bookingprogressstatus as bkprog, i.product\_code\_v42, i.return\_to\_locn, i.assignto, i.assigntype, i.qtyreserved, b.deprepon, case b.deprepon when 1 then b.deprepdatetime else i.retndate end as deprepdatetime, i.inrack from dbo.v1 as i with (noexpand) join dbo.tblbookings as b on b.booking\_no = i.booking\_no\_v32 join dbo.tblinvmas as m on i.product\_code\_v42 = m.product\_code; </code></pre><p>příklad dotazu a plán provedení:</p><pre><code>select vrsv.* from dbo.vwreallyslowview2 as vrsv where vrsv.product\_code\_v42 = 'm10bolt'; </code></pre><p><img src="https://i.stack.imgur.com/vg5cz.jpg" alt="new execution plan"></p><p>v novém plánu má hash shoda <em> žádný zbytkový predikát</em>, existuje <em> žádný složitý filtr</em>, <em> žádný zbytkový predikát</em> zapnuto hledat indexované zobrazení a <em> odhady kardinality</em> jsou přesně správné.</p><p>jako příklad toho, jak by byly ovlivněny plány vložení/aktualizace/odstranění, je to plán vložení do tabulky itemtrans:</p><p><img src="https://i.stack.imgur.com/kffk5.jpg" alt="insert plan"></p><p>zvýrazněná část je nová a vyžaduje se pro údržbu indexovaného pohledu. cívka tabulky nahradí vložené řádky základních tabulek pro údržbu indexovaného pohledu. každý řádek je spojen s tabulkou rezervací pomocí hledání seskupeného indexu, poté filtr použije složité predikáty klauzule <code>where</code>, aby se zjistilo, zda je třeba řádek přidat do pohledu. pokud ano, provede se vložení do seskupeného indexu pohledu.</p><p>stejný test <code>select * from view</code> provedený dříve byl dokončen za 150 ms s indexovaným pohledem na místě.</p><p>poslední věc: všiml jsem si, že váš server 2008 r2 je stále v rtm. neopraví to vaše problémy s výkonem, ale <a href="https://www.microsoft.com/en-us/download/details.aspx?id=30437">service pack 2 pro 2008 r2</a> je k dispozici od července 2012 a existuje mnoho dobrých důvodů, jak udržet co nejaktuálnější s aktualizacemi service pack.</p> Za sebe doporučuji tuhle učebnici - neoluxor.cz/ucebnice/eng-grammar-in-use-4e-with-answ--167023/

Bohužel nesplňuje váš požadavek vysvětlení v češtině, ale gramatika je vysvětlena velmi jednoduchou angličtinou, kde by neměl být problém + doplněná ilustrujícími obrázky. Možná si teď říkátem že to není nic pro vás, ale zkuste se na ni podívat třeba v knihkupectví. 

Česky je vysvětlena Angličtina (nejen) pro samouky - [databazeknih.cz/...](http://www.databazeknih.cz/knihy/anglictina-nejen-pro-samouky-klic-104090,) ale mi to třeba moc nevyhovovalo, ale asi váš požadavek to plnit bude. Opět se zkuste podívat.

A otázka slovníku - co od něj čekáte? Očekávám, že tam chcete vyhledávat něco na co narazíte v učebnici a nevíte. Taky myslím stačí "běžný slovník", nic spešl. Dělá jich řada firem celou řadu - osobně doporučuji ilustrovaný slovník, mám Fraus a je super (hlavně ilustrace, kde je k něčemu třeba popis částí). Nicméně pro spoustu věcí třeba stačí takový www.databazeknih.cz/knihy/kapesni-anglicko-cesky-cesko-anglicky-slovnik-89776 Třeba pro Firefox je doplněk s názvem Check4change, který ti umožňuje označit si nějaký text na stránce a potom automaticky refreshuje po určitém čase jaký si nastavíš a kontroluje jestli se ten text změnil. To by možná mohlo být použitelné. a ak to nieje jazyk programu ci neviete kde stiahnem CZ alebo SK na tuto verziu  
dakujem <p>účelem certifikátů rozšířené validace je zviditelnit uživatele, instituci, které byly vydány. technické aspekty samotných certifikátů jsou kombinovány s vizuálními vodítky v uživatelském rozhraní aplikace, která je ověřuje: zelený pruh a viditelný název vedle umístění v prohlížeči.</p><p>například certifikát ev na <a href="http://www.paypal.com/">http://www.paypal.com/</a> způsobí, že prohlížeč zobrazí zelený pruh a zobrazí „paypal, inc.“ vedle toho. účelem je nejen propojit certifikát s vlastníkem domény (jako standardní certifikáty ověřené v doméně), ale také ho propojit s fyzičtější institucí (zde, paypal, inc.). k tomu musí certifikační autorita ověřit, že pojmenovaná instituce je skutečně ta, která vlastní doménu.</p><p>v konečném důsledku jde spíše o vytvoření autentičtějšího propojení mezi názvem domény a názvem společnosti, než o vytvoření „bezpečnějších“ certifikátů. z hlediska sady šifry (což je to, co určuje šifrovací algoritmus a velikost klíče), se certifikáty ev neliší od certifikátů dv (modrý pruh).</p><p>trochu ustoupíte, musíte si uvědomit, že účinnost https závisí na tom, že uživatel zkontroluje, zda je používán správně. (server nemá způsob, jak zjistit, zda se klient stal obětí útoku mitm jinak, pokud nepoužívají také klientské certifikáty.) to znamená, že uživatelé musí:</p><ul> <li>zkontrolovat, zda se používá https, když očekávají, že to bude,</li> <li>zkontrolovat, že neexistují žádná varování,</li> <li>zkontrolujte, zda web, který používají, je opravdu ten, který hodlá navštívit, což vede k několika bodům: <ul> <li>kontrola, že to je doménové jméno, které očekávají,</li> <li>ověření, zda název domény patří společnosti, kterou očekávají.</li> </ul> </li> </ul><p>účelem certifikátů ev je vyřešit tento poslední bod. pokud již víte, že <code>amazon.com</code> patří společnosti amazon.com, inc. nebo tomu <code>google.com</code> patří společnosti google inc., opravdu je nepotřebujete.</p><p>nejsem osobně přesvědčen, že tento přístup funguje úplně, protože mohou být zneužity (viz příklad natwest/rbs níže) a zdá se, že některé ca šíří vágní (a potenciálně zavádějící) informace o tom, co ve skutečnosti jsou, ve snaze propagovat jim.</p><p>obecně platí, že pokud vaši uživatelé již vědí, že vaše doménové jméno je vaše, nepotřebujete jej.</p><p>zde jsou další podrobnosti z <a href="https://security.stackexchange.com/a/13614/2435">předchozí odpověď, kterou jsem dal na podobnou otázk</a> :</p><blockquote> <p>[...]</p> <p>certifikáty ověřené doménou vám zaručují, že certifikát byl vydán vlastníkovi této domény. nic víc, ale nic méně (předpokládám, že validační postup zde byl správný). v mnoha případech to stačí. vše záleží na tom, zda web, který propagujete, musí být propojen s institucí, která je již dobře známa off-line. certifikáty, které jsou validovány proti organizaci (ov a ev certs), jsou užitečné zejména v případě, že potřebujete doménu také svázat s fyzickou organizací.</p> <p>například je užitečné, aby instituce, která byla původně známá prostřednictvím své budovy (např. bank of america), mohla říci, že certifikát pro <code>bankofamerica.com</code> je skutečně místem, kde jste dali své fyzické peníze. v tomto případě má smysl použít certifikát ov nebo ev. to může být také užitečné, pokud existuje nejasnost ohledně toho, která instituce je za názvem domény (např. <code>apple.com</code> a <code>apple.co.uk</code>), což je ještě důležitější, je podobné doménové jméno vlastněné soupeřem/útočníkem, který používá podobnost názvu pro špatné účely.</p> <p>v porovnání, <a href="https://www.google.com/"><code>www.google.com</code></a> je to, co definuje google pro veřejnost; google nemusí dokazovat, že <code>google.com</code> patří skutečnému googlu. výsledkem je, že používá certifikát ověřený doménou (stejný pro <code>amazon.com</code>).</p> <p>to je opět užitečné, pokud uživatel ví, jak to zkontrolovat. prohlížeče zde opravdu nepomáhají. firefox pouze říká, „který je spuštěn (neznámý)“, pokud chcete o certifikátu získat další podrobnosti na <code>www.google.com</code>, aniž bychom skutečně řekli, co se tím myslí.</p> <p>certifikáty s rozšířenou validací jsou pokusem o zlepšení, a to zpřísněním postupu validace organizace a zviditelněním výsledku: zelený pruh a viditelnější organizace.</p> <p>bohužel se to někdy používá způsobem, který zvyšuje zmatek, myslím. zde je příklad, který si můžete zkontrolovat sami: jedna z velkých britských bank (natwest) používá <a href="https://www.nwolb.com/"><code>https://www.nwolb.com/</code></a> pro on-line bankovní služby. není jasné, že doménové jméno patří natwestu (který také vlastní logičtější <code>natwest.co.uk</code> mimochodem). horší je, že rozšířená validace (pokud zaškrtnete jméno vedle zeleného pruhu) se provede proti „royal bank of scotland group plc“.</p> <p>pro ty, kteří sledují finanční zprávy, to dává smysl, protože jak rbs, tak natwest patří do stejné skupiny, ale technicky jsou rbs a natwest konkurenty (a oba mají pobočky na hlavní ulici ve velké británii - i když se to změní). pokud váš uživatel nemá takovou zvláštní znalost o tom, které skupiny obchodují pod tímto jménem, ​​měla by výstražná zvonit zazvonit skutečnost, že certifikát je vydán na jméno potenciálního konkurenta. pokud jste jako uživatel viděli certifikát na <code>gooooogle.com</code> vydáno společnosti microsoft nebo yahoo, i když je tato lišta zelená, neměli byste to považovat za web společnosti google.</p> <p>jeden bod, který je třeba mít na paměti u certifikátů ev, je to, že <a href="https://security.stackexchange.com/a/14064/2435">jejich konfigurace je pevně zakódována do prohlížečů</a> . toto je nastavení kompilace, které nelze později nakonfigurovat (na rozdíl od běžných důvěryhodných úložišť certifikátů, do kterých můžete přidat například vlastní institucionální certifikační úřad). z cyničtějšího hlediska by to někteří mohli považovat za vhodný způsob, jak si hlavní hráči udržet silnou pozici na trhu.</p> </blockquote>