Technologie

Oprogramowanie powinno być stworzone w architekturze klient-serwer. Oznacza po prostu, że istnieje program pełniący rolę "centralną" (serwer), zazwyczaj odpowiadający za przetwarzanie danych. Klienci łączą się z tym programem używając tzw. końcówek. Końcówka może być zwykłą przeglądarką internetową (i wówczas można mówić o tzw. aplikacjach webowych), albo normalnym programem uruchamianym pod kontrolą danego systemu operacyjnego.

Pozostaje odpowiedzieć na pytanie o to, jakie konkretnie technologie zostaną zastosowane w pracy dyplomowej oraz jakie narzędzia będą wykorzystywane.

Aplikacje webowe

Tzw. aplikacje webowe to aplikacje, które działają w przeglądarce internetowej. Użytkownik, za pomocą przeglądarki internetowej, łączy się z odpowiednim adresem, a zadaniem aplikacji webowej jest wygenerowanie strony internetowej (zazwyczaj w formacie HTML).

Przykładami aplikacji webowych mogą być:

  • wszelkiego rodzaju wiki
  • wszelkiego rodzaju blogi
  • usługi dostępne przez przeglądarkę internetową (np. poczta elektroniczna, oprogramowanie biurowe)
  • niektóre gry dostępne w przeglądarkach (np. OGame)

Z punktu widzenia użytkownika aplikacja webowa posiada jedną, zasadniczą, zaletę. Nie trzeba jej instalować. Do uruchomienia aplikacji webowej wystarczy komputer z dostępem do internetu i działającą przeglądarką internetową (zazwyczaj obsługującą JavaScript, ale większość przeglądarek to potrafi).

Problem pojawia się w momencie, kiedy dostępu do internetu nie ma. Można to rozwiązać oferując oprogramowanie w wersji do zainstalowania. Zainstalowany program musiałby najpierw uruchomić serwer HTTP, a następnie przeglądarkę internetową, w której zostałaby wyświetlona odpowiednia strona. Oczywiście dane użytkownika z serwera aplikacji webowej byłyby niedostępne, ale można by było korzystać z samej aplikacji. Zresztą aplikację możnaby było napisać tak, żeby dane użytkownika były kopiowane na dysk twardy, z którego mogłoby być później wykorzystane podczas pracy w trybie offline.

Z punktu widzenia twórcy aplikacji webowej ma ona jedną, podstawową zaletę: łatwo jest udostępniać nowsze wersje oprogramowania. Każdy, kto korzysta z aplikacji webowej, korzystałby z najnowszej jej wersji.

Pozostaje pytanie, jakie wady mają aplikacje webowe? W moim odczuciu najpoważniejszą wadą są możliwości samych przeglądarek internetowych. Po stronie klienta cała aplikacja działa w przeglądarce. Jeśli działanie aplikacji ''po stronie klienta'' wymaga skomplikowanych obliczeń, to użytkownik może zaobserwować spowolnienie działania takiej aplikacji (jak również przeglądarki, czy nawet całego systemu operacyjnego).

Jest to o tyle poważny problem, że w przypadku prac dyplomowych wykorzystujących technikę aplikacji webowych do symulacji (a więc do: animacji, wykonywania obliczeń po stronie klienta itd.) byłby wykorzystwany JavaScript. Na dzień dzisiejszy trudno jest mi powiedzieć, czy byłoby to źródłem problemów, czy nie, ale mam spore wątpliwości. Nie ukrywam, że perspektywa napisania oprogramowania w formie aplikacji webowej jest dla mnie bardzo pociągająca, ale obawiam się, że JavaScript może nie podołać temu zadaniu w dłuższej perspektywie.

Z tego względu rozważam również użycie innych technologii.

Java

W porównaniu z aplikacjami webowymi, Java ma jedną wadę. Aby uruchomić program napisany w Javie trzeba zainstalować maszynę wirtualną Javy. Biorąc jednak pod uwagę fakt, że oprogramowanie, które ma powstać w ramach prac dyplomowych, będzie adresowane do studentów uczelni technicznych oraz do ludzi posiadających pewną wiedzę o komputerach, nie wydaje się, aby wymaganie takie było wygórowane.

Java może zostać wykorzystana w dwojaki sposób.

Klient może połączyć się z aplikacją napisaną jako aplet Javy. Aplety są uruchamiane w przeglądarce internetowej. Zaletą takiego rozwiązania jest to, że aplety są zdolne do wykonania bardziej skomplikowanych obliczeń, niż JavaScript. Wadą jest zdecydowanie większe zużycie pamięci. (Dodam, że w obecnych czasach dominuje raczej trend do zwiększania ilości pamięci w komputerach, więc wada ta może nie mieć istotnego znaczenia, zwłaszcza w dłuższej perspektywie.)

Dodatkową zaletą wykorzystania apletów Javy byłby drugi, alternatywny sposób wykorzystywania aplikacji przez użytkownika. Otóż każdy aplet Javy posiada interfejs użytkownika wykorzystujący bibliotekę Swing (będącą częścią standardowej biblioteki Javy). Dzięki temu bardzo łatwo jest przerobić aplet Javy na zwykłą aplikację, uruchamianą poza przeglądarką (w drugą stronę ta zasada również obowiązuje). Łatwiej byłoby więc dostarczyć użytkownikowi wersję oprogramowania do pracy w trybie offline.

Dostępność w Javie biblioteki Swing uważam za kolejną zaletę tego rozwiązania. Swing może się wydawać dość skomplikowany, ale w moim odczuciu (i nie tylko w moim) jest to jedna z najlepszych bibliotek do tworzenia GUI, jakie są dostępne. Na potrzeby prac dyplomowych oraz całego projektu (wykraczającego poza te prace dyplomowe) z pewnością Swing będzie odpowiedni.

Ponadto w Javie stosunkowo łatwo jest wykorzystać inne języki programowania (np. Clojure, Scala, Groovy itp.). W realizowanych obecnie pracach dyplomowych (zapewne) nie będzie to miało dużego znaczenia, lecz w późniejszych etapach prac nad projektem będzie to bardzo ważne.

Qt

Qt jest dobrą biblioteką do tworzenia GUI, która zawiera także wiele innych, przydatnych funkcji. Biblioteka ta jest dostępna pod systemami Windows, Linux oraz Mac OS X.

Z mojego punktu widzenia najpoważniejszą wadą tej biblioteki jest język programowania - C++. Nie jest to język, w którym chciałbym rozwijać projekt. Dlatego ewentualne wykorzystanie biblioteki Qt sprowadzałoby się wyłącznie do zaprogramowania interfejsu użytkownika (do tego celu Qt świetnie się nadaje), a właściwe oprogramowanie byłoby tworzone w innym języku. Naturalnie cały proces tworzenia oprogramowania byłby znacznie bardziej złożony.

Flash

Zamiast Javy mógłby zostać wykorzystany Flash.

Trudno jest dyskutować o wadach czy zaletach Flasha z punktu widzenia użytkownika oprogramowania. Wydaje mi się, że Flash jest bardziej popularny od (apletów) Javy w internecie, więc można powiedzieć, że więcej użytkowników ma zainstalowaną wtyczkę Flash, niż Javę. Ale czy to naprawdę jest zaletą Flasha w porównaniu z Javą, biorąc pod uwagę docelową grupę użytkowników?

Jedno jest zaś pewne: oprogramowanie serwerowe nie mogłoby być wykonane we Flashu. Wykorzystanie Flasha w projekcie (a w szczególności w jego pierwszej fazie, którą stanowią obecne prace dyplomowe) oznaczałoby więc używanie dodatkowego języka programowania i dodatkowych narzędzi. Byłoby to więc utrudnienie dla dyplomantów.

Inne możliwości

Oczywiście można również próbować połączyć opisane powyżej technologie, np. wykorzystać JavaScript do stworzenia interfejsu użytkownika podczas wprowadzania danych (jak to ma miejsce w aplikacjach webowych; może nawet nie byłoby potrzeby stosowania JavaScript, gdyż wystarczyłby sam HTML) oraz aplety Javy do samej tylko symulacji procesów biznesowych. Miałoby to tę zaletę, że stworzenie (webowego) interfejsu użytkownika byłoby (względnie) prostsze, natomiast sama symulacja zostałaby stworzona za pomocą odpowiednio silnej technologii Java. Z kolei wadą takiego rozwiązania wydaje się być większa trudność w stworzeniu końcówki klienta działającej poza przeglądarką internetową.