ABONAMENTE VIDEO REDACȚIA
RO
EN
×
▼ 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:

Sponsori

  • comply advantage
  • ntt data
  • 3PillarGlobal
  • Betfair
  • Telenav
  • Accenture
  • Siemens
  • Bosch
  • FlowTraders
  • MHP
  • Connatix
  • UIPatj
  • MetroSystems
  • Globant
  • Colors in projects