1 00:00:00,000 --> 00:00:09,647 2 00:00:09,647 --> 00:00:11,730 Reproduktor: teraz poďme skok do distribučnej kódu 3 00:00:11,730 --> 00:00:14,470 a pozrite sa na kontexte v ktorom je kód písanie 4 00:00:14,470 --> 00:00:15,780 sa bude v prevádzke. 5 00:00:15,780 --> 00:00:17,350 Na konci dňa, budete realizovať 6 00:00:17,350 --> 00:00:18,710 celistvosť webového servera. 7 00:00:18,710 --> 00:00:20,460 Ale my sme za predpokladu, ste s kostrou 8 00:00:20,460 --> 00:00:24,090 Kód, ktorý má niektoré funkcie, najmä v súvislosti s sietí. 9 00:00:24,090 --> 00:00:25,390 Poďme sa pozrieť. 10 00:00:25,390 --> 00:00:27,560 >> Tak sa tu smerom nahor súboru je partia 11 00:00:27,560 --> 00:00:30,020 z funkcie vyskúšať makro požiadavky. 12 00:00:30,020 --> 00:00:33,570 Teraz je to len vlastnosť C, pričom podľa banda manuálových stránok 13 00:00:33,570 --> 00:00:36,410 musíte definovať niektoré Tieto konštanty aby to bola pravda 14 00:00:36,410 --> 00:00:39,920 alebo aby dokonca konkrétne čísla tak, aby máte prístup k niektorým funkciám. 15 00:00:39,920 --> 00:00:42,470 V opačnom prípade budete nelegálna a nebudete mať prístup. 16 00:00:42,470 --> 00:00:45,340 Tak som to urobil formou čítanie manuálových stránok. 17 00:00:45,340 --> 00:00:48,410 Teraz dole, v riadky 15 až 17, sme 18 00:00:48,410 --> 00:00:50,550 majú veľa limitných hodnôt deklarovaných. 19 00:00:50,550 --> 00:00:53,370 >> A my sme si požičal od nich populárne web server s názvom Apache. 20 00:00:53,370 --> 00:00:54,650 A to sú len Čísla sa deje 21 00:00:54,650 --> 00:00:56,810 že obmedzí celkový počet bajtov, ktoré sú povolené 22 00:00:56,810 --> 00:01:01,930 v rôznych súvislostiach pre HTTP požiadavky že prehliadač nemá ma poslať. 23 00:01:01,930 --> 00:01:04,310 Ďalej definujeme oktetov. 24 00:01:04,310 --> 00:01:07,790 Teraz oktet je len ozdobný spôsob, ako hovoriť byte, alebo osem bitov. 25 00:01:07,790 --> 00:01:10,720 Ukázalo sa, že v minulosti byte Neboli to nutne osem bitov, 26 00:01:10,720 --> 00:01:12,339 takže oktet je vždy osem bitov. 27 00:01:12,339 --> 00:01:14,880 Takže v tomto prípade sme sa prijímajú to, čo je bežné v sietí 28 00:01:14,880 --> 00:01:17,410 Svet volá osem bytov oktet. 29 00:01:17,410 --> 00:01:21,840 >> Tu som si stanovila, že bude oktetov bolo 512, takže rovnako ako v forenznú 30 00:01:21,840 --> 00:01:24,170 keď čítame veľa bytov v dobe, aj tu, 31 00:01:24,170 --> 00:01:27,390 budeme čítať banda oktetov naraz. 32 00:01:27,390 --> 00:01:28,922 Ďalšie veľa hlavičkových súborov. 33 00:01:28,922 --> 00:01:30,255 Ako viem, že sú tieto? 34 00:01:30,255 --> 00:01:32,730 Tak som proste čítal muža Stránky pre rad funkcií 35 00:01:32,730 --> 00:01:35,620 že budeme používať v tejto distribúcii kód a zaradiť do tých 36 00:01:35,620 --> 00:01:37,390 Som bol inštruovaný. 37 00:01:37,390 --> 00:01:39,090 >> A teraz máme dátový typ. 38 00:01:39,090 --> 00:01:41,470 My sme deklarovali oktet za char. 39 00:01:41,470 --> 00:01:44,040 A uvidíme neskôr, že je to používa v kóde. 40 00:01:44,040 --> 00:01:45,670 A my sme deklaroval Celá partia prototypov, 41 00:01:45,670 --> 00:01:47,961 a my budeme chodiť rýchlo prechádzať každej z týchto funkcií. 42 00:01:47,961 --> 00:01:50,400 Konečne, a možno najviac dôležité, aby v 43 00:01:50,400 --> 00:01:52,520 myseľ v tomto bode príbeh, je to tam 44 00:01:52,520 --> 00:01:54,520 sú v skutočnosti celá banda globálnych premenných 45 00:01:54,520 --> 00:02:00,430 v hornej časti súboru, koreň, CFD, SFD, otázka, súborov a telo. 46 00:02:00,430 --> 00:02:03,960 >> A teraz všeobecne, s použitím toľko globálnej premenné, alebo globálne premenné vôbec, 47 00:02:03,960 --> 00:02:05,280 nie je späť prax. 48 00:02:05,280 --> 00:02:09,090 Ale ukazuje sa, že sme aj za použitia technika nazýva spracovanie signálov neskôr 49 00:02:09,090 --> 00:02:11,930 v kóde, ktorý nám umožňuje rozpoznať, kedy užívateľ zasiahne niečo 50 00:02:11,930 --> 00:02:15,080 ako CTRL C a vypnutie Server elegantne. 51 00:02:15,080 --> 00:02:18,240 A aby k tomu, že elegantne a skutočne uvoľniť pamäť, 52 00:02:18,240 --> 00:02:20,800 musíme mať prístup k Tieto globálne premenné. 53 00:02:20,800 --> 00:02:24,510 >> A teraz poďme sa pozrieť na hlavné, čo riadi celistvosť tohto programu. 54 00:02:24,510 --> 00:02:27,720 Po prvé, na vrchole sme tu majú chybu číslo premenné 55 00:02:27,720 --> 00:02:29,570 ktorá sa nezdá mať typ, ale to je 56 00:02:29,570 --> 00:02:31,500 pretože je to v skutočnosti definované v súbore 57 00:02:31,500 --> 00:02:34,800 Chyba errno.h ktorý je súčasťou vyššie. 58 00:02:34,800 --> 00:02:38,780 Ak si človek errno vlastne pozri definície pre túto vec, 59 00:02:38,780 --> 00:02:41,230 uvidíte, že to je špeciálna globálna premenná, ktorá 60 00:02:41,230 --> 00:02:43,350 je stanovená celá partia funkcií nenapísal 61 00:02:43,350 --> 00:02:48,730 u nás, ale autori Linuxe a iné systémy sa skutočne nastaviť 62 00:02:48,730 --> 00:02:52,400 číslo tejto premennej, keď sa niečo pokazí, takže môžete po celom svete 63 00:02:52,400 --> 00:02:54,830 zistiť, čo urobil pokaziť. 64 00:02:54,830 --> 00:02:58,540 >> Teraz dole uvidíte nový Technika prípadne s využitím getopt, 65 00:02:58,540 --> 00:03:01,790 funkcia, ktorá pomáha derivačný príkaz riadku argumenty, takže robíme nie 66 00:03:01,790 --> 00:03:05,540 musieť obťažovať strácať čas premýšľaním na to, ako rozobrať niečo ako 8080, 67 00:03:05,540 --> 00:03:08,350 alebo pomlčka p, alebo pomlčka h dostať pomoc. 68 00:03:08,350 --> 00:03:10,300 getopt v podstate to pre nás robí. 69 00:03:10,300 --> 00:03:11,750 Pozrite sa na man stránku pre viac. 70 00:03:11,750 --> 00:03:13,960 >> Ďalej robíme trochu chýb kontrola, aby sa ubezpečil 71 00:03:13,960 --> 00:03:17,420 že číslo portu je v Uvedený dosah vo špec. 72 00:03:17,420 --> 00:03:20,240 Ďalej vidíme volanie funkcie štart, ktorého definícia budeme 73 00:03:20,240 --> 00:03:24,040 pozrite sa na v okamihu, a ako jeho názov navrhuje, sa spustí webový server. 74 00:03:24,040 --> 00:03:26,960 Tu máme volanie funkcie volal signál, ktorý hovorí, 75 00:03:26,960 --> 00:03:30,750 či a kedy začujete Control C z Klávesnica užívateľa, choďte do toho a volanie 76 00:03:30,750 --> 00:03:34,650 funkcia s názvom popisovač, čo sa deje nakoniec čisté veci a zastavenie 77 00:03:34,650 --> 00:03:35,500 server. 78 00:03:35,500 --> 00:03:39,470 >> Pod ním je to, čo sa zdá byť nekonečnej slučky, prvý rad, ktorá 79 00:03:39,470 --> 00:03:41,660 účinne je výzva na funkciu nazvanú 80 00:03:41,660 --> 00:03:45,110 reset, ktoré sme sami vykonať neskôr za účelom 81 00:03:45,110 --> 00:03:47,470 uvoľniť niektoré z našich globálnych stavov. 82 00:03:47,470 --> 00:03:50,480 Potom, čo je, že rad kód, ktorý podmienečne 83 00:03:50,480 --> 00:03:52,576 kontroluje návrat Hodnota spojenia. 84 00:03:52,576 --> 00:03:55,700 Teraz spojené vyzerá ako predikát, niečo, čo sa vráti hodnotu true alebo false. 85 00:03:55,700 --> 00:03:58,040 A to robí, ale je tu niečo zvláštneho v pripojenej 86 00:03:58,040 --> 00:03:59,960 v tom, že to je blokovanie hovorov. 87 00:03:59,960 --> 00:04:03,180 Bude tam sedieť a čakať do prehliadača užívateľa 88 00:04:03,180 --> 00:04:05,860 sa pokúsi pripojiť k tomuto webu servera a až potom to bude 89 00:04:05,860 --> 00:04:10,160 return true alebo false, takže budeme pokračovať na vnútornej strane tohto if. 90 00:04:10,160 --> 00:04:13,870 >> Kedysi tam, všimnite si túto funkciu volanie funkcie parse, ktoré sme písali, 91 00:04:13,870 --> 00:04:17,230 ktorý analyzuje všetky oktetov, všetko z bytov pochádzajúcich z prehliadača 92 00:04:17,230 --> 00:04:21,010 na server, takže môžeme odovzdať vám späť nakoniec hodnotu do jedného 93 00:04:21,010 --> 00:04:24,420 z tých globálnych premenných, ktoré ukladá všetky z bytov v práve 94 00:04:24,420 --> 00:04:26,630 Nadpisy, ktoré požiadavka, nie telo 95 00:04:26,630 --> 00:04:28,920 v prípade, že bol vlastne telo na to. 96 00:04:28,920 --> 00:04:32,980 >> Teraz dole začneme analyzovať tie hlavičky extrahovať 97 00:04:32,980 --> 00:04:35,490 podmnožina informácií že nám záleží. 98 00:04:35,490 --> 00:04:37,740 Konkrétne na špecifikácie, najprv 99 00:04:37,740 --> 00:04:40,580 chcel požiadať o líniu, čo je len, že prvý riadok, ktorý 100 00:04:40,580 --> 00:04:45,710 dúfajme, že hovorí, že niečo ako get lomka alebo nejakú cestu a potom HTTP 1.1. 101 00:04:45,710 --> 00:04:48,150 Používame túto metaforu ihly v kope sena 102 00:04:48,150 --> 00:04:50,370 hľadať konkrétne znaky alebo adresy. 103 00:04:50,370 --> 00:04:53,120 A skutočne, je tu rad funkcie v našej distribučnej kóde 104 00:04:53,120 --> 00:04:56,930 Ste to vy, taky môže byť užitočné pri hľadaní konkrétnej hodnoty. 105 00:04:56,930 --> 00:05:00,630 >> Nakoniec sme skopírujte tieto byty do premennej s názvom línie, 106 00:05:00,630 --> 00:05:03,510 ktorý si všimnúť, tiež máme pridelené na zásobníku 107 00:05:03,510 --> 00:05:05,890 formou dynamicky dimenzovaný poľa. 108 00:05:05,890 --> 00:05:08,350 A my sme zámerne sa snaží aby sa zabránilo volania malloc 109 00:05:08,350 --> 00:05:11,100 pretože znova, pretože of Control C bytia 110 00:05:11,100 --> 00:05:14,630 potenciál črtou tohto programu, sme sa nechcú mať tento kód naraz 111 00:05:14,630 --> 00:05:17,479 prerušil, keď užívateľ stlačí Ovládanie C, ktorej výsledkom 112 00:05:17,479 --> 00:05:20,270 je to, že by som mohol nebude mať šancu zadarmo niečo, čo som malloced. 113 00:05:20,270 --> 00:05:23,660 Takže som sa snaží čo najviac využiť stohu je môžem tu. 114 00:05:23,660 --> 00:05:26,040 >> Ďalší na rade, veľa DOS. 115 00:05:26,040 --> 00:05:28,930 Špecifikácia bude vykladať na presne to, čo sa tu očakáva, 116 00:05:28,930 --> 00:05:31,800 ale poznámky vám náznak toho, čo je pred nami. 117 00:05:31,800 --> 00:05:33,830 Najprv musíte potvrdí žiadosť linku 118 00:05:33,830 --> 00:05:37,760 a uistite sa, že to vyzerá, ako špecifikácie gramatiky, aby som tak povedal, 119 00:05:37,760 --> 00:05:38,541 hovorí, že by mal. 120 00:05:38,541 --> 00:05:41,290 Potom je potrebné extrahovať niečo volal dotaz, veci sa 121 00:05:41,290 --> 00:05:44,200 Po otáznikom, ako sme videli na našom príklade Google 122 00:05:44,200 --> 00:05:46,320 mimochodom v parametri HD. 123 00:05:46,320 --> 00:05:49,050 Potom sme spájať dohromady koreň webového servera 124 00:05:49,050 --> 00:05:52,520 s cestou, ktorá je v že žiadosť prvý riadok 125 00:05:52,520 --> 00:05:56,010 a tvorí úplnú cestu súbor chceme hľadať. 126 00:05:56,010 --> 00:06:00,300 >> Potom, budeme sa ubezpečil, že existuje súbor a je čitateľný. 127 00:06:00,300 --> 00:06:05,100 A potom budeme extrahovať jeho prípona súboru, .html alebo php, 128 00:06:05,100 --> 00:06:09,920 alebo niečo také rozšírenie, ktoré je na veľmi koniec reťazca požadované. 129 00:06:09,920 --> 00:06:11,940 Ďalšia na rade je celý banda kód, ktorý sme písali 130 00:06:11,940 --> 00:06:15,800 skutočne vytvárať PHP generovaný obsah pre vás. 131 00:06:15,800 --> 00:06:18,010 Stručne povedané, tento Kód sa v názve 132 00:06:18,010 --> 00:06:20,250 súboru, ktorý chcete PHP interpretovať. 133 00:06:20,250 --> 00:06:24,630 Míňame ju niečím, čo nazývajú potrubia do interpretu PHP. 134 00:06:24,630 --> 00:06:28,060 Získajte späť odpoveď, ako by Reakcie boli súbor sám. 135 00:06:28,060 --> 00:06:32,110 A potom sme iterácii, že súbor je bajtov, ťahanie ich všetky do jedného buffera 136 00:06:32,110 --> 00:06:34,180 takže môžeme nakoniec vytlačiť ich. 137 00:06:34,180 --> 00:06:37,230 >> V skutočnosti, všetky z nich volá tu dprintf 138 00:06:37,230 --> 00:06:40,110 nám umožňuje niečo vytlačiť volal popisovač súboru, ktorý 139 00:06:40,110 --> 00:06:42,350 je len číslo ktorý predstavuje súbor. 140 00:06:42,350 --> 00:06:45,360 Veľmi podobné v duchu, ale zásadne líši od súboru 141 00:06:45,360 --> 00:06:46,620 hviezda ukazovateľ. 142 00:06:46,620 --> 00:06:50,260 Všimnite si, ako môžete použiť syntax ako printf tu takže môžem dynamicky 143 00:06:50,260 --> 00:06:54,000 vložiť niečo ako dĺžka pre hodnotu hlavičke HTTP 144 00:06:54,000 --> 00:06:55,270 volal Content-Length. 145 00:06:55,270 --> 00:06:57,990 A nakoniec som použil funkcie právo na skutočne písať 146 00:06:57,990 --> 00:07:00,040 orgán na žiadosť. 147 00:07:00,040 --> 00:07:03,750 >> Bohužiaľ, sme implementovali iba Podpora pre dynamicky 148 00:07:03,750 --> 00:07:05,350 PHP generované súbory. 149 00:07:05,350 --> 00:07:08,520 Nechceli sme implementovať podporu pre statické súbory, ako je GIF a JPEG, 150 00:07:08,520 --> 00:07:10,660 a CSS a HTML súbory. 151 00:07:10,660 --> 00:07:14,450 To, bohužiaľ, je ponechané na vás v reakcii na účel klienta 152 00:07:14,450 --> 00:07:15,090 to robiť. 153 00:07:15,090 --> 00:07:20,050 Takže tam zistíte, že tam je Nie je moc inšpirácie v tomto bloku, 154 00:07:20,050 --> 00:07:23,520 Ale ak sa niečo vyššie na to, ako sme išli o tlmočenie PHP kód, 155 00:07:23,520 --> 00:07:25,520 funkcie budete používať sú trochu odlišné. 156 00:07:25,520 --> 00:07:27,561 >> V skutočnosti, môžete si požičať niektoré funkcie 157 00:07:27,561 --> 00:07:29,620 snáď z forenznej Problém set, pretože 158 00:07:29,620 --> 00:07:32,860 Na konci dňa, všetko, čo potrebujete to tu je, až budete vedieť, čo otvoriť súbor 159 00:07:32,860 --> 00:07:35,690 a keď viete, že to tak-zvané Typ MIME alebo typ obsahu, 160 00:07:35,690 --> 00:07:39,040 budete musieť prečítať v týchto bytoch a nejako vypľuť je späť. 161 00:07:39,040 --> 00:07:41,190 >> A teraz prehliadka tohto ostatné funkcie súboru. 162 00:07:41,190 --> 00:07:43,820 Ako prvý je pripojený, ktorý jednoducho vráti hodnotu true 163 00:07:43,820 --> 00:07:47,350 keď už sa konečne začuje Spojenie od užívateľa. 164 00:07:47,350 --> 00:07:48,786 Ďalšia na rade je chyba. 165 00:07:48,786 --> 00:07:52,296 Chyba, zatiaľ, ako funkciu, ktorú napísal zvládnuť všetky rôzne 400 166 00:07:52,296 --> 00:07:55,360 a status 500 HTTP kódy, ktoré budete chcieť 167 00:07:55,360 --> 00:07:58,500 poslať späť k užívateľovi, spolu so štandardnou správou. 168 00:07:58,500 --> 00:08:01,950 >> Ďalšia na rade je zaťaženie, zvlášť mäsitý funkcie, ktorých zmysel života 169 00:08:01,950 --> 00:08:06,920 sa do čítania zo súboru hviezdy ukazovateľ Obsah súboru do globálnej pamäti 170 00:08:06,920 --> 00:08:09,000 že sme deklarovali globálne vyššie [? main. ?] 171 00:08:09,000 --> 00:08:12,649 To je trochu zložité, pretože my musieť čítať bajtov zo súboru 172 00:08:12,649 --> 00:08:14,690 ale pozrite sa na každej iterácii či máme už 173 00:08:14,690 --> 00:08:17,600 hit koniec súboru alebo niečo sa pokazilo. 174 00:08:17,600 --> 00:08:21,210 A používame realloc, aby sa ubezpečil, že bez ohľadu na vyrovnávacej používame rastie 175 00:08:21,210 --> 00:08:24,440 a rastie a rastie a stále pobyt pred počtu bytov 176 00:08:24,440 --> 00:08:25,675 že potrebujeme, aby sa zmestili tam. 177 00:08:25,675 --> 00:08:27,550 Handler, zatiaľ, je funkcia, ktorá dostane 178 00:08:27,550 --> 00:08:30,630 volal prostredníctvom mať registrovaný Control C ako signál 179 00:08:30,630 --> 00:08:32,140 že chceme zachytiť. 180 00:08:32,140 --> 00:08:34,070 Všimnite si, v procese spracovania že to nakoniec 181 00:08:34,070 --> 00:08:36,780 žiada zastaviť, čo samozrejme zastaví webový server. 182 00:08:36,780 --> 00:08:39,750 A bohužiaľ, vyhľadávanie nie je implementovaná. 183 00:08:39,750 --> 00:08:41,940 V duchu, to je pomerne jednoduché funkcie. 184 00:08:41,940 --> 00:08:44,900 Vzhľadom k tomu, príponu súboru, je potrebné Pre návrat je to tzv MIME 185 00:08:44,900 --> 00:08:46,320 typu alebo typu obsahu. 186 00:08:46,320 --> 00:08:49,260 A my špecifikovať v špecifikácii čo musí byť, že mapovanie. 187 00:08:49,260 --> 00:08:52,330 Ale potrebujete preložiť to nakoniec c kód. 188 00:08:52,330 --> 00:08:56,490 >> Ďalšia na rade je naša podobne výdatný funkcie volal parse, ktorého zmysel života 189 00:08:56,490 --> 00:08:59,350 je čítať, nie zo súboru, ale zo siete. 190 00:08:59,350 --> 00:09:03,510 Konkrétne, čítanie a analýze Požiadavka HTTP, ktoré pochádzajú z prehliadača 191 00:09:03,510 --> 00:09:05,940 sa tak, že na server nakoniec môžeme analyzovať 192 00:09:05,940 --> 00:09:09,530 na iba hlavičky v žiadosti linka a vrátiť sa k vám tie 193 00:09:09,530 --> 00:09:12,720 prostredníctvom globálnej vyrovnávacej pamäte, ktorá sme deklarovali vyššie [? main. ?] 194 00:09:12,720 --> 00:09:14,880 >> Obnoviť, zatiaľ, je funkcie, ktorú definujeme 195 00:09:14,880 --> 00:09:18,730 ktorý sa nazýva opakovane vnútri hlavné zakaždým, keď sa chystáte 196 00:09:18,730 --> 00:09:20,799 pripravení začať počúvať pre nové pripojenie 197 00:09:20,799 --> 00:09:22,840 takže vždy vieme, stav našich premenných 198 00:09:22,840 --> 00:09:24,870 a tak, že máme tiež oslobodil akékoľvek pamäť 199 00:09:24,870 --> 00:09:28,070 mohli byť pridelené na predchádzajúce pripojenie k sieti. 200 00:09:28,070 --> 00:09:30,060 Ďalšie na rade, je začať, funkcie, ktorú sme napísali 201 00:09:30,060 --> 00:09:31,920 ktorý obsahuje celú Veľa sieťového kódu 202 00:09:31,920 --> 00:09:34,420 ktorý nakoniec spustí webový server. 203 00:09:34,420 --> 00:09:36,680 >> Posledná up je funkcia volal zastávka, ktorá 204 00:09:36,680 --> 00:09:38,770 robí presne to, ho zastaví webový server. 205 00:09:38,770 --> 00:09:42,270 Ale najprv to uvoľní nejaké pamäť je, že doteraz bolo pridelené. 206 00:09:42,270 --> 00:09:45,850 Ale nakoniec volá exit aj bez návratu kontroly 207 00:09:45,850 --> 00:09:47,480 na našu hlavnú funkciu. 208 00:09:47,480 --> 00:09:49,480 Nakoniec, jeden z Najdôležitejšie techniky 209 00:09:49,480 --> 00:09:52,680 Pri vykonávaní tejto web server Bude to trochu pokusov a omylov, 210 00:09:52,680 --> 00:09:55,886 majúci jeden prehliadača otvorené okno vpravo a okno terminálu na 211 00:09:55,886 --> 00:09:57,760 doľava, servery konzoly okná, takže si 212 00:09:57,760 --> 00:10:00,420 je vidieť správy, ktoré sú sa zobrazuje na obrazovke. 213 00:10:00,420 --> 00:10:04,170 >> Ale stále lepšie by bolo tretiny okno, druhé okno terminálu, 214 00:10:04,170 --> 00:10:07,135 v ktorej budete používať Telnet, využitie pre ktoré je predpísané v špec. 215 00:10:07,135 --> 00:10:09,640 A Telnet je len veľmi jednoduchý program sieť 216 00:10:09,640 --> 00:10:12,660 ktorý vám umožní predstierať, že byť prehliadač v jednom okne 217 00:10:12,660 --> 00:10:14,540 pri rozhovore na iné okno. 218 00:10:14,540 --> 00:10:16,830 Týmto spôsobom môžete vidieť presne príkazy textové 219 00:10:16,830 --> 00:10:18,700 ktoré sa vracajú zo servera na klienta 220 00:10:18,700 --> 00:10:20,810 aby bolo nutné zamrznutiu okolo Chrome vývojárov 221 00:10:20,810 --> 00:10:24,010 nástroje v inak najšialenejšie interface. 222 00:10:24,010 --> 00:10:29,099