Martin Hejna - představujeme přednášející Android Devcampu
S vývojem pro mobilní telefony máš, pokud vím, dost zkušeností. Nějaký čas jsi pracoval i v Opera Software. Čemu ses v Opeře věnoval?
Když jsem přišel do Opery, pracoval jsem na Opera SDK pro Windows CE a Windows Mobile. Opera SDK znamená, že zákazník (typicky výrobce telefonu) dostal vykreslovací jádro Opery a User Interface si dopsal sám. Dodávali jsme tedy libopera.dll, dokumentaci a ukázkové aplikace. Ukázkové aplikace byly v podstatě celý browser, akorát s hodně zjednodušeným UI, protože se čekalo, že právě to si zákazník bude chtít udělat sám. Měli jsme jich několik, aby si mohl vybrat.
Nicméně zákazníků zřejmě ubylo a tak jsme od ledna 2010 začali dělat Operu pro Android. Tedy celý browser včetně UI. Portace na Android nezačala u nás, převzali jsme už rozběhlý projekt, nicméně bylo na něm potřeba udělat poměrně dost práce. Takže první veřejná verze šla do Android Marketu někdy v listopadu 2010.
Jak ta portace probíhala? Opera je tuším v C++, stačilo tedy upravit jádro, aby běželo pod Android NDK a připsat GUI v androidí Javě? Nebo to bylo složitější?
Opera si dost zakládá na své multiplatformnosti. Je tedy velmi dobře připravená pro portování na různá zařízení. V principu je potřeba implementovat funkce standardních systémových volání jako je např. přístup k filesystému, k síti apod. Dále se musí naprogramovat grafický výstup na obrazovku, a vyřešit platformní zvláštnosti. Pak samozřejmě má samotné jádro Opery mnoho featur, které se dají v compile-time zapnout nebo vypnout a je potřeba zvolit správnou množinu featur pro danou platformu.
Když jsme projekt dostali, byla už systémová volání napsána. Pro Android s tím hádám nebyl velký problém, protože stačilo vzít implementaci z Linuxu. Taktéž výstup na obrazovku byl implementován. V té době ale ještě Android neměl dokumentované API pro kreslení na obrazovku z nativního (C/C++) kódu. Používalo se tedy nedokumentované API. To bylo navíc od verze 2.0 jiné. Až teprve verze 2.2 přinesla oficiální API.
Velký problém bylo např. zadávání vstupu z virtuální klávesnice. V době, kdy jsme projekt dostali, se to řešilo tak, že se používala klávesnice z Opery a nikoliv ta Androidí. Opera umí zobrazit svoji klávesnici a detekovat stisky kláves. Toto se používá pro některá zařízení, kde operační systém nenabízí klávesnici. Použití klávesnice Opery bylo jednodušší (nebyl potřeba žádný platformní kód, jen se zapnula tato featura), ale méně vhodné. Uživatel je samozřejmě zvyklý na klávesnici svého zařízení a chce ji ve všech aplikacích. Tedy jedna z věcí, které jsme dělali, byla právě tato.
Jinak jsme samozřejmě reagovali na různé změny API v jádru Opery a v jejím UI. Tyhle věci se vyvíjely nezávisle na nás a od nás se čekalo, že zařídíme, aby dobře fungovaly na Androidu. Tady byla výhoda, že když si člověk s něčím nevěděl moc rady, mohl se podívat, jak to řeší jiné platformy.
Jak vůbec probíhalo tvoje přijímací řízení do Opery? Absolvoval jsi jen pohovory s lidmi z pražské pobočky nebo tě zkoušeli i lidé z norské centrály? O co se nejvíc zajímali?
Přijímací řízení do Opery bylo dost dlouhé. Nejprve mi přišel dotazník, kde byly takové ty HR otázky. Pak přišel programátorský test. Byl zaměřen spíš logicky, nebyla to žádná velká implementace. Pak byl telefonický pohovor, osobní pohovor a pak ještě jeden programátorský test. Celé se to táhlo snad 3 měsíce. Já tak dlouho čekat nevydržel a vzal jsem práci jinde. Nicméně když mi přišel ten programátorský test, tak jsem si ho napsal. Tehdy spíš ze zájmu, než že bych chtěl měnit práci. To že odejdu ze stávající práce a přejdu do Opery, jsem se rozhodl až po osobním pohovoru. Dost si mě získali právě tím průběhem toho přijímacího řízení.
Jinak ta délka byla zřejmě specifikum české pobočky. Nemohla rozhodovat o najímání lidí sama a všechno se muselo řešit přes Oslo. Třeba v Polsku tohle měli lepší.
Česká pobočka Opery byla nakonec v loňském roce uzavřena. Proč k tomu došlo?
Důvod se samozřejmě oficiálně nedozvíte. Asi 3 týdny před tím, než nás zrušili, tak přeřadili na Android jeden tým v Polsku, který před tím portoval Operu pro platformu BREW. Myslím, že Opera přišla o nějaké zakázky, a než by vyhodila lidi, kteří na nich pracovali, přišlo jí lepší zrušit pobočku v Praze. Pobočka v Praze měla dohromady 12 lidí, zatímco v Polsku mají pobočky dvě, obě přes 80 lidí. Je samozřejmě výhodnější mít lidi na jednom místě, než je mít po pár lidech různě po světě.
Tvůj nejoblíbenější telefon s Androidem?
Vlastním Nexus S. Hlavně kvůli tomu, že je to “Pure Google”, tedy žádné další úpravy od výrobce telefonu. To jednak zajišťuje, že OS bude častěji aktualizovaný a také je to referenční implementace. Jinak se mi hodně líbil HTC Desire. A taky Samsung Galaxy S, hlavně kvůli displayi.
Jinak co se týče androidích telefonů, jde to momentálně strašně rychle dopředu.
A tvůj nejoblíbenější telefon bez Androidu? (Pokud máš takový.)
Mám starý Samsung E250 na telefonování. Když jsem ho kupoval, chtěl jsem kompromis mezi výdrží a aspoň nějakým přístupem na net. Nemůžu úplně říct, že by byl nejoblíbenější, prostě jsem si ho koupil a tak ho mám. Já ten Nexus S na telefonování vůbec nevyužívám, mám ho jen na net a jako hračku. Občas jedu mimo civilizaci a potřebuju, aby mi telefon vydržel týden na příjmu. Tedy žádný smartphone.
Když už jsme nakousli to NDK, máš představu, které známé aplikace běží na NDK? Může to vůbec uživatel nějak rozpoznat?
Rozpoznat to může snadno, pokud se mu podaří dostat .apk na svůj počítač. Apk je normální zip balíček a NDK kód je v něm uložen v adresáři lib/ jako knihovny libXXX.so. Pokud tam jsou, je tam i kód v NDK a opačně.
Myslím, že Angry Birds jsou psané v NDK.
Kdy androidí vývojář pozná, že by měl sáhnout po NDK? Je to jen otázka rychlosti nebo tu jsou i nějaké další důvody?
1) portabilita
2) rychlost
U té rychlosti je to potřeba dvakrát zvážit. Telefony jsou dneska čím dál tím rychlejší a vývoj v NDK je o dost pracnější než v Javě. Z přednášky o NDK na Google Developer Days mi přišlo, že v NDK se dnes píšou hlavně hry.
Co se týče té portability, tam je to jasné. Pokud máte hromadu kódu v C/C++ a chcete ho rozchodit na Androidu, nebudete to přepisovat do Javy.
Jak se díváš na vývojářské nástroje pro Android? Vývojové a testovací prostředí, debugger atd. Jsou podle tebe vyhovující?
S vývojovými nástroji pro Javu mám jen relativně málo zkušeností. XCode, ve kterém se vyvíjí pro iPhone to není, nicméně rozhodně je to postačující.
Pro NDK se to hodně zlepšilo s verzí 2.1 a 2.2, kde Google začal podporovat debugger. Do té doby šlo debuggovat NDK kód jen na rootnutých zařízeních.
Studoval jsi někdy zdrojové kódy Androida? Pokud ano, jaký jsi z nich měl dojem?
Díval jsem se jen na pár věcí. Hlavně ve spojitosti s nedokumentovaným API, které jsme používali. Viděl jsem jen pár souborů, který byly napsány specificky pro Android, jinak všechno ostatní byly jiné opensource projekty, které Android jen používá. Z těch pár souborů jsem neměl žádný zvláštní pocit. Vypadaly přibližně tak, jak bych čekal.
Co osobně očekáváš od aDevcampu?
Že tam potkám zajímavé lidi a uslyším jejich názory. A samozřejmě, že se něco dozvím o Androidu i z jiného pohledu než mám já.
Už jsme to trochu nakousli, ale pověz nám, o čem budeš na aDevcampu přednášet a proč bychom si tě měli přijít poslechnout?
Bude to takový úvod do NDK. Jednak bych chtěl ukázat základy a potom různé zrádné pasti a odlišnosti.
Já se na tvou přednášku rozhodně těším. Děkuji za rozhovor a uvidíme se na aDevCampu.
Už se těším.
Rozhovor původně vyšel na blogu Adevcamp.cz.