invocom multimedia - interaktywny kurs internetowy realizowany w

Transkrypt

invocom multimedia - interaktywny kurs internetowy realizowany w
2003
Zbigniew Korus
Roger ĝwierczyĔski
Instytut Elektroniki i Telekomunikacji
Politechnika PoznaĔska
Poznañskie Warsztaty Telekomunikacyjne
Poznañ 11-12 grudnia 2003
[email protected]
[email protected]
INVOCOM MULTIMEDIA
- INTERAKTYWNY KURS INTERNETOWY REALIZOWANY W RAMACH
EUROPEJSKIEGO PROGRAMU LEONARDO DA VINCI
Streszczenie: Artykuá przedstawia zaáoĪenia i pierwszy etap
realizacji interaktywnego kursu internetowego o tematyce
„multimedia”. Kurs powstaje we wspóápracy z wieloma
oĞrodkami w ramach projektu Invocom, wspóáfinansowanego przez UniĊ Europejską (program Leonardo da
Vinci). W artykule przedstawiono planowane treĞci
dydaktyczne, jak i opis wykorzystanej do realizacji
technologii.
1. WPROWADZENIE
Klasyczna formuáa przekazywania wiedzy - zajĊcia
laboratoryjne dla studentów jak i kursy poszerzające
wiedzĊ i doskonalące umiejĊtnoĞci dla pracowników
firm komercyjnych – polegająca na organizacji spotkaĔ
w ĞciĞle okreĞlonym czasie i miejscu, ma wiele
ograniczeĔ. Przykáadowo wielu studentów studiów
zaocznych czy wieczorowych ze wzglĊdu na swoje
obowiązki zawodowe nie zawsze moĪe uczestniczyü w
zajĊciach, co zdecydowanie negatywnie wpáywa na
zrozumienie caáoĞci kursu. RównoczeĞnie warunki
lokalowe uczelni, zazwyczaj nie uáatwiają wykonania
zalegáego üwiczenia poza siatką zajĊü. Idealnym
rozwiązaniem staje siĊ wobec powyĪszego udostĊpnienie
materiaáu w formie zestawu interaktywnych üwiczeĔ,
moĪliwych do wykonania w odpowiadającym
kursantowi czasie i miejscu. ZaáoĪeniem projekut
Invocom jest wykorzystanie do realizacji tego celu sieci
Internet.
As projberPT02/P1/36/011.
2. PROJEKT INVOCOM
Projekt Invocom (Internet-based vocational
training of communication students, engineers, and
technicians) powstaje we wspóápracy kilku oĞrodków
naukowych i firm prywatnych zainteresowanych
dziedziną nauczania na odlegáoĞü z Polski, Finlandii,
Francji i Portugalii. Projekt objĊto finansowaniem na lata
2002 – 2005, obecnie trwają prace nad ukoĔczeniem
pierwszego etapu. Szczegóáy znajdują siĊ pod adresem
[1].
Celem projektu jest przygotowanie zestawu
interaktywnych
lekcji,
prezentujących
wybrane
zagadnienia z zakresu informatyki i telekomunikacji na
bazie uprzednich doĞwiadczeĔ zdobytych w trakcie
realizacji klasycznych zajĊü laboratoryjnych [2].
2.1 Profil uĪytkownika
Kurs przeznaczony jest zasadniczo dla dwóch grup
docelowych. Pierwszą z nich tworzą studenci kierunków
związanych z elektroniką lub telekomunikacją, zarówno
na poziomie licencjackim jak i magisterskim
(odpowiednio BSc i MSc). Opracowane w ramach
projektu kursy zostaną wáączone do programów
nauczania partnerskich uczelni, a takĪe udostĊpnione w
postaci oferty ksztaácenia dla pracowników podmiotów
partnerskich nie bĊdących uczelniami.
Drugą grupĊ potencjalnych uĪytkowników
przygotowanych kursów, stanowią inĪynierowie i
pracownicy techniczni przemysáu telekomunikacyjnego,
mogący dziĊki ich wykorzystaniu podnieĞü swą wiedzĊ
ogólną.
2.2 Wykorzystywana technologia
Jako podstawĊ realizacji projektu przyjĊto
zaáoĪenie, iĪ - przeciwnie niĪ ma to czĊsto miejsce w
przypadku klasycznych zajĊü laboratoryjnych czy
kursów
stacjonarnych
realizacja
materiaáu
dydaktycznego nie bĊdzie wymagaü od uczestnika
poznawania (oraz ewentualnie instalacji) Īadnego
specjalizowanego oprogramowania komercyjnego. W
związku z powyĪszym we wszystkich przygotowanych
lekcjach uĪytkownik ma do czynienia jedynie ze
zbiorem dynamicznych stron [3] internetowych.
DynamicznoĞü moĪe byü zapewniana poprzez
wykorzystanie róĪnych technologii, wszystkie jednakĪe
muszą byü albo dostĊpne w systemie operacyjnym, albo
byü
przygotowane
w
sposób
umoĪliwiający
maksymalnie szybką i automatyczną instalacjĊ
odpowiednich rozszerzeĔ przeglądarki internetowej.
Jedynym ograniczeniem przyjĊtym przez partnerów jest
wymaganie zgodnoĞci z przeglądarką Internet Explorer
(w wersji 5 lub wyĪszej) i platformą Windows.
Wykorzystywanie
róĪnych
technologii
w
poszczególnych kursach nie bĊdzie stanowiü problemu
dla uĪytkownika, poniewaĪ wszystkie kursy oparte są na
jednakowym projekcie graficznym stron.
Drugim podstawowym zaáoĪeniem przyjĊtym przez
partnerów projektu, jest wykonywanie wszelkich
obliczeĔ po stronie klienta. DziĊki temu nie ma potrzeby
tworzenia i utrzymywania specjalizowanych serwerów,
na których naleĪaáoby zapewniü obsáugĊ wszystkich
wykorzystywanych narzĊdzi. W przyjĊtym modelu
zestawy materiaáów dydaktycznych mogą byü
umieszczane na dowolnym serwerze WWW.
Reasumując, podstawĊ realizacji wszystkich
üwiczeĔ stanowi jĊzyk HTML wraz z jego dynamicznym
rozszerzeniem – JavaScript. Na narzĊdziach tych oparty
jest szablon kursu wykorzystywany przez wszystkich
partnerów. Przykáadowe lekcje znajdują siĊ pod adresem
[1].
3. KURS MULTIMEDIA
Kurs prezentujący zagadnienia przetwarzania
danych multimedialnych przygotowywany jest przez
GrupĊ Telekomunikacji Multimedialnej Instytutu
Elektroniki i Telekomunikacji Politechniki PoznaĔskiej.
Grupa braáa udziaá w realizacji wielu projektów
związanych zarówno z przetwarzaniem danych, jak i ich
zdalną prezentacją. W szczególnoĞci zrealizowano
system umoĪliwiający zdalną akwizycjĊ, przetwarzanie i
prezentacjĊ obrazów preparatów mikroskopowych dla
potrzeb systemów telemedycznych [4, 5]. WiĊcej danych
o projektach grupy pod adresem [6]
3.1 Prezentowane zagadnienia
Przygotowywany kurs obejmuje:
x materiaáy wprowadzające do poszczególnych zagadnieĔ;
x interaktywne üwiczenia wykorzystujące
dane foniczne i wizyjne (zarówno
statyczne obrazy jak i ich sekwencje);
x testy do samodzielnej kontroli wyników
nauczania.
Celem
materiaáów
wprowadzających
jest
przedstawienie definicji jak równieĪ podanie opisów
metod, technik i standardów. Materiaáy wyjaĞniają
równieĪ zalecane eksperymenty wykonywane z
wykorzystaniem rzeczywistych testowych obrazów
statycznych, sekwencji wizyjnych i danych fonicznych.
Interaktywne üwiczenia i eksperymenty ukazują gáówne
zagadnienia związane z podstawowymi technikami
multimedialnymi.
W pierwszym – bĊdącym obecnie na ukoĔczeniu etapie realizacji przygotowywane są lekcje prezentujące
nastĊpujące zagadnienia dotyczące gáównie obrazów
statycznych:
x cyfrowa
reprezentacja
obrazów
statycznych i sekwencji wizyjnych;
x podstawowe operacje wykorzystywane w
przetwarzaniu obrazów;
x wykorzystanie filtrów w przetwarzaniu
obrazów;
x zagadnienia oceny jakoĞci obrazu.
Pierwsze z przygotowywanych üwiczeĔ wprowadza
pojĊcie
widma
obrazów
monochromatycznych.
Demonstrowane są widma obrazów syntetycznych i
naturalnych. Dyskutowane są problemy odwracalnoĞci
przeksztaácenia,
charakterystycznych
wáaĞciwoĞci
obrazu widma oraz problemy reprezentacji danych
widmowych. Drugą czĊĞü lekcji wypeániają zagadnienia
reprezentacji obrazów barwnych. Demonstrowane są
wáaĞciwoĞci kilku podstawowych przestrzeni barw
uĪywanych do reprezentacji koloru w obrazach
cyfrowych.
ûwiczenie drugie zapoznaje z prostymi operacjami
wykonywanymi na wszystkich punktach obrazu, bez
uwzglĊdniania
wartoĞci
punktów
sąsiednich.
W szczególnoĞci prezentowane są operacje kwantyzacji,
progowania i związane z histogramem oraz
przeksztaácenie gamma.
W kolejnej lekcji przedstawione zostaje
zagadnienie filtracji liniowej obrazów przy pomocy
filtrów o skoĔczonej odpowiedzi impulsowej (FIR).
Demonstrowane są charakterystyki czĊstotliwoĞciowe
filtrów dolnoprzepustowych i górnoprzepustowych oraz
dziaáanie tych filtrów na obrazy monochromatyczne.
Dyskutowane jest zagadnienie separowalnoĞci filtru FIR.
Ostatnie z üwiczeĔ pierwszego etapu porusza
niezwykle
istotne
zagadnienie
oceny
jakoĞci
przetworzonego materiaáu. Porównywane są miary
oceny obiektywnej (za pomocą wspóáczynnika PSNR)
oraz subiektywnej, zgodnie z zaleceniem BT.500 [7].
W dalszych etapach prac nastąpi rozszerzenie
zakresu prezentowanych zagadnieĔ o problemy
przetwarzania danych fonicznych i sekwencji wizyjnych.
W szczególnoĞci zaprezentowane zostaną nastĊpujące
zagadnienia:
x cyfrowa reprezentacja danych fonicznych;
x kompresja sygnaáów fonicznych;
x segmentacja i wykrywanie krawĊdzi w
obrazach;
x bezstratna kompresja obrazów i standard
JPEG-LS
x transformatowe kodowanie obrazów oraz
standard JPEG;
x kompresja sekwencji wizyjnych zgodnie
ze standardami H.263/H.26L oraz
zagadnienia wideokonferencji;
x kodowanie sygnaáów wizyjnych i fonicznych w standardach MPEG;
x kodowanie falkowe i standard JPEG 2000.
3.2 UĪyta technologia
Do realizacji interaktywnych stron internetowych
zdecydowano siĊ zastosowaü technikĊ kontrolek
ActiveX (ActiveX controls). [8] Kontrolka zostaáa
napisana w jĊzyku programowania C++, bazując na
autorskich programach sprawdzonych uprzednio w
formie klasycznych zajĊü laboratoryjnych [9]. Taka
realizacja pozwala na praktycznie dowolną rozbudowĊ
kontrolki o potrzebne funkcje. W tym celu naleĪy
dopisaü odpowiednią czĊĞü kodu programu i doáączyü go
do kodu kontrolki. Innym argumentem przemawiającym
za tym, Īe zdecydowano siĊ na kontrolkĊ ActiveX jest
fakt, Īe kontrolka uruchamia siĊ lokalnie na komputerze
uĪytkownika i w Īaden sposób nie obciąĪa serwera.
WáasnoĞü ta moĪe byü bardzo przydatna przy duĪej
iloĞci uĪytkowników jednoczeĞnie korzystających z
lekcji (np. przy zdalnym prowadzeniu kursów).
Kontrolka doáączona jest do strony internetowej
projektu. Wprowadzenie kontrolki ActiveX na stronĊ
internetową przeprowadza siĊ za pomocą obiektów.
Przykáadowe umieszczenie kontrolki w jĊzyku HTML
jest nastĊpujące:
<OBJECT ID="NAZWA" CODEBASE="KONTROLKA.OCX"
HEIGHT="256" WIDTH="256"
CLASSID="CLSID:F4C817BA-3E0D-4108-A0B96A31CC7A68E8">
<PARAM
<PARAM
<PARAM
<PARAM
NAME="_VERSION" VALUE="65536">
NAME="_EXTENTX" VALUE="13547">
NAME="_EXTENTY" VALUE="6773">
NAME="_STOCKPROPS" VALUE="0">
<PARAM NAME="_IMAGE" VALUE="1">
</OBJECT>
W przykáadzie tym NAZWA odpowiada nazwie
kontrolki. Nazwa ta bĊdzie wykorzystywana do
póĨniejszego przekazywania parametrów wejĞciowych
do odpowiedniej kontrolki. Jest to waĪne ze wzglĊdu na
fakt, iĪ na stronie czĊsto jest potrzebnych kilka
kontrolek, które wykonują róĪne funkcje. RozróĪnienie
kontrolek pozwala na przekazanie do kaĪdej z nich
innych
parametrów
z
nią
związanych.
KONTROLKA.OCX jest nazwą fizycznego pliku
kontrolki, który jest pobierany z serwera przy pierwszym
zaáadowaniu strony.
Rozmiar okna kontrolki (256×256) jest dobrany
w taki sposób, Īeby przy wyĞwietlaniu kilku kontrolek
na jednej stronie nie byáo problemów z rozmieszczeniem
ich na ekranie. Rozmiar ten równoczeĞnie najlepiej
nadaje siĊ do wizualizacji róĪnych funkcji związanych z
przetwarzaniem
obrazów,
poniewaĪ
obrazy
monochromatyczne zapisane są na 8 bitach, co daje 256
odcieni szaroĞci (taki rozmiar okna kontrolki najlepiej
nadaje siĊ do pokazania np. histogramu badanego
obrazu).
Innym parametrem obiektu jest CLASSID, który
musi byü zgodny z identyfikatorem podanym w kodzie
kontrolki. Przy braku zgodnoĞci obu identyfikatorów
kontrolka nie zostanie pobrana z serwera, co
uniemoĪliwi dalsze wykonywanie üwiczenia.
Kontrolka
zawiera
wszelkie
funkcje
i
wykorzystywane obrazy – áaduje siĊ i instaluje jedynie
podczas pierwszego uruchomienia danej czĊĞci kursu;
instalacja ta ponadto nastĊpuje w sposób automatyczny,
tak wiĊc uĪytkownik nie musi siĊ martwiü o problemy
związane z instalacją.
Kontrolka moĪe korzystaü z dziesiĊciu róĪnych
buforów, w których moĪe przechowywaü obrazy
wykorzystywane w üwiczeniach jak i wyniki
poszczególnych funkcji. Na stronie (w kontrolce)
wyĞwietlany jest tylko jeden bufor, który zawiera
interesujące dla nas dane. Wszystkie bufory są wspólne
dla kaĪdej kontrolki umieszczonej na stronie, co
umoĪliwia wykorzystanie do dalszych obliczeĔ obrazów
wynikowych z poprzedniej kontrolki.
W wielu lekcjach wykorzystywane są nie tylko
obrazy oryginalne, ale takĪe o zmienionych parametrach
(przykáadowo o ograniczonym zakresie jasnoĞci). Dla
zmniejszenia rozmiarów kontrolki zdecydowano siĊ na
dynamiczne wyznaczanie odpowiednich obrazów.
Obrazy te generowane są przez kontrolkĊ tylko w
przypadku, gdy są one konieczne do przeprowadzenia
danego
üwiczenia.
Fragment
kodu
kontrolki
wykonującego takie modyfikacje wygląda nastĊpująco:
case 1:
switch(ps_sub)
{
case 0:
for(k=0;k<3;k++)
for(i=0;i<256*256*4;i+=4)
buff[bs].pel[i+k] =
(2+buff[bs].pel[i+k])/4;
break;
case 1:
for(k=0;k<3;k++)
for(i=0;i<256*256*4;i+=4)
buff[bs].pel[i+k] =
63+(2+buff[bs].pel[i+k])/4;
break;
case 2:
for(k=0;k<3;k++)
for(i=0;i<256*256*4;i+=4)
buff[bs].pel[i+k] =
127+(2+buff[bs].pel[i+k])/4;
break;
case 3:
for(k=0;k<3;k++)
for(i=0;i<256*256*4;i+=4)
buff[bs].pel[i+k] =
191+(2+buff[bs].pel[i+k])/4;
break;
default:
break;
};
break;
PowyĪszy przykáad generuje obrazy o zmniejszonej
dynamice oraz przesuniĊtych histogramach, potrzebne
do
wizualizacji
funkcji
normalizującej
oraz
przesuwającej histogram.
Na stronie oprócz kontrolki wykorzystywany jest
jĊzyk programowania JavaScript. [3, 10] Peáni on
funkcjĊ
poĞredniczącą
pomiĊdzy
kontrolką
a
uĪytkownikiem.
MiĊdzy
innymi
pozwala
na
wprowadzanie do kontrolki potrzebnych parametrów
oraz zmiennych, co jest konieczne dla przeprowadzenia
odpowiednich üwiczeĔ i wyciągniĊcia wáaĞciwych
wniosków. Przykáadowy skrypt:
function SelectImage(i)
{
test1.SetPic(i,0);
test1.SetView(0);
document.Przycisk.val.value=thresh;
test2.Command("buff[1] = offset (buff[0]," +
thresh + ")");
test2.SetView(1);
};
Skrypt ten wyĞwietla w pierwszej kontrolce
(test1) obrazek, nastĊpnie odczytuje parametr
thresh ze strony (wpisany przez uĪytkownika) i
wykonuje funkcjĊ offset() z tym parametrem, której
wynik wyĞwietlany jest w drugiej kontrolce (test2).
Przekazanie parametrów do kontrolki odbywa siĊ
za pomocą áaĔcucha znaków przekazywanego przez
skrypt. NaleĪy pamiĊtaü o odpowiedniej skáadni tego
áaĔcucha. Pierwszym parametrem w áaĔcuchu jest bufor
wyjĞciowy (bufor, w którym zostanie zapisany wynik
operacji), po nim nastĊpuje rodzaj wykonywanej funkcji
a nastĊpnie bufor wejĞciowy (bufor, z którego pobierane
są dane) i na koĔcu parametry potrzebne do wykonania
danej funkcji:
buff[4] = norm
(buff[1],0,255)
PowyĪsza komenda wykona funkcjĊ norm() z
parametrami 0 i 255 na buforze pierwszym a wynik
bĊdzie zapisany do bufora czwartego.
W kodzie kontrolki do odbioru takiego áaĔcucha
jest odpowiednia funkcja, która podstawia pod zmienne
kolejne parametry:
strcpy(_command,txt);
sscanf(txt,"buff[%d] %s %s %s",&out,tmp,cmd,
args );
Zmiennej out przypisany zostanie numer bufora,
do którego naleĪy zapisaü wynik operacji, tmp jest
zmienną pomocniczą. Zmienna cmd bĊdzie zawieraáa
nazwĊ operacji, którą naleĪy wykonaü a do zmiennej
args zostaną zapisane wszystkie parametry wejĞciowe
danej operacji. W zaleĪnoĞci od powyĪszych zmiennych
(parametrów przekazanych ze strony do kontrolki za
pomocą JavaScript) kontrolka wykona odpowiednią
operacjĊ na Īądanym obrazie wejĞciowym i zapisze
wynik do wyjĞciowego bufora. Przykáadowa funkcja z
parametrami wejĞciowymi:
if(_stricmp(cmd,"median")==0)
{
if(sscanf(args,"(buff[%d],%d,%d)",&in0,&x,&y)
==3)
{
CAVMatrix mx(x,y);
mx = 1;
for(int k=0;k<3;k++)
{
_buff2comp(c0,in0,k);
c0.Median(mx);
_comp2buff(c0,out,k);
};
};
}
PowyĪszy fragment kodu wykonuje funkcjĊ
przeprowadzającą filtracjĊ medianową. Parametry x i y
okreĞlają wielkoĞü maski filtru. In0 jest buforem
wejĞciowym, a numer bufora wyjĞciowego zapamiĊtany
jest we wczeĞniej utworzonej zmiennej out.
Początkowo nastĊpuje ustawienie maski filtru. NastĊpnie
naleĪy obraz wejĞciowy przepisaü do komponentu, na
którym bĊdą wykonywane obliczenia. Sama operacja
filtracji wykorzystuje funkcjĊ Median(). Na koĔcu
naleĪy jeszcze przepisaü wynik filtracji do docelowego
bufora kontrolki. Przykáad ten ukazujĊ zasadĊ dodawania
poszczególnych funkcji do kontrolki, widaü jak áatwo
moĪna rozbudowaü kontrolkĊ o dodatkowe funkcje w
zaleĪnoĞci od potrzeb.
JĊzyk programowania JavaScript wykorzystywany
jest takĪe do wykonywania róĪnego rodzaju operacji
związanych z obsáugą przycisków oraz zmianą
parametrów w zaleĪnoĞci od akcji uĪytkownika.
3.3 Interaktywne üwiczenia
Wszystkie interaktywne üwiczenia wykorzystują
opisany w poprzednim punkcie mechanizm ActiveX.
Przykáadowa strona kursu (dostĊpna pod adresem [11])
przedstawiona jest na rysunku 1. Po czĊĞci teoretycznej
nastĊpuje proste interaktywne üwiczenie. W prawej
czĊĞci ekranu znajdują siĊ ikony dostĊpnych do
przetwarzania obrazów. Dwa wiĊksze obrazy
(rozdzielczoĞü 256 × 256 punktów) są w rzeczywistoĞci
oknami kontrolek.
Peána
komenda
przekazywana
kontrolce
generowana jest po zajĞciu jednego z nastĊpujących
zdarzeĔ:
x wybór (przez klikniĊcie) obrazu z
umieszczonych w postaci ikon po prawej
stronie ekranu;
x wpisanie
wartoĞci
parametru
do
odpowiedniego pola wraz z jej
zatwierdzeniem.
Alternatywnie w niektórych üwiczeniach moĪliwe
jest wybranie wartoĞci parametru równieĪ za pomocą
myszki.
W odpowiedzi na wprowadzone dane kontrolka w
lewym oknie wyĞwietla wskazany obraz w peánej
rozdzielczoĞci. Druga kontrolka dokonuje przetworzenia
wskazanego obrazu i wyĞwietla w swoim oknie rezultat.
4. PODSUMOWANIE
W artykule zaprezentowano wykorzystanie
technologii ActiveX do realizacji serii interaktywnych
üwiczeĔ prezentujących zagadnienia przetwarzania
danych multimedialnych. Wspólne uĪycie róĪnych
technologii i jĊzyków (ActiveX, HTML oraz JavaScript)
pozwoliáo uzyskaü moĪliwie maáe obciąĪenie serwera.
ZwiĊkszy to jednoczesną iloĞü uczestników oraz
niezawodnoĞü dziaáania poszczególnych lekcji. Takie
poáączenie pozwala takĪe na duĪą interakcyjnoĞü kursu,
oraz na samodzielne dziaáanie uĪytkownika, który moĪe
dowolnie zmieniaü parametry wejĞciowe funkcji i
obserwowaü wyniki przeprowadzonych eksperymentów.
PrzyjĊte rozwiązanie w peáni wpisuje siĊ w
zaáoĪenia projektu Invocom.
SPIS LITERATURY
[1] http://www.invocom.et.put.poznan.pl
[2] M. Bartkowiak, M. DomaĔski, K. Moder,
R. ĝwierczyĔski,
Laboratorium
dydaktyczne
przetwarzania obrazów, PoznaĔskie Warsztaty
Telekomunikacyjne '96, str. 106-111, PoznaĔ 1996
[3] B. Campbell, R. Darnell, Dynamic HTML, Wydawnictwo Helion 1998
[4] A. àuczak, S. Maükowiak, Dedykowane oprogramowanie do zastosowaĔ telepatologicznych,
materiaáy konferencji Telemedycyna 2000, àódĨ, str.
63-68
[5] A. àuczak, S. Maükowiak, Medyczny system
multimedialny ze zdalnym dostĊpem, Systemy
i technologie telekomunikacji multimedialnej STM
2000, str. 231-236, àódĨ 2000
[6] http://www.multimedia.edu.pl/projects/index.htm
[7] ITU-R Rec. BT.500-6, Methodology for the
subjective assessment of the quality of television
pictures
[8] S. Lalani, R. Chandak, ActiveX biblioteka programisty, Wydawnictwo Mikom 1997
[9] A. àuczak, S. Maükowiak, Uniwersalne oprogramowanie do realizacji koderów wizyjnych,
PoznaĔskie Warsztaty Telekomunikacyjne,, str. 3.5-1
3.5-4, PoznaĔ 98
[10] W. Romowicz, HTML i JavaScript, Wydawnictwo
Helion 1998
[11] http://www.multimedia.edu.pl/invocom/multimedia/
Rys. 1. Testowa wersja strony opisywanego kursu [11]

Podobne dokumenty