Mozilla jako platforma aplikacji Paweł Hryczuk 11 maja 2006
Plan prezentacji Wprowadzenie historia Mozilli czym jest Mozilla Architektura składniki platformy technologie platformy Zastosowania i porównania rodzaje zastosowań porównanie z innymi platformami Moduł WebMemo omówienie pokaz na żywo
Początki Mozilli Konkurencja Netscape Navigatora z NCSA Mosaic Mozilla pochodzi od Mosaic killer początkowo nazwa kodowa Navigatora i maskotka w firmie Netscape Microsoft po nieudanej próbie przejęcia Navigatora wykupuje Mosaica Tzw. browser wars między Netscape a Microsoft walka o kontrolę nad standardami sieciowymi
Narodziny Mozilli 23 lutego 1998 Firma Netscape zrzeka się praw autorskich do kodu Navigatora nigdy wcześniej duża firma nie zdecydowała się na taki krok powodem była rosnąca przewaga rynkowa Microsoftu Powstaje Mozilla Foundation nadzorująca rozwój projektu o już oficjalnej nazwie Mozilla Mozilla stopniowo uniezależnia się od Netscape a rozwój społeczności programistów udział nowych sponsorów
Ewolucja Ewolucja Mozilli od przeglądarki przez zestaw aplikacji sieciowych do platformy programistycznej Nadal sponsorowana przez Netscape Aktualne wersje Mozilla 1.8 Firefoks 1.5 Dzisiaj jeden z największych na świecie projektów open-source
Czym jest Mozilla Zestawem aplikacji sieciowych Mozilla Application Suite (Seamonkey) Przeglądarką internetową Firefoks Organizacją i społecznością internetową Mozilla Foundation Platformą aplikacji Mozilla Application Framework
Projekty mozilla.org Firefoks Thunderbird SeaMonkey (Mozilla Application Suite) Sunbird (Calendar) Narzędzia dla programistów Bugzilla Tinderbox Bonsai
Ideologia Firefoks browser wars are back Mozilla Technology Evangelism The Book of Mozilla URL: about:mozilla
Architektura
Składniki Mozilli Obsługa interfejsu użytkownika Interpreter Gecko Biblioteka sieciowa Necko Komponenty XPCOM Obsługa Web Services Mechanizm instalacyjny XPInstall
Gecko Oddzielony od pozostałych części Mozilli Niewielki a w pełni funkcjonalny jako przeglądarka Bardzo dobra obsługa standardów W3C restrykcyjny dla programisty, pobłażliwy dla użytkownika Strategia Mark III układ strony powstaje dynamicznie w trakcie ładowania dokumentu przewidywanie dotąd nie otrzymanych znaczników informacja kontrolna RDF usuwanie i dodawanie fragmentów strony nawet po załadowaniu dokumentu
Mozilla platformą aplikacji In computer programming, an application framework is a term usually used to refer to a set of libraries or classes that are used to implement the standard structure of an application for a specific operating system. By bundling a large amount of reusable code into a framework, much time is saved for the developer, since he/she is saved the task of rewriting large amounts of standard code for each new application that is developed. from wikipedia Cechy charakterystyczne Mozilli wieloplatformowość elastyczność specjalizacja w zastosowaniach sieciowych otwarte standardy i specyfikacje W3C open-source i licencja MPL/GPL ciekawe rozwiązania te cechy platformy przenoszą się na aplikacje
Kod źródłowy Większy dwa razy od jądra linuksa Wielkości kodu GNOME 2.0 łącznie z jego 150 standardowymi aplikacjami Ponad 1000 interfejsów i ponad 1000 klas Napisany głównie w C++ pewna część w JavaScript Bardzo ładny i czytelny
Diagram warstwowy XPFE Cross-Platform Front End Warstwa pośrednia XPConnect XPBE Cross-Platform Back End
Przegląd technologii XUL CSS DTD Interfejs użytkownika JavaScript XBL Technologie niskopoziomowe XPCOM XPIDL RDF XPConnect XULRunner XPInstall
XUL XML User Interface Language Deklaratywny język do opisu interfejsu użytkownika bardzo duża elastyczność oddzielenie od logiki brak konieczności kompilacji prosta struktura i przejrzystość Określa kontrolki z atrybutami, strukturę i układ (layout) XUL Templates kontrolki z dynamicznymi danymi
XUL c.d. Przestrzeń nazw XUL http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul Interfejs Mozilli jest napisany w XUL Gdzie jest granica między XUL a HTML? chrome://browser/content
CSS Cascading Style Sheets CSS służy do opisywania prezentacji dokumentów XML W Mozilli CSS określa wygląd kontrolek stylizowanie aplikacji Tematy i skórki (themes & skins) wygląd interfejsu niezależny od struktury proste dodawanie i zmienianie tematów Zgodne ze specyfikacją W3C ok. 200 specyficznych własności
DTD Document Type Definition Sprawdzanie poprawności dokumentów XML również rozwijanie encji rekomendacja W3C W Mozilli służy do lokalizowania aplikacji encje używane w XUL rozwijane do napisów w zależności od aktualnego języka Tłumaczenie jest proste technicznie i nie wymaga znajomości programowania
JavaScript Jeden z najczęściej używanych języków skryptowych odniósł ogromny sukces w programowaniu WWW W Mozilli służy do obsługi interfejsu użytkownika zagnieżdżanie w XUL identyczne jak w HTML instalowanie funkcji obsługi zdarzeń Wywoływanie metod komponentów XPCOM Realizowanie części funkcjonalności często wygodniejszy od C++ na przykład browser.js ma ponad 6000 linii kodu
JavaScript c.d. JavaScript łączy interfejs z logiką poprzez wywołania XPConnect
XBL XML Binding Language Określa sposób działania kontrolek interfejsu rozszerzanie funkcjonalności interfejsu modyfikacja metod i atrybutów kontrolek metody implementowane jako wstawki JavaScript Wysokopoziomowy język obiektowy dziedziczenie, agregacja, interfejsy, itd. zgodny z XML Dodawanie powiązań (bindings) a nie kontrolek nowe elementy opierają się na istniejących prosta implementacja, ale ograniczone możliwości
Przykład powiązania
Programowanie komponentowe Umożliwia zarządzanie nawet bardzo dużym kodem źródłowym niezależna kompilacja komponentów niezależność od języka programowania niezależne testy jednostkowe Oddzielenie interfejsu od implementacji wywołujący nie wie kto implementuje dany interfejs, ani gdzie się znajduje Przywiązanie do zastosowanej platformy
XPCOM Cross-Platform Component Object Model Platforma Mozilla podzielona na współpracujące, ale niezależne komponenty komunikacja przez interfejsy Dynamiczne ładowanie żądanych modułów ogromna oszczędność pamięci szybki start platformy Zarządzanie rejestrem załadowanych modułów odpowiadanie na zapytania typu Czy komponent X implementuje interfejs Y?
Wywoływanie XPCOM Moduł biblioteka dynamiczna jeden albo wiele komponentów Komponent jest usługą udostępniającą metody określone w interfejsie sam może też być klientem
XPCOM metoda NSGetModule() dynamiczne ładowanie komponentu nsimodule rejestracja komponentu dostęp do implementującej klasy nsifactory obiekty są tworzone przez fabryki dostępne jako metody interfejsu
XPCOM Glue Zbiór różnych narzędzi programistycznych to nie są komponenty Biblioteki operacje na ciągach znaków (nsistring) inteligentne wskaźniki (smart pointers) Makra wiele rodzajów asercji Przyczyna charakterystycznego wyglądu kodu Mozilli
XPIDL Cross-Platform Interface Definition Language Pochodzi od CORBA IDL niewielkie różnice techniczne nieznacznie zmodyfikowany kompilator Specyfikowanie interfejsów niezależny od platformy współpracuje z wieloma językami programowania Kompilacja do biblioteki typów szkieletu C++ dokumentacji HTML Część interfejsów oznaczona jako frozen
RDF Resource Description Framework RDF formułowanie zdań o strukturze podmiot predykat obiekt definiowanie słownictwa rekomendacja W3C W Mozilli spełnia podwójną rolę grafowy model opisywania zasobów internetowych i ich wzajemnych relacji np. hierarchiczne drzewo zakładek mechanizm serializacji przesyłanie danych przez sieć aplikacje rozproszone
Źródła danych (datasources) Główne zastosowanie RDF Bardzo abstrakcyjny i elastyczny model reprezentowania informacji stosowany również dla tabelkowych danych Trzy rodzaje przechowywane w pamięci serializowane i zapisywane na dysku złożone Reprezentowane za pomocą wzorców XUL jako drzewa, tabeli, menu
XPConnect Cross-Platform Connect Niewielka warstwa pośrednia między XPFE a XPBE Wykorzystywanie komponentów XPCOM w innych językach JavaScript Python Java Perl (w trakcie przygotowywania) Same komponenty mogą być pisane w C++ oraz JavaScript
XULRunner Zamienia zbiór bibliotek w platformę aplikacji instalacja, aktualizacja i deinstalacja aplikacji w systemie operacyjnym początkowe ładowanie platformy runtime package Programiści niezależnych aplikacji w ten sposób uruchamiają je razem z platformą Wiele aplikacji na jednej platformie
XPInstall Cross-Platform Install Mechanizm rozszerzania aplikacji Określa budowę pakietu strukturę katalogów format pliku z informacją o pakiecie (manifest) archiwum w formacie zip Zainstalowany kod otrzymuje pełne uprawnienia podpisy cyfrowe przy instalacji rozszerzeń
On-line Alternatywa dla instalowania aplikacji lokalnie strony WWW napisane w języku XUL dużo większe możliwości niż w HTML Bardzo ograniczone uprawnienia Przykład: gry http://games.mozdev.org
Rola języka XML Wspólny dla wielu technologii XUL, HTML, XBL, RDF, SVG, RSS, MathML Nadaje elastyczność tym technologiom Open-Closed Principle dowolne kodowanie znaków Wszystkie korzystają z tych samych komponentów do parsowania XML Dokumenty reprezentowane zgodnie ze standardem DOM
Zastosowania i porównania
Zagnieżdżanie Gecko Najczęstsze zastosowanie Mozilli Zagnieżdżanie interpretera Gecko wystarczy znajomość API niewielka integracja z platformą przykłady: K-Meleon, Epiphany
Zagnieżdżanie Gecko przykład
Rozszerzenia Pisanie rozszerzeń tematy i skórki tłumaczenia modyfikowanie działania interfejsu wystarczy JavaScript nowa funkcjonalność programowanie komponentów C++ Niewielkie wymagania pamięciowe Linkowanie z XPCOM Glue Integracja z istniejącym interfejsem XUL Overlays
Niezależne aplikacje Bardzo duże możliwości Szybkie tworzenie prototypowych interfejsów Niekoniecznie aplikacje sieciowe np. Sunbird Projekty komercyjne Crocodile Clips ActiveState Komodo
Mozilla vs. DHTML W pewnym sensie każda przeglądarka jest platformą aplikacji Mozilla jest rozwinięciem tego pomysłu Podstawowa różnica HTML: stworzony do hypertekstu XUL: specjalnie zaprojektowany dla UI Pozostałe składniki wspólne Dlatego Mozilla bardzo dobrze nadaje się do tworzenia wizualnych i iteraktywnych aplikacji
Mozilla vs..net Mozilla XPCOM C++ JavaScript Gecko Necko XUL RDF COM.NET C# JScript.NET Avalon Indigo XAML XML Schema Główna różnica polega na dostępności kodu źródłowego i rozszerzalności
Mozilla vs. Java Mozilla aplikacje sieciowe komunikacja przez XML Wiele języków programowania i standardów słaba wielowątkowość Java uniwersalne aplikacje urządzenia przenośne komunikacja przez byte-code bardzo dobra wielowątkowość, narzędzia i dokumentacja
Aplikacje mogą wyglądać identycznie na wszystkich platformach albo wykorzystywać specyficzny look-and-feel systemu
Moduł WebMemo
WebMemo Rozszerzenie Firefoksa Mój projekt magisterski Cel nowa implementacja historii i zakładek drzewo historii Wymagania dodanie nowej funkcjonalności bez modyfikowania istniejącej prosta instalacja efektywność
Baza danych W przeglądarce potrzebna do przechowywania historii odwiedzanych stron wypełnianych formularzy zakładek W nowych aplikacjach może być niezbędna do innych celów Wymagania odporność na awarie elastyczność format tekstowy oszczędność pamięci The last goal could have been done better...
Możliwe rozwiązania XML byłby najlepszym rozwiązaniem ale 10 lat temu obawiano się korupcji danych Zastosowanie bazy danych z ACID zakończone niepowodzeniem problemy z licencjonowaniem Stworzenie abstrakcyjnego interfejsu MDB niezależność od konkretnego rozwiązania możliwość użycia komercyjnej bazy danych w Netscape Navigator, a darmowej w Mozilli
Mork Pierwsza implementacja MDB w założeniu tymczasowa w praktyce używana do dziś... Zalety spełnia powyższe wymagania stabilność Ograniczenia nieefektywność nieczytelność
Mork przykład
Mork It is impossible for non-mozilla programs to extract data from history.dat because it uses Mork, which is and I do not use these words lightly the single most braindamaged file format that I have ever seen in my nineteen year career. from Mozilla Bug 241438
SQLite Minimalistyczna implementacja bazy danych spełnia ACID implementuje większość standardu SQL92 nierestrykcyjna licencja i dostępność źródeł Ma w przyszłości zastąpić format Mork ale nigdy nie było to priorytetem Zaimplementowany w WebMemo
Datasource Warstwa pośrednia między bazą danych a interfejsem użytkownika Dane muszą być sformatowane w RDF konieczna ręczna konwersja typów Implementacja 15 metod interfejsu RDF różne operacje na danych pełna kontrola Wykorzystywanie słownictwa Mozilli oraz własnego
Drzewo historii Pomysł przedstawienia historii jako drzewa a nie listy nie istnieje implementacja ani dla Firefoksa, ani dla IE Przechwytywanie wydarzeń historii globalna i lokalna historia pole referrer niektóre strony nie działają poprawnie Zastosowanie kontrolki drzewa jedna z najbardziej złożonych kontrolek XUL
Implementacja WebMemo Główna część kodu w C++ prawie wszystkie dostępne w sieci rozszerzenia ograniczają się do JavaScriptu JavaScript do obsługi interfejsu napisanego w XUL jeden komponent w JavaScript Kompilacja niezależna od Mozilli wymaga plików nagłówkowych komponentów Interfejsy frozen nie wystarczą Inne zagadnienia profile i uruchamianie platformy zwalnianie zadeklarowanej pamięci
Budowa pakietu content pliki XUL i CSS locale pliki DTD components moduły komponentów install.rdf opis pakietu META-INF podpis cyfrowy pakietu
Moje doświadczenia Skomplikowana konfiguracja środowiska sama kompilacja Mozilli nie jest prosta Dużo trudności szczególnie na początku słaba dokumentacja szczególnie zaawansowana niewiele materiałów w sieci duży kod źródłowy Dobre strony bardzo ładny kod źródłowy i styl programowania szeroki zakres stosowanych technologii ciekawa architektura
Podsumowanie Mozilla jest 8-letnim projektem, stabilnym i nieustannie ewoluującym Firefoks zyskał ogromną popularność Jako platforma aplikacji Mozilla jest bardzo dobra do pewnych zastosowań aplikacje sieciowe interaktywne i wizualne aplikacje W Mozilli istnieje sporo niedokończonych i niedopracowanych fragmentów kodu równie wiele funkcjonalności można dodać...
Więcej informacji Witryny http://www.mozilla.org http://developer.mozilla.org Nigel McFarlane Rapid Application Development with Mozilla David Boswell i inni Creating Applications with Mozilla Doug Turner i Ian Oeschger Creating XPCOM Components Neil Deakin, XUL Tutorial
Pokaz na żywo