XaoS 4.3

Címkék

Több mint 3 év után megjelent a XaoS fraktálrajzoló program 4.3-as verziója. A kiadás fő érdekessége, hogy a C++-ban írt program immáron teljes értékűen egy böngészőből is futtatható.

A C++-kódot a Qt 6.5.3-hoz készített WebAssembly fordító alakítja át webes formátumra. A natív kód természetesen továbbra is jóval gyorsabb, mint a HTML/JavaScript/WebAssembly kombináció. Mivel azonban sok helyen (pl. iskolákban) nem engedélyezett, hogy bárki csak úgy szoftvert telepítsen, ezért kézenfekvő, hogy a program online kipróbálására is lehetőség nyíljon.

A portolást Abhishek Tiwari kezdte el a Google Summer of Code 2023 program keretében, a végső verzió Kovács Zoltán munkája.

Hozzászólások

Kipróbáltam, óriási!

A GitHub-on talán célszerű lenne megemlíteni, hogy ha valaki forrásból akarja telepíteni és többféle Qt van nála telepítve, akkor szüksége lehet a következőre:

qmake6 -set QT_INSTALL_PREFIX "/usr/lib64/qt6"

Köszi a visszajelzést! A GitHub-ra hamarosan felírom a tippet!

Windows alatt nem indul. Mindenféle dll-t hiányol.

Ez a fraktálrajzolás nem nagyon hoz lázba, de ez a web alapú Qt-környezetes futtatás egy nagyon nagy királyságnak néz ki. Ezt támogatja minden Qt4-6-os projekt, vagy csak a Qt6-osok? Ha ezt így  a jövőben meg lehetne oldani, hogy platformfüggetlenül, böngészőből lehessen futtatni Qt-s programokat, hogy ne kelljen a sok bloat Qt-s függőségüket feltenni, meg univerzális csomagformátumokat telepítgetni, az nagyon ász lenne. Főleg telón jönne jól, a hülye fingóappok helyett, ha valami normálisabb Qt-s megoldást lehetne használni.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Egyszerűbb alkalmazásokat valószínűleg egyszerűbb portolni. A XaoS esetében két kritikus rész volt: 1. az időzítést Qt-konform (vagy inkább: web-konform) módon kellett megcsinálni, különben a képkockák egyáltalán nem jelentek meg, 2. a felugró ablakokban lévő adatokat aszinkron módon kellett kiolvasni, különben nem voltak többé elérhetőek és így nem frissültek.

A natív verzióban ez a két probléma nem jött elő, mert egy asztali alkalmazás sokféleképpen összerakható. De egy webes alkalmazásnál kötöttebbek a lehetőségek, többek között azért is, mert aszinkron filozófiára van kitalálva. A dokumentáció nem rossz, de nem is annyira részletes. Mindkét probléma megoldására csak sok kísérletezés után tudtunk rájönni, hiába vettük fel a kapcsolatot Qt-os belső szakértőkkel is. Bizonyos korábbi verziókkal voltak fordítási vagy futtatási problémáink is, így például a XaoS esetében a 6.5.2 a minimális verzió, de más projekteknél ez lehet korábbi verzió is. Egy-két dolog nem teljesen elegáns még így se, például a felugró ablakok mérete néha túl nagy, de valószínű, hogy a 6.6-os verzióban, ami nemrég jött ki, ezt már javították.

A legnehezebb talán az volt, hogy egy működő toolchaint telepítsünk a legelső próbálkozásokhoz. Abban az időben a Qt telepítője még nem tette lehetővé, hogy a WebAssembly fordításához szükséges eszközöket automatikusan felrakjuk (vagyis forrásból kellett az egész rendszert fordítani). Most már egészen kényelmesen és viszonylag gyorsan feltehető a szükséges toolchain. Arra azért most is figyelni kell, hogy a megfelelő Qt verzióhoz a megfelelő Emscripten verziót telepítsük, különben furcsa problémák léphetnek fel a fordítás vagy a futtatás közben.

A Qt Creator rendkívül jól használható volt a fejlesztés során, mert gyorsan lehetett váltani a natív és a WebAssembly konfiguráció között. A natív verzió jól debugolható, a WebAssembly sajnos nem, de legalább a fordítási idő kellemes. Így azt a módszert használtuk, hogy ha valami nem működött WebAssemblyben, akkor igyekeztünk megtalálni azt a helyet a kódban a natív futtatás során, ahol a webes verzió elszállhat vagy hibásan működhet, és debug üzenetekkel (amelyek a browser konzolján is látszanak) próbáltunk rájönni a hiba okára. Így néhány furcsa problémára is fény derült, ami abból fakadt, hogy a webes fordító nem mindenfajta C++-kódot tud rendesen lefordítani: bizonyos egzotikus részeket, ahol trükkösen hívja egyik függvény a másikat, át kellett emiatt alakítanunk.

Összességében elmondható, hogy reális volt a 3 hónapos GSoC-projektkiírás. Az indiai srác, Abhishek, sok részét jól összerakta az új kódnak (pl. átírta a Qt 5-ös részeket Qt 6-kompatibilisre, és ő csinálta az időzítés javítását is), a felugró ablakok javítása viszont kifogott rajta. Úgy gondolom, ehhez az utóbbi részhez sok éves programozói tapasztalat kellett, nem is feltétlenül mélységig ható C++-tudás, hanem inkább bátorság (hogy szétverem/újraírom a kódot) és kitartás. Ezt előre nem lehetett sajnos látni, de hát a programozás már csak ilyen.