Wstęp
Witaj czytelniku!
Witaj w ekscytującym świecie programowania w systemie Linux!
Jeśli znasz już jakieś książki z tej dziedziny, to przygotuj się na następną
radosną przygodę z Linuksem. Jeżeli jest to Twoje pierwsze spotkanie z
książkami o programowaniu w tym systemie, to bardzo szybko przekonasz się, że
dokonałeś właściwego wyboru.
Dla kogo jest przeznaczona ta książka?
Książka jest adresowana do zaawansowanych programistów w systemie Linux oraz
tych, którzy chcą tworzyć programy działające w tym najbardziej ekscytującym
systemie operacyjnym. Przedstawiony w niej materiał został starannie dobrany na
podstawie znajomości zagadnień najczęściej spotykanych w zawodowej praktyce
programistów. Obejmuje on praktyczne informacje o bibliotekach, metodologii,
narzędziach i aplikacjach przeznaczonych dla programistów linuksowych.
Wszechstronność i możliwość wyboru dają każdemu szansę na znalezienie czegoś
szczególnie interesującego. Wyczerpujące omówienie zagadnień zyska uznanie
nawet zawodowych programistów studiujących tę książkę. Dołożyliśmy wszelkich
starań, aby zachować równowagę między zakresem omawianych zagadnień a ich
szczegółowością.
Niezależnie od tego, czy jesteś doświadczonym programistą linuksowym, czy też
masz zamiar takim się stać jest to książka dla Ciebie.
Tematyka książki
W książce przedstawiamy wiele narzędzi, bibliotek i technik programowania,
które powinien znać każdy programista linuksowy, jak również bardziej
zaawansowane zagadnienia, z którymi w systemie Linux spotka się programista
zawodowy.
Skoncentrujemy się na praktyce tam gdzie jest to konieczne, zamieszczamy
przykłady wspomagające i objaśniające rozważania teoretyczne. Książka skupia
się wokół przykładowej aplikacji, która będzie budowana stopniowo w kolejnych
rozdziałach. Wprowadzając różne narzędzia, biblioteki i techniki programowania,
będziemy tworzyć aplikację do obsługi wypożyczalni płyt DVD.
Wyróżniliśmy tu dwie kategorie rozdziałów: rozdziały tematyczne, w których
omówione są zagadnienia ściśle związane z tematem przewodnim książki (czyli
aplikacją do obsługi wypożyczalni płyt DVD), oraz rozdziały rozszerzające, w
których przedstawiono szereg problemów interesujących zawodowych programistów.
Celowo nie zachowaliśmy tu osobnej kolejności obydwu rodzajów rozdziałów, ale
wstawiliśmy rozdziały rozszerzające pomiędzy rozdziały tematyczne, tworząc
swoiste "przystanki".
Rozróżnienie dwóch rodzajów rozdziałów nie oznacza, że zagadnienia poruszane w
jednej grupie są ważniejsze niż zagadnienia omawiane w drugiej grupie
rozdziałów. Rozdziały tematyczne różnią się także między sobą zakresem
materiału opisującego temat przewodni. Każdy rozdział stanowi podręcznik
zawierający wiele przykładów praktycznego zastosowania teorii. Czegóż więc
należy się spodziewać?
Rozdział 1. rozpoczniemy od przeglądu zagadnień występujących podczas
projektowania aplikacji. Następnie omówimy aplikację do obsługi wypożyczalni
płyt DVD, która będzie kanwą rozdziałów tematycznych. Wyjaśnimy sposoby
definiowania i formalizowania wymagań naszej aplikacji. Cel tego rozdziału
zostanie osiągnięty po przekształceniu tych wymagań na API. [1 API jest skrótem
od Application Programming Interface i oznacza interfejs aplikacji dla
programisty. W dalszych częściach książki skrót ten będzie konsekwentnie
stosowany bez rozwijania, podobnie jak inne skróty tego rodzaju, np. GUI
oznaczający graficzny interfejs programu (przypis tłumacza).]
Podczas pracy przy dowolnej aplikacji zawsze trzeba rejestrować zmiany
dokonywane w kodzie. Można to czynić ręcznie, jeżeli pracujemy nad własnym
projektem i gdy zakres projektu nie jest zbyt obszerny. Zarządzanie dużym
projektem lub praca zespołowa wymagają jednak bardziej efektywnych narzędzi. W
rozdziale 2. omówimy taki wydajny system kontroli kodu źródłowego o nazwie
Concurrent Versions Systems (CVS). Pokażemy w nim sposób instalacji i
użytkowania CVS oraz zbadamy jedną z największych zalet tego systemu: możliwość
pracy sieciowej, obejmującej nawet działanie w Internecie.
Po podjęciu decyzji o wyborze relacyjnej bazy danych do obsługi wypożyczalni
płyt DVD, w rozdziale 3. przedstawimy krótkie omówienie i porównanie baz mSQL,
MySQL oraz PostgreSQL. Wybrawszy bazę PostgreSQL, pokażemy sposób jej
instalacji i uruchomienia oraz omówimy jej podstawowe polecenia. Następnie
zajmiemy się normalizacją relacyjnych baz danych i przedstawimy kilka poleceń
do zarządzania danymi.
W rozdziale 3. pokażemy sposób dostępu do bazy PostgreSQL za pomocą narzędzia
wiersza poleceń o nazwie psql, zaś w rozdziale 4. omówimy sposób dostępu do
bazy z kodu w języku C, z zastosowaniem biblioteki libpq i wbudowanego języka
SQL. Na zakończenie rozdziału utworzymy już podstawę bazy danych obsługującej
wypożyczalnię płyt DVD.
Rozdział 5. jest pierwszym rozdziałem rozszerzającym. Wybraliśmy wprawdzie
PostgreSQL jako bazę danych dla naszej aplikacji, ale istnieją inne, równie
efektywne bazy, jak np. MySQL. Baza ta sprawdza się doskonale w wielu
zastosowaniach. Omówimy więc tutaj instalację i konfigurację bazy MySQL oraz
zarządzanie nią, a także sposób dostępu do przechowywanych w niej danych z
poziomu kodu w języku C.
Podczas tworzenia aplikacji nie można się uchronić od błędów w kodzie. Rozdział
6. zawiera omówienie niektórych narzędzi i technik programowania stosowanych
przy oczyszczaniu kodu z błędów. Efektywna sygnalizacja błędów bardzo pomaga
przy ich usuwaniu. Opiszemy tu różne sposoby umieszczania deklaracji debuggera
w kodzie programu, omówimy także zastosowanie zakotwiczeń. Następnie pokażemy
sposób uzyskiwania informacji o wynikach śledzenia działań programu. Ostatnia
część tego rozdziału jest poświęcona debuggerowi GNU (GDB) i opisuje niektóre
jego polecenia.
Czasami wygodniej jest skorzystać z usług serwera LDAP niż z bazy danych.
Następny rozdział rozszerzający opisuje więc różne rodzaje serwerów LDAP,
koncentrując się na bezpłatnym pakiecie o nazwie OpenLDAP. Omówimy instalację,
konfigurację i uruchamianie tego serwera oraz objaśnimy strukturę
przechowywanych w nim danych. Oprócz tego pokażemy sposób dostępu do serwera
OpenLDAP z poziomu własnego kodu, w tym manipulację danymi i ich wyszukiwanie.
W rozdziale 8. omówimy zestaw wydajnych bibliotek używanych do tworzenia GUI, a
mianowicie GTK+ i GNOME. Na początku zajmiemy się biblioteką glib, dzięki
której możliwe jest zarządzanie danymi z innych bibliotek GTK+ i GNOME.
Pokażemy również zastosowanie GTK+ i GNOME do budowy prostego, lecz zarazem
funkcjonalnego graficznego interfejsu programu. Zamieścimy tu także strukturę
źródłową pakietu GNOME i opiszemy zarządzanie sesją.
Na podstawie informacji o pakietach GTK+/GNOME możemy w następnym rozdziale
tematycznym zająć się budową interfejsu graficznego dla aplikacji obsługującej
wypożyczalnię płyt DVD. Na początku omówimy pakiet do budowy interfejsów o
nazwie Glade, a następnie podamy szczegółowy opis naszego własnego interfejsu
graficznego zbudowanego za pomocą tego pakietu.
Następnie nadejdzie pora na kolejny "przystanek", na którym zajmiemy się
programami Flex i Bison. Flex służy do tworzenia programów do analizy
leksykalnej, czyli skanerów, a Bison jest wykorzystywany do budowy analizatorów
składni. W rozdziale 10. omówimy zastosowania tych nadzwyczaj wydajnych
programów narzędziowych.
Kolejny rozdział jest poświęcony różnym metodom i narzędziom używanym do
testowania tworzonej aplikacji. Opiszemy w nim testy wykorzystania pamięci i
testy wydajności oraz instalację i sposób użycia biblioteki mpatrol.
W rozdziale 12. należącym do kategorii rozdziałów rozszerzających zajmiemy się
programowaniem zabezpieczeń w Linuksie. Omówimy w nim bezpieczeństwo systemu
plików, potwierdzanie tożsamości użytkownika, tzw. Pluggable Authentication
Modules (PAM), zagadnienia kryptograficzne i bezpieczeństwo oprogramowania
sieciowego. Opiszemy również pewne zagadnienia związane z bezpieczeństwem w
językach C/C++, Perl, Python i PHP.
GTK+ i GNOME nie są jedynymi pakietami, które można wykorzystać w Linuksie do
budowy interfejsu graficznego. Równie wydajne i popularne są biblioteki Qt i
KDE wykorzystujące język C++. W rozdziale 13. zajmiemy się ich instalacją i
zastosowaniami.
Na następnym "przystanku" omawiany będzie Python. Jest to popularny,
interpretowany i obiektowy język wysokiego poziomu. Opiszemy tu instalację i
różne tryby działania tego pakietu, a następnie używane w nim typy danych i
składnię poleceń.
W rozdziale 16. opiszemy jeden z najbardziej popularnych języków skryptowych
używanych na serwerach, czyli PHP. Pokażemy sposób instalacji i konfiguracji
PHP oraz składnię jego poleceń. Następnie omówimy sposób wykorzystania PHP do
zbudowania interfejsu dla naszej aplikacji obsługującej wypożyczalnię płyt
DVD.
W następnym rozdziale, wykorzystując informacje o języku Python podane w
rozdziale 15., przedstawimy sposób jego rozszerzenia za pomocą C++. Posłużymy
się pakietem SWIG (Simplified Interface Wrapper Generator) oraz API języka
Python.
W rozdziale 18. najpierw pokażemy sposób komunikowania się aplikacji za pomocą
gniazd sieciowych, a następnie zajmiemy się głównym problemem, czyli zdalnym
wywoływaniem procedur (Remote Procedure Calls, w skrócie RPC). Pokażemy
zastosowanie RPC do tworzenia aplikacji obsługującej nowy oddział wypożyczalni
płyt DVD, korzystający z jednej scentralizowanej bazy danych.
W rozdziale 19. zajmiemy się oprogramowaniem obsługującym multimedia. Jest to
jedyna dziedzina, w której Linux zostaje w tyle za innymi systemami
operacyjnymi, głównie z powodu braku sterowników do urządzeń. Przedstawimy tu
sposób obsługi urządzeń dźwiękowych oraz skrótowo omówimy linuksowe programy do
obsługi filmów i animowanej grafiki.
Użycie RPC bywa efektywne, ale do budowy rozproszonych aplikacji obiektowych
znacznie bardziej nadaje się CORBA. Rozdział 20. stanowi wstęp do opisu tego
modelu. Zapoznamy w nim czytelnika z różnymi składnikami i warstwami modelu
CORBA, pokazując ich wzajemne oddziaływania.
W następnym rozdziale, wykorzystując wcześniej podane informacje o modelu
CORBA, posłużymy się pakietem ORBit z GNOME do budowy naszej przewodniej
aplikacji. Omówimy także usługi CORBAServices.
W rozdziale 22. przerwiemy na chwilę tworzenie naszej aplikacji do obsługi
wypożyczalni i opiszemy systemy bezdyskowe oraz sposób ich wykorzystania w
Linuksie.
W rozdziale 23. przedstawimy jedno z najciekawszych współczesnych zagadnień,
czyli język XML. Wprowadzenie do struktury i składni dokumentów XML podamy na
przykładzie katalogu naszej wypożyczalni DVD. Język ten jest idealnym
rozwiązaniem dla importu katalogów do naszej bazy płyt DVD. Omówimy podstawy
języka XML i wyjaśniamy, czym jest DTD, a następnie pokażemy sposób
przetwarzania dokumentów XML za pomocą pakietu SAX (Simple API for XML).
W następnym przerywniku zapoznamy Czytelnika z architekturą i konfiguracją
oprogramowania dla klastrów o nazwie Beowulf. Omówimy także tworzenie programów
dla klastrów Beowulf z wykorzystaniem dwóch popularnych bibliotek
przekazujących komunikaty: Message Passing Interface (MPI) i Parallel Virtual
Machine (PVM).
Odpowiednia dokumentacja jest bardzo ważną częścią projektu oprogramowania. W
rozdziale 25. objaśnimy różne rodzaje dokumentacji wymagane dla różnych
kategorii użytkowników. Opiszemy w nim wiele formatów dokumentacji: strony
podręcznika systemowego (man), HTML, XML, TeX, DocBook, czysty tekst (POD,
czyli Plain Old Document) i PDF. Rozdział ten zawiera również informację na
temat tzw. "programowania literackiego".
Rozdział 26. jest poświęcony ważnemu zagadnieniu w programach tworzących jądro
systemu, a mianowicie sterownikom urządzeń. Wyjaśnimy w nim również sposób
obsługi magistrali PCI przez jądro Linuksa.
Przygotowanie aplikacji do rozpowszechnienia interesuje każdego twórcę
programu. W rozdziale 27. zajmiemy się więc programem do zarządzania pakietami
o nazwie RPM (RedHat Package Manager), opisując instalowanie, aktualizację i
odinstalowywanie pakietów RPM. Na przykładzie naszej aplikacji przewodniej
pokażemy także sposób budowy pakietu. Omówimy zastosowania poleceń configure,
autoconf i automake do tworzenia standardowego katalogu źródłowej dystrybucji
oraz sposób tworzenia łat.
Na końcu naszej wyprawy do świata programowania w systemie Linux znajduje się
tworzenie różnych wersji językowych. W rozdziale 28. przedstawimy różne modele,
techniki i zagadnienia związane z przystosowaniem aplikacji do pracy w różnych
środowiskach językowych.
Czego wymagamy od czytelnika książki?
Czytelnik musi mieć dostęp do komputera z systemem Linux i zestawem pakietów
oprogramowania opisywanych w różnych rozdziałach naszej książki. Są to między
innymi pakiety GTK+, GNOME, Glade, Qt, KDE, PostgreSQL, MySQL, LDAP, Flex,
Bison, Python, SWIG, ORBit-Python, MPICH i wiele innych. Rzadko kiedy wszystkie
te pakiety są dołączone do spotykanych powszechnie dystrybucji Linuksa, a więc
trzeba je pobrać z sieci we własnym zakresie. Informacje o adresach serwerów
udostępniających te programy podajemy w stosownych miejscach książki.
Chcąc dysponować pełnym kodem źródłowym opisywanym w poszczególnych rozdziałach
książki bez potrzeby wpisywania tego kodu, czytelnik musi także mieć dostęp do
Internetu.
Zakładamy również, że czytelnik potrafi programować w języku C i zna system
Linux. Niektóre rozdziały wymagają pewnej znajomości języka C++.
Kod źródłowy
Przykładowe programy i fragmenty kodu naszej aplikacji najlepiej ilustrujące
omawiane zagadnienia zamieszczamy w treści książki. Pełny kod źródłowy można
uzyskać pod adresem:
ftp://ftp.helion.pl/przyklady/zaprli.zip
Zalecamy pobranie tego kodu w celu zaoszczędzenia czasu traconego na jego
ręczne wpisywanie (prawie cały kod zawarty jest w książce).
Oznaczenia stosowane w książce
Chcąc ułatwić czytanie i śledzenie poszczególnych zagadnień, zastosowaliśmy w
treści książki następujące oznaczenia:
W taki sposób oznaczamy dodatkowe informacje odbiegające od tematu głównego.
Dla wyróżnienia niektórych nazw używamy różnych krojów czcionki:
Nazwy plików oraz słowa wpisywane w wierszu poleceń, w kodzie źródłowym lub
plikach konfiguracyjnych są wyróżniane następująco: struct pci_driver, main.c
lub rpcinfo -p localhost.
Adresy sieciowe zapisywane są jako: www.gnome.org.
Wpisywane przez użytkownika polecenia oznaczone są następująco:
$ gcc -I/usr/include/xml sax1.c -lxml -lz -o sax1
Jeżeli polecenie wpisuje root, to znak zachęty zmieni się na #:
# make install
Jeżeli podajemy zawartość plików, to używamy następującej konwencji oznaczeń:
Wiersze dotyczące bezpośrednio sąsiedniego tekstu książki mają szare tło.
Wiersze, które nie zawierają niczego nowego lub wiersze zawierające wcześniej
omówioną treść, nie mają tła.
Wyszukiwarka
Podobne podstrony:
TI 00 07 10 T pl(1)143 07 (10)TI 00 07 04 T plMIKROBIOLOGIAwyk 07 10 15173 07 (10)07 (10)4 07 10TI 00 07 06 T B pl(1)R 00 07 (9)TI 00 07 05 T pl(1)więcej podobnych podstron