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}
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}
\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}
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}
\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.
$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)