Jak zpráva s černým puntíkem rozbíjela aplikace na AndroiduTom Scott
5
Občas na internetu kolují různé zprávy a vtípky, které využívají nějakou obskurní chybu v kódu. A přesně takovou zprávou se před sedmi lety zabýval Tom. V tomto videu ukazuje, jak fungují neviditelné znaky v Unicodu, které za tímto prankem stály.
Přepis titulků
Existuje stará pirátská legenda
o černé tečce, kulatém útržku papíru, z jedné strany černém
a z druhé s poselstvím zkázy, co předznamenává odsouzení nebo smrt. A dnes tu máme také černou skvrnu,
takový černý puntík. Na WhatsAppu koluje zpráva, která aplikaci
rozbije, když kliknete na černý puntík. A je to úplně běžná chyba
s vykreslováním textu v Androidu, přes WhatsApp se to jen šíří. A já o tom původně nechtěl mluvit, protože takovéhle chyby
jsou dnes celkem časté a docela nudné.
Chybí tomu příběh. Pošlete divné znaky, spustíte chybu někde ve vykreslovači textu, to je ta část kódu, co ukazuje text na obrazovce. A protože nikoho nenapadlo poslat zrovna tuhle kombinaci znaků v tom konkrétním pořadí, protože v běžné řeči se to nestane, tak ta aplikace spadne. Jako kdykoli jindy. A brzy to někdo opraví.
Jenže v tomhle případě je zajímavé, jaké konkrétní znaky to způsobily. Když zanalyzujete, co vlastně ta zpráva s puntíkem obsahuje, zjistíte, že je tam spousta neviditelných znaků. Unicode, což je mezinárodní standard pro přenášení textu mezi počítači, obsahuje desetitisíce znaků pokrývajících všechny jazyky světa. Ale taky tam jsou definované neviditelné znaky. Jeden z nich je mezera s nulovou šířkou, značí místo, kde lze zalomit dlouhé slovo. Další určuje, jestli má diakritika nad a pod písmeny s nimi tvořit jeden znak, nebo se dělí na dva.
A některé znaky určují, jakým směrem má být text napsaný. Hodně jazyků se píše zprava doleva, například ty, které využívají arabské nebo hebrejské písmo. Když používáte tato písma, standard Unicodu se o všechno postará za vás. Ty znaky mají stanoveno, že jdou zprava doleva. Když použijete hebrejskou abecedu, všechna moderní zařízení ji napíšou zprava doleva.
Zleva doprava není vždy výchozí, i když to anglofonní svět očekává. Tohle základní nastavení znaků znamená, že když chcete napsat hebrejský text uprostřed angličtiny, není to problém. Kód, který text vykresluje, zjistí, jak dlouhý je úsek textu zprava doleva, tolik místa si tam nechá a pokračuje se zbytkem anglického textu. Nebo když potřebujete čísla psaná zleva doprava uprostřed arabského textu, co je zprava doleva, funguje to stejně. Většinou si s tím nemusíte dělat starosti.
Ale existují situace, krajní případy, kdy tohle nefunguje. Nebudu se je snažit popisovat, ani je nevyjmenuju, protože je to celé fakt matoucí a nezajímavé. Ale do popisku dám odkaz na dvousměrný algoritmus Unicodu. Tam si můžete přečíst detaily. Ve zkratce: aby bylo možné to vyjasnit, existují v Unicodu neviditelné znaky, které tomu vykreslovači říkají: „Hele, ten následující kousek napiš zprava doleva.
I když je to latinka.“ Anebo naopak. Za ty roky už tyhle znaky přinesly spoustu vtípků a triků. Dalo se to dávat do komentářů na blogu nebo na fóra… Pro mladší diváky: na blozích a fórech jsme si na netu povídali, než to všichni vzdali a vlezli do těch oplocených zahrad. Každopádně, když ty znaky dáte do komentáře na špatně udělaném webu, píšou najednou všichni pozpátku a je to hrozně matoucí. Před deseti lety nám to přišlo legrační. V té zprávě s černým puntíkem jsou asi 2 000 neviditelných znaků, které mění směr textu tam a zpátky.
A jsou to zkrátka znaky s definovaným směrem, jako byste napsali písmeno A a hebrejský alef tisíckrát vedle sebe. Jenže jsou všechny neviditelné a mají nulovou šířku. A někde v téhle džungli se ten systém prostě zmate. Text zvládne zobrazit, ale když na něj poklepete, musí zjistit, na jaký znak jste se to trefili, aby to šlo označit nebo zkopírovat.
A ty tisíce neviditelných znaků pak způsobí problém, jehož podstatu tým developerů z Androidu určitě vyřeší během pár týdnů. Má s tím ten černý puntík cokoli společného? Nejspíš ne. Asi by to šlo s jakýmkoli emotikonem. Možná s jakýmkoli znakem, stejně by to fungovalo. Zatím to ještě nevíme jistě, ale ten samotný černý puntík zřejmě nepřináší vašemu telefonu zkázu. Což platí i o té původní černé tečce.
To taky nebyla stará pirátská legenda. Robert Louis Stevenson si to vymyslel, když psal Ostrov pokladů. Překlad: jesterka www.videacesky.cz
Chybí tomu příběh. Pošlete divné znaky, spustíte chybu někde ve vykreslovači textu, to je ta část kódu, co ukazuje text na obrazovce. A protože nikoho nenapadlo poslat zrovna tuhle kombinaci znaků v tom konkrétním pořadí, protože v běžné řeči se to nestane, tak ta aplikace spadne. Jako kdykoli jindy. A brzy to někdo opraví.
Jenže v tomhle případě je zajímavé, jaké konkrétní znaky to způsobily. Když zanalyzujete, co vlastně ta zpráva s puntíkem obsahuje, zjistíte, že je tam spousta neviditelných znaků. Unicode, což je mezinárodní standard pro přenášení textu mezi počítači, obsahuje desetitisíce znaků pokrývajících všechny jazyky světa. Ale taky tam jsou definované neviditelné znaky. Jeden z nich je mezera s nulovou šířkou, značí místo, kde lze zalomit dlouhé slovo. Další určuje, jestli má diakritika nad a pod písmeny s nimi tvořit jeden znak, nebo se dělí na dva.
A některé znaky určují, jakým směrem má být text napsaný. Hodně jazyků se píše zprava doleva, například ty, které využívají arabské nebo hebrejské písmo. Když používáte tato písma, standard Unicodu se o všechno postará za vás. Ty znaky mají stanoveno, že jdou zprava doleva. Když použijete hebrejskou abecedu, všechna moderní zařízení ji napíšou zprava doleva.
Zleva doprava není vždy výchozí, i když to anglofonní svět očekává. Tohle základní nastavení znaků znamená, že když chcete napsat hebrejský text uprostřed angličtiny, není to problém. Kód, který text vykresluje, zjistí, jak dlouhý je úsek textu zprava doleva, tolik místa si tam nechá a pokračuje se zbytkem anglického textu. Nebo když potřebujete čísla psaná zleva doprava uprostřed arabského textu, co je zprava doleva, funguje to stejně. Většinou si s tím nemusíte dělat starosti.
Ale existují situace, krajní případy, kdy tohle nefunguje. Nebudu se je snažit popisovat, ani je nevyjmenuju, protože je to celé fakt matoucí a nezajímavé. Ale do popisku dám odkaz na dvousměrný algoritmus Unicodu. Tam si můžete přečíst detaily. Ve zkratce: aby bylo možné to vyjasnit, existují v Unicodu neviditelné znaky, které tomu vykreslovači říkají: „Hele, ten následující kousek napiš zprava doleva.
I když je to latinka.“ Anebo naopak. Za ty roky už tyhle znaky přinesly spoustu vtípků a triků. Dalo se to dávat do komentářů na blogu nebo na fóra… Pro mladší diváky: na blozích a fórech jsme si na netu povídali, než to všichni vzdali a vlezli do těch oplocených zahrad. Každopádně, když ty znaky dáte do komentáře na špatně udělaném webu, píšou najednou všichni pozpátku a je to hrozně matoucí. Před deseti lety nám to přišlo legrační. V té zprávě s černým puntíkem jsou asi 2 000 neviditelných znaků, které mění směr textu tam a zpátky.
A jsou to zkrátka znaky s definovaným směrem, jako byste napsali písmeno A a hebrejský alef tisíckrát vedle sebe. Jenže jsou všechny neviditelné a mají nulovou šířku. A někde v téhle džungli se ten systém prostě zmate. Text zvládne zobrazit, ale když na něj poklepete, musí zjistit, na jaký znak jste se to trefili, aby to šlo označit nebo zkopírovat.
A ty tisíce neviditelných znaků pak způsobí problém, jehož podstatu tým developerů z Androidu určitě vyřeší během pár týdnů. Má s tím ten černý puntík cokoli společného? Nejspíš ne. Asi by to šlo s jakýmkoli emotikonem. Možná s jakýmkoli znakem, stejně by to fungovalo. Zatím to ještě nevíme jistě, ale ten samotný černý puntík zřejmě nepřináší vašemu telefonu zkázu. Což platí i o té původní černé tečce.
To taky nebyla stará pirátská legenda. Robert Louis Stevenson si to vymyslel, když psal Ostrov pokladů. Překlad: jesterka www.videacesky.cz


Komentáře (0)