ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 38
Abonament PDF

I Love I Hate NY

Tudor Stânean
IOS Developer @3 Pillar Global Romania



PROGRAMARE


I Love I Hate NY este o aplicație iOS destinată tuturor persoanelor care au vizitat, vor vizita sau locuiesc în orașul New York. Aplicația reprezintă cel mai bun mod de a reda un feedback clar asupra orașului, ținându-se un anumit scor care acționează asemeni unei balanțe dintre comentariile pozitive și cele negative. Un utilizator va putea oricând să-și facă o impresie asupra "pulsului" orașului privind scorul.

Figure 1: App Icon

Motivația ideii a venit din observarea dorinței utilizatorilor de a-și exprima propria părere referitoare la un anumit domeniu, în cazul nostru orașul New York, și în același timp implicarea utilizatorilor într-un mediu competitiv, în care comentariile de feedback pozitive și negative sunt considerate puncte și anumite animații fiind implementate pe baza raportului dintre cele două tipuri de comentarii. Utilizatorul va observa în mod direct și "real time" aportul pe care comentariul lui îl va avea, acesta fiind contorizat și clasificat în funcție de destinație. Orice comentariu adăugat de un utilizator va fi disponibil în secțiunile de căutare, la fel ca și în funcționalitățile de filtrare ale comentariilor pe baza  datei adăugării lui.

Principalelor funcționalități

Fiecare utilizator al aplicației va avea posibilitatea să adauge un comentariu de feedback pozitiv sau negativ în funcție de experiența pe care acesta a avut-o în New York, de asemenea, în cazul în care acesta este doar un potențial vizitator al orașului, va putea urmări în permanență "pulsul" aplicației,  acesta fiind determinat de raportul dintre comentariile de feedback pozitive și cele negative.

Screen-ul de adăugare al unui comentariu conține un "love smiley face" în cazul în care feedback-ul este unul pozitiv sau un "hate smiley face" în cazul adăugării unui feedback negativ:

Utilizatorii vor avea opțiunea de a distribui (a da share) comentariul postat. Prin apăsarea butonului "Post", comentariul respectiv este trimis la server și salvat, urmând să fie afișat alături de toate celelalte comentarii.

Pentru a scoate în evidență funcționalitatea balanței comentariilor adăugate, anumite animații care au loc între cele două smiley face-uri, au fost introduse. Acestea își schimbă poziția în funcție de raportul dintre comentariile de feedback pozitive și cele negative.

Utilizatorii pot filtra toate comentariile introduse în funcție de perioadă, astfel ei vor avea la dispoziție trei opțiuni pentru a vizualiza comentariile în funcție de data la care au fost adăugate:

Screen-ul principal al aplicației va include afișarea tuturor mesajelor în conformitate cu regulile de history selectate de utilizator și animațiile aferente balanței de comentarii pozitive și negative.

Figure 2: Main Screen

După cum se poate observa în imaginea prezentată mai sus, "love smiley face"-ul a împins balanța spre dreapta datorită faptului că feedback-ul pozitiv rezultat are o pondere mai mare decât cel negativ, "scorul" fiind evidențiat direct utilizatorului.

Pentru adăugarea unui comentariu pozitiv, un utilizator va apasă butonul "Love", acesta fiind introdus în screen-ul de adăugare al unui nou comentariu având imaginea "love smiley face", iar pentru adăugarea unui feedback negativ, se va apăsa butonul "Hate", de data aceasta utilizatorul fiind introdus în screen-ul de adăugare al unui nou comentariu având imaginea de "hate smiley face".

Utilizatorii pot accesa orice comentariu adăugat din lista și vor fi introduși în screen-ul de detalii al fiecărui comentariu, unde se vor prezenta titlul comentariului, textul și imaginea aferentă comentariului respectiv, dacă este pozitiv sau negativ. Din același screen ei vor avea posibilitatea să adauge un nou comentariu apăsând butonul "Post a Feedback". 

De fiecare dată când se va introduce un nou feedback, se va prezenta utilizatorului a nouă animație în funcție de comentariul introdus, dacă acesta este un feedback pozitiv sau negativ. În cazul în care feedback-ul introdus este unul pozitiv, "hate smiley face"-ul va lua foc și va fi împins înspre dreapta de către "love smiley face", în cazul contrar animația se va desfășura in direcție inversă.

Alături de funcționalitățile prezentate, fiecare utilizator va avea opțiunea de a căuta după cuvintele cheie folosind funcționalitatea de căutare disponibilă în aplicație. În cazul în care nu este decis asupra anumitor cuvinte "cheie" de căutare, el are la dispoziție funcționalitatea de Trending Searches prin care cuvintele cheie căutate de alți utilizatori vor fi afișate.

Scurte detalii tehnice

Aplicația I Love I Hate NY se desprinde ușor de la design pattern-ul clasic "client-server", aceasta migrând majoritatea procesării datelor pe partea de client, iar server-ul va fi folosit strict doar pentru stocarea datelor, astfel îmbinând cu succes un design arhitectural de tip "peer-to-peer", format din clienți inteligenți capabil să gestioneze datele globale și să editeze resursele venite de pe server, urmând apoi salvarea lor, după tiparul clasic "client-server". 

Figure 3: Main Screen with Flame Animation

Pentru implementarea acestui mecanism s-a folosit framework-ul Parse, versiunea dedicate platformei iOS, care facilitează stocarea și scrierea de date pe serverele puse la dispoziția dezvoltatorilor de platforma Parse.

Acest mod de abordare a dezvoltării aplicațiilor mobile și a migrării unei părți din business logic de pe server pe partea de client, poate fi foarte utilă startup-urilor, deoarece oferă o posibilă soluție la o mai bună gestionare a resurselor financiare. Serverele Parse pot fi configurate și utilizate cu foarte mare ușurință de către dezvoltatorii aplicațiilor mobile fără a fi nevoie de cunoștințe de dezvoltare a aplicațiilor back-end, lucru care oferă o perspectiva  pozitivă asupra velocității proiectului și a resurselor financiare care vor fi utilizate pentru implementarea proiectului respectiv.

Overview Diagram

Figure 4: Overview Diagram

Parse Framework 

În vederea îmbunătățirii comunicării dintre aplicație și serverele Parse s-a implementat clasa ParseManager, cu acest rol. Datorită faptului că modelul Parse acceptă un număr limitat de tipuri de date, orice obiect mai complex va trebui redus la astfel de tipuri de date pentru a fi salvat pe server, motiv pentru care arhitectura aplicației trebuie dezvoltată în considerație cu modelul bazei de date care va fi salvat folosind serverele Parse. 

Toate obiectele de genul Feedback și Trending Search au echivalentul atât in bazele de date ale serverelor Parse sub forma de PFObjects (Parse Framework Objects) cât și în Modelul definit al aplicației, acesta fiind resetat cu fiecare reactualizare a datelor, astfel încât în orice moment, utilizatorul va avea în față ultima versiune a bazei de date cu toate comentariile de feedback adăugate in funcție filtrul specificat.

Modelul de comunicare implementat cât și modelul de date, facilitează scalabilitatea proiectului. Noi tipuri de obiecte sunt definite foarte ușor și au ca efect o mai bună performanță a timpului de răspuns.

Alte funcționalități utile ale platformei Parse sunt:

Pentru o mai bună performanță și o îmbunătățire a experienței utilizatorului, toate animațiile aplicației sunt gestionate de un AnimationManager. Acesta ascultă toate evenimentele utilizatorului și gestionează animațiile care vor fi efectuate pe Main Screen-ul aplicației.

Animațiile implementate au fost realizate folosind funcționalitățile de autolayout disponibile în iOS sdk. În acest fel s-au realizat animații la un nivel de complexitate mult mai înalt și performant, algoritmii fiind considerabil simplificați față de soluția implementării direct pe proprietatea de frame a fiecărui  .

Animația de tip fire aplicată celor două "smiley face"-uri prezente în aplicație, a fost realizată folosind clasa CAEmitterLayer, aceasta făcând posibilă adăugarea unui sistem emițător de particule peste orice obiect de tip UIView. Acest lucru poate fi realizat datorită faptului că CAEmitterLayer este o subclasă a CALayer, deci poate fi adăugat cu ușurință ca sub-layer la orice obiect de tip UIView.

Implementarea emițătorului de particule folosind clasa CAEmitterLayer a evitat introducerea librăriei Cocos2D în proiect, fapt care ar fi afectat performanța. Datorită utilizării primei soluții, s-au valorificat în  mod optim facilitățile grafice suportate de platforma iOS și s-a atins performanța maximă în ceea ce privește timpul de execuție, complexitatea și memoria folosite.

Prin intermediul clasei menționate în secțiunea precedentă, ParseManager, se realizează întreaga comunicare cu serverele Parse, decărcarea obiectelor de feedback, actualizarea obiectelor de Trending Search cât și transmiterea notificărilor aferente aplicației atunci când toate obiectele au fost încărcate în aplicație, astfel se asigură integritatea și validitatea datelor primite.

Funcționalitatea de share din cadrul aplicației a fost realizată folosindu-se framework-ul Social disponibil în platforma iOS, din nou evitându-se folosirea altor framework-uri externe care ar fi afectat memoria folosită de către aplicație la instalare și performanța vitezei. 

Dezvoltări ulterioare

"I Love I Hate" nu reprezintă altceva decât o idee al cărei "proof of concept" s-a concretizat prin aplicația iOS "I Love I Hate NY". Pe viitor este luată în considerare și implementarea altor versiuni ale aplicației destinate altor orașe care pot fi considerate atracții turistice sau altor domenii de interes.

Pentru versiunile ulterioare sunt luate in considerare următoarele funcționalități:

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects