Mozilla z pohledu vývojáře David Majda, CZilla — prezentace na předmět Linux (SWI043) na MFF UK
Co se dovíte, aneb osnova historie Mozilly architektura Mozilly tvorba GUI, jazyk XUL jak si napsat rozšíření XULRunner, aneb světlé zítřky několik malých „lákadel“ vývoje po Mozillou (tvorba pluginů) minule dnes
Architektura aplikací Mozilly (2/2) NSPR JavaScript engine XPCOM XPConnect zpracování HTML, CSS, XML, XUL, XBL, RDF C C++ XML JS aplikace – GUIaplikace – komponenty pomocné knihovny (images, DB,…) C++
XUL (čti zůl) XML User Interface Language GUI zapsáno deklarativně v XML –jen jednou pro všechny platformy vzhled v CSS „oživeno“ JavaScriptem jako webové stránky kdo umí tvořit webové stránky, umí i psát aplikace pod Mozillou
Rozšiřitelnost architektura snadno rozšiřitelná –nové XUL, CSS a JS soubory (bez rekompilace) –nové XPCOM komponenty (typicky nutná kompilace) –pro pohodlí sbalené do XPI balíčku, doplněné metadaty rozšíření Zde jsme minule skončili
Struktura rozšíření install.rdf chrome.manifest plugins/... components/... chrome/ content/ skin/ locale/
Instalace rozšíření globální × pro konkrétního uživatele mnoho metod: –zkopírování XPI do adresáře extensions –„pointer“ na XPI z tohoto adresáře –záznam v registrech (Windows) –otevření v prohlížeči –… správce rozšíření –instalace/odinstalace –konfigurace, zakazování,…
XULRunner runtime prostředí pro běh XUL aplikací pouze infrastruktura nutná pro běh – XUL a XPCOM komponenty zajišťující funkcionalitu dodává aplikace lze sdílet mezi aplikacemi (ale není nutné) NSPR JavaScript engine XPCOM XPConnect zpracování HTML, CSS, XML, XUL, XBL, RDF C C++ XML JS aplikace – GUIaplikace – komponenty pomocné knihovny (images, DB,…) C++ XULRunner
Další lákadla vývoje pod Mozillou tag vylepšení JavaScriptu –funkcionální programování –E4X –iterátory a generátory (budoucnost) integrace Pythonu (budoucnost)
Tag vyznačuje ve stránce oblast pro kreslení samotné kreslení – JavaScript –bohaté 2D API podobné běžným grafickým toolkitům –umí i průhlednost, gradienty, vzorky, cesty, bézierovy křivky, transformace… vymyslel Apple, nyní pod křídly WHATWG ukázka
JavaScript 1.6 a dál… (1/3) Funkcionální programování squares = [1, 2, 3].map(Math.sqrt); // [1, 4, 9] filtered = [12, 5, 8, 130, 44].filter( function(element, index, array) { return element >= 10 } ); // [12, 130, 44] function printElement(element, index, array) { alert("[" + index + "] is " + element); } [2, 5, 9].forEach(printElement); // [0] is 2 // [1] is 5 // [2] is 9
JavaScript 1.6 a dál… (2/3) E4X = začlenění syntaxe pro práci v XML/DOM přímo do JavaScriptu function createTable() { // vytvoříme E4X objekt pro dokument var doc = new XML(document); var mytablebody = doc..body.TABLE.TBODY; for (var j = 0; j < 2; j++) { // přidáme prázdný řádek tabulky mytablebody.TR[j] = ""; // přidáme buňky s obsahem for (var i = 0; i < 2; i++) mytablebody.TR[j].TD[i] = "cell is row " + j + ", column " + i; } // nastavíme tabulce hodnotu atributu border = 2; }
JavaScript 1.6 a dál… (3/3) Generátory, iterátory à la Python –JavaScript 1.7 js> function count(n) { for (var i = 0; i < n; i++) yield i; } js> g = count(10) [object Generator] js> g.next() 0 js> g.next() 1 js> two_to_nine = [i for i in g] 2,3,4,5,6,7,8,9 js> squares_to_20 = [i * i for i in count(20)] 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,25 6,289,324,361
Integrace Pythonu důvod: přilákání vývojářů v Pythonu, využití knihoven půjde použít všude, kde dnes JavaScript –XUL, XPCOM,… v Gecko 1.9/Firefox 3.0
Kdy vyvíjet pod Mozillou? Když potřebujete… –multiplatformnost –práci s HTML/XML/CSS –síťové služby, web services –lokalizovatelnost –rychlý vývoj, časté změny –velké aplikace (XPCOM, modularizace)
Kdy naopak Mozillu nepoužívat? Když chcete… –náročnou grafiku (work in progress) –hrubý výkon (částečně lze v C++ a XPCOM) –využívat všechny možnosti nativního GUI –přístup z kteréhokoliv počítače na světě (lepší je webová aplikace)
Kam pro další informace –centrum pro vývojáře Mozilly –velké množství dokumentace –wiki = rychlý vývoj, můžete se zapojit –rozcestník v češtině –dokumentace podstatně méně –také se můžete zapojit :-)
Dotazy?