wersja

Transkrypt

wersja
Jesień Linuksowa
Materiały konferencyjne
Polska Grupa Użytkowników Linuxa
2
Autorzy:
Daniel Koć,
Jakub Lewandowski,
Rafał Magryś,
Adam Mańczuk,
Borys ’michuk’ Musielak,
Robert Partyka,
Wojciech Rakszawski,
Michał Sawicz,
Piotr Strzyżewski
Krzysztof Witański
Spotkanie zorganizowali:
Dariusz Grzesista,
Filip Kłębczyk,
Małgorzata Płatek,
Lukasz Porębski,
Artur Przybyła,
Jarosław Jan Pyszny,
Wojciech Rakszawski
Imprezę wsparli:
Google,
IBM,
Narodowe Archiwum Cyfrowe,
wydawnictwo Helion,
Leon Teleinformatyka,
Linux Magazine,
Ux Systems
Patronat medialny:
TVP Katowice,
Radia 90,
Polska Dziennik Zachodni,
a także portale internetowe:
rybnik.com.pl i smolna.rybnik.pl
Dziękujemy tym wszystkim, którzy wnieśli szczególny wkład do imprezy. Są to:
Agnieszka Bohosiewicz – Czujne (jak zawsze) Oko,
Konrad Wawruch – Nieoceniony przy dopinaniu sponsoringu,
Krzysztof Leszczyński – Twórca i Nadzorca systemu rejestracji uczestników Jesieni,
TEXnik książki jesiennej,
Karol Kreński ’mimooh’ – Twórca loga Elektryczny Tux Rybnik 2008,
Lukasz Wierzyński – Twórca zdjęć jesiennych do reklam i prasy,
Michał Sawicz – Twórca i Aktualizator agendy w formacie iCalendar.
3
Witajcie Jesiennicy!
Głos narodu sprawił, że spotykamy się w tym samym miejscu co
poprzednio. Nic nas nie zaskoczy – to samo jezioro, te same huśtawki, te same bungalowy (ciekawe, czy w tym roku również pary
nie-mieszane wylądują w łożach małżeńskich?)
O walorach merytorycznych rozpisywać się nie będziemy – organizatorzy zadbali, by uczestnicy nie mieli zbyt wiele czasu na rozkoszowanie się urokami okolicznych lasów i Zalewu Rybnickiego.
Sobotni wieczór umili koncert jazzowy, trwający w czasie wieczornego grilowania, prosimy więc o powstrzymanie się od rytmicznego
ciamkania i mlaskania.
Spis referatów
Michał Sawicz
O pingwinie w domowym kinie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Michał Sawicz
Wirtualizacja – ale po co? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Krzysztof Witański
Linux w urzędzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Borys ‘michuk’ Musielak, Daniel Koć
Integracja Linuksowej społeczności w Internecie . . . . . . . . . . . . . 32
Adam Mańczuk
Systemy wbudowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Rafał Magryś, Jakub Lewandowski
Rozwój systemów IT w NAC na przykładzie ZoSIA . . . . . . . . . . . . 52
Piotr Strzyżewski
Automatyczne wyszukiwanie komputerów i usług . . . . . . . . . . . . 57
Robert Partyka
XUL – interfejs użytkownika przyszłości? . . . . . . . . . . . . . . . . . . . . . 74
Wojciech Rakszawski
Blender a wizerunek i reklama firmy . . . . . . . . . . . . . . . . . . . . . . . . . . 88
O pingwinie w domowym kinie
Michał Sawicz
Od dłuższego czasu telewizor stanowi centrum domowej rozrywki. Materiały, jakimi karmią nas nadawcy, często pozostawiają wiele
do życzenia. Coraz więcej osób chciałoby oglądać to, co sami sobie
wybiorą, a nie to, co akurat jest dostępne. Czy, kiedy oglądamy filmy
na komputerze, telewizor przestaje być potrzebny?
Termin „multimedia” w kontekście mojego artykułu stanowczo
zbyt mocne słowo. W dalszej części będę miał na myśli raczej multum
otaczających nas mediów. Co z tymi mediami można robić? Przede
wszystkim oglądać, słuchać, czytać. Możliwości jest jednak znacznie
więcej.
Wiadomo: telewizor to przede wszystkim filmy, seriale. Któż nie
lubi sobie usiąść sobie wieczorem przy jakimś dobrym trunku i obejrzeć porządnego filmu? Najpopularniejszym nośnikiem są ciągle płyty
DVD, które właściwie już w momencie ich ekspansji były przestarzałe.
W czasach, gdy płyty te pojawiły się na rynku soho, niepodzielnie królowały już materiały skompresowane jednym z najbardziej dziś popularnych standardów – MPEG-4. DivX, czy inne jego odmiany (a także
jeden z najwydajniejszych dziś – H.264), potrafi albo o niebo skuteczniej skompresować strumień wideo, oszczędzając tym samym miejsce
6
Michał Sawicz
na nośniku, albo zapisać obraz o znacznie wyższej jakości. Na rynek
w iście ślimaczym tempie wkraczają płyty BluRay, które korzystają
właśnie z technologii H.264, zapisując przy okazji materiał w standardzie HD. Konkurencyjne toshibowskie HD-DVD poległo na placu
boju. W lutym 2008 firma ogłosiła koniec prac nad tym standardem.
Warto zapamiętać, że ś.p. HD-DVD też korzystało z kompresji H.264.
Nośnik optyczny zawsze trzeba skądś zdobyć, a to w dobie rozleniwionego oglądacza nie lada wyzwanie. Trzeba się udać do sklepu,
do wypożyczalni, trzeba zmarnować cenne minuty na dojazd i na poszukiwanie ciekawego tytułu. Naprzeciw tym troskom wychodzi – co
prawda jeszcze u nas raczkująca – technologia video-on-demand, czyli video na życzenie. Pozwala ona na wybór materiału bez wstawania
z fotela – choć niestety z bardzo ograniczonej biblioteki. A co, jeśli
taki film nam się spodoba? Dobrze byłoby mieć możliwość jego archiwizacji. Poza usługą VoD, związaną zwykle z dostawcą internetu czy
platformy cyfrowej, w internecie istnieją niezależne wypożyczalnie, takie jak AppleTV. Korzystanie z nich wymaga jednak porządnego łącza,
co w Polsce nadal należy do rzadkości.
W transmisjach telewizyjnych w Europie standardem jest DVB
i jego trzy odmiany: naziemny (terrestrial), kablowy (cable) i satelitarny (satellite). Wszystkie cechuje zbliżony sposób przekazu sygnału,
choć nawzajem nie są one kompatybilne. Każdy odbiornik przygotowany jest do danego rodzaju sygnału. Zdarzają się też tunery hybrydowe. Tak jak w telewizji analogowej – sygnał transmitowany jest
w różnych przedziałach częstotliwości, po to, by przekazy ze sobą nie
kolidowały. Transmisja cyfrowa opiera się na przesyłaniu skompresowanych strumieni. Do tej pory używano systemu kodowania MPEG-2,
znanego również z płyt DVD. Wraz z nadejściem telewizji HD, operatorzy (zwłaszcza satelitarni) przechodzą na transmisję MPEG-4 głównie
po to, by ciąć koszty. W ten sposób, w tym samym paśmie można
przesłać więcej kanałów, albo tyle samo, o wyższej jakości.
W ostatnim czasie możliwe stało się przesyłanie telewizji w technologii IPTV, wykorzystującej sieć IP. Podobnie jak wypożyczalnie VoD,
wymaga to jednak wysokiej przepustowości łącza albo korzystania
O pingwinie w domowym kinie
7
z usług dostawcy internetowego, który przesyła dane w dodatkowym
paśmie.
Kolejnym, ostatnio bardzo popularnym rozszerzeniem jest timeshifting. Pozwala on na zatrzymanie i przewijanie materiału, który
został już nadany. Pozwala wyjść na przysłowiowe siku lub przewinąć materiał do momentu, który z jakiegoś powodu nam umknął –
wreszcie nie jesteśmy zdani na łaskę i niełaskę realizatora meczu,
możemy powtarzać najlepszego gola tyle razy, ile tylko dusza zapragnie. Time-shifting bywa przydatny również wtedy, gdy nie możemy
obejrzeć materiału w godzinach emisji. Niektóre rozwiązania pozwalają automatycznie omijać reklamy w zapisywanym materiale. Oczywiście nie jest to wehikuł czasu – nie możemy przewinąć reklam, które
jeszcze się nie skończyły, bądź przewinąć do programu, który jeszcze
się nie zaczął. Możemy natomiast odtworzyć wyemitowane wcześniej
fragmenty, już bez reklam.
Kino – dla wielu przeszłość, dla innych wciąż najlepsze, ba, jedyne odpowiednie miejsce oglądania filmu. Domowy telewizor w ogóle
tu nie pasuje, choć może pomóc w wyborze – gdzieś przecież musimy
obejrzeć zwiastun filmu. Jeśli telewizor zostanie do tego odpowiednio
przygotowany, może nie tylko taki zwiastun pokazać. Może udzielić
odpowiedzi, w którym kinie ten film zobaczymy, a w niedalekiej przyszłości pozwoli również zarezerwować bilety.
Kolejnym medium jest muzyka. Wymaga ona od odbiorcy znacznie mniej uwagi niż film, więc towarzyszy mu codziennie i w każdym
miejscu. Każdy z nas posiada jakąś bibliotekę muzyki – czy to na płytach CD, czy w postaci plików muzycznych. Odtwarzanie jej jest trywialne. Pracując przy komputerze (laptopie) słuchanie muzyki bywa
utrudnione. Słuchawki nie są wygodne, a jakość dźwięku z głośników
pozostawia wiele do życzenia. W końcu do czegoś porządne wzmacniacze nadal mamy. Kiedy nasza biblioteka osiąga rozmiar kilkunastu
tysięcy plików, sprawny dostęp do zbiorów bez myszy i klawiatury robi
się trudny. Jeśli odwiedzi nas znajomy z własnym odtwarzaczem czy
dyskiem USB, wówczas najlepiej byłoby podpiąć jego sprzęcik do zestawu kina domowego, a nie do komputera, tym bardziej, że zazwyczaj
8
Michał Sawicz
słuchamy tych kawałków tylko raz, razem z przyjacielem. Chcemy, by
nasze domowe centrum rozrywki pozwalało kopiować muzykę do biblioteki oraz dzielić się jej zawartością. Wszystkie te operacje powinny
być dostępne nie tylko w komputerze. Nic nie stoi na przeszkodzie, by
w trakcie odtwarzania utworu na ekranie telewizora można było zobaczyć informacje o wykonawcy, tekst utworu czy np. daty koncertów.
Idąc dalej – przydałoby się zarezerwowanie biletu na te koncerty.
Mówiąc o muzyce, musimy pamiętać o radiu. Czym z technicznego punktu widzenia różni się radio od telewizji? Brakiem obrazu!
Radio przesyłane jest techniką analogową (FM) i cyfrową (DVB). Jeśli
przesyła informacje o wykonawcy i tytule utworu, który jest właśnie
emitowany, dobrze byłoby uzyskać dostęp do tych informacji. Ilekroć
tylko dzięki temu tekstowi udało mi się zapamiętać wykonawcę danego utworu!
Po powrocie z wakacji, fajnie jest pokazać rodzinie i znajomym,
jak fantastyczne fotografie udało nam się wykonać. Nie posiadam
rzutnika klasycznych slajdów i podejrzewam, że większość z nas, nawet jeśli takowy posiada, dawno już nie pamięta, że w ogóle go ma.
Zdjęcia papierowe wychodzą z użytku, ze względu na koszty wywołania. Najczęściej siadamy więc przed ekranem... komputera? Nie! Mały
ekran laptopa nie daje wystarczającego komfortu. Mamy przecież telewizor i rzutnik cyfrowy, który świetnie nadaje się do przeglądania
naszych mega-zdjęć.
Pisząc o mediach, nie sposób pominąć jednego z najważniejszych
chyba obecnie – internetu. Znajdziemy w nim wszystko – filmy, muzykę, zdjęcia... Zastanówmy się, czy dostęp do internetu powinien być
możliwy tylko z komputera PC? Jego włączanie za każdym razem pożera cenny czas, a nam w niedzielne popołudnie przecież nie zależy na wielu dodatkowych możliwościach. Chcemy posłuchać muzyki
(Last.fm), radia internetowego (np. Shoutcast) czy poznać twórczość
artystów udostępniających swoje prace na licencji Creative Commons
(Jamendo). YouTube, Vimeo i wiele innych pozwalają nam obejrzeć
video czy teledysk zasłyszanego przed chwilą utworu. Hulu oferuje
darmowy dostęp do filmów i seriali w dość wysokiej jakości. Serwisy
O pingwinie w domowym kinie
9
typu Flickr czy PicasaWeb udostępniają zdjęcia, które opublikowali
nasi znajomi. Możliwości są zatem nieograniczone.
Coraz popularniejsze stają się usługi komunikacyjne typu VoIP
(voice-over-IP), takie jak Skype, czy bardziej standardowy SIP. Oferują one również transmisję wideo. Czy telewizor (choćby ten mały,
w kuchni) nie wydaje się lepszym urządzeniem do video- rozmowy, niż
komputer? Naturalnie powinno się z niego dać się przełączać rozmowy
do innego telewizora lub komputera, albo stworzyć wideokonferencję.
A do tego nie jest potrzebna klawiatura ani mysz!
Pewne czynności wymagają wpisania dużej ilości tekstu czy przeglądania długich list (np. lista wykonawców z naszej biblioteki multimedialnej). Pomysłem na rozwiązanie tego problemu jest podłączenie naszego, (tak, nazwijmy go jeszcze) „telewizora” do komunikatora.
Dzięki temu możliwe okaże się np. wklejenie linka do YouTube czy
Flickr w okienku rozmowy, by obejrzeć dane wideo czy zdjęcia na dużym ekranie lub podanie nazwy albumu, którego właśnie chcemy posłuchać. Dysponując listą zaufanych znajomych, odnośniki takie mogliby oni przesyłać bezpośrednio do naszego HTPC tak, byśmy nie
musieli wcale uruchamiać komputera. Bezpośrednio z pilota możliwe
byłoby na przykład wysłanie telewizorowi znajomego odnośnika do albumu na Jamendo. Bez problemu moglibyśmy sprawdzić prognozę
pogody albo przejrzeć wiadomości RSS, jeszcze przed wyjściem z domu. Na zasadzie analogii, możliwe byłoby korzystanie z Podcastów.
Przeglądanie zwykłych stron WWW mi osobiście wydaje się przesadą,
choć pewnie wiele osób skorzystałoby z takiej możliwości.
Integracja naszego systemu rozrywki z rozwiązaniami tzw. inteligentnego budynku (czy bardziej prawidłowo – automatyki budynkowej) otwiera przed nami kolejny szeroki wachlarz możliwości. Mam
na myśli na przykład inteligentne sterowanie światłem, czyli przygaszanie go w salonie, kiedy włączamy film. Równie łatwa do wyobrażenia jest dystrybucja dźwięku w całym domu – czyli słuchanie muzyki
puszczonej z urządzenia dźwiękowego w dowolnym pomieszczeniu.
Istnieją rozwiązania, dzięki którym muzyka czy film potrafi „podążać” za użytkownikiem poruszającym się po domu. Wykorzystuje się
10
Michał Sawicz
w tym celu urządzenia Bluetooth (telefony, PDA itp.). Komputer można
połączyć z systemem alarmowym, instalacją grzewczą czy monitoringiem, pozwalając zobaczyć np. kto podjeżdża samochodem pod nasz
dom – w dowolnym komputerze czy telewizorze, a często nawet poza
budynkiem, przez stronę WWW. Możliwości inteligentnego budynku
to temat na osobną prelekcję, a pewnie i niejedną książkę, tym bardziej, że rozwiązania pozwalające je tworzyć coraz częściej znajdują
się na wyciągnięcie ręki. Możemy je znaleźć nie tylko w jednostkach
rządowych czy naukowych, ale również w coraz większej liczbie hoteli
o wysokim standardzie i sklepach.
Powyżej opisałem najczęstsze wymagania, stawiane współczesnym systemom domowej rozrywki. Zastanówmy się teraz, jakie możliwości zyskamy, wybierając konkretne rozwiązanie sprzętowe.
Set-Top-Box, popularnie zwany u nas „dekoderem telewizji cyfrowej”, w zależności od zaawansowania sprzętu i oferty operatora,
udostępnia możliwość odtwarzania mediów, dostarczanych wyłącznie
z platformy cyfrowej czy telewizji kablowej. Bardziej zaawansowane
modele umożliwiają time-shifting i nagrywanie. Coraz częściej pojawiają się na nich usługi video-on-demand. Odtwarzacze DVD/DivX
pozwalają na wyświetlenie zdjęć z podłączonego pendrive’a czy karty
pamięci, a te droższe również na odtwarzanie filmów z lokalnej sieci.
Jeśli natomiast zdecydujemy się wydać na to „pudełko” jeszcze więcej, będziemy mogli oglądać jeden kanał nagrywając inny, wypalać
nagrane programy na DVD, czy składować materiały video na dysku
o dużej pojemności. Dodatkowo, urządzenia pracujące pod kontrolą
Linuksa posiadają w sieci spore zasoby dodatkowego oprogramowania. Urządzenie takie może w wielu zadaniach zastępować komputer
klasy media center.
Dedykowany komputer, który postawimy pod telewizorem, potrafi
wszystko to, co zwykły. Znika przy tym problem współdzielenia komputera, gdy jedna osoba chce oglądać film, a druga pracować na komputerze. HTPC buduje się tak, by był cichy, zmniejszając do minimum
O pingwinie w domowym kinie
11
liczbę wentylatorów i innych ruchomych części. Coraz częściej producenci sprzętu decydują się na zastąpienie dysku twardego kartą
pamięci – i to też jest jego atut.
Dobrą praktyką jest umieszczanie serwera mediów w osobnym
pomieszczeniu, np. piwnicy, tak, by dane dostępne były zawsze – niezależnie od włączonych komputerów, a spory i głośny komputer nie
przeszkadzał w salonie. Minusem takiego rozwiązania będzie długi
czas jego uruchamiania, w porównaniu z dedykowanymi urządzeniami. Problem ten łatwo jest jednak zminimalizować, wykorzystując
wstrzymanie lub hibernację systemu zamiast jego wyłączania. Większość oprogramowania umożliwia też personalizację menu, tak by
każdy użytkownik mógł dostosować interfejs do własnych upodobań
oraz modyfikować wybrane media.
Protokół universal plug-and-play pozwala na łatwe współdzielenie mediów z urządzeniami, które potrafią z niego korzystać. Pozwala
np., po odpowiednim skonfigurowaniu serwera mediów UPnP, na odtwarzanie muzyki bezpośrednio we wzmacniaczu (np. Yamaha), wideo w konsolach (np. PlayStation 3) czy telewizorach z wbudowaną
obsługą tego protokołu (np. Acer). Urządzenia takie nie wymagają
żadnej konfiguracji. Podłączenie do sieci, w której działają serwery
UPnP spowoduje pokazanie się tych serwerów np. w menu telewizora. Istnieje także możliwość zdalnego sterowania takim urządzeniem,
zwanym Media Rendererem przy użyciu np. interfejsu na komputerze czy innym urządzeniu implementującym zestaw instrukcji Media
Controller.
Wiemy już jakiego sprzętu możemy użyć do budowy własnego
centrum multimedialnego, jednak hardware to nie wszystko. Zwłaszcza jeśli korzystamy z komputera przyda nam się pakiet oprogramowania, który mógłby zmienić nasz pokój w salę kinową.
Najbardziej chyba kompletnym rozwiązaniem jest projekt MythTV, czyli oprogramowanie klasy PVR (Personal Video Recorder). Pozwala ono oglądać kanały TV i radiowe z różnych źródeł – tunerów
telewizyjnych, satelitarnych (także zewnętrznych), kamer i wielu innych. Umożliwia nagrywanie ze wszystkich obsługiwanych źródeł, jak
12
Michał Sawicz
również time-shifting. Od wersji 0.21 możemy nagrywać jednocześnie
kilka kanałów z jednego tunera, o ile kanały te znajdują się w jednym tzw. multipleksie. Nawiasem mówiąc, kiedy w Polsce jest mowa
o przejściu na transmisję naziemną w standardzie DVB-T, wspomina
się o uruchomieniu trzech takich multipleksów. W efekcie MythTV
pozwoli na nagrywanie wszystkich kanałów przesyłanych tą drogą,
przy wykorzystaniu jedynie trzech tunerów DVB-T.
Większość kanałów Cyfry+ nadawana jest w pięciu multipleksach – nagrywanie ich wszystkich jest więc możliwe z wykorzystaniem pięciu tunerów, choć pojawia się jeszcze kwestia dekodowania
takiego sygnału. MythTV oferuje bardzo rozbudowany system planowania nagrań. Pozwala np. na nagranie wszystkich odcinków danego
programu bez względu na kanał i godzinę emisji. Eliminuje duplikaty, o ile dane o programie TV są wystarczająco precyzyjne. Pozwala
na automatyczne wyszukiwanie reklam i ich eliminację podczas odtwarzania. Możliwa jest także podstawowa edycja nagrań, np. wycinanie zapowiedzi z nagrania przeznaczonego do archiwizacji.
MythTV pozwala na pracę z materiałami w wysokiej rozdzielczości. Niestety ta ilość możliwości wiąże się ze skomplikowaną konfiguracją. Całość można podzielić na kilka (choć teoretycznie – dowolną) liczbę komputerów, odpowiedzialnych wyłącznie za nagrywanie
(backend), odtwarzanie (frontend), albo jedno i drugie. W sieci może istnieć kilka backendów, ale tylko jeden typu master, zarządzający zadaniami podległych mu slave’ów. Oprócz możliwości PVR, mamy do dyspozycji wtyczki pozwalające na odtwarzanie video, zdjęć,
muzyki, wyświetlanie pogody czy zwiastunów. Istnieją także moduły
do emulowania gier ze starych konsol a także moduł MythFlix, służący do zarządzania kontem w sieciowej wypożyczalni NetFlix (USA).
Ostatnimi czasy projekt jest wolno rozwijany, bo większość pracy
deweloperów skupia się na portowaniu projektu do biblioteki Qt4. MythTV w pełni działa wyłącznie pod Linuksem, a odtwarzanie mediów
innych niż telewizja, DVD czy muzyka odbywa się za pośrednictwem
zewnętrznego programu, tj. MPlayer czy Xine.
O pingwinie w domowym kinie
13
Najbardziej interesujący dziś projekt w branży prowadzi firma
Fluendo. Jest nim Elisa Media Center. Można w nim znaleźć właściwie wszystko, czego od takiego projektu można wymagać. Projekt rozwija się szybko i ma ma ciekawy, nowoczesny design. Póki co brakuje
mu niestety oficjalnego wsparcia dla telewizji i DVD, choć to ostatnie
powinno się pojawić wkrótce.
W podstawowej wersji program umożliwia dostęp do filmów
z YouTube, zdjęć z Flickr i stacji radiowych Shoutcast. W ciągu paru tygodni będzie gotowe wsparcie dla Jamendo. Na razie pozwala
on słuchać muzykę online i ściągać ją za pośrednictwem BitTorrenta. Elisa od początku budowana jest tak, by jak najbardziej ułatwić
tworzenie wtyczek. Automatyczna i prosta ich aktualizacja możliwa
jest dzięki modułowi setuptools dostępnemu na poziomie języka Python, w którym napisana jest Elisa. Podstawowy interfejs użytkownika opiera się o projekt Pigment, również autorstwa Fluendo, który
dokonuje abstrakcji funkcji OpenGL, umożliwiając łatwe tworzenie
wydajnych, animowanych interfejsów użytkownika – również na platformach mobilnych. Część multimedialna opiera się o pakiet filtrów
GStreamer, co znacznie pomogło w rozwoju wieloplatformowym. Elisa pracuje pod Linuksem, Windowsem a w niedalekiej przyszłości ma
działać również na MacOS X.
Kolejnym projektem jest Freevo. Oferuje on właściwie wszystko to, co MythTV, i działa podobnie – w oparciu o MPlayer lub Xine. Posiada możliwość współpracy z systemami automatyki budynkowej. Ostatnio większość prac zespołu developerów ukierunkowana
jest na rozwój wersji Freevo 2 – opartej o autorską platformę multimediów – Kaa.
GeeXBox to maleńka, kompletna dystrybucja Linuksa, bazująca
na programie MPlayer, którą można uruchomić bezpośrednio z płyty
CD czy innego nośnika jak np. pendrive. Nic nie stoi na przeszkodzie
by dodać ją np. do płyty z filmem, dzięki czemu komputer, na którym
zechcemy go odtworzyć, nie będzie potrzebował nawet dysku twardego. GeeXBox odtwarza wszystkie popularne formaty video, muzykę,
14
Michał Sawicz
telewizję i shoutcasty. Rozwój projektu niestety ostatnio się zatrzymał – ostatnia aktualizacja na stronie pochodzi z lipca 2007 roku.
Nie tak dawno pojawiła się informacja o pracach nad GeeXBox 2.0,
który ma działać w oparciu o Freevo 2. Być może stąd wynika zastój.
Uzupełnieniem wszystkich wyżej wymienionych pakietów jest dodawany do dystrybucji Linuksa system dźwięku PulseAudio. Pozwala
on na przenoszenie strumieni dźwięku w czasie rzeczywistym, poza
obręb pojedynczego komputera i do różnych kart dźwiękowych. Używając zwykłego odtwarzacza na lokalnym komputerze można przełączyć przesyłanie muzyki i sprawić, by – zamiast do lokalnych głośników – muzyka była kierowana do innego komputera, czyli na przykład do HTPC a przez niego do wzmacniacza i dobrej klasy głośników.
PulseAudio – o czym warto pamiętać – działa również w środowisku
Windows.
∗ ∗ ∗
Telewizor już dawno powinien nam przestać służyć jako okno
na świat, którego obrazem rządzą wyłącznie nadawcy. Dodanie do niego komputera pozwala znacznie lepiej wykorzystać drzemiące w nim
możliwości. Podstawowy problem nadal stanowi obawa operatorów
i nadawców, że z nich zrezygnujemy. Stosują zniewalające i blokujące
rozwój techniki typu DRM (Digital Rights Management) przez co do tej
pory nie ma możliwości legalnego odtworzenia płyty BluRay w Linuksie albo innym Wolnym Oprogramowaniu. Nie da się także skorzystać
z usług VoD. Coraz więcej dostawców przekonuje się na szczęście,
że zamykanie muzyki i video wbrew pozorom zmniejsza ich dochody.
Otwarcie wydaje się więc tylko kwestią czasu. Pozostaje mieć nadzieję,
że również wydawcy płyt dojdą do podobnych wniosków.
A oto serwisy związane z przedstawioną tematyką. Warto na nie
zajrzeć, by dowiedzieć się czegoś więcej:
http://jamendo.com/
http://mythtv.org/
http://elisa.fluendo.com/
http://geexbox.org/
http://freevo.org/
http://pulseaudio.org/
Wirtualizacja – ale po co?
Michał Sawicz
Teoria
Co to jest wirtualizacja?
Emulator to program komputerowy, który duplikuje funkcje jednego systemu informatycznego w innym. Programujemy zestaw funkcji
jakiegoś programu, przejmując wszystkie odwołania od uruchamianego oprogramowania i wykonując je na poziomie aplikacji. W zależności od zastosowania, emulujemy tylko wybrane funkcje – tak jak
WINE implementuje WinAPI. Mamy wtedy do czynienia z emulacją
API, jeśli zaś emulujemy wszystkie podstawowe zasoby systemu, tj.
procesor, pamięć itp., mówimy o emulacji pełnej. Zaletą emulacji jest
łatwa przenośność kodu. Podstawową wadą – wysoka specjalizacja
lub niska wydajność.
Wikipedia mówi: Wirtualizacja jest szerokim pojęciem odnoszącym się do abstrakcji zasobów w różnych aspektach komputeryzacji.
16
Michał Sawicz
Z tego nic nie wiadomo. Wirtualizacja jest połączeniem podstawowych
zalet emulacji pełnej oraz emulacji API. Tu już cieplej. . .
Co istotne, wirtualizacja polega na wykonywaniu jak największej
liczby operacji bezpośrednio na zasobach sprzętowych, nie emulowanych. Dopiero kiedy jakiejś operacji nie da się, na przykład z powodów
bezpieczeństwa, wykonać na sprzęcie, platforma wirtualizacji przejmuje takie odwołanie i emuluje je bądź przetwarza na takie, które
można już wykonać na zasobach rzeczywistych.
Hypervisor (monitor maszyn wirtualnych) to proces, który zarządza tworzeniem, uruchamianiem i zatrzymywaniem wirtualnych maszyn, a także nadzoruje wszystkie wykonywane przez systemy gościa
operacje, przechwytując takie, których nie da się w danej konfiguracji
wykonać na sprzęcie.
Istnieje co najmniej kilkanaście odmian wirtualizacji, z których
opiszę kilka najpopularniejszych.
Parawirtualizacja to technika polegająca na udostępnieniu uruchamianej maszynie wirtualnej podobnego, lecz nie identycznego, zestawu instrukcji, jaki byłby dostępny na platformie sprzętowej. Pozwala to na osiągnięcie wydajności zbliżonej do osiąganej bez wirtualizacji, wymaga jednak uruchomienia systemu operacyjnego zmodyfikowanego tak, by korzystał właśnie z tych instrukcji. Z oczywistych
przyczyn, bez zaangażowania producenta systemu, w ten sposób da
się uruchomić jedynie otwarte systemy operacyjne, bo te łatwo, zgodnie z licencją, adaptować do wykorzystania w maszynie wirtualnej.
Parawirtualizacja pozwala na bardzo łatwe przenoszenie maszyn wirtualnych z jednego sprzętu na inny, bo system wirtualizowany nie
odwołuje się bezpośrednio do sprzętu, tylko do jego abstrakcji, dostarczanej przez hypervisora. Swego czasu grupa zapaleńców z Cambridge University zmodyfikowała system Windows XP tak, by działał
w środowisku parawirtualizacji. Licencja nie pozwoliła jednak na opublikowanie (a więc i wykorzystanie) efektów ich pracy.
System uruchamiany w środowisku pełnej wirtualizacji „nie ma
pojęcia”, że nie działa na rzeczywistym sprzęcie. Monitor maszyn
Wirtualizacja – ale po co?
17
wirtualnych implementuje wszystkie funkcje, jakie byłyby dostępne w środowisku niewirtualizowanym. Pozwala to na uruchamianie
niemodyfikowanych systemów operacyjnych i wykorzystanie wszystkich ich możliwości. Technika ta wymaga, by architektura systemu,
na którym jest uruchamiana platforma wirtualizacji, spełniała kryteria Popka-Goldberga, czyli:
odpowiedniość – program działający w środowisku maszyny wirtualnej musi zachowywać się w dokładnie tak samo jak na rzeczywistym sprzęcie,
kontrola zasobów – monitor maszyn wirtualnych musi w pełni
kontrolować wszystkie wirtualizowane zasoby,
wydajność – większa część instrukcji musi być wykonywana bez
udziału maszyny wirtualnej.
Instrukcje wykonywane przez system operacyjny podzielili oni na:
uprzywilejowane – których efektem jest przerwanie w trybie użytkownika lub jego brak w trybie jądra,
wrażliwe ze względu na kontrolę – próbujące zmienić konfigurację zasobów systemowych,
wrażliwe ze względu na zachowanie – których działanie jest zależne od konfiguracji systemu.
Popek i Goldberg zdefiniowali następujące twierdzenie:
„Dla każdego standardowego komputera trzeciej generacji wirtualna maszyna może zostać skonstruowana, jeśli zbiór instrukcji wrażliwych jest podzbiorem zbioru instrukcji uprzywilejowanych.”
Wynika z tego, że każda operacja, która mogłaby spowodować błędne
działanie aplikacji, wywołuje przerwanie, dzięki któremu hypervisor
może podjąć odpowiednie kroki – to zapewnia nam odpowiedniość
i kontrolę zasobów. Reszta wywołań jest przekazywana bezpośrednio
18
Michał Sawicz
do sprzętu, co zapewnia nam ostatnie kryterium – wydajność. Pełna wirtualizacja nie była dostępna w architekturze x86, dopóki nie
zaimplementowano rozszerzeń, które spełniły powyższe wymagania.
Nie było można przede wszystkim przechwytywać niektórych uprzywilejowanych instrukcji. Co ciekawe, platformy wirtualizacji od dawna informowały o dostępności pełnej wirtualizacji na tej architekturze. Faktycznie odbywało się to kosztem wydajności, bo uruchamiane
oprogramowanie lub jego odwołania musiały być modyfikowane podczas pracy systemu tak, by nie „wydostały się” z wirtualnej maszyny.
Pełna wirtualizacja bardzo ogranicza przenośność maszyn, gdyż
w czystej postaci maszyna wirtualna dostarcza identyczny zestaw instrukcji i sprzętu, co maszyna rzeczywista na której jest uruchomiona. Przeniesienie na inny sprzęt wymaga więc dostosowania do niego chociażby sterowników zainstalowanych w wirtualizowanym systemie.
Wirtualizacja wspomagana sprzętowo jest rozszerzeniem pełnej
wirtualizacji o wykorzystanie specjalnych instrukcji dostarczanych
przez sprzęt, głównie procesora gospodarza. Bywa nazywana akcelerowaną albo sprzętową maszyną wirtualną. Pozwala na przechwytywanie wrażliwych operacji i ich emulowanie, jednak tym razem w warstwie sprzętowej, a nie aplikacji. Co prawda zwiększa to wydajność
takiej maszyny wirtualnej, jednak wciąż ustępuje parawirtualizacji –
wciąż jest bardzo wiele instrukcji, które muszą zostać przechwycone
i emulowane.
Wirtualizacja hybrydowa to połączenie dwóch podstawowych
technik – pełnej i para-wirtualizacji. Polega oczywiście na wykorzystaniu ich największych zalet w celu osiągnięcia jak najlepszych wyników. Stosuje się parawirtualizowane sterowniki – nie modyfikuje się
samego systemu operacyjnego, ale instaluje się odpowiednio zmodyfikowane sterowniki korzystające z odwołań dostępnych w parawirtualizacji, co znacznie ogranicza ilość odwołań, które muszą zostać
przechwycone i zmodyfikowane.
Jak można się domyślić, następny sposób – częściowa wirtualizacja – ogranicza zarówno wymagania jak i możliwości maszyny
Wirtualizacja – ale po co?
19
wirtualnej. Implementuje tylko część instrukcji pełnej maszyny, przez
co uruchomić można tylko niektóre aplikacje: te, które nie korzystają z niewspieranych instrukcji. Problem powstaje, gdy uruchamiana
aplikacja rozwija się, bo trzeba wtedy rozbudować samą platformę
wirtualizacji. Często niełatwo jest jednoznacznie określić, z jakich zasobów dana aplikacja korzysta. Jeśli któraś z wymaganych instrukcji
nie zostanie zaimplementowana, usługa przestanie działać.
W wirtualizacji na poziomie systemu operacyjnego jądro systemu
operacyjnego pozwala, by działało kilka, a nie tylko jedna, izolowana
instancja przestrzeni użytkownika. Takie przestrzenie dla ich właściciela nie różnią się niczym od uruchomionej pojedynczo, w osobnym
systemie. Podejście to redukuje do minimum narzut wydajności, bo
uruchomione jest tylko jedno jądro. Nie istnieje problem emulacji czy
przechwytywania instrukcji, co jednak ogranicza elastyczność. W takim środowisku uruchomić możemy jedynie aplikacje przeznaczone
dla tej samej architektury i systemu, co system gospodarza. Nie da
się np. uruchomić innego jądra czy systemu Windows w środowisku
linuksowym.
Gdy korzystamy z wirtualizacji aplikacji, abstrakcji ulega część
lub całość odwołań danej aplikacji do zasobów systemowych. Pozwala ona na zamknięcie aplikacji w danym obszarze, przekierowując jej
odwołania. Dzięki temu równolegle mogą być uruchomione np. różne
wersje tej samej aplikacji lub różne aplikacje, które w zwykłym środowisku kolidowałyby ze sobą. Wirtualna aplikacja oczywiście „nie wie”,
że jest uruchomiona w wirtualnym środowisku. Przekierować można
np. tylko odwołania do danego pliku (wtedy mówimy o częściowej wirtualizacji); pełna zaś wymaga stworzenia warstwy wirtualizacji, przez
którą biec będą wszystkie instrukcje z aplikacji.
Ale – po co?
Jedną z podstawowych zalet uruchamiania usług w wirtualizowanym
środowisku jest bezpieczeństwo. Każda z usług może być uruchomiona w izolowanym systemie, komunikując się z innymi wyłącznie z wy-
20
Michał Sawicz
korzystaniem sieci. Ewentualny atak nie będzie miał wpływu na procesy funkcjonujące na tej samej maszynie fizycznej, ale innej – wirtualnej.
Bardzo łatwo jest uruchomić daną usługę na dwóch wirtualnych
maszynach, zapewniając nadmiarowość nawet w ramach jednego fizycznego komputera tak, by w razie awarii jednej z nich, druga przejęła jej zadania. Uruchomienie „kopii” zestawu maszyn wirtualnych
na osobnej (lub kilku) fizycznej maszynie umożliwia korzystanie zarówno z bezpieczeństwa oferowanego przez izolację usług jak i z ciągłości dostępności wszystkich usług.
Konsolidacja zasobów znacznie zmniejsza koszty zarówno wdrożenia jak i utrzymania wielu izolowanych środowisk. Kupno jednej
wydajnej maszyny, potrafiącej w ramach wirtualnych serwerów udostępnić wszystkie potrzebne usługi, zwykle znacznie mniej obciąża
budżet firmy, niż kupno osobnej fizycznej maszyny dla każdej aplikacji. Utrzymanie – w tym choćby zużycie prądu – ma tu niebagatelne znaczenie. Koszty zarządzania taką instalacją są niższe, bo administrator nie musi się fatygować do serwerowni by dostawić nową
maszynę i uruchomić dodatkową usługę. Często tylko w ten sposób
można w pełni wykorzystać zasoby: nie trzeba każdej z maszyn posadawiać na osobnym sprzęcie, by zapewnić wystarczającą wydajność
w godzinach szczytu. W czasie niższego obciążenia inna aplikacja może z powodzeniem wykorzystać wolne zasoby. W sumie wymagana jest
więc np. mniejsza wydajność procesora, gdyż będzie on wykorzystywany znacznie efektywniej.
Drugim, związanym pośrednio z kosztami, a równie ważnym
aspektem, jest elastyczność. Znacznie prościej i szybciej jest uruchomić nową aplikację w systemie wirtualizowanym – choćby tylko do testów, niż w każdym przypadku instalować nowy sprzęt po to tylko,
by się okazało, że nam ona nie odpowiada, a sprzęt się nie przyda.
Można rzecz jasna aplikację zainstalować na istniejącym systemie fizycznym, ale jeśli nie znamy dobrze jej zachowania (co jest normalne
w środowisku testowym), ryzykujemy przerwy w działaniu istniejącej,
Wirtualizacja – ale po co?
21
prawdopodobnie ważnej dla pracowników, usługi. Kolejnym utrudnieniem może być polityka bezpieczeństwa firmy, nie dopuszczająca
często uruchamiania żadnej nowej aplikacji na tej samej maszynie.
Kiedy mamy do dyspozycji kilka maszyn fizycznych, przenoszenie między nimi usług tak, by równomiernie rozłożyć obciążenie, może
stanowić poważny problem, zwłaszcza gdy okaże się, że jedna z aplikacji nagle znacznie zwiększyła wykorzystanie zasobów i dany serwer
zaczyna mieć problemy z wydajnością. Większość platform wirtualizacji pozwala na przenoszenie maszyn wirtualnych pomiędzy instalacjami fizycznymi, często wręcz „na gorąco”. Podczas takiej migracji
dany system zatrzymywany jest na ułamek sekundy, nie przerywając
pracy żadnej z aplikacji. W ten sposób możemy bezpiecznie migrować
daną usługę np. na nową lub mniej wykorzystaną maszynę fizyczną,
nie zatrzymując żadnych istotnych usług.
Last, but not least. W każdej niemal firmie wdrożenie rozwiązania wiąże się z przygotowaniem środowiska testowego, dopasowaniem
aplikacji do wymagań firmy, solidnym przetestowaniem, wdrożeniem
testowym, itd. Takich etapów może być całkiem sporo. Osoby odpowiedzialne za wdrożenie mogą chcieć uruchomić dwie, uzupełniające
się instalacje i sprawdzić, czy wszystko zachowuje się jak należy.
Wyobraźmy sobie następującą sytuację: stawiamy dwie maszyny, na których będzie przeprowadzana instalacja, na kolejnych kilku
instalujemy systemy końcowego użytkownika. Pół biedy, jeśli te maszyny mają być docelowymi, na których dana aplikacja ma pracować.
Jeśli nie, czeka nas jeszcze instalacja na docelowym sprzęcie. Czy
można to zrobić lepiej? Tak, ponieważ wirtualizacja pozwala na stworzenie takiego środowiska w ramach jednej fizycznej maszyny.
Jeśli gdzieś po drodze popełniliśmy błąd krytyczny, instalację
można wyrzucić i wszystko zacząć od nowa. Nie jest to przyjemne,
zwłaszcza, gdy terminy gonią. Większość oprogramowania do wirtualizacji pozwala na szczęście na tworzenie zrzutów (ang. snapshot)
w dowolnym momencie pracy systemu. Powrót do zapamiętanego stanu wymaga zaledwie kilku kliknięć lub wydania kilku poleceń konso-
22
Michał Sawicz
li. Efektem będzie uruchomiony system (nie tylko to, co zostało zapisane na dysku, także kompletny zrzut pamięci wirtualnej maszyny).
Istnieje kilka możliwości połączenia maszyn wirtualnych siecią.
Domyślnie wykorzystuje się mechanizm NAT – interfejs maszyny wirtualnej znajduje się wtedy w osobnej podsieci, mając kontakt z siecią
zewnętrzną poprzez interfejs gospodarza. Bez odpowiedniej konfiguracji do maszyny wirtualnej nie ma dostępu nikt z zewnątrz. Innym –
i bodaj najprostszym rozwiązaniem wydaje się most, który naszą sieć
wirtualną łączy z rzeczywistą siecią LAN. Maszynie wirtualnej przypisujemy adres IP z podsieci wykorzystywanej w naszym segmencie,
udostępniając wszystkie usługi użytkownikom fizycznej sieci – także aplikacjom uruchomionym na komputerze gospodarza. Nie byłoby
możliwe przy wykorzystaniu mechanizmu NAT. Dla środowisk testowych najlepszym wydaje się wykorzystanie wyłącznie sieci wirtualnej.
W tej sytuacji połączyć mogą się jedynie uruchomione maszyny wirtualne, niedostępna jest dla nich nawet sieć gospodarza. Dzięki temu
możemy tam wykorzystać nawet adresy IP wykorzystane w naszej rzeczywistej sieci, symulując jak najdokładniej środowisko docelowe.
Kiedy piszemy jakąś aplikację, zwykle zależy nam na tym, by
aplikację dało się uruchomić na jak największej ilości systemów operacyjnych. Kod HTML inaczej wyświetla się uruchomiony w przeglądarce linuksowej, inaczej w Windowsie, nawet jeśli na obydwu pracuje
Firefox. Gdy przełączanie się między systemami czy posiadanie kilku
komputerów z różnymi systemami nie wchodzi w rachubę, z pomocą
przychodzą właśnie maszyny wirtualne.
Wirtualizacja przychodzi z pomocą również w trywialnych sytuacjach. Jeśli mamy problem z plikiem, który nie otwiera się w żadnej
linuksowej aplikacji, a WINE akurat odmówił współpracy, wirtualna
maszyna wydaje się być optymalnym rozwiązaniem. Zapisujemy plik
w formacie, który Linux nam już przełknie. No tak, ale co dalej? Nagrać go na płytkę? Przenieść pendrivem? Na szczęście jest NTFS-3g.
Ale jeśli skorzystamy z wirtualnej maszyny, plik możemy zapisać we
współdzielonym folderze na dysku gospodarza.
Wirtualizacja – ale po co?
23
Na pograniczu teorii i praktyki
Są dwie podstawowe techniki radzenia sobie z wdrożeniem wirtualizacji na architekturze x86:
Translacja binarna – polega na wychwytywaniu w odwołaniach instrukcji, które nie mogą zostać wykonane na sprzęcie i tłumaczenie ich na takie, które przetworzy hypervisor,
Dynamiczna rekompilacja jest w zasadzie rozszerzeniem translacji binarnej, jednak polega na rekompilacji części wykonywanego
kodu tak, by udało się go wykonać w danym środowisku.
Zwykle efekty pracy obu tych technik są cache’owane, bo sama translacja czy rekompilacja jest wydajnościowo kosztowna. Po rekompilacji
stosuje się patchowanie oryginalnego kodu, by rekompilacja była potrzebna tylko przy pierwszym uruchomieniu.
W latach 2005-2006 dwaj główni gracze rynku procesorów – najpierw Intel, potem AMD – zaimplementowali w swoich procesorach
rozszerzenia, które pozwalały na wirtualizację wspomaganą sprzętowo. Obie implementacje są różne, jednak większość rozwiązań pozwala korzystać z rozszerzeń w obu typach procesorów. Intel VT dostępny
jest w większości procesorów produkowanych po 2005 roku. AMD-V
(zwana także Pacifica) zaimplementowano w części procesorów Athlon
64, Turion 64 X2, Opteron i Phenom, a także we wszystkich nowszych.
Większość usług typu VPS (Virtual Private Server) bazuje właśnie na tej technice wirtualizacji, stąd zwykle mamy wybór tylko kilku
systemów/dystrybucji. Pozwala ona usługodawcy zredukować narzuty wydajnościowe, jakie występują w innych technikach wirtualizacji.
Zapewnia przy tym stosunkowo dużą elastyczność w udostępnianiu
zasobów.
24
Michał Sawicz
Praktyka
Xen
Xen jest hypervisorem wykorzystującym głównie technikę parawirtualizacji. Pozwala na wirtualizowanie zmodyfikowanych systemów typu UNIX, Linux lub innych, niemodyfikowanych, korzystając z rozszerzeń wspomaganych sprzętowo. Wymaga uruchomienia specjalnej
wersji jądra na systemie hosta. Gość musi działać na tej samej architekturze co system gospodarza. Xen jest publikowany na licencji
GPL, rozwijany początkowo przez firmę XenSource, przekazany potem
instytucji Xen AB, której członkami są teraz takie firmy jak Novell,
Red Hat czy Sun. Ostatnio Microsoft ogłosił, że opublikuje sterowniki pozwalające na uruchomienie systemów MS (np. Windows Server)
w środowisku Xen z dużą wydajnością – korzystając z wirtualizacji hybrydowej. Podobny zestaw sterowników oferuje Novell w wydaniach
SUSE Linux Enterprise. W Xen gospodarz pracuje w obszarze tzw.
domeny 0, systemy gościa w obszarze domeny U. Istnieje kilka rozwiązań pozwalających na zarządzanie środowiskiem wirtualizowanym
przy pomocy Xen, np. aplikacja webowa Enomalism. Część kodu Xen
(przede wszystkim menedżer urządzeń) bazuje na kodzie QEMU. Dostępna jest migracja systemu na żywo, w której rzeczywista przerwa
w działaniu systemu wynosi 60-300ms.
VirtualBox
VirtualBox korzysta przede wszystkim z techniki wirtualizacji pełnej.
Pozwala na uruchomienie systemu gościa wyłącznie w 32-bitowej architekturze x86. Działa na platformie fizycznej x86 (także 64-bitowej)
w systemach Windows, Linux i MacOS X. Pierwotnie rozwijany był
przez firmę InnoTek, w 2007 roku większość kodu programu została
otwarta. W lutym 2008 Sun przejął firmę wraz z prawami do oprogramowania. Dziś system nazywa się Sun xVM VirtualBox. Platforma ta
Wirtualizacja – ale po co?
25
do pełnej wirtualizacji wykorzystuje mechanizm dynamicznej rekompilacji, bazowanej na QEMU. Część kodu aplikacji jest patchowana.
Wersja otwarta (OSE – Open Source Edition) jest dostępna do wszelkich zastosowań, pozbawiona jest jednak kilku istotnych możliwości.
Wersję komercyjną Sun udostępnia za darmo do użytku prywatnego,
edukacyjnego oraz ewaluacji. VB oferuje takie opcje jak łatwe współdzielenie folderów z systemem gospodarza, efektywne zrzuty systemu
gościa, tryb zintegrowany – pozwalający na wyświetlanie okien systemu gościa na pulpicie gospodarza. W wersji zamkniętej dostępne
jest wsparcie dla USB 2.0, które w przyszłości ma zostać udostępnione także w wersji otwartej. W wersji zamkniętej znajdziemy także
wsparcie dla sieciowych dysków iSCSI oraz wbudowany serwer RDP
(Remote Desktop – zdalny pulpit), ze zdalnym udostępnianiem urządzeń USB przez protokół RDP (USB-over-RDP). W planach jest dodanie obsługi 64-bitowych systemów gościa, migracja maszyn „na żywo”,
wirtualizacja akceleracji 3D oraz współpraca z formatami dysków wirtualnych z VMWare czy MS Virtual PC.
QEMU
Podstawową zaletą QEMU jest możliwość emulacji wielu architektur
sprzętowych takich jak MIPS, SPARC, ARM, RISC i inne. Nie ma jednak róży bez kolców: wszystko to kosztem wydajności, która wynosi
zaledwie 10–20% wydajności gospodarza. Różne części QEMU są publikowane na różnych licencjach – GPL, LGPL czy FreeBSD, ze względu na zawarte elementy kodu uniemożliwiające ujednolicenie licencji.
QEMU można uruchomić w trybie użytkownika, uruchamiając jedną tylko aplikację, bądź w trybie systemu, pozwalając na wirtualizację
całego systemu operacyjnego. Dla architektury x86 dostępny jest moduł KQEMU, zwiększający wydajność pięciokrotnie. Wykorzystuje on
mechanizm dynamicznej rekompilacji, niestety w tej chwili nie potrafi
korzystać ze sprzętowej akceleracji IVT czy AMD-V, wspiera za to SMP.
Sterowniki hosta nie są dostępne dla systemów gościa, co skutecznie
spowalnia korzystanie z urządzeń typu karta dźwiękowa czy video.
26
Michał Sawicz
VMWare
VMWare jest jednym z pierwszych graczy na rynku wirtualizacji.
Oprogramowanie jest w całości komercyjne. Wykorzystuje głównie
technikę wirtualizacji pełnej przy pomocy translacji binarnej. Najbardziej zaawansowany produkt – ESX Server to kompletny system
gospodarza, który bazuje na dystrybucji Red Hat. Instaluje się go
bezpośrednio na sprzęcie (zgodnym z x86). Odpowiednikiem dla systemu MacOS X jest tu VMWare Fusion. VMWare Server to wydanie
darmowe dla systemów Linux i Windows. Workstation to komercyjna
wersja przeznaczona do instalacji w systemach jak VMWare Server.
Jest jeszcze Player, czyli „odtwarzacz” maszyn stworzonych przy pomocy jednego z innych produktów. Jako produkt komercyjny oferuje
największą gamę możliwości.
To też wirtualizacja
Wszyscy korzystamy z jakiejś formy wirtualizacji – ot choćby Swap,
który jest niczym innym, jak pamięcią wirtualną na dysku. Jest to
jedno z pierwszych powszechnych zastosowań technik wirtualizacji.
Wirtualizacją są wszelkie form. Wirtualne – choć na co dzień nie zdajemy sobie z tego sprawy – są nawet Flash Player i Java. Nie bez powodu wszędzie mówi się o maszynach wirtualnych. Wystarczy jedynie
zdefiniować, na jakim poziomie się ona odbywa.
Uruchomienie nowej maszyny wirtualnej w VirtualBoksie jest
trywialne. Wydajność takiej instalacji pozwala w większości przypadków zrezygnować z podejścia dual-boot. Z VMWare’m jest podobnie.
Wbrew pozorom, Xen też nie wymaga jakiegoś wielkiego zaangażowania.
Do przygotowania prelekcji wykorzystałem informacje dostępne
w polskiej i angielskiej Wikipedii.
Linux w urzędzie
Krzysztof Witański
Według powszechnej opinii Linux, choć bezpłatny, jest systemem
trudnym w użyciu i niechętnie używanym w poważnych zastosowaniach w firmach i urzędach. Na przykładzie projektu SEKAP chciałbym pokazać, że pogląd ten jest całkowicie błędny.
Ogólne przedstawienie projektu
W SEKAPie, czyli Systemie Elektronicznej Komunikacji Administracji
Publicznej uczestniczą 54 urzędy Województwa Śląskiego i centrala
wraz z platformą e-usług. Celem projektu jest przesyłanie dokumentów do i z urzędu w postaci elektronicznej poprzez specjalny serwis
internetowy, zwany e-urzędem. Centrala połączona jest z urzędami
poprzez kanały VPN utworzone przy pomocy routerów Cisco. W urzędach znajdują się serwery obiegu dokumentów (SOD) i serwery pomocnicze – służące do komunikacji.
Strona główna platformy publicznych e-usług zawiera skrzynki
kontaktowe petentów, wzory formularzy i pisma. Skrzynka kontaktowa jest odpowiednikiem okienka w urzędzie, gdzie możemy złożyć
28
Krzysztof Witański
pismo, uzyskać potwierdzenie złożenia oraz odebrać odpowiedź urzędu. Platforma umożliwia przesyłanie pomiędzy obywatelem a urzędem
informacji, wprowadzanych za pomocą elektronicznego formularza,
w postaci uporządkowanych danych.
System powstał w oparciu o zamówienie publiczne, gdzie określone zostają tylko istotne warunki zlecenia (SIWZ), nie jest natomiast
sprecyzowany system operacyjny, ani rodzaj użytej technologii. Wybrano rozwiązanie, w którym podstawowym systemem operacyjnym
jest Linux. Wybór nie był podyktowany ceną, bo tę ustalono wcześniej,
a jedynie jakością rozwiązania. Aplikacje w urzędzie (SOD) i platforma w centrali są programami przeglądarkowymi. Projekt zrealizowano w krótkim czasie – od momentu podpisania umowy do oficjalnego
otwarcia minął zaledwie rok. Wykonawca przedstawił szczegóły projektu, z uwzględnieniem systemów operacyjnych i rozwiązań technicznych.
Sprzęt
W urzędach zainstalowany jest główny serwer obiegu dokumentów
(SOD) oraz komputer komunikacyjny. Obydwa pracują pod Linuksem. Firma wykonująca projekt użyła jako głównego systemu operacyjny Linuxa Fedora Core. Serwery firmowe z dyskami SCSI wyposażono w streamer – najczęściej LTO2 lub LTO3. Sprzęt ten jest
najlepszym serwerem w niektórych, zwłaszcza mniejszych urzędach.
Komputer komunikacyjny (KK) ma słabsze parametry, pełni bowiem
jedynie rolę pomocniczą. Dzięki rozdzieleniu ról serwerów SOD i KK,
do platformy można podłączać inne systemy obiegu dokumentów –
tak stało się w pięciu większych urzędach, które posiadają własny
obieg dokumentów, m.in. w Rybniku.
Oprogramowanie
Jako serwer WWW zaimplementowano Jboss, środowiskiem bazodanowym jest PostgreSQL. Bazy wykorzystuje się do gromadzenia rów-
Linux w urzędzie
29
nież danych binarnych w postaci blobów. Najczęściej są to zeskanowane obrazy, co powoduje, że zbiory mają spore rozmiary, czasami po
kilkanaście GB. Sam SOD posiada rozbudowaną strukturę, składającą się z 300 tabel.
Z taką ilością danych Postgres radzi sobie znakomicie. KK transportuje dane, czyli pełni rolę bufora pomiędzy platformą e-usług centrali a lokalnym SOD. Zawiera oprogramowanie takie samo jak SOD –
Jboss i bazę PostgreSQL. Komunikację oparto na technologii webservices, dane transportowane są w postaci struktury XML.
Sprzęt i oprogramowanie w centrali
Celem centrali jest utrzymanie głównego serwera WWW z platformą
e-usług na wysokim poziomie dostępności. Z tego powodu występują
tu elementy redundantne, a sprzęt jest z „górnej półki”. Zastosowano
np. serwery rackowe zawierające dyski SCSI typu SAS, czy procesory
Xeon 2 lub 4 rdzeniowe. Na nich jest zainstalowany 64-bitowy Linux.
Co ważne, mimo zaawansowania sprzętu instalacja Linuksa odbyła
się bezproblemowo, poszczególne składniki zostały poprawnie wykryte.
W tej chwili centrala posiada w sumie 15 takich serwerów, z czego 10 działa na Fedora Core a 5 na Red Hat Enterpice Server 5.
Linux obsługuje zaawansowane rozwiązania techniczne. Ze względu
na zapewnienie wysokiej niezawodności systemu, zostały uruchomione klastry. Najbardziej zaawansowany to Red Hat Cluster, a na nim
usługa bazodanowa PostgreSQL. Jest to klaster niezawodnościowy:
usługa bazy danych działa tylko na jednym serwerze i może być przełączona na drugi.
Obydwa serwery mają zamontowany wspólny zasób dyskowy
na macierzy. Jest to zewnętrzna macierz HP, do której podłączenie jest
poprzez redundantne złącze Fibre Channel. Na macierzy jest utworzony system plików GFS, mogący pracować z dwoma serwerami montującymi ten sam udział do zapisu. Usługa klastrowania wykorzystuje
30
Krzysztof Witański
do zarządzania serwerami specjalny interfejs webowy iLO, dzięki któremu serwery mogą się nawzajem wyłączać lub włączać. Przeciwdziała on m.in. uruchamianiu usługi PostgreSQL na dwóch serwerach
jednocześnie. Oprócz zaawansowanego klastra, istnieje również wydajnościowy, oparty na Jboss. Aby spełnić wymogi niezawodnościowe, switche są zdublowane, a serwery mają do nich podwójne połączenie. Linux obsługuje taką konfigurację za pomocą boundingu –
tworząc z dwóch interfejsów sieciowych (eth0, eth1) jeden wirtualny –
bound0, realizujący całość komunikacji. Uszkodzenie jednej drogi powoduje automatyczne przekierowanie ruchu do zapasowego kanału.
Klastrowanie, bounding i inne usługi towarzyszące zapewniają wysoką odporność na awarie.
Backup
Poprzez karty Fibre Channel serwery połączone są z macierzą i biblioteką taśmową. Udział zadeklarowany na macierzy widziany jest
jako dysk SCSI. Ze względu na szybki interfejs i wiele dysków pracujących równolegle, macierz ma wysoką wydajność. Rozwiązanie to
niestety kosztuje: płacimy za dedykowane dyski ze złączem FC, switche, licencje. Biblioteka taśmowa widziana jest natomiast jako napęd
taśmowy, usługę kopii zapasowych wywołuje zdalnie serwer backupu.
Kryptografia
Zastosowano kartę HSM (włączoną na stałe, poprzez złącze PCI), przechowującą klucz prywatny. Po podaniu kodu PIN, cyfrowo podpisywany jest podany skrót SHA1. Sprzęt posiada zaawansowane funkcje ochrony klucza prywatnego – wyjęcie karty powoduje skasowanie
kluczy prywatnych. Ze względu na specyfikę i cenę, układ jest rzadko
używany.
Linux w urzędzie
31
Producent dostarcza sterowniki pod Linuksa dedykowane dla
konkretnej wersji kernela. HSM jest zainstalowany w każdym KK i służy do podpisywania danych. Tworzy urzędowe poświadczenie odbioru (UPO), potwierdzające wysłanie danych do urzędu. Jest to rodzaj
elektronicznej pieczątki na składanym piśmie, potwierdzającej wpływ
dokumentu do urzędu.
Obowiązek przyjmowania i potwierdzania pism drogą elektroniczną, został nałożony na urzędy od 1.05.2008 i zostało określone
jak ma być tworzone UPO. Musi się to odbywać za pośrednictwem
sprzętowego modułu (HSM) spełniającego normę FIPS 140-2 level 3.
Układ może pracować w podstawowym trybie, a potem należy przejść
na tryb FIPS, w którym aktywne są odpowiednie zabezpieczenia.
Uwagi, problemy.
Serwer JBoss wymaga dużo pamięci RAM. Program wykorzystuje tylko jeden rdzeń procesora. Serwer baz danych PostgreSQL dzięki
wieloprocesowości, potrafi wykorzystać więcej niż jeden rdzeń procesora. SEKAP udowadnia, że zaawansowany projekt, bazujący na Linuksie i Open Source można technologicznie wdrożyć do produkcji
w krótkim czasie zaledwie jednego roku. Największy problem stanowi
prawo, jego interpretacja oraz niedostosowanie do dokumentów elektronicznych.
W ramach projektu odbyło się wiele szkoleń dla administratorów
z urzędów, dla części z nich było to pierwsze spotkanie z Linuksem.
Integracja Linuksowej
społeczności w Internecie
Borys ‘michuk’ Musielak
Daniel Koć
Opowieść o „uspołecznianiu” LinuxNews, integracji z wortalem
jakilinux.org, powstaniu OSnews.pl i planach na przyszłość, a także
o tym jak i dzięki komu to wszystko się nadal kręci. W skrócie: Grupa
Jakilinux „od kuchni”.
Historia LinuxNews 1999 – 2007
Serwis LinuxNews powstał w 1999 roku. Początkowo znajdował się
pod innym adresem (linux.news.pl), po drodze zdążył także zmienić serwer, a silnik i cały wystrój zmieniały się dobrych kilka razy.
W końcu to nic dziwnego, jeśli istnieje się aż tak długo. Najstarsza
zachowana nowinka to napisany przez gwida – inicjatora i przez długi
czas spiritus movens serwisu – krótki donos o najświeższej wersji
jądra – 2.2.11. . .
Wróble ćwierkają, że wszystko zaczęło się od strony z poradami,
jak uruchomić pod Linuksem kartę telewizyjną, oraz silnika, który
wcale nie miał napędzać strony z nowinkami, tylko bazę programów.
Jak opowiada negativ, jeden z ojców założycieli serwisu: Gwido kupił kartę telewizyjną i namęczył się nad jej uruchomieniem tak,
Integracja Linuksowej społeczności w Internecie
33
że zrobił stronę o video4linux z opisem i instrukcją instalacji
dla potomnych. Okazało się to na tyle użyteczne, że Gwido postanowił pójść dalej w tym kierunku i uruchomić serwis poświęcony Linuksowi. Ja na grupie pl.comp.os.linux znalazłem jego
post dotyczący poszukiwania współpracowników i zgłosiłem się.
Chciałem zrobić tam dział będący skrzyżowaniem Wiki i FAQ
z poradami. Napisałem do tego silnik (jeszcze w niepublicznej
wersji testowej PHP4), a Gwido miał pisać silnik newsowy. Skończyło się na tym, że pomysł FAQ został przesunięty na później
a skrypt, zastał dostosowany do roli prostego CMS.
Pierwszy serwer nazywał się „poligon” i był udostępniony przez
znajomego admina (slz). W miarę, jak wzrósł ruch, trzeba było ubijać
ludziom sesje IRC, żeby mocy starczyło :)
I tak to się zaczęło. Później przez rok LinuxNews działał jako część
nieistniejącego już dziś portalu Ahoj!, który w tym czasie przejmował/brał pod opiekę różne serwisy branżowe, w celu uzyskania treści dla portalu. Ekipa LinuxNews została zatrudniona w Ahoj i miała rozwijać serwis „na pełen etat”. W praktyce wyszło nieco inaczej,
negativ zajął się głównie technologią, Gwido dziennikarstwem, a LinuxNews pozostał nieco na uboczu, ale zachował dużą autonomię.
Zdjęcia z tego okresu można dziś znaleźć w przepastnych archiwach
Internetu – zarówno te jeszcze spod adresu linux.news.pl (http://⇒
⇒ /web.archive.org/web/*/http://linux.news.pl), jak i te późniejsze (aż do dzisiaj), już z obecnego adresu (http://web.archive.org/⇒
⇒ /web/*/linuxnews.pl).
Gdy Ahoj się rozpadł, ekipa LinuxNews na szybko odpaliła serwis
na nowym silniku, napisanym w dwa tygodnie, przy założeniu, że ma
pójść na Dual Celeron, czyli serwerze jakim w tym czasie dysponowała
„stara urtica”. Ruch był większy niż rok wcześniej, kiedy serwis był
integrowany z Ahoj i było pewne, że stary silnik nie podoła. Na nowym
silniku, z drobnymi przeróbkami, LinuxNews działał aż do 2007 roku.
Niemal od samego początku towarzyszyło serwisowi polskie tłumaczenie komiksu UserFriendly, które prowadzili m. in. br i viper,
a także dział Hardware, którym zajmował się xterm. Nie wymieniając
34
Borys ‘michuk’ Musielak, Daniel Koć
całej „listy płac”, trzeba jeszcze koniecznie wspomnieć pkota (autor
między innymi NewsReader, mod_xslt i systemu rejestracji, a kiedyś
także razem z MajaKą stały tłumacz KernelTraffic PL), bassa (niezliczona ilość nowinek!), grega i trocheja (byłe Debian Weekly News
PL), kbryda (autor lnMonitora) czy honeya (obecnie serwis 7thGuard,
a kiedyś między innymi lnRadio). Jednym z najstarszych członków
był paczor, który dosyć nietypowo najpierw zniknął z Teamu, potem
znów się pojawił, by zniknąć zupełnie jakiś czas później. Oczywiście
przez serwis i okolice przewijało się więcej osób, które z góry bardzo
przepraszamy za pominięcie i oczywiście zapraszamy na forum lub
do kontaktu z redakcją!
Niestety ze względu na to, że ojcowie-założyciele LinuxNews zajmują się obecnie zupełnie innymi sprawami niż serwis (koszenie mamony, jeżdżenie na Karaiby, przechodzenie na ciemną stronę mocy,
etc.), nie jesteśmy w stanie odtworzyć bardziej szczegółowo początków serwisu. Wiadomo jedynie, że mniej więcej od 2003 roku główną
siłą napędzającą serwis był (i nadal jest!) niejaki Daniel Koć, znany
również jako kocio.
Historia jakilinux.org 2005 – 2007
Wortal jakilinux.org miał znacznie mniej profesjonalne korzenie.
Wyłonił się praktycznie ze strony domowej michuka, w styczniu
2005 roku. Pierwsza wersja podpięta była pod darmową domenę
jakilinux.prv.pl, a na stronie zobaczyć można było jedynie krótki opis kilku dystrybucji Linuksa oraz quiz pomagający w wyborze
dystrybucji.
Rozbudowa treści statycznej wortalu (narzędzie do interaktywnego porównywania dystrybucji, działy: Instalacja, Pierwsze kroki, czy
Programy) nastąpiła na przełomie 2005 i 2006 roku. Nieco wcześniej
zaczęły pojawiać się na stronie autorskie artykuły (głównie recenzje
nowych wersji dystrybucji Linuksa), autorstwa michuka. W połowie
2005 roku wortal odwiedzało około 500 osób dziennie.
Integracja Linuksowej społeczności w Internecie
35
Wtedy też pojawiły się pierwsze przejawy zaangażowania społeczności w rozwój wortalu, pod postacią kilku autorskich artykułów opublikowanych przez seamana czy puszczyka. Pojawił się też pierwszy
korektor artykułów: pazkooda. A Bober, po wielu miesiącach namawiania, wymyślił dla wortalu logo i design, w wersji zbliżonej do tego
co widzimy dziś. Serwis, stojący do tej pory na zestawie autorskich
skryptów michuka, przeniesiony został na Wordpressa, w celu łatwiejszego zarządzania treścią. W migracji bardzo pomogło kilka osób,
w tym estral. To był październik 2005.
W następnym roku wortal stopniowo się rozrastał. Oprócz artykułów na różne tematy związane z Linuksem (głównie dla początkujących), pojawiać się zaczęły nowinki, głównie te na temat nowych
wydań popularnych dystrybucji czy ważnych programów. Coraz większe było też zaangażowanie społeczności. Do zespołu jakilinux.org dołączył Tomek Zieliński (t_ziel), który całkowicie przepisał wszystkie
opisy dystrybucji, dodał opisy systemów BSD oraz zaktualizował dane w tabeli porównawczej. To był kluczowy moment dla działalności
wortalu, ponieważ jako jednoosobowy projekt nie byłby on w stanie
bardziej się rozwijać.
W 2006 roku powstało też forum jakilinux.org – miejsce do dyskusji na tematy poruszane na łamach wortalu. Rok później Piotr Maliński (riklaunim), przeniósł forum z phpBB na znacznie bardziej elastyczny punBB oraz zintegrował je z Wordpressem poprzez autorski
plugin.
Również w 2006 roku michuk w wakacje przetłumaczył całą treść
statyczną wortalu jakilinux.org na angielski i postawił nowy serwis:
PolishLinux.org (od ”Polish your GNU/Linux”), mający być anglojęzycznym odpowiednikiem jakiegolinuksa.
W połowie 2006 roku jakilinux.org odwiedzało dziennie ok 40
tysięcy osób (140 tysięcy odsłon). Po półtora roku wzrostu, liczba ta
ustatkowała się. Społeczność domagała się jednak zmian. W jednej
z ankiet okazało się, że czytelnicy oczekują jeszcze większej ilości artykułów i nowinek na stronie.
36
Borys ‘michuk’ Musielak, Daniel Koć
Jako że pisanie nowinek jest zajęciem czasochłonnym, pojawił się
pomysł, aby robotę tę oddać społeczności. W ciągu miesiąca michuk
napisał więc plugin do Wordpressa wp-digg, umożliwiający szybkie
dodawanie niusów przez zalogowanych użytkowników oraz głosowanie na niusy, co miało weryfikować, czy nius nadaje się do publikacji. Tak powstał podserwis jakilinux news podzielony na wykopalisko
(tak, to jawna kalka z serwisu wykop.pl, który z tego miejsca pozdrawiamy :P) z dopiero co dodanymi niusami, oraz część główną,
zawierającą niusy, które przeszły społecznościową moderację (otrzymały wystarczającą liczbę głosów na plus).
Podserwis jakilinux-news dał niesamowitego kopa wortalowi. Nagle, nie wiadomo skąd, pojawiły się nowe osoby chcące pisać dla wortalu nie tylko niusy, ale też artykuły. Po kilku miesiącach istnienia
podserwisu, dziennie pojawiało się od kilku do kilkunastu niusów
dodawanych przez społeczność. W lipcu 2007 roku wortal odwiedzało już 200 tysięcy osób dziennie, generując około 600 tysięcy odsłon.
Zmiany, zmiany. . .
W tym samym czasie, LinuxNews przeżywał największy kryzys w historii. Oprócz kocia, nie publikował w serwisie właściwie nikt, przez
co serwis przekształcił się niejako w branżowego bloga Daniela. Bardzo dobrego bloga zresztą, ale jednak tylko bloga.
Jednocześnie na jakilinux-news społeczność zaczęła narzekać
na to, że wprawdzie niusów jest sporo, ale rozbudowanych, ciekawych
nowinek pojawia się jak na lekarstwo – większość treści to dwuzdaniowe wpisy, z linkiem do źródła.
Wtedy też ni stąd ni zowąd kocio zagadał do michuka na Jabberze, proponując spotkanie w sprawie możliwości współpracy obu serwisów. Kilka tygodni później do spotkania rzeczywiście doszło i okazało się ono nadzwyczaj owocne. Podczas rozmowy w kafejce gdzieś
niedaleko metra Racławicka, wypłynęły takie oto wnioski:
Integracja Linuksowej społeczności w Internecie
37
Cel: więcej dobrych niusów, integracja społeczności, eliminacja redundancji (niusy na ten sam temat na obu serwisach)
Metoda: migracja z autorskiego CMS-a LinuxNews na Wordpressa,
zasilającego jakilinux.org, integracja kont użytkowników, niusów
i komentarzy. Serwisy pozostają oddzielne.
Okres przejściowy: niusy na obu serwisach, do czasu aż czytelnicy
przyzwyczają się do zmian.
Koniec okresu przejściowego: pół roku od integracji.
Nie obyło się oczywiście bez problemów. Stary layout LinuxNews nie
pasował do nowego, bardziej społecznościowo nastawionego serwisu.
Powstało więc kilka alternatywnych nowych skórek do Wordpressa,
w tym domyślna, imitująca wygląd starego LN, autorstwa Marcina
Dąbrowskiego (mwd). Sklecany na szybko kod integrujący oba serwisy, wywalał się kilka razy spektakularnie, również już po skończeniu
testów beta i oficjalnej premierze ”LinuxNews 2.0”.
Pierwsze reakcje społeczności były bardzo mieszane. Stara gwardia LinuxNews odtrąbiła „koniec serwisu” (http://hedera.linuxnews.pl/⇒
⇒ /_news/2007/06/18/_long/4513.html). Nie podobało się prawie
wszystko – od poziomu niusów, przez silnik, aż po layout. Na jakilinux.org
reakcje były bardziej pozytywne, ale i tu długo jeszcze społeczność domagała się, by niusy pozostały „tam gdzie zawsze”, czyli w podserwisie
niusowym jakilinux.org.
Gdy jednak zamiast kilku niusów na tydzień, zaczęło się ich
pojawiać kilka dziennie, dzięki partycypacji wielu autorów, wszyscy
szybko przeszli ze zmianami do porządku dziennego. Prawdziwa integracja społeczności nastąpiła jakieś pół roku po fizycznej integracji
serwisów. Wtedy też, w styczniu 2008 roku, ostatecznie znikły niusy z serwisu jakilinux.org i znajdują się tam gdzie ich miejsce, czyli
na LinuxNews.
38
Borys ‘michuk’ Musielak, Daniel Koć
Fora głównych środowisk graficznych
W tym samym czasie jak grzyby po deszczu powstawały nowe fora internetowe, mające skupiać społeczność związaną z głównymi środowiskami graficznymi dla Linuksa: KDE, GNOME i XFCE. 21 czerwca
2007 roku michuk opublikował apel (http://blog.jakilinux.org/⇒
⇒ /wortal/forum-gnome-kde-xfce/), nawołujący do połączenia tych
wysiłków i zbudowania wspólnego forum społeczności pod adresem
forum.jakilinux.org. Oto fragment:
Zupełnie nie widzę sensu tych niezależnych bytów,
z oddzielnymi loginami, położonych na kiepskich serwerach, nie będących w stanie utrzymać większego ruchu
(który chyba każde z forów planuje?). Moja propozycja jest
taka: zróbmy wspólne forum, ze wspólnym loginem, zintegrowane z forum jakilinux.org a także z serwisami takimi
jak Jakilinux, LinuxNews i WolnaKultura. Z naszej strony
mogę zapewnić sensowny hosting i konfigurację forum (zapewne punBB). Wszyscy obecni administratorzy i moderatorzy zachowaliby swoje funkcje. Dane można przemigrować (nie jest to trudne, jest migrator z phpBB do punBB).
Wszyscy na tym zyskają, bo na większym forum łatwiej
uzyskać pomoc. A baza użytkowników JL i LN jest spora.
Przeciwwskazań nie widzę.
Pierwsi na wezwanie odpowiedzieli założyciele forum XFCE: Zarov,
Partition i Marc Rousé (patrz: http://blog.jakilinux.org/forum/⇒
⇒ /forum-xfce-powraca/). Forum zostało przeniesione pod adres
xfce.jakilinux.org i zintegrowane graficznie z resztą serwisu. Bardzo
w tym pomogło zastosowanie otwartego systemu forum punBB, które
pięknie integruje się z innymi serwisami, dzięki dobremu oddzieleniu
struktury treści (HTML) od wyglądu (CSS).
Kilka dni później pojawiło się oficjalne forum KDE (http://⇒
⇒ /blog.jakilinux.org/wortal/nowe-oficjalne-forum-kde/) zarządzane przez zespół KDE.org.pl. Dostępne jest ono pod adresami
forum.kde.org.pl oraz kde.jakilinux.org.
Integracja Linuksowej społeczności w Internecie
39
Ostatni, 6 kwietnia 2008 r., dali się przekonać szefowie forum
GNOME: barteks i mikrobart (http://blog.jakilinux.org/forum/⇒
⇒ /forum-gnome-na-jakilinuxorg/).
Dzięki wtyczce do Wordpressa autorstwa Riklaunima (jl-punbb)
udało się zintegrować dodatkowe fora również na poziomie bazy użytkowników, dzięki czemu wystarczy jeden login i hasło, aby korzystać
z wortalu jakilinux.org, serwisu LinuxNews, forum jakilinux.org,
czy for XFCE, KDE i GNOME.
OSnews.pl
Tak. . . mamy pięknie zintegrowany portal linuksowy, z poradami i artykułami (jakilinux.org), nowinkami (LinuxNews.pl) i społecznością
(forum.jakilinux.org wiki.jakilinux.org). I wszystko byłoby super,
tylko co to ma wspólnego z Linuksem? Komentarze tego typu zaczęły pojawiać się coraz częściej, właściwie przy każdym artykule, który
choć trochę zahaczał o sprawy niekoniecznie związane z kernelem czy
X.org. Ciężko było z tym walczyć. Serwis społecznościowy to czytelnicy dodający niusy i głosujący na nie – i to oni decydują, co ma
pojawić się na stronie głównej, a co nie. Coraz częściej pojawiały się
więc niusy związane z IT, ale niekoniecznie bezpośrednio z FLOSS.
Głosy dezaprobaty starych czytelników można było albo zignorować
albo. . . spróbować jakoś pogodzić te dwie grupy. Powstał więc pomysł stworzenia serwisu, który będzie swoją tematyką wychodził poza
FLOSS i obejmował również zagadnienia ogólnoinformatyczne.
Michuk usiadł przed konsolą z kilkoma okienkami edytora Vi,
bers przed GIMPem, a Adam Mrówczyński przed Inkscape-em, by tylko kilka tygodni później, po okresie prywatnych testów, premierę miał
nowy serwis: OSnews.pl. Co oznacza OS w OSnews, tego nie wie nikt.
Nie jest to na pewno Open Source – serwis wykracza znacznie dalej.
Przez długi czas michuk upierał się, że chodzi o Operating Systems.
Skąd jednak w takim razie niusy o piractwie, hardware czy związane
z biznesem IT? Pogodził wszystkich Thar, który rozszyfrował OSnews
jako ”Obywatelski Serwis Niusów”. I to chyba najlepsze rozwinięcie.
40
Borys ‘michuk’ Musielak, Daniel Koć
Tak czy inaczej, pod koniec października 2007 ruszył nowy serwis, który znów nieco zmodyfikował strukturę rozrastającej się Grupy
Jakilinux. LinuxNews.pl stał się nagle z niezależnego serwisu po prostu filtrem na OSnews, usuwającym wszystko co nie związane z Linuksem bądź Open Source. Na OSnews pojawiały się natomiast niusy w takich kategoriach jak Apple, Biznes, Hardware, Internet, UNIX,
Media, Microsoft, Open Source, Programowanie, Software czy po prostu Wydarzenia. Okazało się, że fani FLOSS chcą czytać również niusy
na inne, ogólniejsze tematy. Dowodem tego jest bardzo szybki wzrost
popularności nowego serwisu. Już w kilka miesięcy po premierze, jego odwiedzalność zrównała się z odwiedzalnością LinuxNews. Po niecałym roku jest już dwa razy większa.
Grupa Jakilinux obecnie
W sierpniu 2008 Grupa Jakilinux, łącznie z anglojęzycznym serwisem
PolishLinux.org, to ponad 1.5 miliona odsłon miesięcznie i pół miliona unikalnych odwiedzin. Dziennie pojawia się kilkanaście nowinek
i prawie 300 komentarzy użytkowników. Co tydzień opublikowane są
3 – 4 dłuższe artykuły, a do tego dochodzi ciągła opieka nad stałą treścią stron. Aby zarządzać rozrastającą się w tak szybkim tempie grupą serwisów, należało dobrze zorganizować pracę, podzielić ją na zespoły i określić, kto za co odpowiada. I choć większość treści tworzy
samozwańczo społeczność, to ich korektą zajmuje się administracja.
Do niej należy także skład artykułów i ich publikacja, rozwój funkcjonalności, wyznaczanie i sugerowanie społeczności ogólnych wizji czy
konkretnych zadań.
Bardzo pomocnym narzędziem, ułatwiającym społeczności wkład,
okazało się wiki grupy: wiki.jakilinux.org. Na nim właśnie powstają
szkice artykułów, tam tłumaczone są wspólnie ciekawe teksty z zagranicznych serwisów. Tam powstaje też stała treść, korygowane są opisy
dystrybucji z jakilinux.org, czy opublikowane już artykuły. Tam też
powstało i rozkwitło kilka akcji przeprowadzonych przez wortal, jak
Integracja Linuksowej społeczności w Internecie
41
słynny List Otwarty w sprawie stosowania GNU/Linuksa i Oprogramowania Open-Source w Administracji Publicznej, pod patronatem
wortalu jakilinux.org (opublikowany na stronie akcja.jaklinux.org),
czy rozkręcenie akcji Linux dla Szkół (obecnie WiOO w Szkole), prowadzone przez Fundację Wolnego i Otwartego Oprogramowania, ze
stroną wiki na wiki.jakilinux.org/edukacja.
Innym ważnym narzędziem wspomagającym pracę nad serwisami Grupy jest Jira – system do zarządzania zadaniami. To tam składujemy i grupujemy zadania, jakie należy wykonać, śledzimy ich aktualny status i komentujemy. Prace w jirze podzielone są na kilka
grup. Pierwsza to rzeczy związane z dodaniem nowej funkcjonalności
do któregoś z serwisów (a więc przede wszystkim programowanie),
druga to różnego rodzaju korekty w treści serwisów, trzecia zaś to
praca nad nowymi artykułami: korekta, skład w XHTML (odpowiedni
format + obrazki), zatwierdzenie i publikacja. Jira projektu znajduje
się pod adresem: jira.jakilinux.org:8080
Inne ważne miejsca to forum (forum.jakilinux.org) oraz kanał
IRC (#jakilinux na irc.freenode.net), gdzie zbiera się społeczność
by dyskutować na tematy związane z serwisami Grupy, a także wszelkie inne, zupełnie z nimi nie związane.
Kto tworzy Grupę Jakilinux? Trudno wymienić wszystkich. Postaramy się przynajmniej nie pominąć najważniejszych:
t_ziel: tworzenie i aktualizacja stałej treści wortalu jakilinux.org
Thar, Marta Siostrzonek-Bania: korekta artykułów
quest-88, Moarc, Zajec, jellonek, KOmandos: bieżąca korekta tekstów nowinek
adz: artykuły, pomoc w tworzeniu serwisu, programowanie
seaman: niusy, artykuły
Keyto: autor przydługawych, acz niezmiernie ekscytujących artykułów
42
Borys ‘michuk’ Musielak, Daniel Koć
lamprez: pomysłodawca Tygodnika KDE, niusy, mnóstwo niusów,
obecnie zapracowany
oZz: skład artykułów w XHTML, moderacja forum
Zarov: moderacja forum jakilinux.org oraz XFCE
pbm i joker: forum KDE
mikrobart i barteks: forum GNOME
Bob_R: główny grafik i webmaster jakilinux.org
bers: projekt i wdrożenie designu OSnews.pl
mwd: projekt i wdrożenie designu LinuxNews.pl
Paweł Łupkowski: artykuły, pomoc w tworzeniu serwisu (elementy
graficzne)
I w końcu:
markgo: programowanie wtyczek Wordpressa, zarządzenia serwisem WolnaKultura.info
kocio: wiadomo
michuk: cała reszta.
Nie należy też zapominać o osobach, które miały spory wkład w tworzenie serwisu, a obecnie są już „na emeryturze”:
Riklaunim: artykuły, obsługa forum, programowanie
Adam Mrówczyński: logo OSnews.pl, elementy graficzne
Student, baxxx, pazkooda: korektorzy artykułów
Balcerowicz: artykuły i moderacja forum
Integracja Linuksowej społeczności w Internecie
43
oraz cała stara ekipa LinuxNews, o której pisaliśmy wcześniej, w części historycznej.
Oprócz wszystkich tych osób, tworzących jakby rdzeń Grupy, codziennie pojawiają się nowi niusmeni, dodający nowinki w serwisach
LinuxNews i OSnews.pl. Wymienić ich wszystkich zupełnie się nie da,
ale właśnie dzięki nim cała ta społecznościowa karuzela kręci się nadal i nie wygląda, by miała się rychło zatrzymać.
Plany na przyszłość
Głównym celem, który nam przyświeca, jest oczywiście opanowanie
świata. Nie kryjemy się z tym, zmierzamy do celu powoli, acz stanowczo.
Jeśli chodzi o krótkoterminowe cele, to najważniejszym wydaje
nam się rozkręcenie serwisu WolnaKultura.info, który ma być uzupełnieniem Grupy o tematykę kulturalną. Celem tego projektu ma
być promocja wolności w zinformatyzowanym świecie. Rola portalu
będzie zarówno informacyjna (czym są wolne licencje przystosowane do dzieł kultury, jak GFDL czy Creative Commons, dlaczego warto z nich korzystać), promocyjna (promowanie artystów wydających
swoje dzieła na wolnych licencjach, pokazanie, że wolna sztuka nie
musi być gorsza od tej mainstreamowej), a także przeciwstawienie się
lobbingowi takich organizacji jak ZAiKS, BSA, czy Koalicja Antypiracka, które, zachęcane przez koncerny muzyczne i filmowe, próbują
wmówić społeczeństwu, że dzielenie się jest moralnie równoważne napadaniu na statki (jak rzekł kiedyś RMS).
Co z tego wyjdzie – zależy również od Was. Wszystkich chętnych
do zaangażowania się w projekt zachęcam do kontaktu z nami przez
adres [email protected].
Nie zamierzamy oczywiście zaniedbywać pozostałych serwisów
Grupy. Najwięcej zmian spodziewać się można w serwisie OSnews.pl,
który jest najmłodszy i najbardziej przebojowy. Nie zdążył się jeszcze
samozdefiniować, co oznacza, że jest podatny na zmiany w większym
stopniu, niż pozostałe serwisy.
44
Borys ‘michuk’ Musielak, Daniel Koć
Konkluzja płynąca z tego chaotycznego referatu nasuwa się taka: nie potrzeba ani specjalnych nakładów finansowych, ani jakiegoś
ogromnego poświęcenia, by wspólnymi siłami stworzyć coś fajnego,
co pięknie się rozwija i nastawione jest na bycie użytecznym, niekoniecznie zyskownym przedsięwzięciem.
Systemy wbudowane
Adam Mańczuk
Począwszy od pierwszych komputerów, takich jak np. ENIAC tudzież innych „domowych” (czyli o rozmiarach sporego domu), przyzwyczailiśmy się rozumieć komputer jako samodzielną maszynę, której zadaniem jest wykonywanie programów i prezentacja wyników.
Wraz ze wzrostem liczby programów i zadań, komputery stają się coraz mniejsze. W pogoni za najbardziej wymyślnymi fanaberiami swoich użytkowników, coraz bardziej się komplikują, zarówno od strony
sprzętu jak i oprogramowania. Mnogość interfejsów użytkownika i parametrów technicznych powoduje, iż najliczniej otaczające nas maszyny cyfrowe, wykonują od wielu lat swoją czarną robotę, całkowicie
niezauważone.
Systemy wbudowane to specjalizowane komputery, będące nieodłączną częścią innych urządzeń. Pierwsze pojawiły się w czasie drugiej wojny światowej. Były to kalkulatory torpedowe, systemy kierowania ogniem, czy automatyczny pilot. Podczas misji Apollo, lądownikiem księżycowym kierował komputer wbudowany, pracujący
pod kontrolą jednego z pierwszych systemów czasu rzeczywistego.
Statkami kosmicznymi programu MIR kierowały jedne z pierwszych
46
Adam Mańczuk
komputerów, wyposażonych w nieulotną pamięć EEPROM, produkowane potem na rynek cywilny jako kalkulator ELEKTRONIKA MK-52.
Zejdźmy jednak z gwiazd z powrotem na biurko. Codziennie każdy
z nas posługuje się komputerem zbudowanym na bazie układu Intel
8048, czyli klawiaturą komputerową.
Drogi ewolucji
Komputery to wysoce specjalizowane urządzenia. Ich specjalizacje bywają bardzo różne, a wszystko po to, by spełnić najwymyślniejsze zachcianki swojego właściciela. W drodze ewolucji realizują one coraz
więcej zadań, przetwarzają coraz większe ilości danych, przesyłają je
między sobą z coraz większą szybkością. Systemy wbudowane realizują stosunkowo proste zadania. Niewiele różnią się od wykwalifikowanego operatora, który ustawia regulator proporcjonalnie do wychylenia wskazówki, włączy coś, gdy zapali się lampka, a wyłączy, gdy zegar wybije północ. Zamiast mnogości funkcji, kluczowym parametrem
systemu wbudowanego jest czas reakcji na zdarzenia i niezawodność.
Jeśli domowy komputer będzie zbyt wolno reagował na nasze
polecenia, zacinając się na ulubionej grze, skończy się to dla niego
w najgorszym przypadku przeróbką na mebel. Każdy, komu się poskarżymy, zachęci nas do zakupu lepszego procesora czy kolejnego
zwiększenia RAM-u. System wbudowany, kontrolujący impulsowy reaktor jądrowy, może się zawiesić lub spóźnić z reakcją tylko raz. Rychło przestanie istnieć zarówno on sam, jak i jego operatorzy, wraz
z rodzinami i mieszkańcami najbliższego miasta.
Cechą wyróżniającą systemy wbudowane jest niewątpliwie zupełnie inna strategia, dotycząca realizacji zadań z jak najmniejszym
opóźnieniem czasowym. W przypadku typowych wielozadaniowych
systemów komputerowych, opóźnienia czasowe niweluje się poprzez
zmianę parametrów wydajnościowych. W systemach wbudowanych
szybkość reakcji układu uzyskuje się dzięki daleko idącej specjalizacji. Systemy wbudowane tworzy się dziś najczęściej na bazie prostych
Systemy wbudowane
47
układów logicznych PLC, czy też w oparciu o 8-bitowe układy typu
Intel 8051.
Mikrokontrolery
Wraz z ideą pierwszych mikroprocesorów powstał pomysł, by oprócz
jednostki centralnej, zintegrować w jednym układzie również inne elementy komputera, takie jak pamięć programu oraz operacyjną. Na zewnątrz wyprowadza się jedynie linie wejścia/wyjścia. Pierwszym produkowanym seryjnie jednoukładowym komputerem był Intel 8048,
popularny do dziś z uwagi na to, że IBM wykorzystał go do konstrukcji klawiatury peceta. Użycie mikrokontrolera to obecnie najprostszy
i najtańszy sposób tworzenia systemu wbudowanego. Układ ten zawiera wszystkie niezbędne elementy systemu komputerowego, czyli:
pamięć programu, najczęściej nieulotną, typu FLASH (dawniej była to pamięć ROM lub EPROM) – od kilobajta do kilku megabajtów
w układach z rdzeniem ARM,
pamięć operacyjną RAM od kilku bajtów,
układy wejścia – wyjścia, takie jak przetworniki analogowo – cyfrowe, układy transmisji szeregowej UART, a w najnowszych wydaniach sterowniki USB czy ethernet,
jednostkę centralną – rdzeń mikrokontrolera, będący odpowiednikiem procesora w komputerach osobistych.
Ładowanie programu
Uniwersalne systemy komputerowe budowane są na bazie architektury von Neumanna, zgodnie z którą system komputerowy powinien
mieć wspólną pamięć do przechowywania programu i danych. W odróżnieniu od nich, mikrokontrolery posiadają najczęściej pamięć programu oddzieloną od pamięci operacyjnej. Dzięki temu są one gotowe
48
Adam Mańczuk
do działania natychmiast po podłączeniu zasilania. Większości układów wystarcza niewielka ilość RAM, która służy jedynie do przechowywania wartości zmiennych. Program zatem, skoro nie jest ładowany z żadnego zewnętrznego nośnika, musi być zapisany w układzie
na stałe. Dawniej robiono to podczas produkcji albo za pomocą specjalnych programatorów (w identyczny sposób jak BIOS płyty głównej). Obecnie większość układów programuje się za pomocą interfejsu
szeregowego ISP, z wykorzystaniem portów komputera – równoległego lub szeregowego. Innym popularnym interfejsem jest JTAG, który oprócz możliwości przeprogramowania układu, umożliwia również
uruchomienie programu pod zewnętrznym debugerem, np. GDB.
Systemy operacyjne
W komputerach jednoukładowych system operacyjny to coś zupełnie
innego, niż to co znamy z z ich odpowiedników biurkowych. Układy
te wyposaża się w prosty program, który mieści się w 2 kilobajtach
pamięci nieulotnej. Dopiero gdy w grę zaczyna wchodzić wielozadaniowość, niezbędne jest stworzenie tzw. systemu operacyjnego czasu
rzeczywistego. Nie posiada on na przykład systemu plików – albo co
najwyżej posiada go w formie szczątkowej. Jego rola sprowadza się
do szeregowania zadań i zapewniania obsługi przerwań w ustalonych
reżimach czasowych.
System taki musi zagwarantować, że czas jego reakcji na awarię –
na przykład systemu chłodzącego reaktor, umożliwi przeżycie kolejnego dnia kilku milionom ludzi. W odpowiedzi na sygnały zewnętrzne,
ignoruje mniej ważnie zadania, takie jak np. obsługa panelu kontrolnego. Poświęca wówczas całość czasu procesora na wykonanie zadania o najwyższym priorytecie w danej chwili, czyli np. awaryjne
wyłączenie reaktora.
Nie sięgając do aż tak drastycznych przykładów, mogę powiedzieć, że w systemach wbudowanych dysków twardych, nad którymi obecnie pracuję, decyzja o awaryjnym zaparkowaniu głowic musi
być podjęta i wykonana w ciągu niecałej milisekundy od wykrycia
Systemy wbudowane
49
zaniku napięcia czy stanu bezwładności (kiedy np. dysk leci na podłogę). W przeciwnym wypadku, głowica może dotknąć rozpędzonej powierzchni dysku powodując jego natychmiastowe i całkowite uszkodzenie. Czas rzeczywisty w nazwie systemu operacyjnego oznacza zatem, że system taki może gwarantować określony czas reakcji na pewne sytuacje, wymagające natychmiastowej reakcji.
Programowanie
Do tworzenia oprogramowania dla systemów wbudowanych istnieje
wiele środowisk programistycznych. Oprócz tych płatnych, oprogramowanie na większość popularnych mikrokontrolerów możemy kompilować i uruchamiać z pomocą dobrze nam znanych narzędzi GNU.
Największe dystrybucje Linuksa zawierają oprogramowanie umożliwiające kompilację, uruchamianie, i ładowanie programów do takich
kontrolerów jak AVR, 8051 czy ARM. Programy pisze się obecnie głównie w języku C. Sam proces tworzenia software’u, pomimo ograniczeń
związanych z architekturą Harvard (czyli oddzielenia pamięci programu od pamięci operacyjnej), jest dość prosty, zaś w uruchamianiu
pomagają nam emulatory i debuggery.
Rodzaje mikrokontrolerów
Wśród mikrokontrolerów panuje duża różnorodność architektur. Jako że są to urządzenia programowane do konkretnych zadań, zgodność na poziomie kodu binarnego nie jest tu największą zaletą. Dużo ważniejsza jest podobieństwo architektury wewnętrznej układów.
Można wyróżnić kilka najpopularniejszych rodzin:
MCS-51 Zapoczątkowana przez układy Intel 8051, a obecnie najpopularniejsza wśród konstruktorów, ze względu nie tyle na jej
zalety, co dotychczasową popularność (przyzwyczajenie to przecież
druga natura człowieka). Sam rdzeń jest zbliżony listą rozkazów
50
Adam Mańczuk
do słynnego Intel 8080, typu CISC, a przeznaczony jest do programowania głównie w asemberze, choć coraz częściej wykorzystuje
się w tym celu język C.
PIC Produkowane przez Microchip Technology ośmio- i szesnastobitowe układy RISC. Charakteryzują się wyjątkowo prostą budową, małym poborem mocy i niską ceną.
AVR Procesory typ RISC. Ich budowa logiczna i lista rozkazów były optymalizowane dla współczesnych kompilatorów. Mimo, że są
produkowane przez jedną firmę, charakteryzują się niezwykłą różnorodnością, począwszy od najprostszych TinyAVR do najbardziej
rozbudowanych MegaAVR.
Są wyposażone w niezłe wewnętrzne interfejsy wejścia/wyjścia.
Dzięki rosnącej popularności, nie ma problemów ze znalezieniem
odpowiedniego oprogramowania pod systemy Linux.
ARM Coraz popularniejsze 32-bitowe kontrolery, bazujące na rdzeniu ARM. Rdzeń został zaprojektowany przez firmę Acorn Computers, podczas prac nad wersją rozwojową architektury MOS 6502,
znaną z takich komputerów jak Atari 65XE, Commodore C64 czy
Apple II. Rodzina procesorów ARM stała się najpopularniejszą 32bitową architekturą dla urządzeń przenośnych. Najbardziej rozbudowane mikrokontrolery zbudowane na tym typie rdzenia, umożliwiają instalację specjalnych dystrybucji Linuksa.
Dlaczego?
Dobry programista powinien zaprojektować i zbudować chociaż jeden komputer w życiu. Zmagając się z konstrukcją sprzętu, łatwiej
jest pojąć ideę wykonywania programów. Skonstruowanie komputera
na bazie typowego mikroprocesora, jest niesłychanie żmudne, o czym
miałem okazję przekonać się sam, tworząc komputer na bazie Z80.
Systemy wbudowane
51
Z pomocą układu mikrokontrolera możemy stworzyć działający
komputer za ok 40 zł w zaledwie pół godziny, z elementów dostępnych
w każdym sklepie z elektroniką:
mikrokontrolera,
kwarcowego układu taktującego,
dwóch rezystorów,
jednego kondensatora,
wyświetlacza,
prostej klawiatury.
Samo znalezienie schematu w sieci zajmie nam nie więcej niż pięć minut. Potem możemy się bawić w programowanie samodzielnie stworzonego komputera, sterować podłączonymi urządzeniami, np. włączając światło o zmierzchu, włączając rano ekspres do kawy i radio.
W sieci znajdziemy całkiem sporo schematów, które umożliwią nam
samodzielne wykonanie budzika, kalkulatora, odtwarzacza mp3, czy
przenośnej nawigacji GPS. Wszystko to znajduje się w zasięgu naszej
lutownicy.
Rozwój systemów IT
w Narodowym Archiwum Cyfrowym
na przykładzie ZoSIA
Rafał Magryś
Jakub Lewandowski
Na równi z nieuchronnością upływającego czasu, nieuchronna
jest również konieczność wymiany i modernizacji systemów informatycznych. Technologia IT stwarza nowe możliwości w dziedzinie przetwarzania informacji, dając użytkownikowi dostęp do nieznanych dotąd narzędzi i zmieniając jego potrzeby.
Zmiany technologiczne zaspokajały niegdyś wyłącznie potrzeby
nauk ścisłych, w których naturalne jest używanie sprzętu wspomagającego obliczenia. Obecnie, dzięki upowszechnieniu się komputerów, powszechne staje się ich wykorzystywanie w instytucjach sektora
ochrony dziedzictwa narodowego tj. archiwach, bibliotekach i muzeach.
Dzięki rozwojowi internetu, instytucje te otrzymują potężne narzędzie do popularyzacji swoich zbiorów. Digitalizacja czy retrokonwersja danych umożliwia im udostępnienie swoich zasobów niezależnie od miejsca pobytu i strefy czasowej oglądającego. Działania te nie
byłyby rzecz jasna możliwe bez przygotowania odpowiednich systemów informatycznych, umożliwiających digitalizację zbiorów.
Tak jest w przypadku archiwów państwowych, które gromadzą
materiały z historii Polski w całym okresie jej istnienia. Sieć archiwów
Rozwój systemów IT w NAC na przykładzie ZoSIA
53
obejmuje swym zasięgiem cały kraj. Takie rozproszenie narzuca konieczność koordynacji działań oraz modernizacji struktury IT w skali
ogólnopolskiej. Jest to jeden z celów, dla jakich powołano do życia
Narodowe Archiwum Cyfrowe z siedzibą w Warszawie.
Pierwszym z zadań postawionych przed NAC było stworzenie systemu, który poprawiłby zarządzanie oraz publikowanie archiwaliów
i informacji o nich w skali ogólnopolskiej. Prace nad systemem rozpoczęto na początku bieżącego roku. Zaowocowały one stworzeniem
Zintegrowanego Systemu Informacji Archiwalnej (ZoSIA). Obecnie jest
on wdrażany testowo w archiwach w Kraśniku, Chełmie, Radzyniu
Podlaskim oraz Poznaniu. System ZoSIA ma docelowo zastąpić przestarzałe oprogramowanie bazujące na Microsoft Access.
Open Source i NAC
Wybór padł na Wolne Oprogramowanie, co było w owym czasie w instytucjach publicznych ewenementem na skalę całego kraju. Decyzji
nie podjęto bynajmniej pochopnie – nastąpiła ona po głębokiej analizie zalet i wad Open Source. Zdecydowanie pomogły tu europejskie
i światowe trendy budowy oprogramowania.
Twórcy NAC od samego początku byli przekonani, iż jest to słuszny wybór. Stworzenie ZoSIA przekonało również osoby zarządzające
archiwami państwowymi. Pomyślne wdrożenie systemu może przynieść w najbliższych miesiącach zasadniczą zmianę w postrzeganiu
FLOSS we wszystkich archiwach państwowych i instytucjach z nimi współpracujących. Zakładamy, iż wprowadzenie ZoSIA umożliwi
migrację na Open Source w skali całego kraju – również w zakresie
innego oprogramowania używanego w archiwach państwowych.
NAC chce umożliwić korzystanie ze swoich systemów na zasadzie
tzw. kont wirtualnych tj. oprócz dostępu do oprogramowania udostępnić możliwość bezpłatnego składowania i zabezpieczania danych dla
instytucji kultury, przechowujących swoje archiwalia i chcących je
udostępnić w formie elektronicznej. Umożliwi to znaczne ograniczenie kosztów na polu tworzenia kolekcji elektronicznych. Oszczędności
54
Rafał Magryś, Jakub Lewandowski
mogą sięgać setek tysięcy złotych, które w innym wypadku byłyby wydane na zakup licencji na oprogramowanie do archiwów.
Projekt ZoSIA: informacje podstawowe
Głównym zadaniem systemu ZoSIA jest umożliwienie bezpiecznego
operowania zasobami archiwalnymi. Podstawowe funkcjonalności pochodzą z aplikacji dotychczas stosowanych w polskich archiwach
(między innymi programy SEZAM oraz IZA) i obejmują:
wprowadzanie do systemu danych archiwalnych z uwzględnieniem
ich hierarchicznej struktury,
modyfikowanie i usuwanie wprowadzonych danych,
generowanie raportów ułatwiających wykonywanie kwerend zleconych przez klientów archiwów,
przeszukiwanie zgromadzonych zasobów.
Implementując powyższe, zwrócono szczególną uwagę na poprawę
bezpieczeństwa i wydajności, a także ulepszenie stosowanej metodyki.
Dane są bardzo często wprowadzane do systemu przez studentów lub wolontariuszy, dlatego wymagają korekty redaktorskiej. Aby
usprawnić i zautomatyzować proces ich weryfikacji, ZoSIA została wyposażona w wieloetapowy system kontroli treści, podobny do tych,
używanych w serwisach informacyjnych (schemat edytor – redaktor –
kierownik).
Wyszukiwanie informacji jest kluczowym etapem pracy osób korzystających z danych archiwalnych. W dotychczas stosowanych systemach czas wykonywania prostych zapytań w wyszukiwarce wynosi
często wiele minut lub... zawiesza komputer (przeszukiwanie odbywa
się zwykle w lokalnej dla danego archiwum aplikacji). W systemie ZoSIA czas wyszukiwania został drastycznie zredukowany. Dodatkowo
Rozwój systemów IT w NAC na przykładzie ZoSIA
55
polepszono jakość wyszukiwania (dodano odmianę słów, ranking wyników, podpowiedzi itp.) tak, aby zbliżyć sposób wyszukiwania do znanych wyszukiwarek internetowych.
Projekt ZoSIA: stoimy na ramionach gigantów
Sercem systemu jest baza danych, zawierająca dane ze wszystkich
obsługiwanych instytucji (poprzednio każde archiwum miało zestaw
lokalnych baz danych). Zarządzanie treścią zrealizowano na bazie interfejsu www.
Główną zmianą, jaką wprowadza system ZoSIA, jest przejście
z komercyjnych silników bazodanowych (takich jak MS Access, Sybase czy Oracle) na silnik PostgreSQL. Dzięki bazie PostgreSQL mogliśmy wprowadzić zaawansowane mechanizmy, takie jak partycjonowanie tabel oparte na dziedziczeniu, tworzenie drzewiastej struktury
o nieograniczonej liczbie poziomów (w oparciu o moduł ltree) jak i wyszukiwania (moduł tsearch2).
Aplikacja zarządzająca została w całości napisana w języku Python. Aby uprościć tworzenie systemu, wykorzystany został szkielet
aplikacji o nazwie Pylons. Zwykle szkielety aplikacji www narzucają
znaczne ograniczenia na sposób tworzenia aplikacji (co na ogół bywa
zaletą). Pod tym względem Pylons wydaje się najbardziej „liberalny”
i elastyczny (wg nas swoją elastycznością przewyższa np. Django). Jego podstawową wadą jest fakt, że Pylons jest wciąż w fazie tworzenia
(w chwili obecnej wykorzystujemy wersję 0.9.2) i jego interfejs programisty bardzo często się zmienia.
Preferowanym w Pylons sposobem komunikacji z bazą danych
jest SQLAlchemy. Podobnie jak Pylons, SQLAlchemy wciąż powstaje
i niestabilność jego interfejsu to jedna z przyczyn, dla której zrezygnowaliśmy z jego stosowania. Druga przyczyna jest o wiele poważniejsza:
SQLAlchemy stara się obsługiwać większość popularnych silników
bazodanowych, przez co udostępnia jedynie typowe cechy każdego
z nich. Intensywne wykorzystanie partycjonowania tabel sprawiło, że
56
Rafał Magryś, Jakub Lewandowski
zdecydowaliśmy się użyć „dobrego, starego DBAPI”, którym w przypadku Postgres’a jest moduł psycopg2. Jego wadą jest konieczność
bezpośredniego stosowania języka SQL, co pogarsza przejrzystość kodu. Nie mniej, dzięki użyciu psycopg2, uniezależniliśmy się od niedojrzałego SQLAlchemy i (jak wierzymy) zmniejszyliśmy narzuty związane z użyciem ORM.
ZoSIA – i co dalej?
Działania NAC w dziedzinie rozwoju własnych systemów oraz wspierania Open Source w sektorze instytucji pamięci, nie będą ograniczone do budowy i wdrożenia systemu ZoSIA. Od września rozpoczynamy prace nad Systemem Digitalizacji Archiwalnej (SeDAn), który ma
uprościć i przyspieszyć konwersję materiałów analogowych do postaci
cyfrowej, a także umożliwić ich udostępnienie poprzez www.
Działania NAC, w tym zwłaszcza naciski na producentów specjalistycznych skanerów do digitalizacji archiwaliów, owocują już dziś
tym, iż producenci zaczęli tworzyć sterowniki dla tych urządzeń
pod system Linux.
Liczymy, że kolejne lata, dzięki działaniom firm wspierających
Open Source – takim jak IBM, Novell, Google, czy ostatnio również
NAC, staną się owocne i że spełni się wizja całkowitego przejścia instytucji publicznych na Open Source.
Automatyczne wyszukiwanie
komputerów i usług
Piotr Strzyżewski
1 Wstęp
Spoglądając wstecz możemy zauważyć, że „od zawsze” istniały metody lub protokoły umożliwiające pewną automatyzację konfiguracji
sieci. Nie sposób tu nie wymienić historycznych Reverse Address Resolution Protocol (RARP), Bootstrap Protocol (BOOTP) oraz używanego
do dziś Dynamic Host Configuration Protocol (DHCP; w tym w wersji
DHCPv6). Wraz z rozwojem tych protokołów pojawiały się nowe możliwości konfiguracyjne, wykraczające poza zwykły przydział adresu IP
oraz konfigurację podstawowych ustawień, takich jak maska sieci,
brama czy serwery DNS.
Protokoły te posiadały jednak pewną istotną z punktu widzenia
pełnej automatyzacji wadę – wymagały uruchomienia przez administratora centralnego serwera, którego statyczna konfiguracja musiała
być każdorazowo dostosowywana do zmian w strukturze sieci. Tego
rodzaju wiedza lub zasoby mogły leżeć poza zasięgiem przeciętnego
58
Piotr Strzyżewski
użytkownika sieci lokalnej, który oczekiwał nieskomplikowanego zestawu elementów składowych. Chodziło o to, by komputery, drukarki oraz urządzenia sieciowe połączone razem współpracowały ze sobą
w tak prosty sposób, jak telewizor współpracuje z odtwarzaczem DVD.
Z pomocą przychodzi tutaj zestaw protokołów określany jako Zeroconf lub Zero Configuration Networking. W jego skład wchodzą
zarówno protokoły automatycznego przydzielania (a w zasadzie wybierania) adresów IP, propagacji nazw elementów składowych sieci oraz
wyszukiwania usług przez nie udostępnianych.
2 Konfiguracja adresów IP
Bez względu na to, w jaki sposób chcemy wykorzystywać stworzoną
sieć komputerową, istotnym jest, by poszczególne jej węzły (bez względu na to czy są to komputery, drukarki, czy też inne urządzenia), potrafiły nawiązać wzajemną komunikację. Jednym z najczęściej wykorzystywanych protokołów do tego celu jest Internet Protocol w jednej
z dwóch wersji – IPv4 lub IPv6.
W zależności od wybranej wersji IP, możliwe jest zastosowanie
konkretnego modelu automatycznego nadawania adresów IP w sieci
lokalnej. Dla sieci opartej na IPv4 jest to IPv4LL opisany w dokumencie RFC 3927 1 . W przypadku IPv6 jest to IPv6 Stateless Address
Autoconfiguration, opisany w dokumencie RFC 4862.
2.1 IPv4LL
Mechanizm IPv4LL umożliwia wybranie adresu IPv4, którego użycie
w sieci lokalnej umożliwi porozumiewanie się z innymi skonfigurowanymi w analogiczny sposób węzłami tej sieci.
W momencie konfiguracji swojego interfejsu sieciowego, węzeł
sieci wybiera (korzystając z generatora liczb pseudolosowych) adres
1 Należy zauważyć, że firma Microsoft dla tej samej metody wybierania adresu używa nazwy
APIPA (Automatic Private IP Addressing)
Automatyczne wyszukiwanie komputerów i usług
59
ze specjalnie zarezerwowanej do tego celu przez IANA (Internet Assigned Numbers Authority) klasy 169.254.0.0/16. W jej obrębie zostały wskazane dwa zakresy (169.254.0.0/24 oraz 169.254.255.0/24)
przeznaczone do przyszłych zastosowań i tym samym wyłączone
z obecnego użytkowania. W rezultacie możliwe jest więc wybranie adresu z zakresu od 169.254.1.0 do 169.254.254.255 z maską /16.
Prawdopodobieństwo wybrania nieużywanego adresu w niewielkiej sieci jest bardzo duże, jednak wciąż istnieje potencjalna możliwość konfliktu. Aby do tego nie dopuścić, już na etapie wyboru adresu konieczne jest przeprowadzenie sprawdzenia jego unikalności.
W sieciach ethernet takiej weryfikacji dokonuje się za pośrednictwem
protokołu ARP. Gdy nastąpi potwierdzenie używania wybranego adresu, należy ponownie przeprowadzić całą procedurę wyboru, wraz ze
sprawdzeniem jego unikalności. W przeciwnym przypadku następuje rozgłoszenie wybranego adresu (również z wykorzystaniem ARP),
tak by wyeliminować ewentualne związane z nim nieaktualne wpisy w tablicach arp-cache pozostałych węzłów sieci. Należy zauważyć,
że mechanizm wyboru posiada pewne zabezpieczenia przeciw „zalaniu” sieci lokalnej pakietami ARP, tak by np. w przypadku podłączenia do niej komputera odpowiadającego na każde zapytanie ARP nie
wprowadzić pozostałych węzłów w nieskończoną pętlę, mającą na celu
wybór wolnego adresu IP.
Rozwiązywanie konfliktów adresów IP może być konieczne również w innym niż początkowy okresie działania sieci. Nietrudno wyobrazić sobie sytuację, w której dwie małe sieci lokalne (np. w sekretariacie firmy i w księgowości) łączone są ze sobą. Prawdopodobieństwo powstania konfliktu adresów jest nikłe przy tak szerokiej puli
adresowej, jednak nadal trzeba zapewnić odpowiedni mechanizm eliminujący ryzyko wystąpienia takiej sytuacji.
Istnieje szereg zaleceń dotyczących używania adresów wybranych
opisaną metodą. Zalecenia te pozwalają wyeliminować ewentualne
problemy w działaniu sieci.
Jednym z nich jest rezygnacja z umieszczania adresów IPv4LL
w DNS, ze względu na ich niestały charakter. Rozwiązaniem tego
60
Piotr Strzyżewski
problemu wydaje się być zastosowanie dynamicznych aktualizacji
w DNSie, co jednak prowadzi do bałaganu związanego z nieusuwaniem rekordów przez pospiesznie odłączone od sieci węzły (np. poprzez odłączenie przewodu sieciowego z komputera przenośnego).
Konfigurowanie adresów IPv4LL w sposób statyczny i/lub przydzielanie ich za pośrednictwem DHCP może powodować powstawanie
konfliktów adresacji, a tym samym destabilizowanie sieci. Zalecana
jest zatem rezygnacja z tego rodzaju praktyk.
Nie powinno dopuszczać się do do sytuacji, w której adresy
IPv4LL byłyby przekazywane poza sieć lokalną. Tego rodzaju adresacja jest lokalna i nie powinna być traktowana w inny sposób.
Niemniej istotnym jest zalecenie dotyczące generatora liczb pseudolosowych, który jest wykorzystywany do wyboru adresu. Sugeruje
się, o ile to możliwe, inicjowanie go wartością pochodną od pewnej
stałej, unikalnej dla węzła sieci informacji. Przykładem takiej informacji jest identyfikator interfejsu sieciowego (w sieciach ethernet –
adres MAC), który z założenia powinien być unikalny i stały dla każdego komputera w sieci. W przypadku posiadania przez węzeł stałej
pamięci z możliwością zapisu, np. dysku, sugerowane jest zapisywanie wybranego adresu. Oba te rozwiązania mają zagwarantować, by
po ponownym uruchomieniu urządzenia wybierany był, o ile to nadal możliwe, ten sam adres IP. Zalecenia te w dużej mierze ułatwiają
rozwiązywanie ewentualnych problemów z komunikacją.
2.2 IPv6 Stateless Address Autoconfiguration
Korzystając z mechanizmu IPv6 Stateless Address Autoconfiguration
da się skonfigurować adres IPv6, którego używanie w sieci lokalnej
umożliwi porozumiewanie się z innymi węzłami tej sieci, które wybrały
swoje adresy IP w ten sam sposób.
Konfiguracja adresu IPv6 o zasięgu lokalnym przebiega w stosunkowo prosty sposób. Podczas inicjowania interfejsu sieciowego,
ustalany jest dla niego adres oparty na identyfikatorze urządzenia.
W przypadku sieci ethernet, identyfikatorem tym staje się adres MAC.
Automatyczne wyszukiwanie komputerów i usług
61
Adres lokalny IPv6 przybiera wówczas postać: FE80::ID/64 gdzie ID
to utworzony na bazie adresu MAC adres EUI-64 z ustawionym bitem
Universal/Local (bit nr 6 licząc od 0 od lewej). Przykładowo dla interfejsu sieciowego o adresie MAC 01:23:45:67:89:AB wybrany zostanie
adres IPv6 postaci FE80::2123:45FF:FE67:89AB/64.
Po ustaleniu wspomnianego adresu należy przeprowadzić procedurę sprawdzenia jego unikalności. W przypadku pojawienia się konfliktu adresów i automatycznej konfiguracji, konieczne jest wprowadzenie innego identyfikatora urządzenia (tak by automatyczna konfiguracja mogła zostać wznowiona) lub ręczne skonfigurowanie adresu.
Konflikty adresów mogą być spowodowane na przykład użyciem innego, niż opisany powyżej, sposobu wybierania adresów (wspomina
o tym dokument RFC 3972 i inne), jak również ręczną konfiguracją
części węzłów lub użyciem DHCPv6.
Podobnie jak w przypadku IPv4LL, również tutaj istnieje szereg
zaleceń dotyczących używania adresów wybranych opisaną metodą.
Zalecenia te pozwalają wyeliminować ewentualne problemy w działaniu sieci. Do najważniejszych (opisanych w poprzednim podrozdziale) należy zaliczyć zakaz przekazywania pakietów o zasięgu lokalnym
poza sieć lokalną oraz nie umieszczanie takich adresów w systemie
DNS.
Korzystając z opisanej w dokumencie RFC 4862 metody, można
również skonfigurować adres IPv6 o zasięgu globalnym. W tym celu
należy utworzyć adres składający się z prefiksu sieci oraz z identyfikatora lokalnego. Prefiks sieci utrzymywany jest w części Prefix Information, zawartej w pakietach Router Advertisement. Po ustaleniu
takiego adresu trzeba, podobnie jak powyżej, przeprowadzić procedurę sprawdzenia jego unikalności.
3 Rozgłaszanie nazw węzłów sieci
Ustalanie nazw innych komputerów w sieci lokalnej bez pomocy serwerów nazw (DNS, WINS, etc.) może odbywać się z pomocą jednego
62
Piotr Strzyżewski
z dwóch podobnych do siebie, opartych na protokole DNS i przeznaczonych do tego celu protokołów: mDNS (Multicast DNS) opracowanym przez firmę Apple oraz LLMNR (Link-Local Multicast Name Resolution) firmy Microsoft. Możliwe jest również skorzystanie z innego,
opatentowanego przez Microsoft protokołu – PNRP (Peer Name Resolution Protocol).
3.1 Multicast DNS
Protokół mDNS używany jest do wyszukiwania rekordów DNS w sieci lokalnej, w której nie skonfigurowano klasycznego serwera DNS.
Multicast DNS to niewielka modyfikacja oryginalnego protokołu DNS.
Pozwala ona zachować jednolite API, a to znakomicie upraszcza jego
implementację. mDNS znajduje zastosowanie w większości istotnych
systemów operacyjnych.
Podstawą działania protokołu jest założenie, że wszystkie węzły lokalnej sieci widoczne są w specjalnie do tego przeznaczonej
pseudodomenie głównego poziomu – „local.”. Jej rekordy z założenia nie mają żadnego zastosowania poza siecią lokalną, nie powinny więc być poza nią widoczne (zapytania spoza sieci lokalnej
o tego rodzaju nazwy są ignorowane). Podobnie zapytania dotyczące domen odwrotnych dla adresów lokalnych – a więc te umieszczone w domenach 254.169.in-addr.arpa, 8.e.f.ip6.arpa, 9.e.f.ip6.arpa,
a.e.f.ip6.arpa oraz b.e.f.ip6.arpa powinny być kierowane do usługi mDNS, dostępnej w lokalnej sieci. Przekazywanie takich zapytań
do zwykłego serwera DNS generowałoby jedynie zbędny ruch w sieci.
Wszelkie zapytania mDNS wysyłane są na specjalnie do tego celu
przeznaczony adres typu multicast. Odpowiednio dla sieci bazującej
na IPv4 jest to 224.0.0.251, a dla sieci bazującej na IPv6 – FF02::FB.
Port UDP wykorzystywany do tej komunikacji to 5353.
W protokole zaprojektowane zostały trzy rodzaje zapytań:
Automatyczne wyszukiwanie komputerów i usług
63
pojedyncze zapytanie mDNS,
pojedyncze zapytanie mDNS w oczekiwaniu na wiele odpowiedzi,
ciągłe zapytanie mDNS.
Pojedyncze zapytanie mDNS nie różni się specjalnie od zwykłego zapytania DNS. W praktyce możliwe jest zatem automatyczne wysyłanie zapytań dla wspomnianych wcześniej domen wprost do serwera
mDNS (korzystając z ww. adresów typu multicast oraz portu UDP
5353). Implementacja tego rozwiązania nie wiąże się z wielkim nakładem kosztów. Przykładem takiego zapytania jest wyszukanie komputera o nazwie „Maja”.
Zapytanie w oczekiwaniu na wiele odpowiedzi wymaga szerszych
modyfikacji, związanych z koniecznością poprawnych retransmisji zapytań. Trzeba tutaj zastosować metodę eliminacji znanych odpowiedzi, tak, by węzły w sieci, które już znamy z wcześniejszych odpowiedzi, nie generowały niepotrzebnego ruchu w sieci. Przykładem takiego
zapytania jest wyszukiwanie usług z wykorzystaniem komplementarnego protokołu DNS-SD (opisanego w podrozdziale 4.1).
Zapytania ciągłe w swej naturze zbliżone są do zapytań w oczekiwaniu na wiele odpowiedzi. Istotną różnicę stanowi czas, w jakim retransmitowane są zapytania. W poprzednim przypadku program stwierdza, że otrzymana liczba odpowiedzi jest wystarczająca
albo upłynął czas przewidziany na odpowiedź. W przypadku zapytań
ciągłych, retransmitowane są one natomiast w nieskończoność (tzn.
do czasu działania aplikacji). By wyeliminować niepotrzebny ruch,
sukcesywnie podwaja się czas pomiędzy kolejnymi retransmisjami, aż
do jednej godziny pomiędzy kolejnymi zapytaniami. Również w tym
przypadku stosuje się metodę eliminacji znanych odpowiedzi. Przykładem takiego zapytania jest ciągłe wyszukiwanie węzłów świadczących pewną usługę.
Każda odpowiedź jest uzupełniona o czas jej ważności. Dodanie
tej informacji pozwala na utrzymywanie lokalnej pamięci podręcznej,
co nie pozostaje bez znaczenia dla obniżenia poziomu ruchu w sieci.
64
Piotr Strzyżewski
Jeżeli węzeł w sieci jest zainteresowany informacją ze swojej pamięci podręcznej, a termin jej ważności ma wkrótce wygasnąć, generuje
ponowne zapytanie o tą informację. Ponawianie takiego pytania powinno następować po upływie około 80% czasu ważności informacji.
Zarówno zapytania jak i odpowiedzi (z drobnym wyjątkiem) wysyłane
są z wykorzystaniem adresów typu multicast. Wówczas wszystkie węzły sieci, widząc odpowiedzi, mogą zaktualizować swoje pamięci podręczne. Gdy węzeł kończy świadczenie usługi, może również rozgłosić
ten fakt poprzez wysłanie odpowiedniego pakietu z czasem ważności
informacji równym 0 sekund. W praktyce pozwala to np. na posiadanie zawsze aktualnej listy usługodawców.
Ciekawą i wartą podkreślenia różnicą w stosunku do klasycznego protokołu DNS jest rozszerzenie dopuszczalnego zestawu znaków,
możliwych do używania w nadawanych nazwach, do standardu UTF8.
3.2 Link-Local Multicast Name Resolution
Zaprojektowany przez Microsoft protokół Link-Local Multicast Name
Resolution opisany w dokumencie RFC 4795 jest zbliżony do opisanego wyżej mDNS funkcjonalnością, ale z nim niekompatybilny. Podobnie jak ten ostatni, LLMNR bywa używany do wyszukiwania rekordów
DNS w sieci lokalnej, w której nie skonfigurowano klasycznego serwera DNS. Jest on również niewielką modyfikacją klasycznego protokołu DNS. Z uwagi na fakt, że protokół ten dostępny jest jedynie
w Microsoft Windows Vista oraz w Microsoft Windows Server 2008,
jego zastosowanie w przeciwieństwie do poprzednika jest dużo bardziej ograniczone.
Podobnie jak w przypadku mDNS, zapytania również rozsyłane
są z wykorzystaniem adresów typu multicast. W tym wypadku adresem używanym do komunikacji jest odpowiednio dla sieci IPv4 –
224.0.0.252, a dla sieci IPv6 – FF02::1:3. Port przeznaczony dla tego
protokołu to 5355.
Automatyczne wyszukiwanie komputerów i usług
65
W przeciwieństwie do mDNS, protokół nie używa specjalnej domeny pierwszego poziomu „local”. W zamian stosuje się płaską strukturę nazw. Należy jednak zauważyć, że klienty tego protokołu pozwalają na zadanie zapytania o nazwę w domenie „.local” – usuwając ten
ciąg i przesyłając zapytanie jedynie o konkretną nazwę hosta.
Kolejną istotną różnicą w stosunku do mDNS jest wysyłanie odpowiedzi jedynie do pytającego (z wykorzystaniem adresacji typu unicast), co eliminuje możliwość aktualizacji pamięci podręcznej pozostałych węzłów sieci. Tego rodzaju zachowanie oznacza również, że odpowiadającym jest zawsze komputer, który jest odpowiedzialny za wyszukiwaną nazwę. Model ten eliminuje z użycia, opisane w poprzednim rozdziale, bardziej zaawansowane od pojedynczych zapytania.
3.3 Peer Name Resolution Protocol
Zaprojektowany i opatentowany przez Microsoft protokół Peer Name
Resolution Protocol jest przeznaczony do wykorzystania wyłącznie
w sieciach IPv6. Ta właściwość oraz fakt, że jego implementacje przeznaczone są głównie dla produktów tej firmy, powoduje, że zasięg jego
wykorzystania jest niezwykle mały. Należy również zauważyć, że druga wersja tego protokołu (dostępna w Microsoft Windows Vista) nie
jest kompatybilna z pierwszą wersją (dostępną w SP2 dla Microsoft
Windows XP), co dodatkowo skutecznie ogranicza jego zastosowanie.
Być może szersze wprowadzenie dodatku SP3 dla Microsoft Windows
XP umożliwi komunikację systemów tej firmy za jego pośrednictwem.
Na uwagę zasługują dwie wyróżniające się funkcjonalności PNRP.
W przeciwieństwie do dwóch poprzednich, umożliwia on publikowanie nazw oraz dodatkowych informacji wraz ze wskazaniem zasięgu
ich widoczności (sieć lokalna, sieć firmowa (site), lub cały internet).
Drugą interesującą cechą tego protokołu jest wprowadzenie pewnego rodzaju zabezpieczenia publikowanych nazw, poprzez możliwość
podpisania przez publikującego jego rekordów. Podpis taki może być
następnie, w razie konieczności, zweryfikowany z wykorzystaniem odpowiedniego klucza publicznego.
66
Piotr Strzyżewski
Podobnie do wyżej opisanych protokołów, PNRP utrzymuje również lokalną pamięć podręczną ,zawierającą znane nazwy innych węzłów sieci. Tworzenie pamięci podręcznej jest tu wynikiem komunikacji z innymi węzłami sieci, korzystającymi z tego protokołu.
Do celów PNRP została zarezerwowana domena internetowa
pnrp.net, która przez systemy z zaimplementowaną obsługą tego protokołu jest traktowana w specjalny sposób. Przeznaczono również
port 3540 (zarówno UDP jak i TCP).
4 Wyszukiwanie usług w sieci
Temat automatycznego wyszukiwania usług w sieci jest rozwijany od
wielu lat i znalazł swoje odbicie w szeregu implementacji przeznaczonych do różnych zastosowań. Z powszechnie stosowanych rozwiązań
można wymienić chociażby:
Web Proxy Autodiscovery Protocol, stosowany powszechnie
przez przeglądarki internetowe,
Bluetooth Service Discovery Protocol, używany w sieciach bezprzewodowych opartych o protokół Bluetooth,
Simple Service Discovery Protocol, używany w połączeniu z Universal Plug and Play,
Dynamic Host Configuration Protocol.
Na szczególną uwagę zasługuje jednak otwarty i szeroko implementowany protokół DNS Service Discovery (DNS-SD), który wraz z opisanym w jednym z poprzednich podrozdziałów mDNS, tworzy opracowany przez firmę Apple tandem szerzej znany pod nazwą Bonjour
(poprzednio Rendezvous).
Automatyczne wyszukiwanie komputerów i usług
67
4.1 DNS Service-Discovery
DNS-SD zaprojektowano do wyszukiwania usług w sieci zarówno lokalnej, jak i globalnej. W lokalnej funkcjonuje z wykorzystaniem adresów protokołu mDNS o zasięgu lokalnym oraz opisanej w poprzednich podrozdziałach domeny „local.” Zasięg globalny oparty jest o klasyczny protokół DNS oraz domeny internetowe. Protokół ten korzysta
w niezwykle elastyczny sposób z istniejących rekordów DNS – SRV,
TXT oraz PTR w celu opublikowania informacji o udostępnianych
usługach.
Jednym z głównych założeń leżących u podstaw protokołu DNSSD jest to, że użytkownik zainteresowany skorzystaniem z pewnej
usługi (np. http czy serwera druku) otrzymuje listę usługodawców,
z której może wybrać interesujący go element. Łatwo można zauważyć, że wykorzystanie standardowych rekordów SRV może okazać
się niewystarczające, bo służą one raczej do wskazania równorzędnych serwerów świadczących daną usługę. Przykładem może być tutaj usługa katalogowa LDAP dla domeny „polsl.pl”, której dowolny,
równorzędny serwer może być odszukany poprzez zapytanie:
$ dig srv _ldap._tcp.polsl.pl
w wyniku którego otrzymamy odpowiedź (załączono jedynie istotny
fragment):
;; ANSWER SECTION:
_ldap._tcp.polsl.pl.
498
IN
SRV
0 100 389 horus.polsl.pl.
_ldap._tcp.polsl.pl.
498
IN
SRV
0 100 389 castor.polsl.pl.
_ldap._tcp.polsl.pl.
498
IN
SRV
0 100 389 pollux.polsl.pl.
_ldap._tcp.polsl.pl.
498
IN
SRV
0 100 389 cutidc.polsl.pl.
W sytuacji, w której konieczne byłoby znalezienie np. konkretnej
drukarki, użytkownik mógłby podjąć decyzję bazując jedynie na nierzadko nic mu niemówiących nazwach zarejestrowanych w systemie
DNS.
68
Piotr Strzyżewski
Aby zaradzić temu problemowi, protokół DNS-SD wprowadza dodatkowy poziom rekordów (PTR), pozwalający na zastosowanie opisowej nazwy dla świadczonych usług. W celu uzyskania poszukiwanej
listy serwerów świadczących wybraną usługę, należy wydać analogiczne do powyższego zapytanie o rekordy PTR dla nazwy, w postaci:
<usługa>.<protokół_transportowy>.<domena>
gdzie
<usługa> to zapisana w sposób stosowany dla rekordów SRV nazwa usługi poprzedzona znakiem „_” (np. „_http”, „_ldap”),
<protokół_transportowy> to albo „_tcp” albo „_udp” w zależności
od protokołu transportowego wykorzystywanego przez usługę,
<domena> to albo „local” dla protokołu mDNS albo zwykła domena
internetowa, w której zarejestrowana jest (ręcznie lub dynamicznie) dana usługa.
W odpowiedzi uzyskujemy listę rekordów PTR postaci:
<usługodawca>.<usługa>.<protokół_transportowy>.<domena>
gdzie <usługodawca> to zapisany z wykorzystaniem standardu
UTF-8 i ograniczony do 63 oktetów (ograniczenie to zostało narzucone w dokumentach RFC 1033-1035) identyfikator usługodawcy.
Przykładowe zapytania oraz niektóre odpowiedzi dla istniejących
w DNSie domen:
$ dig ptr _http._tcp.apple.com
;; ANSWER SECTION:
_http._tcp.apple.com.
86378
IN
PTR
Apple\032Developer\032Connection._http._tcp.apple.com.
_http._tcp.apple.com.
86378
IN
PTR
Apple\032WWDC\032Schedule._http._tcp.apple.com.
_http._tcp.apple.com.
86378
IN
PTR
Apple\032WWDC\032Attendee\032Site._http._tcp.apple.com.
Automatyczne wyszukiwanie komputerów i usług
69
$ dig ptr _http._tcp.dns-sd.org
;; ANSWER SECTION:
_http._tcp.dns-sd.org. 1009
IN
PTR
\032*\032SlashDot,\032News\032for\032Nerds,\032Stuff\032that\032Matters._http._tcp.dnssd.org.
_http._tcp.dns-sd.org. 1009
IN
PTR
\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.
$ dig ptr _ftp._tcp.dns-sd.org
;; ANSWER SECTION:
_ftp._tcp.dns-sd.org.
3467
IN
PTR
Restricted,\032Registered\032Users\032Only._ftp._tcp.dns-sd.org.
_ftp._tcp.dns-sd.org.
3467
IN
PTR
Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org.
_ftp._tcp.dns-sd.org.
3467
IN
PTR
Microsoft\032Developer\032Files._ftp._tcp.dns-sd.org.
Zastosowanie standardu UTF-8 nie stanowi dla użytkownika problemu, ponieważ nie wprowadza on nazwy bezpośrednio do aplikacji,
wybiera jedynie dostępnego usługodawcę z wyświetlonej listy.
Po wybraniu konkretnej usługi, następuje zapytanie o rekordy
SRV oraz TXT. Z rekordu SRV otrzymywany jest tak jak to już miało
miejsce wcześniej – jeden z równorzędnych serwerów świadczących
wskazaną usługę:
$ dig srv ’\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.’
;; ANSWER SECTION:
\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.
IN
SRV
0
0
80
3600
www.google.com.
Natomiast z rekordu TXT otrzymujemy dodatkowe parametry zależne od rodzaju usługi zapisane w postaci klucz=wartość:
$ dig txt ’\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.’
;; ANSWER SECTION:
\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.
IN
TXT
"path=/"
3600
70
Piotr Strzyżewski
W powyższym przykładzie uzyskano adres serwera usługi http –
www.google.com, z którego należy pobrać główną stronę internetową
(„/”).
Istnieje również możliwość wskazania podtypu danej usługi (rodzaje podtypów uzależnione są od usług). Wówczas pierwotne zapytanie (o rekordy PTR) modyfikuje się do postaci:
<podtyp>._sub.<usługa>.<protokół_transportowy>.<domena>
Możliwe jest na przykład wyszukanie serwerów ftp, które oferują
dostęp anonimowy:
$ dig ptr anon._sub._ftp._tcp.dns-sd.org
;; ANSWER SECTION:
anon._sub._ftp._tcp.dns-sd.org.
3600
IN
PTR
Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org.
anon._sub._ftp._tcp.dns-sd.org.
3600
IN
PTR
Microsoft\032Developer\032Files._ftp._tcp.dns-sd.org.
Ciekawym rodzajem zapytania, ułatwiającym rozwiązywanie problemów sieciowych, jest listowanie zarejestrowanych w domenie
usług. Aby tego dokonać należy wydać zapytanie o rekordy PTR dla
zarezerwowanej nazwy postaci: _services._dns-sd._udp.<domena>
Warto podkreślić, że możliwe jest również rozpoznanie domen
używanych przez użytkowników w sieci lokalnej. Łatwo wyobrazić sobie przyłączany gościnnie do sieci komputer przenośny, który – wykorzystując ten mechanizm – uzyska listę używanych w danej lokalizacji
domen, a następnie listę potrzebnych mu usług (np. drukarek, tak
by mógł wydrukować notatkę służbową lub dowolny inny dokument).
Aby skorzystać z tej możliwości, należy zadać zapytanie o rekordy PTR
dla zarezerwowanych nazw postaci:
b._dns-sd._udp.<domena>
db._dns-sd._udp.<domena>
r._dns-sd._udp.<domena>
Automatyczne wyszukiwanie komputerów i usług
71
dr._dns-sd._udp.<domena>
lb._dns-sd._udp.<domena>
W odpowiedzi otrzymamy odpowiednio:
listę domen rekomendowanych do przejrzenia,
domyślną, rekomendowaną domenę do przejrzenia,
listę domen rekomendowanych do rejestrowania w nich usług z wykorzystaniem dynamicznych aktualizacji DNS,
domyślną, rekomendowaną domenę do rejestrowania w niej usług
z wykorzystaniem dynamicznych aktualizacji DNS, sugerowaną
przez lokalnego administratora domenę do przejrzenia.
W tak zadawanych pytaniach możliwe jest wskazanie w części <domena> słowa „local” albo domeny uzyskanej w inny sposób. Przykładowo
może to być domena wprowadzona na stałe do konfiguracji komputera, otrzymana z serwera DHCP (poprzez opcję „Domain” lub „Domain
Search”) lub utworzona na podstawie adresu IP oraz maski (naturalnie będzie to wówczas domena odwrotna). Nic nie stoi na przeszkodzie, aby zastosować wszystkie wspomniane możliwości, a więc
skorzystać zarówno z mechanizmu mDNS jak i DNS i przedstawić
rezultaty użytkownikowi jako listę usług do wyboru.
5 Podsumowanie
Opisane powyżej protokoły wspomagające automatyczne wyszukiwanie innych komputerów i/lub świadczonych przez nie usług, ułatwiają
korzystanie z sieci lokalnej. Ich zastosowanie pomaga niezaawansowanym użytkownikom uruchomić prostą sieć lokalną, złożoną z kilku
komputerów i drukarek, bez potrzeby posiadania specjalistycznej wiedzy. Z drugiej strony – w bardziej zaawansowanym środowisku, zastosowanie np. protokołu DNS-SD pozwala administratorowi na proste
72
Piotr Strzyżewski
dostarczanie potrzebnych użytkownikom informacji, bez konieczności
każdorazowego modyfikowania części ustawień.
Korzystając z tych protokołów należy jednak zawsze mieć na uwadze bezpieczeństwo uzyskanych informacji. Nie jest bowiem rozsądnym drukowanie poufnych informacji lub przesyłanie ważnych plików
do komputera, który zgłosił się w sieci pod znaną nam lub budzącą zaufanie nazwą. Stosunkowo często rozpoznanie usługi spoczywa
w wyższych warstwach sieciowych.
W chwili obecnej wydaje się, że najbardziej przyszłościowym
standardem jest opracowany przez firmę Apple Bonjour, którego mnogość implementacji na innych niż Mac OS X platformach, pomaga w jego rozpowszechnianiu. Aktualnie dostępna jest implementacja Avahi używana w systemach Linux oraz BSD, a także rozpowszechniana wraz z oprogramowaniem iTunes implementacja działająca w systemach z rodziny Microsoft Windows.
6 Literatura
[1] http://en.wikipedia.org/wiki/Zeroconf
[2] http://www.zeroconf.org/
[3] Dynamic Configuration of IPv4 Link-Local Addresses,
http://tools.ietf.org/html/rfc3927
[4] IPv6 Stateless Address Autoconfiguration,
http://tools.ietf.org/html/rfc4862
[5] Multicast DNS Internet-Draft,
http://files.multicastdns.org/⇒
⇒ /draft-cheshire-dnsext-multicastdns.txt
[6] Link-Local Multicast Name Resolution (LLMNR),
http://tools.ietf.org/html/rfc4795
Automatyczne wyszukiwanie komputerów i usług
73
[7] Peer Name Resolution Protocol,
http://technet.microsoft.com/en-gb/library/bb726971.aspx
[8] DNS-Based Service Discovery Internet-Draft,
http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt
XUL – interfejs użytkownika przyszłości?
Robert Partyka
Historia rozwoju informatyki to między innymi historia rozwoju
języków programowania. Dziedzina ta przeszła długą drogę od kodu maszynowego, poprzez języki niskiego poziomu, aż do wyrafinowanych narzędzi programistycznych typu RAD. Kolejne technologie
poprawiały czytelność języków programowania, zwiększały szybkość
tworzenia programów, eliminowały zbędne czynności. Jeden element
pozostawał niezmiennie konieczny – stworzenie interfejsu użytkownika (GUI).
Doba internetu przyniosła nowe możliwości w tym zakresie. Programy przeniosły się na serwery, a interfejs użytkownika tworzony z wykorzystaniem HTML stał się bardziej kolorowy, niż kiedykolwiek wcześniej. Jednakże, pomimo wszystkich udogodnień, pierwotne
przeznaczenie HTML do formatowania prezentowanego tekstu rzutuje na wygodę tworzenia GUI. Przyjrzyjmy się, co w tej materii może
zmienić nowa technologia?
XUL – interfejs użytkownika przyszłości?
75
XUL – język interfejsu
W laboratoriach Mozilli postanowiono ułatwić pracę programistów odpowiedzialnych za tworzenie interfejsów m. in. przeglądarki Firefox.
W ten sposób powstał XUL (czytamy: zu:l). Język definiowania interfejsu przy pomocy XML. Samemu nie będąc formalnym standardem,
korzysta on z dobrodziejstw takich powszechnie znanych technologii
jak CSS, DOM czy JavaScript. Wszystko po to, by interfejs użytkownika nie musiał być każdorazowo przedefiniowany na nowo dla każdej
platformy. Daje to oszczędności pracy programistów idące w tysiące
godzin. Dzięki swojej prostocie, pozwala także na szybkie implementowanie koniecznych zmian i nowości.
XUL pozwala na stworzenie większości nowoczesnych elementów
interfejsu, takich jak elementy wprowadzania danych, przyciski, paski narzędziowe, menu, hierarchiczne drzewa czy skróty klawiszowe.
Dzięki JavaScript możliwe jest także proste powiększanie zasobu dostępnych komponentów.
XUL – wygoda układania
Ktokolwiek walczył z idealnym dopasowywaniem strony WWW do rozmiarów okna przeglądarki, ten wie ile trudu trzeba w to włożyć. Efekt
często nie jest zadowalający. Problem ten jest znikomy w XUL, a wręcz
można powiedzieć, że nie istnieje.
Logika tej technologii oparta jest o rozwiązania znane z GTK, czy
Java – elementy układane są w elementach <box>, które to układają kolejne komponenty horyzontalnie lub wertykalnie – zależnie od
parametrów. Dzięki takim seriom elementów zagnieżdżonych, w prosty sposób jesteśmy w stanie podzielić ekran na prostokątne strefy.
W nich rozmieścimy potrzebne komponenty.
Przy tworzeniu kompozycji istotnym jest parametr flex. Dzięki
niemu wybrany element nabierze elastyczności i dostosuje się do rozmiaru wolnej przestrzeni w jego otoczeniu. Dopasowywanie interfejsu
do wielkości okna przestaje być problemem.
76
Robert Partyka
<box orient="vertical">
<box orient="horizontal" align="center">
<label control="srh" value="Szukaj:"/>
<textbox id="srh" flex="1"/>
</box>
<box orient="horizontal" pack="end">
<button label="OK"/><button label="Anuluj"/>
</box>
</box>
Przykład 1
Przykład nr. 1 obrazuje metodykę rozmieszczania elementów.
W efekcie wykonania tego prostego kodu, otrzymamy okno wyszukiwania – takie, jak na rys. 1. Pole edycyjne będzie automatycznie
dopasowywane do szerokości ekranu, a przyciski “OK” oraz “Anuluj”
zostaną przyciągnięte do prawej.
Należy zwrócić uwagę na fakt, że parametr flex działa na obiekt
wzdłuż osi rozmieszczania komponentów w elemencie <box>. Pełną
kontrolę nad wyglądem elementów uzyskujemy dzięki dodatkowym
parametrom align oraz pack.
Oba te parametry dookreślają sposób, w jaki będą układane
komponenty wewnątrz danego elementu <box>, gdy rozmiar rodzica
jest większy, niż rozmiary dzieci. Parametr align działa wzdłuż osi
przeciwnej niż określona w parametrze orient, podczas gdy pack –
wzdłuż tej samej.
XUL – interfejs użytkownika przyszłości?
77
<box orient="horizontal" align="center">
<timepicker/><datepicker type="grid"/>
<datepicker/><datepicker type="popup"/>
</box>
Przykład 2
XUL – biblioteka komponentów
Prostotę modelowania interfejsu w XUL dopełnia bogata biblioteka
gotowych komponentów. Wraz z publikacją Gecko 1.9 oraz FireFox 3,
rozszerzona została ona o kolejne przydatne elementy.
Możemy zapomnieć o konieczności wykorzystywania złożonych
skryptów JavaScript w połączeniu z DOM i CSS, tylko po to, by pobrać od użytkownika datę lub czas. Teraz zrobią to za nas elementy
<datepicker> oraz <timepicker>. Element pobierania daty może występować w trzech postaciach:
kalendarza przedstawiającego widok całego miesiąca,
pola edycyjnego formatującego wpisany tekst w datę,
pola edycyjnego, z możliwością wywołania menu kontekstowego
z widokiem całego miesiąca.
Kolor pobierzemy dzięki elementowi <colorpicker>. Może on
przybrać formę przycisku z kontekstowym menu kolorów lub pojawić
78
Robert Partyka
<box orient="horizontal"
align="center">
<colorpicker/>
<colorpicker type="button"/>
</box>
Przykład 3
się jako element wyboru kolorów bezpośrednio na oknie. Element ten
wymaga nadal dopracowania, by osiągnąć użyteczność na poziomie
tożsamego elementu w programie GIMP.
Bezproblemowe staje się tworzenie menu kontekstowych i menu programu. Elementy typu skala, pasek postępu czy splitter, który
pozwala dopasowywać rozmiary elementów na oknie w trakcie pracy
programu, sprowadzone zostały do kilku prostych definicji XML.
Kolejnym bardzo przydatnym elementem jest komponent <tree>.
Jego dosyć złożoną (jak na XUL) składnię, rekompensują szerokie
możliwości zastosowania. Dzięki niemu stworzymy widoki w postaci raportu posiadającego przenośne kolumny, drzewiaste struktury
z rozwijanymi podkategoriami i inne podobne elementy. Złożoność
obiektu pozwala na bardzo elastyczny sposób jego wykorzystania.
XUL – interfejs użytkownika przyszłości?
79
<menubar>
<menu label="Menu 1">
<menupopup>
<menuitem label="Menu 1.1"/>
<menuitem label="Menu 1.2"/>
<menuseparator/>
<menu label="Menu 1.3">
<menupopup>
<menuitem label="Menu 1.3.1"/>
</menupopup>
</menu>
</menupopup>
</menu>
<menu label="Menu 2">
<menupopup>
<menuitem label="Menu 2.1"/>
</menupopup>
</menu>
</menubar>
Przykład 4
Kolekcja gotowych komponentów jest bogata i pozwala wygodnie
tworzyć interfejsy programów. Gdy czegoś brakuje, możemy rozszerzyć funkcjonalność dzięki technice XBL.
80
Robert Partyka
<box orient="horizontal" width="400">
<scale min="0" max="10" flex="1"/>
<splitter/>
<progressmeter mode="determined" value="80" flex="1"/>
</box>
Przykład 5 Elementy scale i progresmetter rozdzielone splitterem
dopasowującym ich układ na oknie
Przykład 6 element tree prezentujący tabelę raportu z edycyjnym
polem w pierwszym wierszu oraz menu kontekstowym ukrywania/pokazywania kolumn
Wykorzystanie HTML
Nie istnieje taka technologia, która obejmowałaby swoim zakresem
wszystko. Deweloperzy XUL są tego doskonale świadomi, dlatego też
pozostawili możliwość wykorzystywania elementów HTML.
Aby uzyskać dostęp do komponentów znanych z HTML, konieczne będzie załadowanie odpowiedniej przestrzeni nazw w deklaracji
okna.
<window
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
XUL – interfejs użytkownika przyszłości?
81
Przykład 7 element tree prezentujący rozwijane drzewo kategorii
wraz z ikonami
Od tego momentu możemy odwołać się do znanych z HTML tagów
np. w ten sposób:
<html:div> To jest <html:i>przykładowe</html:i> wnętrze
div</html:div>
Rysowanie w XUL – element Canvas
Programy, to nie tylko pola edycyjne, ale również grafika. Dzięki możliwości wykorzystania
elementów HTML, możemy w prosty sposób
zagnieździć na ekranie element <canvas>, którego przeznaczeniem będzie oprogramowanie
Przykład 8 Zegarek grafiki. Element ten nie jest zawarty w stanrenderowany dzięki dardzie HTML wersji 4 – zawarty jest dopiero w nadchodzącej wersji 5. Nie jest też imobiektowi canvas
plementowany we wszystkich przeglądarkach
WWW. Na szczęście, dzięki przezorności programistów związanych z FireFox, możemy cieszyć się jego możliwościami w XUL.
Element ten zagnieżdżamy w następujący sposób:
82
Robert Partyka
<html:canvas id="MyCanvas" width="400" height="300">
</html:canvas>
Dzięki interfejsowi JavaScript, możemy na nim rysować i dokonywać przekształceń obrazu. Dodatkowo warto wspomnieć, iż trwają
prace nad implementacją API OpenGL w JavaScript, w celu zapewnienia sprzętowej akceleracji 3D w tym obiekcie.
Trochę więcej edycji – technologia Midas
Często potrzebna nam jest bardziej zaawansowana edycja tekstu, niż
tylko prosty textbox. Przydatne bywa pogrubianie, zmienianie stylu i koloru. W FireFox umożliwia to technologia Midas, która implementuje edytowalny element iframe (odpowiednik edytowalnych
div/iframe z IE). O technologii tej nie zapomniano także w XUL. Dostępny jest specjalny komponent – <edit>, dzięki któremu można osadzać w programie WYSWIGowy edytor HTML.
Dzięki elastyczności XUL, możliwe jest także przełączenie elementu iframe w tryb edycji, jak i osadzenie obiektu iframe (z przełączeniem w tryb edycji) z przestrzeni nazw HTML.
Komponent ten dostarcza tylko przestrzeni edycyjnej. Wywołania komend takich jak pogrubianie, pochylanie, zmiana kolorów, itd.,
muszą być oprogramowywane z poziomu JavaScript. Ta pozorna niewygoda przekłada się w wysoką niezależność w komponowaniu interfejsu użytkownika. Pozostaje jedynie mieć nadzieję, iż technologia
Midas będzie dalej rozwijana i pojawią się w niej kolejne możliwości.
Wydruki
Aplikacje to nie tylko przetwarzanie danych. Klient bardzo często wymaga od oprogramowania możliwości wydruku wygenerowanego raportu.
Z przykrością należy stwierdzić, iż ta część silnika Gecko oraz
samego FireFoksa potraktowana jest niestety po macoszemu. O ile
XUL – interfejs użytkownika przyszłości?
83
wydruk sam w sobie nie stanowi większego problemu, to droga przez
ciernie zaczyna się, gdy chcemy stworzyć podgląd wydruku. Czeka
nas wówczas przebijanie się przez źródła FireFox i składanie szczątkowej wiedzy, rozsianej po całej sieci.
Pamiętać należy, iż okna zdefiniowane w XUL nie posiadają możliwości wydruku. Aby ją, należy wygenerować raport w postaci dokumentu HTML, załadować go do komponentu iframe i przełączyć tenże
w tryb podglądu wydruku. Tylko jak tego dokonać?
Najprostszym sposobem 1 jest wykorzystanie tych samych technik, których używa sama przeglądarka FireFox. Uruchomienie podglądu wydruku w tej przeglądarce odbywa się poprzez procedury zapisane w JavaScript i zdefiniowane w XUL fragmenty interfejsu.
Tutaj napotykamy pierwszą przeszkodę. Skrypty, które tak głęboko odwołują się do sprzętu, muszą pracować ze specjalnym poziomem uprawnień. By to zapewnić, wywołujemy about:config w pasku
adresu. Następnie odnajdujemy zmienną
signed.applets.codebase principal support
i ustawiamy ją na true. Ale to nie wszystko. W każdej funkcji związanej z podglądem wydruku, jako pierwsze wywołujemy żądanie udostępnienia odpowiednich uprawnień:
netscape.security.PrivilegeManager.⇒
⇒enablePrivilege(’UniversalXPConnect’);
Programowanie interfejsu zaczynamy od załadowania biblioteki
printUtils.js wchodzącej w skład pakietu FireFox/Gecko.
<script type="application/x-javascript"
src="chrome://global/content/printUtils.js" />
Definiujemy potrzebne elementy GUI. Uwaga: ”id” elementów mają znaczenie.
<toolbar id="navigator-toolbox">
<toolbarbutton label="Print preview"
1 technika ta jest wynikiem przeszukiwań zasobów sieci i może być niekompletna; jeśli
potrafisz wykonać to lepiej -– zachęcam do dyskusji w ramach wykładu
84
Robert Partyka
oncommand="PrintPreview()"/>
<toolbarbutton label="Page setup"
oncommand="PageSetup()"/>
</toolbar>
<hbox flex="1" id="browser">
<browser src="http://url.do.mojego.rapotu"
id="content" flex="1"
style="margin: 25px;"/>
</hbox>
Prostsza część zadania za nami. Przystępujemy do zdefiniowania
potrzebnych funkcji JavaScript. Poniższe dwie funkcje wymagane są
przez bibliotekę printUtils.js – tworzymy je więc:
function
{
return
}
function
{
return
}
getPPBrowser()
document.getElementById(’content’);
getNavToolbox()
document.getElementById(’navigator-toolbox’);
dodajemy zmienną blokującą wielokrotne wykonanie funkcji:
var inPrintMode = false;
deklarujemy funkcje wejścia i wyjścia w tryb podglądu:
function onEnter() {
inPrintMode=true;
document.getElementById(’navigator-toolbox’).style.display = ’none’;
return true; }
function onExit() {
inPrintMode=false;
document.getElementById(’navigator-toolbox’).style.display = ’-moz-box’;
return true; }
XUL – interfejs użytkownika przyszłości?
85
oraz funkcje, które wywołamy na życzenie użytkownika:
function PrintPreview(){
if ( inPrintMode ) return;
netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’);
var ewin = document.getElementById(’content’).contentWindow;
PrintUtils.printPreview(onEnter, onExit, ewin);
}
function PageSetup(){
netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’);
var ewin = document.getElementById(’content’).contentWindow;
PrintUtils.showPageSetup();
}
function ExitPrintPreview(){
if ( !inPrintMode ) return;
netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’);
var ewin = document.getElementById(’content’).contentWindow;
PrintUtils.exitPrintPreview(ewin);
}
function Print(){
netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’);
var ewin = document.getElementById(’content’).contentWindow;
PrintUtils.print(ewin);
}
Dodatkowo definiujemy plik binding.xml będący rozszerzeniem
elementów XUL dzięki technologii XBL:
<?xml version="1.0"?>
<bindings
xmlns="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
86
Robert Partyka
<binding id="myprinttoolbar">
<resources>
</resources>
<content>
<xul:toolbarbutton label="Exit print preview" oncommand="ExitPrintPreview()"/>
<xul:toolbarbutton label="Print" oncommand="Print()"/>
</content>
<implementation>
<constructor></constructor>
<destructor></destructor>
</implementation>
</binding>
</bindings>
Oraz plik binding.css o zawartości:
toolbar[printpreview="true"] {
-moz-binding: url(http://moj.url/binding.xml#myprinttoolbar);
}
Powyższe trzy wiersze stylu muszą znajdować się w zewnętrznym
pliku CSS – inaczej zostaną zignorowane. Łącząc powyższe w jedną
całość, otrzymujemy podgląd wydruku zagnieżdżony w naszej aplikacji. Niestety – praktyka pokazuje, że to, co widzimy na podglądzie,
niekoniecznie musi być tym, co otrzymamy na wydruku. Podsystem
druku Gecko jest jednak niedopracowany i wymaga dalszego rozwoju. Miejmy nadzieję, że fundacja Mozilli nie zaniedba tego ważnego
dla każdej aplikacji elementu.
Zamiast powyższego, polecam generowanie plików PDF po stronie serwera i wysyłanie ich z odpowiednimi nagłówkami do klienta.
Tylko mozilla? Prism
W chwili obecnej jedynie silnik Gecko dostarczany przez fundację Mozilla posiada pełną implementację XUL. Z tej przyczyny możliwość jej
XUL – interfejs użytkownika przyszłości?
87
wykorzystania zawęża się tylko do FireFoksa. Dla niektórych może
być to wada, dla innych zaleta (koniec z dopasowywaniem rozwiązania zgodnie z zasadą „Twórz dla FireFox, dopasuj do Opera i IE – nie
ma innej drogi”).
Rynek biznesowy rządzi się jednak swoimi prawami – jeżeli klient
odmawia migracji na produkty Mozilli, możemy posiłkować się rozwiązaniem Prism, które rozwijane jest w ramach tej fundacji.
Prism, to nic innego jak połączenie silnika Gecko wyjętego z FireFox i przystosowanego do uruchomienia z programem ułatwiającym
konfigurację uruchomienia aplikacji sieciowej, niezależnie od przeglądarki 2. Rozwiązanie to posiada kilka istotnych zalet. Pierwszą z nich
jest uruchamianie niezależnego procesu dla każdej aplikacji sieciowej – koniec z zawieszeniem całej przeglądarki przez źle napisany JavaScript, od teraz stracimy tylko efekty pracy w jednym oknie. Drugą
istotną zaletą jest wygląd, sugerujący działanie jako aplikacji lokalnej.
Nie widzimy żadnych pasków adresu, zadań, przycisków nawigacyjnych, itp.
Podsumowując, XUL jest bardzo wygodnym narzędziem do tworzenia i rozwijania interfejsu użytkownika. Pozwala sprawnie tworzyć
rozszerzenia FireFox, aplikacje klasyczne jak i sieciowe. Ograniczenia
w zastosowaniu tylko do produktów fundacji Mozilla, rekompensowane jest wysokim stopniem niezależności od systemu operacyjnego,
migracja pomiędzy platformami stała się jeszcze prostsza. Mam nadzieję, że udało mi się zachęcić do głębszego spojrzenia na tę technologię.
Więcej o XUL znaleźć można na stronach Mozilla Developer Center: http://developer.mozilla.org/en/XUL
2 rozwiązanie znane jest pod nazwą XULRunner
Blender a wizerunek i reklama firmy
bardziej i mniej typowe
zastosowania Blendera
Wojciech Rakszawski
Blender został zaprojektowany jako program do tworzenia grafiki trójwymiarowej oraz animacji. W tych zastosowaniach sprawdza się świetnie. Dowody można znaleźć w galeriach na blender.pl,
blender3d.pl, czy oglądając chociażby „Elephants Dream”[1]. Pomimo swojego aktualnie otwartego charakteru, stanowi coraz poważniejszą konkurencję dla komercyjnych potęg, takich jak Maya czy
najnowszy 3D Studio Max[2,3]. Jego zalety docenili twórcy „SpiderMan 2” – filmu, dla którego stanowił bazę efektów specjalnych. W sieci znaleźć można również informacje o filmie „Plumíferos”[4,5], który
jest stworzony wyłącznie za pomocą narzędzi Open Source. Jest to
prawdopodobnie pierwszy film pełnometrażowy w całości animowany
w Blenderze.
Na tym jednak możliwości Blendera się nie kończą. Bez większych problemów można go używać jako narzędzia do wspomagania rysunku technicznego czy innych bardzo nietypowych pomysłów,
wymaganych na pierwszym roku budownictwa Politechniki Śląskiej.
Osobiście używałem go jako aplikacji pozwalającej sklecić wizualizację budynku albo elementów mechanicznych „na szybko”. Przydał
się także jako baza dla pełnowymiarowych modeli budynków. Dzięki
Blender a wizerunek i reklama firmy
89
mnogości formatów, do których można nasze modele wyeksportować
(DirectX, mapa do Quake 3) stanowi ciekawą propozycję dla początkujących twórców gier 3D.
Jeśli ktoś programuje w Pythonie, powinien zapoznać się z API
Blendera. Wiedza ta pozwoli mu stworzyć zaawansowane animacje,
napisać własne gry albo rozszerzać możliwości programu za pomocą
swoich narzędzi i plug-in’ów. Wszystko to za pomocą kilku (-set czy
tysięcy) wierszy kodu.
Co bardzo istotne, Blender udostępnia dwa mechanizmy kopiowania obiektu. Pierwszy tworzy tylko kopię obiektu oraz kopię siatki
i ten sposób będzie dalej nazywany kopiowaniem. Drugi tworzy kopię obiektu, jednak obydwa obiekty korzystają ze wspólnej siatki. Ten
sposób będę nazywał dalej klonowaniem. Komuś takie rozwiązanie
może wydawać się dziwne, jednak w różnych sytuacjach przydają się
różnice w zachowaniach tak tworzonych obiektów. Przykład i krótkie
omówienie znajdą państwo w dalszej części tekstu.
Odpowiednie podejście do problemów
Nadszedł czas na konkrety. Od tego miejsca postaram się pokazać
na konkretnym przykładzie, jak wykorzystać możliwości Blendera
w promocji produktu.
Wprowadzenie
taktyczne:
załóżmy, że prowadzimy firmę informatyczną X,
zajmującą się zagadnieniami bezpieczeństwa.
Naszą najnowszą linią produktów jest firewall,
antywirus oraz system wykrywający
nieprawidłowe zachowania w sieci.
Cel:
sprzedać jak najwięcej naszych produktów
firmie Y.
Ważne informacje: Y to przedsiębiorstwo małe, więc nie posiada
swojego działu IT. Za zakup oprogramowania
odpowiada szef J. Kowalski, który nie zna się
na komputerach.
90
Wojciech Rakszawski
Slajd 1
Wiadomo już na starcie, że informacje
o wirusach, crackerach i spamie pan
Jan zaszereguje gdzieś pomiędzy mitologią grecką a „Władcą pierścieni.” Pokiwa
trochę głową, zerknie na slajdy takie jak
slajd 1 (przedstawiający schemat ataku
na firmę), na koniec podziękuje i zapomni o naszej wizycie.
Spróbujmy sprawić, by pan Jan
choć trochę zrozumiał, na czym polega niebezpieczeństwo i co on może zrobić, by się ochronić. Najlepszym pomysłem wydaje się prezentacja krótkich filmików, pokazujących, jak będzie rósł poziom bezpieczeństwa przy zakupie kolejnych produktów z naszej linii.
Tworzenie animacji promocyjnej [6]
Pierwsze kroki – modelowanie komputerów
Zaczynamy praktycznie od pustej sceny, na której znajduje się tylko
kamera, źródło światła i sześcian.
Zmieniamy układ okien, wstawiamy kratownicę (spacja->add>Latice) i z pomocą śledzenia (Ctrl+T) celujemy na nią kamerę. Następnie za pomocą operacji: przesuwania, skalowania i wytłaczania,
zmieniamy sześcian w coś, co może symbolizować firmowy serwer.
Na koniec robimy kilka klonów serwera.
Teraz należy stworzyć uniwersalny symbol internetu, czyli
chmurkę. Najlepszy może się tu okazać cylinder. Wstawiamy kolejny
sześcian i zmieniamy go w prostopadłościan, który będzie symbolizować firewall. Tworzymy też kilka (o jeden mniej niż serwerów) klonów
Blender a wizerunek i reklama firmy
91
Slajd 2 pusta scena
Slajd 3 pierwsze obiekty
płonących ścian. Ostatni dodawany sześcian zmieniamy w monitor,
który zagra rolę maszyny crackera.
92
Wojciech Rakszawski
Slajd 4 wszystkie maszyny
Jak proste są krzywe – tworzenie kabli za pomocą krzywych
Pozostało nam połączyć maszyny skrętką. Dobry efekt można uzyskać
za pomocą krzywych. Wstawiamy więc kilka takich krzywych i wyznaczamy za ich pomocą przebieg kabli. Jeśli jesteśmy zadowoleni z efektu, robimy kopię krzywych i umieszczamy je w innej warstwie – nie są
w tej chwili potrzebne. Należy dodać jeszcze jedną krzywą zamkniętą,
która będzie miała kształt przekroju kabla. Na koniec wykorzystujemy
technikę „powlekania”. Dzięki tej sztuczce, za pomocą kilku kliknięć
myszki, możemy stworzyć kilometry kabli, które będą miały taki sam
układ, jak stworzone krzywe.
Wstawiamy sferę, symbolizującą pakiet danych. Skalujemy ją
tak, by była niewiele większa od przekroju kabla.
Należy stworzyć jeszcze dwie kopie kulki, tak aby w sumie mieć
reprezentację: pakietu „próby włamu”, odmowy dostępu oraz pełnego
dostępu i przesyłania poufnych danych. W tym momencie wszystkie
obiekty są gotowe.
Blender a wizerunek i reklama firmy
Slajd 5 razem z kablami
Slajd 6 oto pakiet
93
94
Wojciech Rakszawski
„Chodź, pomaluj mój świat” – krótko o materiałach i teksturach
Mając już całkiem niezłą bazę dla animacji, należy ubarwić scenę.
Większość obiektów będzie jednokolorowa, więc edycja sprowadzi się
do wybrania materiału (F5), dodania go do konkretnego obiektu, a następnie zmiany koloru (oraz opcjonalnie nazwy) materiału i przejścia
do kolejnego obiektu. W tym miejscu ujawnią się zalety klonowania,
o których wspomniałem wyżej: wystarczy pokryć materiałem jeden
obiekt, a reszta klonów przybierze takie same barwy. Dzieje się tak,
ponieważ materiał jest przypisywany do siatki, nie zaś do obiektu. Ja
dobrałem kolory takie, jak na poniższym przykładzie.
Dla lepszego efektu można pokryć płonące ściany teksturą. Wystarczy, korzystając z menu materiału, dodać teksturę, przejść do menu tekstury (F6) i podać ścieżkę do odpowiedniego pliku .jpeg, .gif,
czy innych, podobnych formatów. Podobnie postąpimy z ekranem hakera, dodając mu piracką banderę. Tu ważna informacja: w oknach
z widokiem 3D widać tylko kolor materiałów. Program pomija wszelkie tekstury, odbicia, przeźroczystość i inne wodotryski, bo dzięki temu może pracować płynnie, nawet na wolniejszych maszynach. Programiści przygotowali w zamian przydatną opcję, kombinacja Shift+P
otwiera okno „podglądu renderera”, które pozwala podejrzeć, jak będzie wyglądał efekt renderingu fragmentu sceny, który w danym momencie wskażemy.
złej baletnicy. . . – dodawanie ruchu do animacji
Nadszedł czas na końcowy etap tworzenia animacji – dodanie ruchu.
W tym miejscu przydadzą się kopie krzywych, które odłożyliśmy wcześniej do innej warstwy. Wykorzystamy je jako tory ruchu dla naszych
kulek-pakietów. Dzięki temu zabiegowi zaoszczędzimy sporo pracy
przy edycji ruchu obiektów, a wynik będzie bardzo estetyczny.
Blender a wizerunek i reklama firmy
95
Slajd 7 pokolorowane i oteksturowane
Napotkamy w tym miejscu na niewielką komplikację: krzywa może być tylko jednym torem ruchu naraz. Powoduje ona poważne konsekwencje – do jednej krzywej można przypisać tylko obiekty lecące w jednym kierunku, razem i na dodatek naraz. By ominąć problem, najprościej będzie wykonać kilka kopii danej krzywej, a do każdej z nich przypisać jedną kulę-pakiet. Kabel od hakera do sieci będzie wymagał utworzenia trzech kopii toru, a tory z sieci do serwera
(przechodzące przez płonące ściany) – dwie. Do każdego toru podpinamy pakiet jednego rodzaju. Dokonujemy tego za pomocą klawiszy
Ctrl+P i wyboru Follow Path. Poniższa ilustracja przedstawia ostateczny układ krzywych i pakietów.
Krzywe zostały ustawione jedna nad drugą dla większej czytelności. W końcowej animacji zostaną nałożone na siebie.
Ostatnią czynnością będzie edycja krzywych IPO, odpowiedzialnych za animację po ścieżce. Wystarczy, że w oknie edycji IPO zaznaczymy krzywą (patrz: prawa strona slajdu nr 8), a następnie w pasku
na dole, w pierwszym menu typu box, zmienimy wartość z Object
na Path i klikniemy gdziekolwiek w obrębie okna LKM z wciśniętym
96
Wojciech Rakszawski
Slajd 8 ustawienie pakietów na torach ruchu
klawiszem Ctrl. Dodamy w ten sposób krzywą IPO, odpowiadającą za
położenie obiektu na torze w danym momencie animacji. Teraz wystarczy wejść w tryb edycji krzywej klawiszem Tab, dodać drugi punkt
(Ctrl+LPM) i ustawić te punkty tak, by animowany pakiet zaczynał
i kończył ruch w odpowiednich momentach i miejscach. Dla lepszego
efektu (brak przyspieszania na początku i zwalniania na końcu ruchu
pakietu), należy zaznaczyć oba wierzchołki krzywej i wcisnąć klawisz
V. To sprawi, że pakiet będzie „zachowywał się” bardziej wiarygodnie.
Końcowy efekt animacji mógłby być podobny do poniższego.
Światła! Kamera! Akcja! – rendering animacji od kuchni
Teraz wykonamy część, która niejednej maszynie o dużej mocy obliczeniowej da popalić: rendering całej animacji. Zanim to nastąpi,
dokonujemy odpowiednich zmian w menu renderingu (F10). Najważniejsze, by określić format wyjściowy, klatkę początku i końca animacji, a także katalog, do którego zostanie zapisany końcowy efekt.
Formaty, które możemy wybrać do zapisu animacji, to na przykład:
Blender a wizerunek i reklama firmy
97
Slajd 9 pojedyncza klatka animacji
FFMpeg, AVI JPEG, AVI RAW czy też JPEG, GIF, PNG, TARGA (TGA)
czy parę innych. W tym drugim przypadku otrzymamy serię pojedynczych klatek, które da się złożyć w animację w Blenderze lub innym
programie.
Osobiście skłaniam się ku drugiemu rozwiązaniu, ponieważ przy
średnio złożonej klatce rendering trwa zazwyczaj kilkanaście sekund
(choć może dochodzić nawet do kilku godzin). Pamiętajmy, że każde 10
sekund filmu to przy standardowych ustawieniach około 250 klatek.
W zależności od tego, jak bardzo złożony jest materiał źródłowy, możemy spodziewać się od kilku godzin do nawet kilku dni pełnego obciążenia maszyny. W takiej sytuacji o awarię nietrudno. Zapisywanie
każdej klatki animacji w statycznym obrazie sprawi, że w przypadku
awarii zasilania stracimy tylko jedną, ostatnio renderowaną klatkę.
Daje to sporą oszczędność czasu i nerwów. Myślę tu głównie o osobach, które – tak jak ja, używają do celów renderingu prywatnego
98
Wojciech Rakszawski
komputera. Ponowny rozruch maszyny zajmuje zdecydowanie mniej
czasu, niż ponowne przeliczanie wszystkich klatek od początku.
No i zrobione!
Myślę że po takiej prezentacji problemu, pan Jan przychylniej spojrzy na ofertę naszej firmy i, być może, na zakupie firewalla się nie
skończy. Na podobnej zasadzie można stworzyć proste intro dla znaku towarowego swojej firmy, bądź dla innych, promocyjnych celów.
W materiale celowo nie poruszyłem kwestii wykorzystania silnika gier Blendera do tworzenia prezentacji, ponieważ tajniki tej części
programu poznawałem dopiero podczas pisania niniejszego tekstu.
Literatura:
[1] http://www.blender.org
[2] http://www.tdt3d.be/articles_viewer.php?art_id=99
[3] http://wiki.cgsociety.org/index.php/Comparison_of_3d_tools
[4] http://plumiferos.com/wiki/index.php/Main_Page
[5] http://en.wikipedia.org/wiki/Plum%C3%ADferos
[6] Blender 2.3. Oficjalny podręcznik; Ton Roosendaal, Stefano
Selleri, Helion, Gliwice 2005

Podobne dokumenty