Business Clock, Weather and News [301884]

UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU

FACULTATEA DE INGINERIE

DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ

Proiect de diplomă

Conducător științific: Șef lucr. dr. inf. Pitic Antoniu Gabriel

Îndrumător: Șef lucr. dr. inf. Pitic Antoniu Gabriel

Absolvent: [anonimizat]: Calculatoare

– Sibiu, 2018 –

UNIVERSITATEA “LUCIAN BLAGA” [anonimizat]: Șef lucr. dr. inf. Pitic Antoniu Gabriel

Îndrumător: Șef lucr. dr. inf. Pitic Antoniu Gabriel

Absolvent: [anonimizat]: Calculatoare

Capitolul 1. Introducere

1.1 [anonimizat] a [anonimizat]. [anonimizat]. [anonimizat], tind să conțină o parte din personalitatea noastră: [anonimizat], alarme, [anonimizat], [anonimizat], [anonimizat]..

Rata de utilizare a telefoanelor inteligente în rândul populației din Romania a [anonimizat] 40% [anonimizat], în timp ce aproximativ 32% din români folosesc internetul pe mobil imediat ce se trezesc.

[anonimizat], din cadrul Google Germania, a [anonimizat]. [10]

Pentru că tehnologia actuală face posibilă comunicarea la orice distanță cu orice “colț” [anonimizat]-[anonimizat].

[anonimizat]. [anonimizat]-[anonimizat]. [anonimizat].

1.1.1 Fusuri orare

Un fus orar este o zonă pe Terra în care este legal în vigoare aceeași oră . [anonimizat].

Timpul civil se definește prin măsurători astronomice astfel încât amiaza locului (Soarele este în apogeu pe cer) coincide cu ora 12, dar astfel s-ar ajunge la situația în care fiecare loc de pe Pământ ar avea o [anonimizat]-o lume atât de interconectată. [anonimizat].

Pentru a se evita situația de mai sus s-a [anonimizat]. În cadrul marin sunt luate ca meridiane centrale toate cele ce sunt multiplu de 15°. Se ajunge astfel ca diferența în orice punct de pe Terra dintre timpul legal și civil să fie de maxim 30 de minute. Timpul legal al fiecărui fus orar este specificat în relație cu timpul universal coordonat (UTC), acesta reprezentând timpul civil al meridianului 0°.

Figura 1.1.1.1 Fusurile orare mondiale standard

În realitate însă, liniile de separare dintre fusurile orare sunt alterate astfel încât să corespundă peste granițele statelor, ajungându-se în acest fel la existența unei diferențe mai mari de 30 de minute între timpul civil și timpul legal.

1.2 Ideea proiectului

Ideea proiectului a pornit de la nevoia diferitelor persoane din mediul înconjurător serviciului meu, precum și a mea, de a fluidiza comunicarea dintre persoane aflate în locații foarte îndepărtate și nu numai, de a păstra o agendă clara și concisă asupra ședințelor și asupra organizării acestora. Fiind implicat în proiecte care necesitau stabilirea discuțiilor cu clienți din alte fusuri orare, administrarea timpului de lucru și programarea acestuia a devenit o provocare, în condițiile în care orele stabilite de client nu coincid cu timpul nostru.

De asemenea, observând că de multe ori se ajunge într-un “punct mort” al discuției, am inclus în aplicație modulele de Weather și News, care sa permită atingerea unor subiecte comune, subiecte care altfel ar putea fi menționate doar după căutări specifice pentru fiecare client, fiecare cu orașul său.

În așa numitul “secol al vitezei” în care trăim și ne desfășurăm activitățile de zi cu zi, fiecare sarcină care poate fi optimizată, cu siguranță va fi. Dificultățile menționate mai sus m-au condus la decizia de a încerca sa optimizez acest proces cât mai mult, să ofer un mijloc simplu de ridicare al nivelului de calitate în muncă din punctul de vedere al administrării timpului. Astfel a luat forma aplicația Business Clock, Weather and News, al cărui pur scop este rezolvarea unei probleme de care multe persoane nu sunt conștiente până nu le este prezentată, o problemă pe care mulți o trec cu vederea, anume timpul și mai exact organizarea acestuia într-un mod eficient.

Un avantaj al acestei aplicații este că oferă o vedere generală asupra mai multor domenii dominante din viața ordinară, folosindu-se de resurse și servicii gratis, disponibile pentru toți, dar folosite de puțini.

1.3 Soluții existente în domeniul proiectului (state of the art)

Soluțiile existente în domeniu se pot contura prin intermediul unui studiu de piață care să ajute la crearea unui proiect diferit, pornind de la o idee comună, rolul acestuia fiind cunoașterea dinamicii actuale a pieței.

Studiul pieței reprezintă colectarea informațiilor de pe piață, în funcție de ce informații sunt necesare, dezvoltatorul abordează cercetarea privind cererea, oferta sau mediul înconjurător de pe piața respectivă [13].

În ceea ce privește oferta, cercetarea ar trebui să ia în considerare care sunt potențialii concurenți de pe piață, care sunt ofertele lor sau care este politica lor comercială. Pe de altă parte, este importantă cererea, ea poate veni din partea unor firme sau din partea consumatorilor (comunității). Cunoașterea cererii înseamnă să se știe care este publicul la care dezvoltatorul dorește să facă referință (vârsta, sex, segment, stil de viață, venituri), care sunt motivațiile achiziționării unui produs. Al treilea factor este, în unele cazuri, cel mai important deoarece cunoașterea mediului extern este un factor pentru a înțelege oportunitățile și ocolirea posibilelor amenințări. Acesta reprezintă asigurarea că reglementările (legi, norme,etc.) sunt aplicate corect, influența situațiilor economice, influența factorilor sociali (presiuni ecologice, sindicale, etc.) sau existența noilor tehnologii pentru produsul/produsele în cauză [11].

Un studiu de piață este constituit din mai multe etape:

stabilirea contextului în care se încadrează proiectul, acesta fiind studiul aplicațiilor care oferă capabilități similare cu cele oferite de aplicația Business Clock, Weather and News, restrâns însă la nivelul de operare iOS, deoarece compatibilitatea între platforme nu este momentan posibilă

colectarea informațiilor disponibile în diferite medii (cărți, site-uri web, etc). Având în vedere multitudinea de surse disponibile, această sarcina necesită o atenție sporită. Ținând cont de contextul proiectului, au fost abordate mai multe surse precum magazinul de aplicații disponibil pe sistemul de operare iOS (App Store), rezultatul fiind unul nesatisfăcător din cauza faptului ca majoritatea acestor aplicații oferă un singur modul separat din cele trei disponibile în aplicația prezentata în proiect, în timp ce nevoia era pentru o colecție de funcționalități. Privind modulele individual însă, aceasta cercetare a fost fructuoasa deoarece exista foarte multe aplicații care arata și funcționează ireproșabil.

analizarea informațiilor găsite în amănunt, în urma căreia sa se realizeze grafice și statistici, precum și comparații pro și contra pentru a alege cea mai buna varianta pentru fiecare modul. Proporțiile problemelor regăsite în urma acestui proces sunt prezentate în figura de mai jos:

Figura 1.3.1

După cum se poate observa și mai sus, majoritatea aplicațiilor studiate se bazează pe prezentarea de reclame către utilizator, reclame care de multe ori împiedică utilizarea în condiții normale a aplicației. De asemenea, acestea au implicații la nivelul performantei deoarece utilizează accesul la internet, acest lucru aducând cu sine un consum mai mare de date.

Aplicația BCWN nu se bazează pe reclame, deoarece serviciile folosite sunt oferite gratuit iar scopul acesteia este o alternativa sănătoasă la ceea ce se regăsește pe piață în contextul proiectului.

ultimul pas în acest proces este reprezentat de raportul studiul în urma analizei, cu avantaje și dezavantaje. Luând în considerare cele prezentate mai sus, pe piață aplicațiilor din contextul proiectului nu există aplicații care sa satisfacă suficient de bine consumatorii.

Capitolul 2. Arhitectura aplicației

Pentru crearea acestei aplicații a fost necesara o baza de date locala (salvata pe dispozitivul utilizatorului), baza de date pentru care am încercat sa reduc la minim datele ce trebuie utilizate, bazându-mă foarte multe pe servicii on-line, reușind în acest fel sa reduc timpul necesar pentru accesul la baza de date deoarece poate deveni semnificativ dacă volumul de date este pe măsură.

Capitolul 3. Tehnologii folosite

Termenul de tehnologie provine din limba greacă de la cuvântul “teknologia”, acesta fiind format din două cuvinte de bază : “tekhnë” care înseamnă meserie sau artă și cuvântul “logos” care înseamnă cuvânt. În programare, termenul de tehnologie se referă la algoritmul sau multitudinea de algoritmi combinați care ajută la dezvoltarea unui produs software.

După definirea unei arhitecturi pentru o aplicație, este necesară stabilirea tehnologiilor ce vor fi utilizate în cadrul proiectului, din urma cărora sa rezulte produsul final. Un aspect foarte important îl reprezintă compatibilitatea acestor tehnologii, fiind astfel nevoie de o cercetare temeinica înainte de a se începe dezvoltarea pentru a se evita situația în care aplicația trebuie sa sufere o schimbare majoră pentru că anumite tehnologii nu pot sa coexiste în același context.

3.1 Swift

Swift este un limbaj de programare cu scop general, orientat obiect, dezvoltat de către compania Apple pentru sistemele de operare proprietare acestora (iOS, macOS, watchOS, tvOS), fiind mai apoi pus la dispoziție și pentru Linux. Limbajul Swift este proiectat astfel încât sa lucreze cu framework-urile proprietare Apple Cocoa și Cocoa Touch, păstrând însă compatibilitatea cu Objective-C, folosind runtime library din acesta, lucru care permite executarea de cod C++, Objective-C și Swift în același program.

Încă de la lansarea acestuia, Swift s-a situat în topurile limbajelor de programare, dar fiindcă este foarte specific pentru mediul Apple, implicit aplicațiile pentru sistemele acestora, răspândirea și acceptarea acestuia au fost îngreunate. Programatorii doresc sa învețe și sa se specializeze pe limbaje și medii de programare care le permit sa își aplice cunoștințele pe o multitudine de platforme, un exemplu foarte bun fiind Java. Totuși, Swift are câteva elemente specifice care au fost primite cu deschidere de către programatori, printre care se numără renunțarea semnului punct și virgula la sfârșitul fiecărei linii de cod, semănând în acest fel cu Ruby și făcând utilizarea limbajului mult mai facila, precum și modului de Playgrounds.

În Playgrounds se poate observa foarte clar cum se compilează și rulează diferite fragmente de cod, făcând astfel învățarea și testarea acestui limbaj un proces mult mai ușor pentru începători, dar în asemenea măsură și pentru cei mai avansați.

Figura 3.1.1 Playgrounds

Pentru codul de mai sus, se poate observa ca în partea dreapta avem o consola “live”, în care putem observa variabilele și valorile acestora în timp ce acestea rulează și imediat la scriere dacă se pot compila și rula rapid (în background).

De asemenea, Swift dispune de un sistem de “colectare a gunoaielor” asa cum regăsim de exemplu în Java, acesta presupunând eliminarea din memorie a tuturor obiectelor și informațiilor în mod automat de către sistem, nefiind necesara implicarea programatorului în procesul de alocare și dealocare a resurselor, asa cum era de exemplu cazul limbajelor mai vechi în care administrarea memoriei era o problema foarte importanta.

3.1.1 Limbajul de programare Swift

Limbajul Swift este bazat pe programarea orientata obiect sau OOP (Object Oriented Programming), acesta fiind un concept de programare apărut în anii 1950-1960. Un sistem orientat obiect are la baza comunicarea dintre doua sau mai multe obiecte.

Obiectul se caracterizează prin stare și comportament, fiind compus din proprietăți și metode care sa asigure comunicarea. Metodele reprezinta de fapt funcțiile clasice din cunoscutele limbaje de programare precedente, cu o diferența majora, și anume pointer-ul “this” care se refera la contextul actual în care ne aflam, și anume funcția. În momentul în care se apelează o metoda, se trimite de fapt un mesaj unui obiect sau mai multora, instruindu-le cu privire la ce trebuie sa facă. O metoda poate avea mai multi parametri de intrare și un singur parametru de ieșire, printre care se afla și “void”. În cazul Swift se poate returna un tuplu de valori, astfel ca nu suntem limitați la o singura valoare sau la un vector de valori. De asemenea, acest lucru ne oferă posibilitatea de a returna valori de tip diferit, un exemplu fiind cel de mai jos:

În exemplul de mai sus, constantei “http404error” i se atribuie tuplul de valori 404 și Not Found, acestea fiind de tip Int și String. Astfel, se pot returna o combinație de valori de diferite tipuri, făcând implementarea metodelor mai complexe mult mai ușoară, nefiind nevoie de împărțirea unei metode principale în mai multe doar pentru a obține rezultatul dorit.

Acest tuplu de valori are mai multe funcționalități foarte folositoare, precum descompunerea acestuia în componentele ce îl alcătuiesc:

Un alt element definitoriu pentru Swift este reprezentat de “Optionals”, un concept relativ de utilizat la început dar care se dovedește foarte util. Acestea opționale se folosesc în contextele în care o valoare poate fi absentă, fiind foarte folositoare în cazurile în care se așteaptă după valoarea unei variabile sau nu exista certitudinea acesteia, oferindu-se astfel posibilitatea de a implementa și de a continua programul în funcție de cazurile prezentate mai jos. Un opțional reprezinta doua posibilități:

exista valoare pentru variabila respectiva, caz în care se poate face unwrap la aceasta și se poate folosi valoarea din interior

nu exista valoare, caz în care se va arunca o excepție

În imaginea de mai sus, variabila “serverResponseCode” este declarata ca Int?, semnul ? semnificând faptul ca este un opțional, și i se atribuie valoare 404. Dacă încercăm sa ii facem unwrap, vom găsi ca variabila este de tip Int și conține valoarea definita mai sus. Dacă însă ii atribuim nil (null) într-un fragment de cod mai jos, valoarea acestuia va fi null, deși mai sus a fost declarata ca fiind Int.

În principiu, limbajul Swift se bazează pe clase și structuri, acestea fiind mult mai apropiate ca funcționalitate decât în alte limbaje, păstrând însă diferențele de rigoare.

Clasele și structurile au multe lucruri în comun, ambele fiind capabile de:

definirea unor proprietăți pentru a stoca valori

definirea unor metode pentru a oferi funcționalități

definirea de initializatori pentru a seta starea inițială

fi extinse pentru a-și extinde funcționalitatea dincolo de o implementare default

Pe lângă cele de mai sus, clasele au funcționalități care nu sunt regăsite și în cazul structurilor:

inheritance, adică moștenirea care permite moștenirea caracteristicilor altor clase

type casting care permite verificare și interpretarea unei clase la runtime

deinitializatori care permit dealocarea manuala a resurselor atribuite unei clase

numărarea referințelor care permite ca o instanta de clasa sa fie referentiata de mai multe obiecte

În imaginea de mai sus se poate observa diferența dintre declararea unei structuri, respectiv a unei clase. În structura denumita Resolution sunt definite doua proprietăți, iar în clasa denumita VideoMode sunt definite patru proprietăți variabile stocate, printre care se regăsește și structura definita mai sus.

Caracteristicile principale ale limbajului Swift:

Securitate – este un limbaj de programare foarte sigur, furnizând mecanisme complexe de securitate, fiind ajutat și de faptul ca este orientat către platforme proprietare

Neutralitate arhitecturala – rularea unei aplicații nu depinde de arhitectura fizica a device-ului pe care rulează

Robustețe – prin eliminarea pointerilor, administrarea automata a memoriei și eliminarea elementelor nefolositoare

Performanta – fiind orientat către mediul Apple, acest limbaj este foarte bine optimizat pentru device-urile proprietare, nefiind nevoie sa se adapteze pentru diverse sisteme de operare sau telefoane

3.1.2 SQLite

SQLite este un sistem de management al datelor relațional conținut într-o librărie de programare C. Comparativ cu alte sisteme de management al datelor, SQLite nu este o baza de date client-server, aceasta fiind incorporata în program. SQLite este cea mai folosita baza de date din lume, fiind folosita în browsere, sisteme de operare și sisteme incorporate, fiind foarte populara pentru aplicațiile mobile

Engine-ul SQLite nu are procese de sine stătătoare cu care aplicația în care este folosit sa comunice, acesta devenind parte integranta a aplicației deoarece este legat de aceasta. Acesta este descris ca fiind “zero-conf” deoarece nu necesita un serviciu de configurare (cum ar fi un script de pornire), sau controlul accesului bazat pe parole. Accesul controlului este gestionat pe baza permisiunilor fișierelor de sistem date bazei de date

3.2 Sistemul de operare iOS

iOS este un sistem de operare bazat pe Unix creat și dezvoltat de către compania Apple pentru hardware-ul exclusiv acestora. Este al doilea cel mai popular sistem de operare, fiind detronat doar de Android. Acesta sta la baza iPhone, iPad și iPod Touch.

Dezvăluit inițial în 2007 și orientat exclusiv pentru iPhone, acesta a fost ulterior extins și pentru iPod touch în septembrie 2007.

[x.x]

Figura 3.2.1 Logo iOS

Interfața iOS este bazata pe manipulare directa, folosind gesturi multiple (denumite multi-touch). Controlul elementelor de interfață se realizează prin intermediul sliderelor, switch-urilor și butoanelor. La nivel de sistem de operare sunt definite diferite gesturi (swipe, pinch, etc), care însă pot fi alterate pentru a satisface nevoile aplicațiilor în care sunt folosite, recomandarea venita de la Apple fiind însă sa se păstreze pe cat posibil functionalitatile originale pentru a păstra o consistenta pe parcursul întregii experiente a utilizatorului.

Pentru a sugera importanta acestei consistente, fiecare aplicație care se dorește sa fie pusa spre disponibilitatea utilizatorilor trebuie sa se conformeze unor standarde impuse de Apple, standarde care se numesc “Human Interface Guidelines”. Acest document conține un set de reguli și de sugestii care trebuie sa fie respectate de către toate aplicațiile, consecințele nerespectării acestora fiind unele mai puțin plăcute deoarece fiecare aplicație este supusa unei verificări înainte de a fi pusa în AppStore (magazinul online de aplicații proprietar Apple), astfel ca dacă se încalcă acele reguli, aplicația va fi respinsa urmând ca mai apoi sa se reglementeze acele lucruri care nu au fost respectate.

[x.x]

Figura 3.2.2 Utilizarea iOS

Graficul de mai sus ilustrează utilizarea diferitelor versiuni de sistem de operare conform statisticilor oferite de AppStore pana la data de 31 mai 2018.

Figura 3.2.3 – Structura iOS generală

Figura 3.2.4 Arhitectura iOS

În Figura 3.2.4 se poate observa în mod detaliat arhitectura sistemului de operare iOS, acesta fiind împărțit în mai multe categorii generale, asa cum putem observa în figura 3.2.3.

Pentru a adăuga un layer de securitate, s-a introdus ideea de sandbox specific fiecărei aplicații, astfel ca aplicațiile rulează în propriul lor mediu, fără a avea impact direct asupra celorlalte sisteme din cadrul iOS. Pana la introducerea folderului de Files, care permite accesare și gestionarea tuturor fișierelor din cadrul sistemului de operare, transferul de fișiere intre diferite aplicații era destul de complicat, tocmai pentru a descuraja și împiedică eventuale breșe de securitate.

Am ales sa folosesc sistemul de operare iOS în cadrul proiectului Business Clock, Weather and News deoarece dezvoltarea aplicațiilor este foarte facila în condițiile în care deții un computer Apple, având la dispoziție o multitudine de resurse și comunități care sa sprijine dezvoltarea eficienta de aplicații. Un alt factor important a fost limbajul de programare Swift, prezentat mai sus.

3.3 Model-View-Controller pattern

În implementarea proiectului s-a utilizat modelul de programare de tip “Model View Controller”, sau asa cum este cunoscut prescurtat MVC. Dintr-un punct de vedere high-level, MVC este precum ii spune numele, fiind alcătuit din 3 layere:

Modelul este locul în care se regasesc datele, locul în care persistenta, modelele obiectelor, parserele și codul care implica rețeaua sunt implementate

View-ul este “fata” aplicației, clasele sunt de obicei reutilizabile deoarece nu sunt legate de o anumita implementare. Un exemplu ar fi tabelul din iOS

Controller-ul este mediatorul dintre cele doua menționate mai sus, de obicei prin intermediul unui model de delegați. Într-un scenariu ideal, controllerul nu trebuie sa cunoască niciun detaliu de implementare din cele doua de mai sus, logica aplicației fiind definita în acelea.

[x.x]

3.4 Swifty JSON

JavaScript Object Notation (JSON) este un format de schimb de date foarte utilizat datorita ușurinței cu care poate fi citit și scris de către oameni și pentru ușurința computerelor în a-l parsa și genera. JSON este construit pe doua structuri:

o colecție de perechi nume/valoare

o lista ordonata de valori

Limbajul de programare Swift pune foarte tare accent pe tipul datelor, ceea ce în multe situații este foarte benefic, în cadrul prelucrarii JSON devine o dificultate. Pentru ca parsarea și generarea de JSON în contextul pur Swift necesita o mulțime de blocuri conditionale “if”, au apărut librarii care sa facă aceasta munca mai ușoară, asa cum este cazul SwiftyJSON.

Pentru a prelua o valoare din JSON în context pur Swift, ar fi nevoie de cod precum în imaginea de mai jos, ceea ce nu reprezinta cea mai buna și cea mai eficienta varianta:

Folosind SwiftyJSON, tot codul de mai sus se reduce la:

Se observa clar avantajul acestei librarii, dar pe lângă toate acestea, SwiftyJSON rezolva și problema opționalelor menționate mai sus, având logica tratării acestora deja implementată.

3.5 Servicii REST

Representational State Transfer (REST) reprezinta o modalitate de a utiliza comenzile HTTP ca și API pentru aplicația client. Toate serviciile REST sunt scalabile, au o interfață uniforma și sunt mai performante decât serviciile ce utilizează nivelul SOAP peste HTTP.

Toate operatiile și datele folosite de REST sunt considerate resurse, accesibile prin adrese URL (Uniform Resource Identifiers). În cadrul acestor servicii, server-ul și clientii fac schimb de informatie intre ei folosind o interfață standard și un protocol.

Cele mai utilizate metode HTPP pentru definirea serviciilor REST sunt:

GET

POST

PUT

DELETE

În general, cu metoda GET se realizeaza citirea unei resurse fără a o modifica, operatia nefiind folosita la crearea de resurse. POST este utilizat în general la upload-ul unei noi resurse, sau pentru modificarea uneia deja existente, dar executii repetate pot avea efecte diferite. PUT este utilizat doar pentru crearea de noi resurse, executiile repetate având același efect ca și o executie individuala.

REST reprezinta un stil arhitectural bazat pe standardele HTTP și Web, partea de server având posibilitatea de a conține mai multe nivele, fără ca modificari ale acestora sa aiba efecte asupra potentialilor clienți. De asemenea, are o arhitectura scalabila datorita separari responsabilitatilor clientilor respectiv a serverului. Ca exemplu, responsabilitatea serverului este sa realizeze managementul datelor fără a mentine nicio stare legata de utilizatori, în timp ce responasbilitatea clientului este pur și simplu de a păstra starea unui utilizator. Serverul nu trebuie sa mentina nicio stare referitoare la client, concept cunoscut ca stateless, resursele având posibilitatea de a avea diferite reprezentari (XML, JSON).

În aplicația Business Clock, Weather and News sunt folosite servicii REST intensiv deoarece toate datele ce trebuie preluate de pe internet, precum informatiile despre prognoza meteo și informatiile despre stirile dintr-o anumita zona,

Capitolul X. Utilizarea aplicației

Aplicația Business Clock, Weather and News are ca scop eficientizarea organizării ședințelor între utilizatori din diferite locații de pe Pământ cu diferite fusuri orare, precum și furnizarea de informații despre locațiile respective precum vremea și știrile specifice în scopul unei mai bune comunicări între persoanele implicate.

BCWN este dezvoltată pentru sistemul de operare iOS, aceasta fiind împărțită în mai multe sub-sisteme:

adăugarea și gestionarea locațiilor

alarme

prognoza meteo

știri

X.1 Descrierea aplicației

Aplicația iOS beneficiază de un design ușor de înțeles, atrăgător și simplist. Prima pagină este un ”Splash Screen”, aceasta fiind un pas intermediar între pornirea aplicației și încărcarea acesteia cu scopul de a oferi utilizatorului o experiență plăcută și fluentă, fără întreruperi cauzate de procesarea diferitelor elemente grafice necesare. Din această pagină se face tranziția către ecranul principal în care sunt afișate toate orașele adăugate anterior, precum și diverse detalii despre acestea:

ora locală a orașului (bazată pe Timezone-ul specific)

temperatura (în grade Celsius, precum și în grade Fahrenheit)

o imagine care reprezintă condițiile meteo actuale

Din pagina principală utilizatorul are posibilitatea de a adăuga noi orașe (locații), condiția fiind ca orașul să nu fie deja prezent în listă, precum și opțiunea de a șterge o locație deja existentă. Tot din acest punct se poate accesa și ecranul de setări generale ale aplicației care permit modificarea unităților de măsură pentru temperatură, viteza precum și a setărilor legate de funcționalitatea aplicației.

Figura X.1.1 Locații curente

X.2 Scenarii de utilizare

Pentru a putea folosi aplicația în scopul în care aceasta a fost gândită, utilizatorul trebuie să adauge orașele pentru care dorește informații. Sunt oferite două modalități pentru a realiza acest lucru:

adăugarea locației curente, utilizând API-urile puse la dispoziție de Apple pentru a prelua coordonatele GPS și API-ul Google Maps pentru identificarea locației în funcție de coordonatele provenite de le GPS

Figura X.2.1 Adăugarea locațiilor

a doua modalitate de a adăuga noi orașe este prin folosirea search-ului, care utilizează serviciul pus la dispoziție de Google pentru a returna orașe și coordonate GPS în funcție de numele relativ al orașului, asa cum se poate observa în Figura X.1.1.

După ce utilizatorul adaugă cel puțin un oraș, se pot accesa detaliile despre acesta având la dispoziție 3 module cu diferite funcționalități. După selectare unei locații, se vor deschide detaliile despre aceasta, urmând ca mai apoi să se utilizeze o bară de navigație pentru a schimba între ecranele aplicației.

Figura X.2.2

Primul dintre acestea este modulul de Alarms, așa cum se poate observa în Figura X.2.3. Aici se pot gestiona alarme pentru diferite ore ale locației, urmând ca în backend să se calculeze diferența dintre fusurile orare ale orașelor (orașul curent, respectiv orașul adăugat de user). Un ceas static este afișat pentru fiecare alarmă, astfel încât ora setată să fie fie vizibilă de la o primă privire. De asemenea, fundalul fiecărui ceas se setează cu fundaluri diferite în funcție de perioada zilei corespunzătoare alarmei.

Figura X.2.3

Pentru a fi setată o nouă alarmă, se apasă butonul  ”+”, care va deschide un nou screen cu detaliile despre alarma ce urmează a fi setată, așa cum putem vedea în figura X.2.4. Ora poate fi setată folosind un “Time Picker”, urmând apoi adăugarea notițelor specifice alarmei (dacă există). Alarma va avea un sunet implicit, dar va putea fi selectat utilizând butonul de “Sound”, care va deschide un nou screen conținând sunetele disponibile la nivelul iOS-ului, precum și sunete custom din storage-ul telefonului. (Figura X.2.5). O altă setare care poate fi customizată în funcție de preferințe este perioada la care să se repete alarma (opțional), demonstrat în figura X.2.6. Pentru a păstra un mediu familiar cu cel implicit aplicației de alarmă din iOS, paleta culorilor este în același domeniu.

Figura X.2.4

Figura X.2.5

Figura X.2.6

Prin apăsarea butonului se pot edita detaliile și setările pentru fiecare alarmă în parte, ecranul care se deschide fiind același cu cel de adăugare a unei alarme noi, cu diferența că toate câmpurile sunt deja populate cu detaliile introduse anterior. (Figura X.2.4).

Cel de-al doilea modul al aplicației este cel de “Weather”, acesta fiind unul din cele mai mari consumatoare de timp și resurse, deoarece utilizează servicii on-line de prognoză meteo pentru a afișa detalii semnificative pentru orașul dorit. În momentul în care se atinge butonul din bara de navigație din Figura X.2.2, se apelează metoda care accesează API-ul de la Weather Underground, pentru a se încerca reducerea timpului de așteptare necesar procesului de încărcare a datelor despre vreme deoarece sunt întârzieri semnificative cauzate de natura apelului către acest API.

Figura X.2.7

În ecranul de “Weather” (Figura X.2.7) utilizatorului i se pun la dispoziție mai multe detalii despre vreme precum prognoza pe 6 ore (dacă este disponibilă prin serviciu), în care sunt afișate mai multe componente:

ora pentru care sunt afișate detaliile

condițiile atmosferice reprezentate printr-o imagine care se adaptează în funcție de ceea ce primim de la API

temperatura

probabilitatea averselor

viteza aproximativă a vântului, precum și direcția acestuia

O altă caracteristică a vremii este de asemenea disponibilă, mai exact prognoza pe 3 zile (dacă este disponibilă). Detaliile afișate aici sunt condițiile actuale reprezentate printr-o imagine și temperatura medie pentru orașul în cauză.

Ultimul modul major al aplicației poate fi accesat apăsând butonul din bara de navigație din Figura X.2.2, acesta fiind cel de “News”, în care vor fi afișate știri din diferite categorii (definite de utilizator pentru fiecare oraș) cu mențiunea că știrile sunt bazate pe locație, mai exact modulul va încerca să găsească știri din regiunea aproximativă a orașului. În figura X.2.8 se poate observa structura modulului de “News”.

Figura X.2.8

În acest ecran utilizatorul poate accesa setările pentru preferințele știrilor apăsând butonul care va deschide un nou screen cu detaliile menționate mai sus, prezentat în figura X.2.9. În acesta se pot alege categoriile de știri pentru care se doresc informații (implicit sunt fi 4 categorii disponibile):

tehnologie

afaceri

sport

economie

Figura X.2.9

O ultimă parte a aplicației (dar care joacă un rol major în experiența generală a aplicației) este reprezentată de ecranul de setări generale, în care se pot alege unitățile de măsură în funcție de sistemul de măsură folosit în regiunea în cauză. Acesta poate fi accesat apăsând butonul din bara din Figura X.2.2.

Figura X.2.10

Similar Posts