Razvoj za XULRunner
Pred davnimi časi je bil spletni brskalnik Netscape Mosaic, postal je skupek Communicator, ta pa je postal projekt Mozilla. Večino poti je bil poudarek na spletnih pripomočkih, predvsem brskalniku, odjemalcu e-pošte in urejevalniku HTML. Vendar pa so številni razvijalci na kodni osnovi Mozille ponudili svoje programe in razširitve. Skupnost razvijalcev se je organizirala v projekt mozdev.org in ponudila skupek orodij za razvoj programov na podlagi Mozille.
Razvoj in poznejši uspeh brskalnika Firefox je bil ključni trenutek preobrata. Ne le, da je ponazarjal dokončno osvoboditev projekta Mozilla iz razbitin Netscape/AOL, temveč je javnosti ponazoril celoten potencial nove kodne osnove. Moduli in programerski vmesniki so se stabilizirali, dodajali so se novi gradniki, uporabniški vmesnik je dozorel. Pozornost razvijalcev so opazili tudi v organizaciji Mozilla Foundation in prvič posvetili nekaj virov razvoju programerske podlage v obliki projekta XULRunner. V nadaljevanju bomo spoznali, kaj je XULRunner, in predstavili vzpostavitev programa zanj korak za korakom. Zgled, ki ga bomo predstavili, je nalagalnik slik za sistem Marela.
Kaj je?
XULRunner je podlaga ali okolje za izvajanje programov Mozille, znan tudi kot izvajalno okolje Gecko (GRE). Najprej moramo ločevati med temeljnim programov XULRunner in programom, ki ga razvijemo zanj. XULRunner bomo imenovali podlaga, kodo in zmožnosti, ki jih napišemo sami, pa program. Cilji XULRunnerja so distribucija temeljnega skupka stabilnih modulov, možnost razvoja uporabniških programov skozi standardiziran programerski vmesnik (API) in ponujanje standardnih storitev, kot je prilagodljivo ime izvedljivega programa, ikone oken, uporaba sistemskih nastavitev in še več. Za seznam sestavnih modulov in zmožnosti izvajalnega okolja je priporočljivo podrobno pregledati dokumentacijo, na voljo na spletišču Mozilla Developer Center. XULRunner je že dosegel točko, ki mu omogoča uporabo v poslovnih programih, kot demonstrirajo primeri ogrodja AJAX, dodatek za okolje Eclipse za razvoj spletnih programov ali zmogljiv predvajalnik večpredstavnih datotek Songbird.
Predvajalnik večpredstavnih datotek Songbird
Če smo nestrpni in bi radi čimprej zagnali svoj program, imamo na voljo dvoje. Iz spleta lahko prenesemo izvršljivo različico XULRunnerja. Na voljo imamo stabilno različico iz veje 1.8, preizkusno različico 1.8.0.1 in "nočno" verzijo, zgrajeno iz trenutno najbolj sveže in verjetno najmanj stabilne kode. Če želimo večji nadzor ali če bi radi sami kaj prispevali k projektu, lahko prenesemo izvirno kodo in XULRunner zgradimo sami. Napotke najdemo v dokumentaciji. Če bomo za prenos kode uporabili CVS, ne pozabimo uporabiti nastavitve MOZ_CO_OPTIONS=xulrunner. Zgledi v nadaljevanju bi morali delovati v vseh trenutnih različicah in so namenjeni predvsem hitremu začetku preizkušanja okolja.
Struktura programa
Če smo se že srečali z razširitvami za Firefox ali Thunderbird, bomo strukturo programa za XULRunner hitro prepoznali. Oglejmo si najprej strukturo map za naš program - Marela Uploader (ime paketa je marup):
marup/
|
|
+------- application.ini
|
+------- chrome.manifest
|
+------- chrome/
|
+------- components/
|
+------- defaults/
|
+------- preferences/
Datoteka application.ini je jedro programa, brez katerega se ne bo izvedel. Vsebuje prilagoditve in informacijo o različici. Več o tem v nadaljevanju. Datoteka chrome.manifest je tekstovna in vsebuje napotke za registracijo uporabniškega vmesnika (chrome). V izpisu 1 je vidna njena vsebina za paket marup.
content marup jar:chrome/marup.jar!/content/
locale marup en-US jar:chrome/marup.jar!/locale/en-US/
skin marup classic/1.0 jar:chrome/marup.jar!/skin/
Izpis 1: Vsebina datoteke chrome.manifest za program Marela Uploader.
V osnovi datoteka opravi preslikavo vsebine iz paketa JAR, ki določa uporabniški vmesnik (chrome JAR) v register lokacij izvajalnega okolja. V našem primeru je to datoteka marup.jar v mapi chrome/. Prva vrstica preslika posebni naslov URL s protokolom "chrome": chrome://marup/content/ v mapo content/ shranjeno v omenjenem paketu JAR. Seveda je struktura map v paketu JAR lahko poljubna, samo pravilno jo moramo preslikati z omenjenimi nastavitvami. Distribuiramo lahko različne krajevne nastavitve in uporabniške vmesnike, uporabiti moramo le pravilne krajevne kode (locale codes).
Mapa components/ vsebuje gradnike XPCOM ali javascript, ki jih naš program potrebuje za delovanje. Mapo defaults/ lahko uporabimo za odlagališče vseh drugih potrebnih datotek, mapa preferences/ pa mora vsebovati privzete nastavitve našega programa.
Vzpostavitev okolja
Pred razpečevanjem programa moramo sestaviti še nekaj koščkov. Datoteka application.ini vsebuje opisno informacijo, potrebno za zagon programa. Njena vsebina za Marela Uploader je vidna v izpisu 2.
[App]
Vendor=Marela
Name=Uploader
Version=0.2
BuildID=20060119
Copyright=Copyright (c) 2006 Neko d.o.o.
[Gecko]
MinVersion=1.8
MaxVersion=1.9a1
Izpis 2: Vsebina opisnih podatkov v datoteki application.ini za program Marela Uploader.
Pomembni nastavitvi, za začetek, sta Vendor in Name. Druge so verjetno razumljive same po sebi. Omenimo, da je v času nastajanja članka za nastavitev MaxVersion treba uporabiti 1.9.a1 (alfa preizkusna različica). Če želimo omogočiti upravnik razširitev (Extension Manager), moramo v datoteko dodati še odsek [XRE] in vanj nastavitev EnableExtensionManager=true.
Izvajalno okolje mora vedeti, kje se program zažene. Bodisi ustrezno vstopno točko v kodi ali okno uporabniškega vmesnika. Nastavitev shranimo v datoteko javascript znotraj mape defaults/preferences/. Za naš primer se imenuje marup-prefs.js in vsebuje naslednjo vrstico:
pref("toolkit.defaultChromeURI", "chrome://marup/content/marup.xul");
Nastavitev je seveda od programa do programa drugačna. Zatem se moramo odločiti, ali bomo dovolili sočasno izvajanje več izvodov našega programa. Če želimo le en izvod, dodamo naslednjo nastavitev:
pref("toolkit.singletonWindowType", "marup:main");
Nastavitev te lastnosti mora ustrezati atributu windowtype, ki smo ga uporabili pri določanju osnovnega okna programa (v našem primeru je shranjen v datoteki marup.xul).
Razpečevanje
V načrtu je izdelava podlage, ki bo omogočala pripravo namestitvenih postopkov za lažje razpečevanje naših programov, žal pa še ni nared. Tako imamo na voljo nekaj drugačnih možnosti. Prvi dve zahtevata sodelovanje uporabnika in omogočata razpečevanje programa neodvisno od izvajalnega okolja XULRunner. Zadnja, ki se danes še najbolj uporablja, je skupno razpečevanje podlage in programa.
Program lahko razpečujemo v obliki stisnjenega paketa (datoteka XPI/ZIP/JAR) ali kot posamezne datoteke v ustrezni strukturi map, kot smo jo opisali zgoraj. Medtem ko je slednji način primernejši za razvojne različice, ki jih tako laže prilagajamo, se prvi uporablja za razpečevanje končnim uporabnikom, saj zahteva manj prenosov in dela na strani uporabnika. Program Marela Uploader se razpečuje v paketu marup.xpi.
Uporabniški vmesnik programa Marela Uploader
Prijava izvajalnega okolja
Ko prenesemo ali sami zgradimo XULRunner, ga moramo še pripraviti za uporabo z drugimi programi. Najprej moramo prijaviti izvajalno okolje GRE. To opravimo iz ukazne vrstice z naslednjo vrstico:
xulrunner -register-global
Ukaz posodobi sistemski register (Windows, HKLM\Software\mozilla.org\GRE) oziroma sistemsko nastavitev (Linux, /etc/gre.d) za vse sistemske uporabnike. Če želimo prijaviti XULRunner le za trenutnega uporabnika, poženemo:
xulrunner -register-user
Paziti moramo pri rabi več okolij GRE. V trenutnem stanju si lahko skačejo v zelje in najbolje je, da vse prejšnje namestitve odstranimo, skupaj z morebitnimi sledmi v registru ali med sistemskimi nastavitvami.
Namestitev in zagon programa
Prvi način zagona je neposredna uporaba datotek, ustrezno razporejenih po mapah, kjer izvajalnemu okolju sporočimo pot do datoteke application.ini:
xulrunner /pot/do/programa/application.ini
To požene program neposredno z mesta, kjer so posamezne datoteke, in je neprecenljivo pri preizkušanju nedokončanih različic programa.
Drugi način je v rabi pri dokončanem programu. Uporabnik mora program najprej napovedati izvajalnemu okolju s stikalom -install-app. Ta pristop je seveda silno primitiven in ga bodo prihodnje različice morale nadomestiti s čim bolj prijaznim.
Za sisteme Linux zapišemo:
./xulrunner -install-app /pot/do/paketa/marup.xpi
Za sisteme Macintosh:
/Library/Frameworks/XUL.framework/xulrunner-bin -install-app /pot/do/paketa/marup.xpi
Za Okna pa:
xulrunner.exe -install-app c:\pot\do\paketa\marup.xpi
Zdaj je program nared za zagon. Vsak izvod programa teče kot lasten proces in tako zagotavlja mirno sožitje z drugimi programi za podlago Mozilla. Ni nam treba skrbeti, da nam bo ob morebitnem sesutju potegnil za seboj še druge programe, kot nam jo npr. lahko zagode dodatek za Firefox. S tem je povezano tudi dejstvo, da bo imel program svoj prostor za nastavitve na uporabniškem disku (user profile).
Vezano razpečevanje
Zaradi vse prej kot elegatnega načina distribucije paketa se večina trenutnih programov razpečuje skupaj z izvajalnim okoljem in prilagojeno namestitvijo. Za zgled lahko vzamemo Songbird, ki se za Okna razpečuje z namestitvenim programom Nullsoft installer. Drug program, Zap!SIP Client, vključuje izvajalno okolje XULRunner v svojem paketu in zahteva njegovo prav posebno različico. Kot rečeno, vgrajeni sistem za nameščanje programov za XULRunner je v delu in ga lahko pričakujemo v prihodnjih različicah.
Prihodnost
Med nastajanjem članka je na voljo stabilna razvojna različica izvajalnega okolja (1.8.0.1). Po načrtih naj bi bil XULRunner 1.9 prva produkcijska različica, ki bi se razpečevala skupaj s Firefoxom 3, ki naj bi prišel v javnost v prvem četrtletju 2007. Ne zdi se torej, da bi se jim v Mozilli posebej mudilo z izdajo res uporabnega okolja. Seveda sta njihova primarna skrb Firefox in Thunderbird, a vendar bi oba z enotnim, nevezanim izvajalnim okoljem samo pridobila. Precej nalog je še odprtih. Vmesnik za vgradnjo (embedding API) za različne podlage še ni določen, to vključuje PyXPCOM, gtkmozembed za Linux in gradnik activex za Okna. Kar precej je še nadležnih hroščev (v bugzilli jih najdemo npr. pod kodami 289668, 319843 in 327392), katerih odpravljanje bo lahko terjalo še kar nekaj časa.
XULRunner ponuja priložnost za razvoj dostojne in stabilne podlage, ki ne le omogoča hiter razvoj namenskih programov, temveč odpira možnost za prodor Mozilline etike in tehnologij tudi na področje razvoja namenskih programov za namizje in svetovni splet.
Nekaj zanimivih naslovov:
developer.mozilla.org/en/docs/XULRunner
www.alphaworks.ibm.com/tech/ajaxtk
ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-mozilla1.8
developer.mozilla.org/en/docs/XULRunner_1.8.0.1_Release_Notes
ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk