I Love I Hate NY is an iOS application dedicated to each individual that has visited, plans to visit or they simply live in New York City. The iOS app represents the best and fastest mode of getting a quick feedback over New York City in a matter of seconds taking into account the score that is made between the positive and negative feedback comments added by several users of the application. Each user will always have the possibility to have a clear view over the "pulse" of the city by closely watching the score.
Figure 1: App Icon
The motivation behind the idea comes from observing the users' desires to express their feedback and their personal opinion regarding a certain domain, in our case New York City and, in the same time, taking into consideration the user's implication in a competitive game by scoring the positive and negative feedback messages. The score consists of comparing the numbers of the two types of messages and the user can see the result in "real time". Each user will be able to see his feedback in the "All" messages category, or in any of the applied filters. Also, the feedback message will be right away available as a possible result in the search section, if applicable for the certain search criteria.
Each user has the possibility to add a feedback message depending on the experience that he had regarding the city of New York: positive or negative; also, if the user is just a potential visitor of the city, he has the opportunity to see the "pulse" of New York City by comparing the positive and negative feedback messages.
The screen of adding new feedback comments, available to all app's users, contains both a "love smiley face" or a "hate smiley face", depending on the type of message the user wants to add. This will be illustrated in the images below:
Users have the option of sharing their experience expressed in feedback messages by pressing the "Share" button. By pressing the "Post" button, their message is written on the server side and all other users will be able to see it and read it as well.
For a better outline of the competition game between positive and negative feedback, several animations will take place between the two types of smiley faces. It is a simple and funny game that the user is able to control by giving his own contribution by sharing his experience. The smiley faces will change their position regarding the new balance resulted by registering and taking into account new added messages, either positive and negative.
Users can filter between the existing feedback messages, by a certain period of time, three options being available for filtering the messages after the time they were added:
All" - this option will display all available feedback messages, positive or negative, no matter the time they were added
"Last 24h" - only feedback messages that were introduced in the last 24 hours will be displayed with this option. This is a suitable feature to be used by travelers that prefer the city-breaks travelling mode, this way they would have a quick and current state of the city
The main screen of the application displays all the messages according to the history rules selected by a certain user and the animations between the two smiley faces depending on the available balance between the positive and negative feedback messages.
Figure 2: Main Screen
It can be observed in the image above that the positive smiley face has pushed the negative one towards right because the number of positive messages is higher than the number of negative ones, the score being displayed directly to the user.
For adding a positive comment, the user will press the "Love" button and it will be introduced in a new screen for adding the certain feedback comment, being displayed the "love smiley face", in the same manner, if a certain user wants to display a negative feedback, it will press the "Hate" button, being displayed in the same screen, but with the "hate smiley face".
Users can access any of the displayed feedback comments by clicking on them and they will be brought to a secondary detailed screen where the title message and its text body will be displayed. From this screen, the user can post his/her own message by clicking the "Post" button.
Each time a new comment is added, several animations between the two smiley faces will be displayed depending of the nature of the introduced comment. If the feedback is a positive one, the "hate smiley face" will get on fire and it will be pushed further to the right by the "love smiley face", otherwise the animation will take place in the opposite direction by the "love smiley face" bursting into fire if a negative feedback is added.
Besides the presented features, each user has the option of searching by key words, using the search feature. In case he has no clue about what key word he should search, a certain list of trending searches will display other searches performed by other users.
The I Love I Hate NY iOS App is slightly different than other apps implementing the classic design pattern of "client-server", the used mechanism implies migrating the processing of data to the client side and the server will be used only for storing data, this way the result is a successful combination between the "peer-to-peer" based on a network of intelligent clients capable of processing and editing data followed by saving the certain data on server by conforming to the "client-server" design pattern.
For the implementation of this mechanism, the iOS Parse framework was used for storing and writing feedback messages data to servers being available for developers by the Parse platform.
This approach of project development and the idea of migrating of a certain part of the business logic from server to client, may be very useful to startup companies because it offers a better solution in terms of managing the financial resources. Parse servers can be configured and used with ease by mobile developers decreasing the need of having more backend developers for additional servers setup and data management. This offers a more positive perspective over the project velocity and the financial resources that will be used for the project implementation.
In order to facilitate the communication between the objects of the application and their equivalent in the objects saved on Parse servers, the ParseManager class was implemented to maintain the communication with Parse servers. Because of the limited types accepted by the Parse platforms, the saved objects' properties must be reduced to these kinds of types in order to be saved and then converted back when they are read from the server, because of this, the architecture of the application must be developed along with the implementation of the project.
All Feedback Objects and Trending Seach Objects have their equivalent in the project data base and both Parse servers under the format of PFObjects (Parse Framework Objects) as in the defined model of the application, this being refreshed at several seconds, so that users will always have the latest content. Using a timer, the data is always refreshed maintaining the displayed data valid, this way the user will always have the latest data displayed.
The implemented communication model facilitates the scalability of the project, new types of objects being introduced easily, but also a better performance in terms of response time.
Other features of Parse platform are:
Local Data Storage (offline mode)
Push Notifications Services
For a better performance and an improvement in terms of usability, all animations are managed by an AnimationManager. It listens to all events sent by user and manages the animations played on the main screen.
All implemented animations were used using autolayout feature available in iOS SDK, this way the animations are less time consuming and they have a better accuracy than the approach of implementing the same animations by modifying the frame property of each view.
The fire type animation, applied to each of the two smiley faces was implemented using the CAEmitterLayer class, this making the addition of a particle emitter to be added to a subview all because CAEmitterLayer is a subclass of CALayer and a sublayer with the role of a particle emitter is added to an UIView object very easily.
Implementing the particle emitter using the CAEmitterLayer has avoided adding the CoCos2D library in the project, which would have affected the performance in a negative way. Because of this, all iOS graphic features were used at maximum and a certain level of high performance in terms of execution time and used memory were reached.
The implemented class described in the previous section, ParseManager realizes the entire communication with Parse servers, feedback objects download, Trending Search objects type reset from server and also sends notifications among the app when all objects were loaded from server, this way the integrity and validity of received data is assured.
The share feature was implemented using the Framework available in iOS SDK, avoiding the use of Facebook Framework, which as explained above would impact the memory of the project in a negative manner, this way the share feature reaches a maximum performance in response and execution time.
"I Love I Hate" represents a concept that can be applied to any domain of interest for a certain mass of users. The iOS app "I Love I Hate NY" represents a proof of concept of this idea. We have taken into consideration the implementation of the same concept over other cities that offer travel potential and also other domains of interest.
Other features are taken into consideration:
• Reply to a certain feedback
• Push notifications
• Share through more social platforms and by mail
• Location of a certain feedback
• Offline mode
• Login Feature
by George Rus
by Razvan Gai
by Alin Luncan
by Razvan Opris