abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:55 | IT novinky

    Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Zajímavý software

    NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    dnes 10:55 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.

    Ladislav Hagara | Komentářů: 0
    včera 20:55 | IT novinky

    IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.

    Ladislav Hagara | Komentářů: 0
    včera 10:44 | Zajímavý článek

    Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.

    Ladislav Hagara | Komentářů: 32
    včera 01:00 | Nová verze

    Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    včera 00:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    5.6. 16:44 | IT novinky

    Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.

    Ladislav Hagara | Komentářů: 10
    5.6. 10:44 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.

    Ladislav Hagara | Komentářů: 0
    5.6. 10:22 | Nová verze

    Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.

    Ladislav Hagara | Komentářů: 2
    Rozcestník

    Naučte mě Perl 6. Úvod, I. volnost a variabilita

    4.4.2016 20:36 | Přečteno: 2939× | Perl | Výběrový blog | poslední úprava: 4.4.2016 20:36

    V první blogu o Perlu 6, po krátkém úvodu, ukáži jak Perl 6 umožňuje volnost a variabilitu psaní kódu.

    Úvod

    Na začátek jsem uvedl pár základních informací. Dávám čtenáři na zváženou, zda nechce Úvod přeskočit.

    Něco málo relativního o mne

    Nejsem programátor. Pro vlastní potřebu jsem se naučil Perl, ale je spousta věcí, v kterých mám velké mezery: debugování, testy, pluginy, práce v týmu, verzovací systémy atd. Většina mých skriptů se pohybuje od jednoho do sta řádků, kde směle kombinuje Perl s shell-em a dalšími svobodnými nástroji. Lehce jsem nahlédl i do dalších především skriptovacích jazyků jako Ruby, Python, scheme, lisp atd., ale vždy jsem se nejlépe cítil při skriptování v Perlu. Poslední dobou experimentuji s Perlem 6.

    Perl 6

    Perl 6 je jiný jazyk jako Perl 5 a nižší verze. Idea Perlu 5 a Perlu 6 je v jádru stejná, proto se oba jazyky nazývají Perl. Implementace Perlu 6 jsou zatím někdy až nesmyslně pomalé. V mém případě Rakudo na MoarVM:
    time -p perl6 -e ' join q{ },"AAAA" .. "DZZZ"'
    real 11.67
    user 11.60
    sys 0.06
    
    Pro srovnání Perl 5:
    time -p perl -e ' join q{ },"AAAA" .. "DZZZ"'
    real 0.07
    user 0.05
    sys 0.01
    
    Další informace jako proč Perl 6 vznikl, jak se nainstaluje, jaký je maskot Perlu 6, tutoriál a dokumentaci atd. věřím, že případný zájemce dokáže najít sám, např. na oficiálních stránkách Perlu 6.

    Naučte mě Perl 6

    V možné sérii blogů o Perlu 6, bych chtěl ukázat některé zajímavosti o tomto jazyku. Mé očekávání jsou, že případnými čtenáři budu doplněn, popřípadě, že v diskusi ukáží v rámci tématu zajímavosti a řešení ve svém oblíbeném skriptovacím/programovacím jazyce.

    I. Volnost a variabilita

    Perl vždy umožňoval psát velmi různorodý kód a vyžaduje jakousi sebekázeň při užívání možností psaní kódu. Pro tuto vlastnost je často nazýván write-only jazykem. Já ne vždy tuto sebekázeň najdu, ale podobně jsem se dříve nebo později začal unášet i v Pythonu nebo Ruby. Na druhou stranu při skriptování v Perlu rychle přijdete na to, že je to věc, na kterou si musíte dávat pozor. S tím, že to v Perlu nebude s čitelností tak horké se lze podívat např. na Rosetta Code, kde, alespoň v mých očích, zdaleka ne vždy v čitelnosti Perl prohrává.

    Dále bych chtěl ukázat, že Perl 6 se k této variabilitě hrdě hlásí a přidává další možnosti.

    V závorkách nebo bez

    V Perlu 6 je často možno vynechat závorky. Např. lze psát
    my @a = ( 1, 2, 3 );
    my @b = 1, 2, 3;
    if ( True ) { say "A" };
    if True { say "A" };
    
    Podprogramy nebo i metody lze volat bez závorek
      join ';', ( 1, 2, 3 );
      ( 1, 2, 3 ).join: ';';
    
    dokonce by jsme v první případě mohli vynechat závorky i kolem pole, ale nic se nemá přehánět. Už volání metody bez závorek může být pro někoho silné kafe, ale to teprve začínáme.

    Je to podprogram? Je to metoda?

    Jak bystrý čtenář postřehl, tak jsem join jednou použil jako podprogram a jednou jako metodu. V Perlu 6 je poměrně běžné, že k podprogramu existuje stejná nebo podobná metoda a obráceně. Ale co víc můžeme podprogram pomocí prefixu & volat jako metodu ';'.&join: 1, 2, 3;, srdce pythonisty muselo zaplesat. A také i metodu jako podprogram, i když tady mi to při přímém zadaní pole nefunguje, všimněte si dvojtečky my @a = 1,2,3; join @a : ';';.

    Celkově jsme dostali 4 možnosti jak zavolat join:
      my @a = 1..10;
    
      say join ';', @a;
      say @a.join: ';';
      say ';'.&join: @a;
      say join @a : ';';
    

    Prefix, postfix, infix.

    Perl 6 u if, while, for, ⋯ umožňuje postfixový zápis. Tedy můžeme použít obě následující možnosti.
      my $a;
      for <a b c d> {
        if ++$a %% 2 {
            .say
        }
      }
    
      .say if ++$a %% 2 for <a b c d>;
    
    Některé podprogramy mají jako alternativu (hyper)operátor
      say zip ^10, 'a' .. 'j';
      say ^10 Z 'a' .. 'j';
      say ^10 »,« 'a' .. 'j';
    

    Závěrem

    Téma jsme zdaleka nevyčerpali jako další příklady by se dali uvést možnosti feed operátoru, definice párů, podprogramů, term whathever *, proměnná $_ (malá skrytá ochutnávka je v posledním příkladu) atd. Abych udržel rozumnou délku, tak se k tomuto dostanu snad někdy příště. Doufám, že jsem vám alespoň trochu ukázal možnosti syntaxe Perlu 6 a to proč ho někteří budou označovat jako write-only a jiní za to ctít. Jaké jsou vaše názory na variabilnost Perlu 6? Jak jsou na tom vaše oblíbené skriptovací/programovací jazyky s volností psaní kódu?        

    Hodnocení: 91 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    xxx avatar 4.4.2016 21:10 xxx | skóre: 42 | blog: Na Kafíčko
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    To je seznam duvodu, proc nepouzivat Perl?
    Please rise for the Futurama theme song.
    wamba avatar 4.4.2016 21:47 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tak nejsi první koho jsem takhle Perlem 6 zastrašil. Ale já jsem chtěl spíše čtenáře k Perlu přilákat. Vždyť přece moci něco použít neznamená muset. No snad se jinde dostanu k něčemu, co tě na Perlu zaujme v dobrém. Takhle to vypadá, že zatím dělám Perlu medvědí službu.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    xxx avatar 4.4.2016 23:05 xxx | skóre: 42 | blog: Na Kafíčko
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Mne od Perlu uz davno odradilo lusteni prilis dlouheho a duleziteho skriptu, ktery psal clovek, pro ktereho byl Perl prvni jayzk.

    Medvedi sluzbu si dela Perl sam. Treba moznost vynechat pri volani funkce zavorky. Proc? K cemu mi to je? Abych usetril dva znaky za cenu horsi citelnosti. A to je jen zacatek, protoze vzhledem k te variabilite je treba furt premyslet co vlastne ctu. Jsem ve jmenu funkce, nebo je to parametr. Je to prvni parametr, nebo prvni prvek pole, atd...

    Ja chapu, ze genialni lidi se to treba nauci. Pro mne je ale permisa, že velka variabilita syntaxe je dobra, chybna.
    Please rise for the Futurama theme song.
    wamba avatar 5.4.2016 00:19 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tak ono to vynechání závorek může i čitelnost naopak zvýšit viz třeba v Perlu 5 Schwartzian_transform, té by přidání závorek spíše na čitelnosti ubralo. Ale samozřejmě nesmí se to s tím vynecháváním přehánět.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    5.4.2016 20:29 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Už dlouho tvrdím, že PHP sice vypadá, jako když pejsek s kočičkou vařili dort, ale že na perl těch zvířátek muselo být nejméně deset.

    Když jsem poprvé viděl obrácený podmíněný příkaz (statement if condition), dlouze jsem přemýšlel, jaké trauma musí mít za sebou člověk, který je schopen tohle vymyslet. A to jsem ještě netušil, že to není zdaleka nejhorší konstrukce.

    Hans1024 avatar 5.4.2016 21:27 Hans1024 | skóre: 5 | blog: hansovo
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Na to staci jeden sileny krestan, ktery se vyziva v lingvistice a dvakrat vyhral International Obfuscated C Code Contest.
    Veni, vidi, copi
    wamba avatar 6.4.2016 00:22 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Alespoň jde vidět, že bavit se psaním zmateného kódu začali programátoři v C a ne v Perlu. V Perlu, jestli se nepletu, se jako v prvním jazyce začal hrát golf. :)
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    Hans1024 avatar 6.4.2016 18:17 Hans1024 | skóre: 5 | blog: hansovo
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Perlovi programatori se tim nebavi, protoze cist obfuskovany kod jednou za rok je zabava, ale cist ho kazdy den je muceni :-D
    Veni, vidi, copi
    5.4.2016 22:44 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    dlouze jsem přemýšlel, jaké trauma musí mít za sebou člověk, který je schopen tohle vymysle
    Tak podobnou syntaxi má třeba VHDL:
    statement1 "when" condition "else" statement2
    a VHDL vzniklo na objednávku americké armády :-D.
    6.4.2016 21:39 prohnuta nudle
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tohle presne ma i python:

    foo if bar else baz
    wamba avatar 6.4.2016 00:15 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Znovu je to o použití on ten zápis if někdy může mít smysl:
    for ( 1 .. 10 ) {
        next if $_ % 2;
        say $_;
    };
    
    tady hned vidím, že se na druhém řádku dějí nějaké nekalosti;

    zatímco při klasickém zápisu
    for ( 1 .. 10 ) {
        if ( $_ % 2 ) {
            next ;
        };
        say $_;
    };
    
    se ten next poněkud ztrácí v závorkách a předpokládal bych, že po if se bude pokračovat vždy na dalé.

    A samozřejmě one-liners snesou hodně, tak často používám něco jako
    perl -ne 'print if /word/' 
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    21.4.2016 18:39 ChronicPain | blog: chronicPain
    Rozbalit Rozbalit vše Nejaky zastydly geek||ner...
    Nejaky zastydly geek||nerd? O hodne lepsi.
    http://www.klaus.sk/ – energeticky úsporné vykurovacie systémy
    mirec avatar 4.4.2016 22:14 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    wamba avatar 4.4.2016 23:38 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Znám tuto pěknou prezentaci např. ten slide 87, mi zase trochu otevřel oči.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    5.4.2016 09:54 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tak ten unicode mě teda dostává... Wtf...
    6.4.2016 21:43 prohnuta nudle
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Perl neni jazyk, to je postizeni.
    4.4.2016 23:05 hefo
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Rád by som vedel v stručnosti, v čom spočíva ten zásadný rozdiel medzi Perl 5 a 6, ideálne do 5 viet. Nech viem, či má zmysel sa nad 6-kou vôbec zamýšľať.

    Inak nie som veľmi presvedčený o tom, že voľnosť a variabilita je pozitívom Perlu. Možno pre osamelého skriptéra áno, ale pokiaľ je v tom urobený väčší projekt, kde sa v priebehu času vystriedalo okrem iného niekoľko generácií Indov alebo Číňanov, tak možnosť mastiť kód ako prasa pridáva len samé zlo.
    wamba avatar 5.4.2016 00:02 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Těch rozdílů je hodně a těžko hádat, co by vás zaujalo, např. je víc možností pro objektové i funkcionální programování, pro one-liners, pro regexp, nekonečné a liné seznamy, možnost typování, racionální čísla, množiny atd.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    5.4.2016 07:04 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    I'm a Perl 5 programmer. Where is a list of differences between Perl 5 and 6?

    Prostě je to jiný jazyk. Já osobně považuji za důležité jinou syntaxi regularních výrazů a vestavěný metaobjektový systém.

    5.4.2016 07:43 Xerces
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Osobně mě od 6tky odrazuje právě ta pomalost interpretace v porovnání s 5tkou. Zatím jsem to popravdě ani netestoval, ale co tak čtu tak zatím žádnej progress. Jinak já v tom mám napsanou (přepsanou z bash) jednu klíčovou věc a obrovskou výhodou Perlu je podpora na různých obskurních architekturách typických pro firemní prostředí.
    5.4.2016 07:18 pm
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Nejlepší na perlu je CPAN
    5.4.2016 18:58 R
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Pre programatora mozno. Pre spravcu je to nocna mora.
    5.4.2016 07:28 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Wow pure chaos, my kind of world :-D
    5.4.2016 09:31 Tomáš
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    +1 za upřímnost.

    Do těch 100 řádků se to snad dá, ale na opravdové programování je opravdu lepší poohlédnout se po opravdovém programovacím jazyku.
    Vykook avatar 6.4.2016 13:19 Vykook | skóre: 23 | blog: Tomas
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Zvláštní, v Perlu 5 dělám na projektech co mají počet řádek v řádu statisíců a s přehledností a čitelností není problém. Buď používáte nějaký jiný Perl a nebo jste ho nikdy neviděl a jen opisujete to populární klišé. P.S.: Prosím definuje ten opravdový programovací jazyk. Děkuji.
    Nejde nám o dobro druhých. Nejde nám o bohatství. Jde o čisté opojení mocí.
    mirec avatar 5.4.2016 12:52 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Tá rýchosť nie je náhodou dôsledkom použitia grafémov? V jazykoch bez podpory grafémov sú operácie nad reťazcami pomerne jednoduché a dajú sa pekne optimalizovať na SIMD, ale mergovanie tabuliek grafémov, ktoré musí robiť perl nie je práve najjednoduchšia operácia.

    Celkovo mám z unicode zmiešané pocity. Páčilo by sa mi kódovanie s pevnou šírkou (ani UTF32 nemá pevnú šírku) ...

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 13:34 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    ani UTF32 nemá pevnú šírku
    Huh?
    mirec avatar 5.4.2016 13:55 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Mysleli javisti, mysleli a nedomysleli.

    import unicodedata
    len(unicodedata.normalize('NFKD', 'č'))
    > 2

    Ukážka jedného znaku, ktorý zaberá 8 bytov (pretože je dekomponovaný na 'c' a '̌') [ehm áno je to úvodzovka s mäkčeňom]

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 14:14 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Jenže to jsou dva znaky.
    mirec avatar 5.4.2016 14:23 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Podľa akého pravidla? Perl aj python mi hlásia dĺžku 'č' ako 1. Pri dekomponovanej forme hlási python 2 znaky, perl stále 1.

    Čo sa mimochodom stane ak niekde do formulára na webovej stránke hodím znak ̌ ? Je znak '<̌' považovaný za zobáčik z HTML, alebo tým spôsobím xss?

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 14:33 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Podľa akého pravidla?
    Unicode.
    Pri dekomponovanej forme hlási python 2 znaky, perl stále 1.
    Pak to je IMHO špatně v Perlu, případně si věř, že skutečně počítáš délku normalizvaného stringu a že to Perl nějak nenormalizuje ještě vevnitř, čemuž bych se až tak nedivil...
    Je znak '<' považovaný za zobáčik z HTML, alebo tým spôsobím xss?
    Jsou to dva znaky a první je zobáček. Jeden znak zobáčku s háčkem AFAIK neexistuje.
    mirec avatar 5.4.2016 14:44 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Podľa toho skvelého pravidla ak dám vypísať reverzne 'česko' vznikne mi z toho oksěc pretože sa prehodí poradie kompozitných znakov. Perl tieto veci rieši korektne pomocou clusterov grafémov.

    Mimochodom Perl skutočne texty normalizuje do vlastnej normalizovanej formy s použitím nepriradeného priestoru unicode. Dokáže normalizovať všetky kombinácie háčikov, čiarok atď pretože si dynamicky vytvára tabuľku s grafémmi.

    Ak je <̌ interpretovaný ako 2 znaky prečo mi ho abclinuxu dovolí zapísať?

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 15:28 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Podľa toho skvelého pravidla ak dám vypísať reverzne 'česko' vznikne mi z toho oksěc pretože sa prehodí poradie kompozitných znakov.
    No to ano... a v čem je problém?
    Perl tieto veci rieši korektne pomocou clusterov grafémov.
    De/normalizace je typicky k dispozici ve všech možných jazycích, python to taky zpracuje správně, respektive zpracuje to tak, jak mu řekneš, aby to zpracoval. Pokud si to hodíš do NFKD jako výše, pak "č" budou dva znaky, pokud do NFKC, pak jeden. Obojí je korektní.

    Použij takovou normalizační formu, kterou potřebuješ ke svému účelu.
    Ak je <̌ interpretovaný ako 2 znaky prečo mi ho abclinuxu dovolí zapísať?
    Proč by ti ho nedovolil zapsat? Zobáček můžeš zapsat zcela bez ohledu na to, jestli je za ním háček nebo ne: <
    mirec avatar 5.4.2016 15:32 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Za bežných okolností ho zmení na &lt;. V mojom komentári nie je escapovaný (pri troche snahy by som tam možno prepašoval nejaký javascript na onmouseover, alebo niečo podobné).

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 15:50 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Zobáček v tvém komentáři se nijak neliší od toho mého.
    pri troche snahy by som tam možno prepašoval nejaký javascript na onmouseover, alebo niečo podobné
    Zkus to ;-)
    mirec avatar 5.4.2016 16:11 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Možno mi len browser blbne, ale ukazuje mi to bez escapovania
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 22:07 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Ano, není odescapovaný, ale není to tím háčkem, ábíčko prostě samotný < neescapuje.
    mirec avatar 5.4.2016 15:23 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita

    Inak k tej téme odporúčam pozrieť túto prezentáciu. Sú tam aj krásne ukázané exploity v rôznych webových službách. Ako je vidieť tu na zdrojových kódoch tak aj mne sa podarilo nechtiac exploitnúť tunajší HTML sanitizer. A to je len špička ľadovca. Vďaka nekompletnej podpore grafémov vo väčšine jazykov je mnoho webových aplikácií zbyčočne náchylných na XSS.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.4.2016 16:04 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Ako je vidieť tu na zdrojových kódoch tak aj mne sa podarilo nechtiac exploitnúť tunajší HTML sanitizer.
    Ale prd...
    Vďaka nekompletnej podpore grafémov vo väčšine jazykov je mnoho webových aplikácií zbyčočne náchylných na XSS.
    Prezentace je to moc pěkná, o tom žádná. Ale ten problém zdaleka není jen v grafémech, spousta problémů je s podporou non-BMP znaků, zejména kvůli všeobecné mizerné podpoře UTF-16.
    5.4.2016 21:22 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Unicode.
    Grafémy (znaky z pohledu uživatele) != code pointy (znaky z pohledu programátora).
    Pak to je IMHO špatně v Perlu
    Z pohledu uživatele je to v Perlu dobře. Počet znaků by měl jít IMO určit bez znalosti interní reprezentace (tato je pro uživatele technický detail; IMO úplně ideální by bylo, aby šel počet znaků určit i po vytištění na papír).
    5.4.2016 22:59 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    >>>IMO úplně ideální by bylo, aby šel počet znaků určit i po vytištění na papír

    Větší kravinu už jste plácnout nemohl. Vzhledme k tomu, že Unicode obsahuje také řící znaky, jak je budete počítat na papíře?

    A nebo typografie? Máte v Unicode např. mezery různých šířek, jako je 1/3 em-size, 1/4, a asi 20 dalších. Přeji hodně štěstí ve zjišťování kolik mezer bylo v počítačové formě a kde, až to vyrisknete na papír.

    Unicode nikdy o grafémech, ani tvarech znaků (tedy to co vytisknete) nebyl. Pokud čekáte takovou službu, od toho je vektorová grafika jako SVG, apod.

    Právě to, že Perl 6 se rozhodl dělat si vlastní „ruskij pristup k unicode“, tedy standardy sem, standardy tam, co bychom se jimi řídili – je jeden z důvodů, proč Perl 6 nepoužívat.

    V Unicode je pár kostlivců, ale také hodně domyšleného – a jedno z velmi domyšlených je, že code point není a nebude nutně v relaci s výsledným znakem. Grafém je odvážná konstrukce Perlu 6, který jako stejně snadno zahodil Perl 5, tak stejně snadno se pokouší zahodit celý Unicode standard.

    Ono to hledání grafému není ani jednoznačná funkce.

    Ale povzbuzen Perlem 6 a jeho inovátorství doporučuji novou změnu. V C už nebudou řetězce zakončeny nulou, protože ten znak se hodí, ale kontrolním znakem 1 (start of heading), který se snad nikdy nepoužil za posledních 10 let.

    Proč nebořit zavedené a funkční, když můžeme, a navíc se jmenuji Larry Wall. Dovedl do nezájmu celý Perl, s tím, že už většina lidí jen s úžasem kouká, jak zabíjí celý Perl a veškerý zájem o něho. Nicméné buď se bude chovat podle Unicode standardu, nebo Perl bude mít problém. Nikdo se Perlu přizpůsobovat nebude, a ničit zavedený standard.
    5.4.2016 23:47 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Větší kravinu už jste plácnout nemohl. Vzhledme k tomu, že Unicode obsahuje také řící znaky, jak je budete počítat na papíře?
    Ty bych nepočítal, to nejsou znaky z uživatelského pohledu.
    A nebo typografie? Máte v Unicode např. mezery různých šířek, jako je 1/3 em-size, 1/4, a asi 20 dalších. Přeji hodně štěstí ve zjišťování kolik mezer bylo v počítačové formě a kde, až to vyrisknete na papír.
    Ano, z tohoto pohledu mi Unicode přijde špatně navržený – je tam řada znaků, které vypadají stejně (nebo velmi podobně).
    Unicode nikdy o grafémech, ani tvarech znaků (tedy to co vytisknete) nebyl.
    To se pletete, Unicode je i o grafémech – viz část Unicode Text Segmentation.
    Ono to hledání grafému není ani jednoznačná funkce.
    Standard Unicode obsahuje algoritmy pro určování hranic grafémů.
    6.4.2016 08:59 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Ty bych nepočítal, to nejsou znaky z uživatelského pohledu.
    Jasně, že to jsou znaky, v jazycích typicky nesou význam. Unicode je IMHO považuje za znaky i grafémy.

    Každopádně, počítání grafémů mi nepřijde nijak moc užitečné. Člověk potřeuje počítat nebo iterovat znaky typicky právě z technických důvodů než z uživatelských. Jasně, pokud třeba chci uživateli spočítat, kolik písmen nebo slov má jeho text, dává smysl použít počítat grafémy, ale to je IMHO okrajový případ, většinou potřebuje iterovat/indexovat string právě z technických důvodů (různé validace, sázecí algoritmy, et al.). A i z uživatelského pohledu dává kolikrát větší smysl použít znaky - například kursor v editačním UI taky neoperuje nad grafémy, ale nad znaky.

    Určitě je fajn mi API pro práci s grafémy, ale stringy, které by-default pracují s grafémy, mi nepřijdou jako dobrý nápad - dříve nebo později to někoho kousne do zadku.
    mirec avatar 6.4.2016 09:17 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    ale stringy, které by-default pracují s grafémy, mi nepřijdou jako dobrý nápad - dříve nebo později to někoho kousne do zadku

    Práve naopak. Ak používajú grafémy nemôže sa omylom stať, že odseknem čať znaku (hovorím o znakoch z pohľadu používateľa nie code pointoch) keď chcem napríklad na webe skrátiť text.

    Keď by sme už mali túto myšlienku dotiahnuť dokonca prečo by vlastne mal string typ pracovať s unicode? Správne to má vyriešené v tom prípade PHP.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    6.4.2016 10:31 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    No tak například ten bug zmíněný v prezentaci s tím <img̊ by v Perlu 6 mohl nastat úplně stejně, protože Perl by to g̊ bral jako jeden znak, zatímco browser nebo jiný software by to mohl brát jako dva. Mimochodem, když už jsme u tohohle bugu, silně pochybuju, že zrovna v této situaci je reálně zneužitelný - browser neinterpretuje <img̊ jako img tag ať už je to g̊ jeden znak nebo dva. Ale teoreticky by mohla existovat situace, kdy by to problém byl, takže určitě je potřeba si na to dát pozor. A na to stringy, které pracují pouze s grafémy, nestačí.

    Další co mě napadá, je, že by do Perl 6 stringu mohl člověk narvat nadbytek dat, například pokud by normální znak byl vždy následovaný N diakritickými znaky, pak by Perl hlásil jako délku stringu pouze počet grafémů (ie. těch normálních znaků), zatímco co reálná délka stringu by byla násobně až řádově větší. Pro zajímavost: tímto způsobem lze dostat do kolen konsoli v KDE.
    6.4.2016 12:08 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tak jsem to vyzkoušel:

    unicode.pl:

    # my $str = "नि";
    my $str = "X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃X̊̀̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃̊̀̇̎̍̋̊̑̓̆̃";
    
    say "Chars: {$str.chars}";
    say "Codes: {$str.codes}";
    

    Výstup:

    $ perl6 unicode.pl
    Chars: 10
    Codes: 14000
    

    Skvělé. Už se těším, až tohle někdo použije ve webové aplikaci a zkontroluje pouze chars, nikoli codes. To půjdou ty DoSy jedna báseň :-D
    6.4.2016 19:14 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    To půjdou ty DoSy jedna báseň
    Pokud budou aplikace psány v rozumných jazycích a s rozumnými knihovnami, tak ne.
    mirec avatar 6.4.2016 12:15 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    do Perl 6 stringu mohl člověk narvat nadbytek dat, například pokud by normální znak byl vždy následovaný N diakritickými znaky

    Tu nie je problém, že to umožňuje perl. Problém je v šialenom návrhu unicode. Najradšej by som bol keby žiadne skladanie a normalizované formy neexistovali, znaky by mali jednoznačnú pevnú šírku. Bez tejto podmienky tu nevidím jednoznačné výhody UTF-32. Nemôžem jednoducho spočítať šírku keď chcem napríklad do konzoly zarovnať výpís tabuľky. Nemôžem sa spoliehať na substringy ...

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    6.4.2016 12:32 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tu nie je problém, že to umožňuje perl.
    Souhlasím, nicméně nelíbí se mi, že to API je prezentované jako jednoduché, na které se člověk může spolehnout. Nemůže. Nicméně to neplatí pouze pro Perl 6, ale i pro většinu jiných stringových API...
    Problém je v šialenom návrhu unicode.
    IMO to není problém Unicode. Viz komentář Ivana níže, to je přesně ono. Unicode je komplexní, protože řeší komplexní problém. Pokud má Unicode fungovat správně a pokrýt veškeré nároky, musí být trochu "šílený".

    Bez skládání znaků a normalizace by např. byl velký problém s ligaturami - tj. třeba fi za sebou - a to je jen blbá latinka, co třeba semitské, indické nebo japonické jazyky - viz třeba full-width katakana, jejiž znaky zabárají šířku dvou znaků latinky.
    Nemôžem jednoducho spočítať šírku keď chcem napríklad do konzoly zarovnať výpís tabuľky.
    Za to může komplexnost daného problému - zarovnávání obecných Unicode znaků na nějakou pevnou šířku. Mimo jiné je to závislé také na tom, jak to daná konzole interpretuje, nicméně pokud použiješ správné nástroje, dostaneš se s trochou štěstí ke správnému výsledku. Viz tato otázka na SO (psal jsem tam odpověď, koukám, že linky už nefungují, ale dohledat se to určitě dá...).

    Naprostá většina "problémů Unicode" spočívá v tom, že někdo si neuvědomuje, jak je ten problém ve skutečnosti složitý. Unicode není šílené, šílené je zpracování textu, protože šílená jsou lidská písma.
    6.4.2016 21:09 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Konečně někdo rozumný!

    Mnoho počítačových odborníků žije dodnes v době 7bitového ASCII na textovém terminálu s monospaced znaky.

    Polovina lidí v této diskusi dokonce ještě neobjevila ani v češtině tak primitivní věc, jako je diakritika, ale to jim nikterak nebrání vysvětlovat, jak oni by všechno udělali lépe.

    Práce s texty, a lidskými texty je obecně velmi složitý problém. A Unicode tento problém velice zjednodušuje – ale nikoli stylem, že se sanží zastřít komplexnost lidských textů a jejich zpracování.
    ⧠ A = 0 avatar 8.4.2016 19:14 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    +1
    Nevolte zmrdy.
    6.4.2016 21:05 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    >>> Problém je v šialenom návrhu unicode. Najradšej by som bol keby žiadne skladanie a normalizované formy neexistovali, znaky by mali jednoznačnú pevnú šírku.

    A k čemu by to bylo? I když se podíváte do textu, tak třeba malé písmeno i je mnohem užší, než třeba m, a je to tak přirozené.

    >>> Bez tejto podmienky tu nevidím jednoznačné výhody UTF-32. Nemôžem jednoducho spočítať šírku keď chcem napríklad do konzoly zarovnať výpís tabuľky.

    Ano, protože znaky mají přirozeně různou šířku. To nemá s Unicode absolutně nic společného, pokus hodit tuto vlastnost textů na Unicode mi připadá pokusy hodit všechno na Putina, nebo na USA. Unicode za různou šířku znaků nemůže, to bylo u lidstva už mnoho staletí a tisíciletí před Unicode a před počítači vůbec.

    >>> Nemôžem sa spoliehať na substringy ...

    To můžete.
    6.4.2016 21:13 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Problém je v šialenom návrhu unicode.

    Co je šílené, je svět, unicode se ho snaží jen nějak popsat. Stejně jako třeba definiční soubory časových zón nebo locale.

    6.4.2016 19:13 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Člověk potřeuje počítat nebo iterovat znaky typicky právě z technických důvodů než z uživatelských.
    To mi přijde dost nízkoúrovňové. Z uživatelského hlediska mi to dává smysl pouze při ukládání nebo přenosu dat – v jiných situacích mi dávají grafémy mnohem větší smysl než code pointy nebo menší jednotky, neboť uživatelé většinou neznají věci jako znaková sada, kódování atd.
    to je IMHO okrajový případ, většinou potřebuje iterovat/indexovat string právě z technických důvodů
    Pak se spíše jedná o pole bajtů než o text.
    sázecí algoritmy
    Proč by sázecí algoritmy měly pracovat s code pointy nebo menšími jednotkami? Přijde mi, že tam se naopak pracuje se znaky nebo většími jednotkami (např. slitky).
    6.4.2016 21:17 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    „Proč by sázecí algoritmy měly pracovat s code pointy nebo menšími jednotkami? Přijde mi, že tam se naopak pracuje se znaky nebo většími jednotkami (např. slitky).“

    Tak, a teď jste narazil na jádro pudla. Podle typu zpracování jsou grafémy pokaždé jinak velká skupina code pointů. Tudíž přístup Perlu 6 je akorát krok do žumpy.

    Ony totiž sázecí programy mohou (a třeba TeX to tak umí, když budete chtít) také tisknout akcent a písmeno ve dvou krocích. Tedy mohou klidně považovat třeba code point s písmenem á za dvě jednotky tisku, a konec zvonec.

    Stejně tak pokud použijete OpenType fonty, pak každý font a každá variace ligatur může za grafím považovat pokaždé zcela jiné skupiny znaků.

    Grafémy jsou prostě utopie – nejde je jednoznačně určit, ani pro člověka, natož pro různé sázení či jiné zpracování. A proto také Unicode nic takového neurčuje, a pokud dává algoritmus, tak hned v úvodu píše o nejednoznačnosti – což pan Míček, který tímto papírem práskl si kromě nadpisu nic jiného nepřečetl. Evidentně je odborník na baterky, ale číst ho ještě nenaučili, a pochopit význam před tím, než dokumentem bude argumentovat.
    6.4.2016 10:14 Ivan2 | skóre: 5
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Ano, z tohoto pohledu mi Unicode přijde špatně navržený – je tam řada znaků, které vypadají stejně (nebo velmi podobně).
    Zrovna nedavno jsem v praci resil proc mam v databazi dva uzivatele se stejnym jmenem. Nakonec se ukazalo, ze jedno ze jmen zacima na M z azbuky. V byvale praci se nekomu poradilo zastavit celou banku tim, ze udelal copy&paste z PDF od weboveho formulare a vlozil do DB znak, se kterym si zbytek systemu nedokazal poradit.

    Nemyslim, ze je to uple spatne navrzeno, jen si malo lidi uvedomuje, jak je to ve skutecnosti slozite a vubec tyhle problemy neresi. I autori Javy si dlouho mysleli, ze UTF16 ma pevnou sirku znaku.

    PS: Unicode obsahuje nejake indicke znaky, u kterych je to naopak, je to jedno pismeno(znak), ale typograficky ma sirku 2 pismen.
    6.4.2016 20:56 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    2) >>>Ano, z tohoto pohledu mi Unicode přijde špatně navržený – je tam řada znaků, které vypadají stejně (nebo velmi podobně).

    Jak už jsem psal, Unicode není o vzhledu znaků. Jakkoli se šestkoví perlisté snaží vyvolávat ten dojem.

    3) >>>To se pletete, Unicode je i o grafémech – viz část Unicode Text Segmentation.

    Škoda, že jste se neobtěžoval si tu číst vůbec přečíst, jinak byste se z ní dosvěděl přesně to, co vám píši. Ale chápu, vědět kulové, a zkusit praštit dokumentem, aniž vím, o jaký dokument jde – to zkouší na plebs kdejaký úřada – a někdy se tím lidi nechají zastrašit.

    Tak ano, neprošlo vám to – a navíc jsem pochopil, že o tom víte ještě většíé kulové, než jsem si myslel. Příště si, prosím, alespoň ten text přečtěte – já jsem poměrně otravný v tom, že bez toho ze mě blbce neuděláte.

    4) >>>Ono to hledání grafému není ani jednoznačná funkce. Standard Unicode obsahuje algoritmy pro určování hranic grafémů.

    A zároveň konstatuje, že tyto algoritmy nemohou být jednoznačné, ani kdybyste se rozkrájeli a ještě poprosili Alláha, Peruna, Manitúa a 26 egyptských bohů dohromady.
    6.4.2016 21:40 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Unicode není o vzhledu znaků.
    Součástí standardu je Character Code Charts – referenční vzhled znaků.
    Škoda, že jste se neobtěžoval si tu číst vůbec přečíst, jinak byste se z ní dosvěděl přesně to, co vám píši. Ale chápu, vědět kulové, a zkusit praštit dokumentem, aniž vím, o jaký dokument jde – to zkouší na plebs kdejaký úřada – a někdy se tím lidi nechají zastrašit.
    Lze se tam mj. dočíst
    It is important to recognize that what the user thinks of as a “character”—a basic unit of a writing system for a language—may not be just a single Unicode code point. Instead, that basic unit may be made up of multiple Unicode code points. To avoid ambiguity with the computer use of the term character, this is called a user-perceived character. For example, “G” + acute-accent is a user-perceived character: users think of it as a single character, yet is actually represented by two Unicode code points. These user-perceived characters are approximated by what is called a grapheme cluster, which can be determined programmatically.
    a ve slovníčku
    Grapheme. (1) A minimally distinctive unit of writing in the context of a particular writing system. For example, ‹b› and ‹d› are distinct graphemes in English writing systems because there exist distinct words like big and dig. Conversely, a lowercase italiform letter a and a lowercase Roman letter a are not distinct graphemes because no word is distinguished on the basis of these two different forms. (2) What a user thinks of as a character.
    Tj. zjevně se to týká grafémů a jejich aproximace pomocí grafémových klastrů.
    A zároveň konstatuje, že tyto algoritmy nemohou být jednoznačné
    Algoritmy pro grafémové klastry (viz 3.1.1 Grapheme Cluster Boundary Rules) jsou IMO jednoznačné a jednoduché, co vám tam přijde nejasné?
    7.4.2016 20:54 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Přečtěte si, prosím, ten dokument celý a nevytrhávejte věty bez kontextu. Děkuji. To je vše, co k tomu mohu říci.
    7.4.2016 21:44 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Jaký kontext chybí? První citace je úvodní odstavec z části 3, druhá citace je celé heslo ze slovníčku.
    7.4.2016 23:37 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Chybí např. opakované upozornění daného dokumentu, že segmentaci textu nelze provést jednoznačně, a že podle kontextu může být za „grafém“ považováno v různých případech různě dlouhé sekvence code pointů na stejném místě textu.

    Také to, že „grafém“ (záměrně používám terminologii této diskuse, nikoli standardu Unicode, aby došlo k jakémus takémus porozumění) lze definovat různě. Výslovně tam uvádějí třeba příklad „slovenské dvohlásky CH“, která ve slovenském kontextu může, ale také nemusí, být považována za jediný grafém, zatímco jinde za grafémy dva.

    Dále byste se třeba dozvěděl, že daný algoritmus není jediný, ale že je orientační, a že dokument uvádí hned dva algoritmy (označené jako výchozí) – pochopitelně s nestejnými výsledky.

    A to nejsem ani v desetině připomínek, které k vašemu účelovému vytrhávání a dělání dojmu, zlé jazyky by řekli k manipulaci, že existuje jasný, a jednoznačný postup segmentace textu, stejně jako definice grafému, ačkoli i zběžné přečtení dokumentu na první dojem ukazuje, že dokument se snaží tvrdit spíše opak.

    Dokumenty, které jsou součástí standardu, platí jako celek. Je to stejné, jako právní smlouvy. Neplatí vytržená věta, která se vám hodí pro dělání dojmu, ale platí celá smlouva.

    Kromě toho v dokumentu uvádějí tu podstatnou věc, že poznat grafém je těžký, téměř neřešitelný problém, proto namísto hledání grafémů budou tuto věc ochcávat, a namísto toho hledají daným algoritmem rozdělovací místa, kde předpokládají, že jsou hranice/separátory grafémů.

    A i to je neřešitelný úkol, protože – což prakticky cituji daný dokument – v textu není dostatek informace pro rozpoznání úkolu toho kterého code pointu v textu, tedy že samotná Unicode sekvence jako text neobsahuje všechny potřebné informace. A opět výslovně citují třeba tečku, která podle nich může být jak oddělovačem věty, tak třeba označením zkratky slova, nebo také součástí desítkové číslice jako desetinná čárka.

    Jinak řečeno, ani jste se nenamáhal daný dokument byt elementárně přečíst, ale prostě jste ho chtěl použít jako bič za svůj názor. A já nemám ani tu nejmenší náladu s vámi dále diskutovat, a ztrácet čas, abyste si kryl své ego a tvář, protože nejste schopen přiznat, že jste přestřelil a nic o tom nevíte.

    7.4.2016 23:54 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Chybí např. opakované upozornění daného dokumentu, že segmentaci textu nelze provést jednoznačně, a že podle kontextu může být za „grafém“ považováno v různých případech různě dlouhé sekvence code pointů na stejném místě textu.
    To nechybí – píši, že se jedná o aproximaci.
    že dokument uvádí hned dva algoritmy (označené jako výchozí) – pochopitelně s nestejnými výsledky.
    Však píši algoritmy (množné číslo).
    zlé jazyky by řekli k manipulaci, že existuje jasný, a jednoznačný postup segmentace textu, stejně jako definice grafému, ačkoli i zběžné přečtení dokumentu na první dojem ukazuje, že dokument se snaží tvrdit spíše opak.
    Ty algoritmy jsou jednoznačné.
    Kromě toho v dokumentu uvádějí tu podstatnou věc, že poznat grafém je těžký, téměř neřešitelný problém
    Ano, to je pravda, proto se používají zmíněné aproximace, které jsou jednoznačné a jednoduché.

    Jediné, co vás tedy trápí je, že se říká grafém místo grafémový klastr (případně ještě přesněji legacy grapheme cluster nebo extended grapheme cluster)?
    21.4.2016 04:10 ChronicPain | blog: chronicPain
    Rozbalit Rozbalit vše +1Musim rici, ze takovy k...
    +1Musim rici, ze takovy kavovar a k tomu ten router bych si od cz nicu urcite poridil a to bez legrace. Z meho pohledu patri vztahy s zenami a vse, co s tim souvisi, k zivotu a bez toho by zivot jednoduse nebyl plnohodnotny.
    http://www.klaus.sk/ – energeticky úsporné vykurovacie systémy
    wamba avatar 5.4.2016 13:53 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Tak ona se ta pomalost projevuje i jinde než při práci s řetězci např. je velký rozdíl v rychlosti mezi $j=$j+1 a $j++ :) Nebo jde použít knihovny z Perlu 5, ale u mě to prodlouží spouštění skriptu o cca 8s. Chápu, že to často budou problémy v idei, něco jako zatím toto implementujeme správně a na rychlost přijde čas později. Ale pro nás, kdo se snažíme v Perlu 6 skriptovat je to dost otravné.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    5.4.2016 23:02 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Pokud se jazyk namísto na optimalizace běhu a výsledných vlastností neustále soustředí na překopávání, výsledkem jsou nejpomalejší existující jazyky, co existují. Viz Perl a Python.

    Pomalost je nutný vedlejší efekt nectění zpětné kompatibility.
    Bystroushaak avatar 6.4.2016 11:46 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Python pod pypy zas tak pomalý není.
    6.4.2016 21:22 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    1) Pypy je alternativa, nikoli standardní python

    2) I tak není pypy zrovna rychlostní rekordman
    ⧠ A = 0 avatar 8.4.2016 19:21 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Jenže pod pypy zas nefungují knihovny s částmi psanými v cythonu. A ty jsou zas rychlejší než pypy (nehledě na to, že jejich funkcionalitu často jiné knihovny neimlementují)... Takže ve výsledku je mi celý pypy na dvě věci.
    Nevolte zmrdy.
    7.4.2016 13:41 jiri.v
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Je otázka, zda je "hodně variability" dobrá věc. Může být tehdy, používá-li se rozumně. Ale taky zvyšuje potenciál toho udělat v kódu neplechu, což vadí zejména u velkých projektů, na nichž pracuje více než jeden člověk. Za hlavní výhodu perlu považuju spíš to, že kód píšu "tak jak myslím" a nemusím se tolik soustředit na to jak něco zkonstruovat, protože to skoro vždycky jde okamžitě pomocí základních prostředků jazyka.

    Jinak v perlu máme metody, jak potenciální nečitelnost danou variabilitou eliminovat a dosáhnout vysoké čitelnosti - jde o různé sady konvencí, které se striktně vynucují. Díky nim tak perl nepřijde o nic zásadního ze své síly a zároveň dosáhne vysoké čitelnosti. Taky jsem přesvědčen, že striktní konvence potřebuje každý velký projekt nehledě na jazyk.
    wamba avatar 7.4.2016 15:32 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6. Úvod, I. volnost a variabilita
    Souhlasím. V Perlu 6 se musí ještě tyto konvence ustanovit a ustálit. A věci jako perltidy a perlcritic zatím pro něj nejsou.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.