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.
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 [303908] (ID: 303908)
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.
