scieee AI-readable full text Open interactive document viewer

Red social para el ocio nocturno

Jiménez Gutiérrez, Mario

Abstract

En este Trabajo de Fin de Grado he desarrollado una aplicación para dispositivos Android que es una red social enfocada al ocio nocturno. Mi aplicación Partying out!, tiene diversas funcionalidades variadas: ofrecer información sobre los locales de ocio general, sobre eventos concretos, de qué personas van a ir a dichos eventos, comunicación entre usuarios por distintas vías: por medio de chats entre usuarios o chats-foro asociados a los locales; buscador de locales y eventos, poder emitir publicaciones y visualizar la de los usuarios a los que sigues, ver a qué lugares han ido tus amigos, poder compartir eventos, entre otras.

Full text

Trabajo de Fin de Grado en Ingenier ´ ıa Inform´ atica Facultad de Inform´ atica Universidad Complutense de Madrid Red social para el ocio nocturno Social network for night leisure Autor: Mario Jim´ enez Guti´ errez Profesor director: Iv´ an Garc ´ ıa-Magari˜ no Garc ´ ıa Doble Grado en Ingenier ´ ıa Inform´ atica - Matem´ aticas Curso 2021-2022 2 3 Resumen En este Trabajo de Fin de Grado he desarrollado una aplicaci´on para dispositivos Android que es una red social enfocada al ocio nocturno. Mi aplicaci´on, Partying out!, tiene diversas funcionalidades variadas: ofrecer informaci´on sobre los locales de ocio general, sobre eventos concretos, de qu´e personas van a ir a dichos eventos, comunicaci´on entre usuarios por distintas v´ıas: por medio de chats entre usuarios o chats-foro asociados a los locales; buscador de locales y eventos, poder emitir publicaciones y visualizar la de los usuarios a los que sigues, ver a qu´e lugares han ido tus amigos, poder compartir eventos, entre otras. Palabras clave Android, filtro colaborativo, aplicaciones m´oviles, Java, Python, PHP. Abstract In this End of Degree Project I have developed an application for Android devices, which is a social network focused on night leisure. My application, Partying out!, has very diverse functionalities: to offer information about clubs, concrete events, who are going to those events, communication between users in a variety of ways: by chats between users or chat-forum linked to those clubs; search engines of events and clubs, to be able to share publications and visualize your followed ones’, to see which places your friends have gone to, to share events, among others. Keywords Android, collaborative filtering, mobile applications, Java, Python, PHP. 4 ´ Indice general 1. Introducci´on 7 2. Estado del arte 11 2.1. An´alisisdelacompetencia................................... 11 2.1.1. Jaleo........................................... 11 2.1.2. Bcleverapp ....................................... 11 2.1.3. Instagram........................................ 12 2.1.4. Meetup ......................................... 12 2.1.5. Fever .......................................... 12 2.1.6. Exceed ......................................... 14 2.1.7. Eventbrite........................................ 14 2.2. Modelodenegocio ....................................... 15 3. Desarrollo de la app 17 3.1. Tecnolog´ıasusadas....................................... 17 3.1.1. AndroidStudio..................................... 17 3.1.2. Java........................................... 17 3.1.3. Github.......................................... 18 3.1.4. MySQL ......................................... 18 3.1.5. Xampp ......................................... 18 3.1.6. Balsamiq ........................................ 18 3.1.7. Latex .......................................... 18 3.1.8. PHP........................................... 18 3.1.9. Python ......................................... 19 3.2. Casosdeuso .......................................... 19 3.3. Modelodedatos ........................................ 29 3.3.1. Diagrama entidad-relaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.2. Implementaci´on..................................... 30 3.4. Arquitectura .......................................... 33 3.4.1. Patr´onSingleton .................................... 33 3.4.2. Modelo Vista Presentador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.4.3. Patr´onViewHolder .................................. 35 3.5. Dise˜no y pantallas de la aplicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.5.1. Pantalla de login y registrarse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5.2. Pantalladeinicio.................................... 36 3.5.3. Pantalladelocales................................... 37 3.5.4. P´aginadeperfil..................................... 38 3.5.5. P´agina de publicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5 6´ INDICE GENERAL 3.5.6. P´agina de evento concreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.5.7. P´agina de chats de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.5.8. P´agina de chat de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.5.9. P´agina de chat de local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.5.10. Pantalla de compartir publicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.5.11. Pantalla de crear chat de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.5.12. Pantalla de crear chat de local . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.5.13.Pantalladebuscador.................................. 47 3.5.14. Men´u de navegaci´on inferior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.6. Motorderecomendaci´on.................................... 48 3.6.1. Recomendaci´on basada en popularidad . . . . . . . . . . . . . . . . . . . . . . . . 50 3.6.2. Filtrocolaborativo................................... 50 4. Interacci´on con usuarios 61 4.1. Encuesta previa al desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.2. Encuesta de experiencias de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5. Conclusiones y futuro 65 5.1. Conclusiones .......................................... 65 5.2. Trabajofuturo ......................................... 66 A. Anexo 71 A.1. AnexoI: cuestionario general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 A.2. AnexoII: cuestionario de usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 A.3. AnexoIII: Prototipos en Balsamiq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Cap´ıtulo 1 Introducci´on Motivaci´on Gracias a los avances en la comunicaci´on y tecnolog´ıa hemos sido testigos de la enorme revoluci´on que ha supuesto la irrupci´on de los tel´efonos m´oviles en nuestras vidas. [6] M´as del 70 % de la poblaci´on mundial en 2015 ten´ıa acceso a este tipo de tecnolog´ıa. En concreto, en la actualidad damos por sentadas todas las funcionalidades que nos ofrecen los smartphones o tel´efonos inteligentes. Desde poder comunicarnos de manera instant´anea de multitud de formas por todo el globo hasta poder usar el m´ovil como gps, entre muchas otras. [10] Dicha revoluci´on no podr´ıa ser explicada sin el concepto de aplicaciones m´oviles. Estas aplicaciones son accesibles desde pr´acticamente de la totalidad de los smartphones modernos. En este sentido, podemos diferenciar dos mercados de aplicaciones mayoritarios: Google Play y Apple Store, que ofrecen aplicaciones m´oviles para dispositivos con sistemas operativos Android e iOS respectivamente. Algunos datos sobre dicho mercado a tener cuenta son: en el primer cuarto de 2021 los usuarios de Android pod´ıan elegir entre 3.48 millones de apps. Por otro lado, en la Apple App Store 2.22 millones de apps. 1De hecho, vemos que en la Apple App Store el n´umero de aplicaciones ofrecido no para de crecer, esto contrasta con un estudio que afirmaba que exist´ıan aproximadamente 800000 aplicaciones en 2013,[18] es decir, hay un crecimiento muy significativo del n´umero de aplicaciones. 2Seg´un un estudio el uso medio diario del m´ovil en hombres es de 166.78 minutos y en mujeres de 154.26.[2] Por otra parte, debemos tener en cuenta que la pandemia Covid-19 ha tenido consecuencias muy importantes en este sector puesto que ha acelerado ciertas tendencias que se ve´ıan observando en los a˜nos anteriores, tales como el aumento del uso de aplicaciones m´oviles, la automatizaci´on de ciertas tareas, el uso de apps para poder contrarrestar los efectos nocivos que ha tenido en nuestras vidas, la creciente exposici´on a las redes sociales, el teletrabajo entre muchos otros.[13] Al mismo tiempo, a pesar de la pandemia, vemos como la gente empieza a volver a ciertas actividades sociales que durante la pandemia estaban amenazadas. En este sentido, debemos destacar la reapertura de los locales de ocio nocturno, mayor contacto social en lugares p´ublicos o casas entre una larga lista de aspectos. Nuestra motivaci´on es poder ofrecer una aplicaci´on que ofrezca informaci´on de primera mano sobre estos eventos sociales y adem´as poder hacer uso de dicha app para poder socializar y vivir experiencias completamente diferentes con personas afines que elijamos, evitando as´ı algunos de los problemas que el mundo de la noche tiene, como la poca informaci´on de precios o ciertas conductas. [11] 1https://www.statista.com/statistics/276623/number-of-apps-available-in-leading-app-stores/ 2https://www.statista.com/statistics/779768/number-of-available-apps-in-the-apple-app-store-quarter/ 7 8CAP´ ITULO 1. INTRODUCCI ´ ON Objetivos Nuestro objetivo es poder desarrollar una aplicaci´on Android que permita ofrecer funcionalidades hasta ahora in´editas en conjunto con la ambici´on de poder conectar personas de manera f´ısica y a trav´es de dicha herramienta poder eliminar la barrera social que se ha originado por diversos factores tales como la pandemia, el creciente uso de redes sociales como burbuja y no como una v´ıa para conocer nuevas personas. Algunas de estas funcionalidades son: 1. Ofrecer los mejores lugares personalizados seg´un las preferencias del usuario para poder desarrollar su vida social y vivir nuevas experiencias. 2. Poder interactuar con amigos de manera directa por medio de chats y de manera indirecta publicando los eventos a los que uno asiste, los lugares a los que ha ido o publicaciones en las que se comparte contenido. 3. Tener un perfil a modo de identidad virtual en el que los dem´as puedan ver publicaciones, as´ı como los eventos y lugares donde se ha estado. 4. Tener chats-foro asociados al local concreto donde se pueda interactuar con todos los usuarios que vayan a ir a dicho evento. 5. Poder chatear con amigos de manera individual o por medio de grupos. 6. Poder ofrecer eventos en los que se pueda invitar a amigos selectivamente. Metodolog´ıa Se ha seguido una metodolog´ıa ´agil propia en la que el trabajo se iba aumentando de manera incremental. Se han cogido aspectos de Scrum [4] pero sobre todo de KanBan [1] al dividir las tareas seg´un ´ambito y aumentando funciones del proyecto. En las primeras iteracciones me centr´e en la definici´on de la idea y en generar prototipos de la aplicaci´on, posteriormente, una vez la idea estaba bien definida, me centr´e en la implementaci´on donde se desglos´o la parte de la gesti´on de la base de datos con el desarrollo en Android. Posteriormente, estas se unieron y se a˜nadieron funciones de manera incremental. Estructura Este trabajo de fin de grado esta compuesto por la presente memoria y por el c´odigo empleado, as´ı como la gesti´on de la base de datos. El c´odigo del proyecto se encuentra en https://github.com/ mjgmario/tfginfo1.git. La memoria se organiza en 5 cap´ıtulos.En el cap´ıtulo 1 se presenta el tema, las motivaciones a la realizaci´on de dicho trabajo, los objetivos impuestos, la metodolog´ıa empleada y la estructura general de la memoria. En el cap´ıtulo 2 un an´alisis de la competencia de las aplicaciones competidoras que ofrecen funciones similares, con un estudio derivado de este, as´ı como un modelo de negocio resumido. En el cap´ıtulo 3 una descripci´on de las tecnolog´ıas empleadas y las razones de su uso, Se presentan los casos de uso m´as importantes, patrones de dise˜no, diagramas de clase, modelos de datos, arquitectura y descripci´on de c´omo funciona el sistema de recomendaciones. En el cap´ıtulo 4 se interact´ua con los usuarios en las diversas iteracciones del desarrollo para preguntarle sobre la aplicaci´on. En el cap´ıtulo 5 las conclusiones del proyecto y trabajos futuros de mejora. Introduction Thanks to the advances in technology and communication we have been witnesses of the great revolution that the irruption of mobile phones has supposed to our lives. [6] More than 70 % of the world population has access to this sort of technology. In particular, nowadays, we take for granted cutting-edge functionalities that smartphones offer us. From communicating in instantaneously in a variety of ways to use it as a GPS, among other uses. [10] Such revolution could not be explained without the concept of mobile apps. These applications are accesible by practically the majority of modern smartphones. In this sense, we can differentiate two markets: Google Play and Apple Store, which offer mobile apps for devices with operative systems Android and iOS, respectively. Some data about that market to be taken into account are: in the first quarter of 2021 Android users could choose between 3.48 million of apps. On the other hand, in Apple app 2.22 million of apps were offered.3In fact, we see that the number of apps in Apple App Store does not stop growing, according to a study the number of apps that existed was about 800000 in 2013,[18] in other words, there is a very signficant growth in the number of apps.4According to an study, the average daily use in male people was 166.78 minutes by day and in female 154.26. [2] On top of that, we have to consider that Covid-19 has had very important consequences in this sector because it has speed up some of the tendencies that were being observed on previous years, such as the growing use of mobile apps, automatization of certain tasks, the use of apps to offset the effects the pandemic has had to our lives, the growing number of hours of exposition to social networks, the remote working, among others. [13] Besides, despite the pandemic we see how people are starting to come back to social activities that during the pandemic were threatened, in connection with that , we should highlight somes aspects such as the recovery of clubs, greater social contacts in public places and houses. Our motivation is to be able to offer an app that shows updated information about social events and to make use of this app to socialize and live completely different experiences with affine people that we choose, avoiding the problems that night world poses, such as the lack of information of prices or some behaviours. [11] Objectives Our aim is to be able to offer an Android application that allow some functionalities since now unreleased as a whole, with the ambition to connect people face-to-face and by this platform delete the social distance that has been originated by different cause such as the pandemic, the usage of social networks as a bubble and not as a way to meet new people. Some of these functionalities are: 3https://www.statista.com/statistics/779768/number-of-available-apps-in-the-apple-app-store-quarter/ 4https://www.statista.com/statistics/779768/number-of-available-apps-in-the-apple-app-store-quarter/ 9 16 CAP´ ITULO 2. ESTADO DEL ARTE Figura 2.6: Exceed (a) (b) Figura 2.7: Eventbrite poder llevar a cabo tareas de mantenimiento y ampliaci´on del software. A la vez, se realizar´an campa˜nas publicitarias del producto por Internet, primero enfoc´andonos en un nicho concreto, el p´ublico joven, para, posteriormente, expandir el rango de edad. Cap´ıtulo 3 Desarrollo de la app 3.1. Tecnolog´ıas usadas En este apartado se exponen las herramientas empleadas en el desarrollo de PartyingOut!, indicando el porqu´e de su uso. 3.1.1. Android Studio Android Studio [7]es el entorno de desarrollo por excelencia para el desarrollo de aplicaciones en Android. Esta herramienta disponible para todos los sistemas operativos m´as usados: Windows, MacOs o Linux, ofrece infinidad de facilidades a la hora del dise˜no de los documentos xml, de escritura de c´odigo y herramientas Lint para detectar problemas de rendimiento o usabilidad. 1Asimismo, se eligi´o este sistema operativo puesto que con claridad es el m´as usado con 2500 millones de dispositivos Android en 2019. 2 3.1.2. Java Actualmente son dos los lenguajes para aplicaciones en Android m´as empleados: Java y Kotlin. Me decant´e por el uso de Java debido a que es compatible con la mayoria de dispositivos Android y por los conocimientos adquiridos durante la carrera y la familiaridad con ´el. 3 4 Creado por James Gosling y comercializado por primera vez en 1995 por Sun Mycrosystems.5Sus aplicaciones son compiladas a bytecode, pudi´endose ejecutar en cualquier m´aquina virtual de Java sin importar la arquitectura. Es un lenguaje de programaci´on orientado a objetos que tiene diferentes aspectos que lo diferencian: posee un recolector de basura y es independiente de la plataforma en la que se ejecuta.6 Adem´as, para el desarrollo de nuestra aplicaci´on se combina con XML para el aspecto visual de la aplicaci´on. 7 1https://developer.android.com/studio/releases/index.html 2https://www.theverge.com/2019/5/7/18528297/google-io-2019-android-devices-play-store-total-number-statistic-keynote 3https://openwebinars.net/blog/kotlin-vs-java/ 4https://en.wikipedia.org/wiki/Java_(programming_language) 5https://web.archive.org/web/20070127143602/http://today.java.net/jag/old/green// 6https://www.oracle.com/java/technologies/ 7https://www.ri5.com.ar/wiki/Que_es_XML.php 17 18 CAP´ ITULO 3. DESARROLLO DE LA APP En general, Java facilita la implementaci´on de patrones arquitect´onicos y una amplia reusabilidad de clases para proyectos de ´ambito muy diferente. 3.1.3. Github Repositorio que sirve para el control de versiones del proyecto. El proyecto es individual; sin embargo, puede que se amplie en el futuro y GitHub es la mejor plataforma para desarrollar un proyecto conjunto.8 El enlace al c´odigo del proyecto es: https://github.com/mjgmario/tfginfo1.git. 3.1.4. MySQL Sistema de bases de datos relacionales desarrollado bajo licencia GPL (General Public License) por Oracle. Es considerado como la base de datos de c´odigo abierto m´as popular del mundo 9 10. Se usa un lenguaje de peticiones estructurado (SQL), con operaciones CRUD (create, read, update, delete). Se emplea dicho sistema por su escalabilidad, adem´as de por la adaptaci´on a los datos que maneja PartyingOut! 3.1.5. Xampp Xampp 11 es un paquete de software libre que integra el sistema de bases de datos MySQL, el servidor Apache e int´erpretes para lenguajes de script PHP y Perl. Distribuido mediante licencia GNU. Se usa por su facilidad de uso y compatibilidad con nuestra aplicaci´on 3.1.6. Balsamiq Balsamiq 12 es usado para el dise˜no de prototipos, testeo de interfaces y dise˜no de la aplicaci´on. Se presenta en el anexo A.3 la imagen de algunos prototipos realizados en la fase de dise˜no inicial con Balsamiq. 3.1.7. Latex Sistema de composici´on de texto formado por ´ordenes construidas a partir de comandos TeX. Usado para la redacci´on de memoria debido al amplio desarrollo de paquetes que amplian la funcionalidad con gran facilidad y al ajuste de la correci´on con el formato del documento. 3.1.8. PHP Lenguaje de programaci´on usado para la comunicaci´on con la base de datos. Las ventajas que tiene son varias: se puede utilizar con cualquier servidor, soporta una gran cantidad de bases de datos diferentes y brinda soporte completo para la comunicaci´on con otros protocolos. 13 A su vez, es un lenguaje robusto que nos sirve para prevenir SQL injection con el objeto de tener consultas a la base de datos segura. 14 8https://docs.github.com/es/repositories/managing-your-repositorys-settings-and-features/ managing-repository-settings/managing-teams-and-people-with-access-to-your-repository 9https://db-engines.com/en/ranking 10https://es.wikipedia.org/wiki/MySQL 11hhttps://www.apachefriends.org/es/index.html 12https://balsamiq.com/ 13https://tecnologias.anexia.es/blog/cuando-y-por-que-utilizar-php#.YmXOVdpBxD8 14https://www.baulphp.com/prevenir-la-inyeccion-sql-en-php-ejemplo-completo/ 3.2. CASOS DE USO 19 3.1.9. Python Python [3] es el lenguaje de programaci´on por excelencia para el machine learning y aplicaciones de inteligencia artificial. En la actualidad, es uno de los m´as populares debido a la creciente importancia del big data y la inteligencia artificial. Es un lenguaje de alto nivel interpretado cuya filosof´ıa hace hincapi´e en la legibilidad de su c´odigo. Usa tipado din´amico y conteo de referencias para la gesti´on de memoria. En esa misma l´ınea, destaca por su sencillez y por la cantidad de librer´ıas de soporte con las que cuenta. En concreto, destacan NumPy [8], para el c´alculo con matrices y vectores, Scikit-learn [12], biblioteca que implementa algoritmos de aprendizaje autom´atico, o Pandas, que permite el an´alisis de datos a trav´es de series y dataframes, entre muchas otras. Este se usa junto la herramienta bottle.py para poder ejecutarlo en el servidor y poder ser usado como una API(application programming interface). 15 3.2. Casos de uso Se presentan los casos de uso de la aplicaci´on. Por lo general, estos constan de una descripci´on, precondici´on (que indica las condiciones que se deben cumplir antes de llevarse a cabo), la secuencia normal (que indica c´omo se desarrolla dicho caso de uso), la postcondici´on (condici´on que se cumple a posteriori despu´es de realizarse), excepciones (producidas en pasos de la secuencia normal que pueden implicar la no realizaci´on del caso de uso) y comentarios. En todos los casos de uso, excepto en el de Registrar usuario e Iniciar sesi´on se omite que el usuario ha iniciado sesi´on en la secci´on de precondici´on. Caso de uso Registrar usuario Descripci´on Un usuario sin cuenta se registra y acaba teniendo cuenta Precondici´on N&A Secuencia normal 1 El usuario tiene abierta la aplicaci´on 2 El usuario selecciona la opci´on de registrarse 3 El usuario introduce la informaci´on solicitada para cada campo 4 El usuario pulsa registrar 5 Se validan que los datos son correctos y que se cumplen las condiciones de unicidad de la base de datos Postcondici´on El usuario queda registrado con la informaci´on proporcionada. Se guarda en la base de datos su e-mail, contrase˜na, nombre, entre otras. Se le avanza al usuario a su p´agina de inicio y puede iniciar sesi´on en la app Excepciones Paso Acci´on 5 Datos con formato err´oneo(de cualquier par´ametro) 5 Campos obligatorios sin rellenar 5 No coincide el campo contrase˜na con repetir contrase˜na 5 El nombre, correo o tel´efono ya est´an registrados en la base de datos Comentarios N&A 15https://bottlepy.org/docs/dev/ 20 CAP´ ITULO 3. DESARROLLO DE LA APP Caso de uso Iniciar sesi´on Descripci´on Iniciar sesi´on Precondici´on El usuario tiene una cuenta registrada Secuencia normal 1 El usuario abre la aplicaci´on 2 El usuario selecciona la opci´on de iniciar sesi´on 3 El usuario introduce el usuario(el nombre) y la contrase˜na 4 El usuario pulsa login 5 El sistema comprueba que los datos est´an bien formateados 6 El sistema comprueba que los datos ya est´an registrados en la base de datos y son correctos Postcondici´on El usuario ha iniciado la sesi´on, es transportado a la pantalla de inicio Excepciones Paso Acci´on 5 Los datos no est´an bien formateados 5 Falta alg´un campo por rellenar 6 El par usuario/contrase˜na no est´a en la base de datos Comentarios N&A Caso de uso Ver pantalla principal Descripci´on El usuario ve la pantalla principal, en la que se encuentran varias listas. Listas 1 lista de lugares recomendados 2 lugares en los que ´el ha estado, con la fecha en la que estuvo 3 lugares d´onde han estado sus amigos 4 lista de publicaciones de seguidos Precondici´on Secuencia normal 1 El usuario presiona el bot´on de la pantalla principal o inicia la app 2 El sistema le muestra la pantalla principal con las listas anteriores y el men´u de navegaci´on Postcondici´on El usuario ve la pantalla principal Excepciones Comentarios N&A 3.2. CASOS DE USO 21 Caso de uso Ver local Descripci´on El usuario pulsa en el bot´on de un local y le aparece toda su informaci´on y funciones asociadas . Funciones 1 Nombre del local 2 Descripci´on del local 3 Imagen del local 4 Lista de relaciones asociados al local 5 Lista de amigos que han ido 6 Lista de chats asociados al local 7 Lista de eventos asociados al local Precondici´on Secuencia normal 1 El usuario pulsa el perfil del local(por la pantalla de inicio o de perfiles) o b´usqueda 2 El sistema le muestra el perfil del local Postcondici´on El usuario visualiza el perfil del local Comentarios N&A Caso de uso Visualizar el perfil de un usuario (parte de publicaciones) Descripci´on El usuario visualiza el perfil(parte de publicaciones) de otro usuario Precondici´on Secuencia normal 1 El usuario pulsa el perfil de un usuario(en pantalla principal, chat, entre otras) o bot´on publicaciones en perfil 2 Se muestran las publicaciones del usuario y botones de lugares,seguidos y seguidores Postcondici´on El usuario visualiza las publicaciones del usuario y botones de lugares,seguidos y seguidores Excepciones Comentarios N&A Caso de uso Puntuar el local Descripci´on El usuario punt´ua el local con una escala del 1 al 10 Precondici´on El usuario no ha votado al mismo local Secuencia normal 1 Pulsa el bot´on puntuar el local 2 El usuario introduce el valor de la puntuaci´on 3 El usuario pulsa el bot´on de finalizar la puntuaci´on 4 El sistema registra la puntuaci´on del usuario sobre el local Postcondici´on La votaci´on queda registrada en el sistema Excepciones Paso Acci´on 3 El usuario ya ha puntuado el local 3 El formato introducido no es v´alido Comentarios N&A 22 CAP´ ITULO 3. DESARROLLO DE LA APP Caso de uso Visualizarlos seguidores de un usuario Descripci´on El usuario visualiza los seguidores de otro usuario Precondici´on Secuencia normal 1 El usuario pulsa el bot´on seguidores en el perfil de un usuario 2 Se muestran los seguidores del usuario Postcondici´on El usuario visualiza los seguidores del usuario y botones de lugares,seguidos y publicaciones Excepciones Comentarios N&A Caso de uso Visualizar los seguidos de un usuario Descripci´on El usuario visualiza los seguidos de otro usuario Precondici´on Secuencia normal 1 El usuario pulsa el bot´on seguidos en el perfil de un usuario 2 Se muestran los seguidos del usuario Postcondici´on El usuario visualiza los seguidos del usuario y botones de lugares,seguidos y publicaciones Excepciones Comentarios N&A Caso de uso Visualizar los locales donde ha estado un usuario Descripci´on El usuario visualiza los locales donde ha estado un usuario Precondici´on Secuencia normal 1 El usuario pulsa el bot´on de lugares en el perfil de un usuario 2 Se muestran los locales donde ha estado el usuario Postcondici´on El usuario visualiza los locales donde ha estado el usuario y correspondiente botones del perfil. Excepciones Comentarios N&A Caso de uso Participar en el chat de un local Descripci´on Al usuario se le muestra la opci´on de poder participar en el chat del local Precondici´on El usuario no est´a registrado en dicho chat del local Secuencia normal 1 El usuario pulsa el chat de un local(desde la pantalla del local) 2 Se muestra la opci´on de participar en el chat de un local 3 Si da a no, el usuario vuelve a la pantalla del local 3 Si da a aceptar, el usuario accede al chat del local Postcondici´on En caso de s´ı, el usuario visualiza el chat y queda registrado en el chat del local Excepciones Comentarios N&A 3.2. CASOS DE USO 23 Caso de uso Enviar mensaje en el chat de un local Descripci´on El usuario env´ıa mensajes Precondici´on El usuario est´a dado de alta en el chat de un local Secuencia normal 1 El usuario teclea el mensaje 2 El usuario pulsa el bot´on de enviar 3 El sistema valida que todo est´a bien formateado 4 El sistema registra el mensaje en el chat de local Postcondici´on El mensaje puede ser visualizado por todo los integrantes del chat y guardado en la BBDD(base de datos) Excepciones Paso Acci´on 3 El mensaje est´a mal formateado Comentarios N&A Caso de uso Ver mensajes del chat de un local Descripci´on El usuario ve mensajes del chat de un local Precondici´on El usuario est´a dado de alta en el chat de un local Secuencia normal 1 El usuario pulsa el chat de un local(desde la pantalla del local) 2 El sistema muestra los mensajes del chat del local Postcondici´on El usuario visualiza los mensajes del chat y puede enviar mensajes Excepciones Comentarios N&A Caso de uso Ver lista de chats entre usuarios Descripci´on El usuario ve la lista de chats personales ordenados por fecha del ´ultimo mensaje junto con los mensajes no le´ıdos de cada chat Precondici´on Secuencia normal 1 El usuario pulsa el bot´on de chats de la barra de navegaci´on 2 El sistema muestra los nombres de dichos chats en orden de interacci´on Postcondici´on El usuario ve la lista de chats y puede acceder a estos Excepciones Comentarios N&A Caso de uso Ver chat de usuario Descripci´on El usuario ve los mensajes del chat de usuario Precondici´on El usuario pertenece a dicho chat Secuencia normal 1 El usuario pulsa en dicho chat personal por medio de la lista de chats o notificaciones 2 El sistema muestra los mensajes de dicho chat Postcondici´on El usuario ve los mensajes de dicho chat Excepciones Comentarios N&A 24 CAP´ ITULO 3. DESARROLLO DE LA APP Caso de uso Enviar mensaje en el chat de usuarios Descripci´on El usuario env´ıa mensajes Precondici´on El usuario env´ıa un mensaje en el chat de usuarios Secuencia normal 1 El usuario teclea el mensaje 2 El usuario pulsa el bot´on de enviar 3 El sistema valida que todo est´a bien formateado 4 El sistema registra el mensaje en el chat de local Postcondici´on El mensaje puede ser visualizado por todo los integrante del chat y guardado en la BBDD Excepciones Paso Acci´on 3 El mensaje est´a mal formateado Comentarios N&A Caso de uso A˜nadir usuario al chat de usuarios Descripci´on El usuario a˜nade al otro usuario al chat de usuarios Precondici´on El usuario pertenece al chat de usuarios Secuencia normal 1 El usuario pulsa el bot´on de a˜nadir usuario 2 El usuario teclea el nombre del usuario que quiere a˜nadir y pulsa finalizar 3 El sistema valida que el texto est´a bien formateado 4 El sistema comprueba que el usuario no est´a ya en el chat y que el usuario exista. 5 El sistema registra al usuario en el chat de usuario Postcondici´on El usuario indicado comienza a pertenecer al chat y puede usar todas sus funcionalidades Excepciones Paso Acci´on 3 El mensaje est´a mal formateado 4 El usuario con dicho nombre no existe 4 El usuario ya pertenece al chat Comentarios N&A Caso de uso Visualizar la pantalla del buscador Descripci´on El usuario visualiza la pantalla del buscador. Precondici´on Informaci´on 1 Lista de publicaciones m´as destacadas de manera global 2 Lista de locales m´as destacados Secuencia normal 1 El usuario pulsa el bot´on de buscar de la barra de navegaci´on 2 El sistema le muestra la pantalla del buscador Postcondici´on El usuario puede visualizar la pantalla del buscador Excepciones Comentarios N&A 3.2. CASOS DE USO 25 Caso de uso Seguir a un usuario Descripci´on El usuario sigue a otro usuario Precondici´on El usuario no sigue al usuario que quiere seguir Secuencia normal 1 Pulsa el bot´on seguir del perfil de otro usuario 2 El sistema le muestra la pantalla del perfil 3 El usuario pulsa el bot´on de seguir 4 El sistema registra dicho seguimiento Postcondici´on Queda registrado en el sistema que un usuario sigue a otro Excepciones Comentarios N&A Caso de uso Visualizar una publicaci´on concreta Descripci´on El usuario visualiza una publicaci´on concreta Precondici´on Secuencia normal 1 El usuario pulsa una publicaci´on(desde el perfil de un usuario o pantalla de inicio) 2 Se muestra la publicaci´on con fecha y descripci´on. Postcondici´on El usuario visualiza la publicaci´on y su informaci´on asociada Excepciones Comentarios N&A Caso de uso Cambiar descripci´on de usuario Descripci´on El usuario cambia la descripci´on de su perfil Precondici´on Secuencia normal 1 El usuario pulsa el bot´on de tu perfil en la pantalla de su perfil 2 El sistema le ofrece dos opciones del perfil que el usuario puede configurar: la descripci´on y la foto de perfil 3 El usuario introduce la descripci´on que quiere que sea la que reemplace a la actual. 4 El sistema valida que lo introducido est´a bien formateado 5 El usuario pulsa el bot´on de finalizar 6 El sistema le muestra la pantalla del perfil donde puede visualizar la nueva descripci´on Postcondici´on El usuario visualiza la pantalla del perfil donde se muestra la nueva descripci´on Excepciones 3 El texto introducido est´a mal formateado Comentarios N&A Caso de uso Ruta para ir a un local Descripci´on Se muestra la ruta en Google Maps de c´omo ir al local desde la ubicaci´on del usuario Precondici´on Secuencia normal 1 El usuario pulsa el´ıcono de Google Maps de un local en la pantalla de inicio o en la pantalla del local 2 El sistema le redirige a Google Maps con la ruta para ir al local Postcondici´on El usuario puede navegar para llegar a la ruta ofrecida en la aplicaci´on de Google Maps Excepciones Comentarios N&A 32 CAP´ ITULO 3. DESARROLLO DE LA APP -id evento: identificador ´unico para cada evento. -id local: dado que cada evento est´a asociado a un solo local, represento esta relaci´on a˜nadiendo dicha clave for´anea a la tabla eventos. -nombre evento:nombre del evento, no teniendo porqu´e ser ´unico. -descripci´on: varchar que indica aspectos principales del evento y mensajes publicitarios del local sobre el evento. - fecha: timestamp que representa la fecha de celebraci´on del evento, usada para filtrar entre eventos que ya han sucedido y aquellos que tienen que suceder. -Edad min: edad m´ınima para poder asistir. -Edad max: edad m´axima para poder asistir. -Precio: precio del evento, en el futuro se a˜nadir´an otros atributos y relaciones como precio de las diversas bebidas o diferentes modalidades de precio. Tabla de publicaciones Contiene la informaci´on de publicaciones de usuarios. Sus atributos son: -id: identificador ´unico para cada publicaci´on . - id user: dado que cada publicaci´on la realiza un solo usuaria, represento esta relaci´on a˜nadiendo dicha clave for´anea(id del usuario) a la tabla publicacion. -fecha: timestamp que representa la fecha de publicaci´on. -Descripci´on:varcha que indica la descripci´on de la publicaci´on. -n clicks: n´umero de clicks para indicar la popularidad de la publicaci´on. En el futuro se a˜nadir´an m´as atributos en este sentido para personalizar m´as las recomendaciones de publicaciones. A partir de ahora voy a introducir las tablas de las diversas relaciones que no son 1:n. Hay diversas maneras de representar a estas relaciones m:n, pero he preferido usar tablas con las claves for´aneas de cada tabla, m´as, en algunas ocasiones, atributos distintivos de la relaci´on. Tabla de r ha leido el mensaje Indica si un usuario ha leido el mensaje. Sus atributos son: -id user: identificador ´unico para cada publicaci´on . -id mensaje: id del mensaje que se ha leido Tabla de r pertenece user chat Indica si un usuario pertenece a un chat. Sus atributos son: -id user: identificador del usuario(clave for´anea). -id chat: identificador del chat(clave for´anea). -Fecha: timestamp que indica el momento en el que el usuario comenz´o a formar parte del chat. Tabla de r pertenece user chat local Igual que antes pero con chats de locales. Tabla de r relaciones Indica si un usuario es relaciones p´ublicas de un local. Estos aparecer´an en la p´agina del local para que los usuarios puedan comunicarse con ellos. De momento, la gesti´on de los eventos e informaci´on de locales est´a pensada de manera centralizada, aunque en versiones posteriores se espera una descentralizaci´on, y estos podr´an a˜nadir eventos y modificar aspectos de eventos y del local. Aunque tambi´en he a˜nadido una tabla r gestor local que indica lo dicho aunque no se le da el uso esperado en esta versi´on. Sus atributos son: -id relacion: identificador del usuario relaciones(clave for´anea). -id local: identificador del chat del local(clave for´anea). Tabla de r va a evento Indica si un usuario va a un evento. Sus atributos son: -id user: identificador del usuario(clave for´anea). -id evento: identificador del evento(clave for´anea). Tabla de r seguidor seguidor 3.4. ARQUITECTURA 33 Indica relaci´on entre un seguidor y un seguido -id seguidor: identificador del usuario seguidor(clave for´anea). -id seguido: identificador del usuario seguido(clave for´anea). Tabla de r ha estado local Indica si un usuario ha estado en un local. -id user: identificador del usuario que ha estado(clave for´anea). -id local: identificador del local(clave for´anea). -fecha: timestamp que indica cuando estuvo el usuario. Tabla de descripci´on A pesar de ser una relaci´on 1:n, usada para no ralentizar las operaciones en la BBDD y la aplicaci´on. -id user: identificador del usuario (clave for´anea). -contenido: contenido de la descripci´on. Tabla de foto perfil Tabla para mostrar la ruta de la foto de perfil de cada usuario. -id user: identificador del usuario (clave for´anea). -id foto perfil: varchar con la ruta del perfil en el servidor. Tabla de foto publicacion A pesar de ser una relaci´on 1:n, usada para no ralentizar las operaciones en la BBDD y la aplicaci´on. -id publicacion: identificador de la publicaci´on (clave for´anea). -id foto publicacion: ruta de la foto de la publicaci´on.En el futuro se podr´an dise˜nar diversos aspectos para poder introducir m´as fotos en una publicaci´on, etiquetas, comentarios, entre otras. Tabla de registro chat user Tabla usada para llevar el registro de la fecha en la que el usuario es la ´ultima vez que visualiza un chat. Usada con el fin de mostrar los mensajes no le´ıdos del chat por el usuario. -id user: identificador del usuario (clave for´anea). -id chat: id del chat de usuario (clave for´anea). fecha ultimo acceso: timestamp que refleja la fecha del ´ultimo acceso. Tabla de puntuaci´on evento Tabla usada para llevar el registro de la puntuaci´on realizada por los usuarios sobre un evento. -id user: identificador del usuario (clave for´anea). -id evento: identificador del evento que es puntuado (clave for´anea). -puntuacion : double que indica la puntuaci´on del evento. Tabla de puntuaci´on local Tabla usada para llevar el registro de la puntuaci´on realizada por los usuarios sobre un local. -id user: identificador del usuario (clave for´anea). -id local: identificador del local que es puntuado (clave for´anea). -puntuacion evento : double que indica la puntuaci´on del local. Se presentan en la siguientes figuras 3.2 y 3.3 la implementaci´on de la BBDD con o sin relaciones 3.4. Arquitectura Se presentan los patrones de dise˜no usados m´as importantes en la aplicaci´on. Los patrones de dise˜no son soluciones elegantes a problemas de software que son eficientes, generales y que favorecen el c´odigo de calidad y estructurado. 3.4.1. Patr´on Singleton El patr´on Singleton [16] consiste en tener solo una instancia de clase de dicho objeto, es decir, en caso de no haber sido creado dicho objeto se crea con un constructor privado, y en caso contrario, se 34 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.2: Diagrama de BBDD sin relaciones devuelve la instancia del objeto ya creado. En mi proyecto se usa en varias ocasiones: para tener una instancia de la sesi´on y adem´as esta tiene un atributo que es usuario de la sesi´on. Una vez se inicia la sesi´on, se crean ambos, para as´ı poder acceder a la variable id del usuario, necesaria a la hora de obtener informaci´on de la BBDD. Por a˜nadidura, se usa para mejorar la eficiencia en ambas pantallas de un chat concreto: tanto de usuario como de locales. Esto se debe a que esta pantalla se est´a actualizando continuamente para mostrar los mensajes del chat actualizado. Entonces, en vez de crear cada vez que se realiza dicha petici´on una RequestQueue con el consiguiente consumo de memoria y p´erdida de eficiencia, se usa el patr´on Singleton para reutilizar la cola de peticiones en cada actualizaci´on de los mensajes. Se presentan en las siguientes figuras 3.4, 3.5 y 3.6 los diagramas de clase de dichos ejemplos. 3.4.2. Modelo Vista Presentador El modelo Vista Presentador [19] es un patr´on de dise˜no que sirve para separar la interacci´on con el usuario y la vista con respecto al modelo y tratamiento de los datos mientras que el presentador se encarga de coordinar ambos. Usado en las primeras iteracciones puesto que en primera instancia, se pens´o en usar la aplicaci´on con almacenamiento local. En este patr´on el modelo controlaba las operaciones CRUD sobre la base de datos local SQLite. El problema era que de este modo no se permit´ıa la interacci´on entre diferentes usuarios. Adem´as el almacenamiento de la informaci´on solo se permit´ıa de forma local y no permanentemente en un servidor. Y, del mismo modo, la vista se encarga de la interacci´on con el usuario, obteniendo peticiones y d´andole informaci´on. En la versi´on final, se usa c´odigo en PHP externo para comunicarse con la base de datos y realizar las consultas SQL determinadas. Desde Android se hacen 3.5. DISE ˜ NO Y PANTALLAS DE LA APLICACI ´ ON 35 Figura 3.3: Diagrama de BBDD con relaciones dichas request al servidor y este solo se dedica a parsear los datos. 3.4.3. Patr´on ViewHolder El patr´on ViewHolder 16es un patr´on de dise˜no que se usa en Android para crear lista din´amicas de una manera eficiente. En primer lugar, tiene los siguientes elementos: el recyclerView, que es el ViewGroup que se encarga de contener a las vistas de tus datos. Cada elemento se define por un objeto contenedor de vistas (viewholder), cuando este se crea la recyclerView lo vincula a sus datos (se extiende de Recyler.ViewHolder). La recyclerView realiza esta vinculaci´on mediante llamadas al adaptador. En nuestra aplicaci´on este patr´on se usa en todos los usos de en los que aparezcan listas (en la pantalla de inicio, locales, perfil, entre otras). Se presenta en la figura 3.7 el diagrama de clases de un ejemplo de uso en la aplicaci´on. 3.5. Dise˜no y pantallas de la aplicaci´on En este apartado se exponen mediante diagramas de clase y de interacci´on las principales actividades y componentes de c´odigo. 16https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=es-419 36 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.4: Patron singleton 1 3.5.1. Pantalla de login y registrarse Esta es la pantalla de entrada de la aplicaci´on. Para hacer uso de las funcionalidades de la aplicaci´on el usuario debe hacer login. Para ello, debe tener una cuenta, en caso de no tenerla debe registrarse. Para iniciar sesi´on, el usuario introduce su nombre y contrase˜na y pulsa login, y la aplicaci´on crea el singleton que lleva como par´ametros a estos (en caso de que el usuario y contrase˜na sean v´alidos) y el id devuelto por la BBDD que identifica al usuario para todas las operaciones. Para la comprobaci´on de que el usuario y la contrase˜na sean correctas, se hace una request a login.php, que est´a alojado en el servidor que almacena los archivos de la aplicaci´on, y este devuelve un JSON. Dicho Json contiene la respuesta de si es v´alida, en caso de ser v´alida se accede a InicioActivity; en caso contrario, se indica un mensaje de error, al igual que si el formato de los datos introducidos no es correcto. Al mismo tiempo, en caso de registrarse, durante el registro hay que introducir el nombre, contrase˜na, correo y tel´efono. Una vez introducidas el sistema valida que los datos son correctos llamando al igual que antes a un archivo PHP que se conecta con la base de datos remota, insert user.php, que comprueba si el nombre y el correo registrado no estaban ya registrados, y si no, inserta el usuario en la tabla de usuarios de la BBDD; este devuelve un Json y se pasa a InicioActivity. Se adjunta un diagrama de secuencia con dichas acciones en la figura 3.8 . Adem´as, se adjuntan ambas pantallas en la figura 3.9. 3.5.2. Pantalla de inicio Pantalla en la que el usuario entra despu´es de iniciar sesi´on o registrarse. A esta tambi´en se puede acceder desde el men´u de navegaci´on de abajo. En esta pantalla vemos 4 listas en forma de recyclerviews: la 1, sitios en los que has estado, que indica los locales en los que el usuario ha estado y la fecha en las que estuvo, se puede pinchar a ellos para acceder a la p´agina de local; la 2, recomendados para ti, aparecen los locales recomendados para el usuario seg´un sus gustos y los lugares en los que ha estado con el motor de recomendaci´on; la 3, sitios en los que has en estado tus amigos, historial de locales de los usuarios a los que se sigue y el usuario que ha ido a dicho local y la fecha; la 4, lista de publicaciones de amigos, ordenadas por fecha las publicaciones de los usuarios a los que se sigue, se puede acceder pinchando a ellas. Las 3 primeras listas van acompa˜nadas de un ´ıcono de Google Maps 3.5. DISE ˜ NO Y PANTALLAS DE LA APLICACI ´ ON 37 Figura 3.5: Patron singleton 2 que redirige la aplicaci´on a Google para mostarte la ruta desde tu ubicaci´on hasta el lugar donde se encuentra el local pulsado. Para obtener dichos datos, primeramente, la lista de sitios se obtiene haciendo un request al servidor con el archivo fetch sitios han estado en el que devuelve un Json con la informaci´on deseada. Dicho json se parsea para obtener la lista de locales. Despu´es de ello, se llama al m´etodo llenarRecyclerSitiosHasEstado() que crea un adaptador siguiendo el patr´on ViewHolder ya explicado, y despu´es se fija al recyclerView correspondiente. Asimismo, la informaci´on restante se accede de una manera similar: los sitios recomendados con el sistema de recomendaci´on que ya se explicar´a; los sitios en los que han estado tus amigos con fetch sitios en los que han estado seguidos.php y creando despu´es el adaptador SitiosHanEstadoAmigosAdapter y fijando el recyclerView correspondiente; y la lista de publicaciones con fetch publicaciones inicio.php y PublicacionesAdapterInicio como adaptador. Del mismo modo, cada elemento tiene un listener asociado de modo que si se pulsa se accede al local o a la publicaci´on correspondiente. Adem´as si se desliza la pantalla hacia abajo desaparece el men´u de navegaci´on inferior y este vuelve a aparecer si se desliza hacia arriba. Se muestra un diagrama de secuencia asociado en la figura 3.10. Adem´as, se muestra la pantalla en la figura 3.11. 3.5.3. Pantalla de locales Pantalla en la que se muestra la informaci´on general del local: su nombre, imagen de perfil y descripci´on. El bot´on de he estado sirve para indicar que un usuario ha estado en dicho local. Tenemos diferentes listas en forma de recyclerViews asociadas al local: primeramente, aparece una lista con los seguidos del usuario que han estado en dicho local; una lista con los usuarios que son relaciones del local para poder contactar y pedir m´as informaci´on; lista de eventos venideros que se celebran en el local, a los que se puede pinchar para ir al evento concreto y obtener m´as informaci´on suya; y para finalizar, la lista de chats-foro asociados al local en los que se puede participar. Para obtener dicha informaci´on, primero, se llama al m´etodo obtenerInfoGeneral() en el que se conecta con el archivo fetch info local.php, donde se obtene el nombre y la descripci´on del local, adem´as de la localizaci´on. La lista de amigos que han estado se accede por medio de fetch amigos han ido local.php 38 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.6: Patron singleton 3 y usando el adaptador AmigosHanEstadoAdapter; los relaciones, con fetch relaciones local.php y el adaptador RelacionesAdapter; y la lista de eventos de la misma manera. Por otro lado, si se pulsa el boton de ha estado se introduce el usuario en la tabla de la BBDD en la que se indica que el usuario ha estado en el local. Adem´as, si se pulsa a cada evento o usuarios, este accede a la pantalla del evento o a la pantalla del perfil del usuario. El bot´on de Maps una vez pulsado redirige a la aplicaci´on de Google Maps que muestra la ruta para ir al local desde la ubicaci´on del usuario. El bot´on de puntuar lleva a la actividad de PuntuarLocalActivity, en ella el usuario puede puntuar el local. Para evitar que un usuario pueda realizar infinitas votaciones, se limita el n´umero de votaciones a 3. Una vez introducida la votaci´on, en una escala del 1 al 10, se valida, llamando a insert puntuacion local.php, que registra la votaci´on en la BBDD. Se puede volver al local, pulsando al bot´on de atr´as de la actividad de puntuar. Del mismo modo, cada vez que se accede a esta actividad se actualiza el n´umero de clicks del local, actualiz´andose en la BBDD. Adem´as, si el usuario pincha el bot´on de Mostrar chats se accede a la actividad de MostrarChatsLocalActivity, en ella se muestran los chats del local a los que se puede acceder, pulsando se accede a la pantalla de dicho chat, que ahora se explicar´a. Se muestra el diagrama de secuencia de la actividad en la figura 3.12. Se muestran las pantallas en la siguiente figura 3.13. 3.5.4. P´agina de perfil Esta p´agina compuesta por 4 actividades, en todas ellas tenemos los siguientes elementos: en la parte de arriba a modo de BarLayout tenemos la foto del perfil, el nombre del usuario y su descripci´on; el bot´on de seguir (en caso de ser nosotros aparece el bot´on de Mi perfil) o siguiendo para dejar de seguir si el usuario lo desea pulsando dicho bot´on; seguidos de los botones de siguiendo y seguidores y de publicaciones y lugares. Estos ´ultimos 4 llevan a diversas actividades, la primera es el que aparece por primera vez cuando vamos al perfil del usuario, que consiste en la lista de publicaciones; la 2, la lista de lugares en los que ha estado; y la 3 y 4, la lista de seguidores y seguidos respectivamente. Para poder acceder a los datos generales, se llama en el primer caso a obtenerListaPublicaciones() que llama a fetch publicaciones usuario.php. Primeramente, se accede a la info general con el nombre y la descripci´on, adem´as, en caso de tener foto de perfil se recupera devolviendo la ruta de la foto del perfil, esta se carga con la ayuda de la librer´ıa Picasso. De la misma manera, se accede a la lista 3.5. DISE ˜ NO Y PANTALLAS DE LA APLICACI ´ ON 39 Figura 3.7: Patron ViewHolder ejemplo de publicaciones y se llama a llenarRecyclerPublicaciones() que crea un PublicacionesAdapter con el patr´on ViewHolder. En los casos de la pantalla de lugares, siguiendo y seguidores, se opera de manera similar, primero se realiza un request al archivo PHP correspondiente del servidor, posteriormente se accede a la info general de la misma manera, y luego se obtiene la lista correspondiente creando el adaptador adecuado(LugaresAdapter o UsuariosAdapter). En caso de ser el perfil del usuario propio, si el usuario pulsa el bot´on Mi perfil este accede a la actividad PerfilConfiguracionActivity, que permite cambiar la descripci´on y la foto de perfil de usuario, que env´ıa requests a sus correspondientes archivos PHP y sube la imagen al servidor si corresponde. Se muestran dichas pantallas en la figura 3.14, en la figura 3.15 la configuraci´on del perfil y en la 3.16 el resultado del cambio de configuraci´on. 3.5.5. P´agina de publicaci´on En la parte superior de la p´agina tenemos un bot´on de atr´as que finaliza la actividad, la imagen de perfil y el nombre de usuario. Despu´es, el contenido de la publicaci´on con su correspondiente descripci´on. En posteriores versiones se a˜nadir´a la opci´on de comentar. En primer lugar, se accede a la informaci´on general de la manera usual, llamando a los archivos PHP (fetch info publicacion.php), donde se obtiene el nombre del usuario, la descripi´on del usuario, adem´as de la ruta de la foto de perfil y la ruta de la publicaci´on que est´a alojada en el servidor. Si se pulsa a la foto de perfil se pasa a la actividad del perfil del usuario que es autor de la publicaci´on. Finalmente, se actualiza, el n´umero de clicks de la publicaci´on en la BBDD llamando a update publicacion clicks.php. Se muestra dicha pantalla en la figura 3.17. 3.5.6. P´agina de evento concreto En dicha p´agina se muestra la informaci´on general del evento en la parte de arriba: nombre, fecha, descripci´on, edad m´ınima y m´axima y precio. Adem´as de un bot´on para indicar que vas a ir y que as´ı 40 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.8: Diagrama de secuencia Login lo puedan ver los dem´as usuarios. Adicionalmente, aparece una lista de los usuarios que van a ir al evento. Primero, se accede a la informaci´on general con el m´etodo obtenerInfoGeneral() en el que se llama a fetch info evento concreto.php que devuelve un json con la informaci´on general. Posteriormente, a fetch users que van a evento.php en la que se devuelve la lista con los usuarios que van y se crea el adaptador adecuado, UsuariosVanAEstarAdapter. Se puede pulsar a cada usuario accediendo a la pantalla de su perfil. Por a˜nadidura, el bot´on Voy a ir introduce al usuario en la lista de la BBDD de los usuarios que van a ir en caso de no estar previamente. En caso contrario, se elimina el user del evento. Se realiza dicha funcionalidad por medio de los archivos PHP: Delete from fuser va a fevento y insert user va a evento. Adem´as, se puede introducir la opini´on del usuario sobre el evento, el usuario pulsa el bot´on de puntuar, este abre la actividad de PuntuarEventoActivity, en la que el usuario introduce la puntuaci´on, pudiendo introducir solo una(se comprueba en el PHP). Se muestra dicha pantalla en la figura 3.18 3.5.7. P´agina de chats de usuario En dicha p´agina se muestra la lista de chats de usuario a los que pertenece, que aparecen en orden de mensajes recibidos de m´as de recientes, adem´as del n´umero de mensajes no le´ıdos de cada chat. Al pulsar a estos se accede al chat en concreto. 3.5. DISE ˜ NO Y PANTALLAS DE LA APLICACI ´ ON 41 (a) (b) (c) Figura 3.9: Paginas de login y registro 48 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.17: Pantalla publicaci´on concreta Una vez el usuario empieza a teclear el sistema le ofrece b´usquedas que se ajusten a los filtros introducidos. Para realizar esto se a˜nade un listener al texto de b´usqueda que se activa una vez el usuario introduce algo al texto. Entonces, se realiza una b´usqueda en la BBDD por medio del archivo fetch busqueda autocomplete.php en el que se devuelve una lista de locales que coinciden con lo pedido. Despu´es se crea el LocalesAdapterBusqueda, el adaptador de ello, y se asocia al recycler de b´usqueda. El usuario puede pulsar cualquier local de dicha lista para acceder a ´el, o tambi´en puede buscar el local directamente y pulsar el bot´on de buscar. Se adjunta un diagrama de actividad de la pantalla en la figura 3.25. Se adjunta la pantalla en la figura 3.26. 3.5.14. Men´u de navegaci´on inferior Compuesto por los´ıconos de home, buscador, compartir, perfil y chat. Estos´ıconos una vez pulsados llevan a las actividades inicio, buscador, compartir,perfil del usuario (se pasa el id del usuario que lo tenemos gracias al singleton creado al inicio de la sesi´on) y chats de usuario. Esta barra de navegaci´on forma parte de estas 5 pantallas principales adem´as de la pantalla de locales. 3.6. Motor de recomendaci´on Se han implementado diferentes motores de recomendaci´on. Se usan para los locales recomendados de la p´agina de inicio. Si bien, para futuras versiones se extender´an para ofrecer recomendaciones en cualquier pantalla, adem´as de ser usado en el buscador para personalizar las b´usquedas y ofrecer en la lista de palabras sugeridas aquellas que el usuario requiera, adem´as de no solo ofrecer locales sino 3.6. MOTOR DE RECOMENDACI ´ ON 49 (a) (b) (c) Figura 3.18: Pantalla de eventos 50 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.19: Diagrama de secuencia chats tambi´en eventos. Presentamos estos 2 motores 3.6.1. Recomendaci´on basada en popularidad Se implementa sin necesidad de c´odigo adicional. Para ello, se usa el campo de la BBDD de locales de n´umero de clicks, que se actualiza cada vez que un usuario acceda a la pantalla del local en concreto. Entonces, en la consulta SQL esta se ordena por este campo. En el motor final se usa para solventar diversos problemas iniciales que tiene el motor basado en un filtro colaborativo que ahora presentar´e en profundidad. 3.6.2. Filtro colaborativo En primer lugar, el filtro colaborativo [17] [15] 17 consiste en el proceso de filtrar objetos por medio de las opiniones de otras personas, en nuestro caso, los objetos corresponden a locales. Para ello, se usan las opiniones m´as adecuadas seg´un el tipo de filtro para ofrecer recomendaciones personalizadas. Puede haber diferentes tipos de ratings, desde num´ericos hasta binarios, adem´as estos pueden obtenerse de diversas formas, pueden ser expl´ıcitos como es el caso de nuestra aplicaci´on, es decir, preguntando directamente la opini´on al usuario; o impl´ıcitos, que son inferidos gracias a la acci´on de los usuarios. 17https://medium.com/geekculture/recommender-system-a83668653d95 3.6. MOTOR DE RECOMENDACI ´ ON 51 Figura 3.20: Lista de chats del usuario con los mensajes no le´ıdos En nuestro caso, nos hemos centrado en la puntuaci´on que expresan los usuarios sobre los locales, sin embargo, en futuras versiones de la aplicaci´on se incrementar´a la cantidad de informaci´on que se tiene sobre el usuario, con info como d´onde hace click, cu´anto tiempo pasa en cada pantalla o geolocalizaci´on para saber en qu´e locales suele estar para poder ofrecer recomendaciones m´as precisas. El filtro colaborativo est´a estudiado y encaja muy bien en diferentes escenarios que cumple varias condiciones: relativas a la distribuci´on de los datos: hay muchos objetos, hay muchos ratings por objeto, hay m´as puntuaciones que objetos que recomendar y cada usuario valora m´ultiples objetos. Nuestra aplicaci´on una vez en marcha con el n´umero de usuarios esperados cumple los 4 aspectos. Relativas a la esencia de los datos: para cada usuario en la comunidad, hay otros usuarios que tienen gustos similares y la evaluaci´on de objetos requiere gusto personal. Esto se cumple en nuestra aplicaci´on puesto que los lugares en los que sale la gente tienen un componente emocional muy alto. Relativas a la persistencia de los datos: los objetos permanecen y los gustos igual. En general, los locales suelen permanecer y los gustos cambian, pero van ligados a tendencias que se prolongan durante varios a˜nos. El filtro colaborativo se basa en la asunci´on de que la gente con gustos similares puntuar´a de manera parecida. El filtrado basado en contenido se basa en que los objetos con caracter´ısticas semejantes ser´an valorados de una manera parecida. De hecho, este tipo de filtrado puede sobre especializarse, por lo general, recomienda objetos que encajan exactamente con las caracter´ısticas espec´ıficas del usuario. El filtrado colaborativo tiene la propiedad de novedad que dirige al usuario a objetos m´as inesperados 52 CAP´ ITULO 3. DESARROLLO DE LA APP (a) (b) Figura 3.21: Pantalla de chat concreto con la de a˜nadir usuario al chat 3.6. MOTOR DE RECOMENDACI ´ ON 53 (a) (b) (c) Figura 3.22: Pantalla de compartir publicaci´on 54 CAP´ ITULO 3. DESARROLLO DE LA APP (a) (b) (c) Figura 3.23: Pantalla de crear chat de usuario y su resultado 3.6. MOTOR DE RECOMENDACI ´ ON 55 (a) (b) (c) Figura 3.24: Pantalla de crear chat de local y su resultado 56 CAP´ ITULO 3. DESARROLLO DE LA APP Figura 3.25: Diagrama de secuencia buscador y diferentes.[9] Hay dos tipos de filtros colaborativos: los basados en memoria que requieren que todos los ratings est´en almacenados en memoria, y los basados en modelos que periodic´amente crean un resumen de las puntuaciones offline. Nos centramos en los primeros, aunque estos tienen el incoveniente de no escalar para un gran n´umero de usuarios. Por ello, en versiones futuras se tendr´a un modelo h´ıbrido en el que se har´an ciertas precomputaciones. Los dos algoritmos m´as famosos de filtro colaborativo son: los vecinos m´as cercanos basados en usuarios y en objetos. En el primero de ellos, los vecinos m´as cercanos basada en el usuario se generan predicciones de puntuaciones basadas en las puntuaciones de usuarios similares. Primero para generar la vecindad de los usuarios parecidos se usan diferentes m´etodos, el m´as popular de ellos es la similitud del coseno 18 [5]. Se define de esta manera: dados vectores A, B, sim coseno(A, B) = cos(θ) = A·B ||A||||B|| =Pn i=1 AiBi pPn i=1 A2 ipPn i=1 B2 i Entonces, se cogen los N m´as similares de dicha m´etrica. Los que tienen similitud −1 indican exactamente lo contrario, 0 no correlaci´on y 1 exactamente iguales. 18https://www.sciencedirect.com/topics/computer-science/cosine-similarity 3.6. MOTOR DE RECOMENDACI ´ ON 57 (a) (b) (c) Figura 3.26: Pantalla del buscador 64 CAP´ ITULO 4. INTERACCI ´ ON CON USUARIOS (a) (b) Figura 4.5: Prototipo Cap´ıtulo 5 Conclusiones y futuro 5.1. Conclusiones En este Trabajo Fin de Grado se ha desarrollado una aplicaci´on m´ovil que da informaci´on sobre los locales de ocio nocturno y provee herramientas para poder conectar a sus usuarios. Los usuarios pueden chatear por medio de chats de usuario con otros usuarios adem´as de por chats-foro asociados a los locales que frecuentan. Adem´as pueden encontrar la mejor informaci´on de los locales de ocio de una manera personalizada, directa o indirecta. Por otro lado, pueden interactuar con sus amigos de manera indirecta publicando sus pensamientos o im´agenes, entre otras acciones. Dicha aplicaci´on se ha podido desarrollar gracias a Android Studio, herramienta por excelencia para el desarrollo de aplicaciones Android que permite el uso de Java, lenguaje orientado a objetos donde se han usado diferentes patrones de dise˜no. Para la parte de la gesti´on de datos con la BBDD se ha usado PHP que intercomunica el programa en Android con la BBDD de una manera segura y consistente. Adem´as de usar Python para construir el motor de recomendaci´on. Durante el desarrollo se han cumplido los objetivos principales del mismo, y adem´as se ha podido percibir la complejidad que tiene su desarrollo debido a que son necesarios conocimientos de materias diversas: bases de datos, programaci´on orientada a objetos, inteligencia artificial, ingenier´ıa del software, Java, Python, PHP, gesti´on empresarial, ciberseguridad, dise˜no de sistemas interactivos, entre otras. Partyingout! recoge estos conocimientos obtenidos durante la carrera y puestos en pr´actica con este trabajo. Conclusions In this End of Degree Project a mobile application has been developed to give information about clubs and it supports tools to connect their users with each other. Users can chat by user chats with other users in addition to chats-forum associated with the clubs they tend to go. Besides, they can find the best information about clubs in a personalized way, directly or indirectly. On the other hand, they can interact with their friends in an indirect way by publishing their thoughts, images among others. Such application has been developed thanks to Android Studio, tool by excellence to build Android app that supports Java use, object oriented language where different design patterns have been used. To manage the database PHP has been to communicate Android with the database in a safe and consistent way. Apart from using Python to build the recommendation engine. During the development the main objectives have been achieved , furthermore, the complexity of its development can be perceived because it is required knowledge from different subjects such as databases, 65 66 CAP´ ITULO 5. CONCLUSIONES Y FUTURO object oriented design, artificial intelligence, software engineering, Java, Python, PHP, business management, interactive system design, among others. PartyingOut! uses that knowledge learnt throughout the degree and put into practice with these project. 5.2. Trabajo futuro En primer lugar, cabe destacar el gran n´umero de funcionalidades que contiene nuestra aplicaci´on. A pesar de ello, se puede ampliar, en este apartado se muestran una serie de nuevas funcionalidad para la mejora del proyecto futuro. A˜nadir la funcionalidad de crear fiestas. El usuario podr´a crear fiestas tanto p´ublicas como privadas, en las privadas podr´a restringir que la informaci´on sobre la fiesta solo lo puedan ver las personas que ´el elija. La posibilidad de crear chats asociados al local que no sean todos p´ublicos, es decir poder a˜nadir privados en los que puedan hablar solo grupos de personas de una manera restringida. Dar la funcionalidad de notificaciones, sobre eventos que puedan interesar al usuario tales como mensajes que recibe, recomendaciones de locales o la actividad de amigos. Tener una mayor informaci´on sobre la actividad del usuario para as´ı poder tener m´as datos y poder realizar por ello mejores recomendaciones personalizadas al usuario. Saber la ubicaci´on exacta del usuario para comprobar qui´enes est´an en un local concreto u ofrecerle mejores recomendaciones a tiempo real dependiendo de qui´enes est´an en otros locales. Ampliar la BBDD. En la actualidad, la cantidad de informaci´on es muy limitada. Hacer un estudio y poder ampliarla, tanto de una manera centralizada como se hace ahora, como de una forma m´as descentralizada para ahorrar recursos. Poder enviar archivos en chats. Estos archivos pueden ser variados desde im´agenes hasta v´ıdeos, pasando por un pdf sobre la informaci´on de un evento. Poder pagar entradas por medio de la aplicaci´on, y as´ı compartirlo por la aplicaci´on a cambio de que los locales ofrezcan descuentos por ello. Aumentar la capacidad del servidor. En la actualidad, tenemos un servidor gratuito, por lo que la velocidad es limitada. Por ello, a medida que aumenten usuarios ser´a primordial tener un buen ancho de banda del servidor y capacidad de almacenamiento mayor para guardar archivos. El sistema de recomendaci´on actualmente se centra en proveer recomendaciones de locales, esto se puede expandir a sugerir eventos y personas que puedan resultar interesantes para el usuario. Posibilidad de subir archivos como fotos o v´ıdeos a las pantallas de locales o eventos. ´ Indice de figuras 2.1. Jaleoapp ............................................ 12 2.2. Bclever ............................................. 13 2.3. Instagram ........................................... 14 2.4. Meetup ............................................. 14 2.5. Fever .............................................. 15 2.6. Exceed ............................................. 16 2.7. Eventbrite ........................................... 16 3.1. Modelo entidad-relaci´on BBDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2. Diagrama de BBDD sin relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.3. Diagrama de BBDD con relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.4. Patronsingleton1 ....................................... 36 3.5. Patronsingleton2 ....................................... 37 3.6. Patronsingleton3 ....................................... 38 3.7. PatronViewHolderejemplo .................................. 39 3.8. Diagrama de secuencia Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.9. Paginasdeloginyregistro .................................. 41 3.10. Diagrama de secuencia inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.11. Pantalla de inicio, si se desliza hacia arriba aparece el men´u de navegaci´on . . . . . . . 43 3.12. Diagrama de secuencia local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.13. Pantalla del local, opini´on, google Maps y chats del local . . . . . . . . . . . . . . . . . 45 3.14. Pantalla del perfil de publicaciones, seguidos, seguidores y lugares . . . . . . . . . . . . 46 3.15. Pantalla configuraci´on del perfil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.16. Resultado del cambio de configuraci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.17. Pantalla publicaci´on concreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.18.Pantalladeeventos ...................................... 49 3.19. Diagrama de secuencia chats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.20. Lista de chats del usuario con los mensajes no le´ıdos . . . . . . . . . . . . . . . . . . . . 51 3.21. Pantalla de chat concreto con la de a˜nadir usuario al chat . . . . . . . . . . . . . . . . . 52 3.22. Pantalla de compartir publicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.23. Pantalla de crear chat de usuario y su resultado . . . . . . . . . . . . . . . . . . . . . . 54 3.24. Pantalla de crear chat de local y su resultado . . . . . . . . . . . . . . . . . . . . . . . . 55 3.25. Diagrama de secuencia buscador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.26.Pantalladelbuscador ..................................... 57 3.27. Diagrama de actividad sistema recomendador . . . . . . . . . . . . . . . . . . . . . . . 59 4.1. Preguntascuestionario1 ................................... 62 4.2. Preguntascuestionario1 ................................... 62 67 68 ´ INDICE DE FIGURAS 4.3. Resultados medio de preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.4. Resultadospreguntas ..................................... 63 4.5. Prototipo ............................................ 64 A.1.Prototipo ............................................ 73 A.2.Prototipo ............................................ 74 A.3.Prototipo ............................................ 74 Bibliograf´ıa [1] Muhammad Ovais Ahmad y col. ((Kanban in software engineering: A systematic mapping study)). En: Journal of Systems and Software 137 (2018), p´ags. 96-113. [2] Ionut Andone y col. ((How age and gender affect smartphone usage)). En: Proceedings of the 2016 ACM international joint conference on pervasive and ubiquitous computing: adjunct. 2016, p´ags. 9-12. [3] Ivet Challenger-P´erez, Yanet D´ıaz-Ricardo y Roberto Antonio Becerra-Garc´ıa. ((El lenguaje de programaci´on Python)). En: Ciencias Holgu´ın 20.2 (2014), p´ags. 1-13. [4] Juyun Cho. ((Issues and Challenges of agile software development with SCRUM)). En: Issues in Information Systems 9.2 (2008), p´ags. 188-195. [5] Najim Dehak y col. ((Cosine similarity scoring without score normalization techniques.)) En: Odyssey. 2010, p´ag. 15. [6] Wadzani Gadzama, Bitrus Joseph y Ngubdo Aduwamai. ((Global smartphone ownership, internet usage and their impacts on humans)). En: ResearchGate (2019). [7] Ted Hagos. Android Studio IDE Quick Reference: A Pocket Guide to Android Studio Development. Apress, 2019. [8] Charles R Harris y col. ((Array programming with NumPy)). En: Nature 585.7825 (2020), p´ags. 357-362. [9] Jonathan L Herlocker y col. ((Evaluating collaborative filtering recommender systems)). En: ACM Transactions on Information Systems (TOIS) 22.1 (2004), p´ags. 5-53. [10] TC Melewar y Nichola Smith. ((The Internet revolution: some global marketing implications)). En: Marketing intelligence & planning (2003). [11] Andrea Mill´an Moreno y col. ((Retrato de la vida nocturna de Madrid)). En: (2019). [12] Fabian Pedregosa y col. ((Scikit-learn: Machine learning in Python)). En: the Journal of machine Learning research 12 (2011), p´ags. 2825-2830. [13] Washington Santillan. ((El teletrabajo en el COVID-19)). En: CienciAm´erica: Revista de divulgaci´on cient´ıfica de la Universidad Tecnol´ogica Indoam´erica 9.2 (2020), p´ags. 65-76. [14] Badrul Sarwar y col. ((Item-based collaborative filtering recommendation algorithms)). En: Proceedings of the 10th international conference on World Wide Web. 2001, p´ags. 285-295. [15] J Ben Schafer y col. ((Collaborative filtering recommender systems)). En: The adaptive web. Springer, 2007, p´ags. 291-324. [16] Krzysztof Stencel y Patrycja Wegrzynowicz. ((Implementation variants of the singleton design pattern)). En: OTM Confederated International Conferences.On the Move to Meaningful Internet Systems”. Springer. 2008, p´ags. 396-406. [17] Lyle H Ungar y Dean P Foster. ((Clustering methods for collaborative filtering)). En: AAAI workshop on recommendation systems. Vol. 1. Menlo Park, CA. 1998, p´ags. 114-129. 69 70 BIBLIOGRAF´ IA [18] Nicolas Viennot, Edward Garcia y Jason Nieh. ((A measurement study of google play)). En: The 2014 ACM international conference on Measurement and modeling of computer systems. 2014, p´ags. 221-233. [19] Yang Zhang y Yanjing Luo. ((An architecture and implement model for Model-View-Presenter pattern)). En: 2010 3rd international conference on computer science and information technology. Vol. 8. IEEE. 2010, p´ags. 532-536. Ap´endice A Anexo A.1. AnexoI: cuestionario general Preguntas cuestionario 1: 1)Cu´anto sueles salir por semana? M´as de 4 3 2 1 Nunca 2) ¿Cu´antas veces sales por discotecas/mes? M´as de 8 7 6 3 2 1 Nunca 3)¿Sabes al lugar/es que vas a ir de antemano? S´ı No 4)¿Sabes por d´onde sale la gente af´ın a ti? S´ı No 5)¿Te gusta conocer gente o estar solo con tu c´ırculo? Conocer gente Estar solo con tu c´ırculo Ambas 6)¿Te gusta ligar en discotecas? S´ı No Depende 7)¿Te gustar´ıa saber d´onde sale la gente que conoces? S´ı 71 72 AP´ ENDICE A. ANEXO No Depende 8)¿Te gustar´ıa poder conocer a la gente que est´a en la discoteca antes de salir? S´ı No Depende 9)¿Te gusta hacer copas o fiestas privadas? S´ı No Depende 10)¿Te gusta asistir a copas o fiestas privadas? S´ı No Depende 11)¿Te gustar´ıa recibir opiniones personalizadas sobre d´onde salir? S´ı No 12)¿Te gustar´ıa saber los precios de antemano de los lugares que frecuentas ? S´ı No 13)¿Usas alguna aplicaci´on que involucre alguna de las anteriores funciones? En caso afirmativo, di cu´al. A.2. AnexoII: cuestionario de usabilidad Respuestas en todas las preguntas del 1 al 7: 1)Creo que Partyingout! es muy complejo 2)Creo que Partyingout! es intuitiva 3)Creo que Partyingout! tiene funciones bien implementadas y coherentes 4)Partyingout! es dif´ıcil de usar 5)Creo que las funciones de Partyingout! son ´utiles 6)Usar´ıa Partyingout! 7)Creo que Partyingout! tiene un dise˜no inconsistente A.3. AnexoIII: Prototipos en Balsamiq Algunos prototipos en Balsamiq en las figuras A.1, A.2 y A.3. A.3. ANEXOIII: PROTOTIPOS EN BALSAMIQ 73 (a) (b) (c) Figura A.1: Prototipo