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

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:

S.I.dr.ing Otto Poszet

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.

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 utilizatorului sa conecteze placa cu procesorul la diferite module ce pot fi schimbate numite shield-uri. Aceste shield-uri comunică cu Arduino direct prin pinii digitali sau analogici, iar altele sunt adresate individual prin magistrala serială permițând utilizarea mai multor module in paralel.

Urmatoarele figuri reprezintă exemple ale unor plăci Arduino oficiale:

Fig. 3.1 Arduino Diecimila

Caracteristici ale unei plăci Arduino Diecimila:

Microcontroler: Atmega168

Tensiune de operare: 5 V

Tensiune de intrare (recomandată): 7 – 12 V

Tensiunea de intrare (limite): 6 – 20 V

Inele digitale I/O: 14

Pini de intrare analogice: 6

DC curent pe pin I / O: 40 mA

Curent continuu pentru pinul de 3.3V: 50 mA

Memorie flash: 16 KB

S-RAM: 1 KB

EEROM: 512 octeți

Fig. 3.2 LilyPad Arduino

Caracterstici ale unei plăci LilyPad Arduino:

Microcontroler: ATmega168 / Atmega328V

Tensiune de operare: 2,7 – 5,5 V

Tensiune de intrare: 2,7 – 5,5 V

Inele digitale I/O: 14

Canalele PWM: 6

Canale de intrare analogice: 6

DC curent pe pin I / O: 40 mA

Memorie flash: 16 KB

SRAM: 1 KB

EEPROM: 512 octeți

Fig. 3.3 Arduino Mega

Caracteristici ale unei plăci Arduino Mega:

Microcontroler: ATmega1280

Tensiune de operare: 5 V

Tensiune de intrare: 7 – 12 V

Inele digitale I/O: 54

Pini de intrare analogice: 16

DC curent pe pin I / O: 40 mA

Curent continuu pentru pinul de 3.3V: 50 mA

Memorie flash: 128 KB din care 4 KB utilizate de bootloader

SRAM: 8 KB

EEPROM: 4KB

3.1.1.1 Shield-uri

Arduino și placile Arduino, compatibile, folosesc plăci de expansiune cu circuite imprimate numite shield-uri și se conectează la pinii disponibili pe Arduino. Shield-urileau capacități de a controla motoare, GPS, Ethernet, LCD sau de prototip.

Exemple de shield-uri Arduino vor fi reprezentate in urmatoarele figuri:

Fig. 3.4 Shield-uri suprapuse (pot conține si un breadboard)

Fig. 3.5 Shield cu terminale cu șuruburi dispuse sub formă de aripi

Fig. 3.6 Shield Adafruit pentru înregistrarea datelor cu slot pentru card SD și CIP ceas RTC

3.1.1.2 Software – Arduino IDE

Programele Arduino pot fi scrise în orice limbaj de programare cu ajutorul unui compilator capabil să producă un cod mașină binary. Atmel dispune de un mediu de dezvoltare pentru microcontrolerele sale, AVR Studio.

Proiectul Arduino oferă un mediu integrat de dezvoltare (IDE), care este o aplicație cross-platform, scrisă în Java. Originile în mediul de dezvoltare pentru limbajul de programare Processing și în proiectul Wiring. Include un editor de cod cu funcții ca evidențierea sintaxelor, potrivirea acoladelor și spațierea automată și oferă mecanisme simple pentru a compila și a încărca programele în placa Arduino. Programul scris în IDE pentru Arduino se numește sketch.

Arduino IDE suportă limbajele de programare precum C și C++ folosind reguli speciale de organizare a codului. Acesta oferă o librarie software numită Wiring care oferă multe proceduri commune de intrare și ieșire. Un sketch scris in C/C++ este compus din două funcții care sunt compilate și legate cu un ciot de program main(), într-un program executabil cu o execuție ciclică:

Setup(): funcția este rulata o singură dată la începutul programului, la inițializarea setărilor

Loop(): funcția apelată în mod repetat până la oprirea aimentării cu energie a plăcii

După compilare, mediul de dezvoltare Arduino trimite comandă către programul AVRDUDE pentru a converti codul executabil într-un fișier text codat hexazecimal, care poate fi încărcat în placa Arduino.

3.1.2 Breadboard

Un breadboard este o bază de construcție pentru prototipuri de electronică. În anii 1970 breadboard solderless a devenit disponibil. Deoarece pânza de lipit fără sudură nu necesită lipire, este reutilizabil. Breadboard-ul constă dintr-un bloc perforat de plastic, cunumeroase cleme de bronz si fosfor acoperite cu tablă sau cleme din aliaj de argint. Clipurile sunt adesea numite puncte de legătură sau punctede contact. Spațierea dintre cleme este de 2,54 mm.

3.1.2.1 Linii terminale si magistrale

Linile terminale sunt părțile principale unde majoritatea componentelor electrice sunt așezate. Cele 5 rânduri de pe partea stângă a plăcii sunt marcate cu A, B, C, D și E iar cele din partea dreaptă sunt marcate cu F, G, H, I și J. Coloanele se pot identifica după numere, de la 1 până la dimensiunea maxima a breadboard-ului. Mărimea variază de la 17, 30 sau 64 de coloane.

Magistralele genereaza curent pentru componentele electronice. O magistrală este formată din 2 rânduri, una pentru împământare si una pentru tensiunea de alimentare. Rândul marcat cu roșu este cea pentru tensiunea de alimentare iar cea pentru împământare este de culloare albastra sau neagră.

Fig. 3.7 Breadboard cu 420 de gauri de intrare

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:

Pentru a porni proiectul este necesară implementarea programului din Arduino IDE in placa Arduino UNO.

Alimentarea prin bateria atașată se va face odată ce firul este conectat la placă.

Motorul având tensiune electrică va începe să se invartă iar LED-urile deja aprinse vor incepe să formeze o imagine mai clară cu cât viteza rotației este mai mare.

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