Many changes. No time for comments.
authorgumartinm <gustavo@gumartinm.name>
Tue, 27 Nov 2012 04:49:59 +0000 (05:49 +0100)
committergumartinm <gustavo@gumartinm.name>
Tue, 27 Nov 2012 04:49:59 +0000 (05:49 +0100)
capitulo4/capitulo4.tex
capitulo5/capitulo5.tex
capitulo6/capitulo6.tex
glosario/glosario.tex
source/PHPWebServiceModel.php

index 45f29ec..0067b18 100644 (file)
@@ -1,6 +1,6 @@
 \chapter{Análisis de las aplicaciones Web y Android}
 
-A lo largo de esta primera sección se intentará explicar de forma detallada todos los requisitos y los casos de uso de las dos aplicaciones de las que se compone este proyecto fin de carrera: la aplicación web y la aplicación basada en Android. Pero antes de seguir adelante pasaremos a describir el sistema que se desea implementar.
+A lo largo de este capítulo se intentará explicar de forma detallada todos los requisitos y los casos de uso de las dos aplicaciones de las que se compone este proyecto fin de carrera: la aplicación web y la aplicación basada en Android. Pero antes de seguir adelante pasaremos a describir el sistema que se desea implementar.
 
 \section{Descripción del sistema}
 
index d92fed8..328deaa 100644 (file)
@@ -274,6 +274,8 @@ Tras la definición del esquema, se puede crear el fichero WSDL que nos permite
 
 Los elementos más importantes del archivo WSDL mostrado en el Listado~\ref{list:WSDL20mobiads}) se explican a continuación.
 
+\cleardoublepage
+
 \subsubsection{Definición del servicio}
 
 La URL para obtener la lista de anuncios en función de las coordenadas GPS es \nolinkurl{http://users.mobiads.gumartinm.name/api/latitude/longitude/gpsads.json}. Para direccionar el servicio, se usa el elemento \emph{service} del WSDL, el cual requiere al menos un elemento hijo \emph{endpoint}. El atributo \emph{address} del elemento \emph{endpoint} es usado para la especificar la URL del servicio como se muestra en el Listado~\ref{list:WSDL20service}) El elemento \emph{endpoint} se usa también para asociar un binding con el servicio mediante el atributo \emph{binding}. El elemento \emph{servicio} también asocia un interfaz con el servicio mediante el atributo \emph{interface}.
index 80bafd4..16d7937 100644 (file)
@@ -15,6 +15,7 @@ Desde el cliente y tras un cambio de posición geográfica de un usuario, el dis
 
 La instancia local URLAuth contiene la dirección donde el servicio Web RESTful (ver sección \ref{cap5:ModeloWSDL}) está a la escucha, en este caso y tal y como dicta Symfony\footnote{Web Services Symfony 1.4: \url{http://symfony.com/legacy/doc/jobeet/1_4/en/15?orm=Doctrine}} es necesario especificar en la propia URL el tipo de dato que deseamos recibir (en este caso, JSON)
 
+\cleardoublepage
 
 \lstset{language=Java, basicstyle=\small, breaklines=true, float=[P], floatplacement={P}, frame=single, captionpos=b, caption={Código para la ejecución de tareas en paralelo}, label={list:JavaUpdateLocation}}
 \lstinputlisting{source/JavaUpdateLocation.java}
@@ -31,6 +32,8 @@ El StringBuilder contiene la respuesta JSON devuelta por el servidor Web. En el
 
 En el Listado~\ref{list:JavaHTTPJSONtreatment}) se observa también la existencia del método sendBroadcast. Habíamos mencionado previamente que la tarea de descarga de anuncios se ejecutaba en segundo plano por parte de un Servicio Android multihilo. Necesitamos un mecanismo para por un lado actualizar la interfaz del usuario mostrando los nuevos anuncios recibidos y por otro generar una notificación en la barra de tareas del dispositivo Android. Para llevar a cabo estos requerimientos se hace uso de un BroadCastReceiver proporcionado por la API Android que notificará a las Activities que escuchen dicho broadcast sobre la necesidad de actualizar los datos que están mostrando al usuario.
 
+\cleardoublepage
+
 \lstset{language=Java, basicstyle=\small, breaklines=true, float=[P], floatplacement={P}, frame=single, captionpos=b, caption={Código para la persistencia de los datos recibidos}, label={list:JavaHTTPJSONtreatment}}
 \lstinputlisting{source/JavaHTTPJSONtreatment.java}
 
@@ -55,10 +58,14 @@ Posteriormente hay que atrapar la petición GET HTTP para tratarla y devolver un
 \lstset{language=PHP, basicstyle=\small, breaklines=true, float=[P], floatplacement={P}, frame=single, captionpos=b, caption={Código para el tratamiento del servicio Web}, label={list:PHPWebServiceActions}}
 \lstinputlisting{source/PHPWebServiceActions.php}
 
+\cleardoublepage
+
 El método que lleva a cabo todo el peso de búsqueda en base de datos de anuncios localizados en las cercanías del usuario es getAdsByGPSAndUserIdAndLanguageId. Si este método no devuelve nada, significa que o bien no hay anuncios en esas coordenadas geográficas o el usuario no se ha subscrito a categorías relacionadas con anuncios localizados en ese área en el cual se encuentra actualmente. El método getParameters() devuelve un array con los parámetros de entrada suministrados en el GET HTTP. En este caso, dichos parámetros se insertan directamente en la URL y fueron definidos en el Listado~\ref{list:PHPWebServiceRouting}) dentro de la entrada url como \emph{longitude} y \emph{latitude}.
 
 El Listado~\ref{list:PHPWebServiceModel}) muestra como haciendo uso del id del usuario dentro del sistema (lo conocemos porque tuvo que hacer previamente \emph{log in} y envía su cookie en cada petición GET HTTP al servicio Web), la latitud y la longitud se puede mediante peticiones a la base de datos averiguar si existen anuncios de interés en las cercanías del usuario. Actualmente el radio de acción al rededor del cual se buscará en la base de datos PostGIS por posibles anuncios de interés se define directamente en el código PHP; en posteriores implementaciones sería posible por ejemplo, que en función de si el servicio es premium o no, el usuario pueda seleccionar el radio de acción al rededor del cual desea que se busquen anuncios en su posición actual.
 
+\cleardoublepage
+
 \lstset{language=PHP, basicstyle=\small, breaklines=true, float=[P], floatplacement={P}, frame=single, captionpos=b, caption={Código para la búsqueda de anuncios en la base de datos PostgreSQL/PostGIS}, label={list:PHPWebServiceModel}}
 \lstinputlisting{source/PHPWebServiceModel.php}
 
@@ -70,5 +77,7 @@ Se requiere de varias peticiones a la base de datos para poder obtener al final
 
 Y finalmente en el Listado~\ref{list:PHPWebServiceView}) se genera el código JSON que será recibido y procesado por la aplicación cliente Android tal y como se mostró en el Listado~\ref{list:JavaHTTPJSONtreatment})
 
+\cleardoublepage
+
 \lstset{language=PHP, basicstyle=\small, breaklines=true, float=[P], floatplacement={P}, frame=single, captionpos=b, caption={Código para la generación de datos en formato JSON}, label={list:PHPWebServiceView}}
 \lstinputlisting{source/PHPWebServiceView.php}
index b1f0df1..f1cf194 100644 (file)
@@ -1 +1,15 @@
 \chapter{Glosario de términos}
+
+Este libro incluye un glosario donde el lector puede encontrar términos y acrónimos que han aparecido en esta memoria de este Trabajo Fin de Carrera. El glosario no pretende incluir todos los términos que aparecen en el libro pero sí pretende aclarar algunos conceptos y dudas que pudieran haber surgido a lo largo de la lectura del mismo.
+
+\vspace{0.5cm}
+
+{\large\textbf{A-GPS:}} El nombre ``A-GPS'' es un acrónimo para \emph{Assisted GPS}. Un sistema GPS autónomo opera únicamente mediante señales de radio provenientes de satélites. Un sistema A-GPS emplea otros recursos (además de las señales de los satélites) para realizar la geolocalización cuando las señales provenientes de los satélites llegan en pésimas condiciones. Sin A-GPS, cuando el entorno no es favorable (por ejemplo, grandes ciudades) el tiempo requerido desde la inicialización de un dispositivo GPS hasta la obtención de un dato fiable sería demasiado elevado. Los dispositivos A-GPS suelen usar conexiones de datos para contactar con servidores centralizados que proporcionan la asistencia necesaria a la hora de calcular rápida y eficazmente la posición, si la conexión de datos no está disponible solo podrá obtenerse la posición geográfica a través de los datos provenientes del sistema GPS autónomo.
+
+{\large\textbf{Eclipse:}} Es un entorno de desarrollo que puede ser extendido mediante el uso de plugins. Está escrito principalmente en Java y puede ser usado para el desarrollo de aplicaciones en Java pero también en otros lenguajes mediante el uso de varios plugins.
+
+{\large\textbf{GPS:}} Las siglas en Inglés del Sistema de Posicionamiento Global, el cual es un sistema basado en la recepción de señales provenientes de satélites que proporcionan la localización bajo cualquier condición meteorológica y en cualquier lugar en o cerca de la Tierra. Este sistema es mantenido por el gobierno de los Estados Unidos y es de acceso libre para cualquiera que disponga de un receptor GPS.
+
+{\large\textbf{Vim:}} Es un editor de texto basado en el editor vi el cual está muy extendido en sistemas Unix. Vim ha sido diseñado para poder ser usado tanto desde una interfaz por línea de comandos como desde un interfaz gráfico. El nombre de ``Vim'' es un acrónimo para ``Vi Improved'' o ``Vi Mejorado'' en castellano porque Vim es una versión extendida del editor vi con muchas características adicionales que ayudan en la edición del código fuente. La interfaz no está basada en menús o iconos si no en comandos dados a través de una interfaz de texto. Existen multitud plugins que facilitan la programación y escritura de código mediante el uso de Vim.
+
+{\large\textbf{WGS:}} Son las siglas de \emph{World Geodetic System}, el cual es un estándar para cartografía, geodesia y navegación. La última revisión es conocida como WGS 84 y esquemas anteriores incluyen WGS 72, WGS 66 y WGS 60. WGS 84 es el sistema de coordenadas usado por el Sistema de Posicionamiento global o GPS.
index 8b1a210..12f3c13 100644 (file)
@@ -5,10 +5,8 @@ public function getAdsByGPSAndUserIdAndLanguageId(array $parameters, $userId, $l
     $radius = sfConfig::get('app_radius', '100');
     $adIds = Doctrine_Manager::getInstance()->getCurrentConnection()->fetchColumn(
         SELECT ad_id FROM office INNER JOIN office_ads ON (office_ads.office_id=office.id)
-        WHERE ST_DWithin(office_gps, ST_GeographyFromText(SRID=4326;POINT($longitude $latitude)), $radius)
-        );
-    foreach ($adIds as $adId)
-    {
+        WHERE ST_DWithin(office_gps, ST_GeographyFromText(SRID=4326;POINT($longitude $latitude)), $radius));
+    foreach ($adIds as $adId) {
         $adIds[] = Doctrine_Manager::getInstance()->getCurrentConnection()->fetchOne(
         SELECT ad.id FROM ad INNER JOIN company_category ON (ad.company_categ_id=company_category.id)
         INNER JOIN general_category ON (company_category.general_categ_id=general_category.id)