Facebook - konwersja

PHP i Oracle. Tworzenie aplikacji webowych: od przetwarzania danych po Ajaksa - ebook

Wydawnictwo:
Data wydania:
4 lutego 2013
Format ebooka:
EPUB
Format EPUB
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najpopularniejszych formatów e-booków na świecie. Niezwykle wygodny i przyjazny czytelnikom - w przeciwieństwie do formatu PDF umożliwia skalowanie czcionki, dzięki czemu możliwe jest dopasowanie jej wielkości do kroju i rozmiarów ekranu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, PDF
Format PDF
czytaj
na laptopie
czytaj
na tablecie
Format e-booków, który możesz odczytywać na tablecie oraz laptopie. Pliki PDF są odczytywane również przez czytniki i smartfony, jednakze względu na komfort czytania i brak możliwości skalowania czcionki, czytanie plików PDF na tych urządzeniach może być męczące dla oczu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, MOBI
Format MOBI
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najczęściej wybieranych formatów wśród czytelników e-booków. Możesz go odczytać na czytniku Kindle oraz na smartfonach i tabletach po zainstalowaniu specjalnej aplikacji. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
(3w1)
Multiformat
E-booki sprzedawane w księgarni Virtualo.pl dostępne są w opcji multiformatu - kupujesz treść, nie format. Po dodaniu e-booka do koszyka i dokonaniu płatności, e-book pojawi się na Twoim koncie w Mojej Bibliotece we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu przy okładce. Uwaga: audiobooki nie są objęte opcją multiformatu.
czytaj
na laptopie
Pliki PDF zabezpieczone watermarkiem możesz odczytać na dowolnym laptopie po zainstalowaniu czytnika dokumentów PDF. Najpowszechniejszym programem, który umożliwi odczytanie pliku PDF na laptopie, jest Adobe Reader. W zależności od potrzeb, możesz zainstalować również inny program - e-booki PDF pod względem sposobu odczytywania nie różnią niczym od powszechnie stosowanych dokumentów PDF, które odczytujemy każdego dnia.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na czytniku
Czytanie na e-czytniku z ekranem e-ink jest bardzo wygodne i nie męczy wzroku. Pliki przystosowane do odczytywania na czytnikach to przede wszystkim EPUB (ten format możesz odczytać m.in. na czytnikach PocketBook) i MOBI (ten fromat możesz odczytać m.in. na czytnikach Kindle).
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na smartfonie
Aby odczytywać e-booki na swoim smartfonie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. iBooks dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
59,00

PHP i Oracle. Tworzenie aplikacji webowych: od przetwarzania danych po Ajaksa - ebook

Poznaj niezwykłe możliwości duetu Oracle-PHP i twórz niezawodne aplikacje!

  • Jak połączyć PHP i Oracle w celu uzyskania optymalnej wydajności i niezawodności?
  • Jak wykorzystywać funkcje XML w PHP i Oracle?
  • Jak poprawić wydajność dzięki zastosowaniu buforowania?

Baza Danych Oracle nie ma sobie równych pod względem wydajności, niezawodności oraz skalowalności. Natomiast skryptowy język PHP dzięki niezwykłej prostocie stosowania stanowi jedno z najpopularniejszych narzędzi budowania aplikacji sieciowych -- nawet dla niezbyt doświadczonych programistów. Budowanie i wdrażanie aplikacji PHP opartych na Oracle pozwala więc na optymalne połączenie potężnych możliwości i solidności z łatwością użycia i krótkim czasem programowania.

Książka "PHP i Oracle. Tworzenie aplikacji webowych: od przetwarzania danych po Ajaksa" zawiera zilustrowany praktycznymi przykładami opis technologii oraz wszystkich narzędzi potrzebnych, aby optymalnie wykorzystać możliwości duetu Oracle-PHP. Dzięki temu podręcznikowi poznasz nowe funkcje PHP i bazy danych Oracle; dowiesz się także, na czym polega programowanie procedur składowanych i obsługa transakcji. Nauczysz się tworzyć niezawodne aplikacje i zapewniać im wyższą wydajność dzięki mechanizmom buforowania, a także używać technologii Ajax z technologiami Oracle Database i funkcjami PHP w celu usprawnienia reakcji aplikacji na działania użytkownika.

  • Połączenie PHP i Oracle
  • Przetwarzanie danych
  • Tworzenie i wywoływanie wyzwalaczy
  • Używanie podprogramów składowanych
  • Podejście zorientowane obiektowo
  • Obsługa wyjątków
  • Bezpieczeństwo
  • Buforowanie
  • Aplikacje oparte na XML
  • Usługi sieciowe
  • Aplikacje oparte na Ajaksie

Połącz wydajność, skalowalność i niezawodność z łatwością użycia i krótkim czasem programowania!

Spis treści

O autorze (11)

O recenzencie (13)

Wprowadzenie (15)

  • Jakie tematy zostały poruszone w książce? (16)
  • Dla kogo przeznaczona jest ta książka? (17)
  • Konwencje zastosowane w książce (17)
  • Użycie przykładowych kodów (18)

Rozdział 1. Rozpoczęcie pracy z PHP i Oracle (19)

  • Dlaczego PHP i Oracle? (20)
    • Prostota i elastyczność (20)
    • Wydajność (21)
    • Niezawodność (21)
  • Co zamiast PHP i Oracle? (22)
    • PHP i MySQL (22)
    • JSF i Oracle (23)
  • Co będzie potrzebne, aby rozpocząć pracę? (23)
    • Wymagane komponenty oprogramowania (23)
    • Rozważania dotyczące produktu Oracle Database (25)
      • Zrozumienie Oracle Database (25)
      • Wybór między wydaniami oprogramowania Oracle Database (25)
      • Pobieranie oprogramowania Oracle Database (26)
    • Rozważania dotyczące PHP (27)
      • Serwer WWW Apache (28)
      • Dlaczego PHP 5? (28)
      • Pobieranie PHP 5 (29)
    • Zmuszenie PHP i Oracle do współpracy (30)
      • Oracle Instant Client (30)
      • Zend Core for Oracle (31)
    • Używanie Oracle SQL*Plus (31)
      • Dlaczego warto używać SQL*Plus w programowaniu PHP/Oracle? (31)
      • Nawiązywanie połączenia z bazą danych za pomocą SQL*Plus (32)
      • Wykonywanie skryptów z poziomu SQL*Plus (34)
    • Połączenie wszystkiego razem (35)
  • Utworzenie pierwszej aplikacji PHP/Oracle (37)
    • Nawiązywanie połączenia z bazą danych (40)
      • Używanie metody Local Naming (40)
      • Używanie metody Easy Connect (41)
    • Wykonywanie poleceń SQL względem bazy danych (42)
    • Pobieranie i wyświetlanie wyników (42)
  • Podsumowanie (43)

Rozdział 2. Połączenie PHP i Oracle (45)

  • Przedstawienie rozszerzenia PHP OCI8 (45)
    • Dlaczego warto używać rozszerzenia OCI8? (46)
    • Przetwarzanie poleceń za pomocą rozszerzenia OCI8 (46)
  • Nawiązywanie połączenia z Oracle za pomocą rozszerzenia OCI8 (51)
    • Definiowanie ciągu tekstowego połączenia (51)
    • Funkcje rozszerzenia OCI8, które służą do nawiązywania połączenia z Oracle (52)
  • Analizowanie i wykonywanie poleceń SQL za pomocą rozszerzenia OCI8 (53)
    • Przygotowywanie poleceń SQL do wykonania (54)
    • Używanie zmiennych wiązanych (54)
    • Wykonywanie poleceń SQL (56)
    • Obsługa błędów (56)
      • Używanie funkcji oci_error() (57)
      • Używanie funkcji trigger_error() (57)
      • Używanie wyjątków (58)
  • Pobieranie wyników za pomocą funkcji rozszerzenia OCI8 (59)
    • Funkcje rozszerzenia OCI8, które służą do pobierania wyników (59)
    • Pobieranie kolejnego rekordu (60)
    • Pobranie wszystkich rekordów (61)
  • Alternatywy dla rozszerzenia PHP OCI8 (63)
    • Używanie PEAR DB (63)
    • Używanie ADOdb (65)
    • Używanie PDO (66)
    • Tworzenie własnej biblioteki na bazie rozszerzenia OCI8 (67)
  • Podsumowanie (68)

Rozdział 3. Przetwarzanie danych (71)

  • Implementacja logiki biznesowej aplikacji PHP/Oracle (72)
    • Kiedy przenosić dane do miejsca działania procesu przetwarzania? (72)
    • Zalety przeniesienia procesu przetwarzania danych do samych danych (73)
    • Sposoby implementacji logiki biznesowej wewnątrz bazy danych (74)
    • Współpraca między komponentami implementującymi logikę biznesową (75)
  • Używanie skomplikowanych poleceń SQL (76)
    • Używanie funkcji Oracle SQL w zapytaniach (76)
      • Funkcje Oracle SQL kontra przetwarzanie danych w PHP (77)
      • Funkcje agregujące (79)
      • Klauzula GROUP BY (80)
    • Używanie złączeń (80)
    • Wykorzystanie zalet widoków (83)
      • Kluczowe korzyści płynące z używania widoków (83)
      • Ukrywanie złożoności danych za pomocą widoków (84)
      • Używanie klauzuli WHERE (85)
  • Używanie podprogramów składowanych (87)
    • Czym są podprogramy składowane? (87)
    • Zalety podprogramów składowanych (89)
    • Przykład użycia podprogramu składowanego (90)
    • Tworzenie podprogramów składowanych (94)
    • Wywoływanie podprogramów składowanych z poziomu PHP (95)
  • Używanie wyzwalaczy (97)
    • Tworzenie wyzwalaczy (98)
    • Wywoływanie wyzwalaczy (99)
    • Wywoływanie procedur składowanych z poziomu wyzwalacza (99)
  • Podsumowanie (100)

Rozdział 4. Transakcje (103)

  • Ogólny opis transakcji (104)
    • Czym jest transakcja? (104)
    • Czym są reguły ACID? (105)
    • W jaki sposób transakcje działają w Oracle? (106)
    • Używanie transakcji w aplikacjach PHP/Oracle (107)
    • Strukturyzacja aplikacji PHP/Oracle w celu nadzorowania transakcji (110)
  • Tworzenie kodu transakcyjnego (113)
    • Nadzorowanie transakcji z poziomu PHP (113)
    • Przenoszenie kodu transakcyjnego do bazy danych (119)
      • Używanie wyzwalaczy (119)
      • Wycofanie na poziomie polecenia (120)
  • Rozważania dotyczące izolacji transakcji (123)
    • Którą funkcję rozszerzenia OCI8 służącą do nawiązywania połączenia należy wybrać? (123)
    • Kwestie związane z współbieżnym uaktualnianiem (127)
      • Kwestie związane z nakładaniem blokad (127)
      • Utracone uaktualnienia (129)
    • Transakcje autonomiczne (132)
  • Podsumowanie (135)

Rozdział 5. Podejście zorientowane obiektowo (137)

  • Implementacja klas PHP, które pozwalają na współpracę z Oracle (138)
    • Bloki budulcowe aplikacji (138)
      • Tworzenie zupełnie od początku własnej klasy PHP (139)
      • Testowanie nowo utworzonej klasy (141)
      • Wykorzystanie zalet funkcji programowania zorientowanego obiektowo w PHP 5 (142)
    • Funkcjonalność i implementacja (144)
    • Ponowne używanie kodu (146)
    • Obsługa wyjątków (146)
      • Modyfikacja istniejącej klasy w celu użycia wyjątków (147)
      • Rozróżnienie między odmiennymi rodzajami błędów (149)
      • Czy wyjątki koniecznie oznaczają błędy? (152)
  • Rozszerzanie istniejących klas (152)
    • Używanie klas standardowych (152)
      • Pakiet PEAR::Auth w działaniu (153)
      • Zabezpieczanie stron za pomocą PEAR::Auth (155)
    • Dostosowanie klas standardowych do własnych potrzeb (157)
      • Dostosowanie do własnych potrzeb PEAR::Auth (157)
      • Budowanie mniejszego kodu klienta (160)
  • Oddziaływania między obiektami (161)
    • Kompozycja (161)
    • Agregacja (164)
  • Komunikacja bazująca na zdarzeniach (168)
  • Używanie właściwości obiektowych Oracle (170)
    • Używanie typów obiektowych w Oracle (170)
    • Implementacja logiki biznesowej za pomocą metod obiektów Oracle (171)
    • Używanie obiektów Oracle w celu uproszczenia tworzenia aplikacji (174)
  • Podsumowanie (175)

Rozdział 6. Bezpieczeństwo (177)

  • Zabezpieczanie aplikacji PHP/Oracle (178)
    • Uwierzytelnianie użytkowników (178)
    • Oddzielenie zarządzania bezpieczeństwem od danych (179)
      • Używanie dwóch schematów bazy danych w celu zwiększenia bezpieczeństwa (180)
      • Używanie trzech schematów bazy danych w celu zwiększenia bezpieczeństwa (182)
      • Używanie pakietów PL/SQL i funkcji tabelarycznych w celu zapewnienia bezpiecznego dostępu do danych bazy danych (183)
      • Używanie atrybutu %ROWTYPE (187)
      • Budowanie własnego magazynu dla klasy PEAR::Auth (189)
      • Testowanie systemu uwierzytelniania (190)
    • Przeprowadzanie uwierzytelniania na podstawie tożsamości użytkownika (192)
      • Używanie sesji do przechowywania informacji o uwierzytelnionym użytkownika (192)
      • Przechowywanie informacji o użytkowniku w zmiennych pakietowych (193)
      • Ochrona zasobów na podstawie informacji dotyczących uwierzytelnionego użytkownika (195)
  • Używanie skrótów (199)
    • Tworzenie skrótów haseł (200)
    • Modyfikacja systemu uwierzytelniania w celu przeprowadzenia operacji tworzenia skrótu (202)
  • Implementacja dokładnej kontroli dostępu za pomocą widoków bazy danych (204)
    • Implementacja bezpieczeństwa na poziomie kolumny za pomocą widoków (205)
    • Maskowanie wartości kolumn zwracanych aplikacji (208)
      • Używanie funkcji DECODE() (208)
    • Implementacja bezpieczeństwa na poziomie rekordu za pomocą widoków (211)
  • Bezpieczeństwo na poziomie rekordu przy użyciu funkcji VPD (214)
  • Podsumowanie (217)

Rozdział 7. Buforowanie (219)

  • Buforowanie danych za pomocą Oracle i PHP (220)
    • Buforowanie zapytań w serwerze bazy danych (220)
      • Przetwarzanie poleceń SQL (220)
      • Stosowanie zmiennych wiązanych w celu zwiększenia prawdopodobieństwa użycia bufora puli współdzielonej (222)
    • Używanie kontekstu Oracle podczas buforowania (224)
      • Tworzenie kontekstu globalnego aplikacji (226)
      • Manipulowanie danymi znajdującymi się w kontekście globalnym (228)
      • Zerowanie wartości w kontekście globalnym (232)
    • Mechanizmy buforowania dostępne w PHP (236)
      • Wybór strategii buforowania (236)
      • Wywoływanie funkcji buforowania za pomocą pakietu PEAR::Cache_Lite (237)
      • Uaktualnianie buforowanych danych (240)
  • Implementacja buforowania bazującego na powiadamianiu (242)
    • Używanie funkcji bazy danych powiadamiania o zmianach (244)
      • Kontrola komunikatów powiadamiania (244)
      • Budowanie procedury PL/SQL, która wysyła powiadomienia serwerowi WWW (245)
      • Przeprowadzenie kroków konfiguracyjnych wymaganych przez mechanizm powiadamiania (246)
      • Budowa uchwytu powiadamiania (247)
      • Utworzenie zapytania rejestrującego dla uchwytu powiadamiania (249)
      • Szybki test (250)
    • Implementacja buforowania bazującego na powiadomieniach za pomocą PEAR::Cache_Lite (251)
  • Podsumowanie (253)

Rozdział 8. Aplikacje bazujące na XML-u (255)

  • Przetwarzanie danych XML w aplikacjach PHP/Oracle (256)
    • Przetwarzanie danych XML za pomocą PHP (256)
      • Tworzenie danych XML za pomocą rozszerzenia PHP DOM (257)
      • Wykonywanie zapytań do dokumentu DOM za pomocą XPath (259)
      • Transformacja i przetwarzanie danych XML za pomocą XSLT (260)
    • Wykonywanie przetwarzania danych XML wewnątrz bazy danych (265)
      • Używanie funkcji generowania SQL/XML w Oracle (265)
      • Przeniesienie całego procesu przetwarzania danych XML do bazy danych (268)
      • Przechowywanie danych XML w bazie danych (269)
      • Przeprowadzanie transformacji XSLT wewnątrz bazy danych (271)
  • Budowanie aplikacji PHP na podstawie Oracle XML DB (272)
    • Używanie bazy danych Oracle do przechowywania, modyfikowania i pobierania danych XML (273)
      • Dostępne opcje przechowywania danych XML w bazie danych Oracle (273)
      • Używanie XMLType do obsługi danych XML w bazie danych (275)
      • Używanie schematów XML (277)
      • Pobieranie danych XML (281)
    • Uzyskanie dostępu do danych relacyjnych za pomocą widoków XMLType (285)
      • Używanie widoków XMLType (285)
      • Tworzenie widoków XMLType bazujących na schemacie XML (286)
      • Przeprowadzanie operacji DML w widoku XMLType bazującym na schemacie XML (289)
    • Używanie repozytorium Oracle XML DB (293)
      • Manipulowanie zasobami repozytorium za pomocą kodu PL/SQL (294)
      • Uzyskanie dostępu do zasobów repozytorium za pomocą SQL (294)
      • Wykorzystanie zalet standardowych protokołów internetowych (295)
    • Obsługa transakcji (297)
  • Pobieranie danych za pomocą Oracle XQuery (298)
    • Używanie silnika XQuery do budowania danych XML na podstawie danych relacyjnych (299)
    • Rozłożenie danych XML na postać danych relacyjnych (301)
  • Podsumowanie (302)

Rozdział 9. Usługi sieciowe (303)

  • Udostępnienie aplikacji PHP/Oracle jako usługi sieciowej za pomocą rozszerzenia PHP SOAP (304)
    • Komunikacja za pomocą SOAP (304)
    • Co jest wymagane do zbudowania usługi sieciowej SOAP? (305)
    • Budowanie usługi sieciowej SOAP na podstawie aplikacji PHP/Oracle (307)
    • Budowanie logiki biznesowej usługi sieciowej wewnątrz bazy danych (308)
      • Tworzenie schematu XML przeznaczonego do weryfikacji nadchodzących dokumentów (308)
      • Generowanie unikalnych identyfikatorów dla przekazywanych dokumentów (311)
      • Tworzenie podprogramów PL/SQL implementujących logikę biznesową usługi sieciowej (313)
    • Budowanie uchwytu klasy PHP (317)
    • Używanie WSDL (319)
    • Tworzenie serwera SOAP za pomocą rozszerzenia PHP SOAP (322)
    • Budowanie klienta SOAP w celu przetestowania serwera SOAP (323)
  • Bezpieczeństwo (326)
    • Implementacja logiki autoryzacji wewnątrz bazy danych (327)
    • Tworzenie uchwytu klasy PHP (329)
    • Tworzenie dokumentu WSDL (330)
    • Tworzenie skryptu klienta (332)
  • Podsumowanie (333)

Rozdział 10. Aplikacje oparte na Ajaksie (335)

  • Budowanie aplikacji PHP/Oracle opartych na Ajaksie (336)
    • Ajax - zasada działania (336)
    • Projekt aplikacji monitorującej opartej na Ajaksie/PHP/Oracle (337)
    • Rozwiązanie oparte na Ajaksie (339)
      • Tworzenie struktur danych (339)
      • Tworzenie skryptu PHP przetwarzającego żądania Ajaksa (340)
      • Używanie obiektu JavaScript - XMLHttpRequest (341)
      • Złożenie aplikacji w całość (345)
      • Użycie pamięci podręcznej w celu zwiększenia szybkości pracy aplikacji (347)
  • Implementacja rozwiązań Master/Detail z użyciem metodologii Ajax (348)
    • Projektowanie rozwiązania Master/Detail wykorzystującego Ajaksa (348)
    • Opis działania przykładowej aplikacji (349)
      • Tworzenie struktur danych (351)
      • Generowanie kodu HTML za pomocą Oracle XQuery (353)
      • Wysyłanie żądań POST za pomocą Ajaksa (354)
      • Tworzenie stylów CSS (356)
      • Złożenie aplikacji w całość (357)
  • Podsumowanie (358)

Dodatek A: Instalacja oprogramowania PHP i Oracle (359)

  • Instalacja oprogramowania Oracle Database (360)
    • Instalacja wydań Oracle Database Enterprise/Standard (360)
    • Instalacja wydania Oracle Database Express Edition (363)
      • Instalacja wydania Oracle Database XE w systemie Windows (363)
      • Instalacja wydania Oracle Database XE w systemie Linux (365)
    • Instalacja serwera WWW Apache (365)
  • Instalacja PHP (367)
    • Instalacja PHP w systemie Windows (367)
    • Instalacja PHP w systemie z rodziny Unix (368)
    • Testowanie PHP (369)
  • Zbudowanie mostu między Oracle i PHP (369)
    • Biblioteki Oracle Instant Client (369)
    • Włączenie rozszerzenia OCI8 w istniejącej instalacji PHP (371)
    • Instalacja narzędzia SQL*Plus Instant Client (372)
  • Instalacja Zend Core for Oracle (373)
    • Instalacja Zend Core for Oracle w systemie Windows (373)
    • Instalacja Zend Core for Oracle w systemie Linux (374)

Skorowidz (375)

Kategoria: Bazy danych
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-246-6940-0
Rozmiar pliku: 4,8 MB

BESTSELLERY

Kategorie: