Monthly Archives: máj 2014

Tento raz o Androide

A) Zase raz technický článok (ale sľubujem, že onedlho sa dokopem aj k niečomu, čo nie je samý bit a byte). B) Neviem, do akej miery som s týmto názorom v menšine, ale čo je moc, to je moc.

Včera večer mi píše šéf, že sa mu na stôl dostala taká drobnosť. IT oddelenie jednej firmy chce vyvíjať aplikáciu pre Android, ale z nejakých dôvodov sa im to nejak nedarí rozchodiť, tak či by som sa na to nepozrel. Aplikácia má vziať súbor vybraný používateľom a zašifrovať ho pomocou AES. Je v tom ale drobný háčik – z nejakých dôvodov chcú použiť na šifrovanie natívny kód, nie Javu. A že keď im s tým pomôžeme, urobíme si očko

Tak som sa do toho, aj cez nechuť (fakt nemám rád Javu a pri pohľade na Eclipse IDE sa mi dvíha žalúdok), pustil. Stiahol som JDK, Android SDK a Android NDK. Rozbalil, nastavil cestu, rozbalil dodané zdrojáky a začal písať.

So far, so good. A potom som chcel ten kód spustiť. Nastavil som emulátor a spustil ho. A čakal. A čakal viac. A čakal ešte trochu. Už som z toho mal pocit, že sa snáď nedočkám, keď mi naskočil home screen. Prečo to ale muselo trvať pomaly 5 minút? A nie, nebolo to mojím hardwareom – pracujem na workstation, čo má v sebe Intel i7-3770k (4 + 4 jadrá), 24 GB RAM (na frekvencii 2133 MHz) a grafický čip GeForce GTX 680.

A keď sa potom spustila mnou debugovaná aplikácia, skoro ma zhodilo zo stoličky, jak to bolo pomalé. Kliknutie na tlačidlo malo lag snáď pol sekundy. WTF, Google? Ja uznávam, že emulátor a všetko, ale AŽ TAK?

Keď som sa v tom začal hrabať, našiel som krásne malé zaškrtávatko “Use host GPU” v nastaveniach emulátora. Ktoré bolo samozrejme defaultne vypnuté, takže sa všetko renderovanie v tom virtuálnom strori robilo v software. Opäť – prečo? Máme rok 2014, väčšina developerov má procesory Intel alebo AMD so vstavanou grafikou, ktorá zvláda kde čo. A niektorí majú aj grafiky diskrétne. Tak PREČO je GPU rendering defaultne vypnutý?

Prepnutím na GPU rendering sa použitie emulátora zlepšilo – z nepoužiteľného sa stalo len neznesiteľným. Príklad – načítanie cca 4kB súboru trvalo v Jave cca 15 sekúnd. Trochu moc, nie? Keď si človek uvedomí, že emulátor beží lokálne a s IDE je spojený TCP spojením.

A to ani nebudem zabiehať do interoperability managed/native v podaní Android NDK. V momente, keď má signatúra metódy v sebe 4 podtržítka a je dlhá cez 150 znakov, niečo bude asi zle, povedal by som. Plus, kompilácia native kódu neprebieha ako build step v IDE, človek si to musí skompilovať manuálne pomocou command line.

Áno, Android je Linux-based platforma. Áno, je to založené na Jave. A áno, nástroje pre Windows sú pravdepodobne cross kompilované z Linuxovej verzie. Ale na takto pomalom a otravnom dev stacku sa fakt nedá poriadne programovať. Ak by som sa mal niečím podobným živiť, asi by ma čoskoro vystrelo.

Bottom line: môj názor na Android dev stack pre Windows je, že Android dev stack pre Windows je prudko neadekvátny. Rozhodne nekonečne zaostáva za štandardmi, na ktoré som v našej brandži zvyknutý a ktoré očakávam.

Pre zaujímavosť, nedávno som programoval pre Windows Phone 8.1 a to bol zážitok veľmi pozitívny – virtuálne stroje (manažované pomocou skutočného Hyper-V) štartovali v sekundách, odozva emulátora bola takmer okamžitá a deploy debug verzie bol okamžitý.

Nedá mi to nepovedať jedno – Visual Studio a spol. sa naďalej ukazuje ako najpokročilejšie IDE na planéte. Screw Eclipse.

Prvá Windows Phone aplikácia

Toto bude opäť jeden z tých technickejších (ako tak pozerám, mení sa to tu na tech-blog 🙂 ).

Keď Microsoft prvý krát predstavil platformu Windows Phone (verzie 7), nebol som z nej práve nadšený. Zariadení bolo málo a aj keď bol vývojársky toolset veľmi pokročilý, platforma ako taká bola dosť obmedzená vo svojich možnostiach.

Časy sa ale zmenili a približne týždeň testujem na svojej Lumii 520 systém Windows Phone 8.1 (Dev Preview). Konečne sa z Windows Phone stala platforma, ktorú som na telefóne vždy chcel mať – prehľadná, rýchla, mocná a s podporou programovania v .NETe a Visual Studiu.

Ponuka aplikácií je ale stále relatívne malá (aj keď každým dňom rastie). Jedna z vecí, čo mi pre WinPho 8.1 chýba, je aplikácia, ktorá by dokázala otvoriť môj KeePass trezor.

KeePass je open-source nástroj na uchovávanie hesiel – človek si uloží heslo do služby X do trezoru, trezor zašifruje heslom a keď ho potrebuje, otvorí si trezor a heslo si prečíta. Stačí si tak pamätať len heslo k trezoru a všetky ostatné heslá máte na dosah ruky.

Existujú neoficiálne porty KeePass-u pre WinPho, ale len verzie 7. Tieto verzie stále na najnovšej verzii fungujú, ale často buď nie sú zdarma, alebo obsahujú reklamy. Tak som si povedal, že toto im trpieť nebudem a napíšem si port vlastný.

Ani to dlho netrvalo – od myšlienky k publikácii presne 7 dní. Dnes som moju aplikáciu (menom WinKee) odoslal do Windows Phone Store. Do pol hodiny mi prišiel mail o tom, že moja aplikácia úspešne prešla certifikáciou a bude do niekoľkých hodín zverejnená. Už sa neviem dočkať 😀

Pocity z vývoja a celého toho procesu mám celkom dobré – toolset pre WinPho 8.1 je skvelý, emulátory zariadení fungujú bezchybne a nie je problém ladiť ani na skutočnom telefóne. Proces certifikácie a publikovania je dobre zdokumentovaný a relatívne priamočiary.

Celkovo vzaté, s takto malou aplikáciou určite neurobím dieru do sveta, ale bolo príjemné si to vyskúšať a pridať tak ďalšiu položku do životopisu – “Vývoj pre Windows Phone, vrátane publikovaných aplikácií”.