Ma ismét egy különleges sztorit találtam nektek a magyar iOS-programozók egyre táguló univerzumában. Mondjuk eleve azért is, mert Csomák Gábor nem is annyira iOS-programozó, mint inkább Flash/Flex-guru, aki egyszerre több operációs rendszerre fejlesztette ki a Shared Board programját, amivel az Adobe Mobile Challenge-en nemrég a legjobb 16 közé került. Én pedig ennek kapcsán a flash-es programozás és portolás nehézségeiről kérdeztem.

A Shared Board új szintre viszi a chatelést, a karaktereken és képeken kívül rajzolhatsz, firkálhatsz bármit, a beszélgetőpartnereid látni fogják. Honnan jött az ötlet?

Hát a projekt kialakulása a BlackBerry Free PlayBook offer-jének köszönhető, az első verzió erre készült. Az ötlet már régóta megvolt a fejemben, egészen pontosan azóta, amikor msn-en kértem analízis segítséget a Műegyetem diákjaként, és a válasz hasonló volt: integral_0^(2 pi)(sin^2(x))/(2 pi) dx = 1/2. Szóval az ingyen PlayBookért megírtam a program első verzióját, amivel a fenti képletet egyszerűbben is el lehet küldeni.

Hogyan működik?

A Shared Board maga a centralizált p2p elvét valósítja meg, egy szerver megmondja, kik vannak a csoportban, és oda irányítja a kapcsolatot, és onnantól csak egymással beszélnek a kliensek. A programot elég biztonságosnak tartom, a számláló pontosan (kis számoknál, 30-40 embernél már tévedhet a p2p elve miatt) megmondja, hogy hányan figyelik, amit rajzolsz. Ennek ellenére egy profi hacker persze lehallgathatja, és megfejtheti, de az RTMP protokoll szerint mennek az üzenetek, amik nehezebben visszafejthetők az xml alapú protokollnál. Persze feltörhetetlent nem lehet alkotni, gondolj csak a Sony incidenseire.

Honnan jött a Flash, és honnan az iOS?

Jó pár éve kezdtem el a Flash-sel foglalkozni, még mielőtt felvettek a Műegyetemre. Megtanultam programozni, és egy barátom unszolására megtanultam az Adobe Flex-et, ami a Flash-t egészíti ki olyan zseniális megoldásokkal, aminek köszönhetően gyorsabb a fejlesztés, és igényesebb a program. Olyan, mintha a Java a .net, a Flash, és a Qt előnyeit egybegyúrnák - azért a Qt-ből lehetne még nyúlni -, rövidre fogva: egy programozóbarát nyelv. Az objektumorientáltságot továbbviszi a komponensorientáltságba, amely ugyan az MVC paradigmát megnehezíti, de sokkal átláthatóbb, ésszerűbb az általános 'business' programok írásához.

Szóval ismerkedtél a Flex-szel, aztán jött az a bizonyos felhívás, igaz?

Tavaly jelentette be a BlackBerry a PlayBook-ot, majd később, hogy a hivatalos SDK Flex alapú. Év végén kiírtak egy pályázatot, miszerint ha fejlesztesz egy alkalmazást (virtualbox-os szimulátorra) amelyet elfogadnak az AppStore-ba, kapsz egy ingyen PlayBookot. Azonban a feltételeket végigolvasva elkeseredtem, hiszen közjegyző is kell, itthon az pedig drága mulatság. Mint kiderült, az Államokban ingyen vannak, és sokan, ott nem probléma. Így lemondtam róla. Azonban februárban a FFDmag.com (ahol szerkesztő vagyok) és saját spórolásomnak köszönhetően el tudtam jutni Amszterdamba, a Flash in the City konferenciára, ahol a Blackberry is képviselte magát. A BB fejlesztők kapcsolattartójának főnökével sikerült beszélni, és elérni, hogy a közjegyző ne legyen szükséges, és mivel ekkor már közel volt a határidő, azt is kitolták picit.

Ez nem semmi. Akkor ezután jött az őrült fejlesztés?

Még aznap a hostelben elkezdtem fejleszteni egy canabalt-szerű játékot, ami a mai napig nem jött ki a PlayBookra, mivel az SDK akkor még korlátozva volt. Így új ötletet kerestem, így született a Shared WhiteBoard gondolata, amivel az Opera Unite hasonló alkalmazását szerettem volna továbbfejleszteni. Akkoriban váltott az Android is feketére, az akksi üzemidő miatt, így én is fekete hátteret terveztem a programba, így lett onnantól BlackBoard. A 'Free PlayBook Offer' határideje előtt sikerült beküldenem, és a határidő után 1 héttel írtak, hogy alá kell írni a fejlesztői kulcsommal. Nyilván temérdek appot kaptak, időbe tellett mind átnézni. Ez külön történet volt, a lényeg, hogy nehezen ment, de sikerült. Szóval a határidő után újra beküldtem, a programot elfogadták, és mivel az aláíratlan verziót idő előtt küldtem be, gratuláltak, és küldtek egy linket, ahol le kellett adnom a rendelést egy 0 dolláros PlayBookra. Hihetetlen várakozás volt, hogy az elsők közt kaphatom kézbe, ráadásul tabletem sem volt előtte sosem. Később kiderült, hogy csak akkor kapom meg, amikor hazámban is elérhető, de szerencsére kapcsolataimnak köszönhetően megküldték előbb. Meglepetésemre még a vámot és áfát is a feladó fél állta.

Tehát a BlackBerryt meghódítottad, hogyan tovább?

A következő lépés adta magát, az Android Marketen és az AppStore-ban is ki kell adni. Ehhez az első amit ki kellett találni, egy univerzális, kijelzőmérettel jól változtatható elrendezés. Ezt volt a legnehezebb, hiszen a tábla még nem zoomolható - nemsokára ez is lesz -, tehát ki kell találni, hogy állva, fekve, iPadon, PlayBookon, Androidon is jól látható legyen az egész. Ezt végül is úgy oldottam meg, hogy csak fekvőre korlátoztam, és 1000x500-asra választottam a táblát, a maradék helyre megy a chat, és a többi. Ez pont befér iPadre, PlayBookra, és csak picit lóg ki például a Galaxy Tabon. Ugyebár ez a legnehezebb gond minden multiplatform fejlesztésnél, a különböző kijelzőméretek, továbbá van a szólás is, hogy "ne átméretezd, hanem átgondold".

Ennyi volt csak a nehézség?

Ezt leszámítva a programot átírni Androidra körülbelül fél óra volt, néhány 'ha android, akkor' típusú sort kellett beszúrni a programkódba, hogy a menü gombot használja, és hasonlók. Szóval az Android Marketen az adatokat tovább tartott kitölteni. Később a táblaméretet változtattam, hiszen meglepetésemre sokan töltötték le Galaxy S-re, ami ugyebár jóval kisebb, így csináltam egy olyan elrendezést, ami 800x600 vagy kisebb kijelzőknél jön be, és ez jócskán levágja a táblát (még, a következő változatban már zoomolható lesz, és úgy nem vág le semmit).

Mik voltak a tapasztalatok az iPadre portolás során?

Az iPad-re fejlesztés picit más volt. Sose láttam még Flash-t az iPaden. A fejlesztői kulcs is drága. így kedves barátaimmal kellett összefognom, akiknek iPadjük is volt, és befizették a fejlesztői díjat is. Átjöttek egy délután. Az iPad-es fordítás jóval lassabb volt, több percig tartott, viccelődtünk, hogy elküldték a kódot Indiába, ahol a helyiek lefordítják Objective c-re manuálisan. Sokszor kellett újra próbálkozni, mire összejött, de végül megjelent az iPad-en a program. Minden úgy nézett ki, ahogy kellett, csak picit lassú volt. Így másnap optimalizáltam sokat, és a testflightapp.com -ra feltöltve tesztelni tudták. Gyorsabb lett, de még így is elmarad az androidostól. Még egy délután el kellett jönniük az ismerőseimnek, hogy az AppStore-ba is be tudjuk küldeni, mert ahhoz más beállításokkal kell fordítani a programot, és hibákat dobott. Végül azt is megoldottuk pár óra alatt, és utána vártuk, hogy talál-e benne valamit az Apple, amiért visszadobja. Nem találtak kivetnivalót, elsőre bekerült a program az AppStore-ba. Egyedül itt lett fizetős.

Mivel Adobe Flexben írtam, elméletben könnyű volt átportolni Androidra és iOS-re, erről szóltak év elején a Flex-es hírek. Nem is a programozás részével volt a gond, hanem a felületek átgondolásával, hogy más kijelzőméretre, és más környezetbe kellett kitalálni. Például Androidon menü gomb van, PlayBookon Swipe_down, iOS-en pedig csak a képernyő. Még nagyobb probléma volt a táblaméret kitalálása, hogy jól mutasson mindhárom platformon. Androidra igazából nem is teszteltem készüléken, hiszen csak egy Spicám van, de azon nem fut az Adobe AIR. Tudtam, hogy ha a PlayBookon működnek a dolgok, Androidon is kell menniük, ez a Flash platform előnye, és azt kell mondjam, ebben teljesen hibátlanul teljesített az Adobe.

Az AIR az iOS-en meglepően jól működik, minden ahogy várható, de azért még nem elég gyors. Persze az én programomhoz megfelelő, de egy interaktív játékhoz megfelelő teljesítményért most még trükközni kell a Blitting nevű technikával, de biztos vagyok benne, hogy az Adobe gőzerővel dolgozik az optimalizáláson, de ez nyilván sokkal gyorsabban menne az Apple támogatásával. Az Adobe nagyon régen megcsinálta az iOS packagert, de amikor feltételeket módosított az Apple, gyakorlatilag leálltak a projekttel. Szerencsére ez a módosítás a Unityt is kizárta, ezért nem sokkal később visszaállították a korábbi feltételeket, de az Adobe ezzel nagyon értékes hónapokat vesztett, ez a lemaradás még meglátszik. Továbbá az Adobe nagyon nyomja a Stage3D - korábbi nevén Molehill - API-t, amivel gyakorlatilag a 3D-s játékfejlesztést teszi lehetővé multiplatform (kivéve Linux), amit szerintem szeretni fognak a fejlesztők, és nagyon ígéretes, hiszen a GPU támogatással nem csak a 3D-s megjelenítést, hanem a 2D-s, tehát klasszikus Flash megjelenítést is gyorsítja majd.

Hogyan állsz te a Flash-kérdéshez? Nyilván nem gondolod, hogy ördögtől való eszköz az, amivel PlayBookot nyerhetsz.

Az embereknek rá kell jönniük, hogy a Flash azért lassú, mert többnyire programozni nem, vagy kevésbé tudó emberek használják, és alapvetően egy designer eszköz. A Flash-t azért nem szeretik, mert nincsenek szabályai, és azért szeretik, mert nincsenek szabályai. Akik tudnak programozni, nagyon jó dolgokat hozhatnak ki a Flexből. A Google is sokat használja, mert az Analytics grafikonjait így a legegyszerűbb megírni, ráadásul a számítást is a látogató végzi, nem a szerver.

Összességében a Flex remek megoldás multiplatform alkalmazások fejlesztésére, iPad-en a grafikus dolgok még lassúak, de biztos vagyok benne, hogy az Adobe gőzerővel dolgozik a gyorsításán. Ha az Apple segítene nekik némi forráskóddal az iOS-ből, ez nyilván gyorsabban menne, és mindenkinek jó lenne. Tényleg egyszer kódolsz, és 4 platformra adhatod ki a programod nagyon kevés pluszmunkával. Ez megéri a cégeknek is, rengeteg munkaórát nyernek vele. Persze vannak ötleteim, amitől még jobb lenne a multiplatform fejlesztés, ezeket majd meg is írom az adobes kontaktomnak, hogy gondolják meg.

Mit tanácsolsz a programozóknak, hogy lehet jól csinálni a multiplatform fejlesztést?

Hát ismereteim alapján a 3D-s játékokat Unity-vel csinálnám, minden mást Flex-szel, vagy talán HTML-lel. Az a hihetetlen előny, hogy egyszer írsz meg egy programot, és az működik utána 4 platformon is, gyakorlatilag 1-2 óra plusz ráfordítással. A boltokban (AppStore, Android Market) az adatok kitöltése tovább tartott. Bárki értheti, hogy mennyivel gyorsabb megírni egy programot egyszer, mint háromszor. A web alapú technikák még kevésbé kiforrottak, és a hardveres dolgoktól jobban függnek. A WebGL pl iOS-en csak az iAd-hoz elérhető. Továbbá tudjuk, hogy a HTML5 még nem végleges szabvány, a véglegesítésre még várni kell, és abban is biztos vagyok, hogy ugyanúgy lesznek értelmezési problémák, hogy az IE máshogy jeleníti meg, mint a Webkit, az Opera meg még máshogy.

Hogyan tovább?

A program mindeközben fejlődik, a tesztváltozatban már kikerült iOS alól is az egyetlen gomb, már longpress-re jön elő egy kismenü, továbbá a szeptemberi verzióban már lesz multitouch és nagyítás is. Készül a frissítés, hamarosan iPadra is elérhetőek az Androidra már elérhető új funkciók, és még több. Ja, és külön öröm számomra, hogy az Adobe Mobile Challengen a top 16-ba került a Shared Board.

Mi pedig gratulálunk ehhez, további sok sikert.