Česká "Hall of fame"



Taky jste přemýšleli někdy nad tím, jaké jsou hranice a rekordy Duolinga? Jaké jsou vlastně ty nejvyšší mety, kterých se dá dosáhnout? Pak by vám mohla tato diskuze pomoci udělat si představu.


Po vzoru anglických originálů jsem si říkal, že by nebylo od věci zavést i českou **Síň slávy**. Tedy seznam uživatelů, kteří to v českém kurzu dotáhli daleko a mohou být pro ostatní vzorem či motivací k dalšímu studiu (zatím pouze) angličtiny tady na DL.


V anglickém Duolingu je takovýchto Síní slávy vícero. Jedna zaznamenává [délku "striku"](https://www.duolingo.com/comment/2933824) s tím, že hlavní metou je 1 rok. Další je o seznamu všech lidí, kteří [dokončili celý kurz](https://www.duolingo.com/comment/6228953), na jehož konci na uživatele (spoiler alert!) čeká zlatá sova. A třetí je Sín slávy pro všechny, kteří dosáhli [maximálního levelu](https://www.duolingo.com/comment/4431566) v některém z jazyků.


Protože náš kurz tu tak dlouho není a výhodu by mohli mít ti, kteří dělali DL už předtím, tak jsem se rozhodl pro čtvrtou možnost: **Budeme zde vést seznam lidí, kteří mají v českém kurzu úroveň 20 a výš:**


****


**Level 25:**


* [FreekyFriik](https://www.duolingo.com/FreekyFriik)
* [plumpuddingdal](https://www.duolingo.com/plumpuddingdal)
* [MarieFolpr](https://www.duolingo.com/MarieFolpr)
* [jardanovk](https://www.duolingo.com/jardanovk)
* [XpatS](https://www.duolingo.com/XpatS)
* [Marta346808](https://www.duolingo.com/Marta346808)
* [re98ta](https://www.duolingo.com/re98ta)
* [Honza72](https://www.duolingo.com/Honza72)
* [Vlcek1942](https://www.duolingo.com/Vlcek1942)
* [monikabogarova](https://www.duolingo.com/monikabogarova)
* [JirinaKokr](https://www.duolingo.com/JirinaKokr)
* [Mgr.Alena](https://www.duolingo.com/Mgr.Alena)
* [39720](https://www.duolingo.com/39720)
* [LXIII](https://www.duolingo.com/LXIII)
* [JanFiser](https://www.duolingo.com/JanFiser)
* [peter.simko](https://www.duolingo.com/peter.simko)


![](http://i.imgur.com/slGy6Ai.jpg) 


Gratulujeme! Klobouk dolů...


**Level 24:**


* [sadfhrw](https://www.duolingo.com/sadfhrw)
* [Dunkahe](https://www.duolingo.com/Dunkahe)
* [dannydvorak50](https://www.duolingo.com/dannydvorak50)
* [Renata-45](https://www.duolingo.com/Renata-45)
* [Evapis](https://www.duolingo.com/Evapis)


**Level 23:**


* [Vodposlech](https://www.duolingo.com/Vodposlech)
* [13Vojtkova](https://www.duolingo.com/13Vojtkova)
* [rottkiv](https://www.duolingo.com/rottkiv)
* [koutna\_martina](https://www.duolingo.com/koutna_martina)
* [Paszulka](https://www.duolingo.com/Paszulka)


**Level 22:**


* [Czechoperafan](https://www.duolingo.com/Czechoperafan)
* [Hofina](https://www.duolingo.com/Hofina)
* [Jaromrptek](https://www.duolingo.com/Jaromrptek)
* [indyczech](https://www.duolingo.com/indyczech)


**Level 21:**


* [PajaX](https://www.duolingo.com/PajaX)
* [Pruder1](https://www.duolingo.com/Pruder1)


**Level 20:**


* [HonZuna](https://www.duolingo.com/HonZuna)


****


Pravidla jsou jednoduchá - napište sem do diskuze, že vy, či někdo koho znáte, má v tomto kurzu úroveň 20 a víc a já ho přidám do tabulky. Jen připomenu, že maximální úroveň je lvl 25, což platí pro všechny jazyky. 


*Poslední update: 1. 6. 2017*
...mohou být motivací, ale ne vzorem . A taky to, že "všechna sláva, polní tráva ... " každý kdo se sem přihlásí a pracuje na sobě v rámci svých možností a času jak nejlépe umí je mi vzorem . Od úrovně 1 až po 25 . Síň slávy k tomu nepotřebuji. Můj názor ;-)
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) <p>ach bože, myslím, že problém pramení ze smíchání schématu mysql různých verzí mysql. nejprve spusťte tento dotaz:</p><pre><code>desc mysql.user; </code></pre><p>pro mysql 5.6 získáte 43 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | event\_priv | enum('n','y') | no | | n | | | trigger\_priv | enum('n','y') | no | | n | | | create\_tablespace\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | | plugin | char(64) | yes | | | | | authentication\_string | text | yes | | null | | | password\_expired | enum('n','y') | no | | n | | +++++++ 43 rows in set (0.15 sec) </code></pre><p>pro mysql 5.5 získáte 42 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | event\_priv | enum('n','y') | no | | n | | | trigger\_priv | enum('n','y') | no | | n | | | create\_tablespace\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | | plugin | char(64) | yes | | | | | authentication\_string | text | yes | | null | | +++++++ 42 rows in set (0.01 sec) mysql&gt; </code></pre><p>pro mysql 5.1 získáte 39 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | event\_priv | enum('n','y') | no | | n | | | trigger\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | +++++++ 39 rows in set (0.00 sec) mysql&gt; </code></pre><p>pro mysql 5.0 získáte 37 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | +++++++ 37 rows in set (0.01 sec) mysql&gt; </code></pre><p>pro mysql 4.x získáte 31 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | varchar(60) binary | | pri | | | | user | varchar(16) binary | | pri | | | | password | varchar(16) binary | | | | | | select\_priv | enum('n','y') | | | n | | | insert\_priv | enum('n','y') | | | n | | | update\_priv | enum('n','y') | | | n | | | delete\_priv | enum('n','y') | | | n | | | create\_priv | enum('n','y') | | | n | | | drop\_priv | enum('n','y') | | | n | | | reload\_priv | enum('n','y') | | | n | | | shutdown\_priv | enum('n','y') | | | n | | | process\_priv | enum('n','y') | | | n | | | file\_priv | enum('n','y') | | | n | | | grant\_priv | enum('n','y') | | | n | | | references\_priv | enum('n','y') | | | n | | | index\_priv | enum('n','y') | | | n | | | alter\_priv | enum('n','y') | | | n | | | show\_db\_priv | enum('n','y') | | | n | | | super\_priv | enum('n','y') | | | n | | | create\_tmp\_table\_priv | enum('n','y') | | | n | | | lock\_tables\_priv | enum('n','y') | | | n | | | execute\_priv | enum('n','y') | | | n | | | repl\_slave\_priv | enum('n','y') | | | n | | | repl\_client\_priv | enum('n','y') | | | n | | | ssl\_type | enum('','any','x509','specified') | | | | | | ssl\_cipher | blob | | | | | | x509\_issuer | blob | | | | | | x509\_subject | blob | | | | | | max\_questions | int(11) unsigned | | | 0 | | | max\_updates | int(11) unsigned | | | 0 | | | max\_connections | int(11) unsigned | | | 0 | | +++++++ 31 rows in set (0.01 sec) </code></pre><p>představte si tento scénář:</p><ul> <li>nainstalujete 5.0</li> <li>odinstalujete 5.0</li> <li>zapomněli jste se přesunout/var/lib/mysql z cesty</li> <li>nainstalujete 5.1</li> </ul><p>uživatelská oprávnění se začnou posouvat. kdykoli spustíte <code>show grants;</code>, je obtížné očekávat sloupce na specifických místech v mysql.user (vzhledem k tomu, že mysql.user je myisam a jeho row\_format je dynamic (výchozí)). je velmi snadné vidět, jak uživatel náhle ztratí oprávnění, když znovu načtete verzi mysql 5.0 mysql.user do instance mysql 5.1.</p><p>v budoucnu, pokud byste se někdy rozhodli znovu načíst uživatele do mysql, zkuste uživatele výpisem do textového souboru pomocí <a href="http://www.percona.com/doc/percona-toolkit/2.0/pt-show-grants.html"><strong> pt-show-grantů </strong></a> spíše než mysqldump.</p><p>vlastně jsem psal svou vlastní verzi pt-show-grantů takto:</p><pre><code>mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -a -e"select concat('show grants for ''',user,'''@''',host,''';') from mysql.user where user&lt;&gt;''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -a | sed 's/$/;/g' &gt; mysqlusergrants.sql </code></pre><p>tím vzniknou všechny uživatelské granty jako sql, což je mnohem přenosnější než standardní techniky mysql. jednoduše znovu načtěte skript sql a provedou se granty. samozřejmě, že takové překládky jsou kompatibilní pouze dopředu, nikdy zpět.</p> Ahoj, neboj se a klidně se na certifikaci nauč. Vezme TI to měsíc nebo 2 intenzivního učení. Knížka na to má tak 900 stránek. Je to těžká zkouška, ale stojí za to. Cena zkoušky je 250 US dolarů, ekvivalent podle měnového kurzu se dá zaplatit v korunách nebo jiných měnách. Dá se jít na tzv ICND1 a ICND2, každá se platí zvlášť, ale jednak to vyjde dráž a jednak je to dvojitý stres ze 2 testů. Přihlásit se můžeš na www.pearsonvue.com. Tam si vybereš nejbližší testovací středisko, zaplatíš, vybereš si termín a jdeš. Učit se můžeš z knížek. Je jich dost, třeba Sybex od Todda Lmmla nebo Self study guide přímo od Cisca a ledacos dalšího. Jsou i v češtině a Slovenčině přeložené, ale dobré je číst originál v angličtině. I zkušební otázky a vlastní test je v angličtině. Je na něj dost času. Protože nejsi rodilý mluvčí anglického jazyka, dostaneš ještě čas navíc, to je v pravidlech. Zkušební otázky a laby (= situace v síti, něco jako řešení křižovatek v autoškole) jsou v různých provedeních; Pass4Sure, TestKing, dobrý je Visual Cert Exam s posledním platným dumpem otázek. To jsou všecko placené věci, ale VCE se dá sehnat i trial verze a vyzkoušet bez registrace. Zkouška je 55 otázek, 3 laby a kolem toho otázky na 2 hodiny. Při testu se nemůžeš vracet. Na konci testu se hned dozvíš počet bodů a víš hned, jestlis uspěl nebo ne. Musíš mít aspoň 825 bodů z 1000, abys uspěl. Navštívit můžeš weby:  
www.9tut.com  
tam jsou otázky a poslední platné laby na vyzkoušení s odpověďmi,  
www.subnettingquestions.com  
pro zkoušení subnetů. Je to sice demonstrováno na privátních subnetech, ale když se naučíš principy na tomhle, budeš je umět aplikovat i na veřejné adresy. Můžeš se podívat na  
www.sadhikov.com  
tam je fórům o certifikacích, poslední hinty od čerstvých absolventů a diskuse o tom atd.  
Ještě můžeš zkusit  
<http://www.examcollection.com>...   
další kolekce otázek a další weby, je toho plno.  
Po bezplatné registraci u Cisca si můžeš zahrát hru o subnettingu na stránkách Cisca. Subnetting je stěžejní pro CCNA, je potřeba ho zvládat bleskově a neváhat při výpočtu. Přitom stačí si zapamatovat několik čísel a několik jedonduchých principů, ale občas ze začátku se to dost plete, takže to nezabalit hned, ale vytrvat. Dá se na to připravit i bez toho, aby sis sáhnul na reálný switch nebo router. Na konfigurace se dá dobře použít Bosson NetSim, Dynamips, ale ten je docela složitý na rozchození a běží i pod Linuxem. Je náročný na hardware, hlavně procesor a paměť PC a je k němu nutné mít Cisco IOS pro router serie 7200 a ten je třeba zakoupit. Cisco IOS je Internetworking Operating System. Divim se, že Cisco ještě nezažalovalo Apple za použití slova IOS k označení svého systému pro telefony, byť v provedení iOS, i když je to stejně zavádějící. Dobrá věc je bezplatný simulátor Cisco Packet Tracer v poslední verzi. Jde zdarma stáhnout ze stránek Cisca bez registrace tuším. Je bezplatný, nenáročný, běží i z flashky bez instalace. Dělají se na něm i simulace pro CCNP, takže na CCNA hravě stačí. Dost věrně simuluje IOS. Některé podružné funkce nejsou implementované, ale jde vzít třeba nějaká síťka z knížky, namodelovat si ji a nakonfigurovat v consoli jednotlivá zařízení. Je pak i vidět, jak si třeba routovací protokol EIGRP vyměňuje routovací informace s dalšími routery nebo jak pracují STP a VTP protokoly na switchi. Dají se sehnat videa CBT Nugets (placené) nebo jiná, kde je názorně ukázáno, jak se co nastavuje, spojuje, jak to pracuje atd. Píšu to narychlo, ale chci pomoct. Taky se učím.  
  
Přeju hodně štěstí. Jeden dotaz ti nestačí?[http://www.zive.cz/poradna/nastaveni-ie/sc-2...](http://www.zive.cz/poradna/nastaveni-ie/sc-20-cq-512713/default.aspx?consultanswers=1) Divné. Že by další domácí úkol?! Se to nějak množí:[http://www.zive.cz/poradna/tabulka-vypocet/s...](http://www.zive.cz/poradna/tabulka-vypocet/sc-20-cq-571288/default.aspx?consultanswers=1)  (jak kamarádka?)[http://www.zive.cz/poradna/pomoc-s-ukolem-do...](http://www.zive.cz/poradna/pomoc-s-ukolem-do-skolyexcel-zaokrouhlovani/sc-20-cq-571209/default.aspx?consultanswers=1) <http://www.dobryden.cz/>... 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 Řekl bych 4c a 5c, ale hlavu na špalek bych za to nedal. Ostatní nevím, musel bych jít hledat do knihovny. <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> česká norma PALu je PAL-Gwww.helperr.webzdarma.cz