<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>2518-4431</journal-id>
<journal-title><![CDATA[Investigación & Desarrollo]]></journal-title>
<abbrev-journal-title><![CDATA[Inv. y Des.]]></abbrev-journal-title>
<issn>2518-4431</issn>
<publisher>
<publisher-name><![CDATA[UNIVERSIDAD PRIVADA BOLIVIANA]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S2518-44312015000100004</article-id>
<title-group>
<article-title xml:lang="en"><![CDATA[HEYCITY: A SOCIAL-ORIENTED APPLICATION AND PLATFORM ON THE CLOUD]]></article-title>
<article-title xml:lang="es"><![CDATA[HEYCITY: UNA APLICACIÓN Y PLATAFORMA DE CARÁCTER SOCIAL EN LA NUBE]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rasguido]]></surname>
<given-names><![CDATA[Maximiliano]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Villazón]]></surname>
<given-names><![CDATA[Alex]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Privada Boliviana Centro de Investigaciones de Nuevas Tecnologías Informáticas (CINTI) ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
<country>Bolivia</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>00</month>
<year>2015</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>00</month>
<year>2015</year>
</pub-date>
<volume>1</volume>
<numero>15</numero>
<fpage>19</fpage>
<lpage>31</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.bo/scielo.php?script=sci_arttext&amp;pid=S2518-44312015000100004&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.bo/scielo.php?script=sci_abstract&amp;pid=S2518-44312015000100004&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.bo/scielo.php?script=sci_pdf&amp;pid=S2518-44312015000100004&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="en"><p><![CDATA[Every city has problems related to infrastructure, services or security. Unfortunately, most cities lack of an on-line service or platform where citizens can complain about those problems. Typically there is only an email address or phone number where they can call, but only during working hours, which often results in frustration and long processing time until local authorities can solve those problems. In this article, we present HeyCity, a social-oriented application and platform that addresses this problem, by making the citizen an active part of the solution, and therefore increases responsibility. HeyCity provides a technological answer where users can report problems using their smartphone and collaborate with other citizens and local authorities to solve the problems. To be able to handle a large number of users distributed in different cities, HeyCity was deployed on the Cloud. We describe the design, development, deployment and execution of HeyCity on state-of-the-art Cloud services and tools, and we describe the technical choices that we made.]]></p></abstract>
<abstract abstract-type="short" xml:lang="es"><p><![CDATA[Toda ciudad tiene problemas relacionados con su infraestructura, servicios o seguridad. Desafortunadamente, la mayoría de las ciudades carecen de un servicio o plataforma en línea donde los ciudadanos puedan reclamar acerca de esos problemas. Normalmente sólo hay una dirección de correo electrónico o número de teléfono donde se puede llamar, pero únicamente durante horas de oficina, lo que a menudo se traduce en frustración y en tiempos espera demasiados largos hasta que las autoridades locales puedan resolver esos problemas. En este artículo se presenta HeyCity, una aplicación y plataforma de carácter social que aborda este problema haciendo del ciudadano una parte activa de la solución, aumentando así la responsabilidad social. HeyCity ofrece una respuesta tecnológica para que los usuarios puedan informar sobre problemas utilizando sus teléfonos inteligentes y así colaborar con otros ciudadanos y las autoridades locales para resolver diferentes problemas. Para poder manejar una gran cantidad de usuarios distribuidos en varias ciudades, HeyCity fue desplegada en la Nube. Describimos el diseño, desarrollo, implementación y ejecución de HeyCity utilizando servicios y herramientas con tecnología de última generación de la Nube, justificando las opciones técnicas seleccionadas.]]></p></abstract>
<kwd-group>
<kwd lng="en"><![CDATA[Social-Oriented Application and Platform]]></kwd>
<kwd lng="en"><![CDATA[Cloud Computing]]></kwd>
<kwd lng="en"><![CDATA[PaaS]]></kwd>
<kwd lng="en"><![CDATA[IaaS]]></kwd>
<kwd lng="en"><![CDATA[DBaaS]]></kwd>
<kwd lng="es"><![CDATA[Aplicación y Plataforma de Carácter Social]]></kwd>
<kwd lng="es"><![CDATA[Computación en la Nube]]></kwd>
<kwd lng="es"><![CDATA[PaaS]]></kwd>
<kwd lng="es"><![CDATA[IaaS]]></kwd>
<kwd lng="es"><![CDATA[DBaaS]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align=right><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ART&Iacute;CULOS - INGENIER&Iacute;AS</b></font></p>     <p align=right>&nbsp;</p>     <p align=center><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><b>HEYCITY: A   SOCIAL-ORIENTED APPLICATION AND PLATFORM ON THE CLOUD</b></font></p>     <p align=center>&nbsp;</p>     <p align=center><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>HEYCITY: UNA APLICACIÓN Y PLATAFORMA DE CARÁCTER SOCIAL EN LA NUBE</b></font></p>     <p align=center>&nbsp;</p>     <p align=center>&nbsp;</p>     <p align=center><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Maximiliano Rasguido and Alex Villazón</b></font></p>     <p align=center><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><i>Centro de Investigaciones de Nuevas Tecnologías Informáticas </i>(CINTI)<i>    <br>  Universidad Privada Boliviana, Bolivia</i></font>    ]]></body>
<body><![CDATA[<br> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="mailto:avillazon@upb.edu">avillazon@upb.edu</a></font></p>      <p align=center><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a name="_GoBack">(Recibido el 15 de mayo de 2015, aceptado para publicación el 07 de junio 2015)</a></font></p>     <p align=center>&nbsp;</p>     <p align=center>&nbsp;</p> <hr noshade>     <p align=left><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ABSTRACT</b></font></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Every city has problems related to infrastructure, services or security. Unfortunately, most cities lack of an on-line service or platform where citizens can complain about those problems. Typically there is only an email address or phone number where they can call, but only during working hours, which often results in frustration and long processing time until local authorities can solve those problems. In this article, we present HeyCity, a social-oriented application and platform that addresses this problem, by making the citizen an active part of the solution, and therefore increases responsibility. HeyCity provides a technological answer where users can report problems using their smartphone and collaborate with other citizens and local authorities to solve the problems. To be able to handle a large number of users distributed in different cities, HeyCity was deployed on the Cloud. We describe the design, development, deployment and execution of HeyCity on state-of-the-art Cloud services and tools, and we describe the technical choices that we made. </font></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Keywords: </b><a name="_Toc274497886">Social-Oriented Application and Platform, Cloud Computing, PaaS, IaaS, DBaaS.</a></font></p> <hr noshade>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN</b></font></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Toda ciudad tiene problemas relacionados con su infraestructura, servicios o seguridad. Desafortunadamente, la mayoría de las ciudades carecen de un servicio o plataforma en línea donde los ciudadanos puedan reclamar acerca de esos problemas. Normalmente sólo hay una dirección de correo electrónico o número de teléfono donde se puede llamar, pero únicamente durante horas de oficina, lo que a menudo se traduce en frustración y en tiempos espera demasiados largos hasta que las autoridades locales puedan resolver esos problemas. En este artículo se presenta HeyCity, una aplicación y plataforma de carácter social que aborda este problema haciendo del ciudadano una parte activa de la solución, aumentando así la responsabilidad social. HeyCity ofrece una respuesta tecnológica para que los usuarios puedan informar sobre problemas utilizando sus teléfonos inteligentes y así colaborar con otros ciudadanos y las autoridades locales para resolver diferentes problemas. Para poder manejar una gran cantidad de usuarios distribuidos en varias ciudades, HeyCity fue desplegada en la Nube. Describimos el diseño, desarrollo, implementación y ejecución de HeyCity utilizando servicios y herramientas con tecnología de última generación de la Nube, justificando las opciones técnicas seleccionadas.</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Palabras Clave:</b> Aplicación y Plataforma de Carácter Social, Computación en la Nube, PaaS, IaaS, DBaaS.</font></p>  <hr noshade>     ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>&nbsp;</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>&nbsp;</b></font></p>      <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>1.&nbsp;&nbsp;&nbsp;&nbsp; INTRODUCTION</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The development of applications on the Cloud has been gaining attention in the last years, because of the advantages commonly acknowledged such as high availability, low cost and global scope[<a href="#MellCloud2011">1</a>] [<a href="#Rimal:CloudTaxonomy:2009">2</a>]. Cloud computing provides a shared pool of configurable resources (e.g. processing, network, software, data and storage) on demand, as a scalable and elastic service, through a networked infrastructure, on a measured (pay-per-use or subscription) basis, which needs minimal management effort and often uses virtualized resources [<a href="#MellCloud2011">1</a>]. There are several competing Cloud Platforms and Services (Amazon Web Services<a href="#_ftn1" name="_ftnref1" title="">[1]</a>, Microsoft Azure<a href="#_ftn2" name="_ftnref2" title="">[2]</a>, Google Cloud Services<a href="#_ftn3" name="_ftnref3" title="">[3]</a>, Heroku<a href="#_ftn4" name="_ftnref4" title="">[4]</a>, FIWARE<a href="#_ftn5" name="_ftnref5" title="">[5]</a> to mention some of them), each one with their own features. From the developer point of view, it is challenging to choose tools, middleware or programming language to build applications designed for the Cloud, so as to take advantage of such a wide infrastructure and cope to the challenge of scalability. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this article we describe the development of HeyCity, a social-oriented application and platform on the Cloud. HeyCity is both an application and platform that allows citizens to report different infrastructure problems using their smartphones, and let other users and local authorities to locate hot-spots in a city that require intervention. Originally, HeyCity was tested and deployed in a single server. However, because of its wide applicability (it can be used globally for any city in the world) and its potential growth, migrating the application to the Cloud was necessary. Its simple architecture made the migration process straightforward, requiring no re-engineering for the Cloud deployment. We chose to deploy HeyCity Platform on the Cloud infrastructure provided by Heroku and to use MongoLab<a href="#_ftn6" name="_ftnref6" title="">[6]</a> as data storage service. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The original contributions of this article are twofold:</font></p>      <blockquote>       <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     We describe the architecture of the HeyCity     social-oriented application and platform</font></p>       <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     We describe the implementation details of the     HeyCity prototype to enable broad access and scalability of the application on     the Cloud</font></p> </blockquote>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">This article is structured as follows. Section 2 introduces the HeyCity App &#8232;architecture. Section 3 gives an overview of the tools we used to develop the application. Section 4 details the implementation of HeyCity and Section 5 concludes the article and discusses Future Work.</font></p>      ]]></body>
<body><![CDATA[<p align="justify">&nbsp;</p>      <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="_Ref420273405"></a>2.&nbsp;&nbsp;&nbsp;&nbsp; HEYCITY: A SOCIAL-ORIENTED APPLICATION AND PLATFORM</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The main goal of HeyCity is to allow both, citizens and local government authorities, to collaborate in order to solve common problems in a city. Citizens can report infrastructure problems (e.g. holes on roads, broken public or traffic lights), public safety (e.g. accidents, problems related with alcohol consumption) or services (e.g. water supply, sewerage failures). Local authorities can take actions based on those reports. These problems are unfortunately very common in a lot of cities in Latin America and abroad, and citizens have almost no possibility to report them. HeyCity brings a simple yet efficient technological answer to a social problem, where the citizen is part of the solution.</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">HeyCity was designed to be simple to use. The citizen interaction is done through an Android App whereas local authorities (or other users) access the reports through a Web Application front-end. The HeyCity App allows users to use the smartphone camera and GPS to report problems. Users can view reports that are close to their current location within the App (in a map) and also access to the global view through the Web. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In the following we describe both the server and client sides of HeyCity, giving an overview of the used technology and the authentication process.</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>2.1.&nbsp;&nbsp;&nbsp;   Server Side</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The HeyCity platform follows a three-tier architecture. The front-end server handles client requests to store generated reports and deliver them on demand. The server provides a RESTful[<a href="#FieldingREST2000">3</a>] Web Service Application Programming Interface (API) for these interactions. The report processing application server is implemented in JavaScript using the Express Framework<a href="#_ftn7" name="_ftnref7" title="">[7]</a> on top of Node.js<a href="#_ftn8" name="_ftnref8" title="">[8]</a>. We chose Node.js because of its simple deployment, high-performance network capabilities and simplified scalable programming model (not requiring handling concurrency explicitly) [<a href="#tilkov2010node">4</a>]. The back-end data storage is handled by a MongoDB database [<a href="#MongoDBLab">5</a>]. We chose to use MongoDB because of its flexible data modeling and scalability, compared to conventional SQL databases. Also, the use of JavaScript simplifies the interfaces between the different layers, as MongoDB uses BSON, a superset of JavaScript-based JSON serialization structure<a href="#_ftn9" name="_ftnref9" title="">[9]</a>. </font></p>      <p align="justify"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">2.2.&nbsp;&nbsp;&nbsp;   Client Side</font></b></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The HeyCity platform has two different clients: An Android and a Web Client App. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;   <b>Android App: </b>The Android App is used to send reports to the HeyCity platform. It uses GPS information and the camera to take pictures that are uploaded to the server. The Android App gathers a list of other user’s reports that are close to the current location, and displays them on a map. The Android App only allows reporting events using the current GPS location, i.e. it does not allow uploading images or manually setting a different location. The App however allows off-line reports by storing the GPS location and image on the device, and uploading the information once on-line, i.e. it is not mandatory to be on-line to use the HeyCity App. </font></p>      ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     <b>Web App: </b>The Web Client App is used only to visualize reports on a map. As for the Android App, we use the Google Maps API<a href="#_ftn10" name="_ftnref10" title="">[10]</a>. The Web Client App uses a pull mechanism to interact with the server to gather reports according to the location that is displayed. It generates a “heat map” with the locations that have more reporting activities. The Web Client App also uses a notification mechanism to receive live report updates. </font></p>      <p align="justify"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">2.3.&nbsp;&nbsp;&nbsp; Authentication</font></b></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">To prevent abuses, the HeyCity Android App uses Facebook credentials obtained through the Facebook Software Development Kit (SDK) for Android<a href="#_ftn11" name="_ftnref11" title="">[11]</a>. This authentication is only asked upon the first report. The authentication token is stored in HeyCity server and is used to display only public information of the user, thus preserving users’ privacy. By default, user’s HeyCity reports are not posted on Facebook. The credentials are mainly used to prevent users to post inappropriate content in the platform, because their public profile is visible on HeyCity. The Facebook SDK itself makes the token management and renewal inside the application.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="_Ref420273437"></a>3.&nbsp;&nbsp;&nbsp;&nbsp; TOOLS OVERVIEW</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Different services and their associated tools are available to build applications on the Cloud. According to NIST’s widely accepted Cloud Service Model definition [<a href="#MellCloud2011">1</a>], Cloud computing can include software (Software as a Service or SaaS), hardware (Infrastructure as a Service or IaaS), or technology tools (Platform as a Service or PaaS) that are available on demand. More recently, other service models have emerged for data storage (Database as a Service or DBaaS, Storage as a Service or StaaS) and network (Network as a Service or NaaS) [<a href="#KacheleExtendedCloud2013">6</a>]. Depending on the application needs, one or several of these models can be combined to implement an application, i.e. applications can use different service models from different Cloud service providers. The challenge is therefore choose the correct service model and take into account the set of tools available to simplify the design, development, deployment and execution of the application. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In the following, we describe the building block tools that were used to deploy HeyCity on the Cloud. First, we discuss the tools to deploy the server. Second, we detail the tools for data storage. Finally, we give an overview of the tools for real time notifications.</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.1.&nbsp;&nbsp;&nbsp; Heroku</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Heroku is a Cloud Platform as a Service (PaaS) that allows developers to easily deploy and scale applications to the Cloud by automating several parts of the deployment process. Heroku is able to do this, by compiling the application source code into a <i>slug</i> and running it on <i>dynos</i>. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><i>Slugs</i> are pre-compiled versions of the application ready to run in a <i>dyno</i>. To create a <i>slug</i>, Heroku receives the source code and analyzes it to determine which platform is required to build the application. Heroku supports Ruby, Node.js, Python, Java and PHP. In our case, the platform is Node.js, therefore the <i>Slug</i> compiler looks for a package.jsonfile<a href="#_ftn12" name="_ftnref12" title="">[12]</a> to know which dependencies to fetch. With this information, the <i>slug</i> is ready for deployment. </font></p>      ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><i>Dynos</i> are isolated, virtualized Linux containers, that provide the environment required to run an application [<a href="#Heroku">7</a>], i.e. a <i>dyno</i> is a Linux Virtual Machine instance capable of running the code contained in the pre-compiled <i>slug</i>. <i>Dynos</i> have a limited processing capability so one <i>dyno</i> can only handle a given amount of requests at the same time. To overcome this limitation, Heroku allows scaling up an application by allowing the user to allocate several <i>dynos</i> to a single project. These <i>dynos</i> start to boot up when needed to fulfill the requests [<a href="#Randall:HerokuHack:2012">8</a>]. This allocation can be changed dynamically allowing us to scale up when high request traffic arrives and scale down when the service is not used very much. Each application <i>dynos</i> are spread across the “<i>dyno grid</i>”, which consists of many servers running on Amazon Web Services (AWS) called <i>railguns</i>, i.e. Heroku’s PaaS uses Amazon’s IaaS underneath. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.2.&nbsp;&nbsp;&nbsp; MongoLab</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">MongoLab is a Database as a Service (DBaaS) based on MongoDB, providing a fully-managed Cloud database service featuring highly-available MongoDB databases, automated backups, web-based tools and 24/7 monitoring [<a href="#MongoDBLab">5</a>]. It allows users to store application’s data in a scalable way and providing 500 MB of free DB storage [<a href="#MongoLab">9</a>] for development and prototyping. Higher volumes require a pay-per-use plan. Other than MongoLab’s free plan, the natural JavaScript integration and the powerful management tools were key to choose it as the DBaaS for HeyCity. </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.3.&nbsp;&nbsp;&nbsp; Socket.IO</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Socket.IO<a href="#_ftn13" name="_ftnref13" title="">[13]</a> is a JavaScript library for real-time Web Applications. It has two parts: a client side library and a server-side library for Node.js. Both components have identical API and are event-driven. Socket.IO manages to do real time communication by using a series of different transports as fallback, i.e. if some transport is not working for any reason, the user can set a list of different transport<a href="#_ftn14" name="_ftnref14" title="">[14]</a> to be used [<a href="#WhatIsSocketIO">10</a>]. Socket.IO allows bi-directional communication, i.e. allowing not only the client to interact with the server as in conventional AJAX, but also the server side to communicate with a web client, thus providing a robust foundation for notifications.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="_Ref420273448"></a>4.&nbsp;&nbsp;&nbsp;&nbsp; HEYCITY IMPLEMENTATION</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The implementation of HeyCity follows a modular architecture, enabling easy deployment on the Cloud. <a href="#f1">Figure1</a> depicts the main components of HeyCity, which are structured as follows: </font></p>      <blockquote>       <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     A Node.js server running on the Heroku Cloud</font></p>       ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     A MongoDB database hosted on MongoLab</font></p>       <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     A Web Client served from the Node.js server</font></p>       <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     An Android application connecting to the Node.js     server </font></p> </blockquote>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_01.gif" width="450" height="459"></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>4.1 Web-based Server and Client</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The choice of using JavaScript on the server side (i.e. Node.js) was driven by the simplified deployment, high-performance and scalability. Furthermore, the express generator module of Node.js simplified the development, because it generates a complete Web Service skeleton code. Based on that, we developed a RESTful Web Service API (GET, POST, PUT and DELETE operations) for the HeyCity reports, comments and users, with the corresponding database connection logic. For the GET operation, the API allows to specify two coordinate points, so as to return only reports of a specific geographical area. The creation of new reports through the POST operation was enhanced with a broadcast notification mechanism using Socket.IO. That is, whenever a new report is created, the Socket.IO module on the server pushes a notification to all the connected clients transparently. The server is therefore able to serve both the Web Client and the Android App with exactly the same interfaces, making the server very lightweight. The clients are able to display the reports in both types of clients almost in real-time. </font></p>      <p align="justify">&nbsp;</p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#f2">Figure 2</a> depicts the RESTful API to create a new report. The body for the POST operation (in JSON format) contains the report description, the location coordinates, the encoded image, and the token of the user credential from the Facebook authentication. </font></p>     <p align="justify"><a name="f2"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_02.gif" width="738" height="395"></p>     ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The newly created <i>id</i> and a <i>true</i> result is returned on success, no <i>id </i>and <i>false</i> otherwise. The newly created report <i>id</i> is then used to create a comment on the report as shown in <a href="#f3">Figure 3</a>.</font></p>      <p align="justify"><a name="f3"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_03.gif" width="661" height="306"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The   user credential token is stored on the server and is used later on to gather   the user’s basic and public information from Facebook RESTful API. This   information is cached in the server when any client requests a user’s report or   comment. PUT and DELETE operations for update and deletion of reports and   comments, as well as users management API follow similar API (not shown).</font></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#f4">Figure 4</a>, <a href="#f5">Figure 5</a> and <a href="#f6">Figure 6</a> depict the RESTful API to gather a list of reports (based on current location), an individual report, and a list of comments associated to a given report, respectively. Gathering a list of reports uses two optional parameters: <i>coords</i> and <i>page</i>. The <i>coords</i> parameter allows specifying two location points (latitude and longitude) defining the top left and bottom right points defining the area from where we want to gather all the reports. </font></p>     <p align="justify"><a name="f4"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_04.gif" width="658" height="709"></p>     <p align="center">&nbsp;</p>     <p align="center"><a name="f5"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_05.gif" width="661" height="450"></p>     ]]></body>
<body><![CDATA[<p align="center">&nbsp;</p>     <p align="center"><a name="f6"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_06.gif" width="656" height="551"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">To avoid returning too many reports at once, the API uses REST best practice “pagination” mechanism, by returning a next link (see <a href="#f4">Figure 4</a>), if the number of reports exceeds a server configurable threshold (set by default to 20). The <i>page</i> parameter is used to this purpose. Similar paging mechanism is used to gather comments (see <a href="#f6">Figure 6</a>).</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Since the report image is stored in the HeyCity server, the encoded image is returned for each report. In contrast, for the user’s public Facebook profile image, a URL is returned instead. The client is responsible to retrieve this image. The HeyCity server uses the stored authentication token to gather the user’s name and picture URL without gathering the actual image. Note that the <i>_id</i> and the <i>Timestamp</i> are MongoDB identifiers and timestamps that are used to display comments in the correct ordering of creation and to show the time of creation. </font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">On the Web Client implementation, the use of JavaScript was natural. This enables the use of Google Maps API, display markers with the information retrieved from the HeyCity RESTful API and implement interactions to add comments and receive notifications. <a href="#f7">Figure 7</a> shows the Web Client App displaying reports in a given location, whereas <a href="#f8">Figure 8</a> shows a report view.</font></p>      <p align="justify"><a name="f7"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_07.jpg" width="684" height="412"></p>     <p align="center">&nbsp;</p>     <p align="center"><a name="f8"></a></p>     ]]></body>
<body><![CDATA[<p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_08.jpg" width="682" height="410"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>4.1.&nbsp;&nbsp;&nbsp;   Android-based Client</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The Android client is the most important piece of HeyCity. It allows users to report problems by snapping a picture, adding a description and sending it to the server. Similar to the Web client, it displays reports in a map with markers. <a href="#f9">Figure 9</a> depicts the complete reporting workflow. </font></p>      <p align="justify"><a name="f9"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_09.jpg" width="678" height="358"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The Android client has four UI interfaces (called Activities in Android’s programming model<a href="#_ftn15" name="_ftnref15" title="">[15]</a>) to interact with the user: </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;   <b>Map Activity. </b>This Activity is the first one presented to the user. As shown in <a href="#f10">Figure 10</a>, it displays a map around his current location with markers representing the places where other users have posted reports. Tapping on the markers opens the Report Activity. The Map Activity is unauthenticated, i.e. any user that installs the app is able to see reports without login in. The Map Activity also includes the native Socket.IO for Android<a href="#_ftn16" name="_ftnref16" title="">[16]</a> module. This module allows receiving real-time notifications of reports from the server. The client then verifies if the currently displayed map is near the received report, and displays, caches or discards the received notifications.</font></p>      <p align="justify"><a name="f10"></a>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_10.jpg" width="215" height="423"><font size="2"></font> <font size="2">     <p align="justify"><font face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     <b>Login Activity. </b>This   Activity is shown when an action requires the user to login. For example, if   the report button is pressed, it first triggers the user authentication   verification. If the user is not authenticated, the Login Activity screen is   prompted requesting for Facebook credentials. Once authenticated, the reporting can proceed. </font></p> </font>     ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;   <b>Report Upload Activity. </b>This Activity appears to the user after a picture is taken. It provides a field to describe what the reporting is about. This is an authenticated Activity, as it requires the user to be logged in, in order to post a report. <a href="#f11">Figure 11</a> shows the Report Upload Activity. </font></p>     <p align="justify"><a name="f11"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_11.jpg" width="240" height="427"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;   <b>Report Activity. </b>This Activityprovides a detailed view of a report that has been tapped on the map. It contains the report image, the report description and also the list of comments that have been made in the report. It also allows the user to add comments to the report (if the user wants to comment and hasn’t logged in yet, the Login Activity will be prompted). </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In general, the images captured by current smartphones are too big to be sent and stored efficiently on the server. Thus, the image is first compressed and then converted to Base64 as a convenient way to send the report images to the server and store them in the MongoDB database. <a href="#f12">Figure 12</a> depicts Java code for the image compressing and encoding in the Android App. Since the image is stored on the local storage of the device, the compression is done by reading the image from the local storage, rather than in memory only (see the file argument of the encodeImage(...) method). This ensures that the App has always a backup and cache image. The image reference, the credentials and location are locally stored in a SQLite<a href="#_ftn17" name="_ftnref17" title="">[17]</a> embedded database. The Android App also handles off-line reporting by running a background Service Activity on a separate thread to check the Internet connectivity and upload information when available. </font></p>      <p align="justify"><a name="f12"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_12.gif" width="663" height="198"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">For   authentication, we use the Facebook Android SDK<a href="#_ftn18" name="_ftnref18" title="">[18]</a> by launching a Login   Activity waiting for a positive authentication result. The login functions are   fully managed by the Facebook, i.e. HeyCity does not handle its own login   functionality. Upon a positive Facebook authentication event, we store the generated   token and inform the main HeyCity Activity. Facebook authentication requires a developer   account credentials, Facebook App ID (i.eHeyCity registration), a generated   Android Hash Key added to the Facebook App and a Facebook Activity declared in   the HeyCity’s Android application manifest file. In order to manage the login   attempts properly, the Login Activity (see <a href="#f13">Figure 13</a>) uses the FacebookManager class to handle notifications of user data upon token changes. When   the Main Activity or the Map Activity is started or resumed, we check if the   user is logged in (see <a href="#f14">Figure 14</a>) and refresh user’s data accordingly. If the   user is not logged in, we do not ask user to login, as HeyCity App must be   usable also just to see reports. However, when the user tries to make a report   by pressing the camera button, then we check if the user has logged in, and   start the Login Activity accordingly (see <a href="#f15">Figure 15</a>).</font></p>     <p align="justify"><a name="f13"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_13.jpg" width="214" height="396"></p>     ]]></body>
<body><![CDATA[<p align="center">&nbsp;</p>     <p align="center"><a name="f14"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_14.gif" width="670" height="665"></p>     <p align="center">&nbsp;</p>     <p align="center"><a name="f15"></a></p>     <p align="center"><img src="/img/revistas/riyd/v1n15/a04_figura_15.gif" width="656" height="196"></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&#9679;&nbsp;     <b>Service deployment</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The deployment of the service uses Heroku Toolbelt<a href="#_ftn19" name="_ftnref19" title="">[19]</a>, which is a set of command line tools that allows sending the application server to Heroku repositories, where it can be built, deployed and executed in Heroku. Internally, Heroku Toolbelt uses <i>git</i>, the widely used distributed version control system<a href="#_ftn20" name="_ftnref20" title="">[20]</a>, for service deployment. The deployment step is made in a git push command to the Heroku master repository, assigned to the HeyCity application by the Toolbelt. This copies all the required source code of the HeyCity platform and allows simplified service deployment, i.e. it does not require any additional configuration or settings to deploy all the required components.</font></p>      <p align=justify><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">4.3 Evaluation</font></b></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">We evaluated HeyCity running on a single <i>dyno</i> on Heroku, varying the number of requests, with requests = 2<sup>n</sup> (n = 0...10) concurrent requests. We used the benchmark-pages<a href="#_ftn21" name="_ftnref21" title="">[21]</a> module for Node.js to measure the response time for the three main pages of HeyCity: main, map and report. These queries triggers also requests to the MongoDB database in order to retrieve reports and comments. <a href="#f16">Figure 16</a> shows the evolution of the requests for each of the pages for 1 to 16 requests. Here we can see that the most time consuming requests are related to the access to the reports information, by gathering information from the corresponding MongoDB collection. After 8 requests the response time grows linearly because the single dyno instance has to handle all the requests. The response time per request from 1 to 1024 concurrent requests vary between 1577 ms. and 2262 ms.</font></p>      ]]></body>
<body><![CDATA[<p align=justify><a name="f16"></a></p>     <p align=center><img src="/img/revistas/riyd/v1n15/a04_figura_16.gif" width="585" height="396"></p>     <p align=center>&nbsp;</p>     <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="_Ref420273481"></a>5.&nbsp;&nbsp;&nbsp;&nbsp; CONCLUSION AND FUTURE WORK</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this article we described HeyCity, a Social-Oriented Application and Platform on the Cloud. We detailed the architecture and implementation based on state-of-the-art Cloud services and tools. Our implementation uses a RESTful Web Service API to simplify the interactions between the server and two types of clients (Android and Web) and leverages a powerful notification mechanism. Since HeyCity was designed to let normal citizens to report different problems in their cities, the HeyCity prototype and the scalability provided by the Cloud infrastructure can be the base for a massive social service to help citizens all over the world. Future work includes enhanced reporting service for local authorities, advanced acknowledge service when reported problems are solved and detailed benchmarking. In addition, the platform can be extended to cover different types of reports.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>6.&nbsp;&nbsp;&nbsp;&nbsp; ACKNOWLEDGEMENTS</b></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The authors want to thank Randall Degges for his help with Heroku internals and Oscar Sanjinez for his work in the early version of HeyCity’s Android App.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>7.&nbsp;&nbsp;&nbsp;&nbsp; BIBLIOGRAPHY</b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>&nbsp;</b></font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[1] P. M. Mell and T. Grance.&quot;SP 800-145. The NIST Definition of Cloud Computing,&quot; National Institute of Standards &amp; Technology, Gaithersburg, MD, USA, Tech. Rep., 2011.</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[2] B.P. Rimal et al. &quot;A Taxonomy and Survey of Cloud Computing Systems,&quot; in <i>Proceedings of the 2009 Fifth International Joint Conference on INC, IMS and IDC</i>, Washington, DC, USA, 2009, pp. 44-51. [Online]. Avaible: <a href="http://dx.doi.org/10.1109/NCM.2009.218" target="_blank">http://dx.doi.org/10.1109/NCM.2009.218</a></font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[3] R. T. Fielding, &quot;Architectural Styles and the Design of Network-based Software Architectures,&quot; University of California, Irvine, Ph.D. dissertation ISBN: 0-599-87118-0, 2000.</font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[4] S. Tilkov and S. Vinoski, &quot;Node.js: Using JavaScript to build high-performance network programs,&quot; <i>IEEE Internet Computing</i>, vol. 14, no. 6, pp. 80-83, 2010.</font></p>      <!-- ref --><p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[5] Object Labs Corporation. MongoLab | MongoDB. [Online]. Available:   <a href="http://www.mongodb.com/partners/cloud/mongolab" target="_blank">http://www.mongodb.com/partners/cloud/mongolab</a></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=955465&pid=S2518-4431201500010000400005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[6] S. Kächele et al. &quot;Beyond IaaS and PaaS: An Extended Cloud Taxonomy for Computation, Storage and Networking,&quot; in <i>Proceedings of the 2013 IEEE/ACM 6th International Conference on Utility and Cloud Computing</i>, Washington, DC, USA, 2013, pp. 75-82. [Online]. Avaible: <a href="http://dx.doi.org/10.1109/UCC.2013.28" target="_blank">http://dx.doi.org/10.1109/UCC.2013.28</a></font></p>      <!-- ref --><p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[7] Heroku Inc. How Heroku Works. [Online]. Avaible:   <a href="https://devcenter.heroku.com/articles/how-heroku-works" target="_blank">https://devcenter.heroku.com/articles/how-heroku-works</a></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=955467&pid=S2518-4431201500010000400007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[8] R. Degges, The Heroku Hacker's Guide. Release 1.0, 2012.</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=955468&pid=S2518-4431201500010000400008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[9] Object Labs Corporation. MongoLab. [Online]. Avaible:   <a href="https://mongolab.com/" target="_blank">https://mongolab.com/</a></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=955469&pid=S2518-4431201500010000400009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">[10] C. Cheng. “What is Socket.IO?”[Online]. Available:   <a href="http://learn-gevent-socketio.readthedocs.org/en/latest/socketio.html" target="_blank">http://learn-gevent-socketio.readthedocs.org/en/latest/socketio.html</a></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=955470&pid=S2518-4431201500010000400010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><p>&nbsp;</p>     <p><font size="3"><b><font face="Verdana, Arial, Helvetica, sans-serif">NOTAS</font></b></font></p>     <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref1" name="_ftn1" title="">[1]</a> <a href="http://aws.amazon.com/" target="_blank">http://aws.amazon.com/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref2" name="_ftn2" title="">[2]</a> <a href="http://azure.microsoft.com/" target="_blank">http://azure.microsoft.com/ </a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref3" name="_ftn3" title="">[3]</a> <a href="http://cloud.google.com/" target="_blank">http://cloud.google.com/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref4" name="_ftn4" title="">[4]</a> <a href="http://heroku.com/" target="_blank">http://heroku.com/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref5" name="_ftn5" title="">[5]</a> <a href="http://www.fiware.org/" target="_blank">http://www.fiware.org/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref6" name="_ftn6" title="">[6]</a> <a href="http://www.mongolab.com/" target="_blank">http://www.mongolab.com/ </a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref7" name="_ftn7" title="">[7]</a> <a href="http://www.expressjs.com/" target="_blank">http://www.expressjs.com/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref8" name="_ftn8" title="">[8]</a> <a href="http://www.nodejs.org/" target="_blank">http://www.nodejs.org/</a></font></p>        ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref9" name="_ftn9" title="">[9]</a> MongoDB uses an extended JSON (JavaScript Object Notation) format as serialization format for documents and remote procedure calls. BSON can be seen as a “binary” representation of JSON. </font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref10" name="_ftn10" title="">[10]</a> <a href="https://developers.google.com/maps/" target="_blank">https://developers.google.com/maps/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref11" name="_ftn11" title="">[11]</a> <a href="https://developers.facebook.com/docs/android/" target="_blank">https://developers.facebook.com/docs/android/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref12" name="_ftn12" title="">[12]</a> The Node.js package management system (npm) uses a configuration file called package.json that contains metadata to handle dependencies. The description is formatted in standard JSON. </font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref13" name="_ftn13" title="">[13]</a> <a href="http://socket.io/" target="_blank">http://socket.io/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref14" name="_ftn14" title="">[14]</a> Socket.IO unifies fallback transports by including WebSocket, Flash, AJAX long polling, AJAX multipart streaming, Iframe and JSONP Polling </font></p>      <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref15" name="_ftn15" title="">[15]</a>     <a href="http://developer.android.com/guide/components/activities.html" target="_blank">http://developer.android.com/guide/components/activities.html</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref16" name="_ftn16" title="">[16]</a> <a href="http://socket.io/blog/native-socket-io-and-android/" target="_blank">http://socket.io/blog/native-socket-io-and-android/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref17" name="_ftn17" title="">[17]</a> <a href="http://www.sqlite.org/" target="_blank">http://www.sqlite.org/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref18" name="_ftn18" title="">[18]</a>     <a href="https://developers.facebook.com/docs/android" target="_blank">https://developers.facebook.com/docs/android</a></font></p>        ]]></body>
<body><![CDATA[<p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref19" name="_ftn19" title="">[19]</a> <a href="https://toolbelt.heroku.com/" target="_blank">https://toolbelt.heroku.com/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref20" name="_ftn20" title="">[20]</a> <a href="https://git-scm.com/" target="_blank">https://git-scm.com/</a></font></p>        <p align="justify"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#_ftnref21" name="_ftn21" title="">[21]</a> <a href="https://www.npmjs.com/package/benchmark-pages" target="_blank">https://www.npmjs.com/package/benchmark-pages </a></font></p>     <p align="justify">&nbsp;</p>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Mell]]></surname>
<given-names><![CDATA[P.M.]]></given-names>
</name>
<name>
<surname><![CDATA[Grance]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[SP 800-145. The NIST Definition of Cloud Computing]]></source>
<year>2011</year>
<publisher-loc><![CDATA[Gaithersburg^eMD MD]]></publisher-loc>
<publisher-name><![CDATA[National Institute of Standards & Technology]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rimal]]></surname>
<given-names><![CDATA[B.P.]]></given-names>
</name>
</person-group>
<source><![CDATA[A Taxonomy and Survey of Cloud Computing Systems]]></source>
<year>2009</year>
<conf-name><![CDATA[ 2009 Fifth International Joint Conference on INC, IMS and IDC]]></conf-name>
<conf-loc>Washington DC</conf-loc>
<page-range>44-51</page-range></nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fielding]]></surname>
<given-names><![CDATA[R.T.]]></given-names>
</name>
</person-group>
<source><![CDATA[Architectural Styles and the Design of Network-based Software Architectures]]></source>
<year>2000</year>
<publisher-loc><![CDATA[Irvine ]]></publisher-loc>
<publisher-name><![CDATA[University of California]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Tilkov]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Vinoski]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Node.js: Using JavaScript to build high-performance network programs]]></article-title>
<source><![CDATA[IEEE Internet Computing]]></source>
<year>2010</year>
<volume>14</volume>
<numero>6</numero>
<issue>6</issue>
<page-range>80-83</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="">
<collab>Object Labs Corporation</collab>
<source><![CDATA[MongoLab | MongoDB]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kächele]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[Beyond IaaS and PaaS: An Extended Cloud Taxonomy for Computation, Storage and Networking]]></source>
<year>2013</year>
<conf-name><![CDATA[ 2013 IEEE/ACM 6th International Conference on Utility and Cloud Computing]]></conf-name>
<conf-loc>Washington DC</conf-loc>
<page-range>75-82</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<collab>Heroku Inc.</collab>
<source><![CDATA[How Heroku Works]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Degges]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Heroku Hacker's Guide. Release 1.0]]></source>
<year>2012</year>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<collab>Object Labs Corporation</collab>
<source><![CDATA[MongoLab]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cheng]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<source><![CDATA[“What is Socket.IO?”]]></source>
<year></year>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
