{"id":36689,"date":"2019-10-31T22:13:11","date_gmt":"2019-10-31T19:13:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/krasota-v-glazah-smotryashhego\/"},"modified":"2019-10-31T22:13:11","modified_gmt":"2019-10-31T19:13:11","slug":"krasota-v-glazah-smotryashhego","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/krasota-v-glazah-smotryashhego","title":{"rendered":"Pi\u0119kno w oczach patrz\u0105cego","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Od dawna zajmuj\u0119 si\u0119 tworzeniem aplikacji webowych. Bardzo d\u0142ugo. Moje pierwsze aplikacje webowe w \u015brodowisku <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/IBM_Notes\">Lotus Domino<\/a><\/noindex> tworzy\u0142em w czasach, gdy s\u0142owo <em>\u201egoogle\u201c<\/em> jeszcze nie by\u0142o czasownikiem, a do wyszukiwania informacji w Internecie ludzie u\u017cywali Yahoo! i Rambler. Ja korzysta\u0142em z <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Infoseek\">Infoseek<\/a><\/noindex>\u2018om \u2014 mieli w\u0105skie wyszukiwanie i nie tak bezsensownie przeci\u0105\u017cony interfejs jak Yahoo!<\/p>\n<p><\/p>\n<p>Tworzenie aplikacji, wszelkich aplikacji, nie tylko internetowych \u2014 to praca tw\u00f3rcza. Ma\u0142o kto spiera si\u0119 z t\u0105 tez\u0105. Pi\u0119kno w tw\u00f3rczo\u015bci jest jak praktyka w poznaniu naukowym \u2014 to kryterium prawdy. Ale podczas gdy praktyka naukowa jest obiektywna i oparta na pomiarach, pi\u0119kno jest spraw\u0105 subiektywn\u0105, zale\u017cn\u0105 od tego, kto patrzy. Zada\u0142em sobie pytanie, co dla mnie osobi\u015bcie stanowi pi\u0119kn\u0105 aplikacj\u0119 webow\u0105? <\/p>\n<p>\n<img decoding=\"async\" alt=\"Pi\u0119kno w oczach patrz\u0105cego\" src=\"\/wp-content\/uploads\/2019\/08\/36411160412b286dd6191aa5baa6ee83.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>(na KDPW nie m\u00f3j wzrok, to spojrzenie kobiety, ale, IMHO, \u017ce\u0144ski wzrok na KDPW jest bardziej odpowiedni ni\u017c m\u0119ski, w ko\u0144cu to \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/2ch.hk\/s\/src\/2616513\/15633579017010.png\">KDPW<\/a><\/noindex>!)<\/em><\/p>\n<p><\/p>\n<p>Pod katem przedstawiam moje w\u0142asne kryteria, wed\u0142ug kt\u00f3rych obecnie mo\u017cna uzna\u0107 aplikacj\u0119 webow\u0105 za pi\u0119kn\u0105. Bardzo subiektywne przedstawienie, b\u0119d\u0105ce rezultatem mojego osobistego do\u015bwiadczenia. Mo\u017cliwe, \u017ce dla niekt\u00f3rych moje kryteria pi\u0119kna b\u0119d\u0105 wydawa\u0142y si\u0119 kryteriami brzydoty. Nie dziwcie si\u0119, po prostu macie inne do\u015bwiadczenie.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>A skoro ju\u017c weszli\u015bcie pod kat, to prosz\u0119 zachowa\u0107 ostro\u017cno\u015b\u0107 w komentarzach. Bowiem je\u015bli mo\u017cecie przerwa\u0107 czytanie artyku\u0142u, gdy to, co jest w nim przedstawione, wyda si\u0119 wam niepi\u0119kne lub wr\u0119cz brzydkie, to ja, jako autor, musz\u0119 czyta\u0107 wszystkie komentarze.<\/p>\n<p><\/p>\n<h1 id=\"sreda-obitaniya\">\u015arodowisko \u017cycia<\/h1>\n<p><\/p>\n<h3 id=\"protokoly\">Protok\u00f3\u0142<\/h3>\n<p><\/p>\n<p>Nie wiem nawet, czy warto ten kryterium wydziela\u0107 osobno. Aplikacje webowe \u017cyj\u0105 w Sieci i musz\u0105 przestrzega\u0107 praw Sieci (protok\u00f3\u0142). G\u0142\u00f3wne protoko\u0142y w Sieci to \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Transmission_Control_Protocol\">TCP<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/IP\">IP<\/a><\/noindex>. Na nich opiera si\u0119 wiele innych protoko\u0142\u00f3w, ale dla aplikacji webowych uwa\u017cam, \u017ce najwa\u017cniejszy jest <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/HTTP\">HTTP<\/a><\/noindex> (a w\u0142a\u015bciwie jego rozszerzenie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/HTTPS\">HTTPS<\/a><\/noindex> na bazie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/TLS\">TLS<\/a><\/noindex>). Tzn., pi\u0119kna aplikacja webowa jest dost\u0119pna przez HTTPS\/TLS (lub ewentualnie przez HTTP), a pozosta\u0142e protoko\u0142y (LDAP, RPC, IMAP4, POP3, SMTP, FTP, NNTP, \u2026) czyni\u0105 j\u0105 mniej pi\u0119kn\u0105 z ka\u017cdym dodatkowo wspieranym protoko\u0142em. Sama aplikacja mo\u017ce przy pomocy tych dodatkowych protoko\u0142\u00f3w korzysta\u0107 z zasob\u00f3w zewn\u0119trznych. <\/p>\n<p><\/p>\n<p>Je\u015bli chodzi o <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/WebSocket\">WebSocket.<\/a><\/noindex>, wi\u0119c nie mam wystarczaj\u0105cego do\u015bwiadczenia z u\u017cywaniem tego protoko\u0142u z aplikacjami webowymi. Wygl\u0105da to \u0142adnie i obiecuj\u0105co, ale jak stabilne i praktyczne to jest \u2014 nie mog\u0119 powiedzie\u0107. <\/p>\n<p><\/p>\n<h3 id=\"brauzery\">Przegl\u0105darki<\/h3>\n<p><\/p>\n<p>Aplikacja internetowa stoi jedn\u0105 nog\u0105 na serwerze, a drug\u0105 na stronie klienta. Strona klienta to przegl\u0105darka. Nowoczesna przegl\u0105darka oferuje <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\">wiele mo\u017cliwo\u015bci<\/a><\/noindex>, kt\u00f3re nowoczesna aplikacja webowa mo\u017ce i powinna wykorzystywa\u0107 na swoj\u0105 korzy\u015b\u0107. Pi\u0119kna aplikacja internetowa wykorzystuje nowoczesne funkcje przegl\u0105darek i nie musi dzia\u0142a\u0107 w tych przegl\u0105darkach, kt\u00f3re nie oferuj\u0105 nowoczesnych mo\u017cliwo\u015bci. Rozumiem, \u017ce <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%BB%D0%B8%D1%84%D0%B8%D0%BB\">polyfille<\/a><\/noindex> to konieczno\u015b\u0107, ale wygl\u0105da to \u017ale. W ko\u0144cu nie tylko deweloperzy musz\u0105 nad\u0105\u017ca\u0107 za nowoczesnymi technologiami, dotyczy to r\u00f3wnie\u017c u\u017cytkownik\u00f3w i biznesu.<\/p>\n<p><\/p>\n<h3 id=\"yap\">J\u0119zyk\u00f3w programowania<\/h3>\n<p><\/p>\n<p>u\u017cywanych do tworzenia aplikacji webowych jest bardzo du\u017co. W przypadku cz\u0119\u015bci klienckiej aplikacji webowych istnieje wiele technologii, kt\u00f3re pozwalaj\u0105 programi\u015bcie u\u0142atwi\u0107 stworzenie triady HTML\/CSS\/JS (to, co rozumiej\u0105 wszystkie nowoczesne przegl\u0105darki). Ale kiedy\u015b mia\u0142em do czynienia z <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Google_Web_Toolkit\">GWT<\/a><\/noindex> i uwa\u017cam, \u017ce pi\u0119knie jest, gdy programista widzi w przegl\u0105darce oryginalny kod, a nie wynik kompilacji lub transpilacji. Dlatego stosowanie <noindex><a rel=\"nofollow\" href=\"https:\/\/webpack.js.org\/\">webpack<\/a><\/noindex>\u2018a i podobne produkty do generowania kodu klienckiego, IMHO, s\u0105 nieestetyczne. Im bardziej wykonawczy kod w przegl\u0105darce przypomina kod \u017ar\u00f3d\u0142owy stworzony przez programist\u0119, tym lepiej. Nie wierzysz? Spr\u00f3buj debugowa\u0107 w produkcji kod stworzony przez GWT.<\/p>\n<p><\/p>\n<p>Po stronie serwera jest wi\u0119cej wolno\u015bci (Java, PHP, perl, python, C#, Ruby, \u2026), ale wydaje mi si\u0119, \u017ce pi\u0119knie jest, gdy zar\u00f3wno po stronie serwera, jak i w przegl\u0105darce u\u017cywa si\u0119 jednego j\u0119zyka programowania \u2014 JavaScript. W ko\u0144cu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">j\u0119zyk okre\u015bla my\u015blenie<\/a><\/noindex>, a zespo\u0142y wsp\u00f3\u0142pracownik\u00f3w s\u0105 bardziej produktywne.<\/p>\n<p><\/p>\n<h1 id=\"chelovechnost\">Cz\u0142owiecze\u0144stwo<\/h1>\n<p><\/p>\n<p>Pi\u0119kna aplikacja webowa powinna by\u0107 u\u017cyteczna. U\u017cyteczna, przede wszystkim, dla cz\u0142owieka jako ko\u0144cowego u\u017cytkownika. Dlatego nie mog\u0119 nazwa\u0107 pi\u0119kn\u0105 aplikacj\u0105 webow\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%92%D0%B5%D0%B1-%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0\">us\u0142ug webowych<\/a><\/noindex>. Zwyk\u0142emu cz\u0142owiekowi (nie deweloperowi webowemu) trudno si\u0119 z nimi obchodzi\u0107. Us\u0142ugi webowe s\u0105 pi\u0119kne na sw\u00f3j spos\u00f3b,<\/p>\n<p><\/p>\n<p>Pi\u0119kna aplikacja internetowa powinna mie\u0107 intuicyjny interfejs. Mo\u017cna si\u0119 spiera\u0107 o <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F\">UI<\/a><\/noindex>\u2018e \u2014 to do\u015b\u0107 subiektywna kwestia. Ale z <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D1%81_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC\">UX<\/a><\/noindex> jest znacznie prostsze, je\u015bli u\u017cytkownik nie mo\u017ce korzysta\u0107 z aplikacji bez upragnionego <noindex><a rel=\"nofollow\" href=\"http:\/\/lurkmore.to\/RTFM\">RTFM<\/a><\/noindex> \u2014 kiepski UX, nieestetyczna aplikacja webowa. Naj\u0142adniejsze aplikacje zgodnie z tym kryterium mog\u0105 by\u0107 z \u0142atwo\u015bci\u0105 u\u017cywane przez dzieci, kt\u00f3re jeszcze nie potrafi\u0105 czyta\u0107. <\/p>\n<p><\/p>\n<h1 id=\"obratnaya-masshtabiruemost\">Skalowalno\u015b\u0107 zwrotna<\/h1>\n<p><\/p>\n<p>Dawno temu programy mo\u017cna by\u0142o przenosi\u0107 na dyskietkach, teraz \u2014 na pendrive'ach lub \u015bci\u0105ga\u0107 bezpo\u015brednio z sieci. Skopiowanie zwyk\u0142ej aplikacji i uruchomienie jej na innym komputerze to trywialne zadanie. Sytuacja z aplikacjami webowymi jest nieco inna. Sie\u0107 stanowi globalne medium, w kt\u00f3rym nie ma potrzeby mie\u0107 klon\u00f3w tej samej aplikacji webowej. W sieci wystarczy jeden Facebook, Twitter, Instagram, Mail.ru lub Yandex. Mo\u017cna mie\u0107 r\u00f3\u017cne aplikacje webowe w tej samej niszy tematycznej, ale z r\u00f3\u017cnymi odbiorcami (tak jak Facebook i Vkontakte, Mail.ru i Gmail, Google Maps i Azure Maps). Zasoby sprz\u0119towe potrzebne do zapewnienia globalnej dost\u0119pno\u015bci takich aplikacji webowych s\u0105, powiedzmy, <noindex><a rel=\"nofollow\" href=\"https:\/\/bigpicture.ru\/?p=404950\">niebanalne<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Nigdy nie pracowa\u0142em z aplikacjami webowymi na takim poziomie jako programista i nie wyobra\u017cam sobie, jak one tam, w \u015brodku, s\u0105 zorganizowane. Aby zapewni\u0107 funkcjonalno\u015b\u0107 takich aplikacji webowych potrzebne s\u0105 zespo\u0142y odpowiednich specjalist\u00f3w i oddzielne centra danych. Fascynuje mnie zdolno\u015b\u0107 ludzi do wsp\u00f3\u0142pracy na tak\u0105 skal\u0119 i tworzenia takich produkt\u00f3w, ale moim wzorem pi\u0119kna jest aplikacja webowa, kt\u00f3r\u0105 mo\u017cna uruchomi\u0107 na osobnym laptopie.<\/p>\n<p><\/p>\n<p>Pi\u0119kna aplikacja webowa skaluje si\u0119 nie tylko w g\u00f3r\u0119 i na szeroko\u015b\u0107 (dla u\u017cytkownik\u00f3w), ale tak\u017ce w d\u00f3\u0142 i do wewn\u0105trz (dla programist\u00f3w).<\/p>\n<p><\/p>\n<h1 id=\"zemnovodnost\">\u201eAmfibijno\u015b\u0107\u201d<\/h1>\n<p><\/p>\n<p>Do dost\u0119pu do nowoczesnych aplikacji webowych u\u017cywa si\u0119 urz\u0105dze\u0144 dw\u00f3ch typ\u00f3w:<\/p>\n<p><\/p>\n<ul>\n<li>komputery (laptopy, desktopy);<\/li>\n<li>urz\u0105dzenia mobilne (smartfony i tablety);<\/li>\n<\/ul>\n<p><\/p>\n<p>Gdzie\u015b na horyzoncie znowu majaczy \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82_%D0%B2%D0%B5%D1%89%D0%B5%D0%B9\">internet rzeczy<\/a><\/noindex>\u201e, ale na razie tak.<\/p>\n<p><\/p>\n<p>Komputery r\u00f3\u017cni\u0105 si\u0119 od urz\u0105dze\u0144 mobilnych tak bardzo, jak stworzenia l\u0105dowe r\u00f3\u017cni\u0105 si\u0119 od wodnych. To r\u00f3\u017cne \u015brodowiska i stawiaj\u0105 r\u00f3\u017cne wymagania wobec \u017cyj\u0105cych w nich istot (program\u00f3w). Pi\u0119kne aplikacje webowe to nie takie, kt\u00f3re przypominaj\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B5%D0%BC%D0%BD%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5\">amfibie<\/a><\/noindex>, ale te, kt\u00f3re w wodzie \u2014 jak ryby, na l\u0105dzie \u2014 jak zwierz\u0119ta, a w powietrzu (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">SEO<\/a><\/noindex>) \u2014 jak ptaki.<\/p>\n<p><\/p>\n<p>Uwa\u017cam za brzydkie \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D0%B1-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD\">amfibijno\u015b\u0107<\/a><\/noindex>\u201e, to jak pr\u00f3ba usiedzie\u0107 na dw\u00f3ch (z SEO \u2014 trzech) krzes\u0142ach. Lepiej jak Fiona z Shreka \u2014 w dzie\u0144 jedna, a w nocy druga. Tak, dro\u017cej. Ale lepiej.<\/p>\n<p><\/p>\n<h1 id=\"cross-sharing\">Cross-sharing<\/h1>\n<p><\/p>\n<p>Ju\u017c wspomina\u0142em w punkcie &#171;Odwrotna Skalowalno\u015b\u0107&#187;, \u017ce globalno\u015b\u0107 Sieci pozwala mie\u0107 jedn\u0105 aplikacj\u0119 webow\u0105 na planet\u0119. Dlatego ka\u017cda aplikacja webowa musi si\u0119 czym\u015b r\u00f3\u017cni\u0107 od innych, aby zapewni\u0107 sobie przetrwanie. Niemniej jednak, moje wieloletnie do\u015bwiadczenie z <noindex><a rel=\"nofollow\" href=\"https:\/\/magento.com\/\">Magento<\/a><\/noindex> (szkielet do budowania sklep\u00f3w e-commerce) m\u00f3wi, \u017ce mi\u0119dzy poszczeg\u00f3lnymi web-aplikacjami mo\u017ce by\u0107 wi\u0119cej wsp\u00f3lnego ni\u017c r\u00f3\u017cnic. Pi\u0119kna web-aplikacja nie tylko powinna by\u0107 modu\u0142owa, ale tak\u017ce powinna dzieli\u0107 swoje modu\u0142y z innymi web-aplikacjami. W pewnym sensie ta idea jest odzwierciedlona w <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_Java-%D0%BF%D0%BE%D1%80%D1%82%D0%BB%D0%B5%D1%82%D0%BE%D0%B2\">specyfikacjach<\/a><\/noindex> JSR 168 i JSR 286 oraz takimi frameworkami jak <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/WordPress\">WordPress<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Django\">Django<\/a><\/noindex> i ta sama Magento. Im wi\u0119ksza liczba modu\u0142\u00f3w web-aplikacji jest u\u017cywana przez inne web-aplikacje, tym jest bardziej atrakcyjna w moim mniemaniu. Cross-sharing pozwala na tworzenie lepszej jako\u015bci modu\u0142\u00f3w i w rezultacie bardziej stabilnych web-aplikacji.<\/p>\n<p><\/p>\n<p>Przez modu\u0142 nie rozumiem bibliotek typu jQuery czy RequireJS \u2014 raczej wi\u0119ksze struktury, jak wtyczki w <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wordpress.org\/plugins\/\">WordPress<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/djangopackages.org\/categories\/apps\/\">Django<\/a><\/noindex>. Ale dla bibliotek r\u00f3wnie\u017c prawdziwe jest twierdzenie, \u017ce szerokie rozpowszechnienie biblioteki pozwala uczyni\u0107 j\u0105 lepszej jako\u015bci i bardziej odporn\u0105. <\/p>\n<p><\/p>\n<h1 id=\"garvardskaya-arhitektura\">Architektura Harvardzka<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B0%D1%80%D0%B2%D0%B0%D1%80%D0%B4%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0\">Architektura Harvardzka<\/a><\/noindex>, w przeciwie\u0144stwie do obecnie dominuj\u0105cej <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%84%D0%BE%D0%BD_%D0%9D%D0%B5%D0%B9%D0%BC%D0%B0%D0%BD%D0%B0\">pry\u0144stonskiej<\/a><\/noindex>, zak\u0142ada podzia\u0142 kodu i danych. Architektura nie zdoby\u0142a uznania, ale sam pomys\u0142 wydaje mi si\u0119 pi\u0119kny. Szczeg\u00f3lnie dla aplikacji webowych. Ka\u017cda statyka (HTML\/CSS\/JS\/Obrazy\/&#8230;) \u2014 to kod. Mo\u017cna i nale\u017cy go buforowa\u0107 zar\u00f3wno po stronie serwera, jak i po stronie klienta. A dane \u2014 to <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/REST\">REST<\/a><\/noindex>\/<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/JSON\">YANG<\/a><\/noindex> (pi\u0119knie) lub <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOAP\">SOAP<\/a><\/noindex>\/<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/XML\">XML<\/a><\/noindex> (troch\u0119 mniej pi\u0119knie). Albo WebSockets\/JSON (mo\u017ce by\u0107 najlepszym rozwi\u0105zaniem, ale nie pr\u00f3bowa\u0142em).<\/p>\n<p><\/p>\n<h1 id=\"lokalizaciya\">Lokalizacja<\/h1>\n<p><\/p>\n<p>S\u0105 dwie rzeczy, kt\u00f3re szczeg\u00f3lnie mnie niepokoj\u0105 podczas rozwijania web-aplikacji \u2014 to interfejs wieloj\u0119zyczny i strefy czasowe. Sam pochodz\u0119 z \u0141otwy, u nas u\u017cywa si\u0119 trzech j\u0119zyk\u00f3w: LV, RU, EN. Pi\u0119kna web-aplikacja powinna umo\u017cliwia\u0107 nie tylko korzystanie z kilku j\u0119zyk\u00f3w w samej aplikacji, ale tak\u017ce pozwala\u0107 na rozszerzenie liczby u\u017cywanych j\u0119zyk\u00f3w przy pomocy zewn\u0119trznych zasob\u00f3w, takich jak <noindex><a rel=\"nofollow\" href=\"https:\/\/crowdin.com\/\">Crowdin<\/a><\/noindex>. To samo dotyczy modu\u0142\u00f3w, z kt\u00f3rych zbierana jest web-aplikacja.<\/p>\n<p><\/p>\n<p>Z strefami czasowymi sprawa jest prosta: we wszystkich sytuacjach, gdy nie wiadomo, jak obs\u0142ugiwa\u0107 daty i czasy, post\u0119puj tak: wszystko, co le\u017cy na serwerze, wychodzi z serwera i przychodzi z serwera, to UTC; wszystko, co jest wy\u015bwietlane u klienta, zgodnie z czasem strefy w profilu u\u017cytkownika. To pi\u0119kne.<\/p>\n<p><\/p>\n<h1 id=\"kuznicy-vmesto-zvezd-smerti\">Ku\u017anie zamiast &#171;Gwiezdnych Wojen&#187;<\/h1>\n<p><\/p>\n<p>Dawno temu w ka\u017cdym wi\u0119kszym miasteczku by\u0142a w swojej ku\u017ani. By\u0107 mo\u017ce nie jedna. Niekt\u00f3re lepsze, inne gorsze. Byli kowale znani na ca\u0142ym \u015bwiecie, a byli te\u017c tacy, do kt\u00f3rych chodzono z braku alternatyw. Przechodzi\u0142y wojny, epidemie, katastrofy naturalne. Niekt\u00f3re miasteczka znika\u0142y razem z mieszka\u0144cami. Ale rzemios\u0142o kowalskie przetrwa\u0142o. Zamiast znikaj\u0105cych miast powstawa\u0142y nowe i w nich r\u00f3wnie\u017c pojawia\u0142y si\u0119 ku\u017anie. <\/p>\n<p><\/p>\n<p>A teraz sp\u00f3jrz na us\u0142ug\u0119 tak\u0105 jak <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DNS\">DNS<\/a><\/noindex>. Gdy padaj\u0105 serwery g\u0142\u00f3wne, <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Distributed_denial-of-service_attacks_on_root_nameservers\">ca\u0142y \u015bwiat si\u0119 wstrz\u0105sa.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Moim zdaniem, pi\u0119kna aplikacja webowa nie mo\u017ce mie\u0107 takiej wielko\u015bci jak Facebook czy Mail.ru. To ju\u017c bli\u017cej &#171;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.wikiwand.com\/ru\/%D0%97%D0%B2%D0%B5%D0%B7%D0%B4%D0%B0_%D0%A1%D0%BC%D0%B5%D1%80%D1%82%D0%B8\">Gwiazdy \u015amierci<\/a><\/noindex>&#187; zar\u00f3wno pod wzgl\u0119dem zasob\u00f3w potrzebnych do budowy, jak i do utrzymania funkcjonalno\u015bci. Tak, w przypadku zniszczenia Facebooka ludzko\u015b\u0107 nie zniknie, jego funkcje do\u015b\u0107 szybko przejm\u0105 inne aplikacje (na przyk\u0142ad <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/\">VKontakte<\/a><\/noindex> na terytorium RF i s\u0105siednich, Instagram, Twitter, &#8230;). Niemniej jednak, zamkni\u0119cie znacz\u0105cej cz\u0119\u015bci populacji planety w jednej aplikacji \u2014 to nieestetyczne. Tym bardziej, \u017ce istniej\u0105 znacznie bardziej stabilne alternatywy (na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/The_Pirate_Bay\">torrenty.<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h1 id=\"rezyume\">Podsumowanie<\/h1>\n<p><\/p>\n<p>Je\u015bli dotar\u0142e\u015b do ko\u0144ca i odczuwasz zdziwienie \u2014 &#171;<em>co to by\u0142o?<\/em>&#171;, to wyra\u017cam moje szczere wsp\u00f3\u0142czucie. Nie zmusza\u0142em ci\u0119 do czytania tego. Po prostu pr\u00f3bowa\u0142em wyrazi\u0107 moje my\u015bli w s\u0142owach, aby znale\u017a\u0107 tych, kt\u00f3rzy my\u015bl\u0105 podobnie. By\u0107 mo\u017ce b\u0119d\u0119 m\u00f3g\u0142 z nimi om\u00f3wi\u0107 niekt\u00f3re aspekty tworzenia pi\u0119knych aplikacji webowych i pozna\u0107 odpowiedzi na moje pytania. A tych mam wiele.<\/p>\n<p><\/p>\n<p>Dzi\u0119kuj\u0119 za przeczytanie.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/461749\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e. \u0421\u0432\u043e\u0438 \u043f\u0435\u0440\u0432\u044b\u0435 web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0440\u0435\u0434\u0435 Lotus Domino \u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0432 \u0442\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0432\u043e &#171;google&#187; \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e \u0433\u043b\u0430\u0433\u043e\u043b\u043e\u043c, \u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043b\u044e\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Yahoo! \u0438 Rambler. \u042f \u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Infoseek&#8216;\u043e\u043c \u2014 \u0443 \u043d\u0438\u0445 \u0431\u044b\u043b \u0441\u0443\u0436\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0438 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27480,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-36689","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/krasota-v-glazah-smotryashhego\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0440\u0430\u0441\u043e\u0442\u0430 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u0441\u043c\u043e\u0442\u0440\u044f\u0449\u0435\u0433\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/krasota-v-glazah-smotryashhego\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:13:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Pi\u0119kno le\u017cy w oku patrz\u0105cego | ProHoster","description":"Od dawna zajmuj\u0119 si\u0119 tworzeniem aplikacji webowych. Bardzo dawno temu.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/krasota-v-glazah-smotryashhego","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0440\u0430\u0441\u043e\u0442\u0430 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u0441\u043c\u043e\u0442\u0440\u044f\u0449\u0435\u0433\u043e | ProHoster","og:description":"\u042f \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/krasota-v-glazah-smotryashhego","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:13:11+00:00","article:modified_time":"2019-10-31T19:13:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36689","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:26:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:23","updated":"2026-01-22 04:26:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=36689"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36689\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/27480"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=36689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=36689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=36689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}