Michał "Misha" Durys
Istnieje opinia, że na Amigę nie ma dobrych narzędzi do tworzenia stron WWW. Mamy jeden edytor WYSIWYG, który jest cienki jak, no... wiadomo co, i kilka edytorów tekstowych, które dzielą się na słabe i bardzo słabe. A na grzybie to jest tego od groma i ciut ciut, a wszystko takie wygodne, łatwe w użyciu, wszystko robi się niemalże samo. Cóż, że wszystkie strony stworzone takimi "profesjonalnymi" programami przez "profesjonalnych" webmasterów są niemalże identyczne - to tylko drobny efekt uboczny :). Nie zmienia to jednak faktu, że na Amigę nie ma dobrych edytorów HTML. Nie ma jednak czego żałować, bo są znacznie lepsze narzędzia: wspaniałe edytory tekstu, ARexx i HSC. Dwie pierwsze pozycje są znane wszystkim amigowcom, przypuszczam jednak, że o HSC niewielu z Was słyszało. HSC jest skrótem od HTML Sucks Completly, lecz wbrew tej nazwie jest najpotężniejszym narzędziem wspomagającym tworzenie stron WWW jakie kiedykolwiek widziałem na dowolnej platformie sprzętowej. Trio Gold ED, ARexx i HSC bije na głowę wszystkie edytory HTML razem wzięte.
Przypuszczam, że chcielibyście już dowiedzieć się czegoś bardziej konkretnego. Najkrócej rzecz ujmując, HSC jest rozbudowanym preprocesorem dla języka HTML. Oprócz tego dostajemy do ręki kilka innych programików przydatnych do zarządzania naszym projektem. Dobrze, a co to oznacza? HSC daje możliwość stosowania w kodzie HTML makr, define'ów, wbudowanych w program funkcji, przeprowadza analizę składni dokumentu, zapewnia łatwe zarządzanie projektem i jeszcze kilka innych rzeczy. Program trzeba nakarmić takim rozszerzonym kodem, a on wypluje standartowy dokument HTML. Jak widać HSC nie zwalnia z wymogu znajomości HTML, dlatego jeśli jesteś zupełnie zielony w temacie lepiej poczytaj sobie artykuły z serii "Zaczynamy" :). Swoją drogą to HTML jest banalny i przez tydzień można się go nauczyć w stopniu pozwalającym zostać zarabiającym webmasterem. Właściwie nie ma sensu używać HSC do tworzenia pojedynczych i nieskomplikowanych stron. Program pokazuje swoje wszystkie zalety dopiero przy dużych projektach.
No dobrze, a jak to wygląda w praktyce? Przypuśćmy, że chcesz w stopce każdej swojej strony zamieścić informację o tym, że to właśnie ty ją zrobiłeś. Wystarczy, że zdefiniujesz sobie takie makro:
<$macro STOPKA> <HR> Stronę zaprojektował i wykonał Jan "Johnny" Kowalski na Amidze 1000.<BR> Amiga rulez! </$macro>
Potem wystarczy już na dole naszej strony wlepiać to makro:
<STOPKA>
A zaowocuje to pojawieniem się takiego fragmentu kodu na wynikowej stronie:
<HR> Stronę zaprojektował i wykonał Jan "Johnny" Kowalski na Amidze 1000.<BR> Amiga rulez!
Tak na marginesie, to wszystkie specjalne tagi oferowane przez HSC zaczynają się od "<$". Jednak makro <stopka> to jeszcze nic niezwykłego, taki sam efekt można uzyskać stosując taktykę Wytnij & Wklej. Jednak czegoś takiego już byś tym sposobem nie osiągnął:
<HR> Stronę zaprojektował i wykonał Jan "Johnny" Kowalski na Amidze 1000.<BR> Ostatnia aktualizacja strony: 02-Nov-1997, 23:35
Normalnie musiałbyś informację o aktualizacji wklepywać ręcznie na każdej stronie, a używając HSC wystarczy poprzednie makro przekształcić do takiej postaci:
<$macro STOPKA> <HR> Stronę zaprojektował i wykonał Jan "Johnny" Kowalski na Amidze 1000.<BR> Ostatnia aktualizacja strony: <(GetTime())> </$macro>
Oczywiście format daty można dowolnie konfigurować. To są jednak bardzo proste przykłady, a skoro mój artykuł ma być dla obeznanych z tematem spróbujmy czegoś ambitniejszego. Co powiesz na to:
<$macro WEBPAGE /REQUIRED /ONLYONCE TITLE:string/R> <HTML> <HEAD> <TITLE>Moja strona - <(TITLE)></TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-2"> <META NAME="GENERATOR" content="Moje Zręczne Paluszki w liczbie 10"> <!-- Strona przygotowana na Amidze przy użyciu edytora tekstowego. --> </HEAD> </$macro> <$macro /WEBPAGE /REQUIRED /ONLYONCE> </BODY> </HTML> </$macro>
Dzięki takim makrom nie muszę bawić się w każdorazowe wklepywanie tych wszystkich tagów, wystarczy, że rozpocznę stronę przez <WEBPAGE TITLE="tytuł> i skończę przez </WEBPAGE>. Jak zauważyłeś makra mogą mieć argumenty (TITLE) i modyfikatory (/REQUIRED /ONLYONCE). Argumenty makr mogą być różnego typu i też mogą mieć modyfikatory. Modyfikatory makr wpływają na zachowanie się naszego makra. Użyty w powyższych przykładach modyfikator /REQUIRED powoduje, że dane makro musi się pojawić w kodzie strony, inaczej HSC stwierdzi błąd w strukturze strony. Natomiast /ONLYONCE oznacza, że makro może się pojawić tylko raz. Te dwa warunki gwarantują, że oba makra pojawią się dokładnie raz na każdej stronie. Argumenty makr podobnie jak argumenty tagów HTML pozwalają przekazać do makra pewną wartość, która jest potem w jakiś sposób wykorzystywana. HSC oferuje kilka typów argumentów, podstawowym jest typ STRING użyty w makrze <WEBPAGE>. Jest on zakończony modyfikatorem /R (skrót od /REQUIRED), który oznacza, że dany parametr musi być podany przy wywołaniu makra (coś jak /A przy składni komend). Bardzo przydatnym modyfikatorem makra jest /CLOSE, który informuje, że makro musi być zakończone, czyli jeśli gdzieś w stronie znajduje się tag (makro) <TEST>, to gdzieś dalej musi się znajdować </TEST>. To co jest pomiędzy wywołaniem i zamknięciem makra jest dostępne w specjalnym tagu <$content>. Cały ten powyższy wywód sprowadza się do tego, że HSC umożliwia min. tworzenie własnych stylów logicznych. Poniższe makro utworzy definicję stylu <wazne>:
<$macro WAZNE /CLOSE> <FONT COLOR="red"><B><U><$content></U></B></FONT> </$macro>
Od tej chwili możemy cieszyć się naszym nowym stylem. Tekst pomiędzy <wazne> a </wazne> będzie przez przeglądarkę wyświetlony w kolorze czerwonym, pogrubiony i podkreślony. Jednak prawdziwa zabawa z makrami zaczyna się dopiero w momencie zapoznania się z blokami warunkowymi. HSC daje użytkownikowi do dyspozycji <$if>, <$elseif>, <$else> i </$if>. W połączeniu z innymi funkcjami HSC daje to bardzo duże możliwości. Najlepiej poprę to przykładem wziętym z instrukcji HSC:
<$macro TRY-A HREF:uri/r TITLE:string/r> <$if COND=(Exists(HREF))> <A HREF=(HREF)><(TITLE)></A> <* wstaw odnośnik do dokumentu *> <$else> <(TITLE)> <* wstaw tylko tytuł *> </$if> </$macro>
To bardzo użyteczne makro wstawia w stronę odnośnik przenoszący nas do innego dokumentu o ile on istnieje. Jeśli takiego dokumentu nie ma wstawiony zostanie jedynie tytuł. Jak już wspomniałem daje to bardzo duże możliwości. Jednak w HSC kryją się nieograniczone możliwości, a to za sprawą tagu <$exec>. Jak można się wydedukować jest on odpowiedzialny za wykonywanie komend. Co to daje? Wszystko! Po prostu jeśli HSC nie jest w stanie czegoś zrobić, to wystarczy znaleźć lub napisać samemu program wykonujący daną funkcję i z użyciem tagu <$exec> wkomponować go w kod strony HSC. Znów podeprę się przykładem zaczerpniętym z instrukcji:
<$if COND=(HSC.SYSTEM="AMIGA")> <$exec COMMAND="list DIRS" TEMPORARY INCLUDE SOURCE PRE> <$elseif COND=(HSC.SYSTEM="UNIX")> <$exec COMMAND="ls -ld" TEMPORARY INCLUDE SOURCE PRE> <$else> <$message text="operating system not supported" class="warning"> </$if>
Taki kawałek kodu wlepiony w stronę po potraktowaniu go HSC zamieni się w listing bieżącego katalogu. Na dodatek nie ma znaczenia czy strona będzie przygotowywana na Amidze czy na komputerze z Unixem. Tak, HSC zostało napisane przez użytkownika Amigi i na Amidze, ale ma też swoje wersje pod inne systemy operacyjne. Dokumentacja wspomina o wersjach dla RiscOS, NeXTStep, Unix, BeOS, a podobno nawet dla MS-DOS. Na szczęście to ostatnie nie jest sprawdzone. Program jest rozprowadzany na zasadzie GNU General Public License, więc teoretycznie każdy może skompilować swoją wersję. Więc jeśli tylko chcesz możesz mieć HSC PPC :). A wracając do tagu <$exec>. Użycie go do listowania katalogu było spektakularne, lecz mało życiowe. Teraz zaprezentuję przykład wzięty z (mojego) życia:
<$macro filmitem title:string/R shows:string> <$exec command=('FeminaWWW:!bin/yarg TITLE "'+title+'" SHOWS "'+shows+'"') include> </$macro>
Przez to makro HSC ma dostęp do bazy danych o filmach. Program yarg zostaje nakarmiony tytułem filmu i godzinami seansów. W bazie danych odnajduje podany film i jako wynik swojej pracy generuje jedną pozycję w tabeli zawierającej repertuar kina. Sprytne, nie? Na tej samej zasadzie można odpalić skrypt arexxa pobierający dane z arkusza Turbo Calca, albo program automatycznie generujący wykres kołowy i zapisujący go jako obrazek gdzieś na dysku, który to obrazek jest potem wstawiany na naszą stronę. Kresem możliwości jest tu tylko wyobraźnia i umiejętności. Makra i define'y mają jeszcze jedną ogromną zaletę: łatwo je zmienić. Wyobraź sobie, że musisz zmienić kolory linków na wszystkich stronach, a tych jest coś koło 100. Jeśli tworzyłeś te strony na piechotę, to czeka Cię nielicha robota. A w wypadku HSC jest to zmiana kilku linijek w głównym pliku z makrami. Kilka godzin a kilka sekund roboty to jest różnica.
Jednak możliwości HSC nie kończą się na tym co opisałem w poprzednich akapitach. W rzeczywistości HSC oferuje jeszcze drugie tyle specjalnych tagów, a na tagach jego możliwości się nie kończą. Rozwiązuje także wszelkie problemy związane z utrzymaniem w ryzach dużego projektu. Oprócz samego programu HSC dostajemy do ręki kilka programów pomocniczych. One wraz ze znanym wszystkim programistom narzędziem zwanym make odwalają cała robotę związaną z aktualizacją części projektu. Nie będę opisywał zasady działania, make jaki jest każdy widzi :). Jak zwykle pokaże jak to działa w praktyce. Otóż aktualizacja całego projektu wygląda tak:
make all
Proste aż do bólu. Oprócz tych wielkich udogodnień HSC ma też kilka mniej rzucających się w oczy, a równie przydatnych. Na początek zwalnia nas z obowiązku ręcznego badania rozmiarów obrazków. Wystarczy przy kompilowaniu dokumentów zapodać parametr GETSIZE, a HSC sam uzupełni wszystkie tagi <IMG> o parametry WIDTH i HEIGHT. Na życzenie może także zastępować wybrane znaki przez ich HTML'owe odpowiedniki. Nie trzeba już wiedzieć co oznacza taki dziwny zapis ®, można kulturalnie napisać Ž. Wiadomo też, że czasami trudno jest pogodzić czytelność kodu z jego rozmiarami. Sprawę załatwiają opcje STRIPCOMMENT i COMPACT, które powodują odpowiednio wyrzucenie komentarzy z kodu i wywalenie wszelkich nadmiarowych spacji, tabów itp. Korzystając z opcji STRIPTAGS można pozbyć się niechcianych tagów. Przydatna jest opcja STRIPEXTERNAL, która wyrzuca z kodu wszystkie tagi z odnośnikami wychodzącymi poza serwer lokalny. Dzięki temu można stworzyć wersję strony, przy których przeglądarka nigdy nie będzie się upominała o bsdsocket.library. Natomiast przy kompilowaniu dokumentów HSC sprawdza wszystkie odnośniki i ostrzega jeśli nie może znaleźć jakiegoś pliku. Dzięki temu odpada żmudne sprawdzanie strony krok po kroku, a właściwie klik po kliku. Właśnie te odnośniki są zmorą wszystkich zajmujących się stronami WWW, zwłaszcza, gdy z jakiegoś bardzo zagrzebanego katalogu trzeba się odwołać do pliku leżacego o wiele wyżej w hierarchi katalogów. Istnieje co prawda coś takiego jak <BASE HREF>, ale HSC wprowadza lepsze rozwiązanie: odwołania względem katalogu projektu. Wystarczy rozpocząć ścieżkę dostępu od dwukropka, co oznacza, że jest podawana względem katalogu naszego projektu. Sprowadza się do tego, że zapis <IMG SRC=":gfx/obrazek.jpg" ALT="*"> będzie zawsze prawidłowy, niezależnie od tego czy będzie on w dokumencie "index.html" czy "rozrywka/samobójstwa/wyniki.html". A normalnie w tym drugim wypadku musiałbyś napisać "../../gfx/obrazek.jpg". Podczas kompilacji sprawdzana jest też poprawność obrabianego kodu, wszystkie potknięcia jak niezamknięty tag zostaną wyłapane, a miejsce wystąpienie błędu dokładnie wskazane. Żyć, nie umierać.
HSC ma jeszcze jedną mocną stronę: instrukcję. Dostajemy ją w postaci HTML, co mnie na początku irytowało, ale na dłuższą metę jest wygodne. Sama instrukcja to prawdziwa perełka. Primo: jest w niej wszystko. Każda kwestia jest w niej omówiona, ani razu nie czułem potrzeby zasięgania informacji u autora. Secundo: jest logicznie podzielona. Każda informacja jest tam gdzie można by się spodziewać. Nigdy nie zdarzyło się, żebym się zastanawiał gdzie znaleźć odpowiedź na interesujący mnie temat. Tertio: jest przecudnie napisana. Autor znalazł idealną proporcję pomiędzy łopatologicznym objaśnianiem, a przedstawianiem. Wszystkie rozdziały są zwarte, nie mają dłużyzn i jakże często spotykanych porad w stylu "Jeśli komenda nie działa, to sprawdź czy włączyłeś komputer". Ponadto ta instrukcja jest... zabawna! I nie jest to ten rodzaj zabawności polegający na pisaniu wyrazów na przemian małymi i dużymi literami oraz wstawianiu smiley'ów gdzie się da. Autor wykazał się rasowym poczuciem humoru, śmiem wręcz zaryzykować stwierdzenie, że instrukcja do HSC mogłaby zaistnieć na rynku wydawniczym jako ciekawy zbiór felietonów. Żeby nie być gołosłownym podam małą próbkę. Normalnie gdy HSC stwierdzi, że w swojej stronie używasz tagów wprowadzonych przez nawiedzonych producentów przeglądarek to zwraca Ci na to uwagę tytułując Cię per "jerk" (ang. głupek, debil, idiota). Możesz jednak ustawić zmienną środowiskową HSCSALARY zawierającą pensję jaką otrzymujesz za tworzenie stron. Jeśli ta wartość będzie dostatecznie duża, to HSC zacznie się do Ciebie zwracać per "prostitute".
Czas kończyć. Mam nadzieję, że choć trochę Cię zainteresowałem programem HSC. Ba, jeśli namiętnie tworzysz strony WWW i wiesz co dobre, to pewnie już zapuszczasz FTP'a! W takim razie najlepiej skieruj go na jakiś mirror Aminetu do katalogu text/hyper, bo tam znajdziesz archiwum z HSC. Starsze wersje znalazłem na Aminet Setach 3 i 4. A zainteresowanych dalszymi szczegółami na temat programu zapraszam do korespondencji.