Dispozitiv de afisare bazat pe fenomenul de inertie a retinei [303908]

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU: CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT: IF

Proiect de diplomă

COORDONATOR ȘTIINȚIFIC:

ABSOLVENT: [anonimizat]-LINUS PAUN

ORADEA

2018

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU: CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT: IF

Dispozitiv de afisare bazat pe fenomenul de inertie a retinei

COORDONATOR ȘTIINȚIFIC:

ABSOLVENT: [anonimizat]

2018

Cuprins

INTRODUCERE

Context general

Felul cum vezi o imagine, fie ea poză sau pictură, s-a schimbat pe parcursul anilor. [anonimizat],[anonimizat].

Imaginea nu mai are doar rolul de a documenta sau de a [anonimizat]. [anonimizat] a evoluat tehnologia.

Scopul final al unui artist este sa transpuna ceea ce gandeste si simte intr o forma in care cel care vizualizeaza creeatia acestuia sa traiasca aceeleasi sentimente.

Contextul proiectului

Tehnologia evolueaza concomitent cu creativitatea si imaginatia de care dau dovada diferiti artisti din ziua de azi. Dispozitivele mobile ajung să fie mai performante chiar și decât aparatele de fotografiat al utilizatorilor lor. [anonimizat] a avea acces in toate locurile din lume fara a zbura fizic spre aceea destinatie. [anonimizat] o soluție pertinentă în problema imaginii.

Astfel, ajutand artistii precum si oamenii sa aibe aceleasi trairi printr o imagine transpusa in realitatea virtuala sau 3D.

Obiectivele proiectului

Obiectivul acestui proiect îl reprezinta realizarea unui display POV(persistence of vision), care are ca scop înlocuirea ecranelor traditionale.

Soluția hardware propune următoarele funcționalități:

O modalitate noua de vizualizare a unei imagini.

[anonimizat], marketing si multe altele

Dezvoltarea acestei tehnologii pana la stagiul de holograma.

Rezumat

Subiectul acestui lucrări îl reprezintă un dispozitiv de afisare bazat pe fenomenul de inertie a retinei, care îl va ajuta pe utilizator sa vada dintr o noua persepctiva imaginisau chiar si inregistrari video. Programul va fii implementat intr o placa Arduino UNO ce va fii atasat unei structuri ce permite afisarea imaginii.

În capitolul 2 [anonimizat] 3-lea vor fi prezentate câteva proiecte similare deja existente pe piață. În capitolul 4 [anonimizat], dar și cerințele proiectului. În capitolul 5 [anonimizat] 6. Manualul de utilizare și instalare reprezinta obiectul de studiu al capitolului al 7-lea, în timp ce concluziile vor fi abordate în capitolul 8.

2. STUDIU BIBLIOGRAFIC

2.1 [anonimizat] a retinei.

2.1.1 Head Up Display Streetwize

Head Up Display Streetwize permite șoferului să vadă informațiile din bord fără a-și lua privirea de la drum, toate informațiile fiind proiectate pe parbriz.

Informații utile:

Această funcție a fost inițial introdusă în anul 1942 fiind amplasată pe avioanele de vânătoare pentru a ajuta piloții să vizualizeze țintele și traiectoria pe timp de noapte

În ziua de azi, tehnologia Head Up Display este regăsită în industria auto, primul producător care a introdus această tehnologie fiind BMW, denumită și tehnologia HUD

Aceasta poate fii incorporată în bord-ul mașinii, fiind disponibil și pe tablete sau dispozitive mobile

Prețul unui astfel de dispozitiv poate varia de la 50 Euro până la 500 de Euro.

Fig. 2.1 Head Up Display Streetwize

2.1.2 Microsoft Research

Microsoft, prin intermediul unei tehnologii inovative de a captura miscarea 3D, au reușit să teleporteze vizual o persoană dintr-un loc în altul, in timp real. Denumirea folosită pentru acest process fiind holoportare.

Holoportarea sau holografierea este posibilă prin montarea mai multor camera ce capturează grafic un obiect sau o persoană, permițând sistemului să o redea grafic tridimensional și să o salveze in format digital, după care să poată fi transmis și redat pe un alt sistem compatibil.

Inovația vine cu volumul foarte mare de date datorita unor serii de imagini de foarte bună calitate facute din perspective multiple spațiale, folosind procedee de compresie a datelor, transmise in timp real.

Impactul asupra modului de folosire al unor dispozitive, aparate sau tehnologii:

Comunicații digitale la distanță

Al realității virtuale, de exemplu asistentul digital personal Cortana care ar putea avea și o înfățișare 3D

Vizionarea unui film holographic fiind plasat in centrul acestuia

Interacționarea cu holograma, prin intermediul unor jocuri realiste

Fig 2.2 Holoportarea

2.1.3 Samsung Gear VR

Samsung Gear VR este un device complet de divertisment fiind în aceelași timp un accesoriu pentru smartphone-uri.

Ochelarii virtuali se prezintă cu o multitudine de senzori integrați, senzori a căror acuratețe, fidelitate și răspuns sunt mult peste cei ce sunt prezenți înr-un smartphone. Samsung Gear VR îți redă imaginea filtrată prin intermediul a două lentile ce au rolul de mărire a câmpului vizual. Componentele hardware și software-ul utilizat sunt optimizate astfel incât să poată reda o realitate virtuală cu cea mai mică latență.

Fig. 2.3 Samsung Gear VR

3. ANALIZĂ ȘI FUNDAMENTARE TEORETICĂ

3.1 Componente utilizate

Proiectul a fost realizat utilizând componente precum Arduino, breadboard, LED-uri si alte componente ce sunt descrise în urmatoarele pagini . Avantajul componentelor folosite este că acestea sunt accesibile de către oricine atât ca preț cât și ca disponibilitate, calitatea inalta ce depinde și de preț si de piață.

Avantaje pentru alegerea acestui proiect:

Cost monetar practic redus, întrucât componentele se pot găsii la prețuri accesibile și nu necesita nici un fel de software proprietar

Existența suportului tehnic din partea pasionaților care fac parte din comunitățile care se ocupă cu dezvoltarea și întreținerea tehnologiilor în discuție precum asamblarea proiectului si implementarea programului

Proiectul a fost realizat cu ajutorul plăcii Arduino, conectată la un breadboard și pentru afisarea scrisului, LED-uri de culori diferite. Mediul de dezvoltare pentru implementarea programului este Arduino IDE, acesta fiind un inline assembler. Programul este scris în limbaj de asamblare în cadrul programelor de C/C++ compilate cu ajutorul GCC. Avantajul folosirii unui limbaj de asamblare este aceea de a permite optimizarea unor portiuni de cod si obținerea unor programe mai mici ca dimensiune. Acesta este un produs software cât si un concept, extinzând conceptul open source si asupra realizărilor tehnice concrete precum scheme, cablaje electronice ș.a.m.d.

Prezentarea în detaliu a acestor tehnologii urmează în secțiunile următoare.

3.1.1 Arduino

Arduino este o companie open-sorce care produce plăcuțe de dezvoltare bazate pe microcontrolere impreună cu partea de software destinată funcționării și programării acestora.

Proiectul este bazat pe designul plăcilor cu microcontroler produse de cațiva frunizori, folosind diverse tipuri de microcontrolere. Aceste plăci pun la dispoziția utilizatorului pini I/O, digitali si analogici, care poti fi interfațați cu o gamă largă de plăcuțe numite scuturi sau și cu alte circuite. Plăcile au interfețe de comunicații seriale, inclusive USB pe unele modele, pentru a încărca programe din calculatoarele personale.

Pentru programarea microcontrolerelor, Arduino vine cu un mediu de dezvoltare integrat(IDE) bazat pe proiectul Processing, care include support pentru limbaje de programare ca C si C++.

Caracteristici:

Open-source. Codul sursă este disponibil prin Android Open Source Project, fiind distribuit sub licența Apache versiunea 2.0, ce pune la dispoziție libera modificare și redistribuire. Kernel-ul (nucleul) se află sub licența GPL versiunea 2.0, ce presupune că modificarea surselor trebuie sa fie făcuta publică

Datorită faptului că este scris în Java și codul este executat pe o mașină virtuală Dalvik, oferă o portabilitate de rulare pe diferite arhitecturi, precum x86, ARM și altele.

UI-ul (User Inteface) poate fi scalat pentru orice rezoluție

Asigură suport pentru diferite tipuri de grafică 2D și 3D, utilizând OpenGL ES

Datele pot fi stocate local, prin intermediul unui tip de baze de date numit SQLite

Acesta pune la dispoziție o suită de echipamente de dezvoltare pentru developeri, cele mai cunoscute fiind Android Studio, Eclipse IDE, Android SDK etc.

3.1.1.1 Hardware

O placă Arduino este alcătuită dintr-un microcontroler Atmel AVR de 8, 16 sau 32- biti impreună cu diferite componente care facilitează programarea si încorporarea în alte circuite. Arduino dispune de conectori standard ce permit

Fig. 3.1 Distribuirea versiunilor Android[9]

Versiunile precedente lui Android 2.2.3 Gingerbread nu mai sunt în utilizare la scară largă, conform graficului de mai sus.

Fig. 3.2 Tabel cu versiunile de Android

Sistemul de operare Android este structurat pe mai multe nivele. Fiecare nivel se bazează pe funcționalitățile nivelului anterior.

Fig. 3.3 Arhitectura sistemului Android[10]

3.1.1.2 Linux Kernel (Nucleu Linux)[11]

Poziționat la baza stivei software a Android-ului, Kernelul Linux asigură un nivel de abstractizare între partea hardware a dispozitivului și nivelele superioare ale stivei software. Inițial bazat pe Linux versiunea 2.6, iar acum pe 4.4, kernelul asigură multi-tasking preemptiv, servicii de bază de sistem low-level, cum ar fi managementul memoriei și proceselor. Adițional, asigură și o stivă de rețea și drivere de dispozitiv pentru display-ul acestuia, Wi-Fi și audio. Kernelul Linux asigura un mediu de multitasking, pentru a permite execuția concurentă a multiple procese.

Kernelul[12] Linux original a fost dezvoltat în 1991 de Linus Torvalds. Acesta a fost împachetat cu un set de unelte, utilități și compilatoare de Richard Stallman pentru a crea un întreg sistem de operare, referit astăzi fals ca și Linux, și corect ca și GNU/Linux.

Este important de notat că, Android folosește doar kernelul de Linux.

3.1.1.4 Android Runtime – Dalvik Virtual Machine

Fiecare aplicație de Android rulează în propria ei instanță de mașină virtuală Dalvik. Rularea aplicațiilor în propria lor mașina virtuală presupune un număr de avantaje. În primul rând, aplicațiile sunt îngrădite. Astfel, ele nu pot interfera cu sistemul de operare sau alte aplicații, dar nu pot nici să acceseze direct nivelul hardware al dispozitivului. Nivelul acesta de abstractizare forțează aplicațiile să fie neutre din punct de vedere al platformei pe care rulează, pentru ca nu depinde de o anumită configurație hardware.

Google a dezvoltat mașina virtuală Dalvik, fiind mai eficientă decât mașina virtuală Java standard în privința memoriei. Este proiectată să îndeplinească în special funcția de asigurare a bunei funcționări a multiple instanțe. Pentru a fi executat într-o mașina virtuală Dalvik, codul aplicației trebuie convertit din cod Java standard în format Dalvik executabil (.dex), ce lasă urme în memorie cu 50% mai mici decât codul standard de Java, bytecode.

3.1.1.5 Android Runtime – Core Libraries (Librării de nucleu)

Librăriile de nucleu Android (numite și Librăriile Dalvik) se împart în trei categorii:

Librării specifice Dalvik

Aceste librării sunt folosite când este dorită interacțiunea directă cu o mașină virtuală Dalvik.

Librării de Interoperabilitate Java

Acestea reprezintă o implementare open-source a unui subset a librăriilor core (nucleu) a Standard Java, fiind adaptate și transformate pentru a putea fi utilizate cu aplicații care rulează într-o mașină virtuală Dalvik

Librării Android

Acestea sunt librării Java care sunt specifice sistemului de operare Android. Cele mai importante, sunt:

android.app – Oferă acces la modelul de aplicație și reprezintă piatra de temelie a tuturor aplicațiilor Android.

android.content – Facilitează accesul la conținut, publicarea și trimiterea mesajelor între aplicații și componentele aplicației.

android.database – Folosit pentru a accesa datele publicate de furnizorii de conținut și include clase de management a bazei de date SQLite.

android.hardware – Prezintă un API care oferă acces la hardware, cum ar fi accelerometrul și senzorul de lumină

android.opengl – O interfață Java pentru OpenGL ES 3D.

android.os – Oferă aplicațiilor acces la servicii standard de sistem, inclusiv mesaje, servicii de sistem și comunicare între procese.

android.media – Oferă clase pentru a permite redarea audio și video.

android.net – Un set de API-uri care permit accesul la stivă de rețea. Include android.net.wifi, care oferă acces la stiva wireless a dispozitivului.

android.provider – Un set de clase care oferă acces la baze de date standard de furnizor de conținut Android, cum ar fi cele menținute de aplicațiile de calendar și de contact.

android.text – Folosit pentru a face și a manipula textul pe un afișaj al dispozitivului.

android.util – Un set de clase utilitare pentru efectuarea unor sarcini, cum ar fi conversia string, manipularea XML și manipularea datei și timpului.

android.view – Temelia interfețelor utilizator

android.widget – O colecție bogată de componente de interfață utilizator pre-construite, cum ar fi butoane, etichete, vizualizări de listă, manageri de layout, butoane radio etc.

android.webkit – Un set de clase destinate să permită integrarea capabilităților de navigare pe web în aplicații.

Acestea reprezintă librăriile bazate pe Java din Android Runtime. În acest nivel de abstractizare însă, mai avem și niște librării bazate pe pe C/C++.

3.1.1.6 Librării C/C++

Librăriile de nucleu prezentate anterior sunt bazate pe Java și asigură API-urile primare pentru developerii care crează aplicații android. Este important de știut că acestea nu execută, în sine, niciun fel de muncă, ele acționând ca un fel de “wrapper-e” (ambalaje) pentru librăriile C++. Librăriile C++ sunt adevăratele librării care efectuează operații.

3.1.1.7 Application Framework

Reprezintă un set de servicii care formează mediul în care aplicațiile Android rulează și sunt administrate. Acest framework implementează conceptul cum că aplicațiile Android sunt construite din componente reutilizabile, interschimbabile și înlocuibile.

Framework-ul conține următoarele servicii cheie:

Activity Manager (Manager de activități) – Controlează toate aspectele stivei de activități și durata de viață a aplicației

Content Providers (Furnizorii de conținut) – Permit aplicațiilor să publice și să partajeze date cu alte aplicații

Resource Manager (Manager de resurse) – Furnizează acces resurselor non-cod precum string-uri, setări de culoare și layout-urile interfețelor utilizator

Notifications Manager (Manager de notificări) – Permite aplicațiilor să afișeze alerte și notificări utilizatorului

View System – Un set de view-uri extensibil utilizat pentru a crea interfețe utilizator

Package Manager (Manager de pachete) – Sistemul prin care aplicațiile sunt capabile să afle informații despre alte aplicații instalate pe dispozitiv

Telephony Manager (Manager de telefonie) – Furnizează informații aplicației despre servicii disponibile pe dispozitiv, precum status sau informațiile abonatului

Location Manager (Manager de locații) – Furnizează acces serviciilor de locație permițând unei aplicații să primească update-uri despre schimbările de locație

3.1.1.8 Applications (Aplicații)

Acest nivel este localizat în topul stivei software a sistemului de operare Android. Nivelul este constituit atât din aplicații furnizate de sistemul de operare (precum aplicațiile Phone sau Contacts), cât și de aplicații instalate de la terți (precum Google Maps).

3.1.2 XML[13]

XML (Extensible Markup Language) este un limbaj markup care definește un set de reguli pentru codificarea documentelor într-un format care este lizibil atât pentru calculatoare cât și pentru oameni. Scopurile XML constau în simplitate, generalitate și uzabilitate.

Sute de formate de documente au fost dezvoltate, incluzând RSS, Atom, SOAP, SVG și XHTML. Formatele bazate pe XML au devenit standard pentru multe unelte office – Microsoft Office (Office Open XML), OpenOffice.org și LibreOffice (OpenDocument).

3.1.2.1 Terminologii de bază:

3.1.2.1.1 Caracter

Un document XML este un string de caractere. Aproape orice caracter Unicode poate apărea într-ul document XML.

3.1.2.1.2 Procesorul si aplicația

Procesorul analizează markup-ul trimite informația structurată unei aplicații. Acest procesor mai este numit, colocvial, parser XML.

3.1.2.1.3 Markup si conținut

Caracterele care formează un document XML sunt în general împărțite între markup și conținut, care pot fi diferențiate între ele aplicând niște reguli sintactice simple. În general, string-urile care sunt markup fie încep cu caracterul < și se termină cu caracterul >, fie încep cu caracterul & și se termina cu ;. String-urile care nu sunt markup reprezintă conținut.

3.1.2.1.4 Tag

Un tag este un markup care începe cu < și se termină cu >. Tag-urile vin în 3 forme:

Tag de start, precum <section>

Tag de sfârșit, precm </section>

Tag element-gol, cum ar fi <line-break />

3.1.2.1.5 Element

Un element este o componentă de document logic care fie începe cu un tag de start și se termină cu un tag de sfârșit, fie constă doar dintr-un tag element-gol. Caracterele dintre tag-ul de start și tag-ul de sfârșit reprezintă conținutul elementului, și pot conține markup, incluzând alte elemente, care sunt numite elemente copil (child elements). Un exemplu este <greeting>Hello, world!</greeting>.

3.1.2.1.6 Attribute (Atribut)

Un atribut este un markup care constă dintr-o pereche nume-valoare care există într-un tag de start sau un tag element-gol. Un exemplu ar fi <img src=”poză.jpg” alt=”Poză” />, unde denumirile atributelor sunt “src” și “alt”, și valorile lor sunt “poză.jpg” și “Poză”.

3.1.2.1.7 Declarare XML

Documentele XML pot începe cu o Declarare XML care descrie informații despre acestea. Un exemplu ar fi <?xml version=”1.0” encoding=”UTF-8”>.

3.1.3 Server (www.000webhost.com)

www.000webhost.com reprezintă o soluție gratis de hosting cu abilități de PHP, MySQL, CPanel. În plus, soluția de server oferă:

Garanție de funcționare de 99% din timp

PHP, MySQL, cereri de tip curl nelimitate, fopen() și altele

Spațiu pe disc si bandwith nelimitat

Construirea propriului site cu ajutorul builder-ului incorporat

Singura neplăcere pe care o aduce această soluție, apare în privința planului gratis. Pentru a motiva clienții deja existenți să treacă la planurile mai costisitoare, 000webhost forțează un downtime pe server, cu un interval variabil de câteva ore. Această “neplăcere” este de înțeles, din punct de vedere al logicii de business a companiei 000webhost.

3.2 Tool-uri folosite

3.2.1 Android Studio[14]

Android studio reprezintă mediul integrat de dezvoltare oficial pentru crearea de aplicații Android, bazat pe IntelliJ IDEA. Peste editorul de cod puternic al IntelliJ și a uneltelor de dezvoltare, Android Studio oferă mai multe caracteristici, precum:

Un sistem de build flexibil bazat pe Gradle

Un emulator rapid și plin de feature-uri

Un mediu omogen de dezvoltare pentru toate dispozitivele Android

Mostre de cod și integrare GitHub

Framework-uri și unelte de testare exhaustive

Suport C++ și NDK

3.2.2 Android SDK[15]

Android SDK (Software Development Kit) este un set de componente utilizate pentru a dezvolta aplicații pentru platforma Android. SDK-ul vine la pachet, în momentul redactării acestei lucrări, cu Android Studio.

Aceste unelte includ:

Librării necesare

Debugger

Emulator

Documentații necesare pentru API-uri

Mostre de cod sursă

Tutoriale pentru sistemul de operare Android

La fiecare versiune nouă de Android, un SDK omolog este de asemenea publicat. Pentru a putea realiza programe cu cele mai noi caracteristici, developerii trebuie să descarce și să instaleze noul SDK.

3.3 Cerințele aplicației

3.3.1 Caracteristici funcționale

Pentru ca aplicația de rețete să satisfacă cerințele unui consumator, aceasta trebuie să ofere o serie de funcționalități. Aceste funcționalități vor fi descrise în tabelul de mai jos.

Fig. 3.4 Tabel cu Caracteristicile funcționale ale aplicației

Un utilizator, poate să navigheze între diferitele categorii de rețete [CF-1].

Dacă nu a găsit o rețetă, o poate căuta în bara de search [CF-3] sau poate selecta originea [CF-6].

Odată selectată o rețetă, utilizatorul poate urma pașii descriși ai rețetei [CF-2] sau poate vizualiza lista de ingrediente [CF-4].

Utilizatorul poate marca ca și favorită o rețetă [CF-5] sau poate partaja rețeta cu prieteni [CF-7].

3.3.2 Caracteristici non-funcționale

Caracteristicile non-funcționale presupun atribute care caracterizează calitatea unui software, spre deosebire de caracteristicile funcționale, care se ocupă cu funcționalitățile și particularitățile unui software.

Pentru ca utilizatorul să își facă o idee despre aspectul unei rețete, aplicația trebuie să descarce pozele aferente rețetei [CNF-1].

Pentru a permite scalabilitatea și extinderea aplicației, aceasta trebuie împărțită pe module ușor de întreținut/lucrat [CNF-2].

Fig. 3.5 Tabel cu Caracteristicile non-funcționale ale aplicației

3.3.3 Cerințe dispozitiv

Pentru a asigura funcționarea corectă a aplicației, dispozitivul pe care va rula va trebui să satisfacă anumite cerințe de dispozitiv (CD). Acestea vor fi prezentate în tabelul de mai jos.

Fig. 3.6 Tabel cu Cerințele de dispozitiv ale aplicației

Dispozitivul folosit va trebui să fie conectat la Internet. Conexiunea la Internet este necesară pentru a descărca imaginile rețetelor. Ea nu este necesară pentru vizualizarea conținutului rețetelor, întrucât așa este construită ea, să permită utilizatorului să acceseze conținutul rețetei (exlcuzând pozele) chiar dacă dispozitivul său nu este conectat la Internet.

3.3.4 Factorul uman

Factorul uman reprezintă un factor decisiv în succesul unei aplicații. De aceea, el joacă un rol extrem de important în procesul de proiectare, acesta fiind imperios necesar de luat în considerare.

În tabelul de mai jos observăm caracteristici non-funcționale ce țin de factorul uman.

Fig. 3.7 Tabel cu caracteristicile non-funcționale ale factorului uman ale aplicației

Pentru ca aplicația dezvoltată să fie folosită de utilizatori, această trebuie să dețină un conținut exhaustiv, bine împărțit în pași ușor de urmat [CNF-FU-1], dar acest conținut trebuie să fie afișat într-o interfață utilizator intuitivă [CNF-FU-2].

4. PROIECTARE DE DETALIU SI IMPLEMENTARE

4.1 Arhitectura conceptuală[16]

Arhitectura conceptuală reprezintă o modalitate high-level de abstractizare, prin care se poate observa conceptul din spatele aplicației. Conceptul va fi descris în continuare, fiind sprijinit de o diagramă.

Conceptul poate fi descris în următorii pași:

La pornirea aplicației, aceasta verifică dacă există conexiune la internet. Dacă nu există, utilizatorul va fi anunțat printr-un toast.

Conținutul rețetelor, va fi afișat, în ciuda lipsei unei conexiuni, întrucât aplicația are o copie a fișierului rețete.xml, prezent în fișierul assets din Android Studio. Aceasta reprezintă o măsură preventivă, pentru a nu exista niciun obstacol în utilizarea aplicației.

Pozele nu vor fi afișate, întrucât trebuie stabilită o conexiune cu server-ul, unde sunt stocate atât imaginile cât și conținutul rețetelor.

După ce se restabilește o conexiune, imaginile vor fi descărcate pe dispozitiv.

Această modalitate de a păstra o copie a conținutului rețetelor, desigur, este o măsură bună în cazul în care dispozitivul nu se poate sau nu este conectat la internet. Este o soluție bună, dar nu este o soluție în cazul în care se dorește scalarea aplicației. De fiecare dată când se adaugă rețete noi, trebuie făcut un update aplicației, fapt ce ar putea incomoda experiența utilizatorilor.

O soluție rapidă ar fi gruparea rețetelor noi, update-urile fiind făcute doar după ce se ajunge la un număr considerabil de rețete noi. Așadar, în privința scalabilității, se vor urmări posibile soluții pentru viitoare iterații ale aplicației.

Mai jos se poate observa diagrama arhitecturii conceptuale, și funcționalitatea ei la un nivel înalt de abstractizare.

Fig. 4.1 Arhitectura conceptuală a aplicației Rețete

4.2 Nivelul de prezentare (presentation)[17]

Un aspect extrem de important în succesul oricărei aplicații îl reprezintă prezentarea. Funcționalitatea reprezintă doar o parte din succesul unei aplicații. Pentru ca o aplicație să fie de succes, aceasta trebuie să îmbine funcționalul cu design-ul plăcut și intuitiv pentru utilizatori. Acesta este un echilibru dificil de menținut.

4.2.1 Principii de design

Conceptul din spatele design-ului aplicației de rețete se bazează pe următoarele principii:

Simplitate – păstrarea unui mediu în care să domine informația și imaginile, cele doua fiind cele mai importante pentru utilizator

Intuitivitate – navigarea în aplicație trebuie să devină a doua natură pentru utilizator. Trebuie realizată în așa fel încât sunt necesare cunoștințe minime pentru navigare. Acest principiu ajută și în mărirea numărului de utilizatori ai aplicației.

Aspect modern – acest principiu reprezintă un criteriu de judecată instant pentru mulți utilizatori. Întocmai de aceea, un aspect modern devine extrem de necesar și un proces continuu de revitalizare a aplicației.

Acestea sunt principiile luate în considerare pentru realizarea design-ului aplicației. În continuare vor fi prezentate câteva exemple de design (layout) al aplicației

4.2.2 Implementare concretă

Pentru implementarea design-ului, s-a folosit librăria, pinterestlikeview[18]. Acesta este un proiect open-source care caută să imite aspectul aplicației deja existente, Pinterest[19] Proiectul pinterestlikeview nu mai este suportat de către creatori la momentul redactării acestei lucrări.

Fig. 4.2 Screenshot al unei activitati simple pinterestlikeview

În figura de mai sus putem observa aspectul cu mai multe coloane asemănător celui pe care Pinterest îl utilizează în aplicație. Acest design poate fi observat și în figura de mai jos.

Fig. 4.3 Interfața Pinterest

View-ul MultiColumListView este cel care este folosit în aplicația principală pentru a implementa acest tip de afișare cu mai multe coloane. Acest view se folosește în activitatea principală.

Exemple de layout-uri:

Fig. 4.3 fragment_about

Fig. 4.4 fragment_navigation_bar

Fig. 4.5 fragment_single_recipe

Fig. 4.6 list_item_single

4.3 Nivelul de business logic[20]

Business logic reprezintă acea parte a unui program care încapsulează regulile de business din lumea reală care determină cum datele pot fi create, stocate și modificate. Reprezintă un contrast față de restul software-ului care se ocupă cu detalii de nivel mai jos, cum ar fi buna funcționare a unei baze de date sau afișarea interfeței utilizator sau alte componente ale programului.

Implementarea este destul de directă. Pentru o descriere exhaustiva a procesului de realizarea a aplicației, implementarea va fi prezentată pe baza structurii ierarhice a proiectului din Android Studio.

Proiectul conține 3 mari secțiuni:

app

pinterestlikeview

Gradle Scripts

Fiecare secțiune va fi prezentată în detaliu.

4.3.1 app

Folder-ul de app conține cele mai importante fișiere, clase, resurse, layout-uri, design-uri ale aplicației. La rândul său, folder-ul se împarte în următoarele secțiuni:

manifests

java

assets

res

Fiecare secțiune va fi prezentată în detaliu.

4.3.1.1 manifests

În folder-ul Manifests se află fișierul AndroidManifest.xml. Acest fișier conține informații legate de aplicație, precum:

minSdkVersion=”9” – versiunea minimă de SDK acceptată de aplicație (9, adică Android 2.3 Gingerbread)

targetSdkVersion=”27” – versiunea țintă pentru aplicație (27, adică Android Oreo)

4.3.1.2 java

Folder-ul java conține pachetul com.rares.retete, unde sunt grupate clasele aplicației în următoarele foldere:

adapters

fragments

models

network

settings

share

utils

Pe lângă aceste foldere care vor fi detaliate mai jos, com.rares.retete mai conține următoarele clase:

ApplicationContext – Această clasă găzduiește diferite setări pentru parsarea datelor XML

MainActivity – Această clasă reprezintă activitatea principală a aplicației.

ObtainApplicationDataActivity – Această clasă este utilizată pentru a obține fișierul XML fie din URL fie din fișierul local de assets.

4.3.1.2.1 adapters

Folder-ul adapters conține două mari clase:

DrawerListMenuAdapter – Această clasă este un adaptor utilizat pentru meniul listă din stânga.

SingleCategoryListAdapter – Această clasă este un adaptor utilizat pentru un fragment SingleCategory.

4.3.1.2.2 fragments

Folder-ul fragments conține următoarele clase, care vor fi detaliate mai jos:

AboutFragment – Acest fragment conține informații în legătură cu partea de Despre a aplicației.

ImageFragment – Acest fragment conține informații despre imaginile rețetelor.

MainScreenFragment – Această clasă conține informații despre fragmentul necesar ecranului principal.

NavigationBarFragment – Fragment utilizat pentru header-ul ecranului (bara de navigare)

SearchFragment – Fragment pentru funcționalitatea de search

ShopFragment – Fragment pentru partea de ingrediente a rețetei

SingleRecipeCategoryFragment – Fragment pentru lista de rețete

SingleRecipeFragment – Fragment pentru ecranul de rețetă

SplashScreenFragment – Fragment pentru ecranul de Splash

4.3.1.2.3 models

Folder-ul models prezintă modelele structurale de stocare ale aplicației (atributele unei rețete, ce trebuie stocat la fiecare etc.).

Acesta conține următoarele clase:

Category – Model pentru Category

DrawerListMenuItem – Model pentru DrawerListMenuItem

Main Settings – Model pentru setările principale

ParserApplicationSettings – Model pentru setările parsate ale aplicației

Recipe – Model pentru rețetă

RecipeIngredient – Model pentru ingredientul unei rețete

RecipeStep – Model pentru pasul rețetei

RecipeSummary – Model pentru sumarul rețetei

ShoppingCart – Model pentru lista de ingrediente a unei rețete

ShoppingItem – Model pentru un item din lista de ingrediente

4.3.1.2.4 network

Folder-ul network conține o singură clasă, NetworkManager. Această clasă este responsabilă pentru toate operațiile de rețea (primirea datelor de pe server, partajarea rețetelor prin Facebook, E-mail etc.).

4.3.1.2.5 settings

Acest folder conține o singură clasă, AppConstants, în care apar constantele aplicației.

4.3.1.2.6 share

Folder-ul conține o singură clasă, MailManager, care este responsabilă pentru funcționalitatea de email a aplicației.

4.3.1.2.7 utils

Folder-ul de utils conține următoarele clase:

CommonUtils – clasă de utilități pentru operații comune (convertit dp la px, setarea font-ului etc.)

RecipesXMLTagConstants – clasă care conține tag-uri XML constante pentru rețete utilizate pentru parsarea XML (de asemenea și adresa server-ului)

SettingsXMLParser – clasă care conține parser-ul XML utilizat pentru a obține informația furnizată în XML

ShakeDetector – clasă care implementează funcționalitatea de shake a ecranului de ingrediente

4.3.1.3 assets

Folder-ul assets conține 3 fișiere:

recipes_settings.xml – Acest fișier conține datele rețetelor în format XML, cu toate tag-urile aferente.

Roboto_Bold.ttf – Acest fișier conține font-ul RobotoBold

Robo_Thin.ttf – Acest fișier conține font-ul RobotoThin

4.3.1.4 res

Fișierul res conține de regulă resurse necesare aplicației, precum imagini sau string-uri. E o practică bună sa fie păstrate în acest fișier, extern, deoarece acestea pot fi întreținute independent.

Acesta conține următoarele folder-e:

anim

drawable

layout

menu

values

4.3.1.4.1 anim

Folder-ul anim conține fișiere de animație pentru aplicație:

left_slide_in.xml

left_slide_out.xml

right_slide_in.xml

left_slide_out.xml

4.3.1.4.2 drawable

Folder-ul drawable conține toate imaginile de design necesare aplicației (iconițe în format png, funcționalități în xml ale iconițelor).

4.3.1.4.3 layout

Acest folder conține șablonul, schemele aplicației. Acestea conțin placeholder-e (entități care țin locul imaginilor ce le vor popula).

4.3.1.4.4 menu

Folder-ul menu contine fișierul main.xml, care reprezintă fișierul ecranului principal al aplicației.

4.3.1.4.5 values

Acest folder conține următoarele fișiere:

colors.xml – fișier în care sunt stocate culor frecvent folosite în aplicație

dimens – folder care conține imaginile aplicației în diferite rezoluții pentru diferite dispozitive

strings.xml – fișier care conține diferite string-uri, precum numele aplicației, numele categoriilor de rețete

styles – fișiere care definesc stilul aplicației

4.3.2 pinterestlikeview

Folder-ul pinterestlikeview conține elemente de layout și de funcționalitate asemănătoare aplicației Pinterest. Acesta a fost important drept o librărie de proiect. Folder-ul se împarte în mai multe secțiuni:

manifests

java

res

4.3.2.1 manifests

În folder-ul manifests se afla AndroidManifest.xml. Acesta conține informații precum:

minSdkVersion=”8” – versiunea minimă de SDK acceptată de aplicație (8, adică Android 2.2 Froyo)

targetSdkVersion=”15” – versiune țintă pentru aplicație (15, adică Android 4.0.3 Ice Cream Sandwich)

4.3.2.2 java

Folder-ul java conține pachetul com.huewu.pla.lib, unde sunt grupate clase în următoarele foldere:

internal

Pe lângă aceste foldere care vor fi detaliate mai jos, com.huewu.pla.lib mai conține următoarele clase:

MultiColumnListView – implementează un ListView cu mai multe coloane pentru aplicația principală

MultiColumnPullToRefreshListView – o interfață care extinde MultiColumnListView, fiind utilizată pentru evenimente de tip “pullToRefresh”.

4.3.2.2.1 internal

Folder-ul internal conține 4 mari clase, care vor fi detaliate mai jos:

PLA_AbsListView – Clasă de bază care poate fi utilizată la implementarea unei liste virtualizate de item-uri. O listă nu are o definiție spațială în această clasă. De exemplu, sub-clasele acestei clase pot afișa conținutul listei într-un grid, carusel, ca o stivă etc.

PLA_AdapterView – Un AdapterView este un view a cărui copii sunt determinați de un Adapter

PLA_HeaderViewListAdapter – Clasă de bază, care nu se utilizează direct în cod. ListAdapter este un Adapter extins, care este un intermediar între ListView și datele din listă. Acest ListAdapter, în clasa de față, va fi utilizat când un ListView are view-uri de tip header.

PLA_ListView – Clasă care implementează un view care afișează item-uri într-o listă verticală, asupra căreia se poate face scroll. Item-urile vin din ListAdapter-ul asociat cu acest view.

4.3.2.3 res

Fișierul res conține de regulă resurse necesare aplicației, precum imagini sau string-uri. E o practică bună sa fie păstrate în acest fișier, extern, deoarece acestea pot fi întreținute independent.

Acesta conține următoarele:

drawable – Folder-ul drawable conține iconițe în format png.

layout – Folder-ul layout conține șabloanele aplicației

values – Conține elemente precum string-urile necesare, stilurile etc.

4.3.3 Gradle Scripts

Gradle[21] este o unealtă de build open-source care construiește script-uri utilizând Groovy[22] sau Kotlin[23]. Gradle preia automat toate fișierele sursă (.java sau .xml), apoi aplică unealtă potrivită (de exemplu convertește clasele java în fișiere dex), și le grupează pe toate în arhicunoscutul format APK[24]. Aceste script-uri sunt generate automat la compilarea aplicației, deși ele pot fi editate și manual.

Folder-ul Gradle Scripts conține următoarele fișiere:

build.gradle (Project: retete) – Fișier de build top-level unde pot fi adăugate opțiuni de configurare comune pentru toate sub-proiectele/modulele

build.gradle (Module: app) – Fișierul conține denumirea aplicației, dependințe (cum ar fi pinterestlikeview, unelte precum gson)

build.gradle (Module: pinterestlikeview) – Fișierul conține informații precum SDK-ul folosit la compilare (21), versiunea țintă de SDK (21) dar și versiunea uneltelor de build (26.0.2)

gradle-wrapper.properties (Gradle Version) – Gradle Wrapper este un script care invocă o versiune declarată de Gradle, descarcând-o din timp dacă e necesar. Acest script facilitează producția de aplicații prin faptul că programatorii nu trebuie sa dedice timp instalării manuale a Gradle-ului.

settings.gradle (Project Settings) – Fișierul conține o evidență a proiectelor incluse in aplicație (app și pinterestlikeview)

local.properties (SDK location) – Conține locația SDK-ului de pe disc.

4.4 Nivelul de data access[25]

Acest nivel se ocupă cu partea de acces a datelor cu care lucrează un program. Datele pot fi sub forma unei baze de date, sau, precum în cazul acestui proiect, un document cu informații serializabile/de-serializabile.

Proiectul folosește un fișier principal care conține toate rețetele. Acest fișier este de forma XML, cu tag-uri care corespund cu modelele din zona de models din structura aplicației.

Aceste tag-uri sunt:

<Category name> – tag care stabilește tipul de categorie a rețetei

<RecipeInfo> – tag care conține id-ul rețetei și toate celelalte tag-uri aferente rețetei, care vor fi prezentate mai jos

<Recipe Title> – tag care stabilește titlul, numele rețetei

<RecipePictureList> – tag care conține lista cu tag-uri care conține link-uri către pozele rețetei

<RecipePicture> – tag care conține un link către poză

<RecipeSummary> – tag care conține lista cu sumarul rețetei

<RecipeSummaryOrigin> – tag care conține țara de origine a rețetei

<RecipeSummaryPreparationTime> – tag care conține timpul mediu de preparare a ingredientelor rețetei

<RecipeSummaryCookingTime> – tag care conține timpul efectiv de gătire a rețetei

<RecipeSummaryPortions> – tag care conține porțiile rețetei

<RecipeSummaryCalories> – tag care conține caloriile rețetei

<RecipeSummaryDescription> – tag care conține descrierea rețetei

<RecipeIngredientsList> – tag care conține lista de ingrediente a rețetei

<RecipeIngredient> – tag care conține descrierea unui singur ingredient

<RecipeStepsList> – tag care conține lista de pași necesari gătirii rețetei

<RecipeStepName> – tag care conține denumirea pasului

<RecipeStepDescription> – tag care conține descrierea pasului

4.5 Interacțiunea dintre nivele

Interacțiunea dintre nivele reprezintă cel mai important aspect în privința bunei funcționări a aplicației. Pentru o experiență utilizator fluentă, nivelele trebuie să comunice fără interferențe. Mai jos putem observa o schemă high-level a comunicării dintre cele 3 nivele fundamentale (Prezentare, Business Logic și Data Access).

Fig 4.7 Structura aplicației în 3 nivele

5. CONCLUZII

5.1 Realizări

În urma acestui proiect s-a reușit realizarea unei aplicații care îmbină funcționalul cu utilul. Soluția implementată se vrea a fi prezentată într-o formă intuitivă, pentru ca utilizatorii să găsească navigarea prin aplicație ca fiind una facilă, ajungând ușor la opțiunea dorită.

O altă realizare în urma acestui proiect reprezintă aprofundarea cunoștințelor tehnologice și a uneltelor folosite. S-au aprofundat cunoștințele limbajului de programare Java, folosit pentru dezvoltarea Android, cunoștințele mediului de dezvoltare integrat Android Studio dar și a manipulării fișierelor de markup extensibil XML.

5.2 Comparație cu alte produse

Soluția propusă nu reprezintă forma finală, ea urmând a fi îmbunătățită în viitor, după modelul aplicațiilor de succes. Două dintre aceste aplicații, prezente în Google Play Store[26] la momentul redactării acestei lucrări, vor fi prezentate mai jos.

Tabelul 5.1 – Comparatie între Rețete, Yummly, Recipe Keeper și My CookBook

5.3 Dezvoltări ulterioare

În urma analizării pieței, s-a ajuns la concluzia că aplicația care reprezintă subiectul acestei lucrări poate incorpora diverse îmbunătățiri sau caracteristici noi. Acestea reprezintă subiectul unor dezvoltări ulterioare. Mai jos vor fi prezentate câteva caracteristici care vor fi subiectul unor posibile dezvoltări în viitor.

Crearea unei rețete – permiterea utilizatorilor să își creeze propriile lor rețete

Sistem cu bază de date – se va urmări implementarea unui sistem cu bază de date pentru o mai bună scalabilitate a aplicației, dar și pentru a putea implementa un sistem de stocare a conturilor utilizatorilor

Implementarea unui sistem de recenzii – acest sistem va crea o ierarhie de rețete pe baza voturilor utilizatorilor

Sistem de adăugare video – acest sistem va putea permite utilizatorilor să atașeze videoclipuri rețetelor, fapt ce poate facilita expresivitatea pașilor de gătire

Urcarea aplicației pe magazinul virtual de aplicații Google Play Store

Acestea reprezintă doar câteva dintre dezvoltările ulterioare care vor fi luate în considerare în viitor. Ele sunt considerate a fi prioritare în detrimentul altora.

6. BIBLIOGRAFIE

"Yummly Recipes & Shopping List – Apps on Google Play." https://play.google.com/store/apps/details?id=com.yummly.android&hl=en_GB.

"My CookBook (Recipe Manager) – Apps on Google Play." https://play.google.com/store/apps/details?id=fr.cookbook&hl=en_GB.

"Recipe Keeper – Meal planner & shopping list – Apps on Google Play." https://play.google.com/store/apps/details?id=com.tudorspan.recipekeeper&hl=en_GB.

"What is open source software? | Opensource.com." https://opensource.com/resources/what-open-source.

"Android." https://www.android.com/.

"Download Android Studio and SDK Tools | Android Studio." https://developer.android.com/studio/index.html.

"Overview (Java Platform SE 7 ) – Oracle Help Center." https://docs.oracle.com/javase/7/docs/api/.

"000Webhost." https://www.000webhost.com/.

"Marshmallow Android continues to grow timidly, only 0.7% of devices …." https://phoneia.com/marshmallow-android-continues-to-grow-timidly-only-0-7-of-devices-were-updated/.

"Figure 3: Architecture diagram of Android system – ResearchGate." https://www.researchgate.net/figure/Architecture-diagram-of-Android-system_fig1_220299936.

"An Overview of the Android Architecture – Techotopia." https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture.

"Linux kernel – Wikipedia." https://en.wikipedia.org/wiki/Linux_kernel.

"XML – Wikipedia." https://en.wikipedia.org/wiki/XML.

"Meet Android Studio | Android Studio …." https://developer.android.com/studio/intro/index.html.

"What is Android SDK? – Definition from Techopedia." https://www.techopedia.com/definition/4220/android-sdk.

"Conceptual Architecture – Bredemeyer Consulting." http://www.bredemeyer.com/ArchitectingProcess/ConceptualArchitecture.htm.

"Multitier architecture – Wikipedia." https://en.wikipedia.org/wiki/Multitier_architecture.

"GitHub – GDG-Korea/PinterestLikeAdapterView: [Deprecated] An …." https://github.com/GDG-Korea/PinterestLikeAdapterView.

"Pinterest – Apps on Google Play." https://play.google.com/store/apps/details?id=com.pinterest&hl=en_US.

"Business Logic Definition – C2 wiki." http://wiki.c2.com/?BusinessLogicDefinition.

"Docs – Gradle." https://gradle.org/docs/.

"Groovy." http://groovy-lang.org/.

"Kotlin." https://kotlinlang.org/.

"Android application package – Wikipedia." https://en.wikipedia.org/wiki/Android_application_package.

"Data access layer – Wikipedia." https://en.wikipedia.org/wiki/Data_access_layer.

"Google Play." https://play.google.com/store?hl=en_GB.

7. ANEXE

7.1 Manual de instalare

Pentru instalarea aplicației, se vor efectua următorii pași:

Conectarea dispozitivului (telefon mobil, tabletă etc.) la calculator (cablu, ftp media server etc.)

Copierea aplicației (cu extensia .apk) pe dispozitivul dorit.

Efectuarea unui click pe iconița aplicației.

Acceptarea instalării aplicațiilor provenite din surse necunoscute

Lansarea aplicației.

7.2 Manual de utilizare

Fig. 7.1 Ecranul Principal

Meniu Principal

Categorie de Rețete

Căutare

Filtrare după origine

7.2.1 Meniu Principal

Accesarea unui element din listă va duce la ecranul respectiv, care va fi populat cu elementele aferente.

Fig. 7.2 Meniul aplicației

7.2.2 Categorie de Rețete

Fiecare categorie va afișa rețetele aferente, într-o listă, de unde puteți naviga la detaliile acelei rețete.

Fig. 7.3 Ecranul categoriei “Antreuri” și ecranul unei rețete

Lista de ingrediente

Pe Scurt

Ingrediente

Rețeta

7.2.2.1 Lista de ingrediente

Fig. 7.4 Ecranul listei cu ingrediente a unei rețete

Refresh – resetează ecranul, repunând ingredientele în starea lor inițială

Tăiere – efectuând click pe un ingredient, acesta va fi “tăiat” de pe listă. Dacă utilizatorul “scutură” dispozitivul, punând în funcțiune accelerometrul, ingredientele “tăiate” vor dispărea de pe ecran

7.2.3 Căutare

Fig. 7.5 Funcționalitatea bării de căutare

Efectuând click pe “Go” sau “Enter” pe tastatură, utilizatorului îi va fi prezentată o listă cu rețete bazate pe cuvintele introduse.

7.2.4 Filtrare dupa origine

Fig. 7.6 Filtrare după origine

Utilizatorul poate selecta o țară de origine, după care i se va afișa o listă cu rețetele aferente acelei regiuni.

Similar Posts