fbpx
Kategorie
Publicystyka

Projekt Drawboard czyli aplet Javy 20 lat później

Dla was, czytelników, niniejszy artykuł będzie jedynie historyczną ciekawostką. Dla mnie, autora, ładunkiem nostalgii uderzającym z impetem 16-tonowego odważnika. Proszę wybaczyć nadmiar wzruszeń, ale nie co dzień mamy okazję uruchomić po 20 latach swój program i przekonać się, że wszystko działa od pierwszego strzału. No, prawie.

Aplikację Drawboard, o której chcę wam dziś opowiedzieć, rozwijałem w latach 2001-2004, zaś ostatnia wersja została opublikowana dokładnie dwadzieścia lat i dzień temu, siódmego sierpnia 2004. Był to jeden z moich pierwszych porządnych programów i stanowił chyba jedyny przypadek, gdy zarobiłem pieniądze na otwartym oprogramowaniu.

Jeden, by wszystkie zgromadzić (zaliczenia)

Nie będę udawał, że rok 2001 zapadł mi w pamięć jakoś szczególnie. Studiowałem informatykę na Uniwersytecie Wrocławskim, dorabiałem w laboratorium hardware magazynu komputerowego CHIP, bawiłem się własnoręcznie złożonym i wielokrotnie modernizowanym pecetem – wówczas chyba Pentium 90 z 16 albo 32 MB RAM, działającym pod kontrolą Windows 98.

W ramach studiów na wielu przedmiotach trzeba było zaliczyć pracownię samodzielnie napisanymi programami, realizującymi wytyczne wykładowcy. Do głowy przyszło mi wtedy, że mógłbym upiec kilka pieczeni na jednym ogniu. Porządnie napisany program mógłby po pierwsze posłużyć do zaliczenia kilku przedmiotów, a po drugie pozytywnie wyróżniać się na tle produkcji tworzonych przez kolegów w ostatnią noc przed terminem.

aplikacja Drawboard odpalona w 2024 roku

Szczwany plan zadziałał. W ramach kursu Javy zacząłem tworzyć aplikację klient-serwer o nazwie Drawboard. Pozwalała ona wielu osobom na jednoczesne tworzenie tego samego obrazka, coś jakby wieloosobowy Paint, ale osadzony wewnątrz strony WWW. Projekt wystartował 4 kwietnia, już miesiąc później kurs Javy zaliczyłem nim na piąteczkę. Trzy tygodnie później – Sieci Komputerowe, również piątka.

Potem były jeszcze Systemy Rozproszone, do tego chyba jakiś przedmiot z grafiką komputerową i prawie na pewno seminarium poświęcone projektom programistycznym. Zaliczenie tego ostatniego było banalne, bo projekt istniał już dłuższy czas i był prowadzony zgodnie z zasadami sztuki – miał stronę domową na Sourceforge, dokumentację, otwartą licencję, spis zmian w każdym z kilkudziesięciu wydań i tak dalej.

strona z dokumentacją, ostatnia aktualizacja 7 sierpnia 2024

Open Source i LGPL

Dwadzieścia lat temu nie było Githuba (ten powstał w 2008 roku). Nie było nawet gita, Linus Torvalds wydał go dopiero w kwietniu 2005! Mieliśmy za to serwis Sourceforge, na którym wzorowali się twórcy Githuba – czyli zintegrowany zestaw narzędzi dla programistów: repozytorium kodu, bugtracker, przestrzeń na stronę WWW wraz z subdomeną oraz changelog, forum dyskusyjne, rejestr wydań programów oraz inne pomniejsze udogodnienia.

Co najważniejsze – dla twórców wolnego i otwartego oprogramowania wszystkie te dobra były dostępne za darmo. Wówczas stanowiło to wyjątek przyciągający wszystkich autorów mających więcej czasu niż pieniędzy. Aha, dzisiejszy Sourceforge to cień dawnej potęgi, istnieje wyłącznie siłą rozpędu, zaś po dekadach migracji i redesignów przepadły m.in. archiwalne statystyki – nie jestem więc w stanie sprawdzić, ile razy pobrano mój program.

Sourceforge prowadził tematyczny katalog projektów. Na projekt Drawboard natrafiały osoby przeglądające kategorię „aplikacje do telekonferencji”. Dostawałem zgłoszenia błędów, propozycje ulepszeń a okazjonalnie także poprawki kodu. Drawboard od samego początku dostępny był pod licencją GNU GPL, którą potem na czyjąś prośbę zamieniłem na LGPL.

Aplety Javy

Czym dokładnie były aplety (applety) Javy? Skojarzenie z Javascriptem jest przypadkowe, aplety były prostymi programami osadzonymi wewnątrz strony WWW. Jeśli pamiętacie technologię Flash w przeglądarkach, to aplety były starsze, brzydsze, wolniejsze i pożerały więcej pamięci komputera. Miały w zasadzie same wady i unikatową zaletę – przed rokiem 2000 stanowiły jedyną technologię, która pozwalała osiągnąć w przeglądarce coś rzeczywiście interaktywnego.

Serio, wcześniej strona to była strona czyli statyczny tekst, ewentualnie animowane GIF-y. Największym szaleństwem, na jakie pozwalał wczesny Javascript, były scrollowane teksty w dolnym pasku statusu przeglądarki. Jeśli go nie widzicie, to pewnie dlatego, że znikł około 2010 roku. Każde kliknięcie linku przeładowywało stronę – AJAX zrealizowano na serio dopiero w Gmailu, AD 2004. Nie było komponentu Canvas (HTML5 to rok 2008). Technologia Macromedia Flash zdobywała pierwsze przyczółki, ale powoli i z oporami (rozpędziło się to pół dekady później). Słowem – na przełomie lat dziewięćdziesiątych i zerowych nie było niczego innego.

W ciągu kilku lat okazało się, że wady przeważyły – do wymienionych wyżej ograniczeń doszło zbyt wolna dystrybucja nowszych wersji pluginów Javy, co wymuszało używanie przestarzałych komponentów i powodowało niezgodności z nowszą Javą po stronie serwerów (tam zresztą Java też radziła sobie średnio). Popularność Flasha sprawiła, że aplety Javy popadły w zapomnienie na długo przed ich usunięciem z przeglądarek.

Uruchamiamy aplikację Drawboard w 2024 roku

Czy mogłem odmówić sobie próby uruchomienia aplikacji w dwudziestą rocznicę wydania? Oczywiście, że nie! Okazało się to banalnie proste, z jednym małym zastrzeżeniem – żadna współczesna przeglądarka nie uruchomi apletów Javy, mechanizmy pozwalające na ich osadzanie zostały usunięte dawno temu. W przypadku Firefoxa ostatnią wersją obsługującą Javę był Firefox 52 ESR z marca 2017.

serwer aplikacji Drawboard

Musiałem uciec się do pomocy starych przeglądarek działających na starych systemach operacyjnych. Wybrałem więc te, z których prawdopodobnie korzystałem w sierpniu 2004 czyli Windows XP i Netscape Navigator 7. Dlaczego nie Firefox? Bo go jeszcze nie było, Firefox 1.0 pojawił się na świecie dopiero w listopadzie 2004!

XP-ka zainstalowałem w VirtualBoksie a ze strony oldversion.com ściągnąłem pełny instalator Navigatora 7.01. Tu małe spostrzeżenie – witryna oldversion.com jest dostępna przez niezabezpieczone połączenie HTTP, to działanie w pełni świadome i celowe. Twórcy przewidzieli, że ludzie będą się z nią łączyć ze starych komputerów i starych systemów operacyjnych.

O ile protokół HTTP 1.x nie zmienił się prawie wcale od czasów Windows 3.1, to w obszarze HTTPS zmieniło się wszystko. Z powodu odkrywanych słabości wycofywane były kolejne wersje protokołów SSL i TLS, zmieniały się algorytmy szyfrujące, zwiększano rozmiar kluczy kryptograficznych – w efekcie 20-letnie przeglądarki nie będą w stanie bezpiecznie komunikować się ze współczesnymi witrynami.

Netscape 7.0 na Windows XP próbuje załadować stronę domową przeglądarki

Wracając jednak do rzeczy – pobrałem paczkę z aplikacją w najnowszej, jubileuszowej wersji. Rozpakowałem, zerknąłem do instrukcji, w jednym terminalu odpaliłem najprostszy możliwy serwer WWW

python -m http.server --bind 0.0.0.0 8000

zaś w drugim wydałem komendę startującą serwer aplikacji

java -cp drawboard.jar drawboard.Server

I wiecie co? Zadziałało od pierwszego strzału! Tak po prostu, serwer zgodny z Javą 1.1 wydaną w lutym 1997 ruszył bez żadnych modyfikacji pod kontrolą współczesnego środowiska uruchomieniowego Javy. Ponad ćwierć wieku kompatybilności wstecznej to osiągnięcie godne szacunku. Potem uruchomiłem Netscape, otworzyłem testową stronę i… aplet wystartował oraz połączył się z serwerem.

Oto film pokazujący pracę z tym samym obrazkiem w aplikacji Drawboard na dwóch (zwirtualizowanych) komputerach naraz.

Łezka kręci się w oku. Wydaje mi się, że podobnego wzruszenia doznają miłośnicy starych samochodów, gdy ich ukochane cacko wraca do życia.

Pozostałe funkcje

Wszystkie szczegóły można znaleźć w instrukcji, więc tu wymienię tylko kilka ciekawszych możliwości programu:

  • wygląd menu można zmieniać za pomocą mechanizmu skórek
  • aplikacja na stronie WWW ma możliwość zapisywania bieżącego obrazka po stronie serwera oraz wysyłania go e-mailem na podany adres
  • serwer może obsługiwać połączenia na dodatkowych portach, importując nowy obrazek tła oraz serwując liczbę aktualnie podłączonych klientów i aktualny obraz
  • dostępny jest tryb pracy „tylko do oglądania”, bez możliwości edycji obrazka

Dodatkowa informacja – obrazki na wszystkich stacjach klienckich będą identyczne nawet przy jednoczesnym nanoszeniu zmian. Serwer szereguje informacje płynące ze wszystkich końcówek i rozsyła je każdemu klientowi w tym samym porządku, decydując tym samym, które „pociągnięcia piórem” będą widoczne na wierzchu. Każdy nowy klient dostaje też na starcie bieżący obraz.

Pieniądze

Ciekawostka – projekt Drawboard jest chyba moim jedynym produktem Open Source, na którym zarobiłem pieniądze. W listopadzie 2004 dostałem e-mail informujący, że pewna firma z Danii jest zainteresowana zakupem własnościowej licencji na użycie programu, jeśli dorobię do niego komunikację przez CGI oraz obsługę wielu obrazków .

Jeśli daty plików nie kłamią, zlecenie zrealizowałem w tydzień (aby inwestor nie zdążył się rozmyślić) i zarobiłem 700 euro, czyli więcej, niż wynosiła wówczas moja pensja studenta-programisty na części etatu.

fragment dokumentacji dla klienta

Podsumowanie

Jak mogliście zauważyć, projekt Drawboard nie stanowił żadnego istotnego osiągnięcia. Był bardziej dopracowany, niż typowy projekt zaliczeniowy na studiach, ale implementował trywialny problem przy użyciu nieskomplikowanej technologii. Unikalne jest to, że witryna projektu na Sourceforge przetrwała 20 lat zaś dzisiejsze systemy operacyjne i języki programowania utrzymują wsteczną kompatybilność sięgającą aż tak daleko w przeszłość.

Świetnie bawiłem się pisząc niniejszy artykuł, grzebiąc w starych plikach, odkrywając zasoby o których zapomniałem dawno temu. Może więc pożeglować na fali nostalgii i opisać moją grę, która w roku 1998 trafiła (wraz z cover CD miesięcznika PC World Komputer) do stu tysięcy wzruszonych odbiorców? Dajcie znać w komciach, jak za starych, dobrych czasów!



O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.

11 odpowiedzi na “Projekt Drawboard czyli aplet Javy 20 lat później”

Świetny tekst i doskonałe pole do rozważań na temat kompatybilności i zmian technologicznych. Doceniam i czekam na więcej!

Jedne technologie przetrwały wiele lat w niezmienionej formie. Inne dawno są zapomniane i wycofane. A że projekty używają wielu technologii, to niestety trudno jest zachować pełną kompatybilność. Co nam po zachwytach, że strona przetrwała 20 lat i serwer daje się uruchomić, skoro aplety nie działają na żadnej współczesnej przeglądarce.

A już w ogóle, to właśnie przeglądarki przodują w zrywaniu kompatybilności wstecznej. Aplety, flash, wtyczki NPAPI i PPAPI – dawno wycofane. Tak naprawdę wszystko co kiedyś opierało się na dodatkach do przeglądarek jest teraz bezużyteczne. A zaraz bezużyteczne będą dodatki zgodne z Manifest V2. Czyli naprawdę bardzo dużo współczesnych dodatków.

Taki chichot losu. Nowoczesny wówczas klient w przeglądarce teraz jest bezużyteczny. Ale gdyby klient był napisany w zwykłym C i WinAPI, to z bardzo dużym prawdopodobieństwem… zadziałałby i dziś! Windows nieźle utrzymuje kompatybilność i to jest zaskakujące.

super tekst 🙂 przypomniałeś mój projekt do inwentaryzacji, niestety zaginął gdzieś w odmętach starych płyt CD (esperanza :heart: :D)

Widzę, że karierę rozpoczynaliśmy mniej więcej w tym samym momencie. 🙂 Miło się to czyta. Sam niestety nie mam już nigdzie swoich projektów sprzed 20 lat (a było parę nieskończonych gier, system operacyjny – szkoda, że mi to wszystko gdzieś przepadło 🙁 ). Z miłą chęcią przeczytam o tej grze, o której wspomniałeś na końcu.

A ten serwer w Pythonie jaką rolę pełni? Wtedy chyba Pythona nie było, więc jak to działa?

Python jest nieważny, może być dowolny serwer http, jak Apache

Najlepsze jest to, że dzisiaj jak mamy wspólnego whiteboarda to nadal się jaramy k dzieci. Wyprzedziłeś swoją epokę 😎

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *