ekstremalnie cienki klient

Sformułowanie „aplikacja webowa” zapewne razi purystów językowych. Niestety nie znam lepszego odpowiednika pojęcia „web application”, jakiejś bardziej polskiej nazwy na architekturę, w której interakcja z użytkownikiem odbywa się poprzez strony w przeglądarce internetowej. Czy to będzie się odbywało w internecie czy w intranecie, w sieci rozległej czy lokalnej — bez znaczenia. Ważne, że po jednej stronie jest użytkownik uzbrojony jedynie w przeglądarkę (mniej lub bardziej dowolną), a po drugiej serwer obsługujący żądania tego użytkownika i zapewne jakąś bazę danych. Niby klasyczna architektura klient-serwer, ale specyfika klienta[1] powoduje, że aplikacje webowe to zupełnie nowa jakość problemów.

sporo zalet

Przede wszystkim gigantyczną zaletą jest maksymalnie cienki klient. W dzisiejszych czasach można bez większego ryzyka założyć, że każdy użytkownik ma zainstalowaną przeglądarkę WWW i stanowi ona raczej element lokalnego systemu niż część aplikacji. Zatem klient to jedynie strona, ta odrobina tekstu (X)HTML wysłana z serwera do przeglądarki plus towarzyszące jej skrypty, arkusze stylów czy obrazki. Taka sytuacja uwalnia od szeregu problemów:

  • Wdrożenie klienckiej części aplikacji webowej jest stosunkowo proste — może być wymagane jedynie dostrojenie wersji przeglądarek, a i to niekoniecznie.
  • Każdy użytkownik ma zawsze taką samą aplikację jak inni. Odpada kłopot z rozsyłaniem i instalowaniem nowych wersji, po prostu wystarczy zmienić program na serwerze (jeden!) a użytkownik logując się na tej samej stronie co zwykle automagicznie zacznie używać nowej wersji.
  • Komunikacja części klienckiej z serwerem odbywa się po HTTP czy HTTPS na popularnych portach, co ma zbawienny wpływ jeżeli nie na samo bezpieczeństwo, to przynajmniej na samopoczucie administratora sieci.
  • Ilość i rozmieszczenie użytkowników może być płynne. I to niemal bezboleśnie, bo właściwie zrzucamy odpowiedzialność na administratora sieci — aplikację można używać z każdego miejsca, z którego da się dostać do strony na serwerze.

jeszcze więcej wad

Pierwszy i najważniejszy, choć dla osób spoza grzęzawiska może mało oczywisty, problem to zrozumienie (nie mówię, że akceptacja, zrozumienie) przez użytkownika, klienta, handlowców i managerów faktu, że technologia webowa ma swoje ograniczenia. Przeglądarka z założenia nie robi wiele ponad prezentację strony (X)HTML, a ten język ze swej natury oferuje ograniczone możliwości interakcji. Oczywiście strona mająca stanowić część kliencką aplikacji jest „wzbogacana” przez DHTML, jednak pozostaje tylko stroną. Istnieje co prawda Web Hypertext Application Technology Working Group, ale jak sami piszą:

This working group aims to make their development easier, and hopes to specify new technologies that make it possible to make much prettier and more usable interfaces with less dependence on complex scripts, less dependence on server-generated pages, and a more seamless user experience.

Kluczowe jest tutaj sformułowanie „aims to make”. Na razie jest mizernie i ubogo — możliwości zestaw kontrolek występujących w HTML w porównaniu z możliwościami aplikacji desktopowych są praktycznie żadne. Niestety to jest coś, czego handlowcy, kierownictwo wyższego szczebla ani zwykli użytkownicy najczęściej zrozumieć nie potrafią i/lub nie chcą[2]. I właśnie to jest problem numer jeden, bo sam fakt istnienia tych ograniczeń stosunkowo łatwo jest zaakceptować — w końcu każda technologia ma swoje ograniczenia i tyle.

Kolejny, chyba jeszcze mniej oczywisty, problem wynika z powyższego — interfejs użytkownika aplikacji webowej jest znacznie trudniejszy do wykonania niż interfejs aplikacji desktopowej. Z kilku przyczyn:

  • Nie istnieją standardy interfejsu analogiczne jak w aplikacjach desktopowych — nie wiadomo jak ma wyglądać menu, jak ma być rozwiązana nawigacja po stronach, jak prezentować pomoc kontekstową itd. itp.
  • Problematyczna dostępność aplikacji webowej za pomocą urządzeń innych niż myszka. Nie jest to może skomplikowane technicznie, ale wymagany jest tutaj pewien poziom świadomości, o który wciąż zadziwiająco trudno.
  • Wygląd graficzny aplikacji może być dowolny, a dowolność oznacza kłopoty — trzeba mieć kogoś, kto potrafi to jakoś ładnie zaprojektować.

Powyższe (i kilka mniejszych szczegółów) powoduje, że zadanie projektanta i twórcy interfejsu aplikacji webowej to zadanie zupełnie inne niż zadanie programisty części serwerowej tego samego systemu. A ponieważ tradycyjne aplikacje desktopowe zazwyczaj nie wymagały zatrudnienia specjalisty od interfejsu, więc również przy aplikacjach webowych takiego człowieka się nie zatrudnia. Można oczywiście skorzystać z gotowych rozwiązań czy najróżniejszych półproduktów i na ich bazie wykonać interfejs własnej aplikacji. Najczęściej jednak pozostawia się to zadanie tym samym ludziom, którzy implementują całą resztę systemu. W efekcie interfejsy webowe zaprojektowane i stworzone przez programistów są niemal zawsze beznadziejne zarówno wizualnie jak i funkcjonalnie.

W takim kontekście słowo „cienki” w tytule tego wpisu nabiera zupełnie innego znaczenia...

[1] Przez pojęcie „klient” rozumiem oczywiście część kliencką aplikacji w architekturze klient-serwer, nie kontrahenta zamawiającego aplikację.

[2] Mało skomplikowany przykład z życia: handlowiec sprzedał klientowi pomysł, że aplikacja będzie obsługiwana tak, jak cała reszta Windows, czyli za pomocą drag'n'drop. Skoro użytkownik może skopiować plik na lokalnym dysku przeciagając ikonkę z jednego folderu do innego, to tak samo może przerzucać obiekty w aplikacji i np. wrzucić towar do zamówienia. Intuicyjnie oczywiste, prawda? I nie ważne, że nie jest to standardowe zachowanie strony internetowej ani możliwość przeglądarki jako takiej, nie ważne, że cały internet działa inaczej, po prostu ma tak być i tyle. Oczywiście dopiął swego. Zysk — raczej mizerny, zwłaszcza w miejscach, gdzie ze względu na wewnętrzną potrzebę zachowania minimum funkcjonalności uparliśmy się pozostawić „konwencjonalną” obsługę za pomocą linków, przycisków czy innych ikonek. Koszt — tydzień mojej pracy na implementację mechanizmu plus nieokreślona ilość pracy całego zespołu na jego użycie na każdej stronie, która się do tego nadawała. Klient rozwiązania nie docenił — nie zrozumiał ile wymagało trudu.

Komentarze

#1 | 2004.09.21 00:45 | str()

"Cienkość" cienkiego klienta w aplikacjach webowych nie bez przyczyny przyjęła się tak powszechnie (jak widać). Szczególnie istotny jest tu czynnik "let's do it our way", czyli coś, co w epoce DOS-a łupanego powodowało, że pisało się aplikację, bibliotekę interfejsu użytkownika, silnik wannabe-bazy danych - brak dobrych, powszechnych standardów i pewnej kultury programistycznej w korzystaniu z cudzych rozwiązań. Dlatego [X]HTML tak dobrze pasuje - nie trzeba się zmagać z dopasowaniem do innych elementów (choćby wyglądu GUI), "mój jest ten kawałek podłogi..", "szlachcic na zagrodzie..", etc.
Dla wszystkich cierpiących niewygody cienkości aplikacji www wybawieniem może wydawać się XUL czy XAML (mniejsza o ideologię). Oczywiście takie zabawki/zajawki jak Mozilla Amazon Browser wyglądają i nawet działają całkiem fajnie. Fajnie bo inaczej niż klasyczna webplikacja. Osobiście nie dbam o developerów aplikacji rich-client z żadnej ze stron barykady. Uważam, że lokalne wykonywane czegokolwiek z głębi sieci za równoznaczne z przyklejeniem sobie wielkiej kartki "kick me" na plecach. Może ktoś kopnie, a może nie.
Biorąc pod uwagę bezpieczeństwo end usera oraz wygodę programisty, najlepszym rozwiązaniem byłoby wyświetlanie po stronie klienta zdalnej aplikacji gtk wewnątrz jego (klienta) xserwera. Innymi słowa zamiana przeglądarki www na xserwer. Rozwiązanie takie ma szereg zalet, które eliminują podniesione przez Cieibe bolączki:
- Istnieje standard interfejsu/zachowania aplikacji. Zachowanie normuje HIG, wygląd interfejsu można preparować za pomocą plików konfiguracyjnych gtkrc przestyłanych jakimś sposobem (http post?) lub przyjmować jakieś defaulty na podstawie identyfikacji przeglądarki.
- Zachowana jest jednorodna obsługa klawiaturowa/myszkowa/inno-input-devicowa.
- Wygląd samej aplikacja. Hmm, no cóż. Tu pozostawiłbym brudną robotę selekcji naturalnej ;-)
Pozostaje jeszcze kwestia powiązania czy też osadzenia takiej aplikacji w środowisku usera. O ile user uruchamia jakieś programy rozmawiające ze sobą przez CORBĘ (a więc gtk/bonobo) to strachu nie ma. Klient komunikuje się z aplikacją i środowiskiem serwera przez odpowiednie wiadomości protokołów X (wejście) i CORBA (interakcja, np. drag&drop), aplikacja komunikuje się ze swoją graficzną reprezentacją via X (wyświetlanie) i to wszystko, bo po co ma wiedzieć cokolwiek o lokalnym systemie usera.
Aaaach, rozmarzyłem się. Chociaż..
Wraz z rosnącą siłą Firefoksa możnabyłoby pokusić się o przemycenie do nie-Gnomowego systemu części gtk i bibliotek ORBit. Ten szatański plan mógłby uzyskać ciche poparcie dużych dostawców oprogramowania, dla których zniknęłaby obawa przez psuciem standardu przez Microsoft.
Na razie nie widać pospolitego ruszenia w tworzeniu rich-klienckich (XUL, XAML) aplikacji. Może burza przejdzie bokiem, bo na prawdę, nie podoba mi się pomysł odpalania czegokolwiek choćby w jailu czy innej piaskownicy gdy kolejny minister-od-spraw-jakże-ważnych wprowadzi kolejny obowiązek korzystania z kolejnego jedynego-koszernego oprogramowania.
Acha, do poważnych wad web-aplikacji zaliczyłbym również bezsesyjność protokołu http (proteza przez cookies czy sessionid+http get to jakiś makabryczny żart) oraz trudne panowanie aplikacji nad przyciskami wstecz/naprzód/zamknij.

#2 | 2004.09.29 17:11 | thm

A może wyjściem z tej sytuacji są aplety Javy ? Wykonywane po stronie klienta, pozbawione wielu ograniczeń interfejsu a jednocześnie wieloplatformowe i posiadające większość zalet tradycyjnych "aplikacji webowych" ?

#3 | 2005.11.10 20:52 | [anonim]

 

Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.