Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
CGI służy do generowania stron w zalezno?ci od czynników zewnętrzynych np. mozliwe jest zrobienie strony (skryptu) która bedzie miała zupełnie inn zawarto?ć rano, po południu i wieczorem. Oczywi?cie, można pokusić się o to wykorzystujc JavaScript ale CGI jest tutaj o wiele lepszym rozwizaniem, s zastosowania, w których CGI jest niezastapione. Zachęcam gorco do przestudiowania tego kursu, gdyż umożliwi wam tworzenie skomplikowanych stron www zawierajcych takie elementy jak liczniki, księgi go?ci czy wyszukiwarki (można je tworzyć tylko z pomoc CGI)
Widzę, że wstęp był wystarczajco zachęcajcy do zajrzenia do własciwej czę?ci kursu. Efekty takie jak liczniki i inne, które zostan poruszone w dalszej czę?ci kursu można tworzyć za pomoc np. php, perla ale biorc pod uwage przeznaczenie tej strony i zainteresowania osób czytajcych ten kurs zajmiemy się wyłcznie programami CGI pisanymi w C++.
Hello Work!
Dwoma podstawowymi mechanizmami CGI s: pobranie informacji od uzytkownika i wysłanie ich użytkownikowi. Zajmiemy się na pocztek tak jak we wszystkich kursach wysyłaniem danych.
Nasz pierwszy program będzie wypisywał na ekranie napis "Hello Work!" (witaj praco). Do zrozumienia tej lekcji będ potrzebne Ci wiadomo?ci z poza zakresu, których tutaj nie przedstawiam:
podstawy HTML
podstawy C++ (należy rozumieć prost składnię i wiedzieć co to jest standardowe we/wy)
Komunikat, który chcemy wypisać uzytkownikowi jest w formie tekstowej i tak własnie pojawi się u niego na ekranie. Bardzo łatwe, jednak nie plecam pisania programów z tym "zakresem" wiedzy, gdyż w erze multimediów efekty naszej "cięzkiej" pracy zostan po prostu wy?miane! Zakładajc, że znasz HTML możesz zaprojektować stronę w html a potem wy?wietlić j za pomoc CGI.
1.Tworzymy własn stronę
Hello Work!
Darmowy hosting zapewnia PRV.PL
Jeżeli jest w porzdku to idziemy dalej.
2.Tworzymy program (ja robię to w Borland C++ 4,52) wykorzystujcy standardowe wyj?cie:
Tworzymy projekt i wybieramy DOS!
Wy?wietlamy zawarto?ć pliku .cpp
i wpisujemy tam program:
#include
void main(){
cout << "Content-type: text/html \n\n"; //- o tym za chwilę
cout << "";
cout << "";
cout << "To jest strona tworzona przy pomocy CGI ";
cout << "";
cout << "";
cout << "Hello Work!";
cout << "";
cout << "";
}
Jak widać program wywala na stdout kod strony HTML. Już jest dobrze, ale co dalej?
Od strony programisty that is all.
Przegladarka "zbiera" to ze stdout i traktuje tak jakby było wpisane normalnie.
Efekt gotowy - do wy?miania :)
Co się dzieje jak przegldarka dostanie adres pliku *.cgi?
1.Plik jest uruchamiany na serwerze.
2.Jeżeli przegldarka uruchomiła skrypt z formularza to s przekazywane pola formularza.
3.Program wykonuje swoje zadanie.
4.Dane wygenerowane na standardowe wyj?cie trafiaj do przegldarki.
5.Koniec - efekt działania programu jest widoczny na ekranie.
Można powiedzieć, że dla przegldarki podanie adresu pliku *.cgi jest równoważne z podaniem adresu *.html, stara się ona otworzyć ten plik tak jak by to była zwykła strona.
To jest koniec lekcji pierwszej, w której poznali?my sposób wy?wietlenia efektów pracy naszego programu.
W lekcji drugiej poznamy, wbrew oczekiwaniom czytelników nie pobieranie danych od uzytkownika, ale od...serwera.
Do tej lekcji powinno się wiedzieć co to s zmienne ?rodowiskowe.
Załóżmy, że chcemy sprawdzić jakiego portu używa serwer, jakiego protokołu, lub jaki jest adres naszego programu.
Nic prostszego CGI udostępnia nam szereg zmiennych ?rodowiskowych, ograniczę się na poczatku tylko do kilku, reszta będzie umieszczona na końcu kursu.
SERVER_PORT - port serwera
SERVER_PROTOCOL - wspomniany wcze?niej protokół
SCRIPT_NAME - adres naszego pliku
Liczę na pewien zasób wiedzy czytelników, i nie podaje gotowego programu a jedynie wiadomo?ć, jak otrzymać żdan warto?ć.
getenv() - jest tym, czego potrzebujemy - zwraca ona tekst, którego spodziewamy się od naszej zmiennej
np.
getenv ("SCRIPT_NAME");
może dać co? takiego - "/cgi-bin/test.cgi"
a
getenv ("SERVER_PORT");
80
Widać więc, że je?li chcemy tylko wy?wietlić zawarto?ć takiej zmiennej to wystarczy użyć cout.
Teraz kolejne zmienne, którym przyjrzymy się bliżej, gdyż s uzywane odrobinę czę?ciej niż poprzednie:
REQUEST_METHOD - medota przesłania danych do serwera
QUERY_STRING - przesłany string
CONTENT_LENGTH - długo?ć stringa
Czas na odrobinę HTML-a:
Formularz może przesyłać dane na 2 sposoby:
1. Pierwsza metoda czyli GET
Widzieli?my zapewne, jak podczas korzystania z wyszukiwarki natknęli?my się w pasku adresu naszej przegldarki na co? takiego "http://szukaj.wp.pl/polska/szukaj.html?szukaj=%22Ala+ma+kota%22&baza=szperacz" - to nic innego jak wedrujace do skryptu dane z naszego formularza (pole w wyszukiwarce).
To jest wła?nie metoda GET. Dane s doklejane do adresu po znaku zapytania i jak widać trochę "zakodowane".
Metoda GET ma jeszcze jedno zastosowanie - można na stronie zrobic link z adresem np. www.wojek.com/szukaj.html?szukaj=strona1 i bedzie nap odpalał zawsze t stronę (mozna to wykorzystać, jak chcemy np. umie?cić na stronie godzinę wej?cia /nic innego mi nie wpadło do głowy a to akurat dużo lepiej jest zrobić w JavaScripcie/)
2. Metoda druga POSTem zwana
Tutaj nic nie widać ( może szkoda:) ) bo dane s dostarczane "po kryjomu". Większe formularze projektuje się przy pomocy metody POST.
Jak wybrać metodę?
Tutaj uciesz się gryma?ni czytelnicy, możemy sami zdecydować - co wykorzystamy.
Podczas wpisywania w Pajczku (lub jak robi to mniej inteligentni - w Wordzie albo Frontpage'u) znacznika form należy wpisać co? takiego:
action - adres (może być wzgledny) pliku *.cgi
method - wybrana metoda (post,get)
name - nazwa formularza
.......... - własciwa tre?ć formularza (pola, przyciski).
[1] - przycisk, po wcisnięciu którego formularz zostanie przekazany do serwera [2] - znów dla wybrednych - zamiast oblesnego przycisku do wysyłania może służyć ładny obrazek
To na tyle do zobaczenia w 3 cz. - już o odbieraniu.
Lekcja trzecia - halo, odbiór!
Wiemy juz jak wy?wietlać dane, i pobierać zmienne ?rodowiskowe. Spróbujemy teraz pobrać dane] z naszego super formularza:
Dane dostarczone przez użytkownika znajduj się w zmiennej ?rodowiskowej lub musimy go pobrać oczywi?cie ze stdin. Skd możemy wiedzieć co wykorzystać? O odebraniu danych decyduje wybrana metoda (post,get). Jeżeli dane s wysłane za pomoc GET to znajduj się w zmiennej, jesli za pomoca POST to trzeba będzie je pobrać. Czas na konkrety:
O tym, czy dane zostały wysłane za pomoc GET-a czy POST-a poinformuje nas REQUEST_METHOD. (prawie nigdy nie zachodzi potrzeba sprawdzania jak dane s wysyłane, przecież wiemy to, z analizy formularza, który jest obsługiwany przez skrypt. Ale je?li z niewiadomych powodów bedziemy zmuszeni do identyfikacji metody to najbliższe kilka linijek okaże się niezastpione)
getenv("REQUEST_METHOD") daje "POST" lub "GET" i już tylko niezawodny "if".
1.Przypadek pierwszy - łatwiejsza metoda GET
Jeżeli dane s wysłane GETem to wysłany string znajduje się w QUERY_STRING /getenv()/ i pozostaje jedynie wydobycie z niego interesujcych nas danych.
2.Przypadek drugi - trudniejsza metoda POST
Jeżeli dane s wysłane POSTem to znajduj się na STDIN i należy wczytać je tak jak dane z klawiatury, Mamy tutaj pewn przewagę nad klawiatur, znamy z góry długo?ć łańcucha (w GET też można j uzyskać).
CONTENT_LENGTH zawiera długo?ć naszego łańcucha (UWAGA!!! wszystkie zmienne zwracaj znaki i aby wykorzystać t liczbę należy przekonwertować j na int)
atoi() - wykona brudn robotę.
Teraz przykład pobrania:
cin.get(gdzie,int) // gdzie - wskazuje miejsce przekopiowania stringa, int to liczba znaków do wczytania pobrana wcze?niej (zgodnie z konwencj get(a,b,c) - a string, b liczba znaków do wczytania, c terminator)
Teraz to tylko wyparsować bo wyglda trochę jak czary-mary. Ale parsowanie nie jest tylko stosowane w CGI a powszechnie w różnych programach, dlatego wła?nie waż się losy czy umie?cić parsowanie w kolejnych lekcjach czy pominć chwil milczenia i i?c dalej.
W większości książek o programowaniu jest dział w którym nie porusza się składni języka tylko rozważa na tematy związane z programowaniem. Ten kurs aby był pełnowartościowy też musiał zostać uzbrojony w to "narzędzie". Umieszczam je dopiero w cz.4 dlatego, że chciałem aby czytelnicy mogli trochę popisać i stwierdzić, że nie jest to nic trudnego ale większość czytelników (praktykujących) zauważyło to żaden z ich mozolnie tworzonych skryptów nie działa! Nie należy się tym umartwiać gdyż jest to zdrowe i normale! A zaprzęgać nasze skrypty bedziemy w dalszej części kursu.
Dobry smak i inne godne zwrócenia uwagi cechy
Co to jest dobry smak i co ma wspólnego z profesjonalizmem? Profesjonalista z racji ciągłego wykonywania zawodu dopracowuje się "dobrego smaku" widząc wszystkie wady wady swoich tworów usuwa je i z ucząc się na błędach -> (dąży do) doskonałości. Co decyduje jednak o popularności naszych prac? Na pewno nie będzie najlepiej sprzedającą się gra z najlepszą grafiką, wykorzystująca wszystkie nowości OpenGL, dźwiękiem surround i sztuczną inteligencją opartą na systemach eksperckich i przy minimalnych wymaganiach: 800Mhz 256RAM i DVD. Strona internetowa zawierająca zdjęcie pełnoekranowe podstawione jako tło też chyba ubóstwiana nie będzie. Widziałem kiedyś stronę pseudo-rosyjskojęzyczną, której autor za wszelką cenę chciał umieścić wierszyk...cyrylicą. Problem tkwił w ambicjach. Zamiast zastosować odpowiednią stronę kodową (dla podobnych zapaleńców KOI-8r) umieścił limeryk jako...obrazek. Może krytykuję go bezpodstawnie bo celem tego mogła być kompatybilność z przeglądarkami Polaków, którzy nie zainstalowali wspomagania dla tych czcionek. Ale z podstwa grafiki wynika, że czarny tekst na białym tle najlepiej jest zgifować - da to dobrą jakość i mały size, "webmaster" wybrał *.jpg co dało nieczytelny plik o dużym rozmiarze i 16mln "marnujących" się kolorów. Trochę się oddaliłem od tematu tym rozwiązaniem, ale było rzeczywiście amatorskie. Aby uchodzić za profesjonalistę (tak dalej bedzie nazywana osoba, która wie co robi, wie jak to zrobić i jest obdarzona dobrym smakiem) należy być kompatybilnym, oszczędnym, optymalnym i treściwym. Ponieważ kurs tyczy CGI - techniki bezposrednio związanej z tworzeniem stron www dlatego też część rozważań tyczy się samych stron. Jest dużo rzeczy irytujących odbiorców naszych prac, dlatego należy się wystrzegać zbytnich wymagań od sprzętu (nie kazdy przecież ma Athlona), od użytkownika (też nie każdy ma mgr przed nazwiskiem, a i z tymi co mają różnie bywa), nieczytelności naszych prac i błędów (nie tylko programowych ale i ortograficznych) profesjonalista (jako ideał do którego się dązy) jest doskonały i nie pisze "fzhut" gdy chodzi o kierunek geograficzny. Istotą stron www nie jest bombardowanie odbiorcy jpgami 800x600 no może w niektórych wypadkach:) ale niesienie informacji. Nikomu przecież nie będzie lepiej się uczyć z przeładowanej grafiką (najlepiej jak widac ostatnio ruchmą) strony, na której tekst zajmuje waski pasek na środku ciagnący się w gąszczy banerów i napisów traktujących o świetności tego tekstu i jego niezastąpionej przydatności. Skrypty CGI są również narażone na bezmyślność (z dwóch stron). Mogą one generować strony "dopracowane" graficznie a mogą przekazywać samą treść. Czy jako webmaster zastanawiałeś się kiedyś czy czytelnicy wchodzą na twoją stronę obejrzeć galerię ruchomych napisów - raczej nie. W wyszukiwarce przeciez nie pisało:
Twoja.strona.pl - super fajna strona, duże czerwone guziki zmieniające kolor po najechaniu na niebieski!!! Wszystko umieszczone w ramkach, dzięki czemu możesz cały czas to podziwiać. Strona ma podkład dźwiękowy w formacie mp3 dla dobrej jakości - tylko teraz bitrate 512! A po zatym na jednej z podstron jest jakiś kurs CGI.
Jeżeli tak pisze to jesteś rozgrzeszony. Wybaczam (ja i odbiorcy) każdy wielokilobajtowy detal.
Jeżeli nie to czy zastanawiałeś się nad tym w co włożyć wiecej wysiłku - nie żyjemy w baroku, tu liczy się treść.
Ponieważ CGI są programami to narażone są również na błędy języka, lub dawac błędne wyniki. Nikt nie doda twojej strony do często odwiedzanych (unikam podania nazw, gdyż są dwie konkurencyjne i staram się zachować kompatybilność) gdy w dziale matematyka strona podająca wynik równania kwadratowego (przemyśl czy to możliwe) daje błedne wyniki.
Jako profesjonalista wszystko najpierw dwa razy przetestuj zanim to opublikujesz, zawsze bierz zapas na błędy, których nie da się uniknąć. Jak mawia przysłowie - "druty cięte na miarę są zawsze za krótkie".
Skrypt CGI powinien być wolny od błędów, dopracowany, a dopiero potem może robić za wyszukiwarkę na znanym portalu. Ostatnią wymieniona przeze mnie cechą profesjonalisty jest prawidłowy dobór narzędzi. Nikt przecież nie pisze w Basicu systemu operacyjnego. Dobór narzędzi może nie być całkiem bezmyślny niektórzy używają HTML do wysyłania maili albo postów na grupę dyskusyjną - to jest ich sprawa, niech robią co chcą ale genialne to nie jest. C++ nie jest może najlepszym językiem do pisania po stronie serwera ale na pewno bardzo daleko mu do HTMLowych maili. Perl do parsowania tekstu nadaje sie lepiej. Ale według mnie lepiej umieć C++ bardzo dobrze niż kaleczyć w C, PHP, Perlu.
Niedoszły profesjonalista w swoim fachu:
zanotowane.pl doc.pisz.pl pdf.pisz.pl qualintaka.pev.pl
void main(){
cout << "Content-type: text/html \n\n"; //- o tym za chwilę
cout << "";
cout << "";
cout << "
cout << "";
cout << "";
cout << "
Hello Work!";
cout << "";
cout << "";
}
Jak widać program wywala na stdout kod strony HTML. Już jest dobrze, ale co dalej?
Od strony programisty that is all.
Przegladarka "zbiera" to ze stdout i traktuje tak jakby było wpisane normalnie.
Efekt gotowy - do wy?miania :)
Co się dzieje jak przegldarka dostanie adres pliku *.cgi?
1.Plik jest uruchamiany na serwerze.
2.Jeżeli przegldarka uruchomiła skrypt z formularza to s przekazywane pola formularza.
3.Program wykonuje swoje zadanie.
4.Dane wygenerowane na standardowe wyj?cie trafiaj do przegldarki.
5.Koniec - efekt działania programu jest widoczny na ekranie.
Można powiedzieć, że dla przegldarki podanie adresu pliku *.cgi jest równoważne z podaniem adresu *.html, stara się ona otworzyć ten plik tak jak by to była zwykła strona.
To jest koniec lekcji pierwszej, w której poznali?my sposób wy?wietlenia efektów pracy naszego programu.
W lekcji drugiej poznamy, wbrew oczekiwaniom czytelników nie pobieranie danych od uzytkownika, ale od...serwera.
Do tej lekcji powinno się wiedzieć co to s zmienne ?rodowiskowe.
Załóżmy, że chcemy sprawdzić jakiego portu używa serwer, jakiego protokołu, lub jaki jest adres naszego programu.
Nic prostszego CGI udostępnia nam szereg zmiennych ?rodowiskowych, ograniczę się na poczatku tylko do kilku, reszta będzie umieszczona na końcu kursu.
SERVER_PORT - port serwera
SERVER_PROTOCOL - wspomniany wcze?niej protokół
SCRIPT_NAME - adres naszego pliku
Liczę na pewien zasób wiedzy czytelników, i nie podaje gotowego programu a jedynie wiadomo?ć, jak otrzymać żdan warto?ć.
getenv() - jest tym, czego potrzebujemy - zwraca ona tekst, którego spodziewamy się od naszej zmiennej
np.
getenv ("SCRIPT_NAME");
może dać co? takiego - "/cgi-bin/test.cgi"
a
getenv ("SERVER_PORT");
80
Widać więc, że je?li chcemy tylko wy?wietlić zawarto?ć takiej zmiennej to wystarczy użyć cout.
Teraz kolejne zmienne, którym przyjrzymy się bliżej, gdyż s uzywane odrobinę czę?ciej niż poprzednie:
REQUEST_METHOD - medota przesłania danych do serwera
QUERY_STRING - przesłany string
CONTENT_LENGTH - długo?ć stringa
Czas na odrobinę HTML-a:
Formularz może przesyłać dane na 2 sposoby:
1. Pierwsza metoda czyli GET
Widzieli?my zapewne, jak podczas korzystania z wyszukiwarki natknęli?my się w pasku adresu naszej przegldarki na co? takiego "http://szukaj.wp.pl/polska/szukaj.html?szukaj=%22Ala+ma+kota%22&baza=szperacz" - to nic innego jak wedrujace do skryptu dane z naszego formularza (pole w wyszukiwarce).
To jest wła?nie metoda GET. Dane s doklejane do adresu po znaku zapytania i jak widać trochę "zakodowane".
Metoda GET ma jeszcze jedno zastosowanie - można na stronie zrobic link z adresem np. www.wojek.com/szukaj.html?szukaj=strona1 i bedzie nap odpalał zawsze t stronę (mozna to wykorzystać, jak chcemy np. umie?cić na stronie godzinę wej?cia /nic innego mi nie wpadło do głowy a to akurat dużo lepiej jest zrobić w JavaScripcie/)
2. Metoda druga POSTem zwana
Tutaj nic nie widać ( może szkoda:) ) bo dane s dostarczane "po kryjomu". Większe formularze projektuje się przy pomocy metody POST.
Jak wybrać metodę?
Tutaj uciesz się gryma?ni czytelnicy, możemy sami zdecydować - co wykorzystamy.
Podczas wpisywania w Pajczku (lub jak robi to mniej inteligentni - w Wordzie albo Frontpage'u) znacznika form należy wpisać co? takiego:
action - adres (może być wzgledny) pliku *.cgi
method - wybrana metoda (post,get)
name - nazwa formularza
.......... - własciwa tre?ć formularza (pola, przyciski).
[1] - przycisk, po wcisnięciu którego formularz zostanie przekazany do serwera [2] - znów dla wybrednych - zamiast oblesnego przycisku do wysyłania może służyć ładny obrazek
To na tyle do zobaczenia w 3 cz. - już o odbieraniu.
Lekcja trzecia - halo, odbiór!
Wiemy juz jak wy?wietlać dane, i pobierać zmienne ?rodowiskowe. Spróbujemy teraz pobrać dane] z naszego super formularza:
Dane dostarczone przez użytkownika znajduj się w zmiennej ?rodowiskowej lub musimy go pobrać oczywi?cie ze stdin. Skd możemy wiedzieć co wykorzystać? O odebraniu danych decyduje wybrana metoda (post,get). Jeżeli dane s wysłane za pomoc GET to znajduj się w zmiennej, jesli za pomoca POST to trzeba będzie je pobrać. Czas na konkrety:
O tym, czy dane zostały wysłane za pomoc GET-a czy POST-a poinformuje nas REQUEST_METHOD. (prawie nigdy nie zachodzi potrzeba sprawdzania jak dane s wysyłane, przecież wiemy to, z analizy formularza, który jest obsługiwany przez skrypt. Ale je?li z niewiadomych powodów bedziemy zmuszeni do identyfikacji metody to najbliższe kilka linijek okaże się niezastpione)
getenv("REQUEST_METHOD") daje "POST" lub "GET" i już tylko niezawodny "if".
1.Przypadek pierwszy - łatwiejsza metoda GET
Jeżeli dane s wysłane GETem to wysłany string znajduje się w QUERY_STRING /getenv()/ i pozostaje jedynie wydobycie z niego interesujcych nas danych.
2.Przypadek drugi - trudniejsza metoda POST
Jeżeli dane s wysłane POSTem to znajduj się na STDIN i należy wczytać je tak jak dane z klawiatury, Mamy tutaj pewn przewagę nad klawiatur, znamy z góry długo?ć łańcucha (w GET też można j uzyskać).
CONTENT_LENGTH zawiera długo?ć naszego łańcucha (UWAGA!!! wszystkie zmienne zwracaj znaki i aby wykorzystać t liczbę należy przekonwertować j na int)
atoi() - wykona brudn robotę.
Teraz przykład pobrania:
cin.get(gdzie,int) // gdzie - wskazuje miejsce przekopiowania stringa, int to liczba znaków do wczytania pobrana wcze?niej (zgodnie z konwencj get(a,b,c) - a string, b liczba znaków do wczytania, c terminator)
Teraz to tylko wyparsować bo wyglda trochę jak czary-mary. Ale parsowanie nie jest tylko stosowane w CGI a powszechnie w różnych programach, dlatego wła?nie waż się losy czy umie?cić parsowanie w kolejnych lekcjach czy pominć chwil milczenia i i?c dalej.
W większości książek o programowaniu jest dział w którym nie porusza się składni języka tylko rozważa na tematy związane z programowaniem. Ten kurs aby był pełnowartościowy też musiał zostać uzbrojony w to "narzędzie". Umieszczam je dopiero w cz.4 dlatego, że chciałem aby czytelnicy mogli trochę popisać i stwierdzić, że nie jest to nic trudnego ale większość czytelników (praktykujących) zauważyło to żaden z ich mozolnie tworzonych skryptów nie działa! Nie należy się tym umartwiać gdyż jest to zdrowe i normale! A zaprzęgać nasze skrypty bedziemy w dalszej części kursu.
Dobry smak i inne godne zwrócenia uwagi cechy
Co to jest dobry smak i co ma wspólnego z profesjonalizmem? Profesjonalista z racji ciągłego wykonywania zawodu dopracowuje się "dobrego smaku" widząc wszystkie wady wady swoich tworów usuwa je i z ucząc się na błędach -> (dąży do) doskonałości. Co decyduje jednak o popularności naszych prac? Na pewno nie będzie najlepiej sprzedającą się gra z najlepszą grafiką, wykorzystująca wszystkie nowości OpenGL, dźwiękiem surround i sztuczną inteligencją opartą na systemach eksperckich i przy minimalnych wymaganiach: 800Mhz 256RAM i DVD. Strona internetowa zawierająca zdjęcie pełnoekranowe podstawione jako tło też chyba ubóstwiana nie będzie. Widziałem kiedyś stronę pseudo-rosyjskojęzyczną, której autor za wszelką cenę chciał umieścić wierszyk...cyrylicą. Problem tkwił w ambicjach. Zamiast zastosować odpowiednią stronę kodową (dla podobnych zapaleńców KOI-8r) umieścił limeryk jako...obrazek. Może krytykuję go bezpodstawnie bo celem tego mogła być kompatybilność z przeglądarkami Polaków, którzy nie zainstalowali wspomagania dla tych czcionek. Ale z podstwa grafiki wynika, że czarny tekst na białym tle najlepiej jest zgifować - da to dobrą jakość i mały size, "webmaster" wybrał *.jpg co dało nieczytelny plik o dużym rozmiarze i 16mln "marnujących" się kolorów. Trochę się oddaliłem od tematu tym rozwiązaniem, ale było rzeczywiście amatorskie. Aby uchodzić za profesjonalistę (tak dalej bedzie nazywana osoba, która wie co robi, wie jak to zrobić i jest obdarzona dobrym smakiem) należy być kompatybilnym, oszczędnym, optymalnym i treściwym. Ponieważ kurs tyczy CGI - techniki bezposrednio związanej z tworzeniem stron www dlatego też część rozważań tyczy się samych stron. Jest dużo rzeczy irytujących odbiorców naszych prac, dlatego należy się wystrzegać zbytnich wymagań od sprzętu (nie kazdy przecież ma Athlona), od użytkownika (też nie każdy ma mgr przed nazwiskiem, a i z tymi co mają różnie bywa), nieczytelności naszych prac i błędów (nie tylko programowych ale i ortograficznych) profesjonalista (jako ideał do którego się dązy) jest doskonały i nie pisze "fzhut" gdy chodzi o kierunek geograficzny. Istotą stron www nie jest bombardowanie odbiorcy jpgami 800x600 no może w niektórych wypadkach:) ale niesienie informacji. Nikomu przecież nie będzie lepiej się uczyć z przeładowanej grafiką (najlepiej jak widac ostatnio ruchmą) strony, na której tekst zajmuje waski pasek na środku ciagnący się w gąszczy banerów i napisów traktujących o świetności tego tekstu i jego niezastąpionej przydatności. Skrypty CGI są również narażone na bezmyślność (z dwóch stron). Mogą one generować strony "dopracowane" graficznie a mogą przekazywać samą treść. Czy jako webmaster zastanawiałeś się kiedyś czy czytelnicy wchodzą na twoją stronę obejrzeć galerię ruchomych napisów - raczej nie. W wyszukiwarce przeciez nie pisało:
Twoja.strona.pl - super fajna strona, duże czerwone guziki zmieniające kolor po najechaniu na niebieski!!! Wszystko umieszczone w ramkach, dzięki czemu możesz cały czas to podziwiać. Strona ma podkład dźwiękowy w formacie mp3 dla dobrej jakości - tylko teraz bitrate 512! A po zatym na jednej z podstron jest jakiś kurs CGI.
Jeżeli tak pisze to jesteś rozgrzeszony. Wybaczam (ja i odbiorcy) każdy wielokilobajtowy detal.
Jeżeli nie to czy zastanawiałeś się nad tym w co włożyć wiecej wysiłku - nie żyjemy w baroku, tu liczy się treść.
Ponieważ CGI są programami to narażone są również na błędy języka, lub dawac błędne wyniki. Nikt nie doda twojej strony do często odwiedzanych (unikam podania nazw, gdyż są dwie konkurencyjne i staram się zachować kompatybilność) gdy w dziale matematyka strona podająca wynik równania kwadratowego (przemyśl czy to możliwe) daje błedne wyniki.
Jako profesjonalista wszystko najpierw dwa razy przetestuj zanim to opublikujesz, zawsze bierz zapas na błędy, których nie da się uniknąć. Jak mawia przysłowie - "druty cięte na miarę są zawsze za krótkie".
Skrypt CGI powinien być wolny od błędów, dopracowany, a dopiero potem może robić za wyszukiwarkę na znanym portalu. Ostatnią wymieniona przeze mnie cechą profesjonalisty jest prawidłowy dobór narzędzi. Nikt przecież nie pisze w Basicu systemu operacyjnego. Dobór narzędzi może nie być całkiem bezmyślny niektórzy używają HTML do wysyłania maili albo postów na grupę dyskusyjną - to jest ich sprawa, niech robią co chcą ale genialne to nie jest. C++ nie jest może najlepszym językiem do pisania po stronie serwera ale na pewno bardzo daleko mu do HTMLowych maili. Perl do parsowania tekstu nadaje sie lepiej. Ale według mnie lepiej umieć C++ bardzo dobrze niż kaleczyć w C, PHP, Perlu.
Niedoszły profesjonalista w swoim fachu: