ugrás a tartalomhoz

Banteng - a Javascript az asztalra költözik

Hojtsy Gábor · 2005. Ápr. 4. (H), 23.49
Az asztali alkalmazások fejlesztése egyre egyszerűbbé válik, a megoldások fokozatosan közelednek a webes fejlesztés irányába, és ez nemcsak elméletileg, hanem a gyakorlati technikákat, nyelveket tekintve is megfigyelhető. Rendszeresen hírt adunk az olyan asztali szkriptelést lehetővé tevő projektek alakulásáról, mint a PHP-GTK, PHP/TK vagy a szintén PHP-re épülő, ám csak Windows rendszereken használható Winbinder. Az kétségtelen azonban, hogy sok webfejlesztőnek nem munkaeszköze a PHP, és sokkal elterjedtebb nyelvnek tekinthetjük a Javascriptet, amely elsősorban weblapok programozási nyelveként ismert. Lássuk mit tehet számunkra az asztalon!

Könnyen előfordulhat, hogy Geoff Strom nevét még sokáig emlegetni fogjuk, hiszen az ő agyából pattant ki az az ötlet, hogy a GCJ (a GNU Java fordító), a Rhino (a Mozilla projekt Javascript illesztése a Javához), az SWT (az Eclipse standard felület építő eszközkészlete) és a kXML (XML feldolgozó) motort összeházasítva létrehozza a Banteng névre keresztelt projektet.

Jó kérdés, hogy mindezek a komponensek mit tesznek lehetővé számunkra. Nem kevesebbet, mint hogy keresztplatformos asztali alkalmazásokat fejlesszünk, XML-ben megfogalmazva a felület megjelenését és Javascriptben megírva a viselkedést, úgy, hogy alkalmazásunk mindig a futtató rendszer natív megjelenésében tündököl majd. Mondhatni nem semmi. Lássunk egy egyszerű számláló példát a disztribúcióból:

<?xml version='1.0' encoding='UTF-8' ?>

<Shell id="Form" style="SWT.DIALOG_TRIM" text="Counter">
  <RowLayout type="SWT.VERTICAL" fill="true" justify="true" pack="false" />
  <Group text="Counter">
    <FillLayout />
    <Text id="textbox" text="0" style="SWT.BORDER | SWT.READ_ONLY" background="#000" foreground="SWT.COLOR_YELLOW" />
  </Group>
  <Composite>
    <RowLayout fill="true" justify="true" pack="false" />
    <Button id="dec" text="Dec (-)" />
    <Button id="clear" text="Clear" />
    <Button id="inc" text="Inc (+)" />
  </Composite>
</Shell>
Mint látjuk, ez egy egymás alatti sorokban elrendezett megjelenést definiál, az első sorban egy a teret kitöltő szövegmezővel, fekete háttérrel és sárga előtérszínnel, csak olvashatóan. Alatta található három gomb, melyek a szám csökkentését, növelését és a mező törlését szolgálják. Lássuk milyen Javascript kód kelti ezt életre:

load(java.lang.ClassLoader.getSystemClassLoader().getResource("libmoo.js"));

// Event handlers
function dec(event) {
  var number = counter.textbox.getText();
  number = number - 1;
  counter.textbox.setText(String(number));
}
function clear(event) {
  counter.textbox.setText("0");
}
function inc(event) {
  var number = counter.textbox.getText();
  number = Number(number) + 1;
  counter.textbox.setText(String(number));
}

// Load in window
var display = new Display();
var counter = loadBantengForm(null, BANTENG_APP_PREFIX + "counter.xml");

// Hook up events
add_listener(SWT.Selection, counter.dec, dec);
add_listener(SWT.Selection, counter.clear, clear);
add_listener(SWT.Selection, counter.inc, inc);

// Display UI
counter.shell.pack();
counter.shell.open();

// Run dispatch loop
while (!counter.shell.isDisposed()) {
  if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
A fenti counter.xml nevű XML állományt be kell töltenünk, majd hozzá tudjuk rendelni az eseménykezelőket a gombokhoz. Az ablak megjelenítése után a más hasonló asztali megoldásokban megszokott esemény várakozási ciklust indítjuk el, mely akkor lép csak ki, ha a program már lefutott, mely esetben lezárjuk a megjelenítő objektumunkat.

Ezzel a két állománnyal a Banteng futtatóval rendelkező gépeken a számláló alkalmazásunk teljes fényében futhat, akár Mac OS, akár valamilyen Linux vagy Windows az asztali operációs rendszerünk.

Számláló példa különböző rendszereken

Nem feltétlenül elegendő az, hogy az alkalmazásainkat már most is tudjuk futtani a banteng motorral, Geoff sokkal többet tervez. A 0.2-es kiadásban megjelenhet egy fejlesztői környezet, amely felületek, menük kialakítását is segíti majd, aztán következik egy olyan segédeszköz kialakítása, ami saját Banteng alapú programjaink terjeszthető változatainak előállítását hivatott támogatni. Ráadásul az 1.0 felé vezető úton a jobb dokumentáció mellett egy debugger terve is helyet kapott. Érdemes lesz a projekt alakulását figyelemmel kísérni!
 
1

XUL

sajt · 2005. Ápr. 5. (K), 09.51
Ilyeneket lehet csinalni XUL-al is. Nem?
--
Ámon Tamás - http://amon.hu
5

nem egészen

Hojtsy Gábor · 2005. Ápr. 5. (K), 11.56
A XUL nem az opreációs rendszer natív felületét használja, és ez nem mindegy annak, akinek be kell tanítani a munkatársainak a dolgokat. Ez a probléma a PHP-GTK 1 esetén is... Monóval és .NET-tel is lehet ilyesmit csinálni, keresztplatformosan, de az meg sokkal nagyobb elszánást igényel (nagy keretrendszert kell telepíteni).
2

Lehet, hogy reggel van, de

prezi · 2005. Ápr. 5. (K), 10.19
Lehet, hogy reggel van, de én sem értem. Az rendben van, h natív futtatható állományt lehet csinálni, de azért azt én nem tartom olyan nagy dolognak... Főleg, hogy a XUL kiforrottabbnak tűnik, és már most használható (persze, kell hozzá egy mozilla).

Valaki magyarázza el, h miért is jó ez a megoldás!
3

Ez valami olyasmi, hogy egy

Anonymous · 2005. Ápr. 5. (K), 10.34
Ez valami olyasmi, hogy egy java-ban irt javascript interpreter-hez keszit a csako SWT-s GUI meg egyeb java lib binding-eket, s azt mondja ez jo.
4

Hamar ennyire nem jon be

teki · 2005. Ápr. 5. (K), 10.42
Hamar ennyire nem jon be valakinek egyebkent a java, van a jvm-re jopar alternativa.
http://www.robert-tolksdorf.de/vmlanguages.html

(ajanlom pl. a groovy-t)
--
tejfel | http://tejfel.atw.hu | icq:#8330538
6

áttételes

Hojtsy Gábor · 2005. Ápr. 5. (K), 12.00
A Banteng egy áttét, mert a GCJ fordítja le natív kódra a Javát, és a Rhino biztosít hidat a Javascript és a Java között. Mindenesetre a linken érdekes dolgok vannak. Én elsőre félreértettem a fogalmazásod, a linken nem JVM alternatívákat találunk, hanem a JVM-mel működő nyelvekre találunk alternatívákat.
7

Visszaolvasva tenyleg

teki · 2005. Ápr. 5. (K), 15.48
Visszaolvasva tenyleg ketertelmu.

Jah, o GCJ-vel meg binarist is keszit a dologbol. Tudom
manapsag mar nem tema a tarhely, meg a savszelesseg, de
ha jol sejtem nem kimeli ezen eroforrasokat.
Java a gepek nagy reszen amugy is van, szal akar futhatna
JVM-en is, stb.

En is inkabb csak keresem az ertelmet a dolognak,
de nincs tobb mint hogy javascript+xml-el lehessen crossplatform gui
almalmazast kesziteni. Ha valakinek ez kell, akkor itt leszen
egy megoldas.

--
tejfel | http://tejfel.atw.hu | icq:#8330538
8

az értelme

Hojtsy Gábor · 2005. Ápr. 5. (K), 15.59
Senki sem mondta, hogy világmegváltó :) A forráskódok megjelenítése a korábbi hasonló hírekben is (Winbinder, PHP/TK, stb) azzal a céllal történt, hogy olvasóinknak legyen fogalmuk arról, mibe telik így asztali alkalmazást írni. Kíváncsi lennék, hogy hány olyan futattókörnyezetet tud mutatni valaki, amivel ilyen kevés kódból ezt az alkalmazást meg lehet írni keresztplatformosan, úgy, hogy a felület a natív oprendszer megjelenést adja. Geoff nem tagadja, hogy vannak hasonló célú megoldások, de azt mondja, hogy ilyen konstellációban ilyen kis futtatórendszert nemigen lehet felmutatni. Ha mégis, akkor is örömteli, hogy több választási lehetőségünk van, és nem kispályás, hanem igazán jó alternatívák állnak előttünk.

Ps. én kipróbáltam a Bantenget, nem csak a képernyőképek alapján mondom, hogy milyen jó...
9

En kerestem kis meretu

teki · 2005. Ápr. 5. (K), 21.01
En kerestem kis meretu megoldast cross platform gui programocskak irasara, s nem nagyon leltem. A lua-fltk valami hasonlo, de sajna nem tartjak karban. Az 400K + 700K cygwin DLL. Fel megas meret mar egesz elviselheto.

Termeszetesen orulok neki, hogy alkot a srac, nem akarom lebeszelni
rola.

--
tejfel | http://tejfel.atw.hu | icq:#8330538
10

Nem csak a méret a lényeg

Hojtsy Gábor · 2005. Ápr. 5. (K), 21.36
Hát ha valaki Luában akar programozni, lelke rajta :) Szerintem helyzeti előnnyel indulnak az asztali alkalmazások fejlesztésében az ismertebb nyelvek, még akkor is, ha annyira nem kicsi az erőforrás igényük. :)