Ionic Insomnia – Nitko nije lud da spava

Iako je imperativ svake mobilne aplikacije brzina nekada je jednostavno potrebno čekati da se nešto unutar aplikacije dogodi.

Npr. ako je u tijeku nekakva sinkronizacija koja traje dulje od zadanog vremena mobilnog uređaja prije gašenja ekrana dogoditi će se da će se ekran ugasiti za vrijeme te sinkronizacije. U tom se slučaju može dogoditi, ako drugačije nije postavljeno, da se sinkronizacija prekine.

Kako bi se takav scenarij spriječio i kako se korisnik mobilne aplikacije ne bi zbunio zbog iznenadnog gašenja ekrana u pola neke radnje može se koristiti Insomnia plugin.

Ionic Insomnia

Kreiranje aplikacije

Za početak kreiram novu Ionic aplikaciju i odmah dodajem Android platformu.

Insomnia

Ionic Native plugin koji ću u ovom slučaju instalirati zove se Insomnia.

Instaliram ga sljedećim naredbama:

I navodim ga unutar app.module.ts.

Tek sada ga mogu koristiti unutar aplikacije.

Za potrebu ovog primjera funkcije ću pozivati klikom na gumb.

Ionic Insomnia

Klikom na gumb keepAwake spriječavam mobilni uređaj da ode u sleep mode, a klikom na allowSleepAgain ponovno dopuštam zadano ponašanje. U ovom slučaju ekran uređaja ugasi se nakon 15 sekundi neaktivnosti.

Zaključak

Insomnia je odličan plugin koji svoju svrhu u potpunosti ispunjava. Različiti su scenariji u kojima može biti korišten. U ovom blog postu prikazan je samo jedan od njih.

Za kraj, struktura projekta prema package.json

Uvod u Google Sheets API

Nedavno mi je pala na pamet ideja korištenja Google Sheetsa kao baze podataka za nekakvu jednostavniju web ili mobilnu aplikaciju pa sam išao malo istražiti koje sve mogućnosti Google Sheets API ima i kako ih koristiti. U nastavku se može vidjeti nekoliko primjera na osnovu jednog dokumenta s dvije kartice podataka.

Google Developer konzola

Na URL-u https://console.developers.google.com/ kreiram novi projekt.

Nakon toga klikom na ‘Enable Apis And Services‘ krećem u odabir Google Sheets API-ja kako bi ga aktivirao.

Google Sheets API

Nakon aktivacije kreiram API key koji mi je potreban za slanje upita na API.

Bez njega bi dobio poruku o grešci:

Google Sheets API

Korištenje API-ja

Na sljedećoj se slici može vidjeti koji su mi upiti dostupni

Google Sheets API

Prikaz podataka

Na sljedećoj adresi https://docs.google.com/spreadsheets/d/1NVbthCyv4BuFbU3rv3ZBe0Pw6_4hHCgIdJfkKtvmD-M/ nalazi se moja proračunska tablica. Njezin ID je 1NVbthCyv4BuFbU3rv3ZBe0Pw6_4hHCgIdJfkKtvmD-M.

Google Sheets API

Ako, prema dokumentaciji na slici iznad, odem na Services > Google Sheets API v4 > sheets.spreadsheets.get i unesem ID svoje proračunske tablice dobit ću rezultat s hrpom, meni trenutno nepotrebnih, meta podatka.

Google Sheets API

S obzirom da se moja proračunska tablica sastoji od dva lista posebno ću pozvati API za svaki list.

Na URL-u https://sheets.googleapis.com/v4/spreadsheets/1NVbthCyv4BuFbU3rv3ZBe0Pw6_4hHCgIdJfkKtvmD-M/values/Zadaci?key={YOUR_API_KEY} dohvaćam podatke iz lista ‘Zadaci’.

Google Sheets API

Dok na URL-u https://sheets.googleapis.com/v4/spreadsheets/1NVbthCyv4BuFbU3rv3ZBe0Pw6_4hHCgIdJfkKtvmD-M/values/Podaci?key={YOUR_API_KEY} dohvaćam podatke iz lista ‘Podaci’.

Google Sheets API

Dodavanje podataka

Na sljedećoj adresi https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append nalazi se dokumentacija vezana uz dodavanje sadržaja.

Google Sheets API

Ovo još moram testirati u Postmanu.

Zaključak

Ovo je samo uvod u mogućnosti Google Sheets API-a. Za sada je ovo dovoljno čisto da se vidi kako stvar funkcionira, a dalje sve ovisi o specifičnim potrebama. Možda na kraju zaključim da ovo i nije najsretnije rješenje za korištenje unutar web ili mobilne aplikacije.

Google Sheets API

Ažuriranje Angular projekta sa angular-cli na @angular/cli

U ovom ću blog postu pokazati postupak ažuriranja Angular CLI-a sa verzije angular-cli (1.0.0-beta.28.3) na verziju @angular/cli (1.7.4).

Zašto ažuriranje?

Angular ima mnogo značajki kao što su TypeScript i Ahead of Time (AOT) koje pomažu kod prepoznavanja pogrešaka prilikom ‘buildanjaAngular aplikacije. Tim koji stoji iza Angulara trudi se svakom novom verzijom te značajke poboljšavati kako bi prepoznale još više grešaka i radile brže.

Zbog toga se zna dogoditi da kod ažuriranja na noviju verziju budu prepoznate neke greške koje ranije nisu bile uočene.

Uz to, ne treba zaboraviti niti dosta novih značajki koje dolaze s novijim verzijama kao što su Service Worker za progresivne web aplikacije (PWA) i mnoge druge.

Sve to su razlozi za ažuriranje.

Kako ažurirati?

Ažuriranje je potrebno napraviti na dvije razine. Globalno na računalu i lokalno tj. unutar svakog projekta.

Globalna razina

Za početak, provjeravam trenutnu globalnu verziju CLI-a i vidim da je u pitanju angular-cli 1.0.0-beta.28.3 što znači da je ažuriranje potrebno.

Ažuriranje Angular projekta sa angular-cli na @angular/cli

Pokretanjem sljedeće naredbe uklanjam trenutnu verziju s računala

Ažuriranje Angular projekta sa angular-cli na @angular/cli

Odmah ću očistiti i cache

Ažuriranje Angular projekta sa angular-cli na @angular/cli

Sada ću instalirati novi @angular/cli

Ažuriranje Angular projekta sa angular-cli na @angular/cli

I to je sve što se tiče globalne razine.

Lokalna razina

Sada se prebacujem unutar lokalnog projekta i ako ga pokušam pokrenuti koristeći $ ng serve dobit ću sljedeću poruku

Ažuriranje Angular projekta sa angular-cli na @angular/cli

Uzrok tome nalazi se unutar package.json datoteke, a znači da se globalna i lokalna verzija CLI-a ne slažu i da zato nije moguće pokrenuti projekt.

Ako želim postojeći projekt prilagoditi da radi sa novim Angular CLI-em trebam napraviti više izmjena. S druge strane, imam i sljedeću opciju, a to je kreirati novi projekt i onda u njega prebaciti dijelove postojećeg projekta što ću sada i napraviti.

Novi projekt kreiram naredbom

Iz postojećeg projekta u novi prebaciti ću sljedeće:

– mapu src/assets
– mapu src/app
– datoteku src/index.html
– datoteku src/styles.css
– datoteku src/favicon.ico

Osim toga, unutar nove datoteke package.json trebam dodati i module iz postojećeg projekta.

package.json sada izgleda ovako. Označio sam module koje sam dodao iz ‘stare’ package.json datoteke

Nakon toga pokrećem sljedeću naredbu kako bi se ti moduli instalirali u projekt.

Ažuriranje Angular projekta sa angular-cli na @angular/cli

I to je to! Projekt je sada temeljen na novom Angular CLI-u i moguće ga je pokrenuti naredbom $ ng serve

CSS i JS se nisu učitali!

Ažuriranje Angular projekta sa angular-cli na @angular/cli

U slučaju da nisu učitane sve JS tj. CSS datoteke potrebno ih je iz src/index.html prebaciti unutar src/angular-cli.json na sljedeći način:

Iz index.html-a uzimam

i stavljam ih unutar angular-cli.json

Zaključak

Iako na prvu ovaj proces može djelovati komplicirano zapravo je vrlo logičan i jednostavan. Ovisno od projekta do projekta može se dogoditi da je potrebno napraviti još dodatne prilagodbe. O svemu tome obavijesti će se nalaziti unutar CMD prozora.

Angular & Marvel API – demo aplikacija

U ovom ću blog postu pokazati kako koristiti Marvel API unutar Angular projekta. Fokus će biti na pravilnoj konfiguraciji API-ja nakon koje je moguće, prema dokumentaciji, koristeći različite parametre dobiti konkretne rezultate.

O Marvel API-ju

Marvel API je RESTful alat koji pomaže developerima stvoriti web stranice i aplikacije pomoću podataka iz 70 godišnje povijesti Marvela. Trenutno je dostupno šest vrsta resursa kao što su individualni stripovi (Comics), grupe ili serije stripova (Comic series), dijelovi pojedinih stripova (Comic stories), veliki događaji iz pojedinih stripova (Comic events and crossovers), žene, muškarci i organizacije koji su kreatori stripova (Creators) i likovi iz stripova (Characters).

Originalna putanja za pristup resursima nalazi se na http(s)://gateway.marvel.com/ i trenutno je moguće koristiti samo GET metodu.

Svaki zahtjev koji se uputi na gore navedeni URL mora u sebi sadržavati nekoliko parametara koji se dobiju nakon registracije.

Angular i Marvel API

API koji ću koristiti u nastavku ima sljedeći oblik

http://gateway.marvel.com/v1/public/comics?ts=1&apikey=1234&hash=ffd275c5130566a2916217b101f26150

iz čega je vidljivo da se sastoji od tri glavna parametra

  • apikey = PublicKey
  • tstimestamp (or other long string which can change on a request-by-request basis)
  • hashmd5 ključ ts parametra (npr. md5(ts+privateKey+publicKey))

Postavljanje Angular projekta

Koristeći Angular CLI kreiram novi projekt naredbom

Odmah ću kreirati i servis za API koristeći naredbu

Angular i Marvel API

Kao što se može vidjeti na slici iznad API servis trenutno ne zadovoljava potrebne preduvjete za uspješno korištenje. S obzirom da će taj servis primarno biti korišten za pozivanje HTTP(S) protokola moram dodati @angular/http. Također, koristiti ću i map operator koji će dobivenu vrijednost transformirati u JSON. Na kraju, prema ranije spomenutoj Marevl API dokumentaciji, moram koristiti MD5 hash, u tome će mi pomoći ts-md5 NPM paket koji instaliram naredbom $ npm i ts-md5 --save.

API servis na kraju izgleda ovako

Sada taj servis mogu koristiti u bilo kojem dijelu Angular aplikacije. Za potrebu ovog primjera zadržat ću se na app.component.ts.

Otvaranjem http://localhost:4200/ adrese odmah se dohvaćaju Marvel likovi sa ranije kreiranog API-ja.

Angular i Marvel API

Na kraju to može izgledati i ovako

Angular i Marvel API

Na slici iznad se može primijetiti da je prikaz vremena lijepo formatiran i da tako nije izgledao ranije u animaciji. Za to je zaslužan MomentJS.

Zaključak

Iz cijelog ovog blog posta najvažniji dio je API servis koji sadržava sve potrebno za uspješan dohvat podataka sa Marvel API-ja. Prikaz podataka radi se ovisno o potrebama od slučaja do slučaja. Konkretno u ovom blog postu fokus je bio na uspješnom dohvatu podataka.

Struktura projekta prema package.json

Ako nemaš sumnju u to kako će tvoja budućnost izgledati nemaš niti ambiciju nešto postići

Jeste li se ikada pitali čime se stvarno želite baviti u životu? Možda želite putovati kao što to rade Hrvoje Jurić ili Tomislav Perko, želite imati svoju tvrtku, otvoriti mali kvartovski kafić i biti sam svoj gazda. Što vas sprječava da krenete u ostvarenje svojih želja?

Nekada jednostavno znate čime ćete se baviti čak i prije nego ste krenuli u to. Znate da „morate“ biti izvan „sustava“ na koji je većina navikla, a to je posao od 8 do 16h. Ili upravo suprotno, potreban vam je sustav, struktura i red. Za vas ne postoji druga opcija nego ići odabranim putem. Možda vas je strah što će okolina misliti, ali svejedno krećete u nepoznato i putem upoznajte kako svijet tako i sebe. Mnogi će reći ”Znaš, stvarno želim biti standup komičar, imati svoju tvrtku, proputovati svijet,… ali to mogu ili ću učiniti tek nakon što ________ (umetni izgovor).“, ali kada imate samo taj jedan jedini put kojim morate ići izgovorima jednostavno nema mjesta. Strah vas je kako se nositi s preprekama, pitate se jeste li dorasli tome, istovremeno, okolinu je strah vašeg uspjeha i pitaju se kako vam dokazati da niste za to, ali gurate naprijed jer druga opcija za vas ne postoji. Ili ćete uspjeti ili vas neće biti.

Mnogi će na sve ovo reći „Lako je tebi tako se ponašati, putovati, razvijati startup pa ako i propadneš baš te briga. O meni ovise drugi ljudi i ne mogu si to dopustiti.„

Bezbroj je mogućih izgovora. Svatko može naći jedan. Izgovori kojima si onaj koji ih izgovara može jedino opravdati vlastiti strah od toga da krene u nešto novo, da se makne iz svoje zone komfora. Jer ako i uspije u svojem naumu, dio okoline mu to neće oprostiti jer će poremetiti i njihovo viđenje svijeta. Tada će i ta okolina vidjeti da se može kad se hoće pa se zid opravdanja počinje rušiti, a nitko ne voli kada im drugi ruše obrambene zidove koje su oko sebe godinama gradili.

Svi mi imamo neke prepreke i ograničenja. Ništa nije idealno i put do uspjeha nije ravan. Svaka osoba koja je ikada učinila nešto značajno imala je prepreke i probleme, imala je ljude oko sebe koji o njoj ovise, imala je 24 sata u danu, 7 dana u tjednu i 365 dana u godini. Glazbenici, sportaši, matematičari,… ma tko god bili i čime se god bavili imali su prepreke i probleme pri postizanju izvrsnosti. Oni su uspjeli. Pobijedili su sebe, svoje strahove i sumnje.

Naravno, uvijek postoji i neka (polu)opcija u slučaju da niste do kraja spremni početi živjeti život na način na koji to želite. Tu je plan B. Mislite da ne možete živjeti od putovanja po svijetu pa radite tijekom tjedna da bi mogli putovati vikendom. Na taj se način možete približiti slici svijeta kojeg si želite stvoriti, a da istovremeno ne odskačete previše od prosjeka.

Ako želite svirati kao Maksim Mrvica znači li to da ste spremni svaki dan satima vježbati? Mrvica nije njegov koncert, nije samo spot, on je stvoren od sati i sati vježbanja. Želite dobiti sponzore za svoja putovanja? Koliko ste prije toga spremni putovanja odraditi na rubu umora, gladi i na izmaku snaga bez ikakve garancije da će vas to ikada igdje dovesti? Oni koji sada putuju i za koje se može reći da su u tome uspješni, oni nisu samo njihove objavljene knjige, oni su stvoreni od sati i sati lutanja, putovanja nepoznatim, razmišljanja ”što meni ovo uopće treba!?”.

Svi se susreću sa preprekama i što više želite ići svojim putem biti će i više prepreka. Pratiti postojeće staze može vas dovesti samo do nečega što je već otkriveno od nekoga tko je ranije imao muda tražiti svoj put.

Svi prolazimo kroz teška vremena i razmišljanja kako više ništa nema smisla osim skakanja na glavu u prazan bazen. Trenutci sumnje u sebe i vlastiti izbor nešto su što vas u konačnici jača i odvaja one koji stvarno idu prema onome što žele od onih koji na to nisu spremni. Naravno da je teško uhvatiti se u nedoumici kojim putem krenuti, ali to su odluke koje svako za sebe mora donijeti. To su odluke koje dolaze s godinama. To su odluke koje svakome od nas daju pravo, ali i odgovornost za budućnost. Netko tko je postigao nešto značajno u životu sigurno nije dobio detaljne upute ili se zamarao člancima tipa ”10 načina kako i 10 načina zašto’.

To je ono što vas čini osobom, gradi vam karakter i stvara temelje da možete čvrsto stajati na zemlji znajući da kojim god putem išli i na kakve god probleme naišli da ih možete savladati. Gradite si samopouzdanje, postajete osoba koja će jednoga dana postavljati čvrste temelje za život i svojoj djeci. Postajete osoba koja će jednog dana nekome biti uzor.

Ako nemaš sumnju u to kako će tvoja budućnost izgledati nemaš niti ambiciju nešto postići. 

Što kada nemaš druge mogućnosti osim uspjeti!?

P.S. Na pisanje ovog blog postao potaknuo me jedan podcast Joe Rogana u kojemu govori o tome kako se počeo baviti standup komedijom jer ništa drugo nije znao raditi i smatrao je da za ništa drugo nije sposoban. Nije imao izbora. Zbog toga je bio prisiljen pobijediti strah od javnog nastupa i mnoge druge strahove.

P.P.S. Ovaj blog post je napisan 10. studenoga 2015.

Slika preuzeta sa https://www.facebook.com/events/166811593795440/