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.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Dispozitiv de afisare bazat pe fenomenul de inertie a retinei [307404] (ID: 307404)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
