Spis treści
Wstęp
Witaj czytelniku!
Dla kogo jest przeznaczona ta książka?
Tematyka książki
Czego wymagamy od czytelnika książki?
Kod źródłowy
Oznaczenia stosowane w książce
1. Projekt aplikacji
Informacje ogólne
Formułowanie założeń
Modele tworzenia kodu
Metoda szybkiego śledzenia
Wczesne i częste testy
Wypożyczalnia DVD
Założenia wstępne
Analiza wymagań klienta
Spis wymagań
Przypadki użycia
Architektura aplikacji
Projekt szczegółowy
Funkcje dostępu do danych
Funkcje klienta
Funkcje związane z tytułem filmu
Funkcje opisujące płytę DVD
Funkcje związane z wypożyczaniem
Przykładowa aplikacja
Materiały źródłowe
Podsumowanie
2. CVS
Narzędzia dla systemu Linux
Terminologia
Repozytorium
Obsługa CVS przez jedynego użytkownika
Format polecenia CVS
Zmienne środowiskowe
Import nowego projektu
Początek prac nad projektem w CVS
Porównywanie zmian z zawartością repozytorium
Aktualizacja repozytorium
Wydanie projektu
Przeglądanie zmian
Dodawanie i usuwanie plików z projektu
Rozwinięcia słów kluczowych
Korekty, znaczniki i rozgałęzienia
Korekty
Znaczniki
Rozgałęzienia projektu
CVS dla wielu użytkowników
Praca zespołowa
Praca ze śledzeniem
Dodatkowa zabawa z CVS
Pliki binarne
Poprawianie błędnych adnotacji
Sieciowy dostęp do CVS
Klienty CVS z interfejsem graficznym
Materiały źródłowe
Podsumowanie
3. Bazy danych
Wybór bazy danych
mSQL
MySQL
PostgreSQL
Jaki wybór będzie odpowiedni?
PostgreSQL
Instalacja i uruchamianie
Tworzenie użytkowników
Tworzenie baz danych
Tworzenie zapasowych kopii bazy danych
Zdalny dostęp
Podstawy teorii baz danych
Pierwsza postać normalna
Druga postać normalna
Trzecia postać normalna
De-normalizacja
Prosta baza danych
Korzystanie z psql
Polecenia dla psql
Polecenia do definicji danych
Tworzenie i usuwanie tabel
Typy danych w PostgreSQL
Polecenia do manipulacji danymi
Wstawianie danych
Pobieranie danych z pojedynczej tabeli
Kombinowane pobieranie danych z wielu tabel
Aktualizacja danych w tabeli
Usuwanie danych
Transakcje
Wskazówki dla projektu bazy danych
Materiały źródłowe
Podsumowanie
4. Interfejsy PostgreSQL
Dostęp do PostgreSQL z kodu programu
Biblioteka libpq
Funkcje do obsługi połączeń z bazą danych
Uruchamianie poleceń SQL
Uzyskiwanie wyników zapytań
Biblioteka ecpg
Jaką metodę zastosować?
Aplikacja
Podsumowanie
5. MySQL
Instalacja i zarządzanie
Pakiety skompilowane
Budowanie z plików źródłowych
Konfiguracja poinstalacyjna
Zarządzanie bazą MySQL
Polecenia
isamchk
mysql
mysqladmin
mysqlbug
mysqldump
mysqlimport
mysqlshow
Tworzenie użytkowników i nadawanie uprawnień
grant
with grant
revoke, delete
Hasła
Tworzenie bazy danych
Wspomaganie SQL w PostgreSQL i MySQL
Dostęp do danych MySQL z języka C
Funkcje połączeniowe
Obsługa błędów
Wykonywanie poleceń SQL
Polecenia SQL, które nie zwracają żadnych danych
Polecenia zwracające dane
Przetwarzanie zwróconych danych
Funkcje dodatkowe
Materiały źródłowe
Podsumowanie
6. Wykrywanie błędów
Klasy błędów
Zgłaszanie błędów
Wykrywanie błędów programowych
Rodzaje błędów programowych
Polecenia wykrywania błędów
Zakotwiczenia
Gdzie jesteśmy?
Powrót do początku
Przygotowanie do wykrywania błędów
Używanie debuggera
Proste polecenia GDB
Inne właściwości GDB
Materiały źródłowe
Podsumowanie
7. Usługi katalogowe LDAP
Czym jest usługa katalogowa?
X.500 i LDAP
Struktura serwera usług katalogowych
Nazwy elementów
Nazwy dn
Schemat nazewnictwa X.500
Schemat X.500 z nazwami domen
Schemat nazewnictwa składników domeny
Składniki obiektowe
Standardowe typy i atrybuty
Drzewo katalogu LDAP
Pliki LDIF
Instalacja i konfiguracja serwera LDAP
Etapy instalacji OpenLDAP
Konfiguracja OpenLDAP
Uruchamianie serwera
Dostęp do LDAP z języka C
Inicjacja biblioteki LDAP
Powiązania z serwerem LDAP
Obsługa błędów LDAP
Pierwszy program kliencki wykorzystujący LDAP
Wyszukiwanie
Określenie zakresu
Filtrowanie wyników
Wyszukiwanie z zastosowaniem API
Sortowanie zwróconych obiektów
Zmiana danych
Dodawanie nowego wpisu
Modyfikacja wpisu
Usuwanie wpisu
Aplikacja
Materiały źródłowe
Podsumowanie
8. Tworzenie GUI za pomocą GTK+/GNOME
Biblioteki GTK+/GNOME
glib
GTK+
GDK
lmlib
ORBit
libGnorba
glib
Typy
Makropolecenia
Śledzenie błędów w makropoleceniach
Funkcje obsługujące napisy
Przydział pamięci
Listy
GTK+
Widżety
Tworzenie widżetów
Kontenery
Sygnały
Wyświetlanie, czułość i ukrywanie
Usuwanie
gtk_init oraz gtk_main
Przykładowa aplikacja GTK+
Podstawy GNOME
gnome_init
GnomeApp
Menu i paski narzędzi
GnomeAppbar
Okna dialogowe
Wyświetlanie GnomeDialog
GnomeAbouit
GnomePropertyBox
GnomeMessageBox
Przykładowa aplikacja GNOME
Wersja źródłowa GNOME
configure.in
Makefile.am
Zachowywanie konfiguracji
Zarządzanie sesją
GnomeClient
Analiza wiersza poleceń za pomocą popt
Materiały źródłowe na temat GNOME/GTK+
Podsumowanie
9. Budowanie GUI za pomocą Glade i GTK+/GNOME
Ogólne omówienie Glade
Uwagi na temat projektowania GUI
Samouczek Glade
Okno główne
Paleta
Okno właściwości
Kod źródłowy utworzony za pomocą Glade
lookup_widget
Dopisywanie kodu
Libglade
GUI do obsługi wypożyczalni płyt DVD
Projekt
Kompilacja i uruchamianie dvdstore
Struktura
Kod
main.c
callbacks.c
member_dialog.c oraz title_dialog.c
rent_dialog.c oraz return_dialog.c
search_window.c
misc.c
Podsumowanie
10. Flex i Bison
Struktura wejściowa
Skanery i analizatory składni
Jak działają generatory?
Skanery
Prosty skaner
Specyfikacje skanera
Reguła najpełniejszego dopasowania
Wyrażenia regularne
Złożenia wyrażeń regularnych
Działania
Przekierowywanie wejścia i wyjścia skanera
Zwracanie elementów
Skanery kontekstowe
Opcje programu flex
Analizatory składni
Generacja analizatorów składni
Definicje
Reguły
Kod dodatkowy
Tworzenie testera składni
Rodzaje elementów
Działania w regułach
Opcje programu bison
Konflikty gramatyczne
Wyrażenia arytmetyczne
Materiały źródłowe
Podsumowanie
11. Narzędzia do testowania
Testowanie wymagań
Architektura aplikacji
Etapy
Testy ogólne
Testy regresyjne
Program testujący
Nagłówki i deklaracje
main()
show_result()
Interfejsy programowe (API)
Testowanie programu dvdstore
Zapis testów w skryptach
expect
Problemy z pamięcią
Pamięć statyczna
Stos
Pamięć dynamiczna
Instalacja programu mpatrol
Zastosowanie programu mpatrol
Testy pokrycia
Pokrycie instrukcji
Pokrycie rozgałęzień i danych
GCOV — narzędzie do testów pokrycia instrukcji
Testowanie wydajności
Podsumowanie
12. Bezpieczne programowanie
Czym jest bezpieczne programowanie?
Dlaczego trudno jest bezpiecznie programować?
Błędy ukryte
Zaleta paranoi
Bezpieczeństwo systemu plików
Standardowe uprawnienia
Bit sticky
Atrybuty setuid i setgid
Bezpieczne używanie setuid i setgid
Potwierdzanie tożsamości użytkowników
Tradycyjne metody potwierdzania tożsamości w systemie UNIX
PAM — Pluggable Authentication Modules
Rejestracja wywołań zwrotnych
Zarządzanie uprawnieniami
Strategie zarządzania przywilejami
Bezpieczne korzystanie z szyfrowania
Niektóre powszechnie stosowane metody
Generacja liczb losowych w systemie LINUX
Zarządzanie kluczami
Bezpieczne programowanie sieciowe
Protokoły zapisu
Stosowanie standardów tam, gdzie jest to możliwe
Przyjazność zapory ogniowej
Bezpieczeństwo aplikacji WWW
Zagadnienia związane z zarządzaniem sesją
Standardowe sieciowe narzędzia szyfrujące
Ogólne sztuczki i metody zabezpieczeń
Problemy ze środowiskiem
Specjalne zmienne środowiskowe
IFS
Zagadnienia związane z językiem
Sprawdzanie błędów i wyjątków
Perl
Skrypty Perl Setuid/Setgid
Python
PHP
Podsumowanie
13. Programowanie GUI za pomocą KDE/Qt
Wprowadzenie
Informacje o Qt
Informacje o KDE
Instalowanie Qt
Instalowanie KDE
Biblioteki
Programowanie aplikacji używających Qt
Na początek: Hello world
Ułatwienie zarządzania plikiem Makefile za pomocą tmake
Sygnały i szczeliny
„Hello world” ponownie
Wykorzystanie klas podstawowych
Widżety
Wygląd
Programowanie aplikacji używających KDE
Prosty edytor tekstowy
Materiały źródłowe
Podsumowanie
14. Program obsługi wypożyczalni płyt DVD wykorzystujący KDE/Qt
Projekt aplikacji
Główne okno
Pozycje menu
Pasek narzędzi
Główny widżet
Log transakcji
Okno dialogowe klienta wypożyczalni
Okno dialogowe wypożyczeń
Lista wypożyczeń
Okno dialogowe raportu wypożyczeń
Okno wyszukiwania
Strona wyszukiwania płyt DVD
Strona wyszukiwania klientów
Strona wyszukiwania płyt
SettingsManager
Dopasowanie kodu do KDE
KConfig i SettingsManager
Materiały źródłowe
Podsumowanie
15. Python
Wprowadzenie
Właściwości
Język bardzo wysokiego poziomu (VHLL)
Język interpretowany
Czytelna, prosta i wydajna składnia
Obiektowość
Dynamiczne pisanie programu
Obszerna biblioteka standardowa
Wieloplatformowość
Wielorakie zastosowania
Skalowalność
Otwarty kod źródłowy
Dużo radości!
Python: odpowiednie narzędzie do pracy
...Lecz nie do każdej pracy!
Instalacja języka Python
Praca z pakietem Python
Interaktywny interpreter
Argument poleceniowy
Argument skryptowy
Program „autonomiczny”
Szczegóły
Interpreter i kompilacja bajtowa
Składnia komentarza
Wpływ wielkości liter
Wbudowane typy danych i operatory
Nieokreślone (none)
Integer
Long integer
Liczby zmiennoprzecinkowe
Liczby zespolone
Listy
Napisy
Krotki
Słowniki
Zmienne
Składnia struktury blokowej
Składnia instrukcji
Deklaracja wyrażenia
Przypisanie
Instrukcje proste
Instrukcje złożone
Funkcje
Funkcje wbudowane
Obszary robocze nazw
Moduły i pakiety
Niektóre moduły ze standardowej dystrybucji
Klasy i obiekty
Metody
Self (własna)
Dziedziczenie
Metody specjalne
Rozszerzenia języka Python
Prosty program: rzut monetą
Zasoby w sieci
Podsumowanie