Zaawansowane programowanie w systemie Linux

Autorzy:

Szczegóły książki w Helionie
Tytuł oryginału: Professional Linux Programming
ISBN: 83-7197-495-7
Cena: 149 zł
Oprawa: twarda
Format: B5
Data wydania: 2002.07.24
Liczba stron: 1288
Przykładowy rozdział: ftp://ftp.helion.pl/online/zaprli/zaprli-8.pdf
Kategoria: Linux

Linux nieustannie umacnia swoją obecność w świecie jako platforma systemowa przeznaczona dla zaawansowanych aplikacji. Dojrzewanie i szybki rozwój tego wszechstronnego systemu, zapewniającego całe bogactwo bezpłatnych narzędzi programowania, pozwala mieć pewność, co do jego ugruntowanej pozycji w przyszłości. Przy niewielkim nakładzie sił i środków, system Linux udostępnia szeroki wachlarz narzędzi oraz obsługę nowych lub dopiero powstających technologii. Dzięki temu system Linux, pozwala wybrać i zastosować właściwe rozwiązania w procesie tworzenia aplikacji.

Niniejsza książka pozwala czerpać z praktycznej wiedzy i bogatego doświadczenia autorów w zakresie tworzenia oprogramowania dla systemu Linux. Czytelnik zostanie poprowadzony poprzez proces tworzenia przykładowej aplikacji dla wypożyczalni filmów DVD -- tematycznie opracowane rozdziały podejmują różne aspekty implementacji tej aplikacji. Z kolei samodzielne rozdziały o charakterze dygresyjnym omawiają ważne tematy, które wykraczają poza zakres motywu przewodniego, jakim jest przykładowa aplikacja. Niniejsza monografia podkreśla wagę praktycznych aspektów programowania, pokazuje, jak ważny jest właściwy dobór narzędzi programisty dla określonego zadania, uczy ich poprawnego użycia oraz wskazuje najkrótszą drogę do upragnionego celu.

Zarówno doświadczeni programiści, jak też i ambitni przyszli twórcy oprogramowania w systemie Linux znajdą tutaj mnóstwo praktycznych informacji na tematy takie jak: biblioteki oprogramowania, techniki, narzędzia oraz aplikacje. Od Czytelnika wymaga się znajomości podstaw systemu Linux, dobrej praktycznej znajomości programowania w języku C. Ponadto, zakłada się w niektórych rozdziałach zrozumienie zasad programowania zorientowanego obiektowo w języku C++.

W książce omówiono między innymi :

  • Przechowywanie danych w systemie Linux ze szczególnym uwzględnieniem PostgreSQL, MySQL i XML.
  • Implementacja interfejsów graficznych użytkownika w systemie Linux -- omówienie KDE i GNOME.
  • Interfejsy WWW -- zastosowanie modułu PHP dla serwera Apache.
  • Zastosowanie języka Python -- rozszerzanie i wbudowywanie tego języka.
  • Zastosowanie RPC oraz CORBA do konstrukcji rozproszonych aplikacji obiektowych.
  • Oznaczanie wersji (za pomocą CVS), dokumentacja, internacjonalizacja i dystrybucja projektów.
  • Rozproszone rozwiązania sprzętowe, takie jak bezdyskowy system Linux i klastry Beowulf.

Zaawansowane programowanie w systemie Linux -- spis treści

O Autorach (23)

Wstęp (33)

  • Dla kogo jest przeznaczona ta książka? (33)
  • Tematyka książki (33)
  • Czego wymagamy od czytelnika książki? (37)
  • Kod źródłowy (38)
  • Oznaczenia stosowane w książce (38)

Rozdział 1. Projekt aplikacji (39)

  • Informacje ogólne (39)
  • Formułowanie założeń (41)
  • Modele tworzenia kodu (43)
    • Opracowanie wczesnego prototypu (44)
    • Wczesne i częste testy (45)
  • Wypożyczalnia DVD (45)
    • Założenia wstępne (46)
    • Analiza wymagań klienta (47)
  • Spis wymagań (52)
    • Przypadki użycia (54)
  • Architektura aplikacji (56)
    • Projekt szczegółowy (58)
    • Funkcje dostępu do danych (59)
    • Funkcje związane z danymi klientów (59)
    • Funkcje związane z filmami (62)
    • Funkcje opisujące płytę DVD (63)
    • Funkcje związane z wypożyczaniem (63)
    • Przykładowa implementacja (65)
  • Materiały dodatkowe (65)
  • Podsumowanie (66)

Rozdział 2. CVS (67)

  • Narzędzia dla systemu Linux (68)
  • Terminologia (69)
  • Repozytorium (69)
  • Obsługa CVS przez jednego użytkownika (70)
    • Format polecenia CVS (71)
    • Zmienne środowiskowe (71)
    • Import nowego projektu (72)
    • Początek prac nad projektem w CVS (74)
    • Porównywanie zmian z zawartością repozytorium (75)
    • Aktualizacja repozytorium (76)
    • Wydanie projektu (77)
    • Przeglądanie zmian (78)
    • Dodawanie i usuwanie plików z projektu (79)
    • Rozwinięcia słów kluczowych (79)
  • Korekty, znaczniki i rozgałęzienia (80)
    • Korekty (80)
    • Znaczniki (81)
    • Rozgałęzienia projektu (84)
  • CVS dla wielu użytkowników (89)
    • Praca zespołowa (90)
    • Śledzenie zmian (92)
  • Więcej zabawy z CVS (92)
    • Pliki binarne (92)
    • Poprawianie błędnych adnotacji (93)
  • Sieciowy dostęp do CVS (93)
  • Klienty CVS z interfejsem graficznym (96)
  • Materiały dodatkowe (97)
  • Podsumowanie (98)

Rozdział 3. Bazy danych (101)

  • Wybór bazy danych (102)
    • mSQL (102)
    • MySQL (103)
    • PostgreSQL (103)
    • Jaki wybór będzie odpowiedni? (103)
  • PostgreSQL (104)
    • Instalacja i uruchamianie (104)
      • Tworzenie użytkowników (106)
      • Tworzenie baz danych (107)
      • Tworzenie zapasowych kopii bazy danych (107)
      • Zdalny dostęp (108)
  • Podstawy teorii baz danych (109)
    • Pierwsza postać normalna (110)
    • Druga postać normalna (111)
    • Trzecia postać normalna (111)
    • Denormalizacja (112)
    • Prosta baza danych (112)
  • Korzystanie z psql (117)
    • Polecenia dla psql (117)
    • Polecenia do definicji danych (118)
      • Tworzenie i usuwanie tabel (119)
      • Typy danych w PostgreSQL (123)
    • Polecenia do manipulacji danymi (123)
      • Wstawianie danych (124)
      • Pobieranie danych z pojedynczej tabeli (125)
      • Kombinowane pobieranie danych z wielu tabel (127)
      • Aktualizacja danych w tabeli (129)
      • Usuwanie danych (129)
    • Transakcje (130)
  • Wskazówki dla projektanta bazy danych (132)
  • Materiały dodatkowe (134)
  • Podsumowanie (134)

Rozdział 4. Interfejsy PostgreSQL (135)

  • Dostęp do PostgreSQL z kodu programu (135)
    • Biblioteka libpq (136)
      • Funkcje do obsługi połączeń z bazą danych (137)
      • Uruchamianie poleceń SQL (139)
      • Uzyskiwanie wyników zapytań (142)
    • Biblioteka ecpg (155)
    • Jaką metodę zastosować? (166)
  • Aplikacja (167)
  • Podsumowanie (174)

Rozdział 5. MySQL (175)

  • Instalacja i zarządzanie (175)
    • Pakiety skompilowane (175)
    • Budowanie z plików źródłowych (177)
    • Konfiguracja poinstalacyjna (178)
  • Zarządzanie bazą MySQL (179)
    • Polecenia (179)
      • isamchk (180)
      • mysql (180)
      • mysqladmin (181)
      • mysqlbug (181)
      • mysqldump (181)
      • mysqlimport (182)
      • mysqlshow (182)
    • Tworzenie użytkowników i nadawanie uprawnień (183)
      • grant (183)
      • with grant (184)
      • revoke, delete (185)
    • Hasła (185)
    • Tworzenie bazy danych (186)
  • Obsługa standardu SQL przez PostgreSQL i MySQL (187)
  • Dostęp do danych MySQL z języka C (188)
    • Inicjalizacja połączenia (189)
    • Obsługa błędów (193)
    • Wykonywanie poleceń SQL (194)
      • Polecenia SQL niezwracające danych (194)
      • Polecenia zwracające dane (197)
      • Przetwarzanie zwróconych danych (202)
    • Funkcje dodatkowe (207)
  • Materiały dodatkowe (208)
  • Podsumowanie (208)

Rozdział 6. Zmagania z błędami (209)

  • Typy błędów (209)
  • Zgłaszanie błędów (210)
  • Wykrywanie błędów w oprogramowaniu (214)
  • Rodzaje błędów w oprogramowaniu (214)
  • Instrukcje diagnostyczne (215)
    • Weryfikacja założeń (220)
  • Gdzie jesteś? (222)
    • Ślad wsteczny (backtrace) (226)
  • Usuwanie błędów - czynności wstępne (228)
    • Użycie programu uruchomieniowego (229)
    • Proste polecenia GDB (230)
    • Inne możliwości GDB (234)
  • Zasoby (234)
  • Podsumowanie (235)

Rozdział 7. Usługi katalogowe LDAP (237)

  • Co to jest usługa katalogowa? (237)
    • X.500 i LDAP (238)
  • Struktura serwera katalogowego (239)
    • Nazwy części... (240)
    • Nadawanie nazw dn (241)
      • Schemat nazewnictwa X.500 (241)
      • X.500 ze schematem nazewnictwa domen (241)
      • Schemat nazewnictwa oparty na składniku domeny (241)
    • Składniki obiektów (242)
      • Standardowe typy i atrybuty (243)
    • Drzewo katalogowe LDAP (244)
    • Pliki LDIF (245)
  • Instalacja i konfiguracja serwera LDAP (247)
    • Instalacja OpenLDAP (248)
    • Konfiguracja OpenLDAP (248)
  • Uruchomienie serwera (251)
  • Dostęp do LDAP z poziomu języka C (253)
    • Inicjalizacja biblioteki LDAP (253)
    • Powiązanie z serwerem LDAP (254)
    • Obsługa błędów LDAP (255)
    • Pierwszy program kliencki LDAP (256)
    • Wyszukiwanie (257)
      • Wybór zakresu (257)
      • Filtracja wyników (257)
      • Wyszukiwanie przy użyciu API (260)
      • Sortowanie zwróconych obiektów (266)
  • Zmiana danych (266)
    • Nowy wpis (266)
    • Modyfikacja wpisu (270)
    • Usuwanie wpisu (272)
  • Aplikacja (273)
  • Materiały dodatkowe (273)
  • Podsumowanie (274)

Rozdział 8. Programowanie graficznych interfejsów użytkownika (GUI) za pomocą GNOME-GTK+ (275)

  • Biblioteki GTK+ i GNOME (276)
    • glib (277)
    • GTK+ (277)
    • GDK (277)
    • Imlib (278)
    • ORBit (278)
    • libGnorba (278)
  • Biblioteka glib (278)
    • Typy (279)
    • Makrodefinicje (280)
      • Makrodefinicje diagnostyczne (280)
    • Funkcje obsługujące napisy (282)
    • Przydzielanie pamięci (284)
    • Listy (285)
  • GTK+ (287)
    • Widżety (287)
      • Utworzenie widżetu (287)
      • Pojemniki (288)
      • Tabele (290)
      • Sygnały (292)
      • Ukazanie, aktywność i ukrycie (293)
      • Zniszczenie (293)
    • gtk_init i gtk_main (293)
    • Przykładowa aplikacja GTK+ (293)
  • Podstawy GNOME (295)
      • gnome_init (295)
      • GnomeApp (296)
    • Menu i paski narzędziowe (296)
      • GnomeAppbar (299)
    • Okna dialogowe (300)
      • Tworzenie widżetu GnomeDialog (301)
      • Pokazywanie widżetu GnomeDialog (302)
      • GnomeAbout (304)
      • GnomePropertyBox (305)
      • GnomeMessageBox (306)
    • Przykładowa aplikacja GNOME (307)
  • Drzewo kodu źródłowego GNOME (309)
      • configure.in (310)
      • Makefile.am (312)
    • Zapis konfiguracji (313)
      • Przechowywanie danych (314)
      • Odczyt zachowanych danych (315)
    • Zarządzanie sesją (315)
      • GnomeClient (316)
    • Analiza składniowa wiersza poleceń z użyciem popt (319)
  • Materiały dodatkowe (322)
  • Podsumowanie (323)

Rozdział 9. Tworzenie GUI za pomocą Glade i GTK+/GNOME (325)

  • Ogólne omówienie Glade (326)
    • Uwagi na temat projektowania GUI (326)
  • Samouczek Glade (327)
    • Okno główne (328)
    • Paleta (329)
    • Okno właściwości (332)
    • Kod źródłowy utworzony za pomocą Glade (335)
    • lookup_widget (337)
    • Dopisywanie kodu (338)
    • libglade (340)
  • GUI do obsługi wypożyczalni płyt DVD (343)
    • Projekt (344)
    • Kompilacja i uruchamianie dvdstore (344)
    • Struktura (350)
    • Kod (351)
      • main.c (351)
      • callbacks.c (353)
      • member_dialog.c oraz title_dialog.c (354)
      • rent_dialog.c oraz return_dialog.c (358)
      • search_window.c (364)
      • misc.c (374)
  • Podsumowanie (379)

Rozdział 10. Flex i Bison (381)

  • Struktura danych wejściowych (382)
    • Skanery i analizatory składni (383)
    • Jak działają generatory? (384)
  • Skanery (385)
    • Prosty skaner (386)
    • Specyfikacje skanera (386)
    • Zasada najdłuższego dopasowania (391)
    • Wyrażenia regularne (392)
      • Łączenie wyrażeń regularnych (393)
    • Działania (395)
    • Przekierowanie wejścia i wyjścia skanera (396)
    • Zwracanie elementów (397)
    • Skanery kontekstowe (398)
    • Opcje programu flex (398)
  • Analizatory składni (parsery) (399)
    • Tworzenie parserów (401)
      • Definicje (404)
      • Reguły (405)
      • Kod dodatkowy (406)
    • Tworzenie testera składni (406)
    • Typy elementów (410)
    • Działania w regułach (411)
    • Opcje programu bison (418)
    • Konflikty gramatyczne (419)
    • Wyrażenia arytmetyczne (420)
  • Materiały dodatkowe (421)
  • Podsumowanie (422)

Rozdział 11. Narzędzia do testowania (423)

  • Testowanie wymagań (423)
    • Architektura aplikacji (424)
    • Etapy testowania (425)
    • Testy ogólne (425)
    • Testy regresyjne (426)
    • Program testujący (428)
      • Nagłówki i deklaracje (429)
      • main() (429)
      • show_result() (430)
      • Interfejsy programisty (API) (430)
    • Testowanie programu dvdstore (433)
    • Testy w postaci skryptów (434)
    • expect (434)
    • Problemy z pamięcią (436)
      • Pamięć statyczna (437)
      • Stos (437)
      • Pamięć dynamiczna (442)
    • Instalacja programu mpatrol (444)
    • Zastosowanie programu mpatrol (445)
    • Testy pokrycia (450)
      • Pokrycie instrukcji (450)
      • Pokrycie rozgałęzień programu i pokrycie danych (451)
      • GCOV - narzędzie do testów pokrycia instrukcji (452)
    • Testowanie wydajności (458)
  • Podsumowanie (461)

Rozdział 12. Bezpieczne programowanie (463)

  • Czym jest bezpieczne programowanie? (463)
  • Dlaczego tak trudno bezpiecznie programować? (464)
    • Błędy utajone (464)
    • Pochwała paranoi (465)
  • Bezpieczeństwo systemu plików (467)
    • Standardowe uprawnienia (467)
    • Lepki bit (468)
    • Atrybuty setuid i setgid (469)
      • Atrybuty setuid i setgid dla plików wykonywalnych (469)
      • Atrybut setgid dla katalogów (470)
    • Bezpieczne używanie setguid i setgid (470)
  • Potwierdzanie tożsamości użytkowników (471)
    • Tradycyjne uwierzytelnianie w UNIX-ie (471)
      • Podstawowe techniki (472)
      • Ograniczenia (472)
    • Dynamiczne moduły uwierzytelniające PAM (473)
      • PAM w teorii (473)
      • Etapy sprawdzania tożsamości za pomocą PAM (473)
    • Rejestracja wywołań zwrotnych (478)
      • Przykład (479)
    • Zarządzanie uprawnieniami (483)
      • Porzucanie i odzyskiwanie uprawnień (483)
      • Funkcje get*id i set*id (484)
    • Strategie zarządzania uprawnieniami (485)
  • Bezpieczne korzystanie z kryptografii (486)
      • Krótkie wprowadzenie do kryptografii (487)
      • Kryptografia z kluczem publicznym (487)
      • Bezpieczne algorytmy jednostronne (488)
      • O pisaniu własnych algorytmów (488)
    • Niektóre powszechnie stosowane techniki (489)
      • Cyfrowe podpisy (489)
      • Uwierzytelnianie za pomocą hasła (490)
      • Szyfrowanie sesji (491)
    • Generowanie liczb losowych w Linuksie (492)
    • Zarządzanie kluczem (493)
  • Bezpieczne programowanie sieciowe (494)
  • Opracowywanie protokołów (495)
    • Jeśli jest to możliwe, należy stosować standardy (495)
    • Przyjazne zapory sieciowe (496)
    • Zagadnienia bezpieczeństwa aplikacji WWW (497)
    • Zagadnienia związane z zarządzaniem sesją (497)
      • Skrypty zewnętrzne (498)
  • Standardowe sieciowe narzędzia kryptograficzne (500)
    • SSL-TLS (500)
    • ssh (500)
    • Ogólne wskazówki i techniki zabezpieczeń (501)
  • Problemy ze środowiskiem (502)
    • Specjalne zmienne środowiskowe (502)
      • LD_* (503)
      • IFS (503)
      • PATH (504)
      • Użycie plików tymczasowych (504)
      • Użycie "chroot" (505)
    • Zagadnienia specyficzne dla języka (507)
      • Jak działa przepełnienie bufora? (507)
      • Jak unikać problemów z przepełnieniem bufora? (509)
    • Sprawdzanie błędów i wyjątków (510)
    • Perl (510)
    • Skrypty setuid i setgid w Perlu (511)
  • Python (511)
  • PHP (512)
  • Materiały dodatkowe (512)
  • Podsumowanie (513)

Rozdział 13. Programowanie GUI za pomocą KDE/Qt (515)

  • Wprowadzenie (515)
    • Informacje o Qt (515)
    • Informacje o KDE (516)
    • Instalacja Qt (517)
    • Instalacja KDE (518)
    • Biblioteki (519)
  • Programowanie aplikacji przy użyciu Qt (519)
    • Na początek: "Witaj świecie" (519)
    • Uproszczenie zarządzania plikiem MakefileMakefile za pomocą tmake (521)
    • Sygnały i odbiorniki (522)
    • "Witaj świecie" ponownie (525)
    • Dziedziczenie z klas podstawowych (525)
    • Widżety (528)
    • Układy (530)
  • Programowanie aplikacji przy użyciu KDE (534)
    • Prosty edytor tekstowy (534)
  • Materiały dodatkowe (542)
  • Podsumowanie (542)

Rozdział 14. Interfejs GUI dla wypożyczalni płyt DVD - implementacja w KDE i Qt (545)

  • Projekt aplikacji (546)
    • Okno główne (549)
      • Elementy menu (550)
      • Pasek narzędzi (551)
      • Widżet główny (552)
      • Rejestr transakcji (553)
    • Okno dialogowe klienta (554)
    • Okno dialogowe wypożyczeń (558)
      • Wykaz wypożyczeń (558)
    • Raport wypożyczenia (559)
    • Okno wyszukiwań (560)
      • Strona wyszukiwania filmów (561)
      • Strona wyszukiwań klientów (564)
      • Strona wyszukiwania płyt (565)
    • Menedżer ustawień (566)
  • Dostosowanie kodu do KDE (568)
    • Kconfig i SettingsManager (574)
  • Materiały dodatkowe (574)
  • Podsumowanie (575)

Rozdział 15. Python (577)

  • Wprowadzenie (577)
    • Cechy (578)
      • Język bardzo wysokiego poziomu (Very High Level Language - VHLL) (579)
      • Interpretowany (579)
      • Czysta, prosta i użyteczna składnia (580)
      • Obiektowy (581)
      • Dynamiczne określanie typu (581)
      • Duża biblioteka standardowa (581)
      • Obsługa wielu platform (581)
      • Mnogość implementacji (581)
      • Duże możliwości rozbudowy (582)
      • Otwarty dostęp do kodu źródłowego (582)
      • Rozrywka! (582)
    • Python: odpowiednie narzędzie pracy (583)
    • ...ale nie każdej! (583)
  • Instalacja Pythona (583)
  • Uruchomienie Pythona (585)
    • Interaktywny interpreter (586)
    • Polecenie jako argument (587)
    • Skrypt jako argument (587)
    • "Samodzielnie" wykonywalny program (587)
  • Szczegóły (588)
    • Interpreter i kompilacja bajtowa (588)
    • Składnia komentarzy (588)
    • Znaczenie wielkości liter (589)
    • Wbudowane typy danych i operatory (589)
      • Nic (589)
      • Liczby całkowite (590)
      • Długie liczby całkowite (593)
      • Liczby zmiennoprzecinkowe (593)
      • Liczby zespolone (593)
      • Listy (594)
      • Napisy (596)
      • Krotki (598)
      • Słowniki (598)
    • Zmienne (599)
    • Składnia struktury blokowej (600)
    • Składnia instrukcji (601)
      • Instrukcje z wyrażeniami (601)
      • Przypisanie (602)
      • Instrukcje proste (602)
      • Instrukcje złożone (605)
    • Funkcje (607)
    • Funkcje wbudowane (609)
    • Przestrzenie nazw (610)
    • Moduły i pakiety (610)
    • Niektóre moduły ze standardowej dystrybucji (611)
    • Klasy i obiekty (611)
      • Metody (612)
      • self (612)
      • Dziedziczenie (612)
      • Metody specjalne (613)
    • Rozszerzenia Pythona (614)
  • Program przykładowy "co do grosza" (614)
  • Materiały dodatkowe (620)
  • Podsumowanie (621)

Rozdział 16. Tworzenie interfejsu WWW za pomocą PHP (623)

  • PHP i skrypty wykonywane po stronie serwera (624)
    • Skrypty wykonywane po stronie serwera (624)
      • Skrypty CGI (624)
      • Aktywne strony serwera (625)
      • Strony Java i serwlety (625)
      • Pisanie skryptów w PHP (625)
    • Możliwości PHP (626)
  • Instalacja i konfiguracja PHP (627)
    • Budowa i instalacja PHP jako interpretera CGI (628)
    • Budowa i instalacja PHP z Apache i jako moduł Apache (629)
    • Instalacja PHP z pliku RPM (631)
    • Konfiguracja PHP (631)
  • Wprowadzenie do składni PHP (633)
    • Zmienne, stałe i typy danych (633)
    • Operatory w PHP (635)
      • Operatory arytmetyczne (635)
      • Operatory porównań (635)
      • Operatory logiczne (635)
      • Inne operatory (636)
    • Instrukcje (636)
    • Funkcje (637)
    • Tablice (638)
  • Realizacja projektu DVD za pomocą PHP (639)
    • HTTP, HTML i PHP (639)
  • Aplikacja (641)
    • Rejestracja w systemie (Login) (641)
    • Stan rezerwacji (642)
    • Wyszukiwanie tytułów (642)
    • Rezerwacja filmów (642)
    • Odwołanie rezerwacji (642)
    • dvdstoredbfunctions.php (643)
      • dvd_open_db() (643)
      • dvd_err_text() (644)
      • dvd_close_db() (644)
      • dvd_member_get() (644)
      • dvd_member_search() (644)
      • dvd_title_get() (645)
      • dvd_title_search() (646)
      • dvd_title available() (647)
      • dvd_reserve_title() (647)
      • dvd_reserve_title_cancel() (648)
      • dvd_reserve_title_query_by_member (648)
      • dvd_begin_transaction() (649)
      • dvd_commit_transaction() (649)
    • dvdstorecommon.php (650)
      • GenerateLoginForm() (650)
      • GenerateHTMLHeader() (650)
      • DisplayErrorMessage() (650)
      • DisplaySearchMenu() (651)
      • DisplayUserMenu() (651)
      • DisplayDVDDetails() (651)
      • GetReserveDate() (652)
    • dvdstorelogin.php (653)
    • dvdstoresearch.php (654)
    • dvdstorestatus.php (656)
    • dvdstorecancel.php (657)
    • dvdstorereserve.php (658)
  • Materiały dodatkowe (659)
  • Podsumowanie (660)

Rozdział 17. Wbudowywanie i rozszerzanie Pythona za pomocą C/C++ (661)

    • Rozszerzenie Pythona za pomocą modułu rozszerzenia C/C++ (662)
    • Wbudowanie Pythona do programu macierzystego (662)
  • Opracowanie modułów rozszerzenia w C/C++ (663)
    • Wymagane oprogramowanie narzędziowe (663)
      • Interpreter Pythona (663)
      • Biblioteki do opracowywania oprogramowania w Pythonie (664)
      • SWIG - uproszczony generator interfejsu otoczki (664)
    • Rozszerzenie Pythona przy użyciu SWIG (664)
      • Proste funkcje (665)
      • Kompilacja i test pliku otoczki utworzonego przez SWIG (668)
      • Testowanie modułu rozszerzenia (669)
      • Dostęp do tablic przy użyciu wskaźników SWIG (670)
      • Dodanie metod wirtualnych do struktur (671)
      • Zgłaszanie i obsługa wyjątków przy użyciu odwzorowań typów (672)
      • Tworzenie nowych typów obiektów za pomocą SWIG (678)
  • Rozszerzanie Pythona przy użyciu C API (692)
    • Typy obiektów Pythona (693)
    • Zliczanie odsyłaczy oraz prawo własności (694)
    • Przegląd metod opracowywania modułów rozszerzenia w języku C (695)
      • Struktura modułu rozszerzenia (695)
      • Funkcja init (696)
    • Proste funkcje (697)
    • Trochę bardziej złożona funkcja (698)
    • Globalna blokada interpretera (700)
    • Tworzenie nowych typów obiektów Pythona (700)
      • Minimalny typ obiektu (701)
      • Obsługa getattr (704)
      • Obsługa setattr (705)
      • Obsługa wywołań metod (706)
      • Inicjalizacja obiektu (707)
    • Hermetyzacja obiektów C++ za pomocą interfejsu C API (708)
  • Wbudowywanie Pythona do programów C/C++ (711)
    • Środowisko programowania dla wbudowywania (711)
    • Wbudowywanie Pythona przy użyciu funkcji wysokiego poziomu (712)
    • Statyczna konsolidacja programu macierzystego z modułem rozszerzenia (714)
    • Wbudowywanie Pythona przy użyciu wywołań niższego poziomu (716)
      • Uruchamianie napisów (716)
      • Zastępowanie wewnętrznych funkcji Pythona (717)
      • Wywoływanie funkcji Pythona (719)
      • Tworzenie egzemplarza obiektu w Pythonie oraz wywoływanie jego metody (720)
      • Przetwarzanie wielowątkowe (722)
      • tdemo.c (722)
  • Ogólne sugestie (728)
  • Materiały dodatkowe (729)
  • Podsumowanie (729)

Rozdział 18. Zdalne wywołania procedur (731)

  • Omówienie (731)
  • Prosta sieciowa baza danych wypożyczalni DVD (732)
    • Gniazda BSD (732)
      • Prosty serwer gniazd (Simple Socket Server) (733)
      • Prosty klient gniazd (Simple Socket Client) (736)
  • Programowanie przy użyciu interfejsu gniazd BSD (738)
  • Architektura ONC-RPC i związane z tym pojęcia (739)
    • Datagramy (bez połączenia) lub strumienie (zorientowane na połączenie) (740)
    • Rozszerzona reprezentacja danych (XDR) (740)
  • Korzyści wynikające z użycia RPC w aplikacji obsługującej wypożyczalnię DVD (741)
  • Narzędzia i programy użytkowe RPC (742)
    • rpcgen - kompilator protokołu RPC (742)
      • Struktura pliku definiującego protokół RPC (743)
      • portmap - odwzorowanie adresu portu na numer programu RPC (743)
      • rpcinfo - zapytanie o informację RPC (744)
  • Zastosowanie zdalnych wywołań procedur w aplikacji dla wypożyczalni DVD (745)
    • Funkcje bez argumentów lub typów zwracanych (746)
    • Funkcje z prostymi argumentami i prostymi typami zwracanymi (755)
    • Bardziej złożone przykłady (757)
    • Zwracanie tablic (760)
    • Ograniczenia czasowe dla klienta (764)
  • Uwierzytelnianie (765)
    • AUTH_NONE (765)
    • AUTH_UNIX (765)
    • Obsługa uwierzytelniania po stronie klienta (766)
    • Obsługa uwierzytelniania po stronie serwera (767)
  • Użycie serwerów RPC wraz z /etc/inetd.conf (769)
  • Inne metody ułatwiające programowanie sieciowe (770)
  • Materiały dodatkowe (771)
  • Podsumowanie (772)

Rozdział 19. Multimedia i Linux (773)

  • Stan obecny (773)
  • Integracja programowa (775)
  • Dźwięk (775)
    • Urządzenia (776)
    • Obsługa standardowych formatów dźwiękowych (778)
      • Nieupakowany surowy format dźwiękowy (778)
      • Upakowany format dźwiękowy (779)
      • WAV (780)
      • AIFF (780)
      • Konwersja pomiędzy formatami dźwiękowymi - sox (780)
    • Zrób to sam (781)
      • /sys/soundcard.h (781)
      • soundtest.c (782)
      • Ocena możliwości urządzenia karty dźwiękowej (784)
      • Możliwości urządzenia (786)
      • Obsługiwane formaty (788)
      • Soundtest - test dźwięku, czyli poskładajmy wszystko razem (790)
      • Odtwarzanie rzeczywistych danych dźwiękowych (795)
      • Porządkowanie (798)
  • Ruchome obrazy (798)
    • Odtwarzacze programowe (799)
      • xanim (799)
      • RealPlayer (800)
      • Inne formaty (800)
    • Odtwarzacze sprzętowe (800)
    • Hybrydy (801)
      • OMS - otwarty system mediów (801)
  • Kwestie polityczne i prawne (803)
  • Materiały dodatkowe (803)
  • Podsumowanie (804)

Rozdział 20. CORBA (805)

  • Język definicji interfejsu (IDL) (806)
  • Pośrednik żądań obiektowych (ORB) (806)
  • Umowny adres obiektu (IOR) (807)
  • Adapter obiektu (807)
  • Serwery (808)
  • Usługi nazewnicze i usługi wymiany (808)
  • Ogólna ocena architektury CORBA (809)
  • CORBA i RPC (810)
  • CORBA i gniazda sieciowe (812)
  • Systemy podobne do CORBA (812)
    • DCOM lub COM+ (813)
    • Metoda zdalnych wezwań (RMI) w języku Java (813)
    • Enterprise JavaBeans (814)
    • MQSeries firmy IBM (814)
    • SOAP (815)
  • IDL: definiowanie interfejsu (815)
    • Moduły (816)
      • Pułapki (816)
    • Interfejsy (817)
    • Podstawowe typy danych (817)
    • Typy szablonowe (818)
      • Typ sequence (818)
      • Typy string i wstring (819)
      • Typ fixed (819)
      • Złożone typy danych (819)
      • Operacje (821)
      • Wyjątki (823)
      • Atrybuty (824)
    • Przykład aplikacji obsługującej wypożyczalnię DVD (824)
  • Odwzorowania języków (828)
    • Składniki odwzorowania języka (829)
    • Odwzorowania dla języka C (829)
      • Podstawowe odwzorowania typów danych IDL (830)
      • Złożone i szablonowe typy danych (830)
      • Odwołania do stałych (833)
      • Wywoływanie operacji (834)
      • Obsługa wyjątków (834)
  • Przykład wprowadzający - prosty system powiadamiania (836)
    • Prosta wymiana komunikatów (836)
    • Zastosowanie ORBit z IDL (837)
    • Klient komunikatów (837)
    • Serwer komunikatów (839)
    • Kompilowanie aplikacji ORBit (840)
    • Uruchamianie przykładowej aplikacji (841)
  • Materiały dodatkowe (842)
  • Podsumowanie (842)

Rozdział 21. Implementacja CORBA z pośrednikiem ORBit (843)

  • CORBA w aplikacji obsługującej wypożyczalnię płyt DVD (844)
    • Klient DVD (844)
    • Serwer DVD (845)
    • Serwer obsługi logów (845)
    • Serwer weryfikacji (845)
    • Kod klienta (846)
    • Kod serwera obsługi logów (846)
    • Kod serwera DVD (847)
      • Odwzorowanie API w języku C na operatory CORBA (857)
    • Montaż całości (862)
  • Zastosowanie libgnorba (863)
  • Konfiguracja ORBit do pracy w sieci (864)
  • GOAD - rejestr aktywacji obiektów GNOME (865)
  • Zastosowanie CORBA w GNOME (865)
  • Zaawansowane właściwości CORBA (867)
    • Dynamiczne wezwania interfejsu (867)
    • Usługi CORBAServices (867)
      • Usługi nazewnicze (868)
      • Usługi wymiany (868)
      • Obsługa zdarzeń (868)
      • Usługa powiadamiania (868)
      • Kontrola pracy równoczesnej (869)
      • Usługa wymiany komunikatów (869)
      • Usługi związane z czasem (869)
      • Obsługa cyklu życia obiektu (870)
      • Usługi relacyjne (870)
      • Usługi utrwalania obiektów (870)
      • Usługi transakcyjne (870)
      • Usługi związane z bezpieczeństwem (871)
      • Usługa uzewnętrzniania (872)
      • Obsługa właściwości obiektów (872)
      • Obsługa zapytań o obiekty (872)
      • Obsługa licencjonowania (872)
    • Usługi CORBAFacilities (872)
    • Projektowanie i uruchamianie skalowalnych usług CORBA (873)
      • Zarządzanie równoczesnym dostępem (874)
      • Wątki (874)
      • Rozdzielanie wielu obiektów (874)
      • Przetwarzanie asynchroniczne i wywołania zwrotne (875)
      • Zarządzanie odpornością (876)
      • Interfejsy do zarządzania systemem (876)
  • Materiały dodatkowe (877)
  • Podsumowanie (878)

Rozdział 22. Systemy bezdyskowe (879)

  • Trochę historii (879)
  • Co takiego!? Nie ma dysku? (881)
  • Dlaczego bez dysku? (882)
  • Jak to działa? (883)
    • Uruchamianie systemu bezdyskowego (884)
    • Identyfikacja maszyn bezdyskowych w sieci (885)
    • Uruchamianie systemu operacyjnego (886)
  • Konfiguracja serwera (888)
  • Tworzenie obrazu startowego (890)
  • Jądro Linuksa dla systemu bezdyskowego (892)
  • Główny system plików (895)
  • Problemy (898)
  • Aplikacje klienckie (899)
  • Podsumowanie (900)

Rozdział 23. XML i libxml (903)

  • Struktura dokumentu XML (904)
    • Składnia XML (905)
    • Dobrze uformowany dokument XML (905)
      • Sekcje (906)
      • Elementy (907)
      • Zagnieżdżanie elementów (908)
      • Komentarze (909)
    • Poprawność XML (910)
      • Definicja typu dokumentu (DTD) (911)
      • Tworzenie DTD (911)
      • Schematy (914)
      • Powiązania DTD z dokumentem XML (915)
  • Rozbiór XML (915)
    • DOM (915)
    • SAX (916)
    • Biblioteka libXML (gnome-xml) (916)
      • Tworzenie i wywoływanie parsera (917)
      • Informacja o dokumencie (920)
      • Zastosowanie wywołań zwrotnych (921)
      • Przykład wywołania zwrotnego (926)
      • Utrzymywanie informacji o stanie parsera (929)
    • Ostateczna wersja parsera (930)
  • Materiały dodatkowe (937)
  • Podsumowanie (938)

Rozdział 24. Klastry Beowulf (939)

  • Konfiguracja sprzętowa (939)
  • Konfiguracja oprogramowania (940)
  • Programowanie klastra Beowulf (941)
  • Programowanie z wykorzystaniem MPI (941)
    • Podstawowe właściwości programów MPI (943)
    • Kompilacja i uruchamianie prostego programu MPI (945)
    • Rozproszony koder MP3 (946)
    • Wydajność komunikacyjna klastra Beowulf (948)
    • Przegląd zaawansowanych możliwości MPI (952)
      • Procedury obsługujące komunikację między dwoma węzłami (952)
      • Typy danych definiowane przez użytkownika (954)
      • Operacje kolektywne (955)
      • Bariera (barrier) (959)
    • Przykłady programów korzystających z MPI (959)
      • Obliczanie wartości liczby "pi" (960)
      • Obliczanie zbioru Mandelbrota (962)
      • Transponowanie macierzy (966)
  • Programowanie stosujące PVM (970)
    • Porównanie PVM z MPI (970)
    • Pobieranie i instalacja PVM (971)
    • Omówienie funkcji biblioteki PVM (971)
    • Przykładowy program PVM (974)
      • Kompilacja i uruchamianie programu PVM na klastrze Beowulf (975)
  • Materiały dodatkowe (976)
  • Podsumowanie (977)

Rozdział 25. Dokumentacja (979)

  • Określenie odbiorców pracy (980)
  • Dokumentacja użytkownika: interfejs graficzny (980)
    • Dokumentacja dla lokalnych GUI (980)
      • Pomoc kontekstowa (981)
      • Pomoc kontekstowa "dla ubogich" (981)
    • Dokumentacja dla interfejsów WWW (983)
  • Dokumentacja dla zaawansowanego użytkownika lub administratora systemu (984)
    • Opcje wiersza poleceń: możliwość użycia --help (984)
    • Strony podręcznika systemowego (985)
      • Sekcje podręcznika systemowego (986)
    • Utrzymywanie porządku (987)
      • Najczęściej spotykane elementy strony podręcznika systemowego (987)
      • Podręcznik systemowy za zasłoną: troff (989)
      • Tworzenie własnej strony podręcznika systemowego (989)
    • Kroje pisma (991)
    • Akapity (992)
    • Tabele (992)
      • Instalacja strony podręcznika systemowego (993)
      • Przykładowa strona podręcznika systemowego (993)
    • Tworzenie stron podręcznika dla API (995)
    • Nowsza generacja stron podręcznika - pliki info (995)
  • Wszystko o strukturze: od pojedynczego programu do systemów rozproszonych (997)
  • Narzędzia dokumentacyjne (998)
    • Stare, ale jare: TeX i LaTeX (999)
      • Sposób działania programów TeX i LaTeX (999)
      • Produkt końcowy (1001)
      • Oglądanie wyniku przetwarzania (1002)
      • Tworzenie lepiej wyglądających dokumentów (1002)
      • Ponowne spojrzenie na pliki info (1003)
    • Nowy gatunek: HTML, XML i DocBook (1003)
      • HTML (1004)
      • Rzut oka na DocBook (1004)
    • Ostatnie pociągnięcia pędzlem: pliki HOWTO i FAQ (1005)
  • Dokumentacja dla programisty (1009)
    • Zastosowanie metody "POD" w języku Perl (1010)
    • Programowanie literackie (1011)
      • Jak to działa? (1012)
    • Lekkostrawne programowanie literackie (1015)
    • Wymiana dokumentów (1016)
    • Pliki PDF (1017)
  • Podsumowanie (1017)

Rozdział 26. Sterowniki urządzeń (1019)

  • Kontekst działania (1020)
  • Moduł i kod inicjalizujący (1021)
  • Sekcje konsolidatora (1022)
    • Przykładowy kod modułu (1022)
  • Urządzenia i sterowniki magistrali PCI (1023)
    • Struktura pci_dev (1023)
    • Wyszukiwanie urządzeń PCI (1025)
      • Przeszukiwanie ręczne (1025)
    • Sterowniki PCI (1026)
    • Funkcje dostępu do urządzeń PCI (1028)
    • Przydział zasobów (1028)
    • Obsługa przerwań (1030)
      • Kod sterownika PCI modułu Applicom (1031)
    • Dostęp do pamięci w obszarze użytkownika (1033)
    • Architektura kiobuf (1034)
      • Kod obsługi kiobuf dla karty firmy Applicom (1036)
    • Podstawowe funkcje blokujące (1039)
      • Semafory (1039)
      • Blokady pętlowe (1040)
      • Wielka blokada jądra (1040)
    • Szeregowanie zadań i kolejki (1041)
      • schedule() (1041)
      • set_current_state() (1042)
      • schedule_timeout() (1042)
      • wake_up() (1042)
      • add_wait_queue() (1043)
      • remove_wait_queue() (1044)
      • sleep_on() i "wyścigi" (1044)
      • Powrót do sterownika karty Applicom (1045)
    • Licznik wywołań w module (1047)
    • Budowanie sterownika (1049)
      • Opcje konfiguracyjne (1049)
      • Pliki Makefile (1050)
  • Co zrobić z nowym sterownikiem? (1051)
    • Jak zgłosić nowy sterownik? (1052)
  • Podsumowanie (1054)

Rozdział 27. Rozprowadzanie aplikacji (1055)

  • Pakiety RPM (1057)
    • Użytkownik RPM (1057)
    • Co naprawdę zostało zainstalowane? (1058)
    • Baza danych RPM (1059)
      • Co znajduje się w pakiecie? (1059)
      • Usuwanie pakietu (1060)
      • Status pakietu (1060)
      • Instalowanie pakietów (1061)
      • Aktualizacja pakietu (1062)
      • Instalatory graficzne (1062)
      • Sprawdzanie zależności (1063)
      • Pomijanie zależności (1065)
      • Inne opcje (1065)
      • Pakiety, które nie są zainstalowane (1067)
    • Anatomia pakietu RPM (1068)
    • Pakiety źródłowe (1069)
  • configure, autoconf i automake (1070)
    • Pakiety źródłowe RPM (1075)
  • Budowanie pakietu RPM (1076)
  • Łatki (1081)
    • Tworzenie łatki (1081)
    • Użycie łatki (1083)
  • GNATS (1084)
  • Podsumowanie (1084)

Rozdział 28. Wersje międzynarodowe (1085)

  • Terminologia I18N (1087)
  • Czy Unicode nie jest rozwiązaniem? (1088)
    • Unicode (1088)
      • Co to jest? (1088)
      • Co umożliwia Unicode? (1093)
      • A czego nie umożliwia? (1094)
  • Problem kodowania znaków (1095)
    • ISO 2022: Techniki poszerzania zakodowanych zestawów znaków (1095)
    • Programowanie z użyciem Unicode (1097)
  • Modele I18N i środowisko systemowe (1104)
    • Model lokalizacji POSIX (1104)
    • Przewodnik X/Open dotyczący przenośności (XPG) (1108)
      • Rozszerzenia GNU libc dla modeli POSIX i X/Open (1110)
  • Formatowanie danych wyjściowych i przetwarzanie danych wejściowych (1112)
    • X Window System (1112)
      • Formatowanie danych wyjściowych (1112)
      • Wprowadzanie danych przez użytkownika (1113)
  • Praktyczne aspekty programowania I18N (1117)
    • I18N i wewnętrzne przetwarzanie tekstu (1119)
    • Programowanie przy użyciu lokalizacji (1120)
    • I18N i programowanie z zastosowaniem Xlib (1132)
    • I18N i interfejsy graficzne w Linuksie (1139)
    • Rola I18N w oprogramowaniu dla systemu Linux (1141)
  • I18N w rzeczywistych projektach (1142)
    • Programowanie obiektowe i I18N (1143)
    • I18N w pakietach do budowy aplikacji (1144)
    • Co dalej z I18N w systemie Linux? (1146)
      • Odnośniki z komentarzami (1146)

Dodatek A Opis obiektów GTK+ i GNOME (1149)

  • Widżety i funkcje GTK+ (1149)
    • GtkButton (1149)
    • GtkCheckButton (1150)
    • GtkCList (1150)
    • GtkCombo (1156)
    • GtkEntry (1157)
    • GtkFrame (1159)
    • GtkHBox (1159)
    • GtkHButtonBox (1159)
    • GtkHSeparator (1160)
    • GtkLabel (1160)
    • GtkMenu (1161)
    • GtkMenuBar (1162)
    • GtkMenuItem (1163)
    • GtkNotebook (1164)
    • GtkOptionMenu (1166)
    • GtkPixmapMenuItem (1167)
    • GtkScrolledWindow (1167)
    • GtkSpinButton (1168)
    • GtkTable (1170)
    • GtkText (1171)
    • GtkVBox (1172)
    • GtkWindow (1173)
  • Widżety i funkcje GNOME (1173)
    • GnomeAbout (1173)
    • GnomeApp (1174)
    • GnomeAppBar (1175)
    • GnomeDateEdit (1176)
    • GnomeDialog (1176)
    • GnomeDock (1178)
    • GnomeDockItem (1178)
    • GnomeEntry (1179)
    • GnomePropertyBox (1180)
  • Materiały dodatkowe (1181)

Dodatek B Definicja protokołu RPC dla wypożyczalni płyt DVD (1183)

Dodatek C Licencje oprogramowania otwartego (1191)

  • Ogólna Licencja Publiczna GNU (1191)
  • Ogólna licencja publiczna GNU dla bibliotek (1199)
  • Licencja Wolnej Dokumentacji GNU (1209)
  • Publiczna licencja Q (1216)

Skorowidz (1219)

©2007 Włodzimierz Gajda