sobota, 4. februára 2017

Oplatí sa začať s React Native?

Naši obchodníci predali zákazníkovi mobilnú aplikáciu a ako to už býva, nespýtali sa ľudí z developmentu, dokedy ju môžeme dodať, lež si povedali, že bude hotová o necelý mesiac. Pre Android a iOS. Interne sme nikdy mobilné aplikácie nevyvýjali, ale padlo rozhodnutie, že to spravíme sami. Potešil som sa, že táto úloha pripadla ma mňa.

Ak nerátam preklikanie krátkeho tutoriálu k vývoju pre Android, nemal som predchádzajúce skúsenosti s programovaním pre mobilné zariadenia. Zato som ostatné mesiace dosť robil s Reactom pre web, takže ma prirodzene lákalo použiť React Native. V ňom viete spraviť mobilnú aplikáciu, ktorá používa natívne komponenty, pričom vy ju píšete v JavaScripte a Reacte. Trochu som si o tom prečítal a skúsil spraviť maličký proof-of-concept: išlo to naozaj jednoducho. Ešte som pohľadal články so skúsenosťami z reálneho nasadenia a porovnania s inými frameworkami a povedal som si, že do toho idem.

Learn Once, Write Anywhere

Keďže React Native nevznikal naraz pre obe hlavné mobilné platformy, veľa komponentov je spravených špeciálne pre jednu z nich. Prínosom je, že aplikáciu píšete veľmi podobne pre obe z nich - zväčša iba použijete iný komponent. Môžete dokonca v kóde "if-ovať" bloky v závislosti od platformy, na ktorej aplikácia práve beží, alebo jednoducho zmenou prípony zdrojového súboru poviete, pre ktorú platformu sa má použiť. Tým pádom môžete naozaj vyťažiť maximum z komponentov špecifických pre konkrétny operačný systém.

Čo som si ale všimol, tak veľa nových komponentov je robených tak, aby sa dali použiť pre obe platformy. To je samozrejme pohodlné a keďže naša aplikácia nevyžadovala nejaké extrémne veci, vždy som sa snažil vyberať práve takéto komponenty. Dokonca existujú aj také, ktoré zoberú dva iné komponenty a vytvoria pre ne jednotné API. Po pridaní nového komponentu odporúčam aplikáciu pretestovať na rôznych systémoch, pretože sa mi stalo, že hoci je API rovnaké, na jednom systéme sa predsa len môže správať trochu inak. Stalo sa aj to, že pre Android som musel zadať komponentu iné parametre ako pre iOS.

Aj keď píšete aplikáciu iba pre jednu platformu, oplatí sa vám React Native použiť - špeciálne ak už máte skúsenosti s JavaScriptom, resp. priamo s Reactom. Môžete tak využiť znalosť jazyka, hot reloading kódu počas vývoja či jednoduchú tvorbu layoutov podobne ako s flex-box v CSS, pričom na spodu vám bežia skutočné natívne komponenty danej platformy. Zaujímavé možnosti prináša nasadenie novej verzie pomocou CodePush - toto som ale zatiaľ neskúšal.

Trochu šarapaty, najmä pre autorov knižníc, robilo vydávanie nových verzií React Native každé dva týždne. Od Decembra 2016 sa frekvencia zmenila na mesačnú, navyše pribudol nástroj na jednoduchšiu migráciu na novšiu verziu.

Knižnice, ktoré sa osvedčili

Na uchovávanie stavu aplikácie som zvolil Redux. Táto knižnica nie je iba pre React, avšak práve spolu s ním sa častou používa. Veľa sa diskutuje, či sa ho v menších aplikáciách oplatí mať alebo nie. Ja ho používam, pretože ten stav aj tak niekde musím držať a ak niekto iný potrebuje robiť zmeny v mojom kóde, stačí, keď si naštuduje Redux a bude sa vedieť zorientovať. Navyše okolo neho existuje niekoľko užitočných nástrojov, ktorými môžete sledovať stav vašej aplikácie a jeho zmeny (napr. Logger for Redux, Remote Redux DevTools). Mimochodom, veľmi pekné vysvetlenie princípu priamo od autora Reduxu si môžete pozrieť na egghead.

Na HTTP requesty používam knižnicu axios, ktorá má promise-based API, takže podporuje async/await, čo sprehľadňuje zdrojové texty.
Čítanie QR kódu zvláda react-native-camera (pozor pri zadávaní typu, ak to ešte neopravili, pre iOS: 'org.iso.QRCode', pre Android: 'QR_CODE').
Navigáciu robím pomocou React Native Router. S tým som musel trochu zabojovať, keď som pridával bočné menu.
Pekné naštýlované komponenty nájdete v react-native-elements.

Na jednej obrazovke som potreboval kresliť vlastný graf (resp. niečo, čo by sa tak dalo nazvať). Našťastie existuje knižnica react-native-svg, pomocou ktorej si kreslíte v SVG. Opäť super pohodlné, keďže s SVG som už viackrát robil veci pre web. Dokonca nad objetkami fungujú udalosti, takže ľahko spravíte aj interaktívne obrázky.

Koľko toho treba vedieť o natívnych platformách

Zo začiatku potrebujete vedieť hlavne ako dostať aplikáciu do mobilu koncového používateľa. Väčšina tutoriálov o React Native túto časť nerozoberala, takže som si musel popozerať veci priamo z dokumentácie k tej-ktorej platforme (čo je pochopiteľné). Produkčný build pre Android viete spraviť z príkazového riadku, pre iOS otváram XCode. Stránky Google aj Apple mi pripadali trochu ťažkopádne, ale zvykol som si. Aj tu odporúčam si to vyskúšať hneď na začiatku vývoja aplikácie a nečakať, kým "to bude hotové". Ja mám všeobecne rád, keď mám pokryté všetko od písania kódu až po nasadenie a viem, že môžem dodať novú veriu do produkcie, keď treba. Na beta testovanie sa nevyžaduje review aplikácie (ok, u Apple je to obmedzené iba na interné testovanie). Nové knižnice už používajú react-native link na pridanie natívnych závislostí, bez potreby ručne upravovať konfiguračné súbory.

Ak ste typ, ktorý chce hneď začať vo veľkom, pozrite sa na Ignite, ktorý má pripravenú solídnu kostru pre vašu aplikáciu.

Zhodnotenie

Ako so všetkým novým, s čím prichádzam do styku, aj tu mi chvíľu trvalo, kým som sa poriadne zorientoval. Hoci jednotlivé knižnice majú v sebe bugy a "badžíky", na ktoré si treba zvyknúť, považujem React Native za vhodný do ostrého nasadenia. A pokiaľ nerobíte naozaj hardcore aplikáciu, ktorá potrebuje operačný systém vyžmýchať do poslednej kvapky, s React Native budete veľmi produktívny. Navyše sa okolo neho stále veľa deje a každú chvíľu pribúdajú nové užitočné veci.

Ups...

Jeden zo zákazníkov chcel aplikáciu používať s MobileIron na Androide. Keď ju skúsili zawrapovať, po spustení sa ihneď vypla. Podľa logov to vyzeralo, že k samotnému štartu našej aplikácie ani nestihlo prísť. Niekde v inicializačnom kóde wrapperu sa to zastavilo. Hlásili to tvorcom MobileIron, tí im po niekoľkých dňoch odpísali, že react-native aplikácie nepodporujú. Zákazník ani my sme to ďalej neriešili, lebo sa rozhodli nakoniec aplikáciu používať mimo MobileIron. Možno by to predsa len nejako išlo - ak s tým máte skúsenosti, dúfam, že sa podelíte.

Užitočné odkazy

https://facebook.github.io/react-native/ - prvý odkaz z Google pre React Native :)
https://medium.com/@dabit3 - blog Nadera Dabita, ktorý sa venuje React Native
https://devchat.tv/react-native-radio - podcast o React Native
https://www.gieson.com/Library/projects/utilities/icon_slayer/ - nástroj na tvorbu ikon so správnou veľkosťou pre iOS aj Android z vami nahratého obrázku

nedeľa, 29. januára 2017

Z Javy do Javascriptu? (2) Komunita

V predošlom článku som v krátkosti načrtol moje skúsenosti s Javou a Javascriptom. V tomto opíšem môj pohľad na komunitu, ktorá ich obklopuje. Táto téma je veľmi široká, ja z nej vyberiem iba tie časti, ktoré vnímam najsilnejšie.

Široká a ustálená komunita okolo Javy


Komunita okolo Javy mi vždy pripadala v poriadku. Open-source knižníc je neúrekom a aj veľký hráči takto zverejňujú svoje projekty. Je možné nájsť dostatok informácií na blogoch a Stack Overflow. Z problémov, ktoré sa tam riešia vidno veľkú rôznorodosť ľudí z komunity. Celkovo vo mne budí pocit takej mravčej práce, kde ludia-mravčeky majú svoj cieľ a vidia cestu, ako ho dosiahnuť.

Častokrát to zvonka vyzerá, že sa vlastne v tej Jave toho už veľa nedeje, ale ja si nemyslím, že je to tak. Pod povrchom sa vždy vynárajú zaujímavé prístupy, ktoré menia veci vo veľkom, hoci Java platforma ostáva rovnaká. Spomeniem napríklad vlny okolo DevOps, Micro Services, problematika okolo distribuovaných systémov a Eventual Consistency. Áno, nie sú to témy, ktoré by sa týkali výlučne alebo prišli iba z Javy, ale ako sa ukazuje, platforma je dostatočne robustná na to, aby sa dali riešiť bez veľkých zásahov do nej. Preto si myslím, že pri posudzovaní, čo nové sa okolo Javy deje treba brať väčší ohľad práve aj na to, čo sa deje okolo takýchto tém.

Nadšená JavaScriptová komunita

JavaScript má úžasnú kominitu. Je z nej cítil veľmi veľká energia a celkové nadšenie mi pripadá omnoho väčšie oproti Jave. Ale nemôžem si pomôcť, veľakrát mi to pripomína takú úprimnú detskú radosť nad novou hračkou. Príde nejaká nová utilitka, knižnica UI komponentov alebo vylepšenie balíkovacieho systému a na Twittery, blogoch a podcastoch čítate a počujete, ako sa z toho ľudia tešia. Samozrejme, je to nákazlivé a to je dobré. Len potom zistíte, že buď nemáte čas sa so všetkymi tými hračkami pohrať, alebo naopak, nerobíte nič iné iba sa hráte - našťastie, voľba je na vás.

Materiálov je na internete veľa, avšak veľmi rýchlo sa stávajú neaktuálnymi, pretože veci, ktoré popisujú sa rapídne menia. Toto sa týka aj kníh, veď na niektoré nové frameworky je ťažké vôbec nejakú dobrú nájsť a keď aj nejaká vyšla pred rokom-dvoma, je treba dobre zvážiť, či sa do nej oplatí investovať. Hľadať v takýchto knihách best practices je na pováženie, pretože tie sa tiež rýchlo menia. Avšak nie je to úplne zbytočné, najmä ak sa potrebujete zorientovať v niečom s čím ste ešte nerobili - po čase si budete na ich základe vedieť odvodiť vlastné best practices pre nové veci.

Je možné identifikovať spoločnosti a jednotlivcov, ktorý majú na ďalšie smerovanie výrazný vply. Je potešujúce, že sú to naozaj šikovný ľudia, ktorý sa dostali do popredia svojou prácou a že sú schopný navzájom sa dopĺňať a inšpirovať a zdá sa mi, že voči sebe majú taký zdravý rešpekt.

Veľa ľudí je uchvátených tým, na akých všemožných zariadeniach a platformách sa dá JavaScript spustiť. Komunita si užíva, že sa z neho stáva univerzálny jazyk (resp. platforma), ktorým možno pokryť celé spektrum use casov. Uvidíme, či toto súčasné momentum vydrží, ak áno, tak sa teším na prvý request, keď budem mať naprogramovať niečo pre žiarovku.

Konferenčný paradox

Obe komunity sú dostatočne veľké na to, aby sme sa ani v jednom prípade nemuseli obávať, že v tom ostaneme sami. A tiež sú schopné naplniť "konferenčný paradok", ktorý znamená, že ak ste na konferencii, kde sa rieši jedna z týchto platforiem, máte pocit, že sa okolo nej točí všetko a že všetci ju už používajú alebo sa na ňu chystajú prejsť a tá druhá je len "tá druhá". Ak si radšej prehlbujete znalosti do hĺbky než do šírky, možno bude pre vašu psychickú pohodu lepšie, ak tomu podľahnete.

Pokračovanie nabudúce...

Na tento článok by som chcel neskôr nadviazať, aby by som priblížil ďalšie témy, ktoré sa mi pri porovnávaní Javy a JavaScriptu vynárajú.

sobota, 28. januára 2017

Z Javy do Javascriptu? (1) Predstavenie

Java a JavaScript majú toho okrem podobného názvu veľa spoločného aj rozdielneho. Na oboje sa pozerám nielen ako na programovací jazyk, ale ako na platformu. Majú svojich skalných prívržencov aj zarytých odporcov. Na internete sa o nich už popísalo veľa, ja by som sa im chcel povenovať v krátkej sérii článkov. Nebude to príliš technické, nebudem striktne porovnávať syntax ani vyťahovať benchmarky. Predstavím len svoj zaujatý pohľad na ne.

Ja a Java

Programovanie ma bavilo od malička a postupne som prešiel na svoj čas asi klasickou cestou od Basicu, cez Pascal, PHP, C++ po Javu. A nejako sa stalo, že práve pri nej som dlhší čas zostal. Nedá sa povedať, že by mi učarovala na prvý pohľad a neveril som nášmu učiteľovi, že najbežnejšia výnimka, ktorou sa mi program bude ohlasovať má byť NullPointerException (...veď predsa poznám C++ a na toto si dávam veľký pozor), ale postupne si ma získala. Možno aj vďaka dobre napísanej knižke Thinking in Java od Brucea Eckela.

Po Hello World som si ako prvý program doma vymyslel peer-to-peer Piškvorky, alebo niečo podobné. Nepamätám si presne, čo som tam používal, tuším Sockety, no zaujímavé bolo, že vždy, keď som to skúšal medzi mojim a sestrinym počítačom, ktorý bol v druhej izbe, po chvíly sa môj počítač vypol. Rozhodne to vo mne vyvolávalo čudné pocity a nedôveru v Javu. Radšej som ostal hrávať piškvorky na papieri. Až neskôr som zistil, že na počítači bolo pokazené chladenie a asi mu nerobila dobre agresívna nekonečná slučka, ktorá sa mi do programu vlúdila. Stáva sa.

Prvé dva či tri roky som si vystačil so Standart Edition. A potom som nastúpil do práce na plný úväzok ako Java programátor, kde sa používala Enterprise Edition. Prvú úlohu na vygenerovanie nejakých PDF som spravil zaujímavo: celý kód bol v jednom veľkom bloku JSP... Tiež sa stáva.

Nech bolo ako bolo, stále som v Jave nachádzal nové zákutia, ktoré stálo za to preskúmať. Veľmi som sa potešil Jave 1.5, ktorá do jazyka priniesla veľa užitočných vlastností. Knižníc a frameworkov bolo snáď až príliš veľa a knižky ako Effective Java od Joshua Blocha mi ukazovali, koľko toho ešte stále neviem. A tak nejak som začal tušiť, že s Javou sa zabavím na dlhšie.

V práci sme používali EJB z Java EE, k Springu som sa dostal iba na krátko na dvoch menších projektoch. EJB a veci okolo mi vždy pripadali dosť ťažkopádne, ale musím uznať, že sa to v novších špecifikáciách zlepšilo a pre dlhožijúce projekty to nie je zlá voľba.

Čo je JavaScript?


Prepokladám, že čitateľ odpoveď na túto otázku pozná. Tak isto, ako som ju celý čas poznal aj ja, alebo som si to aspoň myslel. Nebudem sa rozpisovať o tom, ako JavaScript začal, kde je teraz a že nikto nevie, kde, kedy a ako skončí. Musím sa priznať, že dlhý čas som sa ho snažil obchádzať, ako sa len dalo. Prekážala mi nekompatibilita interpreterov a celkovo mi programovanie v tomto jazyku pripadalo dosť náchylné k chybám. Tento pocit ešte viac umocňovala skutočnosť, že som sa nikdy neučil JavaScript systematicky, vždy som si iba pozrel ako vyriešiť vec, ktorú som práve potreboval.

Až zrazu... som si na sebe všimol, že sa necítim komfortne, keď spomeniem, že programujem v Jave. Je to čudné? Aspoň trochu určite, pretože Java platformu stále považujem za veľmi dobrú. Ale bola tu tá vec, ten ruch okolo JavaScriptu, ktorý ma dráždil a prebúdzal vo mne strach z nepoznaného.

Tak som sa jedného dňa rozhodol, že sa do toho trochu namočím. Musím sa priznať, že som nečakal, aká jama levova to v skutočnosti je. Príliš sebavedomý tým, že sa už niekoľko rokov venujem vývoju webový aplikácií a koniec koncov JavaScript používam, som si myslel, že si iba pozriem zopár krátkych návodov a po chvílke v tom budem plávať ako ryba vo vode. Naozaj som bol taký naivný? Áno.

Začal som tým, že som si prečítal krátku knižku o JavaScripte pred ES5, aby som chápal, prečo sú staršie veci robené tak, ako sú a aby som vedel čítať starší kód. Zatiaľ ok. Potom som prešiel na knižku o ES6. Zatiaľ ok, po troche kódenia sa všetko vyjasní. Čítal som si o Reacte. Jednoduché, ok. Redux. Radšej až neskôr, stále ok. Pozriem si serverovú stranu, Node. To fakt zakaždým píšem vlastný server? Aha, existuje Express, takže ok. Konečne si v tom všetkom teda idem trochu zaprogramovať.

npm init. A čo teraz? Ok, takže až také ok to nebude. Hmm, noo... Späť k tutoriálom. Jedna vec je si ich čítať, druhá vec je niečo nové spraviť. Zachvílu som pochopil, že tu nie som vo svojej komfortnej Java zóne a keď nemám poriadne ochytané jednotlivé časti, musím na to ísť po kúskoch. Keď som tie kúsky zvládal, snažil som sa ich spojiť dokopy. Vymyslel som si malý reálny projekt, na ktorom pod chvíľou pracujem, takže ma to núti ísť pekne do detailov. Tiež som sa v práci dostal k napísaniu aplikácie v react-native, čo mi dalo možnosť vidieť nasadenie JavaScriptu aj v širšom kontexte.

Pokračovanie nabudúce...

Tento článok v krátkosti sumarizuje moje skúsenosti s Javou a Javascriptom. V nasledujúcich by som sa chcel viac zamerať na veci, ktoré sa mi zdajú byť medzi nimi v praxi odlišné a vyjadriť svoj názor na ne.


Z Javy do Javascriptu? (2) Komunita